Pular para o conteúdo principal

Migrar um data lake Parquet para o Delta Lake

Este artigo fornece recomendações para a conversão de um site existente Parquet data lake para Delta Lake. Delta Lake é o formato subjacente no arquivo Databricks lakehouse. Consulte O que é o Delta Lake?

Considerações antes de converter para Delta Lake

Seu data lake Parquet provavelmente tem uma estratégia de particionamento que foi otimizada para suas cargas de trabalho e sistemas existentes. Embora o senhor possa converter para o Delta Lake e manter essa estrutura de particionamento, as tabelas com excesso de particionamento são um dos principais culpados pela lentidão das cargas de trabalho no Delta Lake. Consulte Quando particionar tabelas em Databricks e diretrizes para adaptar o código Spark a Databricks.

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

Abordagens para Delta Lake conversão

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

  • Incremental : indica uma funcionalidade que suporta a conversão de dados adicionais anexados à fonte de conversão após o início da conversão.
  • Dados duplicados : indica se os dados foram gravados em um novo local ou modificados no local.
  • Mantém a estrutura de dados : indica se a estratégia de particionamento é mantida durante a conversão.
  • Dados de preenchimento : indica uma funcionalidade que oferece suporte ao preenchimento 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

Incremental

Dados duplicados

Mantém a estrutura de dados

Dados de preenchimento

Facilidade de uso

Deep CLONE Parquet

Sim

Sim

Sim

Sim

Fácil

Raso CLONE 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

Algumas configurações

lotes Spark Job

Lógica personalizada

Sim

Não

Lógica personalizada

Lógica personalizada

As seções a seguir discutem cada uma dessas opções com mais detalhes.

Migrar dados do Parquet com CLONE Parquet

O senhor pode usar o CLONE Parquet para copiar dados de forma incremental de um data lake Parquet para o Delta Lake. Os clones rasos criam ponteiros para os arquivos Parquet existentes, mantendo a tabela Parquet em seu local e formato originais e fornecendo acesso otimizado por meio de estatísticas de arquivos coletados. O senhor pode gravar na tabela criada por um shallow clone sem afetar a fonte de dados original.

O clone profundo copia todos os arquivos de dados da origem para um novo local enquanto converte para o Delta Lake. O clone profundo permite que o senhor detecte novos arquivos de forma incremental, incluindo operações de backfill, na execução subsequente da lógica. Consulte Clonar incrementalmente as tabelas Parquet e Iceberg para Delta Lake.

O exemplo a seguir demonstra o uso de CLONE:

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

Migrar dados Parquet com CONVERT TO DELTA

O senhor pode usar o site CONVERT TO DELTA para transformar um diretório de arquivos Parquet em uma tabela Delta com um único comando. Depois de converter uma tabela em Delta Lake, o senhor deve parar de ler e gravar na tabela usando a lógica do 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. Ver Convert to Delta Lake.

O exemplo a seguir demonstra o uso de CONVERT TO DELTA:

SQL
CONVERT TO DELTA parquet.`s3://my-bucket/parquet-data`;

Migrar dados do Parquet com o Auto Loader

Embora o Auto Loader seja um produto projetado para a ingestão incremental de dados do armazenamento de objetos na nuvem, o senhor pode aproveitá-lo para implementar um padrão que copia de forma incremental todos os dados de um determinado diretório para uma tabela de destino. Consulte O que é o Auto Loader?

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

  • Processe todos os arquivos existentes no diretório de origem.
  • Acione um trabalho de backfill semanal automático para capturar arquivos que possam ter sido perdidos.
  • Permitir que o Apache Spark use muitos Spark Job para evitar erros de derramamento e de falta de memória associados a grandes partições de dados.
  • Forneça garantias de processamento de ponta a ponta exatamente uma vez.
Python
(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)
)

O senhor pode usar o Auto Loader no DLT com Python ou SQL:

Migrar dados do Parquet com a lógica personalizada do Apache Spark lotes

Escrever uma lógica personalizada do Apache Spark oferece grande flexibilidade no controle de como e quando diferentes dados do sistema de origem são migrados, mas pode exigir uma configuração extensa para fornecer recursos incorporados em outras abordagens.

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

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

Para realizar backfills ou migração incremental, o senhor pode confiar na estrutura de particionamento da sua fonte de dados, mas também pode precisar escrever uma lógica personalizada para rastrear quais arquivos foram adicionados desde o último carregamento de dados da fonte. Embora o senhor possa usar os recursos do Delta Lake merge para evitar a gravação de 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 computacionalmente cara.

Quando o senhor não deve se converter para o Delta Lake?

Antes de converter todos os dados existentes do Parquet para o Delta Lake, é provável que o senhor considere possíveis compensações.

Databricks A lakehouse projeta muitos recursos otimizados em torno da Delta Lake, e a Delta Lake oferece um rico ecossistema de código aberto com conectores nativos para muitos idiomas e sistemas de dados corporativos. O Delta Sharing amplia a capacidade de compartilhar dados armazenados no Delta Lake com outros clientes.

O Delta Lake foi desenvolvido com base no Parquet e, como tal, o Databricks também otimizou os leitores e gravadores para interagir com os arquivos Parquet.

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

  • Um sistema upstream que grava dados no Parquet não é compatível com a gravação nativa no Delta Lake.
  • Um sistema downstream que tenha dados read.parquet não pode ler Delta Lake.

Em ambos os casos, talvez o senhor queira replicar suas tabelas no Delta Lake para aproveitar os benefícios de desempenho ao ler, gravar, atualizar e excluir registros na tabela.

nota

Não é recomendável modificar simultaneamente os dados na mesma tabela Delta armazenada em S3 a partir de vários espaços de trabalho ou sistemas de dados. Veja as limitações do Delta Lake no S3.