首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在BigQuery上执行ETL以避免重复?

如何在BigQuery上执行ETL以避免重复?
EN

Stack Overflow用户
提问于 2018-09-17 05:57:52
回答 1查看 640关注 0票数 0

我有一个产品表:id createdOn UpdatedOn和76列。

createdOn UpdatedOnTIMESTAMPcreatedOn是分区字段。

每个ETL将记录从存储加载到产品表(追加)。

一旦ETL完成,我就会在产品表中复制。

示例:

代码语言:javascript
运行
复制
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需要删除。

我按照这里的建议行事:谷歌烧烤-如何在表中插入现有数据?,这是我的查询:

代码语言:javascript
运行
复制
   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;  

这不管用:

错误:引用其他表的相关子查询不受支持,除非它们可以去关联,例如将它们转换为有效的联接。

也曾尝试过:

代码语言:javascript
运行
复制
 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 tablerow_number表之间加入(尽管它是同一个表)?我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2018-09-17 06:47:56

维护两个表,一个是现在拥有的:所有内容,有另一个表,这是清理版本,您可以根据id列从第一个表合并到第二个表。这样,最新的行将在第二个表中,并且使用MERGE语句,它将一直被覆盖。

现在您甚至可以使用调度查询,这样您的合并语句就可以每X次自动执行一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52361502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档