AWS DMS CDC 到 S3 目标

问题描述 投票:0回答:2

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

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

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

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

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

欢迎任何见解!

amazon-s3 cdc aws-dms
2个回答
4
投票

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

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

如果您不想维护粘合代码,那么快捷方式是不要直接将 s3 目标与 DMS 结合使用,而是使用 Redshift 目标,并在应用所有 CDC 后,使用 Redshift unload 命令将最终副本卸载到 S3。


0
投票

此处所解释,关于

'I'
'U'
'D'
的含义。

我们如何获取数据库的当前状态?另一种方法是首先将此附加列添加到完整加载文件中,即 CDC 之前的初始加载文件也应该具有此附加列。 如何? 现在在 athena 中查询数据,排除

Op
不在
("D", "U")
AR_H_OPERATION NOT IN ("DELETE", "UPDATE")
中的记录。因此,您可以获得正确的计数(
ONLY COUNT
,因为只有当该条目已经有
'U'
时,才会出现
I
)。

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

另外,要获取所有记录,您可以在 athena 中尝试使用复杂的 sql,其中

Op
不在
('D')
中,并在
Op IN = 'I'
和计数 1 时记录,否则如果计数 2,则选择最新的一个或
Op = 'U'
.

© www.soinside.com 2019 - 2024. All rights reserved.