如何解决fivetran/zendesk dbt包模型无法物化的问题?
问题描述
我是dbt包新手,在使用fivetran/zendesk包时遇到模型物化问题:
- 已将包添加到
packages.yml并执行dbt deps成功,包及其依赖已安装完成 - 执行
dbt run时,仅运行自建模型,包内模型未物化到Snowflake,无报错 - 已在
dbt_project.yml中配置zendesk_database和zendesk_schema变量,执行dbt run时能看到zendesk的on-run-start hook运行 - 执行
dbt test会运行该包的测试,但不确定测试类型 - 不想通过自建模型
SELECT * FROM {{ ref(...) }}的方式引用包内模型,已尝试更换版本、卸载重装包、修改目标schema等操作
配置信息
packages.yml
packages: - package: dbt-labs/dbt_utils version: [">=1.1.0", "<1.3.0"] - package: tnightengale/dbt_meta_testing version: 0.3.6 - package: dbt-labs/codegen version: 0.12.1 - package: fivetran/zendesk version: [">=0.16.0", "<0.17.0"]
dbt_project.yml(关键部分)
name: 'fake_company_analytics' version: '1.0.0' config-version: 2 require-dbt-version: [">=1.3.0", "<2.0.0"] profile: 'fake_company_analytics' vars: deployment_target_names: ['production', 'prod'] zendesk_database: fivetran zendesk_schema: zendesk models: +materialized: ephemeral +schema: miscellaneous +bind: false +persist_docs: relation: true columns: true fake_company_analytics: marts: +materialized: table core: +schema: core intermediate: +schema: core_intermediate netsuite: +schema: netsuite sources: +materialized: view +schema: sources salesforce: +tags: "salesforce" utils: +materialized: table +schema: utils
解决方案
1. 显式启用包内模型的运行权限
dbt默认不会自动运行第三方包的模型,需在dbt_project.yml的models节点下添加包的配置,指定物化方式和目标schema:
models: # 保留你的项目原有配置... fake_company_analytics: +materialized: ephemeral +schema: miscellaneous # ...其他项目配置 # 新增zendesk包的配置 zendesk: +materialized: table # 根据需求选择table/view +schema: zendesk # 指定物化到的schema # 如果需要运行zendesk_source的底层模型,也需配置 zendesk_source: +materialized: view
2. 修正全局配置的作用范围
你当前的models根节点配置了+materialized: ephemeral,这个全局配置会覆盖所有模型(包括包内模型)。而ephemeral模型不会物化到数据库,仅作为CTE存在,这是包内模型不生成的核心原因之一。
调整为仅对当前项目应用全局配置:
models: # 仅当前项目继承全局配置 fake_company_analytics: +materialized: ephemeral +schema: miscellaneous +bind: false +persist_docs: relation: true columns: true # ...你的项目子模块配置 # 单独配置zendesk包 zendesk: +materialized: table +schema: zendesk
3. 验证并强制运行包内模型
- 执行
dbt list --select zendesk.*,确认dbt能识别到包内所有模型 - 执行
dbt run --select zendesk.*,强制运行zendesk包的所有模型,检查Snowflake是否生成对应的表/视图
4. 关于包测试的说明
fivetran/zendesk的测试大多是针对你的Zendesk实际数据源的验证测试(如主键唯一性、外键关联、字段非空约束等),而非单元测试。测试通过说明你的数据源连接和数据格式符合包的要求。
内容的提问来源于stack exchange,提问作者Matt Wufsus
相关产品推荐
相关产品推荐

