Соединение между кластерами
Объединение между кластерами предполагает объединение данных из наборов данных, которые находятся в разных кластерах.
В межкластичном соединении запрос может выполняться в трех возможных расположениях, каждое из которых имеет определенное обозначение для ссылки в этом документе:
- Локальный кластер. Кластер, в который отправляется запрос, который также называется кластером, в котором размещается база данных в контексте.
- Левый кластер: кластер, в котором размещаются данные в левой части операции соединения.
- Правый кластер. Кластер, в котором размещаются данные в правой части операции соединения.
Кластер, выполняющий запрос, извлекает данные из другого кластера.
Примечание
Если данные слева и справа от операции соединения размещаются в одном кластере, они не считаются межкластивным соединением, даже если данные размещаются за пределами локального кластера.
Синтаксис
[ cluster(
ClusterName).database(
DatabaseName).
]LeftTable|
...
|
join
[ hint.remote=
Стратегия ] (
[ cluster(
ClusterName).database(
DatabaseName).
]RightTable|
...
)
on Conditions
Дополнительные сведения о соглашениях о синтаксисе.
Параметры
Имя | Тип | Обязательно | Описание |
---|---|---|---|
LeftTable | string |
✔️ | Левая таблица или табличное выражение, строки которого необходимо объединить. Обозначается как $left . |
Стратегия | string |
Определяет кластер, в котором выполняется соединение. Поддерживаются значения left , right , local и auto . Дополнительные сведения см. в разделе Стратегии. |
|
ClusterName | string |
Если данные для соединения находятся за пределами локального кластера, используйте функцию cluster(), чтобы указать кластер. | |
DatabaseName | string |
Если данные для соединения находятся за пределами контекста локальной базы данных, используйте функцию database(), чтобы указать базу данных. | |
RightTable | string |
✔️ | Правильная таблица или табличное выражение, строки которых необходимо объединить. Обозначается как $right . |
Условия | string |
✔️ | Определяет, как строки из LeftTable сопоставляются со строками из RightTable. Если столбцы, которые нужно сопоставить, имеют одинаковые имена в обеих таблицах, используйте синтаксис ON ColumnName. В противном случае используйте синтаксис ON $left. LeftColumn== $right. RightColumn. Чтобы указать несколько условий, можно использовать ключевое слово "и" или разделять их запятыми. Если используются запятые, условия вычисляются с помощью логического оператора "и". |
Стратегии
В следующем списке приведены поддерживаемые значения для параметра 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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по