Créer un graphe et l'interroger
Ce document explique comment utiliser BigQuery Graph pour créer un graphe contenant des informations financières et exécuter des requêtes de graphe à l'aide du langage de requête de graphe (GQL, Graph Query Language).
Rôles requis
Pour obtenir les autorisations nécessaires pour utiliser des graphes, 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 graphe.
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Ce rôle prédéfini contient les autorisations requises pour utiliser des graphes. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour utiliser des graphes :
-
Créer un graphe :
bigquery.propertyGraphs.create -
Lister les graphes et leurs métadonnées :
bigquery.propertyGraphs.list -
Obtenir les métadonnées et la définition d'un graphe :
bigquery.propertyGraphs.get -
Mettre à jour les métadonnées et la définition d'un graphe :
bigquery.propertyGraphs.update -
Supprimer un graphe :
bigquery.propertyGraphs.delete
Vous pouvez également obtenir ces autorisations 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 graphes sont créés à partir de tables BigQuery existantes et stockés dans des ensembles de données.
Pour stocker les tables et le graphe 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 appelé graph_db :
CREATE SCHEMA IF NOT EXISTS graph_db;
Les tables suivantes 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 suivantes
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
);
Créer un graphe
Pour créer un graphe, vous pouvez utiliser l'
CREATE PROPERTY GRAPH instruction
ou le concepteur visuel de graphes.
L'exemple suivant utilise l'instruction CREATE PROPERTY GRAPH pour créer un graphe 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 graphe, vous devez mettre à jour les données de vos tables de nœuds et d'arêtes. Lorsque vous créez un graphe, vos données ne sont ni déplacées ni copiées. Au lieu de cela, un graphe agit comme une vue logique des données qui existent dans vos tables de nœuds et d'arêtes. Les requêtes de votre graphe 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 graphe
Pour interroger un graphe, vous exécutez des requêtes qui utilisent le Graph Query Language.
La requête suivante utilise une
MATCH instruction
pour trouver des informations sur les personnes à 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 | +-------+--------+----------------+
Vous pouvez également utiliser des graphes comme source de données dans l'analyse conversationnelle, ce qui vous permet de poser des questions en langage naturel sur vos graphes. Par exemple, vous pouvez demander "À qui Dana a-t-elle transféré de l'argent et quel montant a-t-elle transféré ?".
Visualiser les résultats des requêtes de graphe
Vous pouvez
visualiser les résultats de vos requêtes de graphe
dans un notebook à l'aide de la commande magic %%bigquery --graph, suivie de votre
requête GQL. La requête doit renvoyer des éléments de graphe 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 graphe
Pour supprimer un graphe, utilisez l'DROP PROPERTY GRAPH instruction. La suppression d'un graphe n'a aucun effet sur les tables qui ont été utilisées pour définir les nœuds et les arêtes du graphe. La requête suivante supprime le graphe FinGraph :
DROP PROPERTY GRAPH graph_db.FinGraph;
Étape suivante
- Consultez la présentation de BigQuery Graph.
- En savoir plus sur les schémas de graphes.
- Découvrez comment écrire des requêtes de graphe .
- En savoir plus sur le Graph Query Language (GQL).
- Pour suivre un tutoriel sur la détection de fraudes, consultez Détection de fraudes avec BigQuery Graph.
- Pour suivre un tutoriel sur les profils client, consultez Créer des recommandations client à 360° avec BigQuery Graph.
- Pour suivre un tutoriel sur les chaînes d'approvisionnement, consultez Traçabilité de la chaîne d'approvisionnement avec BigQuery Graph.