Как стать автором
Обновить

База для аналитики данных. Как получать данные?

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров3.6K

Я убеждён в том, что аналитикам данных критически-важно иметь доступ без боли, искажений и рисков к наиболее детализированным данным проекта для исполнения своих обязанностей..
Нет данных - нет мультиков аналитики. Работа только с агрегированными и преобразованными по непрозрачной логике данными приводит к ошибкам и отсутствию доверия от бизнеса.
Статья может быть полезна к изучению при принятии решений о развитии аналитики с 0 в проекте.

К сожалению, вопросу получения данных часто не уделяется хоть какое-то внимание.
Бизнесу интересно не получение данных, а инсайты и рекомендации. Принято отдавать этот вопрос на откуп аналитикам и взаимодействию аналитиков и IT. Только у аналитиков редко есть опыт и понимание лучших практик по работе с данными и для IT задача использования данных аналитиками может быть чем-то чужеродным.

Тем не менее, как-то они договариваются. Не сталкивался с примерами, когда совсем не договорились и никакой аналитики нет.
Сталкивался с разными вариантами урона от реализации.

Пустили в прод аналитиков делать отчёты, иногда на проде даже появляются отдельные схемы и объекты под цели аналитики

Простите за иронию, коллеги-аналитики. Но выглядит это как-то так
Простите за иронию, коллеги-аналитики. Но выглядит это как-то так

В таком режиме возможно делать какие-то простые-быстрые-первичные подходы к анализу.
Очевидный плюс - никаких дополнительных затрат. Выдали доступы, люди работают. Если стадия затягивается, запросы аналитиков начинают подвешивать базы прода. В итоге аналитики нет, продукт не работает. Копятся взаимные обиды и беклог для проработки с психотерапевтом.

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

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

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

Дорогое решение. Задачи вовлекают специалистов из 2-х команд, доп.затраты на попытки повышения user-friendly фреймворками, отдельная инфраструктура под интерфейс выполнения запросов.

Сценарий развития встречал только негативный. Спустя пару месяцев с создания решение начинает деградировать. Появляются отчёты, которые дублируют расчёты, из созданных ранее, а цифры новые, обновлять логику трудно-долго да и сама логика понятна только тем, кто систему сопровождает. Причина проста - аналитические продукты требуют регулярной актуализации и системного подхода. Перед IT-специалистами задача ставится как "быстро закрыть проблему с доступом к данным".
А если и ставится более осознанно и комплексно, есть действительно сложные моменты - актуализация нужна не только на изменения в архитектуре данных, но и поправки на бизнес-процессы, о которых без тесной работы с бизнесом узнать сложно-невозможно.
Вопрос корректности расчётов не имеет конечного ответственного - ТЗ для IT формируют аналитики, которые не видят как устроены данные, решение выдают IT-специалисты, для которых принципиально-важно не решение боли, а точное выполнение ТЗ.

Ещё такой подход требует выделения в IT на полную занятость специалистов. Фактически, возникает два центра компетенций в компании - например, аналитики с подчинением продукту и специалисты, которые аналитикам готовят данные, но подчиняются IT директору.
И со временем каждый из центров начинает "тянуть одеяло на себя" вместо кооперации.

Я не обобщаю, уверен, что есть случаи, в которых такая сложносочинённая схема работы с данными работает. Не встретил пока за 13 лет.

Минусы

  • сложность масштабирования, сроки разработки чего-либо для аналитики зависят и от ресурса аналитика и от ресурса IT

  • ответственность за результат размыта, логика расчётов часто неизвестна никому, потому что от IT ответственные сменились, а аналитики логику знают неглубоко, на уровне бизнес-формулировок

  • частые ошибки в расчётах из-за отсутствия возможности профилирования данных со стороны аналитиков. Очевидные ошибки находят только по косвенным проверкам, не очевидные не находят совсем

Настраиваем полную репликацию баз данных и выдаём доступы на чтение аналитикам

Конечно, баланс во всём
Конечно, баланс во всём

Подход лечит все минусы из предыдущего решения. Второй по бюджетности после доступа в прод. Возникают траты на железо для полных реплик и ресурс devOps/DBA на поддержку процесса репликации. Возможно, не тратимся, а переиспользуем - если реплика используется как резервная версия прода, и риск-политика допускает такой сценарий переиспользования.

Проблемы как в случае с доступом в прод - если резервная копия подвешена, есть риск, что свою прямую функцию она не исполнит.

Был случай на pgsql и логической репликации, когда подвешенная реплика подвесила и прод-базу. Из-за тяжелых запросов, подвисших на 2+ часа, на проде закончилось место под val-файлы с изменениями заблокированных таблиц и прод перестал отвечать.

Встречал и вариацию, в которой сами IT собирали расчёты на репликах - в кейсе аналитики не умели в SQL. Отношу подобное к забавным девиациям в профессиях, не рабочая история.

Хорошее решение, для многих проектов с небольшими таблицами (<10млн. строк) на нём можно и остановиться.
Что не закрывает полная репликация:

  • если для аналитики нужны 2+ базы, данные придётся объединять с использованием конструкторов в BI или обработкой в том же Python. Это замедляет подготовку данных для анализа. Если объединять нужно очень детальные данные (таблички по 1млн.+записей), задача становится вызовом

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

  • часто из всего объема данных для аналитики полезна-нужна только часть. Из моей практики, в лучшем случае, 30% всех данных. Если реплика поддерживается только для аналитики, переплачиваем за железо

  • если в отчёте некорректные данные от того, что реплика не обновлена, кто виноват? Продолжение размывания ответственности

Решением может стать частичная загрузка данных

Возможно, это про баланс.
Возможно, это про баланс.

Грузим только то, что нужно для аналитики, складываем в одном месте. Технически, самый сложный в части используемых технологий вариант. Добавим роль архитектора данных и можем собирать хранилище данных. Для реализации нужна роль data-engineer.

Если таблицы небольшие (<500 тыс. записей), можем каждый раз грузить всё что есть. С ростом объёмов, нужен способ получения инкремента - части данных.
Т.е., если данных много, чтобы оптимизировать загрузку в первый раз грузим всё, что есть в таблице, а каждый последующий определяем инкремент и грузим только часть.
В идеале, для загрузки инкрементом нужно иметь в загружаемой таблице колонку, которая однозначно размечает весь массив по порядку - метку. Логика простая - после каждой загрузки сохраняем максимальное значение метки и в новой итерации грузим только те данные, в которых значения метки больше.

На практике такой идеальный сценарий редко применим. Данные могут меняться, удаляться и добавляться в историческом периоде без изменений выбранной метки и вообще без следов изменений.

Был кейс, в котором изменения в таблицу транзакций платёжных операций "долетали" в периоды позапрошлого года и такое поведение объяснялось не ошибкой, а особенностью бизнеса, не учтённой в сценарии учёта транзакций.

В случае неидеальной базы получаем то, что данные в аналитических отчётах начинают расходиться с тем, что есть в исходных системах.

Конечно, возможны инженерные "workaround". Например, грузить по метке, но дополнительно перезагружать раз в неделю последние 2 года данных. Или перезагружать каждый раз последние пару кварталов. Результат таких решений - не вполне точные данные.

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

CDC - Change Data Capture или захват изменений в данных. Популярные СУБД вроде Oracle, MSSQL, PostgreSQL имеют свои решения CDC. Интересно, что на рынке специалистов РФ data-engineer, который на практике работал с CDC и знает как настроить сбор и передачу данных встречается крайне редко. Читатель, умеешь в CDC? Поздравляю, ты data-единорог.

По сути, технология подключается к конкретным таблицам и сохраняет полный лог изменения записей в таблице. Далее лог можно передать в базу для аналитики.
Технология позволяет как поддерживать соответствие данных в системах-источниках и аналитической базе, так и сохранять полную историю изменений данных, что может пригодиться в отдельных задачах аудита или сложной аналитики.

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

Хочу уточнить, всё написанное выше - это не про хранилище. Только загрузка данных в аналитическую базу, куда аналитики сгружают всё нужное для работы. Я в работе такое привык называть хабом данных.
Принципиальные отличие хаба данных от DWH в том, что хаб можно организовать не понимая модели данных и не проектируя архитектуру хранения. Ну и сроки.
Настроить загрузку = до пары месяцев работы, с учётом бюрократии и особенностей инфраструктуры вашего проекта.
Собрать хранилище = 6-12 месяцев на mvp.

Статью дублирую в свой tg-канал.
Поделитесь, как вы работаете с данными? Есть более оптимальные подходы?
Буду рад обсудить эти и другие вопросы из сфер управления данными и аналитики.

Теги:
Хабы:
+1
Комментарии4

Публикации

Работа

Data Scientist
43 вакансии

Ближайшие события