Learning Platform
Глоссарий Troubleshooting
Урок 06.05 · 28 мин
Продвинутый
Data QualityDQ DimensionsCompletenessAccuracyConsistencyTimelinessUniquenessValidityBCBS 239

Введение

DAMA-DMBOK 2 (2017) формализовал 6 core data quality dimensions — completeness, accuracy, consistency, timeliness, uniqueness, validity. BCBS 239 (2013) и ECB RDARR Guide (May 2024) — основные регуляторные якоря, требующие quantified DQ-контролей на CDE с traceable evidence. GDPR Art. 5(1)(d) обязывает «accurate and, where necessary, kept up to date». IFRS 13 fair-value framework требует reliability в input data для measurement.

Эти 6 измерений — не абстрактный framework; они переводятся в конкретные control activities с SQL patterns, thresholds и потоками evidence. Этот урок — прямая карта: каждое измерение → control archetype → пример SwiftRide на CDE-SWR-002 (kyc_profile).

Обзор 6 измерений DAMA

ИзмерениеВопрос, на который отвечает
CompletenessВсе ожидаемые записи / поля присутствуют?
AccuracyЗначения соответствуют real-world / source-of-truth?
ConsistencyЗначения согласованы между системами / во времени?
TimelinessData достаточно свежий per SLA?
UniquenessНет дубликатов там, где invariant required?
ValidityЗначения соответствуют определённым domain rules?

Каждое измерение отвечает на отдельный вопрос; multi-dimensional coverage обязательно для material CDE. Single-dimension coverage (например, «у нас completeness и timeliness» без accuracy / consistency) — типичный признак незрелой CDE-программы.

Измерение 1 — Completeness

Определение: все ожидаемые записи и поля присутствуют.

SQL pattern

-- Field-level: NULL rate
SELECT COUNT(*) FILTER (WHERE document_number_hash IS NULL) * 1.0 / COUNT(*) AS null_rate
FROM kyc_profile
WHERE created_at >= current_date - interval '1 day';

-- Row-level: ожидаемый vs фактический count
SELECT
  CASE
    WHEN COUNT(*) BETWEEN expected_min AND expected_max THEN 'pass'
    ELSE 'fail'
  END AS completeness_status
FROM kyc_profile, completeness_expectations
WHERE created_at = current_date;

Настройка threshold

  • Field-level NULL rate: ≤0.01% для CDE required fields.
  • Row-level: ожидаемый count ±5% trailing 30-day average (ловит резкие падения ingestion).

Evidence

GE Core 1.17.1 expectation expect_column_values_to_not_be_null + result JSON; row count delta логируется в S3 object lock; failure → PagerDuty Sev-2.

KYC profile SwiftRide

CDE-SWR-002 kyc_profile — required fields: kyc_id, customer_id, document_type, document_number_hash, biometric_match_score, kyc_status, verified_at. Null rate threshold 0.005% (более строгий, чем baseline — gap в поле KYC = gap в regulatory submission). Ожидаемый daily inflow: 8K-15K новых KYC per day (40 стран × ~250-400 на страну). Row count <7K → completeness fail + AML compliance review.

Измерение 2 — Accuracy

Определение: значения соответствуют real-world / source-of-truth.

SQL pattern

-- Cross-system accuracy: наша система vs внешний source
WITH ours AS (
  SELECT customer_id, kyc_status FROM kyc_profile WHERE verified_at >= current_date - interval '7 days'
), external_source AS (
  SELECT customer_id, kyc_status FROM external_kyc_provider_export
)
SELECT COUNT(*) FILTER (WHERE ours.kyc_status != external_source.kyc_status) AS mismatches
FROM ours INNER JOIN external_source USING (customer_id);

Настройка threshold

  • Mismatch rate ≤0.1% для cross-system reconciliation.
  • Sample-based ручная верификация — квартально 25 KYC records вручную верифицируются против оригинальных документов.

Evidence

Reconciliation log entry с mismatched IDs (для follow-up); отчёт ручной верификации, подписанный комплаенс-офицером KYC.

Регуляторный якорь

BCBS 239 Principle 3 — «largely automated aggregation; minimised manual workarounds; reconciliation to source». GDPR Art. 5(1)(d) — personal data «accurate and, where necessary, kept up to date».

KYC profile SwiftRide

Onfido — внешний KYC-провайдер; еженедельная reconciliation kyc_profile.kyc_status против Onfido export. Mismatches: расследуются в течение 5 рабочих дней; flag к AML Compliance Lead.

Измерение 3 — Consistency

Определение: значения согласованы между системами / во времени.

SQL pattern

-- Cross-table consistency: rules-based
SELECT customer_id
FROM kyc_profile p
INNER JOIN customer_master m ON p.customer_id = m.customer_id
WHERE p.country_code != m.country_code  -- должны быть согласованы
   OR (p.kyc_status = 'approved' AND m.account_status = 'closed')  -- противоречие
;

Настройка threshold

  • Cross-table contradictions: нулевая толерантность для material business rules.
  • Drift detection — ежемесячный статистический анализ, сравнивающий распределения против trailing 12-month baseline.

Evidence

Anomalo detection alerts; dbt-expectations test results; ежемесячный архив отчёта о статистическом drift.

KYC profile SwiftRide

Правила:

  • kyc_status = 'approved'customer_master.account_status MUST be in {'active', 'suspended', 'closed'} (не ‘pending’).
  • country_code в kyc_profile MUST соответствовать customer_master.primary_country_code.
  • biometric_match_score >= 0.95 AND document_type = 'passport' → ожидается verified в течение 24h.

Detection rule violations: ServiceNow-инцидент; AML Compliance review.

Измерение 4 — Timeliness

Определение: data достаточно свежий per SLA.

SQL pattern

-- Freshness check
SELECT
  MAX(verified_at) AS latest_record,
  current_timestamp - MAX(verified_at) AS staleness
FROM kyc_profile;

-- Late-arriving data tracking
SELECT COUNT(*) AS late_arrivals
FROM kyc_profile
WHERE verified_at < current_date - interval '24 hours'
  AND created_at >= current_date - interval '1 day';

Настройка threshold

  • SLA: KYC profile обновляется в течение 24h после подачи.
  • Late arrival rate ≤2%.

Evidence

Airflow DAG SLA monitoring; PagerDuty incidents при SLA breach.

KYC profile SwiftRide

KYC submission → Onfido processing → kyc_profile updated. SLA: 24h. >24h pending count → Sev-3 alert; >48h → Sev-2 + эскалация к AML Compliance Lead.

Измерение 5 — Uniqueness

Определение: нет дубликатов там, где invariant required.

SQL pattern

-- Primary key uniqueness (должно быть 0)
SELECT customer_id, COUNT(*)
FROM kyc_profile
GROUP BY customer_id
HAVING COUNT(*) > 1;

-- Business-key uniqueness (один approved KYC per customer per country)
SELECT customer_id, country_code, COUNT(*)
FROM kyc_profile
WHERE kyc_status = 'approved'
GROUP BY customer_id, country_code
HAVING COUNT(*) > 1;

Настройка threshold

  • Primary key: 0 duplicates (hard constraint).
  • Business key: 0 duplicates для invariants; залогированные exceptions для сценариев перепроверки.

Evidence

dbt unique test result; database PRIMARY KEY enforcement; exception log, если business rule разрешает контролируемые duplicates.

KYC profile SwiftRide

kyc_id — primary key, hard constraint. (customer_id, country_code, document_type) — business key для approved status; duplicates здесь = проблема качества данных или multi-KYC сценарий (легитимный в некоторых юрисдикциях).

Измерение 6 — Validity

Определение: значения соответствуют определённым domain rules.

SQL pattern

-- Domain rule: country_code должен быть ISO 3166-1 alpha-2
SELECT customer_id, country_code
FROM kyc_profile
WHERE country_code NOT IN (SELECT iso_code FROM ref_country_iso_3166);

-- Domain rule: biometric_match_score должен быть 0.0 - 1.0
SELECT kyc_id, biometric_match_score
FROM kyc_profile
WHERE biometric_match_score IS NOT NULL
  AND (biometric_match_score < 0 OR biometric_match_score > 1);

Настройка threshold

  • Domain violations: нулевая толерантность (hard validation).
  • Соответствие regex pattern для email, phone, vat_number: нулевая толерантность.

Evidence

dbt accepted_values test result; результаты GE expectation suite; отклонённые записи в dead-letter queue (DLQ) с reason code.

KYC profile SwiftRide

  • country_code IN ISO 3166-1 alpha-2 codes (40 рынков SwiftRide).
  • document_type IN ('passport', 'national_id', 'driver_license', 'residence_permit').
  • kyc_status IN ('pending', 'in_review', 'approved', 'rejected', 'expired').
  • biometric_match_score BETWEEN 0.0 AND 1.0.

Mapping 6 измерений ↔ регуляторные требования

ИзмерениеBCBS 239GDPRIFRSEU AI Act
CompletenessBCBS 239 Principle 4EU AI Act Art. 10(3)
AccuracyPrinciple 3Art. 5(1)(d)IFRS 13 fair value reliabilityArt. 10(2) error-free
ConsistencyPrinciple 3, 7Art. 5(1)(d)Art. 10(2)
TimelinessPrinciple 5 (timeliness)Art. 5(1)(d) «kept up to date»Art. 10(3) representativeness
UniquenessPrinciple 3 (integrity)Art. 10(2)
ValidityPrinciple 3 (integrity)Art. 5(1)(d)Art. 10(2)

BCBS 239 — наиболее полное покрытие. ECB RDARR Guide (May 2024) — операционализация для euro-area significant institutions.

SwiftRide CDE-SWR-002 KYC profile — 6 измерений per dataset

6 DQ dimensions × tooling support — SwiftRide kyc_profile (CDE-SWR-002)

Каждое измерение с threshold, специфичной реализацией SwiftRide и индикатором tooling support. Наведите для tooltip.

DIMENSIONCompletenessВсе ожидаемые записи + поля присутствуют; field-level null rate ≤0.005% для KYC; row-level 8K-15K ежедневно ожидается
THRESHOLD≤0.005% NULL · 8K-15K dailyСтрогий — gap в поле KYC = gap в regulatory submission
TOOLINGGE Core 1.17.1expect_column_values_to_not_be_null; row count expectation с толерансом; Data Docs HTML evidence
DIMENSIONAccuracyЗначения соответствуют внешнему источнику KYC (Onfido)
THRESHOLD≤0.1% mismatch · еженедельная reconЕженедельная reconciliation Onfido export; ручная выборка 25/квартал
TOOLINGdbt audit_helper + Pythondbt audit_helper для cross-system сравнения; custom Python для интеграции с Onfido REST API
DIMENSIONConsistencyПравила между customer_master + kyc_profile; cross-country инварианты
THRESHOLD0 contradictions · monthly driftHard rules; ежемесячный drift detection через Anomalo
TOOLINGdbt + Anomalodbt SQL tests для hard rules; Anomalo unsupervised для distribution drift
DIMENSIONTimelinessSLA: KYC profile обновлён в течение 24h после подачи
THRESHOLD24h SLA · ≤2% lateLate больше 24h → Sev-3; больше 48h → Sev-2 + эскалация AML Compliance
TOOLINGAirflow SLA + DatadogAirflow DAG SLA monitoring; Datadog timeseries; PagerDuty incidents
DIMENSIONUniquenessPrimary key kyc_id; business key (customer_id, country_code, document_type)
THRESHOLD0 PK dup · controlled BK dupPK hard; BK дублируется только при re-verification (залогированное exception)
TOOLINGdbt unique + PostgreSQL PKdbt unique test запускается на каждом build; database-level PK constraint enforcement
DIMENSIONValidityISO 3166-1 country codes, document_type whitelist, biometric_match 0.0-1.0
THRESHOLD0 domain violationsHard validation; отклонённые записи → DLQ + reason code
TOOLINGdbt accepted_values + GEdbt accepted_values test; GE expect_column_values_to_be_in_set; DLQ dead-letter queue

6 измерений, реализующих 14 control activities (некоторые измерения имеют несколько проверок); все с потоками evidence в S3 object lock + retention 7y (SOX) + GDPR overlay (per Art. 30 — длительность processing).

Great Expectations / GX Corev1.17.12026-05

Для CDE-SWR-002 KYC profile — GX Core expectation suite:

from great_expectations.dataset import SqlAlchemyDataset

# Suite: kyc_profile_validity_suite
dataset.expect_column_values_to_not_be_null(
    column="document_number_hash",
    mostly=0.99995  # threshold 0.005% null max
)
dataset.expect_column_values_to_be_in_set(
    column="country_code",
    value_set=["NL", "DE", "FR", "..."]  # 40 рынков
)
dataset.expect_column_values_to_be_in_set(
    column="document_type",
    value_set=["passport", "national_id", "driver_license", "residence_permit"]
)
dataset.expect_column_values_to_be_between(
    column="biometric_match_score",
    min_value=0.0,
    max_value=1.0,
    allow_cross_type_comparisons=False
)
dataset.expect_column_value_lengths_to_be_between(
    column="document_number_hash",
    min_value=64,  # SHA-256 hex
    max_value=64
)

Результаты валидации → Data Docs HTML → S3 object lock; queryable by suite_id + run_timestamp. Failed expectations → PagerDuty (severity per измерение) + ServiceNow ticket.

Версия 1.17.1 — текущая per PyPI release timing late 2025. Legacy v0.x deprecated в 2026.

Сравнение tooling support

Ландшафт DQ tooling для CDEv2025-20262026-05
ИнструментСильная сторонаПрименение SwiftRide
dbt tests (1.9.x)Самый дешёвый, встроен в build, in-repo evidenceHard rules уровня test (unique, not_null, accepted_values, relationships)
dbt-expectationsБолее богатые GE-style tests как dbt YAMLРасширенные domain rules (regex, between, type) inline в dbt project
GE Core (1.17.1)Зрелая expectations library, Data Docs HTML evidenceСложные inline validation suites; standalone runs, если пайплайн не dbt
Soda Core 4.0 (2025)Data-contract-first; SodaCL DSL; in-VPC Soda Agent + Soda Cloud reviewer workflowКонтракты SwiftPay на cross-team handoff data
Anomalo (SaaS)Unsupervised ML anomaly detection per table; ML thresholds; root-cause analysisDrift detection «unknown unknowns» на распределениях KYC ежемесячно
Monte Carlo (SaaS)Data observability — freshness, volume, schema, distribution, lineage incidentsPipeline incidents + cross-tool observability layer
Elementary (OSS + Cloud)dbt-native anomaly tests + отчёт для стейкхолдеровДашборды для стейкхолдеров без dbt-экспертизы

Правило выбора: dbt tests/dbt-expectations baseline для hard rules in-repo (самый дешёвый путь SOX evidence); GE Core для сложных inline suites; Anomalo / Monte Carlo для drift detection. Состояние SwiftRide T+9M — dbt + GE Core baseline; оценка Anomalo для anomaly detection layer.

Проверка знанийKnowledge check
Инженер SwiftRide для CDE-SWR-002 KYC profile предлагает: «У нас GE Core expectations на validity + accuracy + completeness — adequate coverage». Какие измерения отсутствуют и почему важны?
ОтветAnswer
Отсутствуют 3 из 6: consistency, timeliness, uniqueness. (1) CONSISTENCY — cross-table rules (kyc_profile.country_code = customer_master.primary_country_code; kyc_status='approved' invariant с account_status). Без consistency control — orphan / contradictory records проникают в downstream AML monitoring. Detection: dbt SQL tests + Anomalo drift detection ежемесячно. (2) TIMELINESS — SLA 24h KYC update; без timeliness control bottlenecks накапливаются, regulatory submission delay (AMLR требует timely SAR reporting). Detection: Airflow DAG SLA + Datadog. (3) UNIQUENESS — primary key + business key invariants; без uniqueness control duplicate KYC = duplicate downstream effects (multiple AML alerts, mis-attribution). Detection: dbt unique test + PostgreSQL PK enforcement. Добавление 3 отсутствующих измерений — 3 дополнительных control objectives + 5-6 control activities + потоков evidence. Multi-regulator coverage: GDPR Art. 5(1)(d) + BCBS 239 Principle 3-5 + EU AI Act Art. 10 для biometric data — все 6 измерений требуются для defensible coverage.

Anti-patterns

Покрытие одного измерения

Паттерн: «у нас completeness checks для всех CDE; качество хорошее».

Почему плохо: completeness не ловит accuracy / consistency / validity / uniqueness / timeliness errors. KYC record может быть complete (все fields populated), но значения wrong, или дубликаты есть, или присутствуют schema-violating values.

Fix: defense-in-depth по измерениям — каждый material CDE минимум 4 из 6 измерений covered.

DQ tests без regulatory mapping

Паттерн: команда реализует DQ tests на основе интуиции, не на основе конкретного регуляторного требования.

Почему плохо: при аудите, существование DQ tests ≠ regulatory compliance. Если аудит спрашивает «как обеспечивается GDPR Art. 5(1)(d) accuracy», команда не может прямо проследить к специфическим тестам.

Fix: каждый DQ test linked к специфической regulatory citation (BCBS Principle, GDPR Art, EU AI Act Art). Сохраняется в control registry.

Настройка threshold без статистической базы

Паттерн: «threshold = 5%; почему — потому что круглое число».

Почему плохо: thresholds без статистической базы либо too lenient (ничего не ловит), либо too strict (alert fatigue).

Fix: threshold derive из trailing 30-90 day baseline ± standard deviations; tune per измерение со специфическим анализом failure-mode.

Evidence в дашбордах DQ-инструмента, не в S3

Паттерн: «всё видно в Monte Carlo / Anomalo дашбордах».

Почему плохо: дашборды mutable, vendor-controlled, не SOX-grade retention.

Fix: результаты DQ-инструмента — operational signal; primary evidence — exported snapshots в S3 object lock 7y retention.

Резюме

  • 6 DQ dimensions (DAMA-DMBOK 2): completeness, accuracy, consistency, timeliness, uniqueness, validity. Каждое отвечает на отдельный вопрос; multi-dimensional coverage обязательно для material CDE.
  • На измерение: SQL pattern + настройка threshold + поток evidence + регуляторный якорь (BCBS 239, GDPR, IFRS, EU AI Act).
  • BCBS 239 Principle 3 (accuracy/integrity) + Principle 4 (completeness) + Principle 5 (timeliness) — наиболее полный regulatory framework. ECB RDARR Guide May 2024 — операционализация.
  • GDPR Art. 5(1)(d) — accuracy + kept up to date. EU AI Act Art. 10 — измерения training data требуются (особенно для high-risk AI). IFRS 13 — fair value reliability.
  • Tooling layered: dbt tests baseline (самый дешёвый in-repo) + GE Core 1.17.1 expectation suites + Soda Core 4.0 contracts + Anomalo / Monte Carlo drift detection. dbt + GE — baseline SwiftRide.
  • Evidence — дашборды DQ-инструмента = operational signal; primary evidence S3 object lock 7y retention. Всегда экспортируем snapshots.

В M5.6 разберём cross-system reconciliation подробно — PostgreSQL OLTP ↔ Snowflake warehouse, real-time против batch, late-arriving data, audit-grade evidence.

dbt Quality Tests — DQ dimensions в коде Freshness и Timeliness — observability-контроли

Проверьте понимание

Результат: 0 из 0
Аналитический
Вопрос 1 из 4. SwiftRide engineer для CDE-SWR-002 KYC profile предлагает: «У нас GE Core expectations на validity + accuracy + completeness — adequate coverage». Какие dimensions missing + почему important + remediation?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 9