如何使Athena / Presto识别实木复合地板索引

时间:2018-09-24 02:37:40

标签: python pandas parquet amazon-athena presto

我有一个25k的“行”实木复合地板文件(总计469.5kb),其中实木复合地板中的每个项目都有一个唯一的整数id。知道这一点后,我已经在该列上添加了索引,但是使用Athena(AWS服务)/ Presto(基础引擎)时,对列进行索引并不会真正影响性能。我正在尝试一个简单的选择,从那里我想通过它的ID将某行拉出-

SELECT *
FROM widgets w
WHERE w.id = 1

id列已建立索引,因此一旦Presto找到此匹配项,就不应再进行任何扫描。该列也是有序的,因此它应该能够执行二进制搜索来解析位置,而不是哑扫描。

我可以判断索引是否被正确使用,因为Athena返回了操作中扫描的字节数。使用索引和不使用索引,Athena都会将文件本身的字节大小作为扫描大小返回,这意味着它将扫描整个文件。可以肯定的是,排序以使id是第一行也没有影响。

当前的Athena / Presto版本无法做到这一点吗?我正在使用python,pandas和pyarrow。

1 个答案:

答案 0 :(得分:2)

您没有指定创建索引的方式,我想您是在谈论Hive索引。根据{{​​3}}和1,Presto不支持Hive索引。根据{{​​3}},Hive本身已在Hive 3中放弃了对它们的支持。

这回答了您有关为何索引的存在不影响Presto执行查询方式的问题。那么还有什么其他方法可以限制必须处理的数据量呢?

  • 镶木地板元数据包括每一列的每个行组的最小值和最大值。如果表中有多个行组,则只会读取可能匹配的行组。
  • 即将推出的2功能将向Parquet文件本身添加页面级索引。
  • 如果查询特定列,则仅读取那些列。
  • 如果您的表已分区,则过滤“ partition by”列的内容只会读取该分区。

但是,请注意,所有这些措施仅对数据大小大于500KB的数量级有意义。实际上,对于这样的小桌子,镶木地板本身就是一个过大的杀伤力。行组的默认大小为128MB,预计会有很多行组。