

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Gremlin ロードデータ形式
<a name="bulk-load-tutorial-format-gremlin"></a>

Apache TinkerPop Gremlin データを CSV 形式を使用してロードするには、頂点とエッジを別々のファイルで指定する必要があります。

ローダーは、単一のロードジョブで複数の頂点ファイルおよび複数のエッジファイルからロードできます。

各ロードコマンドは、ロードされる一連のファイルと同じ Amazon S3 バケットのフォルダにある必要があり、`source` パラメータにフォルダ名を指定します。このファイル名とファイル名拡張子は重要ではありません。

Amazon Neptune CSV 形式は RFC 4180 の CSV の仕様に従います。詳細については、Internet Engineering Task Force (IETF) ウェブサイトの、[CSV ファイルの一般形式と MIME タイプ](https://tools.ietf.org/html/rfc4180)を参照してください。

**注記**  
すべてのファイルは、UTF-8 形式でエンコードする必要があります。

各ファイルには、カンマ区切りのヘッダー行があります。ヘッダー行は、システム列ヘッダーとプロパティ列ヘッダーの両方で構成されます。

## システム列ヘッダー
<a name="bulk-load-tutorial-format-gremlin-systemheaders"></a>

頂点ファイルとエッジファイルでは、必須および許可されたシステム列ヘッダーが異なります。

各システム列は、ヘッダーに 1 回のみ表示できます。

すべてのラベルで大文字と小文字が区別されます。

**頂点ヘッダー**
+ `~id` – **必須**

  頂点の ID。
+ `~label`

  頂点のラベル。複数のラベル値を使用できます。セミコロン (`;`) で区切ります。

  `~label` が存在しない場合、TinkerPop は値 `vertex` のラベルを提供します。これは、すべての頂点に少なくとも 1 つのラベルが必要なためです。

**エッジヘッダー**
+ `~id` – **必須**

  エッジの ID。
+ `~from` – **必須**

  *from* 頂点の頂点 ID。
+ `~to` – **必須**

  *to* 頂点の頂点 ID。
+ `~label`

  エッジのラベル。エッジには 1 つのラベルのみを含めることができます。

  `~label` が存在しない場合、TinkerPop は値 `edge` のラベルを提供します。これは、すべてのエッジにラベルが必要なためです。

## プロパティ列ヘッダー
<a name="bulk-load-tutorial-format-gremlin-propheaders"></a>

次の構文を使用して、プロパティ列 (`:`) を指定できます。タイプ名では大文字と小文字が区別されません。ただし、プロパティ名内にコロンがある場合は、次のように、その前にバックスラッシュを付けてエスケープする必要があります。`\:`。

```
propertyname:type
```

**注記**  
列ヘッダーでは、スペース、カンマ、キャリッジリターン、改行文字は使用できません。そのため、プロパティ名にこれらの文字を使用することはできません。

タイプに `[]` を追加することで、配列型の列を指定できます。

```
propertyname:type[]
```

**注記**  
エッジのプロパティに指定できるのは 1 つの値のみです。配列型が指定された場合や 2 つ目の値が指定された場合はエラーが発生します。

次の例は、`Int` 型の `age` という名前のプロパティの列ヘッダーを示しています。

```
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 (または Boolean)**  
ブールフィールドであることを示しています。許可された値: `false`、`true`

**注記**  
`true` 以外の値は false として扱われます。

**整数型**  
定義された範囲外の値の場合、エラーが発生します。


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

**10 進数型**  
指数表記または 10 進表記の両方をサポートしています。また、(\$1/-) INFINITY や NaN などの記号も使用できます。INF はサポートされていません。


| 
| 
| タイプ | Range | 
| --- |--- |
| Float | 32-bit IEEE 754 floating point | 
| Double | 64-bit IEEE 754 floating point | 

長すぎる浮動小数点数や倍精度浮動小数点数の値は、24 ビット (浮動小数点数) および 53 ビット (倍精度浮動小数点数) の精度で最も近い値にロードされ、丸められます。中間の値は、ビットレベルの最後の残りの桁で 0 に丸められます。

**String**  
引用符はオプションです。カンマ、改行、およびキャリッジリターン文字は、二重引用符 (`"`) で囲まれた文字列に含まれると自動的にエスケープされます。*例*: `"Hello, World"`

引用符で囲まれた文字列に引用符を含めるには、行内で 2 つ使用して引用符をエスケープします。*例 :* `"Hello ""World"""`

文字列の配列は許可されますが、バックスラッシュを使用してエスケープされないり限配列内の文字列にはセミコロン (`;`) 文字を含めることはできません (次のように:`\;`)。

配列内の文字列を引用符で囲む場合は、配列全体を 1 組の引用符で囲む必要があります。*例*: `"String one; String 2; String 3"`

**日付**  
ISO-8601 形式の Java の日付。`yyyy-MM-dd`、`yyyy-MM-ddTHH:mm`、`yyyy-MM-ddTHH:mm:ss`、`yyyy-MM-ddTHH:mm:ssZ` の形式がサポートされています。値はエポック時間に変換され、保存されます。

**Datetime**  
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 の両方のスタイルの行末処理がサポートされています (\$1n または \$1r\$1n)。
+ フィールドはすべて引用符で囲むことができます (二重引用符を使用)。
+ 改行、二重引用符、またはカンマを含むフィールドは、引用符で囲む必要があります。(そうでない場合、ロードは即座に中止されます)。
+ フィールド内の二重引用符文字 (`"`) は、2 つの二重引用符文字で示す必要があります。たとえば、データ内で、文字列 `Hello "World"` は、`"Hello ""World"""` であることが必要です。
+ 区切り記号間のスペースは無視されます。行が `value1, value2` である場合は、`"value1"` および `"value2"` として保存されます。
+ その他のエスケープ文字はすべてそのまま保存されます。たとえば、`"data1\tdata2"` であれば `"data1\tdata2"` として保存されます。これらの文字が引用符で囲まれている場合、これ以上エスケープする必要はありません。
+ 空のフィールドは許可されます。空白のフィールドは空の値と見なされます。
+ フィールドの複数の値は、値と値の間にセミコロン (`;`) を使用して指定します。

詳細については、Internet Engineering Task Force (IETF) ウェブサイトの、[CSV ファイルの一般形式と MIME タイプ](https://tools.ietf.org/html/rfc4180)を参照してください。

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

次の図の例では、TinkerPop 最新グラフから取得した 2 つの頂点と、エッジの例を示しています。

![\[2 つの頂点と 1 つのエッジを描いた図には、marko 29 歳と、lop ソフトウェア Java 言語が含まれています。\]](http://docs.aws.amazon.com/ja_jp/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
```

頂点ファイルの表形式のビュー:

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

エッジファイル:

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

エッジファイルの表形式のビュー:

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

**次のステップ**  
次に、ロード形式の詳細については、[例: Neptune DB インスタンスにデータをロードする](bulk-load-data.md) を参照してください。