Partilhar via


Melhores práticas: Delta Lake

Este artigo descreve as práticas recomendadas ao usar o Delta Lake.

Visão geral das práticas recomendadas

A seguir estão recomendações gerais que se aplicam à maioria das cargas de trabalho do Delta Lake:

Remover configurações Delta herdadas

O Databricks recomenda remover a maioria das configurações Delta herdadas explícitas das configurações do Spark e das propriedades da tabela ao atualizar para uma nova versão do Databricks Runtime. As configurações herdadas podem impedir que novas otimizações e valores padrão introduzidos pelo Databricks sejam aplicados a cargas de trabalho migradas.

Arquivos compactos

A otimização preditiva é executada automaticamente ao correr comandos OPTIMIZE e VACUUM nas tabelas geridas do Unity Catalog. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.

O Databricks recomenda executar frequentemente o comando OPTIMIZE para compactar arquivos pequenos.

Nota

Esta operação não remove os ficheiros antigos. Para removê-los, execute o comando VACUUM.

Não use o cache do Spark com o Delta Lake

O Databricks não recomenda que você use o cache do Spark pelos seguintes motivos:

  • Você perde qualquer salto de dados que possa vir de filtros adicionais adicionados sobre o cache DataFrame.
  • Os dados armazenados em cache podem não ser atualizados se a tabela for acessada usando um identificador diferente.

Diferenças entre Delta Lake e Parquet no Apache Spark

O Delta Lake lida com as seguintes operações automaticamente. Nunca deve executar estas operações manualmente:

  • REFRESH TABLE: As tabelas delta sempre retornam as informações mais atualizadas, portanto, não há necessidade de ligar REFRESH TABLE manualmente após as alterações.
  • Adicionar e remover partições: o Delta Lake rastreia automaticamente o conjunto de partições presentes em uma tabela e atualiza a lista à medida que os dados são adicionados ou removidos. Como resultado, não há necessidade de executar ALTER TABLE [ADD|DROP] PARTITION ou MSCK.
  • Carregar uma única partição: Não é necessário ler partições diretamente. Por exemplo, tu não precisas de executar spark.read.format("parquet").load("/data/date=2017-01-01"). Em vez disso, use a cláusula WHERE para pular dados, como spark.read.table("<table-name>").where("date = '2017-01-01'").
  • Não modifique manualmente os arquivos de dados: o Delta Lake usa o log de transações para confirmar alterações na tabela atomicamente. Não modifique, adicione ou exclua diretamente arquivos de dados do Parquet em uma tabela Delta, pois isso pode levar à perda de dados ou à corrupção da tabela.

Melhorar o desempenho da fusão do Delta Lake

Você pode reduzir o tempo necessário para mesclar usando as seguintes abordagens:

  • Reduzir o espaço de pesquisa para correspondências: Por padrão, a operação pesquisa toda a merge tabela Delta para encontrar correspondências na tabela de origem. Uma maneira de acelerar merge é reduzir o espaço de pesquisa adicionando restrições conhecidas na condição de correspondência. Por exemplo, suponha que você tenha uma tabela particionada por country e date que deseja usar merge para atualizar as informações do último dia e de um país específico. Adicionar a seguinte condição torna a consulta mais rápida, pois procura correspondências apenas nas partições relevantes:

    events.date = current_date() AND events.country = 'USA'
    

    Além disso, essa consulta também reduz as chances de conflitos com outras operações simultâneas. Consulte Níveis de isolamento e conflitos de gravação no Azure Databricks para obter mais detalhes.

  • Arquivos compactos: Se os dados forem armazenados em muitos arquivos pequenos, a leitura dos dados para procurar correspondências pode ficar lenta. Você pode compactar arquivos pequenos em arquivos maiores para melhorar a taxa de transferência de leitura. Consulte Otimizar layout de arquivo de dados para obter detalhes.

  • Controlar as partições de embaralhamento para gravações: A operação merge embaralha os dados várias vezes para calcular e gravar os dados atualizados. O número de tarefas usadas para embaralhar é controlado pela configuração spark.sql.shuffle.partitions da sessão do Spark. A definição desse parâmetro não só controla o paralelismo, mas também determina o número de arquivos de saída. Aumentar o valor aumenta o paralelismo, mas também gera um número maior de arquivos de dados menores.

  • Ativar gravações otimizadas: Para tabelas particionadas, merge pode produzir um número muito maior de arquivos pequenos do que o número de partições aleatórias. Isso ocorre porque cada tarefa aleatória pode gravar vários arquivos em várias partições e pode se tornar um gargalo de desempenho. Você pode reduzir o número de arquivos habilitando gravações otimizadas. Consulte Escritas otimizadas para Delta Lake no Azure Databricks.

  • Ajustar tamanhos de arquivo na tabela: o Azure Databricks pode detetar automaticamente se uma tabela Delta tem operações frequentes merge que reescrevem arquivos e pode optar por reduzir o tamanho de arquivos regravados em antecipação a novas regravações de arquivos no futuro. Consulte a seção sobre ajuste de tamanhos de arquivo para obter detalhes.

  • Low Shuffle Merge: Low Shuffle Merge fornece uma implementação otimizada que fornece melhor desempenho para as cargas de MERGE trabalho mais comuns. Além disso, preserva otimizações de layout de dados existentes, como ordenação Z em dados não modificados.