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


Соединение между кластерами

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

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

  • Локальный кластер: кластер, в который отправляется запрос, который также называется кластером, в котором размещена база данных в контексте.
  • Левый кластер: кластер, в котором размещаются данные слева от операции соединения.
  • Правый кластер: кластер, в котором размещаются данные справа от операции соединения.

Кластер, выполняющий запрос, извлекает данные из другого кластера.

Примечание.

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

Синтаксис

[ cluster(ClusterName DatabaseName).).database(]LeftTable ... |
|join [ hint.remote=Стратегия ](
  [ cluster(ClusterName DatabaseName).).database(]RightTable ... |
)условия

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

Параметры

Имя (название) Type Обязательно Описание
ЛеваяTable string ✔️ Левая таблица или табличное выражение, строки которых должны быть объединены. Обозначается как $left.
Стратегия string Определяет кластер, на котором выполняется соединение. Поддерживаются значения left, right, local и auto. Дополнительные сведения см. в разделе "Стратегии".
Имя кластера string Если данные для соединения находятся вне локального кластера, используйте функцию cluster() для указания кластера.
DatabaseName string Если данные для соединения находятся вне контекста локальной базы данных, используйте функцию database() для указания базы данных.
RightTable string ✔️ Справа таблица или табличное выражение, строки которого необходимо объединить. Обозначается как $right.
Условия string ✔️ Определяет, как строки из LeftTable сопоставляются с строками из RightTable. Если столбцы, которые вы хотите сопоставить, имеют одинаковое имя в обеих таблицах, используйте синтаксис ON ColumnName. В противном случае используйте синтаксис ON $left.LeftColumn RightColumn == $right.. Чтобы указать несколько условий, можно использовать ключевое слово "и" или разделить их запятыми. При использовании запятых условия оцениваются с помощью логического оператора "и".

Стратегии

В следующем списке описываются поддерживаемые значения параметра Strategy :

  • left: выполните присоединение к кластеру левой таблицы или левого кластера.
  • right: выполните присоединение к кластеру правой таблицы или правого кластера.
  • local: выполните присоединение к кластеру текущего кластера или локального кластера.
  • auto: (по умолчанию) Kusto принимает решение о удаленном взаимодействии.

Примечание.

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

Как работает автоматическая стратегия

По умолчанию стратегия определяет, auto где должно выполняться соединение между кластерами на основе следующих правил:

  • Если одна из таблиц размещена в локальном кластере, соединение выполняется в локальном кластере.
  • Если обе таблицы размещаются вне локального кластера, то присоединение выполняется в правом кластере.

Рассмотрим следующие примеры:

// Example 1
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

// Example 2
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1

auto С помощью стратегии в локальном кластере будет выполняться пример 1. В примере 2, если ни кластер не является локальным, соединение будет выполнено в правильном кластере.

Замечания, связанные с быстродействием

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

Рассмотрим следующие примеры еще раз:

// Example 1
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1

// Example 2
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1

"Пример 1" установлен для запуска в локальном кластере, но если набор данных, созданный T | ... cluster("B").database("DB").T2 | ... на основе одного, меньше одного, то будет эффективнее выполнить операцию Bсоединения в кластере, в данном случае правильный кластер вместо локального кластера.

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

T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1

Эта возможность не поддерживается в Azure Monitor