按列进行雪花查询修剪

Sch*_*res 5 snowflake-cloud-data-platform

Snowflake 文档中它说:

\n
    \n
  1. 首先,修剪查询不需要的微分区。
  2. \n
  3. 然后,在剩余的微分区内按列进行修剪。
  4. \n
\n

第二步是什么意思?

\n

让我们以链接中显示的示例表 t1 为例。在此示例表中,我使用以下查询:

\n
SELECT * FROM t1\nWHERE\nDate = \xe2\x80\x9a11/3\xe2\x80\x98 AND\nName = \xe2\x80\x9aC\xe2\x80\x98 \n
Run Code Online (Sandbox Code Playgroud)\n

由于日期 = \xe2\x80\x9a11/3\xe2\x80\x98,它只会扫描微分区 2、3 和 4。由于名称 = \'C\',它可以修剪更多,并且仅扫描微分区-第 2 部分和第 4 部分。

\n

因此最终只会扫描微分区 2 和 4。

\n

但第二步在哪里发挥作用呢?在剩余的微分区中按列修剪意味着什么?

\n

这是否意味着仅扫描微分区 2 上的第 4、5 和 6 行以及微分区 4 上的第 1 行,因为日期是我的聚类键并且已排序,因此您可以使用日期进一步修剪?

\n

那么最终只会扫描4行?

\n

Sim*_*onD 5

它只是意味着仅选择查询所需的列。所以在你的例子中它将是:

\n
SELECT col_1, col_2 FROM t1\nWHERE\nDate = \xe2\x80\x9a11/3\xe2\x80\x98 AND\nName = \xe2\x80\x9aC\xe2\x80\x98 \n
Run Code Online (Sandbox Code Playgroud)\n


Luk*_*zda 4

但第二步在哪里发挥作用呢?在剩余的微分区中按列修剪意味着什么?

微分区的好处

列独立存储在微分区内,通常称为列式存储

这可以实现对各个列的高效扫描;仅扫描查询引用的列。

建议避免SELECT *并明确指定所需的列。