"predicate pushdown" 和 "projection pushdown" 有什么区别?
What is the difference between "predicate pushdown" and "projection pushdown"?
我遇到了几个信息来源,例如 here 找到的一个,它将 "predicate pushdown" 解释为:
… if you can “push down” parts of the query to where the data is stored, and thus filter out most of the data, then you can greatly reduce network traffic.
不过,我在其他文档中也看到了"projection pushdown"这个词,比如here,这似乎是一回事,但我不确定我的理解。
这两个术语之间有具体区别吗?
Predicate 指的是影响返回行数的 where/filter 子句。
投影是指选定的列。
例如:
如果您的过滤器仅传递 5% 的行,则只有 5% 的 table 将从存储传递到 Spark,而不是完整的 table。
如果您的投影只选择了 10 列中的 3 列,那么从存储传递到 Spark 的列将更少,并且如果您的存储是柱状的(例如 Parquet,而不是 Avro)并且未选择的列不是 Spark 的一部分过滤器,那么这些列甚至不必阅读。
在集合和包关系代数中,谓词下推消除了元组。
在包关系代数中,投影下推消除了属性("columns"),但是在基于列的存储的情况下,这无关紧要,因为没有在更高层使用的列不会被携带首先。即使是基于行的数据库也可能会或可能不会受益于投影下推(甚至 SQL 未指定物理访问计划)。包 RA 中的投影是一个非常名义上的操作,可以在元数据级别物理上完成(将某些列标记为不可访问)。
在集合关系代数中,投影下推一般也会消去元组,这就是它的意义所在。由于需要重复数据删除,因此设置 RA 投影不是一项成本低廉的操作。它就像一个没有聚合字段的 GROUP BY
。尽管如此,由于元组数量可能会大幅减少,因此在连接之前进行投影通常是值得的。
包代数工具,例如。 SQL也有设置RA投影的方法,比如SELECT DISTINCT
.
在所有情况下,谓词下推和投影下推都不会导致更优化的执行。取决于他们的选择性和许多其他因素。仍然,特别是。谓词下推是一个很好的启发式方法,因为连接往往是最昂贵的。
如果下推投影有保留字段的排序索引,或者需要扫描table,可能有连接算法可以融合投影,避免重复读取table/index 结构。
我遇到了几个信息来源,例如 here 找到的一个,它将 "predicate pushdown" 解释为:
… if you can “push down” parts of the query to where the data is stored, and thus filter out most of the data, then you can greatly reduce network traffic.
不过,我在其他文档中也看到了"projection pushdown"这个词,比如here,这似乎是一回事,但我不确定我的理解。
这两个术语之间有具体区别吗?
Predicate 指的是影响返回行数的 where/filter 子句。
投影是指选定的列。
例如:
如果您的过滤器仅传递 5% 的行,则只有 5% 的 table 将从存储传递到 Spark,而不是完整的 table。
如果您的投影只选择了 10 列中的 3 列,那么从存储传递到 Spark 的列将更少,并且如果您的存储是柱状的(例如 Parquet,而不是 Avro)并且未选择的列不是 Spark 的一部分过滤器,那么这些列甚至不必阅读。
在集合和包关系代数中,谓词下推消除了元组。
在包关系代数中,投影下推消除了属性("columns"),但是在基于列的存储的情况下,这无关紧要,因为没有在更高层使用的列不会被携带首先。即使是基于行的数据库也可能会或可能不会受益于投影下推(甚至 SQL 未指定物理访问计划)。包 RA 中的投影是一个非常名义上的操作,可以在元数据级别物理上完成(将某些列标记为不可访问)。
在集合关系代数中,投影下推一般也会消去元组,这就是它的意义所在。由于需要重复数据删除,因此设置 RA 投影不是一项成本低廉的操作。它就像一个没有聚合字段的 GROUP BY
。尽管如此,由于元组数量可能会大幅减少,因此在连接之前进行投影通常是值得的。
包代数工具,例如。 SQL也有设置RA投影的方法,比如SELECT DISTINCT
.
在所有情况下,谓词下推和投影下推都不会导致更优化的执行。取决于他们的选择性和许多其他因素。仍然,特别是。谓词下推是一个很好的启发式方法,因为连接往往是最昂贵的。
如果下推投影有保留字段的排序索引,或者需要扫描table,可能有连接算法可以融合投影,避免重复读取table/index 结构。