Hive之get_json_object函数

–使用场景

在实际采集场景中,主动采集或被动推送的文件字段可能含有json串,此类多是爬虫数据或是日志数据,hive提供了一类json解析函数在对此类数据通过进行预处理和清洗,此篇介绍get_json_object函数

–数据准备

此时DW中存在一张的DWD表,其中包含了json对象的字段(此表其实仍属于一类业务过程的事实表,只是字段包含了json对象,所以是存放在DWD层,而不是在ODS做处理),这里只截出其中的json字段
在这里插入图片描述是一张房屋信息描述的json

–使用方法

get_json_object(column,"$.param")

其中参数column为需解析的字段,在此例中为result_contxt
第二个参数param需要分情况,若字段内容为json数组则使用 [n].key,表示第几个json对象的key值,若为单个json对象则直接 .key
因上述数据中为单个json对象,故使用第二种方式解析
使用示例:

select
  get_json_object(result_contxt, "$.house_type2") as house_type2
from
  库名.表名
where
  p_day = '20191127'

查询结果为:
Hive之get_json_object函数_第1张图片解析出全部元素:

select 
get_json_object(result_contxt,'$.house_type2')as house_type2, 
get_json_object(result_contxt,'$.house_type1')as house_type1, 
get_json_object(result_contxt,'$.build_type')as build_type, 
get_json_object(result_contxt,'$.house_belong')as house_belong, 
get_json_object(result_contxt,'$.house_direction')as house_direction, 
get_json_object(result_contxt,'$.years_right')as years_right, 
get_json_object(result_contxt,'$.title')as title, 
get_json_object(result_contxt,'$.last_tran')as last_tran, 
get_json_object(result_contxt,'$.unit_price')as unit_price, 
get_json_object(result_contxt,'$.belong_area2')as belong_area2, 
get_json_object(result_contxt,'$.build_year')as build_year, 
get_json_object(result_contxt,'$.tran_time')as tran_time, 
get_json_object(result_contxt,'$.lift')as lift, 
get_json_object(result_contxt,'$.square_measure2')as square_measure2, 
get_json_object(result_contxt,'$.square_measure1')as square_measure1, 
get_json_object(result_contxt,'$.poi_id')as poi_id, 
get_json_object(result_contxt,'$.total_price')as total_price, 
get_json_object(result_contxt,'$.url')as url, 
get_json_object(result_contxt,'$.floor')as floor, 
get_json_object(result_contxt,'$.decorate')as decorate, 
get_json_object(result_contxt,'$.village_name')as village_name, 
get_json_object(result_contxt,'$.time')as time, 
get_json_object(result_contxt,'$.area_county')as  area_county
from 
库名.表名
where p_day = '20191127'

查询结果:
Hive之get_json_object函数_第2张图片
其他问题引入:如果字段中为json数组,该如何解析整个json对象呢?
若不清楚的请看笔者的另一篇explode函数的使用介绍。

你可能感兴趣的:(hive,Hadoop,Spark)