Функция arrayJoin
Это очень необычная функция.
Обычные функции не изменяют набор строк, а просто изменяют значения в каждой строке (отображение).
Агрегатные функции сжимают набор строк (сворачивание или редукция).
Функция arrayJoin
берет каждую строку и генерирует набор строк (разворачивание).
Эта функция принимает массив в качестве аргумента и распространяет исходную строку на несколько строк в зависимости от количества элементов в массиве. Все значения в столбцах просто копируются, кроме значений в столбце, где применяется эта функция; оно заменяется соответствующим значением массива.
Пример:
Функция arrayJoin
влияет на все части запроса, включая раздел WHERE
. Обратите внимание на результат 2, хотя подзапрос вернул 1 строку.
Пример:
Запрос может использовать несколько функций arrayJoin
. В этом случае преобразование выполняется несколько раз, и строки умножаются.
Пример:
Важно!
Использование нескольких arrayJoin
с одним и тем же выражением может не привести к ожидаемым результатам из-за оптимизаций.
В таких случаях рассмотрите возможность изменения повторяющегося выражения массива с помощью дополнительных операций, которые не влияют на результат соединения - например, arrayJoin(arraySort(arr))
, arrayJoin(arrayConcat(arr, []))
Пример:
Обратите внимание на синтаксис ARRAY JOIN в запросе SELECT, который предоставляет более широкие возможности.
ARRAY JOIN
позволяет вам преобразовать несколько массивов с одинаковым количеством элементов сразу.
Пример:
Или вы можете использовать Tuple
Пример: