Présentation du schéma Spanner Graph

Spanner Graph vous permet de modéliser des données connectées sous la forme d'un graphique de propriétés qui représente les informations sous la forme d'un réseau de nœuds et d'arêtes. Les nœuds symbolisent les entités et les arêtes montrent les connexions entre elles. Les nœuds et les arêtes incluent des libellés qui les classent dans des ensembles. Les nœuds et les arêtes incluent également des propriétés qui sont des paires clé/valeur.

Vous définissez un schéma Spanner Graph en mappant les lignes des tables d'entrée aux nœuds et aux arêtes du graphique. Personnalisez les libellés et les propriétés des nœuds et des arêtes, et comprenez l'incidence des modifications de schéma sur les dépendances du graphique. Vous pouvez également gérer les données sans schéma pour des définitions de graphiques plus flexibles.

Pour en savoir plus sur Spanner Graph, consultez la présentation de Spanner 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. 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 dans des ensembles (par exemple, ville).
  • 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 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 est propriétaire d'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 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 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. Chaque propriété inclut un nom et une valeur.

  • 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

L'exemple de graphique utilise des arêtes orientées qui indiquent une direction spécifique dans la relation entre les entités. Toutefois, certaines relations, comme la relation ami dans un réseau social, ne sont pas orienté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 comme deux arêtes orientées, une dans chaque direction.

Conception de schémas Spanner Graph

Spanner 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. Cette approche utilise SQL/PGQ (Property Graph Queries), qui fait partie des normes SQL:2023.

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

Pour définir un nœud, ajoutez une définition de nœud dans la clause NODE TABLES. La forme la plus simple de définition de nœud ne contient qu'un nom de table d'entrée. Spanner 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.

-- 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és 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 Spanner Graph expose toutes les colonnes de la table d'entrée en tant que propriétés de nœud.

Dans l'exemple précédent,

  • Chaque nœud de compte utilise le libellé Account.
  • Chaque nœud de compte inclut des propriétés [id, create_time] provenant 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 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 utiliser la clause KEY pour définir explicitement les clés d'élément.
  • Vous pouvez utiliser des colonnes avec une contrainte d'index unique comme clés d'élément.

L'exemple suivant définit le nœud Account et le nœud Person.

  • Le nœud Account utilise par défaut la clé primaire de la table Account comme clé d'élément.
  • Le nœud Person, en revanche, 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
  );

Associer une ligne du tableau d'entrée à un nœud du graphique

  • 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 dont la clé d'élément est nulle sont ignorées.

Définir un bord dans un graphe de propriété

Pour définir un bord, ajoutez une définition de bord dans la clause EDGE TABLES. La forme la plus simple de définition d'arête ne contient qu'un nom de table d'entrée. Spanner Graph mappe les lignes de la table d'entrée aux arêtes du graphique.

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

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 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'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. L'exemple suivant utilise la définition de périphérie 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 nœud Person (source) à un nœud Account (destination).

  • Le nœud source d'un bord est un nœud Person dont le id est identique au id du bord.
  • Le nœud de destination d'un bord est un nœud Account dont le id est identique au account_id du bord.

De plus, les informations suivantes s'appliquent à l'arête 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 possède le libellé PersonOwnAccount par défaut.

Associer une ligne d'un tableau d'entrée d'arêtes à des arêtes du graphique

  • Chaque ligne de la table d'entrée des arêtes, où la clé de l'élément n'est pas nulle, correspond généralement à une arête unique dans votre graphique.
  • Une ligne peut correspondre à zéro ou plusieurs arêtes dans le graphique. Par exemple, cela se produit lorsque la référence de nœud source correspond à zéro ou plusieurs nœuds dans la table de nœuds sources.
  • Vous pouvez utiliser la même table d'entré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 Fusionner les tables d'entrée de nœuds et d'arêtes.

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 deux nœuds : Person et Account.

  • 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.
  • Pour Account, le nœud Account utilise le libellé Account pour exposer les propriétés id et create_time.
  • 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 de la table 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. 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 utilisent le même type de valeur.
  • Les libellés portant le même nom exposent 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, name] avec des types de valeurs identiques.

Dépendances entre les graphiques et les 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, et les colonnes de table référencées par les propriétés. Spanner Graph ne permet pas de modifier un schéma qui rompt l'une de ces dépendances.

L'instruction suivante rend FinGraph dépendant de la table Account et des colonnes id et create_time.

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

Dans cet exemple, Spanner Graph n'autorise pas les modifications de schéma suivantes :

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 si d'autres exigences de schéma le permettent. Pour en savoir plus, consultez Mettre à jour le schéma.

Afficher une visualisation du schéma

Vous pouvez afficher une visualisation du schéma dans Spanner Studio après avoir exécuté une requête Spanner Graph. Pour en savoir plus, consultez Utiliser les visualisations Spanner Graph.

Gérer les données sans schéma

Spanner Graph est également compatible avec la gestion des données sans schéma, ce qui est utile lorsque vous avez besoin d'une définition de graphique plus flexible. Pour en savoir plus, consultez Gérer les données sans schéma dans Spanner Graph.

Étapes suivantes