【问题标题】:Deduplicate rows in complex schema in a bigquery partition对 bigquery 分区中复杂模式中的行进行重复数据删除
【发布时间】:2020-05-26 03:14:24
【问题描述】:

我已经阅读了一些主题,但我知道的 sql 太少,无法解决我的问题。 我有一个包含记录和嵌套字段的复杂架构的表。

您会在下面看到一个查询,该查询可以找到我需要删除重复数据的确切行。

SELECT * 
FROM my-data-project-214805.rfid_data.rfid_data_table 
WHERE DATE(_PARTITIONTIME) = "2020-02-07"  
AND DetectorDataMessage.Header.MessageID ='478993053'

DetectorDataMessage.Header.MessageID 应该是唯一的。

如何删除这些行之一? (有两个)

如果可能的话,我想对整个表进行重复数据删除,但它是分区的,但我无法正确处理。我尝试以下线程中的建议,但我收到此错误Column DetectorDataMessage of type STRUCT cannot be used in...

感兴趣的话题: Deduplicate rows in a BigQuery partition Delete duplicate rows from a BigQuery table

有什么建议吗?你能指引我正确的方向吗?

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    尝试使用MERGE 删除现有的重复行和一个相同的行。在这种情况下,我将选择一个特定的日期和 ID,如问题所示:

    MERGE `temp.many_random` t
    USING (
      # choose a single row to replace the duplicates
      SELECT a.*
      FROM (
        SELECT ANY_VALUE(a) a
        FROM `temp.many_random` a
        WHERE DATE(_PARTITIONTIME)='2018-10-01'
        AND DetectorDataMessage.Header.MessageID ='478993053'
        GROUP BY _PARTITIONTIME, DetectorDataMessage.Header.MessageID 
      )
    )
    ON FALSE
    WHEN NOT MATCHED BY SOURCE 
      # delete the duplicates
      AND DATE(_PARTITIONTIME)='2018-10-01'  
      AND DetectorDataMessage.Header.MessageID ='478993053'
    THEN DELETE
    WHEN NOT MATCHED BY TARGET THEN INSERT ROW
    

    基于这个答案:

    【讨论】:

    • 布埃纳同志。格拉西亚斯。不幸的是,我收到此错误:“摄取时间分区表不支持省略 INSERT 目标列列表.....”
    【解决方案2】:

    如果重复行中的所有值都相同,只需使用“SELECT distinct”。 如果没有,我会使用 ROW_NUMBER() 函数为每个唯一索引创建一个排名,然后选择第一个排名。

    我不知道你的专栏是什么,但这里有一个例子:

    WITH subquery as
    (select MessageId
    ROW_NUMBER() OVER(partition by MessageID order by MessageId ASC) AS rank
    )
    select *
    from subquery
    where rank = 1
    

    【讨论】:

    • 感谢您的帮助。这有效,但它查询不同的行。我想从表中删除所有重复项。该表有很多嵌套字段并且是分区的。
    猜你喜欢
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2017-08-20
    • 2016-08-09
    • 2019-08-20
    相关资源
    最近更新 更多