Забота о качестве данных часто кажется малопривлекательной, но, по иронии, именно на нее мы тратим большую часть времени. Возможно, Data Quality — важнейший компонент пайплайна данных, ведь дашборд и аналитика, сгенерированные на основе недостоверных и ненадежных данных, окажутся бесполезными. Команда VK Cloud Solutions перевела статью о том, что такое Data Quality на самом деле и как обеспечивать его на разных уровнях пайплайна.
В чем сложности с Data Quality
У нас нет простых и однозначных формул, чтобы определить, верны ли данные. Подобно заболоченному пруду без притока воды, данные могут быстро «застояться». А корректные вчера станут некорректными через месяц. К счастью, у нас в распоряжении есть фундаментальные приемы и подходы для валидации качества данных. Все дело в поиске аномалий, не соответствующих конкретным требованиям, и наборов записей, противоречащих логичным допущениям в рамках текущих процессов.
Стратегии Data Quality
Данные можно рассматривать на трех уровнях: ETL, бизнес-логики и отчетности.
- Уровень ETL содержит код для приема данных и их перемещения между исходной и целевой системой. Например, из базы данных приложения в хранилище данных.
- Уровень бизнеса занимает промежуточное положение между необработанными данными и финальными моделями данных.
- Уровень отчетности — это дашборды, с которыми работают бизнес-пользователи.
Ниже мы рассмотрим приемы, которые можно использовать на каждом уровне. Для примеров используем PostgreSQL. Мне понадобятся две таблицы: Clicks и Views. В Clicks содержатся данные о пользователях, которые кликнули по ссылке на веб-странице, а в таблице Views — данные о пользователях, которые посетили веб-страницу.
Data Quality на уровне ETL
Первый уровень пайплайна — уровень ETL. У разных компаний из разных отраслей проверки качества данных на этом уровне обычно похожи друг на друга. Их цель — убедиться, что при перемещении из исходной системы в целевую данные не потерялись и не испортились.
Мы проверяем:
- разницу в количестве строк, чтобы выявить данные, которые были неправильно добавлены или потерялись;
- частично загруженные дата-сеты, обычно с большим количеством строк со значением null;
- дублированные записи.
Примеры с использованием SQL
Количество строк:
WITH
source_count as (Select count(*) as total_count from source) ,target_count as (Select count(*) as total_count from target)SELECT
CASE WHEN
(select total_count from source_count) = (select total_count from target_count)
THEN True
ELSE False
END as valid_row_count
FROM
pipe_table_1
В примере выше мы проверяем, совпадает ли количество строк в исходной и целевой системах. В большинстве случаев количество строк должно оставаться одинаковым в обеих таблицах. Для этого нужно проверить, не привели ли преобразования между таблицами к неожиданному изменению этого параметра. К примеру, количество пользователей в приложении должно быть одинаковым и в базе, и в хранилище данных.
Есть ситуации, когда количество строк ожидаемо должно измениться. В этом случае нужно проверять, попадает ли количество строк в ожидаемый диапазон. Кроме того, важно отметить, что здесь используются обобщенные табличные выражения для удобочитаемости оператора SQL.
Проверка результатов
Join
-операции:WITH join_count AS (
SELECT count(*) AS view_count
FROM views
LEFT JOIN clicks ON clicks.view_id = views.id
)
SELECT
CASE
WHEN (SELECT view_count FROM join_count) = count(1)
THEN True
ELSE False
END AS valid_join
FROM
views;
В примере выше мы проверяем, не изменилось ли количество строк в таблице по сравнению с исходной таблицей после операции
left join
. Здесь нужно убедиться, что в таблицах нет повторяющихся ключей — обычно такую проверку выполняет и сама база данных, но не тогда, когда мы имеем дело с производными таблицами или представлениями. Это ограничение не всегда применимо, поскольку в результате некоторых соединений количество строк в объединенной записи может увеличиваться или уменьшаться. В этом случае нужно представлять себе ожидаемый диапазон значений.
Data Quality на уровне бизнес-логики
Следующий уровень пайплайна — уровень бизнес-логики. Обычно проверку качества данных на этом уровне производят после загрузки необработанных или частично преобразованных данных в область промежуточного хранения в хранилище. Нет смысла загружать данные в конечный пункт назначения до таких проверок и инспекции недопустимых строк. Здесь важно убедиться, что фундаментальные понятия бизнес-логики не нарушены и данные имеют смысл с точки зрения бизнеса.
Эти проверки — вторая преграда, не пускающая некорректные данные из уровня ETL. Ведь проверять качество данных на этом уровне по каждому параметру бывает достаточно долго и непрактично.
А на уровне бизнес-логики обычно проверяют, не выходят ли численные показатели за пределы диапазона, заданного бизнес-требованиями.
SELECT
count(*),
year
FROM
views a
JOIN date b on a.date _id = b.date_id
GROUP BY 1,2
HAVING count(*) > [EXPECTED_RANGE];
--------------------------------------------------------
SELECT
count(*),
year,
month
FROM Views a
JOIN date b on a.date _id = b.date_id
GROUP BY 1 2,3
HAVING count(*) > [EXPECTED_RANGE];
Один из приемов — отслеживать изменение метрики или числового показателя за разные периоды времени. В этом примере мы изучаем количество просмотров за разные годы и месяцы.
Мы пытаемся выявить неожиданный рост или падение количества просмотров. Важно также различать ожидаемые и непредвиденные изменения. В нашем примере мы рассматриваем количество просмотров на сайте онлайн-магазина. Одна из ожидаемых тенденций — увеличение количества просмотров в праздничные дни.
SELECT
CASE WHEN
count(a.num_view) >= count(b.num_clicks)
THEN True
ELSE False
END as click_validation
FROM
views a
LEFT JOIN clicks b ON b.click_id = a.click_id
Другая часто встречающаяся проверка на уровне бизнес-логики — соответствие значений определенным границам или бизнес-правилу. В нашем случае количество пользователей, просматривающих страницу, всегда должно быть больше или равно количеству пользователей, которые нажимают на ссылку: невозможно щелкнуть, не открыв сначала страницу. Поскольку такие проверки во многом зависят от бизнес-ограничений, важно правильно оформлять документацию по бизнес-правилам и допущениям в хранилище кода или метаданных.
Data Quality на уровне отчетности
Это последний этап пайплайна, на нем конечные пользователи взаимодействуют с вашими данными. Но это не означает, что дата-инженерам и дата-аналитикам не нужно использовать уровень отчетности для поддержания качества данных.
Один простой прием — постройте график за год, месяц или день и глазами проверьте наличие выбросов и аномалий. Подобные ошибки легко увидеть на графике.
Другой отличный вариант для уровня отчетности — создавать дашборды с метриками и проверками качества. Сначала проверяйте эти дашборды, потом отправляйте данные пользователям.
Пример дашбордов
Заключение
Проверки качества данных нужно максимально автоматизировать. Их следует встраивать в код пайплайна, но так, чтобы его можно было без проблем изменить. В зависимости от критичности данных и валидации можно по-разному настроить результат проверки. Например, при наличии ошибок:
- работа полностью останавливается;
- выводится предупреждение о возникших проблемах;
- записи с ошибками перемещаются в отдельную область;
- обработка данных продолжается.
Разные инструменты, например Trifacta, помогают упростить и автоматизировать проверку качества данных. В некоторых ETL-инструментах, таких как Informatica, реализованы встроенные функции проверки Data Quality. И все же, чтобы ваша проверка имела смысл, важно понимать, как внедрить ее с нуля.
При проектировании пайплайнов данных именно качество данных должно быть той движущей силой, которая больше всего влияет на результаты разработки. Чтобы дата-инженеры могли устранять проблемы и повышать качество данных, им нужно отчетливо представлять себе эти данные. Важно помнить, что за качество не может отвечать один отдел или сотрудник.
В этой статье дан общий обзор темы качества данных, приемов его мониторинга и стратегий по активной работе с данными. Как мы уже упоминали, качество — это критически важный компонент системы по работе с данными. Не жалейте на него времени и ресурсов! Data Quality следует поставить на тот же уровень важности, что и модульное тестирование при разработке программного обеспечения.
Команда VK Cloud Solutions развивает собственные Big-Data-решения. Будем признательны, если вы их протестируете и дадите обратную связь. Для тестирования пользователям при регистрации начисляем 3000 бонусных рублей.
Что еще почитать: