array_map

SinceVersion dev

array_map(lambda,array1,array2….)

description

Syntax

ARRAY<T> array_map(lambda, ARRAY<T> array1, ARRAY<T> array2)

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

1. array_map(x->x, array1);
2. array_map(x->(x+2), array1);
3. array_map(x->(abs(x)-2), array1);

5. array_map((x,y)->(x = y), array1, array2);
6. array_map((x,y)->(power(x,2)+y), array1, array2);
7. array_map((x,y,z)->(abs(x)+y*z), array1, array2, array3);

example

2. mysql [test]>select *, array_map(x->x,[1,2,3]) from array_test2 order by id;
3. +------+-----------------+-------------------------+----------------------------------------+
4. | id   | c_array1        | c_array2                | array_map([x] -> x(0), ARRAY(1, 2, 3)) |
5. +------+-----------------+-------------------------+----------------------------------------+
6. |    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [1, 2, 3]                              |
7. |    2 | [6, 7, 8]       | [10, 12, 13]            | [1, 2, 3]                              |
8. |    3 | [1]             | [-100]                  | [1, 2, 3]                              |
9. |    4 | NULL            | NULL                    | [1, 2, 3]                              |
10. +------+-----------------+-------------------------+----------------------------------------+
11. 4 rows in set (0.02 sec)

13. mysql [test]>select *, array_map(x->x+2,[1,2,3]) from array_test2 order by id;
14. +------+-----------------+-------------------------+--------------------------------------------+
15. | id   | c_array1        | c_array2                | array_map([x] -> x(0) + 2, ARRAY(1, 2, 3)) |
16. +------+-----------------+-------------------------+--------------------------------------------+
17. |    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [3, 4, 5]                                  |
18. |    2 | [6, 7, 8]       | [10, 12, 13]            | [3, 4, 5]                                  |
19. |    3 | [1]             | [-100]                  | [3, 4, 5]                                  |
20. |    4 | NULL            | NULL                    | [3, 4, 5]                                  |
21. +------+-----------------+-------------------------+--------------------------------------------+
22. 4 rows in set (0.02 sec)

24. mysql [test]>select c_array1, c_array2, array_map(x->x,[1,2,3]) from array_test2 order by id;
25. +-----------------+-------------------------+----------------------------------------+
26. | c_array1        | c_array2                | array_map([x] -> x(0), ARRAY(1, 2, 3)) |
27. +-----------------+-------------------------+----------------------------------------+
28. | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [1, 2, 3]                              |
29. | [6, 7, 8]       | [10, 12, 13]            | [1, 2, 3]                              |
30. | [1]             | [-100]                  | [1, 2, 3]                              |
31. | NULL            | NULL                    | [1, 2, 3]                              |
32. +-----------------+-------------------------+----------------------------------------+
33. 4 rows in set (0.01 sec)

35. mysql [test]>select c_array1, c_array2, array_map(x->power(x,2),[1,2,3]) from array_test2 order by id;
36. +-----------------+-------------------------+----------------------------------------------------+
37. | c_array1        | c_array2                | array_map([x] -> power(x(0), 2.0), ARRAY(1, 2, 3)) |
38. +-----------------+-------------------------+----------------------------------------------------+
39. | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [1, 4, 9]                                          |
40. | [6, 7, 8]       | [10, 12, 13]            | [1, 4, 9]                                          |
41. | [1]             | [-100]                  | [1, 4, 9]                                          |
42. | NULL            | NULL                    | [1, 4, 9]                                          |
43. +-----------------+-------------------------+----------------------------------------------------+

45. mysql [test]>select c_array1, c_array2, array_map((x,y)->x+y,c_array1,c_array2) from array_test2 order by id;
46. +-----------------+-------------------------+----------------------------------------------------------+
47. | c_array1        | c_array2                | array_map([x, y] -> x(0) + y(1), `c_array1`, `c_array2`) |
48. +-----------------+-------------------------+----------------------------------------------------------+
49. | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [11, 22, -37, 84, -95]                                   |
50. | [6, 7, 8]       | [10, 12, 13]            | [16, 19, 21]                                             |
51. | [1]             | [-100]                  | [-99]                                                    |
52. | NULL            | NULL                    | NULL                                                     |
53. +-----------------+-------------------------+----------------------------------------------------------+
54. 4 rows in set (0.02 sec)

56. mysql [test]>select c_array1, c_array2, array_map((x,y)->power(x,2)+y,c_array1, c_array2) from array_test2 order by id;
57. +-----------------+-------------------------+----------------------------------------------------------------------+
58. | c_array1        | c_array2                | array_map([x, y] -> power(x(0), 2.0) + y(1), `c_array1`, `c_array2`) |
59. +-----------------+-------------------------+----------------------------------------------------------------------+
60. | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [11, 24, -31, 96, -75]                                               |
61. | [6, 7, 8]       | [10, 12, 13]            | [46, 61, 77]                                                         |
62. | [1]             | [-100]                  | [-99]                                                                |
63. | NULL            | NULL                    | NULL                                                                 |
64. +-----------------+-------------------------+----------------------------------------------------------------------+
65. 4 rows in set (0.03 sec)

67. mysql [test]>select *,array_map(x->x=3,c_array1) from array_test2 order by id;
68. +------+-----------------+-------------------------+----------------------------------------+
69. | id   | c_array1        | c_array2                | array_map([x] -> x(0) = 3, `c_array1`) |
70. +------+-----------------+-------------------------+----------------------------------------+
71. |    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [0, 0, 1, 0, 0]                        |
72. |    2 | [6, 7, 8]       | [10, 12, 13]            | [0, 0, 0]                              |
73. |    3 | [1]             | [-100]                  | [0]                                    |
74. |    4 | NULL            | NULL                    | NULL                                   |
75. +------+-----------------+-------------------------+----------------------------------------+
76. 4 rows in set (0.02 sec)

78. mysql [test]>select *,array_map(x->x>3,c_array1) from array_test2 order by id;
79. +------+-----------------+-------------------------+----------------------------------------+
80. | id   | c_array1        | c_array2                | array_map([x] -> x(0) > 3, `c_array1`) |
81. +------+-----------------+-------------------------+----------------------------------------+
82. |    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [0, 0, 0, 1, 1]                        |
83. |    2 | [6, 7, 8]       | [10, 12, 13]            | [1, 1, 1]                              |
84. |    3 | [1]             | [-100]                  | [0]                                    |
85. |    4 | NULL            | NULL                    | NULL                                   |
86. +------+-----------------+-------------------------+----------------------------------------+
87. 4 rows in set (0.02 sec)

89. mysql [test]>select *,array_map((x,y)->x>y,c_array1,c_array2) from array_test2 order by id;
90. +------+-----------------+-------------------------+----------------------------------------------------------+
91. | id   | c_array1        | c_array2                | array_map([x, y] -> x(0) > y(1), `c_array1`, `c_array2`) |
92. +------+-----------------+-------------------------+----------------------------------------------------------+
93. |    1 | [1, 2, 3, 4, 5] | [10, 20, -40, 80, -100] | [0, 0, 1, 0, 1]                                          |
94. |    2 | [6, 7, 8]       | [10, 12, 13]            | [0, 0, 0]                                                |
95. |    3 | [1]             | [-100]                  | [1]                                                      |
96. |    4 | NULL            | NULL                    | NULL                                                     |
97. +------+-----------------+-------------------------+----------------------------------------------------------+
98. 4 rows in set (0.02 sec)

100. mysql [test]>select array_map(x->cast(x as string), c_array1) from test_array_map_function;
101. +-----------------+-------------------------------------------------------+
102. | c_array1        | array_map([x] -> CAST(x(0) AS CHARACTER), `c_array1`) |
103. +-----------------+-------------------------------------------------------+
104. | [1, 2, 3, 4, 5] | ['1', '2', '3', '4', '5']                             |
105. | [6, 7, 8]       | ['6', '7', '8']                                       |
106. | []              | []                                                    |
107. | NULL            | NULL                                                  |
108. +-----------------+-------------------------------------------------------+
109. 4 rows in set (0.01 sec)

keywords

ARRAY,MAP,ARRAY_MAP