Présentation du schéma

Ce document explique les composants d'un schéma de graphique de propriété 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 de libellés 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 aux nœuds et aux arêtes du graphique, et en définissant des libellés et des propriétés personnalisés. Pour en savoir plus sur BigQuery Graph, consultez la présentation de BigQuery Graph.

Comprendre le modèle de données du graphe de propriété

Un graphe de propriétés vous permet de modéliser des données connectées sous forme de 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 lieux.

Les nœuds et les arêtes peuvent inclure les informations suivantes :

  • Libellés : ils classent les types de nœuds et d'arêtes. Par exemple, les élèves d'un cours peuvent avoir les libellés Student et Person. Si vous ne définissez pas explicitement de libellé pour un nœud ou un bord, BigQuery Graph utilise le nom de la table d'entrée comme libellé 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é name avec la valeur Alex et une propriété id avec la valeur 1.

L'exemple de la figure 1 montre comment 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 :

  • Personne : représente une personne impliquée dans des transactions financières.
  • Compte : 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 relie une source Account à une destination Account, ce qui indique le flux d'argent.

Nœuds, arêtes, libellés et propriétés d'un graphique financier.

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 Person incluent les propriétés suivantes :

    • name (STRING)
    • id (INT64)
  • Les arêtes Transfers incluent cette propriété :

    • 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 peut être propriétaire d'un compte, mais un compte ne peut pas être propriétaire d'une personne. Toutefois, certaines relations, comme les relations d'amitié sur 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 tableaux. 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 aux 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 libellé et expose toutes les colonnes de la table d'entrée en tant que propriétés.

  • Chaque nœud de compte utilise le libellé Account.
  • Chaque nœud de compte inclut les propriétés id et create_time des colonnes du tableau Account.

Clé de l'élément

Une définition de nœud définit également la clé d'élément, qui est 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 des éléments.

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 du tableau 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 les lignes des tableaux. Pour définir un bord, ajoutez une définition de bord à 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 graphique.

Par défaut, BigQuery utilise le nom de la table comme libellé et expose toutes les colonnes de la table d'entrée en tant que propriétés.

Références aux nœuds source et de destination

Une définition d'arête définit la référence du 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 allez créer un graphique de propriétés FinGraph avec les éléments suivants :

  • Nœuds Person et Account
  • bord 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 arête PersonOwnAccount connecte un nœud Person (source) à un nœud Account (destination).

  • Le nœud source d'un bord est un nœud Person dont la propriété id est identique à la propriété id du bord.
  • Le nœud de destination d'un bord est un nœud Account dont la propriété id est identique à la propriété account_id du 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 arête possède le libellé PersonOwnAccount par défaut.

Mapper les lignes sur les arêtes

Chaque ligne de la table d'entrée des arêtes 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 des arêtes peut générer zéro ou plusieurs arêtes dans votre graphique.

Définir des nœuds et des arêtes dans un même tableau

Vous pouvez définir un nœud et ses arêtes entrantes ou sortantes dans une même 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 la nécessité d'une jointure à une table de périphérie 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 arête Owns entrante. 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 libellés et les propriétés

Vous pouvez utiliser les clauses LABEL et PROPERTIES pour personnaliser les libellés 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 libellés :

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 Person utilisent le libellé Customer pour exposer la propriété address. La propriété address est définie par l'expression CONCAT(city, ", ", country), qui fait référence aux colonnes city et country de la table d'entrée Person.

  • Le nœud Account utilise le libellé Account pour exposer les propriétés id et create_time.

Les nœuds Person et Account ont tous deux le libellé Entity avec les propriétés id et name.

  • Dans le nœud Person, les propriétés id et name proviennent des colonnes du tableau d'entrée.
  • Dans le nœud Account, la propriété name fait référence à la colonne nick_name du tableau d'entrée.

Cohérence des libellés et des propriétés

Dans un graphique, les libellés et les propriétés sont identifiés de manière unique par leur nom. Vous pouvez utiliser des libellés et des propriétés portant le même nom dans plusieurs définitions de nœuds ou d'arêtes. Toutefois, les libellés 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, le libellé Entity est défini 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 du schéma qui pourraient entraîner des problèmes. Appliquez les bonnes pratiques suivantes :

  • Avant de supprimer une table utilisée dans la définition d'un nœud de graphique, supprimez d'abord cette définition de nœud du graphique.
  • Avant de supprimer une colonne d'un tableau exposé 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 graphiques

Pour afficher l'instruction CREATE PROPERTY GRAPH utilisée pour construire 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 graphique.

Vous pouvez également visualiser le schéma de votre graphique dans un notebook.

Mettre à jour un schéma de graphique

Pour modifier le schéma d'un graphique existant, vous devez redéfinir le schéma du 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'instruction DROP PROPERTY GRAPH.

Étapes suivantes