人大金仓数据库KingbaseES新兼容 ——MySQL的JSON操作符

关键字:

KingbaseES、JSON操作符、MySQL

1.产品新特性

在Mysql中,JSON操作符允许用户对JSON数据类型的列中执行各种操作:操作符‘->’用于从JSON对象中提取一个特定的键的值。例如,json_column -> ‘$.key’将返回JSON对象中为‘key’的值;操作符‘->>’与操作符’->’类似,但返回的是提取值的字符串表示,例如,json_column ->> ‘$.key’将返回键为‘key’的值作为字符串。 在KingbaseES最新版本中,我们兼容了MySQL中的‘->’操作符以及‘->>’操作符,通过使用这些操作符,用户可以方便地在JSON数据类型的列中执行各种操作。

2.新兼容JSON操作符

2.1 ‘->’操作符

2.1.1 操作符语法

操作符语法左操作数类型右操作数类型返回类型索引
json-> pathjson类型jsonpath类型json类型不支持

2.1.2 功能描述

‘->’操作符其实是函数JSON_EXTRACT只有两个参数时的别名,其功能是返回json文档中指定path对应的值。JSON_EXTRACT(json_doc,path[,path]…)函数可以有多个path,而‘->’操作符只能指定一个path。且不支持索引:

Mysql> create index t_idx_a on t ((a->'$.a'));
ERROR 3753 (42000): Cannot create a functional index on a function that returns a JSON or GEOMETRY value.

2.1.3 功能举例

Mysql > select * from jsontest;
+------------------------+
|           json                 |
+------------------------+
|  {“a”:”b”}               |
|     [1, 2, ,3]                |
+------------------------+
Mysql > select json -> ‘$.a’ from jsontest;
+------------------------+
| json -> ‘$.a’             |
--------------------------
| “b”                             |
| NULL                        |
+------------------------+
Mysql > select json -> ‘$.a’ from jsontest;
+------------------------+
| json -> ‘$[0]’           |
--------------------------
| {“a”:”b”}                  |
| 1                                 |
+------------------------+

2.2 ‘->>’操作符

2.2.1 操作符语法

操作符语法左操作数类型右操作数类型返回类型索引
json->> pathjson类型jsonpath类型字符串不支持

2.2.2 功能描述

‘->>’操作符是‘->’操作符的扩展,以字符串形式返回指定json文档中指定path对应的值,并取消引用。等同于将‘->’操作符所得结果以字符串形式返回。也可用JSON_UNQUOTE( JSON_EXTRACT(json, path) )函数表示。且不支持索引:

Mysql> create index t_idx_a on t ((a->>'$.a'));
ERROR 3757 (HY000): Cannot create a functional index on an expression that returns a BLOB or TEXT. Please consider using CAST.

下面3中形式将返回相同的值:

  • JSON_UNQUOTE( JSON_EXTRACT(json, path) )
  • JSON_UNQUOTE(json -> path)
  • json->>path

2.2.3 功能举例

Mysql > select * from jsontest;
+------------------------+
|     json                  |
+------------------------+
|  {“a”:”b”}               |
|  [1, 2, ,3]                 |
+------------------------+
Mysql > select json ->> ‘$.a’ from jsontest;
+------------------------+
| json -> ‘$.a’             |
---------------------------
| b                                 |
| NULL                        |
+------------------------+
Mysql > select json ->> ‘$.a’ from jsontest;
+-------------------------+
| json -> ‘$[0]’            |
---------------------------
| {“a”:”b”}                   |
| 1                                  |
+-------------------------+

3.金仓数据库KingbaseES的实现方式

在金仓数据库中,上述两种操作符在插件mysql_json中实现,用户在使用时需要在mysql模式下create插件:

test=# show database_mode;
 database_mode
---------------
 mysql
(1 row)

test=# create extension mysql_json ;
CREATE EXTENSION

之后用户可以如同MySQL一样,对JSON列使用操作符进行操作。

4.总结和展望

该功能兼容了MySQL中的JSON操作符。功能虽小,但金仓数据库正在遵循国际标准并提高与MySQL等其他数据的兼容性,以便更好地与现有的生态系统集成,从而进一步提升用户对产品的认可度以及信任度,吸引更多的用户采用和推广。

更多信息,参见https://help.kingbase.com.cn/v8/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值