以下是我的hive表结构
data_dt string
id string
records map<string,string>
它由data_dt
分区。
当我运行查询时,
select id, key, val from test
lateral view explode(records) t as key, val
根据Hive文档,我的地图records
会爆炸成数据行。我需要列中的爆炸数据而不是行。
E.x: 上面的查询将产生我
abc | k1 | v1
abc | k2 | v2
abc | k3 | v3
zxc | k1 | v1
zxc | k3 | v3
相反,我需要它如下
id | k1 | k2 | k3
abc | v1 | v2 | v3
zxc | v3 | /N | v3
我知道explode是一个UDTF,因此它会将结果转储为行而不是列。但有没有办法将数据作为列而不是行?
答案 0 :(得分:0)
您可以像这样运行查询:
select id, max(k1) as k1, max(k2) as k2, max(k3) as k3 from (
select id, case when c2 = 'k1' then c3 end as k1,
case when c2 = 'k2' then c3 end as k2,
case when c2 = 'k3' then c3 end as k3
from table_name) q;