Otimizar tabelas Delta Lake com V-Order

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 o V-Order e mostra os principais padrões de configuração e manutenção para tabelas Delta.

Use este artigo para:

  • Entenda o que a V-Order muda e quando ela ajuda.
  • Entenda como o Z-Order e o V-Order 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 obter diretrizes entre cargas de trabalho sobre quando aplicar a Ordem V com base em cenários de consumo, consulte a manutenção e a otimização da tabela entre cargas de trabalho.

O que é V-Order?

V-Order é uma otimização de tempo de gravação para arquivos Parquet que pode melhorar o desempenho de consultas subsequentes nos mecanismos do 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 é no nível do arquivo. Operações delta como compactação, vácuo e viagem no tempo podem ser usadas com ela.

Controlar gravações de ordem V

O V-Order é usado para otimizar o layout do arquivo Parquet para um desempenho de consulta mais rápido, especialmente em cenários de leitura pesada. Em Microsoft Fabric, V-Order é desabilitado por padrão para todos os workspaces recém-criados para otimizar o desempenho de cargas de trabalho de engenharia de dados com gravação pesada.

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

Configuração Valor Padrão Descrição
spark.sql.parquet.vorder.default false Controla a escrita em Ordem-V no nível da sessão. Definido como false por padrão em novos workspaces do Fabric.
TBLPROPERTIES("delta.parquet.vorder.enabled") Remover definição Controla o comportamento padrão de V-Order 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 gravação.

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

O V-Order é desabilitado por padrão em novos workspaces do Fabric (spark.sql.parquet.vorder.default=false) para melhorar o desempenho de gravação para pipelines de ingestão e transformação.

Para cargas de trabalho com grande volume de leitura, como consultas interativas ou análise de painéis, habilite o V-Order configurando spark.sql.parquet.vorder.default para true. Você também pode alternar para readHeavyforSpark ou ReadHeavy perfis de recursos, que habilitam automaticamente o V-Order para desempenho otimizado para 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, não é necessário essa configuração mais antiga. Se você estiver migrando de versões de runtime anteriores, remova essa configuração do código.

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

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

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

Desativar a escrita em V-Order na sessão do 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 em V-Order na sessão do Apache Spark

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

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

Controlar o V-Order usando as 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.

Habilite a propriedade V-Order da tabela 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 estiver definida como true, INSERTUPDATEe MERGE aplicar V-Order no momento da gravação. As configurações de nível de sessão e de gravação ainda têm precedência, permitindo que as gravações usem a V-Order mesmo quando TBLPROPERTIES estiver definido como false.

Habilite ou desabilite o V-Order 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 habilitar ou desabilitar o V-Order usando as propriedades da tabela, somente gravações futuras na tabela serão afetadas. Os arquivos parquet mantêm a ordenação usada quando ela foi criada. Para alterar a estrutura física atual a fim de aplicar ou remover o V-Order, leia Compactação de tabela.

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

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 o V-Order, utilizando a configuração de sessão herdada.

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

O V-Order se aplica apenas para arquivos afetados pelo predicado.

Em uma sessão em que spark.sql.parquet.vorder.default não está definido ou definido como false, os seguintes comandos são executados com 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()