Visão geral do esquema do gráfico do Spanner

Neste documento, descrevemos o esquema do gráfico do Spanner e fornecemos exemplos para ilustrar conceitos-chave. Para saber mais sobre o gráfico do Spanner, consulte Visão geral do Spanner Graph.

Modelo de dados do gráfico de propriedades

Um gráfico de propriedades permite modelar dados conectados. Ela representa a informação como de nós e bordas. Os nós simbolizam entidades no seu cenário de dados, como "clientes", "produtos" ou "locais". As arestas mostram as conexões entre esses nós, capturando relacionamentos como "comprado", "segue" ou "localizado em".

Tanto os nós quanto as bordas podem incluir as seguintes informações:

  • Rótulos, que classificam nós e arestas em conjuntos, por exemplo, "Cidade".
  • Propriedades, que são pares de chave-valor, por exemplo, preenchimento.

O exemplo na Figura 1 mostra como projetar um gráfico para modelar atividades financeiras. Este gráfico inclui os seguintes tipos de entidades modelados como nós:

  • Pessoa:representa uma pessoa envolvida em transações financeiras.
  • Conta: representa uma conta bancária usada para transações.

Essas entidades são conectadas por diferentes tipos de relações, que são representadas pelas seguintes arestas direcionadas:

  • Proprietário:uma pessoa tem uma ou mais contas.
  • Transferências:transferências de dinheiro de uma conta para outra.

Cada borda direcionada indica uma relação unidirecional, que flui de um nó de origem para um nó de destino. Por exemplo, uma borda Transfers conecta uma origem Account para um destino Account, indicando o fluxo de dinheiro.

Diagrama de visão geral do esquema do gráfico do Spanner.

Figura 1. Exemplo de gráfico com vários nós e bordas direcionadas.

Os nós e as bordas podem conter informações adicionais na forma de propriedades. Cada propriedade tem um nome e um valor.

  • Os nós Person têm as seguintes propriedades:
    • name (STRING)
    • id (INT64)
  • As arestas de transferência têm a seguinte propriedade:
    • amount (FLOAT64)

Bordas direcionadas e não direcionadas

O exemplo de gráfico usa arestas direcionadas, que indicam uma direção específica na relação entre entidades. No entanto, algumas relações, como a "amigo" em uma rede social, não são direcionadas e representam recíproca sem origem ou endpoint distinto. Nesse caso, você pode modelar arestas não dirigidas como duas arestas dirigidas, uma em cada direção.

Design do esquema do gráfico do Spanner

Com o gráfico do Spanner, é possível criar um gráfico de tabelas usando instrução CREATE PROPERTY GRAPH. As tabelas usadas para criar gráficos são chamadas de tabelas de entrada. Essa abordagem é baseada SQL/PGQ (consultas do gráfico de propriedades) que faz parte dos padrões SQL:2023.

Como definir um nó em um gráfico de property

Adicione uma definição de nó na cláusula NODE TABLES. A forma mais simples de definição de nó contém apenas um nome de tabela de entrada. As linhas da tabela de entrada são mapeadas para nós do gráfico.

No exemplo abaixo, você usa a cláusula NODE TABLES para definir o nó Account no gráfico de propriedades FinGraph. A definição do nó contém 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
  );

Rótulo e propriedades padrão

Por padrão, todos os nós usam o nome da tabela de entrada como rótulo, e todas as colunas da tabela de entrada são expostas como propriedades do nó.

No exemplo anterior,

  • Cada nó de conta tem o rótulo Account.
  • Cada nó de conta tem propriedades [id, create_time] criadas com base nas colunas da tabela Account.

Chave do elemento

Uma definição de nó também define a chave do elemento, que identifica exclusivamente um nó de gráfico.

  • Por padrão, a chave do elemento é a chave primária da tabela de entrada.
  • As chaves de elemento podem ser explicitamente definidas pela cláusula KEY.
  • Colunas com restrições de unicidade UNIQUE INDEX podem ser usadas como chaves de elementos.

O exemplo a seguir define os nós Account e Person.

  • O nó Account usa a chave primária da tabela Account como chave de elemento por padrão.
  • O nó Person, por outro lado, especifica explicitamente o id como o 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
  );

Como mapear 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ó exclusivo no gráfico, identificado pela chave do elemento.
  • As linhas com uma chave de elemento nula são ignoradas.

Como definir uma aresta em um gráfico de property

Para definir uma aresta, adicione uma definição de aresta na cláusula EDGE TABLES. A forma mais simples de definição de aresta contém apenas um nome de tabela de entrada. Linhas da tabela de entrada são associados às bordas do gráfico.

Referência do nó de origem e destino

No exemplo a seguir, você cria um gráfico de propriedades FinGraph com o seguinte:

  • Person e Account nós
  • Borda PersonOwnAccount
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 borda deve definir a referência do nó de origem e destino, usando as cláusulas SOURCE KEY, DESTINATION KEY e REFERENCES. O seguinte exemplo usa a definição de borda de PersonOwnAccount para ilustrar a esse conceito:

EDGE TABLES (
  PersonOwnAccount
    SOURCE KEY (id) REFERENCES Person (id)
    DESTINATION KEY (account_id) REFERENCES Account (id)
)

Cada borda PersonOwnAccount conecta um Person (origem) a um nó Account (destino).

  • O nó SOURCE de uma aresta é um nó Person com id igual a na borda id.
  • O nó DESTINATION de uma aresta é um nó Account com id é o mesmo como a borda account_id.

Além disso, o seguinte é verdadeiro para a borda PersonOwnAccount:

  • A chave do elemento é a chave primária da tabela PersonOwnAccount, ou seja, (id, account_id).
  • Cada aresta tem o mesmo conjunto de propriedades das colunas da tabela PersonOwnAccount.
  • Cada borda tem o rótulo PersonOwnAccount padrão.

Como mapear uma linha em uma tabela de entrada de bordas para bordas no gráfico

  • Cada linha na tabela de entrada de borda, cuja chave de elemento não é nula, geralmente é mapeada para uma aresta exclusiva no gráfico.
  • Uma linha pode corresponder a zero ou mais arestas no gráfico, por exemplo, quando a referência do nó de origem corresponde a zero ou mais nós na tabela de nós de origem.
  • A mesma tabela de entrada pode ser usada em diferentes definições de nó ou borda diferentes conjuntos de nós ou bordas. Para mais informações, consulte Mesclar entrada de nó e de borda tabelas.

Personalizar rótulos e propriedades

Você pode usar LABEL e PROPRIEDADES cláusulas para personalizar rótulos e propriedades.

No exemplo a seguir, há dois nós definidos, Person e Account.

  • Os nós Person expose a propriedade address pelo rótulo Customer. O A propriedade address é definida pela expressão CONCAT(city, ", ", country),, que se refere às colunas city e country da entrada. tabela Person.
  • Para Account, o nó Account expõe o id e o create_time pelo rótulo Account.
  • Person e Account têm o rótulo Entity com as propriedades [id, name].
    • Para Person, as propriedades id e name vêm das colunas da tabela de entrada.
    • Para Account, a propriedade name se refere à 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 de rótulos e propriedades

Em um gráfico, os rótulos e as propriedades são identificados de forma exclusiva pelos nomes. Rótulos e propriedades com o mesmo nome podem aparecer em várias definições de nó ou aresta. No entanto, rótulos e propriedades com o mesmo nome precisam seguir estas regras:

  • Propriedades com o mesmo nome precisam ter o mesmo tipo de valor.
  • Os rótulos com o mesmo nome precisam expor a mesma lista de propriedades.

No exemplo anterior, o rótulo Entity é definido em Person e Account nós. Em ambas as definições, elas têm o mesmo conjunto de nomes de propriedades. [id, name] com os tipos de valor idênticos.

dependências entre gráficos e outros objetos de esquema

O gráfico criado por CREATE PROPERTY GRAPH depende de outro esquema objetos, como as tabelas de entrada das definições de nó e borda, e a tabela colunas referenciadas pelas propriedades. Se uma alteração de esquema corromper um desses dependências, a alteração não será permitida.

A instrução a seguir cria uma dependência de FinGraph para o Account tabela e as colunas id, create_time.

CREATE OR REPLACE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account PROPERTIES (id, create_time)
  );

Confira abaixo exemplos de mudanças de esquema que não são permitidas:

No entanto, é possível fazer as seguintes mudanças no esquema:

  • Modifique a tabela Account e o esquema das colunas id e create_time como desde que permitidos por outros requisitos de esquema. Para mais informações, consulte Faça atualizações de esquema.

A seguir