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处理能力将持续升级,引领更多场景应用。
供稿:产品研发中心
编辑:王堇
审核:日尧