JOIN и [NOT] IN в ADQM

Содержание раздела
  1. Установка режима соединения
  2. Поддержка JOIN и [NOT] IN в зависимости от режима соединения

Данные логических сущностей, размещенные в СУБД 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 ни в одном из режимов соединения.