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