我有一个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。
答案 0 :(得分:2)
您没有指定创建索引的方式,我想您是在谈论Hive索引。根据{{3}}和1,Presto不支持Hive索引。根据{{3}},Hive本身已在Hive 3中放弃了对它们的支持。
这回答了您有关为何索引的存在不影响Presto执行查询方式的问题。那么还有什么其他方法可以限制必须处理的数据量呢?
但是,请注意,所有这些措施仅对数据大小大于500KB的数量级有意义。实际上,对于这样的小桌子,镶木地板本身就是一个过大的杀伤力。行组的默认大小为128MB,预计会有很多行组。