Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
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-
UPDATEcom subconsultas -
DELETEcom 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) ouspark.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:
- Remova a configuração Spark
spark.databricks.delta.autoCompact.enabled(Delta) ouspark.databricks.iceberg.autoCompact.enabled(Iceberg) das definições do cluster ou do 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 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.