Share via


Delta Lake tablo iyileştirmesi ve V Sırası

Lakehouse ve Delta Lake tablo biçimi Microsoft Fabric'in merkezinde yer alır ve tabloların analiz için iyileştirilmiş olmasını sağlamak önemli bir gereksinimdir. Bu kılavuz, Delta Lake tablo iyileştirme kavramlarını, yapılandırmalarını ve en yaygın Büyük Veri kullanım desenlerine nasıl uygulanacağını kapsar.

V-Order nedir?

V-Order, Power BI, SQL, Spark ve diğerleri gibi Microsoft Fabric işlem altyapıları altında yıldırım hızında okumalar sağlayan parquet dosya biçimine yönelik bir yazma süresi iyileştirmesidir.

Power BI ve SQL altyapıları, veri erişim süreleri gibi bellek içi süreler elde etmek için Microsoft Verti-Scan teknolojisini ve V Sıralı parquet dosyalarını kullanır. Spark ve Verti-Scan olmayan diğer işlem altyapıları, bazı senaryoların %50'ye kadar olduğu ortalama %10 daha hızlı okuma süresine sahip V-Ordered dosyalarından da yararlanır.

V-Order, parquet dosyalarına özel sıralama, satır grubu dağıtımı, sözlük kodlaması ve sıkıştırma uygulayarak çalışır, böylece işlem altyapılarında bunu okumak için daha az ağ, disk ve CPU kaynağı gerektirerek maliyet verimliliği ve performans sağlar. V Düzeni sıralamanın ortalama yazma süreleri üzerinde %15 etkisi vardır ancak %50'ye kadar daha fazla sıkıştırma sağlar.

%100 açık kaynak parquet biçimiyle uyumludur; tüm parquet motorları bunu normal bir parquet dosyası olarak okuyabilir. Delta tabloları her zamankinden daha verimlidir; Z-Order gibi özellikler V-Order ile uyumludur. Tablo özellikleri ve iyileştirme komutları, bölümlerindeki denetim V-Sırası'nda kullanılabilir.

V-Order parquet dosya düzeyinde uygulanır. Delta tabloları ve Z-Order, sıkıştırma, vakum, zaman yolculuğu gibi özellikleri V-Order ile uyumludur ve ek avantajlar için birlikte kullanılabilir.

V-Order yazmalarını denetleme

V-Order, Microsoft Fabric'te varsayılan olarak etkindir ve Apache Spark'ta aşağıdaki yapılandırmalarla denetlenir.

Yapılandırma Varsayılan değer Açıklama
spark.sql.parquet.vorder.enabled true Oturum düzeyi V-Order yazmayı denetler.
TBLPROPERTIES("delta.parquet.vorder.enabled") yanlış Tablolarda varsayılan V Sırası modu
Veri çerçevesi yazıcı seçeneği: parquet.vorder.enabled Unset Veri çerçevesi yazıcıyı kullanarak V-Order yazmalarını denetleme

V-Order yazmalarının kullanımını denetlemek için aşağıdaki komutları kullanın.

Apache Spark oturumunda V-Order yapılandırmasını denetleme

%%sql 
SET spark.sql.parquet.vorder.enabled 

Apache Spark oturumunda V Sırası yazmayı devre dışı bırakma

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

Apache Spark oturumunda V Sırası yazmayı etkinleştirme

Önemli

Oturum düzeyinde etkinleştirildiğinde. Tüm parquet yazma işlemleri V-Order etkin olarak yapılır. Bu, Delta olmayan parquet tablolarını ve tablo özelliğinin parquet.vorder.enabled veya falseolarak ayarlandığı Delta tablolarını true içerir.

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

Delta tablosu özelliklerini kullanarak V Sırasını denetleme

Tablo oluşturma sırasında V-Order tablo özelliğini etkinleştirin:

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

Önemli

Tablo özelliği true olarak ayarlandığında INSERT, UPDATE ve MERGE komutları beklendiği gibi davranır ve yazma zamanı iyileştirmesini gerçekleştirir. V-Order oturum yapılandırması true olarak ayarlandıysa veya spark.write bunu etkinleştirirse, TBLPROPERTIES false olarak ayarlansa bile yazma işlemleri V-Order olur.

Tablo özelliğini değiştirerek V-Order'ı etkinleştirin veya devre dışı bırakın:

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

Tablo özelliklerini kullanarak V-Order'ı etkinleştirdikten veya devre dışı bırakdıktan sonra, yalnızca tabloya gelecekteki yazma işlemleri etkilenir. Parquet dosyaları, oluşturulurken kullanılan sıralamayı tutar. Geçerli fiziksel yapıyı V-Order uygulayacak veya kaldıracak şekilde değiştirmek için aşağıdaki "Tabloyu iyileştirirken V Sırasını Denetleme" bölümünü okuyun.

Yazma işlemlerinde V-Order'ın doğrudan denetlenmesi

Tüm Apache Spark yazma komutları açık değilse oturum ayarını devralır. Aşağıdaki tüm komutlar, oturum yapılandırmasını örtük olarak devralarak V-Order kullanarak yazılır.

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

Önemli

V-Order yalnızca koşuldan etkilenen dosyalar için geçerlidir.

Ayarlanmamış veya false olarak ayarlanmış bir oturumda spark.sql.parquet.vorder.enabled , aşağıdaki komutlar V-Order kullanılarak yazılır:

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

Yazmayı İyileştirme nedir?

Apache Spark gibi Büyük Veri işleme altyapılarında analitik iş yükleri, standartlaştırılmış daha büyük dosya boyutları kullanılırken en verimli performansı gösterir. Dosya boyutu, dosya sayısı, Spark çalışanlarının sayısı ve yapılandırmaları arasındaki ilişki, performans üzerinde kritik bir rol oynar. Data Lake tablolarına veri alımı, sürekli olarak çok sayıda küçük dosya yazmanın devralınan özelliğine sahip olabilir; Bu senaryo genellikle "küçük dosya sorunu" olarak bilinir.

Yazma İyileştirme, Apache Spark altyapısındaki Microsoft Fabric ve Azure Synapse Analytics üzerinde yazılmış dosya sayısını azaltan ve yazılan verilerin tek tek dosya boyutunu artırmayı hedefleyen bir Delta Lake özelliğidir. Hedef dosya boyutu, yapılandırmalar kullanılarak iş yükü gereksinimleri başına değiştirilebilir.

Bu özellik Apache Spark için Microsoft Fabric Çalışma Zamanı'nda varsayılan olarak etkindir. Yazma kullanımını iyileştirme senaryoları hakkında daha fazla bilgi edinmek için Apache Spark'ta yazmayı iyileştirme gereksinimi makalesini okuyun.

Birleştirme iyileştirmesi

Delta Lake MERGE komutu, kullanıcıların delta tablosunu gelişmiş koşullarla güncelleştirmesine olanak tanır. MERGE komutunu kullanarak bir kaynak tablo, görünüm veya DataFrame'den gelen verileri hedef tabloya güncelleştirebilir. Ancak Delta Lake'in açık kaynak dağıtımındaki geçerli algoritma, değiştirilmemiş satırları işlemek için tam olarak iyileştirilmemiş. Microsoft Spark Delta ekibi özel bir Düşük Karıştırma Birleştirme iyileştirmesi uyguladı, değiştirilmemiş satırlar, eşleşen satırları güncelleştirmek için gereken pahalı bir karıştırma işleminin dışında tutuldu.

Uygulama yapılandırma tarafından spark.microsoft.delta.merge.lowShuffle.enabled denetlenerek çalışma zamanında varsayılan olarak etkinleştirilir. Kod değişikliği gerektirmez ve Delta Lake'in açık kaynak dağıtımıyla tamamen uyumludur. Düşük Karışık Birleştirme kullanım senaryoları hakkında daha fazla bilgi edinmek için Delta tablolarında Düşük Karıştırma Birleştirme iyileştirmesi makalesini okuyun.

Delta tablosu bakımı

Delta tabloları değiştikçe performans ve depolama maliyeti verimliliği aşağıdaki nedenlerle azalmaya eğilimlidir:

  • Tabloya eklenen yeni veriler verileri çarpıtabilir.
  • Toplu iş ve akış veri alımı oranları birçok küçük dosya getirebilir.
  • Güncelleştirme ve silme işlemleri sonunda okuma yükü oluşturur; parquet dosyaları tasarım gereği sabittir, bu nedenle Delta tabloları değişiklik kümesiyle yeni parquet dosyaları ekler ve ilk iki öğenin getirdiği sorunları daha da artırır.
  • Artık depolamada kullanılabilir veri dosyaları ve günlük dosyaları gerekmez.

Tabloları en iyi performans için en iyi durumda tutmak için Delta tablolarında bölme sıkıştırma ve vakum işlemleri gerçekleştirin. Bin sıkıştırması OPTIMIZE komutuyla elde edilir; tüm değişiklikleri daha büyük, birleştirilmiş parquet dosyalarıyla birleştirir. Başvurulmayan depolama temizleme işlemi VACUUM komutuyla sağlanır.

OPTIMIZE ve VACUUM tablo bakım komutları not defterleri ve Spark İş Tanımları içinde kullanılabilir ve ardından platform özellikleri kullanılarak ayarlanabilir. Fabric'teki Lakehouse, Delta Lake tablo bakımı makalesinde açıklandığı gibi geçici tablo bakımı gerçekleştirmek için kullanıcı arabirimini kullanma işlevi sunar.

Önemli

Veri alımı sıklığına ve beklenen okuma desenlerine göre tablo fiziksel yapısının düzgün tasarlanması, bu bölümde açıklanan iyileştirme komutlarını çalıştırmaktan büyük olasılıkla daha önemlidir.

Tabloyu iyileştirirken V Sırasını Denetleme

Aşağıdaki komut yapıları, TBLPROPERTIES ayarından veya oturum yapılandırma ayarından bağımsız olarak V-Order kullanarak etkilenen tüm dosyaları sıkıştırır ve yeniden yazar:

%%sql 
OPTIMIZE <table|fileOrFolderPath> VORDER;

OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;

OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER  BY (col_name1, col_name2, ...)] VORDER;

ZORDER ve VORDER birlikte kullanıldığında Apache Spark, ikili sıkıştırma, ZORDER, VORDER işlemlerini sırayla gerçekleştirir.

Aşağıdaki komutlar TBLPROPERTIES ayarını kullanarak etkilenen tüm dosyaları sıkıştırır ve yeniden yazar. TBLPROPERTIES değeri V-Order olarak true olarak ayarlanırsa, etkilenen tüm dosyalar V-Order olarak yazılır. TBLPROPERTIES ayarlanmamışsa veya false olarak V-Order olarak ayarlanmışsa, oturum ayarını devralır; bu nedenle, tablodan V-Order'ı kaldırmak için oturum yapılandırmasını false olarak ayarlayın.

%%sql 
OPTIMIZE <table|fileOrFolderPath>;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];