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 le graphique Spanner, 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 les entités de votre paysage de données, comme "clients", "produits" ou "zones géographiques". Les arêtes montrent les connexions entre ces nœuds, en capturant des relations telles que "acheté", "suit" ou "situé à".

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, une population)

L'exemple de la figure 1 montre comment concevoir un graphique pour modéliser les 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 reliées par différents types de relations, qui sont représentés par les arêtes orientées suivantes :

  • Propriétaire:un utilisateur 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 à sens unique, allant d'un nœud source à un nœud de destination. Par exemple, une arête Transfers connecte une source Account vers une destination Account, indiquant le flux d'argent.

Schéma 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 sous la forme de propriétés. Chaque propriété possède 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)

Bords 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, telles que "ami" relation sur un réseau social, ne sont pas dirigés et représentent réciproque sans origine ni point de terminaison distincts. Dans ce cas, vous peut modéliser les arêtes non orientées sous la forme de deux arêtes dirigées, une arête dans chaque direction.

Conception de schéma Spanner Graph

Spanner Graph vous permet de créer un graphique à 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 Requêtes SQL/PGQ (Property Graph) qui fait partie de les normes SQL:2023.

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

Pour définir un nœud, vous 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. Lignes de la table d'entrée sont mappés aux nœuds de graphe.

Dans l'exemple suivant, vous utilisez la clause NODE TABLES pour définir les 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 étiquette, et toutes les colonnes de la table d'entrée sont exposés en tant que propriétés de nœud.

Dans l'exemple précédent,

  • Chaque nœud du compte est associé au libellé Account.
  • Chaque nœud de compte comporte des propriétés [id, create_time] créées à partir du Account colonnes du tableau.

Clé de l'élément

La définition d'un nœud définit également la clé de l'élément, qui identifie de manière unique un du 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ément.

L'exemple suivant définit le nœud Account et le nœud 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 d'arêtes ne contient qu'un nom de table d'entrée. Lignes de la table d'entrée sont mappées aux arêtes du graphique.

Documentation de référence sur les nœuds source et de destination

Dans l'exemple suivant, vous créez un graphique de propriétés FinGraph avec la variable suivantes:

  • 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. Les éléments suivants : l'exemple utilise la définition d'arête 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 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 DESTINATION d'une arête est un nœud Account dont le id est identique à l'account_id de l'arête.

De plus, les affirmations suivantes sont vraies pour l'arête PersonOwnAccount :

  • La clé de l'é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 PersonOwnAccount.
  • Chaque arête possède le libellé PersonOwnAccount par défaut.

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

  • Chaque ligne de la table d'entrée Edge, dont la clé d'élément n'est pas null, 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œud ou d'arête pour créer différents ensembles de nœuds ou d'arêtes. Pour en savoir plus, consultez Fusionner les entrées de nœud et de périphérie de données.

Personnaliser les libellés et les propriétés

Vous pouvez utiliser les fonctions LABEL et PROPRIÉTÉS 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 expose la propriété address via l'étiquette Customer La La propriété address est définie par l'expression CONCAT(city, ", ", country), qui fait référence aux colonnes city et country de l'entrée tableau Person.
  • Pour Account, le nœud Account expose les éléments id et create_time via le libellé 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 ces règles:

  • 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 Person et Account nœuds. 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 interrompt l'un de ces les 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 plus pour en savoir plus, consultez Effectuez des mises à jour de schéma.

Étape suivante