Copiar dados de e para o Azure Databricks Delta Lake usando o Azure Data Factory ou o Azure 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 Copiar no Azure Data Factory e no Azure Synapse para copiar dados de e para o Azure Databricks Delta Lake. Ele se baseia no artigo Atividade de cópia, que apresenta uma visão geral da atividade de cópia.

Capacidades suportadas

Este conector Delta Lake do Azure Databricks tem suporte para os seguintes recursos:

Capacidades suportadas IR
Atividade de cópia (origem/coletor) ① ②
Mapeando o fluxo de dados (origem/coletor)
Atividade de Pesquisa ① ②

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

Em geral, o serviço suporta Delta Lake com os seguintes recursos para atender às suas várias necessidades.

  • A atividade de cópia suporta o conector Delta Lake do Azure Databricks para copiar dados de qualquer armazenamento de dados de origem suportado para a tabela delta lake do Azure Databricks e da tabela delta lake para qualquer armazenamento de dados de coletor suportado. Ele aproveita seu cluster Databricks para executar a movimentação de dados, consulte os detalhes na seção Pré-requisitos.
  • O Fluxo de Dados de Mapeamento dá suporte ao formato Delta genérico no Armazenamento do Azure como origem e coletor para ler e gravar arquivos Delta para ETL sem código e é executado no Tempo de Execução de Integração do Azure gerenciado.
  • As atividades do Databricks suportam a orquestração de sua carga de trabalho de ETL ou aprendizado de máquina centrada em código no topo do delta lake.

Pré-requisitos

Para usar esse conector Delta Lake do Azure Databricks, você precisa configurar um cluster no Azure Databricks.

  • Para copiar dados para o delta lake, a atividade de cópia invoca o cluster do Azure Databricks para ler dados de um Armazenamento do Azure, que é sua fonte original ou uma área de preparo na qual o serviço grava primeiro os dados de origem por meio de cópia em estágios interna. Saiba mais com o lago Delta como pia.
  • Da mesma forma, para copiar dados do delta lake, a atividade de cópia invoca o cluster do Azure Databricks para gravar dados em um Armazenamento do Azure, que é seu coletor original ou uma área de preparo de onde o serviço continua a gravar dados no coletor final por meio de cópia em estágios interna. Saiba mais a partir do lago Delta como fonte.

O cluster Databricks precisa ter acesso ao Blob do Azure ou à conta do Azure Data Lake Storage Gen2, tanto o contêiner/sistema de arquivos de armazenamento usado para origem/coletor/preparo quanto o contêiner/sistema de arquivos onde você deseja gravar as tabelas Delta Lake.

  • Para usar o Azure Data Lake Storage Gen2, você pode configurar uma entidade de serviço no cluster Databricks como parte da configuração do Apache Spark. Siga as etapas no Access diretamente com a entidade de serviço.

  • Para usar o armazenamento de Blob do Azure, você pode configurar uma chave de acesso de conta de armazenamento ou token SAS no cluster Databricks como parte da configuração do Apache Spark. Siga as etapas em Armazenamento de Blob do Azure do Access usando a API RDD.

Durante a execução da atividade de cópia, se o cluster configurado tiver sido encerrado, o serviço o iniciará automaticamente. Se você criar pipeline usando a interface do usuário de criação, para operações como visualização de dados, precisará ter um cluster ativo, o serviço não iniciará o cluster em seu nome.

Especificar a configuração do cluster

  1. Na lista suspensa Modo de Cluster, selecione Padrão.

  2. Na lista suspensa Versão do tempo de execução do Databricks, selecione uma versão do tempo de execução do Databricks.

  3. Ative a Otimização Automática adicionando as seguintes propriedades à sua configuração do Spark:

    spark.databricks.delta.optimizeWrite.enabled true
    spark.databricks.delta.autoCompact.enabled true
    
  4. Configure seu cluster dependendo de suas necessidades de integração e dimensionamento.

Para obter detalhes de configuração de cluster, consulte Configurar clusters.

Introdução

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

Criar um serviço vinculado ao Azure Databricks Delta Lake usando a interface do usuário

Use as etapas a seguir para criar um serviço vinculado ao Azure Databricks Delta Lake 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 delta e selecione o conector Delta Lake do Azure Databricks.

    Screenshot of the Azure Databricks Delta Lake connector.

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

    Screenshot of configuration for an Azure Databricks Delta Lake linked service.

Detalhes de configuração do conector

As seções a seguir fornecem detalhes sobre propriedades que definem entidades específicas para um conector Delta Lake do Azure Databricks.

Propriedades do serviço vinculado

Este conector Delta Lake do Azure Databricks suporta os seguintes tipos de autenticação. Consulte as seções correspondentes para obter detalhes.

Token de acesso

As seguintes propriedades têm suporte para o serviço vinculado Delta Lake do Azure Databricks:

Propriedade Descrição Necessário
tipo A propriedade type deve ser definida como AzureDatabricksDeltaLake. Sim
domínio Especifique a URL do espaço de trabalho do Azure Databricks, por exemplo. https://adb-xxxxxxxxx.xx.azuredatabricks.net
clusterId Especifique a ID do cluster de um cluster existente. Deve ser um Cluster Interativo já criado.
Você pode encontrar a ID do Cluster Interativo no espaço de trabalho Databricks - Clusters - Nome do Cluster Interativo - Configuração ->>>> Tags. Saiba mais.
accessToken O token de acesso é necessário para que o serviço se autentique no Azure Databricks. O token de acesso precisa ser gerado a partir do espaço de trabalho databricks. Etapas mais detalhadas para encontrar o token de acesso podem ser encontradas aqui.
ConecteVia O tempo de execução de integração que é usado para se conectar ao armazenamento de dados. Você pode usar o tempo de execução de integração do Azure ou um 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 padrão do Azure. Não

Exemplo:

{
    "name": "AzureDatabricksDeltaLakeLinkedService",
    "properties": {
        "type": "AzureDatabricksDeltaLake",
        "typeProperties": {
            "domain": "https://adb-xxxxxxxxx.xx.azuredatabricks.net",
            "clusterId": "<cluster id>",
            "accessToken": {
                "type": "SecureString", 
                "value": "<access token>"
          	}
        }
    }
}

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

Para saber mais sobre identidades gerenciadas atribuídas pelo sistema para recursos do Azure, consulte identidade gerenciada atribuída ao sistema para recursos do Azure.

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

  1. Recupere as informações de identidade gerenciadas copiando o valor do ID do objeto de identidade gerenciado gerado junto com sua fábrica de dados ou espaço de trabalho Synapse.

  2. Conceda à identidade gerenciada as permissões corretas no Azure Databricks. Em geral, você deve conceder pelo menos a função de Colaborador à sua identidade gerenciada atribuída ao sistema no Controle de acesso (IAM) do Azure Databricks.

As seguintes propriedades têm suporte para o serviço vinculado Delta Lake do Azure Databricks:

Propriedade Descrição Necessário
tipo A propriedade type deve ser definida como AzureDatabricksDeltaLake. Sim
domínio Especifique a URL do espaço de trabalho do Azure Databricks, por exemplo. https://adb-xxxxxxxxx.xx.azuredatabricks.net Sim
clusterId Especifique a ID do cluster de um cluster existente. Deve ser um Cluster Interativo já criado.
Você pode encontrar a ID do Cluster Interativo no espaço de trabalho Databricks - Clusters - Nome do Cluster Interativo - Configuração ->>>> Tags. Saiba mais.
Sim
workspaceResourceId Especifique a ID do recurso de espaço de trabalho do seu Azure Databricks. Sim
ConecteVia O tempo de execução de integração que é usado para se conectar ao armazenamento de dados. Você pode usar o tempo de execução de integração do Azure ou um 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 padrão do Azure. Não

Exemplo:

{
    "name": "AzureDatabricksDeltaLakeLinkedService",
    "properties": {
        "type": "AzureDatabricksDeltaLake",
        "typeProperties": {
            "domain": "https://adb-xxxxxxxxx.xx.azuredatabricks.net",
            "clusterId": "<cluster id>",
            "workspaceResourceId": "<workspace resource id>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

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

Para saber mais sobre identidades gerenciadas atribuídas pelo usuário para recursos do Azure, consulte identidades gerenciadas atribuídas pelo usuário

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 em seu Azure Databricks . Em geral, você deve conceder pelo menos a função de Colaborador à sua identidade gerenciada atribuída pelo usuário no Controle de acesso (IAM) do Azure Databricks.

  2. Atribua uma ou várias identidades gerenciadas atribuídas pelo usuário ao seu data factory ou espaço de trabalho Synapse e crie credenciais para cada identidade gerenciada atribuída pelo usuário.

As seguintes propriedades têm suporte para o serviço vinculado Delta Lake do Azure Databricks:

Propriedade Descrição Necessário
tipo A propriedade type deve ser definida como AzureDatabricksDeltaLake. Sim
domínio Especifique a URL do espaço de trabalho do Azure Databricks, por exemplo. https://adb-xxxxxxxxx.xx.azuredatabricks.net Sim
clusterId Especifique a ID do cluster de um cluster existente. Deve ser um Cluster Interativo já criado.
Você pode encontrar a ID do Cluster Interativo no espaço de trabalho Databricks - Clusters - Nome do Cluster Interativo - Configuração ->>>> Tags. Saiba mais.
Sim
credenciais Especifique a identidade gerenciada atribuída pelo usuário como o objeto de credencial. Sim
workspaceResourceId Especifique a ID do recurso de espaço de trabalho do seu Azure Databricks. Sim
ConecteVia O tempo de execução de integração que é usado para se conectar ao armazenamento de dados. Você pode usar o tempo de execução de integração do Azure ou um 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 padrão do Azure. Não

Exemplo:

{
    "name": "AzureDatabricksDeltaLakeLinkedService",
    "properties": {
        "type": "AzureDatabricksDeltaLake",
        "typeProperties": {
            "domain": "https://adb-xxxxxxxxx.xx.azuredatabricks.net",
            "clusterId": "<cluster id>",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            },
            "workspaceResourceId": "<workspace resource id>"
        },
        "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.

As propriedades a seguir têm suporte para o conjunto de dados Delta Lake do Azure Databricks.

Propriedade Descrição Necessário
tipo A propriedade type do conjunto de dados deve ser definida como AzureDatabricksDeltaLakeDataset. Sim
base de dados Nome do banco de dados. Não para a fonte, sim para a pia
tabela Nome da tabela delta. Não para a fonte, sim para a pia

Exemplo:

{
    "name": "AzureDatabricksDeltaLakeDataset",
    "properties": {
        "type": "AzureDatabricksDeltaLakeDataset",
        "typeProperties": {
            "database": "<database name>",
            "table": "<delta table name>"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "linkedServiceName": {
            "referenceName": "<name of linked service>",
            "type": "LinkedServiceReference"
        }
    }
}

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 origem e pelo coletor Delta Lake do Azure Databricks.

Lago Delta como fonte

Para copiar dados do Azure Databricks Delta Lake, as seguintes propriedades são suportadas na seção Copiar fonte de atividade.

Propriedade Descrição Necessário
tipo A propriedade type da fonte de atividade Copy deve ser definida como AzureDatabricksDeltaLakeSource. Sim
query Especifique a consulta SQL para ler dados. Para o controle de viagem no tempo, siga o padrão abaixo:
- SELECT * FROM events TIMESTAMP AS OF timestamp_expression
- SELECT * FROM events VERSION AS OF version
Não
exportSettings Configurações avançadas usadas para recuperar dados da tabela delta. Não
Em exportSettings:
tipo O tipo de comando de exportação, definido como AzureDatabricksDeltaLakeExportCommand. Sim
dateFormat Formate o tipo de data para cadeia de caracteres com um formato de data. Os formatos de data personalizados seguem os formatos no padrão datetime. Se não for especificado, ele usará o valor yyyy-MM-ddpadrão . Não
timestampFormat Formate o tipo de carimbo de data/hora para cadeia de caracteres com um formato de carimbo de data/hora. Os formatos de data personalizados seguem os formatos no padrão datetime. Se não for especificado, ele usará o valor yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]padrão . Não

Cópia direta do lago delta

Se o armazenamento de dados e o formato do coletor atenderem aos critérios descritos nesta seção, você poderá usar a atividade Copiar para copiar diretamente da tabela Delta do Azure Databricks para o coletor. O serviço verifica as configurações e falha na execução da atividade Copiar se os seguintes critérios não forem atendidos:

  • O serviço vinculado do coletor é o armazenamento de Blob do Azure ou o Azure Data Lake Storage Gen2. A credencial da conta deve ser pré-configurada na configuração de cluster do Azure Databricks, saiba mais em Pré-requisitos.

  • O formato de dados do coletor é Parquet, texto delimitado ou Avro com as seguintes configurações e aponta para uma pasta em vez de arquivo.

    • Para o formato Parquet , o codec de compressão é nenhum, rápido ou gzip.
    • Para o formato de texto delimitado:
      • rowDelimiter é qualquer caractere único.
      • compressionpode ser nenhum, bzip2, gzip.
      • encodingName UTF-7 não é suportado.
    • Para o formato Avro, o codec de compressão é nenhum, deflacionado ou rápido.
  • Na fonte da atividade Copiar, additionalColumns não é especificado.

  • Se copiar dados para texto delimitado, no coletor de atividade de cópia, fileExtension precisa ser ".csv".

  • No mapeamento de atividade de cópia, a conversão de tipo não está habilitada.

Exemplo:

"activities":[
    {
        "name": "CopyFromDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delta lake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureDatabricksDeltaLakeSource",
                "sqlReaderQuery": "SELECT * FROM events TIMESTAMP AS OF timestamp_expression"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Cópia encenada do lago delta

Quando o formato ou o armazenamento de dados do coletor não corresponder aos critérios de cópia direta, conforme mencionado na última seção, habilite a cópia em estágios interna usando uma instância de armazenamento provisória do Azure. O recurso de cópia em estágios também oferece uma melhor taxa de transferência. O serviço exporta dados do Azure Databricks Delta Lake para o armazenamento de preparo, copia os dados para o coletor e, finalmente, limpa seus dados temporários do armazenamento de preparo. Consulte Cópia em etapas para obter detalhes sobre como copiar dados usando preparo.

Para usar esse recurso, crie um serviço vinculado de armazenamento de Blob do Azure ou um serviço vinculado do Azure Data Lake Storage Gen2 que se refira à conta de armazenamento como o preparo provisório. Em seguida, especifique as enableStaging propriedades e stagingSettings na atividade Copiar.

Nota

A credencial da conta de armazenamento de preparo deve ser pré-configurada na configuração de cluster do Azure Databricks, saiba mais em Pré-requisitos.

Exemplo:

"activities":[
    {
        "name": "CopyFromDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delta lake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureDatabricksDeltaLakeSource",
                "sqlReaderQuery": "SELECT * FROM events TIMESTAMP AS OF timestamp_expression"
            },
            "sink": {
                "type": "<sink type>"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingStorage",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Lago Delta como pia

Para copiar dados para o Azure Databricks Delta Lake, as seguintes propriedades são suportadas na seção Copiar coletor de atividade.

Propriedade Descrição Necessário
tipo A propriedade type do coletor de atividade Copy, definida como AzureDatabricksDeltaLakeSink. Sim
pré-CopyScript Especifique uma consulta SQL para a atividade Copiar a ser executada antes de gravar dados na tabela delta do Databricks em cada execução. Exemplo: VACUUM eventsTable DRY RUN Você pode usar essa propriedade para limpar os dados pré-carregados ou adicionar uma tabela truncada ou uma instrução Vacuum. Não
importSettings Configurações avançadas usadas para gravar dados na tabela delta. Não
Em importSettings:
tipo O tipo de comando import, definido como AzureDatabricksDeltaLakeImportCommand. Sim
dateFormat Formatar cadeia de caracteres para tipo de data com um formato de data. Os formatos de data personalizados seguem os formatos no padrão datetime. Se não for especificado, ele usará o valor yyyy-MM-ddpadrão . Não
timestampFormat Formatar cadeia de caracteres para tipo de carimbo de data/hora com um formato de carimbo de data/hora. Os formatos de data personalizados seguem os formatos no padrão datetime. Se não for especificado, ele usará o valor yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]padrão . Não

Cópia direta para o lago delta

Se o armazenamento e o formato de dados de origem atenderem aos critérios descritos nesta seção, você poderá usar a atividade Copiar para copiar diretamente da origem para o Azure Databricks Delta Lake. O serviço verifica as configurações e falha na execução da atividade Copiar se os seguintes critérios não forem atendidos:

  • O serviço vinculado de origem é o armazenamento de Blob do Azure ou o Azure Data Lake Storage Gen2. A credencial da conta deve ser pré-configurada na configuração de cluster do Azure Databricks, saiba mais em Pré-requisitos.

  • O formato de dados de origem é Parquet, texto delimitado ou Avro com as seguintes configurações e aponta para uma pasta em vez de arquivo.

    • Para o formato Parquet , o codec de compressão é nenhum, rápido ou gzip.
    • Para o formato de texto delimitado:
      • rowDelimiter é padrão, ou qualquer caractere único.
      • compressionpode ser nenhum, bzip2, gzip.
      • encodingName UTF-7 não é suportado.
    • Para o formato Avro, o codec de compressão é nenhum, deflacionado ou rápido.
  • Na fonte da atividade Copiar:

    • wildcardFileNamecontém apenas curinga*, mas não , e wildcardFolderName não ?é especificado.
    • prefix, , , modifiedDateTimeStartmodifiedDateTimeEnde enablePartitionDiscovery não são especificados.
    • additionalColumns não é especificado.
  • No mapeamento de atividade de cópia, a conversão de tipo não está habilitada.

Exemplo:

"activities":[
    {
        "name": "CopyToDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Delta lake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureDatabricksDeltaLakeSink",
                "sqlReadrQuery": "VACUUM eventsTable DRY RUN"
            }
        }
    }
]

Cópia faseada para o lago delta

Quando seu armazenamento ou formato de dados de origem não corresponder aos critérios de cópia direta, conforme mencionado na última seção, habilite a cópia em estágios interna usando uma instância de armazenamento provisória do Azure. O recurso de cópia em estágios também oferece uma melhor taxa de transferência. O serviço converte automaticamente os dados para atender aos requisitos de formato de dados em armazenamento temporário e, em seguida, carrega os dados no delta lake a partir daí. Finalmente, ele limpa seus dados temporários do armazenamento. Consulte Cópia em etapas para obter detalhes sobre como copiar dados usando preparo.

Para usar esse recurso, crie um serviço vinculado de armazenamento de Blob do Azure ou um serviço vinculado do Azure Data Lake Storage Gen2 que se refira à conta de armazenamento como o preparo provisório. Em seguida, especifique as enableStaging propriedades e stagingSettings na atividade Copiar.

Nota

A credencial da conta de armazenamento de preparo deve ser pré-configurada na configuração de cluster do Azure Databricks, saiba mais em Pré-requisitos.

Exemplo:

"activities":[
    {
        "name": "CopyToDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Delta lake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureDatabricksDeltaLakeSink"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Monitorização

A mesma experiência de monitoramento de atividade de cópia é fornecida como para outros conectores. Além disso, como o carregamento de dados de/para o delta lake está sendo executado em seu cluster do Azure Databricks, você pode exibir ainda mais logs de cluster detalhados e monitorar o desempenho.

Propriedades da atividade de pesquisa

Para obter mais informações sobre as propriedades, consulte Atividade de pesquisa.

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