我有要导入到 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/