Перейти к содержанию

Качество данных

Управление качеством данных в платформе Kruma основано на стандартах DAMA-DMBOK и реализовано через исполняемые правила в quality_rules.yml.


Измерения качества

Компонент Реализация в Kruma
Измерения качества Определены в quality_rules.yml: точность, полнота, согласованность, своевременность, корректность
Правила качества Исполняемые утверждения в каждом контракте
Метрики Prometheus-метрики из Quality Validator
Мониторинг Grafana-дашборды с пороговыми значениями
Анализ первопричины Анализ DLQ с категоризацией ошибок

Маппинг на DMBOK

Правила Quality Validator реализуют 6 измерений качества данных по DAMA-DMBOK (DAMA UK 2013):

Измерение DMBOK Определение Типы правил Kruma
Полнота (Completeness) Доля присутствующих данных от потенциально возможных 100% NOT_NULL
Уникальность (Uniqueness) Ни один экземпляр сущности не записан более одного раза UNIQUE
Своевременность (Timeliness) Данные отражают реальность на требуемый момент времени FRESHNESS
Корректность (Validity) Данные соответствуют синтаксису определения (формат, тип, диапазон) RANGE, REGEX, FORMAT, ENUM
Точность (Accuracy) Данные верно описывают объект или событие реального мира CUSTOM, SQL, REFERENCE
Согласованность (Consistency) Отсутствие различий при сравнении представлений CUSTOM (кросс-полевая валидация)

Примеры правил по измерениям

Полнота

# Проверка обязательных полей
- name: "order_id_not_null"
  field: "order_id"
  type: "not_null"
  severity: "error"
  message: "order_id is required"

Корректность

# Допустимые значения (enum)
- name: "status_valid"
  field: "status"
  type: "enum"
  values: ["draft", "pending", "confirmed", "shipped"]
  severity: "error"

# Числовой диапазон
- name: "amount_positive"
  field: "total_amount"
  type: "range"
  min: 0
  severity: "error"

# Формат (regex)
- name: "email_format"
  field: "customer_email"
  type: "format"
  format: "email"
  severity: "warning"

Своевременность

# Свежесть данных
- name: "data_freshness"
  field: "created_at"
  type: "freshness"
  max_age_minutes: 60
  severity: "error"
  message: "Data older than 1 hour"

Согласованность

# Кросс-полевая валидация
- name: "total_equals_sum"
  field: "quantity_total"
  type: "custom"
  expression: "quantity_total == quantity_available + quantity_reserved"
  severity: "error"

Уровни критичности

Severity Эффект Когда использовать
error Запись → DLQ Критичные проблемы, обязательные поля
warning Запись проходит, лог Некритичные, best-effort поля
info Только метрики Мониторинг, observability
Запись ──▶ Есть error? ──Да──▶ DLQ
               Нет
           Есть warning? ──Да──▶ Лог + PROD
               Нет
              ──▶ PROD

Дополнительные материалы