首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

KING BASE

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

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

01

能力一:构造JSON

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

能构造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的函数如下表所示:

当我们想要插入数据到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目前支持如下的删除函数:

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

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

更新JSON

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

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

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

操作符

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

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

03

能力三:查询JSON

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

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

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目前支持如下两个输出函数:

05

能力五:JSON的聚集

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

06

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

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

07

其他能力

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

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

PK

KingbaseES/Oracle/MySQL

JSON能力

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

END

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

供稿:产品研发中心

编辑:王堇

审核:日尧

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OrtfsjDVi7O4t-pxZjrXeQkw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券