Перейти к основному содержимому
Перейти к основному содержимому

Функция arrayJoin

Это очень необычная функция.

Обычные функции не изменяют набор строк, а просто изменяют значения в каждой строке (отображение). Агрегатные функции сжимают набор строк (сворачивание или редукция). Функция arrayJoin берет каждую строку и генерирует набор строк (разворачивание).

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

Пример:

Функция arrayJoin влияет на все части запроса, включая раздел WHERE. Обратите внимание на результат 2, хотя подзапрос вернул 1 строку.

Пример:

Запрос может использовать несколько функций arrayJoin. В этом случае преобразование выполняется несколько раз, и строки умножаются.

Пример:

Важно!

Использование нескольких arrayJoin с одним и тем же выражением может не привести к ожидаемым результатам из-за оптимизаций. В таких случаях рассмотрите возможность изменения повторяющегося выражения массива с помощью дополнительных операций, которые не влияют на результат соединения - например, arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, []))

Пример:

Обратите внимание на синтаксис ARRAY JOIN в запросе SELECT, который предоставляет более широкие возможности. ARRAY JOIN позволяет вам преобразовать несколько массивов с одинаковым количеством элементов сразу.

Пример:

Или вы можете использовать Tuple

Пример: