文档

TRANSFORM_KEYS

更新时间:

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