SelectDB Enterprise
参考手册
SQL 函数
标量函数
ARRAY 函数
ARRAY_MAP

ARRAY_MAP

描述

使用一个 lambda 表达式作为输入参数,对其他的输入 ARRAY 参数的内部数据做对应表达式计算。 在 lambda 表达式中输入的参数为 1 个或多个,必须和后面的输入 array 列数量一致。 在 lambda 中可以执行合法的标量函数,不支持聚合函数等。

语法

ARRAY_MAP(lambda, <arr> [ , <arr> ... ] )

参数

参数说明
lambdalambda 表达式,表达式中输入的参数为 1 个或多个,必须和后面的输入 array 列数量一致。在 lambda 中可以执行合法的标量函数,不支持聚合函数等。
<arr>ARRAY 数组

返回值

经过表达式 lambda 计算之后 ARRAY 数组。

举例

CREATE TABLE array_test2 (
                             id INT,
                             c_array1 ARRAY<INT>,
                             c_array2 ARRAY<INT>
)
    duplicate key (id)
distributed by hash(id) buckets 1
properties(
    'replication_num' = '1'
    );
INSERT INTO array_test2 (id, c_array1, c_array2) VALUES
                                                     (1, [1, 2, 3, 4, 5], [10, 20, -40, 80, -100]),
                                                     (2, [6, 7, 8], [10, 12, 13]),
                                                     (3, [1], [-100]),
                                                     (4, NULL, NULL);
select *, array_map(x->x,[1,2,3]) from array_test2 order by id;
+------+-----------------+-------------------------+----------------------------------------+
| id   | c_array1        | c_array2                | array_map([x] -> x(0), ARRAY(1, 2, 3)) |
+------+-----------------+-------------------------+----------------------------------------+
|    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [1, 2, 3]                              |
|    2 | [6, 7, 8]       | [10, 12, 13]            | [1, 2, 3]                              |
|    3 | [1]             | [-100]                  | [1, 2, 3]                              |
|    4 | NULL            | NULL                    | [1, 2, 3]                              |
+------+-----------------+-------------------------+----------------------------------------+
select *, array_map(x->x+2,[1,2,3]) from array_test2 order by id;
+------+-----------------+-------------------------+--------------------------------------------+
| id   | c_array1        | c_array2                | array_map([x] -> x(0) + 2, ARRAY(1, 2, 3)) |
+------+-----------------+-------------------------+--------------------------------------------+
|    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [3, 4, 5]                                  |
|    2 | [6, 7, 8]       | [10, 12, 13]            | [3, 4, 5]                                  |
|    3 | [1]             | [-100]                  | [3, 4, 5]                                  |
|    4 | NULL            | NULL                    | [3, 4, 5]                                  |
+------+-----------------+-------------------------+--------------------------------------------+
select c_array1, c_array2, array_map(x->x,[1,2,3]) from array_test2 order by id;
+-----------------+-------------------------+----------------------------------------+
| c_array1        | c_array2                | array_map([x] -> x(0), ARRAY(1, 2, 3)) |
+-----------------+-------------------------+----------------------------------------+
| [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [1, 2, 3]                              |
| [6, 7, 8]       | [10, 12, 13]            | [1, 2, 3]                              |
| [1]             | [-100]                  | [1, 2, 3]                              |
| NULL            | NULL                    | [1, 2, 3]                              |
+-----------------+-------------------------+----------------------------------------+
select c_array1, c_array2, array_map(x->power(x,2),[1,2,3]) from array_test2 order by id;
+-----------------+-------------------------+----------------------------------------------------+
| c_array1        | c_array2                | array_map([x] -> power(x(0), 2.0), ARRAY(1, 2, 3)) |
+-----------------+-------------------------+----------------------------------------------------+
| [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [1, 4, 9]                                          |
| [6, 7, 8]       | [10, 12, 13]            | [1, 4, 9]                                          |
| [1]             | [-100]                  | [1, 4, 9]                                          |
| NULL            | NULL                    | [1, 4, 9]                                          |
+-----------------+-------------------------+----------------------------------------------------+
select c_array1, c_array2, array_map((x,y)->x+y,c_array1,c_array2) from array_test2 order by id;
+-----------------+-------------------------+----------------------------------------------------------+
| c_array1        | c_array2                | array_map([x, y] -> x(0) + y(1), `c_array1`, `c_array2`) |
+-----------------+-------------------------+----------------------------------------------------------+
| [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [11, 22, -37, 84, -95]                                   |
| [6, 7, 8]       | [10, 12, 13]            | [16, 19, 21]                                             |
| [1]             | [-100]                  | [-99]                                                    |
| NULL            | NULL                    | NULL                                                     |
+-----------------+-------------------------+----------------------------------------------------------+
select c_array1, c_array2, array_map((x,y)->power(x,2)+y,c_array1, c_array2) from array_test2 order by id;
+-----------------+-------------------------+----------------------------------------------------------------------+
| c_array1        | c_array2                | array_map([x, y] -> power(x(0), 2.0) + y(1), `c_array1`, `c_array2`) |
+-----------------+-------------------------+----------------------------------------------------------------------+
| [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [11, 24, -31, 96, -75]                                               |
| [6, 7, 8]       | [10, 12, 13]            | [46, 61, 77]                                                         |
| [1]             | [-100]                  | [-99]                                                                |
| NULL            | NULL                    | NULL                                                                 |
+-----------------+-------------------------+----------------------------------------------------------------------+
select *,array_map(x->x=3,c_array1) from array_test2 order by id;
+------+-----------------+-------------------------+----------------------------------------+
| id   | c_array1        | c_array2                | array_map([x] -> x(0) = 3, `c_array1`) |
+------+-----------------+-------------------------+----------------------------------------+
|    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [0, 0, 1, 0, 0]                        |
|    2 | [6, 7, 8]       | [10, 12, 13]            | [0, 0, 0]                              |
|    3 | [1]             | [-100]                  | [0]                                    |
|    4 | NULL            | NULL                    | NULL                                   |
+------+-----------------+-------------------------+----------------------------------------+
select *,array_map(x->x>3,c_array1) from array_test2 order by id;
+------+-----------------+-------------------------+----------------------------------------+
| id   | c_array1        | c_array2                | array_map([x] -> x(0) > 3, `c_array1`) |
+------+-----------------+-------------------------+----------------------------------------+
|    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [0, 0, 0, 1, 1]                        |
|    2 | [6, 7, 8]       | [10, 12, 13]            | [1, 1, 1]                              |
|    3 | [1]             | [-100]                  | [0]                                    |
|    4 | NULL            | NULL                    | NULL                                   |
+------+-----------------+-------------------------+----------------------------------------+
select *,array_map((x,y)->x>y,c_array1,c_array2) from array_test2 order by id;
+------+-----------------+-------------------------+----------------------------------------------------------+
| id   | c_array1        | c_array2                | array_map([x, y] -> x(0) > y(1), `c_array1`, `c_array2`) |
+------+-----------------+-------------------------+----------------------------------------------------------+
|    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [0, 0, 1, 0, 1]                                          |
|    2 | [6, 7, 8]       | [10, 12, 13]            | [0, 0, 0]                                                |
|    3 | [1]             | [-100]                  | [1]                                                      |
|    4 | NULL            | NULL                    | NULL                                                     |
+------+-----------------+-------------------------+----------------------------------------------------------+
select array_map(x->cast(x as string), c_array1) from test_array_map_function;
+-----------------+-------------------------------------------------------+
| c_array1        | array_map([x] -> CAST(x(0) AS CHARACTER), `c_array1`) |
+-----------------+-------------------------------------------------------+
| [1, 2, 3, 4, 5] | ['1', '2', '3', '4', '5']                             |
| [6, 7, 8]       | ['6', '7', '8']                                       |
| []              | []                                                    |
| NULL            | NULL                                                  |
+-----------------+-------------------------------------------------------+
© 2025 北京飞轮数据科技有限公司 京ICP备2022004029号 | Apache、Apache Doris 以及相关开源项目名称均为 Apache 基金会商标