Sql 在bigquery分区中删除复杂架构中的重复数据行

Sql 在bigquery分区中删除复杂架构中的重复数据行,sql,google-bigquery,Sql,Google Bigquery,我读过一些文章,但我知道的sql太少,无法解决我的问题。 我有一个具有复杂模式的表,其中包含记录和嵌套字段 下面是一个查询,它找到了我需要消除重复数据的确切行 SELECT * FROM my-data-project-214805.rfid_data.rfid_data_table WHERE DATE(_PARTITIONTIME) = "2020-02-07" AND DetectorDataMessage.Header.MessageID ='478993053' Detect

我读过一些文章,但我知道的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应该是唯一的

如何删除其中一行?有两个

如果可能的话,我希望对整个表进行重复数据消除,但它已分区,我无法正确执行。我在下面的线程中尝试了这些建议,但我得到了以下错误:STRUCT类型的DetectorDataMessage列不能用于

感兴趣的主题:


有什么建议吗?你能告诉我正确的方向吗?

如果重复行中的所有值都相同,只需使用“选择不同”。 如果没有,我将使用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
尝试使用合并来删除现有的重复行和一个相同的行。在本例中,我将指定一个特定的日期和id,如问题所示:

合并'temp.many_'t't 使用 选择一行以替换重复项 选择a* 从…起 选择任意值a 从'temp.many_random'a 其中日期\分区时间='2018-10-01' 和DetectorDataMessage.Header.MessageID='478993053' 分组依据分区时间,DetectorDataMessage.Header.MessageID 论虚假 当源不匹配时 删除重复项 日期_分割时间='2018-10-01' 和DetectorDataMessage.Header.MessageID='478993053' 然后删除 如果目标不匹配,则插入行 根据这一回答:


布埃纳·康帕德雷。格雷西亚斯。不幸的是,我遇到了这个错误:对于摄取时间分区表,不支持忽略插入目标列列表…..感谢您的帮助。这是可行的,但它会查询不同的行。我想从表中删除所有重复项。该表有许多嵌套字段,并且是分区的。