本文說明如何設定及查詢 Spanner Graph 資料庫,以便使用 Google Cloud 主控台和用戶端程式庫,建立複雜資料關係的模型、儲存及分析這些關係。
以下主題將說明如何:
如要瞭解 Spanner 定價詳細資料,請參閱 Spanner 定價。
如要試用程式碼研究室,請參閱「開始使用 Spanner Graph」。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
- 啟用 Spanner API:
前往「啟用 Spanner API」 -
如要取得建立執行個體和資料庫所需的權限,請要求管理員為您授予專案的 Cloud Spanner 管理員 (
roles/spanner.admin
) 身分與存取權管理角色。 -
如要取得查詢 Spanner 圖表所需的權限 (如果未獲授予 Cloud Spanner 管理員角色),請要求管理員授予您專案的 Cloud Spanner 資料庫讀取者 (
roles/spanner.databaseReader
) IAM 角色。 前往 Google Cloud 控制台的「Spanner」頁面。
選取或建立 Google Cloud 專案 (如果尚未建立)。
執行下列其中一個步驟:
如果您先前未建立 Spanner 執行個體,請在「Welcome to Spanner」(歡迎使用 Spanner) 頁面上,按一下「Create a provisioned instance」(建立已佈建的執行個體)。
如果您已建立 Spanner 執行個體,請在「執行個體」頁面上按一下「建立執行個體」。
在「選取版本」頁面中,選取「Enterprise Plus」或「Enterprise」。
Spanner Graph 僅適用於 Enterprise 版或 Enterprise Plus 版。如要比較不同版本,請按一下「比較版本」。詳情請參閱 Spanner 版本總覽。
按一下「繼續」。
在「Instance name」(執行個體名稱) 中輸入執行個體名稱,例如
test-instance
。在「執行個體 ID」中,保留或變更執行個體 ID。執行個體 ID 預設為執行個體名稱,但您可以變更。執行個體名稱和執行個體 ID 可以相同,也可以不同。
按一下「繼續」。
在「選擇設定」中,執行下列操作:
請選取「區域」。
在「選擇設定」中,選取區域。Spanner 會在您選取的區域中儲存及複製執行個體。
按一下「繼續」。
在「設定運算能力」中,執行下列操作:
在「選取單位」中,選取「處理單元 (PU)」。
在「選擇調整資源配置模式」中,保留選取的「手動分配」,並在「數量」中保留 1000 個處理單元。
按一下「Create」(建立)。 Google Cloud 控制台會顯示您所建立執行個體的「Overview」(總覽) 頁面。
前往 Google Cloud 控制台的「Spanner Instances」(Spanner 執行個體) 頁面。
按一下您建立的執行個體,例如
Test Instance
。在「總覽」中,按一下執行個體名稱下方的「建立資料庫」。
在「Database name」(資料庫名稱) 中輸入資料庫名稱。例如:
example-db
。在「選取資料庫方言」中,選擇 Google 標準 SQL。 PostgreSQL 方言不支援 Spanner Graph。
在「DDL Templates」(DDL 範本) 編輯器分頁中,輸入下列結構定義。 結構定義包含兩個節點資料表定義 (
Person
和Account
),以及兩個邊緣資料表定義 (PersonOwnAccount
和AccountTransferAccount
)。Spanner Graph 會使用關聯式資料表定義圖形,因此您會在結構定義中看到關聯式資料表和圖形陳述式。如要進一步瞭解 Spanner Graph 結構定義,請參閱 Spanner Graph 結構定義總覽:CREATE TABLE Person ( id INT64 NOT NULL, name STRING(MAX), birthday TIMESTAMP, country STRING(MAX), city STRING(MAX), ) PRIMARY KEY (id); CREATE TABLE Account ( id INT64 NOT NULL, create_time TIMESTAMP, is_blocked BOOL, nick_name STRING(MAX), ) PRIMARY KEY (id); CREATE TABLE PersonOwnAccount ( id INT64 NOT NULL, account_id INT64 NOT NULL, create_time TIMESTAMP, FOREIGN KEY (account_id) REFERENCES Account (id) ) PRIMARY KEY (id, account_id), INTERLEAVE IN PARENT Person ON DELETE CASCADE; CREATE TABLE AccountTransferAccount ( id INT64 NOT NULL, to_id INT64 NOT NULL, amount FLOAT64, create_time TIMESTAMP NOT NULL, order_number STRING(MAX), FOREIGN KEY (to_id) REFERENCES Account (id) ) PRIMARY KEY (id, to_id, create_time), INTERLEAVE IN PARENT Account ON DELETE CASCADE; CREATE OR REPLACE PROPERTY GRAPH FinGraph NODE TABLES (Account, Person) EDGE TABLES ( PersonOwnAccount SOURCE KEY (id) REFERENCES Person (id) DESTINATION KEY (account_id) REFERENCES Account (id) LABEL Owns, AccountTransferAccount SOURCE KEY (id) REFERENCES Account (id) DESTINATION KEY (to_id) REFERENCES Account (id) LABEL Transfers );
保留「顯示加密選項」中的預設設定。
按一下「建立」。 Google Cloud 控制台會顯示您所建立資料庫的「總覽」頁面。
在「Spanner Studio」頁面中,按一下「新增分頁」
,或使用編輯器分頁。複製下列圖形資料插入陳述式,並貼到節點和邊緣。
INSERT INTO Account (id, create_time, is_blocked, nick_name) VALUES (7,"2020-01-10 06:22:20.222",false,"Vacation Fund"), (16,"2020-01-27 17:55:09.206",true,"Vacation Fund"), (20,"2020-02-18 05:44:20.655",false,"Rainy Day Fund"); INSERT INTO Person (id, name, birthday, country, city) VALUES (1,"Alex","1991-12-21 00:00:00","Australia","Adelaide"), (2,"Dana","1980-10-31 00:00:00","Czech_Republic","Moravia"), (3,"Lee","1986-12-07 00:00:00","India","Kollam"); INSERT INTO AccountTransferAccount (id, to_id, amount, create_time, order_number) VALUES (7,16,300,"2020-08-29 15:28:58.647","304330008004315"), (7,16,100,"2020-10-04 16:55:05.342","304120005529714"), (16,20,300,"2020-09-25 02:36:14.926","103650009791820"), (20,7,500,"2020-10-04 16:55:05.342","304120005529714"), (20,16,200,"2020-10-17 03:59:40.247","302290001255747"); INSERT INTO PersonOwnAccount (id, account_id, create_time) VALUES (1,7,"2020-01-10 06:22:20.222"), (2,20,"2020-01-27 17:55:09.206"), (3,16,"2020-02-18 05:44:20.655");
按一下「執行」。執行完成後,「結果」分頁會顯示已插入 3 個資料列。
在資料庫的「總覽」頁面中,按一下導覽選單中的「Spanner Studio」。
在「Spanner Studio」頁面中,按一下「新增分頁」
,或使用編輯器分頁。在查詢編輯器中輸入下列查詢。這項查詢會找出 Dana 匯款的對象,以及匯款金額。
GRAPH FinGraph MATCH (from_person:Person {name: "Dana"})-[:Owns]-> (from_account:Account)-[transfer:Transfers]-> (to_account:Account)<-[:Owns]-(to_person:Person) RETURN from_person.name AS from_account_owner, from_account.id AS from_account_id, to_person.name AS to_account_owner, to_account.id AS to_account_id, transfer.amount AS amount
按一下「執行」。
「結果」分頁會顯示帳戶 20 擁有者 Dana 的下列路徑:
- 傳送至小艾擁有的「
Account {id:7}
」。 轉移給李擁有的「
Account {id:16}
」。
- 傳送至小艾擁有的「
前往 Google Cloud 控制台的「Spanner Instances」(Spanner 執行個體) 頁面。
按一下執行個體名稱,例如「Test Instance」。
按一下資料庫名稱,例如 example-db。
在「Database details」(資料庫詳細資料) 頁面,按一下「Delete database」(刪除資料庫)。
輸入資料庫名稱,然後按一下「刪除」,確認要刪除資料庫。
前往 Google Cloud 控制台的「Spanner Instances」(Spanner 執行個體) 頁面。
按一下要刪除的執行個體名稱,例如「Test Instance」。
按一下 [Delete instance] (刪除執行個體)。
輸入執行個體名稱,然後按一下「刪除」,確認要刪除執行個體。
- 如要進一步瞭解 Spanner Graph,請參閱程式碼研究室。
- 瞭解 Spanner Graph 結構定義。
- 建立、更新或捨棄 Spanner 圖表結構定義。
- 插入、更新或刪除 Spanner Graph 資料。
- Spanner Graph 查詢總覽。
- 遷移至 Spanner Graph。
可建立 Spanner 執行個體
首次使用 Spanner 時,必須建立「執行個體」,這會為 Spanner 資料庫分配資源。本節說明如何使用 Google Cloud 控制台建立執行個體。
使用結構定義建立圖形資料庫
本節說明如何使用 Spanner Graph 結構定義建立 Spanner Graph 資料庫。您可以使用 Google Cloud 控制台或用戶端程式庫。
主控台
用戶端程式庫
Python
Java
Go
C++
插入圖表資料
建立資料庫後,即可新增資料。本節說明如何使用 Google Cloud 控制台 (圖形介面) 或用戶端程式庫,以程式輔助方式將資料插入圖表。
主控台
用戶端程式庫
Python
Java
Go
C++
下圖顯示插頁中的人員、帳戶、帳戶擁有權和帳戶轉移:
執行圖形查詢
將資料插入圖表後,您可以查詢資料,找出模式和關係。本節說明如何使用Google Cloud 控制台 (圖形介面) 執行查詢,或透過用戶端程式庫以程式輔助方式執行查詢。
主控台
用戶端程式庫
Python
Java
Go
C++
清除所用資源
本節說明如何清除您建立的資源,以免系統向您的 Cloud 帳單帳戶收取費用。如果您打算在「後續步驟」一節中探索其他 Spanner 圖表範例,請暫時不要執行這些步驟。刪除 Spanner 執行個體時,也會刪除該執行個體中的所有資料庫。