我有一个供应商正在通过SQS向我提供实时数据,并在邮件正文中提供了CSV数据。大约是每分钟一条消息。机身大小可能相差很大,但我们假设它小于512MB。
我首先想到编写一个由Lambda函数,该函数由其SQS队列触发,以上传到S3,然后使用Snowpipe从外部加载,但这对我来说似乎有些过头了。将主体本地写入/ tmp然后在内部加载会不会更容易?
我倾向于内部加载,因此我正在寻找一个令人信服的参数来代替外部使用Snowpipe / load。不使用Snowpipe,我会错过什么?
答案 0 :(得分:1)
在该文档链接中引用的内部负载将文件拿到并移至S3,然后将副本运行到statement中。与要求SQS / Lamdba将消息存储在S3上并使用Snowpipe为您加载消息之间确实没有太大区别。我认为更简单,更有效的解决方案是让Lambda将数据存储在S3上(使用诸如boto3之类的东西)并让Snowpipe加载它。使用您的方法,您正在下载消息,并将其存储在/ tmp中,然后再将其推回至S3。这是数据的更多移动。
如果这些消息的大小较小,我建议您在Lambda函数中使用直接连接并使用insert语句,但这要慢得多,并且300k记录将花费太长时间。