데이터 무결성
1) 데이터 무결성
데이터 무결성은 소스 및 변환에서 상점, API 및 수출에 이르기까지 수명주기 동안 데이터가 정확하고 일관되며 일관성이 있는지 확인하기위한 일련의 속성 및 제어입니다. 목표는 반복 될 때 동일한 진술이 동일한 답변을 제공하며 모든 변경 사항을 추적 가능하고 검증 할 수 있다는 것입니다.
2) 무결성의 종류와 그들이 사는 곳
엔터티 고유 기본 키, 중복이 없습니다.
참조 유효 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에 대한 ACID: 원자 성, 일관성, 격리, 내구성.
격리 수준: 커밋/반복 가능한 읽기/직렬화 가능-" 더러운 "/고유 한/팬텀 읽기의 위험이 있습니다.
OLAP 및 호숫가: 호환성 제어를 통한 테이블 (트랜잭션 로그), demempotent 싱크 및 스키마 진화의 원자 커밋.
KPI 공식의 일관성: 의미 계층 → 보고서 및 API에 대한 하나의 진실.
5) 분산 시스템: 주문, 반복, demempotency
이벤트 순서: '이벤트 _ time' + 'inested _ at', 워터 마크 및 지연 오차를 사용하십시오. 이벤트 시간을 기준으로 집계.
재 전달 (적어도 한 번): 글로벌 '이벤트 _ id', demempotency 키 테이블, 안정적인 키로 업저트/병합.
순서 외: 창문 재 계산, 지연 전략, 보상.
정확히 한 번의 의미: 전송은 적어도 한 번은 수신기-demempotent 일 수 있습니다.
6) 각 계층의 무결성 검증 (DQ)
CI/CD 및 파이프 라인 런타임에 무결성 규칙이 포함되어 있습니다
신선도/완전성/고유성/유효성 가치/참조 무결성.
Anomalies: 복제 버스트, 시간 간격, 분포의 급격한 변화.
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/가드 레일 지표는 비즈니스 규칙을 위반하지 않습니다 (예: 자동 수리는 중복을 생성하지 않습니다).
8) 계보, 감사 및 재현성
리니지: 쇼케이스/기능 소스; 변형 및 소유자의 가시성.
감사 흔적: 누가 무엇을, 언제, 왜 바꿨는지; 스키마/수식/작업 버전.
스냅 샷/체크 포인트: 과거 보고서를 다시 계산하고 확인하는 기능.
Repro: 동일한 슬라이스의 동일한 쿼리 → 동일한 결과 (버전 및 레이어).
9) 무결성 상실없는 보안 및 개인 정보
RLS/CLS: 행/열 필터는 불변량을 위반해서는 안됩니다 (예: 보이는 샘플의 합이 선언 된 샘플과 일치해야 함).
마스킹/토큰 화: 결정 및 참조 무결성을 유지하기위한 결정 론적 전략.
암호화: 채널에서 및 압축 후 "디스크"; 주요 관리 및 액세스 감사.
DSAR/보존: 삭제/익명화는 연결을 끊지 않습니다 (계단식 정책).
10) 셀프 서비스 및 자동 수리
검역: 의심스러운 당사자/배치의 격리; 소비자 - "깨끗한" 지점.
재생/백필: 변경할 수없는 원시 로그에서 창을 다시 재생합니다.
조정: 층 및 시스템 조정 (원시 선별 된 마트; istochnik SL DWH).
Dedup/Compaction/Rebuild: 색인/집계를 수리하기위한 시스템 절차.
코드 정책: "어떤 이상 → 어떤 행동 → 임계 값 → 에스컬레이션".
11) 모델링 및 스토리지 관행
안정적인 키: 참고 문헌에서 변경되지 않은 자연 키 대리 PK (UUI/ULID).
정규화: denormalizatsiya: 소스에서의 FK 연결, 논리 버전 제어가있는 비정규화 된 쇼케이스.
SCD1/SCD2: 치수 기록 유도.
정렬/클러스터링: RLE/영역 맵을 개선하고 조정을 단순화합니다.
해시 및 체크섬: 파일/배치의 무결성 확인.
12) 시간과보고에 대한 무결성
공식 버전: 2025 년 1 월 보고서는 버전 X 공식으로 재현 가능해야합니다.
컷오프 및 "기간 폐쇄": 상점 창 및 보관 슬라이스 동결.
늦게 도착한 사실: 보고서 버전 표시로 보충 및 재 계산의 역학.
오버 라이드 문서화: 수동 조정-감사 만.
13) 통합 및 API
API 계약: 스키마, 유형, 필요한 필드, 오류 코드; 버전 (v1/v2).
입구에서의 검증: 불량한 페이로드를 거부하고 "조용히 복구" 하지 마십시오.
Idempotent POST: demempotence 키, 안전을 다시 시도하십시오.
파일로 내보내기: 배치 일관성, 해시, 서명.
14) 안티 패턴
판매 쿼리 및 블리자드의 SELECT-MINOR 진화로 분해됩니다.
FK "단어": 실제 참조 검사가 없습니다.
감사 및보고없이 조용한 데이터 수정.
한 세트에서 TZ 및 시간 형식을 혼합하십시오.
"그립" KPI는 버전과 로그없이 무시합니다.
대체 전략이없는 단일 중복 키.
연속적인 링크 확인없이 DSAR 삭제
15) 구현 로드맵
1. 재고 및 중요: 세트/이벤트 맵, 소유자, 위험, 불변.
2. 계약 및 체계: 유형/제약/FK, CI 호환성 검사를 공식화하십시오.
3. 파이프 라인의 DQ: Freshness/Completeness/Uniqueness/RI, 검역, 경고.
4. 거래 기준: 원자 싱크, upsert/merge, SCD 이력, 공식 버전.
5. 계보 및 감사: 디렉토리, 추적, 변경 로그, 액세스 로그.
6. 수리 정책: 코드로 재생/백필/dedup/조정; runbook '달력 SLO MTTR- 데이터.
7. 보안/프라이브: RLS/CLS, 마스킹, 암호화, DSAR 프로세스.
8. 보고: 컷오프, 동결 슬라이스, KPI 버전.
16) 시험판 체크리스트/디스플레이 케이스
- PK/FK 및 도메인 제약 조건이 설정되고 테스트를 통과합니다.
- 스키마/수식 버전이 활성화됩니다. 스키마 디프 그린.
- DQ 규칙 (신선도/완전성/고유성/범위/RI) 은 녹색입니다.
- Idempotent 항목: upsert/merge, demempotence 키 (이벤트 용).
- 시간: '이벤트 _ time' 및 'inested _ at', TZ = UTC; 늦은 데이터 정책.
- 계보 및 감사 가시적; 검역 및 경보가 포함되었습니다.
- RLS/CLS/마스킹은 불변성 및 RI를 위반하지 않습니다.
- DSAR/유지 테스트; 컷오프/아카이브가 준비되었습니다.
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"
측정 SCD2 다이어그램
sql
-- dim_user_status (SCD2)
user_id, status, valid_from, valid_to, is_current
18) 결론
데이터 무결성은 단일 점검이 아니라 엔드 투 엔드 보증 시스템: 공식 계약 및 제한, 거래 및 분산 불변량, 수리, 계보 및 감사, 개인 정보 보호 및 권리의 검증 및 자동화. 이러한 요소가 함께 작동하면 데이터가 솔루션의 신뢰할 수있는 기반이되며 사고는 드물고 짧으며 예측 가능합니다.