You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:45:05