【问题标题】:dbt Snapshot - if not executedbt 快照 - 如果不执行
【发布时间】: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


    【解决方案1】:

    不确定这个问题的上下文(dbtCloud、CLI 等),所以这是一个大概的解决方案。

    根据 CLI 的 docs on the snapshot 命令,您应该能够使用类似的东西:

    dbt snapshot --select column_snapshot

    如果这是您想要“快照”的唯一内容

    此外,如果这是在 dbtCloud 中,您可以使用以下内容创建模型和作业(我使用它来测试 pre-hookpost-hook 功能)

    one-model.sql

    select 1
    

    (任何具有有效 sql 的模型都可以)

    那么对于那个云作业:

    1. dbt seed --full-refresh

    2. dbt run --models one-model --full-refresh

    3. dbt snapshot --select column_snapshot

    【讨论】:

    • 抱歉 - 这是 CLI。我已经尝试过 dbt snapshot --select snapshotname 但由于我用来带回未在执行模式下运行的列名以列出列名的宏而出错,因此它带回了不是实际字段的“testcolumn”。
    • 你能在问题中包含那个宏吗?
    • 我在主帖中放了一些关于宏的细节。
    猜你喜欢
    • 2021-11-14
    • 2017-03-15
    • 2022-07-22
    • 2022-12-22
    • 2021-05-21
    • 2021-07-18
    • 2020-09-21
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多