Otimizar tabelas Delta Lake com V-Order

O formato de tabelas Lakehouse e Delta Lake são centrais para Microsoft Fabric. Manter as tabelas Delta otimizadas é fundamental para o desempenho e a eficiência de custos das cargas de trabalho analíticas.

Este artigo ajuda-o a decidir quando usar a V-Order e mostra os principais padrões de configuração e manutenção das tabelas Delta.

Use este artigo para:

  • Compreenda o que a V-Order muda e quando é que isso ajuda.
  • Compreende como a Ordem Z e a Ordem V se complementam.
  • Escolha o nível de controlo correto: sessão, propriedade de tabela ou operação de escrita.
  • Aplicar padrões de manutenção da tabela Delta no contexto correto de runtime do Spark.

Para orientações cruzadas sobre quando aplicar a V-Order com base em cenários de consumo, consulte Manutenção e otimização da tabela de carga cruzada.

O que é V-Order?

V-Order é uma otimização em tempo de escrita para ficheiros Parquet que pode melhorar o desempenho das consultas subsequentes em motores do Fabric.

De relance:

  • Onde mais ajuda: Padrões intensivos em leitura, como painéis de controle, análises interativas e varreduras repetidas.
  • Como ajuda: Reorganiza o layout Parquet (por exemplo, distribuição de grupos de linhas, codificação e compressão) para melhorar a eficiência da leitura.
  • Compromisso típico: As gravações podem demorar mais (muitas vezes cerca de 15% em média), enquanto as leituras podem melhorar significativamente dependendo da carga de trabalho.
  • Compatibilidade do motor: Os ficheiros mantêm-se compatíveis com o Parquet de código aberto, e funcionalidades da Delta como o Z-Order continuam compatíveis.
  • Âmbito: A ordem V é ao nível do ficheiro. Operações Delta como compactação, vácuo e viagem no tempo podem ser usadas com ele.

Controlo a ordem V escreve

A V-Order é usada para otimizar o layout dos ficheiros Parquet para um desempenho de consulta mais rápido, especialmente em cenários com muita leitura. Em Microsoft Fabric, V-Order está desativado por padrão para todos os espaços de trabalho recém-criados para otimizar o desempenho em cargas de trabalho de engenharia de dados intensas em gravação.

O comportamento V-Order no Apache Spark é controlado através das seguintes configurações:

Configuração Valor padrão Descrição
spark.sql.parquet.vorder.default false Controla a escrita em V-Order ao nível da sessão. Configurado como false por padrão nos novos workspaces do Fabric.
TBLPROPERTIES("delta.parquet.vorder.enabled") Não definido Controla o comportamento padrão de V-Order no nível da tabela.
Opção do gravador DataFrame: parquet.vorder.enabled Não definido Usado para controlar o V-Order ao nível da operação de escrita.

Use os comandos a seguir para habilitar ou substituir as gravações V-Order conforme necessário para seu cenário.

A V-Order está desativada por defeito nos novos espaços de trabalho do Fabric (spark.sql.parquet.vorder.default=false) para melhorar o desempenho de gravação nos pipelines de ingestão e transformação.

Para cargas de trabalho com muita leitura, como consultas interativas ou dashboards, ative a V-Order definindo spark.sql.parquet.vorder.default para true. Também pode mudar para readHeavyforSpark ou ReadHeavy perfis de recursos, que ativam automaticamente o V-Order para desempenho focado na leitura.

No runtime do Fabric 1.3 e posteriores, a spark.sql.parquet.vorder.enable definição é removida. Como a V-Order pode ser aplicada automaticamente durante a otimização Delta com OPTIMIZE, não precisas desta configuração antiga. Se estás a migrar de versões anteriores em tempo de execução, remove esta definição do teu código.

Verifique a configuração do V-Order na sessão do Apache Spark

Usa estes comandos para confirmar o valor atual da sessão antes de o alterares.

%%sql 
SET spark.sql.parquet.vorder.default 

Desativar a escrita V-Order na sessão do Apache Spark

Use estes comandos quando a sua carga de trabalho for intensiva em operações de escrita e desejar uma ingestão ou escrita de transformações mais rápidas.

%%sql 
SET spark.sql.parquet.vorder.default=FALSE 

Ativar a escrita em V-Order na sessão do Apache Spark

Quando ativas a V-Order ao nível da sessão, todas as escritas do Parquet nessa sessão usam a V-Order, incluindo tabelas não-Delta Parquet e tabelas Delta, mesmo que parquet.vorder.enabled esteja explicitamente definido para false.

%%sql 
SET spark.sql.parquet.vorder.default=TRUE 

Controle V-Order usando propriedades de tabela Delta

Esta secção utiliza o Spark SQL apenas porque as propriedades das tabelas são definidas através de SQL DDL e ALTER TABLE instruções.

Usa as propriedades da tabela quando quiseres um padrão ao nível da tabela que se aplique entre sessões.

Habilite a propriedade da tabela V-Order durante a criação da tabela:

%%sql 
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");

Quando a propriedade da tabela for definida como true, INSERT, UPDATE ou MERGE, aplica-se a V-Ordem no momento da escrita. As definições ao nível da sessão e do nível de escrita continuam a prevalecer, pelo que as escritas podem continuar a usar V-Order mesmo quando TBLPROPERTIES está definido para false.

Ative ou desative o V-Order modificando a propriedade da tabela:

%%sql 
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");

ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "false");

ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");

Depois de ativar ou desativar o V-Order usando as propriedades da tabela, somente gravações futuras na tabela serão afetadas. Os arquivos Parquet mantêm a ordem tal como foi usada quando foram criados. Para modificar a estrutura física atual para aplicar ou remover V-Order, leia Compactação de tabela.

Controlando V-Order diretamente em operações de gravação

Esta secção utiliza o PySpark para demonstrar a API de escritor DataFrame. O mesmo padrão está disponível nas APIs Scala DataFrame com opções equivalentes.

Use opções de nível de escrita quando precisar de controlo por operação em vez de predefinições ao nível de sessão ou tabela.

Todos os comandos de escrita do Apache Spark herdam a definição de sessão quando não são explicitamente sobrepostos. Os exemplos seguintes escrevem usando V-Order herdando a configuração da sessão.

df_source.write\
  .format("delta")\
  .mode("append")\
  .saveAsTable("myschema.mytable")

DeltaTable.createOrReplace(spark)\
  .addColumn("id","INT")\
  .addColumn("firstName","STRING")\
  .addColumn("middleName","STRING")\
  .addColumn("lastName","STRING",comment="surname")\
  .addColumn("birthDate","TIMESTAMP")\
  .location("Files/people")\
  .execute()

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-01-31'")\
  .saveAsTable("myschema.mytable") 

V-Order só se aplica a arquivos afetados pelo predicado.

Numa sessão onde spark.sql.parquet.vorder.default está desdefinido ou definido para false, os seguintes comandos escrevem usando V-Order:

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-01-31'")\
  .option("parquet.vorder.enabled","true")\
  .saveAsTable("myschema.mytable")

DeltaTable.createOrReplace(spark)\
  .addColumn("id","INT")\
  .addColumn("firstName","STRING")\
  .addColumn("middleName","STRING")\
  .addColumn("lastName","STRING",comment="surname")\
  .addColumn("birthDate","TIMESTAMP")\
  .option("parquet.vorder.enabled","true")\
  .location("Files/people")\
  .execute()