问题描述
我有很多通过 AWS glue 读取到 Athena 的小型镶木地板文件。我知道小的镶木地板文件(每个 35k 左右,由于日志输出它们的方式)并不理想,但是一旦它们被读入数据目录,它就不再重要了吗?
换句话说,在加载到 Athena 之前,我是否应该先将所有小的 Parquet 文件合并成更理想大小的文件?
解决方法
即使在数据目录中注册了小文件后,您仍继续为小文件付出代价。当您查询基于许多小文件的表时,Athena 必须更加努力地收集和流式传输它需要扫描的所有必要数据,以便回答您的查询。尽管您最终扫描的数据量可能相当,但在更块的文件上进行扫描会减少查询引擎的开销(presto)。
参考:https://docs.aws.amazon.com/athena/latest/ug/performance-tuning.html - 注意它是如何提到 S3 节流的,当你有很多小文件时,它也可能会咬你
此外,对于镶木地板文件,文件可能具有索引,查询引擎可以使用该索引跳过扫描文件,或跳转到特定文件中的正确位置。我相信这样的索引在很多小文件上的有效性会降低。
通过我建议这样做的 CTAS 语句将小文件转换为更大的文件很容易。根据我的经验,我可以偶然看到对我的批处理文件执行更快的查询。