Tamanho do ficheiro de dados de controlo

Note

As recomendações de afinação manual não se aplicam às tabelas geridas pelo Unity Catalog, que usam afinação automática do tamanho dos ficheiros. Para novas tabelas, use tabelas geridas do Unity Catalog com definições predefinidas.

No Databricks Runtime 13.3 LTS e superiores, o Databricks recomenda a utilização de clustering para a disposição de tabelas. Veja Utilizar clustering líquido para tabelas.

O Databricks recomenda o uso da otimização preditiva para executar automaticamente OPTIMIZE e VACUUM para tabelas. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.

A compactação automática e as gravações otimizadas estão sempre ativadas para as operações MERGE, UPDATE e DELETE. Não podes desligar esta funcionalidade.

O Azure Databricks ajusta automaticamente os tamanhos dos ficheiros para tabelas geridas pelo Unity Catalog. Para tabelas externas e cargas de trabalho legadas, pode configurar compactação automática, escritas otimizadas e tamanhos de ficheiro alvo para controlar como os dados são escritos e compactados.

Para tabelas geridas pelo Unity Catalog, o Databricks ajusta automaticamente a maioria das configurações se estiver a usar um SQL warehouse ou Databricks Runtime 11.3 LTS ou superior.

Caso esteja a atualizar uma tarefa do Databricks Runtime 10.4 LTS ou inferior, consulte Atualização para compactação automática em segundo plano.

Quando executar OPTIMIZE

A compactação automática e as gravações otimizadas reduzem os problemas de pequenos arquivos, mas não são um substituto completo para OPTIMIZE. Para tabelas com mais de 1 TB, a Databricks recomenda executar OPTIMIZE de forma programada para consolidar ainda mais os ficheiros. Databricks recomenda o agrupamento líquido para otimizar o processamento de dados. Quando o agrupamento de líquidos está ativado, OPTIMIZE os dados são automaticamente reorganizados pelas chaves de agrupamento. Veja Utilizar clustering líquido para tabelas.

Para tabelas geridas pelo Unity Catalog, a otimização preditiva corre OPTIMIZE automaticamente em tabelas com a otimização preditiva ativada.

Otimização automática

A otimização automática descreve as definições autoOptimize.autoCompact e autoOptimize.optimizeWrite. Veja Compactação automática e Escritas otimizadas.

Compactação automática

A autocompactação combina pequenos ficheiros dentro de partições de tabelas para reduzir problemas com ficheiros pequenos. Corre de forma síncrona no cluster que realiza a escrita, depois de a escrita ser bem-sucedida, e só compacta ficheiros que não foram compactados anteriormente.

A autocompactação e a otimização preditiva são características independentes que podem ser usadas separadamente ou em conjunto. A autocompactação automática corre no cluster que está a realizar a escrita, enquanto a otimização preditiva executa operações de manutenção de forma assíncrona usando computação sem servidor.

Use as seguintes definições para configurar a autocompactação:

Setting Delta Iceberg Description
Ativar a autocompactação (propriedade da tabela) autoOptimize.autoCompact autoOptimize.autoCompact Permite a compactação automática ao nível da mesa.
Ativar a compactação automática (sessão Spark) spark.databricks.delta.autoCompact.enabled spark.databricks.iceberg.autoCompact.enabled Permite a compactação automática ao nível da sessão.
Tamanho máximo do ficheiro de saída spark.databricks.delta.autoCompact.maxFileSize spark.databricks.iceberg.autoCompact.maxFileSize Controla o tamanho do ficheiro de saída alvo.
Ficheiros mínimos para desencadear compactação spark.databricks.delta.autoCompact.minNumFiles spark.databricks.iceberg.autoCompact.minNumFiles Define o número mínimo de ficheiros pequenos necessários numa partição ou tabela para desencadear a autocompactação.

Essas configurações aceitam as seguintes opções:

Opções Comportamento
auto (recomendado) Ajusta o tamanho do arquivo de destino enquanto respeita outras funcionalidades de ajuste automático.
legacy Alias para true.
true Use 128 MB como o tamanho do arquivo de destino. Sem dimensionamento dinâmico.
false Desativa a compactação automática. Pode ser definido ao nível da sessão para sobrepor a compactação automática para todas as tabelas modificadas na carga de trabalho.

Note

O Azure Databricks recomenda usar o autotune para controlar o tamanho do ficheiro de saída com base no tamanho da tabela. Veja o tamanho do ficheiro Autotune com base no tamanho da tabela.

Gravações otimizadas

As gravações otimizadas melhoram o tamanho do arquivo à medida que os dados são gravados e beneficiam as leituras subsequentes na tabela.

As gravações otimizadas são mais eficazes para tabelas particionadas, pois reduzem o número de pequenos arquivos gravados em cada partição. Gravar menos arquivos grandes é mais eficiente do que gravar muitos arquivos pequenos, mas pode ainda observar um aumento na latência de gravação porque os dados são reorganizados antes de serem gravados.

A imagem a seguir demonstra como as gravações otimizadas funcionam:

Gravações otimizadas

Note

Se utilizar escritas otimizadas, a Databricks recomenda que não execute coalesce(n) nem repartition(n) imediatamente antes de uma operação de escrita para controlar o número de ficheiros escritos.

As escritas otimizadas são ativadas por defeito para as seguintes operações:

  • MERGE
  • UPDATE com subconsultas
  • DELETE com subconsultas

As gravações otimizadas também são habilitadas para CTAS instruções e INSERT operações ao usar armazéns SQL. No Databricks Runtime 13.3 LTS e superiores, todas as tabelas registadas no Unity Catalog têm escritas otimizadas ativadas para instruções CTAS e operações INSERT para tabelas particionadas.

As gravações otimizadas podem ser ativadas no nível da tabela ou da sessão usando as seguintes configurações:

  • Propriedade da tabela: autoOptimize.optimizeWrite
  • Configuração SparkSession: spark.databricks.delta.optimizeWrite.enabled (Delta) ou spark.databricks.iceberg.optimizeWrite.enabled (Iceberg)

Essas configurações aceitam as seguintes opções:

Opções Comportamento
true Use 128 MB como o tamanho do arquivo de destino.
false Desativa gravações otimizadas. Pode ser definido ao nível da sessão para substituir as gravações otimizadas em todas as tabelas modificadas na carga de trabalho.

Definir um tamanho de arquivo de destino

Para ajustar o tamanho dos ficheiros na sua tabela, defina a propriedadetargetFileSize da tabela para o tamanho desejado. Quando definido, todas as operações de otimização da disposição dos dados envidam os melhores esforços para gerar ficheiros com o tamanho especificado, incluindo optimize, liquid clustering, compactação automática e escritas otimizadas.

Note

Ao usar tabelas geridas do Unity Catalog e armazéns SQL ou o Databricks Runtime 11.3 LTS ou superior, apenas OPTIMIZE comandos respeitam a targetFileSize configuração.

Property Description
delta.targetFileSize (Delta)
iceberg.targetFileSize (Iceberg)
Tipo: Tamanho em bytes ou unidades superiores.
Descrição: O tamanho alvo do ficheiro. Por exemplo, 104857600 (bytes) ou 100mb.
Valor padrão: Nenhum

Para tabelas existentes, você pode definir e desdefinir propriedades usando o comando SQL ALTER TABLESET TBL PROPERTIES. Você também pode definir essas propriedades automaticamente ao criar novas tabelas usando as configurações de sessão do Spark. Consulte a referência das propriedades da tabela para mais detalhes.

Ajustar automaticamente o tamanho do ficheiro com base no tamanho da tabela

Para minimizar a afinação manual, o Azure Databricks ajusta automaticamente o tamanho do ficheiro das tabelas com base no tamanho da tabela. O Azure Databricks usa tamanhos de ficheiro mais pequenos para tabelas mais pequenas e ficheiros maiores para tabelas maiores, de modo a que o número de ficheiros na tabela não cresça demasiado. O Azure Databricks não autotunea tabelas que tem ajustadas com um tamanho alvo específico.

O tamanho do ficheiro alvo baseia-se no tamanho atual da tabela. Para tabelas menores que 2,56 TB, o tamanho do arquivo de destino ajustado automaticamente é de 256 MB. Para tabelas com tamanho entre 2,56 TB e 10 TB, o tamanho alvo cresce linearmente de 256 MB para 1 GB. Para tabelas maiores que 10 TB, o tamanho do arquivo de destino é de 1 GB.

Note

Quando o tamanho do arquivo de destino de uma tabela aumenta, os arquivos existentes não são reotimizados para arquivos maiores pelo OPTIMIZE comando. Portanto, uma tabela grande sempre pode ter alguns arquivos menores do que o tamanho de destino. Se for necessário otimizar esses arquivos menores em arquivos maiores também, você pode configurar um tamanho de arquivo de destino fixo para a tabela usando a targetFileSize propriedade table.

Quando uma tabela é escrita incrementalmente, os tamanhos de arquivo de destino e as contagens de arquivos serão próximos aos números a seguir, com base no tamanho da tabela. As contagens de ficheiros nesta tabela são apenas um exemplo. Os resultados reais serão diferentes dependendo de muitos fatores.

Tamanho da tabela Tamanho do arquivo de destino Número aproximado de arquivos na tabela
10 GB 256MB 40
1 TB 256MB 4096
2,56 TB 256MB 10240
3 TB 307 MB 12108
5 TB 512 MB 17339
7 TB 716 MB 20784
10 terabytes 1 GB 24437
20 TB 1 GB 34437
50 TB 1 GB 64437
100 TB 1 GB 114437

Limitar linhas gravadas em um arquivo de dados

Ocasionalmente, tabelas com dados estreitos podem encontrar um erro quando o número de linhas em um determinado arquivo de dados excede os limites de suporte do formato Parquet. Para evitar este erro, pode usar a configuração spark.sql.files.maxRecordsPerFile de sessão SQL para especificar o número máximo de registos a escrever num único ficheiro para uma tabela. Especificar um valor zero ou um valor negativo não representa limite.

Também pode usar a opção maxRecordsPerFile DataFrameWriter ao usar as APIs DataFrame para escrever numa tabela. Quando maxRecordsPerFile é especificado, o valor da configuração spark.sql.files.maxRecordsPerFile da sessão SQL é ignorado.

Note

O Databricks não recomenda a sua utilização maxRecordsPerFile a menos que seja necessário para evitar o erro. Esta configuração pode ser necessária para algumas tabelas geridas pelo Unity Catalog com dados muito restritos.

Atualize para a compactação automática em segundo plano

A compactação automática em segundo plano está disponível para tabelas geridas pelo Unity Catalog. A autocompactação em segundo plano não requer otimização preditiva. Ao migrar uma carga de trabalho ou tabela herdada, faça o seguinte:

  1. Remova a configuração Spark spark.databricks.delta.autoCompact.enabled (Delta) ou spark.databricks.iceberg.autoCompact.enabled (Iceberg) das definições do cluster ou do notebook.
  2. Para cada tabela, execute ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact) (Delta) ou ALTER TABLE <table_name> UNSET TBLPROPERTIES (iceberg.autoOptimize.autoCompact) (Iceberg) para remover quaisquer definições legadas de autocompactação.

Após a remoção destas configurações legadas, a autocompactação em segundo plano é ativada automaticamente para todas as tabelas geridas pelo Unity Catalog.