Hive分组行转列实现

Posted by hydra on 2019-11-08

Hive行转列

今天遇到一个业务需求,要将Hive里一个维表实现分组行转列,例,table_sample如下

cd_var cd_var_nm
A班-01 小若
A班-02 小红
B班-01 小离
B班-02 小敏
B班-03 小昭

实现按班级分组行转列:

1
2
3
4
5
6
SELECT cdv,cdn[0] AS C1,cdn[1] AS C2,cdn[2] AS C3
FROM(
SELECT substr(cd_var,0,2) AS cdv,split(concat_ws(',',collect_set(column)),',') AS cdn
FROM table_sample
GROUP BY substr(cd_var,0,2)
)T

输出结果如下

cdv C1 C2 C3
A班 小若 小红 NULL
B班 小离 小敏 小昭

注:
split返回是一个数组[],可以直接按下标取值,实现多列。
这个方法比较简单粗暴,业务需求中ETL需要快速处理完成,不够炫酷,但简单够用。