Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Lakehouse e o formato de tabela Delta Lake são fundamentais para o Microsoft Fabric, sendo um requisito essencial garantir que as tabelas estejam otimizadas para análise. Este guia aborda conceitos de otimização de tabela Delta Lake, configurações e como aplicá-la aos padrões de uso de Big Data mais comuns.
Importante
Os OPTIMIZE comandos neste artigo são comandos SQL do Spark e devem ser executados em ambientes Spark como:
- Blocos de notas com ambiente de execução Spark
- Definições de trabalhos do Spark
- Lakehouse através da opção Manutenção no navegador Explorer
Estes comandos NÃO são suportados no SQL Analytics Endpoint ou no editor de consultas SQL do Warehouse, que apenas suportam comandos T-SQL. Para a manutenção de tabelas através do SQL Analytics Endpoint, use as opções da interface de manutenção do Lakehouse ou execute os comandos num caderno Fabric.
O que é V-Order?
V-Order é uma otimização do tempo de gravação para o formato de arquivo parquet que permite leituras ultrarrápidas nos mecanismos de computação do Microsoft Fabric, como Power BI, SQL, Spark e outros.
Os motores Power BI e SQL usam a tecnologia Microsoft Verti-Scan e arquivos de parquet V-Ordered para obter tempos de acesso a dados semelhantes aos da memória RAM. O Spark e outros mecanismos de computação não-Verti-Scan também se beneficiam dos arquivos V-Ordered com uma média de tempos de leitura 10% mais rápidos, com alguns cenários de até 50%.
O V-Order otimiza os arquivos do Parquet por meio de classificação, distribuição de grupos de linhas, codificação e compactação, reduzindo o uso de recursos e melhorando o desempenho e a eficiência de custos. Embora adicione ~15% aos tempos de escrita, pode aumentar a compressão em até 50%. A classificação V-Order afeta os tempos médios de gravação em 15%, mas proporciona até 50% mais compressão.
É 100% compatível com o formato de parquet de código aberto; todos os motores de parquet podem lê-lo como ficheiros de parquet normais. As tabelas delta estão mais eficientes do que nunca; recursos como Z-Order são compatíveis com V-Order. As propriedades da tabela e os comandos de otimização podem ser usados para controlar a ordem V de suas partições.
V-Order é aplicado no nível do arquivo parquet. As mesas Delta e suas características, como Z-Order, compactação, vácuo, viagem no tempo, etc. são ortogonais à V-Order, como tal, são compatíveis e podem ser usadas juntas para benefícios extras.
Controlar escritas em V-Order
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. No Microsoft Fabric, o V-Order é desativado por padrão para todos os espaços de trabalho recém-criados para otimizar o desempenho para cargas de trabalho de engenharia de dados com grande volume de 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.
Importante
O V-Order é desativado por padrão em novos espaços de trabalho do Fabric (
spark.sql.parquet.vorder.default=false) para melhorar o desempenho dos pipelines de ingestão e transformação de dados.Se sua carga de trabalho for de leitura pesada, como consultas interativas ou painéis, habilite o V-Order com as seguintes configurações:
- Defina a propriedade
spark.sql.parquet.vorder.defaultSpark como true'. - Alterne perfis de recursos para perfis
readHeavyforSparkouReadHeavy. Este perfil habilita automaticamente o V-Order para um melhor desempenho de leitura.
- Defina a propriedade
No Fabric runtime 1.3 e versões superiores, a spark.sql.parquet.vorder.enable configuração é removida. Como o V-Order é aplicado automaticamente durante a otimização Delta ao usar instruções OTIMIZE, não há necessidade de habilitar manualmente essa configuração em versões mais recentes do ambiente de execução. Se você estiver migrando código de uma versão anterior do tempo de execução, poderá remover essa configuração, pois o mecanismo agora a manipula automaticamente.
Verifique a configuração do V-Order na sessão do Apache Spark
%%sql
SET spark.sql.parquet.vorder.default
Desativar a escrita V-Order na sessão do Apache Spark
%%sql
SET spark.sql.parquet.vorder.default=FALSE
Ativar a escrita em V-Order na sessão do Apache Spark
Importante
Quando ativado no nível da sessão. Todas as gravações de parquet são feitas com V-Order habilitado, o que inclui tabelas de parquet não Delta e tabelas Delta com a propriedade parquet.vorder.enabled definida para true ou false.
%%sql
SET spark.sql.parquet.vorder.default=TRUE
Controle V-Order usando propriedades de tabela Delta
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");
Importante
Quando a propriedade table é definida como true, os comandos INSERT, UPDATE e MERGE se comportam conforme o esperado e realizam a otimização durante a gravação. Se a configuração da sessão V-Order estiver definida como true ou o spark.write habilitá-lo, as gravações serão V-Order mesmo que as TBLPROPERTIES estejam definidas como 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 alterar a estrutura física atual para aplicar ou remover V-Order, veja como controlar V-Order ao otimizar uma tabela.
Controlando V-Order diretamente em operações de gravação
Todos os comandos de gravação do Apache Spark herdam a configuração da sessão, se não forem explícitos. Todos os comandos a seguir escrevem usando V-Order herdando implicitamente 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 >= '2017-01-01' AND end_date <= '2017-01-31'")\
.saveAsTable("myschema.mytable")
Importante
V-Order só se aplica a arquivos afetados pelo predicado.
Em uma sessão em que spark.sql.parquet.vorder.default está desdefinido ou definido como false, os seguintes comandos seriam gravados usando V-Order:
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-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()
O que é Otimize Write?
As cargas de trabalho analíticas em mecanismos de processamento de Big Data, como o Apache Spark, têm um desempenho mais eficiente ao usar tamanhos de arquivo maiores padronizados. A relação entre o tamanho do arquivo, o número de arquivos, o número de trabalhadores do Spark e suas configurações, desempenham um papel crítico no desempenho. A ingestão de dados em tabelas de data lake pode ter a característica herdada de escrever constantemente muitos arquivos pequenos; Esse cenário é comumente conhecido como o "problema de arquivo pequeno".
O Otimize Write é um recurso Delta Lake no Fabric e Synapse que reduz a contagem de arquivos e aumenta o tamanho de arquivos individuais durante gravações no Apache Spark. O tamanho do arquivo de destino pode ser alterado de acordo com os requisitos de carga de trabalho usando configurações.
O recurso é habilitado por padrão no Microsoft Fabric Runtime for Apache Spark. Para saber mais sobre os cenários de uso do Otimize Write, leia o artigo A necessidade do Otimize Write no Apache Spark.
Otimização de mesclagem
O comando Delta Lake MERGE permite que os usuários atualizem uma tabela delta com condições avançadas. Ele pode atualizar dados de uma tabela de origem, exibição ou DataFrame em uma tabela de destino usando o comando MERGE. No entanto, o algoritmo atual na distribuição de código aberto do Delta Lake não está totalmente otimizado para lidar com linhas não modificadas. A equipa do Microsoft Spark Delta implementou uma otimização específica chamada Low Shuffle Merge. Nesta otimização, as linhas que não são modificadas são excluídas de uma dispendiosa operação de embaralhamento, que é necessária para atualizar as linhas correspondentes.
A implementação é controlada pela spark.microsoft.delta.merge.lowShuffle.enabled configuração, habilitada por padrão em tempo de execução. Não requer alterações de código e é totalmente compatível com a distribuição de código aberto do Delta Lake. Para saber mais sobre os cenários de uso de Mesclagem com Baixa Redistribuição, leia o artigo Otimização de Mesclagem com Baixa Redistribuição em Tabelas Delta.
Manutenção da Tabela Delta
À medida que as tabelas Delta mudam, o desempenho e a eficiência de custos de armazenamento tendem a diminuir pelos seguintes motivos:
- Novos dados adicionados à tabela podem distorcer os dados.
- As taxas de ingestão de dados em lote e em streaming podem resultar numa grande quantidade de ficheiros pequenos.
- As operações de atualização e exclusão adicionam sobrecarga de leitura. Os arquivos Parquet são imutáveis por design. À medida que as tabelas Delta adicionam novos arquivos Parquet com o conjunto de alterações, isso amplifica ainda mais os problemas impostos pelos dois primeiros itens.
- Não são mais necessários arquivos de dados e arquivos de log disponíveis no armazenamento.
Execute operações de compactação binária e limpeza nas tabelas Delta para manter as tabelas no melhor estado e obter o melhor desempenho. A compactação de bloco é alcançada pelo comando OTIMIZE, que funde todas as alterações em arquivos de parquet maiores e consolidados. A limpeza do armazenamento desreferenciado é realizada através do comando VACUUM.
Os comandos de manutenção de tabela OTIMIZE e VACUUM podem ser usados em notebooks e definições de trabalho do Spark e, em seguida, orquestrados usando recursos de plataforma. O Lakehouse da Fabric oferece uma funcionalidade para usar a interface de utilizador para executar a manutenção de tabelas ad-hoc, conforme explicado no artigo de manutenção de tabelas Delta Lake.
Importante
Projetar a estrutura física da tabela com base na frequência de ingestão e nos padrões de leitura geralmente é mais importante do que os comandos de otimização nesta seção.
Controle o V-Order ao otimizar uma tabela
As estruturas de comando a seguir compactam e reescrevem todos os arquivos afetados usando V-Order, independentemente da configuração TBLPROPERTIES ou da configuração da sessão:
%%sql
OPTIMIZE <table|fileOrFolderPath> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER BY (col_name1, col_name2, ...)] VORDER;
Quando ZORDER e VORDER são usados juntos, o Apache Spark executa bin-compaction, ZORDER, VORDER sequencialmente.
Os comandos a seguir compactam e reescrevem todos os ficheiros afetados usando a definição TBLPROPERTIES. Se TBLPROPERTIES for definido como V-Order, todos os arquivos afetados serão gravados em formato V-Order. Se TBLPROPERTIES estiver desdefinido ou definido como false, ele herdará a configuração da sessão. Para remover V-Order da tabela, defina a configuração da sessão como false.
Observação
Ao usar estes comandos em cadernos Fabric, certifique-se de que há um espaço entre %%sql e o OPTIMIZE comando. A sintaxe correta é:
%%sql
OPTIMIZE table_name;
Não:%%sqlOPTIMIZE table_name; (isto causará um erro de sintaxe)
%%sql
OPTIMIZE <table|fileOrFolderPath>;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];