CREATE EXTERNAL DATA SOURCE (Transact-SQL)
Создает внешний источник данных для запроса с помощью SQL Server, Базы данных SQL Azure, Управляемого экземпляра SQL Azure, Azure Synapse Analytics, системы платформы аналитики (PDW) или SQL Azure для пограничных вычислений.
Эта статья приводит синтаксис, аргументы, комментарии, разрешения и примеры для любых выбранных продуктов SQL.
Выберите продукт
В следующей строке выберите название нужного продукта, и отобразится информация только об этом продукте.
* SQL Server *
Обзор: SQL Server 2016
Применимо к: SQL Server 2016 (13.x) и более поздних версий
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация и загрузка данных с помощью PolyBase
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
Примечание
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте селектор, чтобы выбрать соответствующую версию.
Сведения о возможностях SQL Server 2019 (15.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Сведения о возможностях SQL Server 2022 (16.x) см. в разделе CREATE EXTERNAL DATA SOURCE.
Синтаксис для SQL Server 2016
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:port]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Аутентификация |
---|---|---|---|---|
Cloudera CDH или Hortonworks HDP | hdfs |
<Namenode>[:port] |
С SQL Server 2016 (13.x) по SQL Server 2019 (15.x) | Анонимная или обычная проверка подлинности |
Учетная запись хранения Azure (v2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Начиная с SQL Server 2016 (13.x); Иерархическое пространство имен не поддерживается |
Ключ учетной записи службы хранилища Azure |
Путь к расположению:
<Namenode>
— имя компьютера, URI службы имен или IP-адресNamenode
в кластере Hadoop. PolyBase необходимо разрешить любые DNS-имена, используемые в кластере Hadoop.port
: порт, который прослушивает внешний источник данных. В Hadoop порт можно найти, используя параметр конфигурацииfs.defaultFS
. Значение по умолчанию — 8020.<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно.<storage_account>
: имя учетной записи хранения ресурса Azure.<server_name>
: имя узла.<instance_name>
: имя экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
- Префикс
wasbs
не является обязательным, но рекомендуется к использованию в SQL Server 2016 (13.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL. - Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, следует выполнить команду ALTER EXTERNAL DATA SOURCE, чтобы указать новое расположение.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
CREDENTIAL
требуется, только если данные были защищены. CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = [ HADOOP ]
Указывает тип настраиваемого внешнего источника данных. В SQL Server 2016 этот параметр всегда является обязательным и должен быть указан только как HADOOP
. Поддерживает подключения к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Поведение этого параметра отличается в более поздних версиях SQL Server.
Пример использования TYPE
= HADOOP
для загрузки данных из учетной записи службы хранилища Azure см. в разделе Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:порт]'
Настройте это необязательное значение только при подключении к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Полный список поддерживаемых версий Hadoop см. в разделе Конфигурация подключений PolyBase (Transact-SQL).
При определении RESOURCE_MANAGER_LOCATION
оптимизатор запросов принимает решение на основе затрат, чтобы повысить производительность. Задание MapReduce можно использовать, чтобы передать вычисления в Hadoop. Указание RESOURCE_MANAGER_LOCATION
может значительно сократить объем данных, передаваемых между Hadoop и SQL Server, повышая производительность запросов.
Если значение для Resource Manager не задано, отправка вычислений в Hadoop для запросов PolyBase отключена. См. конкретный пример и дальнейшие рекомендации в разделе Создание внешнего источника данных для ссылки на Hadoop с поддержкой передачи.
Значение RESOURCE_MANAGER_LOCATION не проверяется при создании внешнего источника данных. Указание неверного значения может вызвать сбой запроса во время выполнения каждый раз, когда выполняется попытка принудительной передачи, так как переданное значение невозможно разрешить.
Для корректной работы PolyBase с внешним источником данных Hadoop необходимо открыть порты для следующих компонентов кластера Hadoop:
- Порты HDFS
- NameNode
- DataNode
- Resource Manager
- Отправка задания
- Журнал заданий
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к Hadoop (hadoop connectivity).
Подключение к Hadoop | Порт по умолчанию диспетчера ресурсов |
---|---|
1 | 50300 |
2 | 50300 |
3 | 8021 |
4 | 8032 |
5 | 8050 |
6 | 8032 |
7 | 8050 |
8 | 8032 |
В следующей таблице показаны порты по умолчанию для этих компонентов. Существует зависимость версии Hadoop, а также возможность пользовательской конфигурации, которая не использует назначение порта по умолчанию.
Компонент кластера Hadoop | Порт по умолчанию |
---|---|
узел имен; | 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.
A. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8050' ,
TYPE = HADOOP
) ;
Б. Создание внешнего источника данных для ссылки на Hadoop с включенной отправкой
Укажите параметр RESOURCE_MANAGER_LOCATION
, чтобы включить принудительную передачу вычислений в Hadoop для запросов PolyBase. После включения PolyBase принимает решение на основе затрат для определения того, должны ли вычисления запроса быть переданы в Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8020' ,
TYPE = HADOOP ,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
) ;
В. Создание внешнего источника данных для ссылки на Hadoop с защитой Kerberos
Чтобы проверить, защищен ли кластер Hadoop протоколом Kerberos, проверьте значение свойства hadoop.security.authentication
в файле Hadoop core-site.xml. Чтобы сослаться на кластер Hadoop с защитой Kerberos, необходимо указать учетные данные с областью действия "база данных", которые содержат ваше имя пользователя и пароль Kerberos. Главный ключ базы данных используется для шифрования секрета учетных данных с областью действия "база данных".
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH
IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8050' ,
CREDENTIAL = HadoopUser1 ,
TYPE = HADOOP ,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Г. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных представляет собой учетную запись службы хранилища Azure v2 под названием logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
.
В этом примере показано, как создать учетные данные с областью действия "база данных" для аутентификации в учетной записи службы хранилище Azure v2. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; эти данные не используются для проверки подлинности в службе хранилища Azure. Обратите внимание, что при подключении к службе хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с использованием ключа учетной записи хранения, а не подписанного URL-адреса (SAS).
В SQL Server 2016 (13.x) параметр TYPE
должен иметь значение HADOOP
даже при доступе к службе хранилища Azure.
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
IDENTITY = '<my_account>' ,
SECRET = '<azure_storage_account_key>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
CREDENTIAL = AzureStorageCredential ,
TYPE = HADOOP
) ;
Дальнейшие действия
Обзор: SQL Server 2017
Область применения: SQL Server 2017 (14.x) — только эта версия
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация и загрузка данных с помощью PolyBase
- Операции массовой загрузки с помощью
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.
Синтаксис для SQL Server 2017
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в 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>]' )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:port]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Аутентификация |
---|---|---|---|---|
Cloudera CDH или Hortonworks HDP | hdfs |
<Namenode>[:port] |
Только с SQL Server 2016 (13.x) по SQL Server 2019 (15.x) | Анонимная или обычная проверка подлинности |
Учетная запись хранения Azure (v2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Начиная с SQL Server 2016 (13.x); Иерархическое пространство имен не поддерживается |
Ключ учетной записи службы хранилища Azure |
массовые операции | https |
<storage_account>.blob.core.windows.net/<container> |
Начиная с SQL Server 2017 (14.x) | Подписанный URL-адрес (SAS) |
Путь к расположению:
<
Namenode>
: имя компьютера или IP-адресNamenode
в Hadoop Namenode. PolyBase необходимо разрешить любые DNS-имена, используемые в кластере Hadoop.port
: порт, который прослушивает внешний источник данных. В Hadoop порт можно найти, используя параметр конфигурацииfs.defaultFS
. Значение по умолчанию — 8020.<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно.<storage_account>
: имя учетной записи хранения ресурса Azure.<server_name>
: имя узла.<instance_name>
: имя экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
- Укажите
Driver={<Name of Driver>}
при подключении черезODBC
. - Префикс
wasbs
не является обязательным, но рекомендуется к использованию в SQL Server 2017 (14.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL. - Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, следует выполнить команду ALTER EXTERNAL DATA SOURCE, чтобы указать новое расположение.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.- Если =
BLOB_STORAGE
SHARED ACCESS SIGNATURE
, учетные данные необходимо создавать, используяTYPE
в качестве удостоверения. TYPE
= ЗначениеBLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, еслиTYPE
=BLOB_STORAGE
.- Обратите внимание, что при подключении к службе хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с использованием ключа учетной записи хранения, а не подписанного URL-адреса (SAS).
- Если
TYPE
=HADOOP
, учетные данные следует создавать с использованием ключа учетной записи хранения в качестве значенияSECRET
.
Существует несколько способов создания подписанного URL-адреса.
Вы можете создать маркер SAS, перейдя к портал Azure -><Your_Storage_Account> -> Подписанный URL-адрес -> Настройка разрешений -> Создание SAS и строка подключения. Дополнительные сведения см. в разделе Создание подписанного URL-адреса.
Вы можете создать и настроить SAS с помощью Обозреватель службы хранилища Azure.
Вы можете создать SAS программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Использование подписанных URL-адресов (SAS) для обеспечения ограниченного доступа к ресурсам в службе хранилища Azure.
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
?
значение при настройке в качестве SECRET. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение для файла, который должен быть загружен (например
srt=o&sp=r
, ). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Read Чтение данных из нескольких файлов и вложенных папок Чтение и перечисление - Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = [ HADOOP | BLOB_STORAGE ]
Указывает тип настраиваемого внешнего источника данных. Этот параметр не всегда является обязательным и должен указываться только при подключении к Cloudera CDH, Hortonworks HDP, учетной записи службы хранилища Azure или Azure Data Lake Storage 2-го поколения.
- Используйте
HADOOP
, если внешний источник данных — Cloudera CDH, Hortonworks HDP, учетная запись службы хранилища Azure или Azure Data Lake Storage 2-го поколения. - Используйте
BLOB_STORAGE
при выполнении пакетных операций из учетной записи службы хранилища Azure с использованием инструкций BULK INSERT или OPENROWSET. Появилось в SQL Server 2017 (14.x). ИспользуйтеHADOOP
, если планируете создать внешнюю таблицу для службы хранилища Azure с помощью команды CREATE EXTERNAL TABLE.
Примечание
Параметр TYPE
должен иметь значение HADOOP
даже при доступе к службе хранилища Azure.
Пример использования TYPE
= HADOOP
для загрузки данных из учетной записи службы хранилища Azure см. в разделе Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:порт]'
Настройте это необязательное значение только при подключении к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Полный список поддерживаемых версий Hadoop см. в разделе Конфигурация подключений PolyBase (Transact-SQL).
Если RESOURCE_MANAGER_LOCATION
определен, оптимизатор запросов будет принимать решение на основе затрат для повышения производительности. Задание MapReduce можно использовать, чтобы передать вычисления в Hadoop. Указание RESOURCE_MANAGER_LOCATION
может значительно сократить объем данных, передаваемых между Hadoop и SQL Server, повышая производительность запросов.
Если значение для Resource Manager не задано, отправка вычислений в Hadoop для запросов PolyBase отключена. См. конкретный пример и дальнейшие рекомендации в разделе Создание внешнего источника данных для ссылки на Hadoop с поддержкой передачи.
Значение RESOURCE_MANAGER_LOCATION не проверяется при создании внешнего источника данных. Указание неверного значения может вызвать сбой запроса во время выполнения каждый раз, когда выполняется попытка принудительной передачи, так как переданное значение невозможно разрешить.
Для корректной работы PolyBase с внешним источником данных Hadoop необходимо открыть порты для следующих компонентов кластера Hadoop:
- Порты HDFS
- NameNode
- DataNode
- Resource Manager
- Отправка задания
- Журнал заданий
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к Hadoop (hadoop connectivity).
Подключение к Hadoop | Порт по умолчанию диспетчера ресурсов |
---|---|
1 | 50300 |
2 | 50300 |
3 | 8021 |
4 | 8032 |
5 | 8050 |
6 | 8032 |
7 | 8050 |
8 | 8032 |
В следующей таблице показаны порты по умолчанию для этих компонентов. Обратите внимание на зависимость от версий Hadoop и возможность пользовательской конфигурации, не использующей назначение портов по умолчанию.
Компонент кластера Hadoop | Порт по умолчанию |
---|---|
узел имен; | 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.
A. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8050' ,
TYPE = HADOOP
) ;
Б. Создание внешнего источника данных для ссылки на Hadoop с включенной отправкой
Укажите параметр RESOURCE_MANAGER_LOCATION
, чтобы включить принудительную передачу вычислений в Hadoop для запросов PolyBase. После включения PolyBase принимает решение на основе затрат для определения того, должны ли вычисления запроса быть переданы в Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8020' ,
TYPE = HADOOP ,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
) ;
В. Создание внешнего источника данных для ссылки на Hadoop с защитой Kerberos
Чтобы проверить, защищен ли кластер Hadoop протоколом Kerberos, проверьте значение свойства hadoop.security.authentication
в файле Hadoop core-site.xml. Чтобы сослаться на кластер Hadoop с защитой Kerberos, необходимо указать учетные данные с областью действия "база данных", которые содержат ваше имя пользователя и пароль Kerberos. Главный ключ базы данных используется для шифрования секрета учетных данных с областью действия "база данных".
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH
IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8050' ,
CREDENTIAL = HadoopUser1 ,
TYPE = HADOOP ,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Г. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных представляет собой учетную запись службы хранилища Azure v2 под названием logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. Обратите внимание, что при подключении к службе хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с использованием ключа учетной записи хранения, а не подписанного URL-адреса (SAS).
В этом примере показано, как создать учетные данные с областью действия "база данных" для аутентификации в учетной записи службы хранилище Azure v2. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; эти данные не используются для проверки подлинности в службе хранилища Azure.
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
IDENTITY = '<my_account>' ,
SECRET = '<azure_storage_account_key>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
CREDENTIAL = AzureStorageCredential ,
TYPE = HADOOP
) ;
Примеры: массовые операции
Важно!
Не следует добавлять / , имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
Д. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2017 (14.x) и более поздних версий.
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или OPENROWSET. Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_storage_account_key>' ;
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
( LOCATION = 'https://newinvoices.blob.core.windows.net/week3' ,
CREDENTIAL = AccessAzureInvoices ,
TYPE = BLOB_STORAGE
) ;
Реализация этого примера доступна в разделе BULK INSERT.
Дальнейшие действия
Обзор: SQL Server 2019
Область применения: SQL Server 2019 (15.x) и более поздних версий
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация и загрузка данных с помощью 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.
Синтаксис для SQL Server 2019
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в 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>]' )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:port]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Аутентификация |
---|---|---|---|---|
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; | oracle |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
Teradata | teradata |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
MongoDB или API Cosmos DB для MongoDB | mongodb |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) | Только обычная проверка подлинности |
Универсальные данные ODBC | odbc |
<server_name>[:port] |
Начиная с SQL Server 2019 (15.x) — только Windows | Только обычная проверка подлинности |
массовые операции | https |
<storage_account>.blob.core.windows.net/<container> |
Начиная с SQL Server 2017 (14.x) | Подписанный URL-адрес (SAS) |
Azure Data Lake Storage 2-го поколения | abfs[s] |
abfss://<container>@<storage _account>.dfs.core.windows.net |
Начиная с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 и далее. | Storage Access Key (Ключ доступа к хранилищу) |
Пул данных Кластеров больших данных SQL Server | sqldatapool |
sqldatapool://controller-svc/default |
Поддерживается только в Кластерах больших данных SQL Server 2019 | Только обычная проверка подлинности |
Пул носителей в Кластерах больших данных SQL Server | sqlhdfs |
sqlhdfs://controller-svc/default |
Поддерживается только в Кластерах больших данных SQL Server 2019 | Только обычная проверка подлинности |
Путь к расположению:
<Namenode>
— имя компьютера, URI службы имен или IP-адресNamenode
в кластере Hadoop. PolyBase необходимо разрешить любые DNS-имена, используемые в кластере Hadoop.port
: порт, который прослушивает внешний источник данных. В Hadoop порт можно найти, используя параметр конфигурацииfs.defaultFS
. Значение по умолчанию — 8020.<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно.<storage_account>
: имя учетной записи хранения ресурса Azure.<server_name>
: имя узла.<instance_name>
: имя экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
- Соединитель
sqlserver
можно использовать для подключения SQL Server 2019 (15.x) к другому SQL Server или для Azure SQL базы данных. - Укажите
Driver={<Name of Driver>}
при подключении черезODBC
. wasbs
иabfss
необязательны, но рекомендуются к использованию в SQL Server 2019 (15.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL.- API
abfs
илиabfss
поддерживаются при доступе к учетным записям хранения Azure с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 (CU11). Дополнительные сведения см. в разделе Драйвер Azure Blob Filesystem (ABFS). - Параметр иерархического пространства имен для учетных записей службы хранилища Azure (V2) с
abfs[s]
поддерживается с помощью Azure Data Lake Storage 2-го поколения, начиная с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 (CU11) и выше. В противном случае параметр иерархического пространства имен не поддерживается и должен быть отключен. - Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, следует выполнить команду ALTER EXTERNAL DATA SOURCE, чтобы указать новое расположение. - Типы
sqlhdfs
иsqldatapool
поддерживаются для подключения между главным экземпляром и пулом носителей кластера больших данных. Для Cloudera CDH или Hortonworks HDP следует использоватьhdfs
. Дополнительные сведения об использованииsqlhdfs
для запросов пулов носителей кластеров больших данных SQL Server см. в статье Запрос данных HDFS в кластере больших данных SQL Server 2019. - SQL Server поддержка внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) будет прекращена и не будет включена в SQL Server 2022 (16.x). Дополнительные сведения см. в разделе Параметры больших данных на платформе Microsoft SQL Server.
CONNECTION_OPTIONS = пара "ключ-значение"
Указано для SQL Server 2019 (15.x) и более поздних версий. Указывает дополнительные параметры при подключении через ODBC
к внешнему источнику данных. Чтобы использовать несколько параметров подключения, укажите их через точку с запятой.
Применяется к универсальным ODBC
-соединениям и ко встроенным соединителям ODBC
для SQL Server, Oracle, Teradata, MongoDB и API Azure Cosmos DB для MongoDB.
key_value_pair
— это ключевое слово и значение для конкретного параметра соединения. Доступные ключевые слова и значения зависят от типа внешнего источника данных. Имя драйвера необходимо, но существуют и другие параметры, такие как APP='<your_application_name>'
или ApplicationIntent= ReadOnly|ReadWrite
, которые полезно задать, так как они могут помочь в устранении неполадок.
Возможные пары "ключ-значение" зависят от поставщика для внешнего источника данных. Дополнительные сведения для каждого поставщика см. в статье CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Начиная с SQL Server 2019 г. (15.x) накопительного обновления 19, появились дополнительные ключевые слова для поддержки файлов Oracle TNS:
- Ключевое слово
TNSNamesFile
указывает путь к файлу,tnsnames.ora
расположенному на сервере Oracle. - В ключевое слово
ServerName
указывается псевдоним, используемыйtnsnames.ora
внутри , который будет использоваться для замены имени узла и порта.
Pushdown = ON | OFF
Указано только для SQL Server 2019 (15.x). Указывает, могут ли вычисления быть переданы во внешний источник данных. По умолчанию задано параметр ON.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение параметра на уровне запроса достигается за счет указаний.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.- Если =
BLOB_STORAGE
SHARED ACCESS SIGNATURE
, учетные данные необходимо создавать, используяTYPE
в качестве удостоверения.TYPE
= ЗначениеBLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, еслиTYPE
=BLOB_STORAGE
.
Существует несколько способов создания подписанного URL-адреса.
Вы можете создать маркер SAS, перейдя к портал Azure -><Your_Storage_Account> -> Подписанный URL-адрес -> Настройка разрешений -> Создание SAS и строка подключения. Дополнительные сведения см. в разделе Создание подписанного URL-адреса.
Вы можете создать и настроить SAS с помощью Обозреватель службы хранилища Azure.
Вы можете создать SAS программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Использование подписанных URL-адресов (SAS) для обеспечения ограниченного доступа к ресурсам в службе хранилища Azure.
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
?
значение при настройке в качестве SECRET. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение для файла, который должен быть загружен (например
srt=o&sp=r
, ). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Read Чтение данных из нескольких файлов и вложенных папок Чтение и перечисление - Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = [ HADOOP | BLOB_STORAGE ]
Указывает тип настраиваемого внешнего источника данных. Этот параметр не всегда является обязательным и должен указываться только при подключении к Cloudera CDH, Hortonworks HDP, учетной записи службы хранилища Azure или Azure Data Lake Storage 2-го поколения.
- В SQL Server 2019 (15.x) не указывайте TYPE, если не выполняется подключение к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure.
- Используйте
HADOOP
, если внешний источник данных — Cloudera CDH, Hortonworks HDP, учетная запись службы хранилища Azure или Azure Data Lake Storage 2-го поколения. - Используйте
BLOB_STORAGE
при выполнении пакетных операций из учетной записи службы хранилища Azure с использованием инструкций BULK INSERT или OPENROWSET с SQL Server 2017 (14.x). ИспользуйтеHADOOP
, если планируете создать внешнюю таблицу для службы хранилища Azure с помощью команды CREATE EXTERNAL TABLE. - SQL Server поддержка внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) будет прекращена и не будет включена в SQL Server 2022 (16.x). Дополнительные сведения см. в разделе Параметры больших данных на платформе Microsoft SQL Server.
Пример использования TYPE
= HADOOP
для загрузки данных из учетной записи службы хранилища Azure см. в разделе Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:порт]'
В SQL Server 2019 (15.x) не указывайте RESOURCE_MANAGER_LOCATION, если не выполняется подключение к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure.
Настройте это необязательное значение только при подключении к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Полный список поддерживаемых версий Hadoop см. в разделе Конфигурация подключений PolyBase (Transact-SQL).
При определении RESOURCE_MANAGER_LOCATION
оптимизатор запросов принимает решение о повышении производительности на основе затрат. Задание MapReduce можно использовать, чтобы передать вычисления в Hadoop. Указание RESOURCE_MANAGER_LOCATION
может значительно сократить объем данных, передаваемых между Hadoop и SQL Server, повышая производительность запросов.
Если значение для Resource Manager не задано, отправка вычислений в Hadoop для запросов PolyBase отключена. См. конкретный пример и дальнейшие рекомендации в разделе Создание внешнего источника данных для ссылки на Hadoop с поддержкой передачи.
Значение RESOURCE_MANAGER_LOCATION не проверяется при создании внешнего источника данных. Указание неверного значения может вызвать сбой запроса во время выполнения каждый раз, когда выполняется попытка принудительной передачи, так как переданное значение невозможно разрешить.
Для корректной работы PolyBase с внешним источником данных Hadoop необходимо открыть порты для следующих компонентов кластера Hadoop:
- Порты HDFS
- NameNode
- DataNode
- Resource Manager
- Отправка задания
- Журнал заданий
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к Hadoop (hadoop connectivity).
Подключение к Hadoop | Порт по умолчанию диспетчера ресурсов |
---|---|
1 | 50300 |
2 | 50300 |
3 | 8021 |
4 | 8032 |
5 | 8050 |
6 | 8032 |
7 | 8050 |
8 | 8032 |
В следующей таблице показаны порты по умолчанию для этих компонентов. Обратите внимание на зависимость от версий Hadoop и возможность пользовательской конфигурации, не использующей назначение портов по умолчанию.
Компонент кластера Hadoop | Порт по умолчанию |
---|---|
узел имен; | 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.
A. Создание внешнего источника данных в SQL Server 2019 для ссылки на Oracle
Чтобы создать внешний источник данных, ссылающийся на Oracle, убедитесь, что у вас есть учетные данные уровня базы данных. При необходимости также может включить или отключить передачу вычислений к этому источнику данных.
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH
IDENTITY = 'oracle_username',
SECRET = 'oracle_password' ;
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH
( LOCATION = 'oracle://145.145.145.145:1521',
CREDENTIAL = OracleProxyAccount,
PUSHDOWN = ON
) ;
Внешний источник данных для Oracle также может при необходимости использовать проверку подлинности прокси для детализированного управления доступом. Пользователя прокси-сервера можно настроить таким образом, чтобы он имел ограниченный доступ по сравнению с олицетворением пользователя.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username', SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]);
Кроме того, можно использовать проверку подлинности TNS.
Начиная с SQL Server 2019 г. (15.x) накопительный пакет обновления 19 теперь CREATE EXTERNAL DATA SOURCE
поддерживает использование TNS-файлов при подключении к Oracle.
Параметр CONNECTION_OPTIONS
был расширен и теперь использует TNSNamesFile
и в ServerName
качестве переменных для просмотра tnsnames.ora
файла и установления соединения с сервером.
В приведенном ниже примере во время выполнения SQL Server будет искать tnsnames.ora
расположение файла, указанное параметром TNSNamesFile
, а также узел и сетевой порт, указанные параметром ServerName
.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
)
GO
Дополнительные примеры для других источников данных, таких как MongoDB, см. в разделе Настройка PolyBase для доступа к внешним данным в MongoDB.
Б. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8050' ,
TYPE = HADOOP
) ;
В. Создание внешнего источника данных для ссылки на Hadoop с включенной отправкой
Укажите параметр RESOURCE_MANAGER_LOCATION
, чтобы включить принудительную передачу вычислений в Hadoop для запросов PolyBase. После включения PolyBase принимает решение на основе затрат для определения того, должны ли вычисления запроса быть переданы в Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8020' ,
TYPE = HADOOP ,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
) ;
Г. Создание внешнего источника данных для ссылки на Hadoop с защитой Kerberos
Чтобы проверить, защищен ли кластер Hadoop протоколом Kerberos, проверьте значение свойства hadoop.security.authentication
в файле Hadoop core-site.xml. Чтобы сослаться на кластер Hadoop с защитой Kerberos, необходимо указать учетные данные с областью действия "база данных", которые содержат ваше имя пользователя и пароль Kerberos. Главный ключ базы данных используется для шифрования секрета учетных данных с областью действия "база данных".
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH
IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8050' ,
CREDENTIAL = HadoopUser1 ,
TYPE = HADOOP ,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
Д. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных представляет собой учетную запись службы хранилища Azure v2 под названием logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. Обратите внимание, что при подключении к службе хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с использованием ключа учетной записи хранения, а не подписанного 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 через соединение Polybase
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных, ссылающийся на именованный экземпляр SQL Server, используйте CONNECTION_OPTIONS
для указания имени экземпляра.
В следующем примере — это имя узла, WINSQL2019
а SQL2019
— имя экземпляра. 'Server=%s\SQL2019'
— пара "ключ-значение".
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019' ,
CONNECTION_OPTIONS = 'Server=%s\SQL2019' ,
CREDENTIAL = SQLServerCredentials
) ;
Кроме того, можно использовать порт для подключения к экземпляру SQL Server по умолчанию.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137' ,
CREDENTIAL = SQLServerCredentials
) ;
Ж. Создание внешнего источника данных для ссылки на вторичную реплику для чтения группы доступности Always On
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных с ссылкой на вторичную реплику SQL Server для чтения, используйте CONNECTION_OPTIONS
, чтобы указать ApplicationIntent=ReadOnly
.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';
Затем создайте новый внешний источник данных.
Параметр ODBC Database
не требуется, укажите имя базы данных вместо имени из трех частей в инструкции CREATE EXTERNAL TABLE в параметре LOCATION. Пример см. в разделе CREATE EXTERNAL TABLE.
В следующем примере — это имя прослушивателя группы доступности, а dbname
— имя базы данных, WINSQL2019AGL
целевой для инструкции CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL' ,
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly' ,
CREDENTIAL = SQLServerCredentials
);
Можно продемонстрировать поведение перенаправления группы доступности, указав ApplicationIntent
и создав внешнюю таблицу в системном представлении sys.servers
. В следующем примере скрипта создаются два внешних источника данных, для каждого из которых создается одна внешняя таблица. Используйте представления, чтобы проверить, какой сервер отвечает на подключение. Похожие результаты можно достичь с помощью маршрутизации только для чтения. Дополнительные сведения см. в статье Настройка маршрутизации только для чтения в группе доступности Always On.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL' ,
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly' ,
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
при настройке внешнего источника данных для массовых операций.
З. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2017 (14.x) и более поздних версий.
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или OPENROWSET. Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>' ;
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
( LOCATION = 'https://newinvoices.blob.core.windows.net/week3' ,
CREDENTIAL = AccessAzureInvoices ,
TYPE = BLOB_STORAGE
) ;
Реализация этого примера доступна в разделе BULK INSERT.
И. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса abfs://.
Область применения: SQL Server 2019 (15.x) с накопительным пакетом обновления 11 (CU11) и более поздних версий
В этом примере внешний источник данных является учетной записью Azure Data Lake Storage 2-го поколения logs
с использованием драйвера Azure Blob File System (ABFS). Контейнер хранилища называется daily
. Внешний источник данных Azure Data Lake Storage 2-го поколения предназначен только для передачи данных, а pushdown предиката не поддерживается.
В этом примере показано, как создать учетные данные с областью действия "база данных" для проверки подлинности в учетной записи Azure Data Lake Storage 2-го поколения. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; эти данные не используются для проверки подлинности в службе хранилища Azure.
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
IDENTITY = '<my_account>' ,
SECRET = '<azure_storage_account_key>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
( LOCATION = 'abfss://daily@logs.dfs.core.windows.net/' ,
CREDENTIAL = AzureStorageCredential ,
TYPE = HADOOP
) ;
К. Создание внешнего источника данных с помощью универсального интерфейса ODBC для PostgreSQL
Как и в предыдущих примерах, сначала создайте базу данных master ключом и учетными данными для базы данных. Учетные данные для базы данных будут использоваться для внешнего источника данных. В этом примере также предполагается, что на сервере установлен универсальный поставщик данных ODBC для PostgreSQL.
В этом примере универсальный поставщик данных ODBC используется для подключения к серверу базы данных PostgreSQL в той же сети, где полное доменное имя сервера PostgreSQL — POSTGRES1
, используя порт по умолчанию 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
Область применения: SQL Server 2022 (16.x) и более поздних версий
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Виртуализация и загрузка данных с помощью PolyBase
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
Примечание
Этот синтаксис отличается в зависимости от версии SQL Server. Используйте селектор, чтобы выбрать соответствующую версию. Это содержимое относится к SQL Server 2022 (16.x) и более поздних версий.
Синтаксис SQL Server 2022 и более поздних версий
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:port]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Поддерживаемые расположения по продукту или службе | Аутентификация |
---|---|---|---|---|
Учетная запись хранения Azure (версии 2) | abs |
abs://<storage_account_name>.blob.core.windows.net/<container_name> |
Начиная с SQL Server 2022 (16.x) Поддерживается иерархическое пространство имен |
Подписанный URL-адрес (SAS) |
Azure Data Lake Storage 2-го поколения | adls |
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; | 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://<server_name>:<port>/ |
Начиная с SQL Server 2022 (16.x) | * |
* Должны быть учетными данными для базы данных, где идентификатор 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>
= только для совместимого с S3 хранилища объектов (начиная с SQL Server 2022 (16.x)), конечная точка и порт, используемые для подключения к совместимому с S3 хранилищу.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Соединитель
sqlserver
можно использовать для подключения SQL Server 2019 (15.x) к другой SQL Server или к базе данных Azure SQL. - Укажите
Driver={<Name of Driver>}
при подключении черезODBC
. - В SQL Server 2022 (16.x) поддерживается функция иерархического пространства имен для учетных записей хранения Azure (версии 2) с использованием префикса
adls
через Azure Data Lake Storage 2-го поколения.
- SQL Server поддержка внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) прекращена и не включена в SQL Server 2022 (16.x). В SQL Server 2022 (16.x) использовать аргумент TYPE не требуется.
- Дополнительные сведения о совместимом с S3 хранилище объектов и PolyBase начиная с SQL Server 2022 (16.x) см. в статье Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов. Пример запроса файла Parquet в совместимом с S3 хранилище объектов см. в разделе Виртуализация файла Parquet в совместимом с S3 хранилище объектов с помощью PolyBase.
- В отличие от предыдущих версий, в SQL Server 2022 (16.x) префикс
wasb[s]
для учетной записи хранения Azure (версии 2) изменен наabs
. - В отличие от предыдущих версий, в SQL Server 2022 (16.x) префикс
abfs[s]
для Azure Data Lake Storage 2-го поколения изменен наadls
. - Пример использования PolyBase для виртуализации CSV-файла в службе хранилища Azure см. в статье Виртуализация CSV-файла с помощью PolyBase.
- Пример использования PolyBase для виртуализации таблицы Delta в ADLS 2-го поколения см. в Виртуализация таблицы Delta с помощью PolyBase.
CONNECTION_OPTIONS = пара "ключ-значение"
Указано для SQL Server 2019 (15.x) и более поздних версий. Указывает дополнительные параметры при подключении через ODBC
к внешнему источнику данных. Чтобы использовать несколько параметров подключения, укажите их через точку с запятой.
Применяется к универсальным ODBC
-соединениям и ко встроенным соединителям ODBC
для SQL Server, Oracle, Teradata, MongoDB и API Azure Cosmos DB для MongoDB.
key_value_pair
— это ключевое слово и значение для конкретного параметра соединения. Доступные ключевые слова и значения зависят от типа внешнего источника данных. Имя драйвера необходимо, но существуют и другие параметры, такие как APP='<your_application_name>'
или ApplicationIntent= ReadOnly|ReadWrite
, которые полезно задать, так как они могут помочь в устранении неполадок.
Возможные пары "ключ-значение" зависят от драйвера. Дополнительные сведения для каждого поставщика см. в статье CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Начиная с статьи Применимо к: SQL Server 2022 (16.x) накопительного обновления 2 были добавлены дополнительные ключевые слова для поддержки файлов Oracle TNS:
- Ключевое слово
TNSNamesFile
указывает путь к файлу,tnsnames.ora
расположенному на сервере Oracle. - В ключевое слово
ServerName
указывается псевдоним, используемыйtnsnames.ora
внутри , который будет использоваться для замены имени узла и порта.
PUSHDOWN = ON | OFF
Область применения: SQL Server 2019 (15.x) и более поздних версий. Указывает, могут ли вычисления быть переданы во внешний источник данных. Параметр включен по умолчанию.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение параметра на уровне запроса достигается за счет указаний.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.- При доступе к учетной записи хранения Azure (версии 2) или Azure Data Lake Storage 2-го поколения
IDENTITY
должен иметь значениеSHARED ACCESS SIGNATURE
.
Существует несколько способов создания подписанного URL-адреса.
Вы можете создать маркер SAS, перейдя к портал Azure -><Your_Storage_Account> - Подписанный URL-адрес ->> Настройка разрешений -> Создание SAS и строки подключения. Дополнительные сведения см. в статье Создание подписанного URL-адреса.
Вы можете создать и настроить SAS с помощью Обозреватель службы хранилища Azure.
Вы можете создать SAS программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Использование подписанных URL-адресов (SAS) для обеспечения ограниченного доступа к ресурсам в службе хранилища Azure.
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
?
значение при настройке в качестве SECRET. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
, ). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Read Чтение данных из нескольких файлов и вложенных папок Чтение и перечисление Использовать команду Создать внешнюю таблицу как выбрать (CETAS) Чтение, создание, перечисление и запись - Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
Для Хранилище BLOB-объектов Azure и Azure Data Lake 2-го поколения:
- Разрешенные службы:
Blob
необходимо выбрать для создания маркера SAS. - Разрешенные типы ресурсов:
Container
иObject
должны быть выбраны для создания маркера SAS.
- Разрешенные службы:
Если =
BLOB_STORAGE
SHARED ACCESS SIGNATURE
, учетные данные необходимо создавать, используяTYPE
в качестве удостоверения. Кроме того, маркер SAS должен создаваться следующим образом:- Удалите
?
в начале при настройке в качестве секрета. - Задайте по меньшей мере разрешение на чтение для файла, который требуется загрузить (например,
srt=o&sp=r
). - Используйте допустимый срок действия (все даты указываются в формате UTC).
TYPE
= ЗначениеBLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, еслиTYPE
=BLOB_STORAGE
.
- Удалите
Пример использования CREDENTIAL
совместимого с S3 хранилища объектов и PolyBase см. в разделе Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Обновление до SQL Server 2022
Начиная с SQL Server 2022 г. (16.x) внешние источники данных Hadoop больше не поддерживаются. Необходимо вручную воссоздать внешние источники данных, созданные ранее с помощью TYPE = HADOOP
, и внешние таблицы, которые используют этот внешний источник данных.
Пользователям также потребуется настроить внешние источники данных для использования новых соединителей при подключении к службе хранилища Azure.
Внешний источник данных | Исходный тип | Кому |
---|---|---|
хранилище BLOB-объектов Azure | wasb(s) | abs |
ADLS 2-го поколения | abfs(s) | adls |
Примеры
Важно!
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
A. Создание внешнего источника данных в SQL Server для ссылки на Oracle
Чтобы создать внешний источник данных, ссылающийся на Oracle, убедитесь, что у вас есть учетные данные уровня базы данных. При необходимости также может включить или отключить передачу вычислений к этому источнику данных.
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH
IDENTITY = 'oracle_username',
SECRET = 'oracle_password' ;
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH
( LOCATION = 'oracle://145.145.145.145:1521',
CREDENTIAL = OracleProxyAccount,
PUSHDOWN = ON
) ;
Внешний источник данных для Oracle также может при необходимости использовать проверку подлинности прокси для детализированного управления доступом. Пользователя прокси-сервера можно настроить таким образом, чтобы он имел ограниченный доступ по сравнению с олицетворением пользователя.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username', SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]);
Кроме того, вы можете пройти проверку подлинности с помощью TNS.
Начиная с статьи Применимо к: SQL Server 2022 (16.x) Накопительный пакет обновления 2 теперь
CREATE EXTERNAL DATA SOURCE
поддерживает использование TNS-файлов при подключении к Oracle.
Параметр CONNECTION_OPTIONS
был развернут и теперь использует TNSNamesFile
и ServerName
в качестве переменных для просмотра tnsnames.ora
файла и установления соединения с сервером.
В приведенном ниже примере во время выполнения SQL Server будет искать tnsnames.ora
расположение файла, указанное в параметре TNSNamesFile
, а также узел и сетевой порт, указанные параметром ServerName
.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
)
GO
Б. Создание внешнего источника данных для ссылки на именованный экземпляр SQL Server через соединение Polybase
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных, ссылающийся на именованный экземпляр SQL Server, используйте CONNECTION_OPTIONS
для указания имени экземпляра.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';
В следующем примере — это имя узла, WINSQL2019
а SQL2019
— имя экземпляра. 'Server=%s\SQL2019'
— пара "ключ-значение".
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019' ,
CONNECTION_OPTIONS = 'Server=%s\SQL2019' ,
CREDENTIAL = SQLServerCredentials
) ;
Кроме того, можно использовать порт для подключения к экземпляру SQL Server по умолчанию.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
) ;
В. Создание внешнего источника данных для ссылки на вторичную реплику для чтения группы доступности Always On
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных с ссылкой на вторичную реплику SQL Server для чтения, используйте CONNECTION_OPTIONS
, чтобы указать ApplicationIntent=ReadOnly
.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';
Затем создайте новый внешний источник данных.
Параметр ODBC Database
не требуется, укажите имя базы данных вместо имени из трех частей в инструкции CREATE EXTERNAL TABLE в параметре LOCATION. Пример см. в разделе CREATE EXTERNAL TABLE.
В следующем примере — это имя прослушивателя группы доступности, а dbname
— имя базы данных, WINSQL2019AGL
в качестве целевого объекта инструкции CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL' ,
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly' ,
CREDENTIAL = SQLServerCredentials
);
Можно продемонстрировать поведение перенаправления группы доступности, указав ApplicationIntent
и создав внешнюю таблицу в системном представлении sys.servers
. В следующем примере скрипта создаются два внешних источника данных, для каждого из которых создается одна внешняя таблица. Используйте представления, чтобы проверить, какой сервер отвечает на подключение. Похожие результаты можно достичь с помощью маршрутизации только для чтения. Дополнительные сведения см. в статье Настройка маршрутизации только для чтения в группе доступности Always On.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL' ,
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly' ,
CREDENTIAL = [SQLServerCredentials]);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL' ,
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite' ,
CREDENTIAL = [SQLServerCredentials]);
GO
В базе данных группы доступности создайте представление для возврата sys.servers
и имя локального экземпляра, что поможет определить, какая реплика отвечает на запрос. Дополнительные сведения см. в статье sys.servers.
CREATE VIEW vw_sys_servers AS
SELECT [name] FROM sys.servers
WHERE server_id = 0;
GO
Затем создайте внешнюю таблицу в исходном экземпляре:
CREATE EXTERNAL TABLE vw_sys_servers_ro
( name sysname NOT NULL )
WITH (DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent], LOCATION = N'dbname.dbo.vw_sys_servers');
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw
( name sysname NOT NULL)
WITH (DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent], LOCATION = N'dbname.dbo.vw_sys_servers');
GO
SELECT [name] FROM dbo.vw_sys_servers_ro; --should return secondary replica instance
SELECT [name] FROM dbo.vw_sys_servers_rw; --should return primary replica instance
GO
Г. Создание внешнего источника данных для запроса файла Parquet в совместимое с S3 хранилище объектов с помощью PolyBase
Область применения: SQL Server 2022 (16.x) и более поздних версий
Следующий пример скрипта создает внешний источник данных s3_ds
в исходной пользовательской базе данных в SQL Server. Внешний источник данных ссылается на учетные данные на уровне базы данных s3_dc
.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH
IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = <access_key_id>:<secret_key_id> -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
Проверьте новый внешний источник данных с помощью sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Затем в следующем примере показано использование T-SQL для запроса файла Parquet, хранящегося в хранилище объектов, совместимом с S3, с помощью запроса OPENROWSET. Дополнительные сведения см. в статье Виртуализация файла parquet в совместимом с S3 хранилище объектов с помощью PolyBase.
SELECT *
FROM OPENROWSET
( BULK '/<bucket>/<parquet_folder>'
, FORMAT = 'PARQUET'
, DATA_SOURCE = 's3_ds'
) AS [cc];
Д. Создание внешнего источника данных с помощью универсального интерфейса ODBC для PostgreSQL
Как и в предыдущих примерах, сначала создайте базу данных master ключом и учетными данными для базы данных. Учетные данные для базы данных будут использоваться для внешнего источника данных. В этом примере также предполагается, что на сервере установлен универсальный поставщик данных ODBC для PostgreSQL.
В этом примере универсальный поставщик данных ODBC используется для подключения к серверу базы данных PostgreSQL в той же сети, где полное доменное имя сервера PostgreSQL — POSTGRES1
, используя порт по умолчанию TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH
(
LOCATION = 'odbc://POSTGRES1.domain:5432'
,CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};'
,CREDENTIAL = postgres_credential
)
Хранилище Azure
Создание подписанного URL-адреса
Для Хранилище BLOB-объектов Azure и Azure Data Lake 2-го поколения поддерживаемым методом проверки подлинности является подписанный URL-адрес (SAS). Чтобы создать маркер подписанного URL-адреса, выполните следующие действия. Дополнительные сведения см. в разделе CREDENTIAL.
- Перейдите к портал Azure и нужной учетной записи хранения.
- Перейдите к нужному контейнеру в меню Хранилище данных .
- Выберите Общие маркеры доступа.
- Выберите соответствующее разрешение на основе требуемого действия. Для справки используйте таблицу ниже:
Действие | Разрешение |
---|---|
Чтение данных из файла | Read |
Чтение данных из нескольких файлов и вложенных папок | Чтение и перечисление |
Использование параметра Create External Table as Select (CETAS) | Чтение, создание и запись |
- Выберите дату окончания срока действия маркера.
- Создайте маркер SAS и URL-адрес.
- Скопируйте маркер SAS.
Е. Создание внешнего источника данных для доступа к данным в Хранилище BLOB-объектов Azure с помощью интерфейса abs://
Область применения: SQL Server 2022 (16.x) и более поздних версий
Начиная с SQL Server 2022 (16.x), необходимо использовать новый префикс abs
для учетной записи хранения Azure версии 2. Префикс abs
поддерживает проверку подлинности с помощью SHARED ACCESS SIGNATURE
. Префикс abs
заменяет wasb
из предыдущих версий. HADOOP больше не поддерживается, больше нет необходимости использовать TYPE = BLOB_STORAGE
.
Ключ учетной записи хранения Azure больше не является необходимым. Вместо этого используется токен SAS, что показано в следующем примере:
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH
IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
SECRET = '<Blob_SAS_Token>' ;
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
( LOCATION = 'abs://<storage_account_name>.blob.core.windows.net/<container>' ,
CREDENTIAL = AzureStorageCredentialv2,
) ;
Более подробный пример доступа к CSV-файлам, хранящимся в Хранилище BLOB-объектов Azure, см. в статье Виртуализация CSV-файла с помощью PolyBase.
Ж. Создание внешнего источника данных для доступа к данным в Azure Data Lake 2-го поколения
Область применения: SQL Server 2022 (16.x) и более поздних версий
Начиная с SQL Server 2022 (16.x), для Azure Data Lake 2-го поколения используется новый префикс adls
вместо abfs
из предыдущих версий. Префикс adls
также поддерживает маркер SAS в качестве метода проверки подлинности, как показано в следующем примере:
--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH
(
LOCATION = 'adls://<storage_account>.dfs.core.windows.net'
,CREDENTIAL = datalakegen2
)
Более подробный пример доступа к разностным файлам, хранящимся в Azure Data Lake 2-го поколения, см. в статье Виртуализация разностной таблицы с помощью PolyBase.
Примеры: массовые операции
Важно!
Не следует добавлять / , имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
З. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2017 (14.x) и более поздних версий.
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или OPENROWSET. Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>' ;
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
( LOCATION = 'https://newinvoices.blob.core.windows.net/week3' ,
CREDENTIAL = AccessAzureInvoices ,
TYPE = BLOB_STORAGE
) ;
Дальнейшие действия
* База данных SQL *
Общие сведения. База данных SQL Azure
Применимо к:База данных Azure SQL
Создает внешний источник данных для эластичных запросов. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
- Запрос удаленных экземпляров базы данных SQL или Azure Synapse Analytics через базу данных SQL с помощью эластичных запросов
- Запрос сегментированной базы данных SQL с помощью эластичных запросов
Синтаксис
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER } ]
[ [ , ] DATABASE_NAME = '<database_name>' ]
[ [ , ] SHARD_MAP_NAME = '<shard_map_manager>' ] )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:port]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Доступность |
---|---|---|---|
массовые операции | 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://<kafka_bootstrap_server_name_ip>:<port_number> |
Доступно только в SQL Azure для пограничных вычислений. |
Путь к расположению:
<shard_map_server_name>
: имя логического сервера в Azure, на котором размещен диспетчер карт сегментов. АргументDATABASE_NAME
задает базу данных, в которой размещается карта сегментов, аSHARD_MAP_NAME
используется для самой карты сегментов.<remote_server_name>
: логическое имя целевого сервера для эластичного запроса. Имя базы данных задается с помощью аргументаDATABASE_NAME
.
Дополнительные примечания и инструкции при задании расположения:
- Ядро СУБД не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
- Чтобы загрузить данные из службы хранилища Azure в Базу данных SQL Azure, используйте подписанный URL-адрес (маркер SAS).
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.- Если =
BLOB_STORAGE
SHARED ACCESS SIGNATURE
, учетные данные необходимо создавать, используяTYPE
в качестве удостоверения. - При подключении к службе хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с помощью ключа учетной записи хранения, а не с помощью подписанного URL-адреса (SAS).
- Если
TYPE
=HADOOP
, учетные данные следует создавать с использованием ключа учетной записи хранения в качестве значенияSECRET
. TYPE
= ЗначениеBLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, еслиTYPE
=BLOB_STORAGE
.
Существует несколько способов создания подписанного URL-адреса.
Вы можете создать маркер SAS, перейдя к портал Azure -><Your_Storage_Account> - Подписанный URL-адрес ->> Настройка разрешений -> Создание SAS и строки подключения. Дополнительные сведения см. в статье Создание подписанного URL-адреса.
Вы можете создать и настроить SAS с помощью Обозреватель службы хранилища Azure.
Вы можете создать SAS программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Использование подписанных URL-адресов (SAS) для обеспечения ограниченного доступа к ресурсам в службе хранилища Azure.
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
?
значение при настройке в качестве SECRET. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
, ). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Read Чтение данных из нескольких файлов и вложенных папок Чтение и перечисление Использовать команду Создать внешнюю таблицу как выбрать (CETAS) Чтение, создание и запись - Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
Пример использования CREDENTIAL
с SHARED ACCESS SIGNATURE
и TYPE
= BLOB_STORAGE
см. в разделе Создание внешнего источника данных для выполнения массовых операций и извлечения данных из службы хранилища Azure в базу данных SQL.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]
Указывает тип настраиваемого внешнего источника данных. Этот параметр требуется не всегда.
- Используйте
RDBMS
для запросов между базами данных с применением эластичных запросов из базы данных SQL. - Используйте
SHARD_MAP_MANAGER
при создании внешнего источника данных при подключении к сегментированной базе данных SQL. - Используйте
BLOB_STORAGE
при выполнении пакетных операций с использованием инструкций BULK INSERT или OPENROWSET.
Важно!
Не устанавливайте TYPE
при использовании любого другого источника внешних данных.
DATABASE_NAME = имя базы данных
Настройте этот аргумент, если TYPE
задан как RDBMS
или SHARD_MAP_MANAGER
.
TYPE | Значение DATABASE_NAME |
---|---|
Реляционная СУБД | Имя удаленной базы данных на сервере, заданном с помощью LOCATION |
SHARD_MAP_MANAGER | Имя базы данных, работающей в качестве диспетчера карты сегментов |
Пример, демонстрирующий создание внешнего источника данных с TYPE
= RDBMS
, см. в разделе Создание внешнего источника данных в реляционной СУБД.
SHARD_MAP_NAME = имя карты сегментов
Используется, только когда аргумент TYPE
имеет значение SHARD_MAP_MANAGER
, для того, чтобы задать имя карты сегментов.
Пример, демонстрирующий создание внешнего источника данных с TYPE
= SHARD_MAP_MANAGER
, см. в разделе Создание диспетчера карты сегментов в реляционной СУБД.
Разрешения
Необходимо разрешение CONTROL
для Базы данных SQL Azure.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Примеры
A. Создание внешнего источника данных для диспетчера карт сегментов
Чтобы создать внешний источник данных, ссылающийся на SHARD_MAP_MANAGER
, укажите имя сервера базы данных SQL, на котором размещен диспетчер карт сегментов в базе данных SQL, или базу данных SQL Server на виртуальной машине.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH
IDENTITY = '<username>',
SECRET = '<password>' ;
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH
( TYPE = SHARD_MAP_MANAGER ,
LOCATION = '<server_name>.database.windows.net' ,
DATABASE_NAME = 'ElasticScaleStarterKit_ShardMapManagerDb' ,
CREDENTIAL = ElasticDBQueryCred ,
SHARD_MAP_NAME = 'CustomerIDShardMap'
) ;
Пошаговое руководство см. в разделе Приступая к работе с эластичными запросами для сегментирования (горизонтальное секционирование).
Б. Создание внешнего источника данных RDBMS
Чтобы создать внешний источник данных для ссылки на RDBMS, указывается имя сервера базы данных SQL удаленной базы данных в базе данных SQL.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
CREATE DATABASE SCOPED CREDENTIAL SQL_Credential
WITH
IDENTITY = '<username>' ,
SECRET = '<password>' ;
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH
( TYPE = RDBMS ,
LOCATION = '<server_name>.database.windows.net' ,
DATABASE_NAME = 'Customers' ,
CREDENTIAL = SQL_Credential
) ;
Пошаговое руководство по RDBMS см. в разделе Начало работы с запросами между базами данных (вертикальное секционирование).
Примеры: массовые операции
Важно!
Не следует добавлять / , имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
В. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или 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 = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************' ;
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
( LOCATION = 'https://newinvoices.blob.core.windows.net/week3' ,
CREDENTIAL = AccessAzureInvoices ,
TYPE = BLOB_STORAGE
) ;
Реализация этого примера доступна в разделе BULK INSERT.
Примеры: SQL Azure для пограничных вычислений
Важно!
Сведения о настройке внешних данных для SQL Azure для пограничных вычислений см. в статье Потоковая передача данных в SQL Azure для пограничных вычислений.
A. Создание внешнего источника данных для ссылки на Kafka
Область применения:толькоSQL Azure для пограничных вычислений
В этом примере внешний источник данных — это сервер Kafka с IP-адресом xxx.xxx.xxx.xxx, ожидающий передачи данных на порту 1900. Внешний источник данных Kafka предназначен только для потоковой передачи данных и не поддерживает pushdown предиката.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer WITH (
LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900'
)
GO
Б. Создание внешнего источника данных для ссылки на EdgeHub
Область применения:толькоSQL Azure для пограничных вычислений
В этом примере внешний источник данных — это EdgeHub, работающий на том же пограничном устройстве, что и SQL Azure для пограничных вычислений. Внешний источник данных edgeHub предназначен только для потоковой передачи данных и не поддерживает принудительную отправку предиката.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub WITH (
LOCATION = 'edgehub://'
)
go
Дальнейшие действия
* Azure Synapse
Analytics *
Общие сведения. Azure Synapse Analytics
Применимо к:Azure Synapse Analytics
Создает внешний источник данных для виртуализации данных. Внешние источники данных используются для установления подключения и поддержки основного варианта использования виртуализации данных и загрузки данных из внешних источников данных. Дополнительные сведения см. в статье Использование внешних таблиц с Synapse SQL.
Важно!
Чтобы создать внешний источник данных для запроса ресурса Azure Synapse Analytics через базу данных SQL Azure с помощью эластичных запросов, см. раздел База данных SQL.
Синтаксис
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
)
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В Базе данных SQL Azure в Azure Synapse Analytics это имя должно быть уникальным.
LOCATION = '<prefix>://<path>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению |
---|---|---|
Data Lake Storage* 1-го поколения | adl |
<storage_account>.azuredatalake.net |
Data Lake Storage 2-го поколения | abfs[s] |
<container>@<storage_account>.dfs.core.windows.net |
хранилище BLOB-объектов Azure | wasbs |
<container>@<storage_account>.blob.core.windows.net |
хранилище BLOB-объектов Azure | https |
<storage_account>.blob.core.windows.net/<container>/subfolders |
Azure Data Lake Storage 1-го поколения | http[s] |
<storage_account>.azuredatalakestore.net/webhdfs/v1 |
Data Lake Storage 2-го поколения | http[s] |
<storage_account>.dfs.core.windows.net/<container>/subfolders |
Data Lake Storage 2-го поколения | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
* Microsoft Azure Data Lake Storage 1-го поколения имеет ограниченную поддержку. Рекомендуется использовать 2-е поколение для всех новых разработок.
Внешний источник данных | Префикс расположения соединителя | Выделенные пулы SQL: PolyBase | Выделенные пулы SQL: собственный* | бессерверные пулы SQL; |
---|---|---|---|---|
Data Lake Storage** 1-го поколения | adl |
Нет | Нет | Да |
Data Lake Storage 2-го поколения | abfs[s] |
Да | Да | Да |
хранилище BLOB-объектов Azure | wasbs |
Да | Да*** | Да |
хранилище BLOB-объектов Azure | https |
Нет | Да | Да |
Azure Data Lake Storage 1-го поколения | http[s] |
Нет | Нет | Да |
Data Lake Storage 2-го поколения | http[s] |
Да | Да | Да |
Data Lake Storage 2-го поколения | wasb[s] |
Да | Да | Да |
* Бессерверные и выделенные пулы SQL в Azure Synapse Analytics используют разные базы кода для виртуализации данных. Бессерверные пулы SQL поддерживают собственную технологию виртуализации данных. Выделенные пулы SQL поддерживают собственную виртуализацию данных и виртуализацию данных PolyBase. Виртуализация данных PolyBase используется при создании внешнего источника данных с TYPE=HADOOP
помощью .
** Microsoft Azure Data Lake Storage 1-го поколения имеет ограниченную поддержку. Рекомендуется использовать 2-е поколение для всех новых разработок.
Рекомендуется использовать более безопасный wasbs
соединитель по сравнению с wasb
. Только собственная виртуализация данных в выделенных пулах SQL (где TYPE не соответствует HADOOP) поддерживает wasb
.
Путь к расположению:
<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно.<storage_account>
: имя учетной записи хранения ресурса Azure.
Дополнительные примечания и инструкции при задании расположения:
- По умолчанию при подготовке Azure Data Lake Storage 2-го поколения используется
enable secure SSL connections
. Если выбрано защищенное TLS/SSL-подключение, необходимо использоватьabfss
. Обратите внимание, чтоabfss
работает и для небезопасных подключений TLS. Дополнительные сведения см. в разделе Драйвер Azure Blob Filesystem (ABFS). - Azure Synapse не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
- Префикс
https:
позволяет использовать в пути вложенную папку.https
доступен не для всех методов доступа к данным. wasbs
рекомендуется к использованию, так как тогда данные будут передаваться по защищенному каналу TLS.- Иерархические пространства имен не поддерживаются учетными записями хранения Azure версии 2 при доступе к данным с помощью устаревшего
wasb://
интерфейса, но использованиеwasbs://
поддерживает иерархические пространства имен.
CREDENTIAL = credential_name
Необязательный элемент. Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных. Внешний источник данных без учетных данных может получить доступ к общедоступной учетной записи хранения или использовать удостоверение Azure AD вызывающей стороны для доступа к файлам в службе хранилища Azure.
Дополнительные примечания и инструкции при задании учетных данных:
- Чтобы загрузить данные из службы хранилища Azure или Azure Data Lake Store (ADLS) 2-го поколения в Azure Synapse Analytics, используйте ключ службы хранилища Azure.
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
- В бессерверном пуле SQL учетные данные уровня базы данных могут указывать управляемое удостоверение рабочей области, имя субъекта-службы или маркер подписанного URL-адреса (SAS). Доступ также возможен через удостоверение пользователя, также известное как "Azure AD сквозной" возможен в учетных данных уровня базы данных, как и анонимный доступ к общедоступному хранилищу. Дополнительные сведения см. в разделе Поддерживаемые типы авторизации хранилища.
- В выделенном пуле SQL учетные данные уровня базы данных могут указывать маркер подписанного URL-адреса (SAS), пользовательское удостоверение приложения, управляемое удостоверение рабочей области или ключ доступа к хранилищу.
TYPE = HADOOP
Необязательный, не рекомендуется.
Тип можно указать только с выделенными пулами SQL. HADOOP
— это единственное допустимое значение при указании. Внешние источники данных с TYPE=HADOOP
доступны только в выделенных пулах SQL.
Используйте HADOOP для устаревших реализаций, в противном случае рекомендуется использовать более новый собственный доступ к данным. Не указывайте аргумент TYPE для использования нового собственного доступа к данным.
Пример использования TYPE = HADOOP
для загрузки данных из службы хранилища Azure см. в разделе Создание внешнего источника данных для ссылки на Azure Data Lake Store Gen 1 или 2 с использованием субъекта-службы.
Бессерверные и выделенные пулы SQL в Azure Synapse Analytics используют разные базы кода для виртуализации данных. Бессерверные пулы SQL поддерживают собственную технологию виртуализации данных. Выделенные пулы SQL поддерживают собственную виртуализацию данных и виртуализацию данных PolyBase. Виртуализация данных PolyBase используется при создании внешнего источника данных с TYPE=HADOOP
помощью .
Разрешения
Необходимо разрешение CONTROL
на базу данных.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
Большинство внешних источников данных поддерживают проверку подлинности на основе прокси-сервера, используя учетные данные уровня базы данных для создания учетной записи-посредника.
Ключи подписанного URL-адреса (SAS) поддерживаются для проверки подлинности в учетных записях хранения Azure Data Lake Store 2-го поколения. Клиенты, которые хотят пройти проверку подлинности с помощью подписанного URL-адреса, должны создать учетные данные IDENTITY = "Shared Access Signature"
в области базы данных и ввести маркер SAS в качестве секрета.
Если вы создадите учетные данные IDENTITY = "Shared Access Signature"
с областью базы данных и используете значение ключа хранилища в качестве секрета, вы получите следующее сообщение об ошибке:
'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'
Примеры
A. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешним источником данных является учетная запись хранения Azure версии 2 с именем logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. Обратите внимание, что при подключении к службе хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с использованием ключа учетной записи хранения, а не подписанного URL-адреса (SAS).
В этом примере используется устаревший метод доступа hadoop на основе Java. В следующем примере показано, как создать учетные данные уровня базы данных для проверки подлинности в службе хранилища Azure. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; для проверки подлинности в хранилище Azure эти данные не используются.
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
CREDENTIAL = AzureStorageCredential ,
TYPE = HADOOP
) ;
Б. Создание внешнего источника данных для ссылки на Azure Data Lake Store 1-го или 2-го поколения с использованием субъекта-службы
Для подключения Azure Data Lake Store могут использоваться универсальный код ресурса (URI) ADLS и субъект-служба приложения в Azure Active Directory. Документация по созданию этого приложения доступна в разделе Аутентификация хранилища озера данных с помощью Active Directory.
-- 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 Azure Active Directory 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
-- Please note the abfss endpoint when your account has secure transfer enabled
( LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net' ,
CREDENTIAL = ADLS_credential ,
TYPE = HADOOP
) ;
В. Создание внешнего источника данных для ссылки на Azure Data Lake Store 2-го поколения с помощью ключа учетной записи хранения
-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<storage_account_name>' ,
IDENTITY = 'newyorktaxidata' ,
-- SECRET = '<storage_account_key>'
SECRET = 'yz5N4+bxSb89McdiysJAzo+9hgEHcJRJuXbF/uC3mhbezES/oe00vXnZEl14U0lN3vxrFKsphKov16C0w6aiTQ=='
;
-- Note this example uses a Gen2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( LOCATION = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net' ,
CREDENTIAL = ADLS_credential ,
TYPE = HADOOP
) ;
Г. Создание внешнего источника данных в Azure Data Lake Store 2-го поколения с помощью abfs://
При подключении к учетной записи Azure Data Lake Store 2-го поколения с использованием управляемого удостоверения указывать секрет не нужно.
-- If you do not have a Master Key on your DW you will need to create one
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
--Create database scoped credential with **IDENTITY = 'Managed Service Identity'**
CREATE DATABASE SCOPED CREDENTIAL msi_cred
WITH IDENTITY = 'Managed Service Identity' ;
--Create external data source with abfss:// scheme for connecting to your Azure Data Lake Store Gen2 account
CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss
WITH
( TYPE = HADOOP ,
LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net' ,
CREDENTIAL = msi_cred
) ;
Дальнейшие действия
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (Azure Synapse Analytics)
- CREATE TABLE AS SELECT (Azure Synapse Analytics)
- sys.external_data_sources (Transact-SQL)
- Использование подписанных URL-адресов
* Система
платформы аналитики (PDW) *
Общие сведения. Система платформы аналитики
Применимо к:Analytics Platform System (PDW)
Создает внешний источник данных для запросов PolyBase. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие варианты использования: виртуализация и загрузка данных с помощью PolyBase.
Синтаксис
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. Имя должно быть уникальным в пределах сервера в Системе платформы аналитики (PDW).
LOCATION = '<prefix>://<path[:port]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению |
---|---|---|
Cloudera CDH или Hortonworks HDP | hdfs |
<Namenode>[:port] |
Учетная запись хранения Azure | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Путь к расположению:
<Namenode>
— имя компьютера, URI службы имен или IP-адресNamenode
в кластере Hadoop. PolyBase необходимо разрешить любые DNS-имена, используемые в кластере Hadoop.port
: порт, который прослушивает внешний источник данных. В Hadoop порт можно найти, используя параметр конфигурацииfs.defaultFS
. Значение по умолчанию — 8020.<container>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно.<storage_account>
: имя учетной записи хранения ресурса Azure.
Дополнительные примечания и инструкции при задании расположения:
- Ядро PDW не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Используйте один и тот же внешний источник данных для всех таблиц при запросе Hadoop, чтобы обеспечить согласованность семантики запросов.
wasbs
рекомендуется к использованию, так как тогда данные будут передаваться по защищенному каналу TLS.- Иерархические пространства имен не поддерживаются при использовании с учетными записями службы хранилища Azure через wasb://.
- Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, следует выполнить команду ALTER EXTERNAL DATA SOURCE, чтобы указать новое расположение.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
- Для загрузки данных из службы хранилища Azure в Azure Synapse или PDW необходимо использовать ключ хранилища Azure.
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.
TYPE = [ HADOOP ]
Указывает тип настраиваемого внешнего источника данных. Этот параметр требуется не всегда.
- Используйте HADOOP, если внешний источник данных — Cloudera CDH, Hortonworks HDP или служба хранилища Azure.
Пример использования TYPE
= HADOOP
для загрузки данных из службы хранилища Azure см. в разделе Создание внешнего источника данных для ссылки на Hadoop.
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:порт]'
В SQL Server 2019 (15.x) не указывайте RESOURCE_MANAGER_LOCATION, если не выполняется подключение к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure.
Настройте это необязательное значение только при подключении к Cloudera CDH, Hortonworks HDP или учетной записи службы хранилища Azure. Полный список поддерживаемых версий Hadoop см. в разделе Конфигурация подключений PolyBase (Transact-SQL).
При определении RESOURCE_MANAGER_LOCATION
оптимизатор запросов принимает решение на основе затрат, чтобы повысить производительность. Задание MapReduce можно использовать, чтобы передать вычисления в Hadoop. Указание RESOURCE_MANAGER_LOCATION
может значительно сократить объем данных, передаваемых между Hadoop и SQL, повышая производительность запросов.
Если значение для Resource Manager не задано, отправка вычислений в Hadoop для запросов PolyBase отключена. См. конкретный пример и дальнейшие рекомендации в разделе Создание внешнего источника данных для ссылки на Hadoop с поддержкой передачи.
Значение RESOURCE_MANAGER_LOCATION не проверяется при создании внешнего источника данных. Указание неверного значения может вызвать сбой запроса во время выполнения каждый раз, когда выполняется попытка принудительной передачи, так как переданное значение невозможно разрешить.
Для корректной работы PolyBase с внешним источником данных Hadoop необходимо открыть порты для следующих компонентов кластера Hadoop:
- Порты HDFS
- NameNode
- DataNode
- Resource Manager
- Отправка задания
- Журнал заданий
Если порт не задан, значение по умолчанию определяется с использованием текущей настройки для конфигурации подключения к Hadoop (hadoop connectivity).
Подключение к Hadoop | Порт по умолчанию диспетчера ресурсов |
---|---|
1 | 50300 |
2 | 50300 |
3 | 8021 |
4 | 8032 |
5 | 8050 |
6 | 8032 |
7 | 8050 |
В следующей таблице показаны порты по умолчанию для этих компонентов. Обратите внимание на зависимость от версий Hadoop и возможность пользовательской конфигурации, не использующей назначение портов по умолчанию.
Компонент кластера Hadoop | Порт по умолчанию |
---|---|
узел имен; | 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.'
Примеры
A. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8050' ,
TYPE = HADOOP
) ;
Б. Создание внешнего источника данных для ссылки на Hadoop с включенной отправкой
Укажите параметр RESOURCE_MANAGER_LOCATION
, чтобы включить принудительную передачу вычислений в Hadoop для запросов PolyBase. После включения PolyBase принимает решение на основе затрат для определения того, должны ли вычисления запроса быть переданы в Hadoop.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8020'
TYPE = HADOOP
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
) ;
В. Создание внешнего источника данных для ссылки на Hadoop с защитой Kerberos
Чтобы проверить, защищен ли кластер Hadoop протоколом Kerberos, проверьте значение свойства hadoop.security.authentication
в файле Hadoop core-site.xml. Чтобы сослаться на кластер Hadoop с защитой Kerberos, необходимо указать учетные данные с областью действия "база данных", которые содержат ваше имя пользователя и пароль Kerberos. Главный ключ базы данных используется для шифрования секрета учетных данных с областью действия "база данных".
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH
IDENTITY = '<hadoop_user_name>' ,
SECRET = '<hadoop_password>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
( LOCATION = 'hdfs://10.10.10.10:8050' ,
CREDENTIAL = HadoopUser1 ,
TYPE = HADOOP ,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
) ;
Г. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных представляет собой учетную запись службы хранилища Azure v2 под названием logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. Обратите внимание, что при подключении к службе хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с использованием ключа учетной записи хранения, а не подписанного URL-адреса (SAS).
В этом примере показано, как создать учетные данные с областью действия "база данных" для аутентификации в хранилище Azure. Укажите ключ учетной записи хранения Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; для проверки подлинности в хранилище Azure эти данные не используются.
-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
IDENTITY = '<my_account>' ,
SECRET = '<azure_storage_account_key>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/'
CREDENTIAL = AzureStorageCredential
TYPE = HADOOP
) ;
Дальнейшие действия
* Управляемый экземпляр SQL *
Общие сведения. Управляемый экземпляр SQL Azure
Применимо к:Управляемый экземпляр SQL Azure
Создает внешний источник данных в Управляемый экземпляр SQL Azure. Полные сведения см. в статье Виртуализация данных с помощью Управляемый экземпляр SQL Azure.
Виртуализация данных в Управляемый экземпляр SQL Azure обеспечивает доступ к внешним данным в различных форматах файлов с помощью синтаксиса T-SQL OPENROWSET или синтаксиса T-SQL CREATE EXTERNAL TABLE.
Синтаксис
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
)
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:port]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения | Путь к расположению |
---|---|---|
хранилище BLOB-объектов Azure | abs |
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name> |
Azure Data Lake Service 2-го поколения | adls |
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name> |
Ядро СУБД не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
Не следует добавлять / , имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
CREDENTIAL = credential_name
Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.
Дополнительные примечания и инструкции при задании учетных данных:
- Чтобы загрузить данные из службы хранилища Azure в Управляемый экземпляр SQL Azure, используйте подписанный URL-адрес (маркер SAS).
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.- Если учетные данные требуются, они должны быть созданы с помощью
Managed Identity
илиSHARED ACCESS SIGNATURE
в качестве удостоверения. Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). TYPE
= ЗначениеBLOB_STORAGE
допускается только для массовых операций. Нельзя создавать внешние таблицы для внешнего источника данных, еслиTYPE
=BLOB_STORAGE
.
Чтобы использовать управляемое удостоверение службы для учетных данных базы данных, выполните следующие действия.
Укажите
WITH IDENTITY = 'Managed Identity'
- Используйте назначаемое системой управляемое удостоверение службы Управляемый экземпляр SQL Azure, которое должно быть включено для этой цели.
Предоставьте роль Читатель Azure RBAC назначенному системой управляемому удостоверению службы Управляемый экземпляр SQL Azure необходимым контейнерам Хранилище BLOB-объектов Azure. Например, с помощью портал Azure см. статью Назначение ролей Azure с помощью портал Azure.
Чтобы создать подписанный URL-адрес (SAS) для учетных данных базы данных, выполните следующие действия.
Укажите
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...
Существует несколько способов создания подписанного URL-адреса.
- Маркер SAS можно получить, перейдя к портал Azure -><Your_Storage_Account> - Подписанный URL-адрес ->> Настройка разрешений -> Создание SAS и строки подключения. Дополнительные сведения см. в статье Создание подписанного URL-адреса.
- Вы можете создать и настроить SAS с помощью Обозреватель службы хранилища Azure.
- Вы можете создать SAS программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Использование подписанных URL-адресов (SAS) для обеспечения ограниченного доступа к ресурсам в службе хранилища Azure.
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
?
значение при настройке в качестве SECRET. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
, ). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Read Чтение данных из нескольких файлов и вложенных папок Чтение и перечисление Использовать команду Создать внешнюю таблицу как выбрать (CETAS) Чтение, создание и запись - Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущее
Разрешения
Необходимо разрешение CONTROL
для базы данных в Управляемом экземпляре SQL Azure.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Примеры
Дополнительные примеры см. в статье Виртуализация данных с помощью Управляемый экземпляр SQL Azure.
A. Запрос внешних данных из Управляемый экземпляр SQL Azure с помощью OPENROWSET или внешней таблицы
Дополнительные примеры см. в статье Создание внешнего источника данных или виртуализация данных с помощью Управляемый экземпляр SQL Azure.
Создайте ключ master базы данных, если он не существует.
-- 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] ) GO
Запросите файл данных Parquet во внешнем источнике данных с помощью синтаксиса OPENROWSET T-SQL, полагаясь на вывод схемы для быстрого изучения данных, не зная схемы.
--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
Кроме того, можно запросить данные с помощью предложения WITH OPENROWSET, а не полагаться на вывод схемы, что может запросить затраты на выполнение. В 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
Или создайте EXTERNAL FILE FORMAT и EXTERNAL TABLE, чтобы запросить данные в виде локальной таблицы.
-- 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