缘起:
今天看 HIVE 数据库中的jsource_json_result字段,该字段的数据类型为json格式,需要对该字段中的某些key提取value,故需要使用到函数get_json_object 。借此机会,顺便把MySQL数据库中对json的key提取也记录下。
前言:
先说下json数据格式的字段,其字段值是由许多键值对组合而成,比如:
征战:
1、在hive库中,获取json字段中某些key的值,记录如下:
查询source_json_result字段里resultA、resultB、otherResult这三个key的值
select
get_json_object(source_json_result,'$.model.resultA') as aresult_report,
get_json_object(source_json_result,'$.model.resultB') as bresult_report,
get_json_object(source_json_result,'$.model.otherResult') as other_report
from source_data
where MARK in ('high','strengh')
limit 10;
// * 从source_data表中查出MARK字段值为'high','strengh' 的前十条记录,将这些记录中source_json_result字段里key为resultA、resultB、otherResult的值展示出来,并分别取别名为aresult_report、bresult_report、other_report *//
-- 这里的“model”是用来指定该字段里具体的某个json
结果如下:
总结:
get_json_object(param1,"$.param2")
param1:需要提取/解析的json字段
param2:遇到字段里有多个数组就用 [0,1,2...] ,[0],[1],[2]是指定字段中第n+1个数组;遇到jsonObject直接用 ".key"取出想要获取的value。
补给:
如person_info表的xjson字段有数据:
[{"name":"王二狗","sex":"男","age":"25"},{"name":"李狗嗨","sex":"男","age":"47"}]
取出第一个json对象,则hive sql为:
SELECt get_json_object(xjson,"$.[0]") FROM person;
结果是:
{"name":"王二狗","sex":"男","age":"25"}
取出第一个json的age字段的值:
SELECt get_json_object(xjson,"$.[0].age") FROM person;
结果:25
再战:
1、在mysql库中,获取json字段中某些key的值,记录如下:
查询source_json_result字段里resultA、resultB、otherResult这三个key的值
select
JSON_EXTRACT(source_json_result,"$.resultA"),
JSON_EXTRACT(source_json_result,"$.resultB"),
JSON_EXTRACT(source_json_result,"$.otherResult")
from source_data
where MARK in ('high','strengh')
limit 10;
结果:
由于此次记录时,数据都在Hive库里,若要执行该MySQL语句,需要刷数据到MySQL库里,耗时较长,所以这里就不放结果了。该语句在上次使用时已经验证过。



