Соединение между кластерами
Область применения: ✅Microsoft Fabric✅✅
Соединение между кластерами включает присоединение данных из наборов данных, находящихся в разных кластерах.
В соединении между кластерами запрос может выполняться в трех возможных расположениях, каждый из которых имеет определенное обозначение для ссылки в этом документе:
- Локальный кластер: кластер, в который отправляется запрос, который также называется кластером, в котором размещена база данных в контексте.
- Левый кластер: кластер, в котором размещаются данные слева от операции соединения.
- Правый кластер: кластер, в котором размещаются данные справа от операции соединения.
Кластер, выполняющий запрос, извлекает данные из другого кластера.
Примечание.
Если данные слева и справа от операции соединения размещаются в одном кластере, он не считается соединением между кластерами, даже если данные размещаются вне локального кластера.
Синтаксис
[ cluster(
ClusterName DatabaseName|
|
join
[ hint.remote=
Стратегия ](
[ cluster(
ClusterName DatabaseName|
)
условия
Дополнительные сведения о соглашениях синтаксиса.
Параметры
Имя (название) | 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
определяет, где выполняется соединение между кластерами на основе следующих правил:
Если одна из таблиц размещена в локальном кластере, соединение выполняется в локальном кластере. Например, при использовании автоматической стратегии этот запрос выполняется в локальном кластере:
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1
Если обе таблицы размещаются вне локального кластера, то присоединение выполняется в правом кластере. Например, если ни кластер не является локальным, соединение будет выполнено в правильном кластере:
cluster("B").database("DB").T | ... | join (cluster("C").database("DB2").T2 | ...) on Col1
Замечания, связанные с быстродействием
Для оптимальной производительности рекомендуется выполнить запрос в кластере, который содержит самую большую таблицу.
В следующем примере, если набор данных, созданный T | ...
, меньше одного, созданного cluster("B").database("DB").T2 | ...
, то для выполнения операции соединения в кластере B
будет эффективнее, в этом случае правильный кластер вместо локального кластера.
T | ... | join (cluster("B").database("DB").T2 | ...) on Col1
Вы можете переписать запрос, чтобы использовать hint.remote=right
для оптимизации производительности. Таким образом, операция соединения выполняется в правом кластере, даже если левая таблица находится в локальном кластере.
T | ... | join hint.remote=right (cluster("B").database("DB").T2 | ...) on Col1