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 Student et une étiquette Person. 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é name avec la valeur Alex et une propriété id avec la valeur 1.

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.

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 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 id et create_time des colonnes de la table Account.

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.

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 Person et Account
  • 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 Person où la propriété id est identique à la propriété id de l'arête.
  • Le nœud de destination d'une arête est un nœud Account où la propriété id est identique à la propriété account_id de 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 PersonOwnAccount par 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 Person utilisent l'étiquette 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 city et country colonne de la table d'entrée Person.

  • Le nœud Account utilise l'étiquette Account pour exposer les propriétés id et create_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és id et name proviennent des colonnes de la table d'entrée.
  • Dans le nœud Account, la propriété name fait référence à la colonne nick_name de 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