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

Содержание раздела
  1. Примеры запросов по категориям
    1. Реляционные запросы
    2. Запросы агрегации и группировки
    3. Запрос чтения по ключу
    4. Запрос неопределенной категории
  2. Маршрутизация запросов к данным материализованных представлений

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

  1. Если в запросе указано ключевое слово DATASOURCE_TYPE с СУБД хранилища для исполнения запроса, запрос направляется в указанную СУБД.
  2. Иначе:
    1. Определяются те СУБД хранилища, в которых можно выполнить запрос, — выбираются СУБД, содержащие данные всех запрашиваемых логических сущностей.
    2. Определяется категория запроса.
    3. Запрос направляется в ту из выбранных СУБД, которая имеет в конфигурации самый высокий приоритет для запросов этой категории (см. ниже).

Запросы к данным материализованных представлений после перечисленных этапов маршрутизации проходят дополнительные этапы (см. Маршрутизация запросов к данным материализованных представлений).

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

Категория запроса Порядок выбора СУБД для исполнения запроса
1. Реляционный запрос (запрос с ключевым словом JOIN и (или) подзапросами) 1. ADB
2. ADQM
3. ADG
2. Запрос агрегации и группировки 1. ADQM
2. ADB
3. ADG
3. Запрос точечного чтения по ключу 1. ADG
2. ADB
3. ADQM
4. Другой запрос (не соответствующий ни одной из предыдущих категорий) 1. ADB
2. ADQM
3. ADG

Категория запроса определяется в указанном порядке: запрос проверяется на наличие признаков первой категории, и затем, если запрос не соответствует первой категории, он проверяется на наличие признаков второй категории и т.д. Например, запрос с ключевым словом 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  

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

Запросы к данным материализованных представлений проходят все этапы маршрутизации, описанные выше, и затем — дополнительные этапы:

  1. Если для материализованного представления не указано ключевое слово FOR SYSTEM_TIME, запрос направляется в СУБД, где размещены данные этого представления. Из представления выбираются данные, актуальные на момент его последней синхронизации.
  2. Иначе, если ключевое слово FOR SYSTEM_TIME указано, система проверяет, присутствуют ли запрашиваемые данные в материализованном представлении.
    • Если данные присутствуют в представлении, запрос направляется в СУБД, где размещены данные этого представления.
    • Иначе запрос направляется к исходным таблицам СУБД-источника, на которых построено представление.

Примечание: следующие ключевые слова не поддерживаются в запросах к материализованным представлениям:

  • FOR SYSTEM_TIME AS OF LATEST_UNCOMMITTED_DELTA;
  • FOR SYSTEM_TIME AS OF STARTED IN (delta_num1, delta_num2), если хотя бы одна дельта из диапазона отсутствует в материализованном представлении;
  • FOR SYSTEM_TIME AS OF FINISHED IN (delta_num1, delta_num2), если хотя бы одна дельта из диапазона отсутствует в материализованном представлении.