Ошибка "цель не определена" при запуске dbt
У меня есть dbt_project.yml
нравиться:
name: rdb
profile: rdb
source-paths: ['models']
version: "0.1"
models:
rdb:
schema: cin
materialized: table
post-hook: 'grant select on {{ this }} to rer'
on-run-end:
# TODO: fix
- 'grant usage on schema "{{ target.schema }}" to rer'
DBT сработал действительно хорошо. Но сon-run-end
запись, это не удается с Compilation Error 'target' is undefined
. С закомментированной строкой все работает нормально.
Я делаю основную ошибку? Спасибо!
2 ответа
Ваш пост-хук на самом деле должен выглядеть так:
on-run-end:
- "{% for schema in schemas %}grant usage on schema {{ schema }} to rer;{% endfor %}"
Документы dbt для контекста on-run-end объясняют это подробно, но короче говоря: поскольку запуск dbt может касаться таблиц в разных схемах в целевой базе данных, нет единогоtarget.schema
значение, к которому вы можете применить заявление о предоставлении гранта. Вместо этого контекст предоставляет вам список имен схем, называемыхschemas
что вам нужно пройти. В этом списке есть один или несколько элементов.
В target
в dbt - это данные конфигурации адаптера, такие как учетная запись, пользователь, порт или схема. this
относится к объекту базы данных, который записывается, а также включает поле schema
. Наконец,on-run-end
context предоставляет список схем, так что вам не нужно делать избыточные утверждения предоставления для каждой таблицы или представления, но вы можете сделать только одно разрешение для каждой схемы.
Я догадываюсь, что вам не нужно цитировать шаблон jinja. Пытаться:
on-run-end:
- 'grant usage on schema {{ target.schema }} to rer'
См. Это для справки.