PolyBase
PolyBase — это технология обработки запросов, интегрированная в систему управления базами данных Microsoft SQL Server, которая позволяет выполнять запросы на языке Transact-SQL (T-SQL) к данным, хранящимся во внешних источниках, без необходимости перемещения или копирования этих данных. PolyBase реализует концепцию виртуализации данных, предоставляя единый интерфейс для доступа к реляционным базам данных, нереляционным хранилищам (например, Hadoop, Azure Blob Storage) и файлам различных форматов (CSV, Parquet, ORC). Технология была впервые представлена корпорацией Microsoft в 2015 году как часть платформы аналитики SQL Server 2016 и впоследствии стала доступна в Azure Synapse Analytics (ранее Azure SQL Data Warehouse) и других продуктах Microsoft.
История
Разработка PolyBase началась в рамках проекта «Madison» — исследовательской инициативы Microsoft Research, направленной на интеграцию реляционных баз данных с системами распределённой обработки данных, такими как Apache Hadoop. Основной целью было устранение «разрыва» между транзакционными системами (OLTP) и аналитическими системами (OLAP) путём создания единого движка запросов, способного работать с гетерогенными источниками.
Первая коммерческая версия PolyBase была выпущена в составе SQL Server 2016. Она поддерживала подключение к кластерам Hadoop (HDFS) и хранилищам Azure Blob Storage. В SQL Server 2019 функциональность была значительно расширена: добавлена поддержка внешних таблиц для разнородных источников (Oracle, Teradata, MongoDB, файлы CSV/Parquet), а также возможность записи результатов запросов обратно во внешние источники (INSERT-SELECT). В SQL Server 2022 PolyBase получил поддержку протокола S3 (Amazon S3, MinIO), что позволило подключаться к объектным хранилищам, не принадлежащим экосистеме Microsoft.
В Azure Synapse Analytics PolyBase является ключевым компонентом для загрузки и выгрузки данных, обеспечивая параллельную передачу данных между выделенным пулом SQL (ранее SQL Data Warehouse) и внешними системами.
Архитектура и принцип работы
PolyBase функционирует как распределённый движок запросов, который разбивает задачу на две основные стадии: планирование и выполнение.
Компоненты
- PolyBase Engine — серверный компонент, встроенный в ядро SQL Server. Он отвечает за оптимизацию запросов, генерацию планов выполнения и координацию работы с внешними источниками.
- PolyBase Data Movement Service (DMS) — служба перемещения данных, которая обеспечивает параллельную передачу данных между SQL Server и внешними хранилищами. DMS использует протоколы, специфичные для каждого источника (например, WebHDFS для Hadoop, REST API для Azure Blob).
- Внешние источники данных — объекты SQL Server, определяющие параметры подключения (тип источника, адрес, учётные данные). Поддерживаются следующие типы:
- Hadoop (HDFS)
- Azure Blob Storage
- Azure Data Lake Storage Gen2
- SQL Server (удалённые экземпляры)
- Oracle, Teradata, MongoDB
- Файлы в форматах CSV, Parquet, ORC (через локальную файловую систему или облачные хранилища)
- S3-совместимые объектные хранилища (с SQL Server 2022)
Процесс выполнения запроса
- Пользователь пишет запрос T-SQL, который обращается к внешней таблице (например,
SELECT * FROM [Ext].[SalesData]). - PolyBase Engine анализирует запрос и определяет, какие части могут быть переданы для выполнения на стороне внешнего источника (pushdown), а какие должны быть обработаны локально.
- Для источников, поддерживающих pushdown (например, Oracle, Teradata), PolyBase отправляет подзапросы непосредственно в эти системы, минимизируя объём передаваемых данных.
- Для источников, не поддерживающих pushdown (например, CSV-файлы), PolyBase загружает данные целиком через DMS и выполняет фильтрацию, агрегацию и соединения на стороне SQL Server.
- Результаты объединяются и возвращаются клиенту.
Примеры использования
- Гибридные запросы — объединение данных из локальной базы SQL Server и внешнего хранилища в одном запросе:
``sql SELECT c.CustomerID, o.OrderDate FROM Sales.Customers AS c JOIN [Ext].[Orders] AS o ON c.CustomerID = o.CustomerID; ``
- Загрузка данных — импорт данных из внешнего источника в локальную таблицу:
``sql CREATE TABLE LocalSales AS SELECT * FROM [Ext].[SalesData]; ``
- Выгрузка данных — запись результатов запроса во внешнее хранилище:
``sql INSERT INTO [Ext].[ExportedData] SELECT * FROM Sales.Orders; ``
Классификация и виды
PolyBase можно классифицировать по способу развёртывания и по типу поддерживаемых источников.
По способу развёртывания
- Локальный PolyBase (SQL Server) — устанавливается как опция в составе SQL Server 2016 и более поздних версий. Требует настройки кластера PolyBase (Scale-Out) для параллельной обработки.
- Облачный PolyBase (Azure Synapse Analytics) — встроенный компонент Azure Synapse, оптимизированный для работы с облачными хранилищами (Azure Blob, Data Lake). Не требует отдельной установки.
По типу внешних источников
- Реляционные источники — Oracle, Teradata, SQL Server (удалённые экземпляры).
- Нереляционные источники — Hadoop (HDFS), MongoDB.
- Файловые источники — CSV, Parquet, ORC, JSON (через внешние таблицы).
- Объектные хранилища — Azure Blob Storage, Amazon S3, MinIO.
Применение
PolyBase используется в сценариях, где требуется объединение данных из разрозненных систем без создания сложных ETL-процессов.
Основные сценарии
- Аналитика в реальном времени — аналитики могут выполнять запросы к данным в Hadoop или облачных хранилищах, не перемещая их в SQL Server.
- Архивирование и tiered storage — старые данные могут храниться в дешёвых облачных хранилищах, а доступ к ним осуществляется через PolyBase без потери функциональности.
- Миграция данных — перенос данных из устаревших систем (Oracle, Teradata) в SQL Server или Azure Synapse с минимальным простоем.
- Data Lakehouse — PolyBase выступает в роли моста между реляционным миром SQL Server и неструктурированными данными в Data Lake (Parquet, ORC).
Примеры в промышленности
- Розничная торговля — сеть магазинов использует PolyBase для объединения данных о продажах из локальной базы SQL Server с данными о поведении пользователей из Hadoop-кластера.
- Финансы — банк загружает исторические транзакции из Oracle в Azure Synapse через PolyBase для построения отчётов по рискам.
- Логистика — компания хранит логи доставки в Parquet-файлах на Azure Data Lake, а PolyBase позволяет аналитикам выполнять ad-hoc запросы без предварительной загрузки.
Ограничения и критика
Несмотря на преимущества, PolyBase имеет ряд ограничений, которые критикуются специалистами.
- Производительность — для источников без поддержки pushdown (например, CSV-файлы) PolyBase загружает все данные в SQL Server, что может привести к узким местам при больших объёмах. Скорость передачи данных через DMS может быть ниже, чем у специализированных ETL-инструментов (например, Azure Data Factory).
- Поддержка типов данных — не все типы данных внешних источников корректно отображаются на типы SQL Server. Например, поддержка вложенных структур JSON ограничена.
- Сложность настройки — для работы с Hadoop требуется установка и настройка PolyBase Scale-Out кластера, что усложняет развёртывание. В Azure Synapse настройка проще, но требует понимания архитектуры облачных хранилищ.
- Ограничения по источникам — в SQL Server 2019 PolyBase не поддерживает подключение к MySQL, PostgreSQL или MariaDB напрямую. Для этих СУБД требуется использовать сторонние коннекторы или ODBC.
- Безопасность — передача данных между системами может потребовать настройки шифрования и аутентификации (Kerberos для Hadoop, SAS-ключи для Azure). Ошибки в конфигурации могут привести к утечкам данных.
Сравнение с аналогами
PolyBase конкурирует с другими технологиями виртуализации данных:
- Linked Servers (SQL Server) — более старая технология, поддерживающая подключение к удалённым базам данных через OLE DB или ODBC. В отличие от PolyBase, Linked Servers не оптимизированы для параллельной обработки больших объёмов данных и не поддерживают нереляционные источники (Hadoop, Parquet).
- Apache Presto / Trino — распределённые движки запросов с открытым исходным кодом, поддерживающие широкий спектр источников (Hive, Kafka, Elasticsearch). Presto/Trino могут быть более гибкими, но требуют отдельной инфраструктуры и настройки.
- Azure Data Factory — облачный сервис для оркестрации ETL-процессов. Data Factory обеспечивает более широкие возможности трансформации данных, но не позволяет выполнять запросы в реальном времени, как PolyBase.
Развитие и будущее
Microsoft продолжает развивать PolyBase в рамках стратегии «гибридного облака» и Azure Arc. В SQL Server 2022 добавлена поддержка S3-совместимых хранилищ, что расширяет возможности для работы с открытыми форматами данных. В Azure Synapse PolyBase интегрируется с Apache Spark, позволяя выполнять запросы как на T-SQL, так и на Python/Scala.
Ожидается, что в будущих версиях PolyBase будет поддерживать больше источников (например, ClickHouse, Snowflake) и улучшит производительность за счёт использования векторной обработки и колоночных индексов.
Источники
- Microsoft Docs: PolyBase Guide (SQL Server 2016–2022)
- Microsoft Research: Project Madison — PolyBase Technical Overview
- Azure Synapse Analytics Documentation: PolyBase Data Loading
- SQL Server 2019 PolyBase Performance Tuning Guide (Microsoft)
- Comparison of Virtual Data Federation Technologies (Gartner, 2021)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →