1

我在 aws s3 上有大量历史日志文件,总计数十亿行,

我使用带有 grok 反序列化器的胶水爬虫在 Athena 上生成外部表,但事实证明查询它是不可行的。

我的查询已超时,我正在尝试寻找另一种处理这些数据的方法。

据我了解,通过 Athena,外部表不是实际的数据库表,而是文件中数据的表示形式,并且查询是在文件本身而不是数据库表上运行的。

我怎样才能把这个大数据集变成一个查询友好的结构?

编辑1:为澄清起见,我对重塑此处的日志文件不感兴趣,这些文件已得到处理。相反,我想要一种方法来处理我在 s3 上拥有的当前文件库。我需要查询这些旧日志,在当前状态下这是不可能的。我正在寻找一种将这些文件转换为最佳格式或利用当前外部表进行查询的方法。

现在,默认情况下,外部表仅按日期和实例进行分区,我的 grok 模式将格式化的日志分解为更多列,如果可能的话,我希望在这些列上重新分区,我相信这会让我的查询跑得更容易。

4

2 回答 2

0

默认情况下,雅典娜会在 30 分钟后超时。可以增加此超时期限,但请向 AWS 团队提出支持请求。但是,您应该首先优化您的数据和查询,因为 30 分钟是执行大多数查询的好时间。

以下是一些优化数据的技巧,这些技巧将大大提高 athena 的性能:

  • 使用带有压缩的 orc/parquet 等列格式来存储数据。
  • 对数据进行分区。在您的情况下,您可以根据年 -> 月 -> 日对日志进行分区。
  • 每个分区创建越来越多的文件,而不是创建越来越多的文件。

以下 AWS 文章提供了有关在 amazon athena 中进行性能调整的详细信息

amazon-athena 的 10 大性能调优技巧

于 2019-09-26T06:09:54.483 回答
0

where condition应该在分区上(至少一个条件)。通过发送支持票,您可以增加 athena 超时。或者,您可以使用Redshift Spectrum

但是您可能会认真考虑优化查询。Athena 查询超时为 30 分钟。这意味着您的查询在超时前运行了 30 分钟。

于 2019-09-26T03:42:24.837 回答