如果查询不基于分区进行过滤,那么分区在AmazonAthena中有帮助吗?

daupos2t  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(243)

我有大量的数据,但没有一个特定的列是我想过滤的基础(也就是说,我的'where子句'可以是任何列)。在这种情况下,当查询最终扫描所有数据时,分区是否提供了任何好处(可能有助于读取并行性?)?

s71maibg

s71maibg1#

如果没有列all或most,则查询将进行过滤,那么分区只会影响性能。取而代之的是100MB左右的文件,尽可能少,如果可能的话,Parquet,把所有文件直接放在table的下面 LOCATION .
分区会影响性能的原因是,当athena开始执行查询时,它会列出所有文件,其方式就像s3是一个文件系统一样。它首先列出表的 LOCATION ,如果它发现任何类似于目录的内容,它将分别列出它,以此类推,递归。如果你有一个很深的目录结构,这可能会花费很多时间。你想帮助雅典娜,让你所有的文件都在一个平面结构中,但也不到1000个,因为这是s3列表操作的页面大小。对于超过1000个文件,您希望有目录,以便雅典娜可以并行化列表(但仍然尽可能少,因为它并行执行的列表数量是有限制的)。
您希望将文件大小保持在100MB左右,因为这是一个很好的大小,可以权衡处理文件所需的时间和从s3获取文件所需的开销。确切的建议是128MB。

相关问题