Быстрый старт для dbt Core с ручной установкой
Введение
Когда вы используете dbt Core для работы с dbt, вы будете редактировать файлы локально с помощью текстового редактора и запускать проекты с использованием интерфейса командной строки (CLI).
Если вы хотите редактировать файлы и запускать проекты, используя веб-ориентированную интегрированную среду разработки dbt (IDE), обратитесь к быстрым стартам dbt Cloud. Вы также можете разрабатывать и выполнять команды dbt, используя dbt Cloud CLI — командную строку, поддерживаемую dbt Cloud.
Предварительные требования
- Чтобы использовать dbt Core, важно знать некоторые основы работы с Терминалом. В частности, вы должны понимать команды
cd
,ls
иpwd
, чтобы легко перемещаться по структуре каталогов вашего компьютера. - Установите dbt Core, следуя инструкциям по установке для вашей операционной системы.
- Выполните соответствующие шаги по настройке и загрузке данных в серии Quickstart для dbt Cloud. Например, для BigQuery выполните Настройка (в BigQuery) и Загрузка данных (BigQuery).
- Создайте учетную запись GitHub, если у вас ее еще нет.
Создание стартового проекта
После настройки BigQuery для работы с dbt вы готовы создать стартовый проект с примерами моделей, прежде чем создавать собственные модели.
Создание репозитория
Следующие шаги используют GitHub в качестве провайдера Git для этого руководства, но вы можете использовать любого провайдера Git. Вы уже должны были создать учетную запись GitHub.
- Создайте новый репозиторий GitHub с именем
dbt-tutorial
. - Выберите Public, чтобы репозиторий можно было поделиться с другими. Вы всегда можете сделать его приватным позже.
- Оставьте значения по умолчанию для всех остальных настроек.
- Нажмите Create repository.
- Сохраните команды из раздела "…or create a new repository on the command line", чтобы использовать их позже в Commit your changes.
Создание проекта
Узнайте, как использовать серию команд в командной строке Терминала для создания вашего проекта. dbt Core включает команду init
, которая помогает создать каркас проекта dbt.
Чтобы создать ваш dbt проект:
- Убедитесь, что dbt Core установлен, и проверьте версию с помощью команды
dbt --version
:
dbt --version
- Инициализируйте проект
jaffle_shop
с помощью командыinit
:
dbt init jaffle_shop
- Перейдите в директорию вашего проекта:
cd jaffle_shop
- Используйте
pwd
, чтобы убедиться, что вы находитесь в нужном месте:
$ pwd
> Users/BBaggins/dbt-tutorial/jaffle_shop
- Используйте текстовый редактор, такой как Atom или VSCode, чтобы открыть директорию проекта, которую вы создали на предыдущих шагах, и которую мы назвали jaffle_shop. Содержимое включает папки и файлы
.sql
и.yml
, сгенерированные командойinit
.
- dbt предоставляет следующие значения в файле
dbt_project.yml
:
name: jaffle_shop # Измените с значения по умолчанию, `my_new_project`
...
profile: jaffle_shop # Измените с имени профиля по умолчанию, `default`
...
models:
jaffle_shop: # Измените с `my_new_project`, чтобы соответствовать предыдущему значению для `name:`
...
Подключение к BigQuery
При локальной разработке dbt подключается к вашему с использованием профиля, который является YAML файлом со всеми деталями подключения к вашему хранилищу.
- Создайте файл в директории
~/.dbt/
с именемprofiles.yml
. - Переместите ваш ключевой файл BigQuery в эту директорию.
- Скопируйте следующее и вставьте в новый файл profiles.yml. Убедитесь, что вы обновили значения, где это указано.
jaffle_shop: # это должно совпадать с профилем в вашем файле dbt_project.yml
target: dev
outputs:
dev:
type: bigquery
method: service-account
keyfile: /Users/BBaggins/.dbt/dbt-tutorial-project-331118.json # замените это на полный путь к вашему ключевому файлу
project: grand-highway-265418 # Замените это на ваш project id
dataset: dbt_bbagins # Замените это на dbt_ваше_имя, например, dbt_bilbo
threads: 1
timeout_seconds: 300
location: US
priority: interactive
- Запустите команду
debug
из вашего проекта, чтобы подтвердить, что вы можете успешно подключиться:
$ dbt debug
> Connection test: OK connection ok
Часто задаваемые вопросы
Выполнение вашего первого dbt run
Наш пример проекта содержит некоторые примерные модели. Мы проверим, можем ли мы их запустить, чтобы убедиться, что все в порядке.
- Введите команду
run
, чтобы построить примерные модели:
dbt run
Вы должны получить вывод, который выглядит следующим образом:
Зафиксируйте ваши изменения
Зафиксируйте ваши изменения, чтобы репозиторий содержал последний код.
- Свяжите репозиторий GitHub, который вы создали, с вашим проектом dbt, выполнив следующие команды в Терминале. Убедитесь, что вы используете правильный URL git для вашего репозитория, который вы должны были сохранить на шаге 5 в Создание репозитория.
git init
git branch -M main
git add .
git commit -m "Create a dbt project"
git remote add origin https://github.com/USERNAME/dbt-tutorial.git
git push -u origin main
- Вернитесь в ваш репозиторий GitHub, чтобы убедиться, что ваши новые файлы были добавлены.
Создайте ваши первые модели
Теперь, когда вы настроили ваш примерный проект, вы можете перейти к интересной части — созданию моделей! В следующих шагах вы возьмете пример запроса и превратите его в модель в вашем проекте dbt.
Переключитесь на новую ветку git
Переключитесь на новую ветку git, чтобы работать над новым кодом:
- Создайте новую ветку, используя команду
checkout
и передав флаг-b
:
$ git checkout -b add-customers-model
> Switched to a new branch `add-customer-model`
Создайте вашу первую модель
- Откройте ваш проект в вашем любимом текстовом редакторе.
- Создайте новый SQL файл в директории
models
, названныйmodels/customers.sql
. - Вставьте следующий запрос в файл
models/customers.sql
.
- BigQuery
- Databricks
- Redshift
- Snowflake
with customers as (
select
id as customer_id,
first_name,
last_name
from `dbt-tutorial`.jaffle_shop.customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from `dbt-tutorial`.jaffle_shop.orders
),
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 orders
group by 1
),
final as (
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 customers
left join customer_orders using (customer_id)
)
select * from final
with customers as (
select
id as customer_id,
first_name,
last_name
from jaffle_shop_customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from jaffle_shop_orders
),
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 orders
group by 1
),
final as (
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 customers
left join customer_orders using (customer_id)
)
select * from final
with customers as (
select
id as customer_id,
first_name,
last_name
from jaffle_shop.customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from jaffle_shop.orders
),
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 orders
group by 1
),
final as (
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 customers
left join customer_orders using (customer_id)
)
select * from final
with customers as (
select
id as customer_id,
first_name,
last_name
from raw.jaffle_shop.customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from raw.jaffle_shop.orders
),
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 orders
group by 1
),
final as (
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 customers
left join customer_orders using (customer_id)
)
select * from final
Этот код SQL выпол няет объединение данных из таблиц customers
и orders
, чтобы получить информацию о клиентах и их заказах. Он создает временные таблицы customers
, orders
и customer_orders
, а затем объединяет их в финальную таблицу final
, которая содержит идентификатор клиента, его имя и фамилию, дату первого и последнего заказа, а также количество заказов.
- Из командной строки введите
dbt run
.
Когда вы вернетесь в консоль BigQuery, вы можете выполнить select
из этой модели.
Часто задаваемые вопросы
Измените способ материализации вашей модели
Одной из самых мощных функций dbt является возможность изменять способ материализации модели в вашем хранилище данных, просто изменяя значение конфигурации. Вы можете переключаться между таблицами и представлениями, изменяя ключевое слово, вместо того чтобы писать язык определения данных (DDL) для выполнения этого за кулисами.
По умолчанию все создается как представление. Вы можете переопределить это на уровне директории, чтобы все в этой директории материализовалось по-другому.
-
Отредактируйте ваш файл
dbt_project.yml
.-
Обновите имя вашего проекта на:
dbt_project.ymlname: 'jaffle_shop'
-
Настройте
jaffle_shop
так, чтобы все в нем материализовалось как таблица; и настройтеexample
так, чтобы все в нем материализовалось как представление. Обновите блок конфигурацииmodels
следующим образом:dbt_project.ymlmodels:
jaffle_shop:
+materialized: table
example:
+materialized: view -
Нажмите Сохранить.
-
-
Введите команду
dbt run
. Ваша модельcustomers
теперь должна быть построена как таблица!к сведениюДля этого dbt сначала должен был выполнить оператор
drop view
(или API вызов на BigQuery), затем операторcreate table as
. -
Отредактируйте
models/customers.sql
, чтобы переопределитьdbt_project.yml
только для моделиcustomers
, добавив следующий фрагмент в начало, и нажмите Сохранить:models/customers.sql{{
config(
materialized='view'
)
}}
with customers as (
select
id as customer_id
...
) -
Введите команду
dbt run
. Ваша модельcustomers
теперь должна быть построена как представление.- Пользователям BigQuery необходимо выполнить
dbt run --full-refresh
вместоdbt run
, чтобы полностью применить изменения материализации.
- Пользователям BigQuery необходимо выполнить
-
Введите команду
dbt run --full-refresh
, чтобы изменения вступили в силу в вашем хранилище данных.