Questo documento mostra come gestire i dati in un grafico di Spanner Graph 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. Per gestire i dati del grafico, puoi utilizzare la console Google Cloud , Google Cloud CLI o le librerie client di Spanner.
Configura il grafico di Spanner Graph
Per poter gestire i dati di un grafico di Spanner Graph, devi prima configurare il grafico nel modo seguente:
Crea un database nella tua istanza di Spanner.
Inserisci i dati del grafico nel database.
Gli esempi riportati in queste sezioni utilizzano l'istanza e il database che hai creato quando hai configurato il grafico di Spanner Graph seguendo i passaggi precedenti.
Inserisci 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 di Spanner.
Nella console Google Cloud e in gcloud CLI, puoi utilizzare il Data Manipulation Language (DML) di GoogleSQL. Nella libreria client di Spanner, puoi utilizzare il DML o le API di mutazione.
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 saperne di più, 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 Configura il grafico di Spanner Graph.
Console
Nella console Google Cloud , esegui l'istruzione DML seguente. Per saperne di più, consulta Esegui 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
In gcloud CLI, esegui i comandi seguenti. Per saperne di più, consulta Esegui 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 database.
- INSTANCE_NAME: il nome dell'istanza.
Librerie client
Python
Java
Go
C++
Aggiorna nodi o archi
Per aggiornare i nodi o gli archi esistenti, utilizza la consoleGoogle Cloud , gcloud CLI o le librerie client di Spanner.
Puoi aggiornare nodi o archi esistenti utilizzando un'istruzione Data Manipulation Language (DML) di GoogleSQL oppure query Spanner Graph con un'istruzione DML. Se utilizzi una libreria client di Spanner, puoi usare anche le API di mutazione.
Aggiorna nodi o archi con DML
I seguenti esempi utilizzano DML per aggiornare il nodo Account e l'arco Transfer che hai aggiunto nel passaggio Inserisci nodi o archi.
Console
Nella console Google Cloud , esegui l'istruzione DML seguente. Per saperne di più, consulta Esegui 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 le istruzioni con gcloud CLI.
- In gcloud CLI, esegui i comandi seguenti:
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 database.
- INSTANCE_NAME: il nome dell'istanza.
Librerie client
Python
Java
Go
C++
Aggiorna nodi o archi con query Spanner Graph e DML
Gli esempi seguenti utilizzano query Spanner Graph con DML per aggiornare il nodo Account e l'arco Transfer che hai aggiunto nel passaggio Inserisci nodi o archi.
Console
Nella console Google Cloud , esegui l'istruzione DML seguente. Per saperne di più, consulta Esegui 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
In gcloud CLI, esegui i comandi seguenti. Per saperne di più, consulta Esegui 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 database.
- INSTANCE_NAME: il nome dell'istanza.
Librerie client
Python
Java
Go
C++
Elimina nodi o archi
Per eliminare nodi o archi esistenti, utilizza la console Google Cloud , gcloud CLI o le librerie client di Spanner.
Nella console Google Cloud e in gcloud CLI, utilizza il Data Manipulation Language (DML) di GoogleSQL per eliminare questi elementi. Nella libreria client di Spanner, puoi utilizzare il DML o le API di mutazione per eliminare nodi o archi.
Per evitare errori di violazione dell'integrità referenziale, assicurati che nessun arco faccia riferimento a un nodo quando elimini quest'ultimo. Per saperne di più, consulta Un arco in uscita orfano viola la relazione padre-figlio e Un 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 l'istruzione DML seguente. Per saperne di più, consulta Esegui 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
In gcloud CLI, esegui i comandi seguenti. Per saperne di più, consulta Esegui 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 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 degli archi in un grafico utilizzando l'azione ON DELETE CASCADE.
Puoi automatizzare l'eliminazione di nodi e archi nel grafico utilizzando una policy TTL. Per saperne di più, consulta TTL su nodi e archi.
Per eseguire l'aggiornamento e l'eliminazione collettivi di nodi e archi nel grafico in modo efficiente, utilizza il DML partizionato.
Passaggi successivi
- Leggi la panoramica delle query Spanner Graph.
- Scopri le best practice per l'ottimizzazione delle query Spanner Graph.