Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Athena在太多S3文件上的性能_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Athena_Amazon Dynamodb Streams - Fatal编程技术网

Amazon web services Athena在太多S3文件上的性能

Amazon web services Athena在太多S3文件上的性能,amazon-web-services,amazon-s3,aws-lambda,amazon-athena,amazon-dynamodb-streams,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Athena,Amazon Dynamodb Streams,我计划将数据存储到S3中,之后将在S3上执行SQL查询。S3文件基本上包含json记录。我将通过触发AWS Lambda执行的DynamoDB流获取这些记录,因此很难在该层处理复制,因为AWS Lambda保证至少一次交付。 为了避免在查询中处理重复记录,我希望确保插入的记录是唯一的 据我所知,实现唯一性的唯一方法是拥有唯一的S3密钥。如果我选择这种方法,我将停止每天创建数百万个S3文件。每个文件由单个json记录组成 在执行Athena查询时,是否需要创建这么多文件? 有其他方法吗?我认为您最

我计划将数据存储到S3中,之后将在S3上执行SQL查询。S3文件基本上包含json记录。我将通过触发AWS Lambda执行的DynamoDB流获取这些记录,因此很难在该层处理复制,因为AWS Lambda保证至少一次交付。 为了避免在查询中处理重复记录,我希望确保插入的记录是唯一的

据我所知,实现唯一性的唯一方法是拥有唯一的S3密钥。如果我选择这种方法,我将停止每天创建数百万个S3文件。每个文件由单个json记录组成

在执行Athena查询时,是否需要创建这么多文件?
有其他方法吗?

我认为您最好在雅典娜本身处理重复数据消除。对雅典娜来说,剔除一些复制品将是一件容易的工作。设置一个视图,该视图按唯一属性进行分组,并使用或(如果您需要订购)为非唯一属性选择最新的属性,并针对该视图运行查询,以便不必担心在每个查询中重复数据消除的问题

您还可以使用运行每日或每周重复数据消除作业,具体取决于数据的新鲜程度。您还可以将预重复数据消除历史数据与动态重复数据消除数据进行复杂的混合


运行查询时,Athena会列出S3上的对象,这不是一个可并行化的操作,除了分区表,在分区表中它可以并行化到分区的粒度,S3的列表限制为1000页大小。您真的不想让Athena查询包含1000多个文件的表或分区。

通过Kinesis Firehose写入S3,然后通过Athena进行查询。消防水带将把你的记录分组成相对较少的文件,这样通过雅典娜查询它们就会很有效。实际上,它甚至会将它们组织到一个文件夹结构中,该文件夹结构通过写入时间戳进行了很好的分区。

每个流记录都分配了一个序列号。你能用这个,保存在第二个DynamoDB表中,来实现一个检查点吗。。。我想在这种情况下,我必须引入某种交易行为。e、 g.如果写入s3成功,则写入另一个dynamodb表。如果写入dynamoDb表失败,是否删除S3文件?似乎有点不必要的开销。我同意幂等式解决方案更可取,但我没有关于雅典娜查询性能的数据可供分享,因为更小的文件更多,而更大的文件更少。当然,这听起来像是可以很容易地被测试的东西。是的,它确实影响了查询的性能。例如,如果你有一个100 MB文件,有100万个记录,那么自由神弥涅尔瓦必须列出它,打开,读取和关闭它。考虑一个场景,你有100万个文件,每个文件都有记录,然后自由神弥涅尔瓦必须列出所有的文件,打开,读取,接近百万次,这会极大地影响查询性能。因此,理想的文件大小应该是128 MB左右。如果我有大量数百万条记录,使用MAX不会显著降低查询速度吗?不,不会显著降低。这将比拥有数百万个文件快很多数量级。当然,完全不必进行重复数据消除会更快,但我认为雅典娜的延迟并不低,所以我不认为你会注意到其中的区别。如果它开始成为一个问题,您应该定期运行重复数据消除作业,如我的回答中所示。