Оператор join

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

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

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

Схема, показывающая типы соединения запросов.

Синтаксис

Леваяtable|join [ kind=JoinFlavor ] [ Hints ] (RightTable)onConditions

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

Параметры

Имя Тип Обязательно Описание
LeftTable string ✔️ Левая таблица или табличное выражение, иногда называемое внешней таблицей, строки которой должны быть объединены. Обозначается как $left.
JoinFlavor string Тип соединения для выполнения: innerunique, inner, leftouter, rightouter, fullouter, leftanti, rightanti, , leftsemi. rightsemi Значение по умолчанию — innerunique. Дополнительные сведения о вариантах соединения см. в разделе Returns.
Указания string Ноль или более указаний соединения с разделителями пробелами в виде значения имени=, которые управляют поведением операции сопоставления строк и плана выполнения. Дополнительные сведения см. в разделе Подсказки.
RightTable string ✔️ Правильная таблица или табличное выражение, иногда называемое внутренней таблицей, строки которой должны быть объединены. Обозначается как $right.
Условия string ✔️ Определяет, как строки из LeftTable сопоставляются со строками из RightTable. Если столбцы, которые нужно сопоставить, имеют одинаковые имена в обеих таблицах, используйте синтаксис ONColumnName. В противном случае используйте синтаксис ON $left.LeftColumn==$right.RightColumn. Чтобы указать несколько условий, можно использовать ключевое слово "и" или разделять их запятыми. Если используются запятые, условия вычисляются с помощью логического оператора "и".

Совет

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

Указания

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

Примечание

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

Возвращаемое значение

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

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

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

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

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

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