AWS DMS CDC -仅捕获更改的值而不是整个记录?(源码RDS MySQL)



我有一个DMS CDC任务集(更改数据捕获)从MySQL数据库流到Kinesis流,其中Lambda连接到。

我希望最终只接收已更改的值,而不是整个转储行,这样我就知道哪一列被更改了(目前,如果不设置另一个系统来跟踪更改,就不可能破译这个)。

示例,映射规则如下:

{
"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"
},
"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
}
}

当你收到这个消息时,你可以看到,如果不设置额外的系统来跟踪它,就不可能破译属性发生了什么变化。

我发现了另一个stackoverflow线程,其中有人发布了一个问题,因为他们的CDC正在做我想我做的. 谁能给我指出正确的方向来实现这个目标?

在深入研究AWS文档后,我找到了答案。

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Kinesis.html CHAP_Target.Kinesis.BeforeImage

不同的源数据库引擎提供不同数量的前图像信息:

  • Oracle只在列发生变化时提供更新。

  • PostgreSQL只提供属于主数据库的列的数据键(是否更改)

  • MySQL通常提供所有列(更改或未更改)的数据。

我在任务设置上使用了beforeimagessettings来包含原始数据和有效负载。

"BeforeImageSettings": {
"EnableBeforeImage": true,
"FieldName": "before-image",
"ColumnFilter": "all"
}

虽然这仍然给了我完整的记录,但它给了我足够的数据来计算出没有额外系统的变化。

{
"data": {
"name": "newValue",
"id": "unchangedId",
"quantity": "unchangedQuantity",
"otherProperty": "unchangedValue"
},
"before-image": {
"name": "oldValue",
"id": "unchangedId",
"quantity": "unchangedQuantity",
"otherProperty": "unchangedValue"
},
"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
}
}

最新更新