全部產品
Search
文件中心

MaxCompute:TRANSFORM_KEYS

更新時間:Jun 19, 2024

對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>中的K1V指代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資料)的處理函數請參見複雜類型函數