AWS Athena 的分区数据导致 S3 中出现大量小文件

pan*_*anc 6 database filesystems amazon-s3 partition amazon-athena

我有一个大型数据集(> 40G),我想将其存储在 S3 中,然后使用 Athena 进行查询。

正如这篇博文所建议的,我可以将我的数据存储在以下分层目录结构中,以便MSCK REPAIR在从我的数据集创建表时自动添加分区。

s3://yourBucket/pathToTable/<PARTITION_COLUMN_NAME>=<VALUE>/<PARTITION_COLUMN_NAME>=<VALUE>/
Run Code Online (Sandbox Code Playgroud)

但是,这需要我将数据集拆分为许多较小的数据文件,并且每个文件都将根据分区键存储在嵌套文件夹下。

虽然使用分区可以减少 Athena 扫描的数据量,从而加快查询速度,但管理大量小文件会导致 S3 的性能问题吗?我需要考虑权衡吗?

Gon*_*era 4

是的,小文件和大量分区可能会导致效率显着降低。

这里对文件大小和分区数量有很好的解释和建议,分区数量应大于 128 MB 以补偿开销。

此外,我在一个非常小的数据集(1 GB)中进行了一些实验,按分钟、小时和天对数据进行分区。当分区变小时,扫描的数据会减少,但查询所花费的时间会增加很多(在某些实验中慢了 40 倍)。