Поделиться через


CREATE EXTERNAL DATA SOURCE (Transact-SQL)

Создает внешний источник данных для запроса с помощью SQL Server, Базы данных SQL Azure, Управляемого экземпляра SQL Azure, Azure Synapse Analytics, системы платформы аналитики (PDW) или SQL Azure для пограничных вычислений.

Эта статья приводит синтаксис, аргументы, комментарии, разрешения и примеры для любых выбранных продуктов SQL.

Выбор продукта

В следующей строке выберите название нужного продукта, и отобразится информация только об этом продукте.

Обзор: 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_STORAGESHARED 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-адресов. Разрешения должны быть предоставлены следующим образом:
    Действие Разрешение
    Чтение данных из файла Читать
    Чтение данных из нескольких файлов и вложенных папок Чтение и список

Пример использования 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_STORAGESHARED 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-адресов. Разрешения должны быть предоставлены следующим образом:
    Действие Разрешение
    Чтение данных из файла Читать
    Чтение данных из нескольких файлов и вложенных папок Чтение и список

Пример использования 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 в той же сети, где полное доменное имя сервера POSTGRES1PostgreSQL используется по умолчанию для 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>.

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

Задает учетные данные уровня базы данных для аутентификации во внешнем источнике данных.

Дополнительные примечания и инструкции при задании учетных данных:

Существует несколько способов создания подписанного 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) Чтение, создание, запись и запись
  • Для Хранилище 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 в той же сети, где полное доменное имя сервера POSTGRES1PostgreSQL используется по умолчанию для 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.

  1. Перейдите к портал Azure и нужной учетной записи хранения.
  2. Перейдите к нужному контейнеру в меню хранилища данных.
  3. Выберите маркеры общего доступа.
  4. Выберите соответствующее разрешение на основе требуемого действия, для ссылки используйте таблицу:
Действие Разрешение
Чтение данных из файла Читать
Чтение данных из нескольких файлов и вложенных папок Чтение и список
Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание и запись
  1. Выберите дату окончания срока действия маркера.
  2. Создание маркера и URL-адреса SAS.
  3. Скопируйте маркер 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_STORAGESHARED 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) Чтение, создание и запись

Пример использования 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
);

Следующие шаги

* 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 должен быть настроен следующим образом:

    • Созданный маркер SAS содержит вопросительный знак ("?") в начале строки. Исключите ведущий ? параметр при настройке в качестве СЕКРЕТа.
    • Используйте допустимый срок действия (все даты указываются в формате UTC).
    • Предоставьте по крайней мере разрешение на чтение файла, который должен быть загружен (например srt=o&sp=r). Для разных вариантов использования можно создать несколько подписанных URL-адресов. Разрешения должны быть предоставлены следующим образом:
    Действие Разрешение
    Чтение данных из файла Читать
    Чтение данных из нескольких файлов и вложенных папок Чтение и список
    Создание внешней таблицы в качестве выбора (CETAS) Чтение, создание и запись

Разрешения

Необходимо разрешение CONTROL для базы данных в Управляемом экземпляре SQL Azure.

Блокировка

Принимает совмещаемую блокировку для объекта EXTERNAL DATA SOURCE.

Примеры

Дополнительные примеры см. в статье о виртуализации данных с помощью Управляемый экземпляр SQL Azure.

А. Запрос внешних данных из Управляемый экземпляр SQL Azure с помощью OPENROWSET или внешней таблицы

Дополнительные примеры см. в статье "Создание внешнего источника данных" или "Виртуализация данных" с помощью Управляемый экземпляр SQL Azure.

  1. Создайте главный ключ базы данных, если он не существует.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>'
    GO
    
  2. Создайте учетные данные в области базы данных с помощью маркера SAS. Вы также можете использовать управляемое удостоверение.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<KEY>' ; --Removing leading '?'
    GO
    
  3. Создайте внешний источник данных с помощью учетных данных.

    --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]
    );
    
  4. Запрос файла данных 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;
    
  5. Кроме того, запросите данные с помощью 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;
    
  6. Или создайте ФОРМАТ ВНЕШНЕГО ФАЙЛА и ВНЕШНЮЮ ТАБЛИЦу, чтобы запросить данные в виде локальной таблицы.

    -- 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
    

Следующие шаги