多个设备和时间戳的最佳分区方法

Best partitioning method for multiple devices and timestamps

在我的组织中,我们有多个设备每秒发送一次数据。数据在 AWS S3 中像这样处理和分区 /year=YYYY/month=MM/day=DD/file.csv.

我们使用 AWS Athena 来 运行 像这样的查询:SELECT col1, col2, coln FROM data WHERE year = 'YYYY' AND month = 'MM' and DAY = 'dd' AND device_id = 123 在一天中的某个时间从一台设备检索数据。有时我们还需要从多个设备(device_id IN (...))和不同时间获取数据。请注意,数据集中存在 device_idts 列,并且只有 ts 用于生成分区。

这是我的问题:

从长远来看,这种分区方法是否有效?目前,我们只有大约 150 台活动设备,但我们计划扩展到 1000 台或更多。考虑到查询模式是相同的(在特定时间获取某些设备的数据),按 device_id 然后按日期 (/devive_id/year=YYYY/month=MM/day=DD/file.csv) 分区更好吗?

分区非常适合您提供的查询——它只需要在一个子目录中查找当天的数据。

但是,如果您一直在 查询特定设备(未指定 month/day),则效率不高。

您需要决定什么更常见:

  • 如果总是查询特定的设备,则按Device分区,然后按Date
  • 如果一个特定的day/month总是会被查询,那么你现在的方法是可以的(可能在Day之后有一个额外的设备分区)