2014-10-08 3 views
1

Моего улья таблицы (Tab1) структур:агрегированное использование колонки в улей запросы

people_id,time_spent,group_type 
1,234,a 
2,540,b 
1,332,a 
2,112,b 

Ниже запрос я пытаюсь выполнить, но получаю ошибку («Пока не поддерживается место для UDAF„суммы“»):

select people_id, sum(case when group_type='a' then time_spent else 0 end) as a_time, sum(pow(a_time,2)) as s_sq_a_time,sum(case when group_type='b' then time_spent else 0 end) as b_time, sum(pow(b_time,2)) as s_sq_b_time from tab1 group by people_id; 

Можно ли передать агрегированный столбец из того же оператора select в Hive? Я также упомянул ниже ссылку, но он не работал: http://grokbase.com/t/hive/user/095tpdkrgz/built-in-aggregate-function-standard-deviation#

ответ

0

Вы должны использовать производную таблицу для обозначения a_time и b_time

select a_time, b_time, 
pow(a_time,2) as s_sq_a_time, 
pow(b_time,2) as s_sq_b_time 
from (
    select people_id, 
    sum(case when group_type='a' then time_spent else 0 end) as a_time, 
    sum(case when group_type='b' then time_spent else 0 end) as b_time 
    from tab1 group by people_id 
) t1 
+0

спасибо за réponse ... если вы посмотрите на мой запрос я использую сумму в пау как «sum (pow (a_time, 2)) как s_sq_a_time« .... можно ли достичь в улье? ценю вашу помощь! – user3252809

+0

Я даже попробовал «sum (a_time * a_time)», но он не работал – user3252809

+0

@ user3252809 Я не думаю, что можно ссылаться на псевдоним в том же самом выборе – FuzzyTree

1

указан псевдоним для имени таблицы и использовать псевдоним таблицы при доступе к столбцам.

E.g.

select startstation, count(tripid) as a 
from 201508_trip_data as t 
group by t.startstation 

Примечание «т» это псевдоним для таблицы, и я использовал t.startstation для доступа к

+0

Это сработало отлично для меня. – Wes

+1

@ Wesrock, как это отвечает на вопрос? op хочет агрегировать результат совокупности - т. е. 'sum (pow (...))' - это просто делает простой 'count' – FuzzyTree

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