Gesaan dan konteks
Satu pasukan membaca fail perubahan Parquet dengan DuckDB dan mengekalkan dimensi pelanggan serta sejarah harga secara setempat. Terangkan bila masa untuk menggunakan MERGE INTO, dan cara mengendalikan kunci pendua, pemadaman, SCD Jenis 2, pelaksanaan semula dan pemulihan.
Perkara yang diuji oleh penemu duga
Mereka menyemak pemahaman anda tentang predikat pemadanan, susunan tindakan, keunikan sumber dan sempadan transaksi, serta keupayaan anda untuk menukar kemudahan SQL menjadi saluran paip yang boleh dilaksanakan semula dengan kualiti, audit dan pengembalian semula (rollback).
Soalan untuk penjelasan
Minta penjelasan mengenai kunci perniagaan, susunan masa peristiwa (event-time) dan sama ada sejarah diperlukan. Jelaskan rekod pendua, lewat dan pemadaman serta sama ada sasaran boleh dibina semula selepas kegagalan. Jangan anggap MERGE sebagai CDC tepat-sekali (exactly-once) automatik.
Jawapan 30 saat
“Saya akan menyahduplikasi dalam staging mengikut kunci perniagaan dan masa peristiwa, mengesahkan paling banyak satu perubahan yang boleh diguna pakai bagi setiap kunci sasaran, dan menjalankan MERGE dalam transaksi. Jadual keadaan semasa menggunakan kemas kini padanan dan sisipan tidak sepadan; jadual SCD Jenis 2 menutup versi lama dan menyisipkan versi baharu. Pemadaman dan pelaksanaan semula memerlukan semantik yang jelas. Setiap kelompok merekodkan snapshot input dan semakannya, dan kegagalan akan mengembalikan semula serta mencuba semula snapshot yang sama.”
Pendalaman langkah demi langkah
Tentukan semantik sasaran
Asingkan snapshot semasa daripada sejarah. Jadual semasa memerlukan keadaan terkini; SCD Jenis 2 memerlukan valid_from, valid_to, is_current, dan kekangan versi.
Bina staging yang boleh diaudit terlebih dahulu
Kekalkan fail sumber, id kelompok, masa bacaan dan cincangan (hash) baris. Nyahduplikasi mengikut kunci perniagaan, masa peristiwa dan keutamaan sumber; kuarantinkan percanggahan yang tidak dapat diselesaikan.
Reka bentuk padanan dan tindakan
Gunakan kunci perniagaan yang stabil dalam predikat padanan, bukan atribut yang boleh berubah. Tentukan kemas kini yang sepadan, sisipan yang tidak sepadan dan sebarang dasar pemadaman tidak sepadan mengikut sumber supaya data lewat tidak dipadamkan secara tidak sengaja.
Kendalikan SCD Jenis 2
Tutup baris semasa sebelum menyisipkan versi yang diubah; kandungan yang sama tidak sepatutnya mencipta versi baharu. Pastikan setiap kunci mempunyai satu baris semasa dengan kekangan atau pertanyaan kualiti.
Jamin pelaksanaan semula dan transaksi
Id kelompok dan snapshot input yang dibekukan menjadikan larian boleh diulang. Letakkan MERGE, audit dan status kelompok dalam satu transaksi; cuba semula data staging yang sama daripada membaca semula fail yang sedang berubah.
Pantau dan kembalikan semula (rollback)
Bandingkan kiraan sisipan, kemas kini dan pemadaman sumber dan sasaran; semak kunci yatim (orphan keys), baris semasa pendua dan masa yang terbalik. Simpan snapshot sebelum atau laluan bina semula dan buat pengembalian semula mengikut kelompok jika terdapat keabnormalan.
Model jawapan
Saya akan mendaratkan fail Parquet dalam staging dengan metadata kelompok, menyahduplikasi mengikut kunci perniagaan dan masa peristiwa, serta menyaring berdasarkan kiraan baris, nilai null dan nisbah pemadaman. Jadual semasa menggunakan kemas kini/sisipan berasaskan kunci yang stabil; jadual sejarah menutup versi yang diubah dan menyisipkan yang baharu supaya setiap kunci mempunyai satu baris semasa. MERGE, audit dan status kelompok berkongsi satu transaksi, dan kegagalan akan mencuba semula snapshot yang sama. Saya memantau delta per kelompok dan versi pendua serta mengembalikan semula atau membina semula mengikut kelompok apabila diperlukan.
Kesilapan biasa
Menggabungkan fail mentah secara terus
Baris sumber pendua boleh menyebabkan hasil yang kabur atau mengemas kini dua kali; lakukan staging, nyahduplikasi dan penapisan kualiti terlebih dahulu.
Memadan pada lajur yang boleh berubah
Nama pelanggan yang dinamakan semula boleh kelihatan seperti kunci baharu. Padankan pada pengecam perniagaan yang stabil.
Hanya menyisip untuk SCD Jenis 2
Versi lama kekal aktif dan pertanyaan mengembalikan berbilang baris semasa. Kekalkan kesahan dan keunikan.
Membaca semula fail semasa percubaan semula
Fail mungkin telah berubah atau fail baharu mungkin muncul. Bekukan snapshot input dan id kelompok.
Soalan susulan
Bagaimana jika dua peristiwa berbeza untuk satu kunci tiba bersama-sama?
Pilih satu dengan peraturan masa peristiwa, versi atau keutamaan sumber yang eksplisit; jika tidak, kuarantinkan daripada menulis ganti secara senyap.
Bagaimanakah anda mengendalikan pemadaman yang lewat?
Bandingkan masa peristiwa pemadaman dengan versi sasaran, rekodkan penanda kubur (tombstone), dan elakkan pemadaman lama daripada menulis ganti kemas kini yang lebih baharu.
Bagaimanakah anda membuktikan MERGE yang gagal tidak melakukan komit separa?
Kekalkan MERGE, audit dan status kelompok dalam satu transaksi; periksa kiraan sasaran dan status selepas kegagalan, kemudian cuba semula snapshot staging yang sama.
Bilakah anda akan mengelakkan MERGE?
Bagi penggantian hampir penuh, pemadanan kompleks atau transaksi merentas sistem, bina jadual baharu dan tukarkannya secara atomik untuk mengurangkan ketidakpastian tindakan baris.