本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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
[]
注意
邊緣屬性只能有一個值,如果指定了陣列類型或指定了第二個值,會導致錯誤。
以下範例顯示名為 age
的 Int
類型屬性的欄標頭。
age:Int
檔案中的每個資料列在該位置都必須有一個整數或保留空白。
允許字串陣列,但陣列中的字串不能包含分號 (;
) 字元,除非使用反斜線將其逸出 (像這樣:\;
)。
指定欄的基數
從 版本 1.0.1.0.200366.0 (2019 年 7 月 26 日) 開始,欄標頭可用來指定依欄識別之屬性的「基數」。這可讓大量載入器遵守 Gremlin 查詢執行的基數相似性。
您指定的欄基數類似這樣:
propertyname
:type
(cardinality
)
所以此 cardinality
值可以是 single
或 set
。預設值假設為 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 資料類型
這是一個允許的屬性類型清單及每個類型的描述。
布林 (或布林值)
表示布林值欄位。允許的值:false
、true
注意
所有 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-dd
、yyyy-MM-ddTHH:mm
、yyyy-MM-ddTHH:mm:ss
、yyyy-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 現代圖表的邊緣的範例。
以下是 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 資料庫執行個體。