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.
* SQL Server *
Visão geral: SQL Server
Aplica-se a:SQL 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
ouOPENROWSET
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 doNamenode
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çãofs.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 oNamenode
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:SQL 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
ouOPENROWSET
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 doNamenode
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çãofs.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 deODBC
. 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 oNamenode
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 usandoSHARED 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 comTYPE
=BLOB_STORAGE
.
- Excluir o
- 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 oSECRET
.
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). UseHADOOP
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
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Usando SAS (Assinatura de Acesso Compartilhado)
- Configuração de conectividade do PolyBase
Visão geral: SQL Server
Aplica-se a:SQL 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
ouOPENROWSET
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 doNamenode
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çãofs.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 deODBC
. - O uso de
wasbs
ouabfss
é 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
ouabfss
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 oNamenode
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
esqldatapool
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, usehdfs
. Para saber mais sobre como usar osqlhdfs
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 usandoSHARED 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 comTYPE
=BLOB_STORAGE
.
- Excluir o
- 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 oSECRET
.
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). UseHADOOP
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
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Usando SAS (Assinatura de Acesso Compartilhado)
- Configuração de conectividade do PolyBase
* Banco de Dados SQL *
Visão geral: Banco de Dados SQL do Azure
Aplica-se a:Banco 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
ouOPENROWSET
- 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 argumentoDATABASE_NAME
fornece o banco de dados usado para hospedar o mapa de fragmentos eSHARD_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 argumentoDATABASE_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 usandoSHARED 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 comTYPE
=BLOB_STORAGE
.
- Excluir o
- 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 oSECRET
.
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 CONTROL
no 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:Azure 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á usarabfss
ao selecionar uma conexão TLS/SSL segura. Observe queabfss
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
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (Azure Synapse Analytics)
- CREATE TABLE AS SELECT (Azure Synapse Analytics)
- sys.external_data_sources (Transact-SQL)
- Usando SAS (Assinatura de Acesso Compartilhado)
* Analytics
Platform System (PDW) *
Visão geral: Sistema de plataforma de análise
Aplica-se ao:Analytics 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 doNamenode
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çãofs.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 oNamenode
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:Instâ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
ouOPENROWSET
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 usandoSHARED 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 comTYPE
=BLOB_STORAGE
.
- Excluir o
- 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.
- Use
BLOB_STORAGE
ao executar operações em massa com BULK INSERT ou OPENROWSET.
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.