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.
O ignoramento de ficheiros é uma otimização de leitura do Delta Lake que permite ao motor Spark evitar analisar ficheiros de dados que não podem conter linhas coincidentes. Como o motor lê menos dados, as consultas correm mais rápido e consomem menos recursos de I/O.
Como funciona o salto de ficheiros
Sempre que um ficheiro de dados é escrito numa tabela Delta, o Delta Lake regista estatísticas de coluna por ficheiro no registo de transações. Estas estatísticas incluem o valor mínimo, valor máximo e contagem nula para cada coluna indexada nesse ficheiro.
Quando uma consulta inclui um predicado de filtro, o motor compara o valor do predicado com o intervalo mínimo/máximo armazenado para cada ficheiro. Se o valor do predicado estiver fora do intervalo de um ficheiro, esse ficheiro é completamente ignorado — não há necessidade de o abrir ou escanear.
Por exemplo, considere uma sales tabela particionada em cinco ficheiros de dados por intervalos de datas:
| File | Estatísticas mín./máx. | Resultado para WHERE date = '2024-03-15' |
|---|---|---|
| Arquivo 1 | date [2024-01-01 .. 2024-02-28] |
Omitida |
| Arquivo 2 | date [2024-03-01 .. 2024-03-31] |
Leia ✓ |
| Ficheiro 3 | date [2024-04-01 .. 2024-05-31] |
Omitida |
| Ficheiro 4 | date [2024-06-01 .. 2024-07-31] |
Omitida |
| Ficheiro 5 | date [2024-08-01 .. 2024-09-30] |
Omitida |
Neste caso, quatro em cada cinco ficheiros são ignorados — 80% menos dados digitalizados — porque os seus intervalos mínimos/máximos não coincidem com o valor do filtro.
Importante
O tipo de dado do valor do predicado deve corresponder ao tipo de coluna. Um desajuste de tipo pode impedir que o motor utilize estatísticas ao nível do ficheiro para saltar.
Comportamento padrão
A Delta Lake recolhe automaticamente estatísticas de ficheiros com os seguintes predefinidos:
- Apenas as primeiras 32 colunas (por posição ordinal) têm estatísticas recolhidas.
- Estatísticas monitorizadas por coluna por ficheiro: contagem mínima, máxima e nula
- Recolher estatísticas em colunas longas é dispendioso e acrescenta sobrecarga de escrita, por isso o posicionamento é importante.
A delta.dataSkippingNumIndexedCols propriedade da tabela controla o limite da coluna. Colunas acima desse limiar não recebem estatísticas ao nível do ficheiro e não podem participar no salto de ficheiros.
Tipos de dados elegíveis
Nem todos os tipos de coluna suportam estatísticas ao nível do ficheiro e, portanto, o salto de ficheiros. O motor avalia o tipo de dados de cada coluna para determinar se é possível recolher estatísticas mínimas ou máximas.
Sempre elegível (tipos atómicos)
-
NumericType(ByteType,ShortType,IntegerType,LongType,FloatType,DoubleType, )DecimalType DateTypeTimestampTypeTimestampNTZTypeStringType
Elegível condicionalmente
Note
Os seguintes tipos podem ser ativados a partir da versão 2.0 do runtime Fabric Spark (Delta 4.1)
-
VariantType: quandospark.databricks.delta.variantShredding.collectVariantDataSkippingStatsestá ativado. -
ArrayType: quandospark.microsoft.delta.skipping.complexTypes.enabledestá ativado e o tipo de elemento é ele próprio elegível. -
MapType: quandospark.microsoft.delta.skipping.complexTypes.enabledestá ativado e tanto os tipos de chave como de valor são elegíveis.
Não elegível
BinaryTypeBooleanType-
StructType(no seu conjunto — os campos foliares dentro das estruturas são avaliados individualmente) NullType
Maximizar a cobertura das colunas
Para obter o máximo benefício ao ignorar ficheiros, certifique-se de que as colunas pelas quais filtra com mais frequência estão abrangidas pelas estatísticas dos ficheiros.
Posicione primeiro as colunas frequentemente filtradas
Coloque as colunas que aparecem mais frequentemente em WHERE cláusulas, chaves de junção e predicados de filtro nas primeiras 32 posições ordinais do esquema da tabela. Mova colunas de cadeias de caracteres longas ou colunas de baixa seletividade para além da posição 32, para evitar desperdiçar sobrecarga de gravação em estatísticas que raramente ajudam.
Aumentar o número de colunas indexadas
Se a sua tabela tiver mais de 32 colunas que beneficiam das estatísticas, aumente o limite padrão:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols' = '40')
Note
Aumentar o número de colunas indexadas adiciona sobrecarga de escrita para cada ficheiro de dados. Só aumente este valor quando as colunas extra forem frequentemente usadas em predicados de filtro.
Especifique colunas exatas para estatística
Use delta.dataSkippingStatsColumns para controlar explicitamente quais as colunas que recebem estatísticas do ficheiro, independentemente da posição ordinal:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingStatsColumns' = 'col1,col2')
Quando delta.dataSkippingStatsColumns está definido, apenas são recolhidas estatísticas das colunas especificadas. Esta abordagem dá-lhe um controlo preciso sobre o equilíbrio entre o custo de escrita e o benefício na leitura.
Combinar o salto de ficheiros com o layout dos dados
O salto de ficheiros funciona melhor quando valores relacionados estão colocalizados nos mesmos ficheiros. Técnicas como ZORDER BY o agrupamento de líquidos reorganizam fisicamente os dados para que linhas com valores de coluna semelhantes acabem nos mesmos ficheiros. Colocar valores semelhantes aperta os intervalos mínimos/máximos por ficheiro, o que aumenta a percentagem de ficheiros que o motor pode saltar para um determinado filtro.
Para mais informações sobre otimização do layout de dados, veja Compactação de Tabelas, Agrupamento de Líquidos e Ordem Z.