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

Переменные проекта

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

Чтобы использовать переменную в модели, хуке или макросе, используйте функцию {{ var('...') }}. Более подробную информацию о функции var можно найти здесь.

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

  1. В файле dbt_project.yml
  2. В командной строке

Определение переменных в dbt_project.yml

к сведению

Jinja не поддерживается в конфигурации vars, и все значения будут интерпретироваться буквально.

Чтобы определить переменные в проекте dbt, добавьте конфигурацию vars в ваш файл dbt_project.yml. Эти vars могут быть глобальными или относиться к конкретному пакету, импортированному в ваш проект.

dbt_project.yml
name: my_dbt_project
version: 1.0.0

config-version: 2

vars:
# Переменная `start_date` будет доступна во всех ресурсах
start_date: '2016-06-01'

# Переменная `platforms` доступна только для ресурсов в проекте my_dbt_project
my_dbt_project:
platforms: ['web', 'mobile']

# Переменная `app_ids` доступна только для ресурсов в пакете snowplow
snowplow:
app_ids: ['marketing', 'app', 'landing-page']

models:
...

Определение переменных в командной строке

Файл dbt_project.yml — отличное место для определения переменных, которые редко меняются. Другие типы переменных, такие как диапазоны дат, будут часто изменяться. Чтобы определить (или переопределить) переменные для выполнения dbt, используйте опцию командной строки --vars. На практике это выглядит так:

$ dbt run --vars '{"key": "value"}'

Аргумент --vars принимает YAML-словарь в виде строки в командной строке. YAML удобен, потому что не требует строгого использования кавычек, как .

Оба следующих примера являются допустимыми и эквивалентными:

$ dbt run --vars '{"key": "value", "date": 20180101}'
$ dbt run --vars '{key: value, date: 20180101}'

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

$ dbt run --vars 'key: value'

Более подробную информацию об определении словарей с помощью YAML можно найти здесь.

Приоритет переменных

Переменные, определенные с помощью аргумента командной строки --vars, переопределяют переменные, определенные в файле dbt_project.yml. Они имеют глобальную область видимости и доступны корневому проекту и всем установленным пакетам.

Порядок приоритета для объявления переменных следующий (наивысший приоритет в начале):

  1. Переменные, определенные в командной строке с помощью --vars.
  2. Объявление переменной в пакете в корневом файле dbt_project.yml
  3. Глобальное объявление переменной в корневом файле dbt_project.yml
  4. Если этот узел определен в пакете: объявления переменных в файле dbt_project.yml этого пакета
  5. Значение по умолчанию для переменной (если оно предоставлено)

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

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

Вопросы от сообщества

0