dbt 0.21.0版本on_schema_change配置是否需要搭配--full-refresh参数
dbt
on_schema_change='sync_all_columns' 问题解答 1. 版本功能说明
dbt 0.21.0是on_schema_change功能首次正式发布的版本,本身存在明确的功能限制:
- 该版本中
on_schema_change='sync_all_columns'不需要搭配--full-refresh即可触发表结构同步,但仅支持append类型的增量策略 merge增量策略下的schema同步逻辑在0.21.0版本未完全实现,会出现你遇到的两个问题:新增列仅创建空字段不回填数据、数据类型变更不会同步更新
2. 配置正确性判断
你当前的配置本身没有语法错误,问题出在版本与增量策略的搭配不匹配:
{{ config( materialized='incremental', on_schema_change='sync_all_columns', incremental_strategy='merge' ) }}
注意:所有版本的on_schema_change都仅负责同步目标表的结构定义,不会主动回填历史存量行的新列数据,只会在增量运行时给新增的行写入新列的值,若需要全表历史数据都填充新列值,必须执行一次--full-refresh
3. 修复方案
- 方案1:升级dbt到1.0及以上版本,该版本修复了
merge增量策略下的schema同步缺陷,可正常实现新增列、数据类型变更的同步操作 - 方案2:若无法升级版本,将
incremental_strategy改为append即可在0.21.0版本触发正常的schema同步 - 若需要给历史行填充新列数据,不管采用哪种方案,都需要在新增列后手动执行一次
dbt run --full-refresh -m <你的模型名>
内容的提问来源于stack exchange,提问作者Daniel_T
相关产品推荐
相关产品推荐

