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
我在 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