Зачем?
01 января 2025 г.
Авторы за долгие годы накопили большой опыт в построении DWH на основе low-code платформы SAP BI. В связи с уходом SAP возникла необходимость в освоении других, актуальных для России, подобных инструментов. В процессе анализа было выявлено, что на рынке существует пробел в части low-code платформ для моделирования и трансформации данных.
SQL как Ассемблер
Конечно, можно построить DWH, используя только SQL, DBT, Spark или другие инструменты для трансформации данных. Можно вручную собирать и поддерживать изменения таблиц, работать с Dbeaver, писать фреймворки на Python, Java, PL/SQL...
Однако, не является ли это шагом назад, когда вместо использования low-code платформы приходится вручную реализовывать множество рутинных задач?
Ситуация напоминает программирование на ассемблере, когда программы были короткими и быстрыми, но имели серьезные ограничения по сложности и требовали значительных временных затрат.
Ответ: DWH-платформы
Как и в случае с языками программирования, где ответом на ассемблер стали языки высокого уровня, ответом на прямую работу с SQL стали DWH-платформы. Эти платформы позволяют решать рутинные задачи моделирования и трансформации данных без необходимости писать большой объем кода вручную.
Хотя опытный программист может создать DWH вручную, бизнес может предпочесть более быстрые решения, предлагаемые DWH-платформами. Это особенно актуально, когда сравниваются сроки и эффективность решений, предлагаемых начинающими или средними специалистами.
От какой даты у вас на работе самая старая DWH-задача? А на какое время вперед такие задачи уже расписаны? ;)
Требования к DWH-инструменту
В процессе работы даже к SAP BI накопились вопросы и пожелания. В идеале, такая DWH-платформа для моделирования должна обладать следующими свойствами:
- Простота установки и использования:
- лучший процесс установки - это без установки. Скачал образ в Docker и через минуту его запустил. Все.
- возможность работать как на десктопе, так и в браузере/облаке;
- нетребовательность к ресурсам.
- Поддержка различных баз данных:
- Greenplum/PostreSQL;
- Clickhouse;
- MySQL/MariaDB;
- ... модульная расширяемая структура для подлючения разных БД.
- Поддержка ландшафта и переносов изменений по нему:
- Разработка -> Тест -> Продуктив;
- автоматический сбор изменений модели для переноса в тест и прод, выполненных как вручную из консоли, так и в рамках DWH-платформы.
- Контроль версий:
- возможность просмотреть и, при необходимости, восстановить состояние модели данных и UDF-функций на любой момент времени;
- поддержка GIT.
- Моделирование DWH с автогенерацией SQL:
- поддержка Data Vault;
- поддержка моделирования таблиц, а также их сателлитов;
- поддержка Star-схемы;
- поддержка генерации витрин данных;
- поддержка механизма быстрого мэппинга в трансформациях.
- Проверка и корректировка SQL-генерации:
- проверка сгенерированного SQL;
- корректировка сгенерированного SQL.
- на критических участках должна быть возможность самостоятельно написать SQL, а не использовать сгенерированный. Это как возможность вставки ассемблера в программу на языке высокого уровня.
- Цепочки загрузки:
- возможность продолжения упавших цепочек с повтором аварийного шага без повтора успешных шагов загрузки. Т.е. уже выполненные независимые дальнейшие шаги в цепочке повторно не выполняются;
- в случае блокировки целевой таблицы загрузка не должна падать;
- один независимый шаг в цепочке загрузки в случае падения не должен блокировать другой независимый шаг. Например, падение загрузки Контрагентов не должно блокировать загрузку Продуктов;
- запуск цепочек из любимого оркестратора.
- Готовый контент:
- бизнес-модели данных для установки в систему;
- примеры моделирования.
- Трансформации:
- автотесты трансформаций - задать входные данные для трансформации, запустить трансформацию, автоматически сравнить результат с эталоном. Создание цепочек таких автотестов;
- выполнение трансформаций внутри БД в несколько потоков;
- для простых трансформаций данные не должны покидать БД в целях высокой скорости обработки;
- в случае сложных трансформаций возможность выполнять их на внешнем кластере - например, кластере Trino или Spark.
- Качество данных:
- возможность задать правила проверки данных на любом этапе потока данных;
- удобный интерфейс управления и добавления правил проверки;
- разделение массива данных по результатам проверки: красный, желтый, зеленый флаг;
- разбор и управление такими массивами данных;
- проверки должны работать после ELT-процессов в фоне и формировать Error Data Mart.
- Песочница:
- разработка в отдельной создаваемой под задачу песочнице;
- если разработка успешна - применять изменения к серверу разработки.
- Поддержка "неразрушающей" доработки:
- разработка в стиле Agile;
- инкрементальная разработка, без разрушения уже имеющейся модели данных;
- возможность закрыть изменения определенных объектов без закрытия возможности их расширения. И так как разработка возможна напрямую через DDL, то ограничения должны накладываться с использованием стандартных механизмов раздачи прав на объекты самой базы данных, чтобы их нельзя было обойти через консоль.
- Снижение сложности разработки:
- разделение областей разработки - видеть только те объекты, над которыми работаешь;
- быстрое переключение между такими областями, создание своих локальных областей видимости;
- использование мастеров для создания объектов, особенно выборок из Data Vault.
- Гибкая разработка:
- импорт существующих объектов БД в модель на DWH-платфоме;
- возможность корректировки объектов как по-старому, вручную (ddl-запросы), так и с помощью DWH-платформы. При этом все эти изменения должны отлавливаться для переноса по ландшафту.
- Процесс разработки:
- дебаг (выполнение по шагам) создаваемых функций базы данных;
- симуляция выполнения, когда выполнение происходит, результаты можно посмотреть, но данные в БД не меняются.
- Расширяемость:
- возможность создавать свои дополнения;
- возможность использовать готовые дополнения сторонних разработчиков;
- API для взаимодействия с внешним миром.
- Документация:
- автоматическое построение документации;
- автопостроение data lineage;
- удобная навигация между разделами и из документации к объектам.
- Гибкая загрузка с минимальными телодвижениями:
- full;
- delta;
- snapshot;
- batch;
- stream.
- Self service модели данных - передача части возможностей по трансформации бизнес-пользователям:
- корректировка данных для мэппинга;
- корректировка трансформации (видимо, на Питоне или PL/SQL).
- Использование AI (локально или онлайн):
- анализ RAW-таблиц на предмет выделения мастер- и транзакционных данных;
- предложение нормализованной модели данных из денормализованных RAW-таблиц;
- предложение построения модели Data Vault;
- предложение построения Data Mart витрин;
- анализ SQL запросов;
- реализация предложенного с учетом уточнений.
Не стесняемся, добавляем желаемые возможности программы на форуме.
Цели проекта
Основной целью создания этой программы (пет-проекта) является освоение новых и актуализация старых знаний для работы в текущих реалиях:
- Greenplum
- Clickhouse
- SQL различных модификаций
- Typescript
- JavaScript
- PHP
- NodeJS
- Vue
- HTML, CSS и прочие чебурашки...
Ну что ж, поехали:
- ChatGPT, напиши мне программу, как у SAP, только лучше.
- В работе...