In diesem Dokument wird beschrieben, wie Sie Daten in Spanner Graph mit der Google Cloud Console, der Google Cloud CLI und Clientbibliotheken mutieren. Das Ändern von Graphendaten umfasst das Einfügen, Aktualisieren und Löschen von Knoten und Kanten im Spanner-Graphen.
Spanner Graph ordnet Daten aus Tabellen Graphknoten und -kanten zu. Wenn Sie Daten in einem Diagramm mutieren möchten, müssen Sie die Daten in den entsprechenden Eingabetabellen mutieren. Weitere Informationen finden Sie unter Spanner-Graphschema – Übersicht.
Hinweis
Damit Sie die Schritte in der Google Cloud Console und die Codebeispiele in diesem Dokument ausführen können, müssen Sie zuerst die Schritte unter Spanner-Graph einrichten und abfragen ausführen, um Folgendes zu tun:
- Erstellen Sie eine Instanz.
- Erstellen Sie eine Datenbank mit einem Spanner-Schema.
- Diagrammdaten einfügen
Knoten oder Kanten einfügen
Wenn Sie Knoten oder Kanten einfügen möchten, verwenden Sie die Google Cloud Console, die Google Cloud CLI oder die Spanner-Clientbibliotheken, um Zeilen in Knoten- oder Kantentabellen einzufügen.
In der Google Cloud Console und in der Google Cloud CLI können Sie die Datenmanipulationssprache (Data Manipulation Language, DML) von GoogleSQL verwenden, um Daten einzufügen. In der Spanner-Clientbibliothek können Sie DML oder Mutation APIs verwenden.
Bevor Sie eine Kante einfügen, müssen die Quell- und Zielknoten, die durch die Kante verbunden sind, vorhanden sein. Wenn Sie eine Kante einfügen, der über die Kante verbundene Quell- oder Zielknoten aber nicht vorhanden ist, erhalten Sie möglicherweise Fehlermeldungen wegen Verstößen gegen die referenzielle Integrität. Weitere Informationen finden Sie unter Fehlender Quellknoten verstößt gegen die INTERLEAVE IN-Beziehung und Fehlender Zielknoten verstößt gegen die Fremdschlüsseleinschränkung.
In den folgenden Beispielen werden Account
Knoten und Transfer
Kanten in den Graphen eingefügt:
Console
Geben Sie in der Google Cloud Console die folgende DML-Anweisung ein und klicken Sie auf Abfrage ausführen:
-- 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
- Mit der gcloud CLI Anweisungen ausführen
- Führen Sie in der gcloud CLI die folgenden Befehle aus:
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)"
Clientbibliotheken
Python
Java
Go
C++
Knoten oder Kanten aktualisieren
Verwenden Sie die Google Cloud Console, die gcloud CLI oder die Spanner-Clientbibliotheken, um vorhandene Knoten oder Kanten zu aktualisieren.
Sie können vorhandene Knoten oder Kanten mit einer GoogleSQL-DML-Anweisung (Data Manipulation Language) oder Spanner-Graphabfragen mit einer DML-Anweisung aktualisieren. In der Spanner-Clientbibliothek können Sie auch Mutation APIs verwenden.
Knoten oder Kanten mit DML aktualisieren
In den folgenden Beispielen werden ein Account
-Knoten und eine Transfer
-Kante im Graphen mithilfe von DML aktualisiert:
Console
Geben Sie in der Google Cloud Console die folgende DML-Anweisung ein und klicken Sie auf Abfrage ausführen:
-- 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;
Console
- Mit der gcloud CLI Anweisungen ausführen
- Führen Sie in der gcloud CLI die folgenden Befehle aus:
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"
Clientbibliotheken
Python
Java
Go
C++
Knoten oder Kanten mit Graphabfragen und DML aktualisieren
In den folgenden Beispielen werden ein Account
-Knoten und eine Transfer
-Kante im Graphen mit Spanner-Graphabfragen mit DML aktualisiert:
Console
Geben Sie in der Google Cloud Console die folgende Spanner-Graphabfrage mit einer DML-Anweisung ein und klicken Sie dann auf Abfrage ausführen:
-- 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
- Mit der gcloud CLI Anweisungen ausführen
- Führen Sie in der gcloud CLI die folgenden Befehle aus:
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 }"
Clientbibliotheken
Python
Java
Go
C++
Knoten oder Kanten löschen
Verwenden Sie die Google Cloud Console, die gcloud CLI oder die Spanner-Clientbibliotheken, um vorhandene Knoten oder Kanten zu löschen.
In der Google Cloud Console und der gcloud CLI können Sie die Datenmanipulationssprache (Data Manipulation Language, DML) von GoogleSQL verwenden, um Daten zu löschen. In der Spanner-Clientbibliothek können Sie DML oder Mutation APIs verwenden.
Bevor Sie einen Knoten löschen, prüfen Sie, ob keine Kanten vorhanden sind, die sich auf den Knoten beziehen. Wenn diese Arten von Kanten vorhanden sind, können Fehler aufgrund von Verstößen gegen die referenzielle Integrität auftreten. Weitere Informationen finden Sie unter Einsame ausgehende Kante verstößt gegen die Eltern-Kind-Beziehung und Einsame eingehende Kante verstößt gegen die Eltern-Kind-Beziehung.
In den folgenden Beispielen werden eine Transfer
-Kante und ein Account
-Knoten aus dem Graphen gelöscht.
Console
- Anweisungen in der Google Cloud Console ausführen
- Geben Sie in der Google Cloud Console die folgende DML-Anweisung ein und klicken Sie auf Abfrage ausführen:
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
- Mit der gcloud CLI Anweisungen ausführen
- Führen Sie in der gcloud CLI die folgenden Befehle aus:
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"
Clientbibliotheken
Python
Java
Go
C++
Sie können Spanner Graph-Abfragen mit Ihrer DML-Anweisung kombinieren, wie im folgenden Beispiel gezeigt:
-- 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
}
Optionen zum Ändern von Graphendaten
Sie haben folgende Möglichkeiten, Diagrammdaten automatisch zu verändern:
- Mit der Aktion ON DELETE CASCADE können Sie Kanten im Graphen automatisch löschen.
- Knoten und Kanten im Graphen mithilfe der TTL-Richtlinie automatisch löschen Weitere Informationen finden Sie unter TTL für Knoten und Kanten.
Verwenden Sie partitionierte DML, um Knoten und Kanten im Graphen effizient im Bulk zu aktualisieren und zu löschen.