Технология DirectQuery
DirectQuery — это технология доступа к данным, используемая в системах бизнес-аналитики (BI), которая позволяет выполнять запросы непосредственно к исходной базе данных или хранилищу данных в реальном времени, без предварительного импорта и копирования данных в локальную модель. В отличие от традиционного подхода с импортом, DirectQuery не создаёт отдельную копию данных, а транслирует запросы пользователя (например, из отчёта или дашборда) в SQL-запросы, которые выполняются на стороне источника.
Принцип работы
При использовании технологии DirectQuery аналитическая модель (например, в Power BI или SQL Server Analysis Services) не содержит самих данных, а только метаданные — описание таблиц, связей, мер и измерений. Когда пользователь взаимодействует с визуализацией (фильтрует, группирует, выбирает значения), система генерирует запрос на языке DAX (Data Analysis Expressions) или MDX (Multidimensional Expressions), который затем преобразуется в нативный SQL-запрос, специфичный для конкретного источника данных. Этот запрос отправляется в базу данных, выполняется там, и результат возвращается в отчёт.
Таким образом, данные всегда актуальны на момент выполнения запроса, так как не хранятся в промежуточном кэше (за исключением возможного кэширования результатов на уровне сервера отчётов). Это ключевое отличие от импортного режима, где данные загружаются по расписанию и могут устареть.
Сравнение с режимом импорта
Основные различия между DirectQuery и импортным режимом можно представить в виде таблицы:
| Характеристика | Режим импорта | DirectQuery |
|---|---|---|
| Хранение данных | Данные копируются и сжимаются в оперативной памяти (in-memory) | Данные остаются в исходной базе данных |
| Производительность запросов | Высокая, так как данные уже в памяти | Зависит от производительности источника и сети |
| Актуальность данных | На момент последнего обновления (запланированного или ручного) | Всегда актуальна на момент запроса (режим реального времени) |
| Объём данных | Ограничен доступной оперативной памятью | Ограничен только возможностями источника |
| Сложность модели | Поддерживает сложные вычисления и связи | Ограничения на использование некоторых функций DAX (например, CALCULATE с фильтрами по другим таблицам) |
| Нагрузка на источник | Низкая (только во время обновления) | Высокая (каждый запрос пользователя генерирует нагрузку) |
История и развитие
Технология DirectQuery была впервые представлена корпорацией Microsoft в составе SQL Server Analysis Services (SSAS) в версии 2012 года (в режиме Tabular). Изначально она поддерживала ограниченное число источников данных (в основном SQL Server и Oracle). В последующих версиях (SQL Server 2016, 2017, 2019) функциональность была расширена, улучшена оптимизация запросов и добавлена поддержка большего количества реляционных баз данных, включая Teradata, SAP HANA, Amazon Redshift, Google BigQuery и другие.
В Power BI технология DirectQuery стала доступна с момента выхода продукта в 2015 году, первоначально для SQL Server, а затем для всё более широкого круга источников. В 2019 году Microsoft представила так называемый «составной режим» (Composite Model), который позволяет в одной модели сочетать таблицы, загруженные через импорт, и таблицы, работающие через DirectQuery. Это дало возможность создавать гибридные решения, где часть данных (например, справочники) хранится локально, а часть (например, транзакции) запрашивается в реальном времени.
Поддерживаемые источники данных
DirectQuery поддерживается для широкого спектра реляционных баз данных и аналитических платформ. Наиболее распространённые источники:
- Microsoft SQL Server (включая Azure SQL Database и Azure Synapse Analytics)
- Oracle Database
- Teradata
- SAP HANA
- IBM Db2
- Amazon Redshift
- Google BigQuery
- Snowflake
- PostgreSQL (ограниченная поддержка)
- MySQL (ограниченная поддержка)
- Denodo (виртуализация данных)
Для каждого источника существуют свои ограничения по поддерживаемым функциям DAX и типам соединений.
Преимущества и недостатки
Преимущества
- Актуальность данных в реальном времени: пользователи всегда видят текущее состояние данных, что критично для оперативной отчётности (например, мониторинг продаж, логистика, финансы).
- Отсутствие дублирования данных: не требуется создавать и поддерживать отдельную копию данных в BI-системе, что экономит место в оперативной памяти и упрощает администрирование (нет необходимости настраивать расписание обновлений).
- Работа с большими объёмами данных: DirectQuery позволяет обрабатывать терабайтные базы данных, которые невозможно загрузить в память из-за ограничений по объёму ОЗУ.
- Безопасность на уровне источника: можно использовать встроенные механизмы безопасности базы данных (например, строковую безопасность на уровне строк — Row-Level Security), не дублируя их в модели.
Недостатки
- Зависимость от производительности источника: каждый запрос пользователя выполняется на стороне базы данных, что может приводить к задержкам при слабой производительности сервера БД или высокой нагрузке на сеть.
- Ограничения на функции DAX: не все функции языка DAX доступны в режиме DirectQuery. Например, ограничены возможности работы с временными интеллектами (Time Intelligence), функциями
RANKX,TOPNи некоторыми другими. - Повышенная нагрузка на источник: частые запросы от множества пользователей могут создавать значительную нагрузку на базу данных, что может замедлить её работу для других приложений.
- Сложность оптимизации: для достижения приемлемой производительности требуется глубокая настройка как модели данных (минимизация количества запросов, использование агрегаций), так и самой базы данных (индексы, статистика, оптимизация запросов).
- Ограничения на преобразования данных: в DirectQuery нельзя использовать Power Query для сложных преобразований данных (например, объединение таблиц, добавление столбцов на основе вычислений) — все преобразования должны выполняться на стороне источника (например, через представления или хранимые процедуры).
Применение
DirectQuery наиболее эффективен в следующих сценариях:
- Оперативная отчётность (real-time dashboards) — мониторинг ключевых показателей эффективности (KPI) в режиме реального времени (например, количество заказов, текущая выручка, загрузка производственных линий).
- Работа с очень большими объёмами данных (Big Data) — когда объём данных превышает возможности оперативной памяти сервера BI (например, логи транзакций за несколько лет, данные сенсоров IoT).
- Сценарии с частыми изменениями данных — когда данные обновляются непрерывно (например, биржевые котировки, данные с кассовых аппаратов), и импорт по расписанию не обеспечивает необходимой актуальности.
- Гибридные модели — когда часть данных (например, справочники, исторические данные) импортируется для быстрого доступа, а часть (например, текущие транзакции) запрашивается через DirectQuery.
Критика и ограничения
Несмотря на очевидные преимущества, технология DirectQuery подвергается критике за:
- Сложность настройки и оптимизации: для достижения приемлемой производительности требуется высокая квалификация администратора баз данных и разработчика BI-моделей. Неправильно спроектированная модель может привести к генерации неэффективных SQL-запросов, которые будут выполняться минутами.
- Ограниченная поддержка в некоторых BI-инструментах: не все системы бизнес-аналитики (например, Tableau, Qlik) имеют полноценную поддержку DirectQuery, хотя аналогичные технологии (Live Query, On-Demand) существуют.
- Проблемы с безопасностью: при использовании DirectQuery необходимо тщательно контролировать, какие запросы может генерировать BI-инструмент, чтобы избежать случайного раскрытия конфиденциальных данных (например, через SQL-инъекции или неограниченный доступ к таблицам).
Источники
- Microsoft Docs: «DirectQuery model in Power BI Desktop» (2023)
- Microsoft Docs: «DirectQuery in SQL Server Analysis Services» (2022)
- Книга: «Analyzing Data with Power BI and Power Pivot for Excel» by Alberto Ferrari and Marco Russo (Microsoft Press, 2017)
- Статья: «DirectQuery vs. Import: When to Use Which in Power BI» — SQLBI (2021)
- Документация SAP: «DirectQuery for SAP HANA» (2020)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →