我的hive表有map <string,string>类型的列。我想爆炸地图并将它们转换为列而不是行

时间:2016-01-04 21:23:48

标签: hadoop hive

以下是我的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,因此它会将结果转储为行而不是列。但有没有办法将数据作为列而不是行?

1 个答案:

答案 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;