← Cloudflare Pipelines / pipelines / sql-reference / scalar-functions
Функции для работы с массивами
Реализации скалярных функций 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илиDESC). - nulls_first: Выводить ли значения NULL первыми(
NULLS FIRSTили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: Выражение массива. Может быть константой, столбцом или функцией, а также любой комбинацией операторов массива.
- размер: Новый размер заданного массива.
- значение: Определяет значение новых элементов или пустое, если значение не задано.
Пример
> 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: Выражение массива. Может быть константой, столбцом или функцией, а также любой комбинацией операторов массива.
- подмассив: Выражение массива. Может быть константой, столбцом или функцией, а также любой комбинацией операторов массива.
Псевдонимы
- list_has_all
array_has_any
Возвращает true, если в обоих массивах есть хотя бы один общий элемент
array_has_any(array, sub-array)Аргументы
- 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: Выражение массива. Может быть константой, столбцом или функцией, а также любой комбинацией операторов массива.
- измерение: Размерность массива.
Пример
> 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
Возвращает массив, содержащий элемент 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: Выражение массива. Может быть константой, столбцом или функцией, а также любой комбинацией операторов массива.
- откуда: Начальный элемент.
- до: Последний элемент.
Пример
> 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: Выражение массива. Может быть константой, столбцом или функцией, а также любой комбинацией операторов массива.
- откуда: Начальный элемент.
- до: Последний элемент.
- 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: Выражение массива. Может быть константой, столбцом или функцией, а также любой комбинацией операторов массива.
- откуда: Начальный элемент.
- до: Последний элемент.
Пример
> 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: конец диапазона (включительно)
- шаг: шаг увеличения (не может быть равен 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
Псевдоним пусто.
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
Псевдоним пусто.
Аргументы
- 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', '##') или 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
Возвращает Arrow-массив от start до stop с шагом step. 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: конец диапазона (не включительно)
- шаг: шаг увеличения (не может быть равен 0)
Псевдонимы
- generate_series