【发布时间】:2018-09-15 04:43:10
【问题描述】:
我想在插入 Bigquery 表时生成唯一 ID。 ROW_NUMBER()OVER() 因超出资源而失败。论坛推荐使用 ROW_NUMBER()OVER(PARTITION BY)。不幸的是,不能使用 partition by,因为它可能会为 key 分区生成相同的 row_numbers。请注意,我尝试插入的数据每天至少有几亿。
【问题讨论】:
标签: google-bigquery
我想在插入 Bigquery 表时生成唯一 ID。 ROW_NUMBER()OVER() 因超出资源而失败。论坛推荐使用 ROW_NUMBER()OVER(PARTITION BY)。不幸的是,不能使用 partition by,因为它可能会为 key 分区生成相同的 row_numbers。请注意,我尝试插入的数据每天至少有几亿。
【问题讨论】:
标签: google-bigquery
不幸的是,partition by 不能使用,因为它可能会为 key 分区产生相同的 row_numbers
是的 - 你会得到不同的分区相同的数字 - 所以你可以像下面的非常简化的例子那样使用复合键 - 只是为了展示方法 - 你应该能够根据你的具体情况进行调整案例
#standardSQL
WITH `project.dataset.table` AS (
SELECT value, CAST(10*RAND() AS INT64) partitionid
FROM UNNEST(GENERATE_ARRAY(1, 100)) value
)
SELECT
partitionid,
value,
CONCAT(
CAST(1000 + partitionid AS STRING),
CAST(10000 + ROW_NUMBER() OVER(PARTITION BY partitionid ORDER BY value) AS STRING)
) id
FROM `project.dataset.table`
-- ORDER BY id
【讨论】: