| title | MAP_CONCAT |
|---|---|
| language | zh-CN |
将多个 map 合并为一个 map。当合并具有不同键或值类型的 map 时,该函数会找到键和值的公共类型。
:::info Note 自 Apache Doris 4.0.4 版本起支持。 :::
MAP_CONCAT(<map1> [, <map2> [, <map3> ... ]])<map1>,<map2>,<map3>, ...:MAP类型,需要合并的输入 map。
支持的键和值类型:
- 键类型:所有支持比较的基本类型(数值、字符串、日期/时间、布尔值、IP)
- 值类型:所有基本类型加上复杂类型(ARRAY、MAP、STRUCT)
类型兼容性说明:
- 当合并具有不同键类型的 map 时,函数会找到公共键类型
- 当合并具有不同值类型的 map 时,函数会找到公共值类型
返回一个合并后的 MAP,按参数从左到右合并所有输入 map 中的键值对;若存在重复键,以最后一个 map 的值为准(该键在结果中的位置以最后一次出现为准)。
行为:
- 结果 map 的键类型是所有输入 map 键类型的公共类型
- 结果 map 的值类型是所有输入 map 值类型的公共类型
- 如果类型无法转换(例如,不兼容的键类型),则抛出错误
- 该函数接受零个或多个 map 参数。
- 如果任何参数为 NULL,则结果为 NULL。
- 重复键:如果多个 map 包含相同的键,则最后一个 map 的值生效
-
基本用法
select map_concat();+--------------+ | map_concat() | +--------------+ | {} | +--------------+select map_concat(map('single', 'argument'));
+---------------------------------------+ | map_concat(map('single', 'argument')) | +---------------------------------------+ | {"single":"argument"} | +---------------------------------------+select map_concat({'a': 'apple'}, {'b': 'banana'}, {'c': 'cherry'});
+-----------------------------------------------------------+ | map_concat({'a':'apple'},{'b':'banana'},{'c':'cherry'}) | +-----------------------------------------------------------+ | {"a":"apple", "b":"banana", "c":"cherry"} | +-----------------------------------------------------------+ -
NULL 参数
select map_concat({'a': 'apple'}, NULL);
+---------------------------------+ | map_concat({'a':'apple'}, NULL) | +---------------------------------+ | NULL | +---------------------------------+如果任何参数为 NULL,则结果为 NULL。
-
类型转换示例
-- INT 和 DOUBLE 值类型 select map_concat({'a': 1, 'b': 2}, {'c': 3.5, 'd': 4.7});
+----------------------------------------------------+ | map_concat({'a': 1, 'b': 2}, {'c': 3.5, 'd': 4.7}) | +----------------------------------------------------+ | {"a":1.0, "b":2.0, "c":3.5, "d":4.7} | +----------------------------------------------------+INT 值被转换为 DOUBLE 以匹配公共类型。
-- INT 和 VARCHAR 键类型 select map_concat({1: 'one', 2: 'two'}, {'a': 'apple', 'b': 'banana'});
+-----------------------------------------------------------------+ | map_concat({1: 'one', 2: 'two'}, {'a': 'apple', 'b': 'banana'}) | +-----------------------------------------------------------------+ | {"1":"one", "2":"two", "a":"apple", "b":"banana"} | +-----------------------------------------------------------------+INT 键被转换为 VARCHAR 以匹配公共类型。
-- INT 和 BIGINT 值类型 select map_concat({'small': 100}, {'large': 10000000000});
+----------------------------------------------------+ | map_concat({'small': 100}, {'large': 10000000000}) | +----------------------------------------------------+ | {"small":100, "large":10000000000} | +----------------------------------------------------+INT 值被转换为 BIGINT 以匹配公共类型。
-- INT 和 VARCHAR 值类型 select map_concat({'a': 1}, {'b': '2'});
+----------------------------------+ | map_concat({'a': 1}, {'b': '2'}) | +----------------------------------+ | {"a":"1", "b":"2"} | +----------------------------------+INT 值被转换为 VARCHAR 以匹配公共类型。
-- 包含嵌套数组的复杂类型 select map_concat({'a':[1,2,3]},{1:['1','2']});
+-----------------------------------------+ | map_concat({'a':[1,2,3]},{1:['1','2']}) | +-----------------------------------------+ | {"a":["1", "2", "3"], "1":["1", "2"]} | +-----------------------------------------+对于复杂类型(如 ARRAY),会递归执行类型转换。
-- 错误示例:找不到公共类型 select map_concat({'a':[1,2,3]},{1:3});
ERROR 1105 (HY000): errCode = 2, detailMessage = mapconcat cannot find the common value type of map_concat(map('a', [1, 2, 3]), map(1, 3))当找不到公共类型时(例如 ARRAY 和 INT),会抛出错误。