文档

MAP

更新时间:

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