Controlar o tamanho do arquivo de dados
As recomendações de ajuste manual não se aplicam a tabelas gerenciadas pelo Unity Catalog, que usam o ajuste automático do tamanho do arquivo. Para novas tabelas, use tabelas gerenciadas do Unity Catalog com configurações padrão.
No Databricks Runtime 13.3 LTS e acima, o Databricks recomenda usar clusters para a disposição da tabela. Consulte Usar clustering líquido para tabelas.
O Databricks recomenda o uso da otimização preditiva para executar automaticamente OPTIMIZE e VACUUM em tabelas. Consulte Otimização preditiva para tabelas gerenciadas do Unity Catalog.
A compactação automática e as gravações otimizadas estão sempre habilitadas para as operações MERGE, UPDATE e DELETE. Não é possível desativar esta funcionalidade.
O Databricks ajusta automaticamente os tamanhos de arquivo para tabelas gerenciadas pelo Unity Catalog. Para tabelas externas e cargas de trabalho herdadas, você pode configurar a compactação automática, gravações otimizadas e tamanhos de arquivo de destino para controlar como os dados são gravados e compactados.
Para tabelas gerenciadas do Unity Catalog, o Databricks ajusta a maioria das configurações automaticamente se estiver usando um SQL warehouse ou Databricks Runtime 11.3 LTS ou acima.
Se você estiver atualizando uma carga de trabalho do Databricks Runtime 10.4 LTS ou abaixo, consulte Atualizar para compactação automática em segundo plano.
Quando executar OPTIMIZE
Compactação automática e gravações otimizadas reduzem problemas de arquivos pequenos, mas não são uma substituição total para OPTIMIZE. Para tabelas maiores que 1 TB, o Databricks recomenda executar OPTIMIZE para programar e consolidar ainda mais os arquivos. A Databricks recomenda o clustering líquido para um salto de dados aprimorado. Com o clustering líquido ativado, OPTIMIZE reorganiza os dados automaticamente pelas chaves de cluster. Consulte Usar clustering líquido para tabelas.
Para tabelas gerenciadas do Unity Catalog, a otimização preditiva executa automaticamente OPTIMIZE em tabelas com otimização preditiva habilitada.
Otimização automática
A otimização automática descreve as configurações autoOptimize.autoCompact e autoOptimize.optimizeWrite. Consulte Compactação automática e Gravações otimizadas.
Compactação automática
A compactação automática combina arquivos pequenos nas partições da tabela para reduzir os problemas com arquivos pequenos. É executada de forma síncrona no cluster que realiza a gravação, após a gravação ser bem-sucedida, e compacta apenas arquivos que não foram compactados anteriormente.
A compactação automática e a otimização preditiva são recursos independentes que podem ser usados separadamente ou em conjunto. A compactação automática é executada no cluster que realiza a gravação, enquanto a otimização preditiva executa operações de manutenção assincronamente usando compute serverless.
Use as seguintes configurações para configurar a compactação automática:
Contexto | Delta | Iceberg | Descrição |
|---|---|---|---|
Habilitar compactação automática (propriedade da tabela) |
|
| Habilita a compactação automática no nível da tabela. |
Habilitar compactação automática (sessão Spark) |
|
| Ativa a compactação automática no nível da sessão. |
Tamanho máximo do arquivo de saída |
|
| Controle do tamanho do arquivo de saída de destino. |
Número mínimo de arquivos para acionar a compactação |
|
| Define o número mínimo de arquivos menores necessários em uma partição ou tabela para acionar a compactação automática. |
Estas configurações aceitam as seguintes opções:
Opções | Comportamento |
|---|---|
| Ajusta o tamanho do arquivo de destino enquanto respeita outras funcionalidades de ajuste automático. |
| Pseudônimo para |
| Use 128 MB como o tamanho do arquivo de destino. Sem dimensionamento dinâmico. |
| Desativa a compactação automática. Pode ser configurado na sessão para substituir a compactação automática para todas as tabelas modificadas na carga de trabalho. |
A Databricks recomenda o uso do ajuste automático para controlar o tamanho do arquivo de saída com base no tamanho da tabela. Consulte Ajuste automático do tamanho do arquivo 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. A gravação de menos arquivos grandes é mais eficiente do que gravar muitos arquivos pequenos, mas ainda pode haver um aumento na latência de gravação devido ao rearranjo dos dados antes da gravação.
A imagem a seguir mostra como as gravações otimizadas funcionam:

Se usar gravações otimizadas, a Databricks recomenda que coalesce(n) ou repartition(n) não sejam feitas execuções imediatamente antes de uma gravação para controlar o número de arquivos gravados.
Gravações otimizadas são habilitadas por default para as seguintes operações:
MERGEUPDATEcom subconsultasDELETEcom subconsultas
Gravações otimizadas também são habilitadas para CTAS instruções e INSERT operações ao usar SQL warehouses. No Databricks Runtime 13.3 LTS e acima, todas as tabelas registradas no Unity Catalog têm gravações otimizadas habilitadas para instruções CTAS e operações INSERT para tabelas particionadas.
As gravações otimizadas podem ser habilitadas no nível da tabela ou da sessão usando as seguintes configurações:
- Propriedade da tabela:
autoOptimize.optimizeWrite - Configuração do SparkSession:
spark.databricks.delta.optimizeWrite.enabled(Delta) ouspark.databricks.iceberg.optimizeWrite.enabled(Iceberg)
Estas configurações aceitam as seguintes opções:
Opções | Comportamento |
|---|---|
| Use 128 MB como o tamanho do arquivo de destino. |
| Desativa as gravações otimizadas. Pode ser definido no nível da sessão para substituir gravações otimizadas para todas as tabelas modificadas na carga de trabalho. |
Definir um tamanho de arquivo de destino
Para ajustar o tamanho dos arquivos na sua tabela, defina a propriedade da tabela targetFileSize para o tamanho desejado. Quando definido, todas as operações de otimização de disposição de dados fazem uma tentativa de melhor esforço para gerar arquivos do tamanho especificado, incluindo otimização, clustering líquido, compactação automática e gravações otimizadas.
Ao usar tabelas gerenciadas do Unity Catalog e SQL warehouses ou Databricks Runtime 11.3 LTS e versões superiores, somente OPTIMIZE os comandos respeitam a configuração. targetFileSize
Propriedade | Descrição |
|---|---|
| Tipo : tamanho em bytes ou unidades superiores. Descrição : O tamanho do arquivo de destino. Por exemplo, Valor padrão : Nenhum |
Para tabelas existentes, você pode definir e cancelar a definição de propriedades usando o comando SQL ALTER TABLE SET 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 de propriedades da tabela para detalhes.
Ajuste automático do tamanho do arquivo com base no tamanho da tabela
Para minimizar o ajuste manual, o Databricks ajusta automaticamente o tamanho do arquivo das tabelas com base no tamanho da tabela. O Databricks usa tamanhos de arquivo menores para tabelas menores e tamanhos de arquivo maiores para tabelas maiores, para que o número de arquivos na tabela não aumente muito. O Databricks não ajusta automaticamente tabelas que você ajustou com um tamanho de destino específico.
O tamanho do arquivo de destino é baseado 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 um tamanho entre 2,56 TB e 10 TB, o tamanho de destino cresce linearmente de 256 MB para 1 GB. Para tabelas maiores que 10 TB, o tamanho do arquivo de destino é 1 GB.
Quando o tamanho do arquivo de destino em uma tabela aumenta, os arquivos existentes não são otimizados novamente em arquivos maiores pelo comando OPTIMIZE. Uma tabela grande pode, portanto, sempre ter alguns arquivos menores que o tamanho de destino. Se também for necessário otimizar esses arquivos menores em arquivos maiores, você pode configurar um tamanho de arquivo de destino fixo para a tabela usando a propriedade targetFileSize.
Quando uma tabela é gravada de forma incremental, os tamanhos e contagens de arquivos de destino estarão próximos aos seguintes números, com base no tamanho da tabela. As contagens de arquivos 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 | 256 MB | 40 |
1 TB | 256 MB | 4096 |
2,56 TB | 256 MB | 10240 |
3 TB | 307 MB | 12108 |
5 TB | 512 MB | 17339 |
7 TB | 716 MB | 20784 |
10 TB | 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 apresentar um erro em que o número de linhas em um determinado arquivo de dados excede os limites de suporte do formato Parquet. Para evitar este erro, você pode usar a configuração de sessão SQL spark.sql.files.maxRecordsPerFile para especificar o número máximo de registros a serem gravados em um único arquivo para uma tabela. Especificar um valor zero ou um valor negativo representa nenhum limite.
Também é possível usar a opção DataFrameWriter maxRecordsPerFile ao usar as APIs do DataFrame para gravar em uma tabela. Quando maxRecordsPerFile é especificado, o valor de configuração spark.sql.files.maxRecordsPerFile da sessão SQL é ignorado.
O Databricks não recomenda usar maxRecordsPerFile, a menos que seja necessário para evitar o erro. Essa configuração pode ser necessária para algumas tabelas gerenciadas pelo Unity Catalog com dados muito restritos.
Atualização para compactação automática em segundo plano
A autocompactação em segundo plano está disponível para tabelas gerenciadas do Unity Catalog. A autocompactação em segundo plano não exige otimização preditiva. Ao migrar uma carga de trabalho ou tabela legada, execute o seguinte:
- Remova a configuração do Spark
spark.databricks.delta.autoCompact.enabled(Delta) ouspark.databricks.iceberg.autoCompact.enabled(Iceberg) das configurações de cluster ou notebook. - Para cada tabela, execute
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)(Delta) ouALTER TABLE <table_name> UNSET TBLPROPERTIES (iceberg.autoOptimize.autoCompact)(Iceberg) para remover quaisquer configurações de compactação automática herdadas.
Após remover essas configurações legadas, a compactação automática em segundo plano é acionada automaticamente para todas as tabelas gerenciadas pelo Unity Catalog.