我有一个产品表:id  createdOn UpdatedOn和76列。
createdOn UpdatedOn是TIMESTAMP。createdOn是分区字段。
每个ETL将记录从存储加载到产品表(追加)。
一旦ETL完成,我就会在产品表中复制。
示例:
id  createdOn,                    updatedOn,                stock, status
1   2018-09-14 14:14:24.305676   2018-09-14 14:14:24.305676  10    5
3   2018-09-14 14:14:24.305676   2018-09-14 14:14:24.305676  10     5
1   2018-09-14 14:14:24.305676   2018-09-14 14:14:24.305676  10     5
3   2018-09-14 14:14:24.305676   2018-09-15 10:00:00.000000  7     5我想删除重复的id,最近的updatedOn记录需要保留,rest需要删除。
我按照这里的建议行事:谷歌烧烤-如何在表中插入现有数据?,这是我的查询:
   DELETE FROM `storage.prodcuts` AS d
   WHERE (SELECT ROW_NUMBER() OVER (PARTITION BY createdOn, id ORDER BY updatedOn DESC)
           FROM `storage.prodcuts` AS d2
           WHERE d.id = d2.id ) > 1;  这不管用:
错误:引用其他表的相关子查询不受支持,除非它们可以去关联,例如将它们转换为有效的联接。
也曾尝试过:
 delete FROM `storage.prodcuts` as p
  ( SELECT ROW_NUMBER() OVER (PARTITION BY createdOn, id  order by updatedOn DESC) as rn , id FROM `storage.prodcuts` ) as t
WHERE t.rn> 1 and p.id=t.id;  给予:
语法错误:意外"(“3:7”)
我假设BigQuery希望我在delete table和row_number表之间加入(尽管它是同一个表)?我怎么才能解决这个问题?
发布于 2018-09-17 06:47:56
维护两个表,一个是现在拥有的:所有内容,有另一个表,这是清理版本,您可以根据id列从第一个表合并到第二个表。这样,最新的行将在第二个表中,并且使用MERGE语句,它将一直被覆盖。
现在您甚至可以使用调度查询,这样您的合并语句就可以每X次自动执行一次。
https://stackoverflow.com/questions/52361502
复制相似问题