我有一些数据要在多列上分组,执行聚合功能,然后使用Hive转换到不同的列。
例如,给定此输入
hr type value
01 a 10
01 b 20
01 c 50
01 a 30
02 c 10
02 b 90
02 a 80
我想产生这个输出:
hr a_avg b_avg c_avg
01 20 20 50
02 80 90 10
我的输入中每个不同的type
都有一个不同的列。 a_avg
对应于每小时的平均a
值。
我怎样才能在Hive中执行此操作?我猜我可能需要使用https://github.com/klout/brickhouse/wiki/Collect-UDFs
到目前为止,我能想到的最好的方法是使用多个group-by子句,但这不会将数据转换为多个列。
有什么想法吗?
答案 0 :(得分:2)
你不一定需要来使用Brickhouse,但它肯定会让它变得更容易。这就是我在想的东西,比如
select hr
, type_map['a'] a_avg
, type_map['b'] b_avg
, type_map['c'] c_avg
from (
select hr
, collect(type, avg_value) type_map -- Brickhouse collect; creates a map
from (
select hr
, type
, avg( value ) avg_value
from db.table
group by hr, type ) x
group by hr ) y