首页 / 字符串
SPLIT 字符串拆分
SPLIT 按分隔符把字符串拆成数组。MaxCompute、Hive 和 Spark 的分隔符按正则表达式处理,Doris 要改用 SPLIT_BY_STRING,Hologres 没有 SPLIT,要用 REGEXP_SPLIT_TO_ARRAY。
各引擎写法
| 引擎 | 支持 | 写法 | 说明 | 依据 |
|---|---|---|---|---|
| MaxCompute | 支持 | SPLIT(source, delimiter[, trimTailEmpty]) |
返回 ARRAY<STRING>。分隔符支持正则表达式。trimTailEmpty 默认为 true,会去掉末尾的空字符串。任一参数为 NULL 时返回 NULL。 | 官方文档 |
| Hologres | 需改写 | REGEXP_SPLIT_TO_ARRAY(str, pattern) |
字符串函数中没有 SPLIT。拆成数组用 REGEXP_SPLIT_TO_ARRAY,只取第 n 段用 SPLIT_PART(str, delimiter, n)。 | 官方文档 |
| StarRocks | 支持 | split(content, delimiter) |
返回 ARRAY<VARCHAR>。分隔符为空字符串时按单个字符拆分。文档没有说明分隔符是否按正则处理。 | 官方文档 |
| Doris | 需改写 | SPLIT_BY_STRING(str, separator) |
返回字符串数组,任一参数为 NULL 时返回 NULL。分隔符为空字符串时按字节拆分。 | 官方文档 |
| Hive | 支持 | split(str, pat) |
返回 array,pat 是正则表达式。 | 官方文档 |
| Spark SQL | 支持 | split(str, regex[, limit]) |
Spark 1.5.0 起提供,按正则拆分,limit 限制数组的最大长度。 | 官方文档 |
| Flink SQL | 支持 | SPLIT(string, delimiter) |
字符串或分隔符为 NULL 时返回 NULL。只取第 n 段可以用 SPLIT_INDEX。 | 官方文档 |
迁移注意事项
- MaxCompute、Hive 和 Spark 按正则处理分隔符。用 . 或 | 拆分时要写成 '\\.' 或 '\\|',否则会被当成正则元字符,结果出错。
- MaxCompute 默认去掉末尾的空字符串:SPLIT('a,b,c,,', ',') 返回 ["a","b","c"]。其他引擎的处理方式不一定相同,需要保留时传入 false。
- 只需要取某一段时,Hologres 的 SPLIT_PART 和 Flink 的 SPLIT_INDEX 更直接。注意 SPLIT_PART 的序号从 1 开始,SPLIT_INDEX 为负数时返回 NULL。
示例
把逗号分隔的标签拆成数组
SELECT SPLIT(tags, ',') FROM items;SELECT REGEXP_SPLIT_TO_ARRAY(tags, ',') FROM items;SELECT split(tags, ',') FROM items;SELECT SPLIT_BY_STRING(tags, ',') FROM items;SELECT split(tags, ',') FROM items;