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