Crea ed esegui query su un grafico
Questo documento mostra come utilizzare BigQuery Graph per creare un grafico con informazioni finanziarie ed eseguire query sui grafici utilizzando il Graph Query Language (GQL).
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie
per creare grafici ed eseguire query su di essi,
chiedi all'amministratore di concederti il ruolo IAM
Editor dati BigQuery (roles/bigquery.dataEditor)
sul set di dati in cui crei le tabelle dei nodi, le tabelle degli archi e il grafico.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Creare tabelle di nodi e archi
I grafici vengono creati a partire da tabelle BigQuery esistenti e memorizzati nei
set di dati.
Per archiviare le tabelle e il grafico che crei negli esempi seguenti,
crea un set di dati.
La seguente query crea un set di dati denominato graph_db:
CREATE SCHEMA IF NOT EXISTS graph_db;
Le tabelle seguenti contengono informazioni su persone e account e sulle relazioni tra ciascuna di queste entità:
Person: informazioni sulle persone.Account: informazioni sui conti bancari.PersonOwnAccount: informazioni su chi è il proprietario di quali account.AccountTransferAccount: informazioni sui trasferimenti tra conti.
Per creare queste tabelle, esegui le seguenti
istruzioni CREATE TABLE:
CREATE OR REPLACE TABLE graph_db.Person (
id INT64,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.Account (
id INT64,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id, account_id) NOT ENFORCED,
FOREIGN KEY (id) REFERENCES graph_db.Person(id) NOT ENFORCED,
FOREIGN KEY (account_id) REFERENCES graph_db.Account(id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.AccountTransferAccount (
id INT64 NOT NULL,
to_id INT64 NOT NULL,
amount FLOAT64,
create_time TIMESTAMP NOT NULL,
order_number STRING,
PRIMARY KEY (id, to_id, create_time) NOT ENFORCED,
FOREIGN KEY (id) REFERENCES graph_db.Account(id) NOT ENFORCED,
FOREIGN KEY (to_id) REFERENCES graph_db.Account(id) NOT ENFORCED
);
Creare un grafico
Per creare un grafico, utilizza l'istruzione
CREATE PROPERTY GRAPH.
L'esempio seguente crea un grafico denominato FinGraph nel set di dati
graph_db. Le tabelle Account e Person sono le tabelle dei nodi.
Le tabelle AccountTransferAccount e PersonOwnAccount sono le tabelle degli archi,
che rappresentano le relazioni tra le tabelle dei nodi.
CREATE OR REPLACE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Account,
graph_db.Person
)
EDGE TABLES (
graph_db.PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
LABEL Owns,
graph_db.AccountTransferAccount
SOURCE KEY (id) REFERENCES Account (id)
DESTINATION KEY (to_id) REFERENCES Account (id)
LABEL Transfers
);
Inserisci i dati
Per aggiornare i dati in un grafico, devi aggiornare i dati nelle tabelle dei nodi e degli archi. Quando crei un grafico, i tuoi dati non vengono spostati o copiati. Un grafico funge da visualizzazione logica dei dati presenti nelle tabelle dei nodi e degli archi. Le query sui grafici restituiscono risultati basati sui dati presenti nelle tabelle dei nodi e degli archi al momento dell'esecuzione della query.
La seguente query inserisce i dati nelle tabelle che hai creato:
INSERT INTO graph_db.Account
(id, create_time, is_blocked, nick_name)
VALUES
(7,"2020-01-10 06:22:20.222",false,"Vacation Fund"),
(16,"2020-01-27 17:55:09.206",true,"Vacation Fund"),
(20,"2020-02-18 05:44:20.655",false,"Rainy Day Fund");
INSERT INTO graph_db.Person
(id, name, birthday, country, city)
VALUES
(1,"Alex","1991-12-21 00:00:00","Australia","Adelaide"),
(2,"Dana","1980-10-31 00:00:00","Czech_Republic","Moravia"),
(3,"Lee","1986-12-07 00:00:00","India","Kollam");
INSERT INTO graph_db.AccountTransferAccount
(id, to_id, amount, create_time, order_number)
VALUES
(7,16,300,"2020-08-29 15:28:58.647","304330008004315"),
(7,16,100,"2020-10-04 16:55:05.342","304120005529714"),
(16,20,300,"2020-09-25 02:36:14.926","103650009791820"),
(20,7,500,"2020-10-04 16:55:05.342","304120005529714"),
(20,16,200,"2020-10-17 03:59:40.247","302290001255747");
INSERT INTO graph_db.PersonOwnAccount
(id, account_id, create_time)
VALUES
(1,7,"2020-01-10 06:22:20.222"),
(2,20,"2020-01-27 17:55:09.206"),
(3,16,"2020-02-18 05:44:20.655");

Eseguire una query su un grafico
Per eseguire query su un grafico, esegui query che utilizzano il Graph Query Language.
La seguente query utilizza un'istruzione
MATCH
per trovare informazioni su a chi Dana ha trasferito denaro:
GRAPH graph_db.FinGraph
MATCH
(person:Person {name: "Dana"})-[own:Owns]->
(account:Account)-[transfer:Transfers]->(account2:Account)<-[own2:Owns]-(person2:Person)
RETURN
person.name AS owner,
transfer.amount AS amount,
person2.name AS transferred_to
ORDER BY person2.name;
I risultati sono simili ai seguenti:
+-------+--------+----------------+ | owner | amount | transferred_to | +-------+--------+----------------+ | Dana | 500.0 | Alex | | Dana | 200.0 | Lee | +-------+--------+----------------+
Visualizzare i risultati delle query del grafico
Puoi visualizzare i risultati della query del grafico in un blocco note utilizzando il comando magico %%bigquery --graph seguito dalla query GQL. La query deve restituire gli elementi del grafico in formato JSON. Per visualizzare
i risultati della query eseguita nella sezione precedente, esegui la seguente
query in una cella di codice del notebook:
%%bigquery --graph
GRAPH graph_db.FinGraph
MATCH
p = ((person:Person {name: "Dana"})-[own:Owns]->
(account:Account)-[transfer:Transfers]->(acount2:Account)<-[own2:Owns]-(person2:Person))
RETURN
TO_JSON(p) AS path;

Eliminare un grafico
Per eliminare un grafico, utilizza l'istruzione DROP PROPERTY GRAPH. L'eliminazione di un grafico non ha alcun effetto
sulle tabelle utilizzate per definire i nodi e gli archi del grafico. La seguente
query elimina il grafico FinGraph:
DROP PROPERTY GRAPH graph_db.FinGraph;
Passaggi successivi
- Consulta l'introduzione a BigQuery Graph.
- Scopri di più sugli schemi dei grafici.
- Scopri di più su come scrivere query del grafico.
- Scopri di più sul Graph Query Language (GQL).
- Per un tutorial sul rilevamento delle frodi, consulta Rilevamento delle frodi con BigQuery Graph.
- Per un tutorial sui profili dei clienti, consulta Creare consigli a 360 gradi sui clienti con BigQuery Graph.
- Per un tutorial sulle catene di fornitura, consulta Tracciabilità della catena di fornitura con BigQuery Graph.