【问题标题】:Continuous Load via Snowpipe/External vs. Internal通过雪管/外部与内部的连续负载
【发布时间】:2019-10-24 15:59:17
【问题描述】:

我有一个供应商通过 SQS 向我提供实时数据,消息正文中包含 CSV 数据。大约是一条消息/分钟。 body 的大小可以变化很大,但我们假设它小于 512MB。

我首先考虑编写一个由他们的 SQS 队列触发的 lambda 函数以上传到 S3,然后使用 Snowpipe 从外部加载,但这对我来说似乎有点过头了。将正文本地写入 /tmp 然后在内部加载不是更容易吗?

我倾向于在内部加载,因此我正在寻找一个令人信服的论点来使用 Snowpipe / 在外部加载。如果不使用 Snowpipe,我会错过什么?

【问题讨论】:

  • 本地加载是什么意思?
  • 另外,您的意思是 512MB 还是 512KB? 512MB 相当大,您每天要加载近 1TB 的数据。
  • @MikeWalton - 我编辑了,我的错。我的意思是在内部加载:docs.snowflake.net/manuals/user-guide/… 我每天不会加载那么多数据,但根据一天中的时间,正文可能包含 1 行或 300,000 行。 512MB 是 lambda 函数的最大磁盘空间量。

标签: snowflake-cloud-data-platform


【解决方案1】:

该文档链接中引用的内部负载获取文件,将其移动到 S3,然后运行复制到语句。这与要求 SQS/Lamdba 将消息存储在 S3 上并使用 Snowpipe 为您加载之间确实没有太大区别。我认为更简单、更有效的解决方案是让 Lambda 将数据存储在 S3 上(使用类似 boto3 的东西)并让 Snowpipe 加载它。使用您的方法,您正在下载消息,将其存储在 /tmp 中,然后再将其推送回 S3。这是数据的更多移动。

如果这些消息的大小较小,我会建议您在 Lambda 函数中使用直接连接并使用插入语句,但这会慢得多,而且 30 万条记录会花费太长时间。

【讨论】:

  • 啊,太好了,谢谢!虽然文档中没有明确说明,但内部加载也使用 S3 是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多