In diesem Dokument wird beschrieben, wie Sie Daten in Spanner Graph mithilfe der Google Cloud Console, die Google Cloud CLI und Clientbibliotheken 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 Knoten und Kanten des Graphen zu. Um Daten zu ändern Diagramm enthalten, müssen Sie Daten in den entsprechenden Eingabetabellen mutieren. Weitere Informationen finden Sie in der Spanner Graph-Schema – Ü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:
Knoten oder Kanten einfügen
Verwenden Sie zum Einfügen von Knoten oder Kanten Google Cloud Console, der Google Cloud CLI oder die Spanner-Clientbibliotheken um Zeilen in Knoten- oder Edge-Tabellen einzufügen.
In der Google Cloud Console und in der Google Cloud CLI können Sie GoogleSQL Datenbearbeitungssprache (DML) einzufügen. In der Spanner-Clientbibliothek können Sie DML oder Mutation APIs
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, wenn die Quelle oder Der über Edge verbundene Zielknoten ist nicht vorhanden, Sie erhalten möglicherweise referenzielle Fehler wegen Integritätsverstößen. 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
Grafik:
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 zum Aktualisieren vorhandener Knoten oder Kanten die Methode Google Cloud Console, die gcloud CLI oder die Spanner-Clientbibliotheken
Sie können vorhandene Knoten oder Kanten mit einem GoogleSQL- Datenbearbeitungssprache (DML) oder Spanner-Graph-Abfragen mit einer DML-Anweisung. Im Spanner-Clientbibliothek gibt, können Sie auch Mutation APIs
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
- Anweisungen mit der gcloud CLI 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 mithilfe von Spanner Graph-Abfragen mit DML aktualisiert:
Console
Geben Sie in der Google Cloud Console den folgenden Spanner-Graphen ein mit einer DML-Anweisung abrufen und dann auf Abfrage ausführen klicken:
-- 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 Folgendes verwenden: GoogleSQL Datenbearbeitungssprache (DML) zu löschen. In der Spanner-Clientbibliothek können Sie DML verwenden. oder Mutation APIs
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 auf Knoten und Edges:
Um Knoten und Kanten im Diagramm effizient gleichzeitig zu aktualisieren und zu löschen, verwenden Sie partitionierte DML verwendet.