SQL 方言通

首页 / 数组和 Map

STR_TO_MAP 字符串转 Map

STR_TO_MAP 用两个分隔符把字符串拆成键值对,返回 Map。除 Hologres 外都同名可用,但默认的键值分隔符不同:MaxCompute 和 Flink 默认是等号,StarRocks、Doris、Hive 和 Spark 默认是冒号。迁移时建议把两个分隔符都写明。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持STR_TO_MAP([mapDupKeyPolicy,] text[, delimiter1[, delimiter2]])delimiter1 默认是逗号,delimiter2 默认是等号。分隔符是冒号、句点、问号、加号、星号等特殊字符时要用两个反斜杠转义。可以用 mapDupKeyPolicy 指定重复键是报错还是后者覆盖。官方文档
Hologres不支持—字符串函数中没有 STR_TO_MAP。官方文档
StarRocks支持str_to_map(content[, delimiter[, map_delimiter]])3.1 起提供。delimiter 默认是逗号,map_delimiter 默认是冒号。任一参数为 NULL 时返回 NULL。官方文档
Doris支持STR_TO_MAP(str[, pair_delimiter[, key_value_delimiter]])3.0.6 起提供。键值对分隔符默认是逗号,键和值的分隔符默认是冒号。官方文档
Hive支持str_to_map(text[, delimiter1, delimiter2])delimiter1 默认是逗号,delimiter2 默认是冒号。官方文档
Spark SQL支持str_to_map(text[, pairDelim[, keyValueDelim]])Spark 2.0.1 起提供。默认分隔符是逗号和冒号,两个分隔符都按正则表达式处理。官方文档
Flink SQL支持STR_TO_MAP(string1[, string2, string3])键值对分隔符默认是逗号,键和值的分隔符默认是等号。两个分隔符都按正则表达式处理,特殊字符需要转义。官方文档

迁移注意事项

示例

解析 k1=v1&k2=v2 形式的参数

MaxCompute
SELECT STR_TO_MAP(params, '&', '=') AS kv FROM access_log;
StarRocks
SELECT str_to_map(params, '&', '=') AS kv FROM access_log;
Doris
SELECT STR_TO_MAP(params, '&', '=') AS kv FROM access_log;
Hive
SELECT str_to_map(params, '&', '=') AS kv FROM access_log;
Spark SQL
SELECT str_to_map(params, '&', '=') AS kv FROM access_log;
Flink SQL
SELECT STR_TO_MAP(params, '&', '=') AS kv FROM access_log;

同类函数

最后核对日期: