Spanner Graph 是 Spanner 和 Spanner Omni 的功能,可讓您直接在 Spanner 中使用圖形資料庫,建構及查詢屬性圖形。Spanner Graph 結合了 Spanner 的擴充性和可靠性,以及圖形模型和查詢的強大功能。
屬性圖形會將資料模擬為節點 (實體) 和邊緣 (實體之間的關係),兩者都可以有屬性 (標籤和中繼資料)。這項功能特別適合用於複雜且高度連結的資料,例如社群網路、詐欺偵測和推薦引擎。
這份文件中的主題適用於 Spanner Omni,與適用於 Spanner 的主題相同。
設定及查詢 Spanner Graph
如要開始使用 Spanner Graph,請先建立 Spanner Omni 部署作業和資料庫。建立資料庫後,請定義屬性圖形結構定義,將現有的 Spanner Omni 資料表對應至圖形節點和邊緣。
設定結構定義並將資料插入基礎資料表後,您可以使用 Graph Query Language (GQL) 執行圖形查詢。GQL 是 GoogleSQL 的擴充功能,可實作 ISO GQL 標準。詳情請參閱 Spanner 說明文件中的「設定及查詢 Spanner Graph」。
Spanner Graph 結構定義總覽
Spanner Graph 結構定義會將關聯式資料解讀為圖形。結構定義會指定構成圖表的節點資料表和邊緣資料表。每個資料表都會將 Spanner 資料表中的資料列對應至圖形元素。元素可以有標籤來分類,以及儲存屬性的屬性。詳情請參閱 Spanner 說明文件中的「結構定義總覽」。
建立及管理 Spanner Graph 結構定義
您可以使用資料定義語言 (DDL) 陳述式,建立、更新或捨棄屬性圖定義。CREATE PROPERTY GRAPH 陳述式會定義圖表,並指定基礎資料表、索引鍵和標籤。詳情請參閱 Spanner 說明文件中的「建立及管理 Spanner Graph 結構定義」。
設計結構定義的最佳做法
高效的結構定義設計對於效能至關重要。最佳做法包括:
使用交錯處理,將邊緣與來源節點共置。
使用參照限制 (外部鍵) 確保圖表完整性。
在經常篩選的屬性上建立次要索引。
根據查詢模式選擇結構定義或無結構定義設計。
詳情請參閱 Spanner 說明文件中的「設計結構定義的最佳做法」。
使用 SQL 檢視區塊建立屬性圖
您可以使用 SQL 檢視畫面定義圖表的節點和邊緣。如要瞭解使用 SQL 檢視區塊和資料表建立圖形的差異,請參閱 Spanner 說明文件中的「Benefits of creating graphs with views instead of tables」(使用檢視區塊而非資料表建立圖形的優點)。
從 SQL 檢視區塊建立的圖表總覽
將檢視區塊做為抽象層,可提供列層級存取權控管、彈性資料轉換,以及從無結構定義到正式資料模型的順暢轉換。詳情請參閱「從 SQL 檢視區塊建立的圖表總覽」。
從 SQL 檢視畫面建立圖表
如要從檢視區塊建立圖表,請使用標準 SQL 定義檢視區塊。然後在CREATE PROPERTY GRAPH聲明的 NODE TABLES 或 EDGE TABLES 子句中參照這些項目。您必須為每個以檢視區塊為基礎的元素明確定義 KEY。KEY 子句會指定來源檢視區塊中的資料欄,這些資料欄可明確識別每個圖表元素。詳情請參閱 Spanner 說明文件中的「從 SQL 檢視區塊建立圖表」。
管理 Spanner Graph 資料
如要管理 Spanner Graph 中的資料,請修改定義圖形的基礎資料表。詳情請參閱 Spanner 說明文件中的「管理 Spanner Graph 資料」。
| 作業 | 說明 |
|---|---|
| 插入 | 使用 INSERT 陳述式或修改作業 API,在節點和邊緣資料表中新增資料列。 |
| 更新 | 如要修改現有屬性,請更新基礎資料表中的對應資料欄。 |
| 刪除 | 刪除對應的資料列,即可移除節點或邊緣。刪除節點時,請使用 ON DELETE CASCADE 自動移除相關聯的邊緣。 |
Spanner Graph 查詢
Spanner Graph 支援 Graph Query Language (GQL),可查詢、遍歷及分析圖形資料。
查詢總覽
圖表查詢會使用 GRAPH 子句指定目標圖表,並使用 MATCH 子句定義要尋找的模式。您可以傳回節點和邊緣屬性,或對結果執行匯總。詳情請參閱 Spanner 說明文件中的「查詢總覽」。
使用路徑
路徑代表圖表中的節點和邊緣序列。您可以使用 PATH_LENGTH()、NODES() 和 EDGES() 等函式,找出兩個節點之間的所有路徑、最短路徑,或根據路徑的屬性或長度篩選路徑。詳情請參閱 Spanner 說明文件中的「使用路徑」。
查詢微調最佳做法
如要最佳化圖表查詢,請採取下列做法:
從基數較低的節點開始遍歷。
為所有節點和邊緣模式明確指定標籤。
使用
IS_FIRST()函式,限制從高基數超級節點遍歷的邊緣數量。
詳情請參閱 Spanner 說明文件中的「查詢調整最佳做法」。
搭配 Spanner Graph 使用全文搜尋功能
Spanner Graph 整合了 Spanner 全文搜尋功能,可讓您使用 SEARCH() 函式,根據非結構化文字屬性搜尋節點或邊緣。詳情請參閱 Spanner 說明文件中的「使用 Spanner Graph 進行全文搜尋」。
使用 Spanner Graph 執行向量搜尋
您可以對圖形資料執行向量相似度搜尋,找出 K 近鄰 (KNN) 或近似近鄰 (ANN)。這項功能適用於根據相似度提供的建議,以及 AI 驅動的應用程式。詳情請參閱 Spanner 說明文件中的「搭配 Spanner Graph 使用向量搜尋」。
使用 Spanner Graph 管理無結構定義的資料
對於資料模型不斷演進的應用程式,Spanner Graph 支援無結構定義的資料管理。您可以將所有節點和邊緣儲存在單一通用資料表中,並使用 JSON 資料欄做為屬性,這樣就能新增類型和屬性,不必變更 DDL。詳情請參閱 Spanner 說明文件中的「使用 Spanner Graph 管理無結構定義資料」。
遷移至 Spanner Graph
您可以將其他資料庫的現有圖形資料遷移至 Spanner Graph。這個程序通常會將資料匯出為 CSV 或 JSON 檔案,然後匯入至支援新屬性圖的 Spanner 資料表。詳情請參閱 Spanner 說明文件中的「將資料遷移至 Spanner Graph」。
openCypher 使用者的 Spanner Graph 參考資料
如果您熟悉 openCypher,應該會覺得 Spanner Graph 的 GQL 實作方式很眼熟,但兩者在語法上有些差異。這份參考資料可協助您將 openCypher 概念和查詢對應至 Spanner Graph MATCH 和 RETURN 語意。詳情請參閱 Spanner 說明文件中的「openCypher 使用者的 Spanner Graph 參考資料」。
排解 Spanner Graph 問題
Spanner Graph 的常見問題包括參照完整性違規 (懸空邊緣) 和查詢執行緩慢。疑難排解包括檢查結構定義、確認是否有缺少的節點或邊緣,以及使用查詢計畫找出效能瓶頸。詳情請參閱 Spanner 說明文件中的「疑難排解 Spanner Graph 問題」。