Présentation du schéma
Ce document explique les composants d'un schéma de graphique de propriétés et vous montre comment créer et gérer un schéma de graphique.
Les graphiques 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 classifient leur type et de propriétés qui les décrivent. Vous définissez un schéma de graphique de propriétés en mappant les lignes des tables d'entrée sur les nœuds et les arêtes du graphique, 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 graphique de propriétés
Un graphique de propriétés 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, telles que des clients, des produits ou des emplacements. Les arêtes représentent les connexions entre ces nœuds, en 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 : classifient 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 : permettent de 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 vous pouvez concevoir un graphique 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 :
- Owns : une personne possède un ou plusieurs comptes.
- Transfers : l'argent passe 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 un Account source à un Account de destination, ce qui indique 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 arêtes
Transfersincluent la propriété suivante :amount(FLOAT64)
Arêtes orientées et non orientées
Les arêtes orienté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. Toutefois, certaines relations, comme la relation d'ami dans un réseau social, sont non orientées et représentent une connexion réciproque. Dans ce cas, vous pouvez modéliser des 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'
CREATE PROPERTY GRAPH
instruction 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 tables.
Pour définir un nœud, ajoutez une définition de nœud dans la
NODE TABLES clause.
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 sur les nœuds du graphique.
Dans l'exemple suivant, vous utilisez la clause NODE TABLES pour définir le nœud Account dans le graphique de propriétés 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 est mappée sur 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 est mappée sur 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 tables.
Pour définir une arête, ajoutez une définition d'arête à la
EDGE TABLES clause.
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 de nœuds source et de destination.
BigQuery Graph utilise cette définition pour mapper les lignes de la table d'entrée sur les arêtes du graphique.
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 de nœuds source et de destination
Une définition d'arête définit la référence de nœud source et 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 d'arête.
Dans l'exemple suivant, vous créez un graphique de propriétés FinGraph avec les éléments suivants :
- Nœuds
PersonetAccount - Arête
PersonOwnAccount
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 PersonOwnAccount arête connecte un nœud Person (source) à un nœud Account
(destination).
- Le nœud source d'une arête est un nœud
Personoù la propriétéidest identique à la propriétéidde l'arête. - Le nœud de destination d'une arête est un nœud
Accountoù la propriétéidest identique à la propriétéaccount_idde l'arête. - 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 arête possède l'étiquette
PersonOwnAccountpar défaut.
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 est généralement mappée sur 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 de jointure à une table d'arêtes distincte.
Par exemple, si la table Account suivante comporte 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 arête entrante Owns. Ceci est 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
LABEL
et les
PROPERTIES
clauses 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)
LABEL Account PROPERTIES (id, create_time)
LABEL Entity PROPERTIES (id, nick_name AS name)
);
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 auxcityetcountrycolonne de 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.
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 étiquettes 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 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 graphique existant.
Vous êtes responsable d'éviter les modifications de schéma qui pourraient entraîner des problèmes. 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 graphique, supprimez la propriété de la définition de nœud ou d'arête correspondante.
Afficher les schémas de graphique
Vous pouvez visualiser votre schéma de graphique dans un notebook.
Mettre à jour un schéma de graphique
Pour apporter des modifications au schéma d'un graphique existant, vous devez redéfinir le schéma de graphique à l'aide de l'instruction CREATE PROPERTY GRAPH.
Supprimer un schéma de graphique
Pour supprimer un graphique de propriétés, utilisez l'
DROP PROPERTY GRAPHinstruction.
Étape suivante
- En savoir plus sur BigQuery Graph.
- Découvrez comment créer et interroger un graphique de propriétés.
- Découvrez les bonnes pratiques concernant les schémas de graphique.