2015-07-21 2 views
4

Я хочу получить сводные данные о первом квартиле для таблицы в Hive. Ниже приведен запрос, чтобы получить максимальное количество просмотров в квартили:Использование Hive ntile приводит к тому, что статья

SELECT NTILE(4) OVER (ORDER BY total_views) AS quartile, MAX(total_views) 
FROM view_data 
GROUP BY quartile 
ORDER BY quartile; 

И этот запрос, чтобы получить имена всех людей, которые находятся в первой квартили:

SELECT name, NTILE(4) OVER (ORDER BY total_views) AS quartile 
FROM view_data 
WHERE quartile = 1 

Я получаю эта ошибка для обоих запросов:

Invalid table alias or column reference 'quartile' 

Как я могу ссылаться на ntile результаты в пункте where или group by пункта?

ответ

3

Вы не можете поместить функцию windowing в предложение where, потому что это создаст неоднозначность, если имеются составные предикаты. Поэтому используйте подзапрос.

select quartile, max(total_views) from 
(SELECT total_views, NTILE(4) OVER (ORDER BY total_views) AS quartile, 
FROM view_data) t 
GROUP BY quartile 
ORDER BY quartile 
; 

и

select * from 
(SELECT name, NTILE(4) OVER (ORDER BY total_views) AS quartile 
FROM view_data) t 
WHERE quartile = 1 
; 
+0

Я не очень понимаю, что вы имеете в виду неоднозначности, вызванной составных сказуемых, могли бы вы привести пример, пожалуйста? – Nadine

+1

SELECT col1 ОТ T1 ГДЕ ROW_NUMBER() OVER (ORDER BY col1) <= 3 И col1> '100' Что бы порядок работы здесь? Если сначала следует выполнить команду col1> '100' предиката или должна быть нумерация строк. – invoketheshell

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