Skip to content

Latest commit

 

History

History
57 lines (44 loc) · 6.48 KB

json-functions-and-operators.md

File metadata and controls

57 lines (44 loc) · 6.48 KB

JSON 函数概述

StarRocks 支持如下 JSON 构造函数、JSON 查询和处理函数、JSON 运算符以及查询 JSON 对象的 JSON Path。

JSON 构造函数

JSON 构造函数可以构造 JSON 类型的数据。例如 JSON 类型的对象、JSON 类型的数组等。

函数名称 功能 示例 返回结果
JSON_OBJECT 构造 JSON 类型的对象。 SELECT JSON_OBJECT(' Daniel Smith', 26, 'Lily Smith', 25) {"Daniel Smith": 26, "Lily Smith": 25}
JSON_ARRAY 构造 JSON 类型的数组。 SELECT JSON_ARRAY(1, 2, 3) [1,2,3]
PARSE_JSON 从字符串解析并构造出 JSON 类型的数据。 SELECT PARSE_JSON('{"a": 1}') {"a": 1}

JSON 查询和处理函数

JSON 查询和处理函数可以查询和处理 JSON 类型的数据。例如查询 JSON 对象中指定路径下的值。

函数名称 功能 示例 返回结果
箭头函数 查询 JSON 对象中指定路径下的值。 SELECT {"a": {"b": 1}} -> '$.a.b' 1
JSON_QUERY 查询 JSON 对象中指定路径下的值。 SELECT JSON_QUERY({"a": 1}, '$.a') 1
JSON_EXISTS 查询 JSON 对象中是否存在某个值。如果存在,则返回 1;如果不存在,则返回 0。 SELECT JSON_EXISTS({"a": 1}, '$.a') 1
JSON_EACH 将最外层的 JSON 对象展开为键值对。 SELECT * FROM JSON_EACH('{"a": 1, "b":{"c": 3, "d": null}}  key | value
-----+----
  a  |  1
  b  |  {"c": 3, "d": null}
JSON 类型转换 将实现 JSON 类型的数据与 SQL 类型间的互相转换。 SELECT CAST(PARSE_JSON('1') as INT); 1
get_json_double 解析并获取 json_str 内 json_path 的浮点型内容。 SELECT get_json_double('{"k1":1.3, "k2":"2"}', "$.k1"); 1.3
get_json_int 解析并获取 json_str 内 json_path 的整型内容。 SELECT get_json_int('{"k1":1, "k2":"2"}', "$.k1"); 1
get_json_string 解析并获取 json_str 内 json_path 指定的字符串。该函数别名为 get_json_object. SELECT get_json_string('{"k1":"v1", "k2":"v2"}', "$.k1"); v1

JSON 运算符

StarRocks 支持使用 <,<=,>,>=, =,!= 运算符查询 JSON 数据,不支持使用 IN 运算符。JSON 运算符的更多说明,请参见 JSON 运算符

JSON Path

您可以使用 JSON Path 路径表达式,查询 JSON 类型的对象中指定路径的值。JSON Path 为字符串类型,一般结合多种 JSON 函数使用(例如 JSON_QUERY)。目前 StarRocks 中 JSON Path 没有完全遵循 SQL/JSONPath 标准。StarRocks 中 JSON Path 语法说明,参见下表(以如下 JSON object 为例)。

{
    "people": [{
        "name": "Daniel",
        "surname": "Smith"
    }, {
        "name": "Lily",
        "surname": "Smith",
        "active": true
    }]
}
JSON Path 的符号 说明 JSON Path 示例 查询上述 JSON 对象的值
$ 表示根节点的对象。 '$' { "people": [ { "name": "Daniel", "surname": "Smith" }, { "name": "Lily", "surname": Smith, "active": true } ] }
. 表示子节点。 ' $.people' [ { "name": "Daniel", "surname": "Smith" }, { "name": "Lily", "surname": Smith, "active": true } ]
[] 表示一个或多个数组下标。[n] 表示选择数组中第 n 个元素,从 0 开始计数。
从 2.5 版本开始支持查询多维数组,例如 ["Lucy", "Daniel"], ["James", "Smith"]。如果要查询到 "Lucy"这个元素,可以使用路径 $.people[0][0]
'$.people[0]' { "name": "Daniel", "surname": "Smith"}
[*] 表示数组中的全部元素。 '$.people[*].name' ["Daniel", "Lily"]
[start: end] 表示数组片段,区间为 [start, end),不包含 end 代表的元素。 '$.people[0: 1].name' ["Daniel"]