我正在使用 DMS 创建一个持续任务,该任务会将数据从我的生产数据库部署到开发数据库。但是,必须屏蔽 PII,因此我正在创建一组规则来执行此操作。
如果每行数据的长度与生产中的长度相同,开发人员会更容易操作。因此,我创建了一条规则来保留首字母并x
在后面添加一些字母。这是我的转换模式:
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "mydatabase",
"table-name": "my_table"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "add-column",
"rule-target": "column",
"object-locator": {
"schema-name": "mydatabase",
"table-name": "my_table"
},
"value": "TMPcontact_name",
"expression": "substr($contact_name, 0, 2) || replace(printf('%.' || length($contact_name) || 'c', '/'), '/', 'x')",
"data-type": {
"type": "string",
"length": "50"
}
},
{
"rule-type": "transformation",
"rule-id": "3",
"rule-name": "3",
"rule-action": "remove-column",
"rule-target": "column",
"object-locator": {
"schema-name": "mydatabase",
"table-name": "my_table",
"column-name": "contact_name"
}
},
{
"rule-type": "transformation",
"rule-id": "4",
"rule-name": "4",
"rule-action": "rename",
"rule-target": "column",
"object-locator": {
"schema-name": "mydatabase",
"table-name": "my_table",
"column-name" : "TMPcontact_name"
},
"value": "contact_name"
}
]
}
问题是 DMS 忽略了规则 #4。进程完成后,目标中的列名称为TMPcontact_name
。CW 中的日志不包含与此相关的任何错误或通知。我找不到任何相关文档。
答案1
本周我也遇到了同样的问题。经过大量的逆向工程和阅读后,我得出结论:DMS 版本 3.4.6 无法满足我们的需要。
它(可能)不起作用
- 正如您所说,AWS 文档中没有提到这样的用例。
- 限制文档状态中的部分您不能对同一对象应用多个转换规则操作。在您的解决方案中,您正在应用二列 的 变换 规则
TMPcontact_name
.
建议的解决方案
相反,在文档中AWS 博客文章, 但是也其他的(乃至其他的) 大部分都是从第一篇文章中复制而来,传播的解决方案是创建一个包含转换后数据的新列并删除旧列。
经过多次重新考虑,我认为这种方法可能更可取,因为它不会让用户感到困惑,因为复制的表甚至不会假装新列具有与源列相同的内容,因为名称保持不变。使用contact_name_masked
as name 应该可以让每个人都清楚,即使那些不了解 PII 含义的人,这也是屏蔽的联系人姓名。contact_name_hashed
使用 时也是如此hash_sha256()
。