OPTIMIZE

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya 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

  • table_name

    Mengidentifikasi tabel Delta yang sudah ada. Nama tidak boleh menyertakan spesifikasi temporal atau spesifikasi opsi.

  • FULL

    Berlaku untuk: bertanda centang ya Databricks Runtime 16.0 dan yang lebih baru

    Menulis ulang semua file data dalam tabel. Gunakan OPTIMIZE table_name FULL untuk:

    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 FULL dengan WHERE predikat (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 > 15 menyertakan file dengan rentang (col_min = 10, col_max = 20) karena rentang file tumpang tindih dengan predikat.

  • WHERE

    Mengoptimalkan 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 BY

    Catatan

    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.