Секция ARRAY JOIN
Типовая операция для таблиц, содержащих столбец-массив — произвести новую таблицу, которая будет иметь столбец с каждым отдельным элементом массивов из изначального столбца, в то время как значения других столбцов дублируются. Это основной сценарий использования секции ARRAY JOIN
.
Название этой секции происходит от того, что эту операцию можно рассматривать как исполняющий JOIN
с массивом или вложенной структурой данных. Цель использования похожа на функцию arrayJoin, но функциональность секции шире.
Синтаксис:
Вы можете указать только одну секцию ARRAY JOIN
в SELECT
запросе.
Поддерживаемые виды ARRAY JOIN
перечислены ниже:
ARRAY JOIN
- В базовом случае пустые массивы не включаются в результат.LEFT ARRAY JOIN
- Результат содержит строки с пустыми массивами. Значение для пустого массива устанавливается равным значению по умолчанию для типа элемента массива (обычно 0, пустая строка или NULL).
Базовые примеры ARRAY JOIN
Приведенные ниже примеры демонстрируют использование ARRAY JOIN
и LEFT ARRAY JOIN
. Cоздадим таблицу с колонкой типа данных Array и вставим в него значения:
В приведенном ниже примере используется секция ARRAY JOIN
:
В следующем примере используется LEFT ARRAY JOIN
:
Использование алиасов
В секции ARRAY JOIN
может быть указан алиас для массива. В этом случае элемент массива доступен по этому алиас, а сам массив доступен по исходному имени. Пример:
Используя псевдонимы, вы можете выполнять ARRAY JOIN
с внешними массивами. Например:
Несколько массивов могут быть перечислены через запятую в секции ARRAY JOIN
. В этом случае, JOIN
выполняется с ними одновременно (прямая сумма, а не декартово произведение). Обратите внимание, что все массивы должны иметь одинаковый размер. Пример:
В приведенном ниже примере используется функция arrayEnumerate:
ARRAY JOIN со вложенной структурой данных
ARRAY JOIN
также работает с вложенными структурами данных:
При указании имен вложенных структур данных в ARRAY JOIN
, секция работает так же, как и ARRAY JOIN
со всеми элементами массива, из которых он состоит. Примеры приведены ниже:
Такая вариация также возможна:
Алиас для вложенной структуры данных можно использовать, чтобы выбрать как результат JOIN-а, так и исходный массив. Пример:
Пример использования функции arrayEnumerate:
Детали реализации
Хотя секция ARRAY JOIN
всегда должна быть указана перед WHERE/PREWHERE, технически они могут быть выполнены в любом порядке, если только результат ARRAY JOIN
используется для фильтрации. Порядок обработки контролируется оптимизатором запросов.