我在亚马逊网络服务s3上有一大堆历史日志文件,总共有几十亿行,
我使用了一个带有grok反序列化程序的胶水爬虫在雅典娜上生成了一个外部表,但是查询它被证明是不可行的。
我的查询超时了,我正在尝试寻找另一种方法来处理这些数据。
据我所知,通过Athena,外部表不是实际的数据库表,而是文件中数据的表示,并且查询是在文件本身上运行的,而不是数据库表。
如何将这个大型数据集转换为查询友好的结构?
编辑1:为了澄清,我对重塑这里的日志文件不感兴趣,那些已经处理好了。相反,我想要一种方法来处理我在s3上现有的文件库。我需要查询这些旧的日志,在它当前的状态下这是不可能的。我正在寻找一种方法,要么将这些文件转换为最佳格式,要么利用当前的外部表进行查询。
现在,在爬虫的默认情况下,外部表只按天和实例进行分区,我的grok模式将格式化的日志分解为更多的列,如果可能的话,我希望在这些列上重新分区,我相信这将使我的查询更容易运行。
发布于 2019-09-26 11:42:25
你的where condition
应该在分区上(至少有一个条件)。通过发送支持票证,您可能会增加雅典娜超时。或者,您可以使用Redshift Spectrum
但是你可能会认真地去优化查询。雅典娜查询超时时间为30分钟。这意味着您的查询在超时之前运行了30分钟。
发布于 2019-09-26 14:09:54
默认情况下,雅典娜会在30分钟后超时。此超时期限可以延长,但可以向AWS团队提出支持工单。但是,您应该首先优化您的数据和查询,因为30分钟是执行大多数查询的好时间。
以下是一些优化数据的技巧,它们将大大提升雅典娜的性能:
parquet使用像orc/这样的列式格式与压缩来存储你的data.
以下AWS文章提供了有关amazon athena中性能调整的详细信息
https://stackoverflow.com/questions/58104891
复制相似问题