将从firehose写入的事件重复数据删除到s3的最佳和最省钱的方法是什么?
我的场景:我有多个来源,它们将事件作为JSON写入kinesis firehose流。流将事件写入s3存储桶。比起事件应该用athena进行分析。
所以,因为firehose不能保证不会有重复,所以我总会以某种方式对数据进行重复数据删除。我还必须以某种方式将它们分配给雅典娜。
我现在提出的方法是:
是否有更好,更优雅,更省钱的方式?
答案 0 :(得分:1)
首先,我认为您应该考虑清除重复项的价值,以及Firehose实际提供重复项的频率。我认为由于Firehose本身而你最终会出现重复的情况非常罕见,但是如果你的制作人也可能最终向你的Firehose发送重复内容,你当然还是可能想要处理它。
您应该使用的方法取决于您的使用案例,如果您提供了更多详细信息,可能更容易为您提供更明确的答案。
如果您没有大量数据,您可以在读取方付费,而不是处理例如重写数据。 SELECT DISTINCT * FROM table
应删除重复的行。如果您的查询包含聚合,则执行SELECT column, COUNT(*) FROM (SELECT DISTINCT * FROM table)
- 或SELECT foo, MIN(bar), MIN(baz) GROUP BY 1
的某些变体(如果您的列应该是唯一的)。由于Athena对扫描数据收费而不计算资源,因此不会花费额外费用,但当然会慢一些。
如果您有大量数据,我不建议使用该解决方案,在这种情况下,我认为您需要在管道中添加额外的步骤,因为您也不应该将Firehose生成的数据查询为-is。您需要创建一个分区表,并将每小时,每天或每月添加为自己的分区(具体取决于我们正在谈论的数据)。你可以在不移动数据的情况下做到这一点,但是既然你必须有一个额外的步骤,你也可以在那里坚持重复数据删除 - 如果你确实使用Glue ETL,那么你的开销可能比EMR要少。