如何在 BigQuery Standard SQL 中进行可重复采样?

Jef*_*f G 6 sql hash google-bigquery cross-validation

此博客中,一位 Google Cloud 员工解释了如何在 BigQuery 中为机器学习进行可重复的数据集采样。这对于创建(和复制)数据的训练/验证/测试分区非常重要。

然而,该博客使用了 Legacy SQL,Google 现在已弃用它而支持标准 SQL。

您将如何使用标准 SQL 重新编写如下所示的博客示例代码?

#legacySQL
SELECT
  date,
  airline,
  departure_airport,
  departure_schedule,
  arrival_airport,
  arrival_delay
FROM
  [bigquery-samples:airline_ontime_data.flights]
WHERE
  ABS(HASH(date)) % 10 < 8
Run Code Online (Sandbox Code Playgroud)

Jef*_*f G 3

标准 SQL 将重写查询,如下所示:

#standardSQL
SELECT
  date,
  airline,
  departure_airport,
  departure_schedule,
  arrival_airport,
  arrival_delay
FROM
  `bigquery-samples.airline_ontime_data.flights`
WHERE
  ABS(MOD(FARM_FINGERPRINT(date), 10)) < 8
Run Code Online (Sandbox Code Playgroud)

具体变化如下:

  • 用于分隔 Google Cloud 项目与表名称的句点(不是冒号)。
  • 反引号(不是方括号)来转义表名称中的连字符。
  • MOD函数(不%)。
  • FARM_FINGERPRINT(不是HASH)。这实际上是一个与旧版 SQL 不同的哈希函数HASH,正如博客所暗示的那样,随着时间的推移,它实际上并不一致。