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.
Aplica-se a:✅ Engenharia de Dados de Tecido e Ciência de Dados
Estatísticas Automatizadas de Tabelas no Microsoft Fabric ajudam o Spark a otimizar a execução de consultas ao recolher automaticamente métricas de tabelas e colunas para tabelas Delta.
- A linha conta.
- Contagens nulas por coluna.
- Valores mínimos e máximos por coluna.
- Valores distintos contam por coluna.
- Comprimentos médios e máximos das colunas.
Por padrão, estas estatísticas estendidas são recolhidas para as primeiras 32 colunas (incluindo colunas aninhadas) das tabelas do Delta no Fabric. Estes dados ajudam o otimizador baseado em custos (CBO) do Spark a melhorar o planejamento de junções, filtros, agregações e poda de partições.
Como resultado, muitas cargas de trabalho podem reduzir a latência de consultas e o uso de cálculo com menos manutenção manual das estatísticas.
Para orientações sobre otimização de tabelas em múltiplas cargas de trabalho, consulte Manutenção e otimização de tabelas para múltiplas cargas de trabalho.
Principais benefícios
As estatísticas automatizadas oferecem os seguintes benefícios:
- Ativado automaticamente para tabelas Delta no Fabric.
- Melhora a qualidade do planeamento de consultas para padrões comuns de análise.
- Reduz a necessidade de recolha manual repetida de estatísticas.
- Armazena estatísticas fora dos ficheiros de tabela para evitar o inchaço dos ficheiros de dados.
Como funciona
O Fabric Spark recolhe estatísticas estendidas no momento da escrita e utiliza-as durante o planeamento.
Âmbito e Comportamento da Coleção:
- As estatísticas são recolhidas no momento da escrita.
- A coleção visa as primeiras 32 colunas (incluindo colunas aninhadas).
- As propriedades da tabela podem sobrepor o comportamento ao nível da sessão.
- A configuração controla se o Spark injeta estatísticas no otimizador.
Estas métricas ajudam o Spark a escolher melhores estratégias de junção, melhorar a poda de partições e otimizar planos de agregação.
Ativar ou desativar a recolha de estatísticas
Utilize a configuração de sessão (espaço de trabalho ou escopo de caderno) ou propriedades de tabela (escopo por tabela).
Configuração da sessão
Você pode habilitar ou desabilitar a coleta estendida de estatísticas e a injeção do otimizador no nível da sessão.
Estas definições podem ser aplicadas através do Spark SQL, PySpark ou Scala Spark.
Execute as seguintes instruções SQL do Spark para permitir a recolha e a injeção de otimizadores:
SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;
Para desativar qualquer uma das definições, use o mesmo comando com o valor definido para false.
Observação
A coleta de estatísticas de log delta (spark.databricks.delta.stats.collect) também deve ser habilitada (padrão: true).
Importante
Se ativares vetores de eliminação numa tabela, desativa a injeção de estatísticas nessa tabela. Em tabelas que usam vetores de eliminação com atualizações ou eliminações frequentes, as estatísticas estendidas podem tornar-se imprecisas e levar o Spark a subestimar o tamanho da tabela. Quando isto acontece, o otimizador pode escolher uma broadcast join que não é apropriada, o que pode causar falhas nas consultas. Para evitar este comportamento, desative a injeção de estatísticas para que o otimizador não use as estatísticas injetadas:
- Âmbito da sessão: definir
spark.microsoft.delta.stats.injection.enabledparafalse. - Âmbito da tabela: defina a
delta.stats.extended.injectpropriedade da tabela parafalse.
Podes manter a recolha de estatísticas ativada. Para tabelas que usam vetores de eliminação, apenas desative a injeção no otimizador.
Uma estratégia regular de manutenção de tabelas reduz este risco.
OPTIMIZE purga automaticamente ficheiros onde mais de 5% de linhas são referenciadas por vetores de eliminação, podendo REORG TABLE ... APPLY (PURGE) forçar uma reescrita abaixo desse limiar. Como as estatísticas estendidas são recolhidas no momento da escrita, a reescrita atualiza as estatísticas dos ficheiros afetados. Para tabelas com atualizações ou eliminações frequentes, mantenha a injeção desativada entre ciclos de manutenção.
Propriedades da tabela (substituir configuração da sessão)
As propriedades da tabela permitem controlar a coleta de estatísticas em tabelas individuais, substituindo as configurações da sessão.
Habilite em uma tabela:
ALTER TABLE tableName
SET TBLPROPERTIES(
'delta.stats.extended.collect' = 'true',
'delta.stats.extended.inject' = 'true'
)
Para desativar qualquer uma das propriedades da tabela, defina o seu valor para false.
Comportamento padrão de criação de tabelas
Use esta definição ao nível da sessão para desativar a carimbagem automática das propriedades das tabelas de estatísticas estendidas quando novas tabelas são criadas.
Use esta instrução SQL do Spark para desativar a definição automática na criação da tabela:
SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;
Verificar estatísticas
Pode inspecionar as estatísticas disponíveis para um plano de consulta otimizado usando as APIs do Spark. Estas APIs devolvem estatísticas genéricas de planos de qualquer fonte disponível, incluindo estatísticas do catálogo Spark. Um resultado não confirma que as estatísticas Fabric extended foram recolhidas para a tabela.
Verifique a contagem de linhas e o tamanho da tabela (exemplo Scala):
println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)
Verifique as estatísticas detalhadas da coluna:
val stats = spark.read.table("tableName").queryExecution.optimizedPlan.stats
stats.attributeStats.foreach { case (attrName, colStat) =>
println(s"colName: $attrName distinctCount: ${colStat.distinctCount} min: ${colStat.min} max: ${colStat.max} nullCount: ${colStat.nullCount} avgLen: ${colStat.avgLen} maxLen: ${colStat.maxLen}")
}
Recalcular estatísticas
As estatísticas podem ficar desatualizadas após alterações no esquema ou atualizações parciais. Use uma das seguintes abordagens para recalcular.
Reescreva a tabela (observação: isso redefine o histórico):
spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")
Abordagem recomendada (Fabric Spark >= 3.2.0.19):
from pyspark.sql.delta import StatisticsStore
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Se o esquema mudar (por exemplo, adicionar ou eliminar colunas), remova estatísticas antigas antes de recalcular:
from pyspark.sql.delta import StatisticsStore
StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Utilizar ANALYZE TABLE
Use ANALYZE TABLE para calcular estatísticas do catálogo do Spark para todas as colunas. Este comando não recalcula as estatísticas estendidas armazenadas pelas Estatísticas de Tabela Automatizadas. Para recalcular essas estatísticas, use StatisticsStore.recomputeStatisticsWithCompaction.
Execute o comando:
Execute a seguinte instrução SQL do Spark:
ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS
Habilite a injeção de estatísticas de catálogo:
Use esta instrução SQL do Spark para permitir a injeção de estatísticas de catálogo:
SET spark.microsoft.delta.stats.injection.catalog.enabled=true;
Para desativar a injeção de estatísticas de catálogo, use a mesma definição com o valor definido para false.
Limitações
É importante entender as limitações atuais das estatísticas automatizadas do Fabric para que você possa planejar de acordo.
- As estatísticas são recolhidas apenas no momento da escrita.
- As atualizações de outros motores não são agregadas automaticamente.
- Apenas as primeiras 32 colunas estão incluídas (incluindo colunas aninhadas).
- Eliminações e atualizações podem tornar as estatísticas obsoletas. Para tabelas que utilizam vetores de eliminação, a manutenção de rotina
OPTIMIZEouREORG TABLE ... APPLY (PURGE)reescreve os ficheiros afetados e atualiza as respetivas estatísticas. Desative a injeção de estatísticas entre ciclos de manutenção em tabelas com atualizações ou eliminações frequentes. - O recálculo requer uma operação de reescrita ou estatística na API.
- A injeção de estatísticas não se aplica a colunas aninhadas.
- Em algumas cargas de trabalho, estatísticas obsoletas ou incompletas podem levar a regressões.
-
ANALYZE TABLEO suporte está limitado aFOR ALL COLUMNS. - A ordem das colunas ou alterações de configuração podem exigir uma atualização completa.