Présentation du schéma Spanner Graph

Ce document décrit le schéma de graphique Spanner et fournit des exemples pour illustrer les concepts clés. Pour en savoir plus sur Spanner Graph, consultez la présentation de Spanner Graph.

Modèle de données du graphique de propriétés

Un graphique de propriété vous permet de modéliser des données connectées. Il représente les informations sous la forme d'un réseau de nœuds et d'arêtes. Les nœuds symbolisent des entités dans votre paysage de données, comme les clients, les produits ou les lieux. Les arêtes montrent les connexions entre ces nœuds, capturant des relations telles que "acheté", "suit" ou "situé dans".

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

  • Les libellés, qui classent les nœuds et les arêtes en ensembles (par exemple, Ville).
  • Les propriétés, qui sont des paires clé-valeur, par exemple population.

L'exemple de la figure 1 montre comment concevoir un graphique pour modéliser des activités financières. Ce graphique comprend les types d'entités modélisés en tant que nœuds suivants:

  • 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 reliées par différents types de relations, qui sont représentés par les arêtes orientées suivantes:

  • Possède:une personne possède un ou plusieurs comptes.
  • Transferts:transfert d'argent d'un compte à un autre.

Chaque arête orientée indique une relation à sens unique, allant d'un nœud source à un nœud de destination. Par exemple, une arête Transfers relie une Account source à une Account de destination, ce qui indique le flux d'argent.

Diagramme de présentation du schéma Spanner Graph.

Figure 1 : Exemple de graphe avec plusieurs nœuds et arêtes orientées.

Les nœuds et les arêtes peuvent contenir des informations supplémentaires dans les propriétés. Chaque propriété a un nom et une valeur.

  • Les nœuds Person présentent les propriétés suivantes :
    • name (STRING)
    • id (INT64)
  • Les arêtes Transferts ont la propriété suivante :
    • amount (FLOAT64)

Arcs orientés et non orientés

L'exemple de graphique utilise des arêtes dirigées, qui indiquent une direction spécifique dans la relation entre les entités. Cependant, certaines relations, comme la relation ami dans un réseau social, ne sont pas dirigées et représentent une connexion réciproque sans origine ni point de terminaison distincts. Dans ce cas, vous pouvez modéliser les arêtes non orientées en tant que deux arêtes orientées, une dans chaque sens.

Conception de schémas Spanner Graph

Le graphe Spanner vous permet de créer un graphe à partir de tables à l'aide de l'instruction CREATE PROPERTY GRAPH. Les tables utilisées pour créer des graphiques sont appelées tables d'entrée. Cette approche est basée sur SQL/PGQ (Property Graph Queries), qui fait partie des normes SQL:2023.

Définir un nœud dans un graphe de propriétés

Pour définir un nœud, vous devez ajouter une définition de nœud dans la clause NODE TABLES. La forme la plus simple de définition de nœud ne contient que le nom d'une table d'entrée. Les lignes de la table d'entrée sont mappées sur des nœuds de graphique.

Dans l'exemple suivant, vous utilisez la clause NODE TABLES pour définir le nœud Account dans le graphique de propriété FinGraph. La définition du nœud contient la table d'entrée Account.

-- First, create an Account table.
CREATE TABLE Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
) PRIMARY KEY (id);

-- Next, use the Account table as input table of Account node definition.
CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account
  );

Libellé et propriétés par défaut

Par défaut, tous les nœuds utilisent le nom de la table d'entrée comme libellé, et toutes les colonnes de la table d'entrée sont exposées en tant que propriétés de nœud.

Dans l'exemple précédent,

  • Chaque nœud de compte possède l'étiquette Account.
  • Chaque nœud de compte comporte des propriétés [id, create_time] créées à partir des colonnes de la table Account.

Clé de l'élément

Une définition de nœud définit également la clé d'élément, 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.
  • Les clés d'élément peuvent être définies explicitement par la clause KEY.
  • Les colonnes avec des contraintes d'unicité UNIQUE INDEX peuvent être utilisées comme clés d'éléments.

L'exemple suivant définit les nœuds Account et Person.

  • Par défaut, le nœud Account utilise la clé primaire de la table Account comme clé d'élément.
  • En revanche, le nœud Person spécifie explicitement id comme clé d'élément avec la clause KEY.
CREATE TABLE Person (
  id           INT64 NOT NULL,
  name         STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
) PRIMARY KEY (id);

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id),
    Account
  );

Mappage d'une ligne du tableau d'entrée sur un nœud du graphique

  • Chaque ligne avec une clé d'élément non nulle est mappée sur un nœud unique du graphique, identifié par la clé d'élément.
  • Les lignes dont la clé d'élément est nulle sont ignorées.

Définir une arête dans un graphe de propriétés

Pour définir une arête, ajoutez une définition d'arête dans la clause EDGE TABLES. La forme la plus simple de définition de bord ne contient qu'un nom de table d'entrée. Les lignes du tableau d'entrée sont mappées sur les arêtes du graphique.

Référence des nœuds source et de destination

Dans l'exemple suivant, vous créez un graphique de propriété FinGraph avec les éléments suivants:

  • Nœuds Person et Account
  • bord PersonOwnAccount
CREATE TABLE Person (
 id            INT64 NOT NULL,
 name          STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
 id            INT64 NOT NULL,
 create_time   TIMESTAMP,
) PRIMARY KEY (id);

CREATE TABLE PersonOwnAccount (
 id            INT64 NOT NULL,
 account_id    INT64 NOT NULL,
 create_time   TIMESTAMP,
 FOREIGN KEY (account_id) REFERENCES Account (id)
) PRIMARY KEY (id, account_id),
  INTERLEAVE IN PARENT Person;

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person,
    Account
  )
  EDGE TABLES (
    PersonOwnAccount
      SOURCE KEY (id) REFERENCES Person (id)
      DESTINATION KEY (account_id) REFERENCES Account (id)
  );

Une définition d'arc doit définir la référence des nœuds source et de destination à l'aide des clauses SOURCE KEY, DESTINATION KEY et REFERENCES. L'exemple suivant utilise la définition de bord de PersonOwnAccount pour illustrer ce concept:

EDGE TABLES (
  PersonOwnAccount
    SOURCE KEY (id) REFERENCES Person (id)
    DESTINATION KEY (account_id) REFERENCES Account (id)
)

Chaque arête PersonOwnAccount connecte un Person (source) à un nœud Account (destination).

  • Le nœud source d'une arête est un nœud Person dont le id est identique à celui de l'arête id.
  • Le nœud de destination d'une arête est un nœud Account dont le id est identique à celui de l'arête account_id.

De plus, les affirmations suivantes sont vraies pour le bord PersonOwnAccount:

  • 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 est associée à l'étiquette PersonOwnAccount par défaut.

Mappage d'une ligne d'une table d'entrée d'arêtes sur les arêtes du graphique

  • Chaque ligne de la table d'entrée des arêtes, dont la clé d'élément n'est pas nulle, correspond généralement à une arête unique de votre graphique.
  • Une ligne peut correspondre à zéro ou plusieurs arêtes dans le graphique, par exemple lorsque la référence du nœud source correspond à zéro ou plusieurs nœuds dans le tableau des nœuds sources.
  • La même table d'entrée peut être utilisée dans différentes définitions de nœuds ou d'arêtes pour créer différents ensembles de nœuds ou d'arêtes. Pour en savoir plus, consultez la section Fusionner les tables d'entrée de nœud et d'arête.

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.

Dans l'exemple suivant, deux nœuds sont définis, Person et Account.

  • Les nœuds Person exposent la propriété address via le libellé Customer. 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.
  • Pour Account, le nœud Account expose les propriétés id et create_time via l'étiquette Account.
  • Person et Account ont le libellé Entity avec les propriétés [id, name].
    • Pour Person, les propriétés id et name proviennent des colonnes de la table d'entrée.
    • Pour Account, la propriété name fait référence à la colonne nick_name du tableau d'entrée.
CREATE TABLE Person (
 id               INT64 NOT NULL,
 name             STRING(MAX),
 birthday         TIMESTAMP,
 country          STRING(MAX),
 city             STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
 id               INT64 NOT NULL,
 create_time      TIMESTAMP,
 is_blocked       BOOL,
 nick_name        STRING(MAX),
) PRIMARY KEY (id);

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id)
      LABEL Customer
        PROPERTIES (CONCAT(city, ", ", country) AS address)
      LABEL Entity PROPERTIES (id, name),
    Account KEY (id)
      LABEL Account PROPERTIES (id, create_time)
      LABEL Entity PROPERTIES (id, nick_name AS name)
  );

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. Les libellés et les propriétés portant le même nom peuvent apparaître 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 avoir le même type de valeur.
  • Les libellés du 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 à la fois dans les nœuds Person et Account. Dans les deux définitions, elles ont le même ensemble de noms de propriétés [id, name] avec des types de valeurs identiques.

Dépendances entre les graphiques et d'autres objets de schéma

Le graphique créé par CREATE PROPERTY GRAPH dépend d'autres objets de schéma, tels que les tables d'entrée des définitions de nœuds et d'arêtes, ainsi que les colonnes de table référencées par les propriétés. Si une modification de schéma brise l'une de ces dépendances, la modification n'est pas autorisée.

L'instruction suivante crée une dépendance de FinGraph vers la table Account et les colonnes id, create_time.

CREATE OR REPLACE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account PROPERTIES (id, create_time)
  );

Voici des exemples de modifications de schéma que vous n'êtes pas autorisé à apporter:

Toutefois, vous pouvez apporter les modifications de schéma suivantes:

  • Modifiez le schéma de la table Account et des colonnes id et create_time, à condition qu'ils soient autorisés par d'autres exigences de schéma. Pour en savoir plus, consultez la section Effectuer des mises à jour de schéma.

Étape suivante