跳到主要内容

结构化与半结构化函数

Databend 中的结构化与半结构化函数能够高效处理数组(Array)、对象(Object)、映射(Map)、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_TO_STRING将 JSON 值转换为字符串JSON_TO_STRING(PARSE_JSON('{"a":1}'))
JSON_PATH_EXISTS检查 JSON 路径是否存在JSON_PATH_EXISTS(json_obj, '$.name')
JSON_PATH_MATCH根据路径模式匹配 JSON 值JSON_PATH_MATCH(json_obj, '$.age')
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_EXTRACT_PATH_TEXT通过路径从 JSON 中提取文本值JSON_EXTRACT_PATH_TEXT(json_obj, 'name')
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_EACH将 JSON 对象展开为键值对JSON_EACH(PARSE_JSON('{"a":1,"b":2}'))
JSON_ARRAY_ELEMENTS将 JSON 数组展开为独立元素JSON_ARRAY_ELEMENTS(PARSE_JSON('[1,2,3]'))
JSON_PRETTY格式化 JSON 并保留合理缩进JSON_PRETTY(PARSE_JSON('{"a":1}'))
STRIP_NULL_VALUE移除 JSON 中的 null 值STRIP_NULL_VALUE(PARSE_JSON('{"a":1,"b":null}'))

数组函数

函数描述示例
ARRAY_CONSTRUCT从独立值创建数组ARRAY_CONSTRUCT(1, 2, 3)
RANGE生成连续数字的数组RANGE(1, 5)
GET通过索引从数组获取元素GET(PARSE_JSON('[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_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_COMPACT移除数组中的 null 值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 对象并保留 null 值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_CAT({'a':1}, {'b':2})
MAP_KEYS返回映射的所有键(数组形式)MAP_KEYS({'a':1, 'b':2})
MAP_VALUES返回映射的所有值(数组形式)MAP_VALUES({'a':1, 'b':2})
MAP_SIZE返回映射中的键值对数量MAP_SIZE({'a':1, 'b':2})
MAP_CONTAINS_KEY检查映射是否包含特定键MAP_CONTAINS_KEY({'a':1}, 'a')
MAP_INSERT向映射中插入键值对MAP_INSERT({'a':1}, 'b', 2)
MAP_DELETE从映射中移除键值对MAP_DELETE({'a':1, 'b':2}, 'b')
MAP_TRANSFORM_KEYS对映射的每个键应用函数MAP_TRANSFORM_KEYS(map, k -> UPPER(k))
MAP_TRANSFORM_VALUES对映射的每个值应用函数MAP_TRANSFORM_VALUES(map, v -> v * 2)
MAP_FILTER根据谓词筛选键值对MAP_FILTER(map, (k, v) -> v > 10)
MAP_PICK创建仅含指定键的新映射MAP_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 值是否为 nullIS_NULL_VALUE(PARSE_JSON('null'))
开始使用 Databend Cloud
低成本
快速分析
多种数据源
弹性扩展
注册