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

Apache Drill:Hive表JSON字符串转对象并提取cdrreasun值

解决方案:在Apache Drill中提取Hive表JSON字符串列的指定键值

我来帮你搞定这个问题!你遇到的报错是因为FLATTEN只适用于数组类型数据,而你的列是单个JSON对象的字符串;KVGEN也需要作用在MAP/STRUCT这类结构化类型上,直接用在字符串上当然不行。下面给你两种简单可行的方法:

方法1:直接解析JSON字符串并提取指定键

Drill提供了json_parse()函数,可以把JSON格式的字符串转换成可访问的MAP类型,之后直接通过键名取值即可:

-- 使用箭头符号访问键
SELECT json_parse(your_json_column)->'cdrreasun' AS cdrreasun_value
FROM your_hive_table;

-- 或者用方括号语法(适合键名包含特殊字符的情况,比如你的数据里的cdrdnrar.1un、xa:lnqruup)
SELECT json_parse(your_json_column)['cdrreasun'] AS cdrreasun_value
FROM your_hive_table;

这个方法最直接,如果你只需要提取单个键的值,用这个就足够了。

方法2:展开所有键值对后过滤(适合需要提取多个键的场景)

如果你之后可能需要提取多个键,可以先把JSON字符串转成MAP,再用kvgen配合LATERAL VIEW展开所有键值对,最后过滤出你需要的键:

SELECT 
  kv.key,
  kv.value
FROM your_hive_table,
LATERAL VIEW kvgen(json_parse(your_json_column)) t AS kv
WHERE kv.key = 'cdrreasun';

补充说明

  • 你的JSON里有些键名包含特殊字符(比如点、冒号、空格),这类键用箭头符号->访问可能会报错,这时候方括号[]语法会更可靠,比如json_parse(your_json_column)['cdrdnrar.1un']。
  • 如果JSON字符串存在格式不规范的情况,可以先使用json_valid()函数校验,比如SELECT json_valid(your_json_column) FROM your_hive_table,确保数据格式没问题再解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:55:45