Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Относится к: SQL Server 2016 (13.x) и более поздние версии
База данных SQL Azure
Управляемый экземпляр SQL Azure
SQL Database в Microsoft Fabric
Виртуализация данных позволяет выполнять запросы Transact-SQL (T-SQL) по внешним данным, не загружая их в базу данных. Вы определяете внешний источник данных, необязательный формат файла и внешнюю таблицу, а затем запрашиваете внешнюю таблицу, SELECT как и любую другую таблицу.
Это руководство поможет вам:
- Узнайте, какие функции PolyBase поддерживаются вашей платформой SQL и версией.
- Выберите между
OPENROWSET, внешними таблицами илиBULK INSERTдля обработки или приема данных. - Следуйте пошаговым инструкциям для распространенных задач.
- Ознакомьтесь с рекомендациями по повышению производительности, устранению неполадок и рекомендациям для рабочих нагрузок.
Поддержка платформы
- PolyBase — это функция Microsoft SQL ядро СУБД, реализующая виртуализацию данных.
- PolyBase поддерживается в SQL Server 2016 и более поздних версиях на Windows, а также в SQL Server 2019 и более поздних версиях на Linux.
- PolyBase не поддерживается в SQL Server 2017 на Linux.
- PolyBase не поддерживается в База данных SQL Azure, но База данных SQL Azure предоставляет схожие возможности виртуализации данных через
OPENROWSETи внешние таблицы. Дополнительные сведения см. в статье о виртуализации данных с помощью базы данных SQL Azure (предварительная версия). - PolyBase не является функцией Управляемый экземпляр SQL Azure по названию, но Управляемый экземпляр SQL Azure имеет функции виртуализации данных, которые работают аналогично. Для получения дополнительной информации см. виртуализация данных с Управляемый экземпляр SQL Azure.
- PolyBase не поддерживается в базе данных SQL в Fabric, но база данных SQL в Fabric предоставляет собственные возможности виртуализации данных для данных в OneLake. Для получения дополнительной информации см. Виртуализация данных в базе данных SQL в Fabric.
- PolyBase не является функцией в Fabric Data Warehouse. Для виртуализации данных в Fabric Data Warehouse рассмотрите Fabric OneLake Shortcuts. Для статей о загрузке данных в Fabric Data Warehouse см. разделы Data Engestion with T-SQL и Dimensional modeling: Load tables.
Распространенные варианты использования
В следующей таблице описаны возможные сценарии использования.
| Сценарий | Использование |
|---|---|
| Спонтанное исследование файлов | OPENROWSET(BULK ...) |
| Многократный запрос к файлам для BI или отчетов | Внешние таблицы по файлам |
| Межбазовый запрос (SQL Server, Oracle, Teradata, MongoDB, ODBC) | Соединители PolyBase с внешними таблицами |
| Экспорт результатов запроса в файлы |
CREATE EXTERNAL TABLE AS SELECT (CETAS) |
| Массовый прием в таблицы |
BULK INSERT или OPENROWSET(BULK ...) с INSERT ... SELECT |
- Для случайного исследования файлов используйте
OPENROWSET(BULK ...)для проверки файлов без создания повторно используемой таблицы. - Для повторного запроса файлов в BI или в сценариях отчётности используйте внешние таблицы поверх файлов для сохранения схемы и обмена результатами между запросами.
- Для выполнения межбазовых запросов используйте соединители PolyBase вместе с внешними таблицами для доступа к источникам SQL Server, Oracle, Teradata, MongoDB или ODBC.
- Для экспорта результатов запросов в файлы используйте
CREATE EXTERNAL TABLE AS SELECT(CETAS), чтобы записывать выходные данные в формате Parquet или CSV за пределами базы данных. - Для массовой загрузки в таблицы используйте
BULK INSERTилиOPENROWSET(BULK ...)с помощьюINSERT ... SELECTдля загрузки данных из файлов в таблицы базы данных.
Какие функции доступны где?
В следующей таблице показано, какие основные функции виртуализации PolyBase и данных доступны на каждой платформе SQL, начиная с SQL Server 2019. Для доступности функций в SQL Server 2016 и SQL Server 2017 на Windows см. Функции и ограничения PolyBase. Используйте эту таблицу, чтобы определить, что можно сделать на платформе, прежде чем использовать подробные руководства.
| Функция | SQL Server 2019 г. | SQL Server 2022 | SQL Server 2025 г. | База данных SQL Azure | Управляемый экземпляр SQL Azure | База данных SQL в Microsoft Fabric |
|---|---|---|---|---|---|---|
| внешние таблицы | Да | Да | Да | Да | Да | Да |
| OPENROWSET (BULK) | Да 1 | Да | Да | Да | Да | Да |
| CETAS (экспорт) | Нет | Да | Да | Нет | Да | Нет |
| CSV или файлы с разделителями | Да 2 | Да | Да | Да | Да | Да |
| Файлы Parquet | Нет | Да | Да | Да | Да | Да |
| Таблицы Delta Lake | Нет | Да | Да | Нет | Нет | Нет |
| Подключение к другому SQL Server | Да | Да | Да | Нет | Нет | Нет |
| Подключение к Базе данных SQL Azure или Управляемому экземпляру SQL Azure | Да 3 | Да 3 | Да 3 | Нет | Нет | Нет |
| Подключение к Oracle / Teradata / MongoDB | Да | Да | Да | Нет | Нет | Нет |
| Подключение к хранилищу BLOB-объектов Azure | Да | Да | Да | Да | Да | Нет |
| Подключение к ADLS 2-го поколения | Да 5 | Да | Да | Да | Да | Нет |
| Подключение к хранилищу, совместимое с S3 | Нет | Да | Да | Нет | Нет | Нет |
| Подключение к OneLake (Fabric) | Нет | Нет | Нет | Нет | Нет | Да |
| Выталкивающее вычисление | Да | Да | Да | Нет | Нет | Нет |
| Аутентификация управляемой идентификации | Нет | Нет | Да 4 | Да | Да | Нет |
1 SQL Server 2019 (15.x) поддерживает OPENROWSET(BULK...) локальные и сетевые пути к файлам. В SQL Server 2022 (16.x) и более поздних версиях OPENROWSET(BULK...) также поддерживает чтение из облачного хранилища с помощью FORMAT = 'PARQUET', FORMAT = DELTA и FORMAT = 'CSV'.
2 версия поддержки CSV в SQL Server 2019 (15.x) требует Hadoop. В SQL Server 2022 (16.x) и более поздних версиях CSV-файл изначально поддерживается без Hadoop.
3 Использует соединитель SQL Server (sqlserver://). Учетные данные уровня базы данных предназначены для конечной точки SQL. Используйте те же шаги, что и при подключении к другому экземпляру SQL Server.
Поддерживается аутентификация с управляемым удостоверением для подключения к хранилищу BLOB-объектов Azure (ABS) и ADLS уровня 2. Для этого требуется SQL Server с поддержкой Azure Arc или SQL Server на виртуальной машине Azure для локального SQL Server. Она изначально доступна в База данных SQL Azure и Управляемый экземпляр SQL Azure.
5 SQL Server 2019 CU11 и более поздние версии поддерживают Azure Data Lake Storage 2-го поколения с префиксом abfs ORabfss. В SQL Server 2022 и более поздних версиях используйте префиксadls.
- Внешние таблицы поддерживаются в SQL Server 2019, SQL Server 2022, SQL Server 2025, База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Database в Microsoft Fabric.
-
OPENROWSET (BULK)поддерживается в SQL Server 2019, SQL Server 2022, SQL Server 2025, База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Database в Microsoft Fabric. SQL Server 2019 поддерживает локальные и сетевые файловые пути, а SQL Server 2022 и более поздние версии также поддерживают чтение облачного хранилища сFORMAT = 'PARQUET',FORMAT = DELTA, иFORMAT = 'CSV'. - Экспорт CETAS не поддерживается в SQL Server 2019, База данных SQL Azure или SQL Database в Microsoft Fabric. Экспорт CETAS поддерживается в SQL Server 2022, SQL Server 2025 и Управляемый экземпляр SQL Azure.
- CSV и разделённые файлы поддерживаются в SQL Server 2019, SQL Server 2022, SQL Server 2025, База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Database в Microsoft Fabric. SQL Server 2019 требует Hadoop для поддержки CSV, тогда как SQL Server 2022 и более поздние версии поддерживают CSV нативно без Hadoop.
- Файлы Parquet не поддерживаются в SQL Server 2019. Файлы Parquet поддерживаются в SQL Server 2022, SQL Server 2025, База данных SQL Azure, Управляемый экземпляр SQL Azure и базе данных SQL в Microsoft Fabric.
- Таблицы Delta Lake не поддерживаются в SQL Server 2019, База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database в Microsoft Fabric. Таблицы Delta Lake поддерживаются в SQL Server 2022 и SQL Server 2025.
- Подключение к другому экземпляру SQL Server поддерживается в SQL Server 2019, SQL Server 2022 и SQL Server 2025. Подключение к другому экземпляру SQL Server не поддерживается в База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database в Microsoft Fabric.
- Подключение к База данных SQL Azure или Управляемый экземпляр SQL Azure поддерживается в SQL Server 2019, SQL Server 2022 и SQL Server 2025 с помощью соединителя SQL Server. Учетные данные уровня базы данных предназначены для конечной точки База данных SQL Azure или Управляемый экземпляр SQL Azure, а шаги настройки такие же, как при подключении к другому экземпляру SQL Server. Эти соединения не поддерживаются в База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database в Microsoft Fabric.
- Подключение к Oracle, Teradata или MongoDB поддерживается в SQL Server 2019, SQL Server 2022 и SQL Server 2025. Эти соединения не поддерживаются в База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database в Microsoft Fabric.
- Подключение к Хранилище BLOB-объектов Azure поддерживается в SQL Server 2019, SQL Server 2022, SQL Server 2025, База данных SQL Azure и Управляемый экземпляр SQL Azure. Подключение к Хранилище BLOB-объектов Azure не поддерживается из базы данных SQL в Microsoft Fabric.
- Подключение к ADLS Gen2 не поддерживается в релизах SQL Server 2019 до CU11 или из базы данных SQL в Microsoft Fabric. Подключение к ADLS Gen2 поддерживается начиная с SQL Server 2019 CU11, а также в SQL Server 2022, SQL Server 2025, База данных SQL Azure и Управляемый экземпляр SQL Azure.
- Подключение к S3-совместимому хранилищу не поддерживается в SQL Server 2019, База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database в Microsoft Fabric. Подключение к S3-совместимому хранилищу поддерживается в SQL Server 2022 и SQL Server 2025.
- Подключение к OneLake поддерживается из базы данных SQL в Microsoft Fabric. Подключение к OneLake не поддерживается в SQL Server 2019, SQL Server 2022, SQL Server 2025, База данных SQL Azure или Управляемый экземпляр SQL Azure.
- Вычисления pushdown поддерживаются в SQL Server 2019, SQL Server 2022 и SQL Server 2025. Вычисления pushdown не поддерживаются в База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database в Microsoft Fabric.
- Управляемая аутентификация идентичности не поддерживается в SQL Server 2019 и SQL Server 2022. Аутентификация управляемой идентичности поддерживается в SQL Server 2025 для подключения к Хранилище BLOB-объектов Azure и ADLS Gen2, а также требует SQL Server с поддержкой Azure Arc или SQL Server на виртуальной машине Azure. Управляемая аутентификация идентичности также поддерживается в База данных SQL Azure и Управляемый экземпляр SQL Azure, но не поддерживается в базе данных SQL в Microsoft Fabric.
Замечание
Начиная с SQL Server 2025 (17.x), запросы к файлам данных (CSV, Parquet и Delta) в хранилище Хранилище BLOB-объектов Azure, ADLS Gen2 или S3-совместимом хранилище являются собственной функцией движка и больше не требуют установки или запуска служб PolyBase. Соединители RDBMS (SQL Server, Oracle, Teradata, MongoDB, ODBC) по-прежнему требуют установки и запуска служб PolyBase. SQL Server 2025 (17.x) также добавляет поддержку Linux для этих соединителей, которые ранее были доступны только в Windows.
Запрос внешних данных
Прежде чем выбрать конкретный сценарий, ознакомьтесь с тремя способами запроса внешних данных:
| Подход | Синтаксис | Используйте, когда | Аутентификация | Требуется установка PolyBase |
|---|---|---|---|---|
| Нерегламентированные запросы OLE DB | OPENROWSET(provider, connection, query) |
Требуется быстрый однократный запрос без постоянных объектов или проверка подлинности идентификатора Microsoft Entra | Проверка подлинности SQL, проверка подлинности Windows, Microsoft Entra ID (MSOLEDBSQL) | Нет |
| Специальные запросы к файлам | OPENROWSET(BULK ...) |
Перед созданием таблицы необходимо быстро изучить данные файлов или проверить схемы. | Маркер SAS, ключ доступа, управляемое удостоверение, идентификатор Microsoft Entra | SQL Server 2022: Да 1 SQL Server 2025 и более поздние версии: Нет База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Database in Fabric: Встроенное |
| Соединители постоянных данных |
CREATE EXTERNAL TABLE с sqlserver://, oracle://и teradata://т. д. |
Для производственной среды требуется регулярный доступ, управление, статистика и pushdown вычисления. | Только аутентификация SQL | Да |
1 Для доступа к облачным файлам в SQL Server 2022 (16.x) необходимо установить компонент PolyBase, но соединители для Хранилище BLOB-объектов Azure, ADLS Gen2 и S3-совместимого хранилища не зависят от служб PolyBase. SQL Server 2025 (17.x) и более поздние версии поддерживают нативную поддержку CSV, Parquet и Delta без установки или запуска сервисов PolyBase.
- Ad hoc запросы OLE DB используются
OPENROWSET(provider, connection, query)для быстрого однократного доступа к удалёному источнику данных без создания постоянных объектов. Они могут использовать SQL-аутентификацию, проверка подлинности Windows или Microsoft Entra ID с MSOLEDBSQL. В этом случае не требуется установка PolyBase. - Специальные запросы к файлам позволяют использовать
OPENROWSET(BULK ...), чтобы быстро анализировать данные в файлах или проверить схему перед созданием таблицы. Они могут использовать токены SAS, ключи доступа, управляемую идентичность или Microsoft Entra ID. SQL Server 2022 требует установки функций PolyBase для облачных файлов, но не требует сервисов PolyBase. SQL Server 2025 и более поздние версии не требуют PolyBase для облачных файлов. Специальные запросы к файлам встроены в База данных SQL Azure, Управляемый экземпляр SQL Azure и базу данных SQL в Fabric. - Постоянные коннекторы данных используют
CREATE EXTERNAL TABLEсsqlserver://,oracle://,teradata://и аналогичными расположениями для регулярного доступа, управления данными, статистики и pushdown-вычислений в продуктивных рабочих нагрузках. Они требуют SQL-аутентификации и сервисов PolyBase.
Рекомендации по принятию решений
| Сценарий | Recommendation |
|---|---|
| Вам нужна аутентификация Microsoft Entra ID для удалённого SQL-подключения или вы хотите избежать использования сервисов PolyBase. | Используйте OPENROWSET(MSOLEDBSQL, ...) (ad hoc, без постоянных объектов). |
| Вам нужны постоянные таблицы, статистика или вычисления в удалённых базах данных. | Используйте CREATE EXTERNAL TABLE с соединителями PolyBase (sqlserver://, oracle://, teradata://, mongodb://, odbc://).
OPENROWSET Не поддерживает разъёмы. |
| Вы исследуете новый файл или тестируете схему. | Используйте OPENROWSET(BULK ...) (быстрая итерация, без постоянных объектов). |
| Вы вводите данные файлов в таблицу с трансформациями. | Используйте INSERT ... SELECT из OPENROWSET(BULK ...). |
| Для многих пользователей или приложений нужна система управления или общий доступ. | Используйте CREATE EXTERNAL TABLE так, чтобы права и метаданные были централизованы. |
| Вы работаете с SQL базами данных в Fabric. | Используйте OPENROWSET(BULK ...) для разовых запросов к OneLake или внешние таблицы для повторного использования; для внешнего хранилища используйте ярлыки OneLake. |
- Если вам нужна аутентификация Microsoft Entra ID для удалённого SQL или вы хотите избежать сервисов PolyBase, используйте
OPENROWSET(MSOLEDBSQL, ...)для ad hoc удалённых запросов без постоянных объектов. - Если вам нужны постоянные таблицы, статистика или вычисление с переносом обработки в удалённые базы данных, используйте
CREATE EXTERNAL TABLEс коннекторами PolyBase, такими какsqlserver://,oracle://,mongodb://,teradata://иodbc://.OPENROWSETне поддерживает эти разъёмы. - Если вы работаете с новым файлом или тестируете схему, используйте
OPENROWSET(BULK ...)для быстрой итерации без создания постоянных объектов. - Если вы вводите данные файлов в таблицу с преобразованиями, используйте
INSERT ... SELECTизOPENROWSET(BULK ...). - Если вам нужен управление или общий доступ для многих пользователей или приложений, используйте
CREATE EXTERNAL TABLEтак, чтобы права и метаданные были централизованы. - Если вы работаете с базой данных SQL в Fabric, используйте
OPENROWSET(BULK ...)для специальных запросов OneLake или внешние таблицы для повторного использования, а для доступа к внешнему хранилищу — ярлыки OneLake.
Выбор сценария
Теперь, когда вы понимаете три подхода, используйте одно из следующих руководств для реализации конкретного варианта использования.
Файлы запросов (Parquet, CSV или Delta)
Если ваши данные находятся в файлах Parquet, CSV или Delta в объектах Хранилище BLOB-объектов Azure, ADLS 2-го поколения, хранилище, совместимое с S3 или OneLake, следуйте одному из этих руководств.
| Сценарий | Рекомендуемое руководство | Платформы |
|---|---|---|
| Быстрый запрос по мере необходимости к файлу Parquet или CSV | Используйте OPENROWSET. Внешняя таблица не требуется |
SQL Server 2022 (16.x) и более поздние версии, База данных SQL Azure, Управляемый экземпляр SQL Azure, база данных SQL в Fabric |
| Повторяющиеся запросы к файлам Parquet с постоянной схемой | Создание внешней таблицы на основе Parquet | SQL Server 2022 (16.x) и более поздние версии, База данных SQL Azure, Управляемый экземпляр SQL Azure, база данных SQL в Fabric |
| Запрос CSV-файлов с внешней таблицей | Создание внешней таблицы с форматом файла для текста, разделённого разделителями | SQL Server 2019 (15.x) и более поздние версии, База данных SQL Azure, Управляемый экземпляр SQL Azure, база данных SQL в Fabric |
| Запросы к таблицам Delta Lake | Создание внешней таблицы с помощью FILE_FORMAT = DeltaLakeFileFormat |
SQL Server 2022 (16.x) и более поздних версий |
| Экспорт результатов запроса в файлы Parquet или CSV (CETAS) | Используйте CREATE EXTERNAL TABLE AS SELECT |
SQL Server 2022 (16.x) и более поздних версий, Управляемый экземпляр SQL Azure |
- Для быстрого случайного запроса к файлу Parquet или CSV используйте
OPENROWSET. Для этого метода не требуется внешней таблицы. SQL Server 2022 (16.x) и более поздние версии, База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Database in Fabric поддерживают этот шаблон. - Для повторяющихся запросов к файлам Parquet с постоянной схемой используйте внешнюю таблицу вместо Parquet. SQL Server 2022 (16.x) и более поздние версии, База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Database in Fabric поддерживают этот шаблон.
- Для запроса к CSV-файлам используйте внешнюю таблицу с форматом файла для разделённого текста. SQL Server 2019 (15.x) и более поздние версии, Azure SQL SQL Database, Управляемый экземпляр SQL Azure и SQL Database in Fabric поддерживают этот шаблон.
- Для запроса к таблицам Delta Lake используйте внешнюю таблицу с
FILE_FORMAT = DeltaLakeFileFormat. SQL Server 2022 (16.x) и более поздние версии поддерживают этот шаблон. - Для экспорта результатов запросов в файлы Parquet или CSV используйте
CREATE EXTERNAL TABLE AS SELECT. SQL Server 2022 (16.x) и более поздние версии, а также Azure SQL SQL Managed Instance поддерживают этот шаблон.
Вы также можете выполнить одно из следующих пошаговых руководств.
| Руководство | Описание |
|---|---|
| Начало работы с PolyBase в SQL Server 2022 | Охватывает OPENROWSET с помощью Parquet и CSV, внешние таблицы и навигацию по папкам. |
| Виртуализация файла Parquet в объектном хранилище, совместимом с S3, с помощью PolyBase | Руководство по SQL Server 2022 (16.x) и более поздних версий. |
| Виртуализация CSV-файла с помощью PolyBase | Руководство по SQL Server 2022 (16.x) и более поздних версий. |
| Виртуализация разностной таблицы с помощью PolyBase | Руководство по SQL Server 2022 (16.x) и более поздних версий. |
| Виртуализация данных с помощью базы данных SQL Azure (предварительная версия) | Руководство по базе данных SQL Azure для Parquet и CSV. |
| Виртуализация данных с помощью управляемого экземпляра Azure SQL | Руководство по Управляемому экземпляру SQL Azure для Parquet, CSV и CETAS. |
| Виртуализация данных в базе данных SQL в Fabric | Руководство по базе данных SQL в Fabric для файлов OneLake. |
Подключение к другому экземпляру SQL Server, Базе данных SQL Azure или Управляемому экземпляру SQL
В SQL Server 2019 (15.x) и более поздних версиях PolyBase может запрашивать таблицы в другом экземпляре SQL Server, Базе данных SQL Azure или Управляемом экземпляре SQL Azure без использования связанных серверов.
Это важно
Соединитель sqlserver:// не поддерживается в базе данных SQL в Fabric. Соединители RDBMS PolyBase используют проверку подлинности SQL через CREATE DATABASE SCOPED CREDENTIAL и не поддерживают идентификацию Microsoft Entra, управляемое удостоверение или учетную запись службы. Так как для базы данных SQL в Fabric требуется проверка подлинности Microsoft Entra, вы не можете подключиться к ней с помощью PolyBase.
| Step | Что делать |
|---|---|
| 1. Установка PolyBase | Установка PolyBase в Windows или установка PolyBase в Linux |
| Создайте учетные данные |
CREATE DATABASE SCOPED CREDENTIAL с целевым логином |
| 3. Создание внешнего источника данных | CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>') |
| 4. Создание внешней таблицы | CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') |
| 5. Запрос | SELECT * FROM <external_table> |
-
- Установите PolyBase на Windows или Linux с помощью Install PolyBase на Windows или Install PolyBase на Linux до настройки доступа к внешним данным SQL.
-
- Создайте учетные данные области базы данных с целевым именем входа, используя
CREATE DATABASE SCOPED CREDENTIAL, чтобы ядро СУБД могло проходить проверку подлинности на удаленном сервере.
- Создайте учетные данные области базы данных с целевым именем входа, используя
-
- Создайте внешний источник данных для удалённого SQL Server, используя
CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
- Создайте внешний источник данных для удалённого SQL Server, используя
-
- Создайте внешнюю таблицу, используя
CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')для представления удалённой таблицы.
- Создайте внешнюю таблицу, используя
-
- Запросите внешнюю таблицу, используя
SELECT * FROM <external_table>.
- Запросите внешнюю таблицу, используя
Подсказка
Коннектор SQL Server также sqlserver:// работает для База данных SQL Azure и Управляемый экземпляр SQL Azure. Используйте те же шаги и установите LOCATION на База данных SQL Azure или Управляемый экземпляр SQL Azure endpoint (например, sqlserver://myserver.database.windows.net).
Подробное руководство см. в разделе "Настройка PolyBase для доступа к внешним данным в SQL Server".
Подключение к Oracle, Teradata или MongoDB
SQL Server 2019 (15.x) и более поздние версии могут выполнять запросы к базам данных Oracle, Teradata, MongoDB и Cosmos DB через коннекторы PolyBase ODBC.
| Источник данных | Guide | Требования |
|---|---|---|
| Oracle | Настройка PolyBase для доступа к внешним данным в Oracle | SQL Server 2019 (15.x) и более поздних версий, клиентские драйверы Oracle |
| Teradata | Настройка PolyBase для доступа к внешним данным в Teradata | SQL Server 2019 (15.x) и более поздних версий, драйвер ODBC Teradata |
| MongoDB / Cosmos DB | Настройка PolyBase для доступа к внешним данным в MongoDB | SQL Server 2019 (15.x) и более поздних версий, драйвер ODBC MongoDB |
| Любой источник ODBC | Настройка PolyBase для доступа к внешним данным с помощью универсальных типов ODBC | SQL Server 2019 (15.x) и более поздние версии (Windows) (Linux, начиная с SQL Server 2025 (17.x)) |
- Источники данных Oracle используют Configure PolyBase для доступа к внешним данным в руководстве Oracle и требуют версий SQL Server 2019 (15.x) и более поздних версий, а также драйверов клиента Oracle.
- Источники данных Teradata используют Configure PolyBase для доступа к внешним данным в руководстве Teradata и требуют SQL Server 2019 (15.x) и более поздние версии, а также драйвера Teradata ODBC.
- Источники данных MongoDB или Cosmos DB используют Configure PolyBase для доступа к внешним данным в руководстве MongoDB и требуют версий SQL Server 2019 (15.x) и более поздних версий, а также драйвера MongoDB ODBC.
- Любой источник ODBC может использовать Configure PolyBase для доступа к внешним данным с помощью руководства по общим типам ODBC, что требует SQL Server 2019 (15.x) и более поздних версий на Windows или SQL Server 2025 (17.x) и более поздние версии на Linux.
Подключитесь к хранилищу Blob Azure или ADLS Gen2
| Платформа SQL | Варианты проверки подлинности | Guide |
|---|---|---|
| SQL Server 2022 (16.x) и более поздних версий | Маркер SAS, ключ доступа, Управляемое удостоверение (начиная с SQL Server 2025 (17.x)) | Настройка PolyBase для доступа к внешним данным в хранилище BLOB-объектов Azure |
| SQL Server 2019 (15.x) | Ключ доступа (через соединитель Hadoop) | Настройка PolyBase для доступа к внешним данным в хранилище BLOB-объектов Azure |
| База данных SQL Azure | Маркер SAS, управляемая идентификация, переадресация Microsoft Entra | Виртуализация данных с помощью базы данных SQL Azure (предварительная версия) |
| Управляемый экземпляр SQL Azure | Токен SAS, управляемое удостоверение | Виртуализация данных с помощью управляемого экземпляра Azure SQL |
- SQL Server 2022 и более поздние версии поддерживают аутентификацию Хранилище BLOB-объектов Azure или ADLS Gen2 с использованием токенов SAS, ключей доступа или управляемой идентичности, начиная с SQL Server 2025 (17.x). Дополнительные сведения см. в статье "Настройка PolyBase для доступа к внешним данным в хранилище BLOB-объектов Azure".
- SQL Server 2019 поддерживает Хранилище BLOB-объектов Azure или ADLS Gen2 с помощью ключа доступа через коннектор Hadoop. Дополнительные сведения см. в статье "Настройка PolyBase для доступа к внешним данным в хранилище BLOB-объектов Azure".
- База данных SQL Azure поддерживает Хранилище BLOB-объектов Azure или ADLS Gen2, используя SAS-токены, управляемую идентичность или проходную аутентификацию Microsoft Entra. Дополнительные сведения см. в статье о виртуализации данных с помощью базы данных SQL Azure (предварительная версия).
- Управляемый экземпляр SQL Azure поддерживает Хранилище BLOB-объектов Azure или ADLS Gen2 с использованием токенов SAS или управляемого удостоверения. Для получения дополнительной информации см. виртуализация данных с Управляемый экземпляр SQL Azure.
В SQL Server 2022 (16.x) префиксы URI изменились. При миграции с SQL Server 2019 (15.x) или более ранних версий:
-
Хранилище Blob Azure: изменить
wasb[s]://наabs:// -
ADLS 2-го поколения: переход
abfs[s]://наadls://
Дополнительные сведения см. в статье "Настройка PolyBase для доступа к внешним данным в хранилище BLOB-объектов Azure".
Подключение к хранилищу объектов, совместимое с S3
SQL Server 2022 (16.x) и более поздних версий поддерживают хранилище, совместимое с S3, например Amazon S3, MinIO и Ceph.
Дополнительные сведения см. в статье Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов.
Экспорт данных с помощью CREATE EXTERNAL TABLE AS SELECT CETAS
CETAS экспортирует результаты запросов во внешние файлы (Parquet или CSV) в хранилище BLOB-объектов Azure, ADLS 2-го поколения или в хранилище, совместимом с S3.
| Платформа SQL | Поддерживается | Форматы экспорта | Примечания |
|---|---|---|---|
| SQL Server 2022 (16.x) и более поздние версии. Экспорт в ADLS Gen2 с CETAS требует версии SQL Server 2022 CU5 или более поздней. | Да | Parquet, CSV | Требуется конфигурация сервера: разрешить экспорт polybase. |
| Управляемый экземпляр SQL Azure | Да | Parquet, CSV | Отключен по умолчанию |
| База данных SQL Azure | Нет | Нет | Недоступно |
| База данных SQL в Fabric | Нет | Нет | Недоступно |
- SQL Server 2022 и более поздние версии поддерживают CETAS и экспортируют файлы Parquet и CSV. Параметр Конфигурация сервера: разрешить экспорт PolyBase обязателен. Экспорт CETAS в ADLS Gen2 недоступен в релизах SQL Server 2022 до CU5.
- Управляемый экземпляр SQL Azure поддерживает CETAS и экспортирует файлы Parquet и CSV. Руководство «Отключено по умолчанию» описывает его состояние по умолчанию.
- База данных SQL Azure не поддерживает CETAS.
- SQL-база данных в Fabric не поддерживает CETAS.
Справочник по Transact-SQL см. в разделе CREATE EXTERNAL TABLE AS SELECT (CETAS).
Примеры быстрого запуска
Пример 1. Разовый запрос к файлу Parquet (OPENROWSET)
Внешняя таблица не требуется. Работает над SQL Server 2022 (16.x) и более поздними версиями, Базой данных SQL Azure, Управляемым экземпляром SQL Azure и базой данных SQL в Fabric.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
FORMAT = 'PARQUET'
) AS [result];
Пример 2: Внешняя таблица для CSV в Blob-хранилище Azure
Этот пример работает на всех SQL-платформах, поддерживающих внешние таблицы поверх CSV-файлов.
Шаг 1. Создание главного ключа базы данных (DMK). Этот шаг необходим, так как учетные данные хранят секрет маркера SAS. Однако этот шаг можно пропустить, если вы используете Managed Identity или аутентификацию Microsoft Entra.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';Шаг 2: Создайте аутентификационные данные с помощью токена SAS. Опустить ведущий
?.CREATE DATABASE SCOPED CREDENTIAL MyStorageCred WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<your_SAS_token>'; -- omit the leading '?'Шаг 3. Создание внешнего источника данных.
CREATE EXTERNAL DATA SOURCE MyAzureStorage WITH ( LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net', CREDENTIAL = MyStorageCred );Шаг 4. Создание формата файла для CSV-файла.
CREATE EXTERNAL FILE FORMAT CsvFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', STRING_DELIMITER = '"', FIRST_ROW = 2 ) );Шаг 5. Создание внешней таблицы.
CREATE EXTERNAL TABLE dbo.SalesExternal ( OrderId INT, OrderDate DATE, Amount DECIMAL (18, 2), Customer NVARCHAR (100) ) WITH ( DATA_SOURCE = MyAzureStorage, LOCATION = '/data/sales/', FILE_FORMAT = CsvFormat );Шаг 6. Запрос внешней таблицы.
SELECT * FROM dbo.SalesExternal WHERE OrderDate >= '2025-01-01';
Пример 3. Запрос таблицы в другом SQL Server
Этот пример работает в SQL Server 2019 (15.x) и более поздних версиях.
Шаг 1. Создание главного ключа базы данных (обязательно, так как учетные данные хранят пароль).
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';Шаг 2. Создание учетных данных для удаленного экземпляра SQL Server.
CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred WITH IDENTITY = 'remote_user', SECRET = '<password>';Шаг 3. Создание внешнего источника данных.
CREATE EXTERNAL DATA SOURCE RemoteSqlServer WITH ( LOCATION = 'sqlserver://remote-server.contoso.com', PUSHDOWN = ON, CREDENTIAL = RemoteSqlCred );Шаг 4. Создание внешней таблицы (трехкомпонентное имя в
LOCATION).CREATE EXTERNAL TABLE dbo.RemoteCustomers ( CustomerId INT, CustomerName NVARCHAR (200) COLLATE SQL_Latin1_General_CP1_CI_AS ) WITH ( DATA_SOURCE = RemoteSqlServer, LOCATION = 'SalesDB.dbo.Customers' );Шаг 5. Запрос между серверами.
SELECT c.CustomerName, s.Amount FROM dbo.RemoteCustomers AS c INNER JOIN dbo.LocalSales AS s ON c.CustomerId = s.CustomerId;
Пример 4. Экспорт результатов в Parquet с помощью CETAS
Работает с SQL Server 2022 (16.x) и более поздними версиями, Управляемым экземпляром SQL Azure.
Шаг 1. Включение CETAS (только SQL Server).
EXECUTE sp_configure 'allow polybase export', 1; RECONFIGURE;Шаг 2. Создание учетных данных и источника данных (повторное использование из предыдущих примеров).
Шаг 3. Создание формата файла для экспорта Parquet.
CREATE EXTERNAL FILE FORMAT ParquetFormat WITH ( FORMAT_TYPE = PARQUET );Шаг 4. Экспорт результатов запроса.
CREATE EXTERNAL TABLE dbo.Sales2025Export WITH ( DATA_SOURCE = MyAzureStorage, LOCATION = '/exports/sales_2025.parquet', FILE_FORMAT = ParquetFormat ) AS SELECT * FROM Sales.Orders WHERE OrderDate >= '2025-01-01';
Стандартные блоки T-SQL для PolyBase
Прежде чем реализовать любой сценарий, ознакомьтесь с основными объектами T-SQL, которые используют PolyBase и как они соответствуют друг другу:
Схема, показывающая объекты PolyBase T-SQL и их взаимосвязи: от аутентификации (главный ключ базы данных, учетные данные) через источники данных и форматы файлов к методам запросов (внешняя таблица, OPENROWSET, BULK INSERT, CETAS).
- Для синтаксиса внешних источников данных см. CREATE EXTERNAL DATA SOURCE.
- Для синтаксиса внешнего формата файлов см. CREATE EXTERNAL FILE FORMAT.
- Для синтаксиса внешней таблицы см. CREATE EXTERNAL TABLE.
- Для синтаксиса доступа к данным ad hoc см. OPENROWSET.
- Для синтаксиса CETAS см. CREATE EXTERNAL TABLE AS SELECT (CETAS).
Полный справочник Transact-SQL для всех объектов см. в справочнике по Transact-SQL PolyBase.
Это важно
Проверьте сопоставление типов данных для вашего внешнего формата файла. При создании внешнего формата файлов или запроса файлов с помощью OPENROWSETPolyBase автоматически сопоставляет типы исходных данных (Parquet, CSV, Delta, Oracle, Teradata, MongoDB) с типами данных SQL Server. Несогласованные типы могут привести к автоматическому и незаметному усечению, потере точности или ошибкам в запросах. Например, Parquet DECIMAL(38,18) сопоставляется с элементом DECIMAL(18,0). Просмотрите таблицы сопоставления перед определением столбцов внешней таблицы или клаузой WITH. Для полной справки см. Сопоставление типов PolyBase.
Когда тебе нужно CREATE MASTER KEY?
Главный ключ базы данных (DMK) создается с помощью CREATE MASTER KEY синтаксиса. DMK шифрует секреты, хранящиеся в учетных данных базы данных. Это необходимо только в том случае, если учетные данные содержат значение секрета, то есть если он хранит пароль, маркер или ключ доступа.
DMK необходим (учетные данные содержат секрет):
Тип аутентификации Значение IDENTITYИмеет секрет DMK Маркер SAS 'SHARED ACCESS SIGNATURE'Да Обязательный Ключ доступа S3 'S3 ACCESS KEY'Да Обязательный Вход SQL / обычная проверка подлинности '<username>'Да Обязательный Ключ доступа к учетной записи хранения '<storage_account_name>'Да Обязательный - Учетная запись токена SAS использует
IDENTITY = 'SHARED ACCESS SIGNATURE'и хранит секретное значение, поэтому требуется мастер-ключ базы данных. - Учётные данные ключа доступа S3 используют
IDENTITY = 'S3 ACCESS KEY'и хранят секретное значение, поэтому требуется главный ключ базы данных.- Вход в SQL или базовый учетный код аутентификации использует
IDENTITY = '<username>'и хранит секретное значение, поэтому требуется мастер-ключ базы данных.
- Вход в SQL или базовый учетный код аутентификации использует
- Ключ доступа к аккаунту хранения использует
IDENTITY = '<storage_account_name>'и хранит секретное значение, поэтому требуется мастер-ключ базы данных.
- Учетная запись токена SAS использует
DMK не требуется (секрет не хранится)
Тип аутентификации Значение IDENTITYИмеет секрет DMK Управляемая идентичность 'Managed Identity'Нет Не требуется Майкрософт Ентра айди 'User Identity'или'Managed Identity'Нет Не требуется - Учетные данные управляемой идентификации используют
IDENTITY = 'Managed Identity'и не хранят секрет, поэтому не требуют главного ключа базы данных. - Учетные данные Microsoft Entra ID используют
IDENTITY = 'User Identity'илиIDENTITY = 'Managed Identity'и не хранят секретных данных, поэтому главный ключ базы данных не требуется.
- Учетные данные управляемой идентификации используют
Подсказка
Если в вашем CREATE DATABASE SCOPED CREDENTIAL заявлении нет секрета, вам не нужен DMK. Управляемая идентификация и проверка подлинности через Microsoft Entra ID передают доверие платформе. База данных не хранит пароли или маркеры.
Примеры:
В этом примере запроса требуется DMK (учетные данные хранят токен SAS).
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL SasCred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<your_SAS_token>';
В этом примере запроса DMK не требуется (управляемое удостоверение, без секрета).
CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';
В этом примере запроса DMK не требуется (сквозная передача Microsoft Entra без использования секрета).
CREATE DATABASE SCOPED CREDENTIAL EntraIdCred
WITH IDENTITY = 'User Identity';
Удаленный доступ к данным с помощью OPENROWSET и внешних таблиц
SQL Server предлагает три различных подхода к запросу удаленных данных. Вы можете выбрать правильный подход при понимании различий в синтаксисе, проверке подлинности и архитектуре.
| Подход | Синтаксис | подключается к | Аутентификация | Службы PolyBase | Платформы |
|---|---|---|---|---|---|
| Запросы OLE DB | OPENROWSET(provider, connection, query) |
Любой источник OLE DB с помощью MSOLEDBSQL, SQLOLEDB или других поставщиков | Проверка подлинности SQL, проверка подлинности Windows, Microsoft Entra ID (MSOLEDBSQL) | Нет | SQL Server (все поддерживаемые версии) |
| Файловые запросы в SQL Server 2022 (16.x) и SQL Server 2019 (15.x) | OPENROWSET(BULK ...) |
Файлы на локальном диске, в сети или в облаке (Azure Blob, ADLS, S3, OneLake) | Маркер SAS, ключ доступа, управляемое удостоверение, идентификатор Microsoft Entra | Да, для облака 1; Нет для локального | SQL Server 2022 (16.x) и SQL Server 2019 (15.x) |
| Файловые запросы в SQL Server 2025 (17.x) и более поздних версиях | OPENROWSET(BULK ...) |
Файлы на локальном диске, в сети или в облаке (Azure Blob, ADLS, S3, OneLake) | Маркер SAS, ключ доступа, управляемое удостоверение, идентификатор Microsoft Entra | Нет | SQL Server 2022 (16.x) и более поздние версии, База данных SQL Azure, Управляемый экземпляр SQL Azure, база данных SQL в Fabric |
| Соединители PolyBase |
CREATE EXTERNAL TABLE с помощью CREATE EXTERNAL DATA SOURCE, sqlserver://, oracle://, teradata://, mongodb://, odbc:// |
Удаленный SQL Server, Oracle, Teradata, MongoDB, источники ODBC | Только аутентификация SQL | Да | SQL Server 2019 (15.x) и более поздних версий (Windows); SQL Server 2025 (17.x) и более поздних версий (Linux) |
1 Для доступа к облачным файлам в SQL Server 2022 (16.x) необходимо установить функцию PolyBase.
- Запросы OLE DB используются
OPENROWSET(provider, connection, query)для подключения к любому исходнику OLE DB через MSOLEDBSQL, SQLOLEDB или другого провайдера на всех поддерживаемых версиях SQL Server. Они поддерживают SQL-аутентификацию, проверка подлинности Windows и Microsoft Entra ID с MSOLEDBSQL и не требуют установки сервисов PolyBase. - Файловые запросы используются
OPENROWSET(BULK ...)для чтения файлов на локальном диске, сетевых ресурсах или облачном хранилище, таком как Хранилище BLOB-объектов Azure, ADLS, S3 или OneLake, используя токен SAS, ключ доступа, управляемую идентичность или Microsoft Entra ID. Они поддерживаются для локальных и сетевых файлов в версиях SQL Server 2005 и позднее, для облачных файлов в SQL Server 2022 (16.x) и более поздних версиях, а также в База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Database in Fabric. Файловые запросы не требуют сервисов PolyBase для локальных файлов или облачных файлов в SQL Server 2022 (16.x) и более поздних версиях. - Коннекторы PolyBase используют
CREATE EXTERNAL TABLEсCREATE EXTERNAL DATA SOURCEи расположениеoracle://,sqlserver://,teradata://,mongodb://илиodbc://для подключения к удалённым источникам SQL Server, Oracle, Teradata, MongoDB или ODBC. Для них требуется аутентификация SQL и сервисы PolyBase в SQL Server 2019 (15.x) и более поздних версиях на Windows и SQL Server 2025 (17.x) и более поздних версиях на Linux. Дополнительные сведения см. в разделе CREATE EXTERNAL DATA SOURCE (Transact-SQL).
Когда следует использовать каждый подход
Используйте OLE DB OPENROWSET для:
- Используйте OLE DB
OPENROWSETдля быстрых, одноразовых ad hoc запросов без создания постоянных объектов. - Используйте OLE DB
OPENROWSETдля Microsoft Entra ID или управляемой идентификационной аутентификации через MSOLEDBSQL. - Используйте OLE DB
OPENROWSET, чтобы избежать зависимостей сервисов PolyBase. - Используйте OLE DB
OPENROWSETдля подключения к любому источнику данных, у которого есть OLE DB провайдер.
Используйте файл OPENROWSET(BULK) для:
- Используйте файлы
OPENROWSET(BULK ...)для ad hoc исследования файлов и поиска схем. - Используйте файл
OPENROWSET(BULK ...)для быстрых превращений и предпросмотров, прежде чем решаться на определение таблицы. - Используйте файл
OPENROWSET(BULK ...)для гибких преобразований встраиваемых столбцов, таких как кастинг, фильтрация и вычисленные столбцы. - Используйте файл
OPENROWSET(BULK ...)для данных, которые редко меняются и не требуют постоянных метаданных.
Используйте коннекторы PolyBase с CREATE EXTERNAL TABLE для:
- Используйте коннекторы PolyBase с
CREATE EXTERNAL TABLEдля постоянных, многократно используемых определений таблиц, к которым могут обращаться несколько пользователей или приложений. - Используйте соединители PolyBase с
CREATE EXTERNAL TABLEдля производственных нагрузок, где требуется сбор статистики и оптимизация планов запросов. - Используйте соединители PolyBase с
CREATE EXTERNAL TABLEдля выполнения pushdown-вычислений в удалённых источниках, таких как Oracle и SQL Server. - Используйте коннекторы PolyBase с
CREATE EXTERNAL TABLEдля общего управления и безопасности; после создания таблицы пользователям требуется только разрешениеSELECT. - Используйте соединители PolyBase с
CREATE EXTERNAL TABLE, если для удалённого источника доступна проверка подлинности SQL.
OPENROWSET (OLE DB) — нерегламентированные удаленные запросы (не требуются службы PolyBase)
Форма OPENROWSET OLE DB подключается к удаленному источнику данных через поставщика OLE DB, выполняет сквозной запрос и возвращает результаты в виде набора строк. Это одноразовая, временная альтернатива связанному серверу. Постоянные метаданные не создаются. Этот синтаксис не требует служб PolyBase и не поддерживает облачные файлы или внешние источники данных.
В этом примере запрос подключается к удаленному SQL Server через OLE DB (а не PolyBase).
SELECT *
FROM OPENROWSET (
'MSOLEDBSQL',
'Server=remote-server;Database=AdventureWorks;Trusted_Connection=yes;',
'SELECT TOP 10 * FROM AdventureWorks.Sales.SalesOrderHeader'
);
OPENROWSET(BULK) — запросы на основе файлов (PolyBase)
Форма BULKOPENROWSET считывает данные непосредственно из файлов. В SQL Server 2019 (15.x) и более ранних версиях он считывается из локальных или UNC-путей к файлам и требует файла форматирования. В SQL Server 2022 (16.x) и более поздних версиях можно читать из облачного хранилища с помощью параметров DATA_SOURCE и FORMAT. Этот подход представляет собой интегрированную версию PolyBase для виртуализации данных.
В контексте PolyBase и виртуализации данных, когда это руководство ссылается на OPENROWSET, это означает синтаксис OPENROWSET(BULK ...) с конструкцией FORMAT для выполнения запросов к внешним файлам.
Примеры:
В этом примере запрос считывает файл Parquet из Хранилище BLOB-объектов Azure (SQL Server 2022 и более поздних версий).
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'data/sales/*.parquet',
DATA_SOURCE = 'MyAzureStorage',
FORMAT = 'PARQUET'
) AS [result];
В этом примере запрос считывает файл Parquet с встроенным путем (База данных SQL Azure, Управляемый экземпляр SQL Azure).
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
FORMAT = 'PARQUET'
) AS [result];
Когда следует использовать OPENROWSET и внешние таблицы
Обе OPENROWSET(BULK ...) и внешние таблицы позволяют запрашивать внешние данные с помощью T-SQL, но они предназначены для различных вариантов использования. В следующей таблице приведены основные различия, которые помогут вам решить, какой подход соответствует вашему сценарию.
| Функциональность | OPENROWSET(BULK ...) |
Внешняя таблица |
|---|---|---|
| Purpose | Нерегламентированное исследование и однократные запросы | Постоянное, повторное определение таблицы |
| Метаданные, хранящиеся в базе данных | Нет. Ничего не сохраняется после выполнения запроса | Да. Определение таблицы, источник данных и формат файла хранятся в виде объектов базы данных |
| Определение схемы | Определяется автоматически из файла (Parquet) или задается в коде с использованием WITH выражения. |
Определяется явным образом в инструкции CREATE EXTERNAL TABLE |
| Разрешения | Требуется ADMINISTER BULK OPERATIONS или ADMINISTER DATABASE BULK OPERATIONS |
После создания стандартные SELECT права доступа для таблицы будут достаточно |
| Вычисляемые столбцы | Да. Добавьте выражения и вычисляемые столбцы в SELECT список; такие функции метаданных, как filename() и filepath() доступны только здесь. |
Нет. Фиксированный список столбцов; выполнение преобразований в представлении или запросе, считывающего внешнюю таблицу |
| Статистика | Управляемый экземпляр SQL Azure: ручная одноколоночная статистика через sys.sp_create_openrowset_statistics. См. руководство по статистике OPENROWSET. SQL Server 2022 (16.x) и более поздние версии, База данных SQL Azure, база данных SQL в Fabric: автоматическое создание статистики для предикатов. Ручная OPENROWSET статистика не поддерживается на SQL Server. |
Полная CREATE STATISTICS поддержка на всех платформах, а также автоматическое создание в SQL Server 2022 (16.x) и более поздних версиях. См. статью "Создание статистики внешней таблицы вручную". |
| Сдвиг вниз | Ограниченная поддержка. Подсистема может отправлять фильтры вниз к сканированию файла, но нет pushdown для удаленных источников RDBMS | Да. Поддерживает вычисления pushdown для соединителей RDBMS (SQL Server, Oracle, Teradata, MongoDB) |
| лучше всего подходит для | Исследование данных, обнаружение схем, запросы прототипа, одноразовая загрузка данных, гибкие преобразования | Рабочие нагрузки, повторяющиеся запросы, общий доступ между пользователями, панелями мониторинга и отчетами |
-
OPENROWSET(BULK ...)лучше всего подходит для случайного исследования и единичных запросов, а внешняя таблица лучше подходит для постоянных, многократно используемых определений таблиц. -
OPENROWSET(BULK ...)не сохраняет метаданные в базе данных после выполнения запроса, тогда как внешняя таблица хранит определение таблицы, источник данных и формат файла в виде объектов базы данных. -
OPENROWSET(BULK ...)автоматически определяет схему по файлу Parquet или задаёт её непосредственно с помощью предложенияWITH, тогда как во внешней таблице схема явно задаётся в оператореCREATE EXTERNAL TABLE. -
OPENROWSET(BULK ...)требуетADMINISTER BULK OPERATIONSилиADMINISTER DATABASE BULK OPERATIONS, тогда как внешняя таблица может быть запрошена пользователями, которым требуется стандартноеSELECTразрешение только после появления таблицы. -
OPENROWSET(BULK ...)поддерживает вычисляемые столбцы в запросе и функции метаданных, такие какfilename()иfilepath(), тогда как внешняя таблица имеет фиксированный набор столбцов и требует преобразований в представлении или в запросе, который читает внешнюю таблицу. -
OPENROWSET(BULK ...)имеет ограниченную поддержку статистики: Azure SQL SQL Managed Instance может использоватьsys.sp_create_openrowset_statisticsдля одностолбцевой статистики, но SQL Server 2022 (16.x) и более поздние версии, База данных SQL Azure и SQL Database in Fabric автоматически создают статистику по предикатам. РучнаяOPENROWSETстатистика не поддерживается на SQL Server, База данных SQL Azure и SQL Database в Fabric. Внешняя таблица поддерживает полныеCREATE STATISTICSвозможности на всех платформах, а также автоматическую статистику в SQL Server 2022 (16.x) и более поздних версиях, База данных SQL Azure и SQL Database в Fabric. Смотрите статистику OPENROWSET, созданную вручную и создание вручную статистики для внешней таблицы. -
OPENROWSET(BULK ...)имеет ограниченные возможности проталкивания вычислений и не поддерживает проталкивание в удалённые источники RDBMS, в то время как внешняя таблица поддерживает проталкивание вычислений для коннекторов к RDBMS. -
OPENROWSET(BULK ...)Лучше всего подходит для анализа данных, поиска схем, прототипирования, одноразовых загрузок и гибких преобразований, а внешняя таблица — для производственных нагрузок, повторяющихся запросов, общего доступа, дашбордов и отчетности.
Использование OPENROWSET при необходимости гибкости
Используется OPENROWSET для изучения файла, тестирования различных схем или добавления вычисляемых столбцов и преобразований без создания постоянных объектов. Например, можно извлечь путь к файлу в виде столбца, привести типы данных в виде встроенных или отфильтровать вычисляемых выражений в одном запросе.
В этом примере запроса содержатся вычисляемые столбцы и преобразования:
SELECT result.filename() AS [FileName],
result.filepath(1) AS [Year],
result.filepath(2) AS [Month],
CAST (OrderDate AS DATE) AS OrderDate,
Amount,
OrderDate
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*/*.parquet',
FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025';
Подсказка
Функции filepath() и filename() доступны в Базе данных SQL Azure, Управляемом экземпляре SQL Azure и SQL Server 2022 (16.x) и более поздних версиях. Они позволяют фильтровать части пути к файлу (исключение секций) и отображать имя исходного файла в виде столбца, что невозможно с внешними таблицами напрямую.
Использование внешних таблиц при необходимости сохраняемости и управления
Используйте внешние таблицы, когда несколько пользователей или приложений должны многократно запрашивать одни и те же внешние данные. Вы определяете схему, источник данных и учетные данные один раз и храните их в базе данных. Потребители нуждаются SELECT только в разрешении на таблицу.
Внешние таблицы также поддерживают статистику, которую оптимизатор запросов использует для создания лучших планов выполнения. Вы можете создавать статистику вручную или позволить системе создавать её автоматически (SQL Server 2022 (16.x) и более поздних версий).
Этот пример запроса создает статистику во внешней таблице для улучшения планов запросов.
CREATE STATISTICS Stats_OrderDate
ON dbo.SalesExternal(OrderDate)
WITH FULLSCAN;
Дополнительные сведения о статистике обоих подходов см. в разделе "Рекомендации по производительности PolyBase— статистика".
BULK INSERT vs. OPENROWSET(BULK): Какой из них следует использовать?
Оба BULK INSERT и OPENROWSET(BULK ...) импортируют данные из файлов в SQL Server, используя одну и ту же базовую подсистему массовой загрузки. Однако они отличаются синтаксисом, гибкостью и тем, что можно сделать с результатами. В следующей таблице приведены основные различия.
Замечание
Отдельная инструкция BULK INSERT не поддерживается в базе данных SQL в Fabric. Для поглощения данных используйте INSERT ... SELECTOPENROWSET(BULK ...) против OneLake.
| Функциональность | BULK INSERT |
OPENROWSET(BULK ...) |
|---|---|---|
| Основная цель | Загружает данные из файла непосредственно в целевую таблицу | Возвращает набор строк, который используется в инструкции SELECT или INSERT ... SELECT. |
| Шаблон использования | Автономное выражение: BULK INSERT <table> FROM '<file>' |
Необходимо использовать внутри запроса: SELECT * FROM OPENROWSET(BULK ...) или INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...) |
| Требуется целевая таблица? | Да. Всегда записывает данные непосредственно в таблицу | Нет. Его можно SELECT использовать без вставки куда-либо или вставить в любую таблицу или временную таблицу. |
| Преобразования столбцов во время загрузки | Ограниченная поддержка. Потоки данных из файла в таблицу как есть (сопоставление, управляемое файлом форматирования или порядком столбцов). | Полная поддержка. Выражения, фильтры, CASTWHEREJOIN другие таблицы и вычисляемые столбцы можно добавить в окружающую среду.SELECT |
| Хинты таблицы | Предложение WITH включает поддержку BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS, TABLOCK и многое другое |
Поддерживает подсказки таблицы, используя синтаксис INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...) |
| Импорт больших объектов (LOB) с одним значением | Не поддерживаются | Да. Поддерживает SINGLE_BLOB, SINGLE_CLOBSINGLE_NCLOB чтобы импортировать весь файл как одно значение varbinary(max), varchar(max), или nvarchar(max) |
| Форматирование файлов | Да. Поддерживается с помощью (XML и других форматов) | Да. Поддерживается (XML и не XML) |
| Доступ к файлам в облаке |
DATA_SOURCEподдерживает Хранилище BLOB-объектов Azure в SQL Server 2017 (14.x) и более поздних версиях, База данных SQL Azure и Управляемый экземпляр SQL Azure. SQL Server 2019 CU11 и более поздние обновления также поддерживают ADLS Gen2. Совместимое с S3 хранилище не поддерживается. |
DATA_SOURCEподдерживает Хранилище BLOB-объектов Azure в SQL Server 2017 (14.x) и более поздних версиях, ADLS Gen2 в SQL Server 2019 CU11 и более поздних версиях, а также совместимое с S3 хранилище в SQL Server 2022 (16.x) и более поздних версиях. База данных SQL Azure и Управляемый экземпляр SQL Azure поддерживают Хранилище BLOB-объектов Azure и ADLS Gen2. База данных SQL в Fabric поддерживает OneLake и внешнее хранилище через ярлыки OneLake. |
| Файлы Parquet или Delta | Не поддерживается. Только CSV/разделенный текст | Да. SQL Server 2022 (16.x) и более поздние версии, Управляемый экземпляр SQL Azure и База данных SQL Azure поддерживают FORMAT = 'PARQUET' и FORMAT = 'DELTA'; а база данных SQL в Fabric поддерживает FORMAT = 'PARQUET', но не DELTA. Дополнительные сведения см. в статье OPENROWSET BULK (Transact-SQL). |
| Необходимое разрешение |
ADMINISTER BULK OPERATIONS или ADMINISTER DATABASE BULK OPERATIONS, а также INSERT в целевой таблице |
ADMINISTER BULK OPERATIONS или ADMINISTER DATABASE BULK OPERATIONS |
| Минимальное ведение журнала | Да. Поддерживается в простых или массовых моделях восстановления с помощью TABLOCK |
Да. Поддерживается при использовании с INSERT ... SELECT и TABLOCK |
-
BULK INSERTзагружает данные из файла непосредственно в целевую таблицу, тогда какOPENROWSET(BULK ...)возвращает набор строк, который можно использовать в инструкцииSELECTилиINSERT ... SELECT. -
BULK INSERTявляется самостоятельной инструкцией, в то время какOPENROWSET(BULK ...)должен использоваться внутри запроса, напримерSELECT * FROM OPENROWSET(BULK ...)илиINSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...). -
BULK INSERTвсегда записывает напрямую в целевую таблицу, тогда какOPENROWSET(BULK ...)можетSELECTиз файла, не вставляя данные никуда, или вставлять их в какую-либо таблицу или временную таблицу. -
BULK INSERTимеет ограниченную поддержку преобразований столбцов, поскольку данные поступают из файла в таблицу в неизменном виде, а сопоставление задаётся файлом формата или порядком столбцов.OPENROWSET(BULK ...)поддерживает выражения,CAST, фильтрыJOIN, элементыSELECTи вычисляемые столбцы в окружающемWHERE. -
BULK INSERTиспользуетWITHвыражение дляBATCHSIZE,CHECK_CONSTRAINTS,FIRE_TRIGGERS,KEEPIDENTITY,KEEPNULLS,TABLOCKи других подсказок.OPENROWSET(BULK ...)поддерживает табличные указания с помощьюINSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...). -
BULK INSERTне поддерживает импорт крупных объектов с одним значением.OPENROWSET(BULK ...)поддерживаетSINGLE_BLOB,SINGLE_CLOBиSINGLE_NCLOBдля импорта всего файла как одного значения varbinary(max), varchar(max) или nvarchar(max) соответственно. - И
BULK INSERT, иOPENROWSET(BULK ...)поддерживают файлы в формате XML и не XML. - Для доступа к облачным файлам с
BULK INSERT,DATA_SOURCEпараметр поддерживает Хранилище BLOB-объектов Azure в SQL Server 2017 (14.x) и более поздних версиях, База данных SQL Azure и Управляемый экземпляр SQL Azure. SQL Server 2019 CU11 и более поздние обновления также поддерживают ADLS Gen2, ноBULK INSERTне поддерживают совместимое с S3 хранилище. ДляOPENROWSET(BULK ...),DATA_SOURCEподдерживает Хранилище BLOB-объектов Azure в SQL Server 2017 (14.x) и более поздних версиях, ADLS Gen2 в SQL Server 2019 CU11 и более поздних версиях, а также совместимое с S3 хранилище в SQL Server 2022 (16.x) и более поздних версиях. База данных SQL Azure и Управляемый экземпляр SQL Azure поддерживают Хранилище BLOB-объектов Azure и ADLS Gen2. База данных SQL в Fabric поддерживает OneLake и внешнее хранилище через ярлыки OneLake. -
BULK INSERTне поддерживает файлы Parquet или Delta и поддерживает только CSV или разделённый текст.OPENROWSET(BULK ...)FORMAT = 'PARQUET'FORMAT = 'DELTA'поддерживает SQL Server 2022 (16.x) и более поздние версии База данных SQL Azure и Управляемый экземпляр SQL Azure. SQL-база данных в Fabric поддерживаетFORMAT = 'PARQUET', но неFORMAT = 'DELTA'. Дополнительные сведения см. в статье OPENROWSET BULK (Transact-SQL). - для
BULK INSERTтребуютсяADMINISTER BULK OPERATIONSилиADMINISTER DATABASE BULK OPERATIONS, а также разрешениеINSERTдля целевой таблицы, тогда как дляOPENROWSET(BULK ...)требуетсяADMINISTER BULK OPERATIONSилиADMINISTER DATABASE BULK OPERATIONS. -
BULK INSERTПоддерживает минимальное логирование в простой или массовой модели восстановления сTABLOCK.OPENROWSET(BULK ...)Поддерживает минимальное логирование при использовании сINSERT ... SELECTиTABLOCK.
Когда выбрать BULK INSERT
Используйте BULK INSERT при простой загрузке файлов в таблицу и не требуется преобразовывать, фильтровать или присоединять данные во время импорта. Он использует более простой синтаксис для CSV-файлов или других файлов с разделителями:
В этом примере запрос загружает CSV-файл из хранилища BLOB-объектов Azure непосредственно в таблицу.
BULK INSERT Sales.Invoices
FROM 'invoices/inv-2025-01.csv'
WITH (
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
В этом примере запрос загружает локальный файл с файлом форматирования для сопоставления столбцов.
BULK INSERT dbo.Products
FROM 'C:\Data\products.csv'
WITH (
FORMATFILE = 'C:\Data\products.fmt',
FIRSTROW = 2,
TABLOCK
);
Когда следует выбрать OPENROWSET(BULK)
Используйте OPENROWSET(BULK ...), если требуется выполнение одного или нескольких следующих условий:
- Используйте
OPENROWSET(BULK ...), чтобы запрашивать данные файла или предварительно просматривать их без предварительного создания таблицы. - Используйте
OPENROWSET(BULK ...)для преобразования, фильтрации или объединения данных во время импорта. - Используйте
OPENROWSET(BULK ...)для загрузки файлов Parquet или Delta, потому чтоBULK INSERTони не поддерживают эти форматы. - Используйте
OPENROWSET(BULK ...), чтобы импортировать весь файл как одно значение LOB с помощьюSINGLE_BLOB,SINGLE_CLOBилиSINGLE_NCLOB.
В этом примере запрос предварительно просматривает CSV-файл из хранилища BLOB-объектов Azure без вставки данных в любом месте.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'invoices/inv-2025-01.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ','
) AS src;
В этом примере запрос вставляет данные с преобразованием и фильтрацией.
INSERT INTO Sales.Invoices (InvoiceDate, Amount, Customer)
SELECT CAST (InvoiceDate AS DATE),
Amount * 1.1, -- Apply a 10% markup
UPPER(Customer)
FROM OPENROWSET (
BULK 'invoices/inv-2025-01.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2
) WITH (
InvoiceDate VARCHAR (10),
Amount DECIMAL (18, 2),
Customer VARCHAR (100)
) AS src
WHERE Amount IS NOT NULL;
В этом примере запроса файл Parquet загружается, что невозможно сделать с помощью BULK INSERT.
INSERT INTO Sales.Invoices
SELECT *
FROM OPENROWSET (
BULK 'data/invoices/*.parquet',
DATA_SOURCE = 'MyAzureStorage',
FORMAT = 'PARQUET') AS src;
В этом примере запрос импортирует весь XML-файл в виде одного значения varbinary(max ).
INSERT INTO dbo.XmlDocuments (DocContent)
SELECT BulkColumn
FROM OPENROWSET (
BULK 'C:\Data\catalog.xml',
SINGLE_BLOB
) AS x;
Подсказка
Один из способов — начать с OPENROWSET(BULK ...) в SELECT для изучения и проверки данных файла, а затем перейти к BULK INSERT для окончательной загрузки на производстве, если преобразования вам не нужны. Если вам нужна поддержка Parquet или Delta или встроенная фильтрация, оставайтесь с OPENROWSET.
Дополнительные сведения см. в следующих руководствах.
- Статья «Использование BULK INSERT или OPENROWSET(BULK...) для импорта данных в SQL Server содержит подробное руководство бок о бок с вопросами безопасности.
- Статья «Массовый импорт и экспорт данных» (SQL Server) содержит обзор всех методов массового перемещения данных, включая bcp,
BULK INSERTиOPENROWSET. - Статья BULK INSERT (Transact-SQL) содержит полный справочник T-SQL для
BULK INSERT. - Статья OPENROWSET BULK (Transact-SQL) содержит полный справочник T-SQL для
OPENROWSET(BULK ...). - Статья «Примеры массового доступа к данным в Хранилище BLOB-объектов Azure» приводят параллельные примеры, использующие оба метода с служба хранилища Azure.
- В статье Массовый импорт данных больших объектов с помощью поставщика строковых наборов BULK OPENROWSET (SQL Server) приводятся примеры
SINGLE_BLOB,SINGLE_CLOBиSINGLE_NCLOB. -
Статья «Использовать формат файла для массового импорта данных» (SQL Server) объясняет использование файлов форматов обоими методами.
- Для рекомендаций по сохранению null или применению значений по умолчанию при массовом импорте см. раздел «Сохранить nulls или значения по умолчанию при массовом импорте (SQL Server).
- Для рекомендаций по сохранению значений идентичности при массовом импорте см. раздел «Сохранить значения идентичности при массовом импорте данных» (SQL Server).
Полезные функции метаданных
Когда вы запрашиваете внешние файлы с помощью OPENROWSET или внешних таблиц, используйте встроенные функции и процедуры для проверки метаданных файлов, определения схем и выполнения запросов с учетом секционирования.
filepath() и filename()
Функции filepath() и filename() возвращают части пути к файлу или имени файла для каждой строки в результирующем наборе. Они особенно полезны для:
Устранение секций: фильтрация по сегментам папок (например, разделов года или месяца или дня), поэтому модуль считывает только соответствующие файлы, а не сканирует все.
Предоставление исходных метаданных: включите исходное имя файла или путь в качестве столбца в результатах запроса, что полезно для аудита или отладки.
| Функция | Возвраты | Пример |
|---|---|---|
filename() |
Имя файла (включая расширение) исходного файла для каждой строки | sales_2025_01.parquet |
filepath(N) |
Сегмент папки N из строки с подстановочными знаками (*) на пути BULK, где N начинается с 1 |
Для пути sales/2025/01/*.parquetfilepath(1) возвращает 2025, filepath(2) возвращает 01 |
Область применения: База данных SQL Azure, Управляемый экземпляр SQL Azure, SQL Server 2022 (16.x) и более поздние версии, база данных SQL в Fabric.
В этом примере запрос используется filepath() для устранения секций и filename() определения исходных файлов. Он считывает только файлы в папке /2025/ и считывает только файлы в подпапке /06/ .
SELECT result.filename() AS SourceFile,
result.filepath(1) AS [Year],
result.filepath(2) AS [Month],
*
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*.parquet',
FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025'
AND result.filepath(2) = '06';
Подсказка
Поместите filepath() фильтры в WHERE предложение, а не в вложенный запрос или CTE. Если фильтр находится в WHERE предложении, подсистема может выполнять ликвидацию секций на уровне сканирования файлов, что значительно снижает количество операций ввода-вывода.
sp_describe_first_result_set — обнаружение типов столбцов OPENROWSET
При использовании OPENROWSET с файлами Parquet подсистема автоматически выводит типы данных столбцов (вывод схемы). Выводимые типы могут быть больше, чем необходимо. Например, символьные столбцы часто выводятся как varchar(8000), так как метаданные Parquet не включают максимальную длину. Этот выбор может снизить производительность и использовать больше памяти.
Используйте sp_describe_first_result_set для проверки выводимых схем перед завершением запроса. После просмотра выводимых типов укажите более узкие типы в WITH предложении для повышения производительности.
Шаг 1. Проверка выводимой схемы.
EXECUTE sp_describe_first_result_set N' SELECT * FROM OPENROWSET( BULK ''abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet'', FORMAT = ''PARQUET'' ) AS result';В выходных данных отображаются имя каждого столбца, выводимый тип данных, максимальная длина, точность и масштабирование. Если вы видите varchar(8000) там, где varchar(100) было бы достаточно, замените его.
Шаг 2. Используйте явные типы для повышения производительности.
SELECT TOP 100 * FROM OPENROWSET ( BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet', FORMAT = 'PARQUET' ) WITH ( OrderId INT, OrderDate DATE, Amount DECIMAL (18, 2), Customer VARCHAR (100) -- much narrower than the inferred varchar(8000) ) AS result;
Вывод схемы работает только с файлами Parquet. Для CSV-файлов всегда указывайте определения столбцов в WITH предложении (для OPENROWSET) или в инструкции CREATE EXTERNAL TABLE .
sp_describe_first_result_set это общая процедура для SQL Server, База данных SQL Azure, Управляемый экземпляр SQL Azure и базы данных SQL в Fabric, но она особенно полезна для OPENROWSET-запросов. Для получения дополнительной информации см. sp_describe_first_result_set.
Производительность, устранение неполадок и лучшие практики
После реализации виртуализации данных используйте эти руководства для оптимизации производительности, диагностики проблем и обеспечения готовности рабочей среды:
| Area | Статья | Сведения |
|---|---|---|
| Производительность PolyBase | Рекомендации по производительности в PolyBase для SQL Server | Статистика, сдвиг вниз, параллелизм и управление памятью |
| Выталкивающее вычисление | Вычисления pushdown в PolyBase | Указывает, какие операции будут отправляться в удаленный источник. |
| Как определить, произошла ли операция pushdown | Как определить, случился ли внешний pushdown | Планы запросов и DAM |
| Troubleshooting | Мониторинг и устранение неполадок PolyBase | Распространенные ошибки и способы их устранения |
| Подключение Kerberos | Устранение неполадок с подключением PolyBase к Kerberos | |
| Вопросы и ответы | Часто задаваемые вопросы о PolyBase | |
| Ошибки и решения | Ошибки в PolyBase и возможные решения |