En este documento, se muestra cómo administrar datos en un gráfico insertando, actualizando y borrando nodos y perímetros. Spanner Graph asigna datos de tablas a nodos y perímetros de gráficos. Para mutar datos en un gráfico, debes mutar los datos en las tablas de entrada correspondientes. Puedes usar la Google Cloud consola, la Google Cloud CLI o las bibliotecas cliente de Spanner para administrar datos de grafos.
Configura tu Spanner Graph
Antes de que puedas administrar datos en Spanner Graph, debes configurar un gráfico haciendo lo siguiente:
Crea una base de datos en tu instancia de Spanner.
Inserta datos de gráficos en tu base de datos.
En los ejemplos de estas secciones, se usan la instancia y la base de datos que creaste cuando configuraste tu Spanner Graph con los pasos anteriores.
Inserta nodos o perímetros
Para insertar nodos o perímetros en tablas de nodos o perímetros, usa la Google Cloud consola, gcloud CLIo las bibliotecas cliente de Spanner.
En la Google Cloud consola y en gcloud CLI, puedes usar el lenguaje de manipulación de datos (DML) de GoogleSQL. En la biblioteca cliente de Spanner, puedes usar las APIs de DML o de mutación.
Antes de insertar un perímetro, asegúrate de que existan los nodos de origen y destino conectados por el perímetro. Si insertas un perímetro cuando no existe el nodo de origen o destino conectado por el perímetro, es posible que recibas errores de incumplimiento de la integridad referencial. Para obtener más información, consulta Missing source node violates INTERLEAVE IN relationship y Missing destination node violates clave externa constraint.
En los siguientes ejemplos, se insertan nodos Account y perímetros Transfer en la
base de datos que creaste en Configura tu Spanner Graph.
Console
En la Google Cloud consola, ejecuta la siguiente declaración DML. Para obtener más información, consulta Ejecuta declaraciones en la Google Cloud consola.
-- 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 gcloud CLI, ejecuta los siguientes comandos. Para obtener más información, consulta Ejecuta declaraciones 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)"
Reemplaza lo siguiente:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia
Bibliotecas cliente
Python
Java
Ir
C++
Actualiza nodos o perímetros
Para actualizar nodos o perímetros existentes, usa la Google Cloud consola, gcloud CLI o las bibliotecas cliente de Spanner.
Puedes actualizar nodos o perímetros existentes con una declaración del lenguaje de manipulación de datos (DML) de GoogleSQL Data Manipulation Language (DML) o consultas de Spanner Graph con una declaración DML. Si usas una biblioteca cliente de Spanner, también puedes usar las APIs de mutación.
Actualiza nodos o perímetros con DML
En los siguientes ejemplos, se usa DML para actualizar el nodo Account y el perímetro Transfer
que agregaste en Inserta nodos o perímetros.
Console
En la Google Cloud consola, ejecuta la siguiente declaración DML. Para obtener más información, consulta Ejecuta declaraciones en la Google Cloud consola.
-- 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 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"
Reemplaza lo siguiente:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia
Bibliotecas cliente
Python
Java
Ir
C++
Actualiza nodos o perímetros con consultas de gráficos y DML
En los siguientes ejemplos, se usan consultas de Spanner Graph con DML para actualizar el
Account nodo y Transfer perímetro que agregaste en
Inserta nodos o perímetros.
Console
En la Google Cloud consola, ejecuta la siguiente declaración DML. Para obtener más información, consulta Ejecuta declaraciones en la Google Cloud consola.
-- 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 gcloud CLI, ejecuta los siguientes comandos. Para obtener más información, consulta Ejecuta declaraciones 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 }"
Reemplaza lo siguiente:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia
Bibliotecas cliente
Python
Java
Ir
C++
Borra nodos o perímetros
Para borrar nodos o perímetros existentes, usa la Google Cloud consola, gcloud CLI o las bibliotecas cliente de Spanner.
En la Google Cloud consola y en gcloud CLI, usas el lenguaje de manipulación de datos de GoogleSQL (DML) para borrar. En la biblioteca cliente de Spanner, puedes usar las APIs de DML o de mutación para borrar nodos o perímetros.
Para evitar errores de incumplimiento de la integridad referencial, asegúrate de que ningún perímetro haga referencia a un nodo cuando borres el nodo. Para obtener más información, consulta Orphaned outgoing edge violates parent-child relationship y Orphaned incoming edge violates parent-child relationship.
En los siguientes ejemplos, se borran un perímetro Transfer y un nodo Account del gráfico.
Console
En la Google Cloud consola, ejecuta la siguiente declaración DML. Para obtener más información, consulta Ejecuta declaraciones en la Google Cloud consola.
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
En gcloud CLI, ejecuta los siguientes comandos. Para obtener más información, consulta Ejecuta declaraciones 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"
Reemplaza lo siguiente:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia
Bibliotecas cliente
Python
Java
Ir
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
}
Operaciones de datos automatizadas y masivas
Además de usar DML para insertar, actualizar y borrar nodos y perímetros individuales, también puedes usar los siguientes métodos para administrar tus datos de Spanner Graph:
Puedes automatizar el borrado de perímetros en un gráfico con la acción ON DELETE CASCADE.
Puedes automatizar el borrado de nodos y perímetros en el gráfico con una TTL política. Para obtener más información, consulta TTL en nodos y perímetros.
Actualiza y borra de forma masiva y eficiente nodos y perímetros en el gráfico con 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 ajustar las consultas de Spanner Graph.