我的配置单元表有map< string,string>类型的列我想分解Map并将它们转换为列而不是行

dtcbnfnu  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(369)

下面是我的配置单元表结构

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

5jdjgkvh

5jdjgkvh1#

您可以这样运行查询:

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;

相关问题