【发布时间】:2022-02-18 18:51:51
【问题描述】:
我有一个 dbt 快照,它调用一个宏来从数据库中获取列名列表。 使用时效果很好
dbt run
当使用快照命令时它会失败,因为它没有在执行模式下运行。
dbt snapshot
我目前正在使用 if not execute 在有助于编译项目的宏中。
{%- if not execute -%}
有没有办法解决这个问题,这样我就可以使用快照功能而无需对所有模型等进行运行操作?
谢谢
编辑:
运行 dbt run 时,宏在模型中运行良好。 当放置在快照中时,它不会在执行模式下运行,因此返回“测试”值而不是查询中的值。
{% macro GetColumnNames(DatabaseName, SchemaName, TableName) %}
{%- if not execute -%}
{{ return(["Test1","Test2"]) }}
{% endif %}
{%- set QueryRetrieveColumnNames -%}
SELECT
...
, COLUMN_NAME ...
FROM ...
{%- endset -%}
{% set Results = run_query(QueryRetrieveColumnNames) %}}
{%- set ColumnNames = Results.columns[3].values() -%}}
{{ return(ColumnNames) }}
{% endmacro %}
在快照中我正在做其他事情,但即使只是单独的列也不起作用
{% snapshot TestSnapshot %}
{% set Relation = source(...) -%}
{% set ColumnNames = GetColumnNames(Relation.database, Relation.schema, Relation.identifier) -%}
SELECT
'a' AS a
{%- for ColumnName in ColumnNames %}
, "{{ ColumnName.column }}"
{%- endfor %}
FROM {{ source(...) }}
{% endsnapshot %}
我已经从宏切换到使用 get_columns_in_relation
{% set ColumnNames = adapter.get_columns_in_relation(Relation) -%}
这在解析时失败,但在模型中运行良好。 快照中的解析错误... 在路径 ['check_cols']:未定义在任何给定架构下均无效
【问题讨论】:
标签: dbt