ALTER PIPE¶
修改现有管道对象的有限特性集。还支持以下操作:
暂停管道。
刷新管道(即,将指定的暂存数据文件复制到 Snowpipe 引入队列,以便加载到目标表)。
为管道添加/覆盖/移除注释。
在管道上设置/取消设置标签。
语法¶
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> ] }
其中:
objectProperties ::= PIPE_EXECUTION_PAUSED = TRUE | FALSE
参数¶
name
指定要更改的管道的标识符。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。
SET ...
指定要为管道设置的一个(或多个)属性(用空格、逗号或新行分隔):
ERROR_INTEGRATION = 'integration_name'
仅当配置 Snowpipe 将错误通知发送到云消息传递服务时才需要。`指定用于与消息传递服务通信的通知集成的名称。有关更多信息,请参阅 :doc:/user-guide/data-load-snowpipe-errors`。
PIPE_EXECUTION_PAUSED = TRUE | FALSE
指定是否暂停正在运行的管道,通常是在准备转让管道的所有权时:
TRUE
暂停管道。SYSTEM$PIPE_STATUS 报告的executionState
是PAUSED
。请注意,管道所有者可以继续将文件提交到暂停的管道;但是,在恢复管道之前,他们不能处理文件。FALSE
恢复管道。SYSTEM$PIPE_STATUS 报告的executionState
是RUNNING
。备注
以下任一情况都需要调用 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 命令检查管道和目标表的加载历史记录。因此,该命令仅使用以下任一项将 尚未 加载的文件加入队列:
相同的管道,前提是管道所有者在加载文件后没有重新创建管道。
重要
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 语句修改以下管道属性:
AWS_SNS_TOPIC
参数INTEGRATION
参数
相反,使用 CREATE OR REPLACE PIPE 语句重新创建管道。
关于元数据:
注意
客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段。
示例¶
暂停 mypipe
管道:
alter pipe mypipe SET PIPE_EXECUTION_PAUSED = true;
为管道 mypipe
添加或修改注释:
alter pipe mypipe SET COMMENT = "Pipe for North American sales data";
刷新管道¶
设置示例:
CREATE PIPE mypipe AS COPY INTO mytable FROM @mystage/path1/;
按照 mypipe
管道定义中的定义,将 @mystage/path1/
暂存区和路径中的数据文件加载到 mytable
表中:
ALTER PIPE mypipe REFRESH;
与上一个示例相同,但追加 d1
到路径,以进一步限制要加载的文件列表。在当前示例中,该语句从 @mystage/path1/d1/
暂存区和路径加载文件:
ALTER PIPE mypipe REFRESH PREFIX='d1/';
与上一个示例相同,但仅加载在指定时间戳之后暂存的文件:
ALTER PIPE mypipe REFRESH PREFIX='d1/' MODIFIED_AFTER='2018-07-30T13:56:46-07:00';