Eliminação dinâmica de ficheiros

Quando uma consulta une uma tabela Delta Lake grande a uma tabela menor filtrada, os valores do filtro só são conhecidos quando a consulta é executada. Sem poda em tempo de execução, a consulta analisa todos os ficheiros da tabela grande, até mesmo os que não contêm linhas correspondentes. A poda dinâmica de ficheiros resolve este problema. Em tempo de execução, o otimizador propaga os resultados do filtro de um lado do join para a varredura da tabela Delta Lake e ignora ficheiros que não podem conter linhas correspondentes.

A poda dinâmica de ficheiros está ativada por defeito. Não precisa de alterar as suas consultas para beneficiar disso.

Quando se aplica a eliminação dinâmica de ficheiros

A poda dinâmica de ficheiros aplica-se apenas a joins em tabelas Delta Lake. Numa MERGE declaração, utiliza os valores da chave de junção da origem para saltar ficheiros de destino quando a condição de fusão compara uma coluna de origem com uma coluna de destino para verificar se são iguais. Em instruções UPDATE e DELETE, aplica-se quando a condição contém uma subconsulta que faz o mesmo tipo de comparação.

A eliminação dinâmica de ficheiros nas instruções MERGE, UPDATE e DELETE requer computação com Photon ativado. Para SELECT declarações, o Photon tem uma poda dinâmica de ficheiros mais ampla e fiável. Sem o Photon, a poda dinâmica de ficheiros ainda pode aplicar-se a instruções SELECT, dependendo da forma da consulta e do plano de execução. Veja O que é Photon?.

A poda dinâmica de ficheiros melhora o desempenho principalmente para tabelas não particionadas e para joins em colunas não particionadas. Por defeito, só é ativado quando a grande tabela Delta Lake na junção tem pelo menos 10 GB e tem pelo menos 10 ficheiros. Consulte Configuração.

A poda dinâmica de ficheiros também reduz conflitos de escrita. Quando o Delta Lake verifica conflitos durante um commit, considera ficheiros que a poda dinâmica de ficheiros ignorou. Isto reduz o número de transações falhadas. Veja Níveis de isolamento e conflitos de escrita.

Melhores práticas

O efeito de desempenho da poda dinâmica de ficheiros correlaciona-se com a forma como os dados são agrupados. Se os valores em que se junta estiverem espalhados por todos os ficheiros, a poda dinâmica de ficheiros ignora apenas alguns ficheiros. Para ajudar a poda dinâmica de ficheiros a saltar mais ficheiros, siga estas práticas:

  • Utilize liquid clustering nas colunas onde faz frequentemente junções, para que as linhas correspondentes fiquem colocalizadas em menos ficheiros.
  • Use computação com Photon ativado, que as instruções MERGE, UPDATE e DELETE requerem para a poda dinâmica de ficheiros.

Configuração

A maioria das cargas de trabalho não precisa de alterar estas definições. Considere ajustar os limiares se uma junção contra uma tabela Delta Lake menor beneficiaria da poda, mas fique abaixo do limite padrão de tamanho ou número de ficheiros.

Estas propriedades de configuração do Apache Spark controlam a poda dinâmica dos ficheiros:

Property Tipo Default Description
spark.databricks.optimizer.dynamicFilePruning Boolean true Ativa ou desativa a poda dinâmica de ficheiros.
spark.databricks.optimizer.deltaTableSizeThreshold Long 10000000000 (10 GB) O tamanho mínimo, em bytes, da grande tabela Delta Lake na junção que desencadeia a poda dinâmica de ficheiros. Para uma tabela pequena, analisar a tabela inteira costuma ser mais barato do que aplicar os filtros ao nível inferior.
Para encontrar o tamanho de uma tabela Delta Lake, execute DESCRIBE DETAIL table_name e verifique a coluna sizeInBytes.
spark.databricks.optimizer.deltaTableFilesThreshold Integer 10 O número mínimo de ficheiros na grande tabela Delta Lake na junção que desencadeia a poda dinâmica de ficheiros. Se a tabela tiver menos ficheiros do que este limiar, a poda dinâmica de ficheiros não é executada, porque pode não valer a pena para uma tabela com apenas alguns ficheiros.
Para encontrar o número de ficheiros numa tabela Delta Lake, execute DESCRIBE DETAIL table_name e verifique a numFiles coluna.