AWS Athena-查询从Glue搜寻器生成的大型外部表吗?

时间:2019-09-25 18:54:32

标签: amazon-athena aws-glue

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

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

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

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

如何将这个大型数据集转换为查询友好的结构?

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

现在,默认情况下,爬网程序仅按日期和实例对外部表进行分区,我的grok模式将格式化的日志分解为更多的列,如果可能的话,我希望将它们重新分区,我相信使我的查询更易于运行。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

以下是一些优化数据的技巧,这些数据将大大提高雅典娜的表现:

  • 使用orc / parquet等列格式进行压缩以存储数据。
  • 对数据进行分区。您可以根据年份->月->日对日志进行分区。
  • 在每个分区上创建更多和更少的文件,而不是创建更多和更少的文件。

以下AWS文章提供了有关在Amazon Athena中进行性能调优的详细信息

Top 10 performance tuning tips for amazon-athena