Ακεραιότητα των δεδομένων
1) Τι είναι η ακεραιότητα των δεδομένων
Η ακεραιότητα των δεδομένων είναι ένα σύνολο ιδιοτήτων και ελέγχων που εξασφαλίζουν ότι τα δεδομένα είναι ορθά, συνεπή και συνεπή καθ "όλη τη διάρκεια του κύκλου ζωής τους, από πηγές και μετασχηματισμούς σε αποθήκες, ΑΡΙ και εξαγωγές. Ο στόχος είναι ότι η ίδια δήλωση δίνει την ίδια απάντηση όταν επαναλαμβάνεται, και οποιεσδήποτε αλλαγές είναι ανιχνεύσιμες και επαληθεύσιμες.
2) Τύποι ακεραιότητας και τόπος διαβίωσης
Οντότητα - Μοναδικά βασικά κλειδιά, χωρίς αντίγραφα.
Το Referential-Value FK συνδέει την απουσία «κρεμασμένων» συνδέσμων.
Εύρος και μορφότυποι πεδίου ισχύος (τύπος, μήκος, κατάλογοι).
Επιχειρηματικοί κανόνες: αναλλοίωτοι τομείς (υπόλοιπο ≥ 0, ποσό συναλλαγής = 0 κ.λπ.).
Προσωρινή: μονοτονία και συνοχή χρονοσφραγίδας, σωστές χρονικές ζώνες.
Πολιτικές πρόσβασης: το RLS/CLS δεν παραβιάζει τη λογική συνέπεια των ορατών δεδομένων.
3) Συμβάσεις δεδομένων και σχήματα (πηγή αλήθειας)
Ορίσαμε επίσημες συμβάσεις για σύνολα και εκδηλώσεις. τα εφαρμόζουμε στην είσοδο και μετά από κάθε μετασχηματισμό.
Παράδειγμα (YAML, απλοποιημένο):yaml dataset: payments primary_key: txn_id foreign_keys:
- fk: user_id -> users.user_id schema:
- {name: txn_id, type: string, unique: true}
- {name: user_id, type: string, not_null: true}
- {name: amount, type: decimal(18,2), min: 0}
- {name: currency, type: string, in: [USD,EUR,TRY,UAH]}
- {name: event_time, type: timestamp, tz: UTC}
dq_rules:
- "duplicates(txn_id)=0"
- "ref_integrity(user_id, users.user_id)=true"
- "sum(amount) >= 0"
evolution:
semver: [MAJOR, MINOR, PATCH]
breaking_changes_require: approval:data-governance
4) Εγγυήσεις συναλλαγών και απομόνωση
ΟΞΥ για OLTP: ατομικότητα, συνέπεια, απομόνωση, ανθεκτικότητα.
Επίπεδα απομόνωσης: Διαβάστε δεσμευμένο/επαναλαμβανόμενο Read/Serializable - επιλέξτε σε κίνδυνο το «βρώμικο «/μοναδικό/φάντασμα διαβάζει.
OLAP και lakehouse: ατομικές δεσμεύσεις πινάκων (ημερολόγιο συναλλαγών), idempotent νεροχύτη και schema-evolution με έλεγχο συμβατότητας.
Συνέπεια των τύπων KPI: σημασιολογικό στρώμα → μια αλήθεια για αναφορές και API.
5) Κατανεμημένα συστήματα: τάξη, επαναλήψεις, ταυτότητα
Εντολή εκδήλωσης: χρήση 'event _ time' + 'ingested _ a , υδατογραφήματα και ανοχή καθυστέρησης. συγκεντρωτικά μεγέθη με βάση τον χρόνο εκδήλωσης.
Redelivery (τουλάχιστον μία φορά): global 'event _ id', idempotency keys tables, upsert/merge by stable key.
Εκτός λειτουργίας: επανυπολογισμός των παραθύρων, στρατηγική καθυστέρησης, αποζημίωση.
Ακριβώς μία φορά κατά την έννοια: η μεταφορά μπορεί να είναι τουλάχιστον μία φορά, δέκτης - idempotent.
6) Επικύρωση ακεραιότητας (DQ) σε κάθε στρώμα
Συμπεριλαμβάνουμε κανόνες ακεραιότητας σε CI/CD και σε χρόνο εκτέλεσης αγωγών:- Φρεσκάδα/πληρότητα/μοναδικότητα/έγκυρες τιμές/ακεραιότητα αναφοράς.
- Ανωμαλίες: εκρήξεις αντιγράφων, χρονικά κενά, έντονες μετατοπίσεις κατανομής.
- Έλεγχος των τύπων KPI: έκδοση των υπολογισμών και δοκιμές για την αντιστοίχιση των αποτελεσμάτων (χρυσά σύνολα).
- Έλεγχος εξαγωγών - Απαγόρευση έκδοσης δεσμών με παραβάσεις (καραντίνα).
yaml expect_column_values_to_be_unique: {column: txn_id}
expect_column_values_to_not_be_null: {column: user_id}
expect_column_values_to_be_in_set: {column: currency, value_set: [USD,EUR,TRY,UAH]}
7) Οικονομική και επιχειρησιακή ακεραιότητα
Διπλή εγγραφή: χρέωση/πίστωση στο υπόλοιπο. συνοπτικοί συμβιβασμοί στην αποκοπή.
Σύνολο αναλλοίωτων: ποσό καταβολής = ποσό διαγραφής + τέλη + διορθώσεις.
Λειτουργικές αναλλοίωτες: οι μετρήσεις SLA/guardrail δεν παραβιάζουν τους επιχειρηματικούς κανόνες (για παράδειγμα, η αυτόματη επισκευή δεν δημιουργεί αντίγραφα).
8) Γενεαλογία, λογιστικός έλεγχος και αναπαραγωγιμότητα
Linage: πηγή προβολής/χαρακτηριστικό· την προβολή των μετασχηματισμών και των ιδιοκτητών.
Διαδρομές ελέγχου: ποιος άλλαξε τι, πότε και γιατί· schema/formula/job versions.
Στιγμιότυπα/σημεία ελέγχου: ικανότητα επανυπολογισμού και επιβεβαίωσης προηγούμενων εκθέσεων.
Repro: το ίδιο ερώτημα στην ίδια φέτα → το ίδιο αποτέλεσμα (εκδόσεις και στρώματα).
9) Ασφάλεια και ιδιωτικότητα χωρίς απώλεια ακεραιότητας
RLS/CLS: τα φίλτρα σειράς/στήλης δεν πρέπει να παραβιάζουν τις αναλλοίωτες τιμές (για παράδειγμα, το άθροισμα του ορατού δείγματος πρέπει να αντιστοιχεί στο δηλούμενο δείγμα).
Συγκάλυψη/μαρκινοποίηση: ντετερμινιστικές στρατηγικές για να εξασφαλιστεί ότι η αφαίρεση και η παραπλανητική ακεραιότητα διατηρούνται.
Κρυπτογράφηση: στο κανάλι και στο δίσκο μετά τη συμπίεση. βασική διαχείριση και λογιστικός έλεγχος πρόσβασης.
DSAR/Διατήρηση: η διαγραφή/ανωνυμία δεν διακόπτει τη συνδεσιμότητα (πολιτική κλιμάκωσης).
10) Αυτοεξυπηρέτηση και αυτόματη επισκευή
Καραντίνα: απομόνωση ύποπτων μερών/παρτίδων. οι καταναλωτές - ένας «καθαρός» κλάδος.
Replay/Backfill: Αναπαράγει ένα παράθυρο από ένα αμετάβλητο ακατέργαστο ημερολόγιο.
Συμφιλίωση: συμφιλίωση επιπέδου και συστήματος (raw↔curated↔marts· ).
Dedup/Compaction/Ανακατασκευή: διαδικασίες συστήματος για την επισκευή δεικτών/συγκεντρωτικών μεγεθών.
Κώδικας πολιτικής: «τι ανωμαλία → ποια δράση → κατώτατα όρια → κλιμάκωση».
11) Πρακτικές μοντελοποίησης και αποθήκευσης
Σταθερά κλειδιά: υποκατάστατα PK (UUID/ULID), αμετάβλητα φυσικά κλειδιά στα βιβλία αναφοράς.
: Συνδέσεις FK σε πηγές, απομαλοποιημένες βιτρίνες με έλεγχο λογικής έκδοσης.
: καθοδηγούμενη ιστορία για διαστάσεις.
Διαλογή/ομαδοποίηση: Βελτιώνει τους χάρτες RLE/ζώνης και απλοποιεί τις συμφωνίες.
Hashes και checksums: έλεγχος της ακεραιότητας των αρχείων/παρτίδων.
12) Διαχρονική ακεραιότητα και υποβολή εκθέσεων
Εκδόσεις τύπου: Η έκθεση του Ιανουαρίου 2025 θα πρέπει να αναπαράγεται με τύπο έκδοσης X.
Αποκοπή και «κλείσιμο περιόδου»: κατάψυξη παραθύρων καταστημάτων και φέτες αρχείων.
Καθυστερημένη άφιξη γεγονότων: μηχανική επαναπλήρωσης και αφηγήσεις με σήμα έκδοσης αναφοράς.
Τεκμηρίωση των υπερβάσεων: χειροκίνητες προσαρμογές - έλεγχος μόνο.
13) Ολοκλήρωση και ΑΡΙ
σύμβαση API: σχήματα, τύποι, απαιτούμενα πεδία, κωδικοί σφάλματος· έκδοση (v1/v2).
Επικύρωση στην είσοδο: απορρίψτε τα κακά ωφέλιμα φορτία, μην «επισκευάζετε σιωπηλά».
Idempotent POST: κλειδί idempotence, ξαναδοκιμάστε με ασφάλεια.
Εξαγωγή σε αρχεία: συνέπεια παρτίδας, hashes, υπογραφές.
14) Αντιπατερίδια
SELECT σε ερωτήματα πωλήσεων και χιονοθύελλες - διασπάται με MINOR εξέλιξη.
FK «σε λέξεις»: δεν υπάρχει πραγματικός έλεγχος αναφοράς.
Σιωπηλές διορθώσεις δεδομένων χωρίς έλεγχο και υποβολή εκθέσεων.
Αναμίξτε TZ και μορφές χρόνου σε ένα σύνολο.
Το «Grip» KPI παρακάμπτει χωρίς εκδόσεις και αρχεία καταγραφής.
Ενιαίο κλειδί αφαίρεσης χωρίς εφεδρικές στρατηγικές.
Διαγραφή DSAR χωρίς έλεγχο σύνδεσης κλιμάκωσης.
15) Χάρτης πορείας για την εφαρμογή
1. Απογραφή & κρισιμότητα: σετ/χάρτης γεγονότων, ιδιοκτήτες, κίνδυνοι, αναλλοίωτες.
2. Συμβάσεις και καθεστώτα: τυποποίηση τύπων/περιορισμών/FK, έλεγχοι συμβατότητας ΚΚΠ.
3. DQ εν εξελίξει: φρεσκάδα/πληρότητα/μοναδικότητα/RI, καραντίνα, προειδοποιήσεις.
4. Βάση συναλλαγής: ατομικός νεροχύτης, upsert/συγχώνευση, ιστορικό SCD, έκδοση τύπου.
5. Γενεαλογία και έλεγχος: κατάλογος, ίχνη, αρχεία καταγραφής αλλαγών, αρχεία καταγραφής πρόσβασης.
6. Πολιτικές επισκευής: replay/backfill/dedup/reconcile ως κωδικός. δεδομένων SLO MTTR.
7. Ασφάλεια/priv: RLS/CLS, κάλυψη, κρυπτογράφηση, διαδικασίες DSAR.
8. Αναφορά: αποκοπή, φέτες παγώματος, έκδοση KPI.
16) Προεγκυκλοπαίδεια/θήκη απεικόνισης
- Οι περιορισμοί PK/FK και τομέα καθορίζονται και δοκιμάζονται επιτυχώς.
- Ενεργοποιείται η έκδοση σχήματος/τύπου. σχήμα-diff πράσινο.
- Οι κανόνες DQ (φρεσκάδα/πληρότητα/μοναδικότητα/εύρος/RI) είναι πράσινοι.
- Εικονικές καταχωρήσεις: upsert/merge, idempotence key (για γεγονότα).
- Ώρα: 'event _ time' και 'ingested _ a , TZ = UTC; πολιτική καθυστερημένων δεδομένων.
- Ορατή καταγωγή και έλεγχος· συμπεριλαμβάνονται η καραντίνα και οι καταχωρίσεις.
- RLS/CLS/κάλυψη δεν παραβιάζει αναλλοίωτες και RI.
- Δοκιμή DSAR/κατακράτηση· Το cut-off/archive είναι έτοιμο.
17) Μίνι υποδείγματα
SQL: έλεγχος ακεραιότητας αναφοράς
sql select count() as orphans from fact_payments f left join dim_users u on f.user_id = u.user_id where u.user_id is null;
-- ожидаем orphans = 0
Πολιτική απομόνωσης/επισκευής (ψευδο-YAML)
yaml policy: payments_integrity detect:
- rule: duplicates(txn_id) > 0
- rule: ref_integrity(user_id, users.user_id) = false auto_actions:
- quarantine_partition: {date: today}
- trigger_replay: {window: "last_2h"}
escalate_if:
- condition: violations_persist>30m page: "oncall-data"
Διάγραμμα μέτρησης
sql
-- dim_user_status (SCD2)
user_id, status, valid_from, valid_to, is_current
18) Η τελική γραμμή
Η ακεραιότητα των δεδομένων δεν είναι ένας ενιαίος έλεγχος, αλλά ένα διατερματικό σύστημα εγγυήσεων: επίσημες συμβάσεις και περιορισμοί, εμπορικές και κατανεμημένες αναλλοίωτες, επικύρωση και αυτοματοποίηση επισκευών, γενεαλογία και λογιστικός έλεγχος, ιδιωτικότητα και δικαιώματα. Όταν αυτά τα στοιχεία συνεργάζονται, τα δεδομένα γίνονται μια αξιόπιστη βάση για λύσεις, και τα περιστατικά είναι σπάνια, σύντομα και προβλέψιμα.