如何通过Snowflake查询或storage integration删除S3对象
回答
是可以通过Snowflake直接删除你卸载到S3上的文件的,不需要跳转到AWS控制台操作,具体操作逻辑和步骤如下:
- 首先确认权限前置条件:你的Storage Integration关联的AWS IAM角色,必须已经对目标S3路径授予了
s3:DeleteObject权限,如果你之前配置Storage Integration时只开通了读写权限,需要先到AWS IAM的权限策略中补充删除权限。 - 具体操作可以按以下步骤执行:
- 给目标S3路径创建关联对应Storage Integration的外部阶段,参考创建命令:
CREATE OR REPLACE STAGE my_s3_target_stage URL = 's3://mybucket/data/files/20210922/' STORAGE_INTEGRATION = SI_NAME FILE_FORMAT = (TYPE = parquet);- 执行删除前先验证路径下的文件是否符合预期,避免误删:
LIST @my_s3_target_stage;- 使用
REMOVE命令删除文件,支持全量删除或者按规则匹配删除:
- 全量删除该路径下所有文件:
REMOVE @my_s3_target_stage;- 仅删除匹配特定规则的文件,比如只删除后缀为.parquet的文件:
REMOVE @my_s3_target_stage PATTERN = '.*\.parquet';
注意事项:
- 执行删除操作的Snowflake角色需要拥有对应外部阶段的
USAGE权限以及阶段的WRITE权限,才能正常执行REMOVE命令- 删除操作不可逆,执行前务必通过LIST命令确认目标路径下的文件范围
- 你也可以不提前创建外部阶段,直接在REMOVE命令中指定带Storage Integration的S3路径,但创建复用外部阶段是更推荐的规范用法
内容的提问来源于stack exchange,提问作者YogeshR
相关产品推荐
相关产品推荐

