You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake中从数据表抽取10%的样本数据

Snowflake 按固定间隔抽取10%样本的实现方法

核心逻辑是先对表完成排序后生成连续行号,再筛选行号为10的倍数的行,正好对应你要的第10、20、30...行的需求。

实现代码

WITH sorted_table AS (
    SELECT 
        *,
        -- 按指定字段排序后生成连续行号
        ROW_NUMBER() OVER (ORDER BY 你的排序字段1, 你的排序字段2) AS row_num
    FROM 你的目标表名
)
SELECT * EXCLUDE row_num
FROM sorted_table
-- 筛选行号为10的倍数的行
WHERE MOD(row_num, 10) = 0;

如果你使用的Snowflake版本不支持EXCLUDE语法,把SELECT * EXCLUDE row_num改为手动列出你需要返回的所有字段即可。

参数替换说明

  • 替换你的排序字段1, 你的排序字段2为实际排序依据字段,建议包含主键等唯一值字段,保证排序结果稳定,每次抽样结果可复现
  • 替换你的目标表名为待抽样的表完整路径(如果有库、schema前缀需要一并带上)
  • 若需调整抽样比例,修改MOD(row_num, 10)的第二个参数即可:抽取5%样本改为MOD(row_num, 20) = 0,抽取2%样本改为MOD(row_num, 50) = 0

注意事项

即使是超大数据量的表,该方案也可以正常运行,Snowflake的窗口函数ROW_NUMBER已经针对大表做了完善的性能优化,不需要额外做适配调整。


内容的提问来源于stack exchange,提问作者Vivek Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:48:03