Partilhar via


CRIAR FONTE DE DADOS EXTERNA (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL analytics endpoint em Microsoft FabricWarehouse em Microsoft Fabric SQLdatabase in Microsoft Fabric

Cria uma fonte de dados externa para consultar dados externos, usada para PolyBase e recursos de virtualização de dados.

Este artigo fornece a sintaxe, argumentos, observações, permissões e exemplos para qualquer produto SQL escolhido.

Selecione um produto

Na linha seguinte, selecione o nome do produto em que está interessado e apenas as informações desse produto são apresentadas.

* Servidor SQL *  

Plataforma de análise
Sistema (PDW)

 

Visão geral: SQL Server 2016

Aplica-se a: SQL Server 2016 (13.x)

Cria uma fonte de dados externa para consultas PolyBase. As fontes de dados externas são usadas para estabelecer conectividade e dar suporte a estes casos de uso primários:

  • Virtualização de dados e carregamento de dados usando PolyBase no SQL Server
  • Operações de carga a granel utilizando BULK INSERT ou OPENROWSET

Observação

Essa sintaxe varia em diferentes versões do SQL Server. Use a lista suspensa do seletor de versão para escolher a versão apropriada.
Para exibir os recursos do SQL Server 2019 (15.x), visite CREATE EXTERNAL DATA SOURCE. Para exibir os recursos do SQL Server 2022 (16.x), visite CREATE EXTERNAL DATA SOURCE.

Transact-SQL convenções de sintaxe

Sintaxe do SQL Server 2016

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 definido pelo usuário para a fonte de dados. O nome deve ser exclusivo dentro do banco de dados no SQL Server.

LOCATION = '<prefix>://<path[:p ort]>'

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 localização Localizações suportadas por produto/serviço Autenticação
Cloudera CDH ou Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) para SQL Server 2019 (15.x) Autenticação anónima ou básica
Conta de armazenamento do Azure(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Começando com o SQL Server 2016 (13.x)
Namespace hierárquico não suportado
Chave da conta do Armazenamento do Azure

Caminho de localização:

  • <Namenode> = o nome da máquina, o URI do serviço de nome ou o endereço IP do Namenode cluster Hadoop. O PolyBase deve resolver todos os nomes DNS usados pelo cluster Hadoop.
  • port = A porta na qual a fonte de dados externa está escutando. No Hadoop, a porta pode ser encontrada usando o fs.defaultFS parâmetro configuration. O padrão é 8020.
  • <container> = o recipiente da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, os dados não podem ser gravados de volta no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.
  • <server_name> = o nome do anfitrião.
  • <instance_name> = o nome da instância nomeada do SQL Server. Usado se você tiver o SQL Server Browser Service em execução na instância de destino.

Notas adicionais e orientações 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 uma semântica de consulta consistente.
  • wasbs é opcional, mas recomendado no SQL Server 2016 (13.x) para acessar Contas de Armazenamento do Azure, pois os dados serão enviados usando uma conexão TLS/SSL segura.
  • Para garantir consultas PolyBase bem-sucedidas durante um failover do Hadoop Namenode , considere o uso de um endereço IP virtual para o Namenode cluster Hadoop. Caso contrário, execute ALTER EXTERNAL DATA SOURCE para apontar para o novo local.

CREDENCIAL = credential_name

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

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

Para criar uma credencial com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL.

TIPO = * [ 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. Suporta conexões com Cloudera CDH, Hortonworks HDP ou uma conta de Armazenamento do Azure. O comportamento desse parâmetro é diferente em versões posteriores do SQL Server.

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

RESOURCE_MANAGER_LOCATION = *'ResourceManager_URI[:p ort]'

Configure esse valor opcional ao se conectar apenas ao Cloudera CDH, Hortonworks HDP ou a uma conta de Armazenamento do Azure. Para obter uma lista completa das versões do Hadoop suportadas, consulte Configuração de conectividade do PolyBase.

Quando o é definido, o otimizador de consulta toma uma decisão baseada em custos para melhorar o RESOURCE_MANAGER_LOCATION desempenho. Um trabalho MapReduce pode ser usado para empurrar 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 melhor desempenho da consulta.

Se o Gerenciador de Recursos não for especificado, o envio de computação para o Hadoop será desabilitado para consultas PolyBase. Criar fonte de dados externa para fazer referência ao Hadoop com push-down habilitado fornece um exemplo concreto e orientações adicionais.

O valor RESOURCE_MANAGER_LOCATION não é validado quando você cria a fonte de dados externa. Inserir um valor incorreto pode causar falha de consulta no momento da execução sempre que o push-down é tentado, pois o valor fornecido não seria capaz de resolver.

Para que o PolyBase funcione corretamente com uma fonte de dados externa do Hadoop, as portas dos seguintes componentes de cluster do Hadoop devem estar abertas:

  • Portas HDFS
    • Nomenode
    • Datanode
  • Gestor de Recursos
    • Submissão de trabalho
  • Histórico do trabalho

Se a porta não for especificada, o valor padrão será escolhido usando a configuração atual para a configuração de 'conectividade hadoop'.

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

A tabela a seguir mostra as portas padrão para esses componentes. Há dependência de versão do Hadoop, bem como a possibilidade de configuração personalizada que não usa a atribuição de porta padrão.

Componente de cluster Hadoop Porta padrão
NomeNode 8020
DataNode (Transferência de dados, porta IPC sem privilégio) 50010
DataNode (transferência de dados, porta IPC de privilégio) 1019
Submissão de trabalho do Resource Manager (Hortonworks 1.3) 50300
Envio de trabalho do Resource Manager (Cloudera 4.3) 8021
Submissão de trabalho do Resource Manager (Hortonworks 2.0 no Windows, Cloudera 5.x no Linux) 8032
Submissão de trabalho do Resource Manager (Hortonworks 2.x, 3.0 no Linux, Hortonworks 2.1-3 no Windows) 8050
Histórico de trabalhos do Resource Manager 10020

Permissões

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

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Segurança

O PolyBase suporta autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial com escopo de banco de dados para criar a conta proxy.

Exemplos

Importante

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

Um. Criar fonte de dados externa para fazer referência ao Hadoop

Para criar uma fonte de dados externa para fazer referência ao cluster Hadoop do Hortonworks HDP ou Cloudera CDH, especifique o nome da máquina ou o endereço IP do Hadoop Namenode e da porta.

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

B. Criar fonte de dados externa para fazer referência ao Hadoop com push-down habilitado

Especifique a opção para habilitar a RESOURCE_MANAGER_LOCATION computação push-down no Hadoop para consultas PolyBase. Uma vez habilitado, o PolyBase toma uma decisão baseada em custos para determinar se a computação da consulta deve ser enviada por push para o Hadoop.

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

C. Criar fonte de dados externa para fazer referência ao Hadoop protegido por Kerberos

Para verificar se o cluster Hadoop está protegido por Kerberos, verifique o valor da hadoop.security.authentication propriedade no Hadoop core-site.xml. Para fazer referência a um cluster Hadoop protegido por Kerberos, você deve especificar uma credencial com escopo de banco de dados que contenha seu nome de usuário e senha Kerberos. A chave mestra do banco de dados é usada para criptografar o segredo de credenciais com 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 (
    TYPE = HADOOP,
    LOCATION = 'hdfs://10.10.10.10:8050',
    CREDENTIAL = HadoopUser1,
    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 contentor de armazenamento chama-se daily. A fonte de dados externa do Armazenamento do Azure é apenas para transferência de dados. Não suporta push-down de predicados. Namespaces hierárquicos não são suportados ao acessar dados por meio da wasb:// interface.

Este exemplo mostra como criar a credencial com escopo de banco de dados para autenticação em uma conta de Armazenamento do Azure V2. Especifique a chave da conta de Armazenamento do Azure no segredo de credenciais do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade de credenciais com escopo de banco de dados, pois ela não é usada durante a autenticação no Armazenamento do Azure. Ao conectar-se ao Armazenamento do Azure via wasb ou wasbs, a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma assinatura de acesso compartilhado (SAS).

No SQL Server 2016 (13.x), 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 (
    TYPE = HADOOP,
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential
);

Visão geral: SQL Server 2017

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

Cria uma fonte de dados externa para consultas PolyBase. As fontes de dados externas são usadas para estabelecer conectividade e dar suporte a estes casos de uso primários:

  • Virtualização de dados e carregamento de dados usando PolyBase no SQL Server
  • Operações de carga a granel utilizando BULK INSERT ou OPENROWSET

Observação

Essa sintaxe varia em diferentes versões do SQL Server no Linux. Use a lista suspensa do seletor de versão para escolher a versão apropriada.
Para exibir os recursos do SQL Server 2019 (15.x), visite CREATE EXTERNAL DATA SOURCE. Para exibir os recursos do SQL Server 2022 (16.x), visite CREATE EXTERNAL DATA SOURCE.

Observação

Essa sintaxe varia em diferentes versões do SQL Server. Use a lista suspensa do seletor de versão para escolher a versão apropriada.
Para exibir os recursos do SQL Server 2019 (15.x), visite CREATE EXTERNAL DATA SOURCE. Para exibir os recursos do SQL Server 2022 (16.x), visite CREATE EXTERNAL DATA SOURCE.

Transact-SQL convenções de sintaxe

Sintaxe do SQL Server 2017

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 definido pelo usuário para a fonte de dados. O nome deve ser exclusivo dentro do banco de dados no SQL Server.

LOCATION = '<prefix>://<path[:p ort]>'

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 localização Localizações suportadas por produto/serviço Autenticação
Cloudera CDH ou Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) para SQL Server 2019 (15.x) apenas Autenticação anónima ou básica
Conta de armazenamento do Azure(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Começando com o SQL Server 2016 (13.x)
Namespace hierárquico não suportado
Chave da conta do Armazenamento do Azure
Operações a granel https <storage_account>.blob.core.windows.net/<container> Começando com o SQL Server 2017 (14.x) Assinatura de acesso compartilhado (SAS)

Caminho de localização:

  • <Namenode = o nome da máquina, o URI do serviço de> nome ou o Namenode endereço IP do cluster Hadoop. O PolyBase deve resolver todos os nomes DNS usados pelo cluster Hadoop.
  • port = A porta na qual a fonte de dados externa está escutando. No Hadoop, a porta pode ser encontrada usando o fs.defaultFS parâmetro configuration. O padrão é 8020.
  • <container> = o recipiente da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, os dados não podem ser gravados de volta no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.
  • <server_name> = o nome do anfitrião.
  • <instance_name> = o nome da instância nomeada do SQL Server. Usado se você tiver o SQL Server Browser Service em execução na instância de destino.

Notas adicionais e orientações 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 uma semântica de consulta consistente.
  • Especifique o Driver={<Name of Driver>} ao se conectar via ODBC.
  • wasbs é opcional, mas recomendado no SQL Server 2017 (14.x) para acessar Contas de Armazenamento do Azure, pois os dados serão enviados usando uma conexão TLS/SSL segura.
  • Para garantir consultas PolyBase bem-sucedidas durante um failover do Hadoop Namenode , considere o uso de um endereço IP virtual para o Namenode cluster Hadoop. Caso contrário, execute ALTER EXTERNAL DATA SOURCE para apontar para o novo local.

CREDENCIAL = credential_name

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

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

  • CREDENTIAL só é necessária 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 deve ser criada usando SHARED ACCESS SIGNATURE como a identidade.
  • TYPE = BLOB_STORAGE só é permitida para operações a granel; Não é possível criar tabelas externas para uma fonte de dados externa com TYPE = BLOB_STORAGEo .
  • Ao conectar-se ao Armazenamento do Azure via wasb ou wasbs, a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma assinatura de acesso compartilhado (SAS).
  • Quando TYPE = HADOOP a credencial deve ser criada usando a chave da conta de armazenamento como o SECRET.

Há várias maneiras de criar uma assinatura de acesso compartilhado:

  • Você pode criar um token SAS navegando até o portal do Azure -><Your_Storage_Account> -> Assinatura de acesso compartilhado -> Configurar permissões -> Gerar SAS e cadeia de conexão. Para obter mais informações, consulte Gerar uma assinatura de acesso compartilhado.

  • Você pode criar e configurar uma SAS com o Gerenciador de Armazenamento do Azure.

  • Você pode criar um token SAS programaticamente por meio do PowerShell, CLI do Azure, .NET e API REST. Para obter mais informações, consulte Conceder acesso limitado aos recursos do Armazenamento do Azure usando assinaturas de acesso compartilhado (SAS).

  • O token SAS deve ser configurado da seguinte forma:

    • Quando um token SAS é gerado, ele inclui um ponto de interrogação ('?') no início do token. Exclua a entrelinha ? quando configurada como SECRET.
    • Use um período de expiração válido (todas as datas estão no horário UTC).
  • Conceda pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r). Várias assinaturas de acesso compartilhado podem ser criadas para diferentes casos de uso. As permissões devem ser concedidas da seguinte forma:

    Ação Permissão
    Ler dados de um ficheiro Leitura
    Ler dados de vários arquivos e subpastas Ler e Listar

Para obter um exemplo de como usar um CREDENTIAL com SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, consulte 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 com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL.

TIPO = * [ 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, Hortonworks HDP, uma conta de Armazenamento do Azure ou um Azure Data Lake Storage Gen2.

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

Observação

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

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

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Configure esse valor opcional ao se conectar apenas ao Cloudera CDH, Hortonworks HDP ou a uma conta de Armazenamento do Azure. Para obter uma lista completa das versões do Hadoop suportadas, consulte Configuração de conectividade do PolyBase.

Quando o é definido, o otimizador de consulta tomará uma decisão baseada em custos para melhorar o RESOURCE_MANAGER_LOCATION desempenho. Um trabalho MapReduce pode ser usado para empurrar 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 melhor desempenho da consulta.

Se o Gerenciador de Recursos não for especificado, o envio de computação para o Hadoop será desabilitado para consultas PolyBase. Criar fonte de dados externa para fazer referência ao Hadoop com push-down habilitado fornece um exemplo concreto e orientações adicionais.

O RESOURCE_MANAGER_LOCATION valor não é validado quando você cria a fonte de dados externa. Inserir um valor incorreto pode causar falha de consulta no momento da execução sempre que o push-down é tentado, pois o valor fornecido não seria capaz de resolver.

Para que o PolyBase funcione corretamente com uma fonte de dados externa do Hadoop, as portas dos seguintes componentes de cluster do Hadoop devem estar abertas:

  • Portas HDFS
    • Nomenode
    • Datanode
  • Gestor de Recursos
    • Submissão de trabalho
  • Histórico do trabalho

Se a porta não for especificada, o valor padrão será escolhido usando a configuração atual para a configuração de 'conectividade hadoop'.

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

A tabela a seguir mostra as portas padrão para esses componentes. Há dependência de versão do Hadoop, bem como a possibilidade de configuração personalizada que não usa a atribuição de porta padrão.

Componente de cluster Hadoop Porta padrão
NomeNode 8020
DataNode (Transferência de dados, porta IPC sem privilégio) 50010
DataNode (transferência de dados, porta IPC de privilégio) 1019
Submissão de trabalho do Resource Manager (Hortonworks 1.3) 50300
Envio de trabalho do Resource Manager (Cloudera 4.3) 8021
Submissão de trabalho do Resource Manager (Hortonworks 2.0 no Windows, Cloudera 5.x no Linux) 8032
Submissão de trabalho do Resource Manager (Hortonworks 2.x, 3.0 no Linux, Hortonworks 2.1-3 no Windows) 8050
Histórico de trabalhos do Resource Manager 10020

Permissões

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

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Segurança

O PolyBase suporta autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial com escopo de banco de dados para criar a conta proxy.

Não há suporte para um token SAS com tipo HADOOP . Ele só é suportado com type = BLOB_STORAGE quando uma chave de acesso da conta de armazenamento é usada. A tentativa de criar uma fonte de dados externa com 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 aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'

Exemplos

Importante

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

Um. Criar fonte de dados externa para fazer referência ao Hadoop

Para criar uma fonte de dados externa para fazer referência ao cluster Hadoop do Hortonworks HDP ou Cloudera CDH, especifique o nome da máquina ou o endereço IP do Hadoop Namenode e da porta.

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

B. Criar fonte de dados externa para fazer referência ao Hadoop com push-down habilitado

Especifique a opção para habilitar a RESOURCE_MANAGER_LOCATION computação push-down no Hadoop para consultas PolyBase. Uma vez habilitado, o PolyBase toma uma decisão baseada em custos para determinar se a computação da consulta deve ser enviada por push para o Hadoop.

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

C. Criar fonte de dados externa para fazer referência ao Hadoop protegido por Kerberos

Para verificar se o cluster Hadoop está protegido por Kerberos, verifique o valor da hadoop.security.authentication propriedade no Hadoop core-site.xml. Para fazer referência a um cluster Hadoop protegido por Kerberos, você deve especificar uma credencial com escopo de banco de dados que contenha seu nome de usuário e senha Kerberos. A chave mestra do banco de dados é usada para criptografar o segredo de credenciais com 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 (
    TYPE = HADOOP,
    LOCATION = 'hdfs://10.10.10.10:8050',
    CREDENTIAL = HadoopUser1,
    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 contentor de armazenamento chama-se daily. A fonte de dados externa do Armazenamento do Azure é apenas para transferência de dados. Não suporta push-down de predicados. Namespaces hierárquicos não são suportados ao acessar dados por meio da wasb:// interface. Ao conectar-se ao Armazenamento do Azure via wasb ou wasbs, a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma assinatura de acesso compartilhado (SAS).

Este exemplo mostra como criar a credencial com escopo de banco de dados para autenticação em uma conta de Armazenamento do Azure V2. Especifique a chave da conta de Armazenamento do Azure no segredo de credenciais do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade de credenciais com escopo de banco de dados, pois ela não é 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 (
    TYPE = HADOOP,
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential
);

Exemplos: operações em massa

Importante

Não adicione parâmetros de assinatura à direita /, nome de arquivo ou acesso compartilhado no final da URL ao configurar uma fonte de LOCATION 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 versões posteriores.

Use a seguinte fonte de dados para operações em massa usando BULK INSERT ou OPENROWSET BULK. A credencial deve ser definida SHARED ACCESS SIGNATURE como a identidade, não deve ter a entrelinha ? 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 expiração deve ser válido (todas as datas estão no horário UTC). Para obter mais informações sobre assinaturas de acesso compartilhado, consulte Usando assinaturas de acesso compartilhado (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = -- Remove ? from the beginning of the SAS token'<azure_storage_account_key>';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = AccessAzureInvoices
);

Para ver este exemplo em uso, consulte BULK INSERT.

Visão geral: SQL Server 2019

Aplica-se ao: SQL Server 2019 (15.x)

Cria uma fonte de dados externa para consultas PolyBase. As fontes de dados externas são usadas para estabelecer conectividade e dar suporte a estes casos de uso primários:

  • Virtualização de dados e carregamento de dados usando PolyBase no SQL Server
  • Operações de carga a granel utilizando BULK INSERT ou OPENROWSET

Observação

Essa sintaxe varia em diferentes versões do SQL Server. Use a lista suspensa do seletor de versão para escolher a versão apropriada.
Para exibir os recursos do SQL Server 2022 (16.x), visite CREATE EXTERNAL DATA SOURCE.

Observação

Essa sintaxe varia em diferentes versões do SQL Server. Use a lista suspensa do seletor de versão para escolher a versão apropriada.
Para exibir os recursos do SQL Server 2022 (16.x), visite CREATE EXTERNAL DATA SOURCE.

Transact-SQL convenções de sintaxe

Sintaxe do SQL Server 2019

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 definido pelo usuário para a fonte de dados. O nome deve ser exclusivo dentro do banco de dados no SQL Server.

LOCATION = '<prefix>://<path[:p ort]>'

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 localização Localizações suportadas por produto/serviço Autenticação
Cloudera CDH ou Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) para SQL Server 2019 (15.x) Autenticação anónima ou básica
Conta de armazenamento do Azure(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Começando com o SQL Server 2016 (13.x)
Namespace hierárquico não suportado
Chave da conta do Armazenamento do Azure
SQL Server sqlserver <server_name>[\<instance_name>][:port] Começando com o SQL Server 2019 (15.x) Somente autenticação SQL
Oráculo oracle <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
Teradata teradata <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
MongoDB ou API do Cosmos DB para MongoDB mongodb <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
ODBC genérico odbc <server_name>[:port] A partir do SQL Server 2019 (15.x) - apenas Windows Apenas autenticação básica
Operações a granel https <storage_account>.blob.core.windows.net/<container> Começando com o SQL Server 2017 (14.x) Assinatura de acesso compartilhado (SAS)
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+. Chave de acesso de armazenamento
Pool de dados de Clusters de Big Data do SQL Server sqldatapool sqldatapool://controller-svc/default Com suporte apenas em clusters de Big Data do SQL Server 2019 Apenas autenticação básica
Pool de armazenamento de clusters de Big Data do SQL Server sqlhdfs sqlhdfs://controller-svc/default Com suporte apenas em clusters de Big Data do SQL Server 2019 Apenas autenticação básica

Caminho de localização:

  • <Namenode> = o nome da máquina, o URI do serviço de nome ou o endereço IP do Namenode cluster Hadoop. O PolyBase deve resolver todos os nomes DNS usados pelo cluster Hadoop.
  • port = A porta na qual a fonte de dados externa está escutando. No Hadoop, a porta pode ser encontrada usando o fs.defaultFS parâmetro configuration. O padrão é 8020.
  • <container> = o recipiente da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, os dados não podem ser gravados de volta no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.
  • <server_name> = o nome do anfitrião.
  • <instance_name> = o nome da instância nomeada do SQL Server. Usado se você tiver o SQL Server Browser Service em execução na instância de destino.

Notas adicionais e orientações 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 uma semântica de consulta consistente.
  • Você pode usar o conector para conectar o sqlserver SQL Server 2019 (15.x) a outro SQL Server ou ao Banco de Dados SQL do Azure.
  • Especifique o Driver={<Name of Driver>} ao se conectar via ODBC.
  • Usar wasbs ou abfss é opcional, mas recomendado no SQL Server 2019 (15.x) para acessar Contas de Armazenamento do Azure, pois os dados serão enviados usando uma conexão TLS/SSL segura.
  • As abfs APIs ou abfss são suportadas ao acessar Contas de Armazenamento do Azure a partir do SQL Server 2019 (15.x) CU11. Para obter mais informações, consulte o driver do sistema de arquivos de Blob do Azure (ABFS).
  • A opção Namespace Hierárquico para Contas de Armazenamento do Azure (V2) usando abfs[s] é suportada por meio do Azure Data Lake Storage Gen2 a partir do SQL Server 2019 (15.x) CU11+. Caso contrário, a opção Namespace hierárquico não é suportada e essa opção deve permanecer desabilitada.
  • Para garantir consultas PolyBase bem-sucedidas durante um failover do Hadoop Namenode , considere o uso de um endereço IP virtual para o Namenode cluster Hadoop. Caso contrário, execute ALTER EXTERNAL DATA SOURCE para apontar para o novo local.
  • Os sqlhdfs tipos e sqldatapool são suportados para conexão entre a instância mestra e o pool de armazenamento de um cluster de big data. Para Cloudera CDH ou Hortonworks HDP, use hdfs. Para obter mais informações sobre como usar sqlhdfs para consultar pools de armazenamento de clusters de Big Data do SQL Server, consulte Consultar HDFS no cluster de Big Data do SQL Server 2019.
  • O suporte ao SQL Server para fontes de dados externas HDFS Cloudera (CDP) e Hortonworks (HDP) foi retirado e não está incluído no SQL Server 2022 (16.x) e versões posteriores. Para obter mais informações, consulte opções de Big Data na plataforma Microsoft SQL Server.

CONNECTION_OPTIONS = key_value_pair

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

Aplica-se ODBC a conexões genéricasODBC, bem como conectores 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 para 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 um mínimo, mas há outras opções, como APP='<your_application_name>' ou ApplicationIntent= ReadOnly|ReadWrite que também são úteis para definir e podem ajudar na solução de problemas.

Os possíveis pares de valores de chave são específicos do provedor para o fornecedor externo da fonte de dados. Para obter mais informações para cada provedor, consulte CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.

A Atualização Cumulativa 19 do SQL Server 2019 (15.x) e versões posteriores introduz palavras-chave adicionais para dar suporte a arquivos Oracle TNS:

  • A palavra-chave TNSNamesFile especifica o caminho do arquivo para o tnsnames.ora arquivo localizado no servidor Oracle.
  • A palavra-chave ServerName especifica o alias usado dentro do tnsnames.ora que será usado para substituir o nome do host e a porta.

Pushdown = LIGADO | DESLIGADO

Especificado apenas para SQL Server 2019 (15.x). Indica se a computação pode ser empurrada para a fonte de dados externa. Está ATIVADO por padrão.

PUSHDOWN tem suporte 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.

A habilitação ou desativação do push-down no nível da consulta é obtida por meio da dica EXTERNALPUSHDOWN.

CREDENCIAL = credential_name

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

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

  • CREDENTIAL só é necessária 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 deve ser criada usando SHARED ACCESS SIGNATURE como a identidade.
  • TYPE = BLOB_STORAGE só é permitida para operações a granel; Não é possível criar tabelas externas para uma fonte de dados externa com TYPE = BLOB_STORAGEo .

Há várias maneiras de criar uma assinatura de acesso compartilhado:

  • Você pode criar um token SAS navegando até o portal do Azure -><Your_Storage_Account> -> Assinatura de acesso compartilhado -> Configurar permissões -> Gerar SAS e cadeia de conexão. Para obter mais informações, consulte Gerar uma assinatura de acesso compartilhado.

  • Você pode criar e configurar uma SAS com o Gerenciador de Armazenamento do Azure.

  • Você pode criar um token SAS programaticamente por meio do PowerShell, CLI do Azure, .NET e API REST. Para obter mais informações, consulte Conceder acesso limitado aos recursos do Armazenamento do Azure usando assinaturas de acesso compartilhado (SAS).

  • O token SAS deve ser configurado da seguinte forma:

    • Quando um token SAS é gerado, ele inclui um ponto de interrogação ('?') no início do token. Exclua a entrelinha ? quando configurada como SECRET.
    • Use um período de expiração válido (todas as datas estão no horário UTC).
  • Conceda pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r). Várias assinaturas de acesso compartilhado podem ser criadas para diferentes casos de uso. As permissões devem ser concedidas da seguinte forma:

    Ação Permissão
    Ler dados de um ficheiro Leitura
    Ler dados de vários arquivos e subpastas Ler e Listar

Para obter um exemplo de como usar um CREDENTIAL com SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, consulte 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 com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL.

TIPO = * [ 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, Hortonworks HDP, uma conta de Armazenamento do Azure ou um Azure Data Lake Storage Gen2.

  • No SQL Server 2019 (15.x), não especifique TYPE, a menos que se conecte ao Cloudera CDH, Hortonworks HDP, uma conta de Armazenamento do Azure.
  • Use HADOOP quando a fonte de dados externa for Cloudera CDH, Hortonworks HDP, uma conta de Armazenamento do 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 BULK com SQL Server 2017 (14.x). Use HADOOP quando pretender CRIAR TABELA EXTERNA no Armazenamento do Azure.
  • O suporte ao SQL Server para fontes de dados externas HDFS Cloudera (CDP) e Hortonworks (HDP) foi retirado e não está incluído no SQL Server 2022 (16.x) e versões posteriores. Para obter mais informações, consulte opções de Big Data na plataforma Microsoft SQL Server.

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

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

No SQL Server 2019 (15.x), não especifique RESOURCE_MANAGER_LOCATION a menos que se conecte ao Cloudera CDH, Hortonworks HDP, uma conta de Armazenamento do Azure.

Configure esse valor opcional ao se conectar apenas ao Cloudera CDH, Hortonworks HDP ou a uma conta de Armazenamento do Azure. Para obter uma lista completa das versões do Hadoop suportadas, consulte Configuração de conectividade do PolyBase.

Quando o é definido, o otimizador de consulta toma uma decisão baseada em custos para melhorar o RESOURCE_MANAGER_LOCATION desempenho. Um trabalho MapReduce pode ser usado para empurrar 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 melhor desempenho da consulta.

Se o Gerenciador de Recursos não for especificado, o envio de computação para o Hadoop será desabilitado para consultas PolyBase. Criar fonte de dados externa para fazer referência ao Hadoop com push-down habilitado fornece um exemplo concreto e orientações adicionais.

O valor RESOURCE_MANAGER_LOCATION não é validado quando você cria a fonte de dados externa. Inserir um valor incorreto pode causar falha de consulta no momento da execução sempre que o push-down é tentado, pois o valor fornecido não seria capaz de resolver.

Para que o PolyBase funcione corretamente com uma fonte de dados externa do Hadoop, as portas dos seguintes componentes de cluster do Hadoop devem estar abertas:

  • Portas HDFS
    • Nomenode
    • Datanode
  • Gestor de Recursos
    • Submissão de trabalho
  • Histórico do trabalho

Se a porta não for especificada, o valor padrão será escolhido usando a configuração atual para a configuração de 'conectividade hadoop'.

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

A tabela a seguir mostra as portas padrão para esses componentes. Há dependência de versão do Hadoop, bem como a possibilidade de configuração personalizada que não usa a atribuição de porta padrão.

Componente de cluster Hadoop Porta padrão
NomeNode 8020
DataNode (Transferência de dados, porta IPC sem privilégio) 50010
DataNode (transferência de dados, porta IPC de privilégio) 1019
Submissão de trabalho do Resource Manager (Hortonworks 1.3) 50300
Envio de trabalho do Resource Manager (Cloudera 4.3) 8021
Submissão de trabalho do Resource Manager (Hortonworks 2.0 no Windows, Cloudera 5.x no Linux) 8032
Submissão de trabalho do Resource Manager (Hortonworks 2.x, 3.0 no Linux, Hortonworks 2.1-3 no Windows) 8050
Histórico de trabalhos do Resource Manager 10020

Permissões

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

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Segurança

O PolyBase suporta autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial com escopo de banco de dados para criar a conta proxy.

Quando você se conecta ao armazenamento ou pool de dados no SQL Server 2019 Big Data Cluster, as credenciais do usuário são passadas para o sistema back-end. Crie logins no próprio pool de dados para habilitar a autenticação de passagem.

Não há suporte para um token SAS com tipo HADOOP . Ele só é suportado com type = BLOB_STORAGE quando uma chave de acesso da conta de armazenamento é usada. A tentativa de criar uma fonte de dados externa com 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 aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'

Exemplos

Importante

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

Um. Criar fonte de dados externa no SQL Server 2019 para fazer referência ao Oracle

Para criar uma fonte de dados externa que faça referência ao Oracle, verifique se você tem uma credencial com escopo de banco de dados. Opcionalmente, você também pode habilitar ou desabilitar a redução da 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',
    PUSHDOWN = ON,
    CREDENTIAL = OracleProxyAccount
);

Opcionalmente, a fonte de dados externa para Oracle pode usar autenticação de proxy para fornecer controle de acesso refinado. Um usuário 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]
);

Como alternativa, você pode usar a autenticação TNS.

A partir da Atualização Cumulativa 19 do SQL Server 2019 (15.x), CREATE EXTERNAL DATA SOURCE agora oferece suporte ao uso de arquivos TNS ao se conectar ao Oracle.

O CONNECTION_OPTIONS parâmetro foi expandido e agora usa TNSNamesFile e ServerName como variáveis para procurar o tnsnames.ora arquivo e estabelecer conexão com o servidor.

No exemplo abaixo, durante o tempo de execução, o SQL Server procurará o local do tnsnames.ora arquivo especificado por TNSNamesFile e procurará o host e a porta de rede especificados pelo ServerName.

CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
    LOCATION = N'oracle://XE',
    CREDENTIAL = [OracleCredentialTest],
    CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);

Para obter exemplos adicionais para outras fontes de dados, como o MongoDB, consulte Configurar o PolyBase para acessar dados externos no MongoDB.

B. Criar fonte de dados externa para fazer referência ao Hadoop

Para criar uma fonte de dados externa para fazer referência ao cluster Hadoop do Hortonworks HDP ou Cloudera CDH, especifique o nome da máquina ou o endereço IP do Hadoop Namenode e da porta.

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

C. Criar fonte de dados externa para fazer referência ao Hadoop com push-down habilitado

Especifique a opção para habilitar a RESOURCE_MANAGER_LOCATION computação push-down no Hadoop para consultas PolyBase. Uma vez habilitado, o PolyBase toma uma decisão baseada em custos para determinar se a computação da consulta deve ser enviada por push para o Hadoop.

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

D. Criar fonte de dados externa para fazer referência ao Hadoop protegido por Kerberos

Para verificar se o cluster Hadoop está protegido por Kerberos, verifique o valor da hadoop.security.authentication propriedade no Hadoop core-site.xml. Para fazer referência a um cluster Hadoop protegido por Kerberos, você deve especificar uma credencial com escopo de banco de dados que contenha seu nome de usuário e senha Kerberos. A chave mestra do banco de dados é usada para criptografar o segredo de credenciais com 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 (
    TYPE = HADOOP,
    LOCATION = 'hdfs://10.10.10.10:8050',
    CREDENTIAL = HadoopUser1,
    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 contentor de armazenamento chama-se daily. A fonte de dados externa do Armazenamento do Azure é apenas para transferência de dados. Não suporta push-down de predicados. Namespaces hierárquicos não são suportados ao acessar dados por meio da wasb:// interface. Ao conectar-se ao Armazenamento do Azure via wasb ou wasbs, a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma assinatura de acesso compartilhado (SAS).

Este exemplo mostra como criar a credencial com escopo de banco de dados para autenticação em uma conta de Armazenamento do Azure V2. Especifique a chave da conta de Armazenamento do Azure no segredo de credenciais do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade de credenciais com escopo de banco de dados, pois ela não é 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 (
    TYPE = HADOOP,
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential
);

F. Criar fonte de dados externa para fazer referência a uma instância nomeada do SQL Server por meio da conectividade PolyBase

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

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

No exemplo a seguir, WINSQL2019 é o nome do host e SQL2019 é o nome da instância. 'Server=%s\SQL2019' é o par de valores de chave.

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 padrão do SQL Server.

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

G. Criar fonte de dados externa para fazer referência a uma réplica secundária legível do grupo de disponibilidade Always On

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

Para criar uma fonte de dados externa que faça referência a uma réplica secundária legível do SQL Server, use CONNECTION_OPTIONS para especificar o ApplicationIntent=ReadOnlyarquivo . Além disso, você precisa definir o banco de dados de disponibilidade como Database={dbname} em CONNECTION_OPTIONS, ou definir o banco de dados de disponibilidade como o banco de dados padrão do logon usado para a credencial de escopo do banco de dados. Você precisa fazer isso em todas as réplicas de disponibilidade do grupo de disponibilidade.

Primeiro, crie a credencial com escopo do banco de dados, armazenando credenciais para um logon autenticado pelo SQL. O SQL ODBC Connector for PolyBase suporta apenas a autenticação básica. Antes de criar uma credencial com escopo de banco de dados, o banco de dados deve ter uma chave mestra para proteger a credencial. Para obter mais informações, consulte CREATE MASTER KEY. O exemplo a seguir cria uma credencial com escopo de banco de dados, fornece seu próprio login e senha.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
     SECRET = 'password';

Em seguida, crie a nova fonte de dados externa.

Se você incluiu Database=dbname no CONNECTION_OPTIONS banco de dados de disponibilidade ou definiu-o como o banco de dados padrão para o logon na credencial de escopo do banco de dados, você ainda deve fornecer o nome do banco de dados por meio de um nome de três partes na instrução CREATE EXTERNAL TABLE, dentro do parâmetro LOCATION. Para obter um exemplo, consulte CREATE EXTERNAL TABLE.

No exemplo a seguir, WINSQL2019AGL é o nome do ouvinte do grupo de disponibilidade e dbname é o nome do banco de dados a ser o destino da instrução CREATE EXTERNAL TABLE.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = SQLServerCredentials
);

Você pode demonstrar o comportamento de redirecionamento do grupo de disponibilidade especificando ApplicationIntent e criando uma tabela externa na visualização sys.serversdo sistema. No script de exemplo a seguir, duas fontes de dados externas são criadas e uma tabela externa é criada para cada uma. Use as exibições para testar qual servidor está respondendo à conexão. Resultados semelhantes também podem ser alcançados por meio do recurso de roteamento somente leitura. Para obter mais informações, consulte Configurar roteamento somente leitura para um grupo de disponibilidade Always On.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = [SQLServerCredentials]
);
GO

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
    CREDENTIAL = [SQLServerCredentials]
);
GO

Dentro do banco de dados no grupo de disponibilidade, crie uma exibição para retornar sys.servers e o nome da instância local, que ajuda a identificar qual réplica está respondendo à consulta. Para obter mais informações, consulte sys.servers.

CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO

Em seguida, crie uma tabela externa na instância de origem:

CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance

SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO

Exemplos: operações em massa

Importante

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

H. 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 SQL Server 2019 (15.x)

Use a seguinte fonte de dados para operações em massa usando BULK INSERT ou OPENROWSET BULK. A credencial deve ser definida SHARED ACCESS SIGNATURE como a identidade, não deve ter a entrelinha ? 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 expiração deve ser válido (todas as datas estão no horário UTC). Para obter mais informações sobre assinaturas de acesso compartilhado, consulte Usando assinaturas de acesso compartilhado (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = -- Remove ? from the beginning of the SAS token'<azure_shared_access_signature>';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = AccessAzureInvoices
);

Para ver este exemplo em uso, consulte BULK INSERT.

Eu. 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 logsdo Azure Data Lake Storage Gen2 , usando o driver do Sistema de Arquivos de Blob do Azure (ABFS). O contentor de armazenamento chama-se daily. A fonte de dados externa do Azure Data Lake Storage Gen2 é apenas para transferência de dados, pois não há suporte para push-down de predicados.

Este exemplo mostra como criar a credencial com escopo de banco de dados para autenticação em uma conta do Azure Data Lake Storage Gen2. Especifique a chave da conta de Armazenamento do Azure no segredo de credenciais do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade de credenciais com escopo de banco de dados, pois ela não é 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 (
    TYPE = HADOOP,
    LOCATION = 'abfss://daily@logs.dfs.core.windows.net/',
    CREDENTIAL = AzureStorageCredential
);

J. Criar fonte de dados externa usando ODBC genérico para PostgreSQL

Como nos exemplos anteriores, primeiro crie uma chave mestra de banco de dados e uma credencial com escopo de banco de dados. A credencial com escopo do banco de dados será usada para a fonte de dados externa. Este exemplo também pressupõe que um provedor de dados ODBC genérico para PostgreSQL esteja instalado no servidor.

Neste exemplo, o provedor de dados ODBC genérico é usado para se conectar a um servidor de banco de dados PostgreSQL na mesma rede, onde o nome de domínio totalmente qualificado do servidor PostgreSQL é POSTGRES1, usando a porta padrão do TCP 5432.

CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
    LOCATION = 'odbc://POSTGRES1.domain:5432',
    CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
    CREDENTIAL = postgres_credential
);

Visão geral: SQL Server 2022

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores

Cria uma fonte de dados externa para consultas PolyBase. As fontes de dados externas são usadas para estabelecer conectividade e dar suporte a estes casos de uso primários:

  • Virtualização de dados e carregamento de dados usando PolyBase no SQL Server
  • Operações de carga a granel utilizando BULK INSERT ou OPENROWSET

Observação

Essa sintaxe varia em diferentes versões do SQL Server. Use a lista suspensa do seletor de versão para escolher a versão apropriada. Este conteúdo aplica-se ao SQL Server 2022 (16.x) e versões posteriores.

Sintaxe do SQL Server 2022

Sintaxe para SQL Server 2022 e versões posteriores

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
  )
[ ; ]

Argumentos

data_source_name

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

LOCATION = '<prefix>://<path[:p ort]>'

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 localização Localizações suportadas por produto/serviço Autenticação
Conta de Armazenamento do Azure(V2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/
ou
abs://<storage_account_name>.blob.core.windows.net/<container_name>
Começando com o SQL Server 2022 (16.x)
Namespace hierárquico é suportado.
Assinatura de acesso compartilhado (SAS)
Azure Data Lake Storage Gen2 adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/
ou
adls://<storage_account_name>.dfs.core.windows.net/<container_name>
Começando com o SQL Server 2022 (16.x) Assinatura de acesso compartilhado (SAS)
SQL Server sqlserver <server_name>[\<instance_name>][:port] Começando com o SQL Server 2019 (15.x) Somente autenticação SQL
Oráculo oracle <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
Teradata teradata <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
MongoDB ou API do Cosmos DB para MongoDB mongodb <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
ODBC genérico odbc <server_name>[:port] A partir do SQL Server 2019 (15.x) - apenas Windows Apenas autenticação básica
Operações a granel https <storage_account>.blob.core.windows.net/<container> Começando com o SQL Server 2017 (14.x) Assinatura de acesso compartilhado (SAS)
Armazenamento de objetos compatível com S3 s3 - Compatível com S3: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>
ou s3://s3.amazonaws.com[:port]/<bucket_name>/<folder>
Começando com o SQL Server 2022 (16.x) Básico ou de passagem (STS) *

* Deve ser uma credencial com escopo de banco de dados, onde a IDENTITY é codificada e IDENTITY = 'S3 Access Key' o argumento SECRET está no formato = '<AccessKeyID>:<SecretKeyID>' ou usar autorização de passagem (STS). Para obter mais informações, consulte Configurar o PolyBase para acessar dados externos no armazenamento de objetos compatível com o S3.

Caminho de localização:

  • port = A porta na qual a fonte de dados externa está escutando. Opcional em muitos casos, dependendo da configuração da rede.
  • <container_name> = o recipiente da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, os dados não podem ser gravados de volta no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.
  • <server_name> = o nome do anfitrião.
  • <instance_name> = o nome da instância nomeada do SQL Server. Usado se você tiver o SQL Server Browser Service em execução na instância de destino.
  • <ip_address>:<port> = Somente para armazenamento de objetos compatível com o S3 (a partir do SQL Server 2022 (16.x)), o ponto de extremidade e a porta usados para se conectar ao armazenamento compatível com o S3.
  • <bucket_name> = Apenas para armazenamento de objetos compatível com o S3 (a partir do SQL Server 2022 (16.x)), específico para a plataforma de armazenamento.
  • <region> = Apenas para armazenamento de objetos compatível com o S3 (a partir do SQL Server 2022 (16.x)), específico para a plataforma de armazenamento.
  • <folder> = Parte do caminho de armazenamento dentro da URL de armazenamento.

Notas adicionais e orientações 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.
  • Você pode usar o conector para conectar o sqlserver SQL Server 2019 (15.x) a outro SQL Server ou ao Banco de Dados SQL do Azure.
  • Especifique o Driver={<Name of Driver>} ao se conectar via ODBC.
  • A opção Namespace Hierárquico para Contas de Armazenamento do Azure (V2) usando o prefixo adls é suportada por meio do Azure Data Lake Storage Gen2 no SQL Server 2022 (16.x).
  • O suporte do SQL Server para fontes de dados externas HDFS Cloudera (CDP) e Hortonworks (HDP) foi desativado e não está incluído no SQL Server 2022 (16.x). Não há necessidade de usar o argumento TYPE no SQL Server 2022 (16.x).
  • Para obter mais informações sobre o armazenamento de objetos compatíveis com o S3 e o PolyBase a partir do SQL Server 2022 (16.x), consulte Configurar o PolyBase para acessar dados externos no armazenamento de objetos compatível com o S3. Para obter um exemplo de consulta de um arquivo de parquet no armazenamento de objetos compatível com o S3, consulte Virtualizar arquivo de parquet em um armazenamento de objetos compatível com o S3 com o PolyBase.
  • Diferente das versões anteriores, no SQL Server 2022 (16.x), o prefixo usado para a Conta de Armazenamento do Azure (v2) mudou de wasb[s] para abs.
  • Diferente das versões anteriores, no SQL Server 2022 (16.x), o prefixo usado para o Azure Data Lake Storage Gen2 mudou de abfs[s] para adls.
  • Para obter um exemplo usando o PolyBase para virtualizar um arquivo CSV no Armazenamento do Azure, consulte Virtualizar arquivo CSV com o PolyBase.
  • Para obter um exemplo usando o PolyBase para virtualizar uma tabela delta no ADLS Gen2, consulte Virtualizar tabela delta com PolyBase.
  • O SQL Server 2022 (16.x) oferece suporte total a dois formatos de URL para a Conta de Armazenamento do Azure v2 (abs) e o Azure Data Lake Gen2 (adls).
    • O caminho LOCATION pode usar os formatos: <container>@<storage_account_name>.. (recomendado) ou <storage_account_name>../<container>. Por exemplo:
      • Conta de Armazenamento do Azure v2: abs://<container>@<storage_account_name>.blob.core.windows.net (recomendado) ou abs://<storage_account_name>.blob.core.windows.net/<container>.
  • O Azure Data Lake Gen2 suporta: adls://<container>@<storage_account_name>.blob.core.windows.net (recomendado) ou adls://<storage_account_name>.dfs.core.windows.net/<container>.

CONNECTION_OPTIONS = key_value_pair

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

Aplica-se ODBC a conexões genéricasODBC, bem como conectores 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 para 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 um mínimo, mas há outras opções, como APP='<your_application_name>' ou ApplicationIntent= ReadOnly|ReadWrite que também são úteis para definir e podem ajudar na solução de problemas.

Os possíveis pares de valores-chave são específicos do driver. Para obter mais informações para cada provedor, consulte CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.

A partir da Atualização Cumulativa 2 do SQL Server 2022 (16.x), palavras-chave adicionais foram introduzidas para dar suporte a arquivos Oracle TNS:

  • A palavra-chave TNSNamesFile especifica o caminho do arquivo para o tnsnames.ora arquivo localizado no servidor Oracle.
  • A palavra-chave ServerName especifica o alias usado dentro do tnsnames.ora que será usado para substituir o nome do host e a porta.

PUSHDOWN = ATIVADO | DESLIGADO

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores. Indica se a computação pode ser empurrada para a fonte de dados externa. Está ativado por padrão.

PUSHDOWN tem suporte 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.

A habilitação ou desativação do push-down no nível da consulta é obtida por meio da dica EXTERNALPUSHDOWN.

CREDENCIAL = credential_name

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

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

Há várias maneiras de criar uma assinatura de acesso compartilhado:

  • Você pode criar um token SAS navegando até o portal do Azure -><Your_Storage_Account> -> Assinatura de acesso compartilhado -> Configurar permissões -> Gerar SAS e cadeia de conexão. Para obter mais informações, consulte Gerar uma assinatura de acesso compartilhado.

  • Você pode criar e configurar uma SAS com o Gerenciador de Armazenamento do Azure.

  • Você pode criar um token SAS programaticamente por meio do PowerShell, CLI do Azure, .NET e API REST. Para obter mais informações, consulte Conceder acesso limitado aos recursos do Armazenamento do Azure usando assinaturas de acesso compartilhado (SAS).

  • O token SAS deve ser configurado da seguinte forma:

    • Quando um token SAS é gerado, ele inclui um ponto de interrogação ('?') no início do token. Exclua a entrelinha ? quando configurada como SECRET.
    • Use um período de expiração válido (todas as datas estão no horário UTC).
  • Conceda pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r). Várias assinaturas de acesso compartilhado podem ser criadas para diferentes casos de uso. As permissões devem ser concedidas da seguinte forma:

    Ação Permissão
    Ler dados de um ficheiro Leitura
    Ler dados de vários arquivos e subpastas Ler e Listar
    Usar Criar Tabela Externa como Selecionar (CETAS) Ler, Criar, Listar e Escrever
  • Para o Armazenamento de Blobs do Azure e o Azure Data Lake Gen 2:

    • Serviços permitidos: Blob devem ser selecionados para gerar o token SAS
  • Tipos de recursos permitidos: Container e Object devem ser selecionados para gerar o token SAS

Para obter um exemplo de como usar um armazenamento de objetos compatível com o CREDENTIAL S3 e o PolyBase, consulte Configurar o PolyBase para acessar dados externos no armazenamento de objetos compatível com o S3.

Para criar uma credencial com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL.

Permissões

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

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Segurança

O PolyBase suporta autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial com escopo de banco de dados para criar a conta proxy.

Atualizar para o SQL Server 2022

A partir do SQL Server 2022 (16.x), as fontes de dados externas do Hadoop não são mais suportadas. É necessário recriar manualmente fontes de dados externas criadas anteriormente com TYPE = HADOOPo , e qualquer tabela externa que use essa fonte de dados externa.

Os usuários também precisarão configurar suas fontes de dados externas para usar novos conectores ao se conectar ao Armazenamento do Azure.

Fonte de dados externa De Para
Armazenamento de Blobs do Azure wasb[s] abs
ADLS Gen2 abfs[s] adls

Exemplos

Importante

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

Um. Criar fonte de dados externa no SQL Server para fazer referência ao Oracle

Para criar uma fonte de dados externa que faça referência ao Oracle, verifique se você tem uma credencial com escopo de banco de dados. Opcionalmente, você também pode habilitar ou desabilitar a redução da 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',
    PUSHDOWN = ON,
    CREDENTIAL = OracleProxyAccount
);

Opcionalmente, a fonte de dados externa para Oracle pode usar autenticação de proxy para fornecer controle de acesso refinado. Um usuário 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]
);

Como alternativa, você pode autenticar usando TNS.

A partir da Atualização Cumulativa 2 do SQL Server 2022 (16.x), CREATE EXTERNAL DATA SOURCE agora oferece suporte ao uso de arquivos TNS ao se conectar ao Oracle.

O CONNECTION_OPTIONS parâmetro foi expandido e agora usa TNSNamesFile e ServerName como variáveis para procurar o tnsnames.ora arquivo e estabelecer conexão com o servidor.

No exemplo abaixo, durante o tempo de execução, o SQL Server procurará o local do tnsnames.ora arquivo especificado por TNSNamesFile e procurará o host e a porta de rede especificados pelo ServerName.

CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
    LOCATION = N'oracle://XE',
    CREDENTIAL = [OracleCredentialTest],
    CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);

B. Criar fonte de dados externa para fazer referência a uma instância nomeada do SQL Server por meio da conectividade PolyBase

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

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

Primeiro, crie a credencial com escopo do banco de dados, armazenando credenciais para um logon autenticado pelo SQL. O SQL ODBC Connector for PolyBase suporta apenas a autenticação básica. Antes de criar uma credencial com escopo de banco de dados, o banco de dados deve ter uma chave mestra para proteger a credencial. Para obter mais informações, consulte CREATE MASTER KEY. O exemplo a seguir cria uma credencial com escopo de banco de dados, fornece seu próprio login e senha.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
     SECRET = 'password';

No exemplo a seguir, WINSQL2019 é o nome do host e SQL2019 é o nome da instância. 'Server=%s\SQL2019' é o par de valores de chave.

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 padrão do SQL Server.

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

C. Criar fonte de dados externa para fazer referência a uma réplica secundária legível do grupo de disponibilidade Always On

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

Para criar uma fonte de dados externa que faça referência a uma réplica secundária legível do SQL Server, use CONNECTION_OPTIONS para especificar o ApplicationIntent=ReadOnlyarquivo . Além disso, você precisa definir o banco de dados de disponibilidade como Database={dbname} em CONNECTION_OPTIONS, ou definir o banco de dados de disponibilidade como o banco de dados padrão do logon usado para a credencial de escopo do banco de dados. Você precisa fazer isso em todas as réplicas de disponibilidade do grupo de disponibilidade.

Primeiro, crie a credencial com escopo do banco de dados, armazenando credenciais para um logon autenticado pelo SQL. O SQL ODBC Connector for PolyBase suporta apenas a autenticação básica. Antes de criar uma credencial com escopo de banco de dados, o banco de dados deve ter uma chave mestra para proteger a credencial. Para obter mais informações, consulte CREATE MASTER KEY. O exemplo a seguir cria uma credencial com escopo de banco de dados, fornece seu próprio login e senha.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
     SECRET = 'password';

Em seguida, crie a nova fonte de dados externa.

Se você incluiu Database=dbname no CONNECTION_OPTIONS banco de dados de disponibilidade ou definiu-o como o banco de dados padrão para o logon na credencial de escopo do banco de dados, você ainda deve fornecer o nome do banco de dados por meio de um nome de três partes na instrução CREATE EXTERNAL TABLE, dentro do parâmetro LOCATION. Para obter um exemplo, consulte CREATE EXTERNAL TABLE.

No exemplo a seguir, WINSQL2019AGL é o nome do ouvinte do grupo de disponibilidade e dbname é o nome do banco de dados a ser o destino da instrução CREATE EXTERNAL TABLE.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = SQLServerCredentials
);

Você pode demonstrar o comportamento de redirecionamento do grupo de disponibilidade especificando ApplicationIntent e criando uma tabela externa na visualização sys.serversdo sistema. No script de exemplo a seguir, duas fontes de dados externas são criadas e uma tabela externa é criada para cada uma. Use as exibições para testar qual servidor está respondendo à conexão. Resultados semelhantes também podem ser alcançados por meio do recurso de roteamento somente leitura. Para obter mais informações, consulte Configurar roteamento somente leitura para um grupo de disponibilidade Always On.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = [SQLServerCredentials]
);
GO

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
    CREDENTIAL = [SQLServerCredentials]
);
GO

Dentro do banco de dados no grupo de disponibilidade, crie uma exibição para retornar sys.servers e o nome da instância local, que ajuda a identificar qual réplica está respondendo à consulta. Para obter mais informações, consulte sys.servers.

CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO

Em seguida, crie uma tabela externa na instância de origem:

CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance

SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO

D. Criar fonte de dados externa para consultar um arquivo parquet no armazenamento de objetos compatível com o S3 via PolyBase

Aplica-se a: SQL Server 2022 (16.x) e posterior

O script de exemplo a seguir cria uma fonte de dados externa s3_ds no banco de dados do usuário de origem no SQL Server. A fonte de dados externa faz referência à credencial de escopo do banco de dados s3_dc.

CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
    SECRET = '<access_key_id>:<secret_key_id>' -- provided by the S3-compatible object storage
GO

CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
    LOCATION = 's3://<ip_address>:<port>/',
    CREDENTIAL = s3_dc
);
GO

Verifique a nova fonte de dados externa com sys.external_data_sources.

SELECT *
FROM sys.external_data_sources;

Em seguida, o exemplo a seguir demonstra o uso do T-SQL para consultar um arquivo parquet armazenado no armazenamento de objetos compatível com o S3 por meio da consulta OPENROWSET. Para obter mais informações, consulte Virtualizar arquivo parquet em um armazenamento de objetos compatível com o S3 com o PolyBase.

SELECT *
FROM OPENROWSET (
    BULK '/<bucket>/<parquet_folder>',
    FORMAT = 'PARQUET',
    DATA_SOURCE = 's3_ds'
) AS [cc];

E. Criar fonte de dados externa usando ODBC genérico para PostgreSQL

Como nos exemplos anteriores, primeiro crie uma chave mestra de banco de dados e uma credencial com escopo de banco de dados. A credencial com escopo do banco de dados será usada para a fonte de dados externa. Este exemplo também pressupõe que um provedor de dados ODBC genérico para PostgreSQL esteja instalado no servidor.

Neste exemplo, o provedor de dados ODBC genérico é usado para se conectar a um servidor de banco de dados PostgreSQL na mesma rede, onde o nome de domínio totalmente qualificado do servidor PostgreSQL é POSTGRES1, usando a porta padrão do TCP 5432.

CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
    LOCATION = 'odbc://POSTGRES1.domain:5432',
    CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
    CREDENTIAL = postgres_credential
);

Armazenamento do Azure

Criar uma assinatura de acesso compartilhado

Para o Armazenamento de Blobs do Azure e o Azure Data Lake Storage (ADLS) Gen2, o método de autenticação com suporte é a assinatura de acesso compartilhado (SAS). Uma maneira simples de gerar um token de assinatura de acesso compartilhado, siga as etapas a seguir. Para obter mais informações, consulte CREDENCIAL.

  1. Navegue até o portal do Azure e a Conta de Armazenamento desejada.

  2. Navegue até o contêiner desejado no menu Armazenamento de dados .

  3. Selecione Tokens de acesso compartilhado.

  4. Escolha a permissão apropriada com base na ação desejada:

    Ação Permissão
    Ler dados de um ficheiro Leitura
    Ler dados de vários arquivos e subpastas Ler e Listar
    Usar Criar Tabela Externa como Selecionar (CETAS) Ler, criar e escrever
  5. Escolha a data de expiração do token.

  6. Gere token SAS e URL.

  7. Copie o token SAS.

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

Aplica-se a: SQL Server 2022 (16.x) e posterior

A partir do SQL Server 2022 (16.x), use um novo prefixo abs para a Conta de Armazenamento do Azure v2. O abs prefixo suporta autenticação usando SHARED ACCESS SIGNATURE. O abs prefixo substitui wasb, usado em versões anteriores. HADOOP não é mais suportado, não há mais necessidade de usar TYPE = BLOB_STORAGEo .

A chave da conta de armazenamento do Azure não é mais necessária, em vez disso, usando o Token SAS, como podemos ver no exemplo a seguir:

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
    SECRET = '<Blob_SAS_Token>';
GO

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredentialv2
);

Para obter um exemplo mais detalhado sobre como acessar arquivos CSV armazenados no Armazenamento de Blobs do Azure, consulte Virtualizar arquivo CSV com PolyBase.

G. Criar fonte de dados externa para acessar dados no Azure Data Lake Gen2

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores

A partir do SQL Server 2022 (16.x), use um novo prefixo adls para o Azure Data Lake Gen2, substituindo abfs o usado em versões anteriores. O adls prefixo também suporta token SAS como método de autenticação, conforme mostrado neste exemplo:

--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = '<DataLakeGen2_SAS_Token>';
GO

CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
    LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
    CREDENTIAL = datalakegen2
);

Para obter um exemplo mais detalhado sobre como acessar arquivos delta armazenados no Azure Data Lake Gen2, consulte Virtualizar tabela delta com PolyBase.

Exemplos: operações em massa

Importante

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

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

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores.

Use a seguinte fonte de dados para operações em massa usando BULK INSERT ou OPENROWSET BULK. A credencial deve ser definida SHARED ACCESS SIGNATURE como a identidade, não deve ter a entrelinha ? 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 expiração deve ser válido (todas as datas estão no horário UTC). Para obter mais informações sobre assinaturas de acesso compartilhado, consulte Usando assinaturas de acesso compartilhado (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = AccessAzureInvoices,
);

Visão geral: SQL Server 2025

Aplica-se a: SQL Server 2025 (17.x)

Cria uma fonte de dados externa para consultas PolyBase. As fontes de dados externas são usadas para estabelecer conectividade e dar suporte a estes casos de uso primários:

  • Virtualização de dados e carregamento de dados usando PolyBase no SQL Server
  • Operações de carga a granel utilizando BULK INSERT ou OPENROWSET

Suporta ligações de Identidade Gerida para instâncias habilitadas pelo Azure Arc. Para mais detalhes, consulte Connect to Azure Storage with managed identity from PolyBase.

Observação

Essa sintaxe varia em diferentes versões do SQL Server. Use a lista suspensa do seletor de versão para escolher a versão apropriada. Este conteúdo aplica-se ao SQL Server 2025 (17.x) e versões posteriores.

Sintaxe para SQL Server 2025 e versões posteriores

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

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
  )
[ ; ]

Argumentos

data_source_name

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

LOCATION = '<prefix>://<path[:p ort]>'

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 localização Localizações suportadas por produto/serviço Autenticação
Conta de Armazenamento do Azure(V2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/
ou
abs://<storage_account_name>.blob.core.windows.net/<container_name>
Começando com o SQL Server 2022 (16.x)
Namespace hierárquico é suportado.
Assinatura de acesso compartilhado (SAS)
ou
Suporte do PolyBase para Identidade Gerenciada para o Armazenamento do Azure1
Azure Data Lake Storage Gen2 adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/
ou
adls://<storage_account_name>.dfs.core.windows.net/<container_name>
Começando com o SQL Server 2022 (16.x) Assinatura de acesso compartilhado (SAS)
ou
Suporte do PolyBase para Identidade Gerenciada para o Armazenamento do Azure1
SQL Server sqlserver <server_name>[\<instance_name>][:port] Começando com o SQL Server 2019 (15.x) Somente autenticação SQL
Oráculo oracle <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
Teradata teradata <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
MongoDB ou API do Cosmos DB para MongoDB mongodb <server_name>[:port] Começando com o SQL Server 2019 (15.x) Apenas autenticação básica
ODBC genérico odbc <server_name>[:port] A partir do SQL Server 2019 (15.x) - apenas Windows Apenas autenticação básica
Operações a granel https <storage_account>.blob.core.windows.net/<container> Começando com o SQL Server 2017 (14.x) Assinatura de acesso compartilhado (SAS)
Armazenamento de objetos compatível com S3 s3 - Compatível com S3: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>
ou s3://s3.amazonaws.com[:port]/<bucket_name>/<folder>
Começando com o SQL Server 2022 (16.x) Básico ou de passagem (STS) 2

1 Requer a instância do SQL Server 2025 (17.x) ativada pelo Azure Arc. Para mais detalhes, consulte Connect to Azure Storage with managed identity from PolyBase.

2 Deve ser uma credencial com escopo de banco de dados, onde o IDENTITY é codificado para IDENTITY = 'S3 Access Key' e o SECRET argumento está no formato = '<AccessKeyID>:<SecretKeyID>' ou usar autorização de passagem (STS). Para obter mais informações, consulte Configurar o PolyBase para acessar dados externos no armazenamento de objetos compatível com o S3.

Caminho de localização:

Caminho de localização Descrição
port A porta na qual a fonte de dados externa está escutando. Opcional em muitos casos, dependendo da configuração da rede.
<container_name> O contêiner da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, os dados não podem ser gravados de volta no contêiner.
<storage_account> O nome da conta de armazenamento do recurso do Azure.
<server_name> O nome do host.
<instance_name> O nome da instância nomeada do SQL Server. Usado se você tiver o SQL Server Browser Service em execução na instância de destino.
<ip_address>:<port> 1 Somente para armazenamento de objetos compatível com o S3, o ponto de extremidade e a porta usados para se conectar ao armazenamento compatível com o S3.
<bucket_name> 1 Apenas para armazenamento de objetos compatível com o S3, específico da plataforma de armazenamento.
<region> 1 Apenas para armazenamento de objetos compatível com o S3, específico da plataforma de armazenamento.
<folder> Parte do caminho de armazenamento dentro da URL de armazenamento.

1 SQL Server 2022 (16.x) e versões posteriores.

Notas adicionais e orientações 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.

  • Você pode usar o conector para conectar o sqlserver SQL Server 2019 (15.x) a outro SQL Server ou ao Banco de Dados SQL do Azure.

  • Especifique o Driver={<Name of Driver>} ao se conectar via ODBC.

  • A opção Namespace Hierárquico para Contas de Armazenamento do Azure (V2) usando o prefixo adls é suportada por meio do Azure Data Lake Storage Gen2 no SQL Server 2022 (16.x) e versões posteriores.

  • O suporte do SQL Server para fontes de dados externas HDFS Cloudera (CDP) e Hortonworks (HDP) foi desativado e não está incluído no SQL Server 2022 (16.x) e versões posteriores. Não há necessidade de usar o TYPE argumento no SQL Server 2025 (17.x).

  • Para obter mais informações sobre o armazenamento de objetos compatíveis com o S3 e o PolyBase no SQL Server 2022 (16.x) e versões posteriores, consulte Configurar o PolyBase para acessar dados externos no armazenamento de objetos compatível com o S3. Para obter um exemplo de consulta de um arquivo de parquet no armazenamento de objetos compatível com o S3, consulte Virtualizar arquivo de parquet em um armazenamento de objetos compatível com o S3 com o PolyBase.

No SQL Server 2022 (16.x) e versões posteriores:

  • o prefixo usado para a Conta de Armazenamento do Azure (v2) foi alterado de wasb[s] para abs

  • o prefixo usado para o Azure Data Lake Storage Gen2 foi alterado de abfs[s] para adls

  • Para obter um exemplo usando o PolyBase para virtualizar um arquivo CSV no Armazenamento do Azure, consulte Virtualizar arquivo CSV com o PolyBase.

  • Para obter um exemplo usando o PolyBase para virtualizar uma tabela delta no ADLS Gen2, consulte Virtualizar tabela delta com PolyBase.

  • O SQL Server 2022 (16.x) e versões posteriores oferecem suporte total a dois formatos de URL para a Conta de Armazenamento do Azure v2 (abs) e o Azure Data Lake Gen2 (adls).

    • O LOCATION caminho pode usar os formatos: <container>@<storage_account_name>.. (recomendado) ou <storage_account_name>../<container>. Por exemplo:

      • Conta de Armazenamento do Azure v2: abs://<container>@<storage_account_name>.blob.core.windows.net (recomendado) ou abs://<storage_account_name>.blob.core.windows.net/<container>.
  • O Azure Data Lake Gen2 suporta: adls://<container>@<storage_account_name>.blob.core.windows.net (recomendado) ou adls://<storage_account_name>.dfs.core.windows.net/<container>.

CONNECTION_OPTIONS = key_value_pair

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores.

Especifica opções adicionais ao se conectar a ODBC uma fonte de dados externa. Para usar várias opções de conexão, separe-as por ponto-e-vírgula.

Aplica-se ODBC a conexões genéricasODBC, bem como conectores 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 para 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 um mínimo, mas há outras opções, como APP='<your_application_name>' ou ApplicationIntent= ReadOnly|ReadWrite que também são úteis para definir e podem ajudar na solução de problemas.

Os possíveis pares de valores-chave são específicos do driver. Para obter mais informações para cada provedor, consulte CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.

A partir da Atualização Cumulativa 2 do SQL Server 2022 (16.x), palavras-chave adicionais foram introduzidas para dar suporte a arquivos Oracle TNS:

  • A palavra-chave TNSNamesFile especifica o caminho do arquivo para o tnsnames.ora arquivo localizado no servidor Oracle.
  • A palavra-chave ServerName especifica o alias usado dentro do tnsnames.ora que será usado para substituir o nome do host e a porta.

Opções de encriptação no SQL Server 2025 (17.x)

A partir do SQL Server 2025 (17.x), quando usado sqlserver como fonte de dados, o driver Microsoft ODBC versão 18 para SQL Server é o driver predefinido. A Encryption opção é necessária (Yes, Noou Strict), e TrustServerCertificate está disponível (Yes ou No). Se Encryption não for especificado, o comportamento padrão será Encrypt=Yes;TrustServerCertificate=No;, e requer um certificado de servidor.

Para se conectar usando o protocolo TDS 8.0, o modo estrito (Encrypt=Strict) foi adicionado. Nesse modo, um certificado de servidor confiável é necessário para ser instalado e é sempre verificado (TrustServerCertificate é ignorado). Uma nova palavra-chave, HostnameInCertificate, pode ser usada para especificar o nome de host esperado encontrado no certificado se ele for diferente do servidor especificado. HostnameInCertificate é utilizável em todos os modos de encriptação e também é aplicável se a opção Force Encryption do lado do servidor estiver ativada, o que fará com que o controlador verifique o certificado nos modos Opcional ou Obrigatório , a menos que esteja desativado utilizando TrustServerCertificate.

Para obter mais informações sobre Encryption opções, certificados de servidor e TrustServerCertificate, consulte Recursos do driver ODBC da Microsoft para SQL Server no Windows.

Você deve sempre usar o driver mais recente. No entanto, o SQL Server 2025 (17.x) também suporta o Microsoft ODBC Driver versão 17 para SQL Server para compatibilidade retroativa. Para obter mais informações sobre como alterar a versão do driver usado pelo PolyBase, consulte Alterar a versão do driver do SQL Server para PolyBase.

PUSHDOWN = ATIVADO | DESLIGADO

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores.

Indica se a computação pode ser empurrada para a fonte de dados externa. Ativado por padrão.

PUSHDOWN tem suporte 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.

A habilitação ou desativação do push-down no nível da consulta é obtida por meio de uma dica.

CREDENCIAL = credential_name

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

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

Há várias maneiras de criar uma assinatura de acesso compartilhado:

  • Você pode criar um token SAS navegando até o portal><do Azure Your_Storage_Account>> Assinatura de>Configurar permissões>Gerar SAS e cadeia de conexão. Para obter mais informações, consulte Gerar uma assinatura de acesso compartilhado.

  • Você pode criar e configurar uma SAS com o Gerenciador de Armazenamento do Azure.

  • Você pode criar um token SAS programaticamente por meio do PowerShell, CLI do Azure, .NET e API REST. Para obter mais informações, consulte Conceder acesso limitado aos recursos do Armazenamento do Azure usando assinaturas de acesso compartilhado (SAS).

  • O token SAS deve ser configurado da seguinte forma:

    • Quando um token SAS é gerado, ele inclui um ponto de interrogação ('?') no início do token. Exclua a entrelinha ? quando configurada como o SECRETarquivo .

    • Use um período de expiração válido (todas as datas estão no horário UTC).

  • Conceda pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r). Várias assinaturas de acesso compartilhado podem ser criadas para diferentes casos de uso. As permissões devem ser concedidas da seguinte forma:

    Ação Permissão
    Ler dados de um ficheiro Leitura
    Ler dados de vários arquivos e subpastas Ler e Listar
    Usar Criar Tabela Externa como Selecionar (CETAS) Ler, Criar, Listar e Escrever
  • Para o Armazenamento de Blobs do Azure e o Azure Data Lake Gen 2:

    • Serviços permitidos: Blob devem ser selecionados para gerar o token SAS
  • Tipos de recursos permitidos: Container e Object devem ser selecionados para gerar o token SAS

Para obter um exemplo de como usar um armazenamento de objetos compatível com o CREDENTIAL S3 e o PolyBase, consulte Configurar o PolyBase para acessar dados externos no armazenamento de objetos compatível com o S3.

Para criar uma credencial com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL.

Permissões

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

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Segurança

O PolyBase suporta autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial com escopo de banco de dados para criar a conta proxy.

Atualizar para o SQL Server 2025

No SQL Server 2022 (16.x) e versões posteriores, as fontes de dados externas do Hadoop não são suportadas. É necessário recriar manualmente fontes de dados externas criadas anteriormente com TYPE = HADOOPo , e qualquer tabela externa que use essa fonte de dados externa.

Os usuários também precisarão configurar suas fontes de dados externas para usar novos conectores ao se conectar ao Armazenamento do Azure.

Fonte de dados externa De Para
Armazenamento de Blobs do Azure wasb[s] ABS
ADLS Gen2 ABFS[s] ADLs

Exemplos

Importante

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

Um. Criar fonte de dados externa no SQL Server para fazer referência ao Oracle

Para criar uma fonte de dados externa que faça referência ao Oracle, verifique se você tem uma credencial com escopo de banco de dados. Opcionalmente, você também pode habilitar ou desabilitar a redução da 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',
    PUSHDOWN = ON,
    CREDENTIAL = OracleProxyAccount
);

Opcionalmente, a fonte de dados externa para Oracle pode usar autenticação de proxy para fornecer controle de acesso refinado. Um usuário 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]
);

Como alternativa, você pode autenticar usando TNS.

A partir da Atualização Cumulativa 2 do SQL Server 2022 (16.x), CREATE EXTERNAL DATA SOURCE agora oferece suporte ao uso de arquivos TNS ao se conectar ao Oracle.

O CONNECTION_OPTIONS parâmetro foi expandido e agora usa TNSNamesFile e ServerName como variáveis para procurar o tnsnames.ora arquivo e estabelecer conexão com o servidor.

No exemplo abaixo, durante o tempo de execução, o SQL Server procurará o local do tnsnames.ora arquivo especificado por TNSNamesFile e procurará o host e a porta de rede especificados pelo ServerName.

CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
    LOCATION = N'oracle://XE',
    CREDENTIAL = [OracleCredentialTest],
    CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);

B. Criar fonte de dados externa para fazer referência a uma instância nomeada do SQL Server por meio da conectividade PolyBase

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores.

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

Primeiro, crie a credencial com escopo do banco de dados, armazenando credenciais para um logon autenticado pelo SQL. O SQL ODBC Connector for PolyBase suporta apenas a autenticação básica. Antes de criar uma credencial com escopo de banco de dados, o banco de dados deve ter uma chave mestra para proteger a credencial. Para obter mais informações, consulte CREATE MASTER KEY. O exemplo a seguir cria uma credencial com escopo de banco de dados, fornece seu próprio login e senha.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
     SECRET = 'password';

No exemplo a seguir, WINSQL2019 é o nome do host e SQL2019 é o nome da instância. 'Server=%s\SQL2019' é o par de valores de chave.

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 padrão do SQL Server.

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

C. Criar fonte de dados externa para fazer referência a uma réplica secundária legível do grupo de disponibilidade Always On

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores.

Para criar uma fonte de dados externa que faça referência a uma réplica secundária legível do SQL Server, use CONNECTION_OPTIONS para especificar o ApplicationIntent=ReadOnlyarquivo . Além disso, você precisará definir o banco de dados de disponibilidade como Database={dbname} no CONNECTION_OPTIONS, ou definir o banco de dados de disponibilidade como o banco de dados padrão do logon usado para a credencial com escopo do banco de dados. Você precisará fazer isso em todas as réplicas de disponibilidade do grupo de disponibilidade.

Primeiro, crie a credencial com escopo do banco de dados, armazenando credenciais para um logon autenticado pelo SQL. O SQL ODBC Connector for PolyBase suporta apenas a autenticação básica. Antes de criar uma credencial com escopo de banco de dados, o banco de dados deve ter uma chave mestra para proteger a credencial. Para obter mais informações, consulte CREATE MASTER KEY. O exemplo a seguir cria uma credencial com escopo de banco de dados, fornece seu próprio login e senha.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
     SECRET = 'password';

Em seguida, crie a nova fonte de dados externa.

Se você incluiu Database=dbname no CONNECTION_OPTIONS banco de dados de disponibilidade ou definiu-o como o banco de dados padrão para o logon na credencial de escopo do banco de dados, você ainda deve fornecer o nome do banco de dados por meio de um nome de três partes na instrução CREATE EXTERNAL TABLE, dentro do parâmetro LOCATION. Para obter um exemplo, consulte CREATE EXTERNAL TABLE.

No exemplo a seguir, WINSQL2019AGL é o nome do ouvinte do grupo de disponibilidade e dbname é o nome do banco de dados a ser o destino da instrução CREATE EXTERNAL TABLE.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = SQLServerCredentials
);

Você pode demonstrar o comportamento de redirecionamento do grupo de disponibilidade especificando ApplicationIntent e criando uma tabela externa na visualização sys.serversdo sistema. No script de exemplo a seguir, duas fontes de dados externas são criadas e uma tabela externa é criada para cada uma. Use as exibições para testar qual servidor está respondendo à conexão. Resultados semelhantes também podem ser alcançados por meio do recurso de roteamento somente leitura. Para obter mais informações, consulte Configurar roteamento somente leitura para um grupo de disponibilidade Always On.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = [SQLServerCredentials]
);
GO

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
    CREDENTIAL = [SQLServerCredentials]
);
GO

Dentro do banco de dados no grupo de disponibilidade, crie uma exibição para retornar sys.servers e o nome da instância local, que ajuda a identificar qual réplica está respondendo à consulta. Para obter mais informações, consulte sys.servers.

CREATE VIEW vw_sys_servers AS
    SELECT [name]
    FROM sys.servers
    WHERE server_id = 0;
GO

Em seguida, crie uma tabela externa na instância de origem:

CREATE EXTERNAL TABLE vw_sys_servers_ro
(
    name SYSNAME NOT NULL
)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

CREATE EXTERNAL TABLE vw_sys_servers_rw
(
    name SYSNAME NOT NULL
)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

SELECT [name]
FROM dbo.vw_sys_servers_ro;
--should return secondary replica instance

SELECT [name]
FROM dbo.vw_sys_servers_rw;
--should return primary replica instance
GO

D. Criar fonte de dados externa para consultar um arquivo parquet no armazenamento de objetos compatível com o S3 via PolyBase

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores.

O script de exemplo a seguir cria uma fonte de dados externa s3_ds no banco de dados do usuário de origem no SQL Server. A fonte de dados externa faz referência à credencial de escopo do banco de dados s3_dc.

CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
    SECRET = '<access_key_id>:<secret_key_id>'; -- provided by the S3-compatible object storage
GO

CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
    LOCATION = 's3://<ip_address>:<port>/',
    CREDENTIAL = s3_dc
);
GO

Verifique a nova fonte de dados externa com sys.external_data_sources.

SELECT *
FROM sys.external_data_sources;

Em seguida, o exemplo a seguir demonstra o uso do T-SQL para consultar um arquivo parquet armazenado no armazenamento de objetos compatível com o S3 por meio da consulta OPENROWSET. Para obter mais informações, consulte Virtualizar arquivo parquet em um armazenamento de objetos compatível com o S3 com o PolyBase.

SELECT *
FROM OPENROWSET (
    BULK '/<bucket>/<parquet_folder>',
    FORMAT = 'PARQUET',
    DATA_SOURCE = 's3_ds'
) AS [cc];

E. Criar fonte de dados externa usando ODBC genérico para PostgreSQL

Como nos exemplos anteriores, primeiro crie uma chave mestra de banco de dados e uma credencial com escopo de banco de dados. A credencial com escopo do banco de dados será usada para a fonte de dados externa. Este exemplo também pressupõe que um provedor de dados ODBC genérico para PostgreSQL esteja instalado no servidor.

Neste exemplo, o provedor de dados ODBC genérico é usado para se conectar a um servidor de banco de dados PostgreSQL na mesma rede, onde o nome de domínio totalmente qualificado do servidor PostgreSQL é POSTGRES1, usando a porta padrão do TCP 5432.

CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
    LOCATION = 'odbc://POSTGRES1.domain:5432',
    CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
    CREDENTIAL = postgres_credential
);

Armazenamento do Azure

Criar uma assinatura de acesso compartilhado

Para o Armazenamento de Blobs do Azure e o Azure Data Lake Gen2, o método de autenticação com suporte é a assinatura de acesso compartilhado (SAS). Uma maneira simples de gerar um token de assinatura de acesso compartilhado, siga as etapas a seguir. Para obter mais informações, consulte CREDENCIAL.

  1. Navegue até o portal do Azure e a Conta de Armazenamento desejada.
  2. Navegue até o contêiner desejado no menu Armazenamento de dados .
  3. Selecione Tokens de acesso compartilhado.
  4. Escolha a permissão apropriada com base na ação desejada. Para referência, use a seguinte tabela:
Ação Permissão
Ler dados de um ficheiro Leitura
Ler dados de vários arquivos e subpastas Ler e Listar
Usar Criar Tabela Externa como Selecionar (CETAS) Ler, criar e escrever
  1. Escolha a data de expiração do token.
  2. Gere token SAS e URL.
  3. Copie o token SAS.

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

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores.

Use um novo prefixo abs para a Conta de Armazenamento do Azure v2. O abs prefixo suporta autenticação usando SHARED ACCESS SIGNATURE. O abs prefixo substitui wasb, usado em versões anteriores. HADOOP não é mais suportado, não há mais necessidade de usar TYPE = BLOB_STORAGEo .

A chave da conta de armazenamento do Azure não é mais necessária, em vez disso, usando o Token SAS, como podemos ver no exemplo a seguir:

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
GO

CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
    SECRET = '<Blob_SAS_Token>';
GO

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredentialv2
);

Para obter um exemplo mais detalhado sobre como acessar arquivos CSV armazenados no Armazenamento de Blobs do Azure, consulte Virtualizar arquivo CSV com PolyBase.

G. Criar fonte de dados externa para acessar dados no Azure Data Lake Gen2

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores.

Use um novo prefixo adls para o Azure Data Lake Gen2, substituindo abfs o usado em versões anteriores. O adls prefixo também suporta token SAS como método de autenticação, conforme mostrado neste exemplo:

--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = '<DataLakeGen2_SAS_Token>';
GO

CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
    LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
    CREDENTIAL = datalakegen2
);

Para obter um exemplo mais detalhado sobre como acessar arquivos delta armazenados no Azure Data Lake Gen2, consulte Virtualizar tabela delta com PolyBase.

Exemplos: operações em massa

Importante

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

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

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores.

Use a seguinte fonte de dados para operações em massa usando BULK INSERT ou OPENROWSET. A credencial deve ser definida SHARED ACCESS SIGNATURE como a identidade, não deve ter a entrelinha ? 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 expiração deve ser válido (todas as datas estão no horário UTC). Para obter mais informações sobre assinaturas de acesso compartilhado, consulte Usando assinaturas de acesso compartilhado (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = AccessAzureInvoices,
);

Eu. Criar fonte de dados externa usando TDS 8.0 para se conectar com outro SQL Server

Aplica-se a: SQL Server 2025 (17.x) e versões posteriores.

Ao usar o driver ODBC 18 mais recente do Microsoft para SQL Server, você deve usar a Encryption opção em CONNECTION_OPTIONS, e TrustServerCertificate também é suportado. Se Encryption não for especificado, o comportamento padrão será Encrypt=Yes;TrustServerCertificate=No;, e você precisará de um certificado de servidor.

Neste exemplo, a Autenticação SQL é usada. Para proteger a credencial, você precisa de uma chave mestra de banco de dados (DMK). Para obter mais informações, consulte CREATE MASTER KEY. O exemplo a seguir cria uma credencial com escopo de banco de dados, com um login e senha personalizados.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = '<username>',
     SECRET = '<password>';

O nome do servidor de destino é WINSQL2022, port 58137e é uma instância padrão. Ao especificar Encrypt=Strict, a conexão usa TDS 8.0 e o certificado do servidor é sempre verificado. Neste exemplo, o HostnameinCertificate usado é WINSQL2022:

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encrypt=Strict;HostnameInCertificate=WINSQL2022;'
    CREDENTIAL = SQLServerCredentials
);

J. Criar fonte de dados externa usando criptografia e opção TrustServerCertificate

Seguindo o exemplo anterior, aqui estão dois exemplos de código. O primeiro trecho tem Encryption e TrustServerCertificate definiu.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encrypt=Yes;HostnameInCertificate=WINSQL2022;TrustServerCertificate=Yes;'
    CREDENTIAL = SQLServerCredentials
);

O trecho a seguir não está Encryption habilitado.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encrypt=no;'
    CREDENTIAL = SQLServerCredentials
);

* Banco de dados SQL *  

Plataforma de análise
Sistema (PDW)

 

Visão geral: Banco de Dados SQL do Azure

se aplica ao: Banco de Dados SQL do Azure

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

Transact-SQL convenções de sintaxe

Sintaxe

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 definido pelo usuário para a fonte de dados. O nome deve ser exclusivo dentro do banco de dados no Banco de dados SQL.

LOCATION = '<prefix>://<path[:p ort]>'

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 localização Disponibilidade
Operações a granel https <storage_account>.blob.core.windows.net/<container>
Consulta elástica (fragmento) Não obrigatório <shard_map_server_name>.database.windows.net
Elastic Query (remoto) Não obrigatório <remote_server_name>.database.windows.net
EdgeHub edgehub edgehub:// Disponível apenas no Azure SQL Edge. O EdgeHub é sempre local para a instância do Azure SQL Edge. Como tal, não há necessidade de especificar um caminho ou valor de porta.
Kafka kafka kafka://<kafka_bootstrap_server_name_ip>:<port_number> Disponível apenas no Azure SQL Edge.
Conta de Armazenamento do Azure (v2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/

ou
abs://<storage_account_name>.blob.core.windows.net/ <container_name>
Azure Data Lake Storage Gen2 adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/

ou
adls://<storage_account_name>.dfs.core.windows.net/<container_name>

Caminho de localização:

  • <shard_map_server_name> = O nome do servidor lógico no Azure que está hospedando o gerenciador de mapa de estilhaços. O DATABASE_NAME argumento fornece o banco de dados usado para hospedar o mapa de estilhaços e SHARD_MAP_NAME é usado para o próprio mapa de estilhaços.
  • <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 DATABASE_NAME argumento.

Notas adicionais e orientações 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.

CREDENCIAL = credential_name

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

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

  • Para carregar dados do Armazenamento do Azure no Banco de Dados SQL do Azure, use uma Assinatura de Acesso Compartilhado (token SAS).
  • CREDENTIAL só é necessária 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 deve ser criada usando SHARED ACCESS SIGNATURE como a identidade.
  • Quando a conexão com o Armazenamento do Azure usa o conector WASB[s], a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma assinatura de acesso compartilhado (SAS).
  • Quando TYPE = HADOOP a credencial deve ser criada usando a chave da conta de armazenamento como o SECRET.
  • TYPE = BLOB_STORAGE só é permitida para operações a granel; Não é possível criar tabelas externas para uma fonte de dados externa com TYPE = BLOB_STORAGEo .

Há várias maneiras de criar uma assinatura de acesso compartilhado:

  • Você pode criar um token SAS navegando até o portal do Azure -><Your_Storage_Account> -> Assinatura de acesso compartilhado -> Configurar permissões -> Gerar SAS e cadeia de conexão. Para obter mais informações, consulte Gerar uma assinatura de acesso compartilhado.

  • Você pode criar e configurar uma SAS com o Gerenciador de Armazenamento do Azure.

  • Você pode criar um token SAS programaticamente por meio do PowerShell, CLI do Azure, .NET e API REST. Para obter mais informações, consulte Conceder acesso limitado aos recursos do Armazenamento do Azure usando assinaturas de acesso compartilhado (SAS).

  • O token SAS deve ser configurado da seguinte forma:

    • Quando um token SAS é gerado, ele inclui um ponto de interrogação ('?') no início do token. Exclua a entrelinha ? quando configurada como SECRET.
    • Use um período de expiração válido (todas as datas estão no horário UTC).
  • Conceda pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r). Várias assinaturas de acesso compartilhado podem ser criadas para diferentes casos de uso. As permissões devem ser concedidas da seguinte forma:

    Ação Permissão
    Ler dados de um ficheiro Leitura
    Ler dados de vários arquivos e subpastas Ler e Listar
    Usar Criar Tabela Externa como Selecionar (CETAS) Ler, criar e escrever

Para obter um exemplo de como usar um CREDENTIAL com SHARED ACCESS SIGNATURE e TYPE = BLOB_STORAGE, consulte 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 com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL.

TIPO = * [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER ] *

Especifica o tipo de fonte de dados externa que está sendo configurada. Esse parâmetro nem sempre é necessário e só deve ser fornecido para determinadas fontes de dados externas.

  • Use RDBMS para consultas entre bancos de dados usando 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.
  • O uso BLOB_STORAGE é apenas para uso com o prefixo https . Para abd e adls prefixos, não forneça TYPE.

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.

TIPO Valor da DATABASE_NAME
RDBMS O nome do banco de dados remoto no servidor fornecido usando LOCATION
SHARD_MAP_MANAGER Nome do banco de dados que opera como o gerenciador de mapas de estilhaços

Para obter um exemplo mostrando como criar uma fonte de dados externa onde TYPE = RDBMS, consulte Criar uma fonte de dados externa RDBMS.

SHARD_MAP_NAME = shard_map_name

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

Para obter um exemplo mostrando como criar uma fonte de dados externa, consulte TYPE = SHARD_MAP_MANAGERCriar uma fonte de dados externa do gerenciador de mapas de estilhaços

Permissões

Requer CONTROL permissão no banco de dados no Banco de Dados SQL do Azure.

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Exemplos

Um. Criar uma fonte de dados externa do gerenciador de mapas de estilhaços

Para criar uma fonte de dados externa para fazer referência a um SHARD_MAP_MANAGER, especifique o nome do servidor do Banco de dados SQL que hospeda o gerenciador de mapas de estilhaços no Banco de dados SQL ou 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, consulte Introdução às consultas elásticas para fragmentação (particionamento horizontal).

B. Criar uma fonte de dados externa RDBMS

Para criar uma fonte de dados externa para fazer referência a 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 RDBMS, consulte Introdução às consultas entre bancos de dados (particionamento vertical).

Exemplos: operações em massa

Importante

Não adicione parâmetros de assinatura à direita /, nome de arquivo ou acesso compartilhado no final da URL ao configurar uma fonte de LOCATION 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 usando BULK INSERT ou OPENROWSET BULK. A credencial deve ser definida SHARED ACCESS SIGNATURE como a identidade, não deve ter a entrelinha ? 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 expiração deve ser válido (todas as datas estão no horário UTC). Para obter mais informações sobre assinaturas de acesso compartilhado, consulte Usando assinaturas de acesso compartilhado (SAS).

Crie uma fonte de dados externa para o Armazenamento de Blobs do Azure (ABS) usando a Identidade Gerenciada:

CREATE DATABASE SCOPED CREDENTIAL DSC_MI
WITH IDENTITY = 'Managed Identity';

--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateABS
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = [DSC_MI]
);

Crie uma fonte de dados externa para o Azure Data Lake Gen2 (ADLS) usando a Identidade do Usuário:

CREATE DATABASE SCOPED CREDENTIAL DSC_ADLS
WITH IDENTITY = 'User Identity';

--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateADLS
WITH (
    LOCATION = 'adls://<container>@<storage_account_name>.dfs.core.windows.net/',
    CREDENTIAL = [DSC_ADLS]
);

Para ver este exemplo em uso, consulte BULK INSERT.

Exemplos: Azure SQL Edge

Importante

Para obter informações sobre como configurar dados externos para o Azure SQL Edge, consulte Streaming de dados no Azure SQL Edge.

Um. Criar fonte de dados externa para fazer referência a Kafka

Aplica-se a:Somente SQL Edgedo Azure

Neste exemplo, a fonte de dados externa é um servidor Kafka com endereço IP xxx.xxx.xxx.xxx e escutando na porta 1900. A fonte de dados externa Kafka é apenas para streaming de dados e não suporta predicado push down.

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

B. Criar fonte de dados externa para fazer referência ao EdgeHub

Aplica-se a:Somente SQL Edgedo Azure

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

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

* Sinapse do Azure
Análise *
 

Plataforma de análise
Sistema (PDW)

 

Visão geral: Azure Synapse Analytics

Aplica-se ao: Azure Synapse Analytics

Cria uma fonte de dados externa para virtualização de dados. As fontes de dados externas são usadas para estabelecer conectividade e dar suporte ao principal caso de uso da virtualização de dados e do carregamento de dados de fontes de dados externas. Para obter mais informações, consulte Usar tabelas externas com Synapse SQL.

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 consulta elástica, consulte CREATE EXTERNAL DATA SOURCE for Azure SQL Database.

Transact-SQL convenções de sintaxe

Sintaxe

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

Argumentos

data_source_name

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

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

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 localização
Armazenamento Data Lake* Gen1 adl <storage_account>.azuredatalake.net
Data Lake Storage Gen2 abfs[s] <container>@<storage_account>.dfs.core.windows.net
Armazenamento de Blobs do Azure wasbs <container>@<storage_account>.blob.core.windows.net
Armazenamento de Blobs do Azure https <storage_account>.blob.core.windows.net/<container>/subfolders
Data Lake Storage Gen1 http[s] <storage_account>.azuredatalakestore.net/webhdfs/v1
Data Lake Storage Gen2 http[s] <storage_account>.dfs.core.windows.net/<container>/subfolders
Data Lake Storage Gen2 wasb[s] <container>@<storage_account>.blob.core.windows.net

* O Microsoft Azure Data Lake Storage Gen1 tem suporte limitado, o Gen2 é recomendado para todos os novos desenvolvimentos.

Fonte de dados externa Prefixo de localização do conector Pools SQL dedicados: PolyBase Pools SQL dedicados: nativos* Conjuntos de SQL sem servidor
Armazenamento Data Lake** Gen1 adl Não Não Sim
Data Lake Storage Gen2 abfs[s] Sim Sim Sim
Armazenamento de Blobs do Azure wasbs Sim Sim*** Sim
Armazenamento de Blobs do Azure https Não Sim Sim
Data Lake Storage Gen1 http[s] Não Não Sim
Data Lake Storage Gen2 http[s] Sim Sim Sim
Data Lake Storage Gen2 wasb[s] Sim Sim Sim

* Os pools SQL dedicados e sem servidor no Azure Synapse Analytics usam diferentes bases de código para virtualização de dados. Os pools SQL sem servidor oferecem suporte a uma tecnologia nativa de virtualização de dados. Pools SQL dedicados oferecem suporte à virtualização de dados nativos e PolyBase. A virtualização de dados do PolyBase é usada quando a FONTE DE DADOS EXTERNA é criada com TYPE=HADOOP.

** O Microsoft Azure Data Lake Storage Gen1 tem suporte limitado, o Gen2 é recomendado para todos os novos desenvolvimentos.

O conector mais seguro wasbs é recomendado sobre wasb. Somente a virtualização de dados nativos em pools SQL dedicados (onde TYPE não é igual a HADOOP) suporta wasb.

Caminho de localização:

  • <container> = o recipiente da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, os dados não podem ser gravados de volta no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.

Notas adicionais e orientações ao definir o local:

  • A opção padrão é usar enable secure SSL connections ao provisionar o Azure Data Lake Storage Gen2. Quando isso está habilitado, você deve usar abfss quando uma conexão TLS/SSL segura é selecionada, embora abfss também funcione para conexões TLS não seguras. Para obter mais informações, consulte o driver do sistema de arquivos de Blob do Azure (ABFS).
  • 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 uma semântica de consulta consistente.
  • https: permite que você use subpasta no caminho. https não está disponível para todos os métodos de acesso a dados.
  • wasbs é recomendado, pois os dados serão enviados usando uma conexão TLS segura.
  • Não há suporte para Namespaces Hierárquicos com Contas de Armazenamento do Azure V2 ao acessar dados usando a interface herdada wasb:// , mas usando wasbs:// Namespaces Hierárquicos.

CREDENCIAL = credential_name

Opcional. Especifica uma credencial com escopo de banco de dados para autenticação na fonte de dados externa. A fonte de dados externa sem credencial pode acessar a conta de armazenamento público ou usar a identidade Microsoft Entra do chamador para acessar arquivos no armazenamento do Azure.

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

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

Para criar uma credencial com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL.

  • No pool SQL sem servidor, as credenciais com escopo de banco de dados podem especificar a identidade gerenciada do espaço de trabalho, o nome da entidade de serviço ou o token de assinatura de acesso compartilhado (SAS). O acesso por meio de uma identidade de usuário, também conhecida como passagem do Microsoft Entra, também é possível na credencial com escopo de banco de dados, assim como o acesso anônimo ao armazenamento disponível publicamente. Para obter mais informações, consulte Tipos de autorização de armazenamento suportados.

  • No pool SQL dedicado, as credenciais com escopo de banco de dados podem especificar token de assinatura de acesso compartilhado (SAS), chave de acesso de armazenamento, entidade de serviço, identidade gerenciada do espaço de trabalho ou passagem do Microsoft Entra.

TIPO = HADOOP

Opcional, não recomendado.

Você só pode especificar TYPE com pools SQL dedicados. HADOOP é o único valor permitido quando especificado. Fontes de dados externas com TYPE=HADOOP estão disponíveis apenas em pools SQL dedicados.

Use HADOOP para implementações herdadas, caso contrário, é recomendável usar o acesso a dados nativos mais recentes. Não especifique o argumento TYPE para usar o acesso a dados nativos mais recente.

Para obter um exemplo de uso TYPE = HADOOP para carregar dados do Armazenamento do Azure, consulte Criar fonte de dados externa para fazer referência ao Azure Data Lake Store Gen 1 ou 2 usando uma entidade de serviço.

Os pools SQL dedicados e sem servidor no Azure Synapse Analytics usam bases de código diferentes para virtualização de dados. Os pools SQL sem servidor oferecem suporte a uma tecnologia nativa de virtualização de dados. Pools SQL dedicados oferecem suporte à virtualização de dados nativos e PolyBase. A virtualização de dados do PolyBase é usada quando a FONTE DE DADOS EXTERNA é criada com TYPE=HADOOP.

Permissões

Requer permissão CONTROL no banco de dados.

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Segurança

A maioria das fontes de dados externas oferece suporte à autenticação baseada em proxy, usando uma credencial com escopo de banco de dados para criar a conta proxy.

As chaves SAS (Assinatura de Acesso Compartilhado) são suportadas para autenticação em Contas de Armazenamento do Azure Data Lake Store Gen 2. Os clientes que desejam autenticar usando uma Assinatura de Acesso Compartilhado devem criar uma credencial com escopo de banco de dados onde IDENTITY = "Shared Access Signature" e inserir um token SAS como o segredo.

Se você criar uma credencial com escopo de banco de dados onde IDENTITY = "Shared Access Signature" e usar um valor de chave de armazenamento como o segredo, você receberá a seguinte mensagem de erro:

'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'

Exemplos

Um. 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 contentor de armazenamento chama-se daily. A fonte de dados externa do Armazenamento do Azure é apenas para transferência de dados. Não suporta push-down de predicados. Namespaces hierárquicos não são suportados ao acessar dados por meio da wasb:// interface. Ao conectar-se ao Armazenamento do Azure via wasb ou wasbs, a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma assinatura de acesso compartilhado (SAS).

Este exemplo usa o método de acesso baseado em Java HADOOP herdado. O exemplo a seguir mostra como criar a credencial com escopo de banco de dados para autenticação no Armazenamento do Azure. Especifique a chave da conta de Armazenamento do Azure no segredo de credenciais do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade de credenciais com escopo de banco de dados, pois ela não é 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 (
    TYPE = HADOOP,
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential
);

B. Criar fonte de dados externa para fazer referência ao Azure Data Lake Store Gen 1 ou 2 usando uma entidade de serviço

A conectividade do Repositório Azure Data Lake pode ser baseada no URI do ADLS e na entidade de serviço do aplicativo Microsoft Entra. A documentação para criar este aplicativo pode ser encontrada em Autenticação de armazenamento de data lake usando o Microsoft Entra ID.

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

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

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

-- For Gen2 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
    -- Note the abfss endpoint when your account has secure transfer enabled
    TYPE = HADOOP,
    LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net',
    CREDENTIAL = ADLS_credential
);

C. Criar fonte de dados externa para fazer referência ao Azure Data Lake Store Gen2 usando a chave da 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 Gen2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE < data_source_name >
WITH (
    LOCATION = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net',
    CREDENTIAL = ADLS_credential,
    TYPE = HADOOP
);

D. Criar fonte de dados externa para o Azure Data Lake Store Gen2 usando abfs://

Não é necessário especificar SECRET quando se liga à conta Azure Data Lake Store Gen2 com identidades geridas.

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

* Análise
Sistema de plataforma (PDW) *
 

 

Visão geral: Analytics Platform System

Aplica-se a: Analytics Platform System (PDW)

Cria uma fonte de dados externa para consultas PolyBase. Fontes de dados externas são usadas para estabelecer conectividade e suportar o seguinte caso de uso: virtualização de dados e carga de dados usando PolyBase no SQL Server.

Transact-SQL convenções de sintaxe

Sintaxe

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 definido pelo usuário para a fonte de dados. O nome deve ser exclusivo dentro do servidor no Analytics Platform System (PDW).

LOCATION = '<prefix>://<path[:p ort]>'

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 localização
Cloudera CDH ou Hortonworks HDP hdfs <Namenode>[:port]
Conta de armazenamento do Azure wasb[s] <container>@<storage_account>.blob.core.windows.net

Caminho de localização:

  • <Namenode> = o nome da máquina, o URI do serviço de nome ou o endereço IP do Namenode cluster Hadoop. O PolyBase deve resolver todos os nomes DNS usados pelo cluster Hadoop.
  • port = A porta na qual a fonte de dados externa está escutando. No Hadoop, a porta pode ser encontrada usando o fs.defaultFS parâmetro configuration. O padrão é 8020.
  • <container> = o recipiente da conta de armazenamento que contém os dados. Os contêineres raiz são somente leitura, os dados não podem ser gravados de volta no contêiner.
  • <storage_account> = o nome da conta de armazenamento do recurso do Azure.

Notas adicionais e orientações ao definir o local:

  • O mecanismo 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 uma 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 PolyBase bem-sucedidas durante um failover do Hadoop Namenode , considere o uso de um endereço IP virtual para o Namenode cluster Hadoop. Caso contrário, execute ALTER EXTERNAL DATA SOURCE para apontar para o novo local.

CREDENCIAL = credential_name

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

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

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

TIPO = * [ HADOOP ] *

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

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

Para obter um exemplo de uso TYPE = HADOOP para carregar dados do Armazenamento do Azure, consulte Criar fonte de dados externa para fazer referência ao Hadoop.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

No SQL Server 2019 (15.x), não especifique RESOURCE_MANAGER_LOCATION a menos que se conecte ao Cloudera CDH, Hortonworks HDP, uma conta de Armazenamento do Azure.

Configure esse valor opcional ao se conectar apenas ao Cloudera CDH, Hortonworks HDP ou a uma conta de Armazenamento do Azure. Para obter uma lista completa das versões do Hadoop suportadas, consulte Configuração de conectividade do PolyBase.

Quando o é definido, o otimizador de consulta toma uma decisão baseada em custos para melhorar o RESOURCE_MANAGER_LOCATION desempenho. Um trabalho MapReduce pode ser usado para empurrar a computação para o Hadoop. Especificar o RESOURCE_MANAGER_LOCATION pode reduzir significativamente o volume de dados transferidos entre Hadoop e SQL, o que pode levar a um melhor desempenho da consulta.

Se o Gerenciador de Recursos não for especificado, o envio de computação para o Hadoop será desabilitado para consultas PolyBase. Criar fonte de dados externa para fazer referência ao Hadoop com push-down habilitado fornece um exemplo concreto e orientações adicionais.

O valor RESOURCE_MANAGER_LOCATION não é validado quando você cria a fonte de dados externa. Inserir um valor incorreto pode causar falha de consulta no momento da execução sempre que o push-down é tentado, pois o valor fornecido não seria capaz de resolver.

Para que o PolyBase funcione corretamente com uma fonte de dados externa do Hadoop, as portas dos seguintes componentes de cluster do Hadoop devem estar abertas:

  • Portas HDFS
    • Nomenode
    • Datanode
  • Gestor de Recursos
    • Submissão de trabalho
  • Histórico do trabalho

Se a porta não for especificada, o valor padrão será escolhido usando a configuração atual para a configuração de 'conectividade hadoop'.

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

A tabela a seguir mostra as portas padrão para esses componentes. Há dependência de versão do Hadoop, bem como a possibilidade de configuração personalizada que não usa a atribuição de porta padrão.

Componente de cluster Hadoop Porta padrão
NomeNode 8020
DataNode (Transferência de dados, porta IPC sem privilégio) 50010
DataNode (transferência de dados, porta IPC de privilégio) 1019
Submissão de trabalho do Resource Manager (Hortonworks 1.3) 50300
Envio de trabalho do Resource Manager (Cloudera 4.3) 8021
Submissão de trabalho do Resource Manager (Hortonworks 2.0 no Windows, Cloudera 5.x no Linux) 8032
Submissão de trabalho do Resource Manager (Hortonworks 2.x, 3.0 no Linux, Hortonworks 2.1-3 no Windows) 8050
Histórico de trabalhos do Resource Manager 10020

Permissões

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

Observação

Em versões anteriores do PDW, crie permissões necessárias ALTER ANY EXTERNAL DATA SOURCE para a fonte de dados externa.

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Segurança

O PolyBase suporta autenticação baseada em proxy para a maioria das fontes de dados externas. Crie uma credencial com escopo de banco de dados para criar a conta proxy.

Não há suporte para um token SAS com tipo HADOOP . Ele só é suportado com type = BLOB_STORAGE quando uma chave de acesso da conta de armazenamento é usada. A tentativa de criar uma fonte de dados externa com 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 aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'

Exemplos

Um. Criar fonte de dados externa para fazer referência ao Hadoop

Para criar uma fonte de dados externa para fazer referência ao seu Hortonworks HDP ou Cloudera CDH, especifique o nome da máquina ou o endereço IP do Hadoop Namenode e da porta.

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

B. Criar fonte de dados externa para fazer referência ao Hadoop com push-down habilitado

Especifique a opção para habilitar a RESOURCE_MANAGER_LOCATION computação push-down no Hadoop para consultas PolyBase. Uma vez habilitado, o PolyBase toma uma decisão baseada em custos para determinar se a computação da consulta deve ser enviada por push para o Hadoop.

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

C. Criar fonte de dados externa para fazer referência ao Hadoop protegido por Kerberos

Para verificar se o cluster Hadoop está protegido por Kerberos, verifique o valor da hadoop.security.authentication propriedade no Hadoop core-site.xml. Para fazer referência a um cluster Hadoop protegido por Kerberos, você deve especificar uma credencial com escopo de banco de dados que contenha seu nome de usuário e senha Kerberos. A chave mestra do banco de dados é usada para criptografar o segredo de credenciais com 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 (
    TYPE = HADOOP,
    LOCATION = 'hdfs://10.10.10.10:8050',
    CREDENTIAL = HadoopUser1,
    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 contentor de armazenamento chama-se daily. A fonte de dados externa do Armazenamento do Azure é apenas para transferência de dados. Não suporta push-down de predicados. Namespaces hierárquicos não são suportados ao acessar dados por meio da wasb:// interface. Ao conectar-se ao Armazenamento do Azure via wasb ou wasbs, a autenticação deve ser feita com uma chave de conta de armazenamento, não com uma assinatura de acesso compartilhado (SAS).

Este exemplo mostra como criar a credencial com escopo de banco de dados para autenticação no armazenamento do Azure. Especifique a chave da conta de armazenamento do Azure no segredo de credenciais do banco de dados. Você pode especificar qualquer cadeia de caracteres na identidade de credenciais com escopo de banco de dados, pois ela não é 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 (
    TYPE = HADOOP,
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential
);

* Instância gerenciada SQL *  

Plataforma de análise
Sistema (PDW)

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

Aplica-se a: Instância Gerenciada SQL do Azure

Cria uma fonte de dados externa na Instância Gerenciada SQL do Azure. Para obter informações completas, consulte Virtualização de dados com a Instância Gerenciada SQL do Azure.

A virtualização de dados na Instância Gerenciada SQL do Azure fornece acesso a dados externos em uma variedade de formatos de arquivo por meio de OPENROWSET ou CREATE EXTERNAL TABLE.

Transact-SQL convenções de sintaxe

Sintaxe

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

Argumentos

data_source_name

Especifica o nome definido pelo usuário para a fonte de dados. O nome deve ser exclusivo dentro do banco de dados.

LOCATION = '<prefix>://<path[:p ort]>'

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

Fonte de dados externa Prefixo de localização Caminho de localização
Armazenamento de Blobs do Azure abs abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>
Azure Data Lake Service Gen2 adls adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>

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.

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

CREDENCIAL = credential_name

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

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

  • Para carregar dados do Armazenamento do Azure na Instância Gerenciada SQL do Azure, use uma Assinatura de Acesso Compartilhado (token SAS).
  • CREDENTIAL só é necessária se os dados tiverem sido protegidos. CREDENTIAL não é necessário para conjuntos de dados que permitem acesso anônimo.
  • Se uma credencial for necessária, ela deverá ser criada usando Managed Identity ou SHARED ACCESS SIGNATURE como IDENTITY. Para criar uma credencial com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL.

Para usar a identidade do serviço gerenciado para a credencial de escopo do banco de dados:

  • Especificar WITH IDENTITY = 'Managed Identity'

  • Use a identidade de serviço gerenciado atribuída pelo sistema da Instância Gerenciada SQL do Azure, que deve ser habilitada se quiser ser usada para essa finalidade.

    • Conceda a função RBAC do Azure Reader à identidade de serviço gerenciado atribuída ao sistema da Instância Gerenciada SQL do Azure para os contêineres de Armazenamento de Blob do Azure necessários. Por exemplo, por meio do portal do Azure, consulte Atribuir funções do Azure usando o portal do Azure.

Para criar uma assinatura de acesso compartilhado (SAS) para a credencial com escopo do banco de dados:

  • Especificar WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...

  • Há várias maneiras de criar uma assinatura de acesso compartilhado:

  • O token SAS deve ser configurado da seguinte forma:

    • Quando um token SAS é gerado, ele inclui um ponto de interrogação ('?') no início do token. Exclua a entrelinha ? quando configurada como SECRET.
    • Use um período de expiração válido (todas as datas estão no horário UTC).
  • Conceda pelo menos permissão de leitura no arquivo que deve ser carregado (por exemplo srt=o&sp=r). Várias assinaturas de acesso compartilhado podem ser criadas para diferentes casos de uso. As permissões devem ser concedidas da seguinte forma:

    Ação Permissão
    Ler dados de um ficheiro Leitura
    Ler dados de vários arquivos e subpastas Ler e Listar
    Usar Criar Tabela Externa como Selecionar (CETAS) Ler, criar e escrever

Permissões

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

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Exemplos

Para obter mais exemplos, consulte Virtualização de dados com a Instância Gerenciada SQL do Azure.

Um. Consultar dados externos da Instância Gerenciada SQL do Azure com OPENROWSET ou uma tabela externa

Para obter mais exemplos, consulte CREATE EXTERNAL DATA SOURCE ou consulte Data virtualization with Azure SQL Managed Instance.

  1. Crie a chave mestra do banco de dados, se ela não existir.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>'
    GO
    
  2. Crie a credencial com escopo do banco de dados usando um token SAS. Você também pode usar uma identidade gerenciada.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<KEY>' ; --Removing leading '?'
    GO
    
  3. Crie a fonte de dados externa usando a credencial.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest',
        CREDENTIAL = [MyCredential]
    );
    
  4. Consulta arquivo de dados de parquet na fonte de dados externa usando a sintaxe OPENROWSET T-SQL, confiando na inferência de esquema para explorar rapidamente os dados sem conhecer o esquema.

    --Query data with OPENROWSET, relying on schema inference.
    SELECT TOP 10 *
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.parquet',
        DATA_SOURCE = 'MyExternalDataSource',
        FORMAT = 'parquet'
    ) AS filerows;
    
  5. Ou, consulte dados usando OPENROWSET a cláusula WITH, em vez de confiar na inferência de esquema, que pode consultar o custo de execução. Em um CSV, a inferência de esquema não é suportada.

    --Or, query data using the WITH clause on a CSV, where schema inference is not supported
    SELECT TOP 10 id,
                  updated,
                  confirmed,
                  confirmed_change
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.csv',
        DATA_SOURCE = 'MyExternalDataSource',
        FORMAT = 'CSV', FIRSTROW = 2
    ) WITH (
        id INT,
        updated DATE,
        confirmed INT,
        confirmed_change INT
    ) AS filerows;
    
  6. Ou crie um FORMATO DE ARQUIVO EXTERNO e uma TABELA EXTERNA, para consultar os dados como uma tabela local.

    -- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE
    --Create external file format
    CREATE EXTERNAL FILE FORMAT DemoFileFormat
    WITH (FORMAT_TYPE = PARQUET)
    GO
    
    --Create external table:
    CREATE EXTERNAL TABLE tbl_TaxiRides (
        vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
        tpepPickupDateTime DATETIME2,
        tpepDropoffDateTime DATETIME2,
        passengerCount INT,
        tripDistance FLOAT,
        puLocationId VARCHAR(8000),
        doLocationId VARCHAR(8000),
        startLon FLOAT,
        startLat FLOAT,
        endLon FLOAT,
        endLat FLOAT,
        rateCodeId SMALLINT,
        storeAndFwdFlag VARCHAR(8000),
        paymentType VARCHAR(8000),
        fareAmount FLOAT,
        extra FLOAT,
        mtaTax FLOAT,
        improvementSurcharge VARCHAR(8000),
        tipAmount FLOAT,
        tollsAmount FLOAT,
        totalAmount FLOAT
    )
    WITH (
        LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
        DATA_SOURCE = NYCTaxiExternalDataSource,
        FILE_FORMAT = MyFileFormat\.\./\.\./\.\./azure-sql/
    );
    GO
    
    --Then, query the data via an external table with T-SQL:
    SELECT TOP 10 *
    FROM tbl_TaxiRides;
    GO
    

Plataforma de análise
Sistema (PDW)

*Microsoft Fabric Data Warehouse*

Visão geral: Microsoft Fabric Data Warehouse

Aplica-se a: Fabric Data Warehouse

Cria uma fonte de dados externa.

Transact-SQL convenções de sintaxe

Sintaxe

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( LOCATION = '<prefix>://<path>[:<port>]' )
[ ; ]

Argumentos

data_source_name

Especifica o nome definido pelo usuário para a fonte de dados. O nome deve ser exclusivo dentro do banco de dados.

LOCATION = '<prefix>://<path[:p ort]>'

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

Fonte de dados externa Prefixo de localização Caminho de localização
Armazenamento de Blobs do Azure https https://<storage_account>.blob.core.windows.net/<container>/<path>
Azure Data Lake Service Gen2 abfss abfss://<container>@<storage_account>.dfs.core.windows.net/<path>

O Mecanismo de Banco de Dados não verifica a existência da fonte de dados externa quando o objeto é criado.

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

Permissões

Se a conta de armazenamento de destino for privada, a entidade de segurança também deverá ter a permissão para ler os arquivos referenciados.

  • Para o Armazenamento Azure Data Lake e o Armazenamento de Blobs do Azure, a entidade de segurança deve ter a função de Leitor de Dados de Blob de Armazenamento (ou superior) atribuída no nível da conta de contêiner ou armazenamento.
  • Para armazenamento do Fabric One Lake, a entidade de segurança deve ter permissões "ReadAll".

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Exemplos

Um. Consultar dados externos com OPENROWSET ou uma tabela externa

  1. Crie a fonte de dados externa.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest'
    );
    
  2. Consulta arquivo de dados de parquet na fonte de dados externa usando a sintaxe OPENROWSET T-SQL, confiando na inferência de esquema para explorar rapidamente os dados sem conhecer o esquema.

    --Query data with OPENROWSET, relying on schema inference.
    SELECT TOP 10 *
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.parquet',
        DATA_SOURCE = 'MyPrivateExternalDataSource'
    );
    
  3. Ou, consulte dados usando OPENROWSET a cláusula WITH, em vez de confiar na inferência de esquema, que pode consultar o custo de execução.

    --Or, query data using the WITH clause on a CSV, where schema inference is not supported
    SELECT TOP 10 id,
        updated,
        confirmed,
        confirmed_change
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyPrivateExternalDataSource'
        FIRSTROW = 2
    ) WITH (
        id INT,
        updated DATE,
        confirmed INT,
        confirmed_change INT
    ) AS filerows;
    

Plataforma de análise
Sistema (PDW)

* Base de dados SQL Fabric *  

 

Visão geral: Base de dados SQL no Microsoft Fabric

Aplica-se a: base de dados SQL no Microsoft Fabric

Cria uma fonte de dados externa para virtualização de dados em base de dados SQL no Fabric.

Transact-SQL convenções de sintaxe

Sintaxe

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

Argumentos

data_source_name

Especifica o nome definido pelo usuário para a fonte de dados. O nome deve ser exclusivo dentro do banco de dados.

LOCATION = '<prefix>://<path[:p ort]>'

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

A base de dados SQL Fabric só suporta OneLake (abfss) como fonte de dados.

Fonte de dados externa Prefixo de localização do conector Caminho de localização Disponibilidade
OneLake abfss abfss://<workspaceid>@<tenant>.dfs.fabric.microsoft.com/ Banco de dados SQL de malha

Notas adicionais e orientações 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.

Permissões

Requer CONTROL permissão no banco de dados no Banco de Dados SQL do Azure.

Bloqueio

Usa um bloqueio compartilhado no EXTERNAL DATA SOURCE objeto.

Exemplos

Um. Criar uma fonte de dados externa para uma pasta de ficheiros Lakehouse

Este exemplo envolve ligar uma fonte de dados externa chamada MyLakeHouse a um Lakehouse para aceder a ficheiros Parquet e CSV que tenham sido carregados. Estes ficheiros neste exemplo encontram-se dentro do Files diretório sob a Contoso pasta.

Para criar uma fonte de dados Fabric Lakehouse, precisa de fornecer o ID do espaço de trabalho, o inquilino e o ID da casa do lago. Para encontrar a localização do ficheiro ABFSS de uma casa de lago, vá ao portal Fabric. Navegue até à sua Casa do Lago, navegue até à localização da pasta desejada, selecione ..., Propriedades. Copie o caminho ABFS, que se assemelha a isto: abfss://<WorkSpaceID>@<Tenant>.dfs.fabric.microsoft.com/<LakehouseID>/Files/Contoso.

Como a base de dados Fabric SQL apenas suporta autenticação Entra ID Passthrough, não é necessário fornecer credencial com âmbito de base de dados, a ligação usará sempre as credenciais de login do utilizador para aceder à localização.

CREATE EXTERNAL DATA SOURCE MyLakeHouse 
WITH (
 LOCATION = 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso'
);