Как мы оформляем наши 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