Разработка функционала загрузки данных для аналитики в кластер ClickHouse из разнородных источников с фоновой дедупликацией данных
Проблема:
В рамках проекта требовалось организовать централизованную загрузку данных для аналитики из нескольких источников в единую систему хранения для одного из крупнейших медиаагентств, входящее в ТОП-10 рейтинга АКАР. Основной проблемой было отсутствие унифицированного подхода к обработке файлов разных форматов, а также необходимость исключить дублирование данных при их поступлении из различных каналов.
Решение:
Было принято решение построить единый конвейер загрузки данных с предварительным приведением всех входящих файлов к формату CSV для последующей пакетной загрузки в таблицы ClickHouse.
Дано:
Данные для загрузки должны попадать в ClickHouse из 3-х источников:
Так как данные различных источников могут дублировать друг друга, реализовали дедупликацию данных через движок ReplacingMergeTree с определением ключевых полей для каждой таблицы.
Как работает система
На первом этапе XLSX файлы преобразуются в формат CSV. Нестандартные XLSX обрабатываются напрямую из XML структуры внутри ZIP архива, стандартные XLSX конвертируются в CSV с использованием xlsx2csv. Далее обработчик CSV файлов определяет по метаданным необходимый класс импортера и инициирует задачу на загрузку файла.
Класс импортера выполняет сопоставление обязательных полей, синхронизацию колонок таблицы и файла, приводит данные к нужному формату, добавляет служебные поля и выполняет пакетный импорт данных в кластер ClickHouse.
Для реализации конвейерной обработки процесс загрузки был разделен на независимые микросервисы, работающие в Docker контейнерах. На каждом этапе выполняются проверки данных, форматов и корректности обработки. В случае ошибок информация отправляется в Telegram-каналы администраторов и в логи для оперативного реагирования и исправления.
В результате реализации проекта компания получила единый инструмент для загрузки и обработки данных, что обеспечило значительное ускорение работы аналитического отдела, снижение количества ошибок при обработке файлов и повышение общей эффективности работы с данными.
Инфраструктура для эксплуатации коннекторов запущена в Yandex Cloud. Для исполнения задач по расписанию и логирования результатов используется автоматизация в Jenkins. В качестве базы данных применяется решение Yandex Cloud - Yandex Managed Service for ClickHouse. Для работы с сетевой инфраструктурой, виртуальными машинами и управляемыми базами данных реализованы скрипты автоматизации Terraform и Ansible.
Результат
В результате реализации проекта компания получила единый инструмент для загрузки и обработки данных, что обеспечило значительное ускорение работы аналитического отдела, снижение количества ошибок при обработке файлов и повышение общей эффективности работы с данными.
Столкнулись с подобной задачей? Поможем решить!