【问题标题】:Force skipping DBT models if source is not fresh如果源不是新鲜的,则强制跳过 DBT 模型
【发布时间】:2022-10-05 03:46:27
【问题描述】:

正如标题所说,如果我的一个来源没有使用 dbt 新鲜度更新/新鲜,我正在寻找一种方法来强制跳过模型。我们当前的设置如下:

我们基本上有从不同雪花表采购的模型,我们将它们具体化为一张表。源具有不同的新鲜度频率,如果模型的源之一未更新,我们希望它跳过该模型的计算/计算,因为它只会返回相同的数据。

我们已经尝试使用 Jinja 在模型本身中使用 if/else 并运行 \"SELECT * FROM {{this}}\" 以使用旧数据重新创建表,但它非常hacky并且不会真正跳过模型.

因此,我们正在寻找更好的方法来利用 DBT 新鲜度命令的结果来确定模型是应该运行还是只是被跳过。

    标签: snowflake-cloud-data-platform dbt


    【解决方案1】:

    如果您正在运行 v1.1 或更新版本并且不介意实验性 API,则可以使用 source_status 选择器仅刷新来自已接收新数据的源的下游模型。来自docs

    作业状态的另一个元素是先前 dbt 调用的 source_status。例如,在执行 dbt source freshness 之后,dbt 创建 sources.json 工件,其中包含 dbt 源的执行时间和 max_loaded_at 日期。

    这意味着在生产环境中运行 dbt 的脚本需要调用 dbt 两次,第一次调用会保存源的状态。同样,来自文档:

    # You can also set the DBT_ARTIFACT_STATE_PATH environment variable instead of the --state flag.
    $ dbt source freshness # must be run again to compare current to previous state
    $ dbt build --select source_status:fresher+ --state path/to/prod/artifacts
    

    如果你想做对面的,并从尚未更新的源中排除模型下游,您可以使用 --exclude 标志代替:

    # You can also set the DBT_ARTIFACT_STATE_PATH environment variable instead of the --state flag.
    $ dbt source freshness # must be run again to compare current to previous state
    $ dbt build --exclude source_status:error+ --state path/to/prod/artifacts
    

    【讨论】:

      猜你喜欢
      • 2022-07-16
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      相关资源
      最近更新 更多