Amazon web services 使用Athena中的单个表模式查询s3中预先创建的子文件夹
我正在探索AWS Athena以查询s3中的文件。我们有一个单独的服务,它以以下结构将数据写入s3:Amazon web services 使用Athena中的单个表模式查询s3中预先创建的子文件夹,amazon-web-services,amazon-s3,amazon-athena,Amazon Web Services,Amazon S3,Amazon Athena,我正在探索AWS Athena以查询s3中的文件。我们有一个单独的服务,它以以下结构将数据写入s3: 资料 /日志1 /日志2 /日志3 所有文件都具有相同的架构。 以下是文件的架构: id(随机字符串id) 时间戳 价值观 然而,我们需要能够查询单个文件夹中的数据——log1、log2以及一起查询所有数据。 一个选项是为这些对象创建单独的表。但是,子文件夹log1、log2等对应于一个设备,它们可以是100或数千。这些名称是动态的,将由用户输入以供查询。此外,我们还需要其他查询功
- 资料
- /日志1
- /日志2
- /日志3
- id(随机字符串id)
- 时间戳
- 价值观
提前感谢。分区将影响每个查询扫描的数据量,从而提高性能并降低成本-下面是一个很好的解释: 您可以按任意键对数据进行分区。通常的做法是基于时间对数据进行分区,这通常会导致多级分区方案。例如,每小时都有数据进来的客户可能会决定按年、月、日期和小时进行分区。另一个客户的数据来自许多不同的来源,但每天加载一次,他可以按数据源标识符和日期进行分区 如果查询已分区的表并在WHERE子句中指定分区,则Athena只扫描来自该分区的数据 关于中的分区,还有一些很好的建议:
在决定要分区的列时,请考虑以下内容:
- 用作筛选器的列是分区的最佳候选列
- 分区是有代价的。随着表中分区数量的增加,检索和处理分区元数据的开销越高,文件越小。划分得太细可能会抵消最初的好处
- 如果您的数据严重偏向一个分区值,并且大多数查询都使用该值,那么开销可能会抵消最初的好处
- 大多数查询都包含一个时间范围?然后你应该考虑日期作为分区
- 大多数查询都会筛选特定设备(或少量ID)?那么,使用设备id作为分区或者至少尝试将这些分区绑定起来可能是一个更好的选择。还取决于每个设备的行数,以使其不太细粒度
- 您还可以按日期和设备id进行分区
- 因为您已经有了一个按设备划分的分区,所以我会在开始时使用投影来查询这些数据