VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

JSON_TABLE

功能描述

Vastbase在Oracle兼容模式下支持JSON_TABLE函数,用于将JSON数据转换为表格形式,接受一个或多个JSON文档作为输入,解析这些JSON文档后根据用户指定的模板,将JSON数据转换为表格形式。JSON_TABLE函数的返回值是一个虚拟表格,可以像普通表格一样进行查询和操作。

注意事项

该功能仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。

语法格式

JSON_TABLE(json,path,columns())

参数说明

  • json

    包含输入的json数据,为json类型。

    不支持格式化json。

  • path

    指定要转换的json的路径。如 '$.array[*]'指定的是json路径下的array数组下的全部元素。

    不支持指定在发生错误时的返回值。

  • columns

    指定输出的结果表的列结构,分为PATH,NESTED_PATH两种类型。

示例

1、创建测试表并插入数据。

CREATE TABLE t_1172410
(id int NOT NULL,
date_loaded TIMESTAMP(6) WITH TIME ZONE,
po_document varchar2(2000) );

2、向测试表中插入数据。

INSERT INTO t_1172410
VALUES (
1,
date'2000-12-01',
'{"PONumber" : 1600,
"Reference" : "ABULL-20140421",
"Requestor" : "Alexis Bull",
"User" : "ABULL",
"CostCenter" : "A50",
"ShippingInstructions" : {"name" : "Alexis Bull",
"Address": {"street" : "200 Sporting Green",
"city" : "South San Francisco",
"state" : "CA",
"zipCode" : 99236,
"country" : "United States of America"},
"Phone" : [{"type" : "Office", "number" : "909-555-7307"},
{"type" : "Mobile", "number" : "415-555-1234"}]},
"Special Instructions" : null,
"AllowPartialShipment" : true,
"LineItems" : [{"ItemNumber" : 1,
"Part" : {"Description" : "One Magic Christmas",
"UnitPrice" : 19.95,
"UPCCode" : 13131092899},
"Quantity" : 9.0},
{"ItemNumber" : 2,
"Part" : {"Description" : "Lethal Weapon",
"UnitPrice" : 19.95,
"UPCCode" : 85391628927},
"Quantity" : 5.0}]}');

3、查询测试表数据,使用JSON_TABLE函数将数据转换为表结构。

SELECT jt.*
FROM t_1172410,
JSON_TABLE(po_document, '$.ShippingInstructions.Phone[*]'
COLUMNS (row_number int,
phone_type VARCHAR2(10) PATH '$.type',
phone_num VARCHAR2(20) PATH '$.number'))
AS jt;

返回结果为如下:

 row_number | phone_type |  phone_num
------------+------------+--------------
            | Office     | 909-555-7307
            | Mobile     | 415-555-1234
(2 rows)