ARRAY_REVERSE_SPLIT
描述
- 传入两个长度相等的
ARRAY
且第二个为Array<Boolean>
,按照cond
中为true
的位置右侧作为分割点,分割arr
数组 。 - 高阶函数,传入一个 lambda 表达式和至少一个
arr
,则按照 lambda 表达式运算得到的Array<Boolean>
结果,其中为true
的位置右侧作为分割点,分割arg0
。
语法
ARRAY_REVERSE_SPLIT(<arr>, <cond>)
ARRAY_REVERSE_SPLIT(<lambda>, <arr> [, ...])
参数
参数 | 说明 |
---|---|
<lambda> | lambda 表达式,表达式中输入的参数为 1 个或多个,必须和后面的输入 array 列数量一致。在 lambda 中可以执行合法的标量函数,不支持聚合函数等。 |
<arr> | ARRAY数组 |
返回值
返回一个 ARRAY 类型的结果,其中按照对应条件分割后的数组
举例
select array_reverse_split([1,2,3,4,5], [1,0,1,0,0]);
+-------------------------------------------------------------------------------+
| array_reverse_split([1, 2, 3, 4, 5], cast([1, 0, 1, 0, 0] as ARRAY<BOOLEAN>)) |
+-------------------------------------------------------------------------------+
| [[1], [2, 3], [4, 5]] |
+-------------------------------------------------------------------------------+
select array_reverse_split((x,y)->y, [1,2,3,4,5], [1,0,0,0,0]);
+------------------------------------------------------------------------------------------------------------------------+
| array_reverse_split([1, 2, 3, 4, 5], cast(array_map((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 0, 0]) as ARRAY<BOOLEAN>)) |
+------------------------------------------------------------------------------------------------------------------------+
| [[1], [2, 3, 4, 5]] |
+------------------------------------------------------------------------------------------------------------------------+
select array_reverse_split((x,y)->(y+1), ['a', 'b', 'c', 'd'], [-1, -1, 0, -1]);
+----------------------------------------------------------------------------------------------------------------------------------------+
| array_reverse_split(['a', 'b', 'c', 'd'], cast(array_map((x, y) -> (y + 1), ['a', 'b', 'c', 'd'], [-1, -1, 0, -1]) as ARRAY<BOOLEAN>)) |
+----------------------------------------------------------------------------------------------------------------------------------------+
| [["a", "b", "c"], ["d"]] |
+----------------------------------------------------------------------------------------------------------------------------------------+
select array_reverse_split(x->(year(x)>2013),["2020-12-12", "2013-12-12", "2015-12-12", null]);
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| array_reverse_split(['2020-12-12', '2013-12-12', '2015-12-12', NULL], array_map(x -> (year(cast(x as DATEV2)) > 2013), ['2020-12-12', '2013-12-12', '2015-12-12', NULL])) |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [["2020-12-12"], ["2013-12-12", "2015-12-12"], [null]] |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+