Panoramica dello schema del grafico Spanner

Questo documento descrive lo schema del grafo di Spanner e fornisce esempi per illustrare i concetti chiave. Per saperne di più sul grafico Spanner, consulta Panoramica di Spanner Graph.

Modello di dati del grafico delle proprietà

Un grafico delle proprietà ti consente di modellare i dati connessi. Rappresenta le informazioni come una rete di nodi e frecce. I nodi simbolizzano le entità nel tuo panorama dei dati come "clienti", "prodotti" o "località". I margini mostrano le connessioni i nodi, acquisendo relazioni come "acquistato", "Segue" o "situato in".

Sia i nodi che i nodi possono includere le seguenti informazioni:

  • Etichette, che classificano i nodi e gli archi in insiemi, ad esempio Città.
  • Proprietà, che sono coppie chiave-valore, ad esempio population.

L'esempio nella Figura 1 mostra come progettare un grafico per modellare attività finanziarie. Questo grafico include i seguenti tipi di entità modellati come nodi:

  • Persona: rappresenta una persona coinvolta nelle transazioni finanziarie.
  • Conto:rappresenta un conto bancario utilizzato per le transazioni.

Queste entità sono collegate da diversi tipi di relazioni, che sono rappresentati dai seguenti bordi diretti:

  • Di proprietà: una persona possiede uno o più account.
  • Trasferimenti: il denaro si sposta da un account a un altro.

Ogni bordo diretto indica una relazione unidirezionale che fluisce da un nodo di origine in un nodo di destinazione. Ad esempio, un bordo Transfers collega un'origineAccount a una destinazione Account, indicando il flusso di denaro.

Diagramma panoramica dello schema del grafico di Spanner.

Figura 1. Grafo di esempio con più nodi e archi diretti.

Nodi ed archi possono contenere informazioni aggiuntive sotto forma di proprietà. Ogni proprietà ha un nome e un valore.

  • I nodi Person hanno le seguenti proprietà:
    • name (STRING)
    • id (INT64)
  • Gli angoli dei trasferimenti hanno la seguente proprietà:
    • amount (FLOAT64)

Bordi orientati e non diretti

Il grafico di esempio utilizza bordi diretti, che indicano una direzione specifica la relazione tra le entità. Tuttavia, alcune relazioni, come "amico" relazione in un social network, non sono diretti e rappresentano connessione reciproca senza un'origine o un endpoint distinti. In questo caso, puoi modellizzare gli archi non diretti come due archi diretti, uno in ogni direzione.

Progettazione dello schema di Spanner Graph

Spanner Graph ti consente di creare un grafo dalle tabelle utilizzando l'istruzione CREATE PROPERTY GRAPH. Le tabelle utilizzate per creare i grafici sono chiamate tabelle di input. Questo approccio si basa su SQL/PGQ (query del grafico delle proprietà), che fa parte degli standard SQL:2023.

Definizione di un nodo nel grafico delle proprietà

Per definire un nodo, devi aggiungerne una nella clausola NODE TABLES. La forma più semplice di definizione dei nodi contiene solo il nome di una tabella di input. Le righe della tabella di input vengono mappate ai nodi del grafico.

Nel seguente esempio, utilizzi la clausola NODE TABLES per definire il nodo Account nel grafo delle proprietà FinGraph. La definizione del nodo contiene la tabella di input 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
  );

Etichetta e proprietà predefinite

Per impostazione predefinita, tutti i nodi utilizzano il nome della tabella di input come etichetta e tutte le colonne della tabella di input vengono esposte come proprietà del nodo.

Nell'esempio precedente,

  • Ogni nodo dell'account ha l'etichetta Account.
  • Ogni nodo dell'account ha proprietà [id, create_time] create dalle colonne della tabella Account.

Chiave elemento

La definizione di un nodo definisce anche la chiave dell'elemento, che identifica in modo univoco un del grafico.

  • Per impostazione predefinita, la chiave dell'elemento è la chiave primaria della tabella di input.
  • Le chiavi elemento possono essere definite esplicitamente dalla clausola KEY.
  • Le colonne con vincoli di univocità UNIQUE INDEX possono essere utilizzate come chiavi elemento.

L'esempio seguente definisce il nodo Account e il nodo Person.

  • Il nodo Account utilizza la chiave primaria della tabella Account come elemento per impostazione predefinita.
  • Il nodo Person, invece, specifica esplicitamente id come chiave dell'elemento con la clausola 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
  );

Mappatura di una riga nella tabella di input a un nodo nel grafico

  • Ogni riga con una chiave elemento non nullo viene mappata a un nodo univoco nella identificato dalla chiave dell'elemento.
  • Le righe con una chiave dell'elemento null vengono ignorate.

Definizione di un bordo in un grafo di proprietà

Per definire un perimetro, aggiungi una definizione dell'edge nella clausola EDGE TABLES. La forma più semplice di definizione degli archi contiene solo il nome di una tabella di input. Le righe della tabella di input vengono mappate ai bordi del grafico.

Riferimento sui nodi di origine e di destinazione

Nell'esempio seguente, viene creato un grafico delle proprietà FinGraph con seguenti:

  • Nodi Person e Account
  • bordo 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)
  );

Una definizione di bordo deve definire il riferimento ai nodi di origine e di destinazione utilizzando le clausole SOURCE KEY, DESTINATION KEY e REFERENCES. Il seguente esempio utilizza la definizione di bordo di PersonOwnAccount per illustrare questo concetto:

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

Ogni perimetro PersonOwnAccount connette Person (origine) a Account (destinazione).

  • Il nodo SOURCE di un perimetro è un nodo Person il cui id è uguale al il bordo id.
  • Il nodo DESTINATION di un perimetro è un nodo Account il cui id è uguale come bordo account_id.

Inoltre, quanto segue è vero per il bordo PersonOwnAccount:

  • La chiave dell'elemento è la chiave primaria della tabella PersonOwnAccount, ossia (id, account_id).
  • Ogni bordo ha lo stesso insieme di proprietà delle colonne Tabella PersonOwnAccount.
  • Ogni bordo ha l'etichetta PersonOwnAccount predefinita.

Mappatura di una riga in una tabella di input degli spigoli agli spigoli nel grafico

  • Ogni riga nella tabella di input perimetrale, la cui chiave elemento non è nulla, di solito è mappato a un bordo unico del grafico.
  • Una riga potrebbe corrispondere a zero o a più di un bordo nel grafico, ad esempio Ad esempio, quando riferimento dei nodi di origine corrisponde a zero o più nodi nella tabella dei nodi di origine.
  • La stessa tabella di input può essere utilizzata in definizioni di nodi o archi diverse per creare insiemi diversi di nodi o archi. Per ulteriori informazioni, vedi Unisci input di nodo e perimetro tabelle.

Personalizzare etichette e proprietà

Puoi usare LABEL e PROPRIETÀ per personalizzare etichette e proprietà.

Nell'esempio seguente, sono definiti due nodi, Person e Account.

  • I nodi Person expose la proprietà address tramite l'etichetta Customer. La La proprietà address viene definita dall'espressione CONCAT(city, ", ", country),, che fa riferimento alle colonne city e country dell'input tabella Person.
  • Per Account, il nodo Account espone le proprietà id e create_time tramite l'etichetta Account.
  • Person e Account hanno l'etichetta Entity con proprietà [id, name].
    • Per Person, le proprietà id e name provengono dalle colonne della tabella di input.
    • Per Account, la proprietà name fa riferimento a nick_name colonna della tabella di input.
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)
  );

Etichetta e coerenza della proprietà

In un grafico, etichette e proprietà sono identificate in modo univoco dai loro nomi. Le etichette e le proprietà con lo stesso nome possono essere visualizzate in più nodi o bordi le tue definizioni. Tuttavia, le etichette e le proprietà con lo stesso nome devono: regole:

  • Le proprietà con lo stesso nome devono avere lo stesso tipo di valore.
  • Le etichette con lo stesso nome devono esporre lo stesso elenco di proprietà.

Nell'esempio precedente, l'etichetta Entity è definita sia in Person che Account nodi. In entrambe le definizioni, hanno lo stesso insieme di nomi di proprietà [id, name] con tipi di valori identici.

Dipendenze tra grafici e altri oggetti dello schema

Il grafico creato da CREATE PROPERTY GRAPH ha una dipendenza da un altro schema come le tabelle di input delle definizioni di nodi e periferici e la tabella colonne a cui fanno riferimento le proprietà. Se una modifica allo schema interrompe uno di questi le dipendenze, la modifica non è consentita.

La seguente istruzione crea una dipendenza da FinGraph a Account e le colonne id, create_time.

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

Di seguito sono riportati alcuni esempi di modifiche allo schema che non puoi apportare:

Tuttavia, puoi apportare le seguenti modifiche allo schema:

  • Modifica la tabella Account e lo schema delle colonne id e create_time, se consentito da altri requisiti dello schema. Per maggiori informazioni le informazioni, vedi Aggiorna lo schema.

Passaggi successivi