REMOVE¶
从外部(外部云存储)或内部(即 Snowflake)暂存区移除文件。
对于内部暂存区,支持以下暂存区类型:
已命名的内部暂存区。
指定表的暂存区
当前用户的暂存区
REMOVE 可以缩写为 RM。
- 另请参阅:
语法¶
REMOVE { internalStage | externalStage } [ PATTERN = '<regex_pattern>' ]
其中:
internalStage ::= @[<namespace>.]<int_stage_name>[/<path>] | @[<namespace>.]%<table_name>[/<path>] | @~[/<path>]externalStage ::= @[<namespace>.]<ext_stage_name>[/<path>]
必填参数¶
internalStage | externalStage
指定暂存数据文件的位置:
@[namespace.]int_stage_name[/path]
文件位于指定的已命名内部暂存区。
@[namespace.]ext_stage_name[/path]
文件位于指定的命名外部暂存区。
@[namespace.]%table_name[/path]
文件位于指定表的暂存区中。
@~[/path]
文件位于当前用户的暂存区。
其中:
namespace
是已命名的内部暂存区或表所在的数据库和/或架构。如果数据库和架构当前正在用户会话中使用,则此参数为 选填;否则,为必填。path
是云存储位置中文件的可选路径(即文件的名称以公共字符串开头),且区分大小写,用于限制对一组文件的访问。不同的云存储服务也可以将路径称为 前缀 或 文件夹。
备注
如果暂存区名称包含空格或特殊字符,则必须将其放在单引号内(例如,对于命名为
"my stage"
的暂存区,格式为'@"my stage"'
)。
可选参数¶
PATTERN = 'regex_pattern'
指定用于筛选要移除的文件的正则表达式模式。该命令列出指定
path
中的所有文件,并对找到的每个文件应用正则表达式模式。
使用说明¶
如果要从暂存区上的文件加载数据,则在成功加载数据之前请不要移除暂存文件。要检查数据是否已成功加载,请使用 COPY_HISTORY 命令。检查
STATUS
列以确定是否已加载文件中的数据。请注意,如果状态为Load in progress
,则移除暂存文件可能会导致部分加载和数据丢失。从外部暂存区移除文件需要向云存储账户中的 Snowflake 授予以下角色或权限:
云存储服务
角色或权限
说明
Amazon S3
s3:DeleteObject
Google Cloud Storage
storage.objects.delete
Microsoft Azure(Blob 存储)
Storage Blob Data Contributor
该命令将移除与指定路径匹配的所有目录和文件。例如,以下语句将匹配
mytable
表暂存区中的以下任何对象:myobject.csv.gz
(文件)myobject
(目录)myobject_new
(目录)
rm @%mytable/myobject;
若要移除特定目录的所有文件,请在路径末尾包含正斜杠(
/
)。例如:rm @%mytable/myobject/;
请 勿 移除 Snowflake 用户暂存区中的
worksheet_data
目录。Classic Console 将工作表的元数据存储在此目录的 Worksheets 选项卡中。移除目录将移除对工作表的访问,这样就无法还原该工作表。此预防措施不会应用于 Snowsight 中的工作表,这些工作表存储在其他位置,不容易被意外删除。
如果 REMOVE 语句在完成运行之前被中断,则不会还原该语句已移除的任何文件。
示例¶
从命名的内部暂存区或名为 mystage
的外部暂存区中的 path1/subpath2
路径移除所有文件:
REMOVE @mystage/path1/subpath2;
从 orders
表的暂存区中移除所有文件:
REMOVE @%orders;
使用该命令的缩写形式从当前用户的暂存区中移除其名称与模式 *jun*
匹配的文件:
RM @~ pattern='.*jun.*';