MAP_UNION
功能概述
聚合函数,把多行 MAP 合并成一个 MAP,结果包含所有行中出现过的 key。适合把分散在多行的属性、配置、标签汇总为一个 MAP,例如合并同一用户多次上报的设备属性。
和 MAP_UNION_SUM 的区别:
MAP_UNION_SUM 对相同 key 的 value 求和;MAP_UNION 不做计算,相同 key 只保留其中一个 value。需要把两列 key、value 聚合成 MAP 时用 MAP_AGG。
语法
参数说明
-
:MAP 类型的列或表达式,value 可以是任意类型(包括 ARRAY 等复杂类型)。值为 NULL 的行被跳过。<map_expr> -
:可选,只聚合满足条件的行。FILTER (WHERE <condition>)
返回类型与输入的 MAP 类型相同。
使用示例
合并多行 MAP,NULL 行被跳过:
| merged |
|---|
| {1:"a",2:"b"} |
value 为复杂类型:
| merged |
|---|
| {"x":[1,2],"y":[3]} |
按分组合并,并用 FILTER 只聚合部分行。前置数据:
| user_id | all_attrs | app_attrs |
|---|---|---|
| u1 | {"os":"iOS","city":"上海","lang":"zh"} | {"os":"iOS","lang":"zh"} |
| u2 | {"os":"Android"} | {"os":"Android"} |
注意事项
- 相同 key 的 value 取值不确定。
- 结果 MAP 中 key 的顺序不保证。
- NULL 行被跳过,不影响其他行。
相关文档
- MAP_UNION_SUM:相同 key 的 value 求和
- MAP_AGG:把 key 列和 value 列聚合成 MAP
- MAP_CONCAT:合并同一行中的多个 MAP
联系我们
