雪花云数据平台-如果源不是新鲜的,强制跳过DBT模型



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

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

我们已经尝试在使用Jinja的模型本身中使用if/else;从{{this}}中选择*";使用旧数据重新创建表,但这非常棘手,并没有真正跳过模型。

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

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

作业状态的另一个元素是先前dbt调用的source_status。例如,在执行dbt源新鲜度之后,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

最新更新