Sql 在bigquery分区中删除复杂架构中的重复数据行
我读过一些文章,但我知道的sql太少,无法解决我的问题。 我有一个具有复杂模式的表,其中包含记录和嵌套字段 下面是一个查询,它找到了我需要消除重复数据的确切行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
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'
然后删除
如果目标不匹配,则插入行
根据这一回答:
布埃纳·康帕德雷。格雷西亚斯。不幸的是,我遇到了这个错误:对于摄取时间分区表,不支持忽略插入目标列列表…..感谢您的帮助。这是可行的,但它会查询不同的行。我想从表中删除所有重复项。该表有许多嵌套字段,并且是分区的。