Hive中json格式字段清洗与提取

发布时间 2023-10-30 10:15:54作者: 森夏

废话不多说,直接上案例

如下是某json字段的查询结果,可以看出它是一个json数组

select sales_price from order_goods where order_number =  'R1001';
-- 结果:
[{"threshold_number":1,"group_id":1,"gear_price":"120.00"},{"threshold_number":5,"group_id":2,"gear_price":"110.00"},{"threshold_number":10,"group_id":3,"gear_price":"100.00"}]

处理思路有两种,用get_json_object抽取或者explode炸开

至于清洗一般用regexp_replace(sales_price,'a','b'),支持正则表达式。去除空值用where is not null

1、get_json_object方法
select get_json_object(sales_price, '$[1].gear_price')
from order_good where order_number =  'R1001'
-- 结果:
110

第二个参数索引了数组第二个数据中gear_price键名的值

2、explode方法
select 
       explode(split(regexp_replace(regexp_replace(sales_price, '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;')) sales_price
from order_goods

这样数组能够炸开,后续按需处理