Vista geral do esquema do Spanner Graph

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.

Diagrama de vista geral do esquema do gráfico do Spanner.

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 tabela Account.

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 tabela Account como chave do elemento.
  • Por outro lado, o nó Person especifica explicitamente o id como a chave do elemento com a cláusula KEY.
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.

Referências de nós de origem e destino

No exemplo seguinte, cria um gráfico de propriedades FinGraph com o seguinte:

  • Person e Account nós
  • PersonOwnAccount 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 o id é igual ao id da aresta.
  • O nó de destino de um limite é um nó Account em que o id é igual ao account_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 etiqueta Customer para expor a propriedade address. A propriedade address é definida pela expressão CONCAT(city, ", ", country), que se refere à coluna city e country da tabela de entrada Person.
  • Para Account, o nó Account usa a etiqueta Account para expor as propriedades id e create_time.
  • Person e Account têm a etiqueta Entity com as propriedades [id, name].
    • Para Person, as propriedades id e name são provenientes das colunas da tabela de entrada.
    • Para Account, a propriedade name refere-se à coluna nick_name da tabela de entrada.
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:

No entanto, pode fazer as seguintes alterações ao esquema:

  • Modifique o esquema da tabela Account e das colunas id e create_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?