Controlar o tamanho do arquivo de dados

Nota

Recomendações de ajuste manual não se aplicam a tabelas gerenciadas do Catálogo do Unity, que usam ajuste automático de tamanho de arquivo. Para novas tabelas, use tabelas gerenciadas do Catálogo do Unity com configurações padrão.

No Databricks Runtime 13.3 LTS e versões posteriores, a Databricks recomenda usar o agrupamento para o layout da tabela. Consulte Usar clustering líquido para tabelas.

O Databricks recomenda usar otimização preditiva para executar OPTIMIZE e VACUUM automaticamente para tabelas. Consulte Otimização Preditiva para Tabelas Gerenciadas do Unity Catalog.

A compactação automática e as escritas otimizadas estão sempre habilitadas para as operações MERGE, UPDATE e DELETE. Você não pode desativar essa funcionalidade.

Azure Databricks ajusta automaticamente os tamanhos de arquivo para tabelas gerenciadas do Catálogo do Unity. 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 Catálogo do Unity, o Databricks ajusta a maioria das configurações automaticamente se você estiver usando um SQL Warehouse ou Databricks Runtime 11.3 LTS ou superior.

Se você estiver atualizando uma carga de trabalho do Databricks Runtime 10.4 LTS ou anterior, confira Atualizar 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 arquivos pequenos, mas não substituem totalmente o OPTIMIZE. Para tabelas maiores que 1 TB, o Databricks recomenda a execução de OPTIMIZE regularmente para consolidar ainda mais os arquivos. O Databricks recomenda o clustering líquido para aprimorar a omissão de dados. Quando a agrupação líquida é habilitada, OPTIMIZE reorganiza automaticamente os dados pelas chaves de agrupamento. Consulte Usar clustering líquido para tabelas.

Para tabelas gerenciadas do Catálogo do Unity, a otimização preditiva é executada OPTIMIZE automaticamente 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 em partições de tabela para reduzir pequenos problemas de arquivo. Ele é executado de forma síncrona no cluster que executa a gravação, depois que a gravação é bem-sucedida e compacta apenas arquivos que não foram compactados anteriormente.

Compactação automática e otimização preditiva são recursos independentes que podem ser usados separadamente ou juntos. A compactação automática é executada no cluster executando a gravação, enquanto a otimização preditiva executa operações de manutenção de forma assíncrona usando a computação sem servidor.

Use as seguintes configurações para configurar a compactação automática:

Setting Delta Iceberg Descrição
Habilitar a compactação automática (propriedade de tabela) autoOptimize.autoCompact autoOptimize.autoCompact Habilita a compactação automática no nível da tabela.
Habilitar a compactação automática (sessão do Spark) spark.databricks.delta.autoCompact.enabled spark.databricks.iceberg.autoCompact.enabled Habilita a compactação automática no nível da sessão.
Tamanho máximo do arquivo de saída spark.databricks.delta.autoCompact.maxFileSize spark.databricks.iceberg.autoCompact.maxFileSize Controla o tamanho do arquivo de saída de destino.
Arquivos mínimos para disparar a compactação spark.databricks.delta.autoCompact.minNumFiles spark.databricks.iceberg.autoCompact.minNumFiles Define o número mínimo de arquivos pequenos necessários em uma partição ou tabela para disparar a compactação automática.

Essas configurações aceitam as opções a seguir:

Opções Behavior
auto (recomendado) Ajusta o tamanho do arquivo de destino, respeitando outras funcionalidades do 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 em nível de sessão para substituir a compactação automática para todas as tabelas alteradas na carga de trabalho.

Nota

O Azure Databricks recomenda usar o ajuste automático para controlar o tamanho do arquivo de saída com base no tamanho da tabela. Consulte o tamanho do arquivo do 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 leituras subsequentes na tabela.

Gravações otimizadas são mais eficientes 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 você ainda pode ver um aumento na latência de gravação porque os dados são misturados antes de serem gravados.

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

Gravações otimizadas

Nota

Se você usar gravações otimizadas, o Databricks recomenda que você não execute coalesce(n) ou repartition(n) apenas antes de uma gravação para controlar o número de arquivos gravados.

As gravações otimizadas são habilitadas por padrão 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 SQL Warehouses. Na versão 13.3 LTS do Databricks Runtime e posterior, todas as tabelas registradas no Catálogo do Unity 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 configurações a seguir:

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

Essas configurações aceitam as opções a seguir:

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

Definir o tamanho de um arquivo de destino

Para ajustar o tamanho dos arquivos em sua tabela, defina a propriedadetargetFileSize da tabela como o tamanho desejado. Quando definida, todas as operações de otimização do layout de dados fazem o possível para gerar arquivos do tamanho especificado, incluindo optimize, liquid clustering, auto compaction e optimized writes.

Nota

Ao usar tabelas gerenciadas do Catálogo do Unity e SQL warehouses ou Databricks Runtime 11.3 LTS e posteriores, somente os comandos OPTIMIZE respeitam a configuração targetFileSize.

Propriedade Descrição
delta.targetFileSize (Delta)
iceberg.targetFileSize (Iceberg)
Tipo: tamanho em bytes ou unidades mais altas.
Descrição: o tamanho do arquivo de destino. Por exemplo, 104857600 (bytes) ou 100mb.
Valor padrão: Nenhum

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

Ajuste automático do tamanho do arquivo com base no tamanho da tabela

Para minimizar o ajuste manual, Azure Databricks ajusta automaticamente o tamanho do arquivo de tabelas com base no tamanho da tabela. Azure 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 cresça muito grande. Azure Databricks não ajusta automaticamente as 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 é 256 MB. Para tabelas com um tamanho entre 2,56 TB e 10 TB, o tamanho de destino aumenta linearmente de 256 MB para 1 GB. Para tabelas maiores que 10 TB, o tamanho do arquivo de destino é 1 GB.

Nota

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

Quando uma tabela for gravada incrementalmente, os tamanhos do arquivo de destino e as contagens de arquivo terão aproximadamente os valores a seguir com base no tamanho da tabela. As contagens de arquivos na tabela são apenas um exemplo. Os resultados reais serão diferentes, dependendo de vários fatores.

Tamanho de 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 terabytes 716 MB 20784
10 TB (terabytes) 1 GB 24437
20 TB 1 GB 34437
50 TB 1 GB 64437
100 TB 1 GB 114437

Limitar as linhas gravadas em um arquivo de dados

Ocasionalmente, tabelas com dados estreitos podem ter 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 esse erro, você pode usar a configuração spark.sql.files.maxRecordsPerFile de sessão SQL para especificar o número máximo de registros a serem gravados em um único arquivo para uma tabela. Especificar um valor de zero ou um valor negativo não representa nenhum limite.

Você também pode usar a opção maxRecordsPerFile do DataFrameWriter ao usar as APIs de DataFrame para gravar em uma tabela. Quando maxRecordsPerFile é especificado, o valor de configuração spark.sql.files.maxRecordsPerFile da sessão SQL é ignorado.

Nota

O Databricks não recomenda usar maxRecordsPerFile , a menos que seja necessário evitar o erro. Essa configuração pode ser necessária para algumas tabelas gerenciadas do Catálogo do Unity com dados muito estreitos.

Atualizar para compactação automática em segundo plano

A compactação automática em segundo plano está disponível para tabelas gerenciadas do Unity Catalog. A compactação automática 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 de Spark spark.databricks.delta.autoCompact.enabled (Delta) ou spark.databricks.iceberg.autoCompact.enabled (Iceberg) de definições de configuração de cluster ou 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 qualquer configuração de compactação automática herdada.

Depois de remover essas configurações herdadas, a compactação automática em segundo plano é disparada automaticamente para todas as tabelas gerenciadas do Catálogo do Unity.