使用Fivetran DBT Stripe包运行dbt run时Snowflake出现Schema重复问题
问题产生原因
- 核心原因是配置作用域不匹配:你当前在
dbt_project.yml中编写的stripe配置节点,大概率是被错误缩进在了自身项目的命名空间下,这类配置仅对你自己项目内models/stripe/路径下的自定义模型生效,无法覆盖Fivetran官方Stripe包的内置模型配置。该包内部默认给所有自带模型配置了+schema: stripe规则,这部分模型执行时会自动生成名为Stripe的schema(Snowflake对未加双引号的标识符默认按大写规则存储,控制台展示时会呈现为首字母大写的形式),写入的数据集计算逻辑和你指定的stripe_combinedschema下的模型完全一致,最终造成schema和数据冗余。 - 次要触发场景:部分版本的Fivetran Stripe包会强依赖
stripe_source基础数据包,如果你只配置了主包的schema规则、未同步覆盖子包的默认配置,子包的模型也会写入默认生成的stripe schema,加剧冗余问题。
对应修复方案
按以下步骤调整即可彻底解决问题:
- 修正
dbt_project.yml的models配置段,将Stripe相关包的配置节点放在和自身项目配置平级的位置,显式覆盖包内置的schema规则,参考正确配置如下:
models: # 此处保留你自身项目的原有配置即可,示例如下 your_own_project_name: +materialized: view # 你自己的其他模型配置按原有逻辑保留 # 以下Stripe相关配置必须和你自身项目名的节点平级,不要缩进在自身项目命名空间内 stripe: +materialized: table +schema: stripe_combined # 同步配置依赖的stripe_source子包,避免子包生成冗余schema stripe_source: +materialized: table +schema: stripe_combined
- 校验配置是否生效:保存配置后,执行命令
dbt ls --select package:stripe,package:stripe_source --output json,检查返回结果中每个模型的schema字段值是否为stripe_combined,确认所有模型都匹配目标schema后再执行后续任务。 - 清理冗余数据:校验通过后执行
dbt run --full-refresh,确认所有Stripe相关模型都正常写入stripe_combinedschema,之后手动删除Snowflake中冗余的Stripeschema即可,不会影响后续dbt任务的正常运行。
注意:配置schema名称时不要给值额外包裹双引号,否则Snowflake会严格按照引号内的大小写生成schema,反而容易出现大小写不匹配的异常。
内容的提问来源于stack exchange,提问作者Solomon
相关产品推荐
相关产品推荐

