【问题标题】:I want to generate unique ids while inserting into Bigquery table.我想在插入 Bigquery 表时生成唯一 ID。
【发布时间】:2018-09-15 04:43:10
【问题描述】:

我想在插入 Bigquery 表时生成唯一 ID。 ROW_NUMBER()OVER() 因超出资源而失败。论坛推荐使用 ROW_NUMBER()OVER(PARTITION BY)。不幸的是,不能使用 partition by,因为它可能会为 key 分区生成相同的 row_numbers。请注意,我尝试插入的数据每天至少有几亿。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    不幸的是,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  
    

    【讨论】:

    • INSERT INTO Sampledata.yelp_review_out_rnum (review_id, review_stars, review_date, business_id, name, user_id, user_name, AcceptsInsurance) SELECT row_number()over() AS review_id, t1.stars AS review_stars, t1.review_date, t2.business_id, t2.name, t3.user_id, t3.name AS user_name, t4.AcceptsInsurance FROM Sampledata.yelp_review_medium AS t1 JOIN Sampledata.yelp_business AS t2 ON t2.business_id=t1.business_id JOIN Sampledata.yelp_user AS t3 ON t3。 user_id=t1.user_id LEFT JOIN Sampledata.yelp_business_attributes AS t4 ON t4.business_id=t1.business_id
    • 感谢您的回复。上述插入语句必须每天运行,并且上述插入中的 review_id 必须是表中唯一的整数。您建议的方法在这种情况下有效吗?如果是,你能解释一下吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多