Manutenção e otimização de tabelas de carga de trabalho cruzadas no Microsoft Fabric

As tabelas Delta no Microsoft Fabric podem disponibilizar dados armazenados no OneLake ao Spark, ao endpoint de análise SQL, ao Power BI Direct Lake, ao Warehouse e a outras experiências do Fabric. O desempenho ótimo entre cargas de trabalho depende de dois fatores:

  • A carga de trabalho que cria e mantém a tabela.
  • Os motores que consomem a tabela.

As tabelas Lakehouse são normalmente geridas pelo Spark, Fabric pipeline atividade Copy ou Dataflow Gen2. O Spark é o editor mais comum e oferece as opções mais abrangentes de esquema e manutenção. O armazém de dados e o espelhamento da base de dados gerem automaticamente as suas estruturas físicas. Os catálogos espelhados mantêm o layout gerido no sistema de origem. Os requisitos do consumidor são geralmente compatíveis, mas o Power BI Direct Lake tem requisitos adicionais de armazenamento para um desempenho ótimo.

Use uma tabela partilhada sempre que os seus requisitos forem compatíveis. Para as exceções que justificam outra tabela, veja Quando criar outra tabela.

Compreender a titularidade do layout

Comece por identificar que carga de trabalho é responsável pela estrutura física da tabela. Os controlos na tabela seguinte são os controlos-chave relevantes para a disposição e manutenção da tabela de carga cruzada, não uma lista exaustiva das capacidades de cada motor.

Repositório de dados Método de escrita ou de ingestão Esquema e responsabilidade pela manutenção Controlos-chave
Lakehouse Spark Gerido pelos utilizadores Dimensionamento do ficheiro: tamanho do ficheiro alvo adaptativo e alvos de compactação ao nível do ficheiro.
Escrita e manutenção: vetores de eliminação, autocompactação, otimização da escrita, OPTIMIZE, e VACUUM.
Organização de dados: liquid clustering, particionamento, Z-Order e V-Order.
Lakehouse pipeline do Fabric, atividade de cópia ou Dataflow Gen2 O serviço escreve os dados; o proprietário do lakehouse mantém a tabela Definições de escrita específicas para o destino. Realize a manutenção compatível separadamente, utilizando Spark, manutenção Lakehouse ou uma atividade de manutenção de oleodutos.
Armazém Fabric Data Warehouse, atividade Copiar do pipeline do Fabric ou Dataflow Gen2 Gerido em armazém Agrupamento de dados e a definição de V-Order ao nível do armazém.
Item espelhado Serviço de espelhamento Depende do tipo de espelhamento O espelhamento de bases de dados utiliza um layout V-Ordered Delta gerido pelo sistema, sem controlos diretos de layout. Os catálogos espelhados mantêm a estrutura do ficheiro de origem, que pode ser otimizada no sistema de origem, quando tal for suportado.

Orientação entre cargas de trabalho

A tabela seguinte resume a abordagem recomendada por produtor e consumidor.

Producer Consumer Abordagem recomendada
Lakehouse: Escritor da Spark Spark Use os valores predefinidos do Fabric Spark em tempo de execução 2.0 ou posteriores e ative a autocompactação. Considere o agrupamento líquido quando os predicados medidos beneficiam de uma melhoria no salto de ficheiros.
Lakehouse: Escritor da Spark Endpoint de Análise SQL Usa o mesmo layout recomendado para o Spark. Não definas um tamanho de ficheiro-alvo estático, limite arbitrário de linhas ou V-Order apenas para o desempenho dos endpoints de análise SQL.
Lakehouse: Escritor da Spark Power BI Direct Lake Use o mesmo layout recomendado para o Spark e também ative o V-Order, ou use o perfil de readHeavyForPBI recursos.
Lakehouse: escritor de pipeline do Fabric ou do Dataflow Gen2 Spark, endpoint de análise SQL ou Power BI Direct Lake Monitorize a estrutura resultante dos ficheiros e programe em separado as operações de manutenção compatíveis do lakehouse. Alguns modos de destino, como o Dataflow Gen2 incremental refresh, impõem restrições de manutenção.
Armazém Fabric Data Warehouse ou Spark Use o layout gerido pelo sistema. Fabric Data Warehouse gere automaticamente a compactação e outras manutenções. Utilize o agrupamento de dados para melhorar a capacidade de ignorar ficheiros em cargas de trabalho com predicados seletivos recorrentes.
Armazém Power BI Direct Lake Mantém a definição padrão do Warehouse V-Order. Utilize agrupamento de dados quando tal beneficiar padrões de consulta partilhados.
Espelhamento Spark, endpoint de análise SQL ou Power BI Direct Lake Para espelhamento de bases de dados, utilize o layout V-Ordered Delta gerido pelo sistema. Para catálogos espelhados, otimize os ficheiros subjacentes no sistema de origem quando suportados. Consulte O que é o espelhamento no Fabric?.

Otimizar tabelas Lakehouse

As tabelas Delta do Lakehouse requerem uma estratégia de manutenção explícita, independentemente de serem escritas pelo Spark, pela atividade Copy do Pipeline ou pelo Dataflow Gen2. O Spark é o principal exemplo nesta secção porque fornece os controlos de layout e manutenção mais amplos em Fabric.

Importante

A manutenção das tabelas é essencial para um desempenho ideal nas operações de escrita e leitura em diferentes motores. Mesmo as cargas de trabalho de apenas acréscimo que, inicialmente, funcionam bem sem manutenção podem acumular ficheiros demasiado pequenos, os quais afetam o Spark, o endpoint de análise SQL, o Direct Lake e os leitores de dados externos. Consulte tabelas Delta de Compactação para métodos de compactação automáticos e manuais.

Usar os valores de execução padrão do Spark

Quando o Spark escreve a tabela, utilize as predefinições do Fabric Spark runtime 2.0 ou posterior:

No runtime 1.3 do Fabric Spark, o tamanho de ficheiro de destino adaptativo, os objetivos de compactação ao nível do ficheiro e os vetores de eliminação estão disponíveis como definições de adesão opcional.

Quando o Pipeline atividade Copy ou o Dataflow Gen2 escrevem a tabela, inspecionem o layout resultante do ficheiro e programem a manutenção separadamente. Não presuma que estes escritores aplicam os padrões de execução do Spark.

Importante

Os destinos lakehouse do Dataflow Gen2 que utilizam atualização incremental não suportam OPTIMIZE nem REORG TABLE. Siga as limitações de atualização incremental do Dataflow Gen2.

Prevenir e compactar ficheiros pequenos

Para tabelas escritas pelo Spark, prefira autocompactação. Esta funcionalidade avalia a fragmentação da tabela após escritas e executa compactação apenas quando necessário. Elimina a necessidade de uma verificação separada do estado da tabela antes das operações de manutenção.

Use as seguintes orientações para exceções e funcionalidades complementares:

Scenario Abordagem recomendada
Tabela gravada pelo Spark Ative a compactação automática como estratégia padrão de manutenção.
Gravações em streaming ou em microlote Ative a autocompactação e otimize a escrita para reduzir o acúmulo de ficheiros pequenos.
Cargas de trabalho com requisitos rigorosos de latência de escrita Agende OPTIMIZE separadamente em vez de executar a compactação automática de forma síncrona.
Tabela existente com ficheiros pequenos acumulados Executa uma única OPTIMIZEvez e depois ativa a compactação automática para manutenção contínua.
Tabelas com atualizações frequentes, eliminações ou fusões Mantenha os vetores de eliminação e a compactação automática ativados.

OPTIMIZE compacta ficheiros e purga automaticamente os vetores de eliminação de um ficheiro quando mais de 5% dos seus registos são referenciados por vetores de eliminação. Use REORG TABLE ... APPLY (PURGE) apenas quando tiver de purgar fisicamente registos abaixo desse limite ou cumprir um requisito específico de conformidade.

Note

A compactação automática remove vetores de eliminação apenas quando a partição também cumpre o critério de acionamento de ficheiros pequenos. Se uma carga de trabalho realizar atualizações ou eliminações sem gerar ficheiros pequenos, execute OPTIMIZE periodicamente para eliminar vetores de eliminação qualificados. Use REORG TABLE ... APPLY (PURGE) quando for necessário forçar uma purga física.

Executa VACUUM num calendário separado para remover ficheiros não referenciados após o período de retenção. VACUUM Recupera o armazenamento mas não melhora o layout ativo dos ficheiros.

Warning

Não reduza o período de retenção VACUUM sem antes avaliar os requisitos de viagem temporal e os leitores ou escritores concorrentes. Remover ficheiros demasiado cedo pode tornar as versões necessárias das tabelas indisponíveis.

Organizar os dados para o salto de ficheiros

Utilize clusterização líquida quando padrões recorrentes de filtragem ou processamento beneficiam de uma melhor omissão de ficheiros. Tabelas clusterizadas líquidas requerem OPTIMIZEou autocompactação para organizar dados recém-escritos.

Evita o particionamento por defeito. Utilize-o quando um requisito específico justifica os compromissos operacionais, como isolar escritores concorrentes que atualizam, eliminam ou fundem dados entre partições disjuntas. Para mais informações, veja Quando usar particionamento.

Para tabelas particionadas existentes, considere Z-Order quando predicados seletivos filtram normalmente pelas mesmas colunas dentro de uma partição.

Otimizar tabelas geridas em armazém de dados

Fabric Data Warehouse gere a disposição física da tabela Delta independentemente do método de ingestão.

Utilize os controlos estratégicos que o Warehouse expõe para ajustar o layout dos dados:

  • Aplique agrupamento de dados a tabelas grandes quando as consultas utilizam repetidamente predicados seletivos nas mesmas colunas.
  • Mantenha o V-Order ativado para cargas de trabalho orientadas à leitura e mistas. A V-Order está ativada por defeito.
  • Considere desativar a V-Order para cargas de trabalho de armazém de dados com utilização intensiva de escrita.

Warning

Desativar a V-Order é uma operação irreversível ao nível de armazém. Testa toda a carga de trabalho de leitura e escrita antes de a desativar.

Para orientações completas sobre o Armazém, consulte as diretrizes de desempenho em Fabric Data Warehouse.

Otimizar dados espelhados

A sua capacidade de melhorar o layout físico depende de o Fabric replicar os dados ou referenciar ficheiros fonte:

  • Espelhamento de base de dados: O Fabric replica os dados de origem em tabelas Delta no OneLake e gere a disposição e a manutenção dos ficheiros V-Ordered. Não é possível configurar diretamente o tamanho alvo do ficheiro, a limpeza de vetores de eliminação, o agrupamento líquido, o particionamento ou a V-Order no destino espelhado.
  • Catálogos espelhados: O Fabric sincroniza metadados e utiliza atalhos do OneLake para referenciar dados de origem no local. O Fabric não reescreve nem mantém estes ficheiros. Melhorar o layout físico e a limpeza no sistema de origem quando as funcionalidades suportadas o permitirem. Essas alterações são visíveis através dos atalhos sem criar outra cópia no Fabric.

Para dados espelhados na base de dados:

  • Use predicados seletivos e evite colunas desnecessárias em consultas Spark e SQL.
  • Projetar modelos semânticos Power BI e medidas DAX para um consumo eficiente de Direct Lake.

Para catálogos espelhados:

  • Utilize os recursos suportados de manutenção de tabelas e de esquema da plataforma de origem.
  • Avalie o ficheiro de origem e a distribuição por grupos de linhas para os utilizadores do Fabric que consultam os atalhos.
  • Para o Direct Lake, avalie a criação de uma camada adicional para disponibilização, modelada dimensionalmente e V-Ordered, quando o esquema de origem não consegue satisfazer os requisitos de desempenho.

Para espelhar conceitos, tipos e fontes suportadas, veja O que é o Espelhamento no Fabric? e Como funciona o espelhamento de metadados.

Aplicar otimização específica para o consumidor

O Spark e o endpoint de análise SQL têm um bom desempenho na mesma estrutura adaptativa de lakehouse. Use tamanho de ficheiro-alvo adaptativo, evite ficheiros excessivamente pequenos e aplique agrupamento líquido quando os predicados medidos beneficiam de um salto de ficheiros melhorado. Não ative V-Order apenas para melhorar o desempenho no Spark ou em pontos finais de análise de SQL. Para detalhes específicos do motor, veja considerações de desempenho em endpoints de análise SQL.

Power BI Direct Lake

O Direct Lake utiliza as mesmas tabelas Delta subjacentes, mas acrescenta recomendações relacionadas com transcodificação e enquadramento incremental:

Note

O Direct Lake geralmente apresenta melhor desempenho com grupos de filas entre 1 e 16 milhões de filas. Avalie a distribuição por grupos de filas e o desempenho do Direct Lake antes de alterar o contexto do produtor suportado.

Para tabelas escritas pelo Spark, define spark.sql.parquet.native.writer.maxRowGroupRowCount o número máximo de linhas por grupo de linhas quando o motor de execução nativo escreve os ficheiros Parquet. O valor padrão é 0, que não impõe um máximo. Se a análise mostrar que o dimensionamento dos grupos de linhas está a afetar o desempenho do Direct Lake, defina um limite testado antes de escrever ou reescrever a tabela. Por exemplo:

spark.conf.set("spark.sql.parquet.native.writer.maxRowGroupRowCount", 8_000_000)

Não definas o limite apenas para atingir um número específico de linhas. Largura de linha, compressão, distribuição de ficheiros e paralelismo de capacidade também afetam o desempenho. Use o Delta Analyzer para avaliar o layout resultante.

Para orientações detalhadas sobre enquadramento, transcodificação, grupos de linhas, padrões de atualização e Delta Analyzer, consulte Compreender o desempenho das consultas Direct Lake.

Aplique a orientação às camadas de medalhão

Bronze, Silver e Gold descrevem o propósito e o refinamento dos dados. Eles não determinam se o layout é gerido pelo utilizador ou pelo sistema, nem exigem cópias separadas para cada consumidor.

Camada Objetivo principal Orientação entre cargas de trabalho
Bronze (aterragem) Preservar a fidelidade da fonte e a taxa de ingestão Dê prioridade à taxa de escrita ao manter tabelas escritas com o Spark com compactação automática. Evite modelos semânticos do Power BI Direct Lake em tabelas Bronze brutas, a menos que o modelo e a forma dos dados estejam intencionalmente desenhados para esse uso.
Prata (selecionado) Fornecer dados validados e conformes para reutilização Reutilize a tabela em consumidores Fabric compatíveis. Para tabelas do lakehouse escritas com o Spark, ative o V-Order apenas quando o Direct Lake for o principal consumidor.
Ouro (serviço) Disponibilize dimensões, factos, agregados e modelos analíticos prontos para utilização empresarial Prefiro esta camada para modelos semânticos de Direct Lake. Reutilize a tabela entre consumidores compatíveis e aplique os controlos específicos do produtor descritos neste artigo.

Resolver problemas de layout e manutenção

Utilize remediação com reconhecimento do produtor. Aplicar comandos de manutenção do Spark às tabelas do lakehouse quando o modo de destino suportar essas operações. Trate os sinais como indicadores em vez de limiares universais e valide-os em função do padrão de escrita da tabela e do desempenho do consumidor.

Condição Sinal Tabela Lakehouse Mesa de armazém
Ficheiros excessivamente pequenos O número de ficheiros aumenta mais rapidamente do que o tamanho da tabela ativa, e os ficheiros permanecem abaixo do alvo adaptativo. Com o Spark, execute uma OPTIMIZE única vez para o backlog existente e, em seguida, ative a compactação automática. Para a atividade Copy do Pipeline ou para gravações do Dataflow Gen2, agende separadamente a manutenção suportada do lakehouse. Nenhuma ação. A compactação do armazém é automática.
Ficheiros antigos demasiado grandes Os ficheiros continuam muito acima do objetivo adaptativo atual, e um número demasiado reduzido de ficheiros limita o paralelismo da análise. Reescreva a tabela usando uma substituição ou CREATE OR REPLACE TABLE AS SELECT com tamanho adaptativo do ficheiro de destino ativado. Nenhuma ação. O armazém gere automaticamente o tamanho dos ficheiros.
Acumulação de vetores de deleção DESCRIBE HISTORY As métricas mostram que os vetores de eliminação são adicionados ou atualizados mais rapidamente do que a compactação os remove, potencialmente aumentando a sobrecarga de leitura. Mantém a autocompactação ativada. Se os vetores de eliminação se acumularem sem desencadear compactação de ficheiros pequenos, programe OPTIMIZE. Use REORG TABLE ... APPLY (PURGE) apenas para requisitos explícitos de purga. Nenhuma ação. A limpeza é gerida pelo sistema.
Salto pobre de ficheiros Os predicados seletivos abrangem uma grande parte da tabela, ou a avaliação da qualidade do agrupamento indica uma organização deficiente. Com o Spark, configure liquid clustering ou use Z-Order para uma tabela particionada existente. Configurar o agrupamento de dados do Warehouse.
Sobrecarga de transcodificação Direct Lake O Delta Analyzer mostra ficheiros em excesso, pequenos grupos de linhas ou retranscodificação ampla após atualizações. Compactar ficheiros pequenos, rever grupos de linhas e aplicar a ordem V às tabelas escritas pelo Spark. Opcionalmente, configure o liquid clustering para melhorar a qualidade da compressão nos ficheiros Parquet. Mantenha o V-Order ativado e avalie o agrupamento de dados.
Crescimento do armazenamento de ficheiros sem referência O armazenamento OneLake cresce mais rapidamente do que o tamanho da tabela ativa após operações de alteração de dados. Execute VACUUM de acordo com os requisitos de retenção. Nenhuma ação. A limpeza é gerida pelo sistema.

Para dados espelhados, siga o procedimento de correção específico do produtor em Otimizar dados espelhados. O espelhamento de bases de dados é gerido pelo sistema; Para catálogos espelhados, aplicar manutenção suportada na plataforma de origem.

Para tabelas do lakehouse, as opções de inspeção suportadas pelo Spark incluem:

  • Execute DESCRIBE DETAIL para inspecionar o número de ficheiros, o tamanho total e a propriedade avaliada delta.targetFileSize.adaptive .
  • Execute DESCRIBE HISTORY para analisar os padrões de gravação e o histórico de manutenção.
  • Use o Delta Analyzer quando precisar de uma análise detalhada de grupos de linhas Direct Lake e de padrões de atualização.

Inspecionar o tamanho médio dos ficheiros

Use DESCRIBE DETAIL para calcular o tamanho médio do ficheiro como um indicador inicial do layout da tabela:

details = spark.sql("DESCRIBE DETAIL schema_name.table_name").first()

table_size_gb = details["sizeInBytes"] / (1024**3)
num_files = details["numFiles"]
avg_file_size_mb = (
    details["sizeInBytes"] / num_files / (1024**2)
    if num_files
    else 0
)

print(f"Table size: {table_size_gb:.2f} GB")
print(f"Number of files: {num_files}")
print(f"Average file size: {avg_file_size_mb:.2f} MB")

Uma média pode esconder assimetrias entre partições ou entre ficheiros recentes e ficheiros compactados anteriormente. Se a média indicar um possível problema de layout, inspecione os ficheiros Parquet individuais ou use o Delta Analyzer para avaliar a distribuição antes de alterar as configurações de manutenção.

Quando criar outra tabela

Não crie outra tabela física apenas porque múltiplos motores Fabric consomem os dados.

Crie outra tabela quando tiver um propósito independente, tais como:

  • Uma transformação ou agregação que altera o grão ou o significado de negócio dos dados.
  • Requisitos diferentes de segurança, retenção ou qualidade de dados.
  • Um requisito de latência ou atualização que a tabela partilhada não consegue cumprir.
  • Um layout específico para o consumidor cujo benefício medido supera os custos de armazenamento, processamento, linhagem e governação.