Neste documento, mostramos como gerenciar dados em um gráfico do Spanner 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 de um gráfico, é necessário fazer mutações nas tabelas de entrada correspondentes.Use o console Google Cloud , 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 em um gráfico do Spanner, faça o seguinte:
Crie um banco de dados na sua instância do Spanner.
Insira dados de gráfico no banco de dados.
Os exemplos nestas seções usam a instância e o banco de dados que você criou ao configurar o gráfico do Spanner com as etapas anteriores.
Inserir nós ou arestas
Para inserir nós ou arestas em tabelas de nós ou arestas, use o console do Google Cloud , a CLI gcloud ou as bibliotecas de cliente do Spanner.
No console Google Cloud 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 DML ou APIs Mutation.
Antes de inserir uma aresta, verifique se os nós de origem e destino conectados por ela 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 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 banco de dados criado em Configurar o gráfico do Spanner.
Console
No console Google Cloud , execute a seguinte instrução DML. Para mais informações, consulte Executar instruções no console do 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
Na CLI gcloud, execute os seguintes comandos. 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 console doGoogle Cloud , a CLI gcloud ou as bibliotecas de cliente do Spanner.
É possível atualizar nós ou arestas usando uma instrução da linguagem de manipulação de dados (DML) do GoogleSQL ou consultas do Spanner Graph com uma instrução DML. Se você usar uma biblioteca de cliente do Spanner, também poderá usar as APIs Mutation.
Atualizar nós ou arestas com DML
Os exemplos a seguir usam a DML para atualizar o nó Account
e a aresta Transfer
que você adicionou em Inserir nós ou arestas.
Console
No console Google Cloud , execute a seguinte instrução DML. Para mais informações, consulte Executar instruções no console do 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
- Execute instruções com a CLI gcloud.
- Na CLI gcloud, execute os seguintes 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"
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 de gráfico do Spanner com DML para atualizar o nó Account
e a aresta Transfer
que você adicionou em Inserir nós ou arestas.
Console
No console Google Cloud , execute a seguinte instrução DML. Para mais informações, consulte Executar instruções no console do 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
Na CLI gcloud, execute os seguintes comandos. 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, use o console do Google Cloud , a CLI gcloud ou as bibliotecas de cliente do Spanner.
No console Google Cloud e na CLI gcloud, use a linguagem de manipulação de dados (DML) do GoogleSQL para excluir. Na biblioteca de cliente do Spanner, é possível usar DML ou APIs Mutation para excluir nós ou arestas.
Para evitar erros de violação da integridade referencial, verifique se não há arestas que se referem a um nó ao excluir o nó. 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
No console Google Cloud , execute a seguinte instrução DML. Para mais informações, consulte Executar instruções no console do 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
Na CLI gcloud, execute os seguintes comandos. 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 sua instrução DML, como 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 seguintes métodos para gerenciar seus 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 política de TTL. Para mais informações, consulte TTL em nós e arestas.
Atualize e exclua nós e arestas em massa de maneira eficiente no gráfico usando a DML particionada.
A seguir
- Leia a visão geral das consultas de gráfico do Spanner.
- Conheça as práticas recomendadas para ajustar consultas de gráficos do Spanner.