En este documento se muestra cómo gestionar datos en un gráfico de Spanner insertando, actualizando y eliminando nodos y aristas. Spanner Graph asigna datos de tablas a nodos y aristas de gráficos. Para modificar datos en un gráfico, debes hacerlo en las tablas de entrada correspondientes.Puedes usar la consola de Google Cloud , la CLI de Google Cloud o las bibliotecas de cliente de Spanner para gestionar los datos del gráfico.
Configurar Spanner Graph
Para poder gestionar datos en un gráfico de Spanner, debes configurar un gráfico de Spanner haciendo lo siguiente:
Crea una base de datos en tu instancia de Spanner.
Inserta los datos del gráfico en tu base de datos.
En los ejemplos de estas secciones se usan la instancia y la base de datos que has creado al configurar tu gráfico de Spanner con los pasos anteriores.
Insertar nodos o aristas
Para insertar nodos o aristas en tablas de nodos o aristas, usa la consola Google Cloud , gcloud CLI 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. 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 la base de datos que has creado en Configurar tu gráfico de Spanner.
Consola
En la consola Google Cloud , ejecuta la siguiente instrucción DML. Para obtener más información, consulta Ejecutar instrucciones en la consola 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
En la CLI de gcloud, ejecuta los siguientes comandos. Para obtener más información, consulta Ejecutar instrucciones con la CLI de gcloud.
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)"
Haz los cambios siguientes:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia.
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. Si usas una biblioteca de cliente de Spanner, también puedes usar las APIs Mutation.
Actualizar nodos o aristas con DML
En los ejemplos siguientes se usa DML para actualizar el nodo Account
y el borde Transfer
que has añadido en Insertar nodos o bordes.
Consola
En la consola Google Cloud , ejecuta la siguiente instrucción DML. Para obtener más información, consulta Ejecutar instrucciones en la consola 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
- Ejecuta instrucciones con gcloud CLI.
- En gcloud CLI, ejecuta los siguientes comandos:
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"
Haz los cambios siguientes:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia.
Bibliotecas de cliente
Python
Java
Go
C++
Actualizar nodos o aristas con consultas de gráficos y DML
En los ejemplos siguientes se usan consultas de gráficos de Spanner con DML para actualizar el Account
nodo y la Transfer
arista que añadió en Insertar nodos o aristas.
Consola
En la consola Google Cloud , ejecuta la siguiente instrucción DML. Para obtener más información, consulta Ejecutar instrucciones en la consola 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
En la CLI de gcloud, ejecuta los siguientes comandos. Para obtener más información, consulta Ejecutar instrucciones con la CLI de gcloud.
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 }"
Haz los cambios siguientes:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia.
Bibliotecas de cliente
Python
Java
Go
C++
Eliminar nodos o aristas
Para eliminar nodos o aristas, usa la consola Google Cloud , la CLI de gcloud o las bibliotecas de cliente de Spanner.
En la consola Google Cloud y en gcloud CLI, se usa el lenguaje de manipulación de datos (DML) de GoogleSQL para eliminar datos. En la biblioteca de cliente de Spanner, puedes usar las APIs de DML o de Mutation para eliminar nodos o aristas.
Para evitar errores de infracción de la integridad referencial, asegúrate de que no haya aristas que hagan referencia a un nodo cuando lo elimines. 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
En la consola Google Cloud , ejecuta la siguiente instrucción DML. Para obtener más información, consulta Ejecutar instrucciones en la consola 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
En la CLI de gcloud, ejecuta los siguientes comandos. Para obtener más información, consulta Ejecutar instrucciones con la CLI de gcloud.
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"
Haz los cambios siguientes:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia.
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
}
Operaciones de datos automatizadas y en bloque
Además de usar DML para insertar, actualizar y eliminar nodos y aristas individuales, también puedes usar los siguientes métodos para gestionar tus datos de Spanner Graph:
Puedes automatizar la eliminación de aristas de un grafo mediante la acción ON DELETE CASCADE.
Puedes automatizar la eliminación de nodos y aristas del gráfico mediante una política de TTL. Para obtener más información, consulta Tiempo de vida de nodos y aristas.
Actualiza y elimina en bloque nodos y aristas del grafo de forma eficiente con 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.