Bagikan melalui


Pengoptimalan tabel Delta Lake dan V-Order

Format tabel Lakehouse dan Delta Lake berpusat pada Microsoft Fabric, memastikan bahwa tabel dioptimalkan untuk analitik adalah persyaratan utama. Panduan ini mencakup konsep pengoptimalan tabel Delta Lake, konfigurasi, dan cara menerapkannya ke pola penggunaan Big Data yang paling umum.

Apa itu V-Order?

V-Order adalah pengoptimalan waktu tulis ke format file parket yang memungkinkan pembacaan cepat kilat di bawah mesin komputasi Microsoft Fabric, seperti Power BI, SQL, Spark, dan lainnya.

Mesin Power BI dan SQL menggunakan teknologi Verti-Scan Microsoft dan file parquet dengan pengurutan-V untuk mencapai waktu akses data yang setara dengan akses dalam memori. Spark dan mesin komputasi non-Verti-Scan lainnya juga mendapat manfaat dari file V-Ordered dengan rata-rata 10% waktu baca yang lebih cepat, dengan beberapa skenario hingga 50%.

V-Order bekerja dengan menerapkan pengurutan khusus, distribusi grup baris, pengodean kamus, dan kompresi pada file parket, sehingga membutuhkan lebih sedikit sumber daya jaringan, disk, dan CPU di mesin komputasi untuk membacanya, memberikan efisiensi dan performa biaya. Pengurutan V-Order memiliki dampak 15% pada waktu penulisan rata-rata tetapi memberikan kompresi hingga 50% lebih banyak.

Ini sesuai dengan format parket sumber terbuka 100%; semua mesin parket dapat membacanya sebagai file parket biasa. Tabel Delta lebih efisien dari sebelumnya; fitur seperti Z-Order kompatibel dengan V-Order. Properti tabel dan perintah pengoptimalan dapat digunakan untuk mengontrol Urutan V partisinya.

V-Order diterapkan pada tingkat file parquet. Tabel delta dan fitur-fiturnya, seperti Z-Order, pemadatan, vakum, perjalanan waktu, dll adalah ortogonal ke V-Order, dengan demikian, kompatibel dan dapat digunakan bersama-sama untuk manfaat tambahan.

Mengontrol penulisan V-Order

V-Order digunakan untuk mengoptimalkan tata letak file parquet agar kueri dapat dijalankan lebih cepat, terutama dalam skenario dengan intensitas pembacaan tinggi. Di Microsoft Fabric, V-Order dimatikan secara default untuk semua ruang kerja yang baru dibuat untuk mengoptimalkan performa beban kerja rekayasa data yang intensif penulisan.

Perilaku V-Order di Apache Spark dikontrol melalui konfigurasi berikut:

Konfigurasi Nilai Bawaan Deskripsi
spark.sql.parquet.vorder.default false Mengontrol penulisan V-Order tingkat sesi. Atur ke false secara default di ruang kerja Fabric baru.
TBLPROPERTIES("delta.parquet.vorder.default") false Mengatur perilaku V-Order default di tingkat tabel.
Opsi penulis DataFrame: parquet.vorder.default Menghapus pengaturan Digunakan untuk mengontrol V-Order pada level proses penulisan.

Gunakan perintah berikut untuk mengaktifkan atau mengambil alih penulisan V-Order sesuai kebutuhan untuk skenario Anda.

⚠️ Penting:
V-Order dinonaktifkan secara default di ruang kerja Fabric baru (spark.sql.parquet.vorder.default=false) untuk meningkatkan performa untuk penyerapan data dan alur transformasi.

Jika beban kerja Anda lebih dominan pada pembacaan—seperti kueri interaktif atau dasbor—Anda dapat mengaktifkan V-Order dengan:

  • Mengatur properti Spark spark.sql.parquet.vorder.default=true
  • Beralih ke profil sumber daya readHeavyforSpark atau ReadHeavy, yang secara otomatis mengaktifkan V-Order untuk performa baca yang lebih baik.

Periksa konfigurasi V-Order dalam sesi Apache Spark

%%sql 
SET spark.sql.parquet.vorder.default 

Menonaktifkan penulisan V-Order dalam sesi Apache Spark

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

Mengaktifkan penulisan V-Order dalam sesi Apache Spark

Penting

Saat diaktifkan di tingkat sesi. Semua penulisan parquet dilakukan dengan V-Order diaktifkan. Ini termasuk tabel parket non-Delta dan tabel Delta dengan properti tabel diatur parquet.vorder.default ke true atau false.

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

Mengontrol V-Order menggunakan properti tabel Delta

Aktifkan properti tabel V-Order selama pembuatan tabel:

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

Penting

Ketika properti tabel diatur ke nilai benar, perintah INSERT, UPDATE, dan MERGE akan berfungsi seperti yang diharapkan dan melakukan pengoptimalan saat penulisan. Jika konfigurasi sesi V-Order diatur ke true atau spark.write memungkinkannya, maka tulisan akan menjadi V-Order bahkan jika TBLPROPERTIES diatur ke false.

Aktifkan atau nonaktifkan V-Order dengan mengubah properti tabel:

%%sql 
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.default" = "true");

ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.default" = "false");

ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.default");

Setelah Anda mengaktifkan atau menonaktifkan V-Order menggunakan properti tabel, hanya penulisan mendatang ke tabel yang terpengaruh. File Parquet menyimpan urutan yang digunakan saat dibuat. Untuk mengubah struktur fisik saat ini untuk menerapkan atau menghapus V-Order, baca bagian "Control V-Order saat mengoptimalkan tabel" di bawah ini.

Mengendalikan V-Order secara langsung pada operasi penulisan

Semua perintah tulis Apache Spark mewarisi pengaturan sesi jika tidak ditentukan dengan jelas. Semua perintah berikut menulis menggunakan V-Order dengan mewarisi konfigurasi sesi secara implisit.

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

Penting

V-Order hanya berlaku untuk file yang terpengaruh oleh predikat.

Dalam sesi di mana spark.sql.parquet.vorder.default tidak diatur atau diatur ke false, perintah berikut akan menulis menggunakan 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.default ","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.default","true")\
  .location("Files/people")\
  .execute()

Apa itu Optimize Write?

Beban kerja analitis pada mesin pemrosesan Big Data seperti Apache Spark bekerja paling efisien saat menggunakan ukuran file lebih besar yang distandarkan. Hubungan antara ukuran file, jumlah file, jumlah pekerja Spark dan konfigurasinya, memainkan peran penting terhadap performa. Memasukkan data ke dalam tabel data lake mungkin memiliki kecenderungan bawaan untuk terus-menerus membuat banyak file kecil; skenario ini umumnya dikenal sebagai "masalah file kecil."

Optimize Write adalah fitur Delta Lake di Microsoft Fabric dan Azure Synapse Analytics di mesin Apache Spark yang mengurangi jumlah file yang ditulis dan bertujuan untuk meningkatkan ukuran file individual data tertulis. Ukuran file target dapat diubah per persyaratan beban kerja menggunakan konfigurasi.

Fitur ini diaktifkan secara default di Microsoft Fabric Runtime untuk Apache Spark. Untuk mempelajari selengkapnya tentang skenario penggunaan Optimize Write, baca artikel Kebutuhan optimalkan penulisan di Apache Spark.

Optimasi Penggabungan

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 dalam distribusi sumber terbuka Delta Lake tidak sepenuhnya dioptimalkan untuk menangani baris yang tidak dimodifikasi. Tim Microsoft Spark Delta menerapkan optimasi "Low Shuffle Merge" khusus, di mana baris yang tidak dimodifikasi dikecualikan dari operasi pengacakan yang mahal yang diperlukan untuk memperbarui baris yang cocok.

Implementasi dikontrol oleh spark.microsoft.delta.merge.lowShuffle.enabled konfigurasi, diaktifkan secara default dalam runtime. Ini tidak memerlukan perubahan kode dan sepenuhnya kompatibel dengan distribusi sumber terbuka Delta Lake. Untuk mempelajari selengkapnya tentang skenario penggunaan Penggabungan Acak Rendah, baca artikel Pengoptimalan Penggabungan Acak Rendah pada tabel Delta.

Pemeliharaan tabel Delta

Saat tabel Delta berubah, performa dan efisiensi biaya penyimpanan cenderung menurun karena beberapa alasan berikut:

  • Data baru yang ditambahkan ke tabel mungkin menyimpang data.
  • Tingkat penyerapan data batch dan streaming mungkin membawa banyak file kecil.
  • Operasi pembaruan dan penghapusan akhirnya menciptakan beban baca; file parquet tidak dapat diubah berdasarkan desain, sehingga tabel Delta menambahkan file parquet baru setiap kali terdapat set perubahan, yang semakin memperburuk masalah yang disebabkan oleh dua item pertama.
  • Tidak lagi diperlukan file data dan file log yang tersedia di penyimpanan.

Untuk menjaga tabel dalam kondisi terbaik demi kinerja optimal, lakukan pemadatan bin dan operasi vakum pada tabel Delta. Pemadatan bin dilakukan dengan perintah OPTIMIZE; ini menggabungkan semua perubahan menjadi file parquet yang lebih besar dan terkonsolidasi. Pembersihan penyimpanan dereferensi dilakukan oleh perintah VACUUM.

Perintah pemeliharaan tabel OPTIMIZE dan VACUUM dapat digunakan dalam notebook dan Definisi Pekerjaan Spark, lalu diorkestrasi menggunakan kemampuan platform. Lakehouse in Fabric menawarkan fungsionalitas untuk menggunakan antarmuka pengguna untuk melakukan pemeliharaan tabel ad-hoc seperti yang dijelaskan dalam artikel pemeliharaan tabel Delta Lake.

Penting

Merancang struktur fisik tabel dengan benar, berdasarkan frekuensi penyerapan dan pola baca yang diharapkan, kemungkinan lebih penting daripada menjalankan perintah pengoptimalan yang dijelaskan di bagian ini.

Mengontrol Urutan V saat mengoptimalkan tabel

Perintah berikut menyusun bin-compact dan menulis ulang semua file yang terpengaruh menggunakan V-Order, terlepas dari pengaturan TBLPROPERTIES atau pengaturan konfigurasi sesi:

%%sql 
OPTIMIZE <table|fileOrFolderPath> VORDER;

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

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

Ketika ZORDER dan VORDER digunakan bersama-sama, Apache Spark melakukan pemadatan bin, ZORDER, VORDER secara berurutan.

Perintah berikut ini bin-compact dan menulis ulang semua file yang terpengaruh menggunakan pengaturan TBLPROPERTIES. Jika TBLPROPERTIES diatur menjadi "true" untuk V-Order, semua file yang terpengaruh dicatat dalam format V-Order. Jika TBLPROPERTIES tidak diatur atau diatur ke false untuk V-Order, ini mewarisi pengaturan sesi yang ada; jadi untuk menghapus V-Order dari tabel tersebut, Anda harus mengatur konfigurasi sesi ke false.

%%sql 
OPTIMIZE <table|fileOrFolderPath>;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate;

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