对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数据)的处理函数请参见复杂类型函数。