首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ETL过程中发出数据库中的重复记录

在ETL过程中发出数据库中的重复记录
EN

Stack Overflow用户
提问于 2018-05-10 15:17:57
回答 1查看 246关注 0票数 0

我目前的ETL架构如下:

代码语言:javascript
运行
复制
s3 --> staging table --> python dataframe --> destination table
  1. 来自s3的记录被加载到暂存表中。
  2. Python脚本连接到暂存表。
  3. Python脚本每一小时运行一次,以执行一些复杂的转换。
  4. 从python生成的数据被上传到目标表中。

但是,对于目标表中的重复记录,我有一个问题:

代码语言:javascript
运行
复制
| Time | New records (S3) | Redshift staging table (postgre) | Python DataFrame | Redshift Destination Table (postgre) | Duplicate records |
|------|------------------|----------------------------------|------------------|--------------------------------------|-------------------|
| 9am  | 3 records        | 3 records                        | 3 records        | 3 records                            | 0 (3-3)           |
| 10am | 2 records        | 5 (3+2) records                  | 5 records        | 8 (3+5) records                      | 3 (8-5)           |
| 11am | 4 records        | 9 (5+4) records                  | 9 records        | 17 (9+8) records                     | 8 (17-9)          |

因此,在上午11时,分期表有9项记录,而目标表则有17项记录(在上午11点,目的地表中共有8项重复记录)。

如何确保目标表中的总记录与暂存表中的记录匹配?

(我不能删除分期表。现在,我正在过滤目标表,只选择唯一的记录。有更好的方法吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 15:26:43

您的stage表和目标表都在Postgres中,所以只需编写逻辑,将stage表中的数据与dest表中的数据进行比较,并删除已经存在于dest表中的任何记录。

代码语言:javascript
运行
复制
DELETE FROM staging
WHERE EXISTS(SELECT 1 FROM dest WHERE dest.id = staging.id);

https://www.postgresql.org/docs/8.1/static/functions-subquery.html

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

https://stackoverflow.com/questions/50276248

复制
相关文章

相似问题

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