

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

# Neptune 스트림의 직렬화 형식
<a name="streams-change-formats"></a>

Amazon Neptune은 그래프가 생성되는 데 Gremlin을 사용했는지, 아니면 SPARQL을 사용했는지에 따라 스트림 로깅을 위한 그래프-변경 데이터를 직렬화하고자 두 형식을 사용합니다.

[Neptune 스트림 API 응답 형식](streams-using-api-reponse.md)에 설명된 대로 두 형식 모두 다음 필드를 포함하는 공통 레코드 직렬화 형식을 공유합니다.
+ `commitTimestamp`   –   트랜잭션에 대한 커밋이 요청된 시점입니다(Unix epoch의 밀리초).
+ `eventId`   –   스트림 변경 레코드의 시퀀스 식별자입니다.
+ `data`   –   직렬화된 Gremlin, SPARQL 또는 openCypher 변경 레코드입니다. 각 레코드의 직렬화된 형식은 다음 섹션에 자세히 설명되어 있습니다.
+ `op`   –   변경을 일으킨 작업입니다.

**Topics**
+ [PG\$1JSON 변경 직렬화 형식](#streams-change-formats-gremlin)
+ [SPARQL NQUADS 변경 직렬화 형식](#streams-change-formats-sparql)

## PG\$1JSON 변경 직렬화 형식
<a name="streams-change-formats-gremlin"></a>

**참고**  
Gremlin 스트림 엔드포인트(`GREMLIN_JSON`)의 Gremlin 스트림 출력 형식(`https://Neptune-DNS:8182/gremlin/stream`) 출력은 더 이상 사용되지 않습니다. 이는 현재 `GREMLIN_JSON`과 동일한 PG\$1JSON으로 대체되었습니다.

로그 스트림 응답의 `data` 필드에 포함된 Gremlin 또는 openCypher 변경 레코드에는 다음 필드가 포함되어 있습니다.
+ `id` – 문자열(필수).

  Gremlin 또는 openCypher 요소의 ID입니다.
+ `type` – 문자열(필수).

  Gremlin 또는 openCypher 요소의 유형입니다. 다음 중 하나여야 합니다.
  + `vl`   –   Gremlin의 경우 버텍스 레이블, openCypher의 경우 노드 레이블.
  + `vp`   –   Gremlin의 경우 버텍스 속성, openCypher의 경우 노드 속성.
  + `e`   –   Gremlin의 경우 엣지 및 엣지 레이블, openCypher의 경우 관계 및 관계 유형.
  + `ep`   –   Gremlin의 경우 엣지 속성, openCypher의 경우 관계 속성.
+ `key` – 문자열(필수).

  속성 이름입니다. 요소 레이블에서 속성 이름은 “label”입니다.
+ `value` – `value` 객체(필수).

  값 자체에 대한 `value` 필드와 이 값의 JSON 데이터 유형에 대한 `datatype` 필드를 포함하는 JSON 객체입니다.

  ```
    "value": {
      "value": "the new value",
      "dataType": "the JSON datatype of the new value"
    }
  ```
+ `from` – 문자열(선택 사항).

  이것이 엣지(type="e")일 경우, 해당되는 *소스* 버텍스 또는 소스 노드의 ID입니다.
+ `to` – 문자열(선택 사항).

  이것이 엣지(type="e")일 경우, 해당되는 *대상* 버텍스 또는 대상 노드의 ID입니다.

**Gremlin 예제**
+ 다음은 Gremlin 버텍스 레이블의 예제입니다.

  ```
  {
    "id": "an ID string",
    "type": "vl",
    "key": "label",
    "value": {
      "value": "the new value of the vertex label",
      "dataType": "String"
    }
  }
  ```
+ 다음은 Gremlin 버텍스 속성의 예제입니다.

  ```
  {
    "id": "an ID string",
    "type": "vp",
    "key": "the property name",
    "value": {
      "value": "the new value of the vertex property",
      "dataType": "the datatype of the vertex property"
    }
  }
  ```
+ 다음은 Gremlin 엣지의 예제입니다.

  ```
  {
    "id": "an ID string",
    "type": "e",
    "key": "label",
    "value": {
      "value": "the new value of the edge",
      "dataType": "String"
    },
    "from": "the ID of the corresponding "from" vertex",
    "to": "the ID of the corresponding "to" vertex"
  }
  ```

**openCypher 예제**
+ 다음은 openCypher 노드 레이블의 예제입니다.

  ```
  {
    "id": "an ID string",
    "type": "vl",
    "key": "label",
    "value": {
      "value": "the new value of the node label",
      "dataType": "String"
    }
  }
  ```
+ 다음은 openCypher 노드 속성의 예제입니다.

  ```
  {
    "id": "an ID string",
    "type": "vp",
    "key": "the property name",
    "value": {
      "value": "the new value of the node property",
      "dataType": "the datatype of the node property"
    }
  }
  ```
+ 다음은 openCypher 관계의 예제입니다.

  ```
  {
    "id": "an ID string",
    "type": "e",
    "key": "label",
    "value": {
      "value": "the new value of the relationship",
      "dataType": "String"
    },
    "from": "the ID of the corresponding source node",
    "to": "the ID of the corresponding target node"
  }
  ```

## SPARQL NQUADS 변경 직렬화 형식
<a name="streams-change-formats-sparql"></a>

Neptune은 [W3C RDF 1.1 N-Quads](https://www.w3.org/TR/n-quads/) 사양에 정의된 리소스 기술 프레임워크(RDF) `N-QUADS` 언어를 사용하여 그래프에서 SPARQL 쿼드에 대한 변경 사항을 로깅합니다.

변경 레코드의 `data` 필드에는 아래 예제에서와 같이 변경된 쿼드를 표현하는 N-QUADS 문이 저장된 `stmt` 필드가 포함되어 있습니다.

```
  "stmt" : "<https://test.com/s> <https://test.com/p> <https://test.com/o> .\n"
```