为什么在尝试 table 实体化时在 dbt 中出现 'select active warehouse' 错误,而在视图实体化中却没有?
Why do I get a 'select active warehouse' error in dbt when trying the table materialization, but not with the view materialization?
我已经使用 dbt 几个月了,所以对它还是很陌生。当运行一个测试模型时,我在使用视图实体化时没有问题:
{{ config(materialized='view') }}
select 1 as id
导致:
15:30:25 | 1 of 1 START view model dbt.stg_CampaignTableTest.................... [RUN]
15:30:26 | 1 of 1 OK created view model dbt.stg_CampaignTableTest............... [SUCCESS 1 in 1.48s]
但是,当我切换到 table 实现时,我收到一条错误消息,提示我没有在 Snowflake 中选择活动仓库:
{{ config(materialized='table') }}
select 1 as id
导致:
15:32:52 | 1 of 1 START table model dbt.stg_CampaignTableTest................... [RUN]
15:32:53 | 1 of 1 ERROR creating table model dbt.stg_CampaignTableTest.......... [ERROR in 1.22s]
Database Error in model stg_CampaignTableTest (models/test/stg_CampaignTableTest.sql)
000606 (57P03): No active warehouse selected in the current session. Select an active warehouse with the 'use warehouse' command.
当然,不可能在我的测试模型中包含“使用仓库”语句,因为它被插入到编译后的 SQL 错误位置:
{{ config(materialized='table') }}
use warehouse "AnalysisTeam_WH";
select 1 as id
因为它导致:
2021-10-07T15:33:59.366279Z: On model.my_new_project.stg_CampaignTableTest: /* {"app": "dbt", "dbt_version": "0.21.0", "profile_name": "user", "target_name": "default", "node_id": "model.my_new_project.stg_CampaignTableTest"} */
create or replace transient table "AnalysisTeam"."dbt"."stg_CampaignTableTest" as
(
use warehouse "AnalysisTeam_WH";
2021-10-07T15:33:59.366342Z: Opening a new connection, currently in state closed
2021-10-07T15:34:00.163673Z: Snowflake query id: 019f7386-3200-ec67-0000-464100e189fa
2021-10-07T15:34:00.163803Z: Snowflake error: 001003 (42000): SQL compilation error:
syntax error line 4 at position 0 unexpected 'use'.
我的 Snowflake 'role' 似乎拥有创建 table 视图等的正确权限,所以我无法理解为什么从视图更改为 table 会导致模型失败。我怀疑它可能与 Snowflake 权限有关,而不是 dbt 问题,但我不确定。任何想法将不胜感激!
编辑:我的屏幕截图似乎有误,因此我已切换到希望更清晰的代码片段。
我建议检查两种可能性。
一个。 "~/.dbt/profiles.yml" Snowflake Profile:
处的活动配置文件配置
并搜索 'warehouse:'
my-snowflake-db:
target: dev
outputs:
dev:
type: snowflake
account: [account id]
# User/password auth
user: [username]
password: [password]
role: [user role]
database: [database name]
warehouse: [warehouse name] <<<<<
schema: [dbt schema]
threads: [1 or more]
乙。用于连接的用户的默认仓库设置 ALTER USER:
SHOW USERS;
ALTER USER user_name SET DEFAULT_WAREHOUSE = '<existing_warehouse_name>';
确保 dbt 正在使用的 Snowflake 角色已被授予对 dbt 正在使用的 Snowflake 仓库的访问权限。
show grants on warehouse 'xxxxxxxx'
我已经使用 dbt 几个月了,所以对它还是很陌生。当运行一个测试模型时,我在使用视图实体化时没有问题:
{{ config(materialized='view') }}
select 1 as id
导致:
15:30:25 | 1 of 1 START view model dbt.stg_CampaignTableTest.................... [RUN]
15:30:26 | 1 of 1 OK created view model dbt.stg_CampaignTableTest............... [SUCCESS 1 in 1.48s]
但是,当我切换到 table 实现时,我收到一条错误消息,提示我没有在 Snowflake 中选择活动仓库:
{{ config(materialized='table') }}
select 1 as id
导致:
15:32:52 | 1 of 1 START table model dbt.stg_CampaignTableTest................... [RUN]
15:32:53 | 1 of 1 ERROR creating table model dbt.stg_CampaignTableTest.......... [ERROR in 1.22s]
Database Error in model stg_CampaignTableTest (models/test/stg_CampaignTableTest.sql)
000606 (57P03): No active warehouse selected in the current session. Select an active warehouse with the 'use warehouse' command.
当然,不可能在我的测试模型中包含“使用仓库”语句,因为它被插入到编译后的 SQL 错误位置:
{{ config(materialized='table') }}
use warehouse "AnalysisTeam_WH";
select 1 as id
因为它导致:
2021-10-07T15:33:59.366279Z: On model.my_new_project.stg_CampaignTableTest: /* {"app": "dbt", "dbt_version": "0.21.0", "profile_name": "user", "target_name": "default", "node_id": "model.my_new_project.stg_CampaignTableTest"} */
create or replace transient table "AnalysisTeam"."dbt"."stg_CampaignTableTest" as
(
use warehouse "AnalysisTeam_WH";
2021-10-07T15:33:59.366342Z: Opening a new connection, currently in state closed
2021-10-07T15:34:00.163673Z: Snowflake query id: 019f7386-3200-ec67-0000-464100e189fa
2021-10-07T15:34:00.163803Z: Snowflake error: 001003 (42000): SQL compilation error:
syntax error line 4 at position 0 unexpected 'use'.
我的 Snowflake 'role' 似乎拥有创建 table 视图等的正确权限,所以我无法理解为什么从视图更改为 table 会导致模型失败。我怀疑它可能与 Snowflake 权限有关,而不是 dbt 问题,但我不确定。任何想法将不胜感激!
编辑:我的屏幕截图似乎有误,因此我已切换到希望更清晰的代码片段。
我建议检查两种可能性。
一个。 "~/.dbt/profiles.yml" Snowflake Profile:
处的活动配置文件配置并搜索 'warehouse:'
my-snowflake-db:
target: dev
outputs:
dev:
type: snowflake
account: [account id]
# User/password auth
user: [username]
password: [password]
role: [user role]
database: [database name]
warehouse: [warehouse name] <<<<<
schema: [dbt schema]
threads: [1 or more]
乙。用于连接的用户的默认仓库设置 ALTER USER:
SHOW USERS;
ALTER USER user_name SET DEFAULT_WAREHOUSE = '<existing_warehouse_name>';
确保 dbt 正在使用的 Snowflake 角色已被授予对 dbt 正在使用的 Snowflake 仓库的访问权限。
show grants on warehouse 'xxxxxxxx'