

需求描述
如下表格:

需要实现的结果显示为:

实现过程
2.1 创建表模型
create tableIFNOTEXISTS T_C_TEXT(
STATIS_DATE varchar(20) comment'统计日期',
IDvarchar (100) comment'序号',
NAMEvarchar (100) comment'名称',
VALUEID varchar (100) comment'身份编码'
) comment'测试表1' partitioned by (STATIS_DATE varchar(20) comment'统计日期') rowformatdelimitedfieldsterminatedby''storedas ORCFILE tblproperties ("orc.compress" = "NONE")
insetr into T_C_TEXT (ID,NAME,VALUEID) values (‘001’,’身份编码’,’111222333111222333’);
insetr into T_C_TEXT (ID,NAME,VALUEID) values (‘001’,’出生日期’,’20200728’);
insetr into T_C_TEXT (ID,NAME,VALUEID) values (‘002’,’身份编码’,’444555666444555666’);
insetr into T_C_TEXT (ID,NAME,VALUEID) values (‘002’,’出生日期’,’20000809’);


str_to_map(str[, delimiter1[, delimiter2[, keyDelimiter]]])
其中:
str:需要解析的字符串。
delimiter1(可选):字符串中键值对的分隔符,默认为逗号(,)。
delimiter2(可选):字符串中不同键值对之间的分隔符,默认为空格。
keyDelimiter(可选):字符串中键和值之间的分隔符,默认为冒号(:)。
先将name和valueid进行拼接:


用collect_list()函数将多行转成单列:


用str_to_map()函数组成json格式:


用map结构的取数进行行列转换:


结论:方法一和方法二都能实现行列转换,但相比方法一,方法二的效率更高一点。

本文作者:陈梦媛(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




