Перейти к основному содержимому

Ваш контрольный список для проекта dbt

· 9 мин. чтения
Amy Chen
Dave Connors

Если вы используете dbt более года, ваш проект устарел. Это естественно.

Появились новые функции. Изменяются хранилища данных. Обновляются лучшие практики. За последний год я и другие члены команды Fishtown Analytics (теперь dbt Labs!) провели семь аудитов для клиентов, которые использовали dbt минимум 2 месяца.

В каждом аудите мы находили возможности для:

  1. Улучшения производительности
  2. Повышения удобства сопровождения
  3. Упрощения для новых участников проекта

Этот пост — контрольный список, который я создал для руководства нашей внутренней работой, и я делюсь им здесь, чтобы вы могли использовать его для очистки вашего собственного проекта dbt. Думайте об этом контрольном списке как о книге Где Уолдо?: вам все равно придется его искать, но с этим списком вы хотя бы будете знать, что искать.

✅ dbt_project.yml


  • Конвенции именования проекта
    • Как называется ваш проект?
      • Оставили ли вы его как ‘my_new_project’ по умолчанию или переименовали, чтобы было понятно?
      • Мы рекомендуем называть его в честь вашей компании, например, ‘fishtown_analytics’.
      • Если у вас несколько проектов dbt, что-то вроде ‘fishtown_analytics_marketing’ может иметь больше смысла.
  • Есть ли у вас ненужные конфигурации, такие как materialized: ?
    • По умолчанию модели dbt материализуются как “views”. Это устраняет необходимость объявлять любые модели как views.
    • Если все ваши модели в папке являются tables, определите в файле dbt_project.yml, а не в файле модели. Это убирает лишние элементы из файла модели.
  • Есть ли у вас много комментариев-заполнителей из команды init?
    • Это создает ненужный беспорядок.
  • Используете ли вы post-hooks для предоставления разрешений другим трансформаторам и пользователям BI?
    • Если нет, вам стоит это сделать! Это обеспечит доступность любых изменений для ваших сотрудников и их использование на уровне BI. on run end
  • Используете ли вы теги в вашем проекте?
    • Большинство моделей вашего проекта должны быть без тегов. Используйте теги для моделей и тестов, которые выходят за рамки нормы в том, как вы хотите с ними взаимодействовать. Например, тегирование моделей ‘nightly’ имеет смысл, но также тегирование всех ваших не-‘nightly’ моделей как ‘hourly’ излишне - вы можете просто исключить ‘nightly’ модели!
    • Проверьте, является ли селектор узлов хорошим вариантом вместо тегов.
    • Тегируете ли вы отдельные модели в блоках конфигурации?
      • Вы можете использовать селекторы папок во многих случаях, чтобы избежать избыточного тегирования каждой модели в папке.
  • Используете ли вы YAML селекторы?
    • Они позволяют сложный, многослойный выбор моделей и могут устранить сложные механизмы тегирования и улучшить читаемость конфигурации проекта.

Полезные ссылки:

✅ Управление пакетами


  • Насколько актуальны версии ваших dbt пакетов?
    • Вы можете проверить это, посмотрев на ваш файл packages.yml и сравнив его с страницей пакетов на hub.
  • Установлен ли у вас пакет dbt_utils?
    • Это, безусловно, наш самый популярный и необходимый пакет. Пакет содержит умные макросы для улучшения вашего проекта dbt. После его внедрения у вас будет доступ к макросам (нет необходимости копировать их в ваш проект).

Полезные ссылки

✅ Стиль кода


  • Есть ли у вас четко определенный стиль кода?
  • Строго ли вы его придерживаетесь?
  • Оптимизируете ли вы ваш SQL?
    • Используете ли вы оконные функции и агрегации?

Полезные ссылки

✅ Структура проекта


  • Если вы используете техники, есть ли у вас модели для стадий и витрин?
    • Используют ли они префиксы таблиц, такие как ‘fct_’ и ‘dim_’?
  • Является ли код модульным? Это одна трансформация на одну модель?
  • Фильтруете ли вы как можно раньше?
    • Одна из самых распространенных ошибок, которые мы обнаружили, это недостаточно раннее фильтрование или трансформация. Это приводит к тому, что несколько моделей ниже по потоку имеют одну и ту же повторяющуюся логику (т.е. мокрый код) и делает обновление бизнес-логики более трудоемким.
  • Являются ли CTE модульными с одной трансформацией на CTE?
  • Если у вас есть файлы макросов, называете ли вы их так, чтобы они четко представляли макрос(ы), содержащиеся в файле?

Полезные ссылки

✅ dbt


  • Какую версию dbt вы используете?

    • Чем дальше вы от последнего выпуска, тем больше вероятность, что у вас останутся старые ошибки, и обновление станет сложнее.
  • Что происходит, когда вы выполняете dbt run?

    • Какие ваши самые долго выполняющиеся модели?
      • Пора ли пересмотреть вашу стратегию моделирования?
      • Должна ли модель быть инкрементной?
        • Если она уже инкрементная, следует ли вам скорректировать вашу инкрементную стратегию?
    • Сколько времени занимает выполнение всего проекта dbt?
    • Выполняется ли каждая модель? (Это не шутка.)
      • Если нет, то почему?
    • Есть ли у вас циклические ссылки на модели?
  • Используете ли вы источники?

    • Если да, используете ли вы тесты свежести источников?
  • Используете ли вы refs и sources для всего?

    • Убедитесь, что ничего не запрашивается из сырых таблиц и т.д. no querying raw tables
  • Регулярно ли вы запускаете dbt test как часть вашего рабочего процесса и производственных заданий?

  • Используете ли вы Jinja и макросы для повторяющегося кода?

    • Если да, соблюден ли баланс, чтобы это не использовалось чрезмерно до такой степени, что код становится нечитаемым?
    • Легко ли читается ваш Jinja?
      • Разместили ли вы все ваши set операторы в начале файлов моделей?
      • Форматировали ли вы код для читаемости Jinja или только для скомпилированного SQL?
      • Изменяете ли вы пробелы?
        • Пример: {{ this }} а не {{this}}
    • Сделали ли вы сложные макросы максимально доступными?
      • Способы сделать это: предоставление имен аргументов и встроенная документация с использованием {# <вставьте текст> #}
  • Если у вас есть инкрементные модели, используют ли они уникальные ключи и макрос is_incremental()?

  • Если у вас есть теги, имеют ли они смысл? Используются ли они?

Полезные ссылки

✅ Тестирование и непрерывная интеграция


  • Есть ли у ваших моделей тесты?
    • Идеальный проект имеет 100% покрытие тестами всех своих моделей. Хотя есть случаи, когда это не имеет смысла, наше правило заключается в том, что модели должны иметь хотя бы тест на not_null/unique на .
  • Что вы тестируете? Имеет ли это смысл?
  • Какие предположения вы должны тестировать?
    • Подумайте о вашей основной бизнес-логике, а также о вашем понимании ваших источников.
  • Используете ли вы pull-запросы/другие формы управления версиями?
    • Насколько легко понять, что делает изменение кода и намерение за изменением кода?
  • Есть ли у вас обязательные проверки PR перед слиянием кода в ваш проект dbt или слой BI?
    • Используете ли вы шаблон PR?

Полезные ссылки

✅ Документация


  • Используете ли вы документацию?
  • Есть ли описания для каждой модели?
  • Объяснены ли сложные трансформации и бизнес-логика в легкодоступном месте?
  • Используют ли ваши заинтересованные стороны вашу документацию?
    • Если нет, то почему?
  • Есть ли у вас readme и регулярно ли вы его обновляете?
  • Насколько легко было бы ввести кого-то в ваш проект?
  • Если у вас есть описания на уровне столбцов, используете ли вы блоки документации?

Полезные ссылки

✅ Специфика dbt Cloud


  • Какую версию dbt используют задания?
    • Большинство из них наследуют от окружения, чтобы упростить обновление?
  • Как выглядят ваши задания? Имеют ли они смысл?
  • Как организованы ваши проекты в dbt cloud?
    • Есть ли у вас неиспользуемые проекты?
  • Выбрали ли вы наиболее подходящее задание для документации уровня вашего аккаунта?
  • Синхронизируется ли количество запусков с тем, как часто обновляются и просматриваются ваши сырые данные?
    • Если ваши данные не обновляются так часто, как происходят запуски, это просто ничего не делает.
  • Есть ли у вас полное обновление производственных данных?
  • Запускаете ли вы тесты на периодической основе?
  • Какие задания выполняются дольше всего?
  • Есть ли у вас задание для непрерывной интеграции? (Только для Github)

Используете ли вы IDE и если да, то насколько хорошо?

  • Мы обнаружили, что IDE помогло в решении проблем с поддержанием обновленной версии dbt.
  • Есть ли у dbt cloud свой пользователь в их хранилище? Какое хранилище/роль по умолчанию?
  • Получаете ли вы уведомления о неудачных заданиях? Настроили ли вы уведомления в Slack?

Полезные ссылки

✅ Аудит DAG


Примечание: диаграммы в этом разделе показывают, чего НЕ следует делать!

  • Есть ли в вашем DAG какие-либо распространенные ошибки моделирования?
    • Есть ли прямые соединения из источников в промежуточную модель?

      • Все источники должны иметь соответствующую модель стадии для очистки и стандартизации структуры данных. Они не должны выглядеть как изображение ниже.

        bad dag

    • Соединяются ли источники напрямую друг с другом?

      • Все источники должны иметь соответствующую модель стадии для очистки и стандартизации структуры данных. Они не должны выглядеть как изображение ниже.

        bad dag 2

    • Есть ли повторное соединение концепций верхнего уровня?

      • Это может указывать на:
        • модель может нуждаться в расширении, чтобы все необходимые данные были доступны ниже по потоку

        • необходима новая промежуточная модель для соединения концепций для использования в обоих местах

          bad dag 2

    • Есть ли "изгибающиеся соединения"?

      • Зависимы ли модели в одном слое друг от друга?

      • Это может указывать на необходимость изменения именования или модель должна ссылаться на модели выше по потоку

        bad dag 3

    • Есть ли разветвления моделей промежуточных/измерений/фактов?

      • Это может указывать на то, что некоторые трансформации следует перенести на уровень BI или трансформации следует переместить выше по потоку

      • Ваш проект dbt нуждается в определенной конечной точке!

        [bad dag 4

    • Есть ли повторяющаяся логика в нескольких моделях?

      • Это указывает на возможность переместить логику в модели выше по потоку или создать конкретные промежуточные модели, чтобы сделать эту логику повторно используемой
      • Одно из распространенных мест для поиска этого — сложная логика соединения. Например, если вы проверяете несколько полей на определенные значения в соединении, их можно, вероятно, свести к одному полю в модели выше по потоку, чтобы создать чистое, простое соединение.

Благодарим Кристину Бергер за ее диаграммы DAG!

Полезные ссылки

Это краткий обзор вещей, о которых стоит подумать в вашем проекте. Мы будем обновлять этот пост по мере продолжения совершенствования наших лучших практик! Удачного моделирования!

Comments

Loading