Перейти к основному содержанию
Это очень необычная функция. Обычные функции не изменяют набор строк, а лишь меняют значения в каждой строке (map). Агрегатные функции сжимают набор строк (fold или reduce). Функция arrayJoin берёт каждую строку и порождает набор строк (unfold). Эта функция принимает массив в качестве аргумента и разворачивает исходную строку в несколько строк — по числу элементов массива. Все значения в столбцах просто копируются, кроме значений в столбце, к которому применяется эта функция: они заменяются соответствующим значением из массива.
Если массив пуст, arrayJoin не создаёт ни одной строки. Чтобы вернуть одну строку, содержащую значение по умолчанию для типа массива, можно обернуть массив в emptyArrayToSingle, например: arrayJoin(emptyArrayToSingle(...)).
Например:
Query
Response
Функция arrayJoin влияет на все части запроса, включая раздел WHERE. Обратите внимание, что результат запроса ниже — 2, хотя подзапрос вернул 1 строку.
Query
Response
Запрос может использовать несколько функций arrayJoin. В этом случае преобразование выполняется несколько раз, а количество строк увеличивается. Например:
Query
Response

Рекомендация

Использование нескольких arrayJoin с одним и тем же выражением может не дать ожидаемого результата из-за устранения общих подвыражений. В таких случаях попробуйте изменить повторяющиеся выражения массива, добавив дополнительные операции, которые не влияют на результат JOIN. Например, arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, [])) Пример:
Query
Обратите внимание на синтаксис ARRAY JOIN в SELECT-запросе: он даёт больше возможностей. ARRAY JOIN позволяет одновременно преобразовывать несколько массивов с одинаковым числом элементов. Пример:
Query
Response
Или можно использовать Tuple Пример:
Query
Row
Название arrayJoin в ClickHouse связано с его концептуальным сходством с операцией JOIN, но применительно к массивам в пределах одной строки. Если традиционные JOIN объединяют строки из разных таблиц, то arrayJoin «соединяет» каждый элемент массива в строке, создавая несколько строк — по одной на каждый элемент массива — и при этом дублируя значения остальных столбцов. В ClickHouse также есть синтаксис оператора ARRAY JOIN, который делает эту связь с традиционными операциями JOIN ещё более очевидной благодаря использованию привычной терминологии SQL JOIN. Этот процесс также называют «разворачиванием» массива, но термин «join» используется и в имени функции, и в операторе, потому что по сути это похоже на соединение таблицы с элементами массива, то есть на расширение набора данных способом, схожим с операцией JOIN.
Последнее изменение 10 июня 2026 г.