В современных компаниях генерируемые и собираемые объемы данных растут с поразительной скоростью, создавая необходимость в их систематизации и управлении. Каталоги данных становятся частью информационных систем, предоставляя организациям удобный и эффективный инструмент для хранения, доступа и управления различными типами данных.
Каталог данных — это центральное хранилище информации о структуре, свойствах и отношении между данными. Он позволяет различным пользователям легко находить, понимать и использовать данные для принятия решений и выполнения задач, и будет полезен аналитикам данных, бизнес-аналитикам, специалистам по DWH и управлению данными.
Необходимость внедрения Data Catalog зависит от размера компании и сложности бизнеса. Крупные компании предпочитают внедрить какое-либо дорогостоящее вендорское ПО (список можно найти здесь), или разработать свое решение (как, например, это сделали в Магните и Тинькофф).
Ну а если у вас нет ресурсов ни на то, ни на другое, но вы уже прочувствовали всю боль “плохих” данные, сложность ведения документации в Confluence, испытали проблемы с пониманием, какие вообще данные у вас есть, можно начать с open-source проектов.
Наиболее популярные open-source инструменты Data Catalog:
Требования, которым должен соответствовать каталог данных, могут различаться от компании к компании, но можно выделить несколько основных:
автоматическое обнаружение наборов данных из различных источников;
понятный пользовательский интерфейс;
визуализация data lineage;
возможность поиска по ключевым словам, бизнес-терминам;
отображение структуры данных;
отображение data owner;
возможность интеграции с другими инструментами data management (airflow, great-expectations, dbt и т.д.);
управление доступом.
Welcome to DataHub!
Развернутая архитектура DataHub представлена ниже:
![Изображение взято с сайта https://datahubproject.io/ Изображение взято с сайта https://datahubproject.io/](https://habrastorage.org/getpro/habr/upload_files/039/47c/781/03947c7814481b1c3957fafafb8e1fe7.png)
DataHub имеет гибкую архитектуру приема метаданных, которая обеспечивает возможность поддерживать push и pull модели интеграции.
Pull-based интеграция обеспечивается за счет расширяемой библиотеки Python для извлечения метаданных из внешних систем (Postgres, Snowflake, MySQL и т.д.).
Push-based позволяет обновлять метаданные в момент их изменения (например, AirFlow, Great Expectations). Мы можем передать изменения с помощью Kafka, REST или эмиттера Python.
Метаданные поступают на так называемый уровень обслуживания. Центральный компонент этого уровня — служба метаданных.
![Изображение взято с сайта https://datahubproject.io/ Изображение взято с сайта https://datahubproject.io/](https://habrastorage.org/getpro/habr/upload_files/3da/4cd/419/3da4cd419827ba3d360ec5d406126938.png)
Служба метаданных предоставляет API REST и API GraphQL для выполнения операций с метаданными. Запросы полнотекстового и расширенного поиска отправляются в поисковый индекс, а сложные графовые запросы, как, например, lineage — в индекс графа.
Любое изменение метаданных фиксируется в постоянном хранилище. Событие об этом поступает в журнал Metadata Change Log (Kafka), который создает служба метаданных. Поток этих событий — общедоступный API, на который могут подписаться внешние системы, что позволяет реагировать на изменения в метаданных (например, путем уведомлений в Slack).
Metadata Change Log используется заданием Spring, для внесения соответствующих изменений в графовый и поисковой индексы.
Настройка DataHub
Развернуть DataHub не составляет труда, достаточно установить необходимые библиотеки:
pip install ‘acryl-datahub’
и развернуть экземпляр DataHub в Docker:
datahub docker quickstart
Доступ к интерфейсу можно получить через браузер (http://localhost:9002).
![](https://habrastorage.org/getpro/habr/upload_files/3ab/ec7/4c3/3abec74c3ac9f7b13770bffbe2b80baa.png)
По умолчанию создается root пользователь datahub с паролем datahub. Способ смены пользователя по умолчанию зависит от того, как развернут DataHub. Подробнее об этом можно прочитать здесь.
О поддержке концепции Data Mesh
Data Mesh — это децентрализованный подход к управлению данными. Данные хранятся в разных доменах и управляются экспертами в предметной области. При этом, данные должны быть общедоступны.
DataHub позволяет командам отображать их группы активов данных в домены (Domains) — категории верхнего уровня, например, все данные, принадлежащие организации продаж.
Также, команды или бизнес-группы могут связать свои данные со стандартными отраслевыми бизнес-терминами с помощью бизнес-глоссария (Business Glossary).
Рассмотрим эти концепции на примере.
P.S. Пример отражает мое понимание, и если я где-то не прав, прошу меня поправить)
Допустим, мы хотим создать домен Финансовые операции. В верхнем углу справа видим вкладку Govern:
![](https://habrastorage.org/getpro/habr/upload_files/3ad/15f/261/3ad15f2618bb4a3bc931b0bdef255950.png)
Для создания домена нажимаем + New Domain
:
![](https://habrastorage.org/getpro/habr/upload_files/990/81d/567/99081d567f5aa6cfd8c857478a180884.png)
Добавляем некоторое описание нашему домену и сохраняем:
![](https://habrastorage.org/getpro/habr/upload_files/bda/c5f/c3f/bdac5fc3fae2c467e77b60ff7df5771e.png)
К домену мы можем добавить некоторые продукты данных. Обычно название соответствует логической цели продукта данных, например, "Кредитные операции", "Платежные операции" и т.д., и также привязывается к какому-либо активу или набору активов данных:
![](https://habrastorage.org/getpro/habr/upload_files/a6e/439/907/a6e4399079efe450d827e50d2b509c72.png)
Далее мы хотим дополнить наше понимание данных и определить группу бизнес-терминов, которая относится к нашему домену. Идем на вкладу Glossary:
![](https://habrastorage.org/getpro/habr/upload_files/df5/05a/17c/df505a17c603bbace66518fdce51510d.png)
Давайте создадим группу терминов Финансы и добавим в эту группу несколько других терминов:
![](https://habrastorage.org/getpro/habr/upload_files/b8c/e84/841/b8ce84841df1c01308279591e84d5b02.png)
Термины можно перемещать в другие родительские группы, связывать несколько терминов глоссария с помощью отношений наследования и разбиения термина на подтермины.
Создадим еще несколько терминов и свяжем их между собой:
![](https://habrastorage.org/getpro/habr/upload_files/da7/b6c/d53/da7b6cd53b462a57613b4d1a89984a0e.png)
Можем убедиться, что подтермины правильно отображают родительский термин:
![](https://habrastorage.org/getpro/habr/upload_files/b38/00a/485/b3800a485bb3cad8fbc8ee3a293d1d53.png)
Надо заметить, что создание бизнес-глоссария и доменов требует разработки руководящих принципов, которым могли бы следовать команды, управляющие данными, чтобы использовать концепции метаданных одинаково.
В целом, набор концепций методанных, предоставляемый DataHub является хорошей отправной точкой и позволяет создавать комплексные модели данных.
Теперь мы можем легко связать наш актив данных с созданным доменом и бизнес-терминами.
Добавление источника данных
Здесь нет ничего сложного, DataHub поддерживает множество интеграций из коробки. На вкладке Ingestion можем увидеть доступные источники приема данных:
![](https://habrastorage.org/getpro/habr/upload_files/1f7/f9c/ff7/1f7f9cff7e468fceaf98f5bc26dae7aa.png)
Также мы можем добавлять метаданные с помощью рецепта — это основной файл конфигурации, который сообщает сценариям приема, откуда извлекать данные и куда их помещать.
Давайте развернем локальную базу данных Postgres
с небольшим набором данных (отсюда), и подключим ее в DataHub. Клонировать репозиторий здесь.
docker compose -f "simple-postgres-container/docker-compose.yaml" up -d --build
Наша база данных доступна по адресу localhost:5432
. Теперь нам понадобится приконнектить наш контейнер к сети datahub_network
и узнать его IPAddress
(иначе мне не удалось подключиться):
docker network connect datahub_network postgresdb
docker inspect -f '{{ .NetworkSettings.Networks.datahub_network.IPAddress }}' postgresdb
Выбираем источник данных Postgres
и выполняем шаги по подключению:
![](https://habrastorage.org/getpro/habr/upload_files/4c7/383/434/4c738343483cf9853a2a85000a234c3c.png)
Наша база данных успешно подключилась:
![](https://habrastorage.org/getpro/habr/upload_files/e2c/f62/8f4/e2cf628f449818ea565d6a60bc80f849.png)
И если мы вернемся на стартовую страничку, увидим, что к нашим данным добавилась информация о платформе:
![](https://habrastorage.org/getpro/habr/upload_files/8d6/8ab/f1f/8d68abf1f33424001d3d702366d0f4b9.png)
Теперь мы можем перейти к нашей табличке и связать с ней домен, пользователя, ответственного за этот актив, добавить термины, тэги и документацию:
![](https://habrastorage.org/getpro/habr/upload_files/ca3/00f/233/ca300f2330eba308fbab9ea1e48bd438.png)
Надо заметить, что на данный момент один актив данных может принадлежать только одному домену.
Также DataHub поддерживает установку тэгов — это неофициальные, свободно контролируемые ярлыки, которые служат для поиска и обнаружения данных, и призваны упростить маркировку данных без необходимости связывать их с более широким бизнес-глоссарием.
Заключение
Каталог данных — это отличный инструмент для решения проблем, связанных с обнаружением, понятностью и использованием данных. Данные должны быть хорошо задокументированы, чтобы показать, кто несет ответственность за их авторство, подробное описание, управление и качество.
DataHub отличная отправная точка для внедрения каталога данных в компании, с гибким функционалом и возможностью его расширения под свои потребности.
В следующей части погорим немного о политиках доступа, data lineage, и о том, как можно отслеживать изменение метаданных на платформе)
UPD Как справедливо заметили в комментарии, простота деплоя DataHub относится именнно к локальному развертыванию с помощью Docker. Легко поиграть, попробовать, что это такое. В боевой среде зоопарк компонентов это скорее минус DataHub, потому что требует значительных усилий для обслуживания и поддержания отказоустойчивости платформы.