Hive - 每小时 window 平均值

Hive - hourly window averages

我在 Hive 中有这样的数据 table:

+-------------------+-------+---------+--------+
| _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    |

我有一个关于在 psql 中使用 partition/over 子句来执行此操作的想法,但我不确定如何在 Hive 中执行此操作。一个想法是将日期时间拆分为日期和小时(例如“2015-10-07 13”)并使用 group by 和 avg 函数,但这可能不是最好的方法。

有什么想法吗?

你应该按照你建议的方式去做。如果您只想按日期和小时(可能还有名称)求平均值,则不需要分区和使用 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