Bagikan melalui


Mengonfigurasi Delta Lake untuk mengontrol ukuran file data

Catatan

Rekomendasi dalam artikel ini tidak berlaku untuk tabel terkelola Katalog Unity. Databricks merekomendasikan penggunaan tabel terkelola Unity Catalog dengan pengaturan default untuk semua tabel Delta baru.

Di Databricks Runtime 13.3 ke atas, Databricks merekomendasikan penggunaan pengklusteran untuk tata letak tabel Delta. Lihat Gunakan pengklusteran cair untuk tabel Delta.

Databricks merekomendasikan penggunaan pengoptimalan prediktif untuk menjalankan OPTIMIZE dan VACUUM untuk tabel Delta secara otomatis. Lihat Pengoptimalan prediktif untuk Delta Lake.

Dalam Databricks Runtime 10.4 LTS ke atas, pemadatan otomatis dan penulisan yang dioptimalkan selalu diaktifkan untuk MERGEoperasi , UPDATE, dan DELETE . Anda tidak dapat menonaktifkan fungsionalitas ini.

Delta Lake menyediakan opsi untuk mengonfigurasi ukuran file target secara manual atau otomatis untuk menulis dan untuk OPTIMIZE operasi. Azure Databricks secara otomatis menyetel banyak pengaturan ini, dan memungkinkan fitur yang secara otomatis meningkatkan performa tabel dengan mencari file dengan ukuran yang tepat.

Untuk tabel terkelola Unity Catalog, Databricks menyetel sebagian besar konfigurasi ini secara otomatis jika Anda menggunakan gudang SQL atau Databricks Runtime 11.3 LTS atau lebih tinggi.

Jika Anda meningkatkan beban kerja dari Databricks Runtime 10.4 LTS atau di bawah ini, lihat Meningkatkan ke pemadatan otomatis latar belakang.

Kapan harus dijalankan OPTIMIZE

Pemadatan otomatis dan penulisan yang dioptimalkan masing-masing mengurangi masalah file kecil, tetapi bukan pengganti penuh untuk OPTIMIZE. Khusus untuk tabel yang lebih besar dari 1 TB, Databricks merekomendasikan untuk berjalan OPTIMIZE sesuai jadwal untuk mengonsolidasikan file lebih lanjut. Azure Databricks tidak berjalan ZORDER secara otomatis pada tabel, jadi Anda harus menjalankannya OPTIMIZE ZORDER untuk mengaktifkan lompati data yang ditingkatkan. Lihat Melewatkan data untuk Delta Lake.

Apa itu pengoptimalan otomatis pada Azure Databricks?

Istilah pengoptimalan otomatis terkadang digunakan untuk menjelaskan fungsionalitas yang dikontrol oleh pengaturan delta.autoOptimize.autoCompact dan delta.autoOptimize.optimizeWrite. Istilah ini telah dihentikan demi menjelaskan setiap pengaturan satu per satu. Lihat Pemadatan otomatis untuk Delta Lake di Azure Databricks dan Penulisan yang dioptimalkan untuk Delta Lake di Azure Databricks.

Pemadatan otomatis untuk Delta Lake di Azure Databricks

Pemadatan otomatis menggabungkan file kecil dalam partisi tabel Delta untuk secara otomatis mengurangi masalah file kecil. Pemadatan otomatis terjadi setelah penulisan ke tabel berhasil dan berjalan secara sinkron pada kluster yang telah melakukan penulisan. Pemadatan otomatis hanya memampatkan file yang belum dikompresi sebelumnya.

Anda dapat mengontrol ukuran file output dengan mengatur konfigurasi spark.databricks.delta.autoCompact.maxFileSizeSpark . Databricks merekomendasikan penggunaan penyetelan otomatis berdasarkan beban kerja atau ukuran tabel. Lihat Ukuran file Autotune berdasarkan beban kerja dan ukuran file Autotune berdasarkan ukuran tabel.

Pemadatan otomatis hanya dipicu untuk partisi atau tabel yang memiliki setidaknya sejumlah file kecil tertentu. Anda dapat secara opsional mengubah jumlah minimum file yang diperlukan untuk memicu pemadatan otomatis dengan mengatur spark.databricks.delta.autoCompact.minNumFiles.

Pemadatan otomatis dapat diaktifkan pada tingkat tabel atau sesi menggunakan pengaturan berikut:

  • Properti tabel: delta.autoOptimize.autoCompact
  • Pengaturan SparkSession: spark.databricks.delta.autoCompact.enabled

Pengaturan ini menerima opsi berikut:

Opsi Perilaku
auto (disarankan) Menyetel ukuran file target sambil menghormati fungsionalitas penyetelan otomatis lainnya. Memerlukan Databricks Runtime 10.4 LTS atau lebih tinggi.
legacy Alias untuk true. Memerlukan Databricks Runtime 10.4 LTS atau lebih tinggi.
true Gunakan 128 MB sebagai ukuran file target. Tidak ada ukuran dinamis.
false Menonaktifkan pemadatan otomatis. Dapat diatur pada tingkat sesi untuk mengambil alih pemadatan otomatis untuk semua tabel Delta yang dimodifikasi dalam beban kerja.

Penting

Dalam Databricks Runtime 9.1 LTS, ketika penulis lain melakukan operasi seperti DELETE, , MERGEUPDATE, atau OPTIMIZE secara bersamaan, pemadatan otomatis dapat menyebabkan pekerjaan lain gagal dengan konflik transaksi. Ini bukan masalah dalam Databricks Runtime 10.4 LTS ke atas.

Penulisan yang dioptimalkan untuk Delta Lake di Azure Databricks

Penulisan yang dioptimalkan meningkatkan ukuran file saat data ditulis dan mendapat manfaat bacaan berikutnya pada tabel.

Penulisan yang dioptimalkan paling efektif untuk tabel yang dipartisi, karena mengurangi jumlah file kecil yang ditulis ke setiap partisi. Menulis lebih sedikit file besar lebih efisien daripada menulis banyak file kecil, tetapi Anda mungkin masih melihat peningkatan latensi tulis karena data diacak sebelum ditulis.

Gambar berikut menunjukkan cara kerja penulisan yang dioptimalkan:

Penulisan yang dioptimalkan

Catatan

Anda mungkin memiliki kode yang berjalan coalesce(n) atau repartition(n) tepat sebelum menulis data Anda untuk mengontrol jumlah file yang ditulis. Penulisan yang dioptimalkan menghilangkan kebutuhan untuk menggunakan pola ini.

Penulisan yang dioptimalkan diaktifkan secara default untuk operasi berikut di Databricks Runtime 9.1 LTS ke atas:

  • MERGE
  • UPDATE dengan subkueri
  • DELETE dengan subkueri

Penulisan yang dioptimalkan juga diaktifkan untuk CTAS pernyataan dan INSERT operasi saat menggunakan gudang SQL. Dalam Databricks Runtime 13.3 LTS ke atas, semua tabel Delta yang terdaftar di Unity Catalog telah mengoptimalkan penulisan yang diaktifkan untuk CTAS pernyataan dan INSERT operasi untuk tabel yang dipartisi.

Penulisan yang dioptimalkan dapat diaktifkan pada tingkat tabel atau sesi menggunakan pengaturan berikut:

  • Pengaturan tabel: delta.autoOptimize.optimizeWrite
  • Pengaturan SparkSession: spark.databricks.delta.optimizeWrite.enabled

Pengaturan ini menerima opsi berikut:

Opsi Perilaku
true Gunakan 128 MB sebagai ukuran file target.
false Menonaktifkan penulisan yang dioptimalkan. Dapat diatur pada tingkat sesi untuk mengambil alih pemadatan otomatis untuk semua tabel Delta yang dimodifikasi dalam beban kerja.

Mengatur ukuran file target

Jika Anda ingin menyetel ukuran file dalam tabel Delta Anda, atur properti delta.targetFileSize tabel ke ukuran yang diinginkan. Jika properti ini diatur, semua operasi optimalisasi tata letak data akan melakukan upaya terbaik untuk menghasilkan file dengan ukuran tertentu. Contoh di sini termasuk pengoptimalan atau urutan Z, pemadatan otomatis, dan penulisan yang dioptimalkan.

Catatan

Saat menggunakan tabel terkelola Unity Catalog dan gudang SQL atau Databricks Runtime 11.3 LTS ke atas, hanya OPTIMIZE perintah yang targetFileSize menghormati pengaturan.

Properti tabel
delta.targetFileSize

Jenis: Ukuran dalam byte atau unit yang lebih tinggi.

Ukuran file target. Misalnya, 104857600 (byte) atau 100mb.

Nilai default: None

Untuk tabel yang ada, Anda dapat mengatur dan membatalkan pengaturan properti menggunakan perintah SQL ALTER TABLE SET TBL PROPERTIES. Anda juga dapat mengatur properti ini secara otomatis saat membuat tabel baru menggunakan konfigurasi sesi Spark. Lihat Referensi properti tabel Delta untuk detailnya.

Menyetel otomatis ukuran file berdasarkan beban kerja

Databricks merekomendasikan pengaturan properti delta.tuneFileSizesForRewrites tabel ke true untuk semua tabel yang ditargetkan oleh banyak MERGE atau operasi DML, terlepas dari Databricks Runtime, Unity Catalog, atau pengoptimalan lainnya. Ketika diatur ke true, ukuran file target untuk tabel diatur ke ambang batas yang jauh lebih rendah, yang mempercepat operasi tulis intensif.

Jika tidak diatur secara eksplisit, Azure Databricks secara otomatis mendeteksi apakah 9 dari 10 operasi terakhir sebelumnya pada tabel Delta adalah MERGE operasi dan mengatur properti tabel ini ke true. Anda harus secara eksplisit mengatur properti ini untuk false menghindari perilaku ini.

Properti tabel
delta.tuneFileSizesForRewrites

Jenis: Boolean

Apakah akan menyetel ukuran file untuk pengoptimalan tata letak data.

Nilai default: None

Untuk tabel yang ada, Anda dapat mengatur dan membatalkan pengaturan properti menggunakan perintah SQL ALTER TABLE SET TBL PROPERTIES. Anda juga dapat mengatur properti ini secara otomatis saat membuat tabel baru menggunakan konfigurasi sesi Spark. Lihat Referensi properti tabel Delta untuk detailnya.

Menyetel otomatis ukuran file berdasarkan ukuran tabel

Untuk meminimalkan kebutuhan untuk penyetelan manual, Azure Databricks secara otomatis menyetel ukuran file tabel Delta berdasarkan ukuran tabel. Azure Databricks akan menggunakan ukuran file yang lebih kecil untuk tabel yang lebih kecil dan ukuran file yang lebih besar untuk tabel yang lebih besar sehingga jumlah file dalam tabel tidak tumbuh terlalu besar. Azure Databricks tidak menyesuaikan tabel secara otomatis yang telah Anda disetel dengan ukuran target tertentu atau berdasarkan beban kerja dengan penulisan ulang yang sering.

Ukuran file target berdasarkan pada ukuran tabel Delta saat ini. Untuk tabel yang lebih kecil dari 2,56 TB, ukuran file target yang diatur otomatis adalah 256 MB. Untuk tabel dengan ukuran antara 2,56 TB serta 10 TB, ukuran target akan tumbuh secara linier dari 256 MB menjadi 1 GB. Untuk tabel yang lebih besar dari 10 TB, ukuran file target adalah sebesar 1 GB.

Catatan

Ketika ukuran file target untuk tabel tumbuh, file yang ada tidak dioptimalkan kembali menjadi file yang lebih besar oleh perintah OPTIMIZE. Oleh karena itu, tabel besar selalu dapat memiliki beberapa file yang lebih kecil dari ukuran target. Jika diperlukan untuk mengoptimalkan file yang lebih kecil menjadi file yang lebih besar juga, Anda dapat mengonfigurasi ukuran file target tetap untuk tabel menggunakan properti tabel delta.targetFileSize.

Ketika tabel ditulis secara bertahap, ukuran file target serta jumlah file akan menjadi kurang lebih seperti berikut berdasarkan ukuran tabel. Jumlah file dalam tabel ini hanyalah sebuah contoh. Hasil aktual akan berbeda tergantung pada banyak faktor.

Ukuran tabel Ukuran file target Perkiraan jumlah file dalam tabel
10 GB 256 MB 40
1 TB 256 MB 4096
2,56 TB 256 MB 10240
3 TB 307 MB 12108
5 TB 512 MB 17339
7 TB 716 MB 20784
10 TB 1 GB 24437
20 TB 1 GB 34437
50 TB 1 GB 64437
100 TB 1 GB 114437

Membatasi baris yang ditulis dalam file data

Terkadang, tabel dengan data sempit mungkin mengalami kesalahan di mana jumlah baris dalam file data tertentu melebihi batas dukungan format Parquet. Untuk menghindari kesalahan ini, Anda dapat menggunakan konfigurasi spark.sql.files.maxRecordsPerFile sesi SQL untuk menentukan jumlah maksimum rekaman yang akan ditulis ke satu file untuk tabel Delta Lake. Menentukan nilai nol atau nilai negatif tidak menunjukkan batas.

Di Databricks Runtime 11.3 LTS ke atas, Anda juga dapat menggunakan opsi maxRecordsPerFile DataFrameWriter saat menggunakan API DataFrame untuk menulis ke tabel Delta Lake. Ketika maxRecordsPerFile ditentukan, nilai konfigurasi sesi SQL spark.sql.files.maxRecordsPerFile diabaikan.

Catatan

Databricks tidak merekomendasikan penggunaan opsi ini kecuali perlu untuk menghindari kesalahan yang disebutkan di atas. Pengaturan ini mungkin masih diperlukan untuk beberapa tabel terkelola Unity Catalog dengan data yang sangat sempit.

Tingkatkan ke pemadatan otomatis latar belakang

Pemadatan otomatis latar belakang tersedia untuk tabel terkelola Unity Catalog di Databricks Runtime 11.3 LTS ke atas. Saat memigrasikan beban kerja atau tabel warisan, lakukan hal berikut:

  • Hapus konfigurasi spark.databricks.delta.autoCompact.enabled Spark dari pengaturan konfigurasi kluster atau buku catatan.
  • Untuk setiap tabel, jalankan ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact) untuk menghapus pengaturan pemadatan otomatis warisan.

Setelah menghapus konfigurasi warisan ini, Anda akan melihat pemadatan otomatis latar belakang yang dipicu secara otomatis untuk semua tabel terkelola Katalog Unity.