Creare ed eseguire query su un grafico
Questo documento mostra come utilizzare BigQuery Graph per creare un grafo con informazioni finanziarie ed eseguire query sui grafi utilizzando il Graph Query Language (GQL).
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per creare ed eseguire query sui grafici, 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 dei nodi e degli archi
I grafici vengono creati da tabelle BigQuery esistenti e archiviati nei set di dati.
Per archiviare le tabelle e il grafico che crei negli esempi seguenti,
crea un set di dati.
La query seguente crea un set di dati denominato graph_db:
CREATE SCHEMA IF NOT EXISTS graph_db;
Le tabelle seguenti contengono informazioni su persone e account, nonché sulle relazioni tra queste entità:
Person: informazioni sulle persone.Account: informazioni sui conti bancari.PersonOwnAccount: informazioni su chi possiede quali account.AccountTransferAccount: informazioni sui trasferimenti tra account.
Per creare queste tabelle, esegui le seguenti
CREATE TABLE istruzioni:
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, puoi utilizzare l'
CREATE PROPERTY GRAPH istruzione
o il modellatore di grafici visivi.
L'esempio seguente utilizza l'istruzione CREATE PROPERTY GRAPH per creare 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, aggiorna i dati nelle tabelle dei nodi e degli archi. Quando crei un grafico, i dati non vengono spostati o copiati. Un grafico funge invece 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 query seguente 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 query su un grafico
Per eseguire query su un grafico, esegui query che utilizzano il linguaggio di query sui grafici.
La query seguente utilizza un'istruzione
MATCH statement
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 | +-------+--------+----------------+
Puoi anche utilizzare i grafici come origine dati in analisi conversazionale, che ti consente di porre domande in linguaggio naturale sui grafici. Ad esempio, potresti chiedere "A chi ha trasferito denaro Dana e quanto è stato trasferito?"
Visualizzare i risultati delle query sui grafici
Puoi
visualizzare i risultati delle query sui grafici
in un notebook 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 query seguente 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 query seguente 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 sui grafici.
- Scopri di più sul linguaggio di query sui grafici (GQL).
- Per un tutorial sul rilevamento delle frodi, consulta Rilevamento delle frodi con BigQuery Graph.
- Per un tutorial sui profili cliente, consulta Creare consigli a 360° sui clienti con BigQuery Graph.
- Per un tutorial sulle catene di fornitura, consulta Tracciabilità della catena di fornitura con BigQuery Graph.