Выбор датасорса для исполнения запроса

Содержание раздела
  1. Определение категории запроса
    1. Примеры запросов по категориям
  2. Стандартный порядок выбора типа датасорса по категории

При исполнении запроса на чтение или выгрузку данных система выбирает один или несколько датасорсов в порядке, описанном в таблице ниже. Под подходящими (для исполнения запроса к сущности) датасорсами понимаются включенные датасорсы, содержащие данные сущности.

Характеристика запроса
(по убыванию приоритета)
Датасорсы, где исполняется запрос Основные причины ошибок
при выборе датасорсов
1. Содержит DATASOURCE_TYPE Указанный в запросе
  • Датасорс отключен;
  • Датасорс содержит данные не всех сущностей запроса;
  • Датасорс содержит данные не всех партиций, задействованных в запросе
2. Содержит снапшот-таблицы с set.strict.consistency.enable = true Первый по алфавиту из подходящих для каждой такой таблицы (если он общий для этих таблиц)
  • Для снапшот-таблиц выбраны разные датасорсы;
  • Для снапшот-таблиц выбран общий датасорс, но он содержит данные не всех сущностей запроса
3. Содержит партиционированные таблицы Датасорсы задействованных партиций (с исключением реплик, если возможно) Выбранные датасорсы партиций содержат данные не всех сущностей запроса
4. [HTTP] Содержит queryId Вычисленный по queryId* с оптимальным типом из подходящих для всех сущностей запроса Нет датасорса, подходящего для всех сущностей запроса
5. Остальные случаи Случайный с оптимальным типом из подходящих для всех сущностей запроса Нет датасорса, подходящего для всех сущностей запроса

* Запросы с одинаковым значением queryId при одинаковом списке подходящих датасорсов исполняются в одном и том же датасорсе (если он включен; иначе выбирается другой).

Определение категории запроса

Запросы без DATASOURCE_TYPE, партиционированных таблиц, а также без снапшот-таблиц со строгим уровнем консистентности исполняются в вычисленном или случайном датасорсе с наиболее оптимальным типом, который определяется в зависимости от категории запроса.

Категория запроса определяется так (по убыванию приоритета):

  1. Содержит JOIN и (или) подзапросы → реляционный.
  2. Содержит GROUP BY и агрегатные функции → аналитический.
  3. Содержит условие WHERE на первичный ключ → чтение по ключу.
  4. Остальные случаи → другой.

Запрос относится к категории с наивысшим приоритетом, признаки которой у него есть. Например, запрос с JOIN всегда реляционный, даже если содержит другие признаки.

Примеры запросов по категориям

Реляционные запросы:

-- реляционный запрос без признаков других категорий
SELECT * FROM marketing.sales AS s
JOIN marketing.stores AS st ON s.store_id = st.id;

-- реляционный запрос с агрегацией, группировкой и чтением по ключу
SELECT st.id, st.category, SUM(s.product_units) AS product_amount
FROM marketing.stores AS st
JOIN marketing.sales AS s ON st.id = s.store_id
WHERE st.id <> 10004
GROUP BY st.id, st.category
ORDER BY product_amount DESC;

Аналитические запросы:

-- аналитический запрос без признаков других категорий
SELECT s.product_code, SUM(s.product_units) AS product_amount
FROM marketing.sales AS s
GROUP BY s.product_code
ORDER BY product_amount ASC;

-- аналитический запрос с чтением по ключу
SELECT s.product_code, SUM(s.product_units) AS product_amount
FROM marketing.sales AS s
WHERE s.id > 20000
GROUP BY s.product_code;

Запрос чтения по ключу:

SELECT * FROM marketing.sales as s
WHERE s.id BETWEEN 1001 AND 2000

Другой запрос:

SELECT * FROM marketing.sales AS s
WHERE s.product_units > 2  

Стандартный порядок выбора типа датасорса по категории

Стандартный порядок выбора типа датасорса (см. таблицу ниже) в зависимости от категории запроса учитывает сильные стороны каждого типа и может быть изменен в конфигурации.

Например, для реляционного запроса предпочтение отдается типу ADB, но, если в хранилище нет ADB-датасорсов или в них нет запрашиваемых данных, — типу ADP и далее по таблице.

Категория запроса Порядок выбора типа датасорса
Реляционный запрос (Relational) 1. ADB, 2. ADP, 3. ADQM, 4. ADG
Аналитический запрос (Analytical) 1. ADQM, 2. ADB, 3. ADP, 4. ADG
Запрос чтения по ключу (Dictionary) 1. ADG, 2. ADB, 3. ADP, 4. ADQM
Другой запрос (Undefined) 1. ADB, 2. ADP, 3. ADQM, 4. ADG

Наиболее полный синтаксис запросов доступен в ADB и ADP. ADG и ADQM имеют ограничения на выполнение запросов (см. Поддержка SQL).