2017-01-17 4 views
1

Я пытаюсь написать простой улей запрос:Hive резюме функции внутри саза

select sum(case when pot_sls_q > 2* avg(pit_sls_q) then 1 else 0)/count(*) from prd_inv_fnd.item_pot_sls where dept_i=43 and class_i=3 where p_wk_end_d = 2014-06-28; 

Здесь pit_sls_q и pot_sls_q как столбцы в таблице улей, и я хочу часть записей, которые имеют pot_sls_q более чем в 2 раза в среднем pit_sls_q. Однако я получаю ошибку:

FAILED: SemanticException [Error 10128]: Line 1:95 Not yet supported place for UDAF 'avg'

пошалить Я даже пытался использовать некоторые окна функции:

select sum(case when pot_sls_q > 2* avg(pit_sls_q) over (partition by dept_i,class_i) then 1 else 0 end)/count(*) from prd_inv_fnd.item_pot_sls where dept_i=43 and class_i=3 and p_wk_end_d = '2014-06-28'; 

, который прекрасно с учетом фильтрации факта или разбиения данных на том же состоянии, является «же» данные по существу но даже при этом я получаю ошибку:

FAILED: SemanticException [Error 10002]: Line 1:36 Invalid column reference 'avg': (possible column names are: p_wk_end_d, dept_i, class_i, item_i, pit_sls_q, pot_sls_q)

, пожалуйста, предложите правильный способ сделать это.

ответ

1

Вы используете AVG внутри SUM, который не будет работать (наряду с другими синтаксическими ошибками).

Try аналитическая AVG OVER() это:

select sum(case when pot_sls_q > 2 * avg_pit_sls_q then 1 else 0 end)/count(*) 
from (
    select t.*, 
     avg(pit_sls_q) over() avg_pit_sls_q 
    from prd_inv_fnd.item_pot_sls t 
    where dept_i = 43 
     and class_i = 3 
     and p_wk_end_d = '2014-06-28' 
    ) t;