Инженерный подход к качеству данных в data lake | OTUS

Инженерный подход к качеству данных в data lake

Data_Engineer_Deep_15.8-5020-c2e5a5.png

Что такое качество данных? Это что-то абсолютное или относительное для каждой задачи? В чём измерять качество данных?

Качество имеет несколько определений: — обладание определённым свойством (схоже с «характеристикой»); — стандарт чего-то, сравнимый с другими объектами того же типа, степень отличия.

Для разных ролей, вовлечённых в процесс разработки и использования аналитических платформ, важны разные определения качества: 1. Для data scientists важно, чтобы данные обладали свойством описать исследуемый феномен для разработки предсказывающей или классифицирующей модели; в такой постановке задач важны атрибуты с высокой информационной ценностью, и, например, абсолютная полнота данных уже не так важна. 2. Для software/data engineers важно второе определение, оно обеспечивает знание о том что данные «не стали хуже» во время загрузки и обработки в платформе; также для инженеров важна гранулярная измеримость качества, возможность рассуждать о качестве отдельной записи, партиции, датасета, чтобы информировать о плохом качестве как можно раньше.

Будучи инженером и архитектором хранилищ данных и data lake, в этой заметке я изложу свой подход к инженерной стороне качества данных.

Архитектурный концепт data lake

Ключевое свойство класса решений на data lake — это использование подхода schema-on-read: мы принимаем и храним все данные, и рассуждаем об их структуре только в момент чтения для конкретной задачи. Для реализации schema-on-read чаще всего используют следующую архитектуру, в очень общем виде:

1.Слой базовых или сырых данных: данные доставляются сюда в таком виде, в каком их выдал источник, например, если источник передаёт CSV-файл, то в слое сырых данных этот файл будет лежать в формате CSV.

2.Слой структурированных или курированных (curated) данных: в этом слое к данным применяют структуру, которую выяснили/предположили/согласовали инженеры, в нашем примере с CSV-файлом мы создадим его копию в формате Avro, и эта копия будет хранится в слое структурированных данных.

3.Слой дата продуктов/витрин/аналитических датасетов: в этом слое хранятся данные, преобразованные для решения конкретной бизнес-задачи, говоря языком разработчиков ПО, «здесь появляется бизнес-логика»; возвращаясь к нашему примеру, файл Avro является списком взаимодействий клиентов, и дата продуктом могут быть датасеты в формате ORC, представляющий граф взаимодействий клиентов.

data_quality_approach___architecture-20219-7c9b56.png

Это очень абстрактный архитектурный концепт, он явно не описывает различные пограничные случаи, например, когда данные от источника сразу поступают в структурированном виде (Avro выгрузка из Apache Kafka) или работу с бинарными данными, но детальный разбор этого концепта лежит за рамками данной заметки, он служит нам для иллюстрации проблем и задач, связанных с качеством данных.

Качество на входе, качество на выходе

Разделим задачи качества на две части:

1. Техническое качество данных

Техническое качество данных — это соответствие данных заявленной структуре; если расписать эту формулировку более практическим языком, то это соответствие данных той схеме, которая подразумевается для них в какой-то момент, плюс полнота данных по отношению к предыдущему этапе их обработки. Сюда же мы отнесём сохранность данных при передаче, если такую требуется контролировать.

С точки зрения основных задач аналитической платформы, техническое качество — это качество на входе, то есть до того как мы начали интегрировать и агрегировать данные соотнося их с бизнес-логикой. В применении к реляционным СУБД это будет означать, что данные соответствуют определениям типов колонок в таблицах и правилам ссылочной целостности (PK, FK).

Такое качество считается и контролируется без знания предметной области, всё, что нам нужно знать — это какая схема нужна для конкретного датасета, причём, так как это data lake, нам подойдет даже обоснованное (на примере тех данных что мы уже собрали) предположение – сырые данные у нас остаются, и в худшем случае нам нужно будет пересчитать какие-то результаты.

2. Бизнес-качество данных

Нам удалось загрузить данные без потерь, они представлены в удобном формате, где не потерялось ни одно значение ни в одной колонке, теперь мы хотим извлекать из данных бизнес-ценность. Как я писал выше, в этом случае нам важна применимость данных для конкретной задачи из нашей предметной области, но также важна и достоверность данных с точки зрения нашей предметной области.

Примеры: — у нас есть клиенты и договора обслуживания, у нас может быть правило, что у клиента всегда есть как минимум один договор обслуживания; — у клиента должен быть определенный статус для определённых видов продуктов; — клиент должен существовать в нашем клиентском каталоге (задача интеграции данных); — и многие другие.

Я привожу примеры из бизнес-процессов, и по аналогии мы называем такие условия достоверности бизнес-правилами. Таким образом, бизнес качество данных – это соответствие данных заданному множеству бизнес-правил. С точки зрения создателей data lake бизнес качество данных — это качество на выходе.

Контроль и управление качеством данных в data lake

Предлагаю вашему вниманию следующий подход к контролю и управлению качеством данных:

В слое сырых данных

Согласно принципу schema-on-read мы не форсируем свою схему при записи в data lake (хотя мы, конечно, не откажемся от структурированных данных сразу от источника). Поэтому в слое сырых данных мы можем сделать только следующие проверки: 1. Базовая проверка по формату: нужное количество разделителей в CSV, наличие схемы в Avro или Parquet. 2. Сверка с техническими метаданными, если такие поставляет источник: проверка контрольных сумм, числа строк, и прочее.

По моему опыту базовые проверки по формату стоит использовать либо в самом начале жизни платформы, либо по отношению к очень враждебным источникам (мы о них мало что знаем, они вносят изменения в системы выгрузки о которых мы не знаем) — помните, каждая проверка это использование ресурсов вашей платформы, которые даже в самых крупных компаниях не бесконечны. Оптимально делать все проверки отключаемыми (и запускаемыми для прошлых доставок).

В слое структурированных данных

Напомню, что согласно общей концепции мы берём данные из сырого слоя, парсим их, и кладём версию с навязанной схемой в слой структурированных данных. В момент парсинга могут возникнуть атрибуты или целые записи, которые не могут быть распарсены: атрибут не соответствует типу, в строке недостаточное количество колонок/разделителей и так далее. Наша задача – выделить такие атрибуты и записи, и указать, почему они не прошли проверку.

К счастью, такая задача легко автоматизируема. Чаще всего один источник оперирует каким-то одним/двумя форматами для выгрузок, и нам достаточно реализовать логику парсинга этих форматов, управляемую параметрами или метаданными джоба. По моему опыту, в любом крупном data lake нужен парсер CSV, JSON и XML.

Пример такого джоба можно посмотреть тут. Он принимает на вход JSON-файл со схемой, разбирает CSV-датасет и формирует два результата: основной, куда попадают строчки, которые удалось привести к нужным типам, и INVALID, куда попадают строки, непрошедшие парсинг, с указанием на колонку и атрибут, которые не удалось привести к заданному типу.

data_quality_approach___curation-20219-47dfcd.png

Как реагировать на появление записей, которые не удалось структурировать? Это проектный вопрос, который решается в каждом конкретном случае: – для каких-то источников появление таких строк может быть признаком того, что наша логика парсинга устарела, и источник провёл изменения – тогда нам нужно обновить нашу схему и повторить парсинг (повторная выгрузка не требуется); – для других источников это может быть ошибка на стороне источника, и нам потребуется провести вторую выгрузку через сырой и структурированный слой.

В самом начале жизни такой платформы имеет смысл добавить счетчики «плохих» данных в системы мониторинга, чтобы операционный персонал имел возможность быстрой диагностики таких проблем в случае жалоб пользователей.

В слое дата-продуктов

Дата-продукты – это отражение предметной области и бизнес-логики наших пользователей, поэтому здесь мы контролируем бизнес качество данных.

(В слое дата продуктов чаще всего не контролируют техническое качество данных, это делается средствами тестирования аналитических джобов).

Проще всего думать о каждом бизнес-правиле, как об отчёте, он может быть агрегированным (количество клиентов Х не удовлетворяют бизнес правилу М), может быть детальным (все клиенты, которые не удовлетворяют правилу М), партицированным (все клиенты в партиции О, которые не удовлетворяют правилу М) или накопленным итогом.

Критерии успеха правил бизнес качества: они прозрачны для специалистов в предметной области, ими затребованы (или согласованы), и адресуют существующую проблему (помните о потреблении ресурсов на каждый тест качества данных).

Чаще всего отчёты о бизнес-качестве собраны в отдельную витрину/проект и подключены к системе отображения отчётности, а также чаще всего материализованы, чтобы была возможность сопоставить их с версиями до правок в логике (часто в слое дата-продуктов данные могут перезаписываться).

Итог

В этой заметке вы ознакомились с классификацией требований по качеству данных для инженеров, работающих с data lake, и подходом к их реализации: – техническое качество данных рассматривается как соответствие схеме/формату и реализуется в процессе структурирования данных; – бизнес-качество данных рассматривается как соответствие бизнес-правилам и реализуется как система отчетов в процессе создания дата-продуктов.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто