Sql 我应该在AWS S3中的相同前缀下存储不同类型的用户活动数据,还是为每类事件使用不同的前缀?

Sql 我应该在AWS S3中的相同前缀下存储不同类型的用户活动数据,还是为每类事件使用不同的前缀?,sql,database,amazon-s3,amazon-athena,amazon-kinesis-firehose,Sql,Database,Amazon S3,Amazon Athena,Amazon Kinesis Firehose,我应该在AWS S3中的同一前缀/路径下存储不同类型的用户活动数据,如登录、活动、付款,还是为每类事件使用不同的前缀 例如, 登录事件/ paymentEvents/ 交互事件/ 我正在使用Firehose来流式处理事件并保存在s3中。之后,我会用雅典娜来提问。雅典娜可以使用任何一种情况(一个前缀或多个前缀),但哪种方式更好 将所有数据保存在一个前缀下将减少查询时间,因为在Athena查询期间我不需要表联接? 以不同前缀保存数据似乎可以更系统地组织数据?这取决于将运行的查询。如果您经常在wher

我应该在AWS S3中的同一前缀/路径下存储不同类型的用户活动数据,如登录、活动、付款,还是为每类事件使用不同的前缀

例如,
登录事件/
paymentEvents/
交互事件/

我正在使用Firehose来流式处理事件并保存在s3中。之后,我会用雅典娜来提问。雅典娜可以使用任何一种情况(一个前缀或多个前缀),但哪种方式更好

将所有数据保存在一个前缀下将减少查询时间,因为在Athena查询期间我不需要表联接?

以不同前缀保存数据似乎可以更系统地组织数据?

这取决于将运行的查询。如果您经常在
where
子句中包含用户活动,那么如果您在单独的位置写入事件并将其用作分区,那么您将具有更好的性能和更低的查询成本。另一方面,拥有大量分区会降低查询速度。

我认为我的大多数查询都涉及多个分区。例如,已经两周没有登录但以前使用过某些功能的用户。另一个例子是使用了某个功能并访问了付款页面但未能签出的用户。如果我的查询跨越多个分区,最好不要对它们进行分区,对吗?假设在100个查询中,您将发出多少个查询将涉及多个分区,即所有分区?如果是说也许30%,那么你是好的,否则你不是。另外,您的案例中的平均文件大小是多少?