SQL модели
Связанные справочные документы
Начало работы
Если вы новичок в dbt, мы рекомендуем вам прочитать руководство по быстрому старту, чтобы создать ваш первый проект dbt с моделями.
Возможности Python в dbt являются расширением его возможностей с SQL моделями. Если вы новичок в dbt, мы рекомендуем сначала прочитать эту страницу, прежде чем переходить к: "Python модели".
SQL модель — это оператор select
. Модели определяются в файлах .sql
(обычно в вашем каталоге models
):
- Каждый файл
.sql
содержит одну модель / операторselect
. - Имя модели наследуется от имени файла.
- Мы настоятельно рекомендуем использовать подчеркивания в именах моделей, а не точки. Например, используйте
models/my_model.sql
вместоmodels/my.model.sql
. - Модели могут быть вложены в подкаталоги внутри каталога
models
.
Обратитесь к Как мы оформляем наши dbt модели для получения подробной информации о том, как мы рекомендуем называть ваши модели.
Когда вы выполняете команду dbt run
, dbt создаст эту модель обернув её в оператор create view as
или create table as
.
Например, рас смотрим эту модель customers
:
with customer_orders as (
select
customer_id,
min(order_date) as first_order_date,
max(order_date) as most_recent_order_date,
count(order_id) as number_of_orders
from jaffle_shop.orders
group by 1
)
select
customers.customer_id,
customers.first_name,
customers.last_name,
customer_orders.first_order_date,
customer_orders.most_recent_order_date,
coalesce(customer_orders.number_of_orders, 0) as number_of_orders
from jaffle_shop.customers
left join customer_orders using (customer_id)
Когда вы выполняете dbt run
, dbt создаст это как представление с именем customers
в вашей целевой схеме:
create view dbt_alice.customers as (
with customer_orders as (
select
customer_id,
min(order_date) as first_order_date,
max(order_date) as most_recent_order_date,
count(order_id) as number_of_orders
from jaffle_shop.orders
group by 1
)
select
customers.customer_id,
customers.first_name,
customers.last_name,
customer_orders.first_order_date,
customer_orders.most_recent_order_date,
coalesce(customer_orders.number_of_orders, 0) as number_of_orders
from jaffle_shop.customers
left join customer_orders using (customer_id)
)
Почему представление с именем dbt_alice.customers
? По умолчанию dbt будет:
- Создавать модели как представления
- Создавать модели в целевой схеме, которую вы определяете
- Использовать имя вашего файла как имя представления или в базе данных
Вы можете использовать конфигурации, чтобы изменить любое из этих поведений — об этом позже.
Часто задаваемые вопросы
Конфигурирование моделей
Конфигурации — это "настройки модели", которые можно задать в вашем файле dbt_project.yml
, и в вашем файле модели, используя блок config
. Примеры конфигураций включают:
- Изменение используемого моделью — материализация определяет SQL, который dbt использует для создания модели в вашем хранилище данных.
- Создание моделей в отдельных схемах.
- Применение тегов к модели.
Вот пример конфигурации модели:
name: jaffle_shop
config-version: 2
...
models:
jaffle_shop: # это соответствует `name:`` конфигурации
+materialized: view # это применяется ко всем моделям в текущем проекте
marts:
+materialized: table # это применяется ко всем моделям в каталоге `marts/`
marketing:
+schema: marketing # это применяется ко всем моделям в каталоге `marts/marketing/`
{{ config(
materialized="view",
schema="marketing"
) }}
with customer_orders as ...
Важно отметить, что конфигурации применяются иерархически — конфигурация, примененная к подкаталогу, переопределит любые общие конфигурации.
Вы можете узнать больше о конфигурациях в справочной документации.