2015-10-08 4 views
0

У меня есть данные, как это в таблице улей:Hive - почасовой средние окна

+-------------------+-------+---------+--------+ 
| _c0    | name | value0 | value1 | 
+-------------------+-------+---------+--------+ 
| 2015-10-07 13:01 | john | 10.0 | 100 | 
| 2015-10-07 13:20 | john | 20.0 | 200 | 
| 2015-10-07 13:41 | john | 15.0 | 300 | 
| 2015-10-07 14:00 | john | 30.0 | 300 | 
| 2015-10-07 14:20 | john | 60.0 | 200 | 
| 2015-10-07 14:40 | john | 30.0 | 400 | 

мне нужно, чтобы получить почасовую средние.

| 2015-10-07 13:00 | john | 15.0 | 200 | 
| 2015-10-07 14:00 | john | 40.0 | 300 | 

У меня есть представление о том, делать это с помощью пункт partition/over в PSQL, но я не знаю, как сделать это в улье. Идея заключалась бы в том, чтобы разделить дату и время на дату и час (например, «2015-10-07 13») и использовать функцию group by и avg, но это, вероятно, не самый лучший способ.

Любые идеи?

ответ

3

Вы должны сделать это так, как вы предлагали это сделать. Если вы просто хотите усреднить по дате и часу (и, вероятно, имя), разделение и использование предложения over необязательны.

Запрос:

select date, hour, name, avg(value0) avg0, avg(value1) avg1 
from (
    select split(_c0, ' ')[0] date 
    , split(split(_c0, ' ')[1], '\\:')[0] hour 
    , name 
    , value0 
    , value1 
    from db.table) x 
group by date, hour, name 
Смежные вопросы