OPTIMIZE

Berlaku untuk:check marked yes Databricks SQL check marked yes Databricks Runtime

Mengoptimalkan tata letak data Delta Lake. Secara opsional mengoptimalkan subkumpulan data atau menyusun data menurut kolom. Jika Anda tidak menentukan kolokasi dan tabel tidak ditentukan dengan pengklusteran cairan, pengoptimalan bin-packing dilakukan.

Sintaksis

OPTIMIZE table_name [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

Catatan

  • Pengoptimalan pengemasan berkelompok bersifat idempoten, sehingga jika pengoptimalan dijalankan dua kali pada himpunan data yang sama, eksekusi kedua tidak berpengaruh. Tindakan ini bertujuan untuk menghasilkan file data sehubungan dengan ukurannya seimbang pada disk, tetapi tidak selalu terhadap jumlah tuple per file. Namun, kedua tindakan tersebut adalah dua tindakan yang paling sering berhubungan.
  • Z-Ordering tidak bersifat idempotent, tetapi bertujuan untuk menjadi operasi yang bertahap. Waktu yang dibutuhkan untuk Z-Ordering tidak dijamin akan berkurang setelah beberapa kali eksekusi. Namun, jika tidak ada data baru yang ditambahkan ke partisi yang baru saja Z-Ordering, Z-Ordering lain dari partisi tersebut tidak akan berpengaruh. Tujuannya adalah untuk menghasilkan file data yang seimbang sehubungan dengan jumlah tuple, tetapi tidak selalu terhadap ukuran data pada disk. Kedua langkah tersebut paling sering berhubungan, tetapi mungkin ada situasi ketika hal tersebut tidak terjadi, sehingga mengarah ke penyimpanan dalam waktu pengoptimalan tugas.

Catatan

Saat menggunakan Databricks Runtime, untuk mengontrol ukuran file output, atur konfigurasispark.databricks.delta.optimize.maxFileSize Spark. Nilai defaultnya adalah 1073741824, yang mengatur ukurannya menjadi 1 GB. Menentukan nilai 104857600 mengatur ukuran file menjadi 100 MB.

Parameter

  • table_name

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

  • WHERE

    Mengoptimalkan subset baris yang cocok dengan predikat partisi yang diberikan. Hanya filter yang melibatkan atribut kunci partisi saja yang didukung.

    Anda tidak dapat menggunakan klausa ini pada tabel yang menggunakan pengklusteran cairan.

  • ZORDER BY

    Kolokasikan informasi kolom dalam kumpulan file yang sama. Lokalitas bersama digunakan oleh algoritma melewatkan data Delta Lake untuk mengurangi jumlah data yang perlu dibaca secara signifikan. Anda dapat menentukan beberapa kolom untuk ZORDER BY sebagai daftar yang dipisahkan koma. Namun, efektivitas lokalitas menurun dengan setiap kolom tambahan.

    Anda tidak dapat menggunakan klausa ini pada tabel yang menggunakan pengklusteran cairan.

Contoh

> OPTIMIZE events;

> OPTIMIZE events WHERE date >= '2017-01-01';

> OPTIMIZE events
    WHERE date >= current_timestamp() - INTERVAL 1 day
    ZORDER BY (eventType);

Untuk informasi selengkapnya tentang OPTIMIZE perintah, lihat Memampatkan file data dengan pengoptimalan di Delta Lake.