En iyi deneyimler: Delta Lake

Bu makalede Delta Lake kullanırken en iyi yöntemler açıklanmaktadır.

En iyi yöntemlere genel bakış

Delta Lake iş yüklerinin çoğu için geçerli olan genel öneriler aşağıdadır:

Eski Delta yapılandırmalarını kaldırma

Databricks, yeni bir Databricks Runtime sürümüne yükseltirken Spark yapılandırmalarından ve tablo özelliklerinden en açık eski Delta yapılandırmalarının kaldırılmasını önerir. Eski yapılandırmalar, Databricks tarafından sunulan yeni iyileştirmelerin ve varsayılan değerlerin geçirilen iş yüklerine uygulanmasını engelleyebilir.

Dosyaları sıkıştırma

Unity Kataloğu tarafından yönetilen tablolar üzerinde tahmine dayalı optimizasyon, OPTIMIZE ve VACUUM komutlarını otomatik olarak çalıştırır. Bkz. Unity Kataloğu tarafından yönetilen tablolar için tahmine dayalı iyileştirme.

Databricks, küçük dosyaları sıkıştırmak için OPTIMIZE komutunun sık çalıştırılmasını önerir.

Not

Bu işlem eski dosyaları kaldırmaz. Bunları kaldırmak için VACUUM komutunu çalıştırın.

Delta Lake ile Spark önbelleğe alma özelliğini kullanmayın

Databricks, aşağıdaki nedenlerle Spark önbelleğini kullanmanızı önermez:

  • Önbelleğe alınmış DataFrame üzerine eklenen ilave filtrelerden kaynaklanabilecek herhangi bir veri atlamasını kaybedersiniz.
  • Tabloya farklı bir tanımlayıcı kullanılarak erişilirse önbelleğe alınan veriler güncelleştirilmeyebilir.

Apache Spark'ta Delta Lake ile Parquet arasındaki farklar

Delta Lake aşağıdaki işlemleri otomatik olarak işler. Bu işlemleri asla el ile gerçekleştirmemelisiniz:

  • REFRESH TABLE: Delta Lake tabloları her zaman en güncel bilgileri döndürür, bu nedenle değişikliklerden sonra REFRESH TABLE öğesini manuel olarak çağırmanıza gerek yoktur.
  • Bölüm ekleme ve kaldırma: Delta Lake, bir tabloda bulunan bölüm kümesini otomatik olarak izler ve veriler eklendikçe veya kaldırıldıkçe listeyi güncelleştirir. Sonuç olarak ALTER TABLE [ADD|DROP] PARTITION veya MSCK komutunu çalıştırmanız gerekmez.
  • Tek bir bölüm yükleme: Bölümleri doğrudan okumak gerekli değildir. Örneğin, komutunu çalıştırmanız spark.read.format("parquet").load("/data/date=2017-01-01")gerekmez. Bunun yerine, verileri atlamak için WHERE gibi spark.read.table("<table-name>").where("date = '2017-01-01'") bir yan tümce kullanın.
  • Veri dosyalarını el ile değiştirmeyin: Delta Lake, değişiklikleri tabloda atomik olarak işlemek için işlem günlüğünü kullanır. Delta Lake tablosundaki Parquet veri dosyalarını doğrudan değiştirmeyin, eklemeyin veya silmeyin, çünkü bu veri kaybına veya tablo bozulmasına neden olabilir.

Delta Lake birleştirme işleminin performansını iyileştirme

Aşağıdaki yaklaşımları kullanarak birleştirme süresini kısaltabilirsiniz:

  • Eşleşmeler için arama alanını azaltın: İşlem varsayılan olarak delta merge Lake tablosunun tamamında arama yaparak kaynak tabloda eşleşmeleri bulur. Hızlandırmanın merge bir yolu, eşleştirme koşuluna bilinen kısıtlamalar ekleyerek arama alanını azaltmaktır. Örneğin, tarafından bölümlenmiş country bir tablonuz olduğunu ve date son güne ve belirli bir ülkeye ilişkin bilgileri güncelleştirmek için kullanmak merge istediğinizi varsayalım. Aşağıdaki koşulun eklenmesi, sorgunun yalnızca ilgili bölümlerde eşleşmeleri araydıkça daha hızlı olmasını sağlar:

    events.date = current_date() AND events.country = 'USA'
    

    Ayrıca, bu sorgu diğer eşzamanlı işlemlerle çakışma olasılığını da azaltır. Daha fazla ayrıntı için bkz: Yalıtım düzeyleri ve yazma çakışmaları.

  • Sıkıştırılmış dosyalar: Veriler birçok küçük dosyada depolanıyorsa, eşleşmeleri aramak için verileri okumak yavaş olabilir. Okuma aktarım hızını geliştirmek için küçük dosyaları daha büyük dosyalara sıkıştırabilirsiniz. Ayrıntılar için bkz . Veri dosyası düzenini iyileştirme.

  • Yazma işlemleri için karıştırma bölümlerini denetleme: İşlem merge , güncelleştirilmiş verileri hesaplamak ve yazmak için verileri birden çok kez karıştırıyor. Karıştırmak için kullanılan görev sayısı Spark oturum yapılandırması spark.sql.shuffle.partitionstarafından denetlenır. Bu parametrenin ayarlanması yalnızca paralelliği denetlemez, aynı zamanda çıkış dosyalarının sayısını da belirler. Değerin artırılması paralelliği artırır ancak aynı zamanda daha fazla sayıda daha küçük veri dosyası oluşturur.

  • İyileştirilmiş yazma işlemlerini etkinleştirme: Bölümlenmiş tablolar için, merge karıştırma bölümlerinin sayısından çok daha fazla sayıda küçük dosya oluşturabilir. Her shuffle görevinin birden çok bölüme birden çok dosya yazabilmesi ve performans darboğazına dönüşebilmesi nedeniyle. İyileştirilmiş yazmaları etkinleştirerek dosya sayısını azaltabilirsiniz. Bkz İyileştirilmiş yazma işlemleri.

  • Tablodaki dosya boyutlarını ayarlama: Azure Databricks, daha küçük tablolar için daha küçük dosyalar ve daha büyük tablolar için daha büyük dosyalar kullanarak dosya boyutlarını tablo boyutuna göre otomatik olarak ayarlar. Ayrıntılar için dosya boyutlarını ayarlama bölümüne bakın.

  • Düşük Karışık Birleştirme: Düşük Karışık Birleştirme, en yaygın iş yükleri için daha iyi performans sağlayan iyileştirilmiş bir uygulamadır MERGE. Ayrıca, değiştirilmemiş verilerde sıvı kümeleme gibi mevcut veri düzeni iyileştirmelerini korur.