Neste documento, descrevemos como modificar dados no gráfico do Spanner usando o Console do Google Cloud, a Google Cloud CLI e 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 gráfico do Spanner mapeia dados de tabelas para nós e bordas do gráfico. 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, você deve primeiro seguir as etapas em Configurar e consultar o gráfico do Spanner usando o console do Google Cloud faça o seguinte:
- Crie uma instância.
- Criar um banco de dados.
- Crie um esquema para o banco de dados do gráfico do Spanner.
- Inserir dados do gráfico.
Inserir nós ou arestas
Para inserir nós ou arestas, use o console do Google Cloud, a Google Cloud CLI ou as bibliotecas de cliente do Spanner para inserir linhas em tabelas de nós ou arestas.
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 a DML ou APIs de mutação.
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 a origem ou nó de destino conectado pela borda não existir, poderá haver erros de violação de integridade. 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 bordas Transfer
na
gráfico:
Console
No console do Google Cloud, digite a seguinte instrução DML e Clique em Executar 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
- 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 bordas atuais usando uma Linguagem de manipulação de dados (DML, na sigla em inglês) ou consultas do gráfico do Spanner com uma instrução DML. Na com uma biblioteca de cliente do Spanner, APIs de mutação.
Atualizar nós ou bordas 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, digite a seguinte instrução DML e Clique em Executar 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;
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 bordas com consultas de gráfico e DML
Os exemplos a seguir atualizam um nó Account
e uma borda Transfer
na
gráfico usando consultas do gráfico do Spanner com DML:
Console
No console do Google Cloud, insira a consulta do Spanner Graph a seguir 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
- Executar 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 bordas
Para excluir nós ou bordas existentes, use o Console do Google Cloud a CLI gcloud ou a Bibliotecas de cliente do Spanner.
No console do Google Cloud e na CLI gcloud, é possível usar GoogleSQL Linguagem de manipulação de dados (DML) 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á bordas que se refiram a ele. Se esses tipos de arestas existirem, poderá ocorrer violação de integridade referencial erros. 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 borda Transfer
e um nó Account
da
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++
Combine as consultas do gráfico do Spanner com sua instrução DML, conforme mostrado em 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
}
Opções para modificar dados de gráfico
Você pode 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 bordas do gráfico usando as política de 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.
- Conheça as práticas recomendadas para ajustar consultas do gráfico do Spanner.