События
15 сент., 06 - 17 сент., 15
Лучшее событие обучения под руководством сообщества SQL. Sept 2025. Сохраните 200 евро с кодом FABLEARN.
Get registeredЭтот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server 2016 (13.x) и более поздних
версий База данных SQL Azure Управляемый экземпляр SQL Azure
Azure Synapse Analytics Analytics
Platform System (PDW)
Создает внешний источник данных для запроса внешних данных, используемых для функций виртуализации данных PolyBase и данных.
Эта статья приводит синтаксис, аргументы, комментарии, разрешения и примеры для любых выбранных продуктов SQL.
В следующей строке выберите название нужного продукта, и отобразится информация только об этом продукте.
* SQL Server *
Область применения: SQL Server 2016 (13.x)
Создает внешний источник данных для запросов 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
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
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 на целевом экземпляре.Дополнительные примечания и инструкции при задании расположения:
wasbs
не является обязательным, но рекомендуется к использованию в SQL Server 2016 (13.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL.Namenode
, целесообразно использовать для Namenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, выполните инструкцию ALTER EXTERNAL DATA SOURCE , чтобы указать новое расположение.Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
CREDENTIAL
требуется, только если данные были защищены.
CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Указывает тип настраиваемого внешнего источника данных. В SQL Server 2016 этот параметр всегда является обязательным и должен быть указан только как HADOOP
. Поддерживает подключения к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Поведение этого параметра отличается в более поздних версиях SQL Server.
Пример использования TYPE
= HADOOP
для загрузки данных из учетной записи служба хранилища Azure см. в статье Создание внешнего источника данных для доступа к данным в служба хранилища Azure с помощью интерфейса wasb://
Настройте это необязательное значение только при подключении к 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:
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к 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 Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = 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.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 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 (14.x)
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
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
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>]' )
[ ; ]
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
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 на целевом экземпляре.Дополнительные примечания и инструкции при задании расположения:
Driver={<Name of Driver>}
при подключении через ODBC
.wasbs
не является обязательным, но рекомендуется к использованию в SQL Server 2017 (14.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL.Namenode
, целесообразно использовать для Namenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, выполните инструкцию ALTER EXTERNAL DATA SOURCE , чтобы указать новое расположение.Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
CREDENTIAL
требуется, только если данные были защищены.
CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.TYPE
= BLOB_STORAGE
, учетные данные необходимо создавать, используя SHARED ACCESS SIGNATURE
в качестве удостоверения.TYPE
= Значение BLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, если TYPE
= BLOB_STORAGE
.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 должен быть настроен следующим образом:
?
параметр при настройке в качестве СЕКРЕТа.Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие | Разрешение |
---|---|
Чтение данных из файла | Читать |
Чтение данных из нескольких файлов и вложенных папок | Чтение и список |
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Указывает тип настраиваемого внешнего источника данных. Этот параметр не всегда является обязательным и должен указываться только при подключении к 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://
Настройте это необязательное значение только при подключении к 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:
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к 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 Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = 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.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 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
при настройке внешнего источника данных для массовых операций.
Область применения: 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.
Область применения: SQL Server 2019 (15.x)
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
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
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>]' ]
)
[ ; ]
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
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 на целевом экземпляре.Дополнительные примечания и инструкции при задании расположения:
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.abfs
или abfss
поддерживаются при доступе к учетным записям хранения Azure с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 (CU11). Дополнительные сведения см. в разделе Драйвер Azure Blob Filesystem (ABFS).abfs[s]
поддерживается с помощью Azure Data Lake Storage 2-го поколения, начиная с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 (CU11) и выше. В противном случае параметр иерархического пространства имен не поддерживается и должен быть отключен.Namenode
, целесообразно использовать для Namenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, выполните инструкцию ALTER EXTERNAL DATA SOURCE , чтобы указать новое расположение.sqlhdfs
и sqldatapool
поддерживаются для подключения между главным экземпляром и пулом носителей кластера больших данных. Для Cloudera CDH или Hortonworks HDP следует использовать hdfs
. Дополнительные сведения об использовании sqlhdfs
для запросов пулов носителей кластеров больших данных SQL Server см. в статье Запрос данных HDFS в кластере больших данных SQL Server 2019.Указано для 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
, который будет использоваться для замены имени узла и порта.Указано только для SQL Server 2019 (15.x). Указывает, могут ли вычисления быть переданы во внешний источник данных. По умолчанию задано параметр ON.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение отправки на уровне запроса достигается с помощью указания EXTERNALPUSHDOWN.
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
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 должен быть настроен следующим образом:
?
параметр при настройке в качестве СЕКРЕТа.Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие | Разрешение |
---|---|
Чтение данных из файла | Читать |
Чтение данных из нескольких файлов и вложенных папок | Чтение и список |
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Указывает тип настраиваемого внешнего источника данных. Этот параметр не всегда является обязательным и должен указываться только при подключении к 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
, если планируете создать внешнюю таблицу для службы хранилища Azure с помощью команды CREATE EXTERNAL TABLE.Пример использования TYPE
= HADOOP
для загрузки данных из учетной записи хранения Azure см. в статье "Создание внешнего источника данных для доступа к данным в службе хранилища Azure" с помощью интерфейса wasb://.
В 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:
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к 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.
Чтобы создать внешний источник данных, ссылающийся на 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 Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = 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.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 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
);
Область применения: 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
);
Область применения: 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
при настройке внешнего источника данных для массовых операций.
Область применения: 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.
Область применения: 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
);
Как и в предыдущих примерах, сначала создайте главный ключ базы данных и учетные данные базы данных с областью действия. Учетные данные для базы данных будут использоваться для внешнего источника данных. В этом примере также предполагается, что на сервере устанавливается универсальный поставщик данных 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
);
Область применения: SQL Server 2022 (16.x) и более поздних версий
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
BULK INSERT
или OPENROWSET
Примечание
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте селектор, чтобы выбрать соответствующую версию. Это содержимое относится к SQL Server 2022 (16.x) и более поздним версиям.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
Учетная запись хранения 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-адресе хранилища.Дополнительные примечания и инструкции при задании расположения:
sqlserver
можно использовать для подключения SQL Server 2019 (15.x) к другому SQL Server или к База данных SQL Azure.Driver={<Name of Driver>}
при подключении через ODBC
.adls
через Azure Data Lake Storage 2-го поколения.wasb[s]
для учетной записи хранения Azure (версии 2) изменен на abs
.abfs[s]
для Azure Data Lake Storage 2-го поколения изменен на adls
.abs
) и Azure Data Lake 2-го поколения ().adls
<container>@<storage_account_name>..
(рекомендуется) или <storage_account_name>../<container>
. Например: abs://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) или abs://<storage_account_name>.blob.core.windows.net/<container>
.adls://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) или adls://<storage_account_name>.dfs.core.windows.net/<container>
.Указано для 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 2019 (15.x) и более поздних версий. Указывает, могут ли вычисления быть переданы во внешний источник данных. Параметр включен по умолчанию.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение отправки на уровне запроса достигается с помощью указания EXTERNALPUSHDOWN.
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
CREDENTIAL
требуется, только если данные были защищены.
CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.IDENTITY
необходимо SHARED ACCESS SIGNATURE
иметь значение.Существует несколько способов создания подписанного URL-адреса:
Маркер SAS можно создать, перейдя на портал Azure Your_Storage_Account> —< подписанный> URL-адрес>> . Настройка разрешений —> создание SAS и строки подключения. Дополнительные сведения см. в статье "Создание подписанного URL-адреса".
Вы можете создать и настроить SAS с помощью обозревателя службы хранилища Azure.
Маркер SAS можно создать программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер 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 (16.x), внешние источники данных Hadoop больше не поддерживаются. Необходимо вручную воссоздать внешние источники данных, созданные ранее с помощью TYPE = HADOOP
, и внешние таблицы, которые используют этот внешний источник данных.
Пользователям также потребуется настроить внешние источники данных для использования новых соединителей при подключении к службе хранилища Azure.
Внешний источник данных | С дт. | По |
---|---|---|
Хранилище BLOB-объектов Azure | wasb[s] |
abs |
ADLS 2-го поколения | abfs[s] |
adls |
Важно!
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
Чтобы создать внешний источник данных, ссылающийся на 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 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
);
Область применения: 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
Область применения: 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 в той же сети, где полное доменное имя сервера POSTGRES1
PostgreSQL используется по умолчанию для TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Для хранилища BLOB-объектов Azure и Azure Data Lake Storage (ADLS) 2-го поколения поддерживаемый метод проверки подлинности — это подписанный URL-адрес (SAS). Один из простых способов создания маркера подписанного URL-адреса следует выполнить описанные ниже действия. Дополнительные сведения см. в разделе CREDENTIAL.
Перейдите к портал Azure и нужной учетной записи хранения.
Перейдите к нужному контейнеру в меню хранилища данных.
Выберите маркеры общего доступа.
Выберите соответствующее разрешение на основе требуемого действия:
Действие | Разрешение |
---|---|
Чтение данных из файла | Читать |
Чтение данных из нескольких файлов и вложенных папок | Чтение и список |
Создание внешней таблицы в качестве выбора (CETAS) | Чтение, создание и запись |
Выберите дату окончания срока действия маркера.
Создание маркера и URL-адреса SAS.
Скопируйте маркер SAS.
Область применения: 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.
Область применения: 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
при настройке внешнего источника данных для массовых операций.
Область применения: 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,
);
Область применения: предварительная версия SQL Server 2025 (17.x) и более поздние версии.
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
BULK INSERT
или OPENROWSET
Примечание
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте раскрывающийся список селектора версий, чтобы выбрать соответствующую версию. Это содержимое относится к предварительной версии SQL Server 2025 (17.x) и более поздним версиям.
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в 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 } ]
)
[ ; ]
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Проверка подлинности |
---|---|---|---|---|
Учетная запись хранения 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>
. Рассмотрим пример.
abs://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) или abs://<storage_account_name>.blob.core.windows.net/<container>
.Azure Data Lake 2-го поколения поддерживает: adls://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) или adls://<storage_account_name>.dfs.core.windows.net/<container>
.
Область применения: 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".
Область применения: SQL Server 2019 (15.x) и более поздних версий.
Указывает, могут ли вычисления быть переданы во внешний источник данных. Включен по умолчанию.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение параметра на уровне запроса достигается за счет указаний.
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
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 2022 (16.x) и более поздних версиях внешние источники данных Hadoop не поддерживаются. Необходимо вручную воссоздать внешние источники данных, созданные ранее, TYPE = HADOOP
и любую внешнюю таблицу, которая использует этот внешний источник данных.
Пользователям также потребуется настроить внешние источники данных для использования новых соединителей при подключении к службе хранилища Azure.
Внешний источник данных | С дт. | По |
---|---|---|
Хранилище BLOB-объектов Azure | wasb(s) | пресс |
ADLS 2-го поколения | abfs(s) | adls |
Важно!
Сведения об установке и включении PolyBase см. в разделе "Установка PolyBase" в Windows.
Чтобы создать внешний источник данных, ссылающийся на 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 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
);
Область применения: 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
Область применения: 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 в той же сети, где полное доменное имя сервера POSTGRES1
PostgreSQL используется по умолчанию для TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Для Хранилище BLOB-объектов Azure и Azure Data Lake 2-го поколения поддерживаемый метод проверки подлинности — это подписанный URL-адрес (SAS). Один из простых способов создания маркера подписанного URL-адреса следует выполнить описанные ниже действия. Дополнительные сведения см. в разделе CREDENTIAL.
Действие | Разрешение |
---|---|
Чтение данных из файла | Читать |
Чтение данных из нескольких файлов и вложенных папок | Чтение и список |
Создание внешней таблицы в качестве выбора (CETAS) | Чтение, создание и запись |
Область применения: 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.
Область применения: 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-адреса при настройке внешнего источника данных для массовых операций.
Область применения: 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,
);
Область применения: предварительная версия 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
);
После предыдущего примера ниже приведены два примера кода. Первый фрагмент кода имеет 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
);
* База данных SQL *
Область применения: База данных SQL Azure
Создает внешний источник данных для эластичных запросов. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
BULK INSERT
или OPENROWSET
Соглашения о синтаксисе 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>' ] )
[ ; ]
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Доступность |
---|---|---|---|
массовые операции | 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
не является обязательным для наборов данных с возможностью анонимного доступа.TYPE
= BLOB_STORAGE
, учетные данные необходимо создавать, используя SHARED ACCESS SIGNATURE
в качестве удостоверения.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 должен быть настроен следующим образом:
?
параметр при настройке в качестве СЕКРЕТа.Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие | Разрешение |
---|---|
Чтение данных из файла | Читать |
Чтение данных из нескольких файлов и вложенных папок | Чтение и список |
Создание внешней таблицы в качестве выбора (CETAS) | Чтение, создание и запись |
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Указывает тип настраиваемого внешнего источника данных. Этот параметр не всегда является обязательным и должен предоставляться только для определенных внешних источников данных.
RDBMS
для запросов между базами данных с применением эластичных запросов из базы данных SQL.SHARD_MAP_MANAGER
при создании внешнего источника данных при подключении к сегментированной базе данных SQL.BLOB_STORAGE
только для https
префикса. Для abd
и adls
префиксов не предоставляются TYPE
.Важно!
Не устанавливайте TYPE
при использовании любого другого источника внешних данных.
Настройте этот аргумент, если TYPE
задан как RDBMS
или SHARD_MAP_MANAGER
.
ТИП | Значение DATABASE_NAME |
---|---|
RDBMS |
Имя удаленной базы данных на сервере, заданном с помощью LOCATION |
SHARD_MAP_MANAGER |
Имя базы данных, работающей в качестве диспетчера карты сегментов |
Пример создания внешнего источника данных, в TYPE = RDBMS
котором см. статью "Создание внешнего источника данных RDBMS".
Используется, только когда аргумент 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, указывается имя сервера базы данных 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
при настройке внешнего источника данных для массовых операций.
Используйте следующий источник данных для массовых операций с помощью 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 с 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');
Область применения:только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
Создает внешний источник данных для виртуализации данных. Внешние источники данных используются для установления подключения и поддержки основного варианта использования виртуализации данных и загрузки данных из внешних источников данных. Дополнительные сведения см. в статье "Использование внешних таблиц с 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 ]
)
[ ; ]
Задает определенное пользователем имя для источника данных. В Базе данных SQL Azure в Azure Synapse Analytics это имя должно быть уникальным.
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению |
---|---|---|
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.Дополнительные примечания и инструкции при задании расположения:
enable secure SSL connections
. Если это включено, необходимо использовать abfss
, если выбрано безопасное ПОДКЛЮЧЕНИЕ TLS/SSL, хотя abfss
также работает для небезопасных подключений TLS. Дополнительные сведения см. в разделе Драйвер Azure Blob Filesystem (ABFS).https:
позволяет использовать в пути вложенную папку.
https
недоступно для всех методов доступа к данным.wasbs
рекомендуется к использованию, так как тогда данные будут передаваться по защищенному каналу TLS.wasb://
интерфейса, но использование wasbs://
поддерживаемых иерархических пространств имен.Необязательно. Указывает учетные данные базы данных с областью действия для проверки подлинности во внешнем источнике данных. Внешний источник данных без учетных данных может получить доступ к общедоступной учетной записи хранения или использовать удостоверение Microsoft Entra абонента для доступа к файлам в хранилище Azure.
Дополнительные примечания и инструкции при задании учетных данных:
CREDENTIAL
требуется, только если данные были защищены.
CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
В бессерверном пуле SQL учетные данные с областью базы данных могут указывать управляемое удостоверение рабочей области, имя субъекта-службы или маркер подписанного URL-адреса (SAS). Доступ через удостоверение пользователя, также известное как сквозное руководство Microsoft Entra, также возможен в учетных данных с областью базы данных, так как анонимный доступ к общедоступному хранилищу. Дополнительные сведения см. в разделе "Поддерживаемые типы авторизации хранилища".
В выделенном пуле SQL учетные данные базы данных могут указывать маркер подписанного URL-адреса (SAS), ключ доступа к хранилищу, субъект-служба, управляемое удостоверение рабочей области или сквозное руководство Microsoft Entra.
Необязательно, не рекомендуется.
Можно указать тип только с выделенными пулами 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 учетная запись версии 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 может зависеть от 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
);
-- 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-го поколения с использованием управляемого удостоверения указывать секрет не нужно.
-- 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
);
*Аналитика
Платформа (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>]' )
[ ; ]
Задает определенное пользователем имя для источника данных. Имя должно быть уникальным в пределах сервера в Системе платформы аналитики (PDW).
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению |
---|---|---|
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.Дополнительные примечания и инструкции при задании расположения:
wasbs
рекомендуется к использованию, так как тогда данные будут передаваться по защищенному каналу TLS.Namenode
, целесообразно использовать для Namenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, выполните инструкцию ALTER EXTERNAL DATA SOURCE , чтобы указать новое расположение.Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
CREDENTIAL
требуется, только если данные были защищены.
CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.Указывает тип настраиваемого внешнего источника данных. Этот параметр требуется не всегда.
Пример использования TYPE
= HADOOP
для загрузки данных из службы хранилища Azure см. в разделе Создание внешнего источника данных для ссылки на Hadoop.
В 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:
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к 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.'
Чтобы создать внешний источник данных для ссылки на кластер Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = 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.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 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 предоставляет доступ к внешним данным в различных форматах файлов с помощью OPENROWSET или CREATE EXTERNAL TABLE.
Соглашения о синтаксисе Transact-SQL
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
)
[ ; ]
Задает определенное пользователем имя для источника данных. В базе данных это имя должно быть уникальным.
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения | Путь к расположению |
---|---|---|
Хранилище 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
не является обязательным для наборов данных с возможностью анонимного доступа.Managed Identity
удостоверения или SHARED ACCESS SIGNATURE
в качестве удостоверения. Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).Чтобы использовать управляемое удостоверение службы для учетных данных в области базы данных:
Укажите WITH IDENTITY = 'Managed Identity'
Используйте назначаемое системой управляемое удостоверение службы Управляемый экземпляр SQL Azure, которое должно быть включено, если оно будет использоваться для этой цели.
Чтобы создать подписанный URL-адрес (SAS) для учетных данных базы данных, выполните следующие действия.
Укажите WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...
Существует несколько способов создания подписанного URL-адреса:
Маркер SAS должен быть настроен следующим образом:
?
параметр при настройке в качестве СЕКРЕТа.Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие | Разрешение |
---|---|
Чтение данных из файла | Читать |
Чтение данных из нескольких файлов и вложенных папок | Чтение и список |
Создание внешней таблицы в качестве выбора (CETAS) | Чтение, создание и запись |
Необходимо разрешение CONTROL
для базы данных в Управляемом экземпляре SQL Azure.
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Дополнительные примеры см. в статье о виртуализации данных с помощью Управляемый экземпляр SQL Azure.
Дополнительные примеры см. в статье 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
События
15 сент., 06 - 17 сент., 15
Лучшее событие обучения под руководством сообщества SQL. Sept 2025. Сохраните 200 евро с кодом FABLEARN.
Get registered