Compartilhar via


Migrar um data lake Parquet para o Delta Lake

Este artigo fornece recomendações para converter um data lake Parquet existente para o Delta Lake. O Delta Lake é o formato subjacente no lakehouse do Databricks. Veja o que é o Delta Lake no Azure Databricks?.

Considerações antes de converter para o Delta Lake

Seu data lake Parquet provavelmente possui uma estratégia de particionamento que foi otimizada para suas cargas de trabalho e sistemas atuais. Embora você possa converter para o Delta Lake e manter essa estrutura de particionamento, as tabelas superparticionadas são uma das principais causadoras de cargas de trabalho lentas no Delta Lake. Confira Quando particionar tabelas no Azure Databricks e diretrizes para adaptar o código do Spark ao Databricks.

Você também precisa considerar se os dados que estão sendo convertidos ainda estão crescendo ou não, bem como a frequência com que os dados estão sendo consultados no momento. Você pode escolher diferentes abordagens para diferentes tabelas Parquet em seu data lake.

Abordagens para conversão do Delta Lake

A matriz a seguir descreve as quatro abordagens principais para converter um data lake do Parquet em Delta Lake e algumas das vantagens e desvantagens. Para esclarecer cada coluna:

  • Incremental: indica a funcionalidade que dá suporte à conversão de dados adicionais acrescentados à fonte de conversão após o início da conversão.
  • Duplica os dados: indica se os dados são gravados em um novo local ou modificados no mesmo local.
  • Mantém a estrutura de dados: indica se a estratégia de particionamento é mantida durante a conversão.
  • Provisionamento de dados: denota a funcionalidade que dá suporte ao provisionamento de dados que foram adicionados à fonte de conversão após o início da conversão.
  • Facilidade de uso: indica o nível de esforço do usuário para configurar e executar a conversão de dados.
Método Gradativo Duplica dados Mantém a estrutura de dados Completar dados Fácil de uso
CLONE profundo de Parquet Sim Sim Sim Sim Fácil
CLONE superficial de Parquet Sim Não Sim Sim Fácil
CONVERT TO DELTA Não Não Sim Não Fácil
Carregador Automático Sim Sim Não Opcional Alguma configuração
Trabalho do Spark do Lote Lógica personalizada Sim Não Lógica personalizada Lógica personalizada

As seções a seguir abordarão cada uma dessas opções com maior profundidade.

Migrar dados Parquet com CLONE Parquet

Você pode usar Parquet CLONE para copiar dados incrementalmente de um data lake Parquet para o Delta Lake. Clones superficiais criam ponteiros para arquivos Parquet existentes, mantendo sua tabela Parquet no local e formato originais, fornecendo acesso otimizado por meio de estatísticas de arquivo coletado. Você pode gravar na tabela criada por um clone superficial sem afetar a fonte de dados original.

O clone profundo copia todos os arquivos de dados da origem para um novo local durante a conversão para o Delta Lake. O clone profundo permite que você detecte incrementalmente novos arquivos, incluindo operações de provisionamento, na execução subsequente da lógica. Consulte Clonar incrementalmente as tabelas Parquet e Apache Iceberg no Delta Lake.

O seguinte exemplo demonstra o uso do CLONE:

CREATE OR REPLACE TABLE <target-table-name> [SHALLOW] CLONE parquet.`/path/to/data`;

Migrar dados Parquet com CONVERT TO DELTA

Você pode usar CONVERT TO DELTA para transformar um diretório de arquivos Parquet em uma tabela Delta com um único comando. Depois de converter uma tabela para Delta Lake, você deve parar de ler e gravar na tabela usando a lógica Parquet. Os dados gravados no diretório de destino após o início da conversão podem não ser refletidos na tabela Delta resultante. Confira Converter para Delta Lake.

O seguinte exemplo demonstra o uso do CONVERT TO DELTA:

CONVERT TO DELTA parquet.`abfss://container@storageAccount.dfs.core.windows.net/parquet-data`;

Migrar dados Parquet com o Carregador Automático

Embora o Carregador Automático seja um produto concebido para ingestão incremental de dados do armazenamento de objetos na nuvem, você pode aproveitá-lo para implementar um padrão que copia incrementalmente todos os dados de um determinado diretório para uma tabela de destino. Confira O que é o Carregador Automático?.

O exemplo de código a seguir inclui configurações que:

  • Processam todos os arquivos existentes no diretório de origem.
  • Dispare um trabalho de provisionamento semanal automático para capturar arquivos que possam ter sido perdidos.
  • Permitem que o Apache Spark use muitos trabalhos do Spark para evitar erros de despejo e memória insuficiente associados a grandes partições de dados.
  • Forneça garantias de processamento exatamente uma vez de ponta a ponta.
(spark.readStream
  .format("cloudFiles")
  .option("cloudFiles.format", "parquet")
  .option("cloudFiles.includeExistingFiles", "true")
  .option("cloudFiles.backfillInterval", "1 week")
  .option("cloudFiles.schemaLocation", checkpoint_path)
  .load(file_path)
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .trigger(availableNow=True)
  .toTable(table_name)
)

Você pode usar o Carregador Automático no Lakeflow Spark Declarative Pipelines com Python ou SQL:

Migre dados parquet com lógica de lote personalizada do Apache Spark

Escrever lógica personalizada do Apache Spark fornece grande flexibilidade para controlar como e quando diferentes dados do seu sistema de origem são migrados, mas pode exigir uma configuração abrangente para fornecer recursos integrados a outras abordagens.

No cerne dessa abordagem está uma operação simples de leitura e gravação do Apache Spark, como a seguinte:

spark.read.format("parquet").load(file_path).write.mode("append").saveAsTable(table_name)

Para executar provisionamentos ou migração incremental, talvez você possa contar com a estrutura de particionamento da sua fonte de dados, mas também pode precisar escrever uma lógica personalizada para acompanhar quais arquivos foram adicionados desde a última vez que você carregou dados da origem. Embora você possa usar recursos de mesclagem do Delta Lake para evitar gravar registros duplicados, a comparação de todos os registros de uma grande tabela de origem Parquet com o conteúdo de uma grande tabela Delta é uma tarefa cara em termos de computação.

Quando você não deve converter para Delta Lake?

Antes de converter todos os dados Parquet existentes para Delta Lake, é provável que você considere as possíveis vantagens e desvantagens.

O Azure Databricks projeta muitos recursos otimizados do Lakehouse com base no Delta Lake e o Delta Lake fornece um rico ecossistema de código aberto com conectores nativos para muitas linguagens e sistemas de dados corporativos. O Delta Sharing estende a capacidade de compartilhar dados armazenados com o Delta Lake para outros clientes.

O Delta Lake é criado com base no Parquet e, como tal, o Azure Databricks também tem leitores e gravadores otimizados para interagir com arquivos Parquet.

O Databricks recomenda o uso do Delta Lake para todas as tabelas que recebem atualizações ou consultas regulares do Azure Databricks. Você pode optar por manter dados no formato Parquet em alguns casos, como o seguinte:

  • Um sistema upstream que grava dados no Parquet não dá suporte à gravação nativa no Delta Lake.
  • Um sistema downstream que lê dados Parquet não pode ler o Delta Lake.

Em ambos os casos, convém replicar suas tabelas no Delta Lake para aproveitar os benefícios de desempenho durante a leitura, gravação, atualização e exclusão de registros na tabela.