首页 > 解决方案 > 对 bigquery 分区中复杂模式中的行进行重复数据删除

问题描述

我已经阅读了一些线程,但我知道的 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...

感兴趣的话题: 删除 BigQuery 分区中的 重复行 从 BigQuery 表中删除重复的行

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

标签: sqlgoogle-bigquery

解决方案


如果重复行中的所有值都相同,只需使用“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

推荐阅读