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

Функция arrayJoin

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

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

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

Пример:

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

Пример:

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

Пример:

Важно!

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

Пример:

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

Пример:

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

Пример: