Présentation du schéma
Ce document explique les composants d'un schéma de graphe et vous montre comment créer et gérer un schéma de graphe.
Les graphes vous permettent de modéliser des données connectées qui représentent des informations sous la forme d'un réseau de nœuds et d'arêtes. Un schéma de graphique se compose de nœuds et d'arêtes, ainsi que d'étiquettes qui classent leur type et de propriétés qui les décrivent. Vous définissez un schéma de graphe en mappant les lignes des tables d'entrée aux nœuds et aux arêtes du graphe, et en définissant des étiquettes et des propriétés personnalisées. Pour en savoir plus sur BigQuery Graph, consultez la présentation de BigQuery Graph.
Comprendre le modèle de données de graphe
Un graphe vous permet de modéliser des données connectées sous la forme d'un réseau de nœuds et d'arêtes. Les nœuds représentent des entités dans vos données, comme des clients, des produits ou des lieux. Les arêtes représentent les connexions entre ces nœuds, capturant des relations telles que les achats, les abonnements ou les emplacements.
Les nœuds et les arêtes peuvent inclure les informations suivantes :
Étiquettes : classent les types de nœuds et d'arêtes. Par exemple, les élèves d'une classe peuvent avoir une étiquette
Studentet une étiquettePerson. Si vous ne définissez pas explicitement d'étiquette pour un nœud ou une arête, BigQuery Graph utilise le nom de la table d'entrée comme étiquette par défaut.Propriétés : utilisées pour décrire les nœuds et les arêtes. Par exemple, un nœud représentant une personne peut avoir une propriété
nameavec la valeurAlexet une propriétéidavec la valeur1.
L'exemple de la figure 1 montre comment concevoir un graphe pour modéliser des activités financières. Ce graphique inclut les types d'entités suivants modélisés en tant que nœuds :
- Person : représente une personne impliquée dans des transactions financières.
- Account : représente un compte bancaire utilisé pour les transactions.
Ces entités sont connectées par différents types de relations, qui sont représentées par les arêtes orientées suivantes :
- Propriétaire : une personne possède un ou plusieurs comptes.
- Transferts : l'argent est transféré d'un compte à un autre.
Chaque arête orientée indique une relation unidirectionnelle qui va d'un nœud source à un nœud de destination. Par exemple, une arête Transfers connecte une source Account à une destination Account, indiquant le flux d'argent.

Figure 1 : Exemple de graphique avec plusieurs nœuds et arêtes orientées.
Les nœuds et les arêtes incluent des informations supplémentaires dans les propriétés.
Les nœuds
Personincluent les propriétés suivantes :name(STRING)id(INT64)
Les bords
Transfersincluent cette propriété :amount(FLOAT64)
Arêtes orientées et non orientées
Les arêtes dirigées indiquent une direction spécifique dans la relation entre les entités. Par exemple, une personne possède un compte, mais un compte ne possède pas une personne. Cependant, certaines relations, comme la relation d'amitié dans un réseau social, sont non orientées et représentent une connexion réciproque. Dans ce cas, vous pouvez modéliser les arêtes non orientées comme deux arêtes orientées, une dans chaque direction.
Concevoir votre schéma
BigQuery Graph vous permet d'utiliser l'instruction CREATE PROPERTY GRAPH pour créer un graphique à partir de tables. Les tables qui créent des graphiques sont appelées tables d'entrée.
Définir un nœud
Les nœuds sont définis par des lignes dans les types de tables ou de vues suivants :
- Tables standards
- Tables externes
- Tables gérées Apache Iceberg
- Tables du catalogue REST Iceberg Lakehouse
- Vues, y compris les vues autorisées
- Vues matérialisées non incrémentielles
Pour définir un nœud, ajoutez une définition de nœud dans la clause NODE TABLES.
La forme la plus simple d'une définition de nœud contient le nom d'une table d'entrée avec une clé primaire.
BigQuery Graph mappe les lignes de la table d'entrée avec les nœuds du graphe.
Dans l'exemple suivant, vous utilisez la clause NODE TABLES pour définir le nœud Account dans le graphique FinGraph. La définition du nœud contient la table d'entrée Account.
-- Create an Account table.
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
-- Use the Account table as the input table for the Account node definition.
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Account
);
Par défaut, BigQuery utilise le nom de la table comme étiquette et expose toutes les colonnes de la table d'entrée en tant que propriétés.
- Chaque nœud de compte utilise l'étiquette
Account. - Chaque nœud de compte inclut les propriétés
idetcreate_timedes colonnes de la tableAccount.
Clé d'élément
Une définition de nœud définit également la clé d'élément, une collection de colonnes qui identifie de manière unique un nœud de graphique. Par défaut, la clé d'élément est la clé primaire de la table d'entrée.
Vous pouvez également utiliser la clause KEY pour définir explicitement les clés d'élément.
L'exemple suivant définit un nœud Account et un nœud Person. Le nœud Account utilise la clé primaire de la table Account comme clé d'élément.
Le nœud Person spécifie explicitement la colonne id comme clé d'élément à l'aide de la clause KEY.
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person KEY (id),
graph_db.Account
);
- Chaque ligne avec une clé d'élément non nulle correspond à un nœud unique dans le graphique identifié par la clé d'élément.
- Les lignes avec une clé d'élément nulle sont ignorées.
La même table d'entrée peut être utilisée dans plusieurs définitions de nœuds. Dans ce cas, une ligne donnée de la table d'entrée correspond à un nœud pour chaque définition de nœud.
Définir une arête
Les arêtes sont définies par des lignes dans les types de tables ou de vues suivants :
- Tables standards
- Tables externes
- Tables gérées Apache Iceberg
- Tables du catalogue REST Iceberg Lakehouse
- Vues, y compris les vues autorisées
- Vues matérialisées non incrémentielles
Pour définir une arête, ajoutez une définition d'arête à la clause EDGE TABLES.
La forme la plus simple de définition d'arête contient le nom d'une table d'entrée et définit les références des nœuds source et de destination.
BigQuery Graph utilise cette définition pour mapper les lignes de la table d'entrée aux arêtes du graphe.
Par défaut, BigQuery utilise le nom de la table comme étiquette et expose toutes les colonnes de la table d'entrée en tant que propriétés.
- La clé d'élément de chaque arête est définie de la même manière que les nœuds.
Références des nœuds source et de destination
Une définition d'arête définit la référence du nœud source et du nœud de destination à l'aide des clauses SOURCE KEY, DESTINATION KEY et REFERENCES.
Vous devez définir les nœuds source et de destination avant de les utiliser dans la définition de l'arête.
Dans l'exemple suivant, vous allez créer un graphique nommé FinGraph avec les éléments suivants :
Personnœud etAccountnœudPersonOwnAccountbord
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
FOREIGN KEY (account_id) REFERENCES graph_db.Account (id) NOT ENFORCED,
PRIMARY KEY (id, account_id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person,
graph_db.Account
)
EDGE TABLES (
PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
);
Chaque périphérie PersonOwnAccount connecte un nœud Person (source) à un nœud Account (destination).
- Le nœud source d'un bord est un nœud
Persondont la propriétéidest identique à la propriétéiddu bord. - Le nœud de destination d'un bord est un nœud
Accountdont la propriétéidest identique à la propriétéaccount_iddu bord. - La clé d'élément est la clé primaire de la table
PersonOwnAccount, à savoir(id, account_id). - Chaque arête possède le même ensemble de propriétés que les colonnes de la table
PersonOwnAccount. - Chaque périphérie possède l'étiquette par défaut
PersonOwnAccount.
Mapper des lignes sur des arêtes
Chaque ligne de la table d'entrée d'arête avec une clé d'élément non nulle correspond généralement à une seule arête de votre graphique. Toutefois, si la référence de nœud source ou de destination correspond à zéro ou plusieurs nœuds dans la table de nœuds source ou de destination, la ligne de la table d'entrée d'arête peut générer zéro ou plusieurs arêtes dans votre graphique.
Définir des nœuds et des arêtes dans une seule table
Vous pouvez définir un nœud et ses arêtes entrantes ou sortantes dans une seule table si les colonnes de votre table définissent une relation avec une autre table. Cette approche réduit le nombre de tables, simplifie la gestion des données et peut améliorer les performances des requêtes en éliminant le besoin d'une jointure à une table d'arêtes distincte.
Par exemple, si la table Account suivante possède une clé primaire composite (owner_id, account_id), la colonne owner_id peut être une clé étrangère qui fait référence à une table Person. Cette structure permet à la table Account de représenter à la fois le nœud Account et l'arête entrante du nœud Person.
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
PRIMARY KEY (id) NOT ENFORCED
);
-- Assume each account has exactly one owner.
CREATE TABLE graph_db.Account (
owner_id INT64 NOT NULL,
account_id INT64 NOT NULL,
FOREIGN KEY (owner_id) REFERENCES graph_db.Person(id) NOT ENFORCED,
PRIMARY KEY (owner_id, account_id) NOT ENFORCED
);
Vous pouvez utiliser la table Account pour définir à la fois le nœud Account et son bord Owns entrant. comme illustré dans l'instruction CREATE PROPERTY GRAPH suivante. Dans la clause EDGE TABLES, vous attribuez l'alias Owns à la table Account. En effet, chaque élément du schéma de graphique doit avoir un nom unique.
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person,
graph_db.Account
)
EDGE TABLES (
graph_db.Account AS Owns
SOURCE KEY (owner_id) REFERENCES Person
DESTINATION KEY (owner_id, account_id) REFERENCES Account
);
Personnaliser les étiquettes et les propriétés
Vous pouvez utiliser les clauses LABEL et PROPERTIES pour personnaliser les étiquettes et les propriétés.
L'exemple suivant définit un nœud Person avec une propriété personnalisée et un nœud Account avec plusieurs étiquettes :
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person KEY (id)
LABEL Customer
PROPERTIES (CONCAT(city, ", ", country) AS address)
LABEL Entity PROPERTIES (id, name),
graph_db.Account KEY (id)
DEFAULT LABEL OPTIONS(description = 'A checking or savings account')
PROPERTIES (id, create_time)
LABEL Entity
PROPERTIES (
id,
nick_name AS name OPTIONS(description = 'A user-defined account name',
synonyms = ['friendly name', 'display name'],
extensions = [('data_classification', 'user'), ('currency', 'USD')])
)
);
Les nœuds
Personutilisent l'étiquetteCustomerpour exposer la propriétéaddress. La propriétéaddressest définie par l'expressionCONCAT(city, ", ", country),qui fait référence aux colonnescityetcountryde la table d'entréePerson.Le nœud
Accountutilise l'étiquetteAccountpour exposer les propriétésidetcreate_time.
Les nœuds Person et Account ont tous deux l'étiquette Entity avec les propriétés id et name.
- Dans le nœud
Person, les propriétésidetnameproviennent des colonnes de la table d'entrée. - Dans le nœud
Account, la propriéténamefait référence à la colonnenick_namede la table d'entrée. - Dans le nœud
Account, la propriéténameutilise la clauseOPTIONSpour fournir une description de la propriété, une liste de synonymes et une liste de paires clé/valeur de métadonnées.
Spécifier des options
Vous pouvez spécifier des métadonnées personnalisées définies par l'utilisateur dans la clause OPTIONS() d'une définition d'étiquette ou de propriété, y compris une définition de mesure. Les options suivantes sont compatibles :
description: description de l'étiquette ou de la propriété sous forme de chaîne lisible par l'humain.synonyms: tableau de chaînes représentant les synonymes du libellé ou de la propriété.extensions: tableau de paires de chaînes (ARRAY<STRUCT<STRING, STRING>>) représentant des métadonnées supplémentaires. Vous pouvez utiliser des extensions pour fournir des métadonnées, des unités ou des règles de mise en forme personnalisées, telles que[('currency', 'USD')].
Ces options fournissent du contexte et améliorent la visibilité des interfaces de requêtes en langage naturel. Vous ne pouvez pas accéder directement à ces champs dans vos requêtes de graphe, et ils ne modifient en rien les résultats des requêtes GQL.
Cohérence des étiquettes et des propriétés
Dans un graphique, les étiquettes et les propriétés sont identifiées de manière unique par leur nom. Vous pouvez utiliser des étiquettes et des propriétés portant le même nom dans plusieurs définitions de nœuds ou d'arêtes. Toutefois, les étiquettes et les propriétés portant le même nom doivent respecter les règles suivantes :
- Les propriétés portant le même nom doivent utiliser le même type de valeur.
- Les libellés portant le même nom doivent exposer la même liste de propriétés.
Dans l'exemple précédent, l'étiquette Entity est définie à la fois dans les nœuds Person et Account. Les deux définitions incluent le même ensemble de noms de propriétés, id et name, avec des types de valeurs identiques.
Gérer les dépendances de schéma
Les graphiques dépendent du schéma des tables d'entrée pour les définitions de nœuds et d'arêtes, ainsi que des colonnes de table référencées par les propriétés. BigQuery Graph ne vérifie pas si la suppression ou la modification de tables ou de colonnes invalide un schéma de graphe existant.
Vous devez éviter d'apporter des modifications destructives au schéma. Suivez ces bonnes pratiques :
- Avant de supprimer une table utilisée dans une définition de nœud de graphique, supprimez d'abord cette définition de nœud du graphique.
- Avant de supprimer une colonne d'une table exposée en tant que propriété dans un graphe, supprimez la propriété de la définition de nœud ou d'arête correspondante.
Afficher les schémas de graphe
Pour afficher l'instruction CREATE PROPERTY GRAPH utilisée pour créer un graphique existant, interrogez la vue INFORMATION_SCHEMA.PROPERTY_GRAPHS :
SELECT
property_graph_name,
ddl
FROM
`region-REGION`.INFORMATION_SCHEMA.PROPERTY_GRAPHS;
Remplacez REGION par la région de l'ensemble de données contenant le graphe.
Vous pouvez également visualiser le schéma de votre graphe dans un notebook.
Mettre à jour un schéma de graphe
Pour modifier le schéma d'un graphe existant, vous devez le redéfinir à l'aide de l'instruction CREATE PROPERTY GRAPH.
Supprimer un schéma de graphe
Pour supprimer un graphique, utilisez l'instruction DROP PROPERTY GRAPH.
Bonnes pratiques
Les sections suivantes décrivent les bonnes pratiques pour définir votre schéma de graphe afin d'améliorer les performances de vos requêtes de graphe.
Définir le champ d'application de vos définitions de propriétés
Les propriétés sont des paires clé/valeur qui fournissent des informations supplémentaires associées aux nœuds ou aux arêtes. Nous vous recommandons de n'inclure que les propriétés nécessaires dans les nœuds ou les arêtes, et d'éviter d'utiliser la syntaxe PROPERTIES ALL COLUMNS ou la syntaxe par défaut qui associe toutes les colonnes des tables de nœuds ou d'arêtes à la liste des propriétés. La présence de nombreuses propriétés dans les nœuds ou les arêtes peut entraîner des analyses de colonnes inutiles dans les requêtes de graphe, ce qui dégrade les performances.
Pour limiter les propriétés que vous incluez dans une définition de nœud ou d'arête, utilisez le mot clé PROPERTIES lorsque vous définissez des propriétés d'élément dans votre instruction CREATE PROPERTY GRAPH.
La définition de table de nœuds suivante limite les propriétés de la table de nœuds Person à id et name :
NODE TABLES (
graph_db.Person PROPERTIES (id, name)
)
Définir des contraintes de clé primaire et de clé étrangère sur les nœuds et les arêtes du graphe
BigQuery peut utiliser des contraintes de clé primaire et étrangère sur vos tables de nœuds et d'arêtes pour optimiser vos requêtes de graphe en réduisant les analyses de table inutiles. Toutefois, BigQuery n'applique pas de contraintes de clé primaire ou étrangère aux tables. Si votre application ne peut pas garantir l'intégrité référentielle ou l'unicité des clés primaires, l'utilisation de clés primaires ou étrangères pour l'optimisation des requêtes peut entraîner des résultats de requête incorrects.
L'exemple suivant définit des contraintes de clé primaire et de clé étrangère sur les tables de nœuds Person et Account, ainsi que sur la table d'arêtes PersonOwnAccount :
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
);
Étapes suivantes
- En savoir plus sur BigQuery Graph
- Découvrez comment créer et interroger un graphe.
- Découvrez comment écrire des requêtes de graphe.
- Découvrez comment créer des graphiques avec des mesures.