在 Big Query 中从每个组中随机抽取样本

Tas*_*Tas 3 random-sample google-bigquery

我试图找出在 Big Query 的表中为每个组随机抽取 100 条记录的最佳方法是什么。

例如,我有一个表,其中 A 列是唯一的记录 ID,B 列是该记录所属的组 ID。对于每个不同的 groupID,我想随机抽取 100 个记录 ID。有没有简单的方法来完成这个?

Mik*_*ant 6

像下面这样的东西应该工作

SELECT recordID, groupID
FROM (
  SELECT 
    recordID, groupID, 
    RAND() AS rnd, ROW_NUMBER() OVER(PARTITION BY groupID ORDER BY rnd) AS pos
  FROM yourTable
)
WHERE pos <= 100
ORDER BY groupID, recordID
Run Code Online (Sandbox Code Playgroud)

如果您想提高随机性,请在此处检查 RAND()

  • 你真的不需要最终的 ORDER BY groupID, recordID (2认同)
  • 你如何能够引用 OVER() 中的“rnd”? (2认同)