栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

hive函数get

hive函数get

hive函数get_json_object不支持含特殊字符的key。

例如,解析的json的key中包含’.‘,'@','#','$'等特殊字符。直接解析的话,结果为null。

select

 get_json_object(a.json,'$.ro.boot.serialn') as rbs  --null  不支持转义

,get_json_object(a.json,'$.@serialNo') as sn  --null  不支持转义

,get_json_object(a.json,'$.@serialNo') as sn1   --null 不支持特殊字符@

,get_json_object(a.json,'$.seri#alNo') as sn2   --null 不支持特殊字符#

from (

  select

   '{"ro.boot.serialn":"adc","@serialNo":"123","seri#alNo":"456"}' as json

) as a

;

可以有如下解决方案。

  • 方案1(不推荐,性能不是很好):使用正则提取函数regexp_extract提取含特殊字符的key的值。

select regexp_extract('{"ro.boot.serialn":"adc","@serialNo":"123","seri$alNo":"456"}','seri\$alNo":"([^"]+)',1)

  • 方案2(不太可取,可能影响实际数据):使用正则替换函数regexp_replace替换特殊字符为空字符串再使用get_json_object解析。

select get_json_object(regexp_replace ('{"ro.boot.serialn":"adc","@serialNo":"123","seri#alNo":"456"}', '@', '' ), "$.serialNo" )

  • 方案3(推荐):使用json_tuple函数配合lateral view进行解析。

select

 json.serialNo  --123

,json.ro  --abc

,json.sn  --456

from (

  select

   '{"ro.boot.serialn":"adc","@serialNo":"123","seri#alNo":"456"}' as json

) as a

lateral view json_tuple(a.json,'ro.boot.serialn','@serialNo','seri#alNo') json as ro,serialNo,sn3

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581674.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号