Impala中JSON键包含点号时如何正确使用get_json_object()函数
Impala读取key含点号的JSON字段解决方案
出现返回NULL的原因确实是JSON key中包含的点号被
get_json_object函数默认识别为JSON层级分隔符,反斜杠转义不符合该函数的JSONPath语法规则,因此无法生效。
可行解决方案
方案1:标准路径引号包裹(推荐,适配Impala 2.0+版本)
将带点号的key用双引号完整包裹后写入JSONPath即可,正确写法如下:
select get_json_object(properties, '$."prop1.enabled"') from mytable
执行后针对示例数据会返回两行true的结果,符合预期。
方案2:使用json_tuple函数(适合多字段提取)
如果需要同时提取多个带点号的JSON字段,可使用json_tuple函数,无需额外处理点号,语法更简洁:
select json_tuple(properties, 'prop1.enabled', 'prop2.enabled') as (prop1_enabled, prop2_enabled) from mytable
方案3:旧版本兜底兼容方案
如果使用的Impala版本极低不支持上述引号写法,可以先替换JSON字符串中的点号key为无点号的名称后再解析:
select get_json_object( replace(properties, 'prop1.enabled', 'prop1_enabled'), '$.prop1_enabled' ) from mytable
内容的提问来源于stack exchange,提问作者Dev_FizzBuzz
相关产品推荐
相关产品推荐

