📣
TiDB Cloud Premium 开放公测中。为企业级工作负载提供无限扩展、即时弹性伸缩和高级安全保障。此页面由 AI 自动翻译,英文原文请见此处。

结构化与半结构化函数



TiDB Cloud Lake 中的结构化与半结构化函数可高效处理数组、对象、映射、JSON 以及其他结构化数据格式。这些函数提供了全面的能力,用于创建、解析、查询、转换和操作结构化与半结构化数据。

JSON 函数

解析与校验

函数描述示例
PARSE_JSON将 JSON 字符串解析为 variant 值PARSE_JSON('[1,2,3]')
CHECK_JSON校验字符串是否为有效的 JSONCHECK_JSON('{"a":1}')
JSON_TYPEOF返回 JSON 值的类型JSON_TYPEOF(PARSE_JSON('[1,2,3]'))

基于路径的查询

函数描述示例
JSON_PATH_EXISTS检查 JSON 路径是否存在JSON_PATH_EXISTS(json_obj, '$.name')
JSON_PATH_QUERY使用 JSONPath 查询 JSON 数据JSON_PATH_QUERY(json_obj, '$.items[*]')
JSON_PATH_QUERY_ARRAY查询 JSON 数据并以数组形式返回结果JSON_PATH_QUERY_ARRAY(json_obj, '$.items')
JSON_PATH_QUERY_FIRST返回 JSON 路径查询的第一个结果JSON_PATH_QUERY_FIRST(json_obj, '$.items[*]')
JSON_PATH_MATCH将 JSON 值与路径模式进行匹配JSON_PATH_MATCH(json_obj, '$.age')
JQ使用 jq 语法进行高级 JSON 处理JQ('.name', json_obj)

值提取

函数描述示例
GET通过键从 JSON 对象中获取值,或通过索引从数组中获取值GET(PARSE_JSON('[1,2,3]'), 0)
GET_PATH使用路径表达式从 JSON 对象中获取值GET_PATH(json_obj, 'user.name')
GET_IGNORE_CASE以不区分大小写的键匹配方式获取值GET_IGNORE_CASE(json_obj, 'NAME')
JSON_EXTRACT_PATH_TEXT使用路径从 JSON 中提取文本值JSON_EXTRACT_PATH_TEXT(json_obj, 'name')

转换与输出

函数描述示例
JSON_TO_STRING将 JSON 值转换为字符串JSON_TO_STRING(PARSE_JSON('{"a":1}'))
JSON_PRETTY使用适当的缩进格式化 JSONJSON_PRETTY(PARSE_JSON('{"a":1}'))
STRIP_NULL_VALUE将 JSON 空值转换为 SQL NULL 值STRIP_NULL_VALUE(parse_json('null')) → NULL
JSON_STRIP_NULLS从 JSON 对象中移除空值JSON_STRIP_NULLS(PARSE_JSON('{"a":1,"b":null}')) → {"a":1}

数组/对象展开

函数描述示例
JSON_EACH将 JSON 对象展开为键值对JSON_EACH(PARSE_JSON('{"a":1,"b":2}'))
JSON_ARRAY_ELEMENTS将 JSON 数组展开为单独的元素JSON_ARRAY_ELEMENTS(PARSE_JSON('[1,2,3]'))

数组函数

函数描述示例
ARRAY从表达式构建数组ARRAY(1, 2, 3)
ARRAY_CONSTRUCT从单个值创建数组ARRAY_CONSTRUCT(1, 2, 3)
RANGE生成由连续数字组成的数组RANGE(1, 5)
ARRAY_GENERATE_RANGE生成可选步长的序列ARRAY_GENERATE_RANGE(0, 6, 2)
GET通过索引从数组中获取元素GET([1,2,3], 0)
ARRAY_GETGET 函数的别名ARRAY_GET([1,2,3], 1)
CONTAINS检查数组是否包含指定值CONTAINS([1,2,3], 2)
ARRAY_CONTAINS检查数组是否包含指定值ARRAY_CONTAINS([1,2,3], 2)
ARRAY_SIZE返回数组长度(别名:ARRAY_LENGTH)ARRAY_SIZE([1,2,3])
ARRAY_COUNT统计非 NULL 元素的数量ARRAY_COUNT([1,NULL,2])
ARRAY_ANY返回第一个非 NULL 条目ARRAY_ANY([NULL,'a','b'])
ARRAY_APPEND在数组末尾追加元素ARRAY_APPEND([1,2], 3)
ARRAY_PREPEND在数组开头前置元素ARRAY_PREPEND([2,3], 1)
ARRAY_INSERT在指定位置插入元素ARRAY_INSERT([1,3], 1, 2)
ARRAY_REMOVE移除指定元素的所有出现项ARRAY_REMOVE([1,2,2,3], 2)
ARRAY_REMOVE_FIRST移除数组中的第一个元素ARRAY_REMOVE_FIRST([1,2,3])
ARRAY_REMOVE_LAST移除数组中的最后一个元素ARRAY_REMOVE_LAST([1,2,3])
ARRAY_CONCAT拼接多个数组ARRAY_CONCAT([1,2], [3,4])
ARRAY_SLICE提取数组的一部分ARRAY_SLICE([1,2,3,4], 1, 2)
SLICEARRAY_SLICE 函数的别名SLICE([1,2,3,4], 1, 2)
ARRAYS_ZIP按元素位置组合多个数组ARRAYS_ZIP([1,2], ['a','b'])
ARRAY_DISTINCT返回数组中的唯一元素ARRAY_DISTINCT([1,2,2,3])
ARRAY_UNIQUEARRAY_DISTINCT 函数的别名ARRAY_UNIQUE([1,2,2,3])
ARRAY_INTERSECTION返回数组之间的公共元素ARRAY_INTERSECTION([1,2,3], [2,3,4])
ARRAY_EXCEPT返回第一个数组中存在但第二个数组中不存在的元素ARRAY_EXCEPT([1,2,3], [2,3])
ARRAY_OVERLAP检查数组是否有公共元素ARRAY_OVERLAP([1,2], [2,3])
ARRAY_TRANSFORM对每个数组元素应用一个函数ARRAY_TRANSFORM([1,2,3], x -> x * 2)
ARRAY_FILTER根据条件过滤数组元素ARRAY_FILTER([1,2,3,4], x -> x > 2)
ARRAY_REDUCE使用聚合将数组归约为单个值ARRAY_REDUCE([1,2,3], 0, (acc, x) -> acc + x)
ARRAY_AGGREGATE使用函数聚合数组元素ARRAY_AGGREGATE([1,2,3], 'sum')
ARRAY_SUM数值的总和ARRAY_SUM([1,2,3])
ARRAY_AVG数值的平均值ARRAY_AVG([1,2,3])
ARRAY_MEDIAN数值的中位数ARRAY_MEDIAN([1,3,2])
ARRAY_MIN最小值ARRAY_MIN([1,2,3])
ARRAY_MAX最大值ARRAY_MAX([1,2,3])
ARRAY_STDDEV_POP总体标准差ARRAY_STDDEV_POP([1,2,3])
ARRAY_STDDEV_SAMP样本标准差ARRAY_STDDEV_SAMP([1,2,3])
ARRAY_KURTOSIS超额峰度ARRAY_KURTOSIS([1,2,3,4])
ARRAY_SKEWNESS偏度ARRAY_SKEWNESS([1,2,3,10])
ARRAY_APPROX_COUNT_DISTINCT近似去重计数ARRAY_APPROX_COUNT_DISTINCT([1,1,2])
ARRAY_SORT对值进行排序;不同变体可控制顺序/空值处理ARRAY_SORT([3,1,2])
ARRAY_TO_STRING连接数组元素ARRAY_TO_STRING(['a','b'], ',')
ARRAY_COMPACT从数组中移除空值ARRAY_COMPACT([1, NULL, 2, NULL, 3])
ARRAY_FLATTEN将嵌套数组展平为单个数组ARRAY_FLATTEN([[1,2], [3,4]])
ARRAY_REVERSE反转数组元素的顺序ARRAY_REVERSE([1,2,3])
ARRAY_INDEXOF返回元素首次出现的索引ARRAY_INDEXOF([1,2,3,2], 2)
UNNEST将数组展开为多行UNNEST([1,2,3])

对象函数

函数描述示例
OBJECT_CONSTRUCT从键值对创建 JSON 对象OBJECT_CONSTRUCT('name', 'John', 'age', 30)
OBJECT_CONSTRUCT_KEEP_NULL创建保留空值的 JSON 对象OBJECT_CONSTRUCT_KEEP_NULL('a', 1, 'b', NULL)
OBJECT_KEYS以数组形式返回 JSON 对象中的所有键OBJECT_KEYS(PARSE_JSON('{"a":1,"b":2}'))
OBJECT_INSERT在 JSON 对象中插入或修改键值对OBJECT_INSERT(json_obj, 'new_key', 'value')
OBJECT_DELETE从 JSON 对象中移除键值对OBJECT_DELETE(json_obj, 'key_to_remove')
OBJECT_PICK创建仅包含指定键的新对象OBJECT_PICK(json_obj, 'name', 'age')

Map 函数

函数描述示例
MAP_CAT将多个 map 合并为一个 mapMAP_CAT({'a':1}, {'b':2})
MAP_KEYS以数组形式返回 map 中的所有键MAP_KEYS({'a':1, 'b':2})
MAP_VALUES以数组形式返回 map 中的所有值MAP_VALUES({'a':1, 'b':2})
MAP_SIZE返回 map 中键值对的数量MAP_SIZE({'a':1, 'b':2})
MAP_CONTAINS_KEY检查 map 是否包含指定键MAP_CONTAINS_KEY({'a':1}, 'a')
MAP_INSERT向 map 中插入键值对MAP_INSERT({'a':1}, 'b', 2)
MAP_DELETE从 map 中移除键值对MAP_DELETE({'a':1, 'b':2}, 'b')
MAP_TRANSFORM_KEYS对 map 中的每个键应用一个函数MAP_TRANSFORM_KEYS(map, k -> UPPER(k))
MAP_TRANSFORM_VALUES对 map 中的每个值应用一个函数MAP_TRANSFORM_VALUES(map, v -> v * 2)
MAP_FILTER根据谓词过滤键值对MAP_FILTER(map, (k, v) -> v > 10)
MAP_PICK创建仅包含指定键的新 mapMAP_PICK({'a':1, 'b':2, 'c':3}, 'a', 'c')

类型转换函数

函数描述示例
AS_BOOLEAN将 VARIANT 值转换为 BOOLEANAS_BOOLEAN(PARSE_JSON('true'))
AS_INTEGER将 VARIANT 值转换为 BIGINTAS_INTEGER(PARSE_JSON('42'))
AS_FLOAT将 VARIANT 值转换为 DOUBLEAS_FLOAT(PARSE_JSON('3.14'))
AS_DECIMAL将 VARIANT 值转换为 DECIMALAS_DECIMAL(PARSE_JSON('12.34'))
AS_STRING将 VARIANT 值转换为 STRINGAS_STRING(PARSE_JSON('"hello"'))
AS_BINARY将 VARIANT 值转换为 BINARYAS_BINARY(TO_BINARY('abcd')::VARIANT)
AS_DATE将 VARIANT 值转换为 DATEAS_DATE(TO_DATE('2025-10-11')::VARIANT)
AS_ARRAY将 VARIANT 值转换为 ARRAYAS_ARRAY(PARSE_JSON('[1,2,3]'))
AS_OBJECT将 VARIANT 值转换为 OBJECTAS_OBJECT(PARSE_JSON('{"a":1}'))

类型谓词函数

函数描述示例
IS_ARRAY检查 JSON 值是否为数组IS_ARRAY(PARSE_JSON('[1,2,3]'))
IS_OBJECT检查 JSON 值是否为对象IS_OBJECT(PARSE_JSON('{"a":1}'))
IS_STRING检查 JSON 值是否为字符串IS_STRING(PARSE_JSON('"hello"'))
IS_INTEGER检查 JSON 值是否为整数IS_INTEGER(PARSE_JSON('42'))
IS_FLOAT检查 JSON 值是否为浮点数IS_FLOAT(PARSE_JSON('3.14'))
IS_BOOLEAN检查 JSON 值是否为布尔值IS_BOOLEAN(PARSE_JSON('true'))
IS_NULL_VALUE检查 JSON 值是否为空值IS_NULL_VALUE(PARSE_JSON('null'))

文档内容是否有帮助?