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 tabel terkelola Unity Catalog.
Dalam Databricks Runtime 10.4 LTS ke atas, pemadatan otomatis dan penulisan yang dioptimalkan selalu diaktifkan untuk MERGE
operasi , 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 konfigurasispark.databricks.delta.autoCompact.maxFileSize
Spark . 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
, , MERGE
UPDATE
, 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:
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 propertidelta.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 sudah ada, Anda dapat mengatur dan membatalkan properti menggunakan perintah SQL ALTER TABLESET PROPERTI TBL. 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 sudah ada, Anda dapat mengatur dan membatalkan properti menggunakan perintah SQL ALTER TABLESET PROPERTI TBL. 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.