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