管理 Snowpipe¶
本主题描述与管理 Snowpipe 相关的管理任务。
在 Snowpipe 加载数据后删除暂存文件¶
管道对象不支持 PURGE 复制选项。当数据成功加载到表中时,Snowpipe 无法自动删除暂存文件。
要移除不再需要的暂存文件,我们建议定期执行 REMOVE 命令以删除文件。
或者,配置云存储服务提供商提供的所有生命周期管理功能。
正在加载历史数据¶
备注
本部分中的信息涉及使用事件通知自动加载数据。调用 Snowpipe REST API 可加载历史数据,无需额外步骤。
ALTER PIPE ...REFRESH 语句将前 7 天内暂存的一系列数据文件复制到 Snowpipe 引入队列以加载到目标表。如果您想从之前暂存的文件加载数据,我们建议执行以下步骤:
执行 COPY INTO <table> 语句,从而将历史数据加载到目标表。
结合使用 Snowpipe 与事件通知来配置自动数据加载。新暂存的文件将触发事件通知以引入目标表。历史数据文件不会触发事件通知,因此不会加载两次。
有关信息,请参阅:
- Amazon S3:
- Google Cloud Storage:
- Microsoft Azure:
执行 ALTER PIPE ...使用 REFRESH 语句对第 1 步和第 2 步之间暂存的任何文件进行排列。该语句会检查目标表和管道的加载历史记录,以确保相同的文件不会加载两次。
重建管道¶
要修改大多数管道属性,必须重建管道(使用 CREATE OR REPLACE PIPE 语句)。
本部分介绍在重建管道时要遵循的注意事项和最佳实践。
为自动数据加载重建管道¶
在重建能使用事件通知自动加载数据的管道时,我们建议您完成以下步骤:
查询 SYSTEM$PIPE_STATUS 函数并验证管道执行状态是否为
PAUSED
。重建管道(使用 CREATE OR REPLACE PIPE)。
再次暂停管道。
查看云消息传递服务的配置步骤,以确保设置仍然准确:
恢复管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED = false)。
再次查询 SYSTEM$PIPE_STATUS 函数,并且验证管道执行状态是否为
RUNNING
。
加载历史记录¶
Snowpipe 操作的加载历史记录存储在管道对象的元数据中。重建管道时,将删除加载历史记录。一般来说,这种情况仅影响随后在管道上执行 ALTER PIPE ...REFRESH 语句的用户。如果已成功加载数据并且随后未删除文件,则这样做可能会从管道存储位置中的暂存文件加载重复数据。
更改引用暂存区的云参数¶
外部暂存区的云参数包括以下内容:
URL
STORAGE_INTEGRATION
ENCRYPTION
成功配置 Snowpipe 后,如果您需要修改引用暂存区的任何云参数,我们建议完成以下步骤:
暂停管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED = true)。等待当前排队的所有文件加载到目标表中。
根据需要修改暂存区参数(使用 ALTER STAGE)。
恢复管道(使用
ALTER PIPE ... SET PIPE_EXECUTION_PAUSED = false
)。
由于管道不是事务性的,因此这些步骤可确保 Snowpipe 使用最新的暂存区参数值将文件加入队列。
警告
修改暂存区的 URL
参数可能会导致任何利用云消息传递来触发数据加载的依赖管道(即 AUTO_INGEST = TRUE
位置)停止工作。
转让管道所有权¶
完成以下步骤以转让管道所有权:
将 PIPE_EXECUTION_PAUSED 参数设置为 TRUE。
该参数允许暂停或恢复管道。该参数在以下级别受支持:
账户
架构
管道
在管道级别,对象所有者(或角色层次结构中的父角色)可以设置参数来暂停或恢复单个管道。
账户管理员(具有 ACCOUNTADMIN 角色的用户)可以在账户级别设置此参数来暂停或恢复账户中的所有管道。同样,具有架构的 MODIFY 权限的用户可以在架构级别暂停或恢复管道。请注意,这种较大范围的域控制仅影响尚未在较低级别设置参数的管道;例如,对象级别的所有者。
使用 GRANT OWNERSHIP 转让管道所有权。
强制恢复管道(使用 SYSTEM$PIPE_FORCE_RESUME)。
此步骤允许新所有者使用 SYSTEM$PIPE_STATUS 评估管道状态并确定有多少数据文件正在等待加载。我们建议验证是否只有获批加载到目标表中的文件才会加入队列。
修改管道定义中的 COPY 语句¶
完成以下步骤,修改管道定义中的 COPY 语句;例如,将列添加到目标表时。
要执行本部分中的命令,用户的当前角色必须具有管道的 OWNERSHIP 权限。
查询 SYSTEM$PIPE_STATUS 函数并且验证管道执行状态是否为
PAUSED
以及待处理文件计数是否为 0。重建管道,更改定义中的 COPY 语句。选择以下 任一 选项:
删除管道(使用 DROP PIPE)并创建(使用 CREATE PIPE)。
重建管道(使用 CREATE OR REPLACE PIPE 语法)。在内部,管道已删除并创建。
再次暂停管道。
查看云消息传递服务的配置步骤,以确保设置仍然准确:
恢复管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED = false)。
再次查询 SYSTEM$PIPE_STATUS 函数,并且验证管道执行状态是否为
RUNNING
。
备注
文件加载元数据与 管道对象 (而不是表)相关。重建管道会删除加载的文件的历史记录。确保由 Snowpipe 加载的文件不会意外地重新提交到管道并再次加载到目标表中。要查看表的查询历史记录,请查询 COPY_HISTORY 函数。
恢复过时的管道¶
备注
本部分仅适用于利用云消息传递来触发数据加载的管道对象(即,管道定义中的 AUTO_INGEST = TRUE
)。
当管道暂停时,为管道接收的事件消息将进入有限的保留期。默认期限为 14 天。如果管道暂停时间超过 14 天,则被视为过时。
要恢复过时的管道,合格的角色必须调用 SYSTEM$PIPE_FORCE_RESUME 函数并输入 STALENESS_CHECK_OVERRIDE 实参。此实参表明理解角色正在恢复过时的管道。
例如,恢复 mydb.myschema
数据库和架构中过时的 stalepipe1
管道:
SELECT SYSTEM$PIPE_FORCE_RESUME('mydb.myschema.stalepipe1','staleness_check_override');
当过时的管道暂停时,如果管道的所有权转让给其他角色,则恢复管道需要额外的 OWNERSHIP_TRANSFER_CHECK_OVERRIDE 实参。例如,恢复 mydb.myschema
数据库和架构中转让给新角色的过时 stalepipe2
管道:
SELECT SYSTEM$PIPE_FORCE_RESUME('mydb.myschema.stalepipe1','staleness_check_override, ownership_transfer_check_override');
当管道暂停时收到的事件通知达到有限保留期上限时,Snowflake 会将其从内部元数据中删除。如果管道稍后恢复,Snowpipe 会尽力处理这些较旧的通知。Snowflake 不能保证一定会处理这些通知。
例如,如果管道在暂停 15 天后恢复,Snowpipe 通常会跳过管道暂停第一天收到的任何事件通知(即现在已经超过 14 天)。如果管道在暂停 16 天后恢复,Snowpipe 通常会跳过管道暂停后第一天和第二天收到的任何事件通知。以此类推。
在 Snowsight 中管理管道¶
您可以在 Snowsight 中对管道执行基本管理任务。
登录 Snowsight。
在导航菜单中,选择 Data » Databases。
找到包含管道的数据库和架构。
选择管道以打开详细信息。
备注
要查看有关管道的详细信息,您必须使用具有管道的 MONITOR 或 OWNERSHIP 权限,以及包含管道的数据库和架构的 USAGE 权限的角色。有关更多详细信息,请参阅 管道权限。
在 Snowsight 中查看管道详细信息时,您可以查看有关管道的基本信息,如所有者角色和创建日期。
您还可以在 Snowsight 中对管道执行以下基本管理任务:
要向管道添加注释,请选择 » Edit。要编辑管道的其他属性,必须使用 CREATE PIPE SQL 命令替换管道。
Details 部分包括有关以下内容的信息:
管道的执行状态,例如是 Running、Paused 还是其他。
管道中挂起的文件数(如果有)。
管道最后一次引入的日期(如果适用)。
您还可以在 Definition 部分查看管道定义,或使用 Privileges 部分查看和管理权限。有关管理权限的详细信息,请参阅 使用 Snowsight 管理对象权限。