繁体   English   中英

AWS DMS CDC 到 S3 目标

[英]AWS DMS CDC to S3 target

因此,我一直在研究使用数据迁移服务 Chance Data Capture 可以实现什么,将数据从 MSSQL 传输到 S3 以及 Redshift。

Redshift 测试很好,如果我删除源数据库中的一条记录,一两秒后该记录就会从 Redshift 中消失。 与插入/更新等相同。

但是 S3...您从第一次完整加载中获得原始记录。 然后,如果您更新源中的记录,S3 会收到记录的新副本,并标有“I”。
如果我删除一条记录,我会得到另一份标有“D”的记录。

所以我的问题是——我该如何处理这一切? 我如何查询我的 S3 存储桶以查看我的数据集的“当前”state 是否反映了源数据库?

我是否必须自己编写一些代码来获取所有这些文件并处理它们,执行插入/更新和删除直到我最终解析回“正常”数据集?

欢迎任何见解!

包含“ I”,“ D”或“ U”的记录实际上是CDC数据(更改数据捕获)。 这有时被称为“历史”或“历史数据”。 这种类型的数据在数据仓库中有一些应用,也可以在许多机器学习用例中使用。

现在到下一点,为了获得数据集的“当前”状态,您必须自己编写脚本/编码。 您可以使用AWS Glue执行任务。 例如, 这篇文章解释了类似的内容

如果您不想维护粘合代码,那么一种捷径是不直接将s3目标与DMS一起使用,而是使用Redshift目标,并且一旦应用了所有CDC,就可以使用Redshift unload命令将最终副本卸载至S3。

如此处所解释“I”、“U”和“D”的含义。

我们如何获取数据库的当前 state? 一种替代方法是首先将此附加列也添加到完整加载文件中,即 CDC 之前的初始加载文件也应具有此附加列。 怎么样 现在查询athena中的数据,我们排除Op不在(“D”,“U”)或AR_H_OPERATION NOT IN(“DELETE”,“UPDATE”)中的记录。 因此,您得到了正确的计数(只有在该条目已经有 I 时才会出现“U”)。

SELECT count(*) FROM "database"."table_name" WHERE Op NOT IN ('D','U')

另外,要获取所有记录,您可以在雅典娜中尝试一些复杂的 sql,其中 Op 不在 ('D') 中,并在 Op IN = 'I' 时记录并计数 1,否则如果计数 2,则选择最新的一个或 Op = '你'。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM