Learning Platform
Глоссарий Troubleshooting
Урок 17.03 · 22 мин
Начальный
Great ExpectationsSodaMonte CarloToolsMonitoring

Инструменты Data Quality

Теория DQ хороша, но в продакшене нужны конкретные инструменты. В этом уроке разберём пять самых популярных в 2026 году: Great Expectations, Soda, dbt tests, Monte Carlo и Anomalo. У каждого свой подход, сильные стороны и use cases.

Junior DE часто думает, что один инструмент покрывает всё. Реальность сложнее: лучшие команды используют 2-3 инструмента, каждый для своей задачи.


Где валидировать и мониторить

Перед выбором инструмента полезно понимать, где в pipeline ставят проверки и что мониторят в production:

  • Где проверять: на ingestion (fail-fast при битых данных от источника), внутри pipeline (тесты после трансформаций — dbt tests, GE), на serving (continuous monitoring готовых витрин для BI/ML).
  • Что мониторить в проде: freshness (когда таблица обновлялась — алерт, если daily-таблица не обновлялась 25h), volume (нет ли резкого падения или скачка числа строк), null-rate (процент NULL в обязательных колонках), schema drift (молчаливые изменения структуры от источника), distribution (статистические аномалии в значениях).
  • Концепция: всё это вместе называется data observability — индустриальная практика 2020-х (по аналогии с application observability), которая делает состояние данных в pipeline видимым в реальном времени.

Это всё про runtime-картину, не про unit-тесты дизайна. Дальше — инструменты, которые помогают это закрывать.


Категории инструментов

Сначала разделим инструменты на категории:

Категории DQ-инструментов
Test frameworks
Observability platforms
Data catalogs

В этом уроке фокус на первой и второй категориях. Каталоги — отдельная тема.


1. Great Expectations (GE)

Что это: open-source Python-фреймворк для тестов данных. Создан в 2018, к 2026 — самый популярный standalone-инструмент.

Концепции:

  • Expectation — одна проверка. Например, “колонка amount всегда между 0 и 100000”.
  • Expectation Suite — набор expectations для одной таблицы.
  • Checkpoint — запуск suite на данных.
  • Data Docs — генерируемая HTML-документация результатов.

Пример:

import great_expectations as ge

# Загружаем данные
df = ge.read_csv("orders.csv")

# Применяем expectations
df.expect_column_values_to_not_be_null("order_id")
df.expect_column_values_to_be_unique("order_id")
df.expect_column_values_to_be_between("amount", 0, 100000)
df.expect_column_values_to_match_regex("email", r"^[\w.-]+@[\w.-]+\.\w+$")
df.expect_column_values_to_be_in_set("status", ["pending", "paid", "cancelled"])

# Получаем результаты
result = df.validate()
print(result["statistics"])

Плюсы:

  • 50+ built-in expectations.
  • Богатая Data Docs (HTML-отчёты).
  • Поддержка Spark, Pandas, SQL (через SQLAlchemy).
  • Open-source, бесплатный.

Минусы:

  • Сложная конфигурация (много YAML).
  • Steep learning curve.
  • Не для real-time мониторинга.

Когда выбирать: standalone-команды без dbt, кому нужен мощный test framework независимо от стека.


2. Soda

Что это: config-driven test framework. Soda появился позже GE и фокусируется на простоте.

Концепции:

  • Soda Checks Language (SodaCL) — YAML-синтаксис для проверок.
  • Scan — запуск проверок.
  • Soda Cloud — managed-платформа с дашбордами (платно).

Пример SodaCL:

# checks/orders.yml
checks for orders:
  - row_count > 0
  - missing_count(order_id) = 0
  - duplicate_count(order_id) = 0
  - invalid_count(status) = 0:
      valid values: [pending, paid, cancelled]
  - max(amount) < 100000
  - failed rows:
      name: Suspicious zero orders
      fail query: |
        SELECT * FROM orders WHERE amount = 0 AND status = 'paid'

Запуск:

soda scan -d snowflake_warehouse -c configuration.yml checks/orders.yml

Плюсы:

  • Простой YAML-синтаксис, легко читать.
  • SQL-first, прямо ходит в DWH.
  • Хорошая Slack/Teams интеграция.
  • Free-tier для open-source.

Минусы:

  • Меньше fancy features, чем GE.
  • Cloud-версия платная.

Когда выбирать: команды, которые хотят простой config-driven подход, especially для dbt-stack.


3. dbt tests

Что это: встроенный test framework в dbt. См. модуль 13 для деталей.

Концепции:

  • Schema tests — декларативные в YAML (unique, not_null, accepted_values, relationships).
  • Data tests — произвольный SQL в папке tests/.
  • Generic tests — макросы для переиспользуемых тестов.
  • Пакеты: dbt_expectations (порт Great Expectations) и dbt_utils.

Пример:

# models/_schema.yml
models:
  - name: stg_orders
    columns:
      - name: order_id
        tests:
          - unique
          - not_null
      - name: amount
        tests:
          - dbt_expectations.expect_column_values_to_be_between:
              min_value: 0
              max_value: 100000
      - name: status
        tests:
          - accepted_values:
              values: ['pending', 'paid', 'cancelled']

Плюсы:

  • Уже в твоём dbt-проекте, ничего ставить не надо.
  • Тесты рядом с моделями — легко найти.
  • Интеграция с pipeline: dbt test падает -> CI/CD валится.
  • dbt_expectations покрывает 80% случаев GE.

Минусы:

  • Только для dbt-проектов.
  • Не для real-time мониторинга.

Когда выбирать: если уже используешь dbt — обязательно. Это must-have, не нужно отдельных инструментов.

dbt schema tests: unique, not_null, accepted_values, relationships — полный справочник синтаксиса

4. Monte Carlo

Что это: commercial платформа data observability. Pioneer концепта, лидер рынка.

Концепции:

  • Lineage-aware monitoring — знает граф таблиц, понимает upstream/downstream impact.
  • ML anomaly detection — учит модели на исторических метриках, детектит аномалии без явных правил.
  • Incident management — workflow для DQ-инцидентов.
  • Field-level lineage — лineage до колонок.

Пример: Monte Carlo подключается к DWH и автоматически:

  • Отслеживает freshness каждой таблицы.
  • Учит модель распределения volume и distribution.
  • Алертит при аномалиях через Slack/PagerDuty.
  • Показывает lineage и impact analysis.

Плюсы:

  • Полностью managed, минимум настройки.
  • ML-based, не нужно явно описывать пороги.
  • Богатый UI, прекрасный для не-инженеров.
  • Lineage из коробки.

Минусы:

  • Дорого: от 50000 USD/год для серьёзных команд.
  • Vendor lock-in.
  • Меньше контроля над логикой проверок.

Когда выбирать: компании с критичными бизнес-данными и бюджетом. Финтех, e-commerce масштаба, enterprise.


5. Anomalo

Что это: ещё один observability player, фокус на ML-обнаружении.

Концепции:

  • No-code DQ rules — UI для создания правил без SQL.
  • ML-driven anomaly detection — аналог Monte Carlo.
  • Root cause analysis — помогает понять, почему случилась аномалия.

Чем отличается от Monte Carlo:

  • Anomalo сильнее в no-code UI.
  • Monte Carlo сильнее в enterprise-фичах и lineage.
  • Цены сопоставимые.

Когда выбирать: компании с no-code mindset, аналитики хотят настраивать сами.


Сравнительная таблица

Сравнение инструментов

По use case:

  • Pre-load validation (CI/CD): GE, Soda, dbt tests.
  • Pipeline tests (после трансформаций): dbt tests, GE.
  • Production monitoring (24/7): Monte Carlo, Anomalo, Soda Cloud.
  • Lineage и impact analysis: Monte Carlo, DataHub.

Стек для разных команд

Стартап (5 DE):

  • dbt tests (built-in)
  • dbt-elementary (для собирания metadata)
  • Slack-bot для алертов
  • Cost: бесплатно

Mid-size (30 DE):

  • dbt tests + dbt_expectations
  • Soda Core (open-source) для не-dbt-таблиц
  • dbt-elementary + Looker дашборд
  • Cost: ~5000 USD/мес инфраструктура

Enterprise (100+ DE):

  • dbt tests + dbt_expectations
  • Monte Carlo для observability
  • DataHub для каталога
  • Cost: 50000-200000 USD/год

DIY vs Commercial

Когда DIY достаточен:

  • Команда маленькая (меньше 10 DE).
  • Бюджет ограничен.
  • Готовы писать собственный код для observability.
  • Бизнес-данные не критичны на уровне SEC-reporting.

Когда нужен commercial:

  • Большая команда, нужна unified-платформа.
  • Критичные бизнес-данные (revenue, finance, compliance).
  • Хочется быстро запустить observability без месяцев настройки.
  • ML-driven anomaly detection ценнее, чем явные правила.

Real example: dbt + Soda стек

Типичный стек 2026:

1. Ingestion (Fivetran/Airbyte)
   ↓ raw data в DWH
   
2. dbt transforms

   ↓ dbt tests запускают сразу после dbt run:
   ↓   - schema tests (unique, not_null)
   ↓   - generic tests (dbt_expectations)
   ↓   - data tests (custom SQL)

3. Mart tables

   ↓ Soda Cloud мониторит непрерывно:
   ↓   - freshness checks
   ↓   - volume tracking
   ↓   - anomaly detection
   ↓   - alerts в Slack

4. BI tools (Looker, Tableau)

Это покрывает test-time validation (dbt) и runtime monitoring (Soda). Часто бизнес-команды этого достаточно.


Что учить junior DE

Базовый минимум для 2026 года:

  1. dbt tests — обязательно, must-have в любом dbt-проекте.
  2. dbt_expectations пакет — добавляет 50+ тестов в dbt.
  3. dbt-elementary — для базового мониторинга.
  4. Slack-webhook алерты — простейшая нотификация.

Если работаешь в компании с big budget — попроси доступ к Monte Carlo / Soda Cloud для практики.


Тренды 2026

  • AI-powered DQ: автоматическое предложение тестов на основе профайлинга данных.
  • dbt-mesh: распределённые dbt-проекты, observability работает между ними.
  • Open lineage standard: стандарт для обмена lineage между инструментами.
  • DQ at edge: валидация прямо в Kafka-producers через Schema Registry.
Kafka Schema Registry: централизованная schema validation для стримингового DQ на edge

Попробуй сам

Установи Great Expectations в свой Python-проект: pip install great-expectations. Запусти great_expectations init — создаст шаблон проекта. Подключись к sample dataset (можно к локальному CSV). Создай несколько expectations: not_null, unique, between. Сгенерируй Data Docs через great_expectations docs build — посмотри HTML-отчёт. Это лучший способ почувствовать GE. Альтернатива: установи Soda Core (pip install soda-core) и попробуй простой scan через SodaCL — увидишь разницу подходов.

Проверка знанийKnowledge check
Какие инструменты Data Quality составляют типичный стек 2026 для команды среднего размера, и почему обычно используется не один, а 2-3 разных инструмента?
ОтветAnswer
Типичный стек: dbt tests (built-in для dbt-моделей) + dbt_expectations пакет (расширенные тесты) + dbt-elementary (собирает run metadata) + Soda Core или Monte Carlo (continuous monitoring). Иногда добавляется Great Expectations для не-dbt-таблиц. Почему не один инструмент? Каждый закрывает свою задачу. dbt tests — для test-time validation в pipeline (запускается в CI/CD после dbt run), идеально для тестов схемы и бизнес-инвариантов. Soda/Monte Carlo — для production monitoring 24/7 (continuous freshness, volume, anomaly), для алертинга через Slack/PagerDuty. dbt-elementary — для собирания метаданных в DWH, чтобы строить дашборды по test history. Каталоги (DataHub) — для документации и lineage. Один инструмент не закрывает все use cases: dbt tests не делает continuous monitoring, Monte Carlo не такой удобный для CI/CD, Great Expectations плохо интегрируется с dbt без обёрток. Best practice: dbt tests как foundation, плюс observability-инструмент для production. Это разделение test-time vs run-time проверок.

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

Результат: 0 из 0
Концептуальный
Вопрос 1 из 6. Что такое Great Expectations?

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

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

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

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