如何提高对来自athena的s3数据的查询性能

xu3bshqb  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(273)

我将存储在s3中的数据以这样的配置单元格式进行分区。

bucket/year=2017/month=3/date=1/filename.json
bucket/year=2017/month=3/date=2/filename1.json
bucket/year=2017/month=3/date=3/filename2.json

每个分区有大约1000000条记录。我已经为此在雅典娜创建了表和分区。
正在运行来自雅典娜的查询

select count(*) from mts_data_1 where year='2017' and month='3' and date='1'

此查询扫描1000000条记录需要1800秒。
所以我的问题是如何提高查询性能?

1wnzp6jl

1wnzp6jl1#

我认为问题是雅典娜必须从s3读取这么多文件。250MB不是那么多数据,但是1000000个文件是很多文件。如果减少文件的数量,athena查询性能将显著提高,压缩聚合文件将有更多帮助。一天的分区需要多少个文件?即使只有一分钟的分辨率,您也需要不到1500个文件。如果当前的查询时间是~30分钟,那么您可以轻松地从更少的时间开始。
有许多用于聚合和压缩记录的选项:
aws的kinesis消防水龙带是一个相当简单的方法来开始恰恰是这种问题。
像apachenifi这样的流数据处理工具将提供更丰富的转换、聚合和压缩选项集。我写了一篇关于使用apachenifi为athena将数据流传输到s3的博客文章,讨论了这些相同的问题。

相关问题