首页 > 解决方案 > 多设备和时间戳的最佳分区方法

问题描述

在我的组织中,我们有多个设备每秒发送数据。像这样在 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_id和仅用于生成分区。tsts

这是我的问题:

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

标签: amazon-web-servicesamazon-s3partitioningamazon-athena

解决方案


分区对于您提供的查询非常有用——它只需要在一个子目录中查找那一天的数据。

但是,如果您一直在查询特定设备(未指定月/日),那么它的效率将不高。

您将需要决定什么会更常见:

  • 如果始终查询特定设备,则按设备分区,然后按日期
  • 如果始终查询特定的日期/月份,那么您当前的方法很好(可能在 Day 之后使用额外的设备分区)

推荐阅读