Быстрый старт для dbt и Starburst Galaxy
Введение
В этом руководстве по быстрому старту вы узнаете, как использовать dbt вместе с Starburst Galaxy. Руководство покажет вам, как:
- Загрузить данные в бакет Amazon S3. В этом руководстве AWS используется в качестве облачного провайдера исключительно в демонстрационных целях. Starburst Galaxy также поддерживает другие источники данных, такие как Google Cloud, Microsoft Azure и другие.
- Подключить Starburst Galaxy к бакету Amazon S3.
- Создавать таблицы с помощью Starburst Galaxy.
- Подключить dbt к Starburst Galaxy.
- Взять пример запроса и превратить его в модель в вашем dbt‑проекте. Модель в dbt — это оператор
select. - Добавить тесты к моделям.
- Документировать модели.
- Запланировать выполнение задания.
- Подключаться к нескольким источникам данных в дополнение к вашему бакету S3.
Вы можете бесплатно пройти курс dbt Fundamentals, если вам интересен формат обучения с видео.
Также вы можете посмотреть видео на YouTube Build Better Data Pipelines with dbt and Starburst, подготовленное компанией Starburst Data, Inc.
Предварительные требования
- У вас есть multi-tenant‑развертывание в dbt. Подробнее см. Tenancy.
- У вас есть учетная запись Starburst Galaxy. Если нет, вы можете начать с бесплатного пробного периода. Дополнительные сведения по первоначальной настройке см. в руководстве по началу работы в документации Starburst Galaxy.
- У вас есть учетная запись AWS с правами на загрузку данных в бакет S3.
- Для аутентификации Amazon S3 вам потребуется либо AWS access key и AWS secret key с доступом к бакету, либо кросс‑аккаунтная IAM‑роль с доступом к бакету. Подробнее см. документацию Starburst Galaxy:
Связанные материалы
- Курсы dbt Learn
- CI‑задание dbt
- Уведомления о заданиях
- Свежесть источников
- Обзор SQL для Starburst Galaxy
Загрузка данных в бакет Amazon S3
Используя Starburst Galaxy, вы можете создавать таблицы и трансформировать их с помощью dbt. Начните с загрузки данных Jaffle Shop (предоставлены dbt Labs) в ваш бакет Amazon S3. Jaffle Shop — это вымышленное кафе, продающее еду и напитки в нескольких городах США.
-
Скачайте следующие CSV‑файлы на локальный компьютер:
-
Загрузите эти файлы в S3. Подробности см. в разделе Upload objects документации Amazon S3.
При загрузке файлов необходимо создать следующую структуру папок и поместить соответствующий файл в каждую папку:
<bucket/blob>
dbt-quickstart (folder)
jaffle-shop-customers (folder)
jaffle_shop_customers.csv (file)
jaffle-shop-orders (folder)
jaffle_shop_orders.csv (file)
stripe-payments (folder)
stripe-payments.csv (file)
Подключение Starburst Galaxy к бакету Amazon S3
Если ваш экземпляр Starburst Galaxy еще не подключен к бакету S3, вам нужно создать кластер, настроить каталог, позволяющий Starburst Galaxy подключаться к S3, добавить каталог в кластер и настроить права доступа.
Помимо Amazon S3, Starburst Galaxy поддерживает множество других источников данных. Подробнее см. в разделе Catalogs overview документации Starburst Galaxy.
-
Создайте кластер. Нажмите Clusters на левой боковой панели интерфейса Starburst Galaxy, затем нажмите Create cluster в основной части страницы.
-
В модальном окне Create a new cluster укажите только следующие параметры (остальные можно оставить по умолчанию):
- Cluster name — введите имя кластера.
- Cloud provider region — выберите регион AWS.
Нажмите Create cluster.
-
Создайте каталог. Нажмите Catalogs на левой боковой панели, затем Create catalog.
-
На странице Create a data source выберите плитку Amazon S3.
-
В разделе Name and description страницы Amazon S3 заполните поля.
-
В разделе Authentication to S3 выберите механизм аутентификации AWS (S3), который вы используете.
-
В разделе Metastore configuration задайте следующие параметры:
- Default S3 bucket name — имя бакета S3, к которому вы хотите получить доступ.
- Default directory name — имя папки в бакете S3, где находятся данные Jaffle Shop (та же папка, что и в разделе Load data to an Amazon S3 bucket).
- Allow creating external tables — включите.
- Allow writing to external tables — включите.
Страница Amazon S3 должна выглядеть примерно так же, за исключением раздела Authentication to S3, который зависит от вашей конфигурации:
-
Нажмите Test connection, чтобы проверить доступ Starburst Galaxy к вашему бакету S3.
-
Если тест прошел успешно, нажмите Connect catalog.
-
На странице Set permissions нажмите Skip — при необходимости вы сможете добавить права позже.
-
На странице Add to cluster выберите кластер из выпадающего списка и нажмите Add to cluster.
-
Добавьте привилегию location для вашего бакета S3 к роли в Starburst Galaxy. В левой боковой панели нажмите Access control > Roles and privileges, затем в таблице Roles выберите роль accountadmin.
Если вы используете существующий кластер и не имеете доступа к роли accountadmin, выберите роль, к которой у вас есть доступ.
Подробнее о контроле доступа см. в разделе Access control документации Starburst Galaxy.
-
На странице Roles откройте вкладку Privileges и нажмите Add privilege.
-
На странице Add privilege задайте:
- What would you like to modify privileges for? — выберите Location.
- Enter a storage location provide — укажите путь к вашему бакету S3 и папке с данными Jaffle Shop. Обязательно добавьте
/*в конце. - Create SQL — включите.
Нажмите Add privileges.
Создание таблиц в Starburst Galaxy
Чтобы выполнять запросы к данным Jaffle Shop через Starburst Galaxy, необходимо создать таблицы на основе данных, которые вы загрузили в бакет S3. Это можно сделать (как и выполнить любой SQL‑запрос) из редактора запросов.
-
В левой боковой панели нажмите Query > Query editor.
-
Настройте редактор запросов для работы с вашим бакетом S3. В правом верхнем углу выберите кластер в первом сером поле и каталог — во втором:
-
Скопируйте и вставьте следующие запросы в редактор и выполните каждый по отдельности (Run).
Замените
YOUR_S3_BUCKET_NAMEна имя вашего бакета S3. Эти запросы создают схемуjaffle_shopи таблицыjaffle_shop_customers,jaffle_shop_ordersиstripe_payments:CREATE SCHEMA jaffle_shop WITH (location='s3://YOUR_S3_BUCKET_NAME/dbt-quickstart/');
CREATE TABLE jaffle_shop.jaffle_shop_customers (
id VARCHAR,
first_name VARCHAR,
last_name VARCHAR
)
WITH (
external_location = 's3://YOUR_S3_BUCKET_NAME/dbt-quickstart/jaffle-shop-customers/',
format = 'csv',
type = 'hive',
skip_header_line_count=1
);
CREATE TABLE jaffle_shop.jaffle_shop_orders (
id VARCHAR,
user_id VARCHAR,
order_date VARCHAR,
status VARCHAR
)
WITH (
external_location = 's3://YOUR_S3_BUCKET_NAME/dbt-quickstart/jaffle-shop-orders/',
format = 'csv',
type = 'hive',
skip_header_line_count=1
);
CREATE TABLE jaffle_shop.stripe_payments (
id VARCHAR,
order_id VARCHAR,
paymentmethod VARCHAR,
status VARCHAR,
amount VARCHAR,
created VARCHAR
)
WITH (
external_location = 's3://YOUR_S3_BUCKET_NAME/dbt-quickstart/stripe-payments/',
format = 'csv',
type = 'hive',
skip_header_line_count=1
); -
После выполнения запросов в левой боковой панели редактора вы увидите следующую иерархию:
-
Проверьте, что таблицы были успешно созданы, выполнив запросы:
select * from jaffle_shop.jaffle_shop_customers;
select * from jaffle_shop.jaffle_shop_orders;
select * from jaffle_shop.stripe_payments;
Подключение dbt к Starburst Galaxy
-
Убедитесь, что вы вошли в Starburst Galaxy.
-
Если вы еще этого не сделали, установите роль учетной записи accountadmin. Нажмите на адрес электронной почты в правом верхнем углу, выберите Switch role и укажите accountadmin.
Если эта роль недоступна, выберите роль, которую вы использовали при добавлении привилегии location в разделе Connect Starburst Galaxy to the Amazon S3 bucket.
-
В левой боковой панели нажмите Clusters.
-
Найдите ваш кластер в таблице View clusters и нажмите Connection info. В выпадающем списке Select client выберите dbt. Оставьте модальное окно Connection information открытым — эти данные понадобятся в dbt.
-
В другой вкладке браузера войдите в dbt.
-
Создайте новый проект в dbt. Нажмите на имя учетной записи в левом меню, выберите Account settings и нажмите + New Project.
-
Введите имя проекта и нажмите Continue.
-
Выберите Starburst в качестве подключения и нажмите Next.
-
Укажите Settings:
- Host — значение Host из окна Connection information в Starburst Galaxy.
- Port — 443 (значение по умолчанию).
-
Укажите Development Credentials:
- User — значение User из окна Connection information. Обязательно используйте всю строку целиком, включая роль учетной записи после
/. - Password — пароль для входа в Starburst Galaxy.
- Database — каталог Starburst, в который будут сохраняться данные. Для справки: в dbt и Starburst Galaxy термины database и catalog используются как синонимы.
- Остальные параметры оставьте без изменений.
- User — значение User из окна Connection information. Обязательно используйте всю строку целиком, включая роль учетной записи после
-
Нажмите Test Connection, чтобы проверить доступ dbt к кластеру Starburst Galaxy.
-
Если тест успешен, нажмите Next. Если нет — проверьте настройки и учетные данные.
Настройка репозитория, управляемого dbt
При разработке в dbt вы можете использовать Git для управления версиями вашего кода.
Чтобы подключиться к репозиторию, вы можете либо настроить размещённый в dbt managed repository, либо напрямую подключиться к поддерживаемому git‑провайдеру. Managed repositories — это отличный способ попробовать dbt без необходимости создавать новый репозиторий. В долгосрочной перспективе лучше подключиться к поддерживаемому git‑провайдеру, чтобы использовать такие возможности, как автоматизация и непрерывная интеграция.
Чтобы настроить управляемый репозиторий:
- В разделе "Настроить репозиторий" выберите Управляемый.
- Введите имя для вашего репозитория, например,
bbaggins-dbt-quickstart. - Нажмите Создать. Создание и импорт вашего репозитория займет несколько секунд.
- Как только вы увидите сообщение "Репозиторий успешно импортирован", нажмите Продолжить.
Инициализация dbt‑проекта и начало разработки
Теперь, когда репозиторий настроен, вы можете инициализировать проект и начать разработку в dbt:
- Нажмите Start developing in the Studio IDE. Первый запуск может занять несколько минут.
- Над деревом файлов слева нажмите Initialize dbt project.
- Сделайте первый коммит: нажмите Commit and sync, используйте сообщение
initial commitи нажмите Commit. - Теперь вы можете выполнять запросы и запускать
dbt run. Попробуйте:- Нажмите + Create new file, добавьте запрос и сохраните файл:
select * from dbt_quickstart.jaffle_shop.jaffle_shop_customers - В командной строке внизу выполните
dbt run. Вы должны увидеть сообщениеdbt run succeeded.
- Нажмите + Create new file, добавьте запрос и сохраните файл:
Создание первой модели
У вас есть два варианта работы с файлами в Studio IDE:
- Создать новую ветку (рекомендуется).
- Редактировать в защищенной основной ветке.
Назовите новую ветку add-customers-model.
- Нажмите ... рядом с каталогом
modelsи выберите Create file. - Назовите файл
customers.sql. - Вставьте следующий запрос и нажмите Save.
with customers as (
select
id as customer_id,
first_name,
last_name
from dbt_quickstart.jaffle_shop.jaffle_shop_customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from dbt_quickstart.jaffle_shop.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 on customers.customer_id = customer_orders.customer_id
)
select * from final
- Выполните
dbt run— вы должны увидеть успешное выполнение и три модели.
Позже вы сможете подключить BI‑инструменты к этим представлениям и таблицам, чтобы они читали уже очищенные данные.
FAQs
Изменение способа материализации модели
Одной из самых мощных функций dbt является возможность изменять способ материализации модели в вашем хранилище данных, просто изменяя значение конфигурации. Вы можете переключаться между таблицами и представлениями, изменяя ключевое слово, вместо того чтобы писать язык определения данных (DDL) для выполнения этого за кулисами.
По умолчанию все создается как представление. Вы можете переопределить это на уровне директории, чтобы все в этой директории материализовалось по-другому.
-
Отредактируйте ваш файл
dbt_project.yml.-
Обновите имя вашего проекта на:
dbt_project.ymlname: 'jaffle_shop' -
Настройте
jaffle_shopтак, чтобы всё внутри него материализовалось как таблица; и настройтеexampleтак, чтобы всё внутри него материализовалось как представление (view). Обновите конфигурациюmodelsв YAML-файле проекта следующим образом: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, чтобы изменения вступили в силу в вашем хранилище данных.
Часто задаваемые вопросы
Удаление примеров моделей
Теперь вы можете удалить файлы, которые dbt создал при инициализации проекта:
-
Удалите директорию
models/example/. -
Удалите ключ
example:из вашего файлаdbt_project.yml, а также любые конфигурации, которые перечислены под ним.dbt_project.yml# до
models:
jaffle_shop:
+materialized: table
example:
+materialized: viewdbt_project.yml# после
models:
jaffle_shop:
+materialized: table -
Сохраните изменения.
Часто задаваемые вопросы
Построение моделей поверх других моделей
Как лучшая практика в SQL, следует разделять логику, которая очищает ваши данные, от логики, которая трансформирует ваши данные. Вы уже начали делать это в существующем запросе, используя общие табличные выражения (CTE).
Теперь вы можете поэкспериментировать, разделив логику на отдельные модели и используя функцию ref для построения моделей на основе других моделей:
-
Создайте файл
models/stg_customers.sqlс SQL из CTEcustomers. -
Создайте файл
models/stg_orders.sqlс SQL из CTEorders.models/stg_customers.sqlselect
id as customer_id,
first_name,
last_name
from dbt_quickstart.jaffle_shop.jaffle_shop_customersmodels/stg_orders.sqlselect
id as order_id,
user_id as customer_id,
order_date,
status
from dbt_quickstart.jaffle_shop.jaffle_shop_orders -
Отредактируйте
models/customers.sqlследующим образом:models/customers.sqlwith customers as (
select * from {{ ref('stg_customers') }}
),
orders as (
select * from {{ ref('stg_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 on customers.customer_id = customer_orders.customer_id
)
select * from final -
Выполните
dbt run.На этот раз dbt создаст отдельные представления/таблицы для
stg_customers,stg_ordersиcustomers. Порядок выполнения будет определен автоматически на основе зависимостей.
FAQs
Добавьте тесты к вашим моделям
Добавление data tests в проект помогает убедиться, что ваши модели работают корректно.
Чтобы добавить data tests в проект:
-
Создайте новый YAML-файл в директории
models, назвав егоmodels/schema.yml. -
Добавьте в файл следующее содержимое:
models/schema.ymlversion: 2
models:
- name: customers
columns:
- name: customer_id
data_tests:
- unique
- not_null
- name: stg_customers
columns:
- name: customer_id
data_tests:
- unique
- not_null
- name: stg_orders
columns:
- name: order_id
data_tests:
- unique
- not_null
- name: status
data_tests:
- accepted_values:
arguments: # available in v1.10.5 and higher. Older versions can set the <argument_name> as the top-level property.
values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']
- name: customer_id
data_tests:
- not_null
- relationships:
arguments:
to: ref('stg_customers')
field: customer_id -
Запустите
dbt testи убедитесь, что все ваши тесты прошли успешно.
Когда вы запускаете dbt test, dbt проходит по вашим YAML-файлам и создает запрос для каждого теста. Каждый запрос вернет количество записей, которые не прошли тест. Если это число равно 0, то тест считается успешным.
Часто задаваемые вопросы
Документируйте ваши модели
Добавление документации в ваш проект позволяет подробно описывать ваши модели и делиться этой информацией с вашей командой. Здесь мы добавим базовую документацию в наш проект.
-
Обновите ваш файл
models/schema.yml, чтобы включить в него некоторые описания, как показано ниже.models/schema.ymlversion: 2
models:
- name: customers
description: Одна запись на каждого клиента
columns:
- name: customer_id
description: Первичный ключ
data_tests:
- unique
- not_null
- name: first_order_date
description: NULL, если клиент еще не сделал заказ.
- name: stg_customers
description: Эта модель очищает данные о клиентах
columns:
- name: customer_id
description: Первичный ключ
data_tests:
- unique
- not_null
- name: stg_orders
description: Эта модель очищает данные о заказах
columns:
- name: order_id
description: Первичный ключ
data_tests:
- unique
- not_null
- name: status
data_tests:
- accepted_values:
arguments: # available in v1.10.5 and higher. Older versions can set the <argument_name> as the top-level property.
values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']
- name: customer_id
data_tests:
- not_null
- relationships:
arguments:
to: ref('stg_customers')
field: customer_id -
Запустите
dbt docs generate, чтобы сгенерировать документацию для вашего проекта. dbt анализирует ваш проект и ваш склад данных, чтобы создать JSON файл с подробной документацией о вашем проекте.
- Нажмите на значок книги в интерфейсе Develop, чтобы открыть документацию в новой вкладке.
Часто задаваемые вопросы
Зафиксируйте изменения
Теперь, когда вы построили модель customers, нужно закоммитить внесённые в проект изменения, чтобы в репозитории оказался ваш актуальный код.
Если вы редактировали прямо в защищённой основной ветке:
- Нажмите кнопку Commit and sync git. Это действие подготовит ваши изменения к коммиту.
- Появится модальное окно Commit to a new branch.
- В модальном окне задайте имя новой ветки
add-customers-model. Эта ветка будет создана от вашей основной ветки вместе с новыми изменениями. - Добавьте сообщение коммита, например «Add customers model, tests, docs», и закоммитьте изменения.
- Нажмите Merge this branch to main, чтобы добавить эти изменения в ветку main вашего репозитория.
Если вы создали новую ветку до редактирования:
- Поскольку вы уже ответвились от защищённой основной ветки, слева перейдите в Version Control.
- Нажмите Commit and sync, чтобы добавить сообщение.
- Добавьте сообщение коммита, например «Add customers model, tests, docs».
- Нажмите Merge this branch to main, чтобы добавить эти изменения в ветку main вашего репозитория.
Разверните dbt
Используйте Scheduler в dbt, чтобы уверенно разворачивать продакшен‑джобы и добавлять наблюдаемость в ваши процессы. В следующих шагах вы научитесь создавать deployment environment и запускать job.
Создайте окружение развертывания (deployment environment)
- В главном меню перейдите в Orchestration > Environments.
- Нажмите Create environment.
- В поле Name введите имя окружения развертывания. Например, «Production».
- В поле dbt Version выберите последнюю версию из выпадающего списка.
- В разделе Deployment connection укажите имя датасета, который вы хотите использовать как target, например «Analytics». Это позволит dbt собирать объекты и работать с этим датасетом. В некоторых хранилищах данных целевой датасет может называться «schema».
- Нажмите Save.
Создайте и запустите job
Jobs — это набор команд dbt, которые вы хотите запускать по расписанию. Например, dbt build.
По мере того как бизнес jaffle_shop получает больше клиентов, а эти клиенты создают больше заказов, в исходных данных будет появляться больше записей. Поскольку вы материализовали модель customers как таблицу, вам нужно периодически пересобирать её, чтобы данные оставались актуальными. Это обновление будет происходить при запуске job.
- После создания окружения развертывания вы должны попасть на страницу нового окружения. Если нет — в главном меню выберите Orchestration, затем нажмите Jobs.
- Нажмите Create job > Deploy job.
- Укажите имя job (например, «Production run») и выберите окружение, которое вы только что создали.
- Прокрутите вниз до раздела Execution settings.
- В разделе Commands добавьте эту команду как часть job, если её нет:
dbt build
- Выберите опцию Generate docs on run, чтобы автоматически генерировать обновлённую документацию проекта при каждом запуске job.
- Для этого упражнения не задавайте расписание запуска проекта — хотя проекты в вашей организации должны выполняться регулярно, нет необходимости запускать этот примерный проект по расписанию. Планирование job иногда называют развёртыванием проекта.
- Нажмите Save, затем Run now, чтобы запустить job.
- Откройте запуск и следите за прогрессом в Run summary.
- Когда запуск завершится, нажмите View Documentation, чтобы посмотреть документацию проекта.
Поздравляем 🎉! Вы только что развернули свой первый dbt‑проект!
FAQs
Подключение к нескольким источникам данных
Этот быстрый старт посвящен использованию dbt для запуска моделей поверх data lake (S3) с помощью Starburst Galaxy в качестве движка запросов. В реальных сценариях данные обычно распределены по нескольким источникам и хранятся в разных форматах. С помощью Starburst Galaxy, Starburst Enterprise и Trino вы можете запускать модели над любыми данными, независимо от места их хранения.
Если вы хотите попробовать это, обратитесь к документации Starburst Galaxy, добавьте дополнительные источники данных и загрузите данные Jaffle Shop в выбранный источник. Затем расширьте свои модели, чтобы они обращались как к новому источнику данных, так и к источнику, созданному в рамках этого быстрого старта.





