Amazon web services 针对多个设备和时间戳的最佳分区方法
在我的组织中,我们有多台设备每秒发送数据。数据在AWS S3中进行处理和分区,如下所示Amazon web services 针对多个设备和时间戳的最佳分区方法,amazon-web-services,amazon-s3,partitioning,amazon-athena,Amazon Web Services,Amazon S3,Partitioning,Amazon Athena,在我的组织中,我们有多台设备每秒发送数据。数据在AWS S3中进行处理和分区,如下所示/year=YYYY/month=MM/day=DD/file.csv 使用AWS Athena,我们可以运行如下查询:从数据中选择col1、col2、coln,其中year='YYYY',month='MM',DAY='dd',device_id=123从一台设备检索一天中某段时间的数据。有时我们还需要在不同的时间从多个设备(device\u id IN(…))获取数据。请注意,数据集中存在列device\u
/year=YYYY/month=MM/day=DD/file.csv
使用AWS Athena,我们可以运行如下查询:从数据中选择col1、col2、coln,其中year='YYYY',month='MM',DAY='dd',device_id=123
从一台设备检索一天中某段时间的数据。有时我们还需要在不同的时间从多个设备(device\u id IN(…)
)获取数据。请注意,数据集中存在列device\u id
和ts
,只有ts
用于生成分区
我的问题是:
从长远来看,这种分区方法有效吗?目前,我们只有大约150个活动设备,但我们计划扩展到1000个或更多。考虑到查询模式是相同的(在特定时间获取某些设备的数据),是否最好按设备id然后按日期进行分区(
/devive\u id/year=YYYY/month=MM/day=DD/file.csv
)?分区对于您提供的查询非常好——它只需要在一个子目录中查找一天的数据
但是,如果您一直在查询特定的设备(没有指定月/日),那么它就没有效率
您需要决定什么更常见:
- 如果总是查询特定设备,则按设备划分,然后按日期
- 如果总是查询特定的日期/月份,那么您当前的方法就可以了(可能在一天之后再添加一个设备分区)
- 如果总是查询特定设备,则按设备划分,然后按日期
- 如果总是查询特定的日期/月份,那么您当前的方法就可以了(可能在一天之后再添加一个设备分区)