dbt嵌套列Schema变更导致快照执行失败,求解决方案
dbt快照嵌套字段Schema变更引发数据类型错误
报错信息
Value has type STRUCT<module STRING, reference_entity_class STRING, reference_table STRING, ...> which cannot be inserted into column created_by, which has type STRUCT<module STRING, reference_entity_class STRING, reference_table STRING, ...> at [16:33]
问题背景
struct类型字段created_by新增子字段后,运行dbt快照触发上述类型不匹配错误。待合并临时表(左侧)与原表(右侧)的Schema对比显示,created_by字段的子字段数量存在差异。
问题解答
dbt快照本身支持嵌套字段的Schema变更,出现该问题大概率是遗漏了关键配置或操作:
- 检查快照策略与数据仓库Schema演化配置
若使用merge类快照策略,需确保数据仓库允许Schema自动演化。比如BigQuery需要在合并语句中添加ALLOW_FIELD_ADDITION和ALLOW_FIELD_RENAMING参数;Snowflake则要开启ALTER TABLE ... ADD COLUMN权限,并确保快照逻辑处理了字段新增场景。 - 显式定义字段结构
在快照模型中,显式指定created_by的完整struct结构(包含新增子字段),避免dbt自动推断类型时出现不匹配。 - 手动同步目标表Schema
若数据仓库不支持自动Schema演化,可先手动修改快照目标表的created_by字段结构,使其与临时表一致,再重新运行快照。 - 检查快照逻辑中的字段处理
确保快照在对比或合并数据时,未对created_by字段做截断或类型转换操作,导致新的struct类型无法写入旧字段。
内容的提问来源于stack exchange,提问作者Daria
相关产品推荐
相关产品推荐

