Este documento descreve como transformar dados no Spanner Graph usando o console do Google Cloud, a CLI do Google Cloud e as bibliotecas de cliente. A mutação de dados de gráfico inclui a inserção, atualização e exclusão de nós e arestas no Spanner Graph.
O Spanner Graph mapeia dados de tabelas para nós e arestas de gráficos. Para modificar dados em um gráfico, é necessário modificar os dados nas tabelas de entrada correspondentes. Para mais informações, consulte a Visão geral do esquema do gráfico do Spanner.
Antes de começar
Para concluir as etapas do console do Google Cloud e os exemplos de código neste documento, primeiro siga as etapas em Configurar e consultar o Spanner Graph para fazer o seguinte:
Inserir nós ou arestas
Para inserir nós ou arestas, use o console do Google Cloud, a CLI do Google Cloud ou as bibliotecas de cliente do Spanner para inserir linhas em tabelas de nó ou aresta.
No console do Google Cloud e na CLI do Google Cloud, é possível usar a linguagem de manipulação de dados (DML) do GoogleSQL para inserir. Na biblioteca de cliente do Spanner, é possível usar DML ou APIs Mutation.
Antes de inserir uma aresta, verifique se os nós de origem e de destino conectados por ela existem. Se você inserir uma borda 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 a relação INTERLEAVE IN e O nó de destino ausente viola a restrição de chave externa.
Os exemplos a seguir inserem nós Account
e arestas Transfer
no
gráfico:
Console
No console do Google Cloud, insira a seguinte instrução DML e clique em Run Query:
-- 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
- Execute instruções com a CLI gcloud.
- Na CLI gcloud, execute os seguintes 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)"
Bibliotecas de cliente
Python
Java
Go
C++
Atualizar nós ou arestas
Para atualizar nós ou arestas, use o console do Google Cloud, a CLI gcloud ou as bibliotecas de cliente do Spanner.
É possível atualizar nós ou arestas usando uma instrução de linguagem de manipulação de dados (DML, na sigla em inglês) do GoogleSQL ou consultas do Spanner Graph com uma instrução DML. Na biblioteca de cliente do Spanner, também é possível usar APIs Mutation.
Atualizar nós ou arestas com DML
Os exemplos a seguir atualizam um nó Account
e uma aresta Transfer
no
gráfico usando a DML:
Console
No console do Google Cloud, insira a seguinte instrução DML e clique em Run Query:
-- 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;
Console
- Execute instruções com a CLI gcloud.
- Na CLI gcloud, execute os seguintes 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"
Bibliotecas de cliente
Python
Java
Go
C++
Atualizar nós ou arestas com consultas de gráfico e DML
Os exemplos a seguir atualizam um nó Account
e uma aresta Transfer
no
gráfico usando consultas do Spanner Graph com DML:
Console
No console do Google Cloud, insira a consulta do Spanner Graph com uma instrução DML e clique em Run Query:
-- 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
- Execute instruções com a CLI gcloud.
- Na CLI gcloud, execute os seguintes comandos:
gcloud spanner databases execute-sql example-db --instance=test-instance \ --sql="UPDATE Account SET is_blocked = false"
gcloud spanner databases execute-sql example-db --instance=test-instance \ --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 }"
Bibliotecas de cliente
Python
Java
Go
C++
Excluir nós ou arestas
Para excluir nós ou arestas, use o console do Google Cloud, a CLI gcloud ou as bibliotecas de cliente do Spanner.
No console do Google Cloud e na CLI gcloud, é possível usar a linguagem de manipulação de dados (DML, na sigla em inglês) do GoogleSQL para excluir. Na biblioteca de cliente do Spanner, é possível usar a DML ou as APIs Mutation.
Antes de excluir um nó, verifique se não há arestas que se referem a ele. Se esses tipos de arestas existirem, você poderá receber erros de violação de integridade referencial. Para mais informações, consulte A aresta de saída órfã viola a relação pai-filho e A aresta de entrada órfã viola a relação pai-filho.
Os exemplos a seguir excluem uma aresta Transfer
e um nó Account
do
gráfico.
Console
- Execute instruções no console do Google Cloud.
- No console do Google Cloud, insira a seguinte instrução DML e clique em Run Query:
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
- Execute instruções com a CLI gcloud.
- Na CLI gcloud, execute os seguintes 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"
Bibliotecas de cliente
Python
Java
Go
C++
É possível combinar consultas do Spanner Graph com sua instrução DML, conforme mostrado no exemplo abaixo:
-- 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
}
Opções para modificar dados de gráfico
É possível modificar automaticamente os dados do gráfico das seguintes maneiras:
- Exclua automaticamente as arestas no gráfico usando a ação ON DELETE CASCADE.
- Exclua automaticamente nós e arestas no gráfico usando a política TTL. Para mais informações, consulte TTL em nós e bordas.
Para atualizar e excluir nós e arestas em massa no gráfico de maneira eficiente, use a DML particionada.
A seguir
- Leia a Visão geral das consultas do Spanner Graph.
- Saiba mais sobre as práticas recomendadas para ajustar consultas do Spanner Graph.