

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

# Gremlin 로드 데이터 형식
<a name="bulk-load-tutorial-format-gremlin"></a>

CSV 형식으로 Apache TinkerPop Gremlin 데이터를 로드하려면 별도 파일에 버텍스와 엣지를 지정해야 합니다.

로더는 로드 작업 한 번으로 여러 Vertex 파일과 여러 엣지 파일을 로드할 수 있습니다.

각 로드 명령의 경우 로드할 파일 세트가 Amazon S3 버킷과 동일 폴더에 있어야 하며, `source` 파라미터의 폴더 이름을 지정합니다. 파일 이름과 파일 이름 확장자는 중요하지 않습니다.

Amazon Neptune CSV 형식은 RFC 4180 CSV 사양을 따릅니다. 자세한 내용은 IETF(국제 인터넷 표준화 기구) 웹사이트의 [CSV 파일의 공통 형식 및 MIME 유형](https://tools.ietf.org/html/rfc4180)을 참조하십시오.

**참고**  
모든 파일은 UTF-8 형식으로 인코딩되어야 합니다.

각 파일마다 쉼표로 분리된 헤더 행이 있습니다. 헤더 행은 시스템 열 헤더와 속성 열 헤더로 구성됩니다.

## 시스템 열 헤더
<a name="bulk-load-tutorial-format-gremlin-systemheaders"></a>

버텍스 파일과 엣지 파일의 필수 및 허용되는 시스템 열 헤더가 다릅니다.

각 시스템 열을 헤더에 한 번만 표시할 수 있습니다.

모든 레이블은 대/소문자를 구분합니다.

**버텍스 헤더**
+ `~id` - **필수**

  버텍스 ID.
+ `~label`

  버텍스 레이블. 세미콜론(`;`)으로 구분된 여러 레이블 값을 사용할 수 있습니다.

  `~label`이 없으면 TinkerPop은 `vertex` 값이 포함된 레이블을 제공합니다. 모든 버텍스에는 적어도 하나의 레이블이 있어야 하기 때문입니다.

**엣지 헤더**
+ `~id` - **필수**

  엣지 ID.
+ `~from` - **필수**

  *from* 버텍스의 버텍스 ID.
+ `~to` - **필수**

  *to* 버텍스의 버텍스 ID.
+ `~label`

  엣지의 레이블. 엣지에는 단일 레이블만 포함될 수 있습니다.

  `~label`이 없으면 TinkerPop은 `edge` 값이 포함된 레이블을 제공합니다. 모든 엣지에는 하나의 레이블이 있어야 하기 때문입니다.

## 속성 열 헤더
<a name="bulk-load-tutorial-format-gremlin-propheaders"></a>

다음 구문을 사용하여 속성 열(`:`)을 지정할 수 있습니다. 유형 이름은 대/소문자를 구분하지 않습니다. 단, 속성 이름 내에 콜론이 나타나면 앞에 백슬래시(`\:`)를 붙여 이스케이프 처리해야 합니다.

```
{{propertyname}}:{{type}}
```

**참고**  
열 헤더에는 공백, 쉼표, 캐리지 리턴 및 줄 바꿈 문자가 허용되지 않으므로 속성 이름에 이러한 문자를 포함할 수 없습니다.

유형에 `[]`를 추가하여 어레이 유형의 열을 지정할 수 있습니다.

```
{{propertyname}}:{{type}}[]
```

**참고**  
엣지 속성은 단일 값만 가질 수 있으며 배열 유형이 지정되거나 두 번째 값이 지정되면 오류가 발생합니다.

다음 예는 이름이 `age`인 `Int` 형식 속성의 열 헤더를 보여줍니다.

```
age:Int
```

파일의 각 행마다 해당 위치에 정수가 있거나 비어 있어야 합니다.

문자열 배열은 허용되지만, 다음과 같이 백슬래시(`\;`)를 사용하여 이스케이프하지 않는 한 배열의 문자열에는 세미콜론(`;`) 문자를 포함할 수 없습니다.

**열 카디널리티 지정**

열 헤더는 열로 식별되는 속성에 대한 *카디널리티*를 지정하는 데 사용될 수 있습니다. 이를 통해 벌크 로더가 Gremlin 쿼리 작업 방식과 유사하게 카디널리티를 적용할 수 있습니다.

열의 카디널리티를 지정하는 방식은 다음과 같습니다.

```
{{propertyname}}:{{type}}({{cardinality}})
```

{{카디널리티}} 값은 `single` 또는 `set`이 될 수 있습니다. 기본값은 `set`이 될 것이며, 이는 열에 여러 값을 적용할 수 있음을 의미합니다. 엣지 파일의 경우 카디널리티는 항상 하나뿐이며 다른 카디널리티를 지정하면 로더에서 예외가 발생합니다.

카디널리티가 `single`이면 값이 로드될 때 이전 값이 이미 있거나 여러 값이 로드되는 경우 로더에서 오류가 발생합니다. 이러한 동작은 `updateSingleCardinalityProperties` 플래그를 사용하여 새 값을 로드할 때 기존 값이 대체되도록 재정의될 수 있습니다. [로더 명령](load-api-reference-load.md)을(를) 참조하세요.

일반적으로 필요한 경우는 아니지만 카디널리티 설정을 어레이 유형과 함께 사용할 수 있습니다. 가능한 조합은 다음과 같습니다.
+ `name:type`   –   카디널리티가 `set`이고, 콘텐츠가 단일 값입니다.
+ `name:type[]`   –   카디널리티가 `set`이고, 콘텐츠가 복수 값입니다.
+ `name:type(single)`   –   카디널리티가 `single`이고, 콘텐츠가 단일 값입니다.
+ `name:type(set)`   –   카디널리티가 기본값과 동일한 `set`이고, 콘텐츠가 단일 값입니다.
+ `name:type(set)[]`   –   카디널리티가 `set`이고, 콘텐츠가 복수 값입니다.
+ `name:type(single)[]`   –   이는 서로 맞지 않아서 오류가 발생합니다.

다음 단원에는 사용 가능한 모든 Gremlin 데이터 유형이 나옵니다.

## Gremlin 데이터 유형
<a name="bulk-load-tutorial-format-gremlin-datatypes"></a>

이것은 허용되는 속성 유형 목록과 각 유형의 설명입니다.

**Bool(또는 부울)**  
부울 필드를 나타냅니다. 허용된 값: `false`, `true` 

**참고**  
`true` 이외의 값은 false로 처리됩니다.

**정수 유형**  
정의된 범위를 벗어난 값은 오류를 야기합니다.


| 
| 
| Type | Range | 
| --- |--- |
| Byte | -128 to 127 | 
| Short | -32768 to 32767 | 
| Int | -2^31 to 2^31-1 | 
| Long | -2^63 to 2^63-1 | 

**십진수 유형**  
십진 기수법 또는 과학적 기수법 모두 지원됩니다. (\+/-) Infinity 또는 NaN 같은 기호도 허용됩니다. INF는 지원되지 않습니다.


| 
| 
| Type | Range | 
| --- |--- |
| Float | 32-bit IEEE 754 floating point | 
| Double | 64-bit IEEE 754 floating point | 

너무 긴 부동 소수점과 이중 값은 로드되어 24비트(부동 소수점)와 53비트(이중 값) 정확도를 위해 근사치로 반올림됩니다. 비트 수준에서 마지막으로 남은 숫자는 중간 값을 0으로 반올림합니다.

**문자열**  
인용 부호는 선택사항입니다. 쉼표, 줄 바꿈 및 캐리지 리턴 문자가 큰 따옴표(`"`)로 묶인 문자열에 포함된 경우에는 자동으로 이스케이프됩니다. *예*: `"Hello, World"`

인용된 문자열에 인용 부호를 포함하려면 한 행에 두 개를 사용하여 인용 부호를 이스케이프할 수 있습니다(*예:* `"Hello ""World"""`).

문자열 배열은 허용되지만, 다음과 같이 백슬래시(`\;`)를 사용하여 이스케이프하지 않는 한 배열의 문자열에는 세미콜론(`;`) 문자를 포함할 수 없습니다.

어레이 안의 문자열을 인용 부호로 묶으려면 전체 어레이를 한 세트의 인용 부호로 묶어야 합니다. *예*: `"String one; String 2; String 3"`

**Date**  
ISO-8601 형식의 Java 날짜. 지원되는 형식은 `yyyy-MM-dd` ,`yyyy-MM-ddTHH:mm` ,`yyyy-MM-ddTHH:mm:ss` ,`yyyy-MM-ddTHH:mm:ssZ`입니다. 값은 에포크 시간으로 변환되어 저장됩니다.

**날짜시간**  
ISO-8601 형식의 Java 날짜. 지원되는 형식은 `yyyy-MM-dd` ,`yyyy-MM-ddTHH:mm` ,`yyyy-MM-ddTHH:mm:ss` ,`yyyy-MM-ddTHH:mm:ssZ`입니다. 값은 에포크 시간으로 변환되어 저장됩니다.

## Gremlin 행 형식
<a name="bulk-load-tutorial-format-gremlin-rowformat"></a>

**구분 기호**  
행의 필드는 쉼표로 구분합니다. 기록은 줄 바꿈 또는 줄 바꿈 다음의 캐리지 리턴으로 구분합니다.

**빈 필드**  
빈 필드는 비-필수 열(예: 사용자 정의 속성)에 허용됩니다. 빈 필드도 쉼표 구분자가 필요합니다. 필수 열의 필드가 비어 있으면 구문 분석 오류가 발생합니다. 빈 문자열 값은 빈 필드가 아닌 필드의 빈 문자열 값으로 해석됩니다. 다음 단원의 예는 각 예제 버텍스마다 빈 필드가 있습니다.

**버텍스 ID**  
`~id` 값은 각 버텍스 파일의 모든 버텍스마다 고유해야 합니다. `~id` 값이 동일한 여러 버텍스 행은 그래프의 단일 버텍스에 적용됩니다. 빈 문자열(`""`)은 유효한 ID이며, 버텍스는 빈 문자열을 ID로 사용하여 생성됩니다.

**엣지 ID**  
그리고 `~id` 값은 각 엣지 파일의 모든 엣지마다 고유해야 합니다. `~id` 값이 동일한 여러 엣지 행은 그래프의 단일 엣지에 적용됩니다. 빈 문자열(`""`)은 유효한 ID이며 엣지는 빈 문자열을 ID로 사용하여 생성됩니다.

**레이블**  
레이블은 대/소문자를 구분하며 비워둘 수 없습니다. `""` 값은 오류를 발생시킵니다.

**문자열 값**  
인용 부호는 선택사항입니다. 쉼표, 줄 바꿈 및 캐리지 리턴 문자가 큰 따옴표(`"`)로 묶인 문자열에 포함된 경우에는 자동으로 이스케이프됩니다. 빈 문자열 값 `("")`은 필드의 빈 문자열 값으로 해석되며, 빈 필드로 해석되지 않습니다.

## CSV 형식 사양
<a name="bulk-load-tutorial-format-csv-info"></a>

Neptune CSV 형식은 다음 요건을 포함하여 RFC 4180 CSV 사양을 따릅니다.
+ Unix와 Windows 스타일 라인 엔딩이 지원됩니다(\\n 또는 \\r\\n).
+ 모든 필드에 따옴표를 붙일 수 있습니다(큰 따옴표 사용).
+ 줄 바꿈 문자, 큰 따옴표 또는 쉼표가 있는 필드는 따옴표를 붙여야 합니다. (안 그러면 로드가 즉시 중단됩니다.)
+ 필드의 큰 따옴표 문자(`"`)는 따옴표 문자 2개(큰 따옴표)로 표현해야 합니다. 예를 들어, 문자열 `Hello "World"`는 데이터에 `"Hello ""World"""`로 표시되어야 합니다.
+ 구분 문자 사이의 공백은 무시됩니다. `value1, value2`로 행이 존재하는 경우, `"value1"` 및 `"value2"`로 저장됩니다.
+ 기타 이스케이프 문자는 축자로 저장됩니다. 예를 들어, `"data1\tdata2"`은 `"data1\tdata2"`로 저장됩니다. 이러한 문자가 인용 부호 안에 들어 있을 때는 이스케이핑이 필요 없습니다.
+ 빈 필드가 허용됩니다. 빈 필드는 빈 값으로 간주됩니다.
+ 필드의 여러 값은 값 사이에 세미콜론(`;`)으로 지정됩니다.

자세한 내용은 IETF(국제 인터넷 표준화 기구) 웹사이트의 [CSV 파일의 공통 형식 및 MIME 유형](https://tools.ietf.org/html/rfc4180)을 참조하십시오.

## Gremlin 예제
<a name="bulk-load-tutorial-format-gremlin-example"></a>

다음 그림은 TinkerPop Modern Graph에서 가져온 꼭짓점 2개와 엣지의 예입니다.

![버텍스 2개와 엣지를 묘사한 그림에 marko 나이 29와 lang: java를 사용하는 lop 소프트웨어가 포함되어 있습니다.](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/images/tiny-modern-graph.png)


다음은 Neptune CSV 로드 형식의 그래프입니다.

버텍스 파일:

```
~id,name:String,age:Int,lang:String,interests:String[],~label
v1,"marko",29,,"sailing;graphs",person
v2,"lop",,"java",,software
```

버텍스 파일의 테이블 형식 보기:

|  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |
| \~id | name:String | age:Int | lang:String | interests:String[] | \~label | 
| v1 | "marko" | 29 |  | ["sailing", "graphs"] | person | 
| v2 | "lop" |  | "java" |  | software | 

엣지 파일:

```
~id,~from,~to,~label,weight:Double
e1,v1,v2,created,0.4
```

엣지 파일의 테이블 형식 보기:

|  |  |  |  |  | 
| --- |--- |--- |--- |--- |
| \~id | \~from | \~to | \~label | weight:Double | 
| e1 | v1 | v2 | created | 0.4 | 

**다음 단계**  
로딩 형식에 대한 자세한 내용은 [예제: Neptune DB 인스턴스에 데이터 로드](bulk-load-data.md) 단원을 참조하십시오.