Este documento mostra como gerenciar dados em um gráfico inserindo, atualizando e excluindo nós e arestas. O Spanner Graph mapeia dados de tabelas para nós e arestas de gráficos. Para fazer mutações em dados em um gráfico, é necessário fazer mutações nos dados das tabelas de entrada correspondentes. É possível usar o Google Cloud console, a Google Cloud CLI ou as bibliotecas de cliente do Spanner para gerenciar dados de gráficos.
Configurar o Spanner Graph
Antes de gerenciar dados no Spanner Graph, é necessário configurar um gráfico fazendo o seguinte:
Crie um banco de dados na sua instância do Spanner.
Insira dados de gráficos no seu banco de dados.
Os exemplos nestas seções usam a instância e o banco de dados criados ao configurar o Spanner Graph com as etapas anteriores.
Inserir nós ou arestas
Para inserir nós ou arestas em tabelas de nós ou arestas, use o Google Cloud console, a CLI gcloud ou as bibliotecas de cliente do Spanner.
No Google Cloud console e na CLI gcloud, é possível usar a linguagem de manipulação de dados (DML) do GoogleSQL. Na biblioteca de cliente do Spanner, é possível usar APIs DML ou Mutation.
Antes de inserir uma aresta, verifique se os nós de origem e destino conectados pela aresta existem. Se você inserir uma aresta quando o nó de origem ou destino conectado por ela não existir, poderá receber erros de violação de integridade referencial. Para mais informações, consulte O nó de origem ausente viola o relacionamento INTERLEAVE IN e O nó de destino ausente viola a chave externa estrangeira.
Os exemplos a seguir inserem nós Account e arestas Transfer no
banco de dados criado em Configurar o Spanner Graph.
Console
No Google Cloud console, execute a seguinte instrução DML. Para mais informações, consulte Executar instruções no Google Cloud console.
-- 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
Na CLI gcloud, execute os comandos a seguir. Para mais informações, consulte Executar instruções com a CLI 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)"
Substitua:
- DATABASE_NAME: o nome do banco de dados.
- INSTANCE_NAME: o nome da instância.
Bibliotecas de cliente
Python
Java
Go
C++
Atualizar nós ou arestas
Para atualizar nós ou arestas atuais, use o Google Cloud console, a CLI gcloud ou as bibliotecas de cliente do Spanner.
É possível atualizar nós ou arestas atuais usando uma instrução da linguagem de manipulação de dados (DML) do GoogleSQL Data Manipulation Language (DML) ou consultas do Spanner Graph com uma instrução DML. Se você usar uma biblioteca de cliente do Spanner, também poderá usar APIs Mutation.
Atualizar nós ou arestas com DML
Os exemplos a seguir usam DML para atualizar o nó Account e a aresta Transfer
adicionados em Inserir nós ou arestas.
Console
No Google Cloud console, execute a seguinte instrução DML. Para mais informações, consulte Executar instruções no Google Cloud console.
-- 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
- Execute instruções com a CLI gcloud.
- Na CLI gcloud, execute os comandos a seguir:
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"
Substitua:
- DATABASE_NAME: o nome do banco de dados.
- INSTANCE_NAME: o nome da instância.
Bibliotecas de cliente
Python
Java
Go
C++
Atualizar nós ou arestas com consultas de gráficos e DML
Os exemplos a seguir usam consultas do Spanner Graph com DML para atualizar o
Account nó e Transfer aresta adicionados em
Inserir nós ou arestas.
Console
No Google Cloud console, execute a seguinte instrução DML. Para mais informações, consulte Executar instruções no Google Cloud console.
-- 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
Na CLI gcloud, execute os comandos a seguir. Para mais informações, consulte Executar instruções com a CLI 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 }"
Substitua:
- DATABASE_NAME: o nome do banco de dados.
- INSTANCE_NAME: o nome da instância.
Bibliotecas de cliente
Python
Java
Go
C++
Excluir nós ou arestas
Para excluir nós ou arestas atuais, use o Google Cloud console, a CLI gcloud ou as bibliotecas de cliente do Spanner.
No Google Cloud console e na CLI gcloud, você usa a linguagem de manipulação de dados (DML) do GoogleSQL para excluir. Na biblioteca de cliente do Spanner, é possível usar APIs DML ou Mutation para excluir nós ou arestas.
Para evitar erros de violação de integridade referencial, verifique se nenhuma aresta se refere a um nó ao excluir o nó. Para mais informações, consulte A aresta de saída órfã viola o relacionamento pai-filho e A aresta de entrada órfã viola o relacionamento pai-filho.
Os exemplos a seguir excluem uma aresta Transfer e um nó Account do gráfico.
Console
No Google Cloud console, execute a seguinte instrução DML. Para mais informações, consulte Executar instruções no Google Cloud console.
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
Na CLI gcloud, execute os comandos a seguir. Para mais informações, consulte Executar instruções com a CLI 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"
Substitua:
- DATABASE_NAME: o nome do banco de dados.
- INSTANCE_NAME: o nome da instância.
Bibliotecas de cliente
Python
Java
Go
C++
É possível combinar consultas do Spanner Graph com a instrução DML, conforme mostrado no exemplo a seguir:
-- 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
}
Operações de dados automatizadas e em massa
Além de usar DML para inserir, atualizar e excluir nós e arestas individuais, também é possível usar os métodos a seguir para gerenciar os dados do Spanner Graph:
É possível automatizar a exclusão de arestas em um gráfico usando a ação ON DELETE CASCADE.
É possível automatizar a exclusão de nós e arestas no gráfico usando uma TTL. Para mais informações, consulte TTL em nós e arestas.
Atualize e exclua nós e arestas no gráfico de maneira eficiente usando DML particionada.
A seguir
- Leia a visão geral das consultas do Spanner Graph.
- Conheça as práticas recomendadas para ajustar as consultas do Spanner Graph.