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

Как мы оформляем наши dbt модели

Поля и названия моделей

  • 👥 Модели должны быть во множественном числе, например, customers, orders, products.
  • 🔑 Каждая модель должна иметь первичный ключ.
  • 🔑 Первичный ключ модели должен называться <object>_id, например, account_id. Это упрощает понимание того, какой id используется в последующих объединенных моделях.
  • Используйте подчеркивания для именования dbt моделей; избегайте точек.
    • models_without_dots
    • models.with.dots
    • Большинство платформ данных используют точки для разделения database.schema.object, поэтому использование подчеркиваний вместо точек уменьшает необходимость в кавычках, а также снижает риск проблем в некоторых частях dbt Cloud. Для получения дополнительной информации обратитесь к этому вопросу на GitHub.
  • 🔑 Ключи должны быть строковыми типами данных.
  • 🔑 Последовательность важна! Используйте одинаковые названия полей в разных моделях, где это возможно. Например, ключ к таблице customers должен называться customer_id, а не user_id или 'id'.
  • ❌ Не используйте аббревиатуры или псевдонимы. Подчеркивайте читаемость, а не краткость. Например, не используйте cust для customer или o для orders.
  • ❌ Избегайте использования зарезервированных слов в качестве названий столбцов.
  • ➕ Булевы значения должны иметь префикс is_ или has_.
  • 🕰️ Столбцы с временными метками должны называться <event>_at (например, created_at) и должны быть в UTC. Если используется другой часовой пояс, это должно быть указано с помощью суффикса (created_at_pt).
  • 📆 Даты должны называться <event>_date. Например, created_date.
  • 🔙 Даты и время событий должны быть в прошедшем времени — created, updated или deleted.
  • 💱 Поля цены/дохода должны быть в десятичной валюте (19.99 для $19.99; многие базы данных приложений хранят цены в виде целых чисел в центах). Если используется недесятичная валюта, укажите это с помощью суффикса (price_in_cents).
  • 🐍 Имена схем, таблиц и столбцов должны быть в snake_case.
  • 🏦 Используйте названия, основанные на бизнес-терминологии, а не на терминологии источника. Например, если в исходной базе данных используется user_id, но в бизнесе их называют customer_id, используйте customer_id в модели.
  • 🔢 Версии моделей должны использовать суффикс _v1, _v2 и т.д. для последовательности (customers_v1 и customers_v2).
  • 🗄️ Используйте последовательный порядок типов данных и рассмотрите возможность группировки и маркировки столбцов по типу, как в примере ниже. Это минимизирует ошибки при объединении и упростит чтение модели, а также поможет потребителям данных понять типы данных и просканировать модели для поиска нужных столбцов. Мы предпочитаем использовать следующий порядок: идентификаторы, строки, числовые значения, булевы значения, даты и временные метки.

Пример модели

with

source as (

select * from {{ source('ecom', 'raw_orders') }}

),

renamed as (

select

---------- ids
id as order_id,
store_id as location_id,
customer as customer_id,

---------- strings
status as order_status,

---------- numerics
(order_total / 100.0)::float as order_total,
(tax_paid / 100.0)::float as tax_paid,

---------- booleans
is_fulfilled,

---------- dates
date(order_date) as ordered_date,

---------- timestamps
ordered_at

from source

)

select * from renamed
0