Поделиться через


Оператор join

Узнайте, как объединить строки двух таблиц для формирования новой таблицы путем сопоставления значений указанных столбцов каждой таблицы.

язык запросов Kusto (KQL) предлагает множество типов соединений, которые влияют на схему и строки в результирующей таблице разными способами. Например, при использовании inner соединения таблица имеет те же столбцы, что и левая таблица, а также столбцы из правой таблицы. Для оптимальной производительности, если одна таблица всегда меньше другой, используйте ее в качестве левой join стороны оператора.

На следующем рисунке представлено визуальное представление операции, выполняемой каждым соединением. Цвет заливки представляет возвращаемые столбцы, а области, затеняемые, представляют возвращаемые строки.

Схема с типами соединения запросов.

Синтаксис

LeftTable join | [ kind = JoinFlavor ] [ Подсказки ] (RightTable) on Conditions

Дополнительные сведения о соглашениях синтаксиса.

Параметры

Имя (название) Type Обязательно Описание
ЛеваяTable string ✔️ Левая таблица или табличное выражение, иногда называемое внешней таблицей, строки которой необходимо объединить. Обозначается как $left.
JoinFlavor string Тип соединения для выполнения: innerunique, leftouterinner, fullouterleftantirightouter, , rightanti, . rightsemileftsemi Значение по умолчанию — innerunique. Дополнительные сведения о вкусах соединения см. в разделе "Возвращаемая информация".
Указания string Нулевая или более разделенная пробелами подсказки соединения в виде значения имени = , который управляет поведением операции сопоставления строк и плана выполнения. Дополнительные сведения см. в разделе "Подсказки".
RightTable string ✔️ Правое табличное выражение или табличное выражение, иногда называемое внутренней таблицей, строки которой необходимо объединить. Обозначается как $right.
Условия string ✔️ Определяет, как строки из LeftTable сопоставляются с строками из RightTable. Если столбцы, которые вы хотите сопоставить, имеют одинаковое имя в обеих таблицах, используйте синтаксис ON ColumnName. В противном случае используйте синтаксис ON $left.LeftColumn RightColumn == $right.. Чтобы указать несколько условий, можно использовать ключевое слово "и" или разделить их запятыми. При использовании запятых условия оцениваются с помощью логического оператора "и".

Совет

Для повышения производительности, если одна таблица всегда меньше другой, используйте ее в качестве левой стороны соединения.

Подсказки

Ключ подсказки Значения Description
hint.remote auto, , leftlocalright См. статью Межкластерный оператор join.
hint.strategy=broadcast Указывает способ совместного использования нагрузки запроса на узлы кластера. См. присоединение к широковещательной трансляции
hint.shufflekey=<key> Запрос shufflekey использует нагрузку запроса на узлы кластера, используя ключ для секционирования данных. См. запрос перемешивания
hint.strategy=shuffle Запрос shuffle стратегии использует нагрузку запроса на узлы кластера, где каждый узел обрабатывает одну секцию данных. См. запрос перемешивания
Имя. Значения Description
hint.remote auto, , leftlocalright
hint.strategy=broadcast Указывает способ совместного использования нагрузки запроса на узлы кластера. См. присоединение к широковещательной трансляции
hint.shufflekey=<key> Запрос shufflekey использует нагрузку запроса на узлы кластера, используя ключ для секционирования данных. См. запрос перемешивания
hint.strategy=shuffle Запрос shuffle стратегии использует нагрузку запроса на узлы кластера, где каждый узел обрабатывает одну секцию данных. См. запрос перемешивания

Примечание.

Подсказки соединения не изменяют семантику join , но могут повлиять на производительность.

Возвраты

Возвращаемая схема и строки зависят от вкуса соединения. Вкус соединения указывается с помощью ключевого слова kind . В следующей таблице показаны поддерживаемые вкусы соединения. Чтобы просмотреть примеры для определенного вкуса соединения, выберите ссылку в столбце "Присоединиться".

Вариант оператора join Возвраты Иллюстрация
innerunique (по умолчанию) Внутреннее соединение с удалением дубликатов в левой части
Схема: все столбцы из обеих таблиц, включая соответствующие ключи
Строки: все дедупликированные строки из левой таблицы, соответствующие строкам из правой таблицы
внутренний Стандартное внутреннее соединение
Схема: все столбцы из обеих таблиц, включая соответствующие ключи
Строки: только соответствующие строки из обеих таблиц
leftouter левое внешнее соединение.
Схема: все столбцы из обеих таблиц, включая соответствующие ключи
Строки: все записи из левой таблицы и только соответствующие строки из правой таблицы
rightouter Правое внешнее соединение
Схема: все столбцы из обеих таблиц, включая соответствующие ключи
Строки: все записи из правой таблицы и только соответствующие строки из левой таблицы
fullouter Полное внешнее соединение
Схема: все столбцы из обеих таблиц, включая соответствующие ключи
Строки: все записи из обеих таблиц с несовпадными ячейками, заполненными значением NULL
leftsemi Левое полусоединение
Схема: все столбцы из левой таблицы
Строки: все записи из левой таблицы, соответствующие записям из правой таблицы
leftanti, , antileftantisemi Левый антисоединяние и полу-вариант
Схема: все столбцы из левой таблицы
Строки: все записи из левой таблицы, которые не соответствуют записям из правой таблицы
rightsemi Правое полусоединение
Схема: все столбцы из правой таблицы
Строки: все записи из правой таблицы, соответствующие записям из левой таблицы
rightanti, rightantisemi Правый антисоединяние и полу-вариант
Схема: все столбцы из правой таблицы
Строки: все записи из правой таблицы, не соответствующие записям из левой таблицы

Перекрестное соединение

KQL не предоставляет вкус перекрестного соединения. Однако вы можете добиться эффекта перекрестного соединения с помощью подхода к ключу заполнителя.

В следующем примере ключ заполнителя добавляется в обе таблицы, а затем используется для внутренней операции соединения, эффективно выполняя поведение, подобное перекрестному присоединению:

X | extend placeholder=1 | join kind=inner (Y | extend placeholder=1) on placeholder