Panoramica dello schema
Questo documento spiega i componenti di uno schema di grafo di proprietà e mostra come creare e gestire uno schema di grafo.
I grafi consentono di modellare i dati connessi che rappresentano le informazioni come una rete di nodi e archi. Uno schema di grafo è costituito da nodi e archi, insieme a etichette che classificano il tipo e proprietà che li descrivono. Definisci uno schema di grafo di proprietà mappando le righe delle tabelle di input ai nodi e agli archi del grafo e definendo etichette e proprietà personalizzate. Per saperne di più su BigQuery Graph, consulta la panoramica di BigQuery Graph.
Informazioni sul modello dei dati del grafo di proprietà
Un grafo di proprietà consente di modellare i dati connessi come una rete di nodi e archi. I nodi rappresentano le entità nei dati, come clienti, prodotti o località. Gli archi rappresentano le connessioni tra questi nodi, acquisendo relazioni come acquisti, follower o località.
I nodi e gli archi possono includere le seguenti informazioni:
Etichette: classificano i tipi di nodi e archi. Ad esempio, gli studenti di una classe potrebbero avere un'etichetta
Studente un'etichettaPerson. Se non definisci esplicitamente un'etichetta per un nodo o un arco, BigQuery Graph utilizza il nome della tabella di input come etichetta predefinita.Proprietà: utilizzate per descrivere nodi e archi. Ad esempio, un nodo che rappresenta una persona potrebbe avere una proprietà
namecon il valoreAlexe una proprietàidcon il valore1.
L'esempio nella Figura 1 mostra come potresti progettare un grafo per modellare le attività finanziarie. Questo grafo include i seguenti tipi di entità modellate come nodi:
- Persona: rappresenta una persona coinvolta in transazioni finanziarie.
- Account: rappresenta un conto bancario utilizzato per le transazioni.
Queste entità sono collegate da diversi tipi di relazioni, rappresentate dai seguenti archi diretti:
- Owns: una persona possiede uno o più account.
- Trasferimenti: il denaro si sposta da un conto all'altro.
Ogni arco diretto indica una relazione unidirezionale che scorre da un nodo di origine a un nodo di destinazione. Ad esempio, un arco Transfers collega un Account di origine a un Account di destinazione, indicando il flusso di denaro.

Figura 1. Esempio di grafo con più nodi e archi diretti.
I nodi e gli archi includono informazioni aggiuntive nelle proprietà.
I nodi
Personincludono queste proprietà:name(STRING)id(INT64)
Gli archi
Transfersincludono questa proprietà:amount(FLOAT64)
Archi diretti e non diretti
Gli archi diretti indicano una direzione specifica nella relazione tra le entità. Ad esempio, una persona possiede un conto, ma un conto non possiede una persona. Tuttavia, alcune relazioni, come la relazione di amicizia in un social network, non sono dirette e rappresentano una connessione reciproca. In questo caso, puoi modellare gli archi non diretti come due archi diretti, uno in ogni direzione.
Progettare lo schema
BigQuery Graph consente di utilizzare l'
CREATE PROPERTY GRAPH
per creare un grafo dalle tabelle. Le tabelle che creano i grafi sono chiamate tabelle di input.
Definire un nodo
I nodi sono definiti dalle righe delle tabelle.
Per definire un nodo, aggiungi una definizione di nodo nella
NODE TABLES clausola.
La forma più semplice di una definizione di nodo contiene il nome di una tabella di input con una chiave primaria.
BigQuery Graph mappa le righe della tabella di input ai nodi del grafo.
Nell'esempio seguente, utilizzi la clausola NODE TABLES per definire il nodo Account nel grafo di proprietà FinGraph. La definizione del nodo contiene la tabella di input Account.
-- Create an Account table.
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
-- Use the Account table as the input table for the Account node definition.
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Account
);
Per impostazione predefinita, BigQuery utilizza il nome della tabella come etichetta ed espone tutte le colonne della tabella di input come proprietà.
- Ogni nodo del conto utilizza l'etichetta
Account. - Ogni nodo del conto include le proprietà
idecreate_timedalle colonne della tabellaAccount.
Chiave dell'elemento
Una definizione di nodo definisce anche la chiave dell'elemento, una raccolta di colonne
che identifica in modo univoco un
nodo del grafo. Per impostazione predefinita, la chiave dell'elemento è la chiave primaria della tabella di input.
In alternativa, puoi utilizzare la clausola KEY per definire esplicitamente le chiavi degli elementi.
L'esempio seguente definisce un nodo Account e un nodo Person. Il nodo Account utilizza la chiave primaria della tabella Account come chiave dell'elemento.
Il nodo Person specifica esplicitamente la colonna id come chiave dell'elemento utilizzando la clausola KEY.
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person KEY (id),
graph_db.Account
);
- Ogni riga con una chiave dell'elemento non nulla viene mappata a un nodo univoco nel grafo identificato dalla chiave dell'elemento.
- Le righe con una chiave dell'elemento nulla vengono ignorate.
La stessa tabella di input può essere utilizzata in più definizioni di nodi. In questo caso, una determinata riga della tabella di input viene mappata a un nodo per ogni definizione di nodo.
Definire un arco
Gli archi sono definiti dalle righe delle tabelle.
Per definire un arco, aggiungi una definizione di arco alla
EDGE TABLES clausola.
La forma più semplice di definizione di arco contiene il nome di una tabella di input e definisce i riferimenti ai nodi di origine e di destinazione.
BigQuery Graph utilizza questa definizione per mappare le righe della tabella di input agli archi del grafo.
Per impostazione predefinita, BigQuery utilizza il nome della tabella come etichetta ed espone tutte le colonne della tabella di input come proprietà.
- La chiave dell'elemento di ogni arco viene definita nello stesso modo dei nodi.
Riferimenti ai nodi di origine e di destinazione
Una definizione di arco definisce il riferimento al nodo di origine e di destinazione utilizzando le clausole SOURCE KEY, DESTINATION KEY e REFERENCES.
Devi definire i nodi di origine e di destinazione prima di utilizzarli nella definizione dell'arco.
Nell'esempio seguente, crei un grafo di proprietà FinGraph con quanto segue:
- Nodi
PersoneAccount - Arco
PersonOwnAccount
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
FOREIGN KEY (account_id) REFERENCES graph_db.Account (id) NOT ENFORCED,
PRIMARY KEY (id, account_id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person,
graph_db.Account
)
EDGE TABLES (
PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
);
Ogni PersonOwnAccount arco collega un nodo Person (origine) a un nodo Account
(destinazione).
- Il nodo di origine di un arco è un nodo
Personin cui la proprietàidè uguale alla proprietàiddell'arco. - Il nodo di destinazione di un arco è un nodo
Accountin cui la proprietàidè uguale alla proprietàaccount_iddell'arco. - 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 predefinita
PersonOwnAccount.
Mappare le righe agli archi
Ogni riga della tabella di input dell'arco con una chiave dell'elemento non nulla viene in genere mappata a un singolo arco nel grafo. Tuttavia, se il riferimento al nodo di origine o di destinazione corrisponde a zero o più nodi nella tabella dei nodi di origine o di destinazione, la riga nella tabella di input dell'arco potrebbe generare zero o più archi nel grafo.
Definire nodi e archi in una singola tabella
Puoi definire un nodo e i relativi archi in entrata o in uscita in una singola tabella se le colonne della tabella definiscono una relazione con un'altra tabella. Questo approccio riduce il numero di tabelle, semplifica la gestione dei dati e può migliorare il rendimento delle query eliminando la necessità di un join a una tabella degli archi separata.
Ad esempio, se la seguente tabella Account ha una chiave primaria composta
(owner_id, account_id), la colonna owner_id può essere una chiave esterna che
fa riferimento a una tabella Person. Questa struttura consente alla tabella Account di rappresentare sia il nodo Account sia l'arco in entrata dal nodo Person.
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
PRIMARY KEY (id) NOT ENFORCED
);
-- Assume each account has exactly one owner.
CREATE TABLE graph_db.Account (
owner_id INT64 NOT NULL,
account_id INT64 NOT NULL,
FOREIGN KEY (owner_id) REFERENCES graph_db.Person(id) NOT ENFORCED,
PRIMARY KEY (owner_id, account_id) NOT ENFORCED
);
Puoi utilizzare la tabella Account per definire sia il nodo Account sia l'arco in entrata Owns. Questo è mostrato nella seguente istruzione CREATE PROPERTY GRAPH. Nella clausola EDGE TABLES, assegna alla tabella Account l'alias Owns. Questo perché ogni elemento nello schema del grafo deve avere un nome univoco.
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person,
graph_db.Account
)
EDGE TABLES (
graph_db.Account AS Owns
SOURCE KEY (owner_id) REFERENCES Person
DESTINATION KEY (owner_id, account_id) REFERENCES Account
);
Personalizzare etichette e proprietà
Puoi utilizzare le
LABEL
e le
PROPERTIES
clausole per personalizzare etichette e proprietà.
L'esempio seguente definisce un nodo Person con una proprietà personalizzata e un nodo Account con più etichette:
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person KEY (id)
LABEL Customer
PROPERTIES (CONCAT(city, ", ", country) AS address)
LABEL Entity PROPERTIES (id, name),
graph_db.Account KEY (id)
LABEL Account PROPERTIES (id, create_time)
LABEL Entity PROPERTIES (id, nick_name AS name)
);
I nodi
Personutilizzano l'etichettaCustomerper esporre la proprietàaddress. La proprietàaddressè definita dall'espressioneCONCAT(city, ", ", country),che fa riferimento alle colonnecityecountrydella tabella di inputPerson.Il nodo
Accountutilizza l'etichettaAccountper esporre le proprietàidecreate_time.
I nodi Person e Account hanno entrambi l'etichetta Entity con le proprietà id e name.
- Nel nodo
Person, le proprietàidenameprovengono dalle colonne della tabella di input. - Nel nodo
Account, la proprietànamefa riferimento alla colonnanick_namedella tabella di input.
Coerenza di etichette e proprietà
In un grafo, le etichette e le proprietà sono identificate in modo univoco dai relativi 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 devono utilizzare 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 nei nodi Person sia in quelli Account. Entrambe le definizioni includono lo stesso insieme di nomi di proprietà, id e name, con tipi di valori identici.
Gestire le dipendenze dello schema
I grafi dipendono dallo schema delle tabelle di input per le definizioni di nodi e archi e dalle colonne delle tabelle a cui fanno riferimento le proprietà. BigQuery Graph non verifica se l'eliminazione o la modifica di tabelle o colonne invalida uno schema di grafo esistente.
È tua responsabilità evitare modifiche allo schema che causano interruzioni. Segui queste best practice:
- Prima di eliminare una tabella utilizzata in una definizione di nodo del grafo, rimuovi prima la definizione del nodo dal grafo.
- Prima di rimuovere una colonna da una tabella esposta come proprietà in un grafo, rimuovi la proprietà dalla definizione del nodo o dell'arco corrispondente.
Visualizzare gli schemi dei grafi
Puoi visualizzare lo schema del grafo in un notebook.
Aggiornare uno schema di grafo
Per apportare modifiche allo schema di un grafo esistente, devi ridefinire lo schema del grafo utilizzando l'istruzione CREATE PROPERTY GRAPH.
Eliminare uno schema di grafo
Per eliminare un grafo di proprietà, utilizza l'istruzione
DROP PROPERTY GRAPH statement.
Passaggi successivi
- Scopri di più su BigQuery Graph.
- Scopri come creare ed eseguire query su un grafo di proprietà.
- Scopri le best practice per gli schemi dei grafi.