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.
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 tabellaAccount
.
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 tabellaAccount
come chiave dell'elemento. - Il nodo
Person
, invece, specifica esplicitamenteid
come chiave dell'elemento con la clausolaKEY
.
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.
L'etichetta e le proprietà predefinite degli archi sono definite nello stesso modo dei nodi.
La chiave dell'elemento di ogni arco è definita nello stesso modo dei nodi.
Riferimenti ai nodi di origine e destinazione
Nell'esempio seguente, crei un grafico delle proprietà FinGraph
con quanto segue:
- nodi
Person
eAccount
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 cuiid
è uguale aid
dell'arco. - Il nodo di destinazione di un arco è un nodo
Account
in cuiid
è uguale aaccount_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'etichettaCustomer
per esporre la proprietàaddress
. La proprietàaddress
è definita dall'espressioneCONCAT(city, ", ", country),
che fa riferimento alle colonnecity
ecountry
della tabella di inputPerson
. - Per
Account
, il nodoAccount
utilizza l'etichettaAccount
per esporre le proprietàid
ecreate_time
. Person
eAccount
hanno l'etichettaEntity
con le proprietà [id, name
].- Per
Person
, le proprietàid
ename
provengono dalle colonne della tabella di input. - Per
Account
, la proprietàname
fa riferimento alla colonnanick_name
della tabella di input.
- Per
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:
- Non puoi eliminare la tabella
Account
. Per farlo, devi rimuovere la definizione del nodoAccount
. Per ulteriori informazioni, vedi Rimuovere definizioni di nodi o archi esistenti. - Non puoi eliminare le colonne
create_time
dalla tabellaAccount
. Per farlo, devi rimuovere la proprietàcreate_time
dalla definizione del nodoAccount
. Per ulteriori informazioni, vedi Aggiornare le definizioni di nodi o archi esistenti.
Tuttavia, puoi apportare le seguenti modifiche allo schema:
- Modifica lo schema della tabella
Account
e delle colonneid
ecreate_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
- Crea uno schema Spanner Graph.
- Aggiorna o elimina uno schema Spanner Graph.
- Gestisci i dati senza schema con Spanner Graph.