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.