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, o senhor não precisa executar spark.read.format("parquet").load("/data/date=2017-01-01"). Em vez disso, use 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 : Delta Lake usa a transação log para commit alterar a tabela atomicamente. Não modifique, adicione ou exclua diretamente arquivos de dados Parquet em uma tabela Delta, pois isso pode resultar em 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 concorrentes. Consulte Níveis de isolamento e conflitos de escrita 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 de shuffle. Isso ocorre porque cada tarefa de embaralhamento pode gravar vários arquivos em várias partições, podendo se tornar um gargalo de desempenho. Você pode reduzir o número de arquivos ativando as gravações otimizadas. Veja Escritas otimizadas.

  • Ajuste automático do tamanho dos arquivos com base no tamanho da tabela : o Databricks ajusta automaticamente o tamanho dos arquivos de acordo com o tamanho da tabela, usando arquivos menores para tabelas menores e arquivos maiores para tabelas maiores. Consulte a seção sobre ajuste de tamanho de arquivos para obter detalhes.

  • A mesclagem Low Shuffle fornece uma implementação otimizada de MERGE que oferece melhor desempenho para as cargas de trabalho mais comuns. Além disso, preserva os dados existentes, oferecendo otimizações como clusteringlíquido em dados não modificados.