谓词下推到底是如何工作的?

hey*_*you 1 hadoop parquet orc

谁能用例子解释一下谓​​词下推到底是如何工作的?

fsa*_*ues 6

假设您要执行查询

SELECT 
  SUM(price) 
FROM sales 
WHERE 
  purchase_date BETWEEN '2018-01-01' and '2018-01-31';
Run Code Online (Sandbox Code Playgroud)

查询引擎的一个非常简单的实现是迭代所有 parquet/orc 文件,反序列化pricepurchase_date列,在 和 上应用谓词purchase_date并对过滤的行求和。

Parquet(不确定 orc)维护每个文件中列的统计信息,因此如果执行引擎足够智能,它可以查看purchase_date统计信息中的最小值/最大值并确定是否有任何行匹配。例如, ifpurchase_date.min=2014-05-05purchase_date.max=2014-05-06,它可以推断谓词将始终评估为 false。

换句话说,它可以通过结合统计信息和过滤谓词来跳过 parquet 文件。这可以带来性能的巨大提升,因为 IO(文件或内存)通常是瓶颈。增益与选择性(匹配行的百分比)成反比。

术语“谓词下推”来自这样一个事实:您使用谓词“暗示”扫描运算符,然后将使用该谓词来过滤感兴趣的行。或者,将谓词推送到扫描。