Bagikan melalui


Praktik terbaik: Delta Lake

Artikel ini menjelaskan praktik terbaik saat menggunakan Delta Lake.

Gambaran umum praktik terbaik

Berikut ini adalah rekomendasi umum yang berlaku untuk sebagian besar beban kerja Delta Lake:

Menghapus konfigurasi Delta warisan

Databricks merekomendasikan agar sebagian besar konfigurasi Delta lama yang eksplisit dihapus dari konfigurasi Spark dan properti tabel ketika meningkatkan ke versi terbaru dari Databricks Runtime. Konfigurasi warisan dapat mencegah pengoptimalan baru dan nilai default yang diperkenalkan oleh Databricks agar tidak diterapkan ke beban kerja yang dimigrasikan.

File ringkas

Pengoptimalan prediktif secara otomatis menjalankan perintah OPTIMIZE dan VACUUM pada tabel terkelola Unity Catalog. Lihat Pengoptimalan prediktif untuk tabel yang dikelola oleh Unity Catalog.

Databricks merekomendasikan untuk sering menjalankan perintah OPTIMIZE untuk memampatkan file kecil.

Catatan

Operasi ini tidak menghapus berkas lama. Untuk menghapusnya, jalankan VACUUM perintah .

Jangan gunakan caching Spark dengan Delta Lake

Databricks tidak menyarankan Anda untuk menggunakan penembolokan Spark karena alasan berikut:

  • Anda kehilangan data yang mungkin terlewati akibat penambahan filter tambahan di atas cache DataFrame.
  • Data yang di-cache mungkin tidak diperbarui jika tabel diakses menggunakan pengidentifikasi yang berbeda.

Perbedaan antara Delta Lake dan Parquet di Apache Spark

Delta Lake menangani operasi berikut secara otomatis. Anda tidak boleh melakukan operasi ini secara manual:

  • REFRESH TABLE: Tabel Delta selalu mengembalikan informasi paling up-to-tanggal, sehingga tidak perlu memanggil REFRESH TABLE secara manual setelah perubahan.
  • Menambahkan dan menghapus partisi: Delta Lake secara otomatis melacak kumpulan partisi yang ada dalam tabel dan memperbarui daftar saat data ditambahkan atau dihapus. Sehingga, tidak perlu menjalankan ALTER TABLE [ADD|DROP] PARTITION atau MSCK.
  • Memuat partisi tunggal: Membaca partisi secara langsung tidak diperlukan. Misalnya, Anda tidak perlu menjalankan spark.read.format("parquet").load("/data/date=2017-01-01"). Sebagai gantinya, gunakan klausul WHERE untuk melewatkan data, seperti spark.read.table("<table-name>").where("date = '2017-01-01'").
  • Jangan mengubah file data secara manual: Delta Lake menggunakan log transaksi untuk menerapkan perubahan pada tabel secara atomik. Jangan langsung mengubah, menambahkan, atau menghapus file data Parquet dalam tabel Delta, karena ini dapat menyebabkan kehilangan data atau kerusakan tabel.

Meningkatkan performa untuk penggabungan Delta Lake

Anda dapat mengurangi waktu yang diperlukan untuk menggabungkan dengan menggunakan pendekatan berikut:

  • Kurangi ruang pencarian untuk kecocokan: Secara default, merge operasi mencari seluruh tabel Delta untuk menemukan kecocokan dalam tabel sumber. Salah satu cara untuk mempercepat merge adalah dengan mengurangi ruang pencarian dengan menambahkan batasan yang sudah diketahui dalam kondisi pencocokan. Misalnya, Anda memiliki tabel yang dipartisi oleh country dan date dan Anda ingin menggunakan merge untuk memperbarui informasi untuk hari terakhir dan negara tertentu. Menambahkan kondisi berikut membuat kueri lebih cepat, karena hanya mencari kecocokan di partisi yang relevan:

    events.date = current_date() AND events.country = 'USA'
    

    Selain itu, kueri ini juga mengurangi kemungkinan konflik dengan operasi bersamaan lainnya. Lihat Tingkat isolasi dan tulis konflik di Azure Databricks untuk detail selengkapnya.

  • File ringkas: Jika data disimpan dalam banyak file kecil, proses membaca data untuk mencari kecocokan bisa menjadi lambat. Anda dapat meringkas file berukuran kecil ke dalam file yang berukuran lebih besar untuk meningkatkan throughput baca. Lihat Mengoptimalkan tata letak file data untuk detailnya.

  • Mengontrol partisi pengaturan ulang untuk proses penulisan: Operasi merge mengatur ulang data secara berulang kali untuk mengkomputasi dan menulis data yang telah diperbarui. Jumlah tugas yang digunakan untuk mengacak dikontrol oleh konfigurasi spark.sql.shuffle.partitions sesi Spark. Mengatur parameter ini tidak hanya mengontrol paralelisme, tetapi juga menentukan jumlah file output. Meningkatkan nilai turut meningkatkan paralelisme, tetapi juga menghasilkan sejumlah besar file data yang lebih kecil.

  • Aktifkan penulisan yang dioptimalkan: Untuk tabel yang dipartisi, merge dapat menghasilkan sejumlah besar file kecil daripada jumlah partisi acak. Hal ini terjadi karena setiap tugas pengacakan dapat menulis beberapa file di beberapa partisi, dan dapat menjadi hambatan kinerja. Anda dapat mengurangi jumlah file dengan mengaktifkan penulisan yang dioptimalkan. Lihat Penulisan Teroptimasi.

  • Menyetel ukuran file dalam tabel: Azure Databricks dapat secara otomatis mendeteksi apakah tabel Delta sering merge memiliki operasi yang menulis ulang file dan dapat memilih untuk mengurangi ukuran file yang ditulis ulang untuk mengantisipasi penulisan ulang file lebih lanjut di masa mendatang. Lihat bagian mengenai penyetelan ukuran file untuk detailnya.

  • Low Shuffle Merge: Low Shuffle Merge menyediakan implementasi MERGE yang dioptimalkan yang memberikan performa yang lebih baik untuk sebagian besar beban kerja umum. Selain itu, mempertahankan pengoptimalan tata letak data yang sudah ada seperti Z-ordering pada data yang tidak dimodifikasi.