Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server 2016 (13.x) и более поздних
версий База данных SQL Azure Управляемый экземпляр SQL Azure
Azure Synapse Analytics Analytics
Platform System (PDW)
Создает внешний источник данных для запроса внешних данных, используемых для функций виртуализации данных PolyBase и данных.
Эта статья приводит синтаксис, аргументы, комментарии, разрешения и примеры для любых выбранных продуктов SQL.
Выбор продукта
В следующей строке выберите название нужного продукта, и отобразится информация только об этом продукте.
* SQL Server *
Обзор: SQL Server 2016
Область применения: SQL Server 2016 (13.x)
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация и загрузка данных с помощью PolyBase
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
Примечание.
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте селектор, чтобы выбрать соответствующую версию.
Сведения о возможностях SQL Server 2019 (15.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Сведения о возможностях SQL Server 2022 (16.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Соглашения о синтаксисе Transact-SQL
Синтаксис для SQL Server 2016
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:p ort]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
Cloudera CDH или Hortonworks HDP | hdfs |
<Namenode>[:port] |
С SQL Server 2016 (13.x) по SQL Server 2019 (15.x) | Анонимная или обычная проверка подлинности |
Учетная запись хранения Azure (v2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Начиная с SQL Server 2016 (13.x) Иерархическое пространство имен не поддерживается |
Ключ учетной записи службы хранилища Azure |
Путь к расположению:
-
<Namenode>
— имя компьютера, URI службы имен или IP-адресNamenode
в кластере Hadoop. PolyBase необходимо разрешить любые DNS-имена, используемые в кластере Hadoop. -
port
: порт, который прослушивает внешний источник данных. В Hadoop порт можно найти, используя параметр конфигурацииfs.defaultFS
. Значение по умолчанию — 8020. -
<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно. -
<storage_account>
: имя учетной записи хранения ресурса Azure. -
<server_name>
: имя узла. -
<instance_name>
: имя экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
- Префикс
wasbs
не является обязательным, но рекомендуется к использованию в SQL Server 2016 (13.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL. - Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, выполните инструкцию ALTER EXTERNAL DATA SOURCE , чтобы указать новое расположение.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
CREDENTIAL
требуется, только если данные были защищены.
CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = * [ HADOOP ] *
Указывает тип настраиваемого внешнего источника данных. В SQL Server 2016 этот параметр всегда является обязательным и должен быть указан только как HADOOP
. Поддерживает подключения к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Поведение этого параметра отличается в более поздних версиях SQL Server.
Пример использования TYPE
= HADOOP
для загрузки данных из учетной записи служба хранилища Azure см. в статье Создание внешнего источника данных для доступа к данным в служба хранилища Azure с помощью интерфейса wasb://
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:порт]'
Настройте это необязательное значение только при подключении к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Полный список поддерживаемых версий Hadoop см. в разделе "Конфигурация подключения PolyBase".
RESOURCE_MANAGER_LOCATION
При определении оптимизатор запросов принимает решение на основе затрат для повышения производительности. Задание MapReduce можно использовать, чтобы передать вычисления в Hadoop. Указание RESOURCE_MANAGER_LOCATION
может значительно сократить объем данных, передаваемых между Hadoop и SQL Server, повышая производительность запросов.
Если значение для Resource Manager не задано, отправка вычислений в Hadoop для запросов PolyBase отключена. См. конкретный пример и дальнейшие рекомендации в разделе Создание внешнего источника данных для ссылки на Hadoop с поддержкой передачи.
Значение RESOURCE_MANAGER_LOCATION не проверяется при создании внешнего источника данных. Ввод неправильного значения может привести к сбою запроса во время выполнения при попытке принудительного нажатия, так как указанное значение не сможет устранить.
Для корректной работы PolyBase с внешним источником данных Hadoop необходимо открыть порты для следующих компонентов кластера Hadoop:
- Порты HDFS
- NameNode
- DataNode
- Resource Manager
- Отправка задания
- Журнал заданий
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к Hadoop (hadoop connectivity).
Подключение к Hadoop | Порт по умолчанию диспетчера ресурсов |
---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
В следующей таблице показаны порты по умолчанию для этих компонентов. Существует зависимость версий Hadoop, а также возможность пользовательской конфигурации, которая не использует назначение портов по умолчанию.
Компонент кластера Hadoop | Порт по умолчанию |
---|---|
NameNode | 8020 |
DataNode (передача данных, порт IPC без привилегий) | 50010 |
DataNode (передача данных, привилегированный порт IPC) | 1019 |
Отправка заданий диспетчера ресурсов (Hortonworks 1.3) | 50300 |
Отправка заданий диспетчера ресурсов (Cloudera 4.3) | 8021 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.0 в Windows, Cloudera 5.x в Linux) | 8032 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.x и 3.0 в Windows, Hortonworks 2.1–3 в Linux) | 8050 |
Журнал заданий диспетчера ресурсов | 10020 |
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Примеры
Внимание
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
А. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
В. Создание внешнего источника данных для ссылки на Hadoop с включенной отправкой
Укажите параметр RESOURCE_MANAGER_LOCATION
, чтобы включить принудительную передачу вычислений в Hadoop для запросов PolyBase. После включения PolyBase принимает решение на основе затрат для определения того, должны ли вычисления запроса быть переданы в Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8020',
TYPE = HADOOP,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
В. Создание внешнего источника данных для ссылки на Hadoop с защитой Kerberos
Чтобы проверить, защищен ли кластер Hadoop протоколом Kerberos, проверьте значение свойства hadoop.security.authentication
в файле Hadoop core-site.xml. Чтобы сослаться на кластер Hadoop с защитой Kerberos, необходимо указать учетные данные с областью действия "база данных", которые содержат ваше имя пользователя и пароль Kerberos. Главный ключ базы данных используется для шифрования секрета учетных данных с областью действия "база данных".
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
TYPE = HADOOP,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Д. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных представляет собой учетную запись службы хранилища Azure v2 под названием logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
.
В этом примере показано, как создать учетные данные с областью действия "база данных" для аутентификации в учетной записи службы хранилище Azure v2. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; эти данные не используются для проверки подлинности в службе хранилища Azure. При подключении к службе хранилища Azure с помощью wasb
или wasbs
проверки подлинности необходимо выполнить проверку подлинности с помощью ключа учетной записи хранения, а не с подписанным URL-адресом (SAS).
В SQL Server 2016 (13.x) параметр TYPE
должен иметь значение HADOOP
даже при доступе к службе хранилища Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
Связанный контент
Обзор: SQL Server 2017
Область применения: SQL Server 2017 (14.x)
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация данных и загрузка данных с помощью PolyBase в SQL Server
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
Примечание.
Этот синтаксис отличается в зависимости от версии SQL Server на Linux. Используйте селектор, чтобы выбрать соответствующую версию.
Сведения о возможностях SQL Server 2019 (15.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Сведения о возможностях SQL Server 2022 (16.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Примечание.
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте селектор, чтобы выбрать соответствующую версию.
Сведения о возможностях SQL Server 2019 (15.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Сведения о возможностях SQL Server 2022 (16.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Соглашения о синтаксисе Transact-SQL
Синтаксис для SQL Server 2017
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:p ort]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
Cloudera CDH или Hortonworks HDP | hdfs |
<Namenode>[:port] |
Только с SQL Server 2016 (13.x) по SQL Server 2019 (15.x) | Анонимная или обычная проверка подлинности |
Учетная запись хранения Azure (v2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Начиная с SQL Server 2016 (13.x) Иерархическое пространство имен не поддерживается |
Ключ учетной записи службы хранилища Azure |
массовые операции | https |
<storage_account>.blob.core.windows.net/<container> |
Начиная с SQL Server 2017 (14.x) | Подписанный URL-адрес (SAS) |
Путь к расположению:
-
<
Namenode>
: имя компьютера или IP-адресNamenode
в Hadoop Namenode. PolyBase необходимо разрешить любые DNS-имена, используемые в кластере Hadoop. -
port
: порт, который прослушивает внешний источник данных. В Hadoop порт можно найти, используя параметр конфигурацииfs.defaultFS
. Значение по умолчанию — 8020. -
<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно. -
<storage_account>
: имя учетной записи хранения ресурса Azure. -
<server_name>
: имя узла. -
<instance_name>
: имя экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
- Укажите
Driver={<Name of Driver>}
при подключении черезODBC
. - Префикс
wasbs
не является обязательным, но рекомендуется к использованию в SQL Server 2017 (14.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL. - Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, выполните инструкцию ALTER EXTERNAL DATA SOURCE , чтобы указать новое расположение.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
-
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа. - Если
TYPE
=BLOB_STORAGE
, учетные данные необходимо создавать, используяSHARED ACCESS SIGNATURE
в качестве удостоверения. -
TYPE
= ЗначениеBLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, еслиTYPE
=BLOB_STORAGE
. - При подключении к службе хранилища Azure с помощью
wasb
илиwasbs
проверки подлинности необходимо выполнить проверку подлинности с помощью ключа учетной записи хранения, а не с подписанным URL-адресом (SAS). - Если
TYPE
=HADOOP
, учетные данные следует создавать с использованием ключа учетной записи хранения в качестве значенияSECRET
.
Существует несколько способов создания подписанного URL-адреса:
Маркер SAS можно создать, перейдя на портал Azure Your_Storage_Account> —< подписанный> URL-адрес>> . Настройка разрешений —> создание SAS и строки подключения. Дополнительные сведения см. в статье "Создание подписанного URL-адреса".
Вы можете создать и настроить SAS с помощью обозревателя службы хранилища Azure.
Маркер SAS можно создать программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = * [ HADOOP | BLOB_STORAGE ] *
Указывает тип настраиваемого внешнего источника данных. Этот параметр не всегда является обязательным и должен указываться только при подключении к Cloudera CDH, Hortonworks HDP, учетной записи службы хранилища Azure или Azure Data Lake Storage 2-го поколения.
- Используйте
HADOOP
, если внешний источник данных — Cloudera CDH, Hortonworks HDP, учетная запись службы хранилища Azure или Azure Data Lake Storage 2-го поколения. - Используйте
BLOB_STORAGE
при выполнении пакетных операций из учетной записи службы хранилища Azure с использованием инструкций BULK INSERT или OPENROWSET. Появилось в SQL Server 2017 (14.x). ИспользуйтеHADOOP
при попытке использоватьCREATE EXTERNAL TABLE
службу хранилища Azure.
Примечание.
Параметр TYPE
должен иметь значение HADOOP
даже при доступе к службе хранилища Azure.
Пример использования TYPE
= HADOOP
для загрузки данных из учетной записи хранения Azure см. в статье "Создание внешнего источника данных для доступа к данным в службе хранилища Azure" с помощью интерфейса wasb://
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:порт]'
Настройте это необязательное значение только при подключении к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Полный список поддерживаемых версий Hadoop см. в разделе "Конфигурация подключения PolyBase" (Transact-SQL).
Если RESOURCE_MANAGER_LOCATION
определен, оптимизатор запросов будет принимать решение на основе затрат для повышения производительности. Задание MapReduce можно использовать, чтобы передать вычисления в Hadoop. Указание RESOURCE_MANAGER_LOCATION
может значительно сократить объем данных, передаваемых между Hadoop и SQL Server, повышая производительность запросов.
Если значение для Resource Manager не задано, отправка вычислений в Hadoop для запросов PolyBase отключена. См. конкретный пример и дальнейшие рекомендации в разделе Создание внешнего источника данных для ссылки на Hadoop с поддержкой передачи.
Значение RESOURCE_MANAGER_LOCATION
не проверяется при создании внешнего источника данных. Ввод неправильного значения может привести к сбою запроса во время выполнения при попытке принудительного нажатия, так как указанное значение не сможет устранить.
Для корректной работы PolyBase с внешним источником данных Hadoop необходимо открыть порты для следующих компонентов кластера Hadoop:
- Порты HDFS
- NameNode
- DataNode
- Resource Manager
- Отправка задания
- Журнал заданий
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к Hadoop (hadoop connectivity).
Подключение к Hadoop | Порт по умолчанию диспетчера ресурсов |
---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
В следующей таблице показаны порты по умолчанию для этих компонентов. Существует зависимость версий Hadoop, а также возможность пользовательской конфигурации, которая не использует назначение портов по умолчанию.
Компонент кластера Hadoop | Порт по умолчанию |
---|---|
NameNode | 8020 |
DataNode (передача данных, порт IPC без привилегий) | 50010 |
DataNode (передача данных, привилегированный порт IPC) | 1019 |
Отправка заданий диспетчера ресурсов (Hortonworks 1.3) | 50300 |
Отправка заданий диспетчера ресурсов (Cloudera 4.3) | 8021 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.0 в Windows, Cloudera 5.x в Linux) | 8032 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.x и 3.0 в Windows, Hortonworks 2.1–3 в Linux) | 8050 |
Журнал заданий диспетчера ресурсов | 10020 |
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Маркер SAS с типом HADOOP
не поддерживается. Поддерживается только с типом BLOB_STORAGE
, если используется ключ доступа учетной записи хранения. Попытка создать внешний источник данных с типом HADOOP
и использованием учетных данных SAS может завершиться сбоем со следующим сообщением об ошибке:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Примеры
Внимание
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
А. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
В. Создание внешнего источника данных для ссылки на Hadoop с включенной отправкой
Укажите параметр RESOURCE_MANAGER_LOCATION
, чтобы включить принудительную передачу вычислений в Hadoop для запросов PolyBase. После включения PolyBase принимает решение на основе затрат для определения того, должны ли вычисления запроса быть переданы в Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8020',
TYPE = HADOOP,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
В. Создание внешнего источника данных для ссылки на Hadoop с защитой Kerberos
Чтобы проверить, защищен ли кластер Hadoop протоколом Kerberos, проверьте значение свойства hadoop.security.authentication
в файле Hadoop core-site.xml. Чтобы сослаться на кластер Hadoop с защитой Kerberos, необходимо указать учетные данные с областью действия "база данных", которые содержат ваше имя пользователя и пароль Kerberos. Главный ключ базы данных используется для шифрования секрета учетных данных с областью действия "база данных".
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
TYPE = HADOOP,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Д. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных представляет собой учетную запись службы хранилища Azure v2 под названием logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. При подключении к службе хранилища Azure с помощью wasb
или wasbs
проверки подлинности необходимо выполнить проверку подлинности с помощью ключа учетной записи хранения, а не с подписанным URL-адресом (SAS).
В этом примере показано, как создать учетные данные с областью действия "база данных" для аутентификации в учетной записи службы хранилище Azure v2. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; эти данные не используются для проверки подлинности в службе хранилища Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
Примеры: массовые операции
Внимание
Не следует добавлять /, имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
Е. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2017 (14.x) и более поздних версий.
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или OPENROWSET. Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_storage_account_key>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices,
TYPE = BLOB_STORAGE
);
Реализация этого примера доступна в разделе BULK INSERT.
Связанный контент
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- Создание полномочий, привязанных к базе данных (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Использование подписанных URL-адресов
- Конфигурация подключения PolyBase (Transact-SQL)
Обзор: SQL Server 2019
Область применения: SQL Server 2019 (15.x)
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация данных и загрузка данных с помощью PolyBase в SQL Server
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
Примечание.
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте селектор, чтобы выбрать соответствующую версию.
Сведения о возможностях SQL Server 2022 (16.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Примечание.
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте селектор, чтобы выбрать соответствующую версию.
Сведения о возможностях SQL Server 2022 (16.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Соглашения о синтаксисе Transact-SQL
Синтаксис для SQL Server 2019
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
[ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' ]
)
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:p ort]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
Cloudera CDH или Hortonworks HDP | hdfs |
<Namenode>[:port] |
С SQL Server 2016 (13.x) по SQL Server 2019 (15.x) | Анонимная или обычная проверка подлинности |
Учетная запись хранения Azure (v2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Начиная с SQL Server 2016 (13.x) Иерархическое пространство имен не поддерживается |
Ключ учетной записи службы хранилища Azure |
SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Начиная с SQL Server 2019 (15.x) | Поддерживается только проверка подлинности SQL |
Оракул | oracle |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
Teradata | teradata |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
MongoDB или API Cosmos DB для MongoDB | mongodb |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
Базовый протокол ODBC | odbc |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) — только Windows | Только обычная проверка подлинности |
массовые операции | https |
<storage_account>.blob.core.windows.net/<container> |
Начиная с SQL Server 2017 (14.x) | Подписанный URL-адрес (SAS) |
Azure Data Lake Storage 2-го поколения | abfs[s] |
abfss://<container>@<storage _account>.dfs.core.windows.net |
Начиная с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 и далее. | Storage Access Key (Ключ доступа к хранилищу) |
Пул данных Кластеров больших данных SQL Server | sqldatapool |
sqldatapool://controller-svc/default |
Поддерживается только в Кластерах больших данных SQL Server 2019 | Только обычная проверка подлинности |
Пул носителей в Кластерах больших данных SQL Server | sqlhdfs |
sqlhdfs://controller-svc/default |
Поддерживается только в Кластерах больших данных SQL Server 2019 | Только обычная проверка подлинности |
Путь к расположению:
-
<Namenode>
— имя компьютера, URI службы имен или IP-адресNamenode
в кластере Hadoop. PolyBase необходимо разрешить любые DNS-имена, используемые в кластере Hadoop. -
port
: порт, который прослушивает внешний источник данных. В Hadoop порт можно найти, используя параметр конфигурацииfs.defaultFS
. Значение по умолчанию — 8020. -
<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно. -
<storage_account>
: имя учетной записи хранения ресурса Azure. -
<server_name>
: имя узла. -
<instance_name>
: имя экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
- Соединитель
sqlserver
можно использовать для подключения SQL Server 2019 (15.x) к другому SQL Server или к База данных SQL Azure. - Укажите
Driver={<Name of Driver>}
при подключении черезODBC
. -
wasbs
иabfss
необязательны, но рекомендуются к использованию в SQL Server 2019 (15.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL. - API
abfs
илиabfss
поддерживаются при доступе к учетным записям хранения Azure с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 (CU11). Дополнительные сведения см. в разделе Драйвер Azure Blob Filesystem (ABFS). - Параметр иерархического пространства имен для учетных записей службы хранилища Azure (V2) с
abfs[s]
поддерживается с помощью Azure Data Lake Storage 2-го поколения, начиная с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 (CU11) и выше. В противном случае параметр иерархического пространства имен не поддерживается и должен быть отключен. - Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, выполните инструкцию ALTER EXTERNAL DATA SOURCE , чтобы указать новое расположение. - Типы
sqlhdfs
иsqldatapool
поддерживаются для подключения между главным экземпляром и пулом носителей кластера больших данных. Для Cloudera CDH или Hortonworks HDP следует использоватьhdfs
. Дополнительные сведения об использованииsqlhdfs
для запросов пулов носителей кластеров больших данных SQL Server см. в статье Запрос данных HDFS в кластере больших данных SQL Server 2019. - Поддержка SQL Server для внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) прекращена и не включена в SQL Server 2022 (16.x) и более поздних версий. Дополнительные сведения см. в разделе Параметры больших данных на платформе Microsoft SQL Server.
CONNECTION_OPTIONS = пара "ключ-значение"
Указано для SQL Server 2019 (15.x) и более поздних версий. Указывает дополнительные параметры при подключении через ODBC
к внешнему источнику данных. Чтобы использовать несколько параметров подключения, укажите их через точку с запятой.
Применяется к универсальным ODBC
-соединениям и ко встроенным соединителям ODBC
для SQL Server, Oracle, Teradata, MongoDB и API Azure Cosmos DB для MongoDB.
key_value_pair
— это ключевое слово и значение для конкретного параметра соединения. Доступные ключевые слова и значения зависят от типа внешнего источника данных. Имя драйвера необходимо, но существуют и другие параметры, такие как APP='<your_application_name>'
или ApplicationIntent= ReadOnly|ReadWrite
, которые полезно задать, так как они могут помочь в устранении неполадок.
Возможные пары "ключ-значение" зависят от поставщика для внешнего источника данных. Дополнительные сведения о каждом поставщике см. в разделе CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Начиная с SQL Server 2019 (15.x) накопительного обновления 19, были представлены дополнительные ключевые слова для поддержки файлов TNS Oracle:
- Ключевое слово
TNSNamesFile
указывает файловый путь кtnsnames.ora
файлу, расположенному на сервере Oracle. - Ключевое слово
ServerName
указывает псевдоним, используемый внутриtnsnames.ora
, который будет использоваться для замены имени узла и порта.
Pushdown = ON | OFF
Указано только для SQL Server 2019 (15.x). Указывает, могут ли вычисления быть переданы во внешний источник данных. По умолчанию задано параметр ON.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение отправки на уровне запроса достигается с помощью указания EXTERNALPUSHDOWN.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
-
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа. - Если
TYPE
=BLOB_STORAGE
, учетные данные необходимо создавать, используяSHARED ACCESS SIGNATURE
в качестве удостоверения. -
TYPE
= ЗначениеBLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, еслиTYPE
=BLOB_STORAGE
.
Существует несколько способов создания подписанного URL-адреса:
Маркер SAS можно создать, перейдя на портал Azure Your_Storage_Account> —< подписанный> URL-адрес>> . Настройка разрешений —> создание SAS и строки подключения. Дополнительные сведения см. в статье "Создание подписанного URL-адреса".
Вы можете создать и настроить SAS с помощью обозревателя службы хранилища Azure.
Маркер SAS можно создать программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = * [ HADOOP | BLOB_STORAGE ] *
Указывает тип настраиваемого внешнего источника данных. Этот параметр не всегда является обязательным и должен указываться только при подключении к Cloudera CDH, Hortonworks HDP, учетной записи службы хранилища Azure или Azure Data Lake Storage 2-го поколения.
- В SQL Server 2019 (15.x) не указывайте TYPE, если не выполняется подключение к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure.
- Используйте
HADOOP
, если внешний источник данных — Cloudera CDH, Hortonworks HDP, учетная запись службы хранилища Azure или Azure Data Lake Storage 2-го поколения. - Используйте
BLOB_STORAGE
при выполнении пакетных операций из учетной записи службы хранилища Azure с использованием инструкций BULK INSERT или OPENROWSET с SQL Server 2017 (14.x). ИспользуйтеHADOOP
, если планируете создать внешнюю таблицу для службы хранилища Azure с помощью команды CREATE EXTERNAL TABLE. - Поддержка SQL Server для внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) прекращена и не включена в SQL Server 2022 (16.x) и более поздних версий. Дополнительные сведения см. в разделе Параметры больших данных на платформе Microsoft SQL Server.
Пример использования TYPE
= HADOOP
для загрузки данных из учетной записи хранения Azure см. в статье "Создание внешнего источника данных для доступа к данным в службе хранилища Azure" с помощью интерфейса wasb://.
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:порт]'
В SQL Server 2019 (15.x) не указывайте RESOURCE_MANAGER_LOCATION, если не выполняется подключение к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure.
Настройте это необязательное значение только при подключении к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Полный список поддерживаемых версий Hadoop см. в разделе "Конфигурация подключения PolyBase".
RESOURCE_MANAGER_LOCATION
При определении оптимизатор запросов принимает решение на основе затрат для повышения производительности. Задание MapReduce можно использовать, чтобы передать вычисления в Hadoop. Указание RESOURCE_MANAGER_LOCATION
может значительно сократить объем данных, передаваемых между Hadoop и SQL Server, повышая производительность запросов.
Если значение для Resource Manager не задано, отправка вычислений в Hadoop для запросов PolyBase отключена. См. конкретный пример и дальнейшие рекомендации в разделе Создание внешнего источника данных для ссылки на Hadoop с поддержкой передачи.
Значение RESOURCE_MANAGER_LOCATION не проверяется при создании внешнего источника данных. Ввод неправильного значения может привести к сбою запроса во время выполнения при попытке принудительного нажатия, так как указанное значение не сможет устранить.
Для корректной работы PolyBase с внешним источником данных Hadoop необходимо открыть порты для следующих компонентов кластера Hadoop:
- Порты HDFS
- NameNode
- DataNode
- Resource Manager
- Отправка задания
- Журнал заданий
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к Hadoop (hadoop connectivity).
Подключение к Hadoop | Порт по умолчанию диспетчера ресурсов |
---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
В следующей таблице показаны порты по умолчанию для этих компонентов. Существует зависимость версий Hadoop, а также возможность пользовательской конфигурации, которая не использует назначение портов по умолчанию.
Компонент кластера Hadoop | Порт по умолчанию |
---|---|
NameNode | 8020 |
DataNode (передача данных, порт IPC без привилегий) | 50010 |
DataNode (передача данных, привилегированный порт IPC) | 1019 |
Отправка заданий диспетчера ресурсов (Hortonworks 1.3) | 50300 |
Отправка заданий диспетчера ресурсов (Cloudera 4.3) | 8021 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.0 в Windows, Cloudera 5.x в Linux) | 8032 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.x и 3.0 в Windows, Hortonworks 2.1–3 в Linux) | 8050 |
Журнал заданий диспетчера ресурсов | 10020 |
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
При подключении к хранилищу или пулу данных в кластере больших данных SQL Server 2019 учетные данные пользователя передаются через серверную систему. Создайте имена входа в пуле данных, чтобы включить сквозную проверку подлинности.
Маркер SAS с типом HADOOP
не поддерживается. Поддерживается только с типом BLOB_STORAGE
, если используется ключ доступа учетной записи хранения. Попытка создать внешний источник данных с типом HADOOP
и использованием учетных данных SAS может завершиться сбоем со следующим сообщением об ошибке:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Примеры
Внимание
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
А. Создание внешнего источника данных в SQL Server 2019 для ссылки на Oracle
Чтобы создать внешний источник данных, ссылающийся на Oracle, убедитесь, что у вас есть учетные данные уровня базы данных. Кроме того, вы можете включить или отключить принудительное отключение вычислений для этого источника данных.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CREDENTIAL = OracleProxyAccount,
PUSHDOWN = ON
);
Внешний источник данных для Oracle также может при необходимости использовать проверку подлинности прокси для детализированного управления доступом. Пользователя прокси-сервера можно настроить таким образом, чтобы он имел ограниченный доступ по сравнению с олицетворением пользователя.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Кроме того, можно использовать проверку подлинности TNS.
Начиная с SQL Server 2019 (15.x) накопительного обновления 19, CREATE EXTERNAL DATA SOURCE
теперь поддерживает использование TNS-файлов при подключении к Oracle.
Параметр CONNECTION_OPTIONS
был развернут и теперь используется TNSNamesFile
и ServerName
в качестве переменных для просмотра tnsnames.ora
файла и установления соединения с сервером.
В приведенном ниже примере во время выполнения SQL Server будет искать tnsnames.ora
расположение файла, заданное и искать узел и сетевой порт, указанный TNSNamesFile
в ServerName
файле.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
Дополнительные примеры для других источников данных, таких как MongoDB, см. в разделе Настройка PolyBase для доступа к внешним данным в MongoDB.
В. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
В. Создание внешнего источника данных для ссылки на Hadoop с включенной отправкой
Укажите параметр RESOURCE_MANAGER_LOCATION
, чтобы включить принудительную передачу вычислений в Hadoop для запросов PolyBase. После включения PolyBase принимает решение на основе затрат для определения того, должны ли вычисления запроса быть переданы в Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8020',
TYPE = HADOOP,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Д. Создание внешнего источника данных для ссылки на Hadoop с защитой Kerberos
Чтобы проверить, защищен ли кластер Hadoop протоколом Kerberos, проверьте значение свойства hadoop.security.authentication
в файле Hadoop core-site.xml. Чтобы сослаться на кластер Hadoop с защитой Kerberos, необходимо указать учетные данные с областью действия "база данных", которые содержат ваше имя пользователя и пароль Kerberos. Главный ключ базы данных используется для шифрования секрета учетных данных с областью действия "база данных".
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
TYPE = HADOOP,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Е. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных представляет собой учетную запись службы хранилища Azure v2 под названием logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. При подключении к службе хранилища Azure с помощью wasb
или wasbs
проверки подлинности необходимо выполнить проверку подлинности с помощью ключа учетной записи хранения, а не с подписанным URL-адресом (SAS).
В этом примере показано, как создать учетные данные с областью действия "база данных" для аутентификации в учетной записи службы хранилище Azure v2. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; эти данные не используются для проверки подлинности в службе хранилища Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
F. Создание внешнего источника данных для ссылки на именованный экземпляр SQL Server через соединение Polybase
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных, ссылающийся на именованный экземпляр SQL Server, используйте CONNECTION_OPTIONS
для указания имени экземпляра.
В следующем примере WINSQL2019
имя узла и SQL2019
имя экземпляра.
'Server=%s\SQL2019'
— пара "ключ-значение".
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Кроме того, можно использовать порт для подключения к экземпляру SQL Server по умолчанию.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
G. Создание внешнего источника данных для ссылки на вторичную реплику для чтения группы доступности Always On
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных с ссылкой на вторичную реплику SQL Server для чтения, используйте CONNECTION_OPTIONS
, чтобы указать ApplicationIntent=ReadOnly
. Кроме того, необходимо задать базу данных доступности как Database={dbname}
в CONNECTION_OPTIONS
, либо задать базу данных доступности в качестве базы данных по умолчанию для имени входа, используемого для учетных данных в области базы данных. Это необходимо сделать во всех репликах доступности группы доступности.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Затем создайте новый внешний источник данных.
Независимо от того, включена Database=dbname
ли база данных доступности в CONNECTION_OPTIONS
качестве базы данных по умолчанию для входа в учетные данные с областью базы данных, необходимо по-прежнему указать имя базы данных с помощью трех частей в инструкции CREATE EXTERNAL TABLE в параметре LOCATION. Пример см. в разделе CREATE EXTERNAL TABLE.
В следующем примере WINSQL2019AGL
используется имя прослушивателя группы доступности и dbname
имя базы данных, предназначенной для инструкции CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Можно продемонстрировать поведение перенаправления группы доступности, указав ApplicationIntent
и создав внешнюю таблицу в системном представлении sys.servers
. В следующем примере скрипта создаются два внешних источника данных, для каждого из которых создается одна внешняя таблица. Используйте представления, чтобы проверить, какой сервер отвечает на подключение. Похожие результаты можно достичь с помощью маршрутизации только для чтения. Дополнительные сведения см. в статье Настройка маршрутизации только для чтения в группе доступности Always On.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
В базе данных группы доступности создайте представление для возврата sys.servers
и имени локального экземпляра, что поможет определить, какая реплика отвечает на запрос. Дополнительные сведения см. в статье sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Затем создайте внешнюю таблицу в исходном экземпляре:
CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO
Примеры: массовые операции
Внимание
Не следует добавлять /, имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
H. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2017 (14.x) и SQL Server 2019 (15.x)
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или OPENROWSET. Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices,
TYPE = BLOB_STORAGE
);
Реализация этого примера доступна в разделе BULK INSERT.
И. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса abfs://.
Область применения: SQL Server 2019 (15.x) с накопительным пакетом обновления 11 (CU11) и более поздних версий
В этом примере внешний источник данных является учетной записью Azure Data Lake Storage 2-го поколения logs
с использованием драйвера Azure Blob File System (ABFS). Контейнер хранилища называется daily
. Внешний источник данных Azure Data Lake Storage 2-го поколения предназначен только для передачи данных, а pushdown предиката не поддерживается.
В этом примере показано, как создать учетные данные с областью действия "база данных" для проверки подлинности в учетной записи Azure Data Lake Storage 2-го поколения. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; эти данные не используются для проверки подлинности в службе хранилища Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abfss://daily@logs.dfs.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
J. Создание внешнего источника данных с помощью универсального ODBC для PostgreSQL
Как и в предыдущих примерах, сначала создайте главный ключ базы данных и учетные данные базы данных с областью действия. Учетные данные для базы данных будут использоваться для внешнего источника данных. В этом примере также предполагается, что на сервере устанавливается универсальный поставщик данных ODBC для PostgreSQL.
В этом примере универсальный поставщик данных ODBC используется для подключения к серверу базы данных PostgreSQL в той же сети, где полное доменное имя сервера POSTGRES1
PostgreSQL используется по умолчанию для TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Связанный контент
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- Создание полномочий, привязанных к базе данных (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Использование подписанных URL-адресов
- Конфигурация подключения PolyBase (Transact-SQL)
Обзор: SQL Server 2022
Область применения: SQL Server 2022 (16.x) и более поздних версий
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация данных и загрузка данных с помощью PolyBase в SQL Server
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
Примечание.
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте селектор, чтобы выбрать соответствующую версию. Это содержимое относится к SQL Server 2022 (16.x) и более поздним версиям.
Синтаксис для SQL Server 2022
Синтаксис для SQL Server 2022 и более поздних версий
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:p ort]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
Учетная запись хранения Azure (версии 2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ или abs://<storage_account_name>.blob.core.windows.net/<container_name> |
Начиная с SQL Server 2022 (16.x) Поддерживается иерархическое пространство имен |
Подписанный URL-адрес (SAS) |
Azure Data Lake Storage 2-го поколения | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ или adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Начиная с SQL Server 2022 (16.x) | Подписанный URL-адрес (SAS) |
SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Начиная с SQL Server 2019 (15.x) | Поддерживается только проверка подлинности SQL |
Оракул | oracle |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
Teradata | teradata |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
MongoDB или API Cosmos DB для MongoDB | mongodb |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
Базовый протокол ODBC | odbc |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) — только Windows | Только обычная проверка подлинности |
массовые операции | https |
<storage_account>.blob.core.windows.net/<container> |
Начиная с SQL Server 2017 (14.x) | Подписанный URL-адрес (SAS) |
S3-совместимое хранилище объектов | s3 |
— совместимое с S3: s3://<server_name>:<port>/ — AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder> или s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
Начиная с SQL Server 2022 (16.x) | Базовый или сквозной (STS) * |
* Должны быть учетными данными в области базы данных, где удостоверение жестко закодировано IDENTITY = 'S3 Access Key'
, а аргумент SECRET находится в формате = '<AccessKeyID>:<SecretKeyID>'
или использует сквозную авторизацию (STS). Дополнительные сведения см. в статье Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов.
Путь к расположению:
-
port
: порт, который прослушивает внешний источник данных. Необязательно во многих случаях в зависимости от конфигурации сети. -
<container_name>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно. -
<storage_account>
: имя учетной записи хранения ресурса Azure. -
<server_name>
: имя узла. -
<instance_name>
: имя экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре. -
<ip_address>:<port>
= только для совместимого с S3 хранилища объектов (начиная с SQL Server 2022 (16.x)), конечная точка и порт, используемые для подключения к совместимому с S3 хранилищу. -
<bucket_name>
= только для хранилища объектов, совместимого с S3 (начиная с SQL Server 2022 (16.x)), относясь к платформе хранения. -
<region>
= только для хранилища объектов, совместимого с S3 (начиная с SQL Server 2022 (16.x)), относясь к платформе хранения. -
<folder>
= часть пути к хранилищу в URL-адресе хранилища.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Соединитель
sqlserver
можно использовать для подключения SQL Server 2019 (15.x) к другому SQL Server или к База данных SQL Azure. - Укажите
Driver={<Name of Driver>}
при подключении черезODBC
. - В SQL Server 2022 (16.x) поддерживается функция иерархического пространства имен для учетных записей хранения Azure (версии 2) с использованием префикса
adls
через Azure Data Lake Storage 2-го поколения.
- Поддержка SQL Server для внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) не включены в SQL Server 2022 (16.x). Нет необходимости использовать аргумент TYPE в SQL Server 2022 (16.x).
- Дополнительные сведения о совместимом с S3 хранилище объектов и PolyBase начиная с SQL Server 2022 (16.x) см. в статье Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов. Пример запроса файла Parquet в совместимом с S3 хранилище объектов см. в разделе Виртуализация файла Parquet в совместимом с S3 хранилище объектов с помощью PolyBase.
- В отличие от предыдущих версий, в SQL Server 2022 (16.x) префикс
wasb[s]
для учетной записи хранения Azure (версии 2) изменен наabs
. - В отличие от предыдущих версий, в SQL Server 2022 (16.x) префикс
abfs[s]
для Azure Data Lake Storage 2-го поколения изменен наadls
. - Пример использования PolyBase для виртуализации CSV-файла в службе хранилища Azure см. в статье Виртуализация CSV-файла с помощью PolyBase.
- Пример использования PolyBase для виртуализации таблицы Delta в ADLS 2-го поколения см. в Виртуализация таблицы Delta с помощью PolyBase.
- SQL Server 2022 (16.x) полностью поддерживает два формата URL-адресов для служба хранилища Azure учетной записи версии 2 (
abs
) и Azure Data Lake 2-го поколения ().adls
- Путь LOCATION может использовать форматы:
<container>@<storage_account_name>..
(рекомендуется) или<storage_account_name>../<container>
. Например:- служба хранилища Azure учетная запись версии 2:
abs://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) илиabs://<storage_account_name>.blob.core.windows.net/<container>
.
- служба хранилища Azure учетная запись версии 2:
- Путь LOCATION может использовать форматы:
- Azure Data Lake 2-го поколения поддерживает:
adls://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) илиadls://<storage_account_name>.dfs.core.windows.net/<container>
.
CONNECTION_OPTIONS = пара "ключ-значение"
Указано для SQL Server 2019 (15.x) и более поздних версий. Указывает дополнительные параметры при подключении через ODBC
к внешнему источнику данных. Чтобы использовать несколько параметров подключения, укажите их через точку с запятой.
Применяется к универсальным ODBC
-соединениям и ко встроенным соединителям ODBC
для SQL Server, Oracle, Teradata, MongoDB и API Azure Cosmos DB для MongoDB.
key_value_pair
— это ключевое слово и значение для конкретного параметра соединения. Доступные ключевые слова и значения зависят от типа внешнего источника данных. Имя драйвера необходимо, но существуют и другие параметры, такие как APP='<your_application_name>'
или ApplicationIntent= ReadOnly|ReadWrite
, которые полезно задать, так как они могут помочь в устранении неполадок.
Возможные пары "ключ-значение" зависят от драйвера. Дополнительные сведения о каждом поставщике см. в разделе CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Начиная с SQL Server 2022 (16.x) накопительного обновления 2, были введены дополнительные ключевые слова для поддержки файлов TNS Oracle:
- Ключевое слово
TNSNamesFile
указывает файловый путь кtnsnames.ora
файлу, расположенному на сервере Oracle. - Ключевое слово
ServerName
указывает псевдоним, используемый внутриtnsnames.ora
, который будет использоваться для замены имени узла и порта.
PUSHDOWN = ON | ОТ
Область применения: SQL Server 2019 (15.x) и более поздних версий. Указывает, могут ли вычисления быть переданы во внешний источник данных. Параметр включен по умолчанию.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение отправки на уровне запроса достигается с помощью указания EXTERNALPUSHDOWN.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
-
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа. - При доступе к учетной записи служба хранилища Azure (версии 2) или Azure Data Lake Storage 2-го поколения
IDENTITY
необходимоSHARED ACCESS SIGNATURE
иметь значение. - Пример см. в разделе "Создание внешнего источника данных" для выполнения массовых операций и получения данных из служба хранилища Azure в База данных SQL.
Существует несколько способов создания подписанного URL-адреса:
Маркер SAS можно создать, перейдя на портал Azure Your_Storage_Account> —< подписанный> URL-адрес>> . Настройка разрешений —> создание SAS и строки подключения. Дополнительные сведения см. в статье "Создание подписанного URL-адреса".
Вы можете создать и настроить SAS с помощью обозревателя службы хранилища Azure.
Маркер SAS можно создать программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание, запись и запись Для Хранилище BLOB-объектов Azure и Azure Data Lake 2-го поколения:
- Разрешенные службы:
Blob
необходимо выбрать для создания маркера SAS
- Разрешенные службы:
Разрешенные типы ресурсов:
Container
необходимоObject
выбрать для создания маркера SAS.
Пример использования CREDENTIAL
совместимого с S3 хранилища объектов и PolyBase см. в разделе Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Обновление до SQL Server 2022
Начиная с SQL Server 2022 (16.x), внешние источники данных Hadoop больше не поддерживаются. Необходимо вручную воссоздать внешние источники данных, созданные ранее с помощью TYPE = HADOOP
, и внешние таблицы, которые используют этот внешний источник данных.
Пользователям также потребуется настроить внешние источники данных для использования новых соединителей при подключении к службе хранилища Azure.
Внешний источник данных | С дт. | По |
---|---|---|
Хранилище BLOB-объектов Azure | wasb[s] |
abs |
ADLS 2-го поколения | abfs[s] |
adls |
Примеры
Внимание
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
А. Создание внешнего источника данных в SQL Server для ссылки на Oracle
Чтобы создать внешний источник данных, ссылающийся на Oracle, убедитесь, что у вас есть учетные данные уровня базы данных. Кроме того, вы можете включить или отключить принудительное отключение вычислений для этого источника данных.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CREDENTIAL = OracleProxyAccount,
PUSHDOWN = ON
);
При необходимости внешний источник данных в Oracle может использовать проверку подлинности прокси для обеспечения точного контроля доступа. Пользователя прокси-сервера можно настроить таким образом, чтобы он имел ограниченный доступ по сравнению с олицетворением пользователя.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Кроме того, можно выполнить проверку подлинности с помощью TNS.
Начиная с SQL Server 2022 (16.x) накопительного обновления 2, CREATE EXTERNAL DATA SOURCE
теперь поддерживает использование TNS-файлов при подключении к Oracle.
Параметр CONNECTION_OPTIONS
был развернут и теперь используется TNSNamesFile
и ServerName
в качестве переменных для просмотра tnsnames.ora
файла и установления соединения с сервером.
В приведенном ниже примере во время выполнения SQL Server будет искать tnsnames.ora
расположение файла, заданное и искать узел и сетевой порт, указанный TNSNamesFile
в ServerName
файле.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
В. Создание внешнего источника данных для ссылки на именованный экземпляр SQL Server через соединение Polybase
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных, ссылающийся на именованный экземпляр SQL Server, используйте CONNECTION_OPTIONS
для указания имени экземпляра.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в разделе CREATE MASTER KEY (Transact-SQL). В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
В следующем примере WINSQL2019
имя узла и SQL2019
имя экземпляра.
'Server=%s\SQL2019'
— пара "ключ-значение".
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Кроме того, можно использовать порт для подключения к экземпляру SQL Server по умолчанию.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
В. Создание внешнего источника данных для ссылки на вторичную реплику для чтения группы доступности Always On
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных с ссылкой на вторичную реплику SQL Server для чтения, используйте CONNECTION_OPTIONS
, чтобы указать ApplicationIntent=ReadOnly
. Кроме того, необходимо задать базу данных доступности как Database={dbname}
в CONNECTION_OPTIONS
, либо задать базу данных доступности в качестве базы данных по умолчанию для имени входа, используемого для учетных данных в области базы данных. Это необходимо сделать во всех репликах доступности группы доступности.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в разделе CREATE MASTER KEY (Transact-SQL). В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Затем создайте новый внешний источник данных.
Независимо от того, включена Database=dbname
ли база данных доступности в CONNECTION_OPTIONS
качестве базы данных по умолчанию для входа в учетные данные с областью базы данных, необходимо по-прежнему указать имя базы данных с помощью трех частей в инструкции CREATE EXTERNAL TABLE в параметре LOCATION. Пример см. в разделе CREATE EXTERNAL TABLE.
В следующем примере WINSQL2019AGL
используется имя прослушивателя группы доступности и dbname
имя базы данных, предназначенной для инструкции CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Можно продемонстрировать поведение перенаправления группы доступности, указав ApplicationIntent
и создав внешнюю таблицу в системном представлении sys.servers
. В следующем примере скрипта создаются два внешних источника данных, для каждого из которых создается одна внешняя таблица. Используйте представления, чтобы проверить, какой сервер отвечает на подключение. Похожие результаты можно достичь с помощью маршрутизации только для чтения. Дополнительные сведения см. в статье Настройка маршрутизации только для чтения в группе доступности Always On.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
В базе данных группы доступности создайте представление для возврата sys.servers
и имени локального экземпляра, что поможет определить, какая реплика отвечает на запрос. Дополнительные сведения см. в статье sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Затем создайте внешнюю таблицу в исходном экземпляре:
CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO
Д. Создание внешнего источника данных для запроса файла Parquet в совместимое с S3 хранилище объектов с помощью PolyBase
Область применения: SQL Server 2022 (16.x) и более поздних версий
Следующий пример скрипта создает внешний источник данных s3_ds
в исходной пользовательской базе данных в SQL Server. Внешний источник данных ссылается на учетные данные на уровне базы данных s3_dc
.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>' -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Проверьте новый внешний источник данных с помощью sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Затем в следующем примере показано использование T-SQL для запроса файла parquet, хранящегося в хранилище объектов, совместимом с S3, с помощью запроса OPENROWSET. Дополнительные сведения см. в статье Виртуализация файла parquet в совместимом с S3 хранилище объектов с помощью PolyBase.
SELECT *
FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
Е. Создание внешнего источника данных с помощью универсального ODBC для PostgreSQL
Как и в предыдущих примерах, сначала создайте главный ключ базы данных и учетные данные базы данных с областью действия. Учетные данные для базы данных будут использоваться для внешнего источника данных. В этом примере также предполагается, что на сервере устанавливается универсальный поставщик данных ODBC для PostgreSQL.
В этом примере универсальный поставщик данных ODBC используется для подключения к серверу базы данных PostgreSQL в той же сети, где полное доменное имя сервера POSTGRES1
PostgreSQL используется по умолчанию для TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Хранилище Azure
Создание подписанного URL-адреса
Для хранилища BLOB-объектов Azure и Azure Data Lake Storage (ADLS) 2-го поколения поддерживаемый метод проверки подлинности — это подписанный URL-адрес (SAS). Один из простых способов создания маркера подписанного URL-адреса следует выполнить описанные ниже действия. Дополнительные сведения см. в разделе CREDENTIAL.
Перейдите к портал Azure и нужной учетной записи хранения.
Перейдите к нужному контейнеру в меню хранилища данных.
Выберите маркеры общего доступа.
Выберите соответствующее разрешение на основе требуемого действия:
Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание и запись Выберите дату окончания срока действия маркера.
Создание маркера и URL-адреса SAS.
Скопируйте маркер SAS.
F. Создание внешнего источника данных для доступа к данным в Хранилище BLOB-объектов Azure с помощью интерфейса abs://
Область применения: SQL Server 2022 (16.x) и более поздних версий
Начиная с SQL Server 2022 (16.x), необходимо использовать новый префикс abs
для учетной записи хранения Azure версии 2. Префикс abs
поддерживает проверку подлинности с помощью SHARED ACCESS SIGNATURE
. Префикс abs
заменяет wasb
из предыдущих версий. HADOOP больше не поддерживается, больше не требуется использовать TYPE = BLOB_STORAGE
.
Ключ учетной записи хранения Azure больше не является необходимым. Вместо этого используется токен SAS, что показано в следующем примере:
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
SECRET = '<Blob_SAS_Token>';
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredentialv2
);
Более подробный пример доступа к CSV-файлам, хранящимся в Хранилище BLOB-объектов Azure, см. в статье Virtualize CSV-файл с PolyBase.
G. Создание внешнего источника данных для доступа к данным в Azure Data Lake 2-го поколения
Область применения: SQL Server 2022 (16.x) и более поздних версий
Начиная с SQL Server 2022 (16.x), для Azure Data Lake 2-го поколения используется новый префикс adls
вместо abfs
из предыдущих версий. Префикс adls
также поддерживает маркер SAS в качестве метода проверки подлинности, как показано в этом примере:
--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = datalakegen2
);
Более подробный пример доступа к разностным файлам, хранящимся в Azure Data Lake 2-го поколения, см. в статье Virtualize delta table with PolyBase.
Примеры: массовые операции
Внимание
Не следует добавлять /, имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
H. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2022 (16.x) и более поздних версий.
Используйте следующий источник данных для массовых операций с помощью BULK INSERT (Transact-SQL) или OPENROWSET (Transact-SQL). Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AccessAzureInvoices,
);
Связанный контент
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- Создание полномочий, привязанных к базе данных (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Использование подписанных URL-адресов
- Конфигурация подключения PolyBase (Transact-SQL)
Обзор: SQL Server 2025
Область применения: предварительная версия SQL Server 2025 (17.x) и более поздние версии.
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация данных и загрузка данных с помощью виртуализации данных с PolyBase в SQL Server
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
Примечание.
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте раскрывающийся список селектора версий, чтобы выбрать соответствующую версию. Это содержимое относится к предварительной версии SQL Server 2025 (17.x) и более поздним версиям.
Синтаксис для SQL Server 2025 и более поздних версий
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:p ort]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
Учетная запись хранения Azure (версии 2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ или abs://<storage_account_name>.blob.core.windows.net/<container_name> |
Начиная с SQL Server 2022 (16.x) Поддерживается иерархическое пространство имен |
Подписанный URL-адрес (SAS) |
Azure Data Lake Storage 2-го поколения | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ или adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Начиная с SQL Server 2022 (16.x) | Подписанный URL-адрес (SAS) |
SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Начиная с SQL Server 2019 (15.x) | Поддерживается только проверка подлинности SQL |
Оракул | oracle |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
Teradata | teradata |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
MongoDB или API Cosmos DB для MongoDB | mongodb |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
Базовый протокол ODBC | odbc |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) — только Windows | Только обычная проверка подлинности |
массовые операции | https |
<storage_account>.blob.core.windows.net/<container> |
Начиная с SQL Server 2017 (14.x) | Подписанный URL-адрес (SAS) |
S3-совместимое хранилище объектов | s3 |
— совместимое с S3: s3://<server_name>:<port>/ — AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder> или s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
Начиная с SQL Server 2022 (16.x) | Базовый или сквозной (STS) 1 |
1 Должен быть учетными данными базы данных, где IDENTITY
жестко закодирован IDENTITY = 'S3 Access Key'
SECRET
и аргумент находится в формате = '<AccessKeyID>:<SecretKeyID>'
или используется сквозная авторизация (STS). Дополнительные сведения см. в статье Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов.
Путь к расположению:
Путь к расположению | Описание |
---|---|
port |
Порт, в который прослушивается внешний источник данных. Необязательно во многих случаях в зависимости от конфигурации сети. |
<container_name> |
Контейнер учетной записи хранения, владеющий данными. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно. |
<storage_account> |
Имя учетной записи хранения ресурса Azure. |
<server_name> |
Имя сервера. |
<instance_name> |
Имя именованного экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре. |
<ip_address>:<port>
1 |
Только для хранилища объектов, совместимого с S3, конечная точка и порт, используемые для подключения к хранилищу, совместимом с S3. |
<bucket_name>
1 |
Только для хранилища объектов, совместимого с S3, зависят от платформы хранения. |
<region>
1 |
Только для хранилища объектов, совместимого с S3, зависят от платформы хранения. |
<folder> |
Часть пути к хранилищу в URL-адресе хранилища. |
1 SQL Server 2022 (16.x) и более поздних версий.
Дополнительные примечания и инструкции при задании расположения:
Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
Соединитель
sqlserver
можно использовать для подключения SQL Server 2019 (15.x) к другому SQL Server или к База данных SQL Azure.Укажите
Driver={<Name of Driver>}
при подключении черезODBC
.Параметр иерархического пространства имен для учетных записей хранения Azure (V2) с помощью префикса
adls
поддерживается с помощью Azure Data Lake Storage 2-го поколения в SQL Server 2022 (16.x) и более поздних версиях.Поддержка SQL Server для внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) не включены в SQL Server 2022 (16.x) и более поздних версий. Нет необходимости использовать аргумент в предварительной
TYPE
версии SQL Server 2025 (17.x).Дополнительные сведения о хранилище объектов, совместимом с S3, и PolyBase в SQL Server 2022 (16.x) и более поздних версиях, см. в статье "Настройка PolyBase для доступа к внешним данным в хранилище объектов, совместимых с S3". Пример запроса файла Parquet в совместимом с S3 хранилище объектов см. в разделе Виртуализация файла Parquet в совместимом с S3 хранилище объектов с помощью PolyBase.
В SQL Server 2022 (16.x) и более поздних версиях:
Префикс, используемый для учетной записи хранения Azure версии 2, изменен на
wasb[s]
abs
Префикс, используемый для Azure Data Lake Storage 2-го поколения, изменился на
abfs[s]
adls
Пример использования PolyBase для виртуализации CSV-файла в службе хранилища Azure см. в статье Виртуализация CSV-файла с помощью PolyBase.
Пример использования PolyBase для виртуализации таблицы Delta в ADLS 2-го поколения см. в Виртуализация таблицы Delta с помощью PolyBase.
SQL Server 2022 (16.x) и более поздних версий полностью поддерживают два формата URL-адресов для учетной записи хранения Azure версии 2 (
abs
) и Azure Data Lake 2-го поколения ().adls
LOCATION
Путь может использовать форматы:<container>@<storage_account_name>..
(рекомендуется) или<storage_account_name>../<container>
. Рассмотрим пример.- служба хранилища Azure учетная запись версии 2:
abs://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) илиabs://<storage_account_name>.blob.core.windows.net/<container>
.
- служба хранилища Azure учетная запись версии 2:
Azure Data Lake 2-го поколения поддерживает:
adls://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) илиadls://<storage_account_name>.dfs.core.windows.net/<container>
.
CONNECTION_OPTIONS = пара "ключ-значение"
Область применения: SQL Server 2019 (15.x) и более поздних версий.
Указывает дополнительные параметры при подключении через ODBC
к внешнему источнику данных. Чтобы использовать несколько параметров подключения, укажите их через точку с запятой.
Применяется к универсальным ODBC
-соединениям и ко встроенным соединителям ODBC
для SQL Server, Oracle, Teradata, MongoDB и API Azure Cosmos DB для MongoDB.
key_value_pair
— это ключевое слово и значение для конкретного параметра соединения. Доступные ключевые слова и значения зависят от типа внешнего источника данных. Имя драйвера необходимо, но существуют и другие параметры, такие как APP='<your_application_name>'
или ApplicationIntent= ReadOnly|ReadWrite
, которые полезно задать, так как они могут помочь в устранении неполадок.
Возможные пары "ключ-значение" зависят от драйвера. Дополнительные сведения о каждом поставщике см. в разделе CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Начиная с SQL Server 2022 (16.x) накопительного обновления 2, были введены дополнительные ключевые слова для поддержки файлов TNS Oracle:
- Ключевое слово
TNSNamesFile
указывает файловый путь кtnsnames.ora
файлу, расположенному на сервере Oracle. - Ключевое слово
ServerName
указывает псевдоним, используемый внутриtnsnames.ora
, который будет использоваться для замены имени узла и порта.
Параметры шифрования в предварительной версии SQL Server 2025 (17.x)
Начиная с предварительной версии SQL Server 2025 (17.x) при использовании sqlserver
в качестве источника данных драйвер Microsoft ODBC версии 18 для SQL Server является драйвером по умолчанию. Этот Encryption
параметр является обязательным (Yes
илиNo
Strict
) и TrustServerCertificate
доступен (Yes
илиNo
). Если Encryption
значение не указано, поведение по умолчанию — Encrypt=Yes;TrustServerCertificate=No;
и требуется сертификат сервера.
Чтобы подключиться с помощью протокола TDS 8.0, добавлен строгий режим (Encrypt=Strict
). В этом режиме необходимо установить сертификат доверенного сервера и всегда проверять (TrustServerCertificate игнорируется). Новое ключевое слово можно использовать для указания ожидаемого имени узла, HostnameInCertificate
найденного в сертификате, если он отличается от указанного сервера.
HostnameInCertificate
доступен во всех режимах шифрования и также применим, если включен параметр принудительного шифрования на стороне сервера, что приведет к тому, что драйвер проверяет сертификат в необязательных или обязательных режимах, если только не отключен.TrustServerCertificate
Дополнительные сведения о Encryption
параметрах, сертификатах сервера и TrustServerCertificate
функциях драйвера Microsoft ODBC для SQL Server в Windows.
Всегда следует использовать последний драйвер. Однако предварительная версия SQL Server 2025 (17.x) также поддерживает Microsoft ODBC Driver версии 17 для SQL Server для обеспечения обратной совместимости. Дополнительные сведения об изменении версии драйвера, используемой PolyBase, см. в статье " Изменение версии драйвера SQL Server для PolyBase".
PUSHDOWN = ON | ОТ
Область применения: SQL Server 2019 (15.x) и более поздних версий.
Указывает, могут ли вычисления быть переданы во внешний источник данных. Включен по умолчанию.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение параметра на уровне запроса достигается за счет указаний.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.При доступе к учетной записи служба хранилища Azure (версии 2) или Azure Data Lake Storage 2-го поколения
IDENTITY
необходимоSHARED ACCESS SIGNATURE
иметь значение.Пример см. в разделе "Создание внешнего источника данных" для выполнения массовых операций и получения данных из служба хранилища Azure в База данных SQL.
Существует несколько способов создания подписанного URL-адреса:
Вы можете создать маркер SAS, перейдя на портал><Azure Your_Storage_Account>>сигнатуру> общего доступаConfigure permissions>Create SAS и connection string. Дополнительные сведения см. в статье "Создание подписанного URL-адреса".
Вы можете создать и настроить SAS с помощью обозревателя службы хранилища Azure.
Маркер SAS можно создать программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
?
при настройкеSECRET
в качестве .Используйте допустимый срок действия (все даты указываются в формате UTC).
Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание, запись и запись Для Хранилище BLOB-объектов Azure и Azure Data Lake 2-го поколения:
- Разрешенные службы:
Blob
необходимо выбрать для создания маркера SAS
- Разрешенные службы:
Разрешенные типы ресурсов:
Container
необходимоObject
выбрать для создания маркера SAS.
Пример использования CREDENTIAL
совместимого с S3 хранилища объектов и PolyBase см. в разделе Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов.
Сведения о создании учетных данных в области базы данных см. в статье CREATE DATABASE SCOPED CREDENTIAL.
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Обновление до SQL Server 2025
В SQL Server 2022 (16.x) и более поздних версиях внешние источники данных Hadoop не поддерживаются. Необходимо вручную воссоздать внешние источники данных, созданные ранее, TYPE = HADOOP
и любую внешнюю таблицу, которая использует этот внешний источник данных.
Пользователям также потребуется настроить внешние источники данных для использования новых соединителей при подключении к службе хранилища Azure.
Внешний источник данных | С дт. | По |
---|---|---|
Хранилище BLOB-объектов Azure | wasb(s) | пресс |
ADLS 2-го поколения | abfs(s) | adls |
Примеры
Внимание
Сведения об установке и включении PolyBase см. в разделе "Установка PolyBase" в Windows.
А. Создание внешнего источника данных в SQL Server для ссылки на Oracle
Чтобы создать внешний источник данных, ссылающийся на Oracle, убедитесь, что у вас есть учетные данные уровня базы данных. Кроме того, вы можете включить или отключить принудительное отключение вычислений для этого источника данных.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username', SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
PUSHDOWN = ON,
CREDENTIAL = OracleProxyAccount
);
При необходимости внешний источник данных в Oracle может использовать проверку подлинности прокси для обеспечения точного контроля доступа. Пользователя прокси-сервера можно настроить таким образом, чтобы он имел ограниченный доступ по сравнению с олицетворением пользователя.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username', SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Кроме того, можно выполнить проверку подлинности с помощью TNS.
Начиная с SQL Server 2022 (16.x) накопительного обновления 2, CREATE EXTERNAL DATA SOURCE
теперь поддерживает использование TNS-файлов при подключении к Oracle.
Параметр CONNECTION_OPTIONS
был развернут и теперь используется TNSNamesFile
и ServerName
в качестве переменных для просмотра tnsnames.ora
файла и установления соединения с сервером.
В приведенном ниже примере во время выполнения SQL Server будет искать tnsnames.ora
расположение файла, заданное и искать узел и сетевой порт, указанный TNSNamesFile
в ServerName
файле.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
В. Создание внешнего источника данных для ссылки на именованный экземпляр SQL Server через соединение Polybase
Область применения: SQL Server 2019 (15.x) и более поздних версий.
Чтобы создать внешний источник данных, ссылающийся на именованный экземпляр SQL Server, используйте CONNECTION_OPTIONS
для указания имени экземпляра.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';
В следующем примере WINSQL2019
имя узла и SQL2019
имя экземпляра.
'Server=%s\SQL2019'
— пара "ключ-значение".
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Кроме того, можно использовать порт для подключения к экземпляру SQL Server по умолчанию.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
В. Создание внешнего источника данных для ссылки на вторичную реплику для чтения группы доступности Always On
Область применения: SQL Server 2019 (15.x) и более поздних версий.
Чтобы создать внешний источник данных с ссылкой на вторичную реплику SQL Server для чтения, используйте CONNECTION_OPTIONS
, чтобы указать ApplicationIntent=ReadOnly
. Кроме того, необходимо задать базу данных доступности как Database={dbname}
в CONNECTION_OPTIONS
, либо задать базу данных доступности в качестве базы данных по умолчанию для имени входа, используемого для учетных данных в области базы данных. Это необходимо сделать во всех репликах доступности группы доступности.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';
Затем создайте новый внешний источник данных.
Независимо от того, включена Database=dbname
ли база данных доступности в CONNECTION_OPTIONS
качестве базы данных по умолчанию для входа в учетные данные с областью базы данных, необходимо по-прежнему указать имя базы данных с помощью трех частей в инструкции CREATE EXTERNAL TABLE в параметре LOCATION. Пример см. в разделе CREATE EXTERNAL TABLE.
В следующем примере WINSQL2019AGL
используется имя прослушивателя группы доступности и dbname
имя базы данных, предназначенной для инструкции CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Можно продемонстрировать поведение перенаправления группы доступности, указав ApplicationIntent
и создав внешнюю таблицу в системном представлении sys.servers
. В следующем примере скрипта создаются два внешних источника данных, для каждого из которых создается одна внешняя таблица. Используйте представления, чтобы проверить, какой сервер отвечает на подключение. Похожие результаты можно достичь с помощью маршрутизации только для чтения. Дополнительные сведения см. в статье Настройка маршрутизации только для чтения в группе доступности Always On.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
В базе данных группы доступности создайте представление для возврата sys.servers
и имени локального экземпляра, что поможет определить, какая реплика отвечает на запрос. Дополнительные сведения см. в статье sys.servers.
CREATE VIEW vw_sys_servers AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Затем создайте внешнюю таблицу в исходном экземпляре:
CREATE EXTERNAL TABLE vw_sys_servers_ro
(
name SYSNAME NOT NULL
)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw
(
name SYSNAME NOT NULL
)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;
--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;
--should return primary replica instance
GO
Д. Создание внешнего источника данных для запроса файла Parquet в совместимое с S3 хранилище объектов с помощью PolyBase
Область применения: SQL Server 2022 (16.x) и более поздних версий.
Следующий пример скрипта создает внешний источник данных s3_ds
в исходной пользовательской базе данных в SQL Server. Внешний источник данных ссылается на учетные данные на уровне базы данных s3_dc
.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>'; -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Проверьте новый внешний источник данных с помощью sys.external_data_sources.
SELECT *
FROM sys.external_data_sources;
Затем в следующем примере показано использование T-SQL для запроса файла parquet, хранящегося в хранилище объектов, совместимом с S3, с помощью запроса OPENROWSET. Дополнительные сведения см. в статье Виртуализация файла parquet в совместимом с S3 хранилище объектов с помощью PolyBase.
SELECT * FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
Е. Создание внешнего источника данных с помощью универсального ODBC для PostgreSQL
Как и в предыдущих примерах, сначала создайте главный ключ базы данных и учетные данные базы данных с областью действия. Учетные данные для базы данных будут использоваться для внешнего источника данных. В этом примере также предполагается, что на сервере устанавливается универсальный поставщик данных ODBC для PostgreSQL.
В этом примере универсальный поставщик данных ODBC используется для подключения к серверу базы данных PostgreSQL в той же сети, где полное доменное имя сервера POSTGRES1
PostgreSQL используется по умолчанию для TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Хранилище Azure
Создание подписанного URL-адреса
Для Хранилище BLOB-объектов Azure и Azure Data Lake 2-го поколения поддерживаемый метод проверки подлинности — это подписанный URL-адрес (SAS). Один из простых способов создания маркера подписанного URL-адреса следует выполнить описанные ниже действия. Дополнительные сведения см. в разделе CREDENTIAL.
- Перейдите к портал Azure и нужной учетной записи хранения.
- Перейдите к нужному контейнеру в меню хранилища данных.
- Выберите маркеры общего доступа.
- Выберите соответствующее разрешение на основе требуемого действия, для ссылки используйте таблицу:
Действие | Разрешение |
---|---|
Чтение данных из файла | Читать |
Чтение данных из нескольких файлов и вложенных папок | Чтение и список |
Создание внешней таблицы в качестве выбора (CETAS) | Чтение, создание и запись |
- Выберите дату окончания срока действия маркера.
- Создание маркера и URL-адреса SAS.
- Скопируйте маркер SAS.
F. Создание внешнего источника данных для доступа к данным в Хранилище BLOB-объектов Azure с помощью интерфейса abs://
Область применения: SQL Server 2022 (16.x) и более поздних версий.
Используйте новый префикс abs
для учетной записи хранения Azure версии 2. Префикс abs
поддерживает проверку подлинности с помощью SHARED ACCESS SIGNATURE
. Префикс abs
заменяет wasb
из предыдущих версий. HADOOP больше не поддерживается, больше не требуется использовать TYPE = BLOB_STORAGE
.
Ключ учетной записи хранения Azure больше не является необходимым. Вместо этого используется токен SAS, что показано в следующем примере:
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH
IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
SECRET = '<Blob_SAS_Token>';
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredentialv2
);
Более подробный пример доступа к CSV-файлам, хранящимся в Хранилище BLOB-объектов Azure, см. в статье Virtualize CSV-файл с PolyBase.
G. Создание внешнего источника данных для доступа к данным в Azure Data Lake 2-го поколения
Область применения: SQL Server 2022 (16.x) и более поздних версий.
Используйте новый префикс adls
для Azure Data Lake 2-го поколения, заменив abfs
его в предыдущих версиях. Префикс adls
также поддерживает маркер SAS в качестве метода проверки подлинности, как показано в этом примере:
--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH
IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = datalakegen2
);
Более подробный пример доступа к разностным файлам, хранящимся в Azure Data Lake 2-го поколения, см. в статье Virtualize delta table with PolyBase.
Примеры: массовые операции
Внимание
Не добавляйте в конец URL-адреса конечный /
, имя файла или параметры подписанного LOCATION
URL-адреса при настройке внешнего источника данных для массовых операций.
H. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2022 (16.x) и более поздних версий.
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или OPENROWSET. Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AccessAzureInvoices,
);
И. Создание внешнего источника данных с помощью TDS 8.0 для подключения к другому SQL Server
Область применения: предварительная версия SQL Server 2025 (17.x) и более поздние версии.
При использовании последней версии Microsoft ODBC Driver 18 для SQL Server необходимо использовать этот Encryption
параметр CONNECTION_OPTIONS
, а TrustServerCertificate
также поддерживается. Если Encryption
значение не указано, поведение по умолчанию — и требуется Encrypt=Yes;TrustServerCertificate=No;
сертификат сервера.
В этом примере используется проверка подлинности SQL. Для защиты учетных данных требуется главный ключ базы данных (DMK). Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создается учетные данные базы данных с пользовательским именем входа и паролем.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH
IDENTITY = '<username>',
SECRET = '<password>';
Имя целевого сервера — WINSQL2022
порт 58137
и это экземпляр по умолчанию. При указании Encryption=Strict
подключения используется TDS 8.0, а сертификат сервера всегда проверяется. в этом примере HostnameinCertificate
используется WINSQL2022
:
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encryption=Strict;HostnameInCertificate=WINSQL2022;'
CREDENTIAL = SQLServerCredentials
);
J. Создание внешнего источника данных с помощью параметра шифрования и TrustServerCertificate
После предыдущего примера ниже приведены два примера кода. Первый фрагмент кода имеет Encryption
и TrustServerCertificate
задает.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encryption=Yes;HostnameInCertificate=WINSQL2022;TrustServerCertificate=Yes;'
CREDENTIAL = SQLServerCredentials
);
Следующий фрагмент кода не Encryption
включен.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encryption=no;'
CREDENTIAL = SQLServerCredentials
);
Связанный контент
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- Создание полномочий, привязанных к базе данных (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Использование подписанных URL-адресов
- Конфигурация подключения PolyBase (Transact-SQL)
* База данных SQL *
Обзор: База данных SQL Azure
Область применения: База данных SQL Azure
Создает внешний источник данных для эластичных запросов. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация данных (предварительная версия)
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
- Запрос удаленных экземпляров базы данных SQL или Azure Synapse Analytics через базу данных SQL с помощью эластичных запросов
- Запрос сегментированной базы данных SQL с помощью эластичных запросов
Соглашения о синтаксисе Transact-SQL
Синтаксис
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER } ]
[ [ , ] DATABASE_NAME = '<database_name>' ]
[ [ , ] SHARD_MAP_NAME = '<shard_map_manager>' ] )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:p ort]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Доступность |
---|---|---|---|
массовые операции | https |
<storage_account>.blob.core.windows.net/<container> |
|
Эластичный запрос (сегмент) | Необязательное | <shard_map_server_name>.database.windows.net |
|
Эластичный запрос (удаленный) | Необязательное | <remote_server_name>.database.windows.net |
|
EdgeHub | edgehub |
edgehub:// |
Доступно только в SQL Azure для пограничных вычислений. EdgeHub всегда является локальным для экземпляра SQL Azure для пограничных вычислений. Поэтому нет необходимости указывать путь или значение порта. |
Кафка | kafka |
kafka://<kafka_bootstrap_server_name_ip>:<port_number> |
Доступно только в SQL Azure для пограничных вычислений. |
Учетная запись хранения Azure (версия 2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ или abs://<storage_account_name>.blob.core.windows.net/
<container_name> |
|
Azure Data Lake Storage 2-го поколения | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ или adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Путь к расположению:
-
<shard_map_server_name>
: имя логического сервера в Azure, на котором размещен диспетчер карт сегментов. АргументDATABASE_NAME
задает базу данных, в которой размещается карта сегментов, аSHARD_MAP_NAME
используется для самой карты сегментов. -
<remote_server_name>
: логическое имя целевого сервера для эластичного запроса. Имя базы данных задается с помощью аргументаDATABASE_NAME
.
Дополнительные примечания и инструкции при задании расположения:
- Ядро СУБД не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
- Чтобы загрузить данные из службы хранилища Azure в Базу данных SQL Azure, используйте подписанный URL-адрес (маркер SAS).
-
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа. - Если
TYPE
=BLOB_STORAGE
, учетные данные необходимо создавать, используяSHARED ACCESS SIGNATURE
в качестве удостоверения. - При подключении к служба хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с помощью ключа учетной записи хранения, а не с подписанным URL-адресом (SAS).
- Если
TYPE
=HADOOP
, учетные данные следует создавать с использованием ключа учетной записи хранения в качестве значенияSECRET
. -
TYPE
= ЗначениеBLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, еслиTYPE
=BLOB_STORAGE
.
Существует несколько способов создания подписанного URL-адреса:
Маркер SAS можно создать, перейдя на портал Azure Your_Storage_Account> —< подписанный> URL-адрес>> . Настройка разрешений —> создание SAS и строки подключения. Дополнительные сведения см. в статье "Создание подписанного URL-адреса".
Вы можете создать и настроить SAS с помощью обозревателя службы хранилища Azure.
Маркер SAS можно создать программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание и запись
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = * [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER ] *
Указывает тип настраиваемого внешнего источника данных. Этот параметр не всегда является обязательным и должен предоставляться только для определенных внешних источников данных.
- Используйте
RDBMS
для запросов между базами данных с применением эластичных запросов из базы данных SQL. - Используйте
SHARD_MAP_MANAGER
при создании внешнего источника данных при подключении к сегментированной базе данных SQL. - Используется
BLOB_STORAGE
только дляhttps
префикса. Дляabd
иadls
префиксов не предоставляютсяTYPE
.
Внимание
Не устанавливайте TYPE
при использовании любого другого источника внешних данных.
DATABASE_NAME = имя базы данных
Настройте этот аргумент, если TYPE
задан как RDBMS
или SHARD_MAP_MANAGER
.
ТИП | Значение DATABASE_NAME |
---|---|
RDBMS |
Имя удаленной базы данных на сервере, заданном с помощью LOCATION |
SHARD_MAP_MANAGER |
Имя базы данных, работающей в качестве диспетчера карты сегментов |
Пример создания внешнего источника данных, в TYPE = RDBMS
котором см. статью "Создание внешнего источника данных RDBMS".
SHARD_MAP_NAME = имя карты сегментов
Используется, только когда аргумент TYPE
имеет значение SHARD_MAP_MANAGER
, для того, чтобы задать имя карты сегментов.
Пример, демонстрирующий создание внешнего источника данных с TYPE
= SHARD_MAP_MANAGER
, см. в разделе Создание диспетчера карты сегментов в реляционной СУБД.
Разрешения
Необходимо разрешение CONTROL
для Базы данных SQL Azure.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Примеры
А. Создание внешнего источника данных для диспетчера карт сегментов
Чтобы создать внешний источник данных, ссылающийся на SHARD_MAP_MANAGER
, укажите имя сервера базы данных SQL, на котором размещен диспетчер карт сегментов в базе данных SQL, или базу данных SQL Server на виртуальной машине.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
TYPE = SHARD_MAP_MANAGER,
LOCATION = '<server_name>.database.windows.net',
DATABASE_NAME = 'ElasticScaleStarterKit_ShardMapManagerDb',
CREDENTIAL = ElasticDBQueryCred,
SHARD_MAP_NAME = 'CustomerIDShardMap'
);
Пошаговое руководство см. в разделе Приступая к работе с эластичными запросами для сегментирования (горизонтальное секционирование).
В. Создание внешнего источника данных RDBMS
Чтобы создать внешний источник данных для ссылки на RDBMS, указывается имя сервера базы данных SQL удаленной базы данных в базе данных SQL.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL SQL_Credential
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
TYPE = RDBMS,
LOCATION = '<server_name>.database.windows.net',
DATABASE_NAME = 'Customers',
CREDENTIAL = SQL_Credential
);
Пошаговое руководство по RDBMS см. в разделе Начало работы с запросами между базами данных (вертикальное секционирование).
Примеры: массовые операции
Внимание
Не следует добавлять /
, имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
В. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Используйте следующий источник данных для массовых операций с помощью BULK INSERT (Transact-SQL) или OPENROWSET (Transact-SQL). Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
Создайте внешний источник данных для хранилища BLOB-объектов Azure (ABS) с помощью управляемого удостоверения:
CREATE DATABASE SCOPED CREDENTIAL DSC_MI
WITH IDENTITY = 'Managed Identity'
--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateABS
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/'
,CREDENTIAL = [DSC_MI]);
Создайте внешний источник данных для Azure Data Lake 2-го поколения (ADLS) с помощью удостоверения пользователя:
CREATE DATABASE SCOPED CREDENTIAL DSC_ADLS
WITH IDENTITY = 'User Identity'
--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateADLS
WITH (
LOCATION = 'adls://<container>@<storage_account_name>.dfs.core.windows.net/'
,CREDENTIAL = [DSC_ADLS]);
Реализация этого примера доступна в разделе BULK INSERT.
Примеры: SQL Azure для пограничных вычислений
Внимание
Сведения о настройке внешних данных для SQL Azure для пограничных вычислений см. в статье Потоковая передача данных в SQL Azure для пограничных вычислений.
А. Создание внешнего источника данных для ссылки на Kafka
Область применения:толькоSQL Azure для пограничных вычислений
В этом примере внешний источник данных — это сервер Kafka с IP-адресом xxx.xxx.xxx.xxx, ожидающий передачи данных на порту 1900. Внешний источник данных Kafka предназначен только для потоковой передачи данных и не поддерживает pushdown предиката.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer
WITH (LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900');
В. Создание внешнего источника данных для ссылки на EdgeHub
Область применения:толькоSQL Azure для пограничных вычислений
В этом примере внешний источник данных — это EdgeHub, работающий на том же пограничном устройстве, что и SQL Azure для пограничных вычислений. Внешний источник данных edgeHub предназначен только для потоковой передачи данных и не поддерживает принудительную отправку предиката.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub
WITH (LOCATION = 'edgehub://');
Связанный контент
* Azure Synapse
Аналитика*
Обзор: Azure Synapse Analytics
Область применения: Azure Synapse Analytics
Создает внешний источник данных для виртуализации данных. Внешние источники данных используются для установления подключения и поддержки основного варианта использования виртуализации данных и загрузки данных из внешних источников данных. Дополнительные сведения см. в статье "Использование внешних таблиц с Synapse SQL".
Внимание
Сведения о создании внешнего источника данных для запроса ресурса Azure Synapse Analytics с помощью базы данных SQL Azure с эластичным запросом см. в статье CREATE EXTERNAL DATA SOURCE for Azure SQL Database.
Соглашения о синтаксисе Transact-SQL
Синтаксис
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
)
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В Базе данных SQL Azure в Azure Synapse Analytics это имя должно быть уникальным.
LOCATION = '<prefix>://<path>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению |
---|---|---|
Data Lake Storage* 1-го поколения | adl |
<storage_account>.azuredatalake.net |
Data Lake Storage 2-го поколения | abfs[s] |
<container>@<storage_account>.dfs.core.windows.net |
Хранилище BLOB-объектов Azure | wasbs |
<container>@<storage_account>.blob.core.windows.net |
Хранилище BLOB-объектов Azure | https |
<storage_account>.blob.core.windows.net/<container>/subfolders |
Azure Data Lake Storage 1-го поколения | http[s] |
<storage_account>.azuredatalakestore.net/webhdfs/v1 |
Data Lake Storage 2-го поколения | http[s] |
<storage_account>.dfs.core.windows.net/<container>/subfolders |
Data Lake Storage 2-го поколения | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
* Microsoft Azure Data Lake Storage 1-го поколения имеет ограниченную поддержку, 2-го поколения рекомендуется для всех новых разработок.
Внешний источник данных | Префикс расположения соединителя | Выделенные пулы SQL: PolyBase | Выделенные пулы SQL: собственный* | бессерверные пулы SQL; |
---|---|---|---|---|
Data Lake Storage** 1-го поколения | adl |
нет | нет | Да |
Data Lake Storage 2-го поколения | abfs[s] |
Да | Да | Да |
Хранилище BLOB-объектов Azure | wasbs |
Да | Да*** | Да |
Хранилище BLOB-объектов Azure | https |
нет | Да | Да |
Azure Data Lake Storage 1-го поколения | http[s] |
нет | нет | Да |
Data Lake Storage 2-го поколения | http[s] |
Да | Да | Да |
Data Lake Storage 2-го поколения | wasb[s] |
Да | Да | Да |
* Бессерверные и выделенные пулы SQL в Azure Synapse Analytics используют различные базы кода для виртуализации данных. Бессерверные пулы SQL поддерживают собственную технологию виртуализации данных. Выделенные пулы SQL поддерживают как собственную, так и виртуализацию данных PolyBase. Виртуализация данных PolyBase используется при создании TYPE=HADOOP
внешнего источника данных.
** Microsoft Azure Data Lake Storage 1-го поколения имеет ограниченную поддержку, 2-го поколения рекомендуется для всех новых разработок.
Рекомендуется wasbs
использовать более безопасный wasb
соединитель. Только собственная виртуализация данных в выделенных пулах SQL (где ТИП не соответствует HADOOP).wasb
Путь к расположению:
-
<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно. -
<storage_account>
: имя учетной записи хранения ресурса Azure.
Дополнительные примечания и инструкции при задании расположения:
- По умолчанию при подготовке Azure Data Lake Storage 2-го поколения используется
enable secure SSL connections
. Если это включено, необходимо использоватьabfss
, если выбрано безопасное ПОДКЛЮЧЕНИЕ TLS/SSL, хотяabfss
также работает для небезопасных подключений TLS. Дополнительные сведения см. в разделе Драйвер Azure Blob Filesystem (ABFS). - Azure Synapse не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
- Префикс
https:
позволяет использовать в пути вложенную папку.https
недоступно для всех методов доступа к данным. -
wasbs
рекомендуется к использованию, так как тогда данные будут передаваться по защищенному каналу TLS. - Иерархические пространства имен не поддерживаются с учетными записями хранения Azure версии 2 при доступе к данным с помощью устаревшего
wasb://
интерфейса, но использованиеwasbs://
поддерживаемых иерархических пространств имен.
CREDENTIAL = credential_name
Необязательно. Указывает учетные данные базы данных с областью действия для проверки подлинности во внешнем источнике данных. Внешний источник данных без учетных данных может получить доступ к общедоступной учетной записи хранения или использовать удостоверение Microsoft Entra абонента для доступа к файлам в хранилище Azure.
Дополнительные примечания и инструкции при задании учетных данных:
- Чтобы загрузить данные из служба хранилища Azure или Azure Data Lake Store (ADLS) 2-го поколения в Azure Synapse Analytics, используйте ключ служба хранилища Azure.
-
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
В бессерверном пуле SQL учетные данные с областью базы данных могут указывать управляемое удостоверение рабочей области, имя субъекта-службы или маркер подписанного URL-адреса (SAS). Доступ через удостоверение пользователя, также известное как сквозное руководство Microsoft Entra, также возможен в учетных данных с областью базы данных, так как анонимный доступ к общедоступному хранилищу. Дополнительные сведения см. в разделе "Поддерживаемые типы авторизации хранилища".
В выделенном пуле SQL учетные данные базы данных могут указывать маркер подписанного URL-адреса (SAS), ключ доступа к хранилищу, субъект-служба, управляемое удостоверение рабочей области или сквозное руководство Microsoft Entra.
TYPE = HADOOP
Необязательно, не рекомендуется.
Можно указать тип только с выделенными пулами SQL.
HADOOP
является единственным допустимым значением при указании. Внешние источники данных с TYPE=HADOOP
доступны только в выделенных пулах SQL.
Используйте HADOOP для устаревших реализаций, в противном случае рекомендуется использовать более новый собственный доступ к данным. Не указывайте аргумент TYPE для использования нового собственного доступа к данным.
Пример использования TYPE = HADOOP
для загрузки данных из службы хранилища Azure см. в разделе Создание внешнего источника данных для ссылки на Azure Data Lake Store Gen 1 или 2 с использованием субъекта-службы.
Бессерверные и выделенные пулы SQL в Azure Synapse Analytics используют различные базы кода для виртуализации данных. Бессерверные пулы SQL поддерживают собственную технологию виртуализации данных. Выделенные пулы SQL поддерживают как собственную, так и виртуализацию данных PolyBase. Виртуализация данных PolyBase используется при создании TYPE=HADOOP
внешнего источника данных.
Разрешения
Необходимо разрешение CONTROL
на базу данных.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
Большинство внешних источников данных поддерживают проверку подлинности на основе прокси-сервера, используя учетные данные, на основе базы данных для создания учетной записи-посредника.
Ключи подписанного URL-адреса (SAS) поддерживаются для проверки подлинности в учетных записях хранения Azure Data Lake Store 2-го поколения. Клиенты, которые хотят пройти проверку подлинности с помощью подписанного URL-адреса, должны создать учетные данные с областью действия базы данных, где IDENTITY = "Shared Access Signature"
и ввести маркер SAS в качестве секрета.
Если вы создаете учетные данные в области базы данных, где IDENTITY = "Shared Access Signature"
и используете значение ключа хранилища в качестве секрета, вы получите следующее сообщение об ошибке:
'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'
Примеры
А. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных — это служба хранилища Azure учетная запись версии 2logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. При подключении к службе хранилища Azure с помощью wasb
или wasbs
проверки подлинности необходимо выполнить проверку подлинности с помощью ключа учетной записи хранения, а не с подписанным URL-адресом (SAS).
В этом примере используется устаревший метод доступа на основе Java HADOOP. В следующем примере показано, как создать учетные данные базы данных с областью действия для проверки подлинности для служба хранилища Azure. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; для проверки подлинности в хранилище Azure эти данные не используются.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
В. Создание внешнего источника данных для ссылки на Azure Data Lake Store 1-го или 2-го поколения с использованием субъекта-службы
Подключение к Azure Data Lake Store может зависеть от URI ADLS и субъекта-службы приложения Microsoft Entra. Документацию по созданию этого приложения можно найти в службе проверки подлинности Data Lake Store с помощью идентификатора Microsoft Entra.
-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- These values come from your Microsoft Entra application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>' ,
IDENTITY = '536540b4-4239-45fe-b9a3-629f97591c0c@https://login.microsoftonline.com/42f988bf-85f1-41af-91ab-2d2cd011da47/oauth2/token',
-- SECRET = '<KEY>'
SECRET = 'BjdIlmtKp4Fpyh9hIvr8HJlUida/seM5kQ3EpLAmeDI=';
-- For Gen 1 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen 1 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
-- For Gen2 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
-- Note the abfss endpoint when your account has secure transfer enabled
LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
В. Создание внешнего источника данных для ссылки на Azure Data Lake Store 2-го поколения с помощью ключа учетной записи хранения
-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<storage_account_name>' ,
IDENTITY = 'newyorktaxidata',
-- SECRET = '<storage_account_key>'
SECRET = 'yz5N4+bxSb89McdiysJAzo+9hgEHcJRJuXbF/uC3mhbezES/oe00vXnZEl14U0lN3vxrFKsphKov16C0w6aiTQ==';
-- Note this example uses a Gen2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE < data_source_name >
WITH (
LOCATION = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
Д. Создание внешнего источника данных в Azure Data Lake Store 2-го поколения с помощью abfs://
При подключении к учетной записи Azure Data Lake Store 2-го поколения с использованием управляемого удостоверения указывать секрет не нужно.
-- If you do not have a Master Key on your DW you will need to create one
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
--Create database scoped credential with **IDENTITY = 'Managed Service Identity'**
CREATE DATABASE SCOPED CREDENTIAL msi_cred
WITH IDENTITY = 'Managed Service Identity';
--Create external data source with abfss:// scheme for connecting to your Azure Data Lake Store Gen2 account
CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss
WITH (
TYPE = HADOOP,
LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net',
CREDENTIAL = msi_cred
);
Связанный контент
- Создание полномочий, привязанных к базе данных (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (Azure Synapse Analytics)
- CREATE TABLE AS SELECT (Azure Synapse Analytics)
- sys.external_data_sources (Transact-SQL)
- Использование подписанных URL-адресов
*Аналитика
Платформа (PDW) *
Обзор: система платформы аналитики
Область применения: система платформы аналитики (PDW)
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для установления подключения и поддержки следующего варианта использования: виртуализация данных и загрузка данных с помощью виртуализации данных с PolyBase в SQL Server.
Соглашения о синтаксисе Transact-SQL
Синтаксис
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. Имя должно быть уникальным в пределах сервера в Системе платформы аналитики (PDW).
LOCATION = '<prefix>://<path[:p ort]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению |
---|---|---|
Cloudera CDH или Hortonworks HDP | hdfs |
<Namenode>[:port] |
Учетная запись хранения Azure | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Путь к расположению:
-
<Namenode>
— имя компьютера, URI службы имен или IP-адресNamenode
в кластере Hadoop. PolyBase необходимо разрешить любые DNS-имена, используемые в кластере Hadoop. -
port
: порт, который прослушивает внешний источник данных. В Hadoop порт можно найти, используя параметр конфигурацииfs.defaultFS
. Значение по умолчанию — 8020. -
<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно. -
<storage_account>
: имя учетной записи хранения ресурса Azure.
Дополнительные примечания и инструкции при задании расположения:
- Ядро PDW не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
-
wasbs
рекомендуется к использованию, так как тогда данные будут передаваться по защищенному каналу TLS. - Иерархические пространства имен не поддерживаются при использовании с учетными записями службы хранилища Azure через wasb://.
- Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, выполните инструкцию ALTER EXTERNAL DATA SOURCE , чтобы указать новое расположение.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
- Для загрузки данных из службы хранилища Azure в Azure Synapse или PDW необходимо использовать ключ хранилища Azure.
-
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.
TYPE = * [ HADOOP ] *
Указывает тип настраиваемого внешнего источника данных. Этот параметр требуется не всегда.
- Используйте HADOOP, если внешний источник данных — Cloudera CDH, Hortonworks HDP или служба хранилища Azure.
Пример использования TYPE
= HADOOP
для загрузки данных из службы хранилища Azure см. в разделе Создание внешнего источника данных для ссылки на Hadoop.
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:порт]'
В SQL Server 2019 (15.x) не указывайте RESOURCE_MANAGER_LOCATION, если не выполняется подключение к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure.
Настройте это необязательное значение только при подключении к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Полный список поддерживаемых версий Hadoop см. в разделе "Конфигурация подключения PolyBase" (Transact-SQL).
RESOURCE_MANAGER_LOCATION
При определении оптимизатор запросов принимает решение на основе затрат для повышения производительности. Задание MapReduce можно использовать, чтобы передать вычисления в Hadoop. Указание RESOURCE_MANAGER_LOCATION
может значительно сократить объем данных, передаваемых между Hadoop и SQL, повышая производительность запросов.
Если значение для Resource Manager не задано, отправка вычислений в Hadoop для запросов PolyBase отключена. См. конкретный пример и дальнейшие рекомендации в разделе Создание внешнего источника данных для ссылки на Hadoop с поддержкой передачи.
Значение RESOURCE_MANAGER_LOCATION не проверяется при создании внешнего источника данных. Ввод неправильного значения может привести к сбою запроса во время выполнения при попытке принудительного нажатия, так как указанное значение не сможет устранить.
Для корректной работы PolyBase с внешним источником данных Hadoop необходимо открыть порты для следующих компонентов кластера Hadoop:
- Порты HDFS
- NameNode
- DataNode
- Resource Manager
- Отправка задания
- Журнал заданий
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к Hadoop (hadoop connectivity).
Подключение к Hadoop | Порт по умолчанию диспетчера ресурсов |
---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
В следующей таблице показаны порты по умолчанию для этих компонентов. Существует зависимость версий Hadoop, а также возможность пользовательской конфигурации, которая не использует назначение портов по умолчанию.
Компонент кластера Hadoop | Порт по умолчанию |
---|---|
NameNode | 8020 |
DataNode (передача данных, порт IPC без привилегий) | 50010 |
DataNode (передача данных, привилегированный порт IPC) | 1019 |
Отправка заданий диспетчера ресурсов (Hortonworks 1.3) | 50300 |
Отправка заданий диспетчера ресурсов (Cloudera 4.3) | 8021 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.0 в Windows, Cloudera 5.x в Linux) | 8032 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.x и 3.0 в Windows, Hortonworks 2.1–3 в Linux) | 8050 |
Журнал заданий диспетчера ресурсов | 10020 |
Разрешения
Требуется разрешение CONTROL
на базу данных в Системе платформы аналитики (PDW).
Примечание.
В предыдущих выпусках PDW для создания внешнего источника данных требовались разрешения ALTER ANY EXTERNAL DATA SOURCE
.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Маркер SAS с типом HADOOP
не поддерживается. Поддерживается только с типом BLOB_STORAGE
, если используется ключ доступа учетной записи хранения. Попытка создать внешний источник данных с типом HADOOP
и использованием учетных данных SAS может завершиться сбоем со следующим сообщением об ошибке:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Примеры
А. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
В. Создание внешнего источника данных для ссылки на Hadoop с включенной отправкой
Укажите параметр RESOURCE_MANAGER_LOCATION
, чтобы включить принудительную передачу вычислений в Hadoop для запросов PolyBase. После включения PolyBase принимает решение на основе затрат для определения того, должны ли вычисления запроса быть переданы в Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8020',
TYPE = HADOOP,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
В. Создание внешнего источника данных для ссылки на Hadoop с защитой Kerberos
Чтобы проверить, защищен ли кластер Hadoop протоколом Kerberos, проверьте значение свойства hadoop.security.authentication
в файле Hadoop core-site.xml. Чтобы сослаться на кластер Hadoop с защитой Kerberos, необходимо указать учетные данные с областью действия "база данных", которые содержат ваше имя пользователя и пароль Kerberos. Главный ключ базы данных используется для шифрования секрета учетных данных с областью действия "база данных".
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
TYPE = HADOOP,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Д. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных представляет собой учетную запись службы хранилища Azure v2 под названием logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. При подключении к службе хранилища Azure с помощью wasb
или wasbs
проверки подлинности необходимо выполнить проверку подлинности с помощью ключа учетной записи хранения, а не с подписанным URL-адресом (SAS).
В этом примере показано, как создать учетные данные с областью действия "база данных" для аутентификации в хранилище Azure. Укажите ключ учетной записи хранения Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; для проверки подлинности в хранилище Azure эти данные не используются.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
Связанный контент
* Управляемый экземпляр SQL *
Обзор: Управляемый экземпляр SQL Azure
Область применения: Управляемый экземпляр SQL Azure
Создает внешний источник данных в Управляемый экземпляр SQL Azure. Полные сведения см. в статье о виртуализации данных с помощью Управляемый экземпляр SQL Azure.
Виртуализация данных в Управляемом экземпляре SQL Azure предоставляет доступ к внешним данным в различных форматах файлов с помощью OPENROWSET или CREATE EXTERNAL TABLE.
Соглашения о синтаксисе Transact-SQL
Синтаксис
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
)
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:p ort]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения | Путь к расположению |
---|---|---|
Хранилище BLOB-объектов Azure | abs |
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name> |
Azure Data Lake Service 2-го поколения | adls |
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name> |
Ядро СУБД не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
Не следует добавлять /, имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
- Чтобы загрузить данные из службы хранилища Azure в Управляемый экземпляр SQL Azure, используйте подписанный URL-адрес (маркер SAS).
-
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа. - Если требуется учетные данные, необходимо создать учетные данные с помощью
Managed Identity
удостоверения илиSHARED ACCESS SIGNATURE
в качестве удостоверения. Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Чтобы использовать управляемое удостоверение службы для учетных данных в области базы данных:
Укажите
WITH IDENTITY = 'Managed Identity'
Используйте назначаемое системой управляемое удостоверение службы Управляемый экземпляр SQL Azure, которое должно быть включено, если оно будет использоваться для этой цели.
- Предоставьте роли читателя Azure RBAC управляемому удостоверению управляемой службы Управляемый экземпляр SQL Azure необходимым контейнерам Хранилище BLOB-объектов Azure. Например, с помощью портал Azure см. раздел "Назначение ролей Azure с помощью портал Azure".
Чтобы создать подписанный URL-адрес (SAS) для учетных данных базы данных, выполните следующие действия.
Укажите
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...
Существует несколько способов создания подписанного URL-адреса:
- Маркер SAS можно получить, перейдя на портал Azure Your_Storage_Account> —< подписанный> URL-адрес>>. Настройка разрешений —> создание строки SAS и подключения. Дополнительные сведения см. в статье "Создание подписанного URL-адреса".
- Вы можете создать и настроить SAS с помощью обозревателя службы хранилища Azure.
- Маркер SAS можно создать программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- При создании маркера SAS он включает вопросительный знак ('?') в начале маркера. Исключите ведущий
Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание и запись
Разрешения
Необходимо разрешение CONTROL
для базы данных в Управляемом экземпляре SQL Azure.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Примеры
Дополнительные примеры см. в статье о виртуализации данных с помощью Управляемый экземпляр SQL Azure.
А. Запрос внешних данных из Управляемый экземпляр SQL Azure с помощью OPENROWSET или внешней таблицы
Дополнительные примеры см. в статье CREATE EXTERNAL DATA SOURCE (Transact-SQL) или см. в статье " Виртуализация данных с помощью Управляемого экземпляра SQL Azure".
Создайте главный ключ базы данных, если он не существует.
-- Optional: Create MASTER KEY if it doesn't exist in the database: CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>' GO
Создайте учетные данные в области базы данных с помощью маркера SAS. Вы также можете использовать управляемое удостоверение.
CREATE DATABASE SCOPED CREDENTIAL MyCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<KEY>' ; --Removing leading '?' GO
Создайте внешний источник данных с помощью учетных данных.
--Create external data source pointing to the file path, and referencing database-scoped credential: CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource WITH ( LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest', CREDENTIAL = [MyCredential] );
Запрос файла данных Parquet во внешнем источнике данных с помощью синтаксиса T-SQL OPENROWSET, который зависит от вывода схемы, чтобы быстро изучить данные, не зная схему.
--Query data with OPENROWSET, relying on schema inference. SELECT TOP 10 * FROM OPENROWSET ( BULK 'bing_covid-19_data.parquet', DATA_SOURCE = 'MyExternalDataSource', FORMAT = 'parquet' ) AS filerows;
Кроме того, запросите данные с помощью OPENROWSET предложение WITH вместо того, чтобы полагаться на вывод схемы, что может запрашивать затраты на выполнение. В CSV вывод схемы не поддерживается.
--Or, query data using the WITH clause on a CSV, where schema inference is not supported SELECT TOP 10 id, updated, confirmed, confirmed_change FROM OPENROWSET ( BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyExternalDataSource', FORMAT = 'CSV', FIRSTROW = 2 ) WITH ( id INT, updated DATE, confirmed INT, confirmed_change INT ) AS filerows;
Или создайте ФОРМАТ ВНЕШНЕГО ФАЙЛА и ВНЕШНЮЮ ТАБЛИЦу, чтобы запросить данные в виде локальной таблицы.
-- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE --Create external file format CREATE EXTERNAL FILE FORMAT DemoFileFormat WITH (FORMAT_TYPE = PARQUET) GO --Create external table: CREATE EXTERNAL TABLE tbl_TaxiRides ( vendorID VARCHAR(100) COLLATE Latin1_General_BIN2, tpepPickupDateTime DATETIME2, tpepDropoffDateTime DATETIME2, passengerCount INT, tripDistance FLOAT, puLocationId VARCHAR(8000), doLocationId VARCHAR(8000), startLon FLOAT, startLat FLOAT, endLon FLOAT, endLat FLOAT, rateCodeId SMALLINT, storeAndFwdFlag VARCHAR(8000), paymentType VARCHAR(8000), fareAmount FLOAT, extra FLOAT, mtaTax FLOAT, improvementSurcharge VARCHAR(8000), tipAmount FLOAT, tollsAmount FLOAT, totalAmount FLOAT ) WITH ( LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet', DATA_SOURCE = NYCTaxiExternalDataSource, FILE_FORMAT = MyFileFormat\.\./\.\./\.\./azure-sql/ ); GO --Then, query the data via an external table with T-SQL: SELECT TOP 10 * FROM tbl_TaxiRides; GO