HiveSQL:提取json串内容——get_json_oject和json_tuple

提取json串中内容,json格式示例如下

方法(运行环境Hive)

get_json_object

sql 复制代码
select  json_data
  ,get_json_object(json_data,'$.price')  as price -- 取第一层
  ,get_json_object(json_data,'$.inquiry_params')  as inquiry_params -- 取第一层,取本身也是个json串
  ,get_json_object(json_data,'$.params.cateId') as cateId -- 取多层嵌套的
  ,get_json_object(json_data,'$.inquiry_params.颜色') as color2 -- 中文名的 ,此方法失败
from ods.ods_table1 a
where get_day='2024-08-10' 

可以看到,当json中对应的key是中文时,使用get_json_object获取失败,改为使用json_tuple。

json_tuple

首先,先看下如果获取前3个内容,json_tuple和get_json_object的不同。

sql 复制代码
select  json_data
  ,get_json_object(json_data,'$.aprice')  as price
  ,get_json_object(json_data,'$.inquiry_params')  as inquiry_params
  ,get_json_object(json_data,'$.params.cateId') as cateId
  ,t1.text1
  ,t1.text2
  ,t1.text3
from ods.ods_table1 a
lateral view json_tuple(json_data,'price','inquiry_params','cateId') t1 as text1,text2,text3 
where get_day='2024-08-10' 

从上述例子,发现json_tuple和get_json_object的一些不同

  1. 可以看到json_tuple一次可以取多个内容;
  2. json_tuple只能取到 ,取不到嵌套的里层的内容,表现为cateId为NULL(text3列)。

那么回过头来,看看我们要取"颜色"的问题:

因为要取的颜色是在嵌套在json_data的inquiry_parms里的,不是第一层,json_tuple不能直接取到,那么做个改动:把传入函数的json_data改为inquiry_parms ,那么"颜色"就变成第一层了,这样使用json_tuple就可以取到了。

json_tuple只能取到 。

sql 复制代码
select  brand,product_name,title,json_data
  ,get_json_object(json_data,'$.price')  as price
  ,get_json_object(json_data,'$.inquiry_params')  as inquiry_params
  ,get_json_object(json_data,'$.params.cateId') as cateId
  ,get_json_object(json_data,'$.inquiry_params.颜色') as color2
  -- 取中文key的内容
  ,t1.color5
  ,t1.function5
  ,t1.rag5
from ods.ods_table1 a
lateral view json_tuple(get_json_object(json_data,'$.inquiry_params'),'颜色','功能性问题(可多选或不选)','容量') t1 as color5,function5,rag5 -- 近期的会标记99新,好像不是所有的都能区分国行;
-- 把get_json_object(json_data,'$.inquiry_params')作为整体传入json_tuple函数
where get_day='2024-08-10' 

*[第一层]: 这里说的“第一层”,是指从外往里数

相关推荐
夜泉_ly2 小时前
MySQL -安装与初识
数据库·mysql
qq_529835353 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New6 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6756 小时前
数据库基础1
数据库
我爱松子鱼6 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo6 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser7 小时前
【SQL】多表查询案例
数据库·sql
Galeoto7 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)8 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231118 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql