Otimize tabelas Delta Lake com ordem V

O formato de tabela Lakehouse e Delta Lake são centrais para Microsoft Fabric. Manter tabelas Delta otimizadas é fundamental para o desempenho e a eficiência de custo para cargas de trabalho de análise.

Este artigo ajuda você a decidir quando usar a ordem V e mostra os principais padrões de configuração e manutenção para tabelas Delta.

Use este artigo para:

  • Entenda o que a ordem V muda e quando isso ajuda.
  • Entenda como a ordem Z e a ordem V se complementam.
  • Escolha o nível de controle correto: sessão, propriedade da tabela ou operação de gravação.
  • Aplique os padrões de manutenção de tabelas Delta no contexto correto de tempo de execução do Spark.

Para orientações entre cargas de trabalho sobre quando aplicar a ordem V com base em cenários de consumo, veja Manutenção e otimização da tabela de carga cruzada.

O que é V-order?

A ordem V é uma otimização no tempo de gravação para arquivos Parquet que pode melhorar o desempenho das consultas a jusante entre motores Fabric.

Visão geral

  • Onde ele ajuda mais: Padrões de leitura pesada, como dashboarding, análise interativa e verificações repetidas.
  • Como isso ajuda: Reorganiza o layout Parquet (por exemplo, distribuição de grupos de linhas, codificação e compactação) para melhorar a eficiência de leitura.
  • Compensação típica: As escritas podem levar mais tempo (geralmente cerca de 15%), enquanto as leituras podem melhorar significativamente dependendo do tipo de carga de trabalho.
  • Compatibilidade do mecanismo: Os arquivos permanecem em conformidade com o Parquet de software livre e os recursos Delta, como o Z-Order, permanecem compatíveis.
  • Escopo: A ordem V é em nível de arquivo. Operações delta como compactação, vácuo e viagem no tempo podem ser usadas com ela.

Escritas em ordem V de controle

A ordem V é usada para otimizar o layout de arquivos Parquet para um desempenho de consulta mais rápido, especialmente em cenários com muita leitura. No Fabric, a ordem V é desativada por padrão para todos os espaços de trabalho recém-criados, a fim de otimizar o desempenho de cargas de trabalho de engenharia de dados que exigem muita escrita.

O comportamento da ordem V no Apache Spark é controlado pelas seguintes configurações:

Configuração Valor Padrão Descrição
spark.sql.parquet.vorder.default false Controla a escrita em ordem V em nível de sessão. Definido como false por padrão em novos workspaces do Fabric.
TBLPROPERTIES("delta.parquet.vorder.enabled") Remover definição Ele controla o comportamento padrão da ordem V no nível da tabela.
Opção de gravador DataFrame: parquet.vorder.enabled Remover definição Usado para controlar a ordem V no nível da operação de escrita.

Use os seguintes comandos para habilitar ou sobrescrever as escritas em ordem V conforme necessário para o seu cenário.

A ordem V está desativada por padrão em novos espaços de trabalho Fabric (spark.sql.parquet.vorder.default=false) para melhorar o desempenho de escrita em pipelines de ingestão e transformação.

Para cargas de trabalho com muita leitura, como consultas interativas ou dashboards, ative a ordem V definindo spark.sql.parquet.vorder.default para true. Você também pode alternar para readHeavyforSpark perfis de recursos OR ReadHeavy , que ativam automaticamente a ordem V para desempenho focado em leitura.

No runtime do Fabric 1.3 e versões posteriores, a configuração spark.sql.parquet.vorder.enable é removida. Como a ordem V pode ser aplicada automaticamente durante a otimização Delta com OPTIMIZE, você não precisa dessa configuração antiga. Se você estiver migrando de versões de runtime anteriores, remova essa configuração do código.

Verifique a configuração da ordem V na sessão Apache Spark

Use esses comandos para confirmar o valor da sessão atual antes de alterá-lo.

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

Desative a escrita por ordem V na sessão Apache Spark

Utilize esses comandos quando sua carga de trabalho estiver intensiva em gravação e você desejar operações de transformação ou ingestão mais rápidas.

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

Habilitar a escrita por ordem V em uma sessão do Apache Spark

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

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

Controle a ordem V usando propriedades da tabela Delta

Esta seção usa o SQL do Spark apenas porque as propriedades da tabela são definidas por meio de DDL e ALTER TABLE instruções do SQL.

Use as propriedades da tabela quando quiser um padrão de nível de tabela que se aplique entre sessões.

Ative 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 está definida para true, INSERT, UPDATE, e MERGE aplicam ordem V no momento da escrita. Configurações de nível de sessão e de escrita ainda têm prioridade, então as gravações ainda podem usar ordem V mesmo quando TBLPROPERTIES está definida como false.

Ative ou desative a ordem V alterando 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 a ordem V usando propriedades da tabela, apenas futuras gravações na tabela são afetadas. Os arquivos parquet mantêm a ordenação usada quando ela foi criada. Para alterar a estrutura física atual para aplicar ou remover a ordem V, leia Compactação da Tabela.

Controle da ordem V diretamente em operações de escrita

Esta seção usa o PySpark para demonstrar a API de gravador dataframe. O mesmo padrão está disponível nas APIs do Scala DataFrame com opções equivalentes.

Use opções de nível de gravação quando precisar de controle por operação em vez de padrões de toda a sessão ou de toda a tabela.

Todos os comandos de gravação do Apache Spark herdam a configuração da sessão quando não são substituídos explicitamente. Os exemplos a seguir escrevem usando a ordem V 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") 

A ordem V se aplica apenas a arquivos afetados pelo predicado.

Em uma sessão onde spark.sql.parquet.vorder.default é desdefinido ou definido para false, os seguintes comandos escrevem usando ordem V:

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()