在增量模型上 运行 时 (None) 的 DBT 过滤

DBT filtering for (None) when running on incremental model

我正在尝试将 DBT 模型配置为 materialized='incremental',但它失败了,因为 DBT 似乎通过检查 (None) or (None) is null 来包装我的模型,这导致模型抛出 SQL 针对目标 (Bigquery) 的异常。 (None) 检查似乎没有为非增量模型添加,或者当 运行 --full-refresh 只是重新创建 table.

根据the docs,增量模型应该按如下方式包装:

merge into {{ destination_table }} DEST
using ({{ model_sql }}) SRC
...

但是我看到的是:

merge into {{ destination_table }} DEST
using ( select * from( {{ model_sql }} ) where (None) or (None) is null) SRC
...

我不清楚 (None) 检查来自哪里,它实际上试图通过包装查询来实现什么,以及需要设置什么(如果有的话)模型配置来纠正这个问题。

我的模型配置设置为 {{ config(materialized='incremental', alias='some_name') }},我也尝试设置 unique_key 以防万一。

我正在 运行 使用 dbt run --profiles-dir dbt_profiles --models ${MODEL} --target development 检查模型,可以确认编译的模型没有问题,并且为模型 运行 添加了 (None) 检查。

我是 运行ning dbt 0.11.1(旧回购版本)。

如有任何帮助,我们将不胜感激!

您是否事先使用 0.11.1 配置了增量模型?我很确定您需要使用 {{ this }},但可能在版本 0.11.1 中不存在。 docs on this

通过查看 github 上我的目标版本的 DBT 代码库设法解决了这个问题 - incremental macro 0.11

似乎在 0.11 DBT 中需要设置一个 sql_where 配置标志,用于 select 您要用于增量加载的记录([=11 的前游标) =]宏)。

在我的例子中,因为我只想加载每个增量 运行 中的所有行并使用加载时间戳标记,设置 sql_where='TRUE' 生成有效 sequel 并且不过滤我的结果(即 WHERE TRUE OR TRUE IS NULL