我有一个从系统日志中提取的配置单元表。数据以一种奇怪的格式(映射数组)编码,其中数组的每个元素都包含field_name和它的value。列类型为 STRING。就像在下面的例子中一样:
select 1 as user_id, '[{"field":"name", "value":"Bob"}, {"field":"gender", "value":"M"}]' as user_info
union all
select 2 as user_id, '[{"field":"gender", "value":"F"}, {"field":"age", "value":22}, {"field":"name", "value":"Ana"}]' as user_info;
请注意,数组大小并不总是相同的。我正在尝试将map数组转换为简单map。然后,下面就是我期望的结果:
| 用户身份 | 用户信息 |
|---|---|
| 1 | {“name”:“Bob”, “gender”:“M”} |
| 2 | {“name”:“Ana”, “gender”:“F”, “age”:22} |
实现方式
查看代码中的注释。要转换为映射的字符串数组由此产生split(user_info, ‘(?<=\}) *, *(?=\{)’)。然后它被分解,每个元素都转换为map。
with mydata as
(select 1 as user_id,

本文介绍如何将SQL查询结果中的JSON格式用户信息数组转换为标准映射结构,以便于处理和查询。通过正则表达式、str_to_map函数和分组聚合操作,作者展示了从复杂数组到单一用户信息对象的转换过程。
最低0.47元/天 解锁文章
1336

被折叠的 条评论
为什么被折叠?



