共用方式為


GQL 圖表類型

備註

這項功能目前處於公開預覽狀態。 此預覽版是在沒有服務等級協定的情況下提供,不建議用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

圖形類型會定義哪些節點和邊緣可以存在,以描述圖形的結構。 可以將其視為藍圖或結構描述,它根據圖中的節點和邊緣的標籤和屬性指定其形狀。 對於邊 (節點之間的連接),它也會指定哪些類型的邊可以連接哪些類型的節點。 如果您熟悉關聯式資料庫,圖形類型的運作方式類似於 ER 圖描述表格和外鍵關係的方式。

這很重要

本文僅使用 社群網路範例圖集

圖形類型提供幾個主要優點:

  • 資料驗證:確保您的圖表僅包含有效的節點和邊緣組合。
  • 查詢最佳化:幫助查詢引擎了解您的資料結構,以獲得更好的效能。
  • 文檔:為開發人員和分析師明確規範圖形結構。

備註

本文從概念上介紹了圖形類型,並使用 GQL 標準中定義的語法說明了它們的定義。 不過,Microsoft Fabric 中的圖形目前不直接支援此語法。

在結構上,圖形類型會定義圖形類型的圖形允許的節點類型和邊類型,以及進一步限制這些圖形的其他條件約束。

備註

圖形類型是透過提供一組節點類型、邊類型和約束定義來定義的。 變更這些定義的順序不會變更所定義的圖形類型。

定義節點類型

節點類型會指定節點可以擁有的標籤和內容類型。 以下是指定基本節點類型的方法:

(:Organization => { 
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
})

此範例會建立節點類型,以定義具有下列功能的節點:

  • 標籤 Organization.
  • id保留無正負號整數值且不能為 Null 的屬性。
  • name保存字串值的屬性 (可以是 Null)。
  • url保存字串值的屬性 (可以是 Null)。

運算 :: 子會指定每個屬性的資料類型,而 NOT NULL 表示屬性必須一律具有值。

備註

NOT NULL 在 GQL 中被視為類型的一部分,這與 SQL 不同。

節點類型也可能更複雜,具有更多屬性和資料類型:

(:Person => {
    id :: UINT64 NOT NULL,
    creationDate :: ZONED DATETIME,
    firstName :: STRING,
    lastName :: STRING,
    gender :: STRING,
    birthday :: UINT64,
    browserUsed :: STRING,
    locationIP :: STRING
})

具有多個標籤的節點類型

節點可以有多個標籤來支援繼承和分類。 您可以為節點類型指定多個標籤,但一個標籤 (“索引鍵標籤”) 必須 唯一識別節點類型 (如果只指定一個標籤,則會將其視為節點類型的索引鍵標籤)。

例如,請考慮:

(:University => :Organization),

(:Company => :Organization)

這裡, UniversityCompany 是定義的兩種節點類型的索引鍵標籤,而 Organization 是兩種類型共用的次要標籤。 請注意索引鍵標籤和次要標籤在每個節點類型中的分隔 => 方式。 這種方法創建了一個類型層次結構,其中大學和公司都是組織類型。

由於索引鍵標籤會識別節點類型,因此使用此語法時,會自動繼承次要標籤所識別的節點類型屬性。 因此,可以理解前面的語法,可以有效地定義以下節點類型:

(:University => :Organization {
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
}),

(:Company => :Organization {
  id :: UINT64 NOT NULL, 
  name :: STRING, 
  url :: STRING 
})

備註

當您定義節點類型階層時,索引鍵標籤至關重要。 它們可協助系統瞭解當多個類型共用相同標籤時,您所指的節點類型。

使用繼承捷徑節省時間

從父節點類型重複標籤和屬性會變得乏味且容易出錯。 Microsoft Fabric 中的 Graph 提供 += 運算子,因此您只能指定額外的 (非繼承) 標籤和屬性類型:

(:Post => :Message += {
    language :: STRING,
    imageFile :: STRING
})

當未指定額外的屬性時,圖形會從父類型繼承所有必要的屬性:

(:Comment => :Message)  -- Same as: (:Comment => :Message += {})

使用抽象節點類型

您可以純粹定義節點類型來建置階層,即使您的圖表不包含該類型的具體節點也一樣。 抽象節點類型對於建立概念性群組和共用屬性集很有用。 為此,您可以定義節點類型,如 ABSTRACT Microsoft Fabric 中的圖形:

ABSTRACT (:Message => {
    id :: UINT64 NOT NULL,
    creationDate :: ZONED DATETIME,
    browserUsed :: STRING,
    locationIP :: STRING,
    content :: STRING,
    length :: UINT64
})

抽象節點類型不適用於直接圖形載入,它們僅用於建構階層和定義共用屬性。 繼承自抽象類型的具體節點類型可以載入資料。

定義邊類型和族群

邊類型會定義邊的索引鍵標籤、性質類型和端點節點類型。 在圖形資料庫中,邊緣代表節點之間的連線。 邊緣定義會告訴系統圖形中允許哪些關係:

(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person)

此邊類型定義具有以下內容的所有邊:

  • (鍵)標籤 knows
  • creationDate保存ZONED DATETIME值的屬性 (時間戳記與時區位移量一起)。
  • 來源和目的地端點都必須是 Person 節點。

箭頭 -> 表示邊的方向,從來源到目的地。 此方向資訊對於理解圖的語義至關重要。

以下是更多邊緣類型的範例:

(:Person)-[:studyAt { classYear :: UINT64 }]->(:University)
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company)

您只需要為端點節點類型指定索引鍵標籤 (PersonUniversityCompany),您不需要重複完整的節點類型定義。 系統會解析這些參照至完整節點類型定義。

圖形邊緣類型族群

圖形邊緣索引鍵標籤的運作方式與節點索引鍵標籤不同。 您可以在圖形類型中具有相同索引鍵標籤的多個邊緣類型,只要它們具有相同的標籤和內容類型即可。 不過,具有相同索引鍵標籤的兩個邊緣類型必須在至少一個端點節點類型中有所不同。 我們將具有相同索引鍵標籤的一組邊緣類型稱為 邊緣類型族群

此概念可讓您在不同類型的實體之間建立相同類型的關係模型。

Example:

(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent)

這兩種邊類型都使用標 isPartOf 示,但它們會連接不同類型的節點,形成代表階層式包含關係的邊類型族群。

在邊緣類型定義中使用節點子類型

必須詳細說明每種可能的邊緣類型會有點繁瑣。 為了簡化,也可以定義與端點所隱含節點類型階層對齊的邊型族。

範例:

-- Node types
ABSTRACT (:Message { ... }),
(:Post => :Message { ... }),
(:Comment => :Message { ... }),

-- All edge types (x)-[:hasTag]->(:Tag) where x is at least a (:Message)
(<:Message)-[:hasTag]->(:Tag) 

這隱含定義了以下邊型:

(:Post)-[:hasTag]->(:Tag) 
(:Comment)-[:hasTag]->(:Tag) 

支援的屬性類型

當您定義屬性類型時,屬性值類型必須是 Microsoft Fabric 中圖形支援的屬性值類型。 選擇正確的資料類型對於儲存效率和查詢效能非常重要。

以下是可用於屬性值的資料類型:

  • INT (還: INT64
  • UINT (還: UINT64
  • STRING
  • BOOL (還: BOOLEAN
  • DOUBLE (還: FLOAT64FLOAT
  • T NOT NULL,其中 T 是上述任何資料類型。
  • LIST<T>LIST<T> NOT NULL,其中 T 是上述任何資料類型。

如需值類型的完整資訊,請參閱 GQL 值和值類型

這很重要

在給定圖形類型的節點類型或邊緣類型中出現的所有具有相同名稱的內容類型都必須指定相同的內容值類型。 唯一的例外:它們可能在是否包含空值方面有所不同。 例如,根據此規則,圖形類型 with (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) 將有效,而圖形類型 with (:A { id :: STRING }), (:B { id :: INT}) 將無效。

設定節點索引鍵限制

節點索引鍵限制會定義圖表中的每個節點如何由其一或多個屬性值唯一識別。 索引鍵約束的工作方式類似於關聯式資料庫中的主鍵約束,並確保資料完整性。 節點索引鍵限制可以針對多個節點類型中的節點,這可讓您定義整個概念階層的節點索引鍵。

了解關鍵限制至關重要,因為它們:

  • 確保唯一性:根據您的業務邏輯防止重複節點。
  • 啟用高效查找: 允許系統優化搜索特定節點的查詢。
  • 支援資料整合:提供跨不同資料來源的穩定引用節點的方式。

這很重要

針對 Microsoft Fabric 中的圖形,只有一個索引鍵條件約束必須限制每個節點。

節點索引鍵限制的運作方式

您可以在圖形類型中指定節點索引鍵限制。 每個節點索引鍵限制都有特定的特性,使其能夠有效地運作:

節點索引鍵約束的元件:

  • 在圖形類型中具有唯一的名稱,以便於參考。
  • 使用簡單的 約束模式 來定義目標節點,該模式指定約束套用至哪些節點。
  • 定義形成唯一索引鍵值的屬性。

Example:

CONSTRAINT person_pk
  FOR (n:Person) REQUIRE n.id IS KEY

此語法會為至少具有person_pk節點建立呼叫Person的節點索引鍵限制。 條件約束可確保圖形中的每個節點都由其 id 屬性唯一識別。 沒有兩個具有標籤的 Person 節點可以具有相同的 id 值。

您也可以定義同時使用多個屬性的複合索引鍵,以使用 CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY 語法來確保唯一性。

這很重要

索引鍵約束中使用的屬性:

  • 不能為空值
  • 必須宣告為 NOT NULL 索引鍵限制所針對的節點類型和邊緣類型