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.
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:
- Gunakan tabel terkelola Unity Catalog. Lihat Tabel terkelola Unity Catalog di Azure Databricks untuk Delta Lake dan Apache Iceberg.
- Gunakan pengoptimalan prediktif. Lihat Pengoptimalan prediktif untuk tabel yang dikelola oleh Unity Catalog.
- Gunakan pengelompokan cairan. Lihat Menggunakan pengklusteran cair untuk tabel.
- Saat menghapus dan membuat ulang tabel di lokasi yang sama, Anda harus selalu menggunakan
CREATE OR REPLACE TABLEpernyataan. Lihat Menghilangkan atau mengganti tabel.
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 memanggilREFRESH TABLEsecara 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] PARTITIONatauMSCK. -
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 klausulWHEREuntuk melewatkan data, sepertispark.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,
mergeoperasi mencari seluruh tabel Delta untuk menemukan kecocokan dalam tabel sumber. Salah satu cara untuk mempercepatmergeadalah dengan mengurangi ruang pencarian dengan menambahkan batasan yang sudah diketahui dalam kondisi pencocokan. Misalnya, Anda memiliki tabel yang dipartisi olehcountrydandatedan Anda ingin menggunakanmergeuntuk 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
mergemengatur ulang data secara berulang kali untuk mengkomputasi dan menulis data yang telah diperbarui. Jumlah tugas yang digunakan untuk mengacak dikontrol oleh konfigurasispark.sql.shuffle.partitionssesi 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,
mergedapat 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
mergememiliki 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
MERGEyang 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.