Соединение между кластерами
Область применения: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Соединение между кластерами включает присоединение данных из наборов данных, находящихся в разных кластерах.
В соединении между кластерами запрос может выполняться в трех возможных расположениях, каждый из которых имеет определенное обозначение для ссылки в этом документе:
- Локальный кластер: кластер, в который отправляется запрос, который также называется кластером, в котором размещена база данных в контексте.
- Левый кластер: кластер, в котором размещаются данные слева от операции соединения.
- Правый кластер: кластер, в котором размещаются данные справа от операции соединения.
Кластер, выполняющий запрос, извлекает данные из другого кластера.
Примечание.
Если данные слева и справа от операции соединения размещаются в одном кластере, он не считается соединением между кластерами, даже если данные размещаются вне локального кластера.
Синтаксис
[ 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