Panoramica dello schema di Spanner Graph

Spanner Graph ti consente di modellare i dati connessi come un grafico delle proprietà che rappresenta le informazioni come una rete di nodi e archi. I nodi simboleggiano le entità e gli archi mostrano le connessioni tra loro. Nodi e archi includono etichette che classificano nodi e archi in insiemi. Nodi e archi includono anche proprietà che sono coppie chiave-valore.

Definisci uno schema di Spanner Graph mappando le righe delle tabelle di input a nodi e archi del grafico. Personalizza le etichette e le proprietà di nodi e archi e scopri in che modo le modifiche allo schema influiscono sulle dipendenze del grafico. Puoi anche gestire i dati senza schema per definizioni di grafici più flessibili.

Per scoprire di più su Spanner Graph, consulta la panoramica di Spanner Graph.

Informazioni sul modello dei dati del grafico delle proprietà

Un grafico delle proprietà consente di modellare i dati connessi. Rappresenta le informazioni come una rete di nodi e archi. I nodi simboleggiano le entità nel panorama dei dati, come clienti, prodotti o località. Gli archi mostrano le connessioni tra questi nodi e indicano relazioni come acquistato, segue o situato in.

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

  • Etichette, che classificano nodi e archi in insiemi, ad esempio città.
  • Proprietà, ovvero coppie chiave-valore, ad esempio popolazione.

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

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

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

  • Proprietario:una persona possiede uno o più account.
  • Trasferimenti:il denaro viene spostato da un conto all'altro.

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

Diagramma panoramico dello schema di Spanner Graph.

Figura 1. Esempio di grafico con più nodi e archi diretti.

Nodi e archi includono ulteriori informazioni nelle proprietà. Ogni proprietà include un nome e un valore.

  • I nodi Person includono le seguenti proprietà:
    • name (STRING)
    • id (INT64)
  • I bordi Trasferimenti includono questa proprietà:
    • amount (FLOAT64)

Archi diretti e non diretti

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

Progettazione dello schema di Spanner Graph

Spanner Graph ti consente di utilizzare l'istruzione CREATE PROPERTY GRAPH per creare un grafico dalle tabelle. Le tabelle che creano i grafici sono chiamate tabelle di input. Questo approccio utilizza SQL/PGQ (Property Graph Queries), che fa parte degli standard SQL:2023.

Definisci un nodo in un grafico delle proprietà

Per definire un nodo, aggiungi una definizione di nodo nella clausola NODE TABLES. La forma più semplice di definizione del nodo contiene solo un nome di tabella di input. Spanner Graph mappa le righe della tabella di input ai nodi del grafico.

Nel seguente esempio, utilizzi la clausola NODE TABLES per definire il nodo Account nel grafico 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
  );

Etichette e proprietà predefinite

Per impostazione predefinita, tutti i nodi utilizzano il nome della tabella di input come etichetta e Spanner Graph espone tutte le colonne della tabella di input come proprietà dei nodi.

Nell'esempio precedente,

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

Chiave elemento

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

  • Per impostazione predefinita, la chiave dell'elemento è la chiave primaria della tabella di input.
  • Puoi utilizzare la clausola KEY per definire esplicitamente le chiavi degli elementi.
  • Puoi utilizzare colonne con un vincolo di indice univoco come chiavi degli elementi.

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

  • Per impostazione predefinita, il nodo Account utilizza la chiave primaria della tabella Account come chiave dell'elemento.
  • 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
  );

Mappare una riga della tabella di input a un nodo nel grafico

  • Ogni riga con una chiave elemento non nulla viene mappata a un nodo univoco nel grafico, identificato dalla chiave elemento.
  • Le righe con una chiave dell'elemento nulla vengono ignorate.

Definisci un arco in un grafico delle proprietà

Per definire un arco, aggiungi una definizione di arco alla clausola EDGE TABLES. La forma più semplice di definizione del bordo contiene solo un nome di tabella di input. Spanner Graph mappa le righe della tabella di input ai bordi del grafico.

Riferimenti ai nodi di origine e destinazione

Nell'esempio seguente, crei un grafico delle proprietà FinGraph con quanto segue:

  • nodi Person e Account
  • PersonOwnAccount bordo
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 arco definisce il riferimento al nodo di origine e di destinazione utilizzando le clausole SOURCE KEY, DESTINATION KEY e REFERENCES. Il seguente esempio utilizza la definizione del bordo di PersonOwnAccount per illustrare questo concetto:

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

Ogni arco PersonOwnAccount collega un nodo Person (origine) a un nodo Account (destinazione).

  • Il nodo di origine di un arco è un nodo Person in cui id è uguale a id dell'arco.
  • Il nodo di destinazione di un arco è un nodo Account in cui id è uguale a account_id dell'arco.

Inoltre, per il bordo PersonOwnAccount vale quanto segue:

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

Mappare una riga in una tabella di input degli archi agli archi nel grafico

  • Ogni riga della tabella di input degli archi, in cui la chiave dell'elemento non è nulla, in genere corrisponde a un arco univoco nel grafico.
  • Una riga potrebbe corrispondere a zero o più di un arco nel grafico. Ad esempio, questo si verifica quando il riferimento al nodo di origine corrisponde a zero o più nodi nella tabella dei nodi di origine.
  • Puoi utilizzare la stessa tabella di input in definizioni di nodi o archi diverse per creare set di nodi o archi diversi. Per ulteriori informazioni, vedi Unire le tabelle di input di nodi e archi.

Personalizzare etichette e proprietà

Puoi utilizzare le clausole LABEL e PROPERTIES per personalizzare etichette e proprietà.

L'esempio seguente definisce due nodi: Person e Account.

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

Coerenza di etichette e proprietà

In un grafico, le etichette e le proprietà sono identificate in modo univoco dai loro nomi. Puoi utilizzare etichette e proprietà con lo stesso nome in più definizioni di nodi o archi. Tuttavia, le etichette e le proprietà con lo stesso nome devono rispettare queste regole:

  • Le proprietà con lo stesso nome utilizzano lo stesso tipo di valore.
  • Le etichette con lo stesso nome mostrano lo stesso elenco di proprietà.

Nell'esempio precedente, l'etichetta Entity è definita nei nodi Person e Account. Entrambe le definizioni includono lo stesso insieme di nomi di proprietà [id, name] con tipi di valori identici.

Dipendenze tra i grafici e altri oggetti dello schema

Il grafico creato da CREATE PROPERTY GRAPH dipende da altri oggetti dello schema, come le tabelle di input delle definizioni di nodi e archi e le colonne della tabella a cui fanno riferimento le proprietà. Spanner Graph non consente una modifica dello schema che interrompe una di queste dipendenze.

La seguente istruzione rende FinGraph dipendente dalla tabella Account e dalle colonne id e create_time.

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

In questo esempio, Spanner Graph non consente le seguenti modifiche allo schema:

Tuttavia, puoi apportare le seguenti modifiche allo schema:

  • Modifica lo schema della tabella Account e delle colonne id e create_time se gli altri requisiti dello schema lo consentono. Per ulteriori informazioni, consulta la sezione Apportare aggiornamenti allo schema.

Visualizzare una visualizzazione dello schema

Puoi visualizzare una visualizzazione dello schema in Spanner Studio dopo aver eseguito una query Spanner Graph. Per saperne di più, vedi Utilizzare le visualizzazioni dei grafici Spanner.

Gestire i dati senza schema

Spanner Graph supporta anche la gestione dei dati senza schema, utile quando hai bisogno di una definizione del grafico più flessibile. Per saperne di più, consulta Gestire i dati senza schema in Spanner Graph.

Passaggi successivi