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
