需求背景:
日常生产环境中,对于埋点上报数据中有json格式的数据,需要解析json格式的字符串里面的字段和数值.对于这种需求,hive系统内置解析json格式的函数.
1.get_json_object(jsonstr,’$.key’)
说明:str表示待解析的map,key抽取指定字段的值;这个函数每次只能返回一个key对应的值;若想要解析多个key的值只能多写几次这个函数才行
测试:
select get_json_object('{"id":"c1","address":"shenzheng"}','$.id') id;
结果:
id:c1
2.json_tuple(jsonstr,key1,key2,key3,…)
说明:解析json格式的字符串,之前的get_json_object,不能一次性解析,那么就衍生出了
json_tuple这个函数,可以一次性解析多个字段
测试1:
select
json_tuple('{"id":"001","name":"zhangsan","address":"shenzheng"}','id','name','address') as (id,name,address)
结果:
id name address
001 zhangsan shenzheng
测试2:
select
b.id,
b.name
from a lateral view
json_tuple('{"id":"001","name":"zhangsan","address":"shenzheng"}','id','name') b as id,name;
结果:
id name
001 zhangsan
总结:以上两个函数是解析json格式的字符串,但是无法解析json数组.
hive内置解析json数组的函数
1.explode(map/array) :炸裂函数专门处理map和array格式的