

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Gremlin 載入資料格式
<a name="bulk-load-tutorial-format-gremlin"></a>

若要使用 CSV 格式載入 Apache TinkerPop Gremlin 資料，您必須在單獨的檔案中指定點和邊。

載入器可在單一載入工作中，從多點和多邊檔案進行載入。

對於每個載入命令，要載入的檔案集在 Amazon S3 儲存貯體中必須位於同一資料夾，而且您會為 `source` 參數指定資料夾名稱。檔案名稱和副檔名不重要。

Amazon Neptune CSV 格式遵循 RFC 4180 CSV 規格。如需詳細資訊，請參閱 Internet Engineering Task Force (IETF) 網站上的 [Common Format and MIME Type for CSV Files](https://tools.ietf.org/html/rfc4180) (CSV 檔案的常見格式與 MIME 類型)。

**注意**  
所有檔案都必須以 UTF-8 格式編碼。

每個檔案都有以逗號分隔的標頭資料列。此標頭資料列包含系統欄標題和屬性欄標頭。

## 系統欄標題
<a name="bulk-load-tutorial-format-gremlin-systemheaders"></a>

頂點檔案和邊緣檔案的必要和允許的系統欄標頭是不同的。

每個系統欄只能在標頭中出現一次。

所有標籤皆區分大小寫。

**頂點標頭**
+ `~id` - **必要**

  頂點的 ID。
+ `~label`

  頂點的標籤。允許多個標籤值，以分號 (`;`) 分隔。

  如果 `~label` 不存在，TinkerPop 會提供值為 `vertex` 的標籤，因為每個頂點必須至少有一個標籤。

**邊緣標頭**
+ `~id` - **必要**

  邊緣的 ID。
+ `~from` - **必要**

  *從*頂點的頂點 ID。
+ `~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>

這是一個允許的屬性類型清單及每個類型的描述。

**布林 (或布林值)**  
表示布林值欄位。允許的值：`false`、`true`

**注意**  
所有 `true` 以外的值會被視為 false。

**整數類型**  
超出定義範圍的值將導致錯誤。


| 
| 
| Type | 範圍 | 
| --- |--- |
| 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 | 範圍 | 
| --- |--- |
| Float | 32-bit IEEE 754 floating point | 
| Double | 64-bit IEEE 754 floating point | 

浮點數和雙精確度值過長，將四捨五入到最接近 24 位元 (float) 和 53 位元 (double) 精確度的值並載入。位元層級的剩餘數中段值將四捨五入為 0。

**String**  
引號是選用的。逗號、新行及換行字元如果包含在由雙引號 (`"`) 包圍的字串中，將會自動逸出。*範例*：`"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`。這些值會轉換為 epoch 時間並儲存。

**日期時間**  
ISO-8601 格式的 Java 資料。支援下列格式：`yyyy-MM-dd`、`yyyy-MM-ddTHH:mm`、`yyyy-MM-ddTHH:mm:ss`、`yyyy-MM-ddTHH:mm:ssZ`。這些值會轉換為 epoch 時間並儲存。

## 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)。
+ 任何欄位皆可使用引號 (使用雙引號)。
+ 內含分行符號、雙引號或逗號的欄位必須加上引號。(否則，將立即中止載入。)
+ 欄位中的雙引號字元 (`"`) 必須由兩個 (雙) 引號字元呈現。例如，`Hello "World"` 字串在資料中必須以 `"Hello ""World"""` 呈現。
+ 分隔符號前後的空格將被忽略。如果資料列顯示為 `value1, value2`，則會將其儲存為 `"value1"`和 `"value2"`。
+ 任何其他逸出字元將逐字儲存。例如，`"data1\tdata2"` 將儲存為 `"data1\tdata2"`。這些字元只要括在引號中，就不需要逸出。
+ 允許空白欄位。空白欄位會視為空的值。
+ 欄位中的多個值可在值之間使用分號 (`;`) 加以指定。

如需詳細資訊，請參閱 Internet Engineering Task Force (IETF) 網站上的 [Common Format and MIME Type for CSV Files](https://tools.ietf.org/html/rfc4180) (CSV 檔案的常見格式與 MIME 類型)。

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

下圖顯示取自 TinkerPop Modern Graph 包含兩個頂點及一個邊緣的範例。

![圖表描述兩個頂點及一個邊緣，包含 marko 29 歲及 lop 軟體與 lang:java。](http://docs.aws.amazon.com/zh_tw/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 資料庫執行個體](bulk-load-data.md)。