ALTER PIPE

修改现有管道对象的有限特性集。还支持以下操作:

  • 暂停管道。

  • 刷新管道(即,将指定的暂存数据文件复制到 Snowpipe 引入队列,以便加载到目标表)。

  • 为管道添加/覆盖/移除注释。

  • 在管道上设置/取消设置标签。

另请参阅:

CREATE PIPEDROP PIPESHOW PIPESDESCRIBE PIPE

语法

ALTER PIPE [ IF EXISTS ] <name> SET { [ objectProperties ]
                                      [ COMMENT = '<string_literal>' ] }

ALTER PIPE <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER PIPE <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER PIPE [ IF EXISTS ] <name> UNSET { <property_name> | COMMENT } [ , ... ]

ALTER PIPE [ IF EXISTS ] <name> REFRESH { [ PREFIX = '<path>' ] [ MODIFIED_AFTER = <start_time> ] }
Copy

其中:

objectProperties ::=
  PIPE_EXECUTION_PAUSED = TRUE | FALSE
Copy

参数

name

指定要更改的管道的标识符。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

SET ...

指定要为管道设置的一个(或多个)属性(用空格、逗号或新行分隔):

ERROR_INTEGRATION = 'integration_name'

仅当配置 Snowpipe 将错误通知发送到云消息传递服务时才需要。`指定用于与消息传递服务通信的通知集成的名称。有关更多信息,请参阅 :doc:/user-guide/data-load-snowpipe-errors`。

PIPE_EXECUTION_PAUSED = TRUE | FALSE

指定是否暂停正在运行的管道,通常是在准备转让管道的所有权时:

  • TRUE 暂停管道。SYSTEM$PIPE_STATUS 报告的 executionStatePAUSED。请注意,管道所有者可以继续将文件提交到暂停的管道;但是,在恢复管道之前,他们不能处理文件。

  • FALSE 恢复管道。SYSTEM$PIPE_STATUS 报告的 executionStateRUNNING

    备注

    以下任一情况都需要调用 SYSTEM$PIPE_FORCE_RESUME 函数,从而 强制 恢复管道:

    • 将管道的所有权转让给另一个角色。此要求允许新所有者调用 SYSTEM$PIPE_STATUS 函数,从而评估管道状态并确定有多少文件等待加载。

    • 允许利用云消息传递来触发数据加载(即管道定义中 AUTO_INGEST = TRUE 的位置)的管道对象变得过时。如果管道的暂停时间超过管道所收到事件消息的有限保留期(默认为 14 天),则将管道视为过时。

默认值::code:`FALSE`(管道默认正在运行)

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

指定 标签 名称和标签字符串值。

标签值始终为字符串,标签值的最大字符数为 256。

有关在语句中指定标签的信息,请参阅 对象和列的标签配额

COMMENT = 'string'

为管道添加注释或覆盖现有注释。

UNSET ...

为管道指定一个(或多个)要取消设置的属性,从而将其重置为默认值:

  • PIPE_EXECUTION_PAUSED

  • TAG tag_name [ , tag_name ... ]

  • COMMENT

您可以使用单个 ALTER 语句重置多个属性;但是,每个属性 必须 用逗号分隔。重置属性时,请仅指定名称;指定属性的值将返回错误。

REFRESH

将一组暂存数据文件复制到 Snowpipe 引入队列,以便加载到目标表中。此子句接受可选路径,并且可以根据指定的开始时间,进一步筛选要加载的文件列表。

备注

  • 此 SQL 命令只能加载最近 7 天内暂存的数据文件。

  • 此 SQL 命令检查管道和目标表的加载历史记录。因此,该命令仅使用以下任一项将 尚未 加载的文件加入队列:

    • 相同的管道,前提是管道所有者在加载文件后没有重新创建管道。

    • COPY INTO <table> 语句。

重要

REFRESH 功能旨在短期使用,以解决 Snowpipe 无法加载文件子集时的特定问题,并且不适用于常规使用。

PREFIX = 'path'

追加到管道定义中的暂存区引用的路径(或 前缀)。该路径限制要加载的文件集。数据加载中仅包含以指定路径开头的文件。

例如,假设管道定义引用 @mystage/path1/。如果 path 值为 d1/,则 ALTER PIPE 语句使用 @mystage 路径将加载限制到 /path1/d1/ 暂存区中的文件。有关更多信息,请参阅示例。

请注意,路径必须放在单引号内。

MODIFIED_AFTER = 'start_time'

根据 LAST_MODIFIED 日期(即文件暂存的日期),要复制到 Snowpipe 引入队列的最早数据文件的时间戳(采用 ISO-8601 格式)。

默认允许的最大值为 7 天。

使用说明

  • 只有管道所有者(即,具有管道的 OWNERSHIP 权限的角色)可以设置或取消设置管道的属性。

    具有以下最低权限的非所有者角色可以刷新管道(使用 ALTER PIPE ... REFRESH ...):

    权限

    对象

    备注

    OPERATE

    管道

    USAGE

    管道定义中的暂存区

    仅限外部暂存区

    READ

    管道定义中的暂存区

    仅限内部暂存区

    SELECT、INSERT

    管道定义中的表

    具有管道的 OPERATE 权限的非所有者角色可以暂停或恢复管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED = TRUE | FALSE)。

    对架构对象进行 SQL 操作还需要对包含该对象的数据库和架构具有 USAGE 权限。

  • 当前,无法使用 ALTER PIPE 语句修改以下管道属性:

    相反,使用 CREATE OR REPLACE PIPE 语句重新创建管道。

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

示例

暂停 mypipe 管道:

alter pipe mypipe SET PIPE_EXECUTION_PAUSED = true;
Copy

为管道 mypipe 添加或修改注释:

alter pipe mypipe SET COMMENT = "Pipe for North American sales data";
Copy

刷新管道

设置示例:

CREATE PIPE mypipe AS COPY INTO mytable FROM @mystage/path1/;
Copy

按照 mypipe 管道定义中的定义,将 @mystage/path1/ 暂存区和路径中的数据文件加载到 mytable 表中:

ALTER PIPE mypipe REFRESH;
Copy

与上一个示例相同,但追加 d1 到路径,以进一步限制要加载的文件列表。在当前示例中,该语句从 @mystage/path1/d1/ 暂存区和路径加载文件:

ALTER PIPE mypipe REFRESH PREFIX='d1/';
Copy

与上一个示例相同,但仅加载在指定时间戳之后暂存的文件:

ALTER PIPE mypipe REFRESH PREFIX='d1/' MODIFIED_AFTER='2018-07-30T13:56:46-07:00';
Copy
语言: 中文