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

标签 sql hash google-bigquery cross-validation

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

然而,该博客使用了 Legacy SQL,其中 Google has now deprecated赞成标准 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

最佳答案

标准 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

具体变化如下:
  • 将 GCP 项目与表名分开的句点(不是冒号)。
  • 反引号(不是方括号)以转义表名中的连字符。
  • MOD函数(不是 % )。
  • FARM_FINGERPRINT (不是 HASH )。这实际上是与 Legacy SQL 的 HASH 不同的散列函数。 , 其中 wasn't in fact consistent over time正如博客所暗示的那样。
  • 关于sql - 如何在 BigQuery Standard SQL 中进行可重复采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46019624/

    相关文章:

    google-bigquery - 如何在 Google BigQuery 中将日期解析为周年?

    php - 使用左连接从特定日期选择行

    sql - 如何在 SQLite 中使用 JSON 合并多个列?

    c - hsearch 在哪里存储数据?

    c# - 带有 C# 示例的 Google BigQuery

    linux - 如何使用 linux cmd 提示符压缩带有 unicode 编码的文件?

    mysql - 如何统计MySQL中的项目数?

    SQL Server 2005数据库 'In Recovery'

    hash - 我如何枚举和删除以三元组形式分配给 3 个继承者中的每一个的 9 个项目......以及更多?

    php - 如何正确解释哈希方案的递归伪代码