按不是“文件夹”的 S3 对象键前缀对 Athena 进行分区

Erb*_* Mo 5 amazon-s3 amazon-web-services amazon-athena

我有一个非常扁平的 S3 桶。该存储桶中的 S3 对象键如下所示:

  • s3-访问日志/2017-11-03-00-22-36-05A50CD782AE8AE0
  • s3-访问日志/2017-11-03-00-24-21-F14ED1FF6C315431

如您所见,我只有一个 S3 文件夹“s3-access-logs”,其中包含该文件夹下的所有对象。事实上,此 S3 存储桶包含不同 S3 存储桶的 S3 访问日志。

我想对这些 S3 访问日志进行一些分析(使用 Athena)。雅典娜允许我:

  1. 使用 S3 存储桶作为位置创建 Athena 表,或者
  2. 创建一个启用分区的 Athena 表,我可以使用 s3 前缀添加分区。

我只关心特定日期的访问日志,因此我想避免扫描整个 S3 存储桶(我尝试过,但查询在超过 15 分钟后从未完成)。我希望 Athena 仅扫描该日期的文件。我注意到 Athena 可以使用“s3-access-logs”作为 S3 位置/前缀,但 Athena 似乎不支持使用“s3-access-logs/2017-11-03”作为 S3 位置/前缀。

Athena 是否只支持“S3 文件夹”作为前缀或位置(即前缀字符串必须以斜杠结尾),而不支持 s3 对象键前缀中的任何随机字符串?如果是这样,这个问题有什么解决方法吗?

谢谢!

Aft*_*ari -2

看起来您的日志文件名中有日期时间戳,您可以使用“$path”仅扫描 Athena 中选定的文件。

从您的表名中选择 *,其中“$path”如“2017-11-03%”