webentwicklung-frage-antwort-db.com.de

hive-Ausdruck nicht in Gruppe nach Schlüssel

Ich erstelle eine Tabelle in Hive. Sie enthält folgende Spalten:

id bigint, rank bigint, date string

Ich möchte einen durchschnittlichen Rang pro Monat erhalten. Ich kann diesen Befehl verwenden. Es klappt.

select a.lens_id, avg(a.rank)
from tableA a
group by a.lens_id, year(a.date_saved), month(a.date_saved); 

Ich möchte jedoch auch Datumsinformationen erhalten. Ich benutze diesen Befehl:

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

Es beschwert sich: Expression Not In Group By Key

12
chnet

Die vollständige Fehlermeldung sollte das Format Expression Not In Group By Key [value] haben.
Der [value] sagt Ihnen, welcher Ausdruck im Group By sein muss.

Wenn Sie sich nur die beiden Abfragen ansehen, würde ich sagen, dass Sie a.date_saved explizit zum Group By hinzufügen müssen.

16
QuinnG

Ein Rundgang ist das zusätzliche Feld in einem collect_set und das erste Element des Sets zurückzugeben. Zum Beispiel

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

Dies liegt daran, dass es in Ihrer Gruppe mehr als einen Datensatz „date_saved“ von gibt. Sie können diese ‘date_saved'-Datensätze in Arrays umwandeln und ausgeben.

0
Y.Wang