使用给定的Key-Value对生成MAP。
命令格式
map(K, V) map(K <key1>, V <value1>, K <key2>, V <value2>[, ...])
参数说明
key:必填。所有key类型一致(包括隐式转换后类型一致),必须是基本类型。
value:必填。所有value类型一致(包括隐式转换后类型一致),支持除Decimal之外的其它数据类型。
返回值说明
返回MAP类型。
说明
您可以在Session级别通过odps.sql.map.key.dedup.policy
参数设置出现重复Key时的处理方式。取值范围如下:
exception:如果出现重复的Key,返回报错。
last_win:如果出现重复的Key,后边的值将覆盖前边的值。
不设置时,该参数默认值为last_win。
使用示例
示例1:无重复Key。例如表
t_table
的字段为c1 bigint, c2 string, c3 string, c4 bigint, c5 bigint
,包含数据如下。+------------+----+----+------------+------------+ | c1 | c2 | c3 | c4 | c5 | +------------+----+----+------------+------------+ | 1000 | k11 | k21 | 86 | 15 | | 1001 | k12 | k22 | 97 | 2 | | 1002 | k13 | k23 | 99 | 1 | +------------+----+----+------------+------------+
命令示例如下。
--将c2、c4,c3、c5组成MAP。 select map(c2,c4,c3,c5) from t_table; --返回结果如下。 +------+ | _c0 | +------+ | {k11:86, k21:15} | | {k12:97, k22:2} | | {k13:99, k23:1} | +------+
示例2。有重复Key。例如表
t_table
的字段为c1 bigint, c2 string, c3 string, c4 bigint, c5 bigint
,包含数据如下。1000,'k11','k11',86,15 1001,'k12','k22',97,2 1002,'k13','k23',99,1 1003,'k13','k24',100,1 1004,'k12','k25',95,1
命令示例如下。
--将c2、c4,c3、c5组成MAP。 select map(c2,c4,c3,c5) from t_table; --返回结果如下。 +------+ | _c0 | +------+ | {'k11':15} | | {'k12':97, 'k22':2} | | {'k13':99, 'k23':1} | | {'k13':100, 'k24':1} | | {'k12':95, 'k25':1} | +------+
相关函数
MAP函数属于复杂类型函数,更多对复杂类型数据(例如ARRAY、MAP、STRUCT、JSON数据)的处理函数请参见复杂类型函数。