Je crée une table dans Hive. Elle contient les colonnes suivantes:
id bigint, rank bigint, date string
Je veux obtenir un rang moyen par mois. Je peux utiliser cette commande. Ça marche.
select a.lens_id, avg(a.rank)
from tableA a
group by a.lens_id, year(a.date_saved), month(a.date_saved);
Cependant, je souhaite également obtenir des informations sur les dates. J'utilise cette commande:
select a.lens_id, avg(a.rank), a.date_saved
from lensrank_archive a
group by a.lens_id, year(a.date_saved), month(a.date_saved);
Il se plaint: Expression Not In Group By Key
Le message d'erreur complet doit être au format Expression Not In Group By Key [value]
.
Le [value]
vous indiquera quelle expression doit figurer dans le Group By
.
En regardant les deux requêtes, je dirais que vous devez ajouter a.date_saved
explicitement au Group By
.
Une balade consiste à placer le champ supplémentaire dans un collect_set et à renvoyer le premier élément de l'ensemble. Par exemple
select a.lens_id, avg(a.rank), collect_set(a.date_saved)[0]
from lensrank_archive a
group by a.lens_id, year(a.date_saved), month(a.date_saved);
En effet, votre groupe contient plus d’un enregistrement «date_saved». Vous pouvez transformer ces enregistrements ‘date_saved’ en tableaux et les sortir.