JOIN и [NOT] IN в ADQM
Содержание раздела
Данные логических сущностей, размещенные в СУБД ADQM, физически распределены по шардам. Для запросов с JOIN и (или) [NOT] IN, обращающихся к данным нескольких шардов сразу, корректность результата зависит от следующих факторов:
- какой режим соединения задан;
- включает ли условие соединения (
ON) полный ключ шардирования всех соединяемых сущностей.
Подробнее см. в секции Поддержка JOIN и [NOT] IN в зависимости от режима соединения.
Установка режима соединения
Режим соединения данных между шардами в ADQM можно установить следующими способами:
- с помощью параметра
distributed_product_modeв конфигурации ADQM (задается на сервере СУБД, вне Prostore); - с помощью указания
Set(distributed_product_mode <значение>)в запросе.
Если режим установлен обоими способами, приоритет имеют указания запроса.
Возможные режимы соединения — deny, global, allow и local. Подробнее о них см. в документации ClickHouse.
Поддержка JOIN и [NOT] IN в зависимости от режима соединения
В таблице ниже описан объем поддержки соединений и подзапросов, обращающихся к данным нескольких шардов ADQM, в зависимости от заданного режима соединения.
В режиме deny (значение по умолчанию в ADQM):
- [proxy- и standalone-таблицы] соединения и подзапросы из таблицы ниже не поддерживаются и завершаются ошибкой
DISTRIBUTED_IN_JOIN_SUBQUERY_DENIED; - [логические таблицы] ограничение режима
denyне применяется: Prostore обращается к данным логических таблиц через дополнительный подзапрос, учитывающий версионность данных, из-за чего соединения и подзапросы из таблицы ниже выполняются без ошибки.
| Конструкция | Поддерживается в режиме global / allow | Поддерживается в режиме local |
|---|---|---|
[INNER] JOIN | + | + Только если ключ шардирования полностью входит в условие соединения. Иначе возвращается меньше строк |
LEFT [OUTER] JOIN | + | + Только если ключ шардирования полностью входит в условие соединения. Иначе возвращается меньше строк присоединяемой сущности |
RIGHT [OUTER] JOIN | – Возвращается больше строк | + Только если ключ шардирования полностью входит в условие соединения. Иначе возвращается меньше строк сущности-источника |
FULL JOIN | ||
[NOT] IN | + | + Только если ключ шардирования полностью входит в условие соединения. Иначе возвращается меньше строк |
CROSS JOIN | + | – Возвращается меньше строк |
[NOT] EXISTS не поддерживается в ADQM ни в одном из режимов соединения.