In diesem Dokument erfahren Sie, wie Sie Daten in einem Spanner-Diagramm verwalten, indem Sie Knoten und Kanten einfügen, aktualisieren und löschen. In Spanner Graph werden Daten aus Tabellen Knoten und Kanten im Diagramm zugeordnet. Wenn Sie Daten in einem Diagramm ändern möchten, müssen Sie die Daten in den entsprechenden Eingabetabellen ändern.Sie können die Google Cloud -Konsole, die Google Cloud CLI oder Spanner-Clientbibliotheken verwenden, um Diagrammdaten zu verwalten.
Cloud Spanner Graph einrichten
Bevor Sie Daten in einem Spanner-Diagramm verwalten können, müssen Sie ein Spanner-Diagramm einrichten. Gehen Sie dazu so vor:
Erstellen Sie eine Datenbank in Ihrer Spanner-Instanz.
Fügen Sie Diagrammdaten in Ihre Datenbank ein.
In den Beispielen in diesen Abschnitten werden die Instanz und die Datenbank verwendet, die Sie beim Einrichten Ihres Spanner-Diagramms mit den vorherigen Schritten erstellt haben.
Knoten oder Kanten einfügen
Wenn Sie Knoten oder Kanten in Knoten- oder Kantentabellen einfügen möchten, verwenden Sie die Google Cloud Console, die gcloud CLI oder die Spanner-Clientbibliotheken.
In der Google Cloud Console und in der gcloud CLI können Sie die Datenbearbeitungssprache (Data Manipulation Language, DML) von GoogleSQL verwenden. In der Spanner-Clientbibliothek können Sie DML oder Mutation APIs verwenden.
Bevor Sie eine Kante einfügen, müssen Sie darauf achten, dass die Quell- und Zielknoten, die durch die Kante verbunden werden, vorhanden sind. Wenn Sie eine Kante einfügen, während der Quell- oder Zielknoten, der durch die Kante verbunden ist, nicht vorhanden ist, erhalten Sie möglicherweise Fehler wegen Verletzung der referenziellen Integrität. Weitere Informationen finden Sie unter Fehlender Quellknoten verstößt gegen die INTERLEAVE IN-Beziehung und Fehlender Zielknoten verstößt gegen die Fremdschlüsselbeschränkung.
In den folgenden Beispielen werden Account
-Knoten und Transfer
-Kanten in die Datenbank eingefügt, die Sie in Spanner Graph einrichten erstellt haben.
Console
Führen Sie in der Google Cloud -Konsole die folgende DML-Anweisung aus. Weitere Informationen finden Sie unter Anweisungen in der Google Cloud Console 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
Führen Sie in der gcloud CLI die folgenden Befehle aus. Weitere Informationen finden Sie unter Anweisungen mit der gcloud CLI ausführen.
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)"
Ersetzen Sie Folgendes:
- DATABASE_NAME: der Name Ihrer Datenbank
- INSTANCE_NAME: Der Name der Instanz.
Clientbibliotheken
Python
Java
Go
C++
Knoten oder Kanten aktualisieren
Wenn Sie vorhandene Knoten oder Kanten aktualisieren möchten, verwenden Sie die Google Cloud Console, die gcloud CLI oder die Spanner-Clientbibliotheken.
Sie können vorhandene Knoten oder Kanten mit einer GoogleSQL-DML-Anweisung (Data Manipulation Language) oder Spanner Graph-Abfragen mit einer DML-Anweisung aktualisieren. Wenn Sie eine Spanner-Clientbibliothek verwenden, können Sie auch Mutation APIs verwenden.
Knoten oder Kanten mit DML aktualisieren
In den folgenden Beispielen wird DML verwendet, um den Knoten Account
und die Kante Transfer
zu aktualisieren, die Sie in Knoten oder Kanten einfügen hinzugefügt haben.
Console
Führen Sie in der Google Cloud -Konsole die folgende DML-Anweisung aus. Weitere Informationen finden Sie unter Anweisungen in der Google Cloud Console 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;
gcloud
- Anweisungen mit der gcloud CLI ausführen
- Führen Sie in der gcloud CLI die folgenden Befehle aus:
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"
Ersetzen Sie Folgendes:
- DATABASE_NAME: der Name Ihrer Datenbank
- INSTANCE_NAME: Der Name der Instanz.
Clientbibliotheken
Python
Java
Go
C++
Knoten oder Kanten mit Graph-Abfragen und DML aktualisieren
In den folgenden Beispielen werden Spanner Graph-Abfragen mit DML verwendet, um den Knoten Account
und die Kante Transfer
zu aktualisieren, die Sie in Knoten oder Kanten einfügen hinzugefügt haben.
Console
Führen Sie in der Google Cloud -Konsole die folgende DML-Anweisung aus. Weitere Informationen finden Sie unter Anweisungen in der Google Cloud Console 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
Führen Sie in der gcloud CLI die folgenden Befehle aus. Weitere Informationen finden Sie unter Anweisungen mit der gcloud CLI ausführen.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE_NAME \ --sql="UPDATE Account SET is_blocked = false"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --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 }"
Ersetzen Sie Folgendes:
- DATABASE_NAME: der Name Ihrer Datenbank
- INSTANCE_NAME: Der Name der Instanz.
Clientbibliotheken
Python
Java
Go
C++
Knoten oder Kanten löschen
Verwenden Sie zum Löschen vorhandener Knoten oder Kanten die Google Cloud -Konsole, die gcloud CLI oder die Spanner-Clientbibliotheken.
In der Google Cloud Console und der gcloud CLI verwenden Sie die Datenbearbeitungssprache (Data Manipulation Language, DML) von GoogleSQL zum Löschen. In der Spanner-Clientbibliothek können Sie DML- oder Mutation APIs verwenden, um Knoten oder Kanten zu löschen.
Um Fehler aufgrund von Verletzungen der referenziellen Integrität zu vermeiden, dürfen keine Kanten auf einen Knoten verweisen, wenn Sie den Knoten löschen. Weitere Informationen finden Sie unter Verwaiste ausgehende Kante verstößt gegen die Über-/Unterordnungsbeziehung und Verwaiste eingehende Kante verstößt gegen die Über-/Unterordnungsbeziehung.
In den folgenden Beispielen werden eine Transfer
-Kante und ein Account
-Knoten aus dem Diagramm gelöscht.
Konsole
Führen Sie in der Google Cloud -Konsole die folgende DML-Anweisung aus. Weitere Informationen finden Sie unter Anweisungen in der Google Cloud Console 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
Führen Sie in der gcloud CLI die folgenden Befehle aus. Weitere Informationen finden Sie unter Anweisungen mit der gcloud CLI ausführen.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="DELETE FROM Account WHERE id = 2"
Ersetzen Sie Folgendes:
- DATABASE_NAME: der Name Ihrer Datenbank
- INSTANCE_NAME: Der Name der Instanz.
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
}
Automatisierte und Bulk-Datenvorgänge
Neben der Verwendung von DML zum Einfügen, Aktualisieren und Löschen einzelner Knoten und Kanten können Sie auch die folgenden Methoden zum Verwalten Ihrer Spanner Graph-Daten verwenden:
Sie können das Löschen von Kanten in einem Diagramm mit der Aktion ON DELETE CASCADE automatisieren.
Sie können das Löschen von Knoten und Kanten im Diagramm mit einer TTL-Richtlinie automatisieren. Weitere Informationen finden Sie unter TTL für Knoten und Kanten.
Knoten und Kanten im Diagramm lassen sich mithilfe von partitionierter DML effizient im Bulk aktualisieren und löschen.