来自 S3 最佳实践的 Snowpipe 连续摄取

Posted

技术标签:

【中文标题】来自 S3 最佳实践的 Snowpipe 连续摄取【英文标题】:Snowpipe Continuous Ingest From S3 Best Practices 【发布时间】:2020-06-24 16:10:05 【问题描述】:

我预计每天通过 S3 将 10,000 个(小,约 10KB)文件流式传输到 Snowflake,全天均匀分布。我计划使用 Snowpipe 文档中概述的 S3 事件通知来实现自动化。我还想独立于 Snowflake 将这些文件保存在 S3 上。关于如何从 S3 摄取,我有两种选择:

s3://data-lake/2020-06-02/objects
              /2020-06-03/objects
                 .
                 .
              /2020-06-24/objects

s3://snowpipe specific bucket/objects

从最佳实践/计费的角度来看,我是否应该直接从我的数据湖中提取 - 这意味着我的“创建或替换 STORAGE INTEGRATION”和“创建或替换 STAGE”语句引用了上面的***“s3://data-lake” ?或者,我应该为 Snowpipe 提取创建一个专用的 S3 存储桶,并在一两天后使该存储桶中的对象过期吗?

如果我给它一个包含成千上万个对象的***文件夹,Snowpipe 是否需要做更多的工作(因此向我收取更多费用)来摄取,而不是我给它一个小紧的、受控的、专用文件夹中只有几个对象?当通知发出时,S3 通知服务会告诉 Snowpipe 什么是新的,还是 Snowpipe 必须执行一个 LIST 并将其与已摄取的对象列表进行比较?

https://docs.snowflake.com/en/user-guide/data-load-snowpipe-auto-s3.html 的文档在这种情况下没有提供任何具体指导。

【问题讨论】:

SQS 的 Snowpipe 自动化看起来最适合您的要求:docs.snowflake.com/en/user-guide/… 我在 S3 存储桶上没有冲突通知,并且我不需要通知任何其他任务有关 S3 更改。这是两种方法之间的两个记录差异。两种方法之间的通知本身是否不同?如果是这样,则没有记录。 【参考方案1】:

每当添加新文件时,INTEGRATION 都会收到来自 AWS 的消息。如果该文件与 STAGE 的文件格式、文件路径等匹配,则管道中的 COPY INTO 语句将在该文件上运行。

集成接收与您的 STAGE 过滤器不匹配的额外消息的开销最小,而且我知道该源中的其他文件没有开销。

所以我相当肯定,只要您的 STAGE 设置正确,这两种方式都可以正常工作。

在过去的 6 个月里,我们一直在使用类似的设置,每天将约 5000 个永久文件放入单个 Azure 存储帐户,文件分为不同的目录,对应于不同的 Snowflake STAGE,在复制过程中没有明显的额外延迟。

【讨论】:

大卫 - 非常感谢您的帮助!我认为这是一个如此简单的问题,我努力寻找答案。我现在没有很多文件,担心性能会随着时间的推移而下降。我想我现在可以问,而不是以后必须收拾烂摊子。再次感谢!

以上是关于来自 S3 最佳实践的 Snowpipe 连续摄取的主要内容,如果未能解决你的问题,请参考以下文章

Snowpipe 自动摄取

如何对 Snowpipe 自动摄取故障进行故障排除?

执行 Redshift 复制命令时获取凭据的最佳实践

Opensearch - 索引的最佳实践

我们啥时候应该使用 SNOWPIPE?

从本地数据源到红移的连续数据摄取