表值函数

最近更新时间:2026-07-06 16:01:30

我的收藏

函数

函数名
功能描述
GENERATE_SERIES
GENERATE_SERIES 用于生成一个连续的整数序列,并将序列展开为多行。该函数常用于构造测试数据、根据起止值展开连续编号、补齐序列,或将区间字段展开为多行。
JSON_TUPLE
JSON_TUPLE 用于从 JSON 字符串中一次性提取多个字段,并以多列形式返回。相比多次调用单字段 JSON 提取函数,JSON_TUPLE 更适合从同一个 JSON 字符串中提取多个字段的场景。常用于解析日志中的 JSON 字段、提取埋点事件属性,或将半结构化 JSON 内容转换为关系型列。
MULTI_KEYVALUE
MULTI_KEYVALUE 用于从 Key-Value 格式字符串中一次性提取多个 Key 对应的 Value,并以多列形式返回。它可以看作 KEYVALUE 的多字段版本。当需要从同一个字符串中提取多个 Key 时,使用 MULTI_KEYVALUE 可以避免重复解析同一字段。常用于日志扩展字段解析、URL 查询参数解析、埋点属性解析等场景。
STRING_SPLIT
STRING_SPLIT 用于按照指定分隔符拆分字符串,并将拆分后的子字符串展开为多行。该函数常用于拆分逗号分隔的标签、将多值字段展开为多行,或将字符串列表转换为行级数据,便于后续过滤、关联或聚合。

GENERATE_SERIES

支持版本:1.16及以上版本。
功能描述:GENERATE_SERIES 用于生成一个连续的整数序列,并将序列展开为多行。该函数常用于构造测试数据、根据起止值展开连续编号、补齐序列,或将区间字段展开为多行。
语法:GENERATE_SERIES(start, stop)

SELECT value
FROM LATERAL TABLE(GENERATE_SERIES(start, stop)) AS T(value);
参数说明:
参数
类型
是否必填
说明
start
BIGINT / INT
序列起始值,包含该值。
stop
BIGINT / INT
序列结束值,包含该值。
返回值:
表值函数,返回一列整数序列。
返回列
类型
说明
用户指定列名
BIGINT
生成的序列值。列名由 LATERAL TABLE ... AS T(value) 中的别名指定。
示例:
生成 1 到 5 的整数序列:
SELECT value
FROM LATERAL TABLE(GENERATE_SERIES(1, 5)) AS T(value);
返回结果:
value
1
2
3
4
5
注意事项
如果生成范围较大,会展开出大量行,可能导致数据量显著膨胀。
使用时建议控制区间范围,避免单条输入数据展开为过多输出行。

JSON_TUPLE

支持版本:1.16及以上版本。
功能描述:JSON_TUPLE 用于从 JSON 字符串中一次性提取多个字段,并以多列形式返回。相比多次调用单字段 JSON 提取函数,JSON_TUPLE 更适合从同一个 JSON 字符串中提取多个字段的场景。常用于解析日志中的 JSON 字段、提取埋点事件属性,或将半结构化 JSON 内容转换为关系型列。
语法:JSON_TUPLE(json_str, key1[, key2, key3, ...])
配合 LATERAL TABLE 使用:
SELECT value
FROM LATERAL TABLE(GENERATE_SERIES(start, stop)) AS T(value);
参数说明:
参数
类型
是否必填
说明
start
BIGINT / INT
序列起始值,包含该值。
stop
BIGINT / INT
序列结束值,包含该值。
返回值:
表值函数,返回一列整数序列。
返回列
类型
说明
用户指定列名
BIGINT
生成的序列值。列名由 LATERAL TABLE ... AS T(value) 中的别名指定。
示例:
生成 1 到 5 的整数序列。
SELECT value
FROM LATERAL TABLE(GENERATE_SERIES(1, 5)) AS T(value);
返回结果:
value
1
2
3
4
5
注意事项:
如果生成范围较大,会展开出大量行,可能导致数据量显著膨胀。
使用时建议控制区间范围,避免单条输入数据展开为过多输出行。

MULTI_KEYVALUE

支持版本:1.16及以上版本。
功能描述:MULTI_KEYVALUE 用于从 Key-Value 格式字符串中一次性提取多个 Key 对应的 Value,并以多列形式返回。它可以看作 KEYVALUE 的多字段版本。当需要从同一个字符串中提取多个 Key 时,使用 MULTI_KEYVALUE 可以避免重复解析同一字段。常用于日志扩展字段解析、URL 查询参数解析、埋点属性解析等场景。
语法:MULTI_KEYVALUE(str, split1, split2, key_name1[, key_name2, key_name3, ...])
配合 LATERAL TABLE 使用:
SELECT
kv.value1,
kv.value2
FROM source_table AS s,
LATERAL TABLE(
MULTI_KEYVALUE(s.ext, '&', '=', 'key1', 'key2')
) AS kv(value1, value2);
参数说明:
参数
类型
是否必填
说明
str
STRING
待解析的 Key-Value 字符串。
split1
STRING
一级分隔符,用于分隔多个 Key-Value 片段。
split2
STRING
二级分隔符,用于分隔 Key 和 Value。
key_name1
STRING
需要提取的第一个 Key 名称。
key_name2, key_name3, ...
STRING
需要继续提取的其他 Key 名称。
返回值:
表值函数,返回多列字符串。
返回列
类型
说明
用户指定列名
STRING
每个 Key 对应一个返回列。列名由 LATERAL TABLE ... AS alias(...) 指定。
示例:
示例 1:一次提取多个 Key。
SELECT
uid,
os,
version
FROM LATERAL TABLE(
MULTI_KEYVALUE('uid=10001;os=ios;version=1.2.0', ';', '=', 'uid', 'os', 'version')
) AS T(uid, os, version);

返回结果:
uid
os
version
10001
ios
1.2.0
使用限制:
MULTI_KEYVALUE 是表值函数,需要配合 LATERAL TABLE 使用。
返回列数量应与指定 Key 的数量一致。
如果某个 Key 不存在,对应列返回 NULL。
如果只需要提取一个 Key,可以使用 KEYVALUE。

STRING_SPLIT

支持版本:1.16及以上版本。
功能描述:STRING_SPLIT 用于按照指定分隔符拆分字符串,并将拆分后的子字符串展开为多行。
该函数常用于拆分逗号分隔的标签、将多值字段展开为多行,或将字符串列表转换为行级数据,便于后续过滤、关联或聚合。
语法:STRING_SPLIT(str, delimiter)
配合 LATERAL TABLE 使用:
SELECT
t.value
FROM LATERAL TABLE(STRING_SPLIT(str, delimiter)) AS t(value);
参数说明:
参数
类型
是否必填
说明
str
STRING
待拆分的字符串。
delimiter
STRING
分隔符。
返回值:
表值函数,返回一列字符串。
返回列
类型
说明
用户指定列名
STRING
拆分后的子字符串。列名由 LATERAL TABLE ... AS alias(...) 指定。
示例:
1. 示例 1:拆分逗号分隔字符串。
SELECT value
FROM LATERAL TABLE(
STRING_SPLIT('apple,banana,orange', ',')
) AS T(value);

返回结果:
value
apple
banana
orange
2. 示例 2:分隔符不存在。
SELECT item
FROM LATERAL TABLE(
STRING_SPLIT('abc', ',')
) AS T(item);
返回结果:
item
abc
注意事项:
拆分会将一行输入展开为多行输出,请注意数据量膨胀。
如果分隔符不存在,通常返回原字符串作为唯一的一行。