语法: arrayElement(map, key)
参数: map为map列名,key为待查询的key名
说明: 查询map的某个key的数据,不包含此key的行将填充默认值,等价于map[key]
示例:
select arrayElement(m, 'k1') from map_table; ┌─arrayElement(m, 'k1')─┐ │ v1 │ │ │ └───────────────────────┘
注意: 列名不需要加引号,key名在key类型为String时需要加引号
三种Map类型使用arrayElement时都会先查询整个map列数据,然后筛选出需要的key数据并对不存在此key的行填充默认值,因此查询性能较低。Byte Map和Byte Compact Map类型推荐使用mapElement(或者{})方式查询key。
语法: mapElement(map,key)
参数: map为map列名,key为待查询的key名
说明: 查询map的某个key的数据,不包含此key的行将填充null,等价于map{key}
示例:
select mapElement(m, 'k1') from map_table; -- 对于KV Map ┌─mapElement(m, 'k1')─┐ │ v1 │ │ ᴺᵁᴸᴸ │ └─────────────────────┘ -- 对于Byte Map和Byte Compact Map ┌─__m__'k1'─┐ │ v1 │ │ ᴺᵁᴸᴸ │ └───────────┘
注意: 列名不需要加引号,key名在key类型为String时需要加引号
Byte Map和Byte Compact Map类型会直接查询隐式列,效率高;KV Map会先查询整个Map列,再筛选key的数据。
语法: map(key1, value1[, key2, value2, ...])
参数: key1, key2为key, value1, value2 为value
说明: 构造map列
示例:
select map(1, 2, 3, 4) insert into map_table values (1, map('k1', 'v1', 'k2', 'v2'))
语法: mapKeys(map)
参数: map为map列名
说明: 获取map数据每行的Key
示例:
select mapKeys(m) from map_table; ┌─mapKeys(m)──┐ │ ['k1','k2'] │ │ ['k2','k3'] │ └─────────────┘
注意:
对于Implicit Map和Implicit Compact Map类型,此方法会先查询map列,然后筛出其中的key返回,因此需要在参数allow_map_access_without_key为true的情况下使用。效率较低,不建议使用,建议使用下面的getMapKeys方法。
对于KV Map类型,此方法会直接查询.key
文件。
语法: mapValues(map)
参数: map为map列名
说明: 获取map数据每行的Value
示例:
select mapValues(m) from map_table; ┌─mapValues(m)─┐ │ ['v1','v2'] │ │ ['v20','v3'] │ └──────────────┘
注意:
对于Byte Map和Byte Compact Map类型,此方法会先查询map列,然后筛出其中的key返回,因此需要在参数allow_map_access_without_key为true的情况下使用,效率较低。
对于KV Map类型,此方法会直接查询**.value**文件。
语法: mapContains(map, key)
参数: map为map列名,key为待查询的key名
说明:返回map列的每行是否包含目标key
示例:
select mapContains(m, 'k1') from map_table; ┌─mapContains(m, 'k1')─┐ │ 1 │ │ 0 │ └──────────────────────┘
注意:
此方法会先查询map列,因此需要在参数allow_map_access_without_key为true的情况下使用。
语法: getMapKeys('database', 'table', 'map'[, 'partition_regex'])
参数: database为库名,table为表名(可以是分布式表名),map为列名,partition_regex为分区的正则表达式
说明: 获取map列的key set
示例:
select getMapKeys('default', 'map_table', 'm') ┌─getMapKeys('default', 'map_table', 'm')─┐ │ ['k1','k2','k3'] │ └─────────────────────────────────────────┘
注意: 此方法会直接从checksum中获取key信息,因此仅适用于Implicit Map和Implicit Compact Map类型
语法: str_to_map(string, item_delimiter, kv_delimiter)
参数: string为待解析的字符串,item_delimiter为数据之间的分隔符,kv_delimiter为每条数据中key和value的分隔符
说明: 解析字符串构造map
示例:
SELECT str_to_map('a=b&c=d', '&', '='); ┌─str_to_map('a=b&c=d', '&', '=')─┐ │ {'a':'b','c':'d'} │ └─────────────────────────────────┘
语法:ALTER TABLE database.table CLEAR MAP KEY map(key1,[, key2, ... ])
参数: database为库名,table为表名,map为map名,key1,key2为key名
限制: KV Map不支持此功能
示例:
ALTER TABLE map_table CLEAR MAP KEY m('k1'); select * from map_table; ┌─id─┬─m──────────────────────┐ │ 1 │ {'k2':'v2'} │ │ 2 │ {'k2':'v20','k3':'v3'} │ └────┴────────────────────────┘