You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Hive中从多JSON拼接字符串提取各id并关联父ID?

Hive SQL解析分隔JSON字符串提取ID问题解决

问题场景

数据库表结构及数据如下:

Parent IDProfile JSON
1{"profileState":"ACTIVE","isDefault":"true","joinedOn":"2019-03-24T15:19:52.639Z","profileType":"ADULT","id":"abc","signupDeviceId":"1"}||{"profileState":"ACTIVE","isDefault":"true","joinedOn":"2021-09-05T07:47:00.245Z","imageId":"19","profileType":"KIDS","name":"Kids","id":"efg","signupDeviceId":"1"}

其中Profile JSON字段存储了用||分隔的多个JSON字符串,需要拆分后提取每个JSON中的id值,最终期望输出:

Parent IDID
1abc
1efg

此前尝试的两种方法要么返回id为NULL,要么仅提取第一个id值,以下是可行解决方案。

正确实现语句

SELECT 
    parent_id,
    get_json_object(profile_json_item, '$.id') AS id
FROM 
    your_table_name
LATERAL VIEW EXPLODE(split(profile_json, '\\|\\|')) exploded AS profile_json_item;

关键步骤说明

  • 拆分JSON数组:split(profile_json, '\\|\\|')将Profile JSON字段按||拆分为JSON字符串数组。由于Hive中竖线是正则表达式特殊字符,必须用双反斜杠转义。
  • 展开数组为多行:LATERAL VIEW EXPLODE(...)将数组横向展开,每个JSON字符串单独占一行,同时保留原parent_id的关联关系。
  • 提取ID字段:get_json_object(profile_json_item, '$.id')从单个JSON字符串中精准提取id字段的值。

注意事项

如果JSON字符串内部包含||这类分隔符,上述拆分逻辑会失效,此时需要考虑自定义UDF等更严谨的解析方式,但针对当前示例数据,该语句可正常输出期望结果。

内容的提问来源于stack exchange,提问作者Will

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:55:23