Copiar dados de e para o armazenamento de tabelas do Azure usando o Azure Data Factory ou o Synapse Analytics

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!

Este artigo descreve como usar a Atividade de Cópia no Azure Data Factory e nos pipelines do Synapse Analytics para copiar dados de e para o armazenamento de Tabela do Azure. Ele se baseia no artigo de visão geral da atividade de cópia que apresenta uma visão geral da atividade de cópia.

Nota

Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Capacidades suportadas

Este conector de armazenamento de Tabela do Azure tem suporte para os seguintes recursos:

Capacidades suportadas IR Ponto final privado gerido
Atividade de cópia (origem/coletor) (1) (2) ✓ Excluir conta de armazenamento V1
Atividade de Pesquisa (1) (2) ✓ Excluir conta de armazenamento V1

(1) Tempo de execução de integração do Azure (2) Tempo de execução de integração auto-hospedado

Você pode copiar dados de qualquer armazenamento de dados de origem suportado para o armazenamento de tabela. Você também pode copiar dados do armazenamento de tabela para qualquer armazenamento de dados de coletor suportado. Para obter uma lista de armazenamentos de dados suportados como fontes ou coletores pela atividade de cópia, consulte a tabela Armazenamentos de dados suportados.

Especificamente, esse conector de Tabela do Azure dá suporte à cópia de dados usando autenticações de chave de conta e assinatura de acesso compartilhado de serviço.

Começar agora

Para executar a atividade Copiar com um pipeline, você pode usar uma das seguintes ferramentas ou SDKs:

Criar um serviço vinculado de armazenamento de Tabela do Azure usando a interface do usuário

Use as etapas a seguir para criar um serviço vinculado de armazenamento de tabela do Azure na interface do usuário do portal do Azure.

  1. Navegue até a guia Gerenciar em seu espaço de trabalho do Azure Data Factory ou Synapse e selecione Serviços Vinculados e clique em Novo:

  2. Procure Tabela do Azure e selecione o conector de armazenamento da Tabela do Azure.

    Captura de ecrã do conector de armazenamento da Tabela do Azure.

  3. Configure os detalhes do serviço, teste a conexão e crie o novo serviço vinculado.

    Captura de tela da configuração de um serviço vinculado de armazenamento de Tabela do Azure.

Detalhes de configuração do conector

As seções a seguir fornecem detalhes sobre propriedades que são usadas para definir entidades específicas para o armazenamento de Tabela do Azure.

Propriedades do serviço vinculado

Este conector de Armazenamento de Tabela do Azure dá suporte aos seguintes tipos de autenticação. Consulte as seções correspondentes para obter detalhes.

Autenticação da chave de conta

Você pode criar um serviço vinculado do Armazenamento do Azure usando a chave da conta. Ele fornece o serviço com acesso global ao armazenamento. As seguintes propriedades são suportadas.

Property Descrição Obrigatório
tipo A propriedade type deve ser definida como AzureTableStorage. Sim
connectionString Especifique as informações necessárias para se conectar ao Storage para a propriedade connectionString.
Você também pode colocar a chave da conta no Cofre de Chaves do Azure e extrair a accountKey configuração da cadeia de conexão. Consulte os seguintes exemplos e o artigo Armazenar credenciais no Cofre de Chaves do Azure com mais detalhes.
Sim
ConecteVia O tempo de execução de integração a ser usado para se conectar ao armazenamento de dados. Você pode usar o Azure Integration Runtime ou o Self-hosted Integration Runtime (se o armazenamento de dados estiver localizado em uma rede privada). Se não for especificado, ele usará o Tempo de Execução de Integração do Azure padrão. Não

Nota

Se você estava usando o serviço vinculado do tipo "AzureStorage", ele ainda é suportado no estado em que se encontra, enquanto é sugerido que você use esse novo tipo de serviço vinculado "AzureTableStorage" no futuro.

Exemplo:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo: armazenar a chave da conta no Cofre da Chave do Azure

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;",
            "accountKey": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Autenticação de assinatura de acesso compartilhado

Você também pode criar um serviço vinculado de armazenamento usando uma assinatura de acesso compartilhado. Ele fornece ao serviço acesso restrito/limitado por tempo a todos/recursos específicos no armazenamento.

Uma assinatura de acesso compartilhado fornece acesso delegado aos recursos em sua conta de armazenamento. Você pode usá-lo para conceder a um cliente permissões limitadas para objetos em sua conta de armazenamento por um tempo especificado e com um conjunto especificado de permissões. Não tem de partilhar as chaves de acesso da sua conta. A assinatura de acesso compartilhado é um URI que engloba em seus parâmetros de consulta todas as informações necessárias para o acesso autenticado a um recurso de armazenamento. Para acessar recursos de armazenamento com a assinatura de acesso compartilhado, o cliente só precisa passar a assinatura de acesso compartilhado para o construtor ou método apropriado. Para obter mais informações sobre assinaturas de acesso compartilhado, consulte Assinaturas de acesso compartilhado: entenda o modelo de assinatura de acesso compartilhado.

Nota

As assinaturas de acesso compartilhado de serviço e as assinaturas de acesso compartilhado de conta agora são suportadas. Para obter mais informações sobre assinaturas de acesso compartilhado, consulte Conceder acesso limitado aos recursos do Armazenamento do Azure usando assinaturas de acesso compartilhado (SAS).

Gorjeta

Para gerar uma assinatura de acesso compartilhado de serviço para sua conta de armazenamento, você pode executar os seguintes comandos do PowerShell. Substitua os espaços reservados e conceda a permissão necessária. $context = New-AzStorageContext -StorageAccountName <accountName> -StorageAccountKey <accountKey> New-AzStorageContainerSASToken -Name <containerName> -Context $context -Permission rwdl -StartTime <startTime> -ExpiryTime <endTime> -FullUri

Para usar a autenticação de assinatura de acesso compartilhado, as seguintes propriedades são suportadas.

Property Descrição Obrigatório
tipo A propriedade type deve ser definida como AzureTableStorage. Sim
sasUri Especifique o URI SAS do URI da assinatura de acesso compartilhado para a tabela.
Marque este campo como um SecureString para armazená-lo com segurança. Você também pode colocar o token SAS no Cofre da Chave do Azure para aproveitar a rotação automática e remover a parte do token. Consulte os seguintes exemplos e o artigo Armazenar credenciais no Cofre de Chaves do Azure com mais detalhes.
Sim
ConecteVia O tempo de execução de integração a ser usado para se conectar ao armazenamento de dados. Você pode usar o Tempo de Execução de Integração do Azure ou o Tempo de Execução de Integração Auto-hospedado (se seu armazenamento de dados estiver localizado em uma rede privada). Se não for especificado, ele usará o Tempo de Execução de Integração do Azure padrão. Não

Nota

Se você estava usando o serviço vinculado do tipo "AzureStorage", ele ainda é suportado no estado em que se encontra, enquanto é sugerido que você use esse novo tipo de serviço vinculado "AzureTableStorage" no futuro.

Exemplo:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "sasUri": {
                "type": "SecureString",
                "value": "<SAS URI of the Azure Storage resource e.g. https://<account>.table.core.windows.net/<table>?sv=<storage version>&amp;st=<start time>&amp;se=<expire time>&amp;sr=<resource>&amp;sp=<permissions>&amp;sip=<ip range>&amp;spr=<protocol>&amp;sig=<signature>>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemplo: armazenar a chave da conta no Cofre da Chave do Azure

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "sasUri": {
                "type": "SecureString",
                "value": "<SAS URI of the Azure Storage resource without token e.g. https://<account>.table.core.windows.net/<table>>"
            },
            "sasToken": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Ao criar um URI de assinatura de acesso compartilhado, considere os seguintes pontos:

  • Defina permissões de leitura/gravação apropriadas em objetos com base em como o serviço vinculado (leitura, gravação, leitura/gravação) é usado.
  • Defina o tempo de expiração adequadamente. Certifique-se de que o acesso aos objetos de armazenamento não expire dentro do período ativo do pipeline.
  • O URI deve ser criado no nível de tabela correto com base na necessidade.

Autenticação de identidade gerenciada atribuída pelo sistema

Uma fábrica de dados ou pipeline Synapse pode ser associado a uma identidade gerenciada atribuída pelo sistema para recursos do Azure, que representa esse recurso para autenticação em outros serviços do Azure. Você pode usar essa identidade gerenciada atribuída pelo sistema para autenticação do Armazenamento de Tabela do Azure. Para saber mais sobre identidades gerenciadas para recursos do Azure, consulte Identidades gerenciadas para recursos do Azure

Para usar a autenticação de identidade gerenciada atribuída pelo sistema, siga estas etapas:

  1. Recupere informações de identidade gerenciada atribuídas pelo sistema copiando o valor do ID do objeto de identidade gerenciado atribuído pelo sistema gerado junto com sua fábrica ou espaço de trabalho Sinapse.

  2. Conceda a permissão de identidade gerenciada no Armazenamento de Tabela do Azure. Para obter mais informações sobre as funções, consulte este artigo.

    • Como origem, no Controle de acesso (IAM), conceda pelo menos a função Leitor de Dados da Tabela de Armazenamento .
    • Como coletor, no Controle de acesso (IAM), conceda pelo menos a função de Colaborador de Dados da Tabela de Armazenamento .

Estas propriedades têm suporte para um serviço vinculado do Armazenamento de Tabela do Azure:

Property Descrição Obrigatório
tipo A propriedade type deve ser definida como AzureTableStorage. Sim
serviceEndpoint Especifique o ponto de extremidade do serviço de Armazenamento de Tabela do Azure com o padrão de https://<accountName>.table.core.windows.net/. Sim
ConecteVia O tempo de execução de integração a ser usado para se conectar ao armazenamento de dados. Você pode usar o Tempo de Execução de Integração do Azure. Se não for especificado, ele usará o Tempo de Execução de Integração do Azure padrão. Não

Nota

A autenticação de identidade gerenciada atribuída pelo sistema só é suportada pelo tempo de execução de integração do Azure.

Exemplo:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {            
            "serviceEndpoint": "https://<accountName>.table.core.windows.net/"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Autenticação de identidade gerenciada atribuída pelo usuário

Uma fábrica de dados pode ser atribuída com uma ou várias identidades gerenciadas atribuídas pelo usuário. Você pode usar essa identidade gerenciada atribuída pelo usuário para autenticação do Armazenamento de Tabela do Azure, que permite acessar e copiar dados de ou para o Armazenamento de Tabela do Azure. Para saber mais sobre identidades gerenciadas para recursos do Azure, consulte Identidades gerenciadas para recursos do Azure

Para usar a autenticação de identidade gerenciada atribuída pelo usuário, siga estas etapas:

  1. Crie uma ou várias identidades gerenciadas atribuídas pelo usuário e conceda permissão no Armazenamento de Tabela do Azure. Para obter mais informações sobre as funções, consulte este artigo.

    • Como origem, no Controle de acesso (IAM), conceda pelo menos a função Leitor de Dados da Tabela de Armazenamento .
    • Como coletor, no Controle de acesso (IAM), conceda pelo menos a função de Colaborador de Dados da Tabela de Armazenamento .
  2. Atribua uma ou várias identidades gerenciadas atribuídas pelo usuário ao seu data factory e crie credenciais para cada identidade gerenciada atribuída pelo usuário.

Estas propriedades têm suporte para um serviço vinculado do Armazenamento de Tabela do Azure:

Property Descrição Obrigatório
tipo A propriedade type deve ser definida como AzureTableStorage. Sim
serviceEndpoint Especifique o ponto de extremidade do serviço de Armazenamento de Tabela do Azure com o padrão de https://<accountName>.table.core.windows.net/. Sim
credenciais Especifique a identidade gerenciada atribuída pelo usuário como o objeto de credencial. Sim
ConecteVia O tempo de execução de integração a ser usado para se conectar ao armazenamento de dados. Você pode usar o Tempo de Execução de Integração do Azure ou o Tempo de Execução de Integração Auto-hospedado (se seu armazenamento de dados estiver localizado em uma rede privada). Se não for especificado, ele usará o Tempo de Execução de Integração do Azure padrão. Não

Exemplo:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {            
            "serviceEndpoint": "https://<accountName>.table.core.windows.net/",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propriedades do conjunto de dados

Para obter uma lista completa de seções e propriedades disponíveis para definir conjuntos de dados, consulte o artigo Conjuntos de dados. Esta seção fornece uma lista de propriedades suportadas pelo conjunto de dados Tabela do Azure.

Para copiar dados de e para a Tabela do Azure, defina a propriedade type do conjunto de dados como AzureTable. As seguintes propriedades são suportadas.

Property Descrição Obrigatório
tipo A propriedade type do conjunto de dados deve ser definida como AzureTable. Sim
tableName O nome da tabela na instância do banco de dados de armazenamento de tabela à qual o serviço vinculado se refere. Sim

Exemplo:

{
    "name": "AzureTableDataset",
    "properties":
    {
        "type": "AzureTable",
        "typeProperties": {
            "tableName": "MyTable"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Azure Table storage linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Inferência de esquema pelo serviço

Para armazenamentos de dados sem esquema, como a Tabela do Azure, o serviço infere o esquema de uma das seguintes maneiras:

  • Se você especificar o mapeamento de coluna na atividade de cópia, o serviço usará a lista de colunas do lado da origem para recuperar dados. Nesse caso, se uma linha não contiver um valor para uma coluna, um valor nulo será fornecido para ela.
  • Se você não especificar o mapeamento de coluna na atividade de cópia, o serviço inferirá o esquema usando a primeira linha nos dados. Nesse caso, se a primeira linha não contiver o esquema completo (por exemplo, algumas colunas têm valor nulo), algumas colunas serão perdidas no resultado da operação de cópia.

Propriedades da atividade Copy

Para obter uma lista completa de seções e propriedades disponíveis para definir atividades, consulte o artigo Pipelines . Esta seção fornece uma lista de propriedades suportadas pela fonte e coletor da Tabela do Azure.

Tabela do Azure como um tipo de origem

Para copiar dados da Tabela do Azure, defina o tipo de origem na atividade de cópia como AzureTableSource. As propriedades a seguir são suportadas na seção copiar fonte de atividade.

Property Descrição Obrigatório
tipo A propriedade type da fonte de atividade de cópia deve ser definida como AzureTableSource. Sim
azureTableSourceQuery Use a consulta de armazenamento de tabela personalizada para ler dados.
A consulta de origem é um mapa direto da $filter opção de consulta suportada pelo Armazenamento de Tabela do Azure, saiba mais sobre a sintaxe deste documento e veja os exemplos na seção de exemplos azureTableSourceQuery a seguir.
Não
azureTableSourceIgnoreTableNotFound Indica se a exceção da tabela deve ser permitida.
Os valores permitidos são True e False (padrão).
Não

Exemplos de azureTableSourceQuery

Nota

A operação de consulta Tabela do Azure expira em 30 segundos, conforme imposto pelo serviço de Tabela do Azure. Saiba como otimizar a consulta no artigo Design for querying .

Se você quiser filtrar os dados em relação a uma coluna de tipo datetime, consulte este exemplo:

"azureTableSourceQuery": "LastModifiedTime gt datetime'2017-10-01T00:00:00' and LastModifiedTime le datetime'2017-10-02T00:00:00'"

Se você quiser filtrar os dados em relação a uma coluna de tipo de cadeia de caracteres, consulte este exemplo:

"azureTableSourceQuery": "LastModifiedTime ge '201710010000_0000' and LastModifiedTime le '201710010000_9999'"

Se você usar o parâmetro pipeline, converta o valor datetime para o formato adequado de acordo com os exemplos anteriores.

Tabela do Azure como um tipo de coletor

Para copiar dados para a Tabela do Azure, defina o tipo de coletor na atividade de cópia como AzureTableSink. As propriedades a seguir são suportadas na seção coletor de atividade de cópia.

Property Descrição Obrigatório
tipo A propriedade type do coletor de atividade de cópia deve ser definida como AzureTableSink. Sim
azureTableDefaultPartitionKeyValue O valor da chave de partição padrão que pode ser usado pelo coletor. Não
azureTablePartitionKeyName Especifique o nome da coluna cujos valores são usados como chaves de partição. Se não for especificado, "AzureTableDefaultPartitionKeyValue" será usado como a chave de partição. Não
azureTableRowKeyName Especifique o nome da coluna cujos valores de coluna são usados como a chave de linha. Se não for especificado, use um GUID para cada linha. Não
azureTableInsertType O modo para inserir dados na Tabela do Azure. Esta propriedade controla se as linhas existentes na tabela de saída com chaves de partição e linha correspondentes têm seus valores substituídos ou mesclados.

Os valores permitidos são mesclar (padrão ) e substituir.

Essa configuração se aplica ao nível da linha e não ao nível da tabela. Nenhuma das opções exclui linhas na tabela de saída que não existem na entrada. Para saber como funcionam as configurações de mesclagem e substituição, consulte Inserir ou mesclar entidade e Inserir ou substituir entidade.
Não
writeBatchSize Insere dados na Tabela do Azure quando writeBatchSize ou writeBatchTimeout é atingido.
Os valores permitidos são inteiros (número de linhas).
Não (o padrão é 10.000)
writeBatchTimeout Insere dados na Tabela do Azure quando writeBatchSize ou writeBatchTimeout é atingido.
Os valores permitidos são de intervalo de tempo. Um exemplo é "00:20:00" (20 minutos).
Não (o padrão é 90 segundos, o tempo limite padrão do cliente de armazenamento)
 maxConcurrentConnections O limite superior de conexões simultâneas estabelecidas para o armazenamento de dados durante a execução da atividade. Especifique um valor somente quando quiser limitar conexões simultâneas.  Não

Exemplo:

"activities":[
    {
        "name": "CopyToAzureTable",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure Table output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureTableSink",
                "azureTablePartitionKeyName": "<column name>",
                "azureTableRowKeyName": "<column name>"
            }
        }
    }
]

azureTablePartitionKeyName

Mapeie uma coluna de origem para uma coluna de destino usando a propriedade "translator" antes de poder usar a coluna de destino como azureTablePartitionKeyName.

No exemplo a seguir, a coluna de origem DivisionID é mapeada para a coluna de destino DivisionID:

"translator": {
    "type": "TabularTranslator",
    "columnMappings": "DivisionID: DivisionID, FirstName: FirstName, LastName: LastName"
}

"DivisionID" é especificado como a chave de partição.

"sink": {
    "type": "AzureTableSink",
    "azureTablePartitionKeyName": "DivisionID"
}

Mapeamento de tipo de dados para a Tabela do Azure

Quando você copia dados de e para a Tabela do Azure, os mapeamentos a seguir são usados de tipos de dados da Tabela do Azure para tipos de dados provisórios usados internamente no serviço. Para saber como a atividade de cópia mapeia o esquema de origem e o tipo de dados para o coletor, consulte Mapeamentos de esquema e tipo de dados.

Quando você move dados de e para a Tabela do Azure, os mapeamentos a seguir definidos pela Tabela do Azure são usados dos tipos OData da Tabela do Azure para o tipo .NET e vice-versa.

Tipo de dados da Tabela do Azure Tipo de dados de serviço provisório Detalhes
Edm.Binário byte[] Uma matriz de bytes de até 64 KB.
Edm.Boolean booleano Um valor booleano.
Edm.DateTime DateTime Um valor de 64 bits expresso como Tempo Universal Coordenado (UTC). O intervalo DateTime suportado começa à meia-noite, 1 de janeiro de 1601 A.D. (C.E.), UTC. O intervalo termina em 31 de dezembro de 9999.
Edm.Double duplo Um valor de ponto flutuante de 64 bits.
Edm.Guid GUID Um identificador global exclusivo de 128 bits.
Edm.Int32 Int32 Um inteiro de 32 bits.
Edm.Int64 Int64 Um inteiro de 64 bits.
Edm.String String Um valor codificado em UTF-16. Os valores de cadeia de caracteres podem ser de até 64 KB.

Propriedades da atividade de pesquisa

Para saber detalhes sobre as propriedades, verifique Atividade de pesquisa.

Para obter uma lista de armazenamentos de dados suportados como fontes e coletores pela atividade de cópia, consulte Armazenamentos de dados suportados.