为什么dbt使用table物化报active warehouse错误,view物化无此问题?
报错原因
- Snowflake 中创建视图仅操作元数据,不需要激活计算仓库;但创建表需要运行查询计算并写入数据,必须指定活跃仓库,这就是view模式运行正常、table模式报错的核心原因。
- 直接在模型文件中写
use warehouse语句会报错,是因为dbt默认会把模型内的SQL内容包裹在create or replace table ... as (...)的子查询中,DDL语句不能出现在子查询内,因此触发语法错误。
解决方案
方案1:全局配置默认仓库(推荐,适配绝大多数场景)
修改dbt本地配置文件~/.dbt/profiles.yml,在你使用的Snowflake连接对应target下新增warehouse参数,示例配置如下:
<你的配置文件名>: target: default outputs: default: type: snowflake account: <你的Snowflake账号标识> user: <你的用户名> password: <你的密码> role: AnalysisTeam_Role warehouse: AnalysisTeam_WH # 新增这行指定默认使用的仓库 database: AnalysisTeam schema: dbt threads: 4
修改保存后重新运行dbt命令即可生效。
方案2:为单个模型指定专属仓库
如果不同模型需要使用不同的计算仓库,不需要手动写use语句,直接在模型的config配置中添加warehouse参数即可,dbt会自动在执行模型逻辑前完成仓库切换:
{{ config( materialized='table', warehouse='AnalysisTeam_WH' ) }} select 1 as id
内容的提问来源于stack exchange,提问作者stuartcoggins
相关产品推荐
相关产品推荐

