如何解决AWS DMS - DocumentDB > ElasticSearch - 获取主键字符串时出错
我正在使用 DMS 定期将所有数据从 DocumentDB 迁移到 elasticSearch 集群中。
当我运行任务时,一些表会正常迁移到 ElasticSearch 中,而在一些表中我会出错。
对于每个发出错误的表,我都会收到两个错误:
[TARGET_LOAD]E: Error Getting Primary Key String for hash key for table 'XXX' https://forums.aws.amazon.com/ (field_mapping_utils.c:644)
[TARGET_LOAD]E: Error extracting Field-type-info from data_record https://forums.aws.amazon.com/ (elasticsearch_utils.c:1088)
我不知道在这里做什么。这是上面“XXX”表中的示例文档:
{"_id":"5fe07b894ae10f100cb3d623","orgId":"XXX","firstName":"XXX","middleName":"","lastName":"XXX","email":"XXX","previousUsedEmails":[{email: "XXX",timeOfCreation: 1234}],"phone":null,"passHash":"1234","oldPassHashes": ["1234"],"isEmailVerified":true,"isSuspended":false,"role": ["abc"],"isArchived":false,"lastSignedIn":0,"isNew":false,"recruiterAccount":null,"failedLoginAttempts":0,"lockedUntilTimestamp":null,"owner":"5fe0722ec2238046e8ade172","addedTimestamp":1608547190,"updatedTimestamp":1608547190}
_id
在 DocumentDB 中属于 ObjectId
类型。
任何帮助将不胜感激。
编辑:
我选中了 _id as a separate column Extract document ("_id") as a separate column
复选框并添加了以下转换规则:
{
"rule-type": "transformation","rule-id": "1","rule-name": "1","rule-target": "column","object-locator": {
"schema-name": "%","table-name": "%","column-name": "_id"
},"rule-action": "add-prefix","value": "old","old-value": null
}
这导致错误消失,但弹性搜索文档只有来自 documentDB 数据库的 _id(重命名为 old__id),没有其他字段。
然后我将 documentDB 端点中的“元数据模式”从之前的“文档”更改为“表”,将 1000 作为要扫描的项目以获取字段名称(这已经足够了),然后只有布尔值 &整数字段转入弹性搜索,即没有字符串、数组等字段。
我不确定这些天 AWS 正在做什么测试,这里似乎没有任何文档说明问题,也没有任何错误。
编辑#2
从该文档中,我看到 documentDb 中的字符串和数组在 AWS DMS 中被视为“CLOB”:https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.DocumentDB.html#CHAP_Source.DocumentDB.DataTypes
从这个文档中:https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Elasticsearch.html 我看到 Elasticsearch 不支持“LOB”数据类型,这似乎是我面临的问题的症结所在。这很愚蠢,最后我似乎无法迁移像“lastName”和“firstName”这样的字段,这些字段实际上根本不是大对象。
仍在挖掘中,感谢任何帮助。
解决方法
想通了,不管答案多么令人失望。
从该文档中,我看到 documentDb 中的字符串和数组在 AWS DMS 中被视为“CLOB”:https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.DocumentDB.html#CHAP_Source.DocumentDB.DataTypes
从这个文档中:https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Elasticsearch.html 我看到 Elasticsearch 不支持“LOB”数据类型,这似乎是我面临的问题的症结所在。
您可以通过将此转换放入任务来迁移字段:
{
"rule-type": "transformation","rule-id": "3","rule-name": "3","rule-target": "column","object-locator": {
"schema-name": "%","table-name": "%","column-name": "%","data-type": "clob"
},"rule-action": "change-data-type","data-type": {
"type": "string","length": 50
}
}
这适用于字符串字段,但是,由于 documentDb 阅读器也将数组视为“clob”数据类型,因此数组内容也被字符串化。虽然这可能适用于某些用例,但我因为这个问题放弃了 DMS,只写了我自己的迁移器(这花了更少的时间,但我希望 DMS 的自动管理很好,哦,好吧。)
总而言之,您必须在 documentDb 端点配置中使用 table
元数据类型,并且还需要为 _id
字段添加映射,如下所示:
{
"rule-type": "transformation","rule-id": "1","rule-name": "1","column-name": "_id"
},"rule-action": "add-prefix","value": "old","old-value": null
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。