當您需要將字串轉換為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類型,分隔字元,不指定時預設為等號(
=
)。說明當分隔字元是Regex或特殊字元時,要在前面加兩個反斜線(\\)來做轉義。特殊字元包括冒號(:)、英文句點(.)、問號(?)、加號(+)或星號(*)。
傳回值說明
傳回值類型為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函數屬於其他函數,更多其他業務情境的函數請參見其他函數。