En este documento, se muestra cómo administrar datos en un gráfico de Spanner insertando, actualizando y borrando nodos y aristas. Spanner Graph asigna datos de tablas a nodos y aristas del gráfico. Para mutar datos en un gráfico, debes mutar datos en las tablas de entrada correspondientes.Puedes usar la consola de Google Cloud , Google Cloud CLI o las bibliotecas cliente de Spanner para administrar los datos del gráfico.
Configura tu Spanner Graph
Antes de administrar datos en un gráfico de Spanner, debes configurarlo de la siguiente manera:
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 gráfico de Spanner con los pasos anteriores.
Cómo insertar nodos o bordes
Para insertar nodos o aristas en tablas de nodos o aristas, usa la consola de Google 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. 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 aristas Transfer
en la base de datos que creaste en Configura tu gráfico de Spanner.
Console
En la consola de Google Cloud , ejecuta la siguiente declaración DML. Para obtener más información, consulta Cómo ejecutar instrucciones en la consola de 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 gcloud CLI, ejecuta los siguientes comandos. Para obtener más información, consulta Cómo 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)"
Reemplaza lo siguiente:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia
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. Si usas una biblioteca cliente de Spanner, también puedes usar las APIs de Mutation.
Actualiza nodos o aristas con DML
En los siguientes ejemplos, se usa DML para actualizar el nodo Account
y la arista Transfer
que agregaste en Cómo insertar nodos o aristas.
Console
En la consola de Google Cloud , ejecuta la siguiente declaración DML. Para obtener más información, consulta Cómo ejecutar instrucciones en la consola de 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 declaraciones con la CLI de gcloud.
- 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
Go
C++
Actualiza nodos o aristas con consultas de grafos y DML
En los siguientes ejemplos, se usan consultas de Spanner Graph con DML para actualizar el nodo Account
y la arista Transfer
que agregaste en Cómo insertar nodos o aristas.
Console
En la consola de Google Cloud , ejecuta la siguiente declaración DML. Para obtener más información, consulta Cómo ejecutar instrucciones en la consola de 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 gcloud CLI, ejecuta los siguientes comandos. Para obtener más información, consulta Cómo 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 }"
Reemplaza lo siguiente:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia
Bibliotecas cliente
Python
Java
Go
C++
Cómo borrar nodos o bordes
Para borrar nodos o aristas existentes, usa la consola de Google Cloud , la CLI de gcloud o las bibliotecas cliente de Spanner.
En la consola de Google Cloud y en la CLI de gcloud, usas el lenguaje de manipulación de datos (DML) de GoogleSQL para borrar. En la biblioteca cliente de Spanner, puedes usar DML o las APIs de Mutation para borrar nodos o bordes.
Para evitar errores de incumplimiento de la integridad referencial, asegúrate de que no haya aristas que hagan referencia a un nodo cuando lo borres. 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
En la consola de Google Cloud , ejecuta la siguiente declaración DML. Para obtener más información, consulta Cómo ejecutar instrucciones en la consola de 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 gcloud CLI, ejecuta los siguientes comandos. Para obtener más información, consulta Cómo 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"
Reemplaza lo siguiente:
- DATABASE_NAME: el nombre de tu base de datos.
- INSTANCE_NAME: el nombre de tu instancia
Bibliotecas cliente
Python
Java
Go
C++
Puedes combinar las 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 aristas individuales, también puedes usar los siguientes métodos para administrar tus datos de Spanner Graph:
Puedes automatizar el borrado de aristas en un grafo con la acción ON DELETE CASCADE.
Puedes automatizar la eliminación de nodos y aristas en el gráfico con una política de TTL. Para obtener más información, consulta TTL en nodos y aristas.
Actualiza y borra de forma masiva y eficiente nodos y aristas en el grafo 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 optimizar las consultas de Spanner Graph.