對MAP對象input進行變換,保持Value不變,通過func計算新的Key值。
命令格式
map<K2, V> transform_keys([string <mapDupKeyPolicy>,] map<K1, V> <input>, function<K1, V, K2> <func>)
參數說明
mapDupKeyPolicy:可選。STRING類型。指定出現重複Key時的處理方式。取值範圍如下:
exception:如果出現重複的Key,返回報錯。
last_win:如果出現重複的Key,後邊的值將覆蓋前邊的值。
該參數也可以在Session層級通過
odps.sql.map.key.dedup.policy
參數進行設定,例如set odps.sql.map.key.dedup.policy=exception;
,不設定時該參數預設值為last_win。說明MaxCompute的行為實現優先以函數中mapDupKeyPolicy的取值為準,當函數未配置mapDupKeyPolicy時,以
odps.sql.map.key.dedup.policy
參數的取值為準。input:必填。MAP對象。
map<K1, V>
中的K1
、V
指代MAP對象的Key、Value。func:必填。變換的函數(內建函數或自訂函數)或運算式。它的兩個輸入參數分別對應input的Key和Value,
K2
指代新MAP的Key類型。
傳回值說明
返回MAP類型。如果計算的新Key為NULL,會返回報錯。
使用樣本
--返回{-10:-20, 70:50, 71:101}。
select transform_keys(map(10, -20, 20, 50, -30, 101), (k, v) -> k + v);
--不報錯,返回的結果依賴於輸入map中元素的順序。
select transform_keys("last_win", map(10, -20, 20, 50, -30, 100), (k, v) -> k + v);
--因出現重複Key,返回報錯。
select transform_keys("exception", map(10, -20, 20, 50, -30, 100), (k, v) -> k + v);
說明
使用樣本中涉及->
的使用,關於Lambda函數->
的介紹,詳情請參見Lambda函數。
相關函數
TRANSFORM_KEYS函數屬於複雜類型函數,更多對複雜類型資料(例如ARRAY、MAP、STRUCT、JSON資料)的處理函數請參見複雜類型函數。