Créer et interroger un graphe
BigQuery Graph vous permet de modéliser des données relationnelles sous forme de nœuds et d'arêtes pour interroger des relations complexes à l'aide du Graph Query Language (GQL). Dans ce tutoriel, vous allez créer des tables de nœuds et d'arêtes pour un ensemble de données financières, définir un graphique de propriétés et exécuter des requêtes de modèle de graphique.
Rôles requis
Pour obtenir les autorisations nécessaires pour utiliser 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.
Ce rôle prédéfini contient les autorisations requises pour utiliser les graphiques. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour utiliser les graphiques :
-
Créez un graphique :
bigquery.propertyGraphs.create -
Répertoriez les graphiques et leurs métadonnées :
bigquery.propertyGraphs.list -
Obtenez les métadonnées et la définition d'un graphique :
bigquery.propertyGraphs.get -
Mettez à jour les métadonnées et la définition d'un graphique :
bigquery.propertyGraphs.update -
Supprimez un graphique :
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 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 graphe, vous pouvez utiliser l'instruction CREATE PROPERTY GRAPH ou l'outil de modélisation visuelle de graphes.
L'exemple suivant utilise l'instruction CREATE PROPERTY GRAPH pour créer un graphique nommé 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 de périphérie, 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 graphique, vos données ne sont ni déplacées, ni copiées. Au lieu de cela, un graphique agit comme une vue logique des données qui existent dans vos tables de nœuds et d'arêtes. Vos requêtes de 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 graphique
Pour interroger un graphe, vous exécutez des requêtes qui utilisent le langage de requête de graphe.
La requête suivante utilise une instruction MATCH pour identifier 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 graphiques comme source de données dans Conversational Analytics, ce qui vous permet de poser des questions en langage naturel sur vos graphiques. Par exemple, vous pouvez demander "À qui Dana a-t-elle transféré de l'argent et quel montant a été transféré ?".
Visualiser les résultats d'une requête de graphe
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 du 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 graphe, utilisez l'instruction DROP PROPERTY GRAPH. La suppression d'un graphe n'a aucune incidence sur les tables utilisées pour définir les nœuds et les arêtes du graphe. 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 graphes.
- Découvrez comment rédiger des requêtes de graphe.
- En savoir plus sur le langage GQL (Graph Query Language)
- Pour suivre un tutoriel sur la détection des fraudes, consultez Détection des fraudes avec BigQuery Graph.
- Pour suivre un tutoriel sur les profils client, consultez Créer des recommandations client à 360 degrés 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.