# Быстрый старт для dbt и Databricks

> **Using this guide with an AI assistant**
>
> * In the first reply, confirm the reader’s prerequisites and connection path before listing steps. Then default to one guide section per reply (combine two or three short sections), with all its steps, labeled Step 1, Step 2, and so on, and confirm the success check before continuing. If the reader asks for a different pace, follow it.
> * This guide uses dbt platform. Don’t switch the reader to a local setup. If the reader wants to set up dbt locally, use the <https://docs.getdbt.com/guides/dbt> guide instead
> * Never ask for passwords or keys in chat.
> * When the reader needs a dbt account, share <https://www.getdbt.com/signup?utm_source=ai_assistant&utm_medium=docs_md&utm_campaign=databricks-qs>

[Назад к гайдам](https://docs.getdbt.tech/guides.md)

[Menu ]()



## Введение

В этом кратком руководстве вы узнаете, как использовать dbt с Databricks. В нём показано, как:

* Создать рабочее пространство Databricks.
* Загрузить тестовые данные в свою учётную запись Databricks.
* Подключить dbt к Databricks.
* Взять пример запроса и превратить его в модель в вашем проекте dbt. Модель в dbt — это SQL-запрос SELECT.
* Добавить тесты к вашим моделям.
* Документировать ваши модели.
* Настроить запуск задания по расписанию.

### Предварительные требования

* У вас есть [учетная запись dbt](https://www.getdbt.com/signup/).
* У вас есть учетная запись у поставщика облачных услуг (например, AWS, GCP или Azure) и разрешения на создание бакета S3 с помощью этой учетной записи. В этом руководстве для демонстрации используется AWS в качестве поставщика облачных услуг.

### Связанные материалы

* Узнайте больше с [курсами dbt Learn](https://learn.getdbt.com)
* [CI задания](https://docs.getdbt.tech/docs/deploy/continuous-integration.md)
* [Развертывание заданий](https://docs.getdbt.tech/docs/deploy/deploy-jobs.md)
* [Уведомления о заданиях](https://docs.getdbt.tech/docs/deploy/job-notifications.md)
* [Актуальность источников](https://docs.getdbt.tech/docs/deploy/source-freshness.md)

Видео для вас

Если вам интересны учебные курсы с видео, вы можете бесплатно пройти [dbt Fundamentals](https://learn.getdbt.com/courses/dbt-fundamentals).

## Создайте рабочую область Databricks

1. Используйте ваш существующий аккаунт или [зарегистрируйтесь для получения аккаунта Databricks](https://databricks.com/). Заполните форму с вашей пользовательской информацией и нажмите **Continue**.

   [![Регистрация в Databricks](/img/databricks_tutorial/images/signup_form.png?v=2 "Регистрация в Databricks")](#)Регистрация в Databricks

2. На следующем экране выберите вашего облачного провайдера. В этом руководстве используется AWS в качестве облачного провайдера, но если вы используете Azure или GCP, выберите вашу платформу. Процесс настройки будет аналогичным. Не выбирайте опцию **Get started with Community Edition**, так как она не предоставит необходимую вычислительную мощность для этого руководства.

   [![Выбор облачного провайдера](/img/databricks_tutorial/images/choose_provider.png?v=2 "Выбор облачного провайдера")](#)Выбор облачного провайдера

3. Проверьте вашу электронную почту и завершите процесс верификации.

4. После завершения процесса верификации вы попадете на первый экран настройки. Databricks по умолчанию выбирает план `Premium`, и вы можете изменить пробный период на `Enterprise` на этой странице.

   [![Выбор плана Databricks](/img/databricks_tutorial/images/choose_plan.png?v=2 "Выбор плана Databricks")](#)Выбор плана Databricks

5. Теперь пришло время создать ваше первое рабочее пространство. Рабочее пространство Databricks — это среда для доступа ко всем вашим ресурсам Databricks. Рабочее пространство организует такие объекты, как блокноты, SQL-склады, кластеры и многое другое, в одном месте. Укажите имя вашего рабочего пространства, выберите соответствующий регион AWS и нажмите **Start Quickstart**. Возможно, вы увидите флажок **I have data in S3 that I want to query with Databricks**. Вам не нужно отмечать его для этого руководства.

   [![Создание ресурсов AWS](/img/databricks_tutorial/images/start_quickstart.png?v=2 "Создание ресурсов AWS")](#)Создание ресурсов AWS

6. Нажав на `Start Quickstart`, вы будете перенаправлены на AWS и вам будет предложено войти в систему, если вы еще этого не сделали. После входа в систему вы должны увидеть страницу, похожую на эту.

   [![Создание ресурсов AWS](/img/databricks_tutorial/images/quick_create_stack.png?v=2 "Создание ресурсов AWS")](#)Создание ресурсов AWS

подсказка

Если вы получаете ошибку сессии и не перенаправляетесь на эту страницу, вы можете вернуться в интерфейс Databricks и создать рабочее пространство из интерфейса. Все, что вам нужно сделать, это нажать **create workspaces**, выбрать quickstart, заполнить форму и нажать **Start Quickstart**.

7. Нет необходимости изменять какие-либо из предварительно заполненных полей в Параметрах. Просто добавьте ваш пароль Databricks в разделе **Databricks Account Credentials**. Отметьте Подтверждение и нажмите **Create stack**.

   [![Параметры](/img/databricks_tutorial/images/parameters.png?v=2 "Параметры")](#)Параметры

   [![Возможности](/img/databricks_tutorial/images/create_stack.png?v=2 "Возможности")](#)Возможности

8. Вернитесь на вкладку Databricks. Вы должны увидеть, что ваше рабочее пространство готово к использованию.

   [![Рабочее пространство Databricks](/img/databricks_tutorial/images/workspaces.png?v=2 "Рабочее пространство Databricks")](#)Рабочее пространство Databricks

9. Теперь давайте перейдем в рабочее пространство. Нажмите **Open** и войдите в рабочее пространство, используя те же данные для входа, что и для входа в аккаунт.

## Загрузка данных

1. Скачайте эти CSV-файлы (пример данных Jaffle Shop), которые вам понадобятся для этого руководства:

   * [jaffle\_shop\_customers.csv](https://dbt-tutorial-public.s3-us-west-2.amazonaws.com/jaffle_shop_customers.csv)
   * [jaffle\_shop\_orders.csv](https://dbt-tutorial-public.s3-us-west-2.amazonaws.com/jaffle_shop_orders.csv)
   * [stripe\_payments.csv](https://dbt-tutorial-public.s3-us-west-2.amazonaws.com/stripe_payments.csv)

2. Сначала нам нужен SQL-склад. Найдите выпадающее меню и переключитесь в пространство SQL.

   [![Пространство SQL](/img/databricks_tutorial/images/go_to_sql.png?v=2 "Пространство SQL")](#)Пространство SQL

3. Сейчас мы будем настраивать SQL-склад. Выберите **SQL Warehouses** в консоли слева. Вы увидите, что существует склад SQL по умолчанию.

4. Нажмите **Start** на Starter Warehouse. Это займет несколько минут, чтобы запустить необходимые ресурсы.

5. Как только SQL-склад будет запущен, нажмите **New**, а затем **File upload** в выпадающем меню.

   [![Новая загрузка файла с использованием Databricks SQL](/img/databricks_tutorial/images/new_file_upload_using_databricks_SQL.png?v=2 "Новая загрузка файла с использованием Databricks SQL")](#)Новая загрузка файла с использованием Databricks SQL

6. Давайте сначала загрузим данные Jaffle Shop Customers. Перетащите файл `jaffle_shop_customers.csv` в интерфейс.

   [![Загрузчик таблиц Databricks](/img/databricks_tutorial/images/databricks_table_loader.png?v=2 "Загрузчик таблиц Databricks")](#)Загрузчик таблиц Databricks

7. Обновите атрибуты таблицы вверху:

   * **data\_catalog** = hive\_metastore

   * **database** = default

   * **table** = jaffle\_shop\_customers

   * Убедитесь, что типы данных столбцов корректны. Вы можете сделать это, наведя курсор на значок типа данных рядом с именем столбца.

     * **ID** = bigint
     * **FIRST\_NAME** = string
     * **LAST\_NAME** = string

   [![Загрузка клиентов jaffle shop](/img/databricks_tutorial/images/jaffle_shop_customers_upload.png?v=2 "Загрузка клиентов jaffle shop")](#)Загрузка клиентов jaffle shop

8. Нажмите **Create** внизу, когда закончите.

9. Теперь давайте сделаем то же самое для `Jaffle Shop Orders` и `Stripe Payments`.

[![Загрузка заказов jaffle shop](/img/databricks_tutorial/images/jaffle_shop_orders_upload.png?v=2 "Загрузка заказов jaffle shop")](#)Загрузка заказов jaffle shop

[![Загрузка платежей Stripe](/img/databricks_tutorial/images/stripe_payments_upload.png?v=2 "Загрузка платежей Stripe")](#)Загрузка платежей Stripe

10. После этого убедитесь, что вы можете выполнять запросы к учебным данным. Перейдите в `SQL Editor` через меню слева. Это приведет вас к редактору запросов.

11. Убедитесь, что вы можете выполнить `select *` из каждой из таблиц с помощью следующих фрагментов кода.

    ```sql
    select * from default.jaffle_shop_customers
    select * from default.jaffle_shop_orders
    select * from default.stripe_payments
    ```

    [![Проверка запроса](/img/databricks_tutorial/images/query_check.png?v=2 "Проверка запроса")](#)Проверка запроса

12. Чтобы гарантировать, что любые пользователи, которые могут работать над вашим проектом dbt, имеют доступ к вашему объекту, выполните эту команду.

    ```sql
    grant all privileges on schema default to users;
    ```

## Подключение dbt к Databricks

Есть два способа подключить dbt к Databricks. Первый — Partner Connect, который упрощает настройку и позволяет создать учетную запись dbt непосредственно из новой пробной учетной записи Databricks. Второй — создать учетную запись dbt отдельно и самостоятельно настроить подключение к Databricks (подключиться вручную). Если вы хотите быстро приступить к работе, dbt Labs рекомендует использовать Partner Connect. Если вы хотите с самого начала настроить все под свои требования и ознакомиться с процессом настройки dbt, dbt Labs рекомендует подключиться вручную.

Если вы хотите начать работу как можно быстрее, dbt Labs рекомендует использовать Partner Connect. Если же вы хотите с самого начала настроить конфигурацию под свои требования и лучше разобраться в процессе настройки , dbt Labs рекомендует подключаться вручную.

## Настройка интеграции через Partner Connect

примечание

Partner Connect предназначен для пробных учетных записей партнеров. Если у вашей организации уже есть учетная запись dbt, выполните подключение вручную. Инструкции см. в разделе [Подключение к dbt вручную](https://docs.databricks.com/partners/prep/dbt-cloud.html#connect-to-dbt-cloud-manually) документации Databricks.

Чтобы подключить dbt к Databricks с помощью Partner Connect, выполните следующие действия:

1. В боковой панели вашего аккаунта Databricks нажмите **Partner Connect**.

2. Нажмите на **плитку dbt**.

3. Выберите каталог из выпадающего списка, а затем нажмите **Next**. Выпадающий список отображает каталоги, к которым у вас есть доступ на чтение и запись. Если ваше рабочее пространство не `<UC>-enabled`, используется устаревший Hive metastore (`hive_metastore`).

4. Если в вашем рабочем пространстве есть SQL-склады, выберите SQL-склад из выпадающего списка. Если ваш SQL-склад остановлен, нажмите **Start**.

5. Если в вашем рабочем пространстве нет SQL-складов:

   1. Нажмите **Create warehouse**. В вашем браузере откроется новая вкладка, на которой отображается страница **New SQL Warehouse** в интерфейсе Databricks SQL.
   2. Следуйте шагам в [Создание SQL-склада](https://docs.databricks.com/en/sql/admin/create-sql-warehouse.html#create-a-sql-warehouse) в документации Databricks.
   3. Вернитесь на вкладку Partner Connect в вашем браузере и закройте **плитку dbt**.
   4. Снова откройте **плитку dbt**.
   5. Выберите SQL-склад, который вы только что создали, из выпадающего списка.

6. Выберите схему из выпадающего списка, а затем нажмите **Add**. Выпадающий список отображает схемы, к которым у вас есть доступ на чтение и запись. Вы можете повторить этот шаг, чтобы добавить несколько схем.

   Partner Connect создает следующие ресурсы в вашем рабочем пространстве:

   * Сервисный принципал Databricks с именем **DBT\_CLOUD\_USER**.
   * Личный токен доступа Databricks, связанный с сервисным принципалом **DBT\_CLOUD\_USER**.

   Partner Connect также предоставляет следующие привилегии сервисному принципалу **DBT\_CLOUD\_USER**:

   * (Unity Catalog) **USE CATALOG**: Необходим для взаимодействия с объектами в выбранном каталоге.
   * (Unity Catalog) **USE SCHEMA**: Необходим для взаимодействия с объектами в выбранной схеме.
   * (Unity Catalog) **CREATE SCHEMA**: Предоставляет возможность создавать схемы в выбранном каталоге.
   * (Hive metastore) **USAGE**: Необходим для предоставления привилегий **SELECT** и **READ\_METADATA** для выбранных вами схем.
   * **SELECT**: Предоставляет возможность читать выбранные вами схемы.
   * (Hive metastore) **READ\_METADATA**: Предоставляет возможность читать метаданные для выбранных вами схем.
   * **CAN\_USE**: Предоставляет разрешения на использование выбранного вами SQL-склада.

7. Нажмите **Next**.

В поле **Email** отображается адрес электронной почты вашей учетной записи Databricks. dbt Labs использует этот адрес электронной почты, чтобы предложить вам создать пробную учетную запись dbt.

9. Нажмите **Connect to dbt**.

   В вашем веб-браузере откроется новая вкладка, на которой отображается веб-сайт getdbt.com.

10. Следуйте инструкциям на экране на сайте getdbt.com, чтобы создать пробную учетную запись dbt.

## Настройка репозитория под управлением dbt

При разработке в dbt вы можете использовать [Git](https://docs.getdbt.tech/docs/platform/git/git-version-control.md) для управления версиями кода.

Чтобы подключиться к репозиторию, вы можете настроить [управляемый репозиторий](https://docs.getdbt.tech/docs/platform/git/managed-repository.md), размещённый на стороне dbt, или напрямую подключиться к [поддерживаемому Git-провайдеру](https://docs.getdbt.tech/docs/platform/git/connect-github.md). Управляемые репозитории — отличный способ попробовать dbt без необходимости создавать новый репозиторий. В долгосрочной перспективе лучше подключиться к поддерживаемому Git-провайдеру, чтобы использовать такие возможности, как автоматизация и [непрерывная интеграция](https://docs.getdbt.tech/docs/deploy/continuous-integration.md).

Чтобы настроить управляемый репозиторий:

1. В разделе "Настроить репозиторий" выберите **Управляемый**.
2. Введите имя для вашего репозитория, например, `bbaggins-dbt-quickstart`.
3. Нажмите **Создать**. Создание и импорт вашего репозитория займет несколько секунд.
4. Как только вы увидите сообщение "Репозиторий успешно импортирован", нажмите **Продолжить**.

## Инициализация вашего проекта dbt и начало разработки

Теперь, когда репозиторий настроен, вы можете инициализировать проект и начать разработку в dbt:

1. Нажмите **Start developing in the Studio IDE**. Первый запуск проекта может занять несколько минут: за это время устанавливается соединение с Git, клонируется репозиторий и проверяется подключение к хранилищу данных.

2. Над деревом файлов слева нажмите **Initialize dbt project**. Это создаст структуру папок с примерами моделей.

3. Создайте первый коммит, нажав **Commit and sync**. Укажите сообщение коммита `initial commit` и нажмите **Commit**. Это создаст первый коммит в управляемом репозитории и позволит вам создать ветку, в которой можно добавлять новый код dbt.

4. Теперь вы можете напрямую запрашивать данные из хранилища и выполнять `dbt run`. Попробуйте сделать это прямо сейчас:

   * Нажмите **+ Create new file**, добавьте этот запрос в новый файл и нажмите **Save as**, чтобы сохранить его:

     ```sql
     select * from default.jaffle_shop_customers
     ```

   * В командной строке внизу введите `dbt run` и нажмите **Enter**. Вы должны увидеть сообщение `dbt run succeeded`.

## Создание вашей первой модели

Если вы хотите использовать ИИ для создания своей первой модели, ознакомьтесь с разделом [«Создайте модель с помощью dbt Wizard»](#build-it-with-ai-using-dbt-wizard) ниже.

У вас есть два варианта работы с файлами в Studio IDE:

* Создать новую ветку (рекомендуется) — Создайте новую ветку для редактирования и фиксации изменений. Перейдите в раздел **Version Control** на левой боковой панели и нажмите **Create branch**.
* Редактировать в защищённой основной ветке — Если вы предпочитаете редактировать, форматировать файлы или проверять их линтером, а также выполнять команды dbt непосредственно в основной ветке Git. Studio IDE не позволяет создавать коммиты в защищённой ветке, поэтому вам будет предложено зафиксировать изменения в новой ветке.

Назовите новую ветку `add-customers-model`.

1. Нажмите на **...** рядом с директорией `models`, затем выберите **Create file**.
2. Назовите файл `customers.sql`, затем нажмите **Create**.
3. Скопируйте следующий запрос в файл и нажмите **Save**.

```sql
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
```

4. Введите `dbt run` в командной строке внизу экрана. Вы должны получить успешное выполнение и увидеть три модели.

Позже вы сможете подключить свои инструменты бизнес-аналитики (BI), например [dbt Charts](https://dbtcharts.com/), к этим представлениям и таблицам, чтобы они считывали только очищенные, а не сырые данные.

#### Часто задаваемые вопросы

Как посмотреть SQL, который выполняет dbt?

Чтобы посмотреть SQL, который выполняет dbt, вы можете заглянуть в:

* dbt:
  * В выводе запуска нажмите на название модели, а затем выберите «Details»

* dbt v1:

  * Директория `target/compiled/` для скомпилированных операторов `select`
  * Директория `target/run/` для скомпилированных операторов `create`
  * Файл `logs/dbt.log` для подробного логирования

Как dbt выбирает, в какой схеме строить мои модели?

По умолчанию dbt создаёт модели в вашей целевой схеме. Чтобы изменить целевую схему:

* Если вы разрабатываете в **dbt**, эти настройки задаются для каждого пользователя при первом использовании среды разработки.
* Если вы разрабатываете с помощью **dbt v1**, за это отвечает параметр `schema:` в вашем файле `profiles.yml`.

Если вы хотите распределить ваши модели по нескольким схемам, ознакомьтесь с документацией по [использованию пользовательских схем](https://docs.getdbt.tech/docs/build/custom-schemas.md).

Примечание: в BigQuery `dataset` используется как синоним `schema`.

Нужно ли создавать целевую схему перед запуском dbt?

Нет! dbt проверит, существует ли схема, когда она запускается. Если схема не существует, dbt создаст её для вас.

Если я перезапущу dbt, будет ли простой, пока модели перестраиваются?

Нет! SQL, который dbt генерирует за кулисами, гарантирует, что любые связи заменяются атомарно (т.е. ваши бизнес-пользователи не испытают никакого простоя).

Реализация этого процесса варьируется в зависимости от каждого хранилища данных, проверьте [логи](https://docs.getdbt.tech/faqs/Runs/checking-logs.md), чтобы увидеть, какой SQL выполняет dbt.

Что произойдет, если в моем SQL-запросе ошибка или я получу ошибку базы данных?

Если в вашем SQL есть ошибка, dbt вернет ошибку, которую возвращает ваша база данных.

```shell
$ dbt run --select customers
Running with dbt=1.9.0
Found 3 models, 9 tests, 0 snapshots, 0 analyses, 133 macros, 0 operations, 0 seed files, 0 sources

14:04:12 | Concurrency: 1 threads (target='dev')
14:04:12 |
14:04:12 | 1 of 1 START view model dbt_alice.customers.......................... [RUN]
14:04:13 | 1 of 1 ERROR creating view model dbt_alice.customers................. [ERROR in 0.81s]
14:04:13 |
14:04:13 | Finished running 1 view model in 1.68s.

Completed with 1 error and 0 warnings:

Database Error in model customers (models/customers.sql)
  Syntax error: Expected ")" but got identifier `your-info-12345` at [13:15]
  compiled SQL at target/run/jaffle_shop/customers.sql

Done. PASS=0 WARN=0 ERROR=1 SKIP=0 TOTAL=1
```

Любые модели, зависящие от этой модели, также будут пропущены. Используйте сообщение об ошибке и [скомпилированный SQL](https://docs.getdbt.tech/faqs/Runs/checking-logs.md) для отладки любых ошибок.

### Создайте модель с помощью ИИ в dbt Wizard

Не хотите писать SQL вручную? dbt Wizard может создать для вас ту же модель прямо в Studio IDE или на [главной вкладке](https://docs.getdbt.tech/docs/platform/wizard-home.md?version=2\&section=qs-build-with-ai), опираясь на фактическую схему и граф зависимостей вашего проекта. Но будьте осторожны: говорят, волшебник умеет творить заклинания.

1. Откройте dbt Wizard в Studio IDE.

[![dbt Wizard выполняет рефакторинг модели и показывает граф зависимостей в интерфейсе чата.](/img/docs/dbt-platform/wizard-ide-refactor-lineage.png?v=2 "dbt Wizard выполняет рефакторинг модели и показывает граф зависимостей в интерфейсе чата.")](#)dbt Wizard выполняет рефакторинг модели и показывает граф зависимостей в интерфейсе чата.

2. Введите запрос: «Создай модель customers, которая объединяет orders и customers и включает дату последнего заказа и общее количество заказов для каждого клиента».
3. Проверьте SQL, сгенерированный dbt Wizard, затем примите его, чтобы сохранить модель.
4. Введите `dbt run`, чтобы построить модель.

В любом случае вы получите одну и ту же работающую модель. Узнайте больше о [dbt Wizard на платформе dbt](https://docs.getdbt.tech/docs/dbt-ai/wizard-ide.md?section=qs-build-with-ai).

## Измените способ материализации вашей модели

Одной из самых мощных функций dbt является возможность изменять способ материализации модели в вашем хранилище данных, просто изменяя значение конфигурации. Вы можете переключаться между таблицами и представлениями, изменяя ключевое слово, вместо того чтобы писать язык определения данных (DDL) для выполнения этого за кулисами.

По умолчанию все создается как представление. Вы можете переопределить это на уровне директории, чтобы все в этой директории материализовалось по-другому.

1. Отредактируйте ваш файл `dbt_project.yml`.

   * Обновите имя вашего проекта на:

     dbt\_project.yml

     ```yaml
     name: 'jaffle_shop'
     ```

   * Настройте `jaffle_shop` так, чтобы всё внутри него материализовалось как таблица; и настройте `example` так, чтобы всё внутри него материализовалось как представление (view). Обновите конфигурацию `models` в YAML-файле проекта следующим образом:

     dbt\_project.yml

     ```yaml
     models:
       jaffle_shop:
         +materialized: table
         example:
           +materialized: view
     ```

   * Нажмите **Сохранить**.

2. Введите команду `dbt run`. Ваша модель `customers` теперь должна быть построена как таблица!

   к сведению

   Для этого dbt сначала должен был выполнить оператор `drop view` (или API вызов на BigQuery), затем оператор `create table as`.

3. Отредактируйте `models/customers.sql`, чтобы переопределить `dbt_project.yml` только для модели `customers`, добавив следующий фрагмент в начало, и нажмите **Сохранить**:

   models/customers.sql

   ```sql
   {{
     config(
       materialized='view'
     )
   }}

   with customers as (

       select
           id as customer_id
           ...

   )
   ```

4. Введите команду `dbt run`. Ваша модель `customers` теперь должна быть построена как представление.

   * Пользователям BigQuery необходимо выполнить `dbt run --full-refresh` вместо `dbt run`, чтобы полностью применить изменения материализации.

5. Введите команду `dbt run --full-refresh`, чтобы изменения вступили в силу в вашем хранилище данных.

### Часто задаваемые вопросы

Какие материализации доступны в dbt?

В dbt есть пять встроенных материализаций: `view`, `table`, `incremental`, `ephemeral` и `materialized_view`. Подробнее о каждом из этих вариантов можно узнать в документации по [материализациям](https://docs.getdbt.tech/docs/build/materializations.md).

Вы также можете создавать собственные [пользовательские материализации](https://docs.getdbt.tech/guides/create-new-materializations.md). Это расширенная возможность dbt.

Какую материализацию использовать для моей модели?

Начните с представлений (views), а затем измените модели на таблицы, когда это потребуется по причинам производительности (например, когда последующие запросы замедлились).

Ознакомьтесь с [документацией по материализациям](https://docs.getdbt.tech/docs/build/materializations.md) для получения советов о том, когда использовать каждую материализация.

Какие существуют конфигурации моделей?

Вы также можете настроить:

* [теги](https://docs.getdbt.tech/reference/resource-configs/tags.md) для поддержки легкой категоризации и выбора графа
* [пользовательские схемы](https://docs.getdbt.tech/reference/resource-properties/schema.md) для разделения ваших моделей по нескольким схемам
* [алиасы](https://docs.getdbt.tech/reference/resource-configs/alias.md), если имя вашего представление/таблица должно отличаться от имени файла
* Фрагменты SQL, которые выполняются в начале или в конце модели, известные как [хуки](https://docs.getdbt.tech/docs/build/hooks-operations.md)
* Конфигурации, специфичные для хранилища, для повышения производительности (например, ключи `sort` и `dist` на Redshift, `partitions` на BigQuery)

Ознакомьтесь с документацией по [конфигурациям моделей](https://docs.getdbt.tech/reference/model-configs.md), чтобы узнать больше.

## Удаление примерных моделей

Теперь вы можете удалить файлы, которые dbt создал при инициализации проекта:

1. Удалите директорию `models/example/`.

2. Удалите ключ `example:` из вашего файла `dbt_project.yml`, а также любые конфигурации, которые перечислены под ним.

   dbt\_project.yml

   ```yaml
   # до
   models:
     jaffle_shop:
       +materialized: table
       example:
         +materialized: view
   ```

   dbt\_project.yml

   ```yaml
   # после
   models:
     jaffle_shop:
       +materialized: table
   ```

3. Сохраните изменения.

#### Часто задаваемые вопросы

Как удалить удаленные модели из моего хранилища данных?

Если вы удаляете модель из вашего dbt проекта, dbt не удаляет автоматически связь из вашей схемы. Это означает, что в схемах, которые создает dbt, могут остаться лишние объекты, что может запутать других пользователей.

(Это также может произойти, когда вы переключаете модель с представление или таблица на эфемерную)

Когда вы удаляете модели из вашего dbt проекта, вам следует вручную удалить связанные связи из вашей схемы.

Я получил сообщение об ошибке "неиспользуемые конфигурации модели", что это значит?

Возможно, вы забыли вложить ваши конфигурации под именем вашего проекта, или вы пытаетесь применить конфигурации к директории, которая не существует.

Ознакомьтесь с этой [статьей](https://discourse.getdbt.com/t/faq-i-got-an-unused-model-configurations-error-message-what-does-this-mean/112), чтобы понять больше.

## Создание моделей на основе других моделей

Как лучшая практика в SQL, следует разделять логику, которая очищает ваши данные, от логики, которая трансформирует ваши данные. Вы уже начали делать это в существующем запросе, используя общие табличные выражения (CTE).

Теперь вы можете поэкспериментировать, разделив логику на отдельные модели и используя функцию [ref](https://docs.getdbt.tech/reference/dbt-jinja-functions/ref.md) для построения моделей на основе других моделей:

[![Граф, который мы хотим для нашего проекта dbt](/img/dbt-dag.png?v=2 "Граф, который мы хотим для нашего проекта dbt")](#)Граф, который мы хотим для нашего проекта dbt

1. Создайте новый SQL-файл, `models/stg_customers.sql`, с SQL из CTE `customers` в нашем исходном запросе.

2. Создайте второй новый SQL-файл, `models/stg_orders.sql`, с SQL из CTE `orders` в нашем исходном запросе.

   models/stg\_customers.sql

   ```sql
   select
       id as customer_id,
       first_name,
       last_name

   from jaffle_shop_customers
   ```

   models/stg\_orders.sql

   ```sql
   select
       id as order_id,
       user_id as customer_id,
       order_date,
       status

   from jaffle_shop_orders
   ```

3. Отредактируйте SQL в вашем файле `models/customers.sql` следующим образом:

   models/customers.sql

   ```sql
   with 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 using (customer_id)

   )

   select * from final
   ```

4. Выполните `dbt run`.

   На этот раз, когда вы выполнили `dbt run`, были созданы отдельные представления/таблицы для `stg_customers`, `stg_orders` и `customers`. dbt определил порядок выполнения этих моделей. Поскольку `customers` зависит от `stg_customers` и `stg_orders`, dbt строит `customers` последним. Вам не нужно явно определять эти зависимости.

#### Часто задаваемые вопросы

Как запустить одну модель за раз?

Чтобы запустить одну модель, используйте флаг `--select` (или флаг `-s`), указав имя модели:

```shell
$ dbt run --select customers
```

Ознакомьтесь с [документацией по синтаксису выбора моделей](https://docs.getdbt.tech/reference/node-selection/syntax.md) для получения информации о других операторах и примерах.

Должны ли имена ресурсов, используемых в ref, быть уникальными?

В рамках одного проекта: да! Чтобы построить зависимости между ресурсами (такими как модели, семена и снимки), вам нужно использовать функцию `ref` и передать в нее имя ресурса в качестве аргумента. dbt использует это имя ресурса для уникального разрешения `ref` на конкретный ресурс. В результате, эти имена ресурсов должны быть уникальными, *даже если они находятся в разных папках*.

Ресурс в одном проекте может иметь то же имя, что и ресурс в другом проекте (установленном как зависимость). dbt использует имя проекта для уникальной идентификации каждого ресурса. Мы называем это "пространством имен". Если вы используете `ref` для ресурса с дублированным именем, он будет разрешен в ресурс в том же пространстве имен (пакет или проект) или вызовет ошибку из-за неоднозначной ссылки. Используйте [двухаргументный `ref`](https://docs.getdbt.tech/reference/dbt-jinja-functions/ref.md#ref-project-specific-models) для устранения неоднозначности ссылок, указав пространство имен.

Эти ресурсы все равно должны размещаться в разных местах в хранилище данных. Прочтите документацию по [пользовательским псевдонимам](https://docs.getdbt.tech/docs/build/custom-aliases.md) и [пользовательским схемам](https://docs.getdbt.tech/docs/build/custom-schemas.md) для получения подробной информации о том, как этого добиться.

Как я создаю больше моделей, как мне организовать мой проект? Как мне назвать мои модели?

Нет единственного лучшего способа структурировать проект! Каждая организация уникальна.

Если вы только начинаете, ознакомьтесь с тем, как мы (dbt Labs) [структурируем наши dbt проекты](https://docs.getdbt.tech/best-practices/how-we-structure/1-guide-overview.md).

## Добавьте тесты к вашим моделям

Добавление [data tests](https://docs.getdbt.tech/docs/build/data-tests.md) в проект помогает убедиться, что ваши модели работают корректно.

Чтобы добавить data tests в проект:

1. Создайте новый YAML-файл в директории `models`, назвав его `models/schema.yml`.

2. Добавьте в файл следующее содержимое:

   models/schema.yml

   ```yaml
   version: 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
   ```

3. Запустите `dbt test` и убедитесь, что все ваши тесты прошли успешно.

Когда вы запускаете `dbt test`, dbt проходит по вашим YAML-файлам и создает запрос для каждого теста. Каждый запрос вернет количество записей, которые не прошли тест. Если это число равно 0, то тест считается успешным.

#### Часто задаваемые вопросы

Какие тесты доступны для использования в dbt? Могу ли я добавить свои собственные тесты?

«Из коробки» dbt поставляется со следующими тестами данных:

* `unique`
* `not_null`
* `accepted_values`
* `relationships` (например, ссылочная целостность)

Вы также можете написать собственные [пользовательские универсальные тесты](https://docs.getdbt.tech/docs/build/data-tests.md#generic-data-tests).

Дополнительные универсальные тесты с открытым исходным кодом доступны в [пакете dbt-utils](https://github.com/dbt-labs/dbt-utils#generic-tests). Ознакомьтесь с документацией по [пакетам](https://docs.getdbt.tech/docs/build/packages.md), чтобы узнать, как использовать эти тесты в вашем проекте.

Как протестировать одну модель за раз?

Запуск тестов для одной модели очень похож на запуск самой модели: используйте флаг `--select` (или флаг `-s`), за которым следует имя модели:

```shell
dbt test --select customers
```

Ознакомьтесь с [документацией по синтаксису выбора моделей](https://docs.getdbt.tech/reference/node-selection/syntax.md) для полного синтаксиса, и [примерами выбора тестов](https://docs.getdbt.tech/reference/node-selection/test-selection-examples.md) в частности.

Один из моих тестов не прошел, как я могу его отладить?

Чтобы отладить неудачный тест, найдите SQL, который выполнил dbt, следующим образом:

* dbt:

  * В результатах тестирования нажмите на тест, завершившийся с ошибкой, а затем выберите «Details».

* dbt v1:

  * Откройте файл по пути, указанному в сообщении об ошибке.
  * Перейдите в каталог `target/compiled/schema_tests`, где находятся все скомпилированные SQL-запросы тестов.

Скопируйте SQL-код в редактор запросов (в dbt его можно вставить в новый `Statement`) и выполните запрос, чтобы найти записи, не прошедшие тест.

Должен ли мой файл с тестами называться \`schema.yml\`?

Нет! Вы можете назвать этот файл как угодно (включая `whatever_you_want.yml`), при условии, что:

* Файл находится в вашем каталоге `models/`¹
* Файл имеет расширение `.yml`

Посмотрите [документацию](https://docs.getdbt.tech/reference/configs-and-properties.md) для получения дополнительной информации.

¹Если вы объявляете свойства для seeds, snapshots или macros, вы также можете разместить этот файл в соответствующем каталоге — `seeds/`, `snapshots/` и `macros/` соответственно.

Почему файлы YAML для моделей и источников всегда начинаются с \`version: 2\`?

Когда‑то структура этих файлов `.yml` была совсем другой (привет всем, кто пользовался dbt в те времена!). Добавление `version: 2` позволило нам сделать эту структуру более расширяемой.

Начиная с [dbt v1.5](<https://docs.getdbt.tech/docs/dbt-versions/dbt-upgrade/Older versions/upgrading-to-v1.5/.md#quick-hits>), ключ `version:` верхнего уровня необязателен во всех YAML-файлах ресурсов. Если он указан, поддерживается только значение `version: 2`.

Также, начиная с версии 1.5, и [`config-version: 2`](https://docs.getdbt.tech/reference/project-configs/config-version.md), и ключ верхнего уровня `version:` в файле `dbt_project.yml` являются необязательными.

В настоящее время ресурсные YAML‑файлы не требуют наличия этой настройки. Если она указана, мы поддерживаем только `version: 2`. Хотя мы не ожидаем в ближайшее время обновлять YAML‑файлы до `version: 3`, наличие этой конфигурации упростит для нас внедрение новых структур в будущем.

Какие тесты данных стоит добавить в проект?

Мы рекомендуем, чтобы у каждой модели был data test на первичный ключ, то есть на колонку, которая является `unique` и `not_null`.

Мы также рекомендуем тестировать любые предположения о ваших исходных данных. Например, если вы считаете, что ваши платежи могут быть только одним из трех методов оплаты, вы должны регулярно проверять это предположение — новый метод оплаты может привести к логическим ошибкам в вашем SQL.

В продвинутых проектах dbt мы рекомендуем использовать [sources](https://docs.getdbt.tech/docs/build/sources.md) и запускать эти тесты целостности данных источника против источников, а не моделей.

Когда следует запускать data tests?

Вам следует запускать data tests каждый раз, когда вы пишете новый код (чтобы убедиться, что изменения в SQL не сломали существующие модели), а также каждый раз, когда вы запускаете трансформации в production (чтобы убедиться, что ваши предположения о исходных данных по‑прежнему верны).

## Документируйте ваши модели

Добавление [документации](https://docs.getdbt.tech/docs/build/documentation.md) в ваш проект позволяет подробно описывать ваши модели и делиться этой информацией с вашей командой. Здесь мы добавим базовую документацию в наш проект.

Обновите файл `models/schema.yml`, добавив описания, например приведённые ниже.

models/schema.yml

```yaml
version: 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
```

### View in Catalog

[Catalog](https://docs.getdbt.tech/docs/explore/explore-projects.md) предоставляет мощные инструменты для работы с вашими проектами dbt, в том числе с документацией:

1. Выполните одну из следующих команд:

   * `dbt docs generate`, если вы используете dbt v1
   * `dbt build`, если вы используете dbt v2

2. Нажмите **Catalog** в меню навигации, чтобы открыть Catalog.

3. По умолчанию Catalog отображает среду **Production**. Если в вашей учетной записи есть дополнительные среды (например, **Staging**), вы можете выбрать их в раскрывающемся списке сред.

[![Выбор среды в Catalog.](/img/docs/collaborate/dbt-explorer/catalog-nav-dropdown.png?v=2 "Выбор среды в Catalog.")](#)Выбор среды в Catalog.

4. Выберите свой проект в дереве файлов.
5. Используйте строку поиска или просмотрите список ресурсов, чтобы найти модель `customers`.
6. Нажмите на модель, чтобы просмотреть сведения о ней, включая добавленные вами описания.

[![Просмотр документации модели и графа зависимостей в Catalog.](/img/docs/collaborate/dbt-explorer/example-model-details.png?v=2 "Просмотр документации модели и графа зависимостей в Catalog.")](#)Просмотр документации модели и графа зависимостей в Catalog.

Catalog отображает описание вашей модели, документацию столбцов, тесты данных и граф зависимостей. Вы также можете видеть, для каких столбцов отсутствует документация, и отслеживать покрытие тестами во всем проекте.

### View in Studio IDE

Вы можете просматривать документацию непосредственно в IDE, если используете **v1 Latest** или другую версию dbt v1. Обратите внимание: это устаревший режим просмотра, который не обеспечивает такой же уровень интерактивности, как Catalog.

1. В IDE выполните `dbt docs generate`.
2. На панели навигации нажмите значок **View docs**, расположенный справа от **имени ветки**.

   [![Значок View docs в Studio IDE.](/img/docs/collaborate/dbt-explorer/docs-icon.png?v=2 "Значок View docs в Studio IDE.")](#)Значок View docs в Studio IDE.
3. В разделе **Projects** выберите имя своего проекта и разверните папки.
4. Нажмите **models** > **marts** > **customers**.

[![Просмотр документации модели в устаревшем режиме просмотра документации.](/img/docs/collaborate/dbt-explorer/legacy-docs-view.png?v=2 "Просмотр документации модели в устаревшем режиме просмотра документации.")](#)Просмотр документации модели в устаревшем режиме просмотра документации.

#### Часто задаваемые вопросы

Как писать развернутые объяснения в описаниях?

Если для описания модели вам нужно больше одного предложения, вы можете:

1. Разбить описание на несколько строк с помощью `>`. Переносы строк внутри описания удаляются, при этом можно использовать Markdown. Этот способ рекомендуется для простых описаний из одного абзаца:

```yml
models:
  - name: customers
    description: >
      Lorem ipsum **dolor** sit amet, consectetur adipisicing elit, sed do eiusmod
      tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
      quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
      consequat.
```

2. Разбейте описание на несколько строк с помощью `|`. Внутренние переносы строк сохраняются, и можно использовать Markdown. Этот способ рекомендуется для более сложных описаний:

```yml
models:
  - name: customers
    description: |
      ### Lorem ipsum

      * dolor sit amet, consectetur adipisicing elit, sed do eiusmod
      * tempor incididunt ut labore et dolore magna aliqua.
```

3. Использовать [блок docs](https://docs.getdbt.tech/docs/build/documentation.md#using-docs-blocks), чтобы написать описание в отдельном Markdown файле.

Как получить доступ к документации в dbt Catalog?

Если вы используете dbt для развертывания проекта и у вас [тарифный план Starter, Enterprise или Enterprise+](https://www.getdbt.com/pricing/), вы можете использовать Catalog для просмотра [ресурсов](https://docs.getdbt.tech/docs/build/projects.md) проекта (таких как модели, тесты и метрики) и их происхождения и связей, чтобы лучше понимать текущее состояние проекта в промышленной среде.

Чтобы открыть Catalog в dbt, нажмите ссылку **Catalog** в меню навигации. Пользователи с доступом только для чтения могут просматривать документацию вашего проекта — сведения о доступности лицензий в зависимости от тарифного плана см. на странице [тарифов dbt](https://www.getdbt.com/pricing).

Пользователи тарифного плана Developer в dbt и пользователи dbt v1 могут использовать [dbt Docs](https://docs.getdbt.tech/docs/explore/build-and-view-your-docs.md?version=1.12#dbt-docs): этот инструмент создает базовую документацию, но не обеспечивает такую же скорость работы, объем метаданных и наглядность, как Catalog.

## Зафиксируйте изменения

Теперь, когда вы построили модель `customers`, нужно закоммитить внесённые в проект изменения, чтобы в репозитории оказался ваш актуальный код.

**Если вы вносили изменения непосредственно в защищённую основную ветку:**<br />

1. Нажмите кнопку **Commit and sync git**. Это действие подготовит ваши изменения к коммиту.
2. Появится модальное окно с заголовком **Commit to a new branch**.
3. В модальном окне задайте новой ветке имя `add-customers-model`. Будет создана ветка от вашей основной ветки с внесёнными изменениями.
4. Добавьте сообщение коммита, например «Добавлена модель customers, тесты и документация», и создайте коммит с вашими изменениями.
5. Нажмите **Merge this branch to main**, чтобы добавить эти изменения в ветку main вашего репозитория.

**Если вы создали новую ветку до редактирования:**<br />

1. Поскольку вы уже ответвились от защищённой основной ветки, слева перейдите в **Version Control**.
2. Нажмите **Commit and sync**, чтобы добавить сообщение.
3. Добавьте сообщение коммита, например «Добавить модель customers, тесты и документацию».
4. Нажмите **Merge this branch to main**, чтобы добавить эти изменения в ветку main вашего репозитория.

## Разверните dbt

Используйте планировщик dbt, чтобы уверенно запускать задания в продакшене и обеспечивать наблюдаемость ваших процессов. Далее вы узнаете, как создать среду развертывания и запустить задание.

### Создайте окружение развертывания (deployment environment)

1. В главном меню перейдите в **Orchestration** > **Environments**.
2. Нажмите **Create environment**.
3. В поле **Name** введите имя среды развертывания. Например, "Production".
4. В поле **dbt version** по умолчанию выбрана последняя доступная версия. Мы рекомендуем использовать последнюю версию dbt для всех новых проектов.
5. В разделе **Deployment connection** введите имя набора данных, который вы хотите использовать в качестве целевого, например "Analytics". Это позволит dbt создавать объекты в этом наборе данных и работать с ним. В некоторых хранилищах данных целевой набор данных может называться «схемой».
6. Нажмите **Save**.

### Создайте и запустите job

Jobs — это набор команд dbt, которые вы хотите запускать по расписанию. Например, `dbt build`.

По мере того как бизнес `jaffle_shop` получает больше клиентов, а эти клиенты создают больше заказов, в исходных данных будет появляться больше записей. Поскольку вы материализовали модель `customers` как таблицу, вам нужно периодически пересобирать её, чтобы данные оставались актуальными. Это обновление будет происходить при запуске job.

1. После создания окружения развертывания вы должны попасть на страницу нового окружения. Если нет — в главном меню выберите **Orchestration**, затем нажмите **Jobs**.
2. Нажмите **Create job** > **Deploy job**.
3. Укажите имя job (например, «Production run») и выберите окружение, которое вы только что создали.
4. Прокрутите вниз до раздела **Execution settings**.
5. В разделе **Commands** добавьте эту команду как часть job, если её нет:
   * `dbt build`
6. (Версии dbt: v2.0 и новее) Добавлять шаг создания документации не нужно. При каждом запуске задания метаданные вашего проекта в [Catalog](https://docs.getdbt.tech/docs/explore/build-and-view-your-docs.md) обновляются автоматически.
7. В этом упражнении *не* задавайте расписание запуска проекта — хотя проект вашей организации должен запускаться регулярно, для этого примера запуск по расписанию не нужен. Настройку запуска задания по расписанию иногда называют *развёртыванием проекта*.
8. Нажмите **Save**, затем нажмите **Run now**, чтобы запустить задание.
9. Нажмите на запуск и следите за его ходом в разделе **Run summary**.
10. После завершения запуска (Версии dbt: v2.0 и новее) нажмите **Catalog** на панели навигации, чтобы изучить свой проект.

Поздравляем 🎉! Вы только что развернули свой первый dbt‑проект!

#### Часто задаваемые вопросы

Что произойдет, если один из моих запусков завершится неудачей?

Если вы используете dbt, рекомендуем настроить уведомления по электронной почте и в Slack (`Account Settings > Notifications`) о любых неудачных запусках. Затем отлаживайте эти запуски так же, как и любые запуски в среде разработки.

Подключите свой ИИ-инструмент к этому проекту

Теперь, когда ваш проект настроен и работает, подключите к нему свой ИИ-инструмент (например, Claude или ChatGPT) через [dbt MCP server](https://docs.getdbt.tech/docs/dbt-ai/about-mcp.md?section=qs-connect-ai), чтобы задавать вопросы о моделях на естественном языке. Описания, тесты и семантические модели помогут сделать его ответы ещё лучше.
