dq_check

DBHose.dq_check(table: str | None = None)

Выполняет проверки качества данных (Data Quality) для промежуточной таблицы.

Описание:

Метод выполняет комплексную проверку качества данных в промежуточной таблице, используя набор предопределенных тестов из DQCheck. Проверки могут включать сравнение с исходной таблицей или самостоятельную валидацию данных.

Предупреждение

Проверки, требующие сравнения с таблицей-источником работают только для полного копирования таблицы.

Сигнатура:

def dq_check(self, table: str | None = None) -> None:
    """Data quality checker."""

Параметры:

table - Имя исходной таблицы для сравнения. Обязателен для проверок, требующих сравнения с источником (need_source_table=True).

Типы проверок:

Метод обрабатывает четыре типа проверок:

Типы проверок DQ

Тип

need_source_table

generate_queryes

Описание

Сравнение агрегатов

✅ Да

❌ Нет

Сравнение агрегированных значений (например, total)

Сравнение по колонкам

✅ Да

✅ Да

Детальное сравнение по колонкам (например, sum)

Проверка по колонкам

❌ Нет

✅ Да

Проверка каждой колонки отдельно (например, future)

Простая проверка

❌ Нет

❌ Нет

Одна проверка на всю таблицу (например, empty)

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

Базовый пример - проверка без сравнения
from dbhose_airflow import DBHose, DQCheck

dbhose = DBHose(
    table_dest="public.users",
    connection_dest="postgres_target",
    dq_skip_check=["sum", "total"],  # Пропустить сложные проверки
)
dbhose.create_temp()
# ... загрузка данных ...
# Проверка качества данных (без сравнения с источником)
dbhose.dq_check(table=None)
# Выполняются проверки: empty, uniq, future, infinity, nan
# Проверки sum и total пропускаются (в dq_skip_check)
Пример с полным сравнением таблиц
dbhose = DBHose(
    table_dest="analytics.events",
    connection_dest="clickhouse_analytics",
    connection_src="postgres_events",
    dq_skip_check=[],  # Все проверки
)
dbhose.create_temp()
# ... загрузка данных из source в temp ...
# Полная проверка с сравнением
dbhose.dq_check(table="postgres_events.source_events")
# Выполняются ВСЕ проверки, включая сравнение

Логирование:

Метод детально логирует процесс проверок:

INFO:root:╔══════════════════════════════════════════════════════════╗
INFO:root:║                 Start Data Quality tests                 ║
INFO:root:╚══════════════════════════════════════════════════════════╝
INFO:root:╔══════════════════════════════════════════════════════════╗
INFO:root:║           Table not empty test skipped by user           ║
INFO:root:╚══════════════════════════════════════════════════════════╝
INFO:root:╔══════════════════════════════════════════════════════════╗
INFO:root:║          Check column amount test Pass                   ║
INFO:root:╚══════════════════════════════════════════════════════════╝
INFO:root:╔══════════════════════════════════════════════════════════╗
INFO:root:║             Table not empty test Pass                    ║
INFO:root:╚══════════════════════════════════════════════════════════╝
INFO:root:╔══════════════════════════════════════════════════════════╗
INFO:root:║    All Data Quality tests have been completed            ║
INFO:root:╚══════════════════════════════════════════════════════════╝

Обработка ошибок:

Метод выбрасывает исключения при обнаружении проблем:

Типы ошибок

Исключение

Условие возникновения

ValueError

Значения в источниках не совпадают

ValueError

Найдены проблемные строки (NaN, будущие даты и т.д.)

Исключения СУБД

Ошибки выполнения SQL запросов

Производительность:

Предупреждение

Некоторые проверки могут быть ресурсоемкими:

  • sum: Суммирование всех числовых колонок

  • total: Подсчет всех строк

  • uniq: Проверка уникальности (может использовать временные таблицы)

Для больших таблиц (> 1 млн строк) рекомендуется выполнять проверки в непиковое время

См. также:

  • DQCheck - Объект перечислений DQCheck