当您需要将字符串转换为Map类型以便查询和报表生成时,MaxCompute提供STR_TO_MAP
函数,可以帮助您将数据转换为MAP格式,使用分隔符1(delimiter1)将目标字符串分割成Key-Value对,然后使用分隔符2(delimiter2)分割每个Key-Value对的Key和Value。本文为您介绍在MaxCompute中将字符串转换为MAP类型函数的使用。
命令格式
str_to_map([string <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]])
参数说明
mapDupKeyPolicy:可选。STRING类型。指定出现重复Key时的处理方式。取值范围如下:
exception:如果出现重复的Key,返回报错。
last_win:如果出现重复的Key,后边的值将覆盖前边的值。
说明MaxCompute的行为实现优先以函数中mapDupKeyPolicy的取值为准,当函数未配置mapDupKeyPolicy时,以
odps.sql.map.key.dedup.policy
参数的取值为准。text:必填。STRING类型,指被分割的字符串。
delimiter1:可选。STRING类型,分隔符,不指定时默认为英文逗号(
,
)。delimiter2:可选。STRING类型,分隔符,不指定时默认为等于号(
=
)。说明当分隔符是正则表达式或特殊字符时,要在前面加两个反斜线(\\)来做转义。特殊字符包括冒号(:)、英文句点(.)、问号(?)、加号(+)或星号(*)。
返回值说明
返回值类型为map<string, string>
。返回值是text被delimiter1和delimiter2分割后的结果。
使用示例
--返回{test1:1, test2:2}。
SELECT str_to_map('test1&1-test2&2','-','&');
--返回{test1:1, test2:2}。
SELECT str_to_map("test1.1,test2.2", ",", "\\.");
--返回{test1:1, test2:3}。
SELECT str_to_map("test1.1,test2.2,test2.3", ",", "\\.");
相关函数
STR_TO_MAP函数属于其他函数,更多其他业务场景的函数请参见其他函数。