In diesem Dokument wird beschrieben, wie Sie Daten in einem Diagramm verwalten, indem Sie Knoten und Edges einfügen, aktualisieren und löschen. Spanner Graph ordnet Daten aus Tabellen Diagrammknoten und ‑edges zu. 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 console, die Google Cloud CLI oder Spanner-Clientbibliotheken verwenden, um Diagrammdaten zu verwalten.
Spanner Graph einrichten
Bevor Sie Daten in Spanner Graph verwalten können, müssen Sie ein 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 von Spanner Graph mit den vorherigen Schritten erstellt haben.
Knoten oder Edges einfügen
Verwenden Sie die Google Cloud console, die gcloud CLIoder die Spanner-Clientbibliotheken, um Knoten oder Edges in Knoten- oder Edge-Tabellen einzufügen.
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 Mutations-APIs verwenden.
Bevor Sie einen Edge einfügen, müssen die Quell- und Zielknoten, die durch den Edge verbunden sind, vorhanden sein. Wenn Sie einen Edge einfügen, während der Quell- oder Zielknoten, der durch den Edge verbunden ist, nicht vorhanden ist, können Fehler aufgrund von Verletzungen der referenziellen Integrität auftreten. 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 Edges in die
Datenbank eingefügt, die Sie unter Spanner Graph einrichten erstellt haben.
Console
Führen Sie in der Google Cloud console 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 Ihrer Instanz
Clientbibliotheken
Python
Java
Los
C++
Knoten oder Edges aktualisieren
Verwenden Sie die Google Cloud console, die gcloud CLIoder die Spanner-Clientbibliotheken, um vorhandene Knoten oder Edges zu aktualisieren.
Sie können vorhandene Knoten oder Edges mit einer DML-Anweisung Datenbearbeitungssprache (DML) von GoogleSQL oder mit Spanner Graph-Abfragen mit einer DML-Anweisung aktualisieren. Wenn Sie eine Spanner-Clientbibliothek verwenden, können Sie auch Mutations-APIs verwenden.
Knoten oder Edges mit DML aktualisieren
In den folgenden Beispielen wird DML verwendet, um den Account-Knoten und den Transfer-Edge
zu aktualisieren, die Sie unter Knoten oder Edges einfügenhinzugefügt haben.
Console
Führen Sie in der Google Cloud console 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 Ihrer Instanz
Clientbibliotheken
Python
Java
Los
C++
Knoten oder Edges mit Diagrammabfragen und DML aktualisieren
In den folgenden Beispielen werden Spanner Graph-Abfragen mit DML verwendet, um den
Account Knoten und den Transfer Edge zu aktualisieren, die Sie unter
Knoten oder Edges einfügen hinzugefügt haben.
Console
Führen Sie in der Google Cloud console 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 Ihrer Instanz
Clientbibliotheken
Python
Java
Los
C++
Knoten oder Edges löschen
Verwenden Sie die Google Cloud console, die gcloud CLI oder die Spanner-Clientbibliotheken, um vorhandene Knoten oder Edges zu löschen.
In der the Google Cloud console und in 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 Mutations-APIs verwenden, um Knoten oder Edges zu löschen.
Achten Sie darauf, dass keine Edges auf einen Knoten verweisen, wenn Sie den Knoten löschen, um Fehler aufgrund von Verletzungen der referenziellen Integrität zu vermeiden. Weitere Informationen finden Sie unter Verwaister ausgehender Edge verstößt gegen die Beziehung zwischen übergeordnetem und untergeordnetem Element und Verwaister eingehender Edge verstößt gegen die Beziehung zwischen übergeordnetem und untergeordnetem Element.
In den folgenden Beispielen werden ein Transfer-Edge und ein Account-Knoten aus dem Diagramm gelöscht.
Console
Führen Sie in der Google Cloud console 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 Ihrer Instanz
Clientbibliotheken
Python
Java
Los
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 Edges können Sie auch die folgenden Methoden verwenden, um Ihre Spanner Graph-Daten zu verwalten:
Mit der Aktion ON DELETE CASCADE können Sie das Löschen von Edges in einem Diagramm automatisieren.
Sie können das Löschen von Knoten und Edges im Diagramm mit einer TTL-Richtlinie automatisieren. Weitere Informationen finden Sie unter TTL für Knoten und Edges.
Mit partitionierter DML können Sie Knoten und Edges im Diagramm effizient im Bulk aktualisieren und löschen.