Pengoptimalan tabel Delta Lake dan V-Order

Format tabel Lakehouse dan Delta Lake adalah pusat dari 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.

Penting

Microsoft Fabric saat ini dalam PRATINJAU. Informasi ini berkaitan dengan produk prarilis yang mungkin dimodifikasi secara substansial sebelum dirilis. Microsoft tidak memberikan jaminan, dinyatakan atau tersirat, sehubungan dengan informasi yang diberikan di sini.

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 Microsoft Verti-Scan dan file parket yang dipesan V untuk mencapai waktu akses data seperti dalam memori. Spark dan mesin komputasi non-Verti-Scan lainnya juga mendapat manfaat dari file yang Dipesan V dengan rata-rata waktu baca 10% 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 biaya dan performa. Pengurutan V-Order memiliki dampak 15% pada waktu penulisan rata-rata tetapi memberikan kompresi hingga 50% lebih banyak.

Format parkek sumber terbuka 100% sesuai; 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 pada kontrol V-Order pada partisinya.

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

Mengontrol penulisan V-Order

V-Order diaktifkan secara default di Microsoft Fabric dan di Apache Spark dikendalikan oleh konfigurasi berikut

Konfigurasi Nilai default Deskripsi
spark.sql.parquet.vorder.enabled TRUE Mengontrol penulisan V-Order tingkat sesi.
TBLPROPERTIES("delta.parquet.vorder.enabled") salah Mode V-Order default pada tabel
Opsi penulis dataframe: parquet.vorder.enabled tidak disetel Mengontrol penulisan V-Order menggunakan penulis Dataframe

Gunakan perintah berikut untuk mengontrol penggunaan penulisan V-Order.

Periksa konfigurasi V-Order di sesi Apache Spark

%%sql 
GET spark.sql.parquet.vorder.enabled 

Menonaktifkan penulisan V-Order dalam sesi Apache Spark

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

Mengaktifkan penulisan V-Order dalam sesi Apache Spark

Penting

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

%%sql 
SET spark.sql.parquet.vorder.enabled=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.enabled","true");

Penting

Ketika properti tabel diatur ke true; Perintah INSERT, UPDATE, dan MERGE akan berkinerja seperti yang diharapkan dan dilakukan. Jika konfigurasi sesi V-Order diatur ke true atau spark.write mengaktifkannya, 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.enabled","true");

ALTER TABLE person SET TBLPROPERTIES("delta. parquet.vorder.enabled","false");

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

Setelah Anda mengaktifkan atau menonaktifkan V-Order menggunakan properti tabel, hanya penulisan mendatang ke tabel yang terpengaruh. File parket 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.

Mengontrol V-Order secara langsung pada operasi tulis

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

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 menerapkan file yang terpengaruh oleh predikat.

Dalam sesi di mana spark.sql.parquet.vorder.enabled 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.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()

Apa itu Optimized 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. Beban kerja penyerapan ke dalam tabel data lake mungkin memiliki karakteristik yang diwariskan dari menulis banyak file kecil secara terus-menerus; 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 dari 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 Optimalkan skenario penggunaan Tulis, baca artikel Kebutuhan untuk mengoptimalkan penulisan di Apache Spark

Pengoptimalan 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 pengoptimalan Low Shuffle Merge kustom, baris yang tidak dimodifikasi dikecualikan dari operasi pengacakan mahal yang diperlukan untuk memperbarui baris yang cocok.

Implementasi dikendalikan 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 menurup karena alasan berikut:

  • Data baru yang ditambahkan ke tabel mungkin menyimpangkan data
  • Tingkat penyerapan data batch dan streaming mungkin membawa banyak file kecil
  • Operasi pembaruan dan penghapusan akhirnya membuat overhead baca; File parket tidak dapat diubah berdasarkan desain, sehingga tabel Delta menambahkan file parket baru yang set perubahannya, semakin memperkuat masalah yang diberlakukan oleh dua item pertama.
  • Tidak lagi diperlukan file data dan file log yang tersedia di penyimpanan.

Untuk menjaga tabel tetap pada status terbaik untuk performa terbaik, lakukan operasi pemadatan bin dan vakum dalam tabel Delta. Pemadatan bin dicapai oleh perintah OPTIMIZE ; ini menggabungkan semua perubahan menjadi file parket yang lebih besar dan terkonsolidasi. Pembersihan penyimpanan dereferensi dicapai oleh perintah VACUUM .

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 V-Order 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 memampatkan dan menulis ulang semua file yang terpengaruh menggunakan pengaturan TBLPROPERTIES. Jika TBLPROPERTIES diatur true ke V-Order, semua file yang terpengaruh ditulis sebagai V-Order. Jika TBLPROPERTIES tidak diatur atau diatur ke false ke V-Order, TBLPROPERTIES mewarisi pengaturan sesi; jadi untuk menghapus V-Order dari tabel, atur konfigurasi sesi ke false.

%%sql 
OPTIMIZE <table|fileOrFolderPath>;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate;

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

Langkah berikutnya