如何在Snowflake中关联STAGES与COPY_HISTORY表?
在Snowflake中关联STAGES和COPY_HISTORY视图的方法
Snowflake的STAGES和COPY_HISTORY视图可以通过以下两种方式实现关联:
方法1:利用stage_url直接匹配
SNOWFLAKE.ACCOUNT_USAGE.STAGES视图中的stage_url字段,与COPY_HISTORY的STAGE_LOCATION字段是直接对应的——无论是内部Stage还是外部Stage,两者的取值完全一致。直接用这个字段关联即可:
SELECT s.stage_name, s.stage_id, ch.* FROM SNOWFLAKE.ACCOUNT_USAGE.STAGES s JOIN SNOWFLAKE.ACCOUNT_USAGE.COPY_HISTORY ch ON s.stage_url = ch.STAGE_LOCATION;
方法2:解析STAGE_LOCATION匹配内部Stage
如果是内部Stage,STAGE_LOCATION的格式通常为@<数据库>.<模式>.<Stage名称>,可以通过字符串函数提取Stage的全名,再与STAGES的stage_name(格式为<数据库>.<模式>.<Stage名称>)匹配:
用正则表达式提取
SELECT s.stage_name, s.stage_id, ch.* FROM SNOWFLAKE.ACCOUNT_USAGE.STAGES s JOIN SNOWFLAKE.ACCOUNT_USAGE.COPY_HISTORY ch ON s.stage_name = REGEXP_SUBSTR(ch.STAGE_LOCATION, '@(.*)$', 1, 1, 'e');
用拆分函数提取
SELECT s.stage_name, s.stage_id, ch.* FROM SNOWFLAKE.ACCOUNT_USAGE.STAGES s JOIN SNOWFLAKE.ACCOUNT_USAGE.COPY_HISTORY ch ON s.stage_name = SPLIT_PART(ch.STAGE_LOCATION, '@', 2);
注意事项
- 外部Stage的
STAGE_LOCATION是云存储的完整路径(如S3、Azure Blob的URL),此时直接使用方法1即可关联。 - 操作前需确保拥有
ACCOUNTADMIN角色,或已被授予这两个视图的SELECT权限。
内容的提问来源于stack exchange,提问作者Peachman1997
相关产品推荐
相关产品推荐

