Inserta, actualiza o borra datos de Spanner Graph

En este documento, se describe cómo mutar datos en el grafo de Spanner. Mutación los datos del grafo incluyen insertar, actualizar y borrar nodos y aristas en Spanner Graph.

Spanner Graph asigna datos de tablas a los nodos y perímetros del grafo. Cambiar datos de un gráfico, debes mutar los datos en las tablas de entrada correspondientes. Para ver más consulta la Descripción general del esquema del gráfico de Spanner.

Antes de comenzar

Configura y consulta Spanner Graph.

Inserta nodos o aristas

Para insertar nodos o aristas, usa la consola de Google Cloud, Google Cloud CLI Bibliotecas cliente de Spanner para insertar filas en tablas de nodos o perimetrales.

En la consola de Google Cloud y en Google Cloud CLI, puedes usar SQL Lenguaje de manipulación de datos (DML) para insertar. En la biblioteca cliente de Spanner, puedes usar archivos APIs de mutación.

Antes de insertar una arista, asegúrate de que los nodos de origen y destino conectadas por el perímetro. Si insertas un borde cuando la fuente o de destino conectado por el perímetro no existe, es posible que obtengas incumplimientos de integridad. Para obtener más información, consulta La falta del nodo de origen infringe la relación INTERLEAVE IN y Falta un nodo de destino que infringe la restricción de clave externa.

En los siguientes ejemplos, se insertan nodos Account y bordes Transfer en el gráfico:

Console

  1. Ejecuta sentencias en la consola de Google Cloud.

  2. 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

  1. Ejecuta sentencias con gcloud CLI.
  2. 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)"

Actualiza nodos o aristas

Para actualizar los nodos o las aristas existentes, usa el la consola de Google Cloud, gcloud CLI o Bibliotecas cliente de Spanner.

En la consola de Google Cloud y en gcloud CLI, puedes usar SQL Lenguaje de manipulación de datos (DML) que se actualizará. En la biblioteca cliente de Spanner, puedes usar ya sea DML o APIs de mutación.

En los siguientes ejemplos, se actualizan un nodo Account y un borde Transfer en el gráfico.

Console

  1. Ejecuta sentencias en la consola de Google Cloud.

  2. 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

  1. Ejecuta sentencias con gcloud CLI.
  2. 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"

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 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
  }

Borra nodos o aristas

Para borrar nodos o aristas existentes, usa el Consola de Google Cloud, con la CLI de gcloud Bibliotecas cliente de Spanner.

En la consola de Google Cloud y en gcloud CLI, puedes usar SQL Lenguaje de manipulación de datos (DML) que se borrará. En la biblioteca cliente de Spanner, puedes usar DML o las APIs de mutación.

Antes de borrar un nodo, asegúrate de que no haya aristas que hagan referencia a él. Si existen estos tipos de aristas, podrías recibir una violación de la integridad referencial errores. Para obtener más información, consulta El borde saliente huérfano infringe la relación superior-secundario y El borde entrante huérfano infringe la relación superior-secundario.

En los siguientes ejemplos, se borran un borde Transfer y un nodo Account del gráfico.

Console

  1. Ejecuta sentencias en la consola de Google Cloud.
  2. 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

  1. Ejecuta sentencias con gcloud CLI.
  2. 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"

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
}

Opciones para mutar los datos del gráfico

Puedes mutar automáticamente los datos del gráfico de las siguientes maneras:

Para actualizar y borrar nodos y aristas en forma masiva y eficiente en el gráfico, usa DML particionado.

¿Qué sigue?