web-dev-qa-db-fra.com

ruche Expression pas dans le groupe par clé

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

12
chnet

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.

16
QuinnG

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);
9
vanship82

En effet, votre groupe contient plus d’un enregistrement «date_saved». Vous pouvez transformer ces enregistrements ‘date_saved’ en tableaux et les sortir.

0
Y.Wang