查询计划
对于任何懒查询,Polars 都有以下两种方式:
- 一个非优化计划,包含我们提供的步骤代码集,以及
- 由查询优化器进行更改后的优化计划
我们可以通过可视化和以文本形式打印来理解未优化和优化的查询计划。
下面我们考虑以下查询:
q1 = (
pl.scan_csv("docs/assets/data/reddit.csv")
.with_columns(pl.col("name").str.to_uppercase())
.filter(pl.col("comment_karma") > 0)
)
非优化查询计划
Graphviz 可视化
要创建查询计划的可视化, 应安装Graphviz并将其添加到您的PATH中。
首先,我们通过设置optimized=False来可视化未优化的计划。
q1.show_graph(optimized=False)
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAd0AAAD9CAIAAAB2hDq7AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deUAT19ow8DNZCAFCUAphVZC+am9VpGDFheIOqIgii71qi1ZL6W0tLlS0Wn0r7rRcba0bba0VFWuLGleQohWECla0WgGpKwoYQXaCBOb743x33rmTZDKEbbTP7y/yk5kzZ86c5MlJZpIhSJJEAAAAeEPQ3QEAAAD4L5CXAQCAXyAvAwAAv0BeBgAAfoG8DAAA/AJ5GQAA+AXyMgAA8AvkZQAA4BfIywAAwC+QlwEAgF8gLwMAAL9AXgYAAH6BvAwAAPwCeRkAAPgF8jIAAPAL5GUAAOAXyMsAAMAvkJcBAIBfIC8DAAC/QF4GAAB+gbwMAAD8AnkZAAD4BfIyAADwC+RlAADgF8jLAADAL5CXAQCAXyAvAwAAv0BeBgAAfoG8DAAA/AJ5GQAA+AXyMgAA8AvkZQAA4BfIywAAwC+QlwEAgF8gLwMAAL9AXgYAAH6BvAwAAPwCeRkAAPgF8jIAAPAL5GUAAOAXyMsAAMAvkJcBAIBfIC8DAAC/QF4GAAB+gbwMAAD8AnkZAAD4BfIyAADwC+RlAADgF8jLAADAL5AX5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e
查询计划的可视化应该从下往上阅读。在可视化中:
- 每个框对应于查询计划中的一个阶段
sigma代表SELECTION,表示任何过滤条件pi代表PROJECTION,表示选择列的子集
打印的查询计划
我们也可以使用explain(optimized=False)打印未优化的计划
q1.explain(optimized=False)
FILTER [(col("comment_karma")) > (0)] FROM WITH_COLUMNS:
[col("name").str.uppercase()]
CSV SCAN data/reddit.csv
PROJECT */6 COLUMNS
打印的计划也应从下往上阅读。这个未优化的计划大致等同于:
- 从
data/reddit.csv文件中读取 - 读取所有6列(其中PROJECT */6 COLUMNS中的*通配符表示取所有列)
- 将
name列转换为大写 - 在
comment_karma列上应用过滤器
优化后的查询计划
现在我们使用show_graph来可视化优化后的计划。
q1.show_graph()
<img src="data:image/png;base64, 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J5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ5oZJ
我们也可以使用explain打印优化后的计划
q1.explain()
WITH_COLUMNS:
[col("name").str.uppercase()]
CSV SCAN data/reddit.csv
PROJECT */6 COLUMNS
SELECTION: [(col("comment_karma")) > (0)]
优化后的计划是:
- 从Reddit CSV读取数据
- 在逐行读取CSV时,对
comment_karma列应用过滤器 - 将
name列转换为大写
在这种情况下,查询优化器已经识别出可以在从磁盘读取CSV时应用filter,而不是将整个文件读入内存后再应用过滤器。这种优化被称为谓词下推。