Configure o Delta Lake para controlar o tamanho do arquivo de dados
Observação
As recomendações deste artigo não se aplicam a Unity Catalog gerenciar tables. Databricks recomenda usar as tabelas gerenciar Unity Catalog com as configurações default para todas as novas tabelas Delta.
No Databricks Runtime 13.3 e acima, o Databricks recomenda o uso clusters para disposição da tabela Delta. Consulte Usar clusters líquidos para tabelas Delta.
Databricks recomenda o uso da otimização preditiva para executar automaticamente OPTIMIZE
e VACUUM
nas tabelas do site Delta. Consulte Otimização preditiva para Unity Catalog gerenciar tabelas.
No Databricks Runtime 10.4 LTS e acima, a compactação automática e as gravações otimizadas estão sempre habilitadas para operações MERGE
, UPDATE
e DELETE
. Você não pode desabilitar esta funcionalidade.
O Delta Lake fornece opções para configuração manual ou automaticamente do tamanho do arquivo de destino para gravações e para operações OPTIMIZE
. O Databricks ajusta automaticamente muitas dessas configurações e habilita recursos que melhoram automaticamente o desempenho da tabela buscando arquivos do tamanho correto.
Para tabelas gerenciadas pelo Unity Catalog, o Databricks ajusta a maioria dessas configurações automaticamente se você estiver usando um SQL warehouse ou Databricks Runtime 11.3 LTS ouacima.
Se estiver fazendo upgrade de uma carga de trabalho do Databricks Runtime 10.4 LTS ou abaixo, consulte Upgrade para compactação automática em segundo plano.
Quando executar OPTIMIZE
A compactação automática e as gravações otimizadas reduzem problemas de arquivos pequenos, mas não substituem totalmente OPTIMIZE
. Especialmente para tabelas maiores que 1 TB, a Databricks recomenda executar OPTIMIZE
em um programar para consolidar ainda mais os arquivos. O Databricks não executa automaticamente ZORDER
em tabelas, portanto, você deve executar OPTIMIZE
com ZORDER
para ativar o salto aprimorado de dados. Consulte Ignoração de dados para Delta Lake.
O que é otimização automática no Databricks?
O termo otimização automática às vezes é usado para descrever a funcionalidade controlada pelas configurações delta.autoOptimize.autoCompact
e delta.autoOptimize.optimizeWrite
. Este termo foi retirado em favor da descrição de cada configuração individualmente. Consulte Compactação automática para Delta Lake em Databricks e Gravações otimizadas para Delta Lake em Databricks.
Compactação automática para o Delta Lake no Databricks
A compactação automática combina arquivos menores nas partições da tabela Delta para reduzir automaticamente os problemas com arquivos pequenos. A compactação automática acontece após uma gravação bem-sucedida na tabela e é executada de forma sincronizada no cluster que realizou a gravação.A compactação automática compacta apenas arquivos que não foram compactados anteriormente.
Você pode controlar o tamanho do arquivo de saída definindo a configuração do Spark spark.databricks.delta.autoCompact.maxFileSize
. A Databricks recomenda usar o ajuste automático com base na carga de trabalho ou no tamanho da tabela. Consulte Tamanho do arquivo de ajuste automático com base na carga de trabalho e Tamanho do arquivo de ajuste automático com base no tamanho da tabela.
A compactação automática só é acionada para partições ou tabelas que tenham pelo menos um determinado número de arquivos menores. Você pode também alterar o número mínimo de arquivos necessários para acionar a compactação automática, definindo spark.databricks.delta.autoCompact.minNumFiles
.
A compactação automática pode ser habilitada no nível da tabela ou da sessão usando as seguintes configurações:
Propriedade da tabela:
delta.autoOptimize.autoCompact
Configuração do SparkSession:
spark.databricks.delta.autoCompact.enabled
Estas configurações aceitam as seguintes opções:
Opções |
Comportamento |
---|---|
|
Ajusta o tamanho do arquivo de destino, respeitando outras funcionalidades de ajuste automático. Requer Databricks Runtime 10.4 LTS ou acima. |
|
Apelido 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 Delta modificadas na carga de trabalho. |
Importante
Em Databricks Runtime 9.1 LTS, quando outros escritores executam operações como DELETE
, MERGE
, UPDATE
ou OPTIMIZE
simultaneamente, a compactação automática pode fazer com que esses outros trabalhos falhem com um conflito de transações. Isso não é um problema em Databricks Runtime 10.4 LTS e acima.
Gravações otimizadas para Delta Lake em Databricks
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:
Observação
Você pode ter um código que seja executado coalesce(n)
ou repartition(n)
logo antes de gravar seus dados para controlar o número de arquivos gravados. As gravações otimizadas eliminam a necessidade de usar esse padrão.
As gravações otimizadas são habilitadas por padrão para as seguintes operações no Databricks Runtime 9.1 LTS e versões superiores:
MERGE
UPDATE
com subconsultasDELETE
com subconsultas
As gravações otimizadas também são ativadas para CTAS
instruções e INSERT
operações ao usar o SQL warehouse. Em Databricks Runtime 13.3 LTS e acima, todas as tabelas Delta registradas em Unity Catalog têm gravações otimizadas ativadas para CTAS
declarações e INSERT
operações para tabelas particionadas.
As gravações otimizadas podem ser habilitadas no nível da tabela ou da sessão usando as seguintes configurações:
Configuração da tabela:
delta.autoOptimize.optimizeWrite
Configuração do SparkSession:
spark.databricks.delta.optimizeWrite.enabled
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 configurado na sessão para substituir a compactação automática para todas as tabelas Delta modificadas na carga de trabalho. |
Definir um tamanho de arquivo de destino
Se você deseja ajustar o tamanho dos arquivos em sua tabela Delta, defina a propriedade da tabela delta.targetFileSize
para o tamanho desejado. Se esta propriedade for configurada, todas as operações de otimização de provisão de dados farão uma tentativa de melhor esforço para gerar arquivos do tamanho especificado. Os exemplos aqui incluem otimização ou ordem Z, compactação automática e gravações otimizadas.
Observação
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 da tabela |
---|
delta.targetFileSize Tipo: tamanho em bytes ou unidades superiores. O tamanho do arquivo de destino. Por exemplo, Valor padrão: Nenhum |
Para as 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 Referência de propriedades da tabela delta para detalhes.
Ajuste automático do tamanho do arquivo com base na carga de trabalho
Databricks recomenda definir a propriedade da tabela delta.tuneFileSizesForRewrites
como true
para todas as tabelas que são direcionadas por muitos MERGE
ou operações DML, independentemente do Databricks Runtime, Unity Catalog ou outras otimizações. Quando configurado como true
, o tamanho do arquivo de destino para a tabela é configurado para um limite muito menor, o que acelera as operações de gravação intensiva.
Se não for explicitamente definido, o Databricks detecta automaticamente se 9 das últimas 10 operações anteriores em uma tabela Delta foram operações MERGE
e define essa propriedade da tabela como true
. Você deve definir explicitamente essa propriedade para false
evitar esse comportamento.
Propriedade da tabela |
---|
delta.tuneFileSizesForRewrites Tipo: Se os tamanhos dos arquivos devem ser ajustados para otimização do layout de dados. Valor padrão: Nenhum |
Para as 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 Referência de propriedades da tabela delta para detalhes.
Ajuste automático do tamanho do arquivo com base no tamanho da tabela
Para minimizar a necessidade de ajuste manual, o Databricks ajusta automaticamente o tamanho do arquivo das tabelas Delta com base no tamanho da tabela. Databricks usará 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. O Databricks não ajusta automaticamente as tabelas que você ajustou com um tamanho de destino específico ou com base em uma carga de trabalho com regravações frequentes.
O tamanho do arquivo de destino é baseado no tamanho atual da tabela Delta. 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 aumentará linearmente de 256 MB para 1 GB. Para tabelas maiores que 10 TB, o tamanho do arquivo de destino é 1 GB.
Observação
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 delta.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 restritos 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 esse erro, você pode usar a configuração da 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 Delta Lake. Especificar um valor zero ou um valor negativo não representa limite.
Em Databricks Runtime 11.3 LTS e acima, o senhor também pode usar a opção DataFrameWriter maxRecordsPerFile
ao usar o DataFrame APIs para gravar em uma tabela Delta Lake. Quando maxRecordsPerFile
é especificado, o valor da configuração da sessão SQL spark.sql.files.maxRecordsPerFile
é ignorado.
Observação
O Databricks não recomenda o uso dessa opção, a menos que seja necessário evitar o erro mencionado acima. Essa configuração ainda pode ser necessária para algumas tabelas gerenciadas pelo Unity Catalog com dados muito restritos.
Atualizar para compactação automática em segundo plano
A compactação automática em segundo plano está disponível para tabelas de gerenciamento do Catálogo do Unity no Databricks Runtime 11.3 LTS e acima. Ao migrar uma carga de trabalho ou tabela legada, faça o seguinte:
Remova a configuração do Spark
spark.databricks.delta.autoCompact.enabled
dos clusters ou das definições de configuração Notebook .Para cada tabela, execute
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)
para remover quaisquer configurações legadas de compactação automática.
Depois de remover essas configurações herdadas, você verá a compactação automática em segundo plano acionada automaticamente para todas as tabelas de gerenciamento do Catálogo do Unity.