Перейти к основному содержимому

Профили подключений

Когда вы запускаете dbt из командной строки, dbt парсит файл dbt_project.yml и получает имя profile, которое необходимо dbt для подключения к вашему data warehouse.

dbt_project.yml
# Example dbt_project.yml file
name: 'jaffle_shop'
profile: 'jaffle_shop'
...

Затем dbt проверяет файл profiles.yml на наличие профиля с таким же именем. Профиль содержит все детали, необходимые для подключения к вашему хранилищу данных.

dbt будет искать файл profiles.yml в текущем рабочем каталоге и, если не найдет его там, по умолчанию использует каталог ~/.dbt/.

Обычно этот файл располагается вне dbt‑проекта, чтобы чувствительные учетные данные не попадали в систему контроля версий. Однако profiles.yml можно безопасно хранить в репозитории, если использовать переменные окружения для загрузки чувствительных данных.

~/.dbt/profiles.yml
# example profiles.yml file
jaffle_shop:
target: dev
outputs:
dev:
type: postgres
host: localhost
user: alice
password: <password>
port: 5432
dbname: jaffle_shop
schema: dbt_alice
threads: 4

prod: # additional prod target
type: postgres
host: prod.db.example.com
user: alice
password: <prod_password>
port: 5432
dbname: jaffle_shop
schema: analytics
threads: 8

Чтобы добавить дополнительный target (например, prod) в существующий profiles.yml, достаточно добавить еще одну запись под ключом outputs.

Функция env_var

Функция env_var может использоваться для подключения переменных окружения из системы к вашему проекту dbt. Вы можете использовать функцию env_var в файле profiles.yml, в файле dbt_project.yml, в файле sources.yml, в файлах schema.yml, а также в .sql‑файлах моделей. По сути, env_var доступна везде, где dbt обрабатывает Jinja‑код.

При использовании в файле profiles.yml (чтобы избежать хранения учетных данных на сервере) это может выглядеть следующим образом:

profiles.yml
profile:
target: prod
outputs:
prod:
type: postgres
host: 127.0.0.1
# IMPORTANT: Make sure to quote the entire Jinja string here
user: "{{ env_var('DBT_USER') }}"
password: "{{ env_var('DBT_PASSWORD') }}"
....

О файле profiles.yml

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

О профилях

Профиль состоит из targets и указанного default target (целевого окружения по умолчанию).

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

Набор учетных данных, которые необходимо указать в target, различается в зависимости от хранилища данных — примеры профилей для каждого поддерживаемого хранилища доступны в разделе Supported Data Platforms.

Pro Tip: Возможно, вам потребуется заключить пароль в кавычки, если он содержит специальные символы. Подробнее см. здесь.

Настройка профиля

Чтобы настроить профиль, скопируйте соответствующий пример профиля для вашего хранилища данных в файл profiles.yml и обновите параметры следующим образом:

  • Имя профиля: замените имя профиля на осмысленное — часто удобно использовать название вашей организации. Убедитесь, что это имя совпадает со значением profile, указанным в файле dbt_project.yml.
  • target: target по умолчанию, который будет использовать ваш dbt‑проект. Он должен совпадать с одним из targets, определенных в профиле. Чаще всего используется dev.
  • Заполнение target:
    • type: тип хранилища данных, к которому вы подключаетесь
    • Учетные данные хранилища: получите их у администратора базы данных, если у вас их еще нет. Помните, что учетные данные пользователя — это чувствительная информация, которой не следует делиться.
    • schema: схема по умолчанию, в которой dbt будет создавать объекты.
    • threads: количество потоков, в которых будет выполняться dbt‑проект.

Ниже вы можете найти дополнительную информацию о том, какие значения использовать в targets.

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

Понимание targets в профилях

dbt поддерживает несколько targets в одном профиле, чтобы стимулировать использование отдельных окружений разработки и продакшена, как описано в разделе dbt environments.

Типичный профиль аналитика, использующего dbt локально, содержит target с именем dev, который задан как target по умолчанию.

Также в профиле может быть target prod, который создает объекты в продакшен‑схеме. Однако, поскольку продакшен‑запуски часто выполняются по расписанию, мы рекомендуем разворачивать dbt‑проект на отдельной машине, а не на локальном компьютере. Поэтому у большинства пользователей dbt в локальном профиле присутствует только target dev.

Если в профиле определено несколько targets и вы хотите использовать target, отличный от заданного по умолчанию, это можно сделать с помощью опции --target при выполнении команды dbt.

Переопределение профилей и targets

При запуске команд dbt вы можете указать, какой профиль и target использовать, напрямую из CLI с помощью флагов --profile и --target flags. Эти флаги переопределяют значения, заданные в dbt_project.yml, при условии, что указанные профиль и target уже определены в файле profiles.yml.

Чтобы запустить dbt‑проект с профилем или target, отличными от значений по умолчанию, используйте следующие CLI‑флаги:

  • --profile — переопределяет профиль, заданный в dbt_project.yml, указывая на другой профиль из profiles.yml.
  • --target — указывает, какой target внутри этого профиля использовать (как определено в profiles.yml).

Эти флаги полезны при работе с несколькими профилями и targets, когда требуется временно переопределить значения по умолчанию без изменения файлов.

dbt run --profile my-profile-name --target dev

В этом примере команда dbt run будет использовать профиль my-profile-name и target dev.

Понимание учетных данных хранилища данных

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

Чтобы учетные данные, используемые в target, позволяли dbt корректно работать, необходимо убедиться, что пользователь имеет соответствующие привилегии. Хотя точный набор привилегий зависит от конкретного хранилища данных, как минимум пользователь должен иметь возможность:

  • читать исходные данные
  • создавать схемы¹
  • читать системные tables
Запуск dbt без привилегий на создание схем

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

Понимание target schemas

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

Схемы в BigQuery

dbt использует термин «schema» в target для всех поддерживаемых хранилищ данных для единообразия. Обратите внимание, что в случае BigQuery schema фактически является dataset.

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

Для разработки хорошо зарекомендовала себя практика называть схему в target dev как dbt_<username>. Добавление имени пользователя в название схемы позволяет нескольким пользователям параллельно разрабатывать в dbt, поскольку у каждого будет собственная схема, и пользователи не будут перезаписывать объекты друг друга. Это также помогает поддерживать единообразие владения объектами и прав доступа в пределах схемы.

Обратите внимание, что заранее создавать target schema не требуется — при запуске dbt проверит, существует ли схема, и создаст ее при необходимости.

Хотя target schema задает схему по умолчанию, имеет смысл разделять модели по разным схемам, что можно реализовать с помощью custom schemas.

Понимание threads

При запуске dbt строится ориентированный ациклический граф (DAG) связей между моделями. Параметр threads задает максимальное количество путей в этом графе, над которыми dbt может работать одновременно. Увеличение числа потоков позволяет сократить время выполнения проекта. Значение по умолчанию для threads в пользовательских профилях — 4.

Дополнительную информацию см. в разделе using threads.

Advanced: Настройка каталога профилей

Родительский каталог для profiles.yml определяется в следующем порядке приоритета:

  1. опция --profiles-dir
  2. переменная окружения DBT_PROFILES_DIR
  3. текущий рабочий каталог
  4. каталог ~/.dbt/

Чтобы проверить ожидаемое расположение файла profiles.yml для вашей установки dbt, выполните:

$ dbt debug --config-dir
To view your profiles.yml file, run:

open /Users/alice/.dbt

Вам может понадобиться хранить файл profiles.yml в каталоге, отличном от ~/.dbt/. Например, если вы используете переменные окружения для загрузки учетных данных, вы можете разместить этот файл в корневом каталоге dbt‑проекта.

Обратите внимание, что файл всегда должен называться profiles.yml, независимо от того, в каком каталоге он находится.

Существует несколько способов указать dbt альтернативное расположение файла profiles.yml:

1. Использовать опцию --profiles-dir при выполнении команды dbt

Пример использования:

$ dbt run --profiles-dir path/to/directory

При использовании этого метода опцию --profiles-dir необходимо указывать при каждом запуске команды dbt.

2. Использовать переменную окружения DBT_PROFILES_DIR для изменения расположения по умолчанию

Задание этой переменной окружения переопределяет каталог, в котором dbt ищет файл profiles.yml. Установить ее можно так:

$ export DBT_PROFILES_DIR=path/to/directory

Advanced: Использование переменных окружения

Учетные данные могут быть указаны напрямую в файле profiles.yml или загружаться из переменных окружения. Использование переменных окружения особенно полезно для продакшен‑развертываний dbt. Подробнее о переменных окружения можно узнать здесь.

Нашли ошибку?

0
Loading