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

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

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

  • 👥 Модели должны быть во множественном числе, например, customers, orders, products.
  • 🔑 Каждая модель должна иметь первичный ключ.
  • 🔑 Первичный ключ модели должен называться <object>_id, например, account_id. Это упрощает понимание того, какой id используется в последующих объединенных моделях.
  • Используйте подчеркивания для именования dbt моделей; избегайте точек.
    • models_without_dots
    • models.with.dots
  • Большинство платформ данных используют точки для разделения database.schema.object, поэтому использование подчёркиваний вместо точек снижает необходимость в кавычках, а также уменьшает риск проблем в некоторых частях dbt. Подробнее см. этот issue на GitHub.
  • 🔑 Ключи должны иметь строковый тип данных.
  • 🔑 Последовательность — это ключ! По возможности используйте одинаковые имена полей во всех моделях. Например, ключ к таблице customers должен называться customer_id, а не user_id или id.
  • ❌ Не используйте аббревиатуры или алиасы. Отдавайте приоритет читаемости, а не краткости. Например, не используйте cust вместо customer или o вместо orders.
  • ❌ Избегайте зарезервированных слов в качестве имён столбцов.
  • ➕ Логические (boolean) поля должны начинаться с 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).
  • 🗄️ Используйте единый порядок типов данных и, по возможности, группируйте и помечайте столбцы по типам, как в примере ниже. Это снизит количество ошибок при join’ах, упростит чтение модели и поможет downstream‑потребителям данных быстрее понимать типы данных и находить нужные столбцы. Мы рекомендуем следующий порядок: идентификаторы, строки, числовые значения, логические значения, даты и временные метки.

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

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
Loading