Créer et interroger un graphique
Ce document explique comment utiliser BigQuery Graph pour créer un graphique contenant des informations financières et exécuter des requêtes graphiques à l'aide du langage de requête de graphe (GQL).
Rôles requis
Pour obtenir les autorisations nécessaires pour créer et interroger des graphiques, demandez à votre administrateur de vous accorder le rôle IAM Éditeur de données BigQuery (roles/bigquery.dataEditor) sur l'ensemble de données dans lequel vous créez les tables de nœuds, les tables d'arêtes et le graphique.
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Créer des tables de nœuds et d'arêtes
Les graphiques sont créés à partir de tables BigQuery existantes et stockés dans des ensembles de données.
Pour stocker les tables et le graphique que vous créez dans les exemples suivants, créez un ensemble de données.
La requête suivante crée un ensemble de données nommé graph_db :
CREATE SCHEMA IF NOT EXISTS graph_db;
Les tableaux suivants contiennent des informations sur les personnes et les comptes, ainsi que sur les relations entre chacune de ces entités :
Person: informations sur les personnes.Account: informations sur les comptes bancaires.PersonOwnAccount: informations sur les propriétaires des comptes.AccountTransferAccount: informations sur les transferts entre comptes.
Pour créer ces tables, exécutez les instructions CREATE TABLE suivantes :
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
);
Créer un graphique
Pour créer un graphique, utilisez l'instruction CREATE PROPERTY GRAPH.
L'exemple suivant crée un graphique appelé FinGraph dans l'ensemble de données graph_db. Les tables Account et Person sont les tables de nœuds.
Les tables AccountTransferAccount et PersonOwnAccount sont les tables d'arêtes, qui représentent les relations entre les tables de nœuds.
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
);
Insérer des données
Pour mettre à jour les données d'un graphique, vous devez mettre à jour les données de vos tables de nœuds et d'arêtes. Lorsque vous créez un graphique, vos données ne sont ni déplacées ni copiées. Au lieu de cela, un graphique sert de vue logique des données qui existent dans vos tables de nœuds et d'arêtes. Vos requêtes de graphiques renvoient des résultats basés sur les données qui existent dans vos tables de nœuds et d'arêtes au moment où vous exécutez la requête.
La requête suivante insère des données dans les tables que vous avez créées :
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");

Interroger un graphique
Pour interroger un graphique, vous exécutez des requêtes qui utilisent le langage de requête Graph.
La requête suivante utilise une instruction MATCH pour trouver des informations sur la personne à qui Dana a transféré de l'argent :
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;
Les résultats ressemblent à ce qui suit :
+-------+--------+----------------+ | owner | amount | transferred_to | +-------+--------+----------------+ | Dana | 500.0 | Alex | | Dana | 200.0 | Lee | +-------+--------+----------------+
Visualiser les résultats des requêtes graphiques
Vous pouvez visualiser les résultats de votre requête de graphe dans un notebook à l'aide de la commande magique %%bigquery --graph suivie de votre requête GQL. La requête doit renvoyer des éléments de graphique au format JSON. Pour visualiser les résultats de la requête que vous avez exécutée dans la section précédente, exécutez la requête suivante dans une cellule de code de 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;

Supprimer un graphique
Pour supprimer un graphique, utilisez l'instruction DROP PROPERTY GRAPH. La suppression d'un graphique n'a aucune incidence sur les tables qui ont été utilisées pour définir les nœuds et les arêtes du graphique. La requête suivante supprime le graphique FinGraph :
DROP PROPERTY GRAPH graph_db.FinGraph;
Étapes suivantes
- Consultez la présentation de BigQuery Graph.
- En savoir plus sur les schémas de graphiques
- Découvrez comment rédiger des requêtes de graphe.
- En savoir plus sur le langage de requête de graphe (GQL)
- Pour accéder à un tutoriel sur la détection des fraudes, consultez Détection des fraudes avec BigQuery Graph.
- Pour consulter un tutoriel sur les profils client, consultez Créer des recommandations client à 360° avec BigQuery Graph.
- Pour accéder à un tutoriel sur les chaînes d'approvisionnement, consultez Traçabilité de la chaîne d'approvisionnement avec BigQuery Graph.