【问题标题】:BigQuery - How can i make Merge Statement Handle Duplicate rows?BigQuery - 如何使合并语句处理重复行?
【发布时间】:2021-06-23 08:47:19
【问题描述】:

我目前有一个表,它使用复合列来唯一标识每一行数据。所以它们是我们得到重复行的时候。我有一个将数据从源表复制到目标的合并语句。每当我们在源表上有重复的行时。 Merge 语句将 Duplicate 连同其他数据行复制到 Destination。合并语句是

        MERGE `project.dataset.destination` T
        USING `project.dataset.source` S
        ON  (T.department = S.department OR T.department IS NULL and S.department IS NULL) AND
            (T.category = S.category OR T.category IS NULL AND S.category IS NULL) AND
            (T.subcategory = S.subcategory OR T.subcategory IS NULL AND S.subcategory IS NULL) AND
            (T.subset = S.subset OR T.subset IS NULL AND S.subset IS NULL) AND
            (T.country = S.country OR T.country IS NULL AND S.country IS NULL) AND
            (T.state = S.state OR T.state IS NULL AND S.state IS NULL) AND
            (T.county = S.county OR T.county IS NULL AND S.country IS NULL) AND
            (T.date = S.date OR T.date IS NULL AND S.date IS NULL)
        WHEN NOT MATCHED AND ((department = "SPORT" AND subcategory IN ("FOOTBALL", "PONG")) AND 
                     (country IN("USA", "CANADA") )) THEN 
            INSERT ROW
        WHEN NOT MATCHED BY SOURCE THEN
            DELETE

我的问题是;有什么办法可以处理将重复项插入到目标表中? 或者,如果重复行正在插入到目标中。当此 Merge 语句在第二天运行时;无论如何我可以修改此合并语句以删除在目标表上找到的任何重复项吗?

提前致谢

【问题讨论】:

  • 什么是重复?我的意思是在你的场景中定义重复是什么?
  • 您是否尝试用新值替换表中的行?
  • @eshirvana 重复数据在源表上出现不止一个...不是唯一的
  • @GordonLinoff 我正在尝试将源中的数据插入到目标中。但我不想要重复的数据
  • 您为什么不安排一个额外的 BQ-SQL 来根据您的要求处理重复记录。

标签: sql google-bigquery


【解决方案1】:

一个好的 SQL 问题的一般准则:提供示例源表和目标表,然后提供预期结果。

也就是说,根据 cmets,这里的“重复”是指:

同一行数据在源表上出现多个

重复源表可能发生在子查询中,例如

        MERGE `project.dataset.destination` T
        USING (
          SELECT ... 
          FROM `project.dataset.source` 
          GROUP BY <your_unique_key>
          ) S
        ON ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多