通过 Snowpipe/External 与内部连续加载
Continuous Load via Snowpipe/External vs. Internal
我有一家供应商通过 SQS 向我提供消息正文中包含 CSV 数据的实时数据。大约是一个 message/minute。正文的大小可能相差很大,但我们假设它小于 512MB。
我首先考虑编写一个由他们的 SQS 队列触发的 lambda 函数以上传到 S3,然后使用 Snowpipe 从外部加载,但这对我来说似乎有点过分了。将正文本地写入 /tmp 然后在内部加载不是更容易吗?
我倾向于在内部加载,因此我正在寻找一个令人信服的论据来改为使用 Snowpipe/从外部加载。如果不使用 Snowpipe,我会错过什么?
该文档 link 中引用的内部加载获取文件,将其移动到 S3,然后运行复制到语句。这与要求 SQS/Lamdba 将消息存储在 S3 上并使用 Snowpipe 为您加载消息之间确实没有太大区别。我认为更简单、更有效的解决方案是要求 Lambda 将数据存储在 S3 上(使用类似 boto3 的东西)并让 Snowpipe 加载它。使用您的方法,您正在下载消息,将其存储在 /tmp 中,然后将其推送回 S3。这是更多的数据移动。
如果这些消息的大小较小,我会建议您在 Lambda 函数中使用直接连接并使用插入语句,但这要慢得多,而且 300k 条记录会花费太长时间。
我有一家供应商通过 SQS 向我提供消息正文中包含 CSV 数据的实时数据。大约是一个 message/minute。正文的大小可能相差很大,但我们假设它小于 512MB。
我首先考虑编写一个由他们的 SQS 队列触发的 lambda 函数以上传到 S3,然后使用 Snowpipe 从外部加载,但这对我来说似乎有点过分了。将正文本地写入 /tmp 然后在内部加载不是更容易吗?
我倾向于在内部加载,因此我正在寻找一个令人信服的论据来改为使用 Snowpipe/从外部加载。如果不使用 Snowpipe,我会错过什么?
该文档 link 中引用的内部加载获取文件,将其移动到 S3,然后运行复制到语句。这与要求 SQS/Lamdba 将消息存储在 S3 上并使用 Snowpipe 为您加载消息之间确实没有太大区别。我认为更简单、更有效的解决方案是要求 Lambda 将数据存储在 S3 上(使用类似 boto3 的东西)并让 Snowpipe 加载它。使用您的方法,您正在下载消息,将其存储在 /tmp 中,然后将其推送回 S3。这是更多的数据移动。
如果这些消息的大小较小,我会建议您在 Lambda 函数中使用直接连接并使用插入语句,但这要慢得多,而且 300k 条记录会花费太长时间。