Link Search Menu Expand Document

Маршрутизация запросов к данных

Запросы к данным маршрутизируются следующим образом:

  • если в запросе указана СУБД хранилища (см. DATASOURCE_TYPE), в которой должен быть выполнен запрос, запрос направляется в указанную СУБД;
  • иначе запрос маршрутизируется автоматически на основе его категории в соответствии с конфигурацией системы.

По умолчанию в конфигурации определен следующий порядок выбора СУБД для исполнения запросов:

  • реляционные запросы — запросы с операторами JOIN и (или) подзапросами — направляются в ADB;
  • запросы агрегации и группировки данных направляются в ADQM;
  • запросы точечного чтения по ключу направляются в ADG;
  • запросы, не соответствующие ни одной из предыдущих категорий, направляются в ADB.

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

Указанный порядок выбора СУБД эффективно использует возможности каждой из СУБД хранилища, однако при необходимости его можно изменить в конфигурации системы.

Примечание: наиболее полный синтаксис запросов доступен в ADB. ADG и ADQM имеют ограничения на выполнение запросов, вызванные особенностями этих СУБД (см. Поддержка SQL).

Примеры запросов различных категорий

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

SELECT * FROM sales.sales AS s
JOIN sales.stores AS st
ON s.store_id = st.identification_number

Реляционный запрос с агрегацией, группировкой и чтением по ключу (st.identification_number):

SELECT
st.identification_number,
st.category,
SUM(s.product_units) AS product_amount
FROM sales.stores AS st
JOIN sales.sales AS s
ON st.identification_number = s.store_id
WHERE st.identification_number <> 10004
GROUP BY st.identification_number, st.category
ORDER BY product_amount DESC

Запрос агрегации и группировки:

SELECT s.product_code, SUM(s.product_units) AS product_amount
FROM sales.sales AS s
GROUP BY s.product_code
ORDER BY product_amount ASC

Запрос агрегации и группировки с чтением по ключу (s.identification_number):

SELECT s.product_code, SUM(s.product_units) AS product_amount
FROM sales.sales AS s
WHERE s.identification_number > 20000
GROUP BY s.product_code

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

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

Запрос неопределенной категории:

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