我使用bigquery中的AbstractEngine
函数为我提供随机数据样本,并将其与同一数据集的另一个样本合并。
这是一个机器学习问题,我对一个课程比另一个课程感兴趣。
我使用公共数据集重新创建了逻辑。
RAND
大多数情况下,这表现得如预期的那样
给出一行SELECT
COUNT(1),
bigarticle
FROM
(
SELECT
1 as [bigarticle]
FROM [bigquery-public-data:samples.wikipedia]
WHERE num_characters > 50000
),
(
SELECT
0 as [bigarticle]
FROM [bigquery-public-data:samples.wikipedia]
WHERE (is_redirect is null) AND (RAND() < 0.01)
)
GROUP BY bigarticle
超过50k的行数,
并给另一行计算1%的行样本,其中num_characters
为空。
(这是我在内部数据集中使用的逻辑的近似值。)
如果您反复运行此查询,有时会产生意外结果。
在此结果集(is_redirect
)中,我只获得一行,其中包含bquijob_124ad56f_15da8af982e
= 1的计数。
答案 0 :(得分:2)
RAND
不使用确定性种子。如果需要确定性结果,则需要对表中的列进行散列/指纹,然后使用模数来选择值的子集。使用旧版SQL:
#legacySQL
SELECT
COUNT(1),
bigarticle
FROM (
SELECT
1 as [bigarticle]
FROM [bigquery-public-data:samples.wikipedia]
WHERE num_characters > 50000
), (
SELECT
0 as [bigarticle]
FROM [bigquery-public-data:samples.wikipedia]
WHERE (is_redirect is null) AND HASH(title) % 100 = 0
)
GROUP BY bigarticle;
在BigQuery中使用标准SQL,因为旧版SQL不在积极开发中,所以建议使用标准SQL:
#standardSQL
SELECT
COUNT(*),
bigarticle
FROM (
SELECT
1 as bigarticle
FROM `bigquery-public-data.samples.wikipedia`
WHERE num_characters > 50000
UNION ALL
SELECT
0 as bigarticle
FROM `bigquery-public-data.samples.wikipedia`
WHERE (is_redirect is null) AND MOD(FARM_FINGERPRINT(title), 100) = 0
)
GROUP BY bigarticle;