Great Expectations на собеседовании Data Engineer

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем спрашивают на собесе DE

Data quality — must-have для production DWH. Great Expectations — популярный фреймворк. На собесе DE: «как ты тестируешь данные», «отличие GE от dbt tests».

Что делает Great Expectations

Идея. Декларативные «ожидания» о данных, проверяемые при загрузке.

expect_column_values_to_not_be_null("user_id")
expect_column_values_to_be_unique("order_id")
expect_column_values_to_be_in_set("status", ["pending", "paid", "shipped", "cancelled"])
expect_column_values_to_be_between("amount", 0, 1_000_000)

При каждом запуске — Pass / Fail. История validation runs хранится. Документация авто-генерируется.

Expectations: типы тестов

Single column.

  • expect_column_values_to_not_be_null
  • expect_column_values_to_be_unique
  • expect_column_values_to_match_regex
  • expect_column_values_to_be_in_set
  • expect_column_values_to_be_between
  • expect_column_value_lengths_to_be_between

Aggregate.

  • expect_column_mean_to_be_between
  • expect_column_sum_to_be_between
  • expect_column_max_to_be_between
  • expect_table_row_count_to_be_between
  • expect_column_values_to_be_unique (на таблице)

Multi-column.

  • expect_column_pair_values_to_be_equal
  • expect_compound_columns_to_be_unique
  • expect_select_column_values_to_be_unique_within_record

Statistical.

  • expect_column_kl_divergence_to_be_less_than (drift detection).
  • expect_column_quantile_values_to_be_between.

В GE сотни expectations. Custom можно писать.

Suite и checkpoint

Expectation Suite — набор expectations для одной таблицы / view.

Checkpoint — конфигурация запуска: какие suites на каких datasets. Запускается из CLI, Python, Airflow.

context.run_checkpoint(checkpoint_name="orders_quality")

Результат: HTML отчёт + JSON results, метрики в data docs.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Интеграция с Airflow и dbt

Airflow. GreatExpectationsOperator запускает checkpoint как task.

ge_check = GreatExpectationsOperator(
    task_id="validate_orders",
    expectation_suite_name="orders.warning",
    data_context_root_dir="/path/to/great_expectations",
    fail_task_on_validation_failure=True
)

dbt. dbt-expectations — пакет, добавляющий GE-style тесты в dbt YAML.

models:
  - name: orders
    columns:
      - name: amount
        tests:
          - dbt_expectations.expect_column_values_to_be_between:
              min_value: 0
              max_value: 1000000

Запускается через dbt test — единая среда.

GE vs dbt tests vs Soda

GE dbt tests Soda
Базовый язык Python + YAML YAML + SQL YAML (SodaCL)
Сложность setup Средняя Низкая Низкая
Custom tests Сложнее SQL макросы YAML + SQL
Data docs Авто HTML Через dbt docs Soda Cloud
Drift detection Есть Нет Есть
ML / statistical Сильно Слабее Средне

Стандартная практика:

  • dbt tests — простые тесты внутри dbt-проекта (uniqueness, not_null, accepted_values).
  • GE — сложные тесты, drift, statistical, на pre-dbt уровне (bronze).
  • Soda — managed cloud-вариант с alerting.

Частые ошибки

Все тесты на gold-уровне. Поздно ловить баги. Тесты на bronze (sanity), silver (uniqueness), gold (бизнес).

Слишком много expectations. 1000 expectations на таблицу — никто не читает. Фокус на критичных.

Не интегрировать с alerting. Test failed — никто не узнал. Slack / PagerDuty.

Не обновлять при schema change. Expectations устарели — false positives.

fail_task_on_validation_failure=False для critical tests. Молчаливо пропускает плохие данные.

Игнорировать data drift. Если distribution изменилось — модель downstream деградирует. Drift expectations.

Связанные темы

FAQ

GE сильно тормозит pipeline?

Зависит от объёма expectations. Лёгкие — миллисекунды. Тяжёлые статистические — десятки секунд. Запускать на сэмпле или партиции.

Можно использовать GE без Airflow?

Да, можно из cron, GitHub Actions, локально для разработки.

Это официальная информация?

Нет. Статья основана на документации Great Expectations 0.18+, dbt-expectations.


Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.