你如何让雅典娜/普雷斯托识别镶木地板指数



我有一个 25k 的"行"镶木地板文件(总计 469.5kb(,其中镶木地板中的每个项目都有一个唯一的整数 ID。 知道这一点后,我在此列上放置了一个索引,但似乎并没有索引该列实际上会影响使用 Athena(AWS 服务(/Presto(底层引擎(时的性能。我正在尝试一个简单的选择,我想从中拉出其中一行的id-

SELECT *
FROM widgets w
WHERE w.id = 1

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

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

这在当前版本的雅典娜/普雷斯托中是不可能的吗?我正在使用python,pandas和pyarrow。

您没有指定如何创建索引,我假设您正在谈论 Hive 索引。根据 1 和 2,Presto 不支持 Hive 索引。根据3的说法,Hive本身已经在Hive 3中放弃了对它们的支持。

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

  • Parquet 元数据包括每列每行组的最小值和最大值。如果表中有多个行组,则只会读取可能匹配的行组。
  • 即将推出的 PARQUET-1201 功能将向 Parquet 文件本身添加页面级索引。
  • 如果查询特定列,则只会读取这些列。
  • 如果您的表已分区,则筛选"分区依据"列将仅读取该分区。

但请注意,所有这些度量仅对大于 500KB 的数据大小和数量级有意义。事实上,镶木地板本身对于这种小桌子来说是一种矫枉过正。行组的默认大小为 128MB,并且应具有许多行组。

最新更新