.NET应用连接Snowflake成功但执行SQL报UnprocessableEntity错误
解决Snowflake执行SQL时的391920错误
问题根源
错误码391920明确要求必须指定执行SQL的仓库:你的请求体中未包含warehouse字段,且当前用户未配置默认仓库(错误消息里的DEFAULT_NAMESPACE应为表述笔误,实际需要配置的是DEFAULT_WAREHOUSE)。
解决方案
方案1:修改代码,在请求体中添加仓库参数
调整QuerySnowflake方法的请求内容,加入warehouse字段(替换为你的试用账号中的仓库名称,试用账号默认仓库通常为COMPUTE_WH):
public async Task<QueryResult> QuerySnowflake(string statement, string database, string schema, string warehouse) { var content = new { statement, database, schema, warehouse }; return await _httpClient.SnowflakePost<QueryResult>($"https://{_accountId}.snowflakecomputing.com/api/v2/statements", content, await GetHeaders(), _cancellationToken); }
调用时传入仓库名:
var result = await QuerySnowflake("SELECT * FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER", "SNOWFLAKE_SAMPLE_DATA", "TPCH_SF1", "COMPUTE_WH");
方案2:为用户配置默认仓库
通过Snowflake客户端执行以下SQL,将默认仓库绑定到你的用户(替换my_username和COMPUTE_WH为实际信息):
ALTER USER my_username SET DEFAULT_WAREHOUSE = COMPUTE_WH;
额外验证:确保角色拥有仓库权限
如果配置默认仓库后仍报错,检查当前角色(sysadmin)是否拥有仓库的使用权限:
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE sysadmin;
补充说明
你的试用账号未自动为用户绑定默认仓库,而之前可用的账号已配置过该选项,这是导致代码在新账号失效的核心原因。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

