管理 Snowpipe

本主题描述与管理 Snowpipe 相关的管理任务。

在 Snowpipe 加载数据后删除暂存文件

管道对象不支持 PURGE 复制选项。当数据成功加载到表中时,Snowpipe 无法自动删除暂存文件。

要移除不再需要的暂存文件,我们建议定期执行 REMOVE 命令以删除文件。

或者,配置云存储服务提供商提供的所有生命周期管理功能。

正在加载历史数据

备注

本部分中的信息涉及使用事件通知自动加载数据。调用 Snowpipe REST API 可加载历史数据,无需额外步骤。

ALTER PIPE ...REFRESH 语句将前 7 天内暂存的一系列数据文件复制到 Snowpipe 引入队列以加载到目标表。如果您想从之前暂存的文件加载数据,我们建议执行以下步骤:

  1. 执行 COPY INTO <table> 语句,从而将历史数据加载到目标表。

  2. 结合使用 Snowpipe 与事件通知来配置自动数据加载。新暂存的文件将触发事件通知以引入目标表。历史数据文件不会触发事件通知,因此不会加载两次。

    有关信息,请参阅:

    Amazon S3:

    针对 Amazon S3 自动执行 Snowpipe

    Google Cloud Storage:

    用于 Google Cloud Storage 的自动化 Snowpipe

    Microsoft Azure:

    为 Microsoft Azure Blob 存储自动化 Snowpipe

  3. 执行 ALTER PIPE ...使用 REFRESH 语句对第 1 步和第 2 步之间暂存的任何文件进行排列。该语句会检查目标表和管道的加载历史记录,以确保相同的文件不会加载两次。

重建管道

要修改大多数管道属性,必须重建管道(使用 CREATE OR REPLACE PIPE 语句)。

本部分介绍在重建管道时要遵循的注意事项和最佳实践。

为自动数据加载重建管道

在重建能使用事件通知自动加载数据的管道时,我们建议您完成以下步骤:

  1. 暂停管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED = true)。

  2. 查询 SYSTEM$PIPE_STATUS 函数并验证管道执行状态是否为 PAUSED

  3. 重建管道(使用 CREATE OR REPLACE PIPE)。

  4. 再次暂停管道。

  5. 查看云消息传递服务的配置步骤,以确保设置仍然准确:

  6. 恢复管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED = false)。

  7. 再次查询 SYSTEM$PIPE_STATUS 函数,并且验证管道执行状态是否为 RUNNING

加载历史记录

Snowpipe 操作的加载历史记录存储在管道对象的元数据中。重建管道时,将删除加载历史记录。一般来说,这种情况仅影响随后在管道上执行 ALTER PIPE ...REFRESH 语句的用户。如果已成功加载数据并且随后未删除文件,则这样做可能会从管道存储位置中的暂存文件加载重复数据。

更改引用暂存区的云参数

外部暂存区的云参数包括以下内容:

  • URL

  • STORAGE_INTEGRATION

  • ENCRYPTION

成功配置 Snowpipe 后,如果您需要修改引用暂存区的任何云参数,我们建议完成以下步骤:

  1. 暂停管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED = true)。等待当前排队的所有文件加载到目标表中。

  2. 根据需要修改暂存区参数(使用 ALTER STAGE)。

  3. 恢复管道(使用 ALTER PIPE ... SET PIPE_EXECUTION_PAUSED = false)。

由于管道不是事务性的,因此这些步骤可确保 Snowpipe 使用最新的暂存区参数值将文件加入队列。

警告

修改暂存区的 URL 参数可能会导致任何利用云消息传递来触发数据加载的依赖管道(即 AUTO_INGEST = TRUE 位置)停止工作。

转让管道所有权

完成以下步骤以转让管道所有权:

  1. PIPE_EXECUTION_PAUSED 参数设置为 TRUE。

    该参数允许暂停或恢复管道。该参数在以下级别受支持:

    • 账户

    • 架构

    • 管道

    在管道级别,对象所有者(或角色层次结构中的父角色)可以设置参数来暂停或恢复单个管道。

    账户管理员(具有 ACCOUNTADMIN 角色的用户)可以在账户级别设置此参数来暂停或恢复账户中的所有管道。同样,具有架构的 MODIFY 权限的用户可以在架构级别暂停或恢复管道。请注意,这种较大范围的域控制仅影响尚未在较低级别设置参数的管道;例如,对象级别的所有者。

  2. 使用 GRANT OWNERSHIP 转让管道所有权。

  3. 强制恢复管道(使用 SYSTEM$PIPE_FORCE_RESUME)。

    此步骤允许新所有者使用 SYSTEM$PIPE_STATUS 评估管道状态并确定有多少数据文件正在等待加载。我们建议验证是否只有获批加载到目标表中的文件才会加入队列。

修改管道定义中的 COPY 语句

完成以下步骤,修改管道定义中的 COPY 语句;例如,将列添加到目标表时。

要执行本部分中的命令,用户的当前角色必须具有管道的 OWNERSHIP 权限。

  1. 暂停管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED=true)。

  2. 查询 SYSTEM$PIPE_STATUS 函数并且验证管道执行状态是否为 PAUSED 以及待处理文件计数是否为 0。

  3. 重建管道,更改定义中的 COPY 语句。选择以下 任一 选项:

  4. 再次暂停管道。

  5. 查看云消息传递服务的配置步骤,以确保设置仍然准确:

  6. 恢复管道(使用 ALTER PIPE ...SET PIPE_EXECUTION_PAUSED = false)。

  7. 再次查询 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');
Copy

当过时的管道暂停时,如果管道的所有权转让给其他角色,则恢复管道需要额外的 OWNERSHIP_TRANSFER_CHECK_OVERRIDE 实参。例如,恢复 mydb.myschema 数据库和架构中转让给新角色的过时 stalepipe2 管道:

SELECT SYSTEM$PIPE_FORCE_RESUME('mydb.myschema.stalepipe1','staleness_check_override, ownership_transfer_check_override');
Copy

当管道暂停时收到的事件通知达到有限保留期上限时,Snowflake 会将其从内部元数据中删除。如果管道稍后恢复,Snowpipe 会尽力处理这些较旧的通知。Snowflake 不能保证一定会处理这些通知。

例如,如果管道在暂停 15 天后恢复,Snowpipe 通常会跳过管道暂停第一天收到的任何事件通知(即现在已经超过 14 天)。如果管道在暂停 16 天后恢复,Snowpipe 通常会跳过管道暂停后第一天和第二天收到的任何事件通知。以此类推。

在 Snowsight 中管理管道

您可以在 Snowsight 中对管道执行基本管理任务。

  1. 登录 Snowsight。

  2. 在导航菜单中,选择 Data » Databases

  3. 找到包含管道的数据库和架构。

  4. 选择管道以打开详细信息。

备注

要查看有关管道的详细信息,您必须使用具有管道的 MONITOR 或 OWNERSHIP 权限,以及包含管道的数据库和架构的 USAGE 权限的角色。有关更多详细信息,请参阅 管道权限

在 Snowsight 中查看管道详细信息时,您可以查看有关管道的基本信息,如所有者角色和创建日期。

您还可以在 Snowsight 中对管道执行以下基本管理任务:

  • 要向管道添加注释,请选择 更多选项 » Edit。要编辑管道的其他属性,必须使用 CREATE PIPE SQL 命令替换管道。

  • 要弃用管道,请选择 更多选项 » Drop

  • 要将管道的所有权转让给另一个角色,请选择 更多选项 » Transfer Ownership

Details 部分包括有关以下内容的信息:

  • 管道的执行状态,例如是 RunningPaused 还是其他。

  • 管道中挂起的文件数(如果有)。

  • 管道最后一次引入的日期(如果适用)。

您还可以在 Definition 部分查看管道定义,或使用 Privileges 部分查看和管理权限。有关管理权限的详细信息,请参阅 使用 Snowsight 管理对象权限

语言: 中文