google-bigquery - 使用 Farm_fingerprint 进行 Google 大查询

标签 google-bigquery

我有要导入到 Google Big Query 中的表格。 这些表是我的暂存表,我正在使用 View 将暂存表转换为逻辑仓库表。 我的问题是代理键。

现在,ROW_NUMBER() 失败了,因为我的数据太大了。

有人建议我使用 FARM_FINGERPRINT

是否有在 Big Query 中使用 Surrogate_key Generation 的正确方法?

谢谢

更新 1 以进行说明。

我的一些源表有 30 个字段和数百万条记录。太大了,不能在这里展示。我们正在将这些记录转换为表格,需要创建代理键以协助稍后使用 BI 工具。

为此,我们的 View (用其替换目标表)进行了转换,而且我们使用 ROW_NUMBER() 函数来创建唯一的代理键。我们意识到该函数会强制 Big Query 将整个逻辑推送到一个节点上,这会导致查询崩溃。

我们正在尝试使用 FARM_FINGERPRINT(),使用表示唯一业务键的串联字段字符串作为输入来检索 INT64 值以用作代理键。我们相信这将提供一个整数,我们可以根据该团队的需要在 BI 工具中使用它。

我想问的是,当您拥有如此庞大的数据集时,是否有一种正确的方法可以在 Google Big Query 中生成基于整数的代理键?

谢谢。

最佳答案

您能找到不同的策略来划分数据吗?

失败并显示“超出资源”(正如预期的那样 - 请注意,我不是要删除重复项,而是要对每个提及项进行编号):

SELECT author
  , ROW_NUMBER() OVER(ORDER BY created_utc)
FROM `fh-bigquery.reddit_comments.2017_06`

但我可以按第一个字母对我的作者进行分区,以使数据适合一个分区:

SELECT author
  , ROW_NUMBER() OVER(PARTITION BY REGEXP_EXTRACT(author, '.') ORDER BY created_utc)
FROM `fh-bigquery.reddit_comments.2017_06`

这行得通!现在每一行都可以有一个由 first_letter_author+row_number 组成的 id:

SELECT *
  , CONCAT(
      first_letter
      , '-'
      , CAST(ROW_NUMBER() 
      OVER(PARTITION BY REGEXP_EXTRACT(author, '.') 
      ORDER BY created_utc) AS STRING)) id
FROM (
  SELECT author, created_utc, REGEXP_EXTRACT(author, r'^.') first_letter
  FROM `fh-bigquery.reddit_comments.2017_06`
)

关于google-bigquery - 使用 Farm_fingerprint 进行 Google 大查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45444201/

相关文章:

google-cloud-platform - 如果用户查询公共(public) BigQuery 数据库,数据所有者可以看到已执行的查询

google-bigquery - 自 2019 年 4 月 23 日晚上 8 点 UTC 以来,我们所有计划的查询都以 `Error code 3 : Incompatible table partitioning specification.` 失败

sql - 查询 BigQuery 嵌套/重复字段

python - 如何在 google Bigquery 中使用加载作业时创建日期分区表?

即使在四天之后 Firebase 也不会与 BigQuery 同步事件

google-bigquery - 是否可以在 BigQuery Web 控制台中设置默认区域?

google-bigquery - 使用通配符删除 BigQuery 表

google-bigquery - 向 BigQuery 表添加列描述?

google-bigquery - 大查询 : does it support UDAF?

google-bigquery - 在 BigQuery 中查找模式