bigquery random sampleの方法
指定行数をランダムサンプルする
SELECT
*
FROM `project_id.bucket_name.table_name`
ORDER BY RAND()
LIMIT 500000
カテゴリごとに指定行数をランダムサンプルする
- window関数を使用して、ランダムなindexを割り振る
- indexの大きさでしきい値を決定する
SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY <category-name> ORDER BY RAND()) AS th_index
FROM
`project_id.bucket_name.table_name`
)
WHERE
th_index <= 10000
再現性を担保しつつサンプルする
- ハッシュ関数(
FARM_FINGERPRINT
)を利用して数値を作成し、MODを取る
WITH t AS (
SELECT
word,
ROW_NUMBER() OVER() AS rn
FROM
`publicdata.samples.shakespeare`
)
SELECT
word
FROM
t
WHERE
MOD(ABS(FARM_FINGERPRINT(CAST(rn AS STRING))), 1600) = 0