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