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.
Berlaku untuk:
Databricks SQL
Databricks Runtime
Halaman ini menjelaskan OPTIMIZE perintah , yang mengoptimalkan tata letak data Delta Lake. Anda dapat mengoptimalkan subset data atau menyusun data menurut kolom. Jika Anda tidak menentukan kolokasi dan tabel tidak menggunakan pengklusteran cairan, Delta Lake melakukan pengoptimalan pengemasan bin.
Sintaksis
OPTIMIZE table_name [FULL] [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Catatan
Pengoptimalan bin-packing idempotensi: jika Anda menjalankannya dua kali pada himpunan data yang sama, eksekusi kedua tidak berpengaruh. Ini menghasilkan file data yang seimbang secara merata sehubungan dengan ukurannya pada disk, tetapi belum tentu jumlah tuple per file. Dua langkah tersebut paling sering berkorelasi.
Z-Ordering tidak idempotensi, tetapi beroperasi secara bertahap. Waktu yang dibutuhkan Z-Ordering tidak dijamin untuk mengurangi beberapa eksekusi. Namun, jika tidak ada data baru yang ditambahkan ke partisi yang hanya Z-Ordered, menjalankan Z-Ordering lagi pada partisi tersebut tidak berpengaruh. Z-Ordering menghasilkan file data yang seimbang secara merata sehubungan dengan jumlah tuple, tetapi belum tentu ukuran data pada disk. Kedua langkah ini paling sering berkorelasi, tetapi condong dalam mengoptimalkan waktu tugas dapat terjadi ketika mereka menyimpang.
Catatan
Saat menggunakan Databricks Runtime, untuk mengontrol ukuran file output, atur konfigurasi spark.databricks.delta.optimize.maxFileSize. Nilai defaultnya adalah 1073741824 (1 GB). Menentukan 104857600 set ukuran file ke 100 MB.
Parameter
-
Mengidentifikasi tabel Delta yang sudah ada. Nama tidak boleh menyertakan spesifikasi temporal atau spesifikasi opsi.
FULLBerlaku untuk:
Databricks Runtime 16.0 dan yang lebih baruMenulis ulang semua file data dalam tabel. Gunakan
OPTIMIZE table_name FULLuntuk:- Optimalkan seluruh tabel, termasuk data yang sebelumnya diklusterkan (untuk tabel menggunakan pengklusteran cair).
- Kompress ulang file data yang ada saat Anda mengubah codec kompresi tabel menggunakan properti
delta.parquet.compression.codec.
Untuk mengkompresi ulang data yang ada setelah mengubah codec kompresi, jalankan
OPTIMIZE table_name FULL:-- Change compression codec ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD'); -- Recompress all existing data files OPTIMIZE table_name FULL;Untuk mengoptimalkan subset file dalam tabel dengan pengklusteran cair diaktifkan, gabungkan
FULLdenganWHEREpredikat (Databricks Runtime 18.1 ke atas). Hanya predikat rentang sederhana pada satu kolom pengklusteran yang didukung. File disertakan jika ada bagian dari rentangnya yang tumpang tindih dengan predikat . Misalnya,OPTIMIZE events FULL WHERE date > 15menyertakan file dengan rentang(col_min = 10, col_max = 20)karena rentang file tumpang tindih dengan predikat.WHEREMengoptimalkan subset baris yang cocok dengan predikat partisi/pengklusteran. Hanya filter pada atribut kunci partisi/pengklusteran yang didukung.
Untuk tabel yang menggunakan pengklusteran cair, gunakan
OPTIMIZE table_name FULL WHERE predicate(Databricks Runtime 18.1 ke atas) sebagai gantinya.ZORDER BYCatatan
Databricks merekomendasikan pengklusteran cairan untuk semua tabel baru alih-alih pemesanan Z. Lihat Menggunakan pengklusteran cair untuk tabel.
Mengalokasikan informasi kolom dalam kumpulan file yang sama. Algoritma lompati data Delta Lake menggunakan ko-lokalitas untuk mengurangi jumlah data yang perlu dibaca. Anda dapat menentukan beberapa kolom sebagai daftar yang dipisahkan koma, tetapi efektivitas ko-lokalitas berkurang dengan setiap kolom tambahan.
Anda tidak dapat menggunakan klausul ini pada tabel yang menggunakan pengklusteran cairan.
Contoh
> OPTIMIZE events;
> OPTIMIZE events FULL;
> -- Partitioned table
> OPTIMIZE events WHERE date >= '2017-01-01';
> -- Table with liquid clustering enabled (DBR 18.1 and above)
> OPTIMIZE events FULL WHERE date >= '2025-01-01';
> OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType);
Untuk informasi selengkapnya, lihat Mengoptimalkan tata letak file data.