| 函数名称 | 语句 | 含义 |
| 下标运算符 [] | map[key] | 从 map 中获取给定键对应的值。 |
| cardinality 函数 | cardinality(x) | 返回 map 的基数(大小)。 |
| element_at 函数 | element_at(map(k, v), key) | 返回给定键对应的值,如果键不存在则返回 NULL。 |
| map 函数 | map() / map(array(k), array(v)) | 返回空 map 或使用给定的键/值数组创建 map。 |
| map_from_entries 函数 | map_from_entries(array(row(k, v))) | 从给定的条目数组创建 map。 |
| multimap_from_entries 函数 | multimap_from_entries(array(row(k, v))) | 从给定的条目数组创建 multimap,每个键可以关联多个值。 |
| map_concat 函数 | map_concat(map1, map2, …, mapN) | 返回所有给定 map 的并集。 |
| map_filter 函数 | map_filter(map(k, v), function(k, v, boolean)) | 从 map 中筛选出函数返回 true 的条目构建新 map。 |
| map_keys 函数 | map_keys(x) | 返回 map 中所有的键。 |
| map_values 函数 | map_values(x) | 返回 map 中所有的值。 |
| map_zip_with 函数 | map_zip_with(map(k, v1), map(k, v2), function) | 将两个 map 合并为一个,对相同键的值对应用函数。 |
| transform_keys 函数 | transform_keys(map(k1, v), function(k1, v, k2)) | 对 map 的每个条目应用函数并转换键。 |
| transform_values 函数 | transform_values(map(k, v1), function(k, v1, v2)) | 对 map 的每个条目应用函数并转换值。 |
一、下标运算符 []
[] 运算符用于从 map 中获取给定键对应的值。如果键不存在于 map 中,此运算符会抛出错误。如需在键不存在时返回 NULL,请使用 element_at 函数。
二、语法
map[key]
三、参数说明
| 参数 | 说明 |
| map | 参数值为 MAP 类型。 |
| key | 要获取的键名。 |
四、返回值类型
与 map 中值对应的类型。
五、示例
·示例1:从 name_to_age_map 中获取键为 Bob 对应的值。
·查询和分析语句。
* | SELECT name_to_age_map['Bob'] AS bob_age
·查询和分析结果。
22
·示例2:构建 map 并访问键为 key2 的元素。
·查询和分析语句。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY['v1', 'v2', 'v3'])['key2']
·查询和分析结果。
v2
六、cardinality 函数
cardinality 函数用于返回 map 的基数(大小),即 map 中键值对的数量。
七、语法
cardinality(x)
八、参数说明
| 参数 | 说明 |
| x | 参数值为 MAP 类型。 |
九、返回值类型
bigint 类型。
十、示例
计算 map 中键值对的数量。
·查询和分析语句。
* | SELECT cardinality(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]))
·查询和分析结果。
3
十一、element_at 函数
element_at 函数用于返回给定键对应的值。与下标运算符 [] 不同,如果键不存在于 map 中,element_at 返回 NULL 而非抛出错误。
十二、语法
element_at(map(k, v), key)
十三、参数说明
| 参数 | 说明 |
| map(k, v) | 参数值为 MAP 类型,k 为键类型,v 为值类型。 |
| key | 要获取的键名。 |
十四、返回值类型
v 类型(与 map 中值对应的类型),键不存在时返回 NULL。
十五、示例
获取 map 中指定键的值,键不存在时返回 NULL。
·查询和分析语句。
* | SELECT element_at(MAP(ARRAY['a', 'b'], ARRAY['test1', 'test2']), 'c')
·查询和分析结果。
NULL
十六、map 函数
map 函数用于返回空 map 或使用给定的键/值数组创建 map。使用数据类型构造函数创建 map 时,需要提供一个键数组和一个相同顺序的值数组。值必须使用相同类型,或者可以将值强制转换为通用类型。
十七、语法
map()map(array(k), array(v))
十八、参数说明
| 参数 | 说明 |
| array(k) | 键数组。 |
| array(v) | 值数组,需与键数组长度相同。 |
十九、返回值类型
map(k, v) 类型。
20、示例
·示例1:返回空 map。
·查询和分析语句。
* | SELECT map()
·查询和分析结果。
{}
·示例2:创建包含整数值的 map。
·查询和分析语句。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY[2373, 3463, 45837])
·查询和分析结果。
{"key1":2373,"key2":3463,"key3":45837}
·示例3:创建包含字符值的 map。
·查询和分析语句。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY['v1', 'v2', 'v3'])
·查询和分析结果。
{"key1":"v1","key2":"v2","key3":"v3"}
·示例4:使用整数和小数值创建 map,值会被自动转换为小数类型。
·查询和分析语句。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY[23, 34.63, 45.837])
·查询和分析结果。
{"key1":23,"key2":34.63,"key3":45.837}
·示例5:创建包含 NULL 值的 map。
·查询和分析语句。
* | SELECT MAP(ARRAY['key1', 'key2', 'key3'], ARRAY['v1', NULL, 'v3'])
·查询和分析结果。
{"key1":"v1","key2":null,"key3":"v3"}
注意:说明:
注意:如需通过聚合方式创建 map,请参见 map_agg() 和 multimap_agg() 函数。
21、map_from_entries 函数
map_from_entries 函数用于从给定的条目数组创建 map。数组中的每个元素是一个包含键值对的 row。
22、语法
map_from_entries(array(row(k, v)))
23、参数说明
| 参数 | 说明 |
| array(row(k, v)) | 包含键值对的行数组,每个元素为 (k, v) 形式的元组。 |
24、返回值类型
map(k, v) 类型。
25、示例
从条目数组创建 map。
·查询和分析语句。
* | SELECT map_from_entries(ARRAY[(1, 'x'), (2, 'y')])
·查询和分析结果。
{"1":"x","2":"y"}
26、multimap_from_entries 函数
multimap_from_entries 函数用于从给定的条目数组创建 multimap。与 map_from_entries 不同,multimap 允许每个键关联多个值,相同键的值会被收集到一个数组中。
27、语法
multimap_from_entries(array(row(k, v)))
28、参数说明
| 参数 | 说明 |
| array(row(k, v)) | 包含键值对的行数组,允许重复键。 |
29、返回值类型
map(k, array(v)) 类型。
30、示例
从条目数组创建 multimap,键1关联多个值。
·查询和分析语句。
* | SELECT multimap_from_entries(ARRAY[(1, 'x'), (2, 'y'), (1, 'z')])
·查询和分析结果。
{"1":["x","z"],"2":["y"]}
31、map_concat 函数
map_concat 函数用于返回所有给定 map 的并集。如果某个键在多个 map 中出现,结果 map 中该键的值来自参数列表中最后一个包含该键的 map。
32、语法
map_concat(map1(k, v), map2(k, v), …, mapN(k, v))
33、参数说明
| 参数 | 说明 |
| map1, map2, …, mapN | 要合并的多个 MAP 类型参数,键和值类型需一致。 |
34、返回值类型
map(k, v) 类型。
35、示例
合并两个 map,重复键取后者的值。
·查询和分析语句。
* | SELECT map_concat(MAP(ARRAY['a'], ARRAY[1]), MAP(ARRAY['a', 'b'], ARRAY[2, 3]))
·查询和分析结果。
{"a":2,"b":3}
36、map_filter 函数
map_filter 函数用于从 map 中筛选出满足条件的条目构建新 map。通过 Lambda 函数对每个键值对进行判断,仅保留返回 true 的条目。
37、语法
map_filter(map(k, v), function(k, v, boolean))
38、参数说明
| 参数 | 说明 |
| map(k, v) | 参数值为 MAP 类型。 |
| function(k, v, boolean) | Lambda 函数,接收键 k 和值 v 作为参数,返回布尔值。语法:(k, v) -> 布尔表达式。 |
39、返回值类型
map(k, v) 类型。
40、示例
·示例1:过滤掉值为 NULL 的条目。
·查询和分析语句。
* | SELECT map_filter(MAP(ARRAY[10, 20, 30], ARRAY['a', NULL, 'c']), (k, v) -> v IS NOT NULL)
·查询和分析结果。
{"10":"a","30":"c"}
·示例2:过滤出值大于10的条目。
·查询和分析语句。
* | SELECT map_filter(MAP(ARRAY['k1', 'k2', 'k3'], ARRAY[20, 3, 15]), (k, v) -> v > 10)
·查询和分析结果。
{"k1":20,"k3":15}
41、map_keys 函数
map_keys 函数用于返回 map 中所有的键组成的数组。
42、语法
map_keys(x)
43、参数说明
| 参数 | 说明 |
| x | 参数值为 MAP(k, v) 类型。 |
44、返回值类型
array(k) 类型。
45、示例
获取 map 中所有键。
·查询和分析语句。
* | SELECT map_keys(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]))
·查询和分析结果。
["a","b","c"]
46、map_values 函数
map_values 函数用于返回 map 中所有的值组成的数组。
47、语法
map_values(x)
48、参数说明
| 参数 | 说明 |
| x | 参数值为 MAP(k, v) 类型。 |
49、返回值类型
array(v) 类型。
50、示例
获取 map 中所有值。
·查询和分析语句。
* | SELECT map_values(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]))
·查询和分析结果。
[1, 2, 3]
51、map_zip_with 函数
map_zip_with 函数用于将两个 map 合并为一个,通过 Lambda 函数对具有相同键的值对进行处理。对于只在一个 map 中出现的键,另一个 map 对应的值将传入 NULL。
52、语法
map_zip_with(map(k, v1), map(k, v2), function(k, v1, v2, v3))
53、参数说明
| 参数 | 说明 |
| map(k, v1) | 第一个 MAP 类型参数。 |
| map(k, v2) | 第二个 MAP 类型参数,键类型需与第一个 map 相同。 |
| function(k, v1, v2, v3) | Lambda 函数,接收键 k、第一个 map 的值 v1、第二个 map 的值 v2,返回新值 v3。语法:(k, v1, v2) -> 表达式。 |
54、返回值类型
map(k, v3) 类型。
55、示例
·示例1:合并两个 map 并连接对应的字符串值。
·查询和分析语句。
* | SELECT map_zip_with( MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']), MAP(ARRAY[1, 2, 3], ARRAY['d', 'e', 'f']), (k, v1, v2) -> concat(v1, v2))
·查询和分析结果。
{"1":"ad","2":"be","3":"cf"}
·示例2:合并两个 map 并计算值的商,拼接键名。
·查询和分析语句。
* | SELECT map_zip_with( MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 8, 27]), MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]), (k, v1, v2) -> k || CAST(v1 / v2 AS VARCHAR))
·查询和分析结果。
{"a":"a1","b":"b4","c":"c9"}
56、transform_keys 函数
transform_keys 函数用于对 map 的每个条目应用 Lambda 函数转换键,生成新的 map。值保持不变。
57、语法
transform_keys(map(k1, v), function(k1, v, k2))
58、参数说明
| 参数 | 说明 |
| map(k1, v) | 参数值为 MAP 类型,k1 为原始键类型。 |
| function(k1, v, k2) | Lambda 函数,接收原始键 k1 和值 v,返回新键 k2。语法:(k, v) -> 新键表达式。 |
59、返回值类型
map(k2, v) 类型。
60、示例
·示例1:将整数键加1。
·查询和分析语句。
* | SELECT transform_keys(MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']), (k, v) -> k + 1)
·查询和分析结果。
{"2":"a","3":"b","4":"c"}
·示例2:用值的平方作为新键。
·查询和分析语句。
* | SELECT transform_keys(MAP(ARRAY['a', 'b', 'c'], ARRAY[1, 2, 3]), (k, v) -> v * v)
·查询和分析结果。
{"1":1,"4":2,"9":3}
·示例3:将键和值连接作为新键。
·查询和分析语句。
* | SELECT transform_keys(MAP(ARRAY['a', 'b'], ARRAY[1, 2]), (k, v) -> k || CAST(v AS VARCHAR))
·查询和分析结果。
{"a1":1,"b2":2}
·示例4:使用另一个 map 映射键。
·查询和分析语句。
* | SELECT transform_keys( MAP(ARRAY[1, 2], ARRAY[1.0, 1.4]), (k, v) -> MAP(ARRAY[1, 2], ARRAY['one', 'two'])[k])
·查询和分析结果。
{"one":1,"two":1.4}
61、transform_values 函数
transform_values 函数用于对 map 的每个条目应用 Lambda 函数转换值,生成新的 map。键保持不变。
62、语法
transform_values(map(k, v1), function(k, v1, v2))
63、参数说明
| 参数 | 说明 |
| map(k, v1) | 参数值为 MAP 类型,v1 为原始值类型。 |
| function(k, v1, v2) | Lambda 函数,接收键 k 和原始值 v1,返回新值 v2。语法:(k, v) -> 新值表达式。 |
64、返回值类型
map(k, v2) 类型。
65、示例
·示例1:将值加上对应的键。
·查询和分析语句。
* | SELECT transform_values(MAP(ARRAY[1, 2, 3], ARRAY[10, 20, 30]), (k, v) -> v + k)
·查询和分析结果。
{"1":11,"2":22,"3":33}
·示例2:用键的平方作为新值。
·查询和分析语句。
* | SELECT transform_values(MAP(ARRAY[1, 2, 3], ARRAY['a', 'b', 'c']), (k, v) -> k * k)
·查询和分析结果。
{"1":1,"2":4,"3":9}
·示例3:将键和值连接作为新值。
·查询和分析语句。
* | SELECT transform_values(MAP(ARRAY['a', 'b'], ARRAY[1, 2]), (k, v) -> k || CAST(v AS VARCHAR))
·查询和分析结果。
{"a":"a1","b":"b2"}
·示例4:使用另一个 map 映射并连接值。
·查询和分析语句。
* | SELECT transform_values( MAP(ARRAY[1, 2], ARRAY[1.0, 1.4]), (k, v) -> MAP(ARRAY[1, 2], ARRAY['one', 'two'])[k] || '_' || CAST(v AS VARCHAR))
·查询和分析结果。
{"1":"one_1.0","2":"two_1.4"}