Hive SQL从多元素JSON数组提取key_1对应值的方法
解决JSON数组中提取key_1取值的问题
问题原因
你遇到的null返回值,是因为目标列存储的是JSON数组(多个对象包裹在[]中),而get_json_object、json_tuple默认针对单个JSON对象解析,直接使用会因路径不匹配返回空值。
适用函数及解决方案
以下以Hive SQL为例,提供两种常用解决方法:
方法1:解析数组并展开提取所有key_1值
先将整列数据解析为JSON数组,再拆分数组中的每个对象,最后提取key_1:
SELECT json_extract_scalar(obj, '$.key_1') AS key_1_value FROM your_table LATERAL VIEW json_array(json_column) exploded_table AS obj;
json_array(json_column):把字符串格式的JSON数组转为SQL可识别的数组结构lateral view ... AS obj:将数组中的每个JSON对象拆成独立行,每行对应一个objjson_extract_scalar(obj, '$.key_1'):从单个JSON对象中提取key_1的布尔值并转为标量输出
方法2:指定数组索引提取特定位置的key_1值
如果只需要数组中某固定位置的key_1(比如第一个元素),可以直接定位索引路径:
SELECT get_json_object(json_column, '$[0].key_1') AS first_key_1_value, get_json_object(json_column, '$[1].key_1') AS second_key_1_value FROM your_table;
$[n].key_1:n为数组索引(从0开始),直接指向数组中第n个对象的key_1字段
注意事项
- 确保SQL引擎支持JSON数组解析(Hive 2.3+、Spark SQL等原生支持)
- 若存在格式不规范的JSON,可先过滤无效数据:
SELECT json_extract_scalar(obj, '$.key_1') AS key_1_value FROM your_table WHERE json_valid(json_column) = true LATERAL VIEW json_array(json_column) exploded_table AS obj;
内容的提问来源于stack exchange,提问作者Pawels
相关产品推荐
相关产品推荐

