Pular para o conteúdo principal

Práticas recomendadas: Delta Lake

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

Visão geral das melhores práticas

As recomendações a seguir são gerais e se aplicam à maioria das cargas de trabalho do Delta Lake:

Remover as configurações Delta legadas

A Databricks recomenda remover a maioria das configurações Delta legadas 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 default introduzidos pelo Databricks sejam aplicados às cargas de trabalho migradas.

Arquivos compactos

Otimização preditiva executando automaticamente OPTIMIZE e VACUUM comando em Unity Catalog gerenciar tabelas. Consulte Otimização preditiva para Unity Catalog gerenciar tabelas.

A Databricks recomenda a execução frequente do comando OPTIMIZE para compactar arquivos pequenos.

nota

Essa operação não remove os arquivos antigos. Para removê-los, execute o vacuum comando.

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

A Databricks não recomenda que o senhor use o cache do Spark pelos seguintes motivos:

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

Diferenças entre o Delta Lake e o Parquet no Apache Spark

O Delta Lake lida com as seguintes operações automaticamente. Você 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, você não precisa executar o spark.read.format("parquet").load("/data/date=2017-01-01"). Em vez disso, utilize uma 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 as alterações na tabela atomicamente. Não modifique, adicione ou exclua arquivos de dados Parquet diretamente em uma tabela Delta, porque isso pode levar à perda de dados ou à corrupção da tabela.

Melhorar o desempenho para Delta Lake merge

O senhor pode reduzir o tempo necessário para acessar merge usando as seguintes abordagens:

  • Reduza o espaço de busca por correspondências : por padrão, a merge operação pesquisa toda a tabela Delta para encontrar correspondências na tabela de origem. Uma forma 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 date e e queira usar merge para atualizar as informações do último dia e de um país específico. Adicionar a condição a seguir torna a consulta mais rápida, pois ela procura correspondências somente nas partições relevantes:

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

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

  • Arquivos compactos : se os dados estiverem armazenados em muitos arquivos pequenos, a leitura dos dados para pesquisar correspondências pode ficar lenta. O senhor pode compactar arquivos pequenos em arquivos maiores para melhorar a leitura do Taxa de transferência. Para obter detalhes, consulte Otimizar a disposição do arquivo de dados.

  • Controle as partições aleatórias para gravações : a operação merge embaralha dados várias vezes para calcular e gravar os dados atualizados. O número de tarefas usadas para embaralhar é controlado pela configuração da sessão do Spark spark.sql.shuffle.partitions. A definição desse parâmetro não apenas 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.

  • Habilitar 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 de embaralhamento pode gravar vários arquivos em várias partições, o que pode se tornar um gargalo de desempenho. Você pode reduzir o número de arquivos ativando gravações otimizadas. Consulte Gravações otimizadas para Delta Lake em Databricks.

  • Ajuste o tamanho dos arquivos na tabela : O Databricks pode detectar automaticamente se uma tabela Delta tem operações merge frequentes que reescrevem arquivos e pode optar por reduzir o tamanho dos arquivos reescritos em antecipação a outras reescritas de arquivos no futuro. Consulte a seção sobre ajuste de tamanhos de arquivos para obter detalhes.

  • Low Shuffle merge : A mesclagem Low Shuffle oferece uma implementação otimizada do site MERGE que proporciona melhor desempenho para as cargas de trabalho mais comuns. Além disso, ele preserva as otimizações de disposição de dados existentes, como Z-ordering em dados não modificados.