Профили подключений
Когда вы запускаете dbt из командной строки, dbt парсит файл dbt_project.yml и получает имя profile, которое необходимо dbt для подключения к вашему data warehouse.
# Example dbt_project.yml file
name: 'jaffle_shop'
profile: 'jaffle_shop'
...
Затем dbt проверяет файл profiles.yml на наличие профиля с таким же именем. Профиль содержит все детали, необходимые для подключения к вашему хранилищу данных.
dbt будет искать файл profiles.yml в текущем рабочем каталоге и, если не найдет его там, по умолчанию использует каталог ~/.dbt/.
Обычно этот файл располагается вне 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 (чтобы избежать хранения учетных данных на сервере) это может выглядеть следующим образом:
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‑запуски должны быть направлены на существующую схему, в которой у пользователя есть права на создание объектов.
Понимание target schemas
Target schema представляет собой схему по умолчанию, в которой dbt будет создавать объекты, и часто используется как ключевое различие между разными окружениями внутри одного хранилища данных.
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 определяется в следующем порядке приоритета:
- опция
--profiles-dir - переменная окружения
DBT_PROFILES_DIR - текущий рабочий каталог
- каталог
~/.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. Подробнее о переменных окружения можно узнать здесь.