Hive 如果查询不基于分区进行过滤,分区在AmazonAthena中是否有用?

Hive 如果查询不基于分区进行过滤,分区在AmazonAthena中是否有用?,hive,amazon-athena,presto,Hive,Amazon Athena,Presto,我有大量的数据,但没有我想筛选的特定列,也就是说,我的where子句可以是任何列。在这种情况下,分区是否提供了任何好处,可能有助于读取并行性?当查询最终扫描所有数据时?如果没有列all或most,查询将被过滤,那么分区只会影响性能。相反,目标是100 MB左右的文件,尽可能少,如果可能,拼花地板,并将所有文件直接放在桌子的位置下 分区会影响性能的原因是,当Athena开始执行您的查询时,它会列出所有文件,其方式就像S3是一个文件系统一样。它首先列出表的位置,如果它找到任何类似于目录的内容,它将单

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

如果没有列all或most,查询将被过滤,那么分区只会影响性能。相反,目标是100 MB左右的文件,尽可能少,如果可能,拼花地板,并将所有文件直接放在桌子的位置下

分区会影响性能的原因是,当Athena开始执行您的查询时,它会列出所有文件,其方式就像S3是一个文件系统一样。它首先列出表的位置,如果它找到任何类似于目录的内容,它将单独列出,以此类推,递归地列出。如果你有一个很深的目录结构,这可能会花费很多时间。您希望帮助Athena将所有文件放在一个平面结构中,但也不超过1000个,因为这是S3列表操作的页面大小。对于1000多个文件,您希望有目录,以便雅典娜可以并行化列表,但仍然尽可能少,因为它并行执行的列表数量是有限制的


您希望将文件大小保持在100MB左右,因为这是一个很好的大小,可以权衡处理文件所需的时间和从S3获取文件的开销

当雅典娜被关注时,拼花地板比兽人有好处吗?长期以来,普雷斯托的ORC实现性能更好,但雅典娜在这一领域可能有一些变化。除非亚马逊对普雷斯托的雅典娜做了大量的改变,否则这是不正确的。Presto延迟加载分区细节和文件列表,直到查询开始执行,然后以并行流方式执行。我们专门以这种方式设计Presto,以避免这种启动延迟。分区有助于减少延迟,因为它可以强制进行更多的拆分,这意味着扫描中的并行性更强。同样,这完全取决于亚马逊在构建雅典娜时对Presto所做的更改。@PiotrFindeisen我没有做任何严格的基准测试,但对于我们的工作负载,我们发现拼花地板的性能更好,加上拼花地板更好地支持模式演变,例如,添加一个列对于拼花地板来说是可以的,而对于兽人来说则不可以。我们看到的一件特别的事情是,雅典娜似乎总是阅读整个ORC文件,即使你只选择了一列,但普雷斯托却不是这样。@DainSundstrom你显然比我更了解细节,我并不是说我上面的描述是确定的。从一个非常高的层次上来说,我认为你的描述和我的描述没有那么大的不同。根据我对Athena S3的经验,运行查询所需的时间主要由S3操作控制。Presto中有一个错误,导致S3的大量过度读取。它在303版左右得到了修复。下面的两个测试显示了代码中的一些其他差异。IIRC普雷斯托的拼花阅读者会积极阅读字典来跳绳。在某些情况下,这可能是一个巨大的胜利,而在其他情况下,如果专栏最终不被需要,这可能是一个巨大的损失。由于缺少GROUPBY子句,我不确定您在上一节中做了什么。需要注意的一件重要事情是Presto拼花地板阅读器基于ORC阅读器代码,因此它们不应该有显著的不同。