

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

# openCypher 資料的載入格式
<a name="bulk-load-tutorial-format-opencypher"></a>

若要使用 OpenCypher CSV 格式載入 openCypher 資料，您必須在個別的檔案中指定節點和關係。載入器可以在單一載入工作中從其中多個節點檔案和關係檔案載入。

對於每個載入命令，要載入的檔案集必須在 Amazon Simple Storage Service 儲存貯體中具有相同的路徑字首。您可以在 source 參數中指定該字首。實際檔案名稱和副檔名並不重要。

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

**注意**  
這些檔案必須以 UTF-8 格式編碼。

每個檔案都有一個以逗號分隔的標頭列，其中包含系統欄標頭和屬性欄標頭。

## openCypher 資料載入檔案中的系統欄標頭
<a name="bulk-load-tutorial-format-opencypher-system-headers"></a>

一個給定系統欄只能在每個檔案中出現一次。所有系統欄標頭標籤都會區分大小寫。

對於 OpenCypher 節點載入檔案和關係載入檔案，必要和允許的系統欄標頭有所不同：

### 節點檔案中的系統欄標頭
<a name="bulk-load-tutorial-format-opencypher-system-headers-nodes"></a>
+ **`:ID`**   –   (必要) 節點的 ID。

  選用的 ID 空間可以新增至節點 `:ID` 欄標頭，如下所示：`:ID(ID Space)`。例如，`:ID(movies)`。

  載入連線此檔案中節點的關係時，請在關係檔案 `:START_ID` 和/或 `:END_ID` 欄中使用相同的 ID 空間。

  節點 `:ID` 欄可以選擇性地儲存為屬性，格式為 `property name:ID`。例如，`name:ID`。

  在目前和先前載入的所有節點檔案中，節點 ID 應該是唯一的。如果使用 ID 空間，則在目前和之前載入中使用相同 ID 空間的所有節點檔案中，節點 ID 應該是唯一的。
+ **`:LABEL`** – 節點的標籤。

  對單一節點使用多個標籤值時，每個標籤應以分號 () 分隔`;`。

### 關係檔案中的系統欄標頭
<a name="bulk-load-tutorial-format-opencypher-system-headers-relationships"></a>
+ **`:ID`** – 關係的 ID。當 `userProvidedEdgeIds` 為 true (預設值) 時，這是必要的，但在 `userProvidedEdgeIds` 為 `false` 時無效。

  在目前和先前載入的所有關係檔案中，關係 ID 應該是唯一的。
+ **`:START_ID`** – (*必要*) 此關係起始之節點的節點 ID。

  或者，ID 空間可與格式為 `:START_ID(ID Space)` 的起始 ID 欄相關聯。指派給起始節點 ID 的 ID 空間應與指派給節點檔案中節點的 ID 空間相符。
+ **`:END_ID`** – (*必要*) 此關係結束之節點的節點 ID。

  或者，ID 空間可與格式為 `:END_ID(ID Space)` 的結束 ID 欄相關聯。指派給結束節點 ID 的 ID 空間應與指派給節點檔案中節點的 ID 空間相符。
+ **`:TYPE`** – 關係的類型。關係只能具有單一類型。

**注意**  
如需大量載入程序如何處理重複節點或關係 ID 的相關資訊，請參閱 [載入 openCypher 資料](load-api-reference-load.md#load-api-reference-load-parameters-opencypher)。

### openCypher 資料載入檔案中的屬性欄標頭
<a name="bulk-load-tutorial-format-opencypher-property-headers"></a>

您可以使用下列格式的屬性欄標頭，指定資料欄保留特定屬性的值：

```
propertyname:type
```

欄標頭中不允許空格、逗號、換行字元和換行字元，因此屬性名稱不能包含這些字元。以下是名為 `age` 且類型為 `Int` 之屬性的欄標頭範例：

```
age:Int
```

以 `age:Int` 作為欄標頭的資料欄接著必須在每一列中包含整數或空值。

## Neptune openCypher 資料載入檔案中的資料類型
<a name="bulk-load-tutorial-format-opencypher-data-types"></a>
+ **`Bool`** 或 **`Boolean`** – 布林值欄位。允許的值為 `true` 和 `false`。

  除 `true` 以外的任何值都會視為 `false`。
+ **`Byte`** – 範圍 `-128` 至 `127` 內的整數。
+ **`Short`** – 範圍 `-32,768` 至 `32,767` 內的整數。
+ **`Int`** – 範圍 `-2^31` 至 `2^31 - 1` 內的整數。
+ **`Long`** – 範圍 `-2^63` 至 `2^63 - 1` 內的整數。
+ **`Float`** – 32 位元 IEEE 754 浮點數。同時支援十進位符號和科學符號。`Infinity`、`-Infinity` 和 `NaN` 全都得到認可，但 `INF` 未得到認可。

  位數太多而無法容納的值會四捨五入為最接近的值 (對於位元層級的最後一個剩餘數字，中間值會四捨五入為 0)。
+ **`Double`** – 64 位元 IEEE 754 浮點數。同時支援十進位符號和科學符號。`Infinity`、`-Infinity` 和 `NaN` 全都得到認可，但 `INF` 未得到認可。

  位數太多而無法容納的值會四捨五入為最接近的值 (對於位元層級的最後一個剩餘數字，中間值會四捨五入為 0)。
+ **`String`** – 引號是選用的。逗號、新行及換行字元若包含在由雙引號 (`"`) 包圍的字串中，將會自動逸出，例如 `"Hello, World"`。

  您可以在引號括住的字串中包含引號，方法是連續使用兩個，例如 `"Hello ""World"""`。
+ **`DateTime`** – 下列其中一種 ISO-8601 格式的 Java 日期：
  + `yyyy-MM-dd`
  + `yyyy-MM-ddTHH:mm`
  + `yyyy-MM-ddTHH:mm:ss`
  + `yyyy-MM-ddTHH:mm:ssZ`

### Neptune openCypher 資料載入檔案中的自動轉換資料類型
<a name="bulk-load-tutorial-format-opencypher-data-auto-cast"></a>

提供自動轉換資料類型旨在載入 Neptune 目前原本不支援的資料類型。這類欄中的資料會逐字儲存為字串，不對其預期格式進行驗證。允許下列自動轉換資料類型：
+ **`Char`** – `Char` 欄位。儲存為字串。
+ **`Date`**、**`LocalDate`** 和 **`LocalDateTime`** – 請參閱 [Neo4j Temporal Instants](https://neo4j.com/docs/cypher-manual/current/values-and-types/temporal/#cypher-temporal-instants)，以取得`date`、`localdate` 和 `localdatetime` 類型的說明。這些值會逐字載入為字串，無需驗證。
+ **`Duration`** – 請參閱 [Neo4j Duration 格式](https://neo4j.com/docs/cypher-manual/current/values-and-types/temporal/#cypher-temporal-durations)。這些值會逐字載入為字串，無需驗證。
+ **Point** – 用於儲存空間資料的點欄位。請參閱 [Spatial instants](https://neo4j.com/docs/cypher-manual/current/values-and-types/spatial/#spatial-values-spatial-instants)。這些值會逐字載入為字串，無需驗證。

## openCypher 載入格式的範例
<a name="bulk-load-tutorial-format-opencypher-example"></a>

下圖取自 TinkerPop Modern Graph，其顯示兩個頂點及一個關係的範例。

![\[兩個節點和它們之間關係的圖表。\]](http://docs.aws.amazon.com/zh_tw/neptune/latest/userguide/images/tinkerpop-2-nodes-and-relationship.png)


以下是一般 Neptune openCypher 載入格式的圖形。

**節點檔案：**

```
:ID,name:String,age:Int,lang:String,:LABEL
v1,"marko",29,,person
v2,"lop",,"java",software
```

**關係檔案：**

```
:ID,:START_ID,:END_ID,:TYPE,weight:Double
e1,v1,v2,created,0.4
```

或者，您可以使用 ID 空間和 ID 做為屬性，如下所示：

**第一個節點檔案：**

```
name:ID(person),age:Int,lang:String,:LABEL
"marko",29,,person
```

**第二個節點檔案：**

```
name:ID(software),age:Int,lang:String,:LABEL
"lop",,"java",software
```

**關係檔案：**

```
:ID,:START_ID(person),:END_ID(software),:TYPE,weight:Double
e1,"marko","lop",created,0.4
```