Skip to main content
Skip to main content

Секция 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 используется для фильтрации. Порядок обработки контролируется оптимизатором запросов.