Ошибка "цель не определена" при запуске 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'

См. Это для справки.

Другие вопросы по тегам