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

Функция arrayJoin

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

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

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

Пример:

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

Пример:

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

Пример:

Важное замечание!

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

Пример:

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

Пример:

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

Пример: