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 | Порт по умолчанию |
---|---|
NameNode | 8020 |
DataNode (передача данных, порт IPC без привилегий) | 50010 |
DataNode (передача данных, привилегированный порт IPC) | 1019 |
Отправка заданий диспетчера ресурсов (Hortonworks 1.3) | 50300 |
Отправка заданий диспетчера ресурсов (Cloudera 4.3) | 8021 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.0 в Windows, Cloudera 5.x в Linux) | 8032 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.x и 3.0 в Windows, Hortonworks 2.1–3 в Linux) | 8050 |
Журнал заданий диспетчера ресурсов | 10020 |
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Примеры
Внимание
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
А. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
B. Создание внешнего источника данных для ссылки на 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'
);
C. Создание внешнего источника данных для ссылки на 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'
);
D. Создание внешнего источника данных для доступа к данным в службе хранилища 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. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список - Созданный маркер 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 | Порт по умолчанию |
---|---|
NameNode | 8020 |
DataNode (передача данных, порт IPC без привилегий) | 50010 |
DataNode (передача данных, привилегированный порт IPC) | 1019 |
Отправка заданий диспетчера ресурсов (Hortonworks 1.3) | 50300 |
Отправка заданий диспетчера ресурсов (Cloudera 4.3) | 8021 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.0 в Windows, Cloudera 5.x в Linux) | 8032 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.x и 3.0 в Windows, Hortonworks 2.1–3 в Linux) | 8050 |
Журнал заданий диспетчера ресурсов | 10020 |
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Маркер SAS с типом HADOOP
не поддерживается. Поддерживается только с типом BLOB_STORAGE
, если используется ключ доступа учетной записи хранения. Попытка создать внешний источник данных с типом HADOOP
и использованием учетных данных SAS может завершиться сбоем со следующим сообщением об ошибке:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Примеры
Внимание
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
А. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
B. Создание внешнего источника данных для ссылки на 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'
);
C. Создание внешнего источника данных для ссылки на 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'
);
D. Создание внешнего источника данных для доступа к данным в службе хранилища 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 или к База данных SQL Azure. - Укажите
Driver={<Name of Driver>}
при подключении черезODBC
. wasbs
иabfss
необязательны, но рекомендуются к использованию в SQL Server 2019 (15.x) при доступе к учетным записям службы хранилища Azure, так как в этом случае данные будут передаваться по защищенному каналу TLS/SSL.- API
abfs
илиabfss
поддерживаются при доступе к учетным записям хранения Azure с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 (CU11). Дополнительные сведения см. в разделе Драйвер Azure Blob Filesystem (ABFS). - Параметр иерархического пространства имен для учетных записей службы хранилища Azure (V2) с
abfs[s]
поддерживается с помощью Azure Data Lake Storage 2-го поколения, начиная с SQL Server 2019 (15.x) с накопительным пакетом обновлений 11 (CU11) и выше. В противном случае параметр иерархического пространства имен не поддерживается и должен быть отключен. - Чтобы обеспечить успешное выполнение запросов PolyBase в случае отработки отказа Hadoop
Namenode
, целесообразно использовать дляNamenode
кластера Hadoop виртуальный IP-адрес. Если этого не сделать, следует выполнить команду ALTER EXTERNAL DATA SOURCE, чтобы указать новое расположение. - Типы
sqlhdfs
иsqldatapool
поддерживаются для подключения между главным экземпляром и пулом носителей кластера больших данных. Для Cloudera CDH или Hortonworks HDP следует использоватьhdfs
. Дополнительные сведения об использованииsqlhdfs
для запросов пулов носителей кластеров больших данных SQL Server см. в статье Запрос данных HDFS в кластере больших данных SQL Server 2019. - Поддержка SQL Server для внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) будет прекращена и не будет включена в SQL Server 2022 (16.x). Дополнительные сведения см. в разделе Параметры больших данных на платформе Microsoft SQL Server.
CONNECTION_OPTIONS = пара "ключ-значение"
Указано для SQL Server 2019 (15.x) и более поздних версий. Указывает дополнительные параметры при подключении через ODBC
к внешнему источнику данных. Чтобы использовать несколько параметров подключения, укажите их через точку с запятой.
Применяется к универсальным ODBC
-соединениям и ко встроенным соединителям ODBC
для SQL Server, Oracle, Teradata, MongoDB и API Azure Cosmos DB для MongoDB.
key_value_pair
— это ключевое слово и значение для конкретного параметра соединения. Доступные ключевые слова и значения зависят от типа внешнего источника данных. Имя драйвера необходимо, но существуют и другие параметры, такие как APP='<your_application_name>'
или ApplicationIntent= ReadOnly|ReadWrite
, которые полезно задать, так как они могут помочь в устранении неполадок.
Возможные пары "ключ-значение" зависят от поставщика для внешнего источника данных. Дополнительные сведения о каждом поставщике см. в разделе CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Начиная с sql Server 2019 (15.x) накопительного обновления 19, были введены дополнительные ключевые слова для поддержки файлов TNS Oracle:
- Ключевое слово
TNSNamesFile
указывает файловый путь кtnsnames.ora
файлу, расположенному на сервере Oracle. - Ключевое слово
ServerName
указывает псевдоним, используемый внутриtnsnames.ora
, который будет использоваться для замены имени узла и порта.
Pushdown = ON | OFF
Указано только для SQL Server 2019 (15.x). Указывает, могут ли вычисления быть переданы во внешний источник данных. По умолчанию задано параметр ON.
PUSHDOWN
поддерживается при подключении к SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB для MongoDB или ODBC на уровне внешнего источника данных.
Включение или отключение параметра на уровне запроса достигается за счет указаний.
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. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список - Созданный маркер 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 | Порт по умолчанию |
---|---|
NameNode | 8020 |
DataNode (передача данных, порт IPC без привилегий) | 50010 |
DataNode (передача данных, привилегированный порт IPC) | 1019 |
Отправка заданий диспетчера ресурсов (Hortonworks 1.3) | 50300 |
Отправка заданий диспетчера ресурсов (Cloudera 4.3) | 8021 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.0 в Windows, Cloudera 5.x в Linux) | 8032 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.x и 3.0 в Windows, Hortonworks 2.1–3 в Linux) | 8050 |
Журнал заданий диспетчера ресурсов | 10020 |
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
При подключении к хранилищу или пулу данных в кластере больших данных SQL Server 2019 учетные данные пользователя передаются через серверную систему. Создайте имена входа в пуле данных, чтобы включить сквозную проверку подлинности.
Маркер SAS с типом HADOOP
не поддерживается. Поддерживается только с типом BLOB_STORAGE
, если используется ключ доступа учетной записи хранения. Попытка создать внешний источник данных с типом HADOOP
и использованием учетных данных SAS может завершиться сбоем со следующим сообщением об ошибке:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Примеры
Внимание
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
А. Создание внешнего источника данных в SQL Server 2019 для ссылки на Oracle
Чтобы создать внешний источник данных, ссылающийся на Oracle, убедитесь, что у вас есть учетные данные уровня базы данных. При необходимости также может включить или отключить передачу вычислений к этому источнику данных.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CREDENTIAL = OracleProxyAccount,
PUSHDOWN = ON
);
Внешний источник данных для Oracle также может при необходимости использовать проверку подлинности прокси для детализированного управления доступом. Пользователя прокси-сервера можно настроить таким образом, чтобы он имел ограниченный доступ по сравнению с олицетворением пользователя.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Кроме того, можно использовать проверку подлинности TNS.
Начиная с SQL Server 2019 (15.x) накопительного обновления 19, CREATE EXTERNAL DATA SOURCE
теперь поддерживает использование TNS-файлов при подключении к Oracle.
Параметр CONNECTION_OPTIONS
был развернут и теперь используется TNSNamesFile
и ServerName
в качестве переменных для просмотра tnsnames.ora
файла и установления соединения с сервером.
В приведенном ниже примере во время выполнения SQL Server будет искать tnsnames.ora
расположение файла, заданное и искать узел и сетевой порт, указанный TNSNamesFile
в ServerName
файле.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
Дополнительные примеры для других источников данных, таких как MongoDB, см. в разделе Настройка PolyBase для доступа к внешним данным в MongoDB.
B. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hadoop Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
C. Создание внешнего источника данных для ссылки на 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'
);
D. Создание внешнего источника данных для ссылки на 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
);
F. Создание внешнего источника данных для ссылки на именованный экземпляр SQL Server через соединение Polybase
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных, ссылающийся на именованный экземпляр SQL Server, используйте CONNECTION_OPTIONS
для указания имени экземпляра.
В следующем примере WINSQL2019
имя узла и SQL2019
имя экземпляра. 'Server=%s\SQL2019'
— пара "ключ-значение".
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Кроме того, можно использовать порт для подключения к экземпляру SQL Server по умолчанию.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
G. Создание внешнего источника данных для ссылки на вторичную реплику для чтения группы доступности Always On
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных с ссылкой на вторичную реплику SQL Server для чтения, используйте CONNECTION_OPTIONS
, чтобы указать ApplicationIntent=ReadOnly
. Кроме того, необходимо задать базу данных доступности как Database={dbname}
в CONNECTION_OPTIONS
, либо задать базу данных доступности в качестве базы данных по умолчанию для имени входа, используемого для учетных данных в области базы данных. Это необходимо сделать во всех репликах доступности группы доступности.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Затем создайте новый внешний источник данных.
Независимо от того, включена Database=dbname
ли база данных доступности в CONNECTION_OPTIONS
качестве базы данных по умолчанию для входа в учетные данные с областью базы данных, необходимо по-прежнему указать имя базы данных с помощью трех частей в инструкции CREATE EXTERNAL TABLE в параметре LOCATION. Пример см. в разделе CREATE EXTERNAL TABLE.
В следующем примере WINSQL2019AGL
используется имя прослушивателя группы доступности и dbname
имя базы данных, предназначенной для инструкции CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Можно продемонстрировать поведение перенаправления группы доступности, указав ApplicationIntent
и создав внешнюю таблицу в системном представлении sys.servers
. В следующем примере скрипта создаются два внешних источника данных, для каждого из которых создается одна внешняя таблица. Используйте представления, чтобы проверить, какой сервер отвечает на подключение. Похожие результаты можно достичь с помощью маршрутизации только для чтения. Дополнительные сведения см. в статье Настройка маршрутизации только для чтения в группе доступности Always On.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
В базе данных группы доступности создайте представление для возврата sys.servers
и имени локального экземпляра, что поможет определить, какая реплика отвечает на запрос. Дополнительные сведения см. в статье sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Затем создайте внешнюю таблицу в исходном экземпляре:
CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO
Примеры: массовые операции
Внимание
Не следует добавлять /, имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
H. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2017 (14.x) и SQL Server 2019 (15.x)
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или OPENROWSET. Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices,
TYPE = BLOB_STORAGE
);
Реализация этого примера доступна в разделе BULK INSERT.
I. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса abfs://.
Область применения: SQL Server 2019 (15.x) с накопительным пакетом обновления 11 (CU11) и более поздних версий
В этом примере внешний источник данных является учетной записью Azure Data Lake Storage 2-го поколения logs
с использованием драйвера Azure Blob File System (ABFS). Контейнер хранилища называется daily
. Внешний источник данных Azure Data Lake Storage 2-го поколения предназначен только для передачи данных, а pushdown предиката не поддерживается.
В этом примере показано, как создать учетные данные с областью действия "база данных" для проверки подлинности в учетной записи Azure Data Lake Storage 2-го поколения. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; эти данные не используются для проверки подлинности в службе хранилища Azure.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abfss://daily@logs.dfs.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
J. Создание внешнего источника данных с помощью универсального ODBC для PostgreSQL
Как и в предыдущих примерах, сначала создайте главный ключ базы данных и учетные данные базы данных с областью действия. Учетные данные для базы данных будут использоваться для внешнего источника данных. В этом примере также предполагается, что на сервере устанавливается универсальный поставщик данных ODBC для PostgreSQL.
В этом примере универсальный поставщик данных ODBC используется для подключения к серверу базы данных PostgreSQL в той же сети, где полное доменное имя сервера POSTGRES1
PostgreSQL используется по умолчанию для TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Следующие шаги
Обзор: 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://<container_name>@<storage_account_name>.blob.core.windows.net/ or abs://<storage_account_name>.blob.core.windows.net/<container_name> |
Начиная с SQL Server 2022 (16.x) Поддерживается иерархическое пространство имен |
Подписанный URL-адрес (SAS) |
Azure Data Lake Storage 2-го поколения | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ or 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: s3://<server_name>:<port>/ — AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder> или s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
Начиная с SQL Server 2022 (16.x) | Базовый или сквозной (STS) * |
* Должны быть учетными данными в области базы данных, где удостоверение жестко закодировано IDENTITY = 'S3 Access Key'
, а аргумент SECRET находится в формате = '<AccessKeyID>:<SecretKeyID>'
или использует сквозную авторизацию (STS). Дополнительные сведения см. в статье Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов.
Путь к расположению:
port
: порт, который прослушивает внешний источник данных. Необязательно во многих случаях в зависимости от конфигурации сети.<container_name>
: контейнер учетной записи хранения, содержащей данные. Корневые контейнеры доступны только для чтения, записать данные в контейнер невозможно.<storage_account>
: имя учетной записи хранения ресурса Azure.<server_name>
: имя узла.<instance_name>
: имя экземпляра SQL Server. Используется, если у вас работает служба обозревателя SQL Server на целевом экземпляре.<ip_address>:<port>
= только для совместимого с S3 хранилища объектов (начиная с SQL Server 2022 (16.x)), конечная точка и порт, используемые для подключения к совместимому с S3 хранилищу.<bucket_name>
= только для хранилища объектов, совместимого с S3 (начиная с SQL Server 2022 (16.x)), относясь к платформе хранения.<region>
= только для хранилища объектов, совместимого с S3 (начиная с SQL Server 2022 (16.x)), относясь к платформе хранения.<folder>
= часть пути к хранилищу в URL-адресе хранилища.
Дополнительные примечания и инструкции при задании расположения:
- Ядро базы данных SQL Server не проверяет существование внешнего источника данных, когда создает объект. Для проверки при создании внешней таблицы используйте внешний источник данных.
- Соединитель
sqlserver
можно использовать для подключения SQL Server 2019 (15.x) к другому SQL Server или к База данных SQL Azure. - Укажите
Driver={<Name of Driver>}
при подключении черезODBC
. - В SQL Server 2022 (16.x) поддерживается функция иерархического пространства имен для учетных записей хранения Azure (версии 2) с использованием префикса
adls
через Azure Data Lake Storage 2-го поколения.
- Поддержка SQL Server для внешних источников данных HDFS Cloudera (CDP) и Hortonworks (HDP) не включены в SQL Server 2022 (16.x). Нет необходимости использовать аргумент TYPE в SQL Server 2022 (16.x).
- Дополнительные сведения о совместимом с S3 хранилище объектов и PolyBase начиная с SQL Server 2022 (16.x) см. в статье Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов. Пример запроса файла Parquet в совместимом с S3 хранилище объектов см. в разделе Виртуализация файла Parquet в совместимом с S3 хранилище объектов с помощью PolyBase.
- В отличие от предыдущих версий, в SQL Server 2022 (16.x) префикс
wasb[s]
для учетной записи хранения Azure (версии 2) изменен наabs
. - В отличие от предыдущих версий, в SQL Server 2022 (16.x) префикс
abfs[s]
для Azure Data Lake Storage 2-го поколения изменен наadls
. - Пример использования PolyBase для виртуализации CSV-файла в службе хранилища Azure см. в статье Виртуализация CSV-файла с помощью PolyBase.
- Пример использования PolyBase для виртуализации таблицы Delta в ADLS 2-го поколения см. в Виртуализация таблицы Delta с помощью PolyBase.
- SQL Server 2022 (16.x) полностью поддерживает два формата URL-адресов для служба хранилища Azure учетной записи версии 2 (
abs
) и Azure Data Lake 2-го поколения ().adls
- Путь LOCATION может использовать форматы:
<container>@<storage_account_name>..
(рекомендуется) или<storage_account_name>../<container>
. Например:- служба хранилища Azure учетная запись версии 2:
abs://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) илиabs://<storage_account_name>.blob.core.windows.net/<container>
. - Azure Data Lake 2-го поколения поддерживает:
adls://<container>@<storage_account_name>.blob.core.windows.net
(рекомендуется) илиadls://<storage_account_name>.dfs.core.windows.net/<container>
.
- служба хранилища Azure учетная запись версии 2:
- Путь LOCATION может использовать форматы:
CONNECTION_OPTIONS = пара "ключ-значение"
Указано для SQL Server 2019 (15.x) и более поздних версий. Указывает дополнительные параметры при подключении через ODBC
к внешнему источнику данных. Чтобы использовать несколько параметров подключения, укажите их через точку с запятой.
Применяется к универсальным ODBC
-соединениям и ко встроенным соединителям ODBC
для SQL Server, Oracle, Teradata, MongoDB и API Azure Cosmos DB для MongoDB.
key_value_pair
— это ключевое слово и значение для конкретного параметра соединения. Доступные ключевые слова и значения зависят от типа внешнего источника данных. Имя драйвера необходимо, но существуют и другие параметры, такие как APP='<your_application_name>'
или ApplicationIntent= ReadOnly|ReadWrite
, которые полезно задать, так как они могут помочь в устранении неполадок.
Возможные пары "ключ-значение" зависят от драйвера. Дополнительные сведения о каждом поставщике см. в разделе CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Начиная с выпуска : SQL Server 2022 (16.x) накопительного обновления 2, были введены дополнительные ключевые слова для поддержки файлов TNS Oracle:
- Ключевое слово
TNSNamesFile
указывает файловый путь кtnsnames.ora
файлу, расположенному на сервере Oracle. - Ключевое слово
ServerName
указывает псевдоним, используемый внутриtnsnames.ora
, который будет использоваться для замены имени узла и порта.
PUSHDOWN = ON | 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. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание, запись и запись - Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущий
Для Хранилище BLOB-объектов Azure и Azure Data Lake 2-го поколения:
- Разрешенные службы:
Blob
необходимо выбрать для создания маркера SAS - Разрешенные типы ресурсов:
Container
необходимоObject
выбрать для создания маркера SAS.
- Разрешенные службы:
Пример использования CREDENTIAL
совместимого с S3 хранилища объектов и PolyBase см. в разделе Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Разрешения
Необходимо разрешение CONTROL
для базы данных в SQL Server.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Обновление до SQL Server 2022
Начиная с SQL Server 2022 (16.x), внешние источники данных Hadoop больше не поддерживаются. Необходимо вручную воссоздать внешние источники данных, созданные ранее с помощью TYPE = HADOOP
, и внешние таблицы, которые используют этот внешний источник данных.
Пользователям также потребуется настроить внешние источники данных для использования новых соединителей при подключении к службе хранилища Azure.
Внешний источник данных | С дт. | По |
---|---|---|
Хранилище BLOB-объектов Azure | wasb(s) | abs |
ADLS 2-го поколения | abfs(s) | adls |
Примеры
Внимание
Сведения о том, как установить и включить PolyBase, см. в разделе Установка PolyBase в Windows.
А. Создание внешнего источника данных в SQL Server для ссылки на Oracle
Чтобы создать внешний источник данных, ссылающийся на Oracle, убедитесь, что у вас есть учетные данные уровня базы данных. При необходимости также может включить или отключить передачу вычислений к этому источнику данных.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CREDENTIAL = OracleProxyAccount,
PUSHDOWN = ON
);
Внешний источник данных для Oracle также может при необходимости использовать проверку подлинности прокси для детализированного управления доступом. Пользователя прокси-сервера можно настроить таким образом, чтобы он имел ограниченный доступ по сравнению с олицетворением пользователя.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Кроме того, можно выполнить проверку подлинности с помощью TNS.
Начиная с версии 2: 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'
);
B. Создание внешнего источника данных для ссылки на именованный экземпляр 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
);
C. Создание внешнего источника данных для ссылки на вторичную реплику для чтения группы доступности Always On
Область применения: SQL Server 2019 (15.x) и более поздних версий
Чтобы создать внешний источник данных с ссылкой на вторичную реплику SQL Server для чтения, используйте CONNECTION_OPTIONS
, чтобы указать ApplicationIntent=ReadOnly
. Кроме того, необходимо задать базу данных доступности как Database={dbname}
в CONNECTION_OPTIONS
, либо задать базу данных доступности в качестве базы данных по умолчанию для имени входа, используемого для учетных данных в области базы данных. Это необходимо сделать во всех репликах доступности группы доступности.
Сначала создайте учетные данные для базы данных, сохранив их для входа с проверкой подлинности SQL. Соединитель ODBC SQL для PolyBase поддерживает только обычную проверку подлинности. Перед созданием учетных данных для базы данных в базе данных должен находиться главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY. В следующем примере создаются учетные данные для базы данных, укажите свое имя для входа и пароль.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Затем создайте новый внешний источник данных.
Независимо от того, включена Database=dbname
ли база данных доступности в CONNECTION_OPTIONS
качестве базы данных по умолчанию для входа в учетные данные с областью базы данных, необходимо по-прежнему указать имя базы данных с помощью трех частей в инструкции CREATE EXTERNAL TABLE в параметре LOCATION. Пример см. в разделе CREATE EXTERNAL TABLE.
В следующем примере WINSQL2019AGL
используется имя прослушивателя группы доступности и dbname
имя базы данных, предназначенной для инструкции CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Можно продемонстрировать поведение перенаправления группы доступности, указав ApplicationIntent
и создав внешнюю таблицу в системном представлении sys.servers
. В следующем примере скрипта создаются два внешних источника данных, для каждого из которых создается одна внешняя таблица. Используйте представления, чтобы проверить, какой сервер отвечает на подключение. Похожие результаты можно достичь с помощью маршрутизации только для чтения. Дополнительные сведения см. в статье Настройка маршрутизации только для чтения в группе доступности Always On.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
В базе данных группы доступности создайте представление для возврата sys.servers
и имени локального экземпляра, что поможет определить, какая реплика отвечает на запрос. Дополнительные сведения см. в статье sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Затем создайте внешнюю таблицу в исходном экземпляре:
CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO
D. Создание внешнего источника данных для запроса файла Parquet в совместимое с S3 хранилище объектов с помощью PolyBase
Область применения: SQL Server 2022 (16.x) и более поздних версий
Следующий пример скрипта создает внешний источник данных s3_ds
в исходной пользовательской базе данных в SQL Server. Внешний источник данных ссылается на учетные данные на уровне базы данных s3_dc
.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>' -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Проверьте новый внешний источник данных с помощью sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Затем в следующем примере показано использование T-SQL для запроса файла parquet, хранящегося в хранилище объектов, совместимом с S3, с помощью запроса OPENROWSET. Дополнительные сведения см. в статье Виртуализация файла parquet в совместимом с S3 хранилище объектов с помощью PolyBase.
SELECT *
FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
Е. Создание внешнего источника данных с помощью универсального ODBC для PostgreSQL
Как и в предыдущих примерах, сначала создайте главный ключ базы данных и учетные данные базы данных с областью действия. Учетные данные для базы данных будут использоваться для внешнего источника данных. В этом примере также предполагается, что на сервере устанавливается универсальный поставщик данных ODBC для PostgreSQL.
В этом примере универсальный поставщик данных ODBC используется для подключения к серверу базы данных PostgreSQL в той же сети, где полное доменное имя сервера POSTGRES1
PostgreSQL используется по умолчанию для TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Хранилище Azure
Создание подписанного URL-адреса
Для Хранилище BLOB-объектов Azure и Azure Data Lake 2-го поколения поддерживаемый метод проверки подлинности — это подписанный URL-адрес (SAS). Один из простых способов создания маркера подписанного URL-адреса следует выполнить описанные ниже действия. Дополнительные сведения см. в разделе CREDENTIAL.
- Перейдите к портал Azure и нужной учетной записи хранения.
- Перейдите к нужному контейнеру в меню хранилища данных.
- Выберите маркеры общего доступа.
- Выберите соответствующее разрешение на основе требуемого действия, для ссылки используйте таблицу:
Действие | Разрешение |
---|---|
Чтение данных из файла | Читать |
Чтение данных из нескольких файлов и вложенных папок | Чтение и список |
Создание внешней таблицы в качестве выбора (CETAS) | Чтение, создание и запись |
- Выберите дату окончания срока действия маркера.
- Создание маркера и URL-адреса SAS.
- Скопируйте маркер SAS.
F. Создание внешнего источника данных для доступа к данным в Хранилище BLOB-объектов Azure с помощью интерфейса abs://
Область применения: SQL Server 2022 (16.x) и более поздних версий
Начиная с SQL Server 2022 (16.x), необходимо использовать новый префикс abs
для учетной записи хранения Azure версии 2. Префикс abs
поддерживает проверку подлинности с помощью SHARED ACCESS SIGNATURE
. Префикс abs
заменяет wasb
из предыдущих версий. HADOOP больше не поддерживается, больше не требуется использовать TYPE = BLOB_STORAGE
.
Ключ учетной записи хранения Azure больше не является необходимым. Вместо этого используется токен SAS, что показано в следующем примере:
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
SECRET = '<Blob_SAS_Token>';
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredentialv2,
);
Более подробный пример доступа к CSV-файлам, хранящимся в Хранилище BLOB-объектов Azure, см. в статье Virtualize CSV-файл с PolyBase.
G. Создание внешнего источника данных для доступа к данным в Azure Data Lake 2-го поколения
Область применения: SQL Server 2022 (16.x) и более поздних версий
Начиная с SQL Server 2022 (16.x), для Azure Data Lake 2-го поколения используется новый префикс adls
вместо abfs
из предыдущих версий. Префикс adls
также поддерживает маркер SAS в качестве метода проверки подлинности, как показано в этом примере:
--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = datalakegen2
);
Более подробный пример доступа к разностным файлам, хранящимся в Azure Data Lake 2-го поколения, см. в статье Virtualize delta table with PolyBase.
Примеры: массовые операции
Внимание
Не следует добавлять /, имя файла или параметры подписи общего доступа в конце URL-адреса LOCATION
при настройке внешнего источника данных для массовых операций.
H. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища Azure
Область применения: SQL Server 2022 (16.x) и более поздних версий.
Используйте следующий источник данных для массовых операций, выполняемых с использованием инструкций BULK INSERT или OPENROWSET. Используемые учетные данные должны задавать SHARED ACCESS SIGNATURE
в качестве идентификатора, не должны иметь ?
в начале маркера SAS, должны иметь по крайней мере разрешение на чтение загружаемого файла (например, srt=o&sp=r
), и иметь допустимый срок действия (все даты должны быть указаны в формате UTC). Дополнительные сведения о подписанных URL-адресах см. в статье Использование подписанных URL-адресов.
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AccessAzureInvoices,
);
Следующие шаги
* База данных SQL *
Обзор: База данных SQL Azure
Применимо к: База данных SQL Azure
Создает внешний источник данных для эластичных запросов. Внешние источники данных используются для обеспечения взаимодействия и поддерживают следующие основные варианты использования.
- Операции массовой загрузки с помощью
BULK INSERT
илиOPENROWSET
- Запрос удаленных экземпляров базы данных SQL или Azure Synapse Analytics через базу данных SQL с помощью эластичных запросов
- Запрос сегментированной базы данных SQL с помощью эластичных запросов
Синтаксис
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER } ]
[ [ , ] DATABASE_NAME = '<database_name>' ]
[ [ , ] SHARD_MAP_NAME = '<shard_map_manager>' ] )
[ ; ]
Аргументы
data_source_name
Задает определенное пользователем имя для источника данных. В базе данных SQL Server это имя должно быть уникальным.
LOCATION = '<prefix>://<path[:port]>'
Предоставляет протокол и путь подключения к внешнему источнику данных.
Внешний источник данных | Префикс расположения соединителя | Путь к расположению | Availability |
---|---|---|---|
массовые операции | 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. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список Создание внешней таблицы в качестве выбора (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
.
ТИП | Значение DATABASE_NAME |
---|---|
RDBMS | Имя удаленной базы данных на сервере, заданном с помощью LOCATION |
SHARD_MAP_MANAGER | Имя базы данных, работающей в качестве диспетчера карты сегментов |
Пример, демонстрирующий создание внешнего источника данных с TYPE
= RDBMS
, см. в разделе Создание внешнего источника данных в реляционной СУБД.
SHARD_MAP_NAME = имя карты сегментов
Используется, только когда аргумент TYPE
имеет значение SHARD_MAP_MANAGER
, для того, чтобы задать имя карты сегментов.
Пример, демонстрирующий создание внешнего источника данных с TYPE
= SHARD_MAP_MANAGER
, см. в разделе Создание диспетчера карты сегментов в реляционной СУБД.
Разрешения
Необходимо разрешение CONTROL
для Базы данных SQL Azure.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Примеры
А. Создание внешнего источника данных для диспетчера карт сегментов
Чтобы создать внешний источник данных, ссылающийся на SHARD_MAP_MANAGER
, укажите имя сервера базы данных SQL, на котором размещен диспетчер карт сегментов в базе данных SQL, или базу данных SQL Server на виртуальной машине.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
TYPE = SHARD_MAP_MANAGER,
LOCATION = '<server_name>.database.windows.net',
DATABASE_NAME = 'ElasticScaleStarterKit_ShardMapManagerDb',
CREDENTIAL = ElasticDBQueryCred,
SHARD_MAP_NAME = 'CustomerIDShardMap'
);
Пошаговое руководство см. в разделе Приступая к работе с эластичными запросами для сегментирования (горизонтальное секционирование).
B. Создание внешнего источника данных 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
при настройке внешнего источника данных для массовых операций.
C. Создание внешнего источника данных для массовых операций, извлекающих данные из службы хранилища 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 для пограничных вычислений.
А. Создание внешнего источника данных для ссылки на 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');
B. Создание внешнего источника данных для ссылки на EdgeHub
Область применения: только SQL Azure для пограничных вычислений
В этом примере внешний источник данных — это EdgeHub, работающий на том же пограничном устройстве, что и SQL Azure для пограничных вычислений. Внешний источник данных edgeHub предназначен только для потоковой передачи данных и не поддерживает принудительную отправку предиката.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub
WITH (LOCATION = 'edgehub://');
Следующие шаги
* 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 |
No | No | Да |
Data Lake Storage 2-го поколения | abfs[s] |
Да | Да | Да |
Хранилище BLOB-объектов Azure | wasbs |
Да | Да*** | Да |
Хранилище BLOB-объектов Azure | https |
No | Да | Да |
Azure Data Lake Storage 1-го поколения | http[s] |
No | No | Да |
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-го поколения рекомендуется для всех новых разработок.
Рекомендуется wasb
использовать более безопасный wasbs
соединитель. Только собственная виртуализация данных в выделенных пулах SQL (где ТИП не соответствует 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
Необязательно. Указывает учетные данные базы данных с областью действия для проверки подлинности во внешнем источнике данных. Внешний источник данных без учетных данных может получить доступ к общедоступной учетной записи хранения или использовать удостоверение Microsoft Entra абонента для доступа к файлам в хранилище Azure.
Дополнительные примечания и инструкции при задании учетных данных:
- Чтобы загрузить данные из служба хранилища Azure или Azure Data Lake Store (ADLS) 2-го поколения в Azure Synapse Analytics, используйте ключ служба хранилища Azure.
CREDENTIAL
требуется, только если данные были защищены.CREDENTIAL
не является обязательным для наборов данных с возможностью анонимного доступа.
Сведения о создании учетных данных уровня базы данных см. в разделе CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
В бессерверном пуле SQL учетные данные с областью базы данных могут указывать управляемое удостоверение рабочей области, имя субъекта-службы или маркер подписанного URL-адреса (SAS). Доступ через удостоверение пользователя, также известное как сквозное руководство Microsoft Entra, также возможен в учетных данных с областью базы данных, так как анонимный доступ к общедоступному хранилищу. Дополнительные сведения см. в разделе "Поддерживаемые типы авторизации хранилища".
В выделенном пуле SQL учетные данные базы данных могут указывать маркер подписанного URL-адреса (SAS), ключ доступа к хранилищу, субъект-служба, управляемое удостоверение рабочей области или сквозное руководство Microsoft Entra.
TYPE = HADOOP
Необязательно, не рекомендуется.
Можно указать тип только с выделенными пулами SQL. HADOOP
является единственным допустимым значением при указании. Внешние источники данных с TYPE=HADOOP
доступны только в выделенных пулах SQL.
Используйте HADOOP для устаревших реализаций, в противном случае рекомендуется использовать более новый собственный доступ к данным. Не указывайте аргумент TYPE для использования нового собственного доступа к данным.
Пример использования TYPE = HADOOP
для загрузки данных из службы хранилища Azure см. в разделе Создание внешнего источника данных для ссылки на Azure Data Lake Store Gen 1 или 2 с использованием субъекта-службы.
Бессерверные и выделенные пулы SQL в Azure Synapse Analytics используют различные базы кода для виртуализации данных. Бессерверные пулы SQL поддерживают собственную технологию виртуализации данных. Выделенные пулы SQL поддерживают как собственную, так и виртуализацию данных PolyBase. Виртуализация данных PolyBase используется при создании TYPE=HADOOP
внешнего источника данных.
Разрешения
Необходимо разрешение CONTROL
на базу данных.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
Большинство внешних источников данных поддерживают проверку подлинности на основе прокси-сервера, используя учетные данные, на основе базы данных для создания учетной записи-посредника.
Ключи подписанного URL-адреса (SAS) поддерживаются для проверки подлинности в учетных записях хранения Azure Data Lake Store 2-го поколения. Клиенты, которые хотят пройти проверку подлинности с помощью подписанного URL-адреса, должны создать учетные данные с областью действия базы данных, где IDENTITY = "Shared Access Signature"
и ввести маркер SAS в качестве секрета.
Если вы создаете учетные данные в области базы данных, где IDENTITY = "Shared Access Signature"
и используете значение ключа хранилища в качестве секрета, вы получите следующее сообщение об ошибке:
'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'
Примеры
А. Создание внешнего источника данных для доступа к данным в службе хранилища Azure с помощью интерфейса wasb://.
В этом примере внешний источник данных — это служба хранилища Azure учетная запись версии 2logs
. Контейнер хранилища называется daily
. Внешний источник данных хранилища Azure предназначен исключительно для передачи данных. отправка предиката не поддерживается. Иерархические пространства имен не поддерживаются при доступе к данным через интерфейс wasb://
. Обратите внимание, что при подключении к службе хранилища Azure через соединитель WASB[s] проверка подлинности должна выполняться с использованием ключа учетной записи хранения, а не подписанного URL-адреса (SAS).
В этом примере используется устаревший метод доступа на основе Java HADOOP. В следующем примере показано, как создать учетные данные базы данных с областью действия для проверки подлинности для служба хранилища Azure. Укажите ключ учетной записи службы хранилища Azure в секрете учетных данных базы данных. Укажите любую строку в удостоверении учетных данных с областью действия "база данных"; для проверки подлинности в хранилище Azure эти данные не используются.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
B. Создание внешнего источника данных для ссылки на Azure Data Lake Store 1-го или 2-го поколения с использованием субъекта-службы
Подключение к Azure Data Lake Store может зависеть от URI ADLS и субъекта-службы приложения Microsoft Entra. Документацию по созданию этого приложения можно найти в службе проверки подлинности Data Lake Store с помощью идентификатора Microsoft Entra.
-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- These values come from your Microsoft Entra application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>' ,
IDENTITY = '536540b4-4239-45fe-b9a3-629f97591c0c@https://login.microsoftonline.com/42f988bf-85f1-41af-91ab-2d2cd011da47/oauth2/token',
-- SECRET = '<KEY>'
SECRET = 'BjdIlmtKp4Fpyh9hIvr8HJlUida/seM5kQ3EpLAmeDI=';
-- For Gen 1 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen 1 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
-- For Gen2 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
-- Note the abfss endpoint when your account has secure transfer enabled
LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
C. Создание внешнего источника данных для ссылки на 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
);
D. Создание внешнего источника данных в 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-адресов
* Analytics
Platform System (PDW) *
Обзор: система платформы аналитики
Область применения: система платформы аналитики (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 | Порт по умолчанию |
---|---|
NameNode | 8020 |
DataNode (передача данных, порт IPC без привилегий) | 50010 |
DataNode (передача данных, привилегированный порт IPC) | 1019 |
Отправка заданий диспетчера ресурсов (Hortonworks 1.3) | 50300 |
Отправка заданий диспетчера ресурсов (Cloudera 4.3) | 8021 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.0 в Windows, Cloudera 5.x в Linux) | 8032 |
Отправка заданий диспетчера ресурсов (Hortonworks 2.x и 3.0 в Windows, Hortonworks 2.1–3 в Linux) | 8050 |
Журнал заданий диспетчера ресурсов | 10020 |
Разрешения
Требуется разрешение CONTROL
на базу данных в Системе платформы аналитики (PDW).
Примечание.
В предыдущих выпусках PDW для создания внешнего источника данных требовались разрешения ALTER ANY EXTERNAL DATA SOURCE
.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Безопасность
PolyBase поддерживает проверку подлинности на основе прокси-сервера для большинства внешних источников данных. Создайте учетные данные уровня базы данных для создания учетной записи-посредника.
Маркер SAS с типом HADOOP
не поддерживается. Поддерживается только с типом BLOB_STORAGE
, если используется ключ доступа учетной записи хранения. Попытка создать внешний источник данных с типом HADOOP
и использованием учетных данных SAS может завершиться сбоем со следующим сообщением об ошибке:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Примеры
А. Создание внешнего источника данных для ссылки на Hadoop
Чтобы создать внешний источник данных для ссылки на кластер Hortonworks HDP или Cloudera CDH, укажите имя компьютера или IP-адрес Hadoop Namenode
и порт.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
B. Создание внешнего источника данных для ссылки на 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'
);
C. Создание внешнего источника данных для ссылки на 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'
);
D. Создание внешнего источника данных для доступа к данным в службе хранилища 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 предоставляет доступ к внешним данным в различных форматах файлов с помощью синтаксиса OPENROWSET T-SQL или синтаксиса CREATE EXTERNAL TABLE T-SQL.
Синтаксис
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в 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).
Чтобы использовать управляемое удостоверение службы для учетных данных в области базы данных:
Укажите
WITH IDENTITY = 'Managed Identity'
- Используйте назначаемое системой управляемое удостоверение службы Управляемый экземпляр SQL Azure, которое должно быть включено, если оно будет использоваться для этой цели.
Предоставьте роли читателя Azure RBAC управляемому удостоверению управляемой службы Управляемый экземпляр SQL Azure необходимым контейнерам Хранилище BLOB-объектов Azure. Например, с помощью портал Azure см. раздел "Назначение ролей Azure с помощью портал Azure".
Чтобы создать подписанный URL-адрес (SAS) для учетных данных базы данных, выполните следующие действия.
Укажите
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...
Существует несколько способов создания подписанного URL-адреса:
- Маркер SAS можно получить, перейдя к портал Azure -Your_Storage_Account> -> подписанный> URL-адрес<> . Настройка разрешений —> создание SAS и строка подключения. Дополнительные сведения см. в статье "Создание подписанного URL-адреса".
- Вы можете создать и настроить SAS с помощью обозревателя служба хранилища Azure.
- Вы можете создать SAS программным способом с помощью PowerShell, Azure CLI, .NET и REST API. Дополнительные сведения см. в статье Предоставление ограниченного доступа к ресурсам службы хранилища Azure с помощью подписанных URL-адресов (SAS).
Маркер SAS должен быть настроен следующим образом:
- Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущий
?
параметр при настройке в качестве СЕКРЕТа. - Используйте допустимый срок действия (все даты указываются в формате UTC).
- Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например
srt=o&sp=r
). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
Действие Разрешение Чтение данных из файла Читать Чтение данных из нескольких файлов и вложенных папок Чтение и список Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание и запись - Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущий
Разрешения
Необходимо разрешение CONTROL
для базы данных в Управляемом экземпляре SQL Azure.
Блокировка
Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE
.
Примеры
Дополнительные примеры см. в статье о виртуализации данных с помощью Управляемый экземпляр SQL Azure.
А. Запрос внешних данных из Управляемый экземпляр SQL Azure с помощью OPENROWSET или внешней таблицы
Дополнительные примеры см. в статье "Создание внешнего источника данных" или "Виртуализация данных" с помощью Управляемый экземпляр SQL Azure.
Создайте главный ключ базы данных, если он не существует.
-- Optional: Create MASTER KEY if it doesn't exist in the database: CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>' GO
Создайте учетные данные в области базы данных с помощью маркера SAS. Вы также можете использовать управляемое удостоверение.
CREATE DATABASE SCOPED CREDENTIAL MyCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<KEY>' ; --Removing leading '?' GO
Создайте внешний источник данных с помощью учетных данных.
--Create external data source pointing to the file path, and referencing database-scoped credential: CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource WITH ( LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest', CREDENTIAL = [MyCredential] );
Запрос файла данных Parquet во внешнем источнике данных с помощью синтаксиса T-SQL OPENROWSET, который зависит от вывода схемы, чтобы быстро изучить данные, не зная схему.
--Query data with OPENROWSET, relying on schema inference. SELECT TOP 10 * FROM OPENROWSET ( BULK 'bing_covid-19_data.parquet', DATA_SOURCE = 'MyExternalDataSource', FORMAT = 'parquet' ) AS filerows;
Кроме того, запросите данные с помощью OPENROWSET предложение WITH вместо того, чтобы полагаться на вывод схемы, что может запрашивать затраты на выполнение. В CSV вывод схемы не поддерживается.
--Or, query data using the WITH clause on a CSV, where schema inference is not supported SELECT TOP 10 id, updated, confirmed, confirmed_change FROM OPENROWSET ( BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyExternalDataSource', FORMAT = 'CSV', FIRSTROW = 2 ) WITH ( id INT, updated DATE, confirmed INT, confirmed_change INT ) AS filerows;
Или создайте ФОРМАТ ВНЕШНЕГО ФАЙЛА и ВНЕШНЮЮ ТАБЛИЦу, чтобы запросить данные в виде локальной таблицы.
-- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE --Create external file format CREATE EXTERNAL FILE FORMAT DemoFileFormat WITH (FORMAT_TYPE = PARQUET) GO --Create external table: CREATE EXTERNAL TABLE tbl_TaxiRides ( vendorID VARCHAR(100) COLLATE Latin1_General_BIN2, tpepPickupDateTime DATETIME2, tpepDropoffDateTime DATETIME2, passengerCount INT, tripDistance FLOAT, puLocationId VARCHAR(8000), doLocationId VARCHAR(8000), startLon FLOAT, startLat FLOAT, endLon FLOAT, endLat FLOAT, rateCodeId SMALLINT, storeAndFwdFlag VARCHAR(8000), paymentType VARCHAR(8000), fareAmount FLOAT, extra FLOAT, mtaTax FLOAT, improvementSurcharge VARCHAR(8000), tipAmount FLOAT, tollsAmount FLOAT, totalAmount FLOAT ) WITH ( LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet', DATA_SOURCE = NYCTaxiExternalDataSource, FILE_FORMAT = MyFileFormat\.\./\.\./\.\./azure-sql/ ); GO --Then, query the data via an external table with T-SQL: SELECT TOP 10 * FROM tbl_TaxiRides; GO