首页 > 解决方案 > 选择所有列然后抽样,还是只选择 ID 然后加入并抽样?

问题描述

问题:假设我们正在查看 100 亿行数值数据,其中 FROM 子句排除了 99% 的条目,您希望哪种方法执行得更好,为什么?

无论哪种方式,我都可以争论,但话又说回来,我可能有 6 个月的 SQL 经验并且没有正式的 compsci 教育。问题是在 ANSI Snowflake SQL 中格式化的。

方法 1:对所有列进行采样(有条件)。

SELECT col1, col2, col3.... coln
FROM table1
WHERE cond1 and cond2 and cond3... condn
SAMPLE (1000000 rows)

方法 2:仅样本 ID(有条件)然后加入。

SELECT *
FROM
    (SELECT IDcol
    FROM table1
    WHERE cond1 and cond2 and cond3... condn
    SAMPLE (1000000 rows)
    ) as t1sampled
INNER JOIN
    (SELECT col1, col2, col3.... coln
    FROM table1
    ) as t1
ON t1sampled.IDcol = t1.IDcol

标签: sqldatabasesnowflake-cloud-data-platform

解决方案


类似的运行时间!

我将上述方法修改为采样 10,000 行(不是 1,000,000 行),因为这个新仓库的迁移数据比我最初想象的要少。

我使用了我们的超小型/轻型 (XS) 雪花仓库。

方法一: 6分钟;75 GB 读取

方法一:6分钟; 75 GB 读取

方法二: 6分2秒;90 GB 读取

在此处输入图像描述


推荐阅读