O Spanner Graph permite-lhe modelar dados ligados como um gráfico de propriedades que representa informações como uma rede de nós e arestas. Os nós simbolizam entidades e as arestas mostram as ligações entre elas. Os nós e os arcos incluem etiquetas que classificam os nós e os arcos em conjuntos. Os nós e os limites também incluem propriedades que são pares de chave-valor.
Define um esquema de grafos do Spanner mapeando linhas de tabelas de entrada para nós e arestas do grafo. Personalize etiquetas e propriedades para nós e arestas, e compreenda como as alterações ao esquema afetam as dependências do gráfico. Também pode gerir dados sem esquema para definições de grafos mais flexíveis.
Para saber mais sobre o gráfico do Spanner, consulte a vista geral do gráfico do Spanner.
Compreenda o modelo de dados de grafos de propriedades
Um gráfico de propriedades permite-lhe modelar dados associados. Representa informações como uma rede de nós e arestas. Os nós simbolizam entidades na sua paisagem de dados, como clientes, produtos ou localizações. As arestas mostram as ligações entre esses nós, captando relações como comprado, segue ou localizado em.
Os nós e os limites podem incluir as seguintes informações:
- Etiquetas, que classificam nós e arestas em conjuntos, por exemplo, cidade.
- Propriedades, que são pares de chave-valor, por exemplo, população.
O exemplo na Figura 1 mostra como pode criar um gráfico para modelar atividades financeiras. Este gráfico inclui os seguintes tipos de entidades modeladas como nós:
- Pessoa: representa um indivíduo envolvido em transações financeiras.
- Conta: representa uma conta bancária usada para transações.
Estas entidades estão ligadas por diferentes tipos de relações, que são representadas pelas seguintes arestas direcionadas:
- É proprietário: uma pessoa é proprietária de uma ou mais contas.
- Transferências: o dinheiro é movido de uma conta para outra.
Cada aresta direcionada indica uma relação unidirecional que flui de um nó de origem para um nó de destino. Por exemplo, uma aresta Transfers
liga uma origem Account
a um destino Account
, indicando o fluxo de dinheiro.
Figura 1. Exemplo de um gráfico com vários nós e arestas direcionadas.
Os nós e os limites incluem informações adicionais nas propriedades. Cada propriedade inclui um nome e um valor.
- Os nós Person incluem estas propriedades:
name
(STRING
)id
(INT64
)
- As arestas de transferências incluem esta propriedade:
amount
(FLOAT64)
Arestas direcionadas e não direcionadas
O gráfico de exemplo usa arestas direcionadas que indicam uma direção específica na relação entre entidades. No entanto, algumas relações, como a relação de amizade numa rede social, não são direcionadas e representam uma ligação recíproca sem uma origem ou um ponto final distintos. Neste caso, pode modelar arestas não direcionadas como duas arestas direcionadas, uma aresta em cada direção.
Design de esquemas do gráfico do Spanner
O Spanner Graph permite-lhe usar a declaração CREATE PROPERTY GRAPH para criar um gráfico a partir de tabelas. As tabelas que criam gráficos são denominadas tabelas de entrada. Esta abordagem usa SQL/PGQ (Property Graph Queries), que faz parte das normas SQL:2023.
Defina um nó num gráfico de propriedades
Para definir um nó, adicione uma definição de nó na cláusula NODE TABLES. A forma mais simples de definição de nós contém apenas um nome de tabela de entrada. O gráfico do Spanner mapeia linhas da tabela de entrada para nós do gráfico.
No exemplo seguinte, usa a cláusula NODE TABLES para definir o nó Account
no gráfico de propriedades FinGraph
. A definição do nó contém a tabela de entrada Account
.
-- First, create an Account table.
CREATE TABLE Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
) PRIMARY KEY (id);
-- Next, use the Account table as input table of Account node definition.
CREATE PROPERTY GRAPH FinGraph
NODE TABLES (
Account
);
Etiquetas e propriedades predefinidas
Por predefinição, todos os nós usam o nome da tabela de entrada como etiqueta e o gráfico do Spanner expõe todas as colunas da tabela de entrada como propriedades do nó.
No exemplo anterior,
- Cada nó da conta usa a etiqueta
Account
. - Cada nó da conta inclui
[id, create_time]
propriedades das colunas da tabelaAccount
.
Chave do elemento
Uma definição de nó também define a chave do elemento que identifica exclusivamente um nó do gráfico.
- Por predefinição, a chave do elemento é a chave principal da tabela de entrada.
- Pode usar a cláusula
KEY
para definir explicitamente as chaves dos elementos. - Pode usar colunas com uma restrição de índice único como chaves de elementos.
O exemplo seguinte define o nó Account
e o nó Person
.
- Por predefinição, o nó
Account
usa a chave principal da tabelaAccount
como chave do elemento. - Por outro lado, o nó
Person
especifica explicitamente oid
como a chave do elemento com a cláusulaKEY
.
CREATE TABLE Person (
id INT64 NOT NULL,
name STRING(MAX),
) PRIMARY KEY (id);
CREATE TABLE Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
) PRIMARY KEY (id);
CREATE PROPERTY GRAPH FinGraph
NODE TABLES (
Person KEY (id),
Account
);
Mapeie uma linha na tabela de entrada para um nó no gráfico
- Cada linha com uma chave de elemento não nula é mapeada para um nó único no gráfico, identificado pela chave de elemento.
- As linhas com uma chave de elemento nula são ignoradas.
Defina um limite num gráfico de propriedades
Para definir um limite, adicione uma definição de limite à cláusula EDGE TABLES. A forma mais simples de definição de arestas contém apenas um nome de tabela de entrada. O gráfico do Spanner mapeia as linhas da tabela de entrada para as arestas do gráfico.
A etiqueta e as propriedades predefinidas das arestas são definidas da mesma forma que os nós.
A chave do elemento de cada aresta é definida da mesma forma que os nós.
Referências de nós de origem e destino
No exemplo seguinte, cria um gráfico de propriedades FinGraph
com o seguinte:
Person
eAccount
nósPersonOwnAccount
extremidade
CREATE TABLE Person (
id INT64 NOT NULL,
name STRING(MAX),
) PRIMARY KEY (id);
CREATE TABLE Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
) PRIMARY KEY (id);
CREATE TABLE PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
FOREIGN KEY (account_id) REFERENCES Account (id)
) PRIMARY KEY (id, account_id),
INTERLEAVE IN PARENT Person;
CREATE PROPERTY GRAPH FinGraph
NODE TABLES (
Person,
Account
)
EDGE TABLES (
PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
);
Uma definição de aresta define a referência do nó de origem e destino através das cláusulas SOURCE KEY
, DESTINATION KEY
e REFERENCES
. O exemplo
seguinte usa a definição de limite de PersonOwnAccount
para ilustrar este
conceito:
EDGE TABLES (
PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
)
Cada aresta PersonOwnAccount
liga um nó Person
(origem) a um nó Account
(destino).
- O nó de origem de uma aresta é um nó
Person
em que oid
é igual aoid
da aresta. - O nó de destino de um limite é um nó
Account
em que oid
é igual aoaccount_id
do limite.
Além disso, o seguinte é verdadeiro para a aresta PersonOwnAccount
:
- A chave do elemento é a chave principal da tabela
PersonOwnAccount
, ou seja,(id, account_id)
. - Cada aresta tem o mesmo conjunto de propriedades que as colunas da tabela
PersonOwnAccount
. - Cada aresta tem a etiqueta
PersonOwnAccount
predefinida.
Mapeie uma linha numa tabela de entrada de arestas para arestas no gráfico
- Cada linha na tabela de entrada de arestas, em que a chave do elemento não é nula, normalmente, é mapeada para uma aresta única no seu gráfico.
- Uma linha pode corresponder a zero ou mais do que uma aresta no gráfico. Por exemplo, isto ocorre quando a referência do nó de origem corresponde a zero ou mais nós na tabela de nós de origem.
- Pode usar a mesma tabela de entrada em diferentes definições de nós ou arestas para criar diferentes conjuntos de nós ou arestas. Para mais informações, consulte o artigo Mescle tabelas de entrada de nós e arestas.
Personalize etiquetas e propriedades
Pode usar as cláusulas LABEL e PROPERTIES para personalizar etiquetas e propriedades.
O exemplo seguinte define dois nós: Person
e Account
.
- Os nós
Person
usam a etiquetaCustomer
para expor a propriedadeaddress
. A propriedadeaddress
é definida pela expressãoCONCAT(city, ", ", country),
que se refere à colunacity
ecountry
da tabela de entradaPerson
. - Para
Account
, o nóAccount
usa a etiquetaAccount
para expor as propriedadesid
ecreate_time
. Person
eAccount
têm a etiquetaEntity
com as propriedades [id, name
].- Para
Person
, as propriedadesid
ename
são provenientes das colunas da tabela de entrada. - Para
Account
, a propriedadename
refere-se à colunanick_name
da tabela de entrada.
- Para
CREATE TABLE Person (
id INT64 NOT NULL,
name STRING(MAX),
birthday TIMESTAMP,
country STRING(MAX),
city STRING(MAX),
) PRIMARY KEY (id);
CREATE TABLE Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING(MAX),
) PRIMARY KEY (id);
CREATE PROPERTY GRAPH FinGraph
NODE TABLES (
Person KEY (id)
LABEL Customer
PROPERTIES (CONCAT(city, ", ", country) AS address)
LABEL Entity PROPERTIES (id, name),
Account KEY (id)
LABEL Account PROPERTIES (id, create_time)
LABEL Entity PROPERTIES (id, nick_name AS name)
);
Consistência das etiquetas e propriedades
Num gráfico, as etiquetas e as propriedades são identificadas exclusivamente pelos respetivos nomes. Pode usar etiquetas e propriedades com o mesmo nome em várias definições de nós ou arestas. No entanto, as etiquetas e as propriedades com o mesmo nome têm de seguir estas regras:
- As propriedades com o mesmo nome usam o mesmo tipo de valor.
- As etiquetas com o mesmo nome expõem a mesma lista de propriedades.
No exemplo anterior, a etiqueta Entity
está definida nos nós Person
e Account
. Ambas as definições incluem o mesmo conjunto de nomes de propriedades [id
,
name
] com tipos de valores idênticos.
Dependências entre gráficos e outros objetos de esquema
O gráfico criado por CREATE PROPERTY GRAPH
depende de outros objetos de esquema, como as tabelas de entrada das definições de nós e arestas, e as colunas das tabelas referenciadas pelas propriedades. O Spanner Graph não permite uma alteração do esquema que quebre uma destas dependências.
A seguinte declaração torna FinGraph
dependente da tabela Account
e das colunas id
e create_time
.
CREATE OR REPLACE PROPERTY GRAPH FinGraph
NODE TABLES (
Account PROPERTIES (id, create_time)
);
Neste exemplo, o Spanner Graph não permite as seguintes alterações ao esquema:
- Não pode eliminar a tabela
Account
. Para isso, tem de remover a definição do nóAccount
. Para mais informações, consulte o artigo Remova definições de nós ou arestas existentes. - Não é possível eliminar
create_time
colunas da tabelaAccount
. Para isso, tem de remover a propriedadecreate_time
da definição do nóAccount
. Para mais informações, consulte o artigo Atualize as definições de nós ou arestas existentes.
No entanto, pode fazer as seguintes alterações ao esquema:
- Modifique o esquema da tabela
Account
e das colunasid
ecreate_time
se outros requisitos do esquema o permitirem. Para mais informações, consulte o artigo Faça atualizações ao esquema.
Veja uma visualização do esquema
Pode ver uma visualização do esquema no Spanner Studio depois de executar uma consulta do Spanner Graph. Para mais informações, consulte o artigo Trabalhe com visualizações de gráficos do Spanner.
Faça a gestão de dados sem esquema
O Spanner Graph também suporta a gestão de dados sem esquemas, o que é útil quando precisa de uma definição de gráfico mais flexível. Para mais informações, consulte o artigo Faça a gestão de dados sem esquema no Spanner Graph.
O que se segue?
- Crie um esquema do Spanner Graph.
- Atualize ou elimine um esquema do Spanner Graph.
- Faça a gestão de dados sem esquema com o Spanner Graph.