Hive 行列互转
Table of Contents

行转列

比如表A有三个字段如下

ID, key, value
1, A, 1
1, B, 0.4
2, A, 0.3

需要将同一个ID的多条记录转为一列,显然需要通过聚合操作实现。
对于value是数值类型的,聚合函数可以选为sum,对于字符串类型,需要使用聚合函数collect_list

select ID, sum(if(key='A', value, NULL)) as A_value, sum(if(key='B', value, NULL)) as B_value
group by ID

字符串类型

select ID, concat_ws('', collect_list(if(key='A', value, NULL))) as A_value, concat_ws(collect_list(if(key='B', value, NULL))) as B_value
group by ID

列转行

这个需要利用 UDTF 实现!