En este documento se describe cómo modificar datos en un gráfico de Spanner mediante laGoogle Cloud consola, Google Cloud CLI y bibliotecas de cliente. La mutación de datos de grafos incluye la inserción, la actualización y la eliminación de nodos y aristas en Spanner Graph.
Spanner Graph asigna datos de tablas a nodos y aristas de gráficos. Para modificar datos en un gráfico, debes modificar los datos de las tablas de entrada correspondientes. Para obtener más información, consulta la descripción general del esquema de gráficos de Spanner.
Antes de empezar
Para completar los pasos de la consola y los ejemplos de código de este documento, primero debe seguir los pasos que se indican en Configurar y consultar Spanner Graph para hacer lo siguiente: Google Cloud
Insertar nodos o aristas
Para insertar nodos o aristas, usa la consola, Google Cloud CLI o las bibliotecas de cliente de Spanner para insertar filas en tablas de nodos o aristas. Google Cloud
En la Google Cloud consola y en la CLI de Google Cloud, puedes usar el lenguaje de manipulación de datos (DML) de GoogleSQL para insertar datos. En la biblioteca de cliente de Spanner, puedes usar DML o las APIs Mutation.
Antes de insertar una arista, asegúrate de que existan los nodos de origen y destino conectados por la arista. Si insertas un borde cuando no existe el nodo de origen o de destino conectado por el borde, es posible que se produzcan errores de infracción de la integridad referencial. Para obtener más información, consulta Falta el nodo de origen, lo que infringe la relación INTERLEAVE IN y Falta el nodo de destino, lo que infringe la restricción de clave externa.
En los siguientes ejemplos se insertan nodos Account
y aristas Transfer
en el gráfico:
Consola
En la Google Cloud consola, introduce la siguiente instrucció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 instrucciones con gcloud CLI.
- 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 de cliente
Python
Java
Go
C++
Actualizar nodos o aristas
Para actualizar nodos o aristas, usa la Google Cloud consola, la CLI de gcloud o las bibliotecas de cliente de Spanner.
Puedes actualizar nodos o aristas con una instrucción del lenguaje de manipulación de datos (DML) de GoogleSQL o con consultas de gráficos de Spanner con una instrucción DML. En la biblioteca de cliente de Spanner, también puedes usar las APIs Mutation.
Actualizar nodos o aristas con DML
En los siguientes ejemplos se actualizan un nodo Account
y una arista Transfer
en el gráfico mediante DML:
Consola
En la Google Cloud consola, introduce la siguiente instrucció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 instrucciones con gcloud CLI.
- 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 de cliente
Python
Java
Go
C++
Actualizar nodos o aristas con consultas de gráficos y DML
En los siguientes ejemplos se actualizan un nodo Account
y una arista Transfer
del gráfico mediante consultas de Spanner Graph con DML:
Consola
En la Google Cloud consola, introduce la siguiente consulta de gráfico de Spanner con una instrucción DML y, a continuación, 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 instrucciones con gcloud CLI.
- 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 de cliente
Python
Java
Go
C++
Eliminar nodos o aristas
Para eliminar nodos o aristas, usa la Google Cloud consola, la CLI de gcloud o las bibliotecas de cliente de Spanner.
En la consola de Google Cloud y en gcloud CLI, puedes usar el lenguaje de manipulación de datos (DML) de GoogleSQL para eliminar datos. En la biblioteca de cliente de Spanner, puedes usar DML o las APIs Mutation.
Antes de eliminar un nodo, asegúrate de que no haya aristas que hagan referencia a él. Si existen estos tipos de aristas, es posible que se produzcan errores de infracción de la integridad referencial. Para obtener más información, consulte los artículos Una arista saliente huérfana infringe la relación entre elementos principales y secundarios y Una arista entrante huérfana infringe la relación entre elementos principales y secundarios.
En los siguientes ejemplos se eliminan una arista Transfer
y un nodo Account
del gráfico.
Consola
- Ejecuta instrucciones en la Google Cloud consola.
- En la Google Cloud consola, introduce la siguiente instrucció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 instrucciones con gcloud CLI.
- 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 de cliente
Python
Java
Go
C++
Puedes combinar consultas de Spanner Graph con tu instrucció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 gráficos
Puede mutar automáticamente los datos de los gráficos de las siguientes formas:
- Elimina automáticamente las aristas del gráfico mediante la acción ON DELETE CASCADE.
- Eliminar automáticamente nodos y aristas del gráfico mediante la política TTL. Para obtener más información, consulta Tiempo de vida de nodos y aristas.
Para actualizar y eliminar en bloque nodos y aristas del grafo de forma eficiente, usa DML particionado.
Siguientes pasos
- Consulta la descripción general de las consultas de Spanner Graph.
- Consulta las prácticas recomendadas para optimizar las consultas de Spanner Graph.