PAYATHON 2026

dbt-snowflake 创建 materialized view 报类型错误怎么办?

数据小许

结论

报错显示,dbt-snowflake 处理模型关系类型时无法识别 materialized_view。日志中的 dbt Core 版本是 1.11.0-rc2,Snowflake 适配器版本是 1.10.3。这两个版本可能不兼容,也可能是当前适配器不支持这种物化类型。dbt debug 成功只说明连接检查通过,不能确认特定的 materialization 可用。

排查步骤

  1. 确认 Core 与适配器的版本约束。在当前虚拟环境运行:

    python -m pip show dbt-core dbt-snowflake
    python -m pip check
    dbt --version

    查看 dbt-snowflake 声明的 dbt-core 依赖范围,确认安装的 Core 版本符合要求。当前 Core 是预发布版 1.11.0-rc2,适配器是 1.10.3。dbt debug 通过并不能证明这组版本受支持。

  2. 使用受支持的稳定版本组合复现。可以在单独的虚拟环境中安装适配器依赖允许的稳定版 dbt Core 和 dbt-snowflake,避免预发布版 Core 影响判断。具体版本应根据适配器的依赖约束,以及它对 materialized view 的支持情况确定。Core 与适配器的补丁版本号不一定要完全相同。

  3. 检查该适配器版本是否提供 materialized_view。如果在稳定且兼容的版本组合下仍然报相同错误,确认所用 dbt-snowflake 版本是否支持这种 materialization,以及是否需要额外的项目宏或包。如果该版本不支持,可以升级到提供支持的兼容版本,或改用当前已支持的模型类型。

  4. 确认版本和支持情况后,重新运行原来的 dbt run --select 命令。普通 view 能运行,并不能单独证明 materialized view 配置有效。

配置上下文

原模型配置为:

{{
config (
materialized = 'materialized_view',
on_schema_change = 'fail'
)
}}

现有日志将失败定位在处理 SnowflakeRelation 的 type 字段时,实际无效值是 materialized_view。仅凭这段日志无法判断原因是版本组合不兼容,还是适配器缺少相应支持。需要先确认依赖约束和该版本支持的 materialization,才能确定应升级哪个组件。

备注:内容仅供参考。