如何从Snowflake获取内部Stage的StageInfo凭证实现数据流直传
方案说明
你要的StageInfo凭证可以通过两种官方合法方式获取,具体如下:
方式1:调用Snowflake官方REST API接口(和Node.js连接器内部逻辑完全一致)
Snowflake Node.js连接器内部就是调用的/session/v1/upload-request接口获取StageInfo,你可以直接复用这个逻辑:
- 前置要求:你已经完成Snowflake账号登录,拿到了有效的会话
Bearer Token、账户对应的访问域名 - 请求方法:POST
- 请求路径:
https://<你的Snowflake账户域名>/session/v1/upload-request - 请求头必须携带:
Authorization: Bearer <你的会话令牌>Content-Type: application/json
- 请求Body参数示例:
{ "stageName": "@~", // 替换为你要上传的目标Stage,@~代表当前用户的个人内部Stage "filePath": "your/upload/path/filename.csv", // 替换为你要上传到Stage里的文件路径 "requestType": "UPLOAD" }
接口返回的内容结构和你调试拿到的StageInfo完全一致,包含对应云存储的临时凭证、桶地址、区域、路径等所有你需要的字段。
方式2:执行Snowflake内置SQL函数获取(更简单)
如果你已经建立了正常的Snowflake连接,直接执行以下SQL即可拿到Stage对应的凭证和配置信息:
-- 先获取Stage的位置和区域信息 DESCRIBE STAGE @~; -- 替换为你的Stage名 -- 再获取临时访问凭证,GCP/Azure对应换为SYSTEM$GET_GCP_STAGE_CREDENTIALS/SYSTEM$GET_AZURE_STAGE_CREDENTIALS SELECT SYSTEM$GET_AWS_STAGE_CREDENTIALS('@~');
拼接两个查询的结果就能得到完整的StageInfo结构。
注意事项
- 获取到的临时凭证有效期仅为数分钟,仅对当前请求的Stage路径有权限,过期后需要重新申请
- 上传完成后,你可以正常执行
COPY INTO命令将Stage内的文件加载到目标表中,和使用官方SDK上传的文件没有任何差异
内容的提问来源于stack exchange,提问作者Kristian Barrett
相关产品推荐
相关产品推荐

