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 圖形資料」。
| 作業 | 說明 |
|---|---|
| 插入 | 使用 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 類似,但語法有些不同。這份參考資料可協助您將 openCypher 概念和查詢對應至 Spanner Graph MATCH 和 RETURN 語意。詳情請參閱 Spanner 說明文件中的「openCypher 使用者的 Spanner Graph 參考資料」。
排解 Spanner Graph 問題
Spanner Graph 的常見問題包括參照完整性違規 (懸空邊緣) 和查詢執行速度緩慢。疑難排解包括檢查結構定義、確認是否有缺少的節點或邊緣,以及使用查詢計畫找出效能瓶頸。詳情請參閱 Spanner 說明文件中的「排解 Spanner Graph 問題」。