2016-11-24 3 views
0

Я пытаюсь использовать функцию функции окна, отличную от улья, и получить ошибку.HIVE: Count отличная функция window throws error

Запрос используется следующая:

select user, dt, count(distinct dt) over(partition by user) as dates 
FROM table 

Он выдает следующее сообщение об ошибке:

FAILED: SemanticException [Error 10025]: Line 1:123 Expression not in GROUP BY key 'user' 

Я думаю, я использую синтаксис, как указано в улье language manual

Что именно я делаю неправильно?

+0

Вам нужно добавить предложение group by в ваш запрос, чтобы работать с функцией агрегата, например count. – Bhavesh

+0

Я пытаюсь использовать счетчик как функцию окна, а не как регулярную функцию. Отправка группы поработала, но она выполнялась как регулярная функция, игнорирующая часть 'over (partition by user)'. –

ответ

1

Две возможности,

  1. Вы не можете выбрать user и dt в запросе при использовании distinct, удалите user и dt запрос будет работать нормально.

  2. В этом контексте вы не можете использовать distinct, если вы удалите distinct в вышеуказанном запросе, это будет нормально работать. Если вы хотите принять отчетливый и его количество вы можете пойти к югу запроса, как показано ниже,

    select dates.distinct dt from (select dt, count(distinct dt) over(partition by user) as dates FROM table)

Позвольте мне знать, если это помогает.

+0

Эти предложения помогают, но им понадобятся дополнительные подзапросы или объединения. Я надеялся получить данные с помощью оконной функции, чтобы запрос мог быть быстрее. Но теперь я не уверен, поддерживает ли hive подсчет функции окна. –

+0

он поддерживает его .. но вы не можете выбрать любой другой столбец с ним. –

+0

Но если я не могу выбрать какой-либо другой столбец, я могу просто использовать простой счетчик правильно? Какое преимущество делает функция подсчета окон в –

0

Следующее решение будет работать как подсчет. Плотная функция ранга даст ранг для разных c внутри разделов. Наибольшее плотное число рангов будет представлять собой количество отдельных записей c. Ничего особенного в том, что он выполняет две функции окна, но для меня это был единственный способ заставить его работать на Hive < 2.1.0.

select src.a, src.b, src.c, max(src.cnt_dens_rank) over (PARTITION BY src.a, src.b) as cnt_distinct 
from 
(
select a, b, c, DENSE_RANK () OVER (PARTITION BY a, b order by c) cnt_dens_rank 
) src 

 Смежные вопросы

  • Нет связанных вопросов^_^