Cloudflare Pipelines 标量函数实现基于 Apache DataFusion ↗(通过 Arroyo ↗),本文档源自 DataFusion 函数参考。
将元素追加到数组末尾。
array_append(array, element)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- element: 要追加到数组的元素。
示例
> select array_append([1, 2, 3], 4);
+--------------------------------------+
| array_append(List([1,2,3]),Int64(4)) |
+--------------------------------------+
| [1, 2, 3, 4] |
+--------------------------------------+别名
- array_push_back
- list_append
- list_push_back
对数组排序。
array_sort(array, desc, nulls_first)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- desc: 是否降序排序(
ASCorDESC). - nulls_first: 是否将 null 排在前面(
NULLS FIRSTorNULLS LAST).
示例
> select array_sort([3, 1, 2]);
+-----------------------------+
| array_sort(List([3,1,2])) |
+-----------------------------+
| [1, 2, 3] |
+-----------------------------+别名
- list_sort
将列表调整为包含 size 个元素。使用 value 初始化新元素,若未设置 value 则为空。
array_resize(array, size, value)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- size: 给定数组的新大小。
- value: 定义新元素的值,若未设置 value 则为空。
示例
> select array_resize([1, 2, 3], 5, 0);
+-------------------------------------+
| array_resize(List([1,2,3],5,0)) |
+-------------------------------------+
| [1, 2, 3, 0, 0] |
+-------------------------------------+别名
- list_resize
array_concat 的别名。
连接数组。
array_concat(array[, ..., array_n])参数
- array: 要连接的数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- array_n: 后续要连接的数组列或字面量数组。
示例
> select array_concat([1, 2], [3, 4], [5, 6]);
+---------------------------------------------------+
| array_concat(List([1,2]),List([3,4]),List([5,6])) |
+---------------------------------------------------+
| [1, 2, 3, 4, 5, 6] |
+---------------------------------------------------+别名
- array_cat
- list_cat
- list_concat
array_has 的别名。
如果数组包含该元素则返回 true
array_has(array, element)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- element: 标量或数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
别名
- list_has
如果子数组的所有元素都存在于数组中则返回 true
array_has_all(array, sub-array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- sub-array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
别名
- list_has_all
如果两个数组中存在任何相同元素则返回 true
array_has_any(array, sub-array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- sub-array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
别名
- list_has_any
返回数组维度的数组。
array_dims(array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_dims([[1, 2, 3], [4, 5, 6]]);
+---------------------------------+
| array_dims(List([1,2,3,4,5,6])) |
+---------------------------------+
| [2, 3] |
+---------------------------------+别名
- list_dims
返回去重后的数组不同值。
array_distinct(array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_distinct([1, 3, 2, 3, 1, 2, 4]);
+---------------------------------+
| array_distinct(List([1,2,3,4])) |
+---------------------------------+
| [1, 2, 3, 4] |
+---------------------------------+别名
- list_distinct
从数组中提取索引为 n 的元素。
array_element(array, index)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- index: 从数组中提取元素的索引。
示例
> select array_element([1, 2, 3, 4], 3);
+-----------------------------------------+
| array_element(List([1,2,3,4]),Int64(3)) |
+-----------------------------------------+
| 3 |
+-----------------------------------------+别名
- array_extract
- list_element
- list_extract
array_element 的别名。
返回用给定值的副本填充的数组。
已弃用: 请改用 array_repeat!
array_fill(element, array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- element: 复制到数组的元素。
将数组的数组转换为扁平数组
- 适用于任意深度的嵌套数组
- 不改变已经扁平的数组
扁平化数组包含所有源数组中的所有元素。
参数
- array: 数组表达式 可以是常量、列或函数,以及数组运算符的任何组合。
flatten(array)array_position 的别名。
返回 array1 和 array2 交集元素的数组。
array_intersect(array1, array2)参数
- array1: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- array2: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_intersect([1, 2, 3, 4], [5, 6, 3, 4]);
+----------------------------------------------------+
| array_intersect([1, 2, 3, 4], [5, 6, 3, 4]); |
+----------------------------------------------------+
| [3, 4] |
+----------------------------------------------------+
> select array_intersect([1, 2, 3, 4], [5, 6, 7, 8]);
+----------------------------------------------------+
| array_intersect([1, 2, 3, 4], [5, 6, 7, 8]); |
+----------------------------------------------------+
| [] |
+----------------------------------------------------+别名
- list_intersect
array_to_string 的别名。
返回数组维度的长度。
array_length(array, dimension)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- dimension: 数组维度。
示例
> select array_length([1, 2, 3, 4, 5]);
+---------------------------------+
| array_length(List([1,2,3,4,5])) |
+---------------------------------+
| 5 |
+---------------------------------+别名
- list_length
返回数组的维度数。
array_ndims(array, element)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_ndims([[1, 2, 3], [4, 5, 6]]);
+----------------------------------+
| array_ndims(List([1,2,3,4,5,6])) |
+----------------------------------+
| 2 |
+----------------------------------+别名
- list_ndims
将元素前置到数组开头。
array_prepend(element, array)参数
- element: 要前置到数组的元素。
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_prepend(1, [2, 3, 4]);
+---------------------------------------+
| array_prepend(Int64(1),List([2,3,4])) |
+---------------------------------------+
| [1, 2, 3, 4] |
+---------------------------------------+别名
- array_push_front
- list_prepend
- list_push_front
返回不含第一个元素的数组。
array_pop_front(array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_pop_front([1, 2, 3]);
+-------------------------------+
| array_pop_front(List([1,2,3])) |
+-------------------------------+
| [2, 3] |
+-------------------------------+别名
- list_pop_front
返回不含最后一个元素的数组。
array_pop_back(array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_pop_back([1, 2, 3]);
+-------------------------------+
| array_pop_back(List([1,2,3])) |
+-------------------------------+
| [1, 2] |
+-------------------------------+别名
- list_pop_back
返回指定元素在数组中首次出现的位置。
array_position(array, element)
array_position(array, element, index)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- element: 要在数组中搜索位置的元素。
- index: 开始搜索的索引。
示例
> select array_position([1, 2, 2, 3, 1, 4], 2);
+----------------------------------------------+
| array_position(List([1,2,2,3,1,4]),Int64(2)) |
+----------------------------------------------+
| 2 |
+----------------------------------------------+别名
- array_indexof
- list_indexof
- list_position
在数组中搜索元素,返回所有出现位置。
array_positions(array, element)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- element: 要在数组中搜索位置的元素。
示例
> select array_positions([1, 2, 2, 3, 1, 4], 2);
+-----------------------------------------------+
| array_positions(List([1,2,2,3,1,4]),Int64(2)) |
+-----------------------------------------------+
| [2, 3] |
+-----------------------------------------------+别名
- list_positions
array_append 的别名。
array_prepend 的别名。
返回包含 element count 次的数组。
array_repeat(element, count)参数
- element: 元素表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- count: 重复元素的次数。
示例
> select array_repeat(1, 3);
+---------------------------------+
| array_repeat(Int64(1),Int64(3)) |
+---------------------------------+
| [1, 1, 1] |
+---------------------------------+> select array_repeat([1, 2], 2);
+------------------------------------+
| array_repeat(List([1,2]),Int64(2)) |
+------------------------------------+
| [[1, 2], [1, 2]] |
+------------------------------------+别名
- list_repeat
从数组中移除第一个等于给定值的元素。
array_remove(array, element)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- element: 要从数组中移除的元素。
示例
> select array_remove([1, 2, 2, 3, 2, 1, 4], 2);
+----------------------------------------------+
| array_remove(List([1,2,2,3,2,1,4]),Int64(2)) |
+----------------------------------------------+
| [1, 2, 3, 2, 1, 4] |
+----------------------------------------------+别名
- list_remove
从数组中移除前 max 个等于给定值的元素。
array_remove_n(array, element, max)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- element: 要从数组中移除的元素。
- max: 要移除的首次出现次数。
示例
> select array_remove_n([1, 2, 2, 3, 2, 1, 4], 2, 2);
+---------------------------------------------------------+
| array_remove_n(List([1,2,2,3,2,1,4]),Int64(2),Int64(2)) |
+---------------------------------------------------------+
| [1, 3, 2, 1, 4] |
+---------------------------------------------------------+别名
- list_remove_n
从数组中移除所有等于给定值的元素。
array_remove_all(array, element)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- element: 要从数组中移除的元素。
示例
> select array_remove_all([1, 2, 2, 3, 2, 1, 4], 2);
+--------------------------------------------------+
| array_remove_all(List([1,2,2,3,2,1,4]),Int64(2)) |
+--------------------------------------------------+
| [1, 3, 1, 4] |
+--------------------------------------------------+别名
- list_remove_all
将指定元素的首次出现替换为另一个指定元素。
array_replace(array, from, to)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- from: 初始元素。
- to: 最终元素。
示例
> select array_replace([1, 2, 2, 3, 2, 1, 4], 2, 5);
+--------------------------------------------------------+
| array_replace(List([1,2,2,3,2,1,4]),Int64(2),Int64(5)) |
+--------------------------------------------------------+
| [1, 5, 2, 3, 2, 1, 4] |
+--------------------------------------------------------+别名
- list_replace
将指定元素的前 max 次出现替换为另一个指定元素。
array_replace_n(array, from, to, max)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- from: 初始元素。
- to: 最终元素。
- max: 要替换的首次出现次数。
示例
> select array_replace_n([1, 2, 2, 3, 2, 1, 4], 2, 5, 2);
+-------------------------------------------------------------------+
| array_replace_n(List([1,2,2,3,2,1,4]),Int64(2),Int64(5),Int64(2)) |
+-------------------------------------------------------------------+
| [1, 5, 5, 3, 2, 1, 4] |
+-------------------------------------------------------------------+别名
- list_replace_n
将指定元素的所有出现替换为另一个指定元素。
array_replace_all(array, from, to)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- from: 初始元素。
- to: 最终元素。
示例
> select array_replace_all([1, 2, 2, 3, 2, 1, 4], 2, 5);
+------------------------------------------------------------+
| array_replace_all(List([1,2,2,3,2,1,4]),Int64(2),Int64(5)) |
+------------------------------------------------------------+
| [1, 5, 5, 3, 5, 1, 4] |
+------------------------------------------------------------+别名
- list_replace_all
返回元素顺序反转的数组。
array_reverse(array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_reverse([1, 2, 3, 4]);
+------------------------------------------------------------+
| array_reverse(List([1, 2, 3, 4])) |
+------------------------------------------------------------+
| [4, 3, 2, 1] |
+------------------------------------------------------------+别名
- list_reverse
基于从 1 开始的起始和结束位置返回数组切片。
array_slice(array, begin, end)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- begin: 第一个元素的索引。 如果为负数,则从数组末尾向前计数。
- end: 最后一个元素的索引。 如果为负数,则从数组末尾向前计数。
- stride: 数组切片的步长。默认为 1。
示例
> select array_slice([1, 2, 3, 4, 5, 6, 7, 8], 3, 6);
+--------------------------------------------------------+
| array_slice(List([1,2,3,4,5,6,7,8]),Int64(3),Int64(6)) |
+--------------------------------------------------------+
| [3, 4, 5, 6] |
+--------------------------------------------------------+别名
- list_slice
将每个元素转换为其文本表示。
array_to_string(array, delimiter)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- delimiter: 数组元素分隔符。
示例
> select array_to_string([[1, 2, 3, 4], [5, 6, 7, 8]], ',');
+----------------------------------------------------+
| array_to_string(List([1,2,3,4,5,6,7,8]),Utf8(",")) |
+----------------------------------------------------+
| 1,2,3,4,5,6,7,8 |
+----------------------------------------------------+别名
- array_join
- list_join
- list_to_string
返回两个数组中存在的元素数组(两个数组的所有元素),不含重复。
array_union(array1, array2)参数
- array1: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- array2: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_union([1, 2, 3, 4], [5, 6, 3, 4]);
+----------------------------------------------------+
| array_union([1, 2, 3, 4], [5, 6, 3, 4]); |
+----------------------------------------------------+
| [1, 2, 3, 4, 5, 6] |
+----------------------------------------------------+
> select array_union([1, 2, 3, 4], [5, 6, 7, 8]);
+----------------------------------------------------+
| array_union([1, 2, 3, 4], [5, 6, 7, 8]); |
+----------------------------------------------------+
| [1, 2, 3, 4, 5, 6, 7, 8] |
+----------------------------------------------------+别名
- list_union
返回出现在第一个数组但不在第二个数组中的元素数组。
array_except(array1, array2)参数
- array1: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- array2: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select array_except([1, 2, 3, 4], [5, 6, 3, 4]);
+----------------------------------------------------+
| array_except([1, 2, 3, 4], [5, 6, 3, 4]); |
+----------------------------------------------------+
| [1, 2] |
+----------------------------------------------------+
> select array_except([1, 2, 3, 4], [3, 4, 5, 6]);
+----------------------------------------------------+
| array_except([1, 2, 3, 4], [3, 4, 5, 6]); |
+----------------------------------------------------+
| [1, 2] |
+----------------------------------------------------+别名
- list_except
返回数组中的元素总数。
cardinality(array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select cardinality([[1, 2, 3, 4], [5, 6, 7, 8]]);
+--------------------------------------+
| cardinality(List([1,2,3,4,5,6,7,8])) |
+--------------------------------------+
| 8 |
+--------------------------------------+空数组返回 1,非空数组返回 0。
empty(array)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
示例
> select empty([1]);
+------------------+
| empty(List([1])) |
+------------------+
| 0 |
+------------------+别名
- array_empty,
- list_empty
类似于 range 函数,但包含上界。
generate_series(start, stop, step)参数
- start: 范围起始值
- end: 范围结束值(包含)
- step: 步长增量(不能为 0)
示例
> select generate_series(1,3);
+------------------------------------+
| generate_series(Int64(1),Int64(3)) |
+------------------------------------+
| [1, 2, 3] |
+------------------------------------+array_append 的别名。
array_concat 的别名。
array_concat 的别名。
array_dims 的别名。
array_dims 的别名。
array_element 的别名。
empty 的别名。
array_element 的别名。
array_element 的别名。
array_has 的别名。
array_has_all 的别名。
array_has_any 的别名。
array_position 的别名。
array_position 的别名。
array_to_string 的别名。
array_length 的别名。
array_ndims 的别名。
array_prepend 的别名。
array_pop_back 的别名。
array_pop_front 的别名。
array_position 的别名。
array_positions 的别名。
array_append 的别名。
array_prepend 的别名。
array_repeat 的别名。
array_resize 的别名。
array_remove 的别名。
array_remove_n 的别名。
array_remove_all 的别名。
array_replace 的别名。
array_replace_n 的别名。
array_replace_all 的别名。
array_reverse 的别名。
array_slice 的别名。
array_sort 的别名。
array_to_string 的别名。
array_union 的别名。
使用指定的输入表达式返回 Arrow 数组。
make_array(expression1[, ..., expression_n])empty 的别名。
参数
- expression_n: 要包含在输出数组中的表达式。 可以是常量、列或函数,以及算术或字符串运算符的任何组合。
示例
> select make_array(1, 2, 3, 4, 5);
+----------------------------------------------------------+
| make_array(Int64(1),Int64(2),Int64(3),Int64(4),Int64(5)) |
+----------------------------------------------------------+
| [1, 2, 3, 4, 5] |
+----------------------------------------------------------+别名
- make_list
make_array 的别名。
基于分隔符将字符串拆分为子字符串数组。匹配可选 null_str 参数的任何子字符串将被替换为 NULL。
SELECT string_to_array('abc##def', '##') or SELECT string_to_array('abc def', ' ', 'def')
starts_with(str, delimiter[, null_str])参数
- str: 要拆分的字符串表达式。
- delimiter: 用于拆分的分隔符字符串。
- null_str: 要替换为
NULL的子字符串值
别名
- string_to_list
string_to_array 的别名。
从数组中移除最后 n 个元素。
已弃用: 请改用 array_slice!
trim_array(array, n)参数
- array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
- n: 要修剪数组的元素。
返回 start 和 stop 之间具有 step 步长的 Arrow 数组。SELECT range(2, 10, 3) -> [2, 5, 8] 或 SELECT range(DATE '1992-09-01', DATE '1993-03-01', INTERVAL '1' MONTH);
范围 start..end 包含所有 start <= x < end 的值。如果 start >= end 则为空。
步长不能为 0(否则范围将无意义)。
请注意,当所需范围是数字时,它接受 (stop)、(start, stop) 和 (start, stop, step) 作为参数,但当所需范围是日期时,必须是 3 个非 NULL 参数。 例如,
SELECT range(3);
SELECT range(1,5);
SELECT range(1,5,1);在数字范围中允许
但在日期范围中,仅
SELECT range(DATE '1992-09-01', DATE '1993-03-01', INTERVAL '1' MONTH);允许,而
SELECT range(DATE '1992-09-01', DATE '1993-03-01', NULL);
SELECT range(NULL, DATE '1993-03-01', INTERVAL '1' MONTH);
SELECT range(DATE '1992-09-01', NULL, INTERVAL '1' MONTH);不允许
参数
- start: 范围起始值
- end: 范围结束值(不包含)
- step: 步长增量(不能为 0)
别名
- generate_series