Выражение улья не в группе по ключу - PullRequest
12 голосов
/ 21 апреля 2011

Я создаю таблицу в HIVE.В нем есть следующие столбцы:

id bigint, rank bigint, date string

Я хочу получать среднюю оценку за месяц.Я могу использовать эту команду.Это работает.

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

Однако я также хочу получить информацию о дате.Я использую эту команду:

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

жалуется: Expression Not In Group By Key

Ответы [ 4 ]

16 голосов
/ 21 апреля 2011

Полное сообщение об ошибке должно быть в формате Expression Not In Group By Key [value].
[value] скажет вам, какое выражение должно быть в Group By.

Просто глядя на два запроса, я бы сказал, что вам нужно явно добавить a.date_saved к Group By.

10 голосов
/ 14 мая 2012

Обходной путь - поместить дополнительное поле в collect_set и вернуть первый элемент набора. Например

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);
0 голосов
/ 21 сентября 2018

Это потому, что в вашей группе более одной записи "date_saved". Вы можете превратить эти записи «date_saved» в массивы и вывести их.

0 голосов
/ 16 сентября 2017

Я тоже столкнулся с той же проблемой. Если вы пытаетесь выполнить запрос, используя beeline, напишите свой запрос строчными буквами. Как это:

select column_name(s)
from table_name
where condition
group by column_name(s).

Запись в нижнем регистре сработала для меня, попробуйте, я думаю, это сработает.

...