Melewatkan data untuk Delta Lake

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.

Catatan

Di Databricks Runtime 13.3 ke atas, Databricks merekomendasikan penggunaan pengklusteran untuk tata letak tabel Delta. Pengklusteran tidak kompatibel dengan urutan Z. Lihat Gunakan pengklusteran cair untuk tabel Delta.

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?

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 BYtanggal dan catatan terbaru Anda semuanya jauh lebih luas (misalnya array atau nilai string yang lebih panjang) daripada yang ada di masa lalu, diharapkan durasi tugas pekerjaan OPTIMIZE akan miring, serta ukuran file yang dihasilkan. Namun, ini hanya masalah untuk perin OPTIMIZE itu sendiri; seharusnya tidak memiliki dampak negatif pada kueri berikutnya.