Snowpipe:导入可以修改而不会导致重新导入的历史数据

时间:2019-10-23 18:30:33

标签: snowflake-data-warehouse

首先,我不确定Snowpipe的现有功能是否可行。

我有一个带有多年数据的S3存储桶,偶尔其中一些文件会更新(内容会更改,但文件名保持不变)。我希望使用Snowpipe将这些文件导入Snowflake,因为“我们不会重新导入已修改的文件”方面吸引了我。

但是,我发现ALTER PIPE ... REFRESH仅可用于导入不早于7天前上演的文件,并且Snowflake的文档中用于导入历史数据的唯一其他建议是使用COPY INTO ...但是,如果我使用它们,那么如果修改了那些旧文件,则它们会通过Snowflake导入,因为阻止COPY INTO ...重新导入S3文件的元数据和Snowpipe的元数据是不同的,因此我可以将文件导入两次。

除了“修改S3中的所有所有个文件,使它们具有最新的时间戳”之外,还有什么方法可以让我在此使用Snowpipe?

1 个答案:

答案 0 :(得分:0)

如果您不反对使用脚本解决方案,则一个解决方案是编写脚本以从AWS S3中提取范围内对象名称集并将其提供给Snowpipes REST API。用于此的代码与在通过S3事件通知触发时使用AWS Lambda调用Snowpipe REST API时所需的代码非常相似。您既可以使用AWS开发工具包从S3获取对象集,也可以仅使用Snowflake的LIST STAGE语句提取它们。

我已经多次使用此方法从AWS S3位置回填历史数据,在该位置已写入数据之后,我们在该位置启用了Snowpipe提取。即使在您不必担心文件已在适当位置更新的情况下,这也比直接退回到直接COPY INTO还是一个优势,因为您不必担心在两次更新之间是否存在任何重叠。首先启用了PIPE,由于PIPE加载历史记录将为您处理,因此您将文件集推送到Snowpipe REST API。