Validasi skema Delta Lake
Delta Lake secara otomatis memvalidasi bahwa skema DataFrame yang sedang ditulis kompatibel dengan skema tabel. Delta Lake menggunakan aturan berikut untuk menentukan apakah penulisan dari DataFrame ke tabel kompatibel:
- Semua kolom DataFrame harus ada dalam tabel target. Jika ada kolom dalam DataFrame yang tidak ada dalam tabel, pengecualian akan dimunculkan. Kolom yang ada dalam tabel tetapi tidak dalam DataFrame diatur ke null.
- Jenis data kolom DataFrame harus cocok dengan jenis data kolom dalam tabel target. Jika tidak cocok, pengecualian akan dimunculkan.
- Nama kolom DataFrame tidak dapat berbeda hanya menurut kasus. Ini berarti Bahwa Anda tidak dapat memiliki kolom seperti "Foo" dan "foo" yang ditentukan dalam tabel yang sama. Meskipun Anda dapat menggunakan Spark dalam mode peka huruf besar/kecil atau tidak sensitif (default), Parquet peka huruf besar/kecil saat menyimpan dan mengembalikan informasi kolom. Delta Lake mempertahankan kasus tetapi tidak peka saat menyimpan skema dan memiliki batasan ini untuk menghindari potensi kesalahan, kerusakan data, atau masalah kehilangan.
Delta Lake mendukung DDL untuk menambahkan kolom baru secara eksplisit dan kemampuan untuk memperbarui skema secara otomatis.
Jika Anda menentukan opsi lain, seperti partitionBy
, dalam kombinasi dengan mode penampan, Delta Lake memvalidasi bahwa opsi tersebut cocok dan melemparkan kesalahan untuk ketidakcocokan apa pun. Ketika partitionBy
tidak ada, penambahan secara otomatis mengikuti pemartisian data yang ada.
Catatan
INSERT
sintaks menyediakan penegakan skema dan mendukung evolusi skema. Jika jenis data kolom tidak dapat dilemparkan dengan aman ke jenis data tabel Delta Lake Anda, maka pengecualian runtime dilemparkan. Jika evolusi skema diaktifkan, kolom baru dapat ada sebagai kolom terakhir skema Anda (atau kolom berlapis) agar skema berkembang.
Validasi skema untuk penggabungan Delta Lake
merge
secara otomatis memvalidasi bahwa skema data yang dihasilkan oleh ekspresi sisipkan dan perbarui kompatibel dengan skema tabel. Ini menggunakan aturan berikut untuk menentukan apakah merge
operasi kompatibel:
- Untuk
update
tindakan daninsert
, kolom target yang ditentukan harus ada dalam tabel Delta target. - Untuk
updateAll
tindakan daninsertAll
, himpunan data sumber harus memiliki semua kolom tabel Delta target. Himpunan data sumber dapat memiliki kolom tambahan dan diabaikan. - Untuk semua tindakan, jika jenis data yang dihasilkan oleh ekspresi yang menghasilkan kolom target berbeda dari kolom terkait dalam tabel Delta target,
merge
mencoba mentransmisikannya ke jenis dalam tabel.