REMOVE

从外部(外部云存储)或内部(即 Snowflake)暂存区移除文件。

对于内部暂存区,支持以下暂存区类型:

  • 已命名的内部暂存区。

  • 指定表的暂存区

  • 当前用户的暂存区

REMOVE 可以缩写为 RM。

另请参阅:

LIST

语法

REMOVE { internalStage | externalStage } [ PATTERN = '<regex_pattern>' ]
Copy

其中:

internalStage ::=
    @[<namespace>.]<int_stage_name>[/<path>]
  | @[<namespace>.]%<table_name>[/<path>]
  | @~[/<path>]
Copy
externalStage ::=
    @[<namespace>.]<ext_stage_name>[/<path>]
Copy

必填参数

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

    配置对 Amazon S3 的安全访问

    Google Cloud Storage

    storage.objects.delete

    配置 Google Cloud Storage 集成

    Microsoft Azure(Blob 存储)

    Storage Blob Data Contributor

    配置 Azure 容器以加载数据

  • 该命令将移除与指定路径匹配的所有目录和文件。例如,以下语句将匹配 mytable 表暂存区中的以下任何对象:

    • myobject.csv.gz (文件)

    • myobject (目录)

    • myobject_new (目录)

    rm @%mytable/myobject;
    
    Copy
  • 若要移除特定目录的所有文件,请在路径末尾包含正斜杠(/)。例如:

    rm @%mytable/myobject/;
    
    Copy
  • 移除 Snowflake 用户暂存区中的 worksheet_data 目录。Classic Console 将工作表的元数据存储在此目录的 Worksheets Worksheet 选项卡 选项卡中。移除目录将移除对工作表的访问,这样就无法还原该工作表。

    此预防措施不会应用于 Snowsight 中的工作表,这些工作表存储在其他位置,不容易被意外删除。

  • 如果 REMOVE 语句在完成运行之前被中断,则不会还原该语句已移除的任何文件。

示例

从命名的内部暂存区或名为 mystage 的外部暂存区中的 path1/subpath2 路径移除所有文件:

REMOVE @mystage/path1/subpath2;
Copy

orders 表的暂存区中移除所有文件:

REMOVE @%orders;
Copy

使用该命令的缩写形式从当前用户的暂存区中移除其名称与模式 *jun* 匹配的文件:

RM @~ pattern='.*jun.*';
Copy
语言: 中文