一旦你计算出你需要多少总百分比,你就可以......
如前所述,一种方法是随机进行非确定性(每次运行=不同的样本),例如,如果您希望对总数据库进行 0.1% 的采样,您可以这样做:
SELECT *
FROM `dataset.table`
WHERE RAND() < 0.001
实际上,您可以通过保存此表来使其具有确定性,以便以后查询它,您也可以仅选择一个键列并仅保存以供将来使用。
另一种获得相同可重复随机样本的方法是使用加密散列函数生成(唯一标识符字段)列的指纹,然后根据指纹的两位数选择行。下面将标记一个占总数据库 70% 的随机样本。之后,您可以在 in_sample = True 上过滤表:
SELECT
*,
IF(MOD(ABS(FARM_FINGERPRINT(CAST(YOUR_COLUMN AS STRING))), 100) < 70,'True', 'False')
AS in_sample
FROM (
SELECT
DISTINCT(YOUR_UNIQUE_IDENTIFIER_COLUMN) AS YOUR_COLUMN
FROM
`dataset.table`)
如果您没有唯一标识符列,您可以连接多个列来组成一个。
与上面类似的方式,但具有散列函数。可重复并为您提供 70% 的样品。如果您想要其他数字,只需将 7 更改为您想要的 %:
SELECT
*
FROM
`dataset.table`
WHERE
ABS(HASH(YOUR_COLUMN)) % 10 < 7
不知道指纹与哈希的可扩展性,所以两者都提到了,对于某些人来说,一个可能比另一个更好。
祝你好运,