

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 데이터 매핑 검증
<a name="full-text-search-data-validation"></a>



데이터는 다음 프로세스를 사용하여 Neptune에서 OpenSearch로 복제됩니다.
+ 해당 필드에 대한 매핑이 OpenSearch에 이미 있는 경우:
  + 데이터 검증 규칙을 사용하여 데이터를 기존 매핑으로 안전하게 변환할 수 있는 경우 해당 필드를 OpenSearch에 저장하세요.
  + 그렇지 않은 경우 해당 스트림 업데이트 레코드를 삭제합니다.
+ 해당 필드에 대한 기존 매핑이 없는 경우 Neptune에서 필드의 데이터 유형에 해당하는 OpenSearch 데이터 유형을 찾습니다.
  + 데이터 검증 규칙을 사용하여 필드 데이터를 OpenSearch 데이터 유형으로 안전하게 변환할 수 있는 경우 새로운 매핑과 필드 데이터를 OpenSearch에 저장하세요.
  + 그렇지 않은 경우 해당 스트림 업데이트 레코드를 삭제합니다.

값은 Neptune 유형이 아닌 동일한 OpenSearch 유형이나 기존 OpenSearch 매핑을 기준으로 검증됩니다. 예를 들어, `"123"^^xsd:int`의 값 `"123"`에 대한 검증은 `int` 유형이 아닌 `long` 유형을 기준으로 이루어집니다.

Neptune은 모든 데이터를 OpenSearch에 복제하려고 시도하지만, OpenSearch의 데이터 유형이 Neptune의 데이터 유형과 완전히 다른 경우가 있습니다. 이런 상황에서는 OpenSearch에서 레코드를 인덱싱하지 않고 건너뛰기도 합니다.

예를 들어, Neptune에서는 한 속성에 유형이 다른 여러 값이 있을 수 있지만, OpenSearch의 필드는 인덱스 전체에서 유형이 같아야 합니다.

디버그 로그를 활성화하면 Neptune에서 OpenSearch로 내보내는 동안 삭제된 레코드를 볼 수 있습니다. 디버그 로그 항목의 예는 다음과 같습니다.

```
Dropping Record : Data type not a valid Gremlin type 
<Record>
```

데이터 유형은 다음과 같이 검증됩니다.
+ **`text`**   –   Neptune의 모든 값을 OpenSearch의 텍스트에 안전하게 매핑할 수 있습니다.
+ **`long`**   –   OpenSearch 매핑 유형이 긴 경우 Neptune 데이터 유형에 대한 다음 규칙이 적용됩니다(아래 예에서는 `"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에 long으로 저장됩니다. 그러나 소수 부분이 있거나, `NaN` 또는 `INF`이거나, 9,223,372,036,854,775,807보다 크거나, -9,223,372,036,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비트 정수에 포함될 수 있는 정수의 문자열 표현인 경우 유효하며 OpenSearch에서 `long`으로 변환됩니다. 다른 모든 문자열 값은 Elasticseearch `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`인 경우 다음 규칙이 적용됩니다(여기서는 OpenSearch에서 'testDouble' 필드에 `double` 매핑이 있는 것으로 가정).
  + `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`로 안전하게 표현할 수 있는 숫자의 숫자 문자열 표현 또는 기타 숫자인 경우 유효하며, OpenSearch에서 `double`로 변환됩니다. 다른 모든 문자열 값은 OpenSearch `double` 매핑에 사용할 수 없으며, 해당 스트림 업데이트 레코드는 삭제됩니다.

    유효한 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`인 경우 Neptune `date` 및 `dateTime` 값이 유효하며, `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"
  ```