Questo documento mostra come gestire i dati in un grafico Spanner inserendo, aggiornando ed eliminando nodi e archi. Spanner Graph mappa i dati delle tabelle ai nodi e agli archi del grafico. Per modificare i dati in un grafico, devi modificare i dati nelle tabelle di input corrispondenti.Puoi utilizzare la console Google Cloud , Google Cloud CLI o le librerie client Spanner per gestire i dati del grafico.
Configurare Spanner Graph
Prima di poter gestire i dati in un grafico Spanner, devi configurare un grafico Spanner procedendo nel seguente modo:
Crea un database nella tua istanza Spanner.
Inserisci i dati del grafico nel database.
Gli esempi in queste sezioni utilizzano l'istanza e il database che hai creato quando hai configurato Spanner Graph con i passaggi precedenti.
Inserire nodi o archi
Per inserire nodi o archi nelle tabelle dei nodi o degli archi, utilizza la console Google Cloud , gcloud CLI o le librerie client Spanner.
Nella console Google Cloud e in gcloud CLI, puoi utilizzare il Data Manipulation Language (DML) di GoogleSQL. Nella libreria client Spanner, puoi utilizzare le API DML o Mutation.
Prima di inserire un arco, assicurati che esistano i nodi di origine e di destinazione collegati dall'arco. Se inserisci un arco quando il nodo di origine o di destinazione collegato dall'arco non esiste, potresti ricevere errori di violazione dell'integrità referenziale. Per ulteriori informazioni, consulta Il nodo di origine mancante viola la relazione INTERLEAVE IN e Il nodo di destinazione mancante viola il vincolo di chiave esterna.
Gli esempi riportati di seguito inseriscono nodi Account
e archi Transfer
nel
database che hai creato in Configurare Spanner Graph.
Console
Nella console Google Cloud , esegui la seguente istruzione DML. Per saperne di più, consulta Eseguire istruzioni nella console 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
Nella gcloud CLI, esegui i seguenti comandi. Per ulteriori informazioni, vedi Eseguire istruzioni con 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)"
Sostituisci quanto segue:
- DATABASE_NAME: il nome del tuo database.
- INSTANCE_NAME: il nome dell'istanza.
Librerie client
Python
Java
Go
C++
Aggiornare nodi o archi
Per aggiornare i nodi o gli archi esistenti, utilizza la consoleGoogle Cloud , la gcloud CLI o le librerie client Spanner.
Puoi aggiornare nodi o archi esistenti utilizzando un'istruzione Data Manipulation Language (DML) GoogleSQL o query Spanner Graph con un'istruzione DML. Se utilizzi una libreria client Spanner, puoi utilizzare anche le API Mutation.
Aggiorna nodi o archi con DML
I seguenti esempi utilizzano DML per aggiornare il nodo Account
e il bordo Transfer
che hai aggiunto in Inserisci nodi o bordi.
Console
Nella console Google Cloud , esegui la seguente istruzione DML. Per saperne di più, consulta Eseguire istruzioni nella console 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
- Esegui istruzioni con gcloud CLI.
- In gcloud CLI, esegui i seguenti comandi:
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"
Sostituisci quanto segue:
- DATABASE_NAME: il nome del tuo database.
- INSTANCE_NAME: il nome dell'istanza.
Librerie client
Python
Java
Go
C++
Aggiornare nodi o archi con query grafiche e DML
I seguenti esempi utilizzano query Spanner Graph con DML per aggiornare il nodo Account
e l'arco Transfer
che hai aggiunto in Inserisci nodi o archi.
Console
Nella console Google Cloud , esegui la seguente istruzione DML. Per saperne di più, consulta Eseguire istruzioni nella console Google Cloud .
-- 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
Nella gcloud CLI, esegui i seguenti comandi. Per ulteriori informazioni, vedi Eseguire istruzioni con gcloud CLI.
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 }"
Sostituisci quanto segue:
- DATABASE_NAME: il nome del tuo database.
- INSTANCE_NAME: il nome dell'istanza.
Librerie client
Python
Java
Go
C++
Eliminare nodi o archi
Per eliminare nodi o archi esistenti, utilizza la console Google Cloud , gcloud CLI o le librerie client Spanner.
Nella console Google Cloud e in gcloud CLI, utilizzi il Data Manipulation Language (DML) di GoogleSQL per l'eliminazione. Nella libreria client Spanner, puoi utilizzare le API DML o Mutation per eliminare nodi o archi.
Per evitare errori di violazione dell'integrità referenziale, assicurati che nessun arco faccia riferimento a un nodo quando lo elimini. Per ulteriori informazioni, vedi Arco in uscita orfano viola la relazione padre-figlio e Arco in entrata orfano viola la relazione padre-figlio.
Gli esempi seguenti eliminano un arco Transfer
e un nodo Account
dal
grafico.
Console
Nella console Google Cloud , esegui la seguente istruzione DML. Per saperne di più, consulta Eseguire istruzioni nella console Google Cloud .
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
Nella gcloud CLI, esegui i seguenti comandi. Per ulteriori informazioni, vedi Eseguire istruzioni con gcloud CLI.
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"
Sostituisci quanto segue:
- DATABASE_NAME: il nome del tuo database.
- INSTANCE_NAME: il nome dell'istanza.
Librerie client
Python
Java
Go
C++
Puoi combinare le query Spanner Graph con l'istruzione DML, come mostrato nell'esempio seguente:
-- 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
}
Operazioni sui dati automatizzate e collettive
Oltre a utilizzare DML per inserire, aggiornare ed eliminare singoli nodi e archi, puoi anche utilizzare i seguenti metodi per gestire i dati di Spanner Graph:
Puoi automatizzare l'eliminazione dei bordi in un grafico utilizzando l'azione ON DELETE CASCADE.
Puoi automatizzare l'eliminazione di nodi e archi nel grafico utilizzando una policy TTL. Per maggiori informazioni, consulta TTL su nodi e bordi.
Aggiorna ed elimina in blocco in modo efficiente nodi e archi nel grafico utilizzando DML partizionato.
Passaggi successivi
- Leggi la panoramica delle query Spanner Graph.
- Scopri le best practice per l'ottimizzazione delle query Spanner Graph.