如何让dbt的--full-refresh命令级联刷新依赖的增量模型?
dbt 级联全量刷新依赖模型问题解决
可以实现,但你的命令写法不对
你想要的「运行下游表模型时,同时全量刷新上游增量模型」是可行的,但当前命令的--full-refresh参数没有作用到上游模型上。
为什么原命令不生效
--select my_model.sql+确实会把上游依赖模型纳入运行队列,但--full-refresh默认只对**你直接指定的模型(my_model)**生效。上游的增量模型只会按常规增量逻辑运行,不会触发全量替换。
两种有效解决办法
办法1:直接标记需要全量刷新的上游模型
在--select中明确给上游模型加上full_refresh:前缀,同时保留下游模型的+依赖关联,命令如下:
clear && dbt run --select full_refresh:models/folder/上游增量模型.sql models/folder/my_model.sql+ --profiles-dir .
这样既会运行下游模型及其所有依赖,又会强制上游增量模型执行全量刷新。
办法2:通过变量控制上游模型的刷新策略
在项目的dbt_project.yml里,给上游增量模型配置条件化的增量策略:
models: 你的项目名: folder: 上游增量模型: incremental_strategy: "{{ 'replace' if var('force_full_refresh', false) else 'append' }}"
然后运行命令时传入变量触发全量刷新:
clear && dbt run --select models/folder/my_model.sql+ --vars '{"force_full_refresh": true}' --profiles-dir .
验证是否生效
运行后看日志,如果上游模型出现Full refresh is required或者Replacing existing table的日志内容,就说明全量刷新成功触发了。
内容的提问来源于stack exchange,提问作者NFeruch - FreePalestine
相关产品推荐
相关产品推荐

