Pengoptimalan Penggabungan Acak Rendah pada tabel Delta

Perintah Delta Lake MERGE memungkinkan pengguna memperbarui tabel delta dengan kondisi tingkat lanjut. Ini dapat memperbarui data dari tabel sumber, tampilan, atau DataFrame ke dalam tabel target dengan menggunakan perintah MERGE. Namun, algoritma saat ini tidak sepenuhnya dioptimalkan untuk menangani baris yang tidak dimodifikasi . Dengan pengoptimalan Penggabungan Acak Rendah, baris yang tidak dimodifikasi dikecualikan dari operasi pengacakan mahal yang diperlukan untuk memperbarui baris yang cocok.

Mengapa kita membutuhkan Penggabungan Acak Rendah

Saat ini operasi MERGE dilakukan oleh dua eksekusi Join. Gabungan pertama menggunakan seluruh tabel target dan data sumber, untuk menemukan daftar file tersentuh tabel target termasuk baris yang cocok. Setelah itu, ia melakukan gabungan kedua hanya membaca file dan data sumber yang disentuh , untuk melakukan pembaruan tabel aktual. Meskipun gabungan pertama adalah mengurangi jumlah data untuk gabungan kedua, mungkin masih ada sejumlah besar baris yang tidak dimodifikasi dalam file yang disentuh. Kueri gabungan pertama lebih ringan karena hanya membaca kolom dalam kondisi pencocokan yang diberikan. Yang kedua untuk pembaruan tabel perlu memuat semua kolom, yang menimbulkan proses pengacakan yang mahal.

Dengan pengoptimalan Penggabungan Acak Rendah, Delta menyimpan hasil baris yang cocok dari gabungan pertama untuk sementara dan menggunakannya untuk gabungan kedua. Berdasarkan hasilnya, itu mengecualikan baris yang tidak dimodifikasi dari proses pengacakan berat. Akan ada dua pekerjaan tulis terpisah untuk baris yang cocok dan baris yang tidak dimodifikasi , sehingga dapat mengakibatkan jumlah 2x file output dibandingkan dengan perilaku sebelumnya. Namun, perolehan performa yang diharapkan melebihi kemungkinan masalah file kecil.

Ketersediaan

Catatan

  • Penggabungan Acak Rendah tersedia sebagai fitur Pratinjau.

Ini tersedia di Kumpulan Synapse untuk Apache Spark versi 3.2 dan 3.3.

Versi Ketersediaan Default
Delta 0.6 / Spark 2.4 Tidak -
Delta 1.2 / Spark 3.2 Ya salah
Delta 2.2 / Spark 3.3 Ya benar

Manfaat Penggabungan Acak Rendah

  • Baris yang tidak dimodifikasi dalam file yang disentuh ditangani secara terpisah dan tidak melalui operasi MERGE yang sebenarnya. Ini dapat menghemat waktu eksekusi MERGE secara keseluruhan dan sumber daya komputasi. Perolehan akan lebih besar ketika banyak baris disalin dan hanya beberapa baris yang diperbarui.
  • Urutan baris dipertahankan untuk baris yang tidak dimodifikasi. Oleh karena itu, file output baris yang tidak dimodifikasi mungkin masih efisien untuk melewatkan data jika file diurutkan atau Z-ORDERED.
  • Akan ada overhead kecil bahkan untuk kasus terburuk ketika kondisi MERGE cocok dengan semua baris dalam file yang disentuh.

Cara mengaktifkan dan menonaktifkan Penggabungan Acak Rendah

Setelah konfigurasi diatur untuk kumpulan atau sesi, semua pola penulisan Spark akan menggunakan fungsionalitas tersebut.

Untuk menggunakan pengoptimalan Penggabungan Acak Rendah, aktifkan menggunakan konfigurasi berikut:

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

Untuk memeriksa nilai konfigurasi saat ini, gunakan perintah seperti yang ditunjukkan di bawah ini:

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

Untuk menonaktifkan fitur, ubah konfigurasi berikut seperti yang ditunjukkan di bawah ini:

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