Gremlin 載入資料格式 - Amazon Neptune

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

Gremlin 載入資料格式

若要使用 CSV 格式載入 Apache TinkerPop Gremlin 資料,您必須在個別檔案中指定頂點和邊緣。

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

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

Amazon Neptune CSV 格式遵循 RFC 4180 CSV規格。如需詳細資訊,請參閱網際網路工程任務小組 (IETF) 網站上的CSV檔案的常見格式和MIME類型

注意

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

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

系統欄標題

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

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

所有標籤皆區分大小寫。

頂點標頭

  • ~id - 必要

    頂點的 ID。

  • ~label

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

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

邊緣標頭

  • ~id - 必要

    邊緣的 ID。

  • ~from - 必要

    頂點的頂點 ID。

  • ~to - 必要

    頂點的頂點 ID。

  • ~label

    邊緣的標籤。邊緣只能有一個標籤。

    如果 ~label 不存在, TinkerPop 則提供值為 的標籤edge,因為每個邊緣都必須有一個標籤。

屬性欄標題

您可以使用以下語法指定屬性欄 (:)。類型名稱不區分大小寫。不過,請注意,如果屬性名稱內出現冒號,則必須在其前面加上反斜線來逸出冒號:\:

propertyname:type
注意

欄標頭中不允許空格、逗號、歸位字元和新行字元,因此屬性名稱不能包含這些字元。

您可以透過將 [] 新增至類型,來為陣列類型指定一個欄:

propertyname:type[]
注意

邊緣屬性只能有一個值,如果指定了陣列類型或指定了第二個值,會導致錯誤。

以下範例顯示名為 ageInt 類型屬性的欄標頭。

age:Int

檔案中的每個資料列在該位置都必須有一個整數或保留空白。

允許字串陣列,但陣列中的字串不能包含分號 (;) 字元,除非使用反斜線將其逸出 (像這樣:\;)。

指定欄的基數

版本 1.0.1.0.200366.0 (2019 年 7 月 26 日) 開始,欄標頭可用來指定依欄識別之屬性的「基數」。這可讓大量載入器遵守 Gremlin 查詢執行的基數相似性。

您指定的欄基數類似這樣:

propertyname:type(cardinality)

所以此 cardinality 值可以是 singleset。預設值假設為 set,這表示欄可接受多個值。如果是邊緣檔案,基數一律為一個,指定任何其他基數會導致載入器擲出例外狀況。

如果基數是 single,則當載入一或多個值時,若已有舊值,載入器會拋出錯誤。您可以覆寫這種行為,使用 updateSingleCardinalityProperties 標記,讓載入的新值取代現有的值。請參閱 載入器命令

您可以使用基數設定與陣列類型,但這通常沒必要。以下是可能的組合:

  • name:type – 基數為 set,且內容為單一值。

  • name:type[] – 基數為 set,且內容為多值。

  • name:type(single) – 基數為 single,且內容為單一值。

  • name:type(set) – 基數為 set,與預設值相同,且內容為單一值。

  • name:type(set)[] – 基數為 set,且內容為多值。

  • name:type(single)[] – 這是矛盾的且會導致擲回錯誤。

下節列出所有可用的 Gremlin 資料類型。

Gremlin 資料類型

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

布林 (或布林值)

表示布林值欄位。允許的值:falsetrue

注意

所有 true 以外的值會被視為 false。

整數類型

超出定義範圍的值將導致錯誤。

Type 範圍
位元組 -128 到 127
Short -32768 到 32767
Int -2^31 到 2^31-1
Long -2^63 到 2^63-1
小數類型

支援小數符號或科學符號。此外,允許符號,例如 (+/-) Infinity 或 NaN。不支援 INF。

Type 範圍
Float 32 位元 IEEE 754 浮點
Double 64 位元 IEEE 754 浮點

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

字串

引號是選用的。逗號、新行及換行字元如果包含在由雙引號 (") 包圍的字串中,將會自動逸出。範例"Hello, World"

若要在引號字串中包含引號,您可以在同一列使用兩個引號以逸出引號,例如:"Hello ""World"""

允許字串陣列,但陣列中的字串不能包含分號 (;) 字元,除非使用反斜線將其逸出 (像這樣:\;)。

如果您要使用引號包圍陣列中的字串,您必須以一組引號包圍整個陣列。範例"String one; String 2; String 3"

日期

ISO-8601 格式的 Java 日期。支援格式如下:yyyy-MM-ddyyyy-MM-ddTHH:mmyyyy-MM-ddTHH:mm:ssyyyy-MM-ddTHH:mm:ssZ

Gremlin 列格式

分隔符號

列中的欄位以逗號分隔。記錄以新行或新行後接換行符號加以分隔。

空白欄位

非必要欄允許使用空白欄位 (例如,使用者定義的屬性)。空白欄位仍然需要逗號分隔符號。所需資料欄上的空白欄位將導致剖析錯誤。空白字串值會解譯為欄位的空白字串值;而非空白欄位。下一節的範例在每個案例頂點中皆有空白欄位。

頂點 IDs

~id 值必須是每個頂點檔案的所有頂點中的唯一值。具有相同 ~id 值的多個頂點列將套用至圖形中的單一頂點。空字串 ("") 是有效的 ID,而頂點是以空字串作為 ID 來建立。

邊緣 IDs

此外,~id 值必須是每個邊緣檔案的所有邊緣中的唯一值。具有相同 ~id 值的多個邊緣列將套用至圖形中的單一邊緣。空字串 ("") 是有效的 ID,而邊緣是以空字串作為 ID 建立。

標籤

標籤區分大小寫,不能為空白。的值""將導致錯誤。

字串值

引號是選用的。逗號、新行及換行字元如果包含在由雙引號 (") 包圍的字串中,將會自動逸出。空白字串值("")會解譯為欄位的空白字串值;而不是空白欄位。

CSV 格式規格

Neptune CSV 格式遵循 RFC 4180 CSV規格,包括下列要求。

  • 支援 Unix 和 Windows 樣式的行尾 (\n 或 \r\n)。

  • 任何欄位皆可使用引號 (使用雙引號)。

  • 內含分行符號、雙引號或逗號的欄位必須加上引號。(否則,將立即中止載入。)

  • 欄位中的雙引號字元 (") 必須由兩個 (雙) 引號字元呈現。例如,Hello "World" 字串在資料中必須以 "Hello ""World""" 呈現。

  • 分隔符號前後的空格將被忽略。如果資料列以 的形式存在value1, value2,則會將其儲存為 "value1""value2"

  • 任何其他逸出字元將逐字儲存。例如,"data1\tdata2" 將儲存為 "data1\tdata2"。這些字元只要括在引號中,就不需要逸出。

  • 允許空白欄位。空白欄位會視為空的值。

  • 欄位中的多個值可在值之間使用分號 (;) 加以指定。

如需詳細資訊,請參閱網際網路工程任務小組 (IETF) 網站上的CSV檔案的常見格式和MIME類型

Gremlin 範例

下圖顯示兩個頂點和取自 TinkerPop 現代圖表的邊緣的範例。

圖表描述兩個頂點及一個邊緣,包含 marko 29 歲及 lop 軟體與 lang:java。

以下是 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 興趣:字串【】 ~label
v1 "marko" 29 【"航海", "照片"】 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 已建立 0.4
後續步驟

現在您對於載入格式已有更深入的了解,請參閱 範例:將資料載入至 Neptune 資料庫執行個體