当前位置: 首页 > news >正文

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

提取json串中内容,json格式示例如下
在这里插入图片描述

方法(运行环境Hive)

    • get_json_object
    • json_tuple

get_json_object

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的不同。

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只能取到 第一层

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' 

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Go Roadmap-Basics中文笔记
  • 类与对象(中(1))
  • 【文献阅读】A Comprehensive Review of Multimodal Large Language Models
  • 在亚马逊云科技上对Stable Diffusion模型提示词、输出图像内容进行安全审核
  • UART、SPI、IIC、CAN几种通信协议的简述与对比
  • 简洁清新个人博客网页模板演示学习
  • EasyPoi使用指定的模板导入导出excel
  • Grafana学习笔记
  • 线性代数:每日一题1/特征值与相似对角化
  • 【Unity开发】几种空值判断的性能测试
  • TS简单总结
  • 基于微信小程序的书籍销售预测系统的设计与实现(论文+源码)_kaic
  • 前后端项目交互异步请求JSON数据类型后端标准响应数据格式
  • 斗破C++编程入门系列之四:运算符和表达式
  • 手撕C++入门基础
  • [PHP内核探索]PHP中的哈希表
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Android框架之Volley
  • css布局,左右固定中间自适应实现
  • jquery ajax学习笔记
  • nodejs调试方法
  • Objective-C 中关联引用的概念
  • Promise面试题,控制异步流程
  • Promise面试题2实现异步串行执行
  • SQLServer之创建数据库快照
  • SwizzleMethod 黑魔法
  • 从0到1:PostCSS 插件开发最佳实践
  • 番外篇1:在Windows环境下安装JDK
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 看域名解析域名安全对SEO的影响
  • 来,膜拜下android roadmap,强大的执行力
  • 驱动程序原理
  • 深入浅出Node.js
  • 使用common-codec进行md5加密
  • 微信小程序开发问题汇总
  • 微信小程序填坑清单
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • (03)光刻——半导体电路的绘制
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (AngularJS)Angular 控制器之间通信初探
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (十)Flink Table API 和 SQL 基本概念
  • (四)js前端开发中设计模式之工厂方法模式
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)Docker基本介绍
  • (转)Linux下编译安装log4cxx
  • (转)德国人的记事本
  • (转)重识new
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .htaccess 强制https 单独排除某个目录
  • .naturalWidth 和naturalHeight属性,