跳转到内容
搜索文档

数组函数

最后更新 查看 MarkdownAgent 设置

Cloudflare Pipelines 标量函数实现基于 Apache DataFusion(通过 Arroyo),本文档源自 DataFusion 函数参考。

array_append

将元素追加到数组末尾。

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_sort(array, desc, nulls_first)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
  • desc: 是否降序排序(ASC or DESC).
  • nulls_first: 是否将 null 排在前面(NULLS FIRST or NULLS LAST).

示例

> select array_sort([3, 1, 2]);
+-----------------------------+
| array_sort(List([3,1,2]))   |
+-----------------------------+
| [1, 2, 3]                   |
+-----------------------------+

别名

  • list_sort

array_resize

将列表调整为包含 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_cat

array_concat 的别名。

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_contains

array_has 的别名。

array_has

如果数组包含该元素则返回 true

array_has(array, element)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
  • element: 标量或数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。

别名

  • list_has

array_has_all

如果子数组的所有元素都存在于数组中则返回 true

array_has_all(array, sub-array)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
  • sub-array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。

别名

  • list_has_all

array_has_any

如果两个数组中存在任何相同元素则返回 true

array_has_any(array, sub-array)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
  • sub-array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。

别名

  • list_has_any

array_dims

返回数组维度的数组。

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_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

array_element

从数组中提取索引为 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_extract

array_element 的别名。

array_fill

返回用给定值的副本填充的数组。

已弃用: 请改用 array_repeat

array_fill(element, array)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
  • element: 复制到数组的元素。

flatten

将数组的数组转换为扁平数组

  • 适用于任意深度的嵌套数组
  • 不改变已经扁平的数组

扁平化数组包含所有源数组中的所有元素。

参数

  • array: 数组表达式 可以是常量、列或函数,以及数组运算符的任何组合。
flatten(array)

array_indexof

array_position 的别名。

array_intersect

返回 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_join

array_to_string 的别名。

array_length

返回数组维度的长度。

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_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

将元素前置到数组开头。

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_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_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_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_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_push_back

array_append 的别名。

array_push_front

array_prepend 的别名。

array_repeat

返回包含 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_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

array_remove_n

从数组中移除前 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_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_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

array_replace_n

将指定元素的前 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_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_reverse(array)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。

示例

> select array_reverse([1, 2, 3, 4]);
+------------------------------------------------------------+
| array_reverse(List([1, 2, 3, 4]))                          |
+------------------------------------------------------------+
| [4, 3, 2, 1]                                               |
+------------------------------------------------------------+

别名

  • list_reverse

array_slice

基于从 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_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

返回两个数组中存在的元素数组(两个数组的所有元素),不含重复。

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

返回出现在第一个数组但不在第二个数组中的元素数组。

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

返回数组中的元素总数。

cardinality(array)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。

示例

> select cardinality([[1, 2, 3, 4], [5, 6, 7, 8]]);
+--------------------------------------+
| cardinality(List([1,2,3,4,5,6,7,8])) |
+--------------------------------------+
| 8                                    |
+--------------------------------------+

empty

空数组返回 1,非空数组返回 0。

empty(array)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。

示例

> select empty([1]);
+------------------+
| empty(List([1])) |
+------------------+
| 0                |
+------------------+

别名

  • array_empty,
  • list_empty

generate_series

类似于 range 函数,但包含上界。

generate_series(start, stop, step)

参数

  • start: 范围起始值
  • end: 范围结束值(包含)
  • step: 步长增量(不能为 0)

示例

> select generate_series(1,3);
+------------------------------------+
| generate_series(Int64(1),Int64(3)) |
+------------------------------------+
| [1, 2, 3]                          |
+------------------------------------+

list_append

array_append 的别名。

list_cat

array_concat 的别名。

list_concat

array_concat 的别名。

list_dims

array_dims 的别名。

list_distinct

array_dims 的别名。

list_element

array_element 的别名。

list_empty

empty 的别名。

list_except

array_element 的别名。

list_extract

array_element 的别名。

list_has

array_has 的别名。

list_has_all

array_has_all 的别名。

list_has_any

array_has_any 的别名。

list_indexof

array_position 的别名。

list_intersect

array_position 的别名。

list_join

array_to_string 的别名。

list_length

array_length 的别名。

list_ndims

array_ndims 的别名。

list_prepend

array_prepend 的别名。

list_pop_back

array_pop_back 的别名。

list_pop_front

array_pop_front 的别名。

list_position

array_position 的别名。

list_positions

array_positions 的别名。

list_push_back

array_append 的别名。

list_push_front

array_prepend 的别名。

list_repeat

array_repeat 的别名。

list_resize

array_resize 的别名。

list_remove

array_remove 的别名。

list_remove_n

array_remove_n 的别名。

list_remove_all

array_remove_all 的别名。

list_replace

array_replace 的别名。

list_replace_n

array_replace_n 的别名。

list_replace_all

array_replace_all 的别名。

list_reverse

array_reverse 的别名。

list_slice

array_slice 的别名。

list_sort

array_sort 的别名。

list_to_string

array_to_string 的别名。

list_union

array_union 的别名。

make_array

使用指定的输入表达式返回 Arrow 数组。

make_array(expression1[, ..., expression_n])

array_empty

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_list

make_array 的别名。

string_to_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_list

string_to_array 的别名。

trim_array

从数组中移除最后 n 个元素。

已弃用: 请改用 array_slice

trim_array(array, n)

参数

  • array: 数组表达式。 可以是常量、列或函数,以及数组运算符的任何组合。
  • n: 要修剪数组的元素。

range

返回 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

这篇文档对您有帮助吗?