本文档介绍了如何通过插入、更新和删除节点和边缘来管理 Spanner Graph 中的数据。Spanner Graph 会将表中的数据映射到图表节点和边缘。如需更改图表中的数据,您必须更改相应输入表中的数据。您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Spanner 客户端库来管理图表数据。
设置 Spanner Graph
您必须先通过执行以下操作来设置 Spanner Graph,然后才可以在 Spanner Graph 中管理数据:
这些部分中的示例使用您在按照前面的步骤设置 Spanner Graph 时创建的实例和数据库。
插入节点或边缘
如需将节点或边缘插入节点或边缘表中,请使用 Google Cloud 控制台、gcloud CLI 或 Spanner 客户端库。
在 Google Cloud 控制台和 gcloud CLI 中,您可以使用 GoogleSQL 数据操纵语言 (DML)。在 Spanner 客户端库中,您可以使用 DML 或 Mutation API。
在插入边缘之前,确保由边缘连接的源节点和目标节点存在。如果在通过边缘连接的源节点或目标节点不存在时插入边缘,则可能会出现引用完整性违规错误。如需了解详情,请参阅缺少源节点会违反 INTERLEAVE IN 关系和缺少目标节点会违反外键限制条件。
以下示例会将 Account 节点和 Transfer 边缘插入到您在设置 Spanner Graph 中创建的数据库中。
控制台
在 Google Cloud 控制台中,运行以下 DML 语句。如需了解详情,请参阅在 Google Cloud 控制台中运行语句。
-- 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 DATABASE-NAME --instance=INSTANCE-NAME \ --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 DATABASE-NAME --instance=INSTANCE-NAME \ --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 DATABASE-NAME --instance=INSTANCE-NAME \ --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 DATABASE-NAME --instance=INSTANCE-NAME \ --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)"
替换以下内容:
- DATABASE_NAME:您的数据库的名称。
- INSTANCE_NAME:实例的名称。
客户端库
Python
Java
Go
C++
更新节点或边缘
如需更新现有节点或边缘,请使用 Google Cloud 控制台、gcloud CLI 或 Spanner 客户端库。
您可以使用 GoogleSQL 数据操纵语言 (DML) 语句或包含 DML 语句的 Spanner Graph 查询,更新现有节点或边缘。如果您使用 Spanner 客户端库,还可以使用 Mutation API。
使用 DML 更新节点或边缘
以下示例使用 DML 更新您在插入节点或边缘中添加的 Account 节点和 Transfer 边缘。
控制台
在 Google Cloud 控制台中,运行以下 DML 语句。如需了解详情,请参阅在 Google Cloud 控制台中运行语句。
-- 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 DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE Account SET is_blocked = false WHERE id = 2"gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2"
替换以下内容:
- DATABASE_NAME:您的数据库的名称。
- INSTANCE_NAME:实例的名称。
客户端库
Python
Java
Go