Migrar um data lake Parquet para Delta Lake
Este artigo fornece recomendações para converter um data lake Parquet existente em Delta Lake. Delta Lake é o formato subjacente no Lakehouse do Databricks. Veja O que é 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 você possa converter para Delta Lake e manter essa estrutura de particionamento, as tabelas superparticionadas são um dos principais culpados que causam cargas de trabalho lentas no Delta Lake. Consulte Quando particionar tabelas no Databricks e diretrizes para adaptar o código 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 com que frequência os dados estão sendo query no momento. Você pode escolher diferentes abordagens para diferentes tabelas Parquet em seu data lake.
Abordagens para a conversão do Delta Lake
A matriz a seguir descreve as quatro abordagens principais para converter um data lake Parquet em Delta Lake e algumas das compensações. Para esclarecer cada coluna:
Incremental: denota a funcionalidade que oferece suporte à conversão de dados adicionais anexados à fonte de conversão após o início da conversão.
Dados duplicados: indica se os dados são 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: denota a funcionalidade que oferece suporte aos dados de preenchimento 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 |
Fácil de usar |
---|---|---|---|---|---|
Parquet |
Sim |
Sim |
Sim |
Sim |
Fácil |
Parquet raso |
Sim |
Não |
Sim |
Sim |
Fácil |
|
Não |
Não |
Sim |
Não |
Fácil |
Carregador automático |
Sim |
Sim |
Não |
Opcional |
Alguma configuração |
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 em maior profundidade.
Migrar dados do Parquet com CLONE
Parquet
Você pode usar o CLONE
Parquet para copiar dados de forma incremental de um data lake Parquet para o Delta Lake. Clones rasos criam ponteiros para arquivos Parquet existentes, mantendo sua tabela Parquet em seu local e formato originais enquanto fornecem acesso otimizado por meio de estatísticas de arquivo coletadas. 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 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
:
CREATE OR REPLACE TABLE <target-table-name> [SHALLOW] CLONE parquet.`/path/to/data`;
Migrar dados do Parquet com CONVERT TO DELTA
O senhor 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 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
:
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 do cloud, 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 Job de preenchimento semanal automático para capturar arquivos que podem ter sido perdidos.
Permita que o Apache Spark use muitos Job do Spark para evitar erros de derramamento e falta de memória 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 Auto Loader em Delta Live Tables com Python ou SQL:
Migre os dados do Parquet com a lógica personalizada de lotes do Apache Spark
Escrever a lógica personalizada do Apache Spark fornece grande flexibilidade no controle de como e quando diferentes dados do seu sistema de origem são migrados, mas pode exigir configuração extensiva para fornecer recursos integrados a outras abordagens.
No centro dessa abordagem está uma operação simples de leitura e gravação do Apache Spark, como as seguintes:
spark.read.format("parquet").load(file_path).write.mode("append").saveAsTable(table_name)
Para executar preenchimentos ou migração incremental, você pode contar com a estrutura de particionamento de sua fonte de dados, mas também pode precisar escrever uma lógica personalizada para rastrear quais arquivos foram adicionados desde a última vez que você carregou dados da fonte. Embora você possa usar os recursos de mesclagem do Delta Lake para evitar a gravação de registros duplicados, comparar todos os registros de uma grande tabela de origem Parquet com o conteúdo de uma grande tabela Delta é uma tarefa computacional cara.
Quando você não deve converter para Delta Lake?
Antes de converter todos os dados existentes do Parquet em Delta Lake, é provável que você 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 é construído sobre o Parquet e, como tal, o Databricks também otimizou leitores e gravadores para interagir com arquivos Parquet.
Databricks recomenda usar Delta Lake para todas as tabelas que recebem atualizações regulares ou query de Databricks. Você 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 oferece suporte à gravação nativa no Delta Lake.
Um sistema downstream que lê dados do Parquet não pode ler Delta Lake.
Em ambos os casos, convém replicar suas tabelas para Delta Lake para aproveitar os benefícios de desempenho durante a leitura, gravação, atualização e exclusão de registros na tabela.
Observação
A modificação simultânea de dados na mesma tabela Delta armazenada no S3 de vários workspace ou sistemas de dados não é recomendada. Consulte as limitações do Delta Lake no S3.