Aracılığıyla paylaş


Delta tablolarında Düşük Karıştırma 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 geçerli algoritma, değiştirilmemiş satırları işlemek için tam olarak iyileştirilmemiş . Düşük Karıştırma birleştirme iyileştirmesiyle, 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 tutulur.

Neden Düşük Karışık Birleştirmeye ihtiyacımız var?

Şu anda MERGE işlemi iki Birleştirme yürütmesi tarafından gerçekleştirilir. İlk birleşim, eşleşen satırlar da dahil olmak üzere hedef tablonun dokunulan dosyaların listesini bulmak için hedef tablonun tamamını ve kaynak verileri kullanmaktır. Bundan sonra, gerçek tablo güncelleştirmesini yapmak için yalnızca dokunulan dosyaları ve kaynak verileri okuyarak ikinci birleştirmeyi gerçekleştirir. İlk birleşim, ikinci birleştirme için veri miktarını azaltmak olsa da, dokunulan dosyalarda çok sayıda değiştirilmemiş satır olabilir. İlk birleştirme sorgusu, yalnızca belirtilen eşleşen koşuldaki sütunları okuduğundan daha hafiftir. Tablo güncelleştirmesinin ikincisinde tüm sütunların yüklenmesi gerekir ve bu da pahalı bir karıştırma işlemine neden olur.

Düşük Karıştırma birleştirme iyileştirmesi ile Delta, ilk birleşimden gelen eşleşen satır sonucunu geçici olarak tutar ve ikinci birleşim için kullanır. Sonuç temelinde, ağır karıştırma işleminden değiştirilmemiş satırları dışlar. Eşleşen satırlar ve değiştirilmemiş satırlar için iki ayrı yazma işi olması, önceki davranışa kıyasla 2 kat sayıda çıkış dosyası elde edilmesine neden olabilir. Ancak beklenen performans artışı olası küçük dosyalar sorununa ağır basıyor.

Kullanılabilirlik

Dekont

  • Düşük Karışık Birleştirme, Önizleme özelliği olarak kullanılabilir.

Apache Spark sürüm 3.2 ve 3.3 için Synapse Havuzlarında kullanılabilir.

Sürüm Kullanılabilirlik Varsayılan
Delta 0.6 / Spark 2.4 Hayır -
Delta 1.2 / Spark 3.2 Evet false
Delta 2.2 / Spark 3.3 Evet true

Düşük Karışık Birleştirmenin Avantajları

  • Dokunulan dosyalardaki değiştirilmemiş satırlar ayrı işlenir ve gerçek MERGE işleminden geçilmez. Genel MERGE yürütme süresini ve işlem kaynaklarını kaydedebilir. Çok sayıda satır kopyalandığında ve yalnızca birkaç satır güncelleştirildiğinde kazanç daha büyük olur.
  • Satır sıralamaları değiştirilmemiş satırlar için korunur. Bu nedenle, dosya sıralanmış veya Z-ORDERED ise, değiştirilmemiş satırların çıkış dosyaları yine de veri atlama için verimli olabilir.
  • BIRLEŞTIRME koşulu dokunulan dosyalardaki tüm satırlarla eşleştiğinde en kötü durumda bile küçük bir ek yük olacaktır.

Düşük Karışık Birleştirmeyi etkinleştirme ve devre dışı bırakma

Havuz veya oturum için yapılandırma ayarlandıktan sonra, tüm Spark yazma desenleri işlevselliği kullanır.

Düşük Karışık Birleştirme iyileştirmesini kullanmak için aşağıdaki yapılandırmayı kullanarak etkinleştirin:

  1. Scala ve PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "true")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = true

Geçerli yapılandırma değerini denetlemek için aşağıda gösterildiği gibi komutunu kullanın:

  1. Scala ve PySpark
spark.conf.get("spark.microsoft.delta.merge.lowShuffle.enabled")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled`

Özelliği devre dışı bırakmak için aşağıdaki yapılandırmayı aşağıda gösterildiği gibi değiştirin:

  1. Scala ve PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "false")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false