BigQuery 随机抽样


以下罗列了部分 BQ 中进行随机抽样的方法:

1. RAND() 函数

RANK 函数生成 0,1 范围内的 FLOAT64 类型的随机值,使用 RANK() 生成随机值,然后使用 ORDER 进行排序,并取前 n 行,即可完成完全随机抽样。

#standardSQL
SELECT
RAND() as x
FROM `xxx.xxx.xxx`
ORDER BY x
LIMIT 1000

类似的方法还有许多,不一一列举。

2. MOD 函数

MOD 函数返回余数,例如:

mod(14, 3) --> 2

下面即为一个通过 MOD 进行抽样的方式,

MOD(ABS(FARM_FINGERPRINT(col),1000) = n)

这里需要注意的是 FARM_FINGERPRINT 这是一个哈希散列函数,针对特定的输入,输出一个 INT64 数字。

然后通过对这个数字 /1000 余特定数,因为 FARM_FINGERPRINT 的余数,肯定在 0~999 范围内,而 FARM_FINGERPRINT 得到的数字是随机的。

所以 MOD(ABS(FARM_FINGERPRINT(col),1000) = n) 即可完成 1/1000 的抽样。