Ringkas file data dengan pengoptimalan di Delta Lake

Lihat OPTIMALKAN.

Delta Lake pada Azure Databricks dapat meningkatkan kecepatan membaca kueri dari tabel. Salah satu cara untuk meningkatkan kecepatan adalah dengan cara menyatukan file kecil menjadi file yang lebih besar.

Catatan

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 tabel Delta secara otomatis. Lihat Pengoptimalan prediktif untuk Delta Lake.

Contoh sintaks

Anda memicu pemadatan dengan menjalankan perintah OPTIMIZE:

SQL

OPTIMIZE delta.`/data/events`

Python

from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()

atau, secara bergantian:

SQL

OPTIMIZE events

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()

Jika Anda memiliki sejumlah besar data dan hanya ingin mengoptimalkan subsetnya, Anda dapat menentukan predikat partisi opsional menggunakan WHERE:

SQL

OPTIMIZE events WHERE date >= '2022-11-18'

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Catatan

  • Pengoptimalan pengemasan berkelompok bersifat idempoten, sehingga jika pengoptimalan dijalankan dua kali pada himpunan data yang sama, eksekusi kedua tidak berpengaruh.
  • Bin-packing 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.
  • API Python dan Scala untuk mengeksekusi OPTIMIZE operasi tersedia dari Databricks Runtime 11.3 LTS ke atas.

Pembaca tabel Delta menggunakan isolasi snapshot, yang berarti bahwa mereka tidak terganggu ketika OPTIMIZE menghapus file yang tidak perlu dari log transaksi. OPTIMIZE tidak membuat perubahan terkait data pada tabel, jadi pembacaan sebelum dan sesudah OPTIMIZE memiliki hasil yang sama. Menjalankan OPTIMIZE di atas tabel yang merupakan sumber streaming tidak memengaruhi aliran saat ini atau masa mendatang yang memperlakukan tabel ini sebagai sumber. OPTIMIZE mengembalikan statistik file (min, max, total, dan sebagainya) untuk file yang dihapus dan file yang ditambahkan oleh operasi. Optimalkan statistik juga berisi statistik Z-Ordering, jumlah batch, dan partisi yang dioptimalkan.

Anda juga dapat memampatkan file kecil secara otomatis menggunakan pemadatan otomatis. Lihat Pemadatan otomatis untuk Delta Lake di Azure Databricks.

Seberapa sering saya harus menjalankan OPTIMIZE?

Ketika Anda memilih seberapa sering untuk menjalankan OPTIMIZE, ada konsekuensi antara kinerja dan biaya. Untuk performa kueri pengguna akhir yang lebih baik, jalankan OPTIMIZE lebih sering. Ini akan dikenakan biaya yang lebih tinggi karena peningkatan penggunaan sumber daya. Untuk mengoptimalkan biaya, jalankan lebih jarang.

Databricks merekomendasikan agar Anda mulai dengan menjalankan OPTIMIZE setiap hari, lalu menyesuaikan frekuensi untuk menyeimbangkan biaya dan trade-off performa.

Apa jenis instans terbaik untuk dijalankan OPTIMIZE (bin-packing dan Z-Ordering) aktif?

Kedua operasi adalah operasi intensif CPU yang melakukan banyak sekali pendekodean dan pengkodean Parket.

Databricks merekomendasikan jenis instans komputasi yang dioptimalkan . OPTIMIZE juga mendapat manfaat dari SSD terlampir.