在Snowflake中重新创建管道时保留加载历史 [英] Preserving the load history when re-creating pipes in Snowflake

查看:10
本文介绍了在Snowflake中重新创建管道时保留加载历史的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

重新创建管道(使用CREATE OR REPLACE)时是否可以保留加载历史记录?

我们在Snowflake上执行了大量自动化CI/CD,有时需要重新创建管道。发生这种情况时,加载历史记录将丢失。目前,accepted workaround是手动过程,在自动化工作流中不能很好地工作。

这会使刷新管道变得危险,因为可能会加载重复的数据。在重新创建管道时还存在丢失某些通知/文件的危险-无论是否使用手动过程,无论是否自动(由于明显的原因,这是不可接受的)。

我希望有一个简单的参数来启用它。类似于:

CREATE OR REPLACE PIPE my_pipe
  PRESERVE_HISTORY = [ TRUE | FALSE ]
AS <copy_statement>

替代方案是管道与表共享加载历史的选项/参数。这样,当重新创建管道时(但表不会),加载历史将被保留。如果表被删除/截断,则表和管道的加载历史记录都将丢失。

另一个选项是能够使用ALTER命令修改管道,但目前是very limited。这样,我们甚至不需要首先重新创建管道。

编辑:尝试使用过程自动执行手动过程,但仍有可能丢失通知。

推荐答案

由于目前似乎无法保留加载历史记录,我尝试了几种替代方法:

tl;dr:Here is the solution

摄取后删除/移除/移动文件

  • 感谢@Patrick_at_Snowflake的推荐!🙏
  • 事实证明,这对于高可靠性来说有点棘手,因为没有简单的方法将Snowflake中文件的接收与其在Can存储中的删除/移除联系起来(即生命周期管理策略不知道文件是否被SnowPipe成功接收)。
  • 可以使用streamCOPY_HISTORY作为删除/移除文件的触发器来监视接收,但这并不简单(可能需要使用external function)。

刷新管道的子集

  • 感谢@GregPavlik的建议!🙏
  • 这里的想法是保存初始管道暂停/删除的时间戳。然后,可以使用此时间戳用分段文件的&q;安全&q;子集刷新新管道(以避免重新摄取相同的文件和创建重复记录)。
  • 我认为这是一个很好的想法(到目前为止我最喜欢的),但我也考虑到了监控,并想确认这是否可行,所以我继续探索了一段时间。

重播错过的通知

  • 我就此单独提出了一个问题here
  • 其想法是简单地重播未由初始管道或新管道处理的通知。
  • 但是,这似乎也不太可能。

监视每个暂存文件的负载

  • 最终到达this solution
  • 这是我使用的一个,因为它不仅允许刷新丢失的文件,而且还可以作为一个整体监视所有暂存文件的加载(无论失败的原因是什么)。
  • 作为项目的一部分,我已经在进行SnowPipe的监控工作,所以这个解决方案又增加了一层监控。👍

这篇关于在Snowflake中重新创建管道时保留加载历史的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆