如何解决AWS DMS CDC - 仅捕获更改的值而不是整个记录? 来源 RDS MySQL
我有一个来自 MysqL 数据库的 DMS CDC 任务集(更改数据捕获)以流式传输到 Lambda 连接到的 Kinesis 流。
我希望最终只收到已更改的值,而不是在行的整个转储中,这样我就知道正在更改哪个列(目前,如果不设置另一个系统来跟踪更改,就不可能破译这一点我自己)。
示例,具有以下映射规则:
{
"rule-type": "selection","rule-id": "1","rule-name": "1","object-locator": {
"schema-name": "my-schema","table-name": "product"
},"rule-action": "include","filters": []
},
如果我更改了 product 表中记录的 name 属性,我希望收到这样的记录:
{
"data": {
"name": "newValue"
},"Metadata": {
"timestamp": "2021-07-26T06:47:15.762584Z","record-type": "data","operation": "update","partition-key-type": "schema-table","schema-name": "my-schema","table-name": "product","transaction-id": 8633730840
}
}
但是我实际收到的是这样的:
{
"data": {
"name": "newValue","id": "unchangedId","quantity": "unchangedQuantity","otherProperty": "unchangedValue"
},"transaction-id": 8633730840
}
}
正如您在收到此信息时所看到的那样,如果不设置其他系统来跟踪这一点,就不可能破译哪些财产发生了变化。
我发现了另一个 stackoverflow thread,有人在其中发布问题,因为他们的 CDC 正在做我希望我做的事情。任何人都可以指出我实现这一目标的正确方向吗?
解决方法
我在深入研究 AWS 文档后找到了答案。
不同的源数据库引擎提供不同数量的 之前图像的信息:
-
Oracle 仅在列发生变化时才对列进行更新。
-
PostgreSQL 只为属于主列的列提供数据 键(更改与否)。
-
MySQL 通常提供所有列的数据(更改或未更改)。
我在任务设置中使用了 BeforeImageSettings 以将原始数据包含在有效载荷中。
"BeforeImageSettings": {
"EnableBeforeImage": true,"FieldName": "before-image","ColumnFilter": "all"
}
虽然这仍然为我提供了完整的记录,但它为我提供了足够的数据来确定没有额外系统的情况下发生了什么变化。
{
"data": {
"name": "newValue","id": "unchangedId","quantity": "unchangedQuantity","otherProperty": "unchangedValue"
},"before-image": {
"name": "oldValue","metadata": {
"timestamp": "2021-07-26T06:47:15.762584Z","record-type": "data","operation": "update","partition-key-type": "schema-table","schema-name": "my-schema","table-name": "product","transaction-id": 8633730840
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。