array_filter_doirs

功能描述

根据条件过滤数组元素,返回满足条件的元素组成的新数组。函数支持两种调用方式:使用 lambda 表达式的高阶函数形式,以及直接使用布尔数组的过滤形式。

语法

array_filter_doris(lambda, array1, ...)
array_filter_doris(array1, array<boolean> filter_array)

参数说明

  • lambda:lambda 表达式,用于对数组元素进行判断,返回 true/false 或可以转换为布尔值的表达式
  • array1, ...:一个或多个 ARRAY 类型参数
  • filter_array:ARRAY 类型,用于过滤的布尔数组

返回结果

返回类型:ARRAY

返回值含义:

  • 返回满足过滤条件的所有元素组成的新数组
  • NULL:如果输入数组为 NULL
  • 空数组:如果没有元素满足条件

使用说明:

  • lambda 形式:lambda 表达式参数个数需与数组参数个数一致
  • 布尔数组形式:array1 和 filter_array 的长度最好完全一致,如果布尔数组更长,多余的布尔值会被忽略;如果布尔数组更短,只处理布尔数组中对应位置的元素
  • 支持对多数组、复杂类型数组进行过滤
  • 空数组返回空数组,NULL 数组返回 NULL
  • lambda 可以用任意标量表达式,不能用聚合函数
  • 对数组元素中的 null 值:null 元素会传递给 lambda 表达式处理,lambda 可以判断 null 值

使用示例

CREATE TABLE array_filter_test (
    id INT,
    int_array ARRAY<INT>,
    double_array ARRAY<DOUBLE>,
    string_array ARRAY<STRING>
);

INSERT INTO array_filter_test VALUES
(1, [1, 2, 3, 4, 5], [1.1, 2.2, 3.3, 4.4, 5.5], ['a', 'bb', 'ccc', 'dddd', 'eeeee']),
(2, [10, 20, 30], [10.5, 20.5, 30.5], ['x', 'yy', 'zzz']),
(3, [], [], []),
(4, NULL, NULL, NULL);
  • 使用 lambda 表达式过滤 double_array 中大于等于 3 的元素:
SELECT array_filter_doris(x -> x >= 3, double_array) FROM array_filter_test WHERE id = 1;

  • 使用 lambda 表达式过滤 string_array 中长度大于 2 的元素
SELECT array_filter_doris(x -> length(x) > 2, string_array) FROM array_filter_test WHERE id = 1;

  • 空数组返回空数组:
SELECT array_filter_doris(x -> x > 0, int_array) FROM array_filter_test WHERE id = 3;

  • NULL 数组返回 NULL:当输入数组为 NULL 时返回 NULL,不会抛出错误
SELECT array_filter_doris(x -> x > 0, int_array) FROM array_filter_test WHERE id = 4;

  • 包含 null 的数组,lambda 可判断 null
 select array_filter_doris(x -> x is not null, [null, 1, null, 2, null]);

  • 嵌套数组过滤,过滤每个子数组长度大于 2 的元素:
SELECT array_filter_doris(x -> size(x) > 2, [[1,2], [3,4,5], [6], [7,8,9,10]]);

联系我们
预约咨询
微信咨询
电话咨询