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' 

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

相关推荐
李兆龙的博客4 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
倔强的石头_6 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间6 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西7 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
胖头鱼的鱼缸(尹海文)7 小时前
胖头鱼的技术专栏-474 从能跑到能上线:PG SplitJSON 0.2.0 和 0.1.0 差在哪(20261008)
postgresql·json
禾小西7 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
数据库小学妹8 小时前
数据共享交换平台选型:交换方式对比与避坑指南
数据库·信创·数据同步·数据交换平台·政务数据共享·数据共享交换平台·数据库底座
要开心吖ZSH8 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
loong_XL9 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
这个DBA有点耶9 小时前
数据库双轨并行实战:全量并行策略、增量延迟控制、双向回切与一致性校验
数据库·架构·dba