Melewatkan data untuk Delta Lake
Catatan
Di Databricks Runtime 13.3 ke atas, Databricks merekomendasikan penggunaan pengklusteran cair untuk tata letak tabel Delta. Pengklusteran tidak kompatibel dengan urutan Z. Lihat Gunakan pengklusteran cair untuk tabel Delta.
Informasi data yang dilewati dikumpulkan secara otomatis saat Anda menulis data ke dalam tabel Delta. Delta Lake di Azure Databricks memanfaatkan informasi ini (nilai minimum dan maksimum, jumlah null, dan total rekaman per file) pada waktu kueri untuk memberikan kueri yang lebih cepat.
Anda harus memiliki statistik yang dikumpulkan untuk kolom yang digunakan dalam ZORDER
pernyataan. Lihat Apa itu pemesanan Z?.
Tentukan kolom statistik Delta
Secara default, Delta Lake mengumpulkan statistik pada 32 kolom pertama yang ditentukan dalam skema tabel Anda. Untuk koleksi ini, setiap bidang dalam kolom berlapis dianggap sebagai kolom individual. Anda bisa mengubah perilaku ini dengan mengatur salah satu properti tabel berikut ini:
Properti tabel | Runtime Databricks didukung | Deskripsi |
---|---|---|
delta.dataSkippingNumIndexedCols |
Semua versi Databricks Runtime yang didukung | Menambah atau mengurangi jumlah kolom tempat Delta mengumpulkan statistik. Bergantung pada urutan kolom. |
delta.dataSkippingStatsColumns |
Databricks Runtime 13.3 LTS ke atas | Tentukan daftar nama kolom tempat Delta Lake mengumpulkan statistik. Supersedes dataSkippingNumIndexedCols . |
Properti tabel dapat diatur pada pembuatan tabel atau dengan ALTER TABLE
pernyataan. Lihat Referensi properti tabel Delta.
Memperbarui properti ini tidak secara otomatis mengolah ulang statistik untuk data yang ada. Sebaliknya, ini berdampak pada perilaku pengumpulan statistik di masa depan saat menambahkan atau memperbarui data dalam tabel. Delta Lake tidak memanfaatkan statistik untuk kolom yang tidak disertakan dalam daftar kolom statistik saat ini.
Di Databricks Runtime 14.3 LTS ke atas, Anda dapat memicu komputasi ulang statistik secara manual untuk tabel Delta menggunakan perintah berikut:
ANALYZE TABLE table_name COMPUTE DELTA STATISTICS
Catatan
String panjang dipotong selama pengumpulan statistik. Anda dapat memilih untuk mengecualikan kolom string panjang dari koleksi statistik, terutama jika kolom tidak sering digunakan untuk memfilter kueri.
Apa itu pemesanan Z?
Catatan
Databricks merekomendasikan penggunaan pengklusteran cairan untuk semua tabel Delta baru. Anda tidak dapat menggunakan ZORDER
dalam kombinasi dengan pengklusteran cairan.
Urutan Z adalah teknik untuk mengkolokasikan informasi terkait dalam kumpulan file yang sama. Kolokalitas ini digunakan secara otomatis oleh Delta Lake pada algoritma pelewatan data Azure Databricks. Perilaku ini sangat mengurangi jumlah data yang perlu dibaca Delta Lake pada Azure Databricks. Untuk data Z-order, Anda menentukan kolom yang akan diurutkan ZORDER BY
dalam klausul:
OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType)
Jika Anda mengharapkan kolom yang umum digunakan dalam predikat kueri dan jika kolom tersebut memiliki kardinalitas tinggi (yaitu, sejumlah besar nilai yang berbeda), maka gunakan ZORDER BY
.
Anda dapat menentukan beberapa kolom untuk ZORDER BY
sebagai daftar yang dipisahkan koma. Namun, efektivitas lokalitas akan menurun seiring munculnya kolom tambahan. Pengurutan Z pada kolom yang tidak memiliki statistik yang dikumpulkan pada kolom tersebut tidak akan efektif dan membuang-buang sumber daya. Hal ini dikarenakan pelompatan data memerlukan statistik kolom lokal seperti min, maks, dan hitungan. Anda dapat mengonfigurasi pengumpulan statistik pada kolom tertentu dengan cara mengatur ulang kolom dalam skema atau meningkatkan jumlah kolom untuk mengumpulkan statistik.
Catatan
Urutan Z tidak idempotensi tetapi bertujuan untuk menjadi operasi inkremental. Waktu yang diperlukan untuk pemesanan Z tidak dijamin untuk mengurangi beberapa eksekusi. Namun, jika tidak ada data baru yang ditambahkan ke partisi yang hanya diurutkan Z, pengurutan Z lain dari partisi tersebut tidak akan berpengaruh apa pun.
Pengurutan Z bertujuan untuk menghasilkan file data yang seimbang secara merata sehubungan dengan jumlah tuple, tetapi belum tentu 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.
Misalnya, jika Anda
ZORDER BY
berkencan dan rekaman terbaru Anda semuanya jauh lebih luas (misalnya array atau nilai string yang lebih panjang) daripada yang di masa lalu, diharapkan durasi tugas pekerjaan akan condong, serta ukuran file yangOPTIMIZE
dihasilkan. Namun, ini hanya masalah untuk perinOPTIMIZE
itu sendiri; seharusnya tidak memiliki dampak negatif pada kueri berikutnya.