如何创建跨Schema通用Stage及实现Stage跨Schema调用
问题根因
在Schema下创建的Stage属于Schema级对象,默认执行show stages命令时仅返回当前会话激活Schema下的对象,因此切换到Y Schema后无法直接看到X Schema下的Stage,属于对象层级的正常可见性规则,并非配置错误。
跨Schema复用X Schema下已有Stage的操作方法
不需要重复创建Stage,通过以下方式即可跨Schema复用:
- 全限定名引用:只要当前使用的角色持有X Schema下目标Stage的
USAGE权限,在任意Schema下执行Stage相关操作(COPY、LIST、PUT等)时,直接使用[所属数据库名].X.[Stage名称]的全路径引用即可。比如数据库名为ANALYTICS、Stage名为USER_BEHAVIOR_STG,调用时写@ANALYTICS.X.USER_BEHAVIOR_STG即可正常使用,无需切换回X Schema。 - 跨Schema查询Stage元数据:如果需要在Y Schema下查看X Schema下的Stage列表,不需要切换Schema上下文,直接执行
show stages in schema X即可返回对应Schema下的所有Stage信息。
创建全Schema通用Stage的操作方法
如果需要创建无需指定Schema路径、在任意Schema下都可直接引用的通用Stage,创建账号级Stage即可:
- 账号级Stage不归属任何Database和Schema,创建时不要指定Database/Schema上下文,直接执行创建语句即可,示例:
CREATE OR REPLACE STAGE common_oss_stage URL = 's3://common-bucket/data-path/' CREDENTIALS = (AWS_KEY_ID = '你的访问密钥ID' AWS_SECRET_KEY = '你的访问密钥值');
- 创建完成后,无论当前会话切换到哪个Database、哪个Schema,都可以直接通过
@common_oss_stage引用该Stage;执行show stages in account即可查询到账号下所有的账号级Stage。 - 注意:需要给使用该Stage的角色授予对应账号级Stage的
USAGE权限,否则普通用户无法正常调用。
内容的提问来源于stack exchange,提问作者Xi12
相关产品推荐
相关产品推荐

