Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
File tabel Delta menjadi terfragmentasi dari waktu ke waktu. Fragmentasi meningkatkan overhead operasi file, mengurangi efisiensi kompresi, dan dapat membatasi paralelisme pembaca. Pemadatan mengubah banyak file kecil menjadi lebih sedikit file dengan ukuran tepat sehingga Spark dapat membaca dan memproses data secara lebih efisien.
Perintah OPTIMIZE adalah operasi pemadatan utama. Ini mengelompokkan file kecil ke dalam bin yang menargetkan ukuran file yang ideal, lalu menulis ulang file tersebut untuk storage.
Untuk panduan lintas beban kerja tentang strategi pemadatan di endpoint analitik SQL, Power BI Direct Lake, dan Spark, lihat Pemeliharaan dan pengoptimalan tabel lintas beban kerja.
Metode pemadatan
Fabric menawarkan beberapa pendekatan untuk menjaga ukuran file yang optimal di tabel Delta:
perintah OPTIMIZE
Perintah OPTIMIZE adalah operasi dasar untuk memampatkan tabel Delta. Ini menulis ulang file kecil menjadi file yang lebih besar untuk meningkatkan tata letak data dalam tabel Delta.
| Harta benda | Description | Nilai standar | Konfigurasi sesi |
|---|---|---|---|
| minFileSize | File yang lebih kecil dari ambang batas ini dikelompokkan bersama dan ditulis ulang sebagai file yang lebih besar. | 1073741824 (1 GB) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Ukuran file target yang dihasilkan oleh perintah OPTIMIZE. |
1073741824 (1 GB) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE adalah idempoten, tetapi minFileSize yang terlalu besar dapat meningkatkan amplifikasi tulis. Misalnya, dengan minFileSize diatur ke 1 GB, file 900 MB mungkin ditulis ulang setelah penulisan tambahan kecil. Untuk panduan manajemen ukuran file otomatis, lihat ukuran file target adaptif.
OPTIMIZE dengan Z-Order
Saat Anda menggunakan ZORDER BY klausa, OPTIMIZE tulis ulang file aktif sehingga baris dengan nilai serupa dikolokasikan dalam file yang sama. Tata letak terkolokasi meningkatkan kemampuan untuk melewati file pada filter selektif. Gunakan Z-Order saat:
- Kueri Anda sering memfilter dua kolom atau lebih bersama-sama (misalnya, tanggal + customer_id), dan
- Predikat tersebut cukup selektif sehingga lompati tingkat file mengurangi jumlah file yang dipindai.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)
OPTIMIZE dengan urutan berbentuk V
Klausa VORDER mengakibatkan berkas yang dicakup untuk pemadatan diterapkan optimasi urutan V. Untuk informasi lebih lanjut tentang urutan V, lihat dokumentasi terperinci.
OPTIMIZE dbo.table_name VORDER
Anda dapat menggabungkan Z-Order dan V-order dalam satu perintah. Spark menerapkan operasi dalam urutan ini: pemadatan bin → Z-Order → V-order.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
Perilaku urutan V selama proses OPTIMIZE tergantung pada bagaimana Anda memanggil perintah tersebut:
| Doa | Behavior |
|---|---|
OPTIMIZE table VORDER |
Memaksa urutan V pada file yang ditulis ulang, terlepas dari pengaturan sesi atau tabel. |
OPTIMIZE table (tidak ada VORDER kata kunci) |
Mewarisi perilaku urutan-V dari TBLPROPERTIES("delta.parquet.vorder.enabled") jika disetel; jika tidak, menggunakan konfigurasi sesi spark.sql.parquet.vorder.default. |
OPTIMIZE dengan klasterisasi cair
Pengklusteran cairan ditentukan sebagai opsi tabel; lihat mengaktifkan pengklusteran cairan untuk detailnya. Ketika pengklusteran cair diaktifkan, OPTIMIZE lakukan penulisan ulang fisik yang menerapkan kebijakan pengklusteran.
Penting
Data hanya diklusterkan ketika OPTIMIZE dijalankan pada tabel yang diaktifkan berkluster cair. Operasi tulis reguler TIDAK mengklusterkan data. Memiliki strategi pemadatan seperti menggunakan pemadatan otomatis atau menjadwalkan pekerjaan pengoptimalan secara manual sangat penting untuk memastikan bahwa manfaat data berkluster (yaitu, peningkatan lompatan file Delta) dapat diwujudkan.
OPTIMIZE FULL
Standard OPTIMIZE tidak mengelompokkan ulang file yang sudah dianggap berkluster. Saat Anda mengubah kunci pengklusteran atau penyedia pengklusteran, file yang ada mempertahankan tata letak pengelompokan sebelumnya, sehingga kueri baru tidak mendapat manfaat dari strategi yang diperbarui.
OPTIMIZE FULL memaksa proses pengelompokan ulang pada seluruh tabel. Ini mengelompokkan ulang setiap file—termasuk file yang sebelumnya dikelompokkan dengan kunci yang berbeda atau penyedia yang berbeda—sehingga seluruh tabel mencerminkan strategi pengelompokan terbaru.
Nota
OPTIMIZE FULLtersedia mulai runtime Fabric Spark 2.0 (Delta 4.2).
Gunakan OPTIMIZE FULL saat Anda:
- Ubah kolom pengelompokan pada tabel berkluster cair.
- Migrasikan tabel antar platform atau penyedia pengelompokan.
OPTIMIZE dbo.table_name FULL
Karena OPTIMIZE FULL dapat menulis ulang sebagian besar atau semua tabel besar, itu bisa jauh lebih mahal daripada inkremental reguler OPTIMIZE. Jalankan dengan sengaja, biasanya sekali setelah Anda mengubah strategi pengelompokan, bukan sebagai bagian dari pemeliharaan rutin.
Pengoptimalan cepat
Pengoptimalan cepat secara cerdas menganalisis file tabel Delta dan melewati operasi pemadatan yang tidak memungkinkan peningkatan performa secara signifikan.
Alih-alih memadatkan file secara membabi buta setiap kali ada file kecil, pengoptimalan cepat mengevaluasi apakah setiap bin kandidat (sekelompok file kecil) memenuhi tujuan pemadatan praktik terbaik yang dapat dikonfigurasi. Fast Optimize hanya menjalankan pemadatan pada bin file jika menggabungkannya kemungkinan akan mencapai ukuran target minimum Anda atau jika ada terlalu banyak file kecil. Jika tidak, sistem akan melewati grup tersebut atau mengurangi jumlah file yang diperpadatkannya.
Pengoptimalan cepat dapat disempurnakan berdasarkan ekspektasi pemadatan Anda:
| Harta benda | Description | Nilai standar | Konfigurasi sesi |
|---|---|---|---|
| minNumFiles | Jumlah file kecil yang perlu ada dalam bin agar dapat dioptimalkan jika bin tersebut tidak berisi cukup data yang diperkirakan menghasilkan file yang dipadukan. | 50 | spark.microsoft.delta.optimize.fast.minNumFiles |
| parquetCoefficient | Dikalikan dengan ukuran file minimum dalam konteks yang dioptimalkan untuk menentukan jumlah minimum data dari file-file kecil yang harus ada dalam bin agar bin disertakan dalam cakupan pemadatan. | 1.3 | spark.microsoft.delta.optimize.fast.parquetCoefficient |
Nota
Hasilnya parquetCoefficient dalam ukuran target bin menjadi lebih besar dari ukuran file target minimum dari konteks pengoptimalan. Koefisien ini memperkirakan realitas bahwa menggabungkan beberapa file parket kecil menghasilkan kompresi yang lebih baik, dan dengan demikian lebih sedikit data daripada jumlah file kecil. Tingkatkan nilai agar lebih konservatif dalam menentukan seberapa sering pengoptimalan cepat melewati bin, atau turunkan nilai untuk memungkinkan pelompatan bin yang lebih permisif.
Cara kerjanya
Pengoptimalan cepat memperkenalkan pemeriksaan tambahan sebelum wadah dipadatkan. Untuk setiap bin kandidat, evaluasi pengoptimalan cepat:
- Estimasi jumlah data mentah dalam bin (penjumlahan ukuran file kecil)
- Apakah menggabungkan file kecil diperkirakan menghasilkan file yang memenuhi ukuran target minimum yang dikonfigurasi
- Apakah bin berisi setidaknya jumlah minimum file kecil yang dikonfigurasi
Pengoptimalan cepat mengevaluasi setiap bin file kecil dan hanya memampatkan bin yang mungkin mencapai ukuran target minimum atau melebihi jumlah file minimum. Bin yang tidak memenuhi ambang batas ini akan dilewati atau dikompaksi sebagian. Melompati bin suboptimal mengurangi penulisan ulang yang tidak perlu, menurunkan amplifikasi penulisan, dan membuat pekerjaan OPTIMIZE lebih idempoten.
Nota
Implementasi yang tepat tunduk pada berkembang dari waktu ke waktu.
Pengoptimalan cepat dapat mengurangi data yang ditulis ulang melalui siklus hidup tabel Delta. Seperti yang ditunjukkan pada diagram berikut, pengoptimalan cepat melewati bin suboptimal, menghasilkan pekerjaan yang lebih cepat dan lebih idempoten OPTIMIZE dengan amplifikasi tulis yang lebih sedikit.
Nota
Hanya untuk tujuan ilustrasi, diagram di atas mengasumsikan bahwa ukuran file yang ditulis dari proses pengompakan adalah jumlah dari ukuran file-file kecil. Ini juga menyiratkan sebuah parquetCoefficient dengan nilai 1.
Keterbatasan
- Tidak berlaku untuk pengklusteran cair dan operasi Z-Order
- Pengoptimalan cepat tidak mengubah perilaku pemadatan otomatis
Sasaran pemadatan tingkat file
Untuk menghindari penulisan ulang data yang sebelumnya dianggap ringkas (cukup besar) berdasarkan perubahan pemadatan min dan target ukuran file maks, spark.microsoft.delta.optimize.fileLevelTarget.enabled dapat diaktifkan untuk mencegah kompaksi ulang file yang sudah dikompresi. Saat diaktifkan, file tidak dikompresi ulang jika sebelumnya memenuhi setidaknya setengah ukuran file target pada saat pemadatan. Mempertahankan target pada tingkat file meminimalkan amplifikasi penulisan saat ukuran sasaran pemadatan berubah dari waktu ke waktu (misalnya, dari ukuran sasaran file adaptif yang menilai dan menetapkan ukuran sasaran yang lebih besar). Jika diaktifkan, tag OPTIMIZE_TARGET_SIZE ditambahkan ke file baru saat OPTIMIZE dijalankan atau untuk operasi tulis apa pun jika properti tabel delta.targetFileSize atau delta.targetFileSize.adaptive diatur.
Nota
Meskipun tidak diaktifkan secara default, Microsoft merekomendasikan untuk mengaktifkan target pemadatan tingkat file untuk membatasi potensi amplifikasi tulis.
Pemadatan otomatis
Pemadatan otomatis mengevaluasi kesehatan partisi setelah setiap operasi tulis. Ketika mendeteksi fragmentasi file yang berlebihan (terlalu banyak file kecil) dalam partisi, itu memicu operasi sinkron OPTIMIZE segera setelah penulisan dilakukan. Pendekatan berbasis penulis untuk pemeliharaan file ini optimal karena pemadatan hanya dijalankan ketika secara terprogram ditentukan untuk bermanfaat.
Aktifkan pada tingkat sesi
Atur spark.databricks.delta.autoCompact.enabled pada tingkat sesi untuk mengaktifkan pemadatan otomatis untuk tabel baru yang dibuat dalam sesi Spark tersebut:
Aktifkan pada tingkat tabel
Atur properti delta.autoOptimize.autoCompact tabel untuk mengaktifkan pemadatan otomatis untuk tabel tertentu:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Gunakan opsi delta.autoOptimize.autoCompact DataFrameWriter untuk mengaktifkan pemadatan otomatis saat membuat tabel:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Aktifkan properti tabel yang sama pada tabel yang sudah ada:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Kurangi overhead evaluasi
Mulai dari runtime Fabric Spark 2.0 (Delta 4.2), Anda dapat mengaktifkan onCheckpointOnly mode pemadatan otomatis. Secara default, pemadatan otomatis mengevaluasi metadata file setelah setiap operasi tulis untuk menentukan apakah tabel memiliki terlalu banyak file kecil. Dengan onCheckpointOnly, evaluasi ditunda hingga operasi pemeriksaan titik log dilakukan (biasanya setiap 10 komit). Pada waktu titik pemeriksaan, rekam jepret tabel sudah sepenuhnya direkonstruksi, sehingga evaluasi membaca dari metadata yang sudah ada dalam memori daripada memerlukan pemindaian tambahan. Evaluasi tertunda mengurangi beban tambahan per commit, namun tetap memastikan tabel dipadatkan secara berkala.