CREATE EXTERNAL DATA SOURCE (Transact-SQL)

Cria uma fonte de dados externa para consultar usando SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Azure Synapse Analytics, Analytics Platform System (PDW) ou SQL do Azure no Edge.

Este artigo fornece a sintaxe, os argumentos, os comentários, as permissões e os exemplos de qualquer produto SQL que você escolher.

Selecionar um produto

Na linha a seguir, selecione o nome do produto em que você tem interesse e somente as informações do produto serão exibidas.

Visão geral: SQL Server

Aplica-se a:yesSQL Server 2016 (13.x) e posterior

Cria uma fonte de dados externa para consultas do PolyBase. Fontes de dados externas são usadas para estabelecer a conectividade e dar suporte a estes casos de uso principal:

  • Virtualização de dados e carregamento dados usando o PolyBase
  • Operações de carregamento em massa usando BULK INSERT ou OPENROWSET

Observação

Essa sintaxe varia entre as versões do SQL Server. Use a lista suspensa seletor de versão para escolher a versão apropriada do SQL Server. Para exibir os recursos do SQL Server 2019 e posterior, confira CRIAR FONTE DE DADOS EXTERNA.

Sintaxe para SQL Server 2016

Para obter mais informações sobre as convenções de sintaxe, consulte Convenções de sintaxe 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>]' )
[ ; ]

Argumentos

data_source_name

Especifica o nome da fonte de dados definido pelo usuário. O nome deve ser exclusivo no banco de dados no SQL Server.

LOCALIZAÇÃO = '<prefix>://<path[:port]>'

Fornece o protocolo de conectividade e o caminho para a fonte de dados externa.

Fonte de dados externa Prefixo de localização do conector Caminho de local Locais com suporte por produto/serviço
Cloudera CDH ou Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) ao SQL Server 2019 (15.x)
Conta de Armazenamento do Azure (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net A partir do SQL Server 2016 (13.x)
Não há suporte para o namespace hierárquico

Caminho de local:

  • <Namenode> = o nome do computador, o URI do serviço de nome ou o endereço IP do Namenode no cluster do Hadoop. O PolyBase deve resolver qualquer nome DNS usado pelo cluster do Hadoop.
  • port = a porta em que fonte de dados externa está escutando. No Hadoop, a porta pode ser encontrada usando o parâmetro de configuração fs.defaultFS. O padrão é 8020.
  • <container> = o contêiner da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, não é possível gravar dados no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.
  • <server_name> = o nome de host.
  • <instance_name> = o nome de uma instância nomeada do SQL Server. Usado se você tiver o Serviço SQL Server Browser em execução na instância de destino.

Observações e orientação adicionais ao definir o local:

  • O Mecanismo de Banco de Dados do SQL Server não verifica a existência da fonte de dados externa quando o objeto é criado. Para validar, crie uma tabela externa usando a fonte de dados externa.
  • Use a mesma fonte de dados externa para todas as tabelas ao consultar o Hadoop para garantir semântica de consulta consistente.
  • wasbs é opcional, mas recomendado, para acessar as Contas de Armazenamento do Azure, pois os dados serão enviados usando uma conexão TLS/SSL segura.
  • Para garantir consultas do PolyBase com êxito durante um failover Namenode do Hadoop, considere usar um endereço IP virtual para o Namenode do cluster do Hadoop. Se você não fizer isso, execute um comando ALTER EXTERNAL DATA SOURCE para apontar para o novo local.

CREDENTIAL = credential_name

Especifica uma credencial no escopo do banco de dados para a autenticação na fonte de dados externa.

CREDENTIAL será necessário apenas se os dados tiverem sido protegidos. CREDENTIAL não é necessário para conjuntos de dados que permitem acesso anônimo.

Para criar uma credencial no escopo do banco de dados, veja CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP ]

Especifica o tipo de fonte de dados externa que está sendo configurada. No SQL Server 2016, esse parâmetro é sempre necessário e só deve ser especificado como HADOOP. Dá suporte a conexões com o Cloudera CDH, Hortonworks HDP ou uma conta do Armazenamento do Microsoft Azure. O comportamento desse parâmetro é diferente em versões posteriores do SQL Server.

Para obter um exemplo de como usar o TYPE = HADOOP para carregar dados de uma conta do Armazenamento do Azure, confira Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configure esse valor opcional ao se conectar à Cloudera CDH, ao Hortonworks HDP ou a uma conta de Armazenamento do Microsoft Azure.

Quando o RESOURCE_MANAGER_LOCATION for definido, o otimizador de consulta tomará uma decisão baseada em custo para melhorar o desempenho. Um trabalho MapReduce pode ser usado para aplicar a computação para o Hadoop. Especificar o RESOURCE_MANAGER_LOCATION pode reduzir significativamente o volume de dados transferidos entre o Hadoop e o SQL Server, o que pode levar a um desempenho de consultas aprimorado.

Se o Resource Manager não tiver sido especificado, o envio de computação por push para o Hadoop estará desabilitado para consultas do PolyBase.

Se a porta não for especificada, o valor padrão será escolhido usando a definição atual da configuração 'conectividade do Hadoop'.

Conectividade do Hadoop Porta do Gerenciador de Recursos padrão
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Para ver uma lista completa de versões do Hadoop compatíveis, veja Configuração de conectividade do PolyBase (Transact-SQL).

Importante

O valor de RESOURCE_MANAGER_LOCATION e não é validado quando você cria a fonte de dados externa. Inserir um valor incorreto pode causar falha de consulta em tempo de execução sempre que for feita uma tentativa de aplicação, uma vez que o valor fornecido não poderá ser resolvido.

Criar fonte de dados externa para referenciar o Hadoop com aplicação habilitada apresenta um exemplo concreto e diretrizes adicionais.

Permissões

Requer a permissão CONTROL no banco de dados no SQL Server.

Bloqueio

Usa um bloqueio compartilhado no objeto EXTERNAL DATA SOURCE.

Segurança

O PolyBase dá suporte para autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial no escopo do banco de dados para criar a conta proxy.

Quando você se conecta ao pool de armazenamento ou de dados em um cluster de Big Data do SQL Server 2019, as credenciais do usuário são passadas para o sistema de back-end. Crie logons no pool de dados propriamente dito para habilitar a autenticação de passagem.

Exemplos

Importante

Para obter informações sobre como instalar e habilitar o PolyBase, confira Instalar o PolyBase no Windows

a. Criar uma fonte de dados externa para referenciar o Hadoop

Para criar uma fonte de dados externa para referenciar o cluster do Hadoop do Hortonworks HDP ou do Cloudera CDH, especifique o nome do computador ou o endereço IP do Namenode do Hadoop e a porta.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    TYPE = HADOOP
  ) ;

B. Criar uma fonte de dados externa para referenciar o Hadoop com aplicação habilitada

Especifique a opção RESOURCE_MANAGER_LOCATION para habilitar a computação de aplicação para Hadoop em consultas do PolyBase. Uma vez habilitado, o PolyBase toma uma decisão baseada em custo para determinar se a computação de consulta deve ser enviada por push para o 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. Criar uma fonte de dados externa para referenciar o Hadoop protegido pelo Kerberos

Para verificar se o cluster do Hadoop está protegido pelo Kerberos, verifique o valor da propriedade hadoop.security.authentication no core-site.xml do Hadoop. Para referenciar um cluster do Hadoop protegido pelo Kerberos, você precisa especificar uma credencial no escopo do banco de dados contendo o nome de usuário e a senha do Kerberos. A chave mestra do banco de dados é usada para criptografar o segredo da credencial no escopo do banco de dados.

-- 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. Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface wasb://

Neste exemplo, a fonte de dados externa é uma conta de Armazenamento do Azure V2 chamada logs. O contêiner de armazenamento é chamado daily. A fonte de dados externa do Armazenamento do Azure destina-se somente a transferência de dados. Não dá suporte a aplicação de predicado. Não há suporte para namespaces hierárquicos ao acessar dados por meio da interface wasb://.

Este exemplo mostra como criar a credencial no escopo do banco de dados para autenticação na conta de Armazenamento do Azure V2. Especifique a chave de conta de Armazenamento do Azure no segredo da credencial do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade da credencial no escopo do banco de dados, pois ela não será usada durante a autenticação no Armazenamento do Azure. Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).

No SQL Server 2016, TYPE deve ser definido como HADOOP mesmo ao acessar o Armazenamento do 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
  ) ;

Confira também

Visão geral: SQL Server

Aplica-se a:yesSQL Server 2017 (14.x) apenas

Cria uma fonte de dados externa para consultas do PolyBase. Fontes de dados externas são usadas para estabelecer a conectividade e dar suporte a estes casos de uso principal:

  • Virtualização de dados e carregamento dados usando o PolyBase
  • Operações de carregamento em massa usando BULK INSERT ou OPENROWSET

Observação

Essa sintaxe varia entre as versões do SQL Server. Use a lista suspensa seletor de versão para escolher a versão apropriada do SQL Server. Para exibir os recursos do SQL Server 2019 e posterior, confira CRIAR FONTE DE DADOS EXTERNA.

Observação

Essa sintaxe varia entre as versões do SQL Server. Use a lista suspensa seletor de versão para escolher a versão apropriada do SQL Server. Para exibir os recursos do SQL Server 2019 e posterior, confira CRIAR FONTE DE DADOS EXTERNA.

Sintaxe do SQL Server 2017

Para obter mais informações sobre as convenções de sintaxe, consulte Convenções de sintaxe 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>]' )
[ ; ]

Argumentos

data_source_name

Especifica o nome da fonte de dados definido pelo usuário. O nome deve ser exclusivo no banco de dados no SQL Server.

LOCALIZAÇÃO = '<prefix>://<path[:port]>'

Fornece o protocolo de conectividade e o caminho para a fonte de dados externa.

Fonte de dados externa Prefixo de localização do conector Caminho de local Locais com suporte por produto/serviço
Cloudera CDH ou Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) ao SQL Server 2019 (15.x) somente
Conta de Armazenamento do Azure (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net A partir do SQL Server 2016 (13.x)
Não há suporte para o namespace hierárquico
Operações em Massa https <storage_account>.blob.core.windows.net/<container> A partir do SQL Server 2017 (14.x)

Caminho de local:

  • <Namenode> = o nome do computador, o URI do serviço de nome ou o endereço IP do Namenode no cluster do Hadoop. O PolyBase deve resolver qualquer nome DNS usado pelo cluster do Hadoop.
  • port = a porta em que fonte de dados externa está escutando. No Hadoop, a porta pode ser encontrada usando o parâmetro de configuração fs.defaultFS. O padrão é 8020.
  • <container> = o contêiner da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, não é possível gravar dados no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.
  • <server_name> = o nome de host.
  • <instance_name> = o nome de uma instância nomeada do SQL Server. Usado se você tiver o Serviço SQL Server Browser em execução na instância de destino.

Observações e orientação adicionais ao definir o local:

  • O Mecanismo de Banco de Dados do SQL Server não verifica a existência da fonte de dados externa quando o objeto é criado. Para validar, crie uma tabela externa usando a fonte de dados externa.
  • Use a mesma fonte de dados externa para todas as tabelas ao consultar o Hadoop para garantir semântica de consulta consistente.
  • Especifique o Driver={<Name of Driver>} ao se conectar por meio de ODBC.
  • wasbs é opcional, mas recomendado, para acessar as Contas de Armazenamento do Azure, pois os dados serão enviados usando uma conexão TLS/SSL segura.
  • Para garantir consultas do PolyBase com êxito durante um failover Namenode do Hadoop, considere usar um endereço IP virtual para o Namenode do cluster do Hadoop. Se você não fizer isso, execute um comando ALTER EXTERNAL DATA SOURCE para apontar para o novo local.

CREDENTIAL = credential_name

Especifica uma credencial no escopo do banco de dados para a autenticação na fonte de dados externa.

Observações e orientações adicionais ao criar uma credencial:

  • CREDENTIAL será necessário apenas se os dados tiverem sido protegidos. CREDENTIAL não é necessário para conjuntos de dados que permitem acesso anônimo.
  • Quando o TYPE = BLOB_STORAGE, a credencial precisa ser criada usando SHARED ACCESS SIGNATURE como a identidade. Além disso, o token SAS deve ser configurado da seguinte maneira:
    • Excluir o ? à esquerda quando configurado como o segredo
    • Ter pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r)
    • Use um período de término válido (todas as datas estão no horário UTC).
    • TYPE = BLOB_STORAGE só é permitido para operações em massa; não é possível criar tabelas externas para uma fonte de dados externa com TYPE = BLOB_STORAGE.
  • Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).
  • Quando TYPE = HADOOP, a credencial deve ser criada usando a chave de conta de armazenamento como o SECRET.

Para obter um exemplo de como usar um CREDENTIAL com SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, confira Criar uma fonte de dados externa para executar operações em massa e recuperar dados do Armazenamento do Azure no Banco de Dados SQL

Para criar uma credencial no escopo do banco de dados, veja CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]

Especifica o tipo de fonte de dados externa que está sendo configurada. Esse parâmetro nem sempre é necessário e só deve ser especificado ao se conectar ao Cloudera CDH, ao Hortonworks HDP, a uma conta de Armazenamento do Microsoft Azure ou a um Azure Data Lake Storage Gen2.

  • Use HADOOP quando a fonte de dados externa for o Cloudera CDH, o Hortonworks HDP, uma conta do de Armazenamento do Microsoft Azure ou um Azure Data Lake Storage Gen2.
  • Use BLOB_STORAGE ao executar operações em massa da conta de Armazenamento do Azure usando BULK INSERT ou OPENROWSET. Introduzido com o SQL Server 2017 (14.x). Use HADOOP quando pretender criar uma tabela externa no Armazenamento do Azure.

Observação

TYPE deve ser definido como HADOOP mesmo ao acessar o Armazenamento do Azure.

Para obter um exemplo de como usar o TYPE = HADOOP para carregar dados de uma conta do Armazenamento do Azure, confira Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configure esse valor opcional ao se conectar à Cloudera CDH, ao Hortonworks HDP ou a uma conta de Armazenamento do Microsoft Azure.

Quando o RESOURCE_MANAGER_LOCATION for definido, o Otimizador de Consulta tomará uma decisão baseada em custo para aprimorar o desempenho. Um trabalho MapReduce pode ser usado para aplicar a computação para o Hadoop. Especificar o RESOURCE_MANAGER_LOCATION pode reduzir significativamente o volume de dados transferidos entre o Hadoop e o SQL Server, o que pode levar a um desempenho de consultas aprimorado.

Se o Resource Manager não tiver sido especificado, o envio de computação por push para o Hadoop estará desabilitado para consultas do PolyBase.

Se a porta não for especificada, o valor padrão será escolhido usando a definição atual da configuração 'conectividade do Hadoop'.

Conectividade do Hadoop Porta do Gerenciador de Recursos padrão
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Para ver uma lista completa de versões do Hadoop compatíveis, veja Configuração de conectividade do PolyBase (Transact-SQL).

Importante

O valor de RESOURCE_MANAGER_LOCATION e não é validado quando você cria a fonte de dados externa. Inserir um valor incorreto pode causar falha de consulta em tempo de execução sempre que for feita uma tentativa de aplicação, uma vez que o valor fornecido não poderá ser resolvido.

Criar fonte de dados externa para referenciar o Hadoop com aplicação habilitada apresenta um exemplo concreto e diretrizes adicionais.

Permissões

Requer a permissão CONTROL no banco de dados no SQL Server.

Bloqueio

Usa um bloqueio compartilhado no objeto EXTERNAL DATA SOURCE.

Segurança

O PolyBase dá suporte para autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial no escopo do banco de dados para criar a conta proxy.

Quando você se conecta ao pool de armazenamento ou de dados em um cluster de Big Data do SQL Server 2019, as credenciais do usuário são passadas para o sistema de back-end. Crie logons no pool de dados propriamente dito para habilitar a autenticação de passagem.

No momento, não há suporte para um token SAS com o tipo HADOOP. Só há suporte para o tipo = BLOB_STORAGE quando uma chave de acesso da conta de armazenamento é usada. Tentar criar uma fonte de dados externa com o tipo HADOOP e uma credencial SAS falha com o seguinte erro:

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

Exemplos

Importante

Para obter informações sobre como instalar e habilitar o PolyBase, confira Instalar o PolyBase no Windows

a. Criar uma fonte de dados externa para referenciar o Hadoop

Para criar uma fonte de dados externa para referenciar o cluster do Hadoop do Hortonworks HDP ou do Cloudera CDH, especifique o nome do computador ou o endereço IP do Namenode do Hadoop e a porta.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    TYPE = HADOOP
  ) ;

B. Criar uma fonte de dados externa para referenciar o Hadoop com aplicação habilitada

Especifique a opção RESOURCE_MANAGER_LOCATION para habilitar a computação de aplicação para Hadoop em consultas do PolyBase. Uma vez habilitado, o PolyBase toma uma decisão baseada em custo para determinar se a computação de consulta deve ser enviada por push para o 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. Criar uma fonte de dados externa para referenciar o Hadoop protegido pelo Kerberos

Para verificar se o cluster do Hadoop está protegido pelo Kerberos, verifique o valor da propriedade hadoop.security.authentication no core-site.xml do Hadoop. Para referenciar um cluster do Hadoop protegido pelo Kerberos, você precisa especificar uma credencial no escopo do banco de dados contendo o nome de usuário e a senha do Kerberos. A chave mestra do banco de dados é usada para criptografar o segredo da credencial no escopo do banco de dados.

-- 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. Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface wasb://

Neste exemplo, a fonte de dados externa é uma conta de Armazenamento do Azure V2 chamada logs. O contêiner de armazenamento é chamado daily. A fonte de dados externa do Armazenamento do Azure destina-se somente a transferência de dados. Não dá suporte a aplicação de predicado. Não há suporte para namespaces hierárquicos ao acessar dados por meio da interface wasb://. Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).

Este exemplo mostra como criar a credencial no escopo do banco de dados para autenticação na conta de Armazenamento do Azure V2. Especifique a chave de conta de Armazenamento do Azure no segredo da credencial do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade da credencial no escopo do banco de dados, pois ela não será usada durante a autenticação no Armazenamento do 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
  ) ;

Exemplos: Operações em Massa

Importante

Não adicione parâmetros de assinatura de acesso compartilhado, nome de arquivo ou / à direita no fim da URL LOCATION ao configurar uma fonte de dados externa para operações em massa.

E. Criar uma fonte de dados externa para operações em massa recuperando dados do Armazenamento do Azure

Aplica-se a: SQL Server 2017 (14.x) e posterior.

Use a seguinte fonte de dados para operações em massa com BULK INSERT ou OPENROWSET. A credencial deve ser definida como SHARED ACCESS SIGNATURE como a identidade, não deve ter o ? à esquerda no token SAS, deve ter pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r), e o período de término deve ser válido (todas as datas estão no horário UTC). Para mais informações sobre assinaturas de acesso compartilhado, consulte Usando SAS (Assinatura de Acesso Compartilhado).

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

Para ver esse exemplo em uso, confira o exemplo BULK INSERT.

Confira também

Visão geral: SQL Server

Aplica-se a:yesSQL Server 2019 (15.x) e posteriores

Cria uma fonte de dados externa para consultas do PolyBase. Fontes de dados externas são usadas para estabelecer a conectividade e dar suporte a estes casos de uso principal:

  • Virtualização de dados e carregamento dados usando o PolyBase
  • Operações de carregamento em massa usando BULK INSERT ou OPENROWSET

Observação

Essa sintaxe varia entre as versões do SQL Server. Use a lista suspensa seletor de versão para escolher a versão apropriada do SQL Server. Esse conteúdo se aplica ao SQL Server 2019 e posteriores.

Sintaxe para o SQL Server 2019 e posterior

Para obter mais informações sobre as convenções de sintaxe, consulte Convenções de sintaxe 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>]' )
[ ; ]

Argumentos

data_source_name

Especifica o nome da fonte de dados definido pelo usuário. O nome deve ser exclusivo no banco de dados no SQL Server.

LOCALIZAÇÃO = '<prefix>://<path[:port]>'

Fornece o protocolo de conectividade e o caminho para a fonte de dados externa.

Fonte de dados externa Prefixo de localização do conector Caminho de local Locais com suporte por produto/serviço
Cloudera CDH ou Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) ao SQL Server 2019 (15.x)
Conta de Armazenamento do Azure (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net A partir do SQL Server 2016 (13.x)
Não há suporte para o namespace hierárquico
SQL Server sqlserver <server_name>[\<instance_name>][:port] A partir do SQL Server 2019 (15.x)
Oracle oracle <server_name>[:port] A partir do SQL Server 2019 (15.x)
Teradata teradata <server_name>[:port] A partir do SQL Server 2019 (15.x)
API do MongoDB ou do Cosmos DB para MongoDB mongodb <server_name>[:port] A partir do SQL Server 2019 (15.x)
ODBC Genérico odbc <server_name>[:port] Começando com o SQL Server 2019 (15.x) – somente Windows
Operações em Massa https <storage_account>.blob.core.windows.net/<container> A partir do SQL Server 2017 (14.x)
Azure Data Lake Storage Gen2 abfs[s] abfss://<container>@<storage _account>.dfs.core.windows.net Começando com o SQL Server 2019 (15.x) CU11+.
Pool de dados de Clusters de Big Data do SQL Server sqldatapool sqldatapool://controller-svc/default Suporte apenas no Clusters de Big Data do SQL Server 2019
Pool de armazenamento nos Clusters de Big Data do SQL Server sqlhdfs sqlhdfs://controller-svc/default Suporte apenas no Clusters de Big Data do SQL Server 2019

Caminho de local:

  • <Namenode> = o nome do computador, o URI do serviço de nome ou o endereço IP do Namenode no cluster do Hadoop. O PolyBase deve resolver qualquer nome DNS usado pelo cluster do Hadoop.
  • port = a porta em que fonte de dados externa está escutando. No Hadoop, a porta pode ser encontrada usando o parâmetro de configuração fs.defaultFS. O padrão é 8020.
  • <container> = o contêiner da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, não é possível gravar dados no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.
  • <server_name> = o nome de host.
  • <instance_name> = o nome de uma instância nomeada do SQL Server. Usado se você tiver o Serviço SQL Server Browser em execução na instância de destino.

Observações e orientação adicionais ao definir o local:

  • O Mecanismo de Banco de Dados do SQL Server não verifica a existência da fonte de dados externa quando o objeto é criado. Para validar, crie uma tabela externa usando a fonte de dados externa.
  • Use a mesma fonte de dados externa para todas as tabelas ao consultar o Hadoop para garantir semântica de consulta consistente.
  • Você pode usar o conector sqlserver para conectar o SQL Server 2019 (15.x) a outro SQL Server, ao Banco de Dados SQL do Azure ou ao Azure Synapse Analytics.
  • Especifique o Driver={<Name of Driver>} ao se conectar por meio de ODBC.
  • O uso de wasbs ou abfss é opcional, mas recomendado para acessar as Contas de Armazenamento do Azure, pois os dados serão enviados usando uma conexão TLS/SSL segura.
  • As APIs abfs ou abfss têm suporte para o acesso às Contas do Armazenamento do Azure a partir do SQL Server 2019 (15.x) CU11+. Para saber mais, confira O driver ABFS (sistema de arquivos de Blob do Azure).
  • A opção de Namespace hierárquico para Contas do Armazenamento do Microsoft Azure (V2) usando o abfs[s] tem suporte por meio do Azure Data Lake Storage Gen2 começando no SQL Server 2019 (15.x) CU11+. Caso contrário, a opção de namespace hierárquico não tem suporte e ela deve permanecer desabilitada.
  • Para garantir consultas do PolyBase com êxito durante um failover Namenode do Hadoop, considere usar um endereço IP virtual para o Namenode do cluster do Hadoop. Se você não fizer isso, execute um comando ALTER EXTERNAL DATA SOURCE para apontar para o novo local.
  • Os tipos sqlhdfs e sqldatapool têm suporte para conexão entre a instância mestra e o pool de armazenamento de um cluster de Big Data do SQL Server 2019. Para o Cloudera CDH ou Hortonworks HDP, use hdfs. Para saber mais sobre como usar o sqlhdfs para consultar pools de armazenamento de Clusters de Big Data do SQL Server, confira Consultar HDFS em um cluster de Big Data do SQL Server.
  • O suporte do SQL Server a fontes de dados externas do HDFS Cloudera (CDP) e Hortonworks (HDP) será desativado e não será incluído no SQL Server 2022. Para obter mais informações, confira Opções de Big Data na plataforma Microsoft SQL Server.

CONNECTION_OPTIONS = key_value_pair

Especificado apenas para SQL Server 2019 (15.x). Especifica opções adicionais ao se conectar por meio de ODBC a uma fonte de dados externa. Para usar várias opções de conexão, separe-as com ponto e vírgula.

Aplica-se a conexões ODBC genéricas, assim como a conectores ODBC internos para SQL Server, Oracle, Teradata, MongoDB e API do Azure Cosmos DB para MongoDB.

O key_value_pair é a palavra-chave e o valor de uma opção de conexão específica. As palavras-chave e os valores disponíveis dependem do tipo de fonte de dados externa. O nome do driver é necessário como requisito mínimo, mas há outras opções, como APP='<your_application_name>' ou ApplicationIntent= ReadOnly|ReadWrite, que também são úteis de serem definidas e podem ajudar a solucionar problemas.

Para obter mais informações, consulte:

PUSHDOWN = ON | OFF

Especificado apenas para SQL Server 2019 (15.x). Informa se é possível realizar a aplicação da computação para a fonte de dados externa. Está ativado por padrão.

Há suporte para PUSHDOWN ao se conectar ao SQL Server, Oracle, Teradata, MongoDB, à API do Azure Cosmos DB para MongoDB ou ao ODBC no nível da fonte de dados externa.

Habilitar ou desabilitar a aplicação no nível da consulta é feito por meio de uma dica.

CREDENTIAL = credential_name

Especifica uma credencial no escopo do banco de dados para a autenticação na fonte de dados externa.

Observações e orientações adicionais ao criar uma credencial:

  • CREDENTIAL será necessário apenas se os dados tiverem sido protegidos. CREDENTIAL não é necessário para conjuntos de dados que permitem acesso anônimo.
  • Quando o TYPE = BLOB_STORAGE, a credencial precisa ser criada usando SHARED ACCESS SIGNATURE como a identidade. Além disso, o token SAS deve ser configurado da seguinte maneira:
    • Excluir o ? à esquerda quando configurado como o segredo.
    • Ter pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo, srt=o&sp=r).
    • Use um período de término válido (todas as datas estão no horário UTC).
    • TYPE = BLOB_STORAGE só é permitido para operações em massa; não é possível criar tabelas externas para uma fonte de dados externa com TYPE = BLOB_STORAGE.
  • Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).
  • Quando TYPE = HADOOP, a credencial deve ser criada usando a chave de conta de armazenamento como o SECRET.

Para obter um exemplo de como usar um CREDENTIAL com SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, confira Criar uma fonte de dados externa para executar operações em massa e recuperar dados do Armazenamento do Azure no Banco de Dados SQL

Para criar uma credencial no escopo do banco de dados, veja CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]

Especifica o tipo de fonte de dados externa que está sendo configurada. Esse parâmetro nem sempre é necessário e só deve ser especificado ao se conectar ao Cloudera CDH, ao Hortonworks HDP, a uma conta de Armazenamento do Microsoft Azure ou a um Azure Data Lake Storage Gen2.

  • No SQL Server 2019 (15.x), não especifique TYPE, a menos que esteja conectando ao Cloudera CDH, Hortonworks HDP, uma conta de Armazenamento Azure.
  • Use HADOOP quando a fonte de dados externa for o Cloudera CDH, o Hortonworks HDP, uma conta do de Armazenamento do Microsoft Azure ou um Azure Data Lake Storage Gen2.
  • Use BLOB_STORAGE ao executar operações em massa da conta de Armazenamento do Azure usando BULK INSERT ou OPENROWSET com o SQL Server 2017 (14.x). Use HADOOP quando pretender criar uma tabela externa no Armazenamento do Azure.
  • O suporte do SQL Server a fontes de dados externas do HDFS Cloudera (CDP) e Hortonworks (HDP) será desativado e não será incluído no SQL Server 2022. Para obter mais informações, confira Opções de Big Data na plataforma Microsoft SQL Server.

Para obter um exemplo de como usar o TYPE = HADOOP para carregar dados de uma conta do Armazenamento do Azure, confira Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configure esse valor opcional ao se conectar à Cloudera CDH, ao Hortonworks HDP ou a uma conta de Armazenamento do Microsoft Azure. No SQL Server 2019 (15.x), não especifique RESOURCE_MANAGER_LOCATION a menos que se conecte ao Cloudera CDH, Hortonworks HDP, uma conta Armazenamento Azure.

Quando o RESOURCE_MANAGER_LOCATION for definido, o Otimizador de Consulta tomará uma decisão baseada em custo para aprimorar o desempenho. Um trabalho MapReduce pode ser usado para aplicar a computação para o Hadoop. Especificar o RESOURCE_MANAGER_LOCATION pode reduzir significativamente o volume de dados transferidos entre o Hadoop e o SQL Server, o que pode levar a um desempenho de consultas aprimorado.

Se o Resource Manager não tiver sido especificado, o envio de computação por push para o Hadoop estará desabilitado para consultas do PolyBase.

Se a porta não for especificada, o valor padrão será escolhido usando a definição atual da configuração 'conectividade do Hadoop'.

Conectividade do Hadoop Porta do Gerenciador de Recursos padrão
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Para ver uma lista completa de versões do Hadoop compatíveis, veja Configuração de conectividade do PolyBase (Transact-SQL).

Importante

O valor de RESOURCE_MANAGER_LOCATION e não é validado quando você cria a fonte de dados externa. Inserir um valor incorreto pode causar falha de consulta em tempo de execução sempre que for feita uma tentativa de aplicação, uma vez que o valor fornecido não poderá ser resolvido.

Criar fonte de dados externa para referenciar o Hadoop com aplicação habilitada apresenta um exemplo concreto e diretrizes adicionais.

Permissões

Requer a permissão CONTROL no banco de dados no SQL Server.

Bloqueio

Usa um bloqueio compartilhado no objeto EXTERNAL DATA SOURCE.

Segurança

O PolyBase dá suporte para autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial no escopo do banco de dados para criar a conta proxy.

Quando você se conecta ao pool de armazenamento ou de dados em um cluster de Big Data do SQL Server 2019, as credenciais do usuário são passadas para o sistema de back-end. Crie logons no pool de dados propriamente dito para habilitar a autenticação de passagem.

No momento, não há suporte para um token SAS com o tipo HADOOP. Só há suporte para o tipo = BLOB_STORAGE quando uma chave de acesso da conta de armazenamento é usada. Tentar criar uma fonte de dados externa com o tipo HADOOP e uma credencial SAS falha com o seguinte erro:

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

Exemplos

Importante

Para obter informações sobre como instalar e habilitar o PolyBase, confira Instalar o PolyBase no Windows

a. Criar fonte de dados externa no SQL Server 2019 para referenciar o Oracle

Para criar uma fonte de dados externa que faça referência ao Oracle, verifique se que você tem uma credencial no escopo do banco de dados. Opcionalmente, você também poderá habilitar ou desabilitar a aplicação de computação em relação a essa fonte de dados.

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

Opcionalmente, a fonte de dados externa para o Oracle pode usar a autenticação de proxy para fornecer controle de acesso refinado. Um usuário de proxy pode ser configurado para ter acesso limitado em comparação com o usuário que está sendo representado.

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]);

Para ver mais exemplos para outras fontes de dados, como o MongoDB, confira Configurar o PolyBase para acessar dados externos no MongoDB.

B. Criar uma fonte de dados externa para referenciar o Hadoop

Para criar uma fonte de dados externa para referenciar o cluster do Hadoop do Hortonworks HDP ou do Cloudera CDH, especifique o nome do computador ou o endereço IP do Namenode do Hadoop e a porta.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    TYPE = HADOOP
  ) ;

C. Criar uma fonte de dados externa para referenciar o Hadoop com aplicação habilitada

Especifique a opção RESOURCE_MANAGER_LOCATION para habilitar a computação de aplicação para Hadoop em consultas do PolyBase. Uma vez habilitado, o PolyBase toma uma decisão baseada em custo para determinar se a computação de consulta deve ser enviada por push para o 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. Criar uma fonte de dados externa para referenciar o Hadoop protegido pelo Kerberos

Para verificar se o cluster do Hadoop está protegido pelo Kerberos, verifique o valor da propriedade hadoop.security.authentication no core-site.xml do Hadoop. Para referenciar um cluster do Hadoop protegido pelo Kerberos, você precisa especificar uma credencial no escopo do banco de dados contendo o nome de usuário e a senha do Kerberos. A chave mestra do banco de dados é usada para criptografar o segredo da credencial no escopo do banco de dados.

-- 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'
  );

E. Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface wasb://

Neste exemplo, a fonte de dados externa é uma conta de Armazenamento do Azure V2 chamada logs. O contêiner de armazenamento é chamado daily. A fonte de dados externa do Armazenamento do Azure destina-se somente a transferência de dados. Não dá suporte a aplicação de predicado. Não há suporte para namespaces hierárquicos ao acessar dados por meio da interface wasb://. Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).

Este exemplo mostra como criar a credencial no escopo do banco de dados para autenticação na conta de Armazenamento do Azure V2. Especifique a chave de conta de Armazenamento do Azure no segredo da credencial do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade da credencial no escopo do banco de dados, pois ela não será usada durante a autenticação no Armazenamento do 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. Criar uma fonte de dados externa para referenciar uma instância nomeada do SQL Server por meio da conectividade do PolyBase

Aplica-se a: SQL Server 2019 (15.x) e posterior

Para criar uma fonte de dados externa que referencie uma instância nomeada do SQL Server, use CONNECTION_OPTIONS para especificar o nome da instância.

No exemplo abaixo, WINSQL2019 é o nome do host e SQL2019 é o nome da instância. 'Server=%s\SQL2019' é o par chave-valor.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019' ,
  CONNECTION_OPTIONS = 'Server=%s\SQL2019' ,
  CREDENTIAL = SQLServerCredentials
) ;

Como alternativa, você pode usar uma porta para se conectar a uma instância do SQL Server.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019:58137' ,
  CREDENTIAL = SQLServerCredentials
) ;

Exemplos: Operações em Massa

Importante

Não adicione parâmetros de assinatura de acesso compartilhado, nome de arquivo ou / à direita no fim da URL LOCATION ao configurar uma fonte de dados externa para operações em massa.

G. Criar uma fonte de dados externa para operações em massa recuperando dados do Armazenamento do Azure

Aplica-se a: SQL Server 2017 (14.x) e posterior.

Use a seguinte fonte de dados para operações em massa com BULK INSERT ou OPENROWSET. A credencial deve ser definida como SHARED ACCESS SIGNATURE como a identidade, não deve ter o ? à esquerda no token SAS, deve ter pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r), e o período de término deve ser válido (todas as datas estão no horário UTC). Para mais informações sobre assinaturas de acesso compartilhado, consulte Usando SAS (Assinatura de Acesso Compartilhado).

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

Para ver esse exemplo em uso, confira o exemplo BULK INSERT.

H. Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface abfs://

Aplica-se a: SQL Server 2019 (15.x) CU11 e posterior

Neste exemplo, a fonte de dados externa é uma conta do Azure Data Lake Storage Gen2, logs, usando o driver do ABFS (Azure Blob File System). O contêiner de armazenamento é chamado daily. A fonte de dados externa do Azure Data Lake Storage Gen2 serve apenas para transferência de dados, pois não há suporte para push down de predicado.

Este exemplo mostra como criar a credencial no escopo do banco de dados para autenticação em uma conta do Azure Data Lake Storage Gen2. Especifique a chave de conta de Armazenamento do Azure no segredo da credencial do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade da credencial no escopo do banco de dados, pois ela não será usada durante a autenticação no Armazenamento do 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
  ) ;

Confira também

* Banco de Dados SQL *  

 

Visão geral: Banco de Dados SQL do Azure

Aplica-se a:YesBanco de Dados SQL do Azure

Cria uma fonte de dados externa para consultas elásticas. Fontes de dados externas são usadas para estabelecer a conectividade e dar suporte a estes casos de uso principal:

  • Operações de carregamento em massa usando BULK INSERT ou OPENROWSET
  • Consultar instâncias remotas do Banco de Dados SQL ou do Azure Synapse usando o Banco de Dados SQL com consulta elástica
  • Consultar um Banco de Dados SQL fragmentado usando consulta elástica

Sintaxe

Para obter mais informações sobre as convenções de sintaxe, consulte Convenções de sintaxe 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>' ] )
[ ; ]

Argumentos

data_source_name

Especifica o nome da fonte de dados definido pelo usuário. O nome deve ser exclusivo dentro do banco de dados no Banco de Dados SQL.

LOCALIZAÇÃO = '<prefix>://<path[:port]>'

Fornece o protocolo de conectividade e o caminho para a fonte de dados externa.

Fonte de dados externa Prefixo de localização do conector Caminho de local Disponibilidade
Operações em Massa https <storage_account>.blob.core.windows.net/<container>
Consulta Elástica (fragmento) Não obrigatório <shard_map_server_name>.database.windows.net
Consulta Elástica (remota) Não obrigatório <remote_server_name>.database.windows.net
EdgeHub edgehub 'edgehub://' Disponível no SQL do Azure no Edgeapenas. O EdgeHub é sempre local para a instância do SQL do Azure no Edge. Como tal, não é necessário especificar um valor de porta ou caminho.
Kafka kafka kafka://<kafka_bootstrap_server_name_ip>:<port_number> Disponível no SQL do Azure no Edgeapenas.

Caminho de local:

  • <shard_map_server_name> = o nome do servidor lógico do Azure que está hospedando o gerenciador de mapa de fragmentos. O argumento DATABASE_NAME fornece o banco de dados usado para hospedar o mapa de fragmentos e SHARD_MAP_NAME é usado para o mapa de fragmentos em si.
  • <remote_server_name> = o nome do servidor lógico de destino para a consulta elástica. O nome do banco de dados é especificado usando o argumento DATABASE_NAME.

Observações e orientação adicionais ao definir o local:

  • O Mecanismo de Banco de Dados não verifica a existência da fonte de dados externa quando o objeto é criado. Para validar, crie uma tabela externa usando a fonte de dados externa.

CREDENTIAL = credential_name

Especifica uma credencial no escopo do banco de dados para a autenticação na fonte de dados externa.

Observações e orientações adicionais ao criar uma credencial:

  • Para carregar dados do Armazenamento do Azure no Banco de Dados SQL do Azure, use um token SAS (Assinatura de Acesso Compartilhado).
  • CREDENTIAL será necessário apenas se os dados tiverem sido protegidos. CREDENTIAL não é necessário para conjuntos de dados que permitem acesso anônimo.
  • Quando o TYPE = BLOB_STORAGE, a credencial precisa ser criada usando SHARED ACCESS SIGNATURE como a identidade. Além disso, o token SAS deve ser configurado da seguinte maneira:
    • Excluir o ? à esquerda quando configurado como o segredo
    • Ter pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r)
    • Use um período de término válido (todas as datas estão no horário UTC).
    • TYPE = BLOB_STORAGE só é permitido para operações em massa; não é possível criar tabelas externas para uma fonte de dados externa com TYPE = BLOB_STORAGE.
  • Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).
  • Quando TYPE = HADOOP, a credencial deve ser criada usando a chave de conta de armazenamento como o SECRET.

Para obter um exemplo de como usar um CREDENTIAL com SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, confira Criar uma fonte de dados externa para executar operações em massa e recuperar dados do Armazenamento do Azure no Banco de Dados SQL

Para criar uma credencial no escopo do banco de dados, veja CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]

Especifica o tipo de fonte de dados externa que está sendo configurada. Esse parâmetro não é sempre necessário.

  • Use o RDBMS para consultas entre bancos de dados usando a consulta elástica do Banco de Dados SQL.
  • Use SHARD_MAP_MANAGER ao criar uma fonte de dados externa ao se conectar a um Banco de Dados SQL fragmentado.
  • Use BLOB_STORAGE ao executar operações em massa com BULK INSERT ou OPENROWSET.

Importante

Não defina TYPE se estiver usando qualquer outra fonte de dados externa.

DATABASE_NAME = database_name

Configure esse argumento quando o TYPE estiver definido como RDBMS ou SHARD_MAP_MANAGER.

TYPE Valor de DATABASE_NAME
RDBMS O nome do banco de dados remoto no servidor fornecido usando LOCATION
SHARD_MAP_MANAGER Nome do banco de dados operacional, como o gerenciador de mapa de fragmentos

Para obter um exemplo que mostra como criar uma fonte de dados externa em que TYPE = RDBMS, veja Criar uma fonte de dados externa do RDBMS

SHARD_MAP_NAME = shard_map_name

Usado quando o argumento TYPE é definido como SHARD_MAP_MANAGER apenas para definir o nome do mapa de fragmentos.

Para ver um exemplo que mostra como criar uma fonte de dados externa em que TYPE = SHARD_MAP_MANAGER, veja Criar uma fonte de dados externa do gerenciador de mapa de fragmentos

Permissões

Requer a permissão CONTROLno Banco de Dados SQL do Azure.

Bloqueio

Usa um bloqueio compartilhado no objeto EXTERNAL DATA SOURCE.

Exemplos:

a. Criar uma fonte de dados externa do gerenciador de mapa de fragmentos

Para criar uma fonte de dados externa para referenciar um SHARD_MAP_MANAGER, especifique o nome do servidor do Banco de Dados SQL que hospeda o gerenciador de mapa de fragmentos no Banco de Dados SQL ou em um banco de dados do SQL Server em uma máquina virtual.

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'
  ) ;

Para obter um tutorial passo a passo, confira Introdução a consultas elásticas para fragmentação (particionamento horizontal).

B. Criar uma fonte de dados externa do RDBMS

Para criar uma fonte de dados externa para referenciar um RDBMS, especifica o nome do servidor do Banco de Dados SQL do banco de dados remoto no Banco de Dados 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
  ) ;

Para obter um tutorial passo a passo sobre o RDBMS, confira Introdução às consultas entre bancos de dados (particionamento vertical).

Exemplos: Operações em Massa

Importante

Não adicione parâmetros de assinatura de acesso compartilhado, nome de arquivo ou / à direita no fim da URL LOCATION ao configurar uma fonte de dados externa para operações em massa.

C. Criar uma fonte de dados externa para operações em massa recuperando dados do Armazenamento do Azure

Use a seguinte fonte de dados para operações em massa com BULK INSERT ou OPENROWSET. A credencial deve ser definida como SHARED ACCESS SIGNATURE como a identidade, não deve ter o ? à esquerda no token SAS, deve ter pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r), e o período de término deve ser válido (todas as datas estão no horário UTC). Para mais informações sobre assinaturas de acesso compartilhado, consulte Usando SAS (Assinatura de Acesso Compartilhado).

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

Para ver esse exemplo em uso, confira BULK INSERT.

Exemplos: SQL do Azure no Edge

Importante

Para obter informações sobre como configurar dados externos para o SQL do Azure no Edge, confira Transmissão de dados no SQL do Azure no Edge.

a. Criar uma fonte de dados externa para referenciar o Kafka

Aplica-se ao:SQL do Azure no Edgeapenas

Neste exemplo, a fonte de dados externa é um servidor Kafka com o endereço IP xxx.xxx.xxx.xxx e escuta na porta 1900. A fonte de dados externa do Kafka é apenas para streaming de dados e não dá suporte a push de predicado.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer WITH (
    LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900'
)
GO

B. Criar uma fonte de dados externa para referenciar o EdgeHub

Aplica-se ao:SQL do Azure no Edgeapenas

Neste exemplo, a fonte de dados externa é um EdgeHub em execução no mesmo dispositivo de borda que o SQL do Azure no Edge. A fonte de dados externa do edgeHub é apenas para streaming de dados e não dá suporte a push de predicado.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub WITH (
    LOCATION = 'edgehub://'
)
go

Confira também

* Azure Synapse
Analytics *
 

 

Visão geral: Azure Synapse Analytics

Aplica-se ao:yesAzure Synapse Analytics

Cria uma fonte de dados externa para o PolyBase. Fontes de dados externas são usadas para estabelecer a conectividade e a compatibilidade com estes casos de uso principal: Virtualização de dados e carregamento dados usando o PolyBase

Importante

Para criar uma fonte de dados externa para consultar um recurso do Azure Synapse Analytics usando o Banco de Dados SQL do Azure com a consulta elástica, confira Banco de Dados SQL.

Sintaxe

Para obter mais informações sobre as convenções de sintaxe, consulte Convenções de sintaxe Transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = HADOOP ]
[ ; ]

Argumentos

data_source_name

Especifica o nome da fonte de dados definido pelo usuário. O nome deve ser exclusivo no Banco de Dados SQL do Azure no Azure Synapse Analytics.

LOCALIZAÇÃO = '<prefix>://<path[:port]>'

Fornece o protocolo de conectividade e o caminho para a fonte de dados externa.

Fonte de dados externa Prefixo de localização do conector Caminho de local
Azure Data Lake Storage Gen 1 adl <storage_account>.azuredatalake.net
Azure Data Lake Storage Gen 2 abfs[s] <container>@<storage_account>.dfs.core.windows.net
Conta de Armazenamento do Azure V2 wasb[s] <container>@<storage_account>.blob.core.windows.net

Caminho de local:

  • <container> = o contêiner da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, não é possível gravar dados no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.

Observações e orientação adicionais ao definir o local:

  • A opção padrão é usar enable secure SSL connections ao provisionar o Azure Data Lake Storage Gen2. Quando estiver habilitado, você deverá usar abfss ao selecionar uma conexão TLS/SSL segura. Observe que abfss também funciona em conexões TSL não seguras. Para saber mais, confira O driver ABFS (sistema de arquivos de Blob do Azure).
  • O Azure Synapse não verifica a existência da fonte de dados externa quando o objeto é criado. Para validar, crie uma tabela externa usando a fonte de dados externa.
  • Use a mesma fonte de dados externa para todas as tabelas ao consultar o Hadoop para garantir semântica de consulta consistente.
  • wasbs é recomendado, pois os dados serão enviados usando uma conexão TLS segura.
  • Não há suporte para Namespaces Hierárquicos com as Contas de Armazenamento do Azure V2 ao acessar dados por meio do PolyBase usando a interface wasb://.

CREDENTIAL = credential_name

Especifica uma credencial no escopo do banco de dados para a autenticação na fonte de dados externa.

Observações e orientações adicionais ao criar uma credencial:

  • Para carregar dados do Armazenamento do Azure ou do ADLS (Azure Data Lake Storage) Gen 2 no Azure Synapse Analytics, use uma Chave de Armazenamento do Azure.
  • CREDENTIAL será necessário apenas se os dados tiverem sido protegidos. CREDENTIAL não é necessário para conjuntos de dados que permitem acesso anônimo.

Para criar uma credencial no escopo do banco de dados, veja CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = HADOOP

Especifica o tipo de fonte de dados externa que está sendo configurada. Esse parâmetro não é sempre necessário.

Use o HADOOP quando a fonte de dados externa for Armazenamento do Azure, ADLS Gen 1 ou ADLS Gen 2.

Para obter um exemplo de como usar TYPE = HADOOP para carregar dados do Armazenamento do Azure, confira Criar uma fonte de dados externa para referenciar o Azure Data Lake Storage Gen 1 ou 2 usando uma entidade de serviço.

Permissões

Requer a permissão CONTROL no banco de dados.

Bloqueio

Usa um bloqueio compartilhado no objeto EXTERNAL DATA SOURCE.

Segurança

O PolyBase dá suporte para autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial no escopo do banco de dados para criar a conta proxy.

Quando você se conecta ao pool de armazenamento ou de dados em um cluster de Big Data do SQL Server 2019, as credenciais do usuário são passadas para o sistema de back-end. Crie logons no pool de dados propriamente dito para habilitar a autenticação de passagem.

No momento, não há suporte para um token SAS com o tipo HADOOP. Só há suporte para o tipo = BLOB_STORAGE quando uma chave de acesso da conta de armazenamento é usada. Tentar criar uma fonte de dados externa com o tipo HADOOP e uma credencial SAS falha com o seguinte erro:

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

Exemplos:

a. Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface wasb://

Neste exemplo, a fonte de dados externa é uma conta de Armazenamento do Azure V2 chamada logs. O contêiner de armazenamento é chamado daily. A fonte de dados externa do Armazenamento do Azure destina-se somente a transferência de dados. Não dá suporte a aplicação de predicado. Não há suporte para namespaces hierárquicos ao acessar dados por meio da interface wasb://. Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).

Este exemplo mostra como criar a credencial no escopo do banco de dados para autenticação no Armazenamento do Azure. Especifique a chave de conta de Armazenamento do Azure no segredo da credencial do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade da credencial no escopo do banco de dados, pois ela não será usada durante a autenticação no Armazenamento do 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. Criar fonte de dados externa para referenciar o Azure Data Lake Storage Gen 1 ou 2 usando uma entidade de serviço

A conectividade do Azure Data Lake Storage pode ser baseada no URI do ADLS e na entidade de serviço do Aplicativo do Azure Active Directory. A documentação para criar esse aplicativo pode ser encontrada em Autenticação do Data Lake Storage usando o Active Directory.

-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- These values come from your Azure Active Directory Application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
  -- IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>' ,
  IDENTITY = '536540b4-4239-45fe-b9a3-629f97591c0c@https://login.microsoftonline.com/42f988bf-85f1-41af-91ab-2d2cd011da47/oauth2/token' ,
  -- SECRET = '<KEY>'
  SECRET = 'BjdIlmtKp4Fpyh9hIvr8HJlUida/seM5kQ3EpLAmeDI=' 
;

-- For Gen 1 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen 1 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
  ( LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net' ,
    CREDENTIAL = ADLS_credential ,
    TYPE = HADOOP
  ) ;

-- For Gen 2 - 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 2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
  -- Please note the abfss endpoint when your account has secure transfer enabled
  ( LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net' , 
    CREDENTIAL = ADLS_credential ,
    TYPE = HADOOP
  ) ;

C. Criar fonte de dados externa para referenciar o Azure Data Lake Storage Gen 2 usando a chave de conta de armazenamento

-- 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 Gen 2 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. Criar uma fonte de dados externa para referenciar a conectividade do Polybase com o Azure Data Lake Storage Gen 2 usando ABFS://

Não há necessidade de especificar SECRET ao se conectar à conta do Azure Data Lake Storage Gen2 com o mecanismo de Identidade Gerenciada.

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

Confira também

* Analytics
Platform System (PDW) *
 

 

Visão geral: Sistema de plataforma de análise

Aplica-se ao:yesAnalytics Platform System (PDW)

Cria uma fonte de dados externa para consultas do PolyBase. Fontes de dados externas são usadas para estabelecer a conectividade e a compatibilidade com estes casos de uso: Virtualização de dados e carregamento dados usando o PolyBase.

Sintaxe

Para obter mais informações sobre as convenções de sintaxe, consulte Convenções de sintaxe 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>]' )
[ ; ]

Argumentos

data_source_name

Especifica o nome da fonte de dados definido pelo usuário. O nome precisa ser exclusivo no servidor no Analytics Platform System (PDW).

LOCALIZAÇÃO = '<prefix>://<path[:port]>'

Fornece o protocolo de conectividade e o caminho para a fonte de dados externa.

Fonte de dados externa Prefixo de localização do conector Caminho de local
Cloudera CDH ou Hortonworks HDP hdfs <Namenode>[:port]
Conta de Armazenamento do Azure wasb[s] <container>@<storage_account>.blob.core.windows.net

Caminho de local:

  • <Namenode> = o nome do computador, o URI do serviço de nome ou o endereço IP do Namenode no cluster do Hadoop. O PolyBase deve resolver qualquer nome DNS usado pelo cluster do Hadoop.
  • port = a porta em que fonte de dados externa está escutando. No Hadoop, a porta pode ser encontrada usando o parâmetro de configuração fs.defaultFS. O padrão é 8020.
  • <container> = o contêiner da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, não é possível gravar dados no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.

Observações e orientação adicionais ao definir o local:

  • O mecanismo do PDW não verifica a existência da fonte de dados externa quando o objeto é criado. Para validar, crie uma tabela externa usando a fonte de dados externa.
  • Use a mesma fonte de dados externa para todas as tabelas ao consultar o Hadoop para garantir semântica de consulta consistente.
  • wasbs é recomendado, pois os dados serão enviados usando uma conexão TLS segura.
  • Não há suporte para Namespaces Hierárquicos quando usados com contas de Armazenamento do Azure em wasb://.
  • Para garantir consultas do PolyBase com êxito durante um failover Namenode do Hadoop, considere usar um endereço IP virtual para o Namenode do cluster do Hadoop. Se você não fizer isso, execute um comando ALTER EXTERNAL DATA SOURCE para apontar para o novo local.

CREDENTIAL = credential_name

Especifica uma credencial no escopo do banco de dados para a autenticação na fonte de dados externa.

Observações e orientações adicionais ao criar uma credencial:

  • Para carregar dados do Armazenamento do Azure no Azure Synapse, use uma Chave de Armazenamento do Azure.
  • CREDENTIAL será necessário apenas se os dados tiverem sido protegidos. CREDENTIAL não é necessário para conjuntos de dados que permitem acesso anônimo.

TYPE = [ HADOOP ]

Especifica o tipo de fonte de dados externa que está sendo configurada. Esse parâmetro não é sempre necessário.

  • Use HADOOP quando a fonte de dados externa for Cloudera CDH, Hortonworks HDP ou Armazenamento do Azure.

Para obter um exemplo de como usar TYPE = HADOOP para carregar dados do Armazenamento do Azure, confira Criar uma fonte de dados externa para referenciar o Hadoop.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Configure esse valor opcional ao se conectar à Cloudera CDH, ao Hortonworks HDP ou a uma conta de Armazenamento do Microsoft Azure.

Quando o RESOURCE_MANAGER_LOCATION for definido, o otimizador de consulta tomará uma decisão baseada em custo para melhorar o desempenho. Um trabalho MapReduce pode ser usado para aplicar a computação para o Hadoop. Especificar o RESOURCE_MANAGER_LOCATION pode reduzir significativamente o volume de dados transferidos entre o Hadoop e o SQL, o que pode levar a um desempenho de consultas aprimorado.

Se o Resource Manager não tiver sido especificado, o envio de computação por push para o Hadoop estará desabilitado para consultas do PolyBase.

Se a porta não for especificada, o valor padrão será escolhido usando a definição atual da configuração 'conectividade do Hadoop'.

Conectividade do Hadoop Porta do Gerenciador de Recursos padrão
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050

Para ver uma lista completa de versões do Hadoop compatíveis, veja Configuração de conectividade do PolyBase (Transact-SQL).

Importante

O valor de RESOURCE_MANAGER_LOCATION não é validado quando você cria a fonte de dados externa. Inserir um valor incorreto pode causar falha de consulta em tempo de execução sempre que for feita uma tentativa de aplicação, uma vez que o valor fornecido não poderá ser resolvido.

Criar fonte de dados externa para referenciar o Hadoop com aplicação habilitada apresenta um exemplo concreto e diretrizes adicionais.

Permissões

Requer permissão CONTROL no banco de dados no Analytics Platform System (PDW).

Observação

Nas versões anteriores do PDW, a criação de fonte de dados externa exigia as permissões ALTER ANY EXTERNAL DATA SOURCE.

Bloqueio

Usa um bloqueio compartilhado no objeto EXTERNAL DATA SOURCE.

Segurança

O PolyBase dá suporte para autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial no escopo do banco de dados para criar a conta proxy.

No momento, não há suporte para um token SAS com o tipo HADOOP. Só há suporte para o tipo = BLOB_STORAGE quando uma chave de acesso da conta de armazenamento é usada. Tentar criar uma fonte de dados externa com o tipo HADOOP e uma credencial SAS falha com o seguinte erro:

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

Exemplos:

a. Criar uma fonte de dados externa para referenciar o Hadoop

Para criar uma fonte de dados externa para referenciar o Hortonworks HDP ou o Cloudera CDH, especifique o nome do computador ou o endereço IP do Namenode do Hadoop e a porta.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    TYPE = HADOOP
  ) ;

B. Criar uma fonte de dados externa para referenciar o Hadoop com aplicação habilitada

Especifique a opção RESOURCE_MANAGER_LOCATION para habilitar a computação de aplicação para Hadoop em consultas do PolyBase. Uma vez habilitado, o PolyBase toma uma decisão baseada em custo para determinar se a computação de consulta deve ser enviada por push para o 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. Criar uma fonte de dados externa para referenciar o Hadoop protegido pelo Kerberos

Para verificar se o cluster do Hadoop está protegido pelo Kerberos, verifique o valor da propriedade hadoop.security.authentication no core-site.xml do Hadoop. Para referenciar um cluster do Hadoop protegido pelo Kerberos, você precisa especificar uma credencial no escopo do banco de dados contendo o nome de usuário e a senha do Kerberos. A chave mestra do banco de dados é usada para criptografar o segredo da credencial no escopo do banco de dados.

-- 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. Criar fonte de dados externa para acessar dados no Armazenamento do Azure usando a interface wasb://

Neste exemplo, a fonte de dados externa é uma conta de Armazenamento do Azure V2 chamada logs. O contêiner de armazenamento é chamado daily. A fonte de dados externa do Armazenamento do Azure destina-se somente a transferência de dados. Não dá suporte a aplicação de predicado. Não há suporte para namespaces hierárquicos ao acessar dados por meio da interface wasb://. Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).

Este exemplo mostra como criar a credencial no escopo do banco de dados para autenticação no Armazenamento do Azure. Especifique a chave de conta de Armazenamento do Azure no segredo da credencial do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade da credencial no escopo do banco de dados, pois ela não será usada durante a autenticação no Armazenamento do 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
  ) ;

Confira também

* Instância Gerenciada de SQL *  

Visão geral: Instância Gerenciada do Azure SQL

Aplica-se a:YesInstância Gerenciada de SQL do Azure

Cria uma Instância Gerenciada de SQL do Azure de fonte de dados externa.

Observação

Algumas funcionalidades do recurso PolyBase estão em versão prévia para instâncias gerenciadas de SQL do Azure, incluindo a capacidade de consultar dados externos (arquivos Parquet) no ADLS (Azure Data Lake Storage) Gen2. Para mais informações, confira Virtualização de dados com a Instância Gerenciada de SQL do Azure (versão prévia).

Na Instância Gerenciada de SQL do Azure, as fontes de dados externas são usadas para estabelecer conectividade e suporte:

  • Operações de carregamento em massa usando BULK INSERT ou OPENROWSET

Sintaxe

Para obter mais informações sobre as convenções de sintaxe, consulte Convenções de sintaxe Transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { BLOB_STORAGE } ]
  )
[ ; ]

Argumentos

data_source_name

Especifica o nome da fonte de dados definido pelo usuário. O nome deve ser exclusivo dentro do banco de dados no Banco de Dados SQL.

LOCALIZAÇÃO = '<prefix>://<path[:port]>'

Fornece o protocolo de conectividade e o caminho para a fonte de dados externa.

Fonte de dados externa Prefixo de local Caminho de local Disponibilidade
Operações em Massa https <storage_account>.blob.core.windows.net/<container>

O Mecanismo de Banco de Dados não verifica a existência da fonte de dados externa quando o objeto é criado. Para validar, crie uma tabela externa usando a fonte de dados externa.

CREDENTIAL = credential_name

Especifica uma credencial no escopo do banco de dados para a autenticação na fonte de dados externa.

Observações e orientações adicionais ao criar uma credencial:

  • Para carregar dados do Armazenamento do Azure na Instância Gerenciada de SQL do Azure, use um token SAS (Assinatura de Acesso Compartilhado).
  • CREDENTIAL será necessário apenas se os dados tiverem sido protegidos. CREDENTIAL não é necessário para conjuntos de dados que permitem acesso anônimo.
  • Quando o TYPE = BLOB_STORAGE, a credencial precisa ser criada usando SHARED ACCESS SIGNATURE como a identidade. Além disso, o token SAS deve ser configurado da seguinte maneira:
    • Excluir o ? à esquerda quando configurado como o segredo
    • Ter pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r)
    • Use um período de término válido (todas as datas estão no horário UTC).
    • TYPE = BLOB_STORAGE só é permitido para operações em massa; não é possível criar tabelas externas para uma fonte de dados externa com TYPE = BLOB_STORAGE.
  • Observe que, ao se conectar ao Armazenamento do Azure por meio do conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma SAS (assinatura de acesso compartilhado).

Para obter um exemplo de como usar um CREDENTIAL com SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, confira Criar uma fonte de dados externa para executar operações em massa e recuperar dados do Armazenamento do Azure na MI de SQL

Para criar uma credencial no escopo do banco de dados, veja CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ BLOB_STORAGE ]

Especifica o tipo de fonte de dados externa que está sendo configurada. Esse parâmetro não é sempre necessário.

Permissões

Requer a permissão CONTROL no banco de dados na Instância Gerenciada de SQL do Azure.

Bloqueio

Usa um bloqueio compartilhado no objeto EXTERNAL DATA SOURCE.

Exemplos: Operações em Massa

Importante

Não adicione parâmetros de assinatura de acesso compartilhado, nome de arquivo ou / à direita no fim da URL LOCATION ao configurar uma fonte de dados externa para operações em massa.

a. Criar uma fonte de dados externa para operações em massa recuperando dados do Armazenamento do Azure

Use a seguinte fonte de dados para operações em massa com BULK INSERT ou OPENROWSET. A credencial deve ser definida como SHARED ACCESS SIGNATURE como a identidade, não deve ter o ? à esquerda no token SAS, deve ter pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r), e o período de término deve ser válido (todas as datas estão no horário UTC). Para mais informações sobre assinaturas de acesso compartilhado, consulte Usando SAS (Assinatura de Acesso Compartilhado).

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

Para ver esse exemplo em uso, confira BULK INSERT.

Confira também