Решение о структуре вашего dbt Mesh
Изучение паттернов mesh
При переходе на многопроектную архитектуру, где провести границы между проектами?
Как организовать потоки данных в мире, где вместо одного dbt DAG у вас есть несколько проектов, взаимодействующих друг с другом, каждый из которых состоит из своего собственного DAG?
Применение паттерна dbt Mesh — это не универсальный процесс. На самом деле, это наоборот! Это о том, чтобы настроить структуру вашего проекта под вашу команду и ваши данные. Теперь вы можете адаптировать граф знаний вашей организации к графу людей вашей организации, приближая людей и данные друг к другу, а не жертвуя одним ради другого.
Хотя нет единственного лучшего способа реализации этого паттерна, есть несколько общих точек принятия решений, которые будут полезны для рассмотрения.
На высоком уровне вам нужно будет решить:
- Где провести границы между вашими dbt проектами — т.е. как определить, где разделить ваш DAG и какие модели в какой проект включить?
- Как упра влять вашим кодом — хотите ли вы, чтобы несколько dbt проектов находились в одном репозитории (моно-репо) или хотите иметь несколько репозиториев с одним репозиторием на проект?
Определите интерфейсы вашего проекта, разделив ваш DAG
Первое (и, возможно, самое сложное!) решение при переходе на многопроектную архитектуру — это решение о том, где провести линию в вашем DAG, чтобы определить интерфейсы между вашими проектами. Давайте рассмотрим некоторые термины для обсуждения дизайна этих паттернов.
Вертикальные разделения
Вертикальные разделения выделяют слои трансформации в порядке DAG. Рассмотрим некоторые примеры.
- Разделение слоев подготовки и витрин для создания более строго контролируемого, общего набора компонентов, на которых строятся другие проекты, но не могут их редактировать.
- Изоляция ранних моделей для требований безопасности и управления для выделения и маскировки данных PII, чтобы потребители на нижних уровнях не могли к ним получить доступ, является распространенным случаем использования вертикального разделения.
- Защита сложных или дорогих данных для изоляции больших или сложных моделей, которые дорого запускать, чтобы они были защищены от случайного выбора, независимо разворачиваемы и легче отлаживаемы при возникновении проблем.
Горизонтальные разделения
Горизонтальные разделения разделяют ваш DAG на основе источника или домена. Эти разделения часто основаны на форме и размере данных и на том, как они используются. Рассмотрим некоторые возможности для горизонтального разделения.
- Паттерны потребления команд. Например, выделение потока данных команды маркетинга в отдельный проект.
- Данные из разных источников. Например, данные событий clickstream и транзакционные данные электронной коммерции могут нуждаться в независимом моделировании друг от друга.
- Рабочие процессы команд. Например, если две встроенные группы работают с разной скоростью, вы можете захотеть разделить проекты, чтобы они могли двигаться независимо.
Комбинирование этих стратегий
- Это не взаимоисключающие техники. Вы должны рассмотреть оба типа разделений и комбинировать их любым образом, который имеет смысл для вашей организации.
- Выберите один тип разделения и сосредоточьтесь на нем сначала. Если у вас есть топология команды в виде "звезда и спицы", например, сначала разберите центральный проект платформы, прежде чем разделять оставшиеся на домены. Затем, если вам нужно разделить эти домены горизонтально, вы можете сосредоточиться на этом после.
- DRY применяется к исходным данным, а не только к коду. Независимо от вашей стратегии, вы не должны использовать одни и те же строки и столбцы в нескольких узлах. Работая в паттерне mesh, становится все более важным не дублировать логику или данные.