本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
验证数据映射
数据被复制到OpenSearch来自 Neptune 使用这个过程:
-
如果中已经存在有问题字段的映射OpenSearch:
如果可以使用数据验证规则将数据安全转换为现有映射,则将字段存储在OpenSearch.
如果没有,请删除相应的直播更新记录。
-
如果有问题的字段没有现有的映射,请查找OpenSearch与 Neptune 中字段的数据类型对应的数据类型。
如果可以安全地将字段数据转换为OpenSearch使用数据验证规则进行 datatype,然后将新的映射和字段数据存储在OpenSearch.
如果没有,请删除相应的直播更新记录。
对等价值进行验证OpenSearch类型或现有OpenSearch映射而不是 Neptune 类型。例如,验证值"123"
在"123"^^xsd:int
完成对long
键入而不是int
。
尽管 Neptune 尝试将所有数据复制到OpenSearch,在某些情况下,数据类型OpenSearch与 Neptune 中的完全不同,在这种情况下,记录被跳过而不是编入索引OpenSearch.
例如,在 Neptune 中,一个属性可以有多个不同类型的值,而在OpenSearch整个索引中的字段必须具有相同的类型。
通过启用调试日志,您可以查看从 Neptune 导出到的过程中丢弃的记录OpenSearch. 调试日志条目的示例是:
Dropping Record : Data type not a valid Gremlin type <Record>
按如下所示验证数据类型:
-
text
— Neptune 中的所有值都可以安全地映射到OpenSearch. -
long
— Neptune 数据类型的以下规则适用于OpenSearch映射类型很长(在下面的示例中,假设"testLong"
有long
映射类型):-
boolean
— 无效,无法转换,相应的直播更新记录将被删除。无效的 Gremlin 示例有:
"testLong" : true. "testLong" : false.
无效的 SPARQL 示例有:
":testLong" : "true"^^xsd:boolean ":testLong" : "false"^^xsd:boolean
-
datetime
— 无效,无法转换,相应的直播更新记录将被删除。一个无效的 Gremlin 示例是:
":testLong" : datetime('2018-11-04T00:00:00').
一个无效的 SPARQL 示例是:
":testLong" : "2016-01-01"^^xsd:date
-
float
、double
,或者decimal
— 如果 Neptune 中的值是一个可以容纳 64 位的整数,则该值是有效的并存储在OpenSearch作为一个长期,但是如果它有小数部分,或者是NaN
或者INF
,或者大于 9,223,854,775,808 或小于 -9,223,854,775,808 中的数据流更新记录无效,相应的流更新记录将被删除。有效的 Gremlin 示例包括:
"testLong" : 145.0. ":testLong" : 123 ":testLong" : -9223372036854775807
有效的 SPARQL 示例包括:
":testLong" : "145.0"^^xsd:float ":testLong" : 145.0 ":testLong" : "145.0"^^xsd:double ":testLong" : "145.0"^^xsd:decimal ":testLong" : "-9223372036854775807"
无效的 Gremlin 示例有:
"testLong" : 123.45 ":testLong" : 9223372036854775900
无效的 SPARQL 示例有:
":testLong" : 123.45 ":testLong" : 9223372036854775900 ":testLong" : "123.45"^^xsd:float ":testLong" : "123.45"^^xsd:double ":testLong" : "123.45"^^xsd:decimal
-
string
— 如果 Neptune 中的值是一个可以包含在 64 位整数中的整数的字符串表示形式,那么它是有效的并被转换为long
在OpenSearch. 任何其他字符串值对 Elasticse搜索无效long
映射,相应的流更新记录将被删除。有效的 Gremlin 示例包括:
"testLong" : "123". ":testLong" : "145.0" ":testLong" : "-9223372036854775807"
有效的 SPARQL 示例包括:
":testLong" : "145.0"^^xsd:string ":testLong" : "-9223372036854775807"^^xsd:string
无效的 Gremlin 示例有:
"testLong" : "123.45" ":testLong" : "9223372036854775900" ":testLong" : "abc"
无效的 SPARQL 示例有:
":testLong" : "123.45"^^xsd:string ":testLong" : "abc" ":testLong" : "9223372036854775900"^^xsd:string
-
-
double
— 如果OpenSearch映射类型是double
,以下规则适用(这里,假设 “testDouble” 字段有一个double
映射中OpenSearch):-
boolean
— 无效,无法转换,相应的直播更新记录将被删除。无效的 Gremlin 示例有:
"testDouble" : true. "testDouble" : false.
无效的 SPARQL 示例有:
":testDouble" : "true"^^xsd:boolean ":testDouble" : "false"^^xsd:boolean
-
datetime
— 无效,无法转换,相应的直播更新记录将被删除。一个无效的 Gremlin 示例是:
":testDouble" : datetime('2018-11-04T00:00:00').
一个无效的 SPARQL 示例是:
":testDouble" : "2016-01-01"^^xsd:date
-
浮点数
NaN
要么INF
— 如果 SPARQL 中的值是浮点NaN
要么INF
,那么它无效,相应的流更新记录将被删除。无效的 SPARQL 示例有:
" :testDouble" : "NaN"^^xsd:float ":testDouble" : "NaN"^^double ":testDouble" : "INF"^^double ":testDouble" : "-INF"^^double
-
数字或数字字符串 — 如果 Neptune 中的值是可以安全地表示为数字的任何其他数字或数字字符串表示形式
double
,那么它是有效的并且被转换为double
在OpenSearch. 任何其他字符串值对于OpenSearchdouble
映射,相应的流更新记录将被删除。有效的 Gremlin 示例包括:
"testDouble" : 123 ":testDouble" : "123" ":testDouble" : 145.67 ":testDouble" : "145.67"
有效的 SPARQL 示例包括:
":testDouble" : 123.45 ":testDouble" : 145.0 ":testDouble" : "123.45"^^xsd:float ":testDouble" : "123.45"^^xsd:double ":testDouble" : "123.45"^^xsd:decimal ":testDouble" : "123.45"^^xsd:string
一个无效的 Gremlin 示例是:
":testDouble" : "abc"
无效的 SPARQL 示例是:
":testDouble" : "abc"
-
-
date
— 如果OpenSearch映射类型是date
, Neptunedate
和dateTime
value 是有效的,任何可以成功解析为dateTime
格式的日期和时间。Gremlin 或 SPARQL 中的有效示例是:
Date(2016-01-01) "2016-01-01" " 2003-09-25T10:49:41" "2003-09-25T10:49" "2003-09-25T10" "20030925T104941-0300" "20030925T104941" "2003-Sep-25" " Sep-25-2003" "2003.Sep.25" "2003/09/25" "2003 Sep 25" " Wed, July 10, '96" "Tuesday, April 12, 1952 AD 3:30:42pm PST" "123" "-123" "0" "-0" "123.00" "-123.00"
无效的例子有:
123.45 True "abc"