本文說明如何使用Google Cloud 控制台、Google Cloud CLI 和用戶端程式庫,變更 Spanner 圖表中的資料。變異圖形資料包括在 Spanner 圖形中插入、更新及刪除節點和邊緣。
Spanner Graph 會將資料從資料表對應至圖形節點和邊緣。如要在圖表中變更資料,必須在對應的輸入資料表中變更資料。詳情請參閱「Spanner 圖表結構定義總覽」。
事前準備
如要完成本文件中的 Google Cloud 控制台步驟和程式碼範例,請先按照「設定及查詢 Spanner 圖表」一文中的步驟操作,以便執行下列動作:
插入節點或邊緣
如要插入節點或邊緣,請使用控制台 Google Cloud 、Google Cloud CLI 或 Spanner 用戶端程式庫,將資料列插入節點或邊緣資料表。
在 Google Cloud 控制台和 Google Cloud CLI 中,您可以使用 GoogleSQL 資料操縱語言 (DML) 插入資料。在 Spanner 用戶端程式庫中,您可以使用 DML 或 Mutation API。
插入邊緣前,請確認邊緣連接的來源和目的地節點存在。如果插入邊緣時,邊緣所連線的來源或目的地節點不存在,您可能會收到參照完整性違規錯誤。詳情請參閱「Missing source node violates INTERLEAVE IN relationship」和「Missing destination node violates foreign key constraint」。
下列範例會在圖表中插入 Account
節點和 Transfer
邊緣:
主控台
在 Google Cloud 控制台中執行陳述式。
在 Google Cloud 控制台中,輸入下列 DML 陳述式,然後按一下「Run Query」(執行查詢):
-- Insert 2 Account nodes.
INSERT INTO Account (id, create_time, is_blocked)
VALUES (1, CAST('2000-08-10 08:18:48.463959-07:52' AS TIMESTAMP), false);
INSERT INTO Account (id, create_time, is_blocked)
VALUES (2, CAST('2000-08-12 07:13:16.463959-03:41' AS TIMESTAMP), true);
-- Insert 2 Transfer edges.
INSERT INTO AccountTransferAccount (id, to_id, create_time, amount)
VALUES (1, 2, CAST('2000-09-11 03:11:18.463959-06:36' AS TIMESTAMP), 100);
INSERT INTO AccountTransferAccount (id, to_id, create_time, amount)
VALUES (1, 1, CAST('2000-09-12 04:09:34.463959-05:12' AS TIMESTAMP), 200);
gcloud
- 使用 gcloud CLI 執行陳述式。
- 在 gcloud CLI 中執行下列指令:
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="INSERT INTO Account (id, create_time, is_blocked) VALUES (1, CAST('2000-08-10 08:18:48.463959-07:52' AS TIMESTAMP), false)"
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="INSERT INTO Account (id, create_time, is_blocked) VALUES (2, CAST('2000-08-12 07:13:16.463959-03:41' AS TIMESTAMP), true)"
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="INSERT INTO AccountTransferAccount (id, to_id, create_time, amount) VALUES (1, 2, CAST('2000-09-11 03:11:18.463959-06:36' AS TIMESTAMP), 100)"
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="INSERT INTO AccountTransferAccount (id, to_id, create_time, amount) VALUES (1, 1, CAST('2000-09-12 04:09:34.463959-05:12' AS TIMESTAMP), 200)"
用戶端程式庫
Python
Java
Go
C++
更新節點或邊緣
如要更新現有節點或邊緣,請使用Google Cloud 控制台、gcloud CLI 或 Spanner 用戶端程式庫。
您可以使用 GoogleSQL 資料操縱語言 (DML) 陳述式,或搭配 DML 陳述式的 Spanner Graph 查詢,更新現有節點或邊緣。在 Spanner 用戶端程式庫中,您也可以使用 Mutation API。
使用 DML 更新節點或邊緣
以下範例會使用 DML 更新圖表中的 Account
節點和 Transfer
邊緣:
主控台
在 Google Cloud 控制台中執行陳述式。
在 Google Cloud 控制台中,輸入下列 DML 陳述式,然後按一下「Run Query」(執行查詢):
-- Update Account node
UPDATE Account SET is_blocked = false WHERE id = 2;
-- Update Transfer edge
UPDATE AccountTransferAccount
SET amount = 300
WHERE id = 1 AND to_id = 2;
gcloud
- 使用 gcloud CLI 執行陳述式。
- 在 gcloud CLI 中執行下列指令:
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="UPDATE Account SET is_blocked = false WHERE id = 2"
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2"
用戶端程式庫
Python
Java
Go
C++
使用圖形查詢和 DML 更新節點或邊緣
下列範例使用 DML 搭配 Spanner Graph 查詢,更新圖表中的 Account
節點和 Transfer
邊緣:
主控台
在 Google Cloud 控制台中執行陳述式。
在 Google Cloud 控制台中,輸入下列含有 DML 陳述式的 Spanner 圖形查詢,然後按一下「Run Query」(執行查詢):
-- Use Graph pattern matching to identify Account nodes to update:
UPDATE Account SET is_blocked = false
WHERE id IN {
GRAPH FinGraph
MATCH (a:Account WHERE a.id = 1)-[:Transfers]->{1,2}(b:Account)
RETURN b.id
}
gcloud
- 使用 gcloud CLI 執行陳述式。
- 在 gcloud CLI 中執行下列指令:
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="UPDATE Account SET is_blocked = false"
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2" --sql=" WHERE id IN { GRAPH FinGraph MATCH (a:Account WHERE a.id = 1)-[:Transfers]->{1,2}(b:Account) RETURN b.id }"
用戶端程式庫
Python
Java
Go
C++
刪除節點或邊緣
如要刪除現有節點或邊緣,請使用 Google Cloud 控制台、gcloud CLI 或 Spanner 用戶端程式庫。
在 Google Cloud 控制台和 gcloud CLI 中,您可以使用 GoogleSQL 資料操縱語言 (DML) 刪除資料。在 Spanner 用戶端程式庫中,您可以使用 DML 或 Mutation API。
刪除節點前,請確認沒有任何參照該節點的邊緣。如果存在這類邊緣,您可能會收到參照完整性違規錯誤。詳情請參閱「孤立的外向邊緣違反親子關係」和「孤立的內向邊緣違反親子關係」。
下列範例會從圖表中刪除 Transfer
邊緣和 Account
節點。
控制台
- 在 Google Cloud 控制台中執行陳述式。
- 在 Google Cloud 控制台中,輸入下列 DML 陳述式,然後按一下「Run Query」(執行查詢):
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
- 使用 gcloud CLI 執行陳述式。
- 在 gcloud CLI 中執行下列指令:
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2"
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="DELETE FROM Account WHERE id = 2"
用戶端程式庫
Python
Java
Go
C++
您可以將 Spanner Graph 查詢與 DML 陳述式合併,如以下範例所示:
-- Use Graph pattern matching to identify Account nodes to delete:
DELETE FROM AccountTransferAccount
WHERE id IN {
GRAPH FinGraph
MATCH (a:Account WHERE a.id = 1)-[:Transfers]->(b:Account)
RETURN b.id
}
變更圖形資料的選項
您可以透過下列方式自動變更圖表資料:
- 使用 ON DELETE CASCADE 動作,自動刪除圖表中的邊緣。
- 使用 TTL 政策自動刪除圖表中的節點和邊緣。詳情請參閱節點和邊緣的 TTL。
如要有效率地大量更新及刪除圖形中的節點和邊緣,請使用分區 DML。