Tutorial: Carregar dados externos usando uma identidade gerenciada
Este artigo explica como criar tabelas externas ou ingerir dados de contas Gen2 do Azure Data Lake Storage (ADLS) usando uma identidade gerenciada.
Pré-requisitos
Os seguintes recursos são necessários para concluir este tutorial:
- Uma conta do Azure Data Lake Storage (ADLS) Gen2
- Um espaço de trabalho do Azure Synapse Analytics e um pool SQL dedicado
Dê à identidade do espaço de trabalho acesso à conta de armazenamento
Cada espaço de trabalho do Azure Synapse Analytics cria automaticamente uma identidade gerenciada que ajuda você a configurar o acesso seguro a dados externos do seu espaço de trabalho. Para saber mais sobre identidades gerenciadas para o Azure Synapse Analytics, visite Identidade de serviço gerenciado para o Azure Synapse Analytics.
Para permitir que sua identidade gerenciada acesse dados em contas ADLS Gen2, você precisa conceder acesso à sua identidade à conta de origem. Para conceder permissões adequadas, siga estas etapas:
- No portal do Azure, localize sua conta de armazenamento.
- Selecione Armazenamento de dados -> Contêineres e navegue até a pasta onde estão os dados de origem aos quais a tabela externa precisa acessar.
- Selecione Controlo de acesso (IAM) .
- Selecione Adicionar -> Adicionar atribuição de função.
- Na lista de funções de função, selecione Colaborador de Dados de Blob de Armazenamento e selecione Avançar.
- Na página Adicionar atribuição de função, selecione + Selecionar membros. O painel Selecionar membros é aberto.
- Digite o nome da identidade do seu espaço de trabalho. A identidade do espaço de trabalho é a mesma que o nome do espaço de trabalho. Quando exibido, escolha a identidade do espaço de trabalho e, em seguida , Selecionar.
- Na página Adicionar atribuição de função, verifique se a lista de Membros inclui sua conta desejada do Microsoft Entra ID. Depois de verificado, selecione Rever + atribuir.
- Na página de confirmação, reveja as alterações e selecione Rever + atribuir.
Sua identidade de espaço de trabalho agora é membro da função de Colaborador de Dados de Blob de Armazenamento e tem acesso à pasta de origem.
Nota
Essas etapas também se aplicam a contas ADLS Gen2 seguras configuradas para restringir o acesso público. Para saber mais sobre como proteger sua conta ADLS Gen2, consulte Configurar firewalls de armazenamento do Azure e redes virtuais.
Ingerir dados usando COPY INTO
A instrução T-SQL COPY INTO
fornece ingestão de dados flexível e de alta taxa de transferência em suas tabelas e é a principal estratégia para ingerir dados em suas tabelas de pool SQL dedicadas. COPY INTO
Permite que os usuários ingeram dados de locais externos sem ter que criar nenhum dos objetos de banco de dados adicionais necessários para tabelas externas.
Para executar a COPY INTO
instrução usando uma identidade gerenciada de espaço de trabalho para autenticação, use o seguinte comando T-SQL:
COPY INTO <TableName>
FROM 'https://<AccountName>.dfs.core.windows.net/<Container>/<Folder>/ '
WITH
(
CREDENTIAL = (IDENTITY = 'Managed Identity'),
[<CopyIntoOptions>]
);
Em que:
<TableName>
é o nome da tabela para ingerir dados em<AccountName>
é o nome da sua conta ADLS Gen2<Container>
é o nome do contêiner em sua conta de armazenamento onde os dados de origem são armazenados<Folder>
é a pasta (ou caminho com subpastas) onde os dados de origem são armazenados dentro do contêiner. Você também pode fornecer um nome de arquivo se apontar diretamente para um único arquivo.<CopyIntoOptions>
é a lista de quaisquer outras opções que você deseja fornecer à declaração COPY INTO.
Para saber mais e explorar a sintaxe completa de COPY INTO, consulte COPY INTO (Transact-SQL).
Consultar dados no ADLS Gen2 usando tabelas externas
As tabelas externas permitem que os usuários consultem dados de contas Gen2 do Azure Data Lake Storage (ADLS) sem a necessidade de ingerir dados primeiro. Os usuários podem criar uma tabela externa que aponta para arquivos em um contêiner ADLS Gen2 e consultá-la como uma tabela de usuário comum.
As etapas a seguir descrevem o processo para criar uma nova tabela externa apontando para dados no ADLS Gen2, usando uma identidade gerenciada para autenticação.
Criar os objetos de banco de dados necessários
As tabelas externas exigem que os seguintes objetos sejam criados:
- Uma chave mestra de banco de dados que criptografa o segredo da credencial com escopo do banco de dados
- Uma credencial com escopo de banco de dados que usa sua identidade de espaço de trabalho
- Uma fonte de dados externa que aponta para a pasta de origem
- Um formato de arquivo externo que define o formato dos arquivos de origem
- Uma definição de tabela externa que é usada para consultas
Para seguir estas etapas, use o editor SQL no Espaço de Trabalho Synapse do Azure ou seu cliente SQL preferido conectado ao seu SQL Pool dedicado. Vejamos essas etapas em detalhes.
Criar a chave mestra do banco de dados
A chave mestra do banco de dados é uma chave simétrica usada para proteger as chaves privadas de certificados e chaves assimétricas presentes no banco de dados e segredos nas credenciais com escopo do banco de dados. Se já houver uma chave mestra no banco de dados, não será necessário criar uma nova. Substitua <Secure Password>
por uma senha segura. Essa senha é usada para criptografar a chave mestra no banco de dados.
Para criar uma chave mestra, use o seguinte comando T-SQL:
-- Replace <Secure Password> with a secure password
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Secure Password>';
Para saber mais sobre a chave mestra do banco de dados, consulte CREATE MASTER KEY (Transact-SQL).
Criar a credencial com escopo do banco de dados
Uma credencial com escopo de banco de dados usa sua identidade de espaço de trabalho e é necessária para acessar o local externo sempre que a tabela externa exigir acesso aos dados de origem.
Para criar a credencial com escopo do banco de dados, use o comando a seguir. Substitua <CredentialName>
pelo nome que você gostaria de usar para sua credencial de escopo de banco de dados.
CREATE DATABASE SCOPED CREDENTIAL <CredentialName> WITH IDENTITY = 'Managed Service Identity';
Para saber mais sobre credenciais com escopo de banco de dados, consulte CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Criar a fonte de dados externa
A próxima etapa é criar uma fonte de dados externa que especifique onde residem os dados de origem usados pela tabela externa.
Para criar a fonte de dados externa, use o seguinte comando T-SQL:
CREATE EXTERNAL DATA SOURCE <ExternalDataSourceName>
WITH (
TYPE = HADOOP,
LOCATION = 'abfss://<Container>@<AccountName>.dfs.core.windows.net/<Folder>/,
CREDENTIAL = <CredentialName>
);
Em que:
<ExternalDataSourceName>
é o nome que você deseja usar para sua fonte de dados externa.<AccountName>
é o nome da sua conta ADLS Gen2.<Container>
é o nome do contêiner em sua conta de armazenamento onde os dados de origem são armazenados.<Folder>
é a pasta (ou caminho com subpastas) onde os dados de origem são armazenados dentro do contêiner. Você também pode fornecer um nome de arquivo se apontar diretamente para um único arquivo.<Credential>
é o nome da credencial de escopo do banco de dados criada anteriormente.
Para saber mais sobre fontes de dados externas, consulte CREATE EXTERNAL DATA SOURCE (Transact-SQL).
Criar o formato de arquivo externo
O próximo passo é criar o formato de arquivo externo. Ele especifica o layout real dos dados referenciados pela tabela externa.
Para criar o formato de arquivo externo, use o seguinte comando T-SQL. Substitua <FileFormatName>
pelo nome que você deseja usar para seu formato de arquivo externo.
CREATE EXTERNAL FILE FORMAT <FileFormatName>
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (
FIELD_TERMINATOR = ',',
STRING_DELIMITER = '"',
FIRST_ROW = 2,
USE_TYPE_DEFAULT = True
)
);
Neste exemplo, ajuste parâmetros como FIELD_TERMINATOR
, STRING_DELIMITER
, FIRST_ROW
e outros, conforme necessário, de acordo com seus dados de origem. Para obter mais opções de formatação e saber mais sobre EXTERNAL FILE FORMAT
o , consulte CREATE EXTERNAL FILE FORMAT.
Criar a tabela externa
Agora que todos os objetos necessários que contêm os metadados para acessar dados externos com segurança foram criados, é hora de criar a tabela externa. Para criar a tabela externa, use o seguinte comando T-SQL:
-- Adjust the table name and columns to your desired name and external table schema
CREATE EXTERNAL TABLE <ExternalTableName> (
Col1 INT,
Col2 NVARCHAR(100),
Col4 INT
)
WITH
(
LOCATION = '<Path>',
DATA_SOURCE = <ExternalDataSourceName>,
FILE_FORMAT = <FileFormatName>
);
Em que:
<ExternalTableName>
é o nome que você deseja usar para sua tabela externa.<Path>
é o caminho dos dados de origem, relativo ao local especificado na fonte de dados externa.<ExternalDataSourceName>
é o nome da fonte de dados externa criada anteriormente.<FileFormatName>
é o nome do formato de arquivo externo que você criou anteriormente.
Certifique-se de ajustar o nome da tabela e o esquema para o nome desejado e o esquema dos dados em seus arquivos de origem.
Neste ponto, todos os metadados necessários para acessar a tabela externa são criados. Para testar sua tabela externa, use uma consulta como o seguinte exemplo de T-SQL para validar seu trabalho:
SELECT TOP 10 Col1, Col2 FROM <ExternalTableName>;
Se tudo estiver configurado corretamente, você deverá ver os dados dos dados de origem como resultado dessa consulta.
Para saber mais e explorar a sintaxe completa do CREATE EXTERNAL TABLE
, consulte CREATE EXTERNAL TABLE (Transact-SQL).