En este documento, se describe cómo mutar datos en el gráfico de Spanner con la consola deGoogle Cloud , Google Cloud CLI y las bibliotecas cliente. Los datos del gráfico mutables incluyen la inserción, la actualización y el borrado de nodos y aristas en Spanner Graph.
Spanner Graph asigna datos de tablas a nodos y vínculos de gráficos. Para mutar datos en un gráfico, debes mutar los datos en las tablas de entrada correspondientes. Para obtener más información, consulta la descripción general del esquema de Spanner Graph.
Antes de comenzar
Para completar los pasos de la consola de Google Cloud y las muestras de código de este documento, primero debes seguir los pasos que se indican en Configura y consulta Spanner Graph para hacer lo siguiente:
Cómo insertar nodos o bordes
Para insertar nodos o aristas, usa la consola, la CLI de Google Cloud o las bibliotecas cliente de Spanner para insertar filas en las tablas de nodos o aristas. Google Cloud
En la consola de Google Cloud y en Google Cloud CLI, puedes usar el lenguaje de manipulación de datos (DML) de GoogleSQL para insertar datos. En la biblioteca cliente de Spanner, puedes usar DML o las APIs de Mutation.
Antes de insertar una arista, asegúrate de que existan los nodos de origen y destino conectados por la arista. Si insertas una arista cuando no existe el nodo de origen o destino conectado por la arista, es posible que recibas errores de incumplimiento de la integridad referencial. Para obtener más información, consulta Falta el nodo fuente, lo que incumple la relación INTERLEAVE IN y Falta el nodo de destino, lo que incumple la restricción de clave externa.
En los siguientes ejemplos, se insertan nodos Account
y bordes Transfer
en el gráfico:
Console
En la consola de Google Cloud , ingresa la siguiente declaración DML y haz clic en Ejecutar consulta:
-- 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
- Ejecuta declaraciones con la CLI de gcloud.
- En gcloud CLI, ejecuta los siguientes comandos:
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)"
Bibliotecas cliente
Python
Java
Go
C++
Actualiza nodos o aristas
Para actualizar los nodos o los bordes existentes, usa la consola deGoogle Cloud , la CLI de gcloud o las bibliotecas cliente de Spanner.
Puedes actualizar los nodos o los bordes existentes con una declaración de lenguaje de manipulación de datos (DML) de GoogleSQL o con consultas de Spanner Graph con una declaración DML. En la biblioteca cliente de Spanner, también puedes usar las APIs de Mutation.
Actualiza nodos o aristas con DML
En los siguientes ejemplos, se actualizan un nodo Account
y una arista Transfer
en el gráfico con DML:
Console
En la consola de Google Cloud , ingresa la siguiente declaración DML y haz clic en Ejecutar consulta:
-- 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
- Ejecuta declaraciones con la CLI de gcloud.
- En gcloud CLI, ejecuta los siguientes comandos:
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"
Bibliotecas cliente
Python
Java
Go
C++
Actualiza nodos o aristas con consultas de grafos y DML
En los siguientes ejemplos, se actualizan un nodo Account
y una arista Transfer
en el gráfico con consultas de Spanner Graph con DML:
Console
En la consola de Google Cloud , ingresa la siguiente consulta de Spanner Graph con una declaración DML y, luego, haz clic en Ejecutar consulta:
-- 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
- Ejecuta declaraciones con la CLI de gcloud.
- En gcloud CLI, ejecuta los siguientes comandos:
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 }"
Bibliotecas cliente
Python
Java
Go
C++
Cómo borrar nodos o bordes
Para borrar nodos o aristas existentes, usa la consola deGoogle Cloud , la CLI de gcloud o las bibliotecas cliente de Spanner.
En la consola de Google Cloud y en la CLI de gcloud, puedes usar el lenguaje de manipulación de datos (DML) de GoogleSQL para borrar. En la biblioteca cliente de Spanner, puedes usar DML o APIs de mutación.
Antes de borrar un nodo, asegúrate de que no existan aristas que hagan referencia a él. Si existen estos tipos de bordes, es posible que recibas errores de incumplimiento de la integridad referencial. Para obtener más información, consulta El borde saliente huérfano incumple la relación entre elementos superiores y secundarios y El borde entrante huérfano incumple la relación entre elementos superiores y secundarios.
En los siguientes ejemplos, se borran una arista Transfer
y un nodo Account
del grafo.
Console
- Ejecuta declaraciones en la Google Cloud consola.
- En la consola de Google Cloud , ingresa la siguiente declaración DML y haz clic en Ejecutar consulta:
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
- Ejecuta declaraciones con la CLI de gcloud.
- En gcloud CLI, ejecuta los siguientes comandos:
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"
Bibliotecas cliente
Python
Java
Go
C++
Puedes combinar consultas de Spanner Graph con tu declaración DML, como se muestra en el siguiente ejemplo:
-- 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
}
Opciones para mutar datos de grafos
Puedes generar mutaciones automáticamente en los datos del gráfico de las siguientes maneras:
- Borra automáticamente las aristas del gráfico con la acción ON DELETE CASCADE.
- Borra automáticamente los nodos y los bordes del grafo con la política de TTL. Para obtener más información, consulta TTL en nodos y aristas.
Para actualizar y borrar de forma masiva y eficiente nodos y aristas en el grafo, usa el DML particionado.
¿Qué sigue?
- Lee la descripción general de las consultas de Spanner Graph.
- Obtén información sobre las prácticas recomendadas para optimizar las consultas de Spanner Graph.