Реализация вашего плана mesh
С чего начать ваше п утешествие в мир mesh?
Переход на dbt Mesh представляет собой значительное изменение в архитектуре разработки и развертывания. Перед любым достаточно сложным рефакторингом или миграцией программного обеспечения важно задать вопрос: «Почему это может не сработать?» Две наиболее распространенные причины, которые мы видели, связаны с
- Отсутствием уверенности в том, что dbt Mesh является правильной долгосрочной архитектурой
- Отсутствием согласованности в выборе хорошо определенной отправной точки
Создание согласованности в вашей архитектуре и отправной точке — это важные шаги для обеспечения успешной миграции. Выбор правильной отправной точки будет выглядеть по-разному для каждой организации, но есть некоторые эвристики, которые могут помочь вам решить, с чего начать. Скорее всего, в вашей организации уже есть логические компоненты, и вы, возможно, уже группируете, строите и ра звертываете ваш проект в соответствии с этими интерфейсами. Цель состоит в том, чтобы определить и формализовать эти организационные интерфейсы и использовать эти границы для разделения вашего проекта по доменам.
Как найти эти организационные интерфейсы? Вот несколько шагов, чтобы начать:
- Поговорите с командами о том, какое разделение существует на данный момент.
- Существуют ли различные домены, на которых сосредоточены люди?
- Существуют ли различные размеры, формы и источники данных, которые обрабатываются отдельно (например, данные о кликах)?
- Есть ли люди, сосредоточенные на отдельных уровнях трансформации, таких как загрузка и подготовка данных или создание витрин?
- Есть ли одна команда, которая является потребителем вашего текущего проекта dbt, и которая могла бы легче перейти на dbt Mesh?
При попытке определить интерфейсы вашего проекта, вы должны рассмотреть возможность исследования:
- Ваших заданий: Какие наборы моделей чаще всего строятся вместе?
- Вашего графа родословной: Как связаны модели?
- Ваших селекторов (определенных в
selectors.yml
): Как люди уже определяют группы ресурсов?
Давайте рассмотрим пример процесса, в котором монолитный проект используется для определения интерфейсов с помощью групп и доступа, а затем разделяется на несколько проектов.
Чтобы узнать больше, обратитесь к нашему бесплатному курсу по изучению dbt Mesh.
Определение интерфейсов проекта с помощью групп и доступа
Как только у вас появится представление о некоторых начальных группировках, вы можете сначала реализовать разрешения на группы и доступ в рамках одного проекта.
- Сначала вы можете создать группу, чтобы определить владельца набора моделей.
# в models/__groups.yml
groups:
- name: marketing
owner:
name: Ben Jaffleck
email: ben.jaffleck@jaffleshop.com
- Затем мы можем добавить модели в эту группу, используя ключ
group:
в YAML-записи модели.
# в models/marketing/__models.yml
models:
- name: fct_marketing_model
group: marketing
- name: stg_marketing_model
group: marketing
- После того как вы добавили модели в группу, вы можете добавить настройки доступа к моделям на основе их связей между группами, выбирая наиболее приватный доступ, который сохранит текущую функциональность. Это означает, что любая модель, имеющая только связи с другими моделями в той же группе, должна быть
private
, а любая модель, имеющая межгрупповые связи или являющаяся конечным узлом в DAG группы, должна бытьprotected
, чтобы другие части DAG могли продолжать ссылаться на нее.
# в models/marketing/__models.yml
models:
- name: fct_marketing_model
group: marketing
access: protected
- name: stg_marketing_model
group: marketing
access: private
- Проверьте эти группы, постепенно мигрируя ваши задания для выполнения этих групп с помощью синтаксиса выбора. Мы рекомендуем делать это параллельно с вашими производственными заданиями, пока вы не будете уверены в них. Это поможет вам понять, правильно ли вы провели границы.
- Если вы обнаружите, что постоянно вносите изменения в несколько групп при обновлении логики, это знак того, что вам, возможно, стоит пересмотреть ваши группы.
Разделите ваши проекты
- Переместите ваши сгруппированные модели в подпапку. Это будет включать любую модель в выбранной группе, ее соответствующую YAML-запись, а также ее родительские или дочерние ресурсы в зависимости от того, где эта группа находится в вашем DAG.
- Обратите внимание, что, как и в вашем проекте dbt, циклические ссылки не допускаются! Проект B не может иметь родителей и детей в проекте A, например.
- Создайте новый файл
dbt_project.yml
в подкаталоге. - Скопируйте любые макросы, используемые ресурсами, которые вы переместили.
- Создайте новый файл
packages.yml
в вашем подкаталоге с пакетами, которые используются ресурсами, которые вы переместили. - Обновите функции
{{ ref }}
— Для любой модели, имеющей межпроектную зависимость (это может быть в файлах, которые вы переместили, или в файлах, которые остались в вашем проекте):- Обновите функцию
{{ ref() }}
так, чтобы она имела два аргумента, где первый — это имя исходного проекта, а второй — имя модели: например,{{ ref('jaffle_shop', 'my_upstream_model') }}
- Обновите конфигурации
access
для межпроектных родителей, чтобы они былиpublic
, обеспечивая возможность безопасного использования{{ ref() }}
этих моделей в любом проекте. - Мы настоятельно рекомендуем добавить контракт модели к моделям верхнего уровня, чтобы гарантировать, что форма данных будет последовательной и надежной для ваших потребителей.
- Обновите функцию
- Создайте файл
dependencies.yml
(документация) для нижестоящего проекта, объявляя верхний проект как зависимость.
# в dependencies.yml
projects:
- name: jaffle_shop