函数
函数名 | 功能描述 |
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 valueFROM LATERAL TABLE(GENERATE_SERIES(start, stop)) AS T(value);
参数说明:
参数 | 类型 | 是否必填 | 说明 |
start | BIGINT / INT | 是 | 序列起始值,包含该值。 |
stop | BIGINT / INT | 是 | 序列结束值,包含该值。 |
返回值:
表值函数,返回一列整数序列。
返回列 | 类型 | 说明 |
用户指定列名 | BIGINT | 生成的序列值。列名由 LATERAL TABLE ... AS T(value) 中的别名指定。 |
示例:
生成 1 到 5 的整数序列:
SELECT valueFROM 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 valueFROM LATERAL TABLE(GENERATE_SERIES(start, stop)) AS T(value);
参数说明:
参数 | 类型 | 是否必填 | 说明 |
start | BIGINT / INT | 是 | 序列起始值,包含该值。 |
stop | BIGINT / INT | 是 | 序列结束值,包含该值。 |
返回值:
表值函数,返回一列整数序列。
返回列 | 类型 | 说明 |
用户指定列名 | BIGINT | 生成的序列值。列名由 LATERAL TABLE ... AS T(value) 中的别名指定。 |
示例:
生成 1 到 5 的整数序列。
SELECT valueFROM 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 使用:
SELECTkv.value1,kv.value2FROM 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。
SELECTuid,os,versionFROM 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 使用:
SELECTt.valueFROM LATERAL TABLE(STRING_SPLIT(str, delimiter)) AS t(value);
参数说明:
参数 | 类型 | 是否必填 | 说明 |
str | STRING | 是 | 待拆分的字符串。 |
delimiter | STRING | 是 | 分隔符。 |
返回值:
表值函数,返回一列字符串。
返回列 | 类型 | 说明 |
用户指定列名 | STRING | 拆分后的子字符串。列名由 LATERAL TABLE ... AS alias(...) 指定。 |
示例:
1. 示例 1:拆分逗号分隔字符串。
SELECT valueFROM LATERAL TABLE(STRING_SPLIT('apple,banana,orange', ',')) AS T(value);
返回结果:
value |
apple |
banana |
orange |
2. 示例 2:分隔符不存在。
SELECT itemFROM LATERAL TABLE(STRING_SPLIT('abc', ',')) AS T(item);
返回结果:
item |
abc |
注意事项:
拆分会将一行输入展开为多行输出,请注意数据量膨胀。
如果分隔符不存在,通常返回原字符串作为唯一的一行。