ARRAY_AGGREGATE
简介
ARRAY_AGGREGATE 函数是一种高阶数组聚合函数,类似于函数式编程中的
reduce / fold 操作。它接收一个数组、一个初始值和一个 merge lambda 表达式,从初始值开始,依次将数组中的每个元素与累加器通过 merge lambda 进行合并,最终返回聚合结果。
语法
参数说明
: 输入的数组,类型为array
,其中 E 可以是任意数据类型。ARRAY<E>
: 聚合的初始值(累加器初始状态),类型为initial_value
,可以是任意数据类型。R
: 合并 lambda 表达式,格式为merge_lambda
,其中(acc, x) -> expr
为当前累加器值(类型acc
),R
为数组中的当前元素(类型x
),E
为合并后的新累加器值(类型expr
)。R
返回结果
返回类型与初始值
initial_value 的类型一致(类型 R),即 merge lambda 表达式的返回值类型。
使用示例
-
计算数组元素之和:
-
将嵌套数组合并为一个去重后的数组:
-
统计嵌套数组中去重后的元素总数:
-
使用布尔累加器判断数组中所有元素是否满足条件:
-
当数组元素包含无法转换的值时,NULL 会通过 lambda 传播:
注意事项
- 使用 ARRAY_AGGREGATE 函数前,需要开启 JIT 代码生成:
。SET cz.sql.codegen.enable = TRUE; - 当输入数组为 NULL 时,返回结果为 NULL。
- 当数组为空时,返回初始值
。initial_value - merge lambda 中如果产生 NULL 值,NULL 会继续参与后续迭代,可能导致最终结果为 NULL。建议在 lambda 中使用
等函数处理 NULL 值。COALESCE - 初始值的类型决定了累加器和最终返回值的类型,请确保 merge lambda 的返回类型与初始值类型兼容。
联系我们
