AWS DMS - DocumentDB > ElasticSearch - 获取主键字符串时出错
AWS DMS - DocumentDB > ElasticSearch - Error Getting Primary Key String
我正在使用 DMS 定期将所有数据从 DocumentDB 迁移到 elasticSearch 集群。
当我 运行 任务时,一些 table 会正常迁移到 ElasticSearch 而在一些我会出错。
对于每个发出错误的 table,我都会收到两个错误:
[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”table 中的示例文档:
{"_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 端点中的“元数据模式”从之前的“文档”更改为“table”,将 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 reader 也将数组视为“clob”数据类型,因此数组内容也被字符串化。虽然这可能适用于某些用例,但由于这个问题我已经放弃了 DMS,只是编写了我自己的迁移器(这花费了更少的时间,但我曾希望 DMS 的自动管理功能,哦,好吧。)
回顾一下,您必须在 documentDb 端点配置中使用 table
元数据类型,还需要为 _id
字段添加映射,如下所示:
{
"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
}
我正在使用 DMS 定期将所有数据从 DocumentDB 迁移到 elasticSearch 集群。
当我 运行 任务时,一些 table 会正常迁移到 ElasticSearch 而在一些我会出错。
对于每个发出错误的 table,我都会收到两个错误:
[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”table 中的示例文档:
{"_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 端点中的“元数据模式”从之前的“文档”更改为“table”,将 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 reader 也将数组视为“clob”数据类型,因此数组内容也被字符串化。虽然这可能适用于某些用例,但由于这个问题我已经放弃了 DMS,只是编写了我自己的迁移器(这花费了更少的时间,但我曾希望 DMS 的自动管理功能,哦,好吧。)
回顾一下,您必须在 documentDb 端点配置中使用 table
元数据类型,还需要为 _id
字段添加映射,如下所示:
{
"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
}