Функции для работы с массивами

Функции для работы с массивами в RQL предоставляют набор операций для манипуляции массивами данных. Эти функции позволяют выполнять проверку на пустоту или заполненность массива, определять его длину, создавать пустые массивы различных типов, генерировать числовые диапазоны, объединять массивы, извлекать элементы, а также проводить более сложные операции, такие как вычисление уникальности элементов, работу с подмассивами и манипуляцию порядком элементов.

Набор поддерживаемых функций RQL и их поведение зависят от версии установленного ClickHouse. Если функция не поддерживается в используемой версии ClickHouse, она также не будет доступна в RQL. Ознакомиться с актуальным списком функций и их поведением можно в официальном репозитории ClickHouse, выбрав нужную версию из веток. Например: список функций для работы с массивами для ClickHouse 24.7.

Table 1. Функции для работы с массивами
Функция Описание

empty(arr)

Проверяет, является ли входной массив arr пустым. Массив считается пустым, если он не содержит ни одного элемента. Функция также поддерживает работу с типами String и UUID.

notEmpty(arr)

Проверяет, является ли входной массив arr непустым. Массив считается непустым, если он содержит хотя бы один элемент. Функция также поддерживает работу с типами String и UUID.

length(arr)

Возвращает количество элементов в массиве arr. Тип результата — UInt64. Функция также работает для строк. Можно оптимизировать работу функции с использованием настройки optimize_functions_to_subcolumns.

emptyArrayUInt8()

Возвращает пустой массив с элементами типа UInt8.

emptyArrayUInt16()

Возвращает пустой массив с элементами типа UInt16.

emptyArrayUInt32()

Возвращает пустой массив с элементами типа UInt32.

emptyArrayUInt64()

Возвращает пустой массив с элементами типа UInt64.

emptyArrayInt8()

Возвращает пустой массив с элементами типа Int8.

emptyArrayInt16()

Возвращает пустой массив с элементами типа Int16.

emptyArrayInt32()

Возвращает пустой массив с элементами типа Int32.

emptyArrayInt64()

Возвращает пустой массив с элементами типа Int64.

emptyArrayFloat32()

Возвращает пустой массив с элементами типа Float32.

emptyArrayFloat64()

Возвращает пустой массив с элементами типа Float64.

emptyArrayDate()

Возвращает пустой массив с элементами типа Date.

emptyArrayDateTime()

Возвращает пустой массив с элементами типа DateTime.

emptyArrayString()

Возвращает пустой массив строк.

emptyArrayToSingle(arr)

Принимает пустой массив arr и возвращает массив из одного элемента, равного значению по умолчанию для типа элементов arr.

range([start, ] end [, step])

Возвращает массив чисел от start до end - 1 с шагом step. Аргументы start и step необязательны. По умолчанию start = 0, step = 1. Аргумент end обязателен. Если аргументы start, end, step имеют отрицательные значения или значение аргумента end меньше значения аргумента start, функция генерирует исключение. Если суммарная длина создаваемых массивов больше значения настройки function_range_max_elements_in_block, функция генерирует исключение.

array(x1, …), operator [x1, …]

Создает массив из аргументов функции. Аргументы должны быть константами и иметь типы, для которых есть наименьший общий тип. Должен быть передан хотя бы один аргумент, так как иначе непонятно, какого типа создавать массив. Возвращает результат типа Array(T), где T — наименьший общий тип от переданных аргументов.

arrayConcat(arrays)

Объединяет массивы, переданные в качестве аргументов, в один массив. Пример: SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res возвращает [1,2,3,4,5,6].

arrayElement(arr, n)

Извлекает элемент с индексом n из массива arr. Индексы начинаются с единицы. Поддерживаются отрицательные индексы для доступа к элементам с конца массива. Если индекс выходит за границы массива, то возвращается значение по умолчанию для типа элементов массива.

has(arr, elem)

Проверяет наличие элемента elem в массиве arr. Возвращает 0, если элемента в массиве нет, или 1, если есть. NULL обрабатывается как значение. Пример: SELECT has([1, 2, NULL], NULL) возвращает 1.

indexOf(arr, x)

Возвращает индекс первого вхождения элемента x в массив arr, начиная с 1. Если элемент отсутствует в массиве, возвращает 0. Элементы, равные NULL, обрабатываются как обычные значения.

countEqual(arr, x)

Возвращает количество элементов массива, равных x. Эквивалентно arrayCount(elem → elem = x, arr). NULL обрабатывается как значение. Пример: SELECT countEqual([1, 2, NULL, NULL], NULL) возвращает 2.

arrayEnumerate(arr)

Возвращает массив индексов для каждого элемента входного массива arr. Это позволяет идентифицировать позицию каждого элемента в исходном массиве.

arrayEnumerateUniq(arr, …)

Возвращает массив, где каждый элемент указывает на его первое вхождение в массиве arr. Если функция принимает несколько массивов, уникальность определяется по комбинации элементов на соответствующих позициях во всех массивах.

arrayPopBack(array)

Удаляет последний элемент из массива array и возвращает новый массив без этого элемента.

arrayPopFront(array)

Удаляет первый элемент из массива array и возвращает новый массив без этого элемента.

arrayPushBack(array, single_value)

Добавляет элемент single_value в конец массива array и возвращает новый массив с добавленным элементом.

arrayPushFront(array, single_value)

Добавляет элемент single_value в начало массива array и возвращает новый массив с добавленным элементом.

arrayResize(array, size[, extender])

Изменяет размер массива array до нового размера size, используя extender для заполнения новых элементов, если size больше текущего размера массива.

arraySlice(array, offset[, length])

Возвращает часть массива array, начиная с позиции offset и длиной length. Если length не указано, возвращает все элементы начиная с offset до конца массива.

arrayUniq(arr, …)

Возвращает массив уникальных элементов из массива arr. Если передано несколько массивов, возвращает массив уникальных комбинаций элементов на соответствующих позициях в этих массивах.

arrayJoin(arr)

Специальная функция, которая используется для разделения одного массива arr на строки, каждая из которых содержит один элемент массива.

arrayDifference(array)

Вычисляет разность между соседними элементами массива array. Возвращает массив, где первый элемент равен нулю, а каждый следующий элемент равен разности между текущим и предыдущим элементами исходного массива.

arrayDistinct(array)

Возвращает массив, содержащий только уникальные элементы из исходного массива array.

arrayEnumerateDense(arr)

Возвращает массив, каждый элемент которого указывает на позицию первого вхождения соответствующего элемента в массиве arr с учетом его встречаемости.

arrayIntersect(arr)

Возвращает массив, содержащий элементы, которые присутствуют во всех переданных массивах arr.

arrayReverse(arr)

Возвращает массив с элементами исходного массива arr в обратном порядке.

reverse(arr)

Синоним функции arrayReverse. Возвращает массив с элементами исходного массива arr в обратном порядке.

arrayFlatten(array_of_arrays)

Преобразует массив массивов array_of_arrays в один плоский массив, содержащий все элементы исходных массивов. Элементы вложенных массивов добавляются в результирующий массив последовательно, начиная с первого вложенного массива до последнего.

arrayCompact(array)

Удаляет последовательно повторяющиеся элементы из массива array, сохраняя только уникальные последовательности. Возвращает новый массив без последовательных дубликатов.

arrayZip(arr1, arr2, …​)

Объединяет несколько массивов arr1, arr2, …​, создавая массив кортежей, где каждый кортеж содержит элементы из исходных массивов, расположенные на одинаковых позициях. Длина результирующего массива соответствует длине самого короткого из исходных массивов.

arrayAUC(arr_scores, arr_labels)

Вычисляет площадь под кривой (AUC) для заданных массивов оценок arr_scores и меток arr_labels.

arrayProduct(arr)

Возвращает произведение элементов массива arr.

arrayRotateLeft(arr, n)

Циклически сдвигает элементы массива arr влево на n позиций.

arrayRotateRight(arr, n)

Циклически сдвигает элементы массива arr вправо на n позиций.

arrayShiftLeft(arr, n)

Сдвигает элементы массива arr влево на n позиций, заполняя освободившиеся места нулями.

arrayShiftRight(arr, n)

Сдвигает элементы массива arr вправо на n позиций, заполняя освободившиеся места нулями.