Как обеспечивать качество данных и какие инструменты и процессы использовать
Что проверяют
Есть ли у вас система, а не набор разовых проверок: какие измерения качества вы контролируете, на каком этапе конвейера и что происходит, когда проверка упала. Следом обычно просят пример инцидента с плохими данными и как его поймали.
Как отвечать
Начните с измерений, по которым качество вообще можно оценить:
- полнота: доля
NULLв обязательных полях, число строк относительно ожидаемого; - уникальность: нет дублей по бизнес-ключу;
- валидность: значения в допустимых диапазонах и справочниках, типы и форматы;
- согласованность: внешние ключи находят свою запись, суммы сходятся между слоями;
- свежесть: данные обновились в срок и не отстают от источника.
Дальше расставьте проверки по конвейеру. На входе схема и контракт с источником: pydantic для записей, pandera для датафреймов, договорённость о формате с командой, которая данные производит. В трансформациях тесты dbt: unique, not_null, accepted_values, relationships, плюс dbt source freshness. Для Spark есть Deequ, для остального Great Expectations или Soda. Перед публикацией витрины удобен шаблон write, audit, publish: данные пишутся в промежуточную таблицу, проверяются и только потом подменяют рабочую.
Процесс важнее инструмента. У каждого набора данных есть владелец, у проверок есть уровни: блокирующая останавливает загрузку, предупреждающая шлёт алерт. Упавшие строки уходят в карантинную таблицу, а не выбрасываются молча.
Для ML добавьте мониторинг распределений признаков (PSI, тест Колмогорова-Смирнова), контроль расхождения между обучением и инференсом и проверку на утечку целевой переменной.
Где спотыкаются
Перечисляют инструменты без процесса. Great Expectations, отчёты которого никто не смотрит и алерты которого никому не приходят, качество не обеспечивает.
Называют ETL-платформы инструментами качества. Они переносят и трансформируют данные, а проверки в них нужно отдельно строить.
Проверяют только технику: нет NULL, типы совпали. При этом выручка за день упала в десять раз из-за потерянной партиции, и ни один тест этого не заметил. Нужны проверки объёма и аномалий.