0

我有一个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。注释掉该行后,它可以正常工作。

我犯了一个基本的错误吗?谢谢!

4

2 回答 2

2

我的直觉是你不需要引用 jinja 模板。尝试:

on-run-end:
    - 'grant usage on schema {{ target.schema }} to rer'

请参阅此内容以供参考。

于 2020-04-01T18:00:51.607 回答
2

你的 post-hook 实际上应该是这样的:

on-run-end:
 - "{% for schema in schemas %}grant usage on schema {{ schema }} to rer;{% endfor %}"

on-run-end context的 dbt 文档详细解释了这一点,但长话短说:因为 dbt 运行可能会触及目标数据库上不同模式中的表,所以没有target.schema可以应用授权语句的单个值。schemas相反,上下文会为您提供需要循环访问的称为模式名称的列表。该列表具有一个或多个元素。

targetin dbt 是适配器的配置数据,如帐户、用户、端口或模式。this是关于正在写入的数据库对象,还包括一个字段schema。最后,on-run-end上下文提供了模式列表,因此您不必为每个表或视图创建冗余授权语句,而可以为每个模式只创建一个授权。

于 2020-07-04T02:34:15.767 回答