探索JSON能力,看这一篇就够了

news2024/10/7 12:21:55

f105ef184baef574b881a3a8229d5bc0.gif

b72350f727c7c9ad0d77dbb727ab1355.png

8325e3fa9ca1ce7789829ee9d517141c.png

KING BASE

83293d1b491e4587469c89d5f8133796.png

6675624f3c534f63e9b4807e47d06334.png

JSON(JavaScript Object Notation)作为一种流行的数据格式,相比于TEXT和LOB类型,能更高效地实现数据的访问。此外,JSON能打通关系型和非关系型数据存储之间的界限,为业务提供更好的架构选择。

KingbaseES数据库中实现了JSON数据类型,同时提供丰富的函数和路径表达式来方便用户构造、操作和访问JSON数据,下面就来探索下KingbaseES的七大JSON能力吧!

01

能力一:构造JSON

在对数据库的使用中,我们可能需要把关系数据或者一个行对象转为JSON对象或者JSON数组,KingBaseES提供了丰富的函数调用方式来构造JSON数据。

fa40dfb0962983b915d8f4821455715a.png

能构造JSON对象的函数有JSON_OBJECT、JSON(B)_BUILD_OBJECT和JSON(B)_OBJECT三个函数,但我们更建议使用JSON_OBJECT函数表达式,因为其提供了更丰富的语法支持。同时,KingbaseES可以使用JSON{} 简写形式来构造JSON对象。同样对于构造JSON数组,也更建议使用提供复杂语法的JSON_ARRAY函数表达式。

02

能力二:修改JSON

我们将插入、删除、更新JSON的能力统称为修改JSON的能力。同时,操作符能简化JSON的使用,也将包含在修改JSON的能力中。下面将一一和大家探索它们的能力。

插入JSON

插入JSON,即要把一段新的JSON片段插入到源片段中,KingbaseES目前支持的插入JSON的函数如下表所示:

14b8c5ffe9fbc9e09c677009c3bfd2b4.png

当我们想要插入数据到JSON数组中时,可以调用JSON_ARRAY_APPEND或者JSON_ARRAY_INSERT,但是它们只是对数组进行追加或插入,想要更灵活的插入JSON数据,可以调用JSON_INSERT或者JSONB_INSERT。JSON_INSERT函数还支持多对路径和新值。

而JSON_INSERT相比JSONB_INSERT,其使用的JSONPATH更加灵活,所以建议使用JSON_INSERT函数进行JSON数据的插入。

删除JSON

删除JSON,即把JSON中的部分数据进行删除操作。KingbaseES目前支持如下的删除函数:

b8921e752e4294c206664708fd0848b6.png

其中,JSON(B)_STRIP_NULLS函数的入参是一个JSON或者JSONB数据,其主要是删除JSON对象中值为NULL的键值对。

从功能上来说,JSON_REMOVE和JSON(B)_STRIP_NULLS实现了不同的删除功能,可以给用户更多灵活操作。

更新JSON

更新JSON,即把JSON源片段中部分内容进行替换,KingbaseES目前支持如下的更新函数:

9ee17fdd7c04eece31577cc3a1535b51.png

JSON_REPLACE和JSON_SET都有更新指定路径的值的功能,两者的区别是JSON_REPLACE是当指定的路径不存在时则忽略,而JSON_SET当指定的路径不存在时,把新的值增加到指定路径下,两个函数需根据实际需求进行调用。

从功能上来说JSONB_SET包含了JSON_REPLACE和JSON_SET两个函数的功能,不过其路径参数表示形式并非JSONPATH路径格式,此路径书写上不及JSONPATH灵活。

操作符

操作符相比函数来说在使用起来更方便,KingbaseES不仅提供丰富的函数,同时提供了使用更加简洁的操作符来实现对JSON数据的操作。下表为KingbaseES目前支持的JSON的操作符。

c2f00e5fcb982dc40bb8af48e53eeefc.png

从功能上来说,KingbaseES的操作符全面覆盖JSON数据查询、更新、删除等操作。

03

能力三:查询JSON

查询是数据库中最重要的操作,而对JSON的查询,包括对JSON片段的查找,对其中标量值的查找,对其键的查找等等,都是非常重要的查询操作。而JSON索引更是提升JSON查询的利器,JSONPATH则使用路径表达式可以实现对JSON数据更便捷的访问。

KingbaseES提供了丰富的JSON查询函数,如下表所示:

4c88aa5ceb7846404166a2cb5a9e7962.png

JSONB索引

数据库中索引可以大幅度缩短数据检索的时间,JSONB数据类型也提供了索引的支持,以满足快速检索的需求。

KingbaseES中的GIN 索引可以被用来有效地搜索在大量JSONB文档(数据)中出现的键或者键值对。KingbaseES提供了两种 GIN“操作符类”,它们在性能和灵活性方面做出了不同的平衡。JSONB的默认GIN操作符类支持使用@>、 ?、?&以及?|操作符的查询。而非默认的 GIN 操作符类JSONB_path_ops只支持索引 @>操作符。

JSONB同样支持btree和hash索引,常用于检查完整 JSON文档等值的重要场合。

JSONPATH支持能力

KingbaseES的JSONPATH类型实现支持JSON 路径语言以有效地查询 JSON 数据。它提供了已解析的JSON路径表达式的二进制表示,该表达式指定路径引擎从JSON数据中检索的项,以便使用JSON查询函数进行进一步处理。

在KingbaseES中,路径表达式作为JSONPATH数据类型实现,可以使用JSONPATH中描述的任何元素。此外,KingbaseES的JSONPATH还支持正则表达式,它允许路径表达式允许用like_regex过滤器将文本匹配到正则表达式。

JSONPATH还提供丰富的变量和访问器操作符,详情参考KingbaseES官方手册。

04

能力四:JSON的输出

JSON的输出就是按要求去除JSON引号的引用或者格式化JSON数据,KingbaseES目前支持如下两个输出函数:

0de7f55c5c35a050169b2d0e2d43d11e.png

05

能力五:JSON的聚集

聚集函数作为独立的函数,它可以实现把多个JSON数据聚集为一个JSON数据。目前KingbaseES支持的聚集函数如下表所示:

e4cc2f88d05aee6570bebd12bccf9076.png

06

能力六:JSON与其他数据类型的转换

我们把SQL变量和JSON变量的转化、把JSON转为字符串类型、把JSON转为行数据,或者把行数据转为JSON,以及把JSON转为关系表等函数或函数表达式统称为其转换能力。目前KingbaseES支持的转换函数如下表所示:

7540523a5ab24b7b2dc2fe37c5b58c12.png

07

其他能力

对JSON数据,我们还可以对其进行统计、合并、比较等各种操作,我们把所有这些操作归并为其他能力,目前KingbaseES支持的其他能力函数如下表所示:

c40822b16051e17059f3c74022177a83.png

上表中每个函数都实现不同的功能,这些函数都是在实际使用中必不可少的函数。

PK

KingbaseES/Oracle/MySQL

JSON能力

0fceb7ff596c7424287d3051c6411adb.png

对比可以看出,KingbaseES不仅兼容Oracle和MySQL的JSON函数功能和语法、操作符,还进一步扩展、优化,具备独有的特性,使用上也会更加丰富和灵活。

END

正是顺应市场需求变化,KingbaseES无论是在JSON的构造、修改、查询以及聚集能力上,还是将关系数据和JSON数据进行互相转换的功能上,都提供了强大的JSON支撑能力。相信在未来,KingbaseES的JSON处理能力将持续升级,引领更多场景应用。

c4b26664c470247350602a7703641dfa.png供稿:产品研发中心

编辑:王堇

审核:日尧

18a96a45d9760cce988bc00c5cf0c98d.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1090767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

POI、Easy Excel操作Excel

文章目录 1.常用的场景2.基本功能3.Excel在Java中是一个对象4. 简单的写(07版本(.xlsx)Excel)大文件写HSSF大文件写XSSF大文件写SXSSF 5. Excel读5.1 读取遇到类型转化问题该怎么解决5.2 遇到Excel公式怎么办 6. Easy Excel6.1简单…

[Python]黑色背景白色块滑动视频

黑色背景白色块滑动视频,单帧效果如下: 配置参数 1920 1080 400 400 300 60 1920x1080.avi import numpy as np import cv2 as cv import os import syswidth 1920 height 1080 rect_szx 400 rect_szy 300 sz_y_init 400 fps 24width int(sys.a…

如何使用ChatPPT生成PPT文档

简介 ChatPPT是一个基于人工智能的PPT生成工具,可以帮助用户快速生成高质量的PPT文档。ChatPPT使用自然语言处理技术,可以根据用户的指令生成PPT内容、设计和排版。 使用方法 ChatPPT提供了两种使用方式:在线体验版和Office插件版。 在线…

pytest 之 pytest.ini配置文件

前言:pytest.ini全局配置文件,是pytest单元测试框架的核心配置文件,pytest.ini 可以改变 pytest 的默认行为 一、配置规则 1、优先级 如pytest.ini有该参数值,在执行的时候,优先读取配置文件中的参数如没有&#xf…

ADAS可视化系统,让自动驾驶更简单 -- 入门篇

随着车载芯片的升级、技术的更新迭代,可视化ADAS逐渐变成汽车的标配走入大家的生活中,为大家的驾车出行带来切实的便捷。那么你了解HMI端ADAS的实现过程吗?作为ADAS可视化系统的入门篇,就跟大家聊一聊目前较常见的低消耗的一种ADA…

Android---深入理解AQS和CAS原理

AQS AQS 全称是 Abstract Queued Synchronizer,一般翻译为同步器。是一套实现多线程同步功能的框架,由 Doug Lea 操刀设计并开发实现的。AQS 在源码中被广泛使用,尤其是在 JUC(Java Util Concurrent)中,比…

allure测试报告生成逻辑--解决在Jenkins里打开allure报告页面后空白显示无数据问题(以window环境为例)

前言 相信大家在用Jenkins持续集成+ant自动构建+jmeter接口测试+pytest代码.xml文件转化+allure测试报告为一体的接口自动化测试构建过程中,都会遇到Jenkins里打开allure报告页面后空白显示无数据问题这一现象级问题,今天Darren洋就给大家分享一下如何讲讲allure测试报告生成…

MySQL——源码安装教程

MySQL 一、MySQL的安装1、RPM2、二进制3、源码 二、源码安装方式三、安装过程1、上传源码包2、解压当前文件并安装更新依赖3、对MySQL进行编译安装 四、其他步骤 一、MySQL的安装 首先这里我来介绍下MySQL的几种安装方式: 一共三种,RPM安装包、二进制包…

通过okhttp调用SSE流式接口,并将消息返回给客户端

通过一个完整的java示例来演示如何通过okhttp来调用远程的sse流式接口 背景:我们有一个智能AI的聊天界面,需要调用三方厂商的大模型chat接口,返回答案(因为AI去理解并检索你的问题的时候这个是比较耗时的,这个时候客户…

10-SRCNN-使用CNN实现超分辨成像

文章目录 utils_dataset.pymodel.pytrain.pyuse.py主要文件 utils_dataset.py 工具文件,主要用来制作dataset,便于加入dataloader,用于实现数据集的加载和并行读取 model.py 主要写入网络(模型) train.py 主要用于训练 use.py 加载训练好的模型,用于测试或使用 utils_dat…

Spring实战 | Spring AOP核心秘笈之葵花宝典

Spring实战系列文章: Spring实战 | Spring IOC不能说的秘密? 国庆中秋特辑系列文章: 国庆中秋特辑(八)Spring Boot项目如何使用JPA 国庆中秋特辑(七)Java软件工程师常见20道编程面试题 国庆…

IDEA的常用设置

【1】进入设置: 【2】设置主题: 【3】编辑区的字体变大或者变小: 【4】鼠标悬浮在代码上有提示: 【5】自动导包和优化多余的包: 手动导包:快捷键:altenter 自动导包和优化多余的包&#xf…

计算机网络第2章-HTTP和Web协议(2)

Web和HTTP 一个新型应用即万维网(World Wide Web)Web。 HTTP概况 Web的应用层协议是超文本传输协议(HTPP),它是Web的核心。 HTTP由两个程序实现:一个用户程序和一个服务器程序。 Web页面(W…

leetcode-518. 零钱兑换 II

1. 题目 链接: 零钱兑换II 2. 解决方案1 #include <stdio.h> #include <stdlib.h>int change(int amount, int* coins, int coinsSize){int dp[amount1];//确定dp大小memset(dp, 0, sizeof(int) * (amount1));dp[0] 1;//初始化为0for(int i 0 ; i < coins…

LED电子屏幕可以通过什么方式进行人屏互动

传统的LED大屏幕以单向传播的形式面向观众&#xff0c;不仅被动&#xff0c;而且逐渐缺乏动感和创新。随着LED显示技术的蓬勃发展&#xff0c;现在观众与LED电子大屏幕的方式越来越多。那么现阶段实现LED显示屏人屏互动的主要方式都有哪些呢&#xff1f;带你8分钟了解LED互动地…

KASan介绍

目录 概括介绍 配置说明 单独关闭读或写检查 操作使用 影响及注意事项 结果解读 使用注意 实现原理简介 KASAN原理 malloc原理 内容参考 概括介绍 KernelAddressSANitizer &#xff08;KASAN&#xff09; 是一个动态内存错误检测器。它提供了一个快速而全面的解决方…

D课堂 | 如何设置域名解析?解析记录类型选哪个?

上回&#xff0c;D妹和各位小伙伴们介绍了DNS的作用和原理——《什么是DNS&#xff1f;DNS是怎么运作的&#xff1f;》&#xff0c;相信大家对DNS已经有了一定的认识。 DNS是互联网不可或缺的基础服务&#xff0c;核心作用是将域名翻译成计算机可读取的IP地址&#xff0c;也就是…

VMware搭载linux出现的bugs

---------后续在实际Linux项目复盘过程中有遇到问题(解决办法)会不定时更新.......----------- ques: Linux自带的media目录用于挂载或可移动存储设备已满&#xff08;造成这一原因是由于我多次创建新的虚拟机并在同一虚拟目录下挂载同一镜象导致有些残存文件没有删除干净&…

【OpenCv光流法进行运动目标检测】

opencv系列文章目录 文章目录 opencv系列文章目录前言一、光流法是什么&#xff1f;二、光流法实例1.C的2.C版本3.python版本 总结 前言 随着计算机视觉技术的迅猛发展&#xff0c;运动目标检测在图像处理领域中扮演着至关重要的角色。在现实世界中&#xff0c;我们常常需要追…

JDK21要来了,协程对Java带来什么

目录 前言 协程是什么 多线程有什么问题&#xff1f; 协程的线程模型 Reactor模型 使用协程后 RPC并发 IO阻塞 网络IO 磁盘IO epoll为什么不支持磁盘io&#xff1f; Kotlin与Go的协程 Go 使用 Go的协程调度(GPM模型) Kotlin 使用 Kotlin协程调度 阿里Wisp协程…