Créer et gérer un schéma Spanner Graph à l'aide du LDD

Ce document fournit un guide sur la gestion des schémas Spanner Graph, en détaillant les processus de création, mise à jour, et suppression de schémas à l'aide d'instructions LDD. Les schémas Spanner Graph peuvent également être créés dans Spanner Studio sans écrire manuellement d'instructions LDD.

Pour en savoir plus sur les schémas de graphe de propriétés, consultez la présentation des schémas Spanner Graph. Si vous rencontrez des erreurs lorsque vous créez un schéma de graphe de propriétés, consultez Résoudre les problèmes liés à Spanner Graph.

Créer un schéma de graphe de propriétés

Vous pouvez créer un schéma de graphe de propriétés à l'aide de vues ou de tables. Pour créer un schéma de graphe de propriétés à l'aide de tables, procédez comme suit :

  1. Créez les tables d'entrée de nœuds.
  2. Créez les tables d'entrée d'arêtes.
  3. Définissez le graphe de propriétés.

Pour savoir comment utiliser des vues SQL afin de créer un schéma de graphe de propriétés, consultez Créer un Spanner Graph à partir d'une vue SQL.

Lorsque vous créez un schéma de graphe de propriétés, veillez à tenir compte des bonnes pratiques. Les sections suivantes montrent comment utiliser des tables pour créer un exemple de schéma de graphe de propriétés :

Créer des tables d'entrée de nœuds

Le code suivant crée deux tables d'entrée de nœuds, Person et Account, qui servent d'entrée pour les définitions de nœuds dans l'exemple de graphe de propriétés :

  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);

Créer des tables d'entrée d'arêtes

Le code suivant crée deux tables d'entrée d'arêtes, PersonOwnAccount et AccountTransferAccount, comme entrée pour les définitions d'arêtes dans l'exemple de graphe de propriétés :

  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 ON DELETE CASCADE;

  CREATE TABLE AccountTransferAccount (
    id               INT64 NOT NULL,
    to_id            INT64 NOT NULL,
    amount           FLOAT64,
    create_time      TIMESTAMP NOT NULL,
    order_number     STRING(MAX),
    FOREIGN KEY (to_id) REFERENCES Account (id)
  ) PRIMARY KEY (id, to_id, create_time),
    INTERLEAVE IN PARENT Account ON DELETE CASCADE;

Définir un graphe de propriétés

Le code suivant utilise des tables et l'instruction CREATE PROPERTY GRAPH pour définir un graphe de propriétés. Cette instruction définit un graphe de propriétés nommé FinGraph avec Account et Person nœuds, et PersonOwnAccount et AccountTransferAccount arêtes :

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

Mettre à jour un schéma de graphe de propriétés

Une fois que vous avez créé un schéma de graphe de propriétés, vous pouvez le mettre à jour à l'aide de l'instruction CREATE OR REPLACE PROPERTY GRAPH. Cette instruction applique les modifications en recréant le schéma de graphe avec la mise à jour souhaitée.

Vous pouvez apporter les modifications suivantes à un schéma de graphe de propriétés :

Ajouter de nouvelles définitions de nœuds ou d'arêtes

Pour ajouter un nouveau nœud et une nouvelle définition d'arête, procédez comme suit :

  1. Ajoutez une nouvelle table d'entrée de définition de nœud, Company, et une nouvelle table d'entrée de définition input table, PersonInvestCompany.

    CREATE TABLE Company (
      id               INT64 NOT NULL,
      name             STRING(MAX),
    ) PRIMARY KEY (id);
    
    CREATE TABLE PersonInvestCompany (
      id               INT64 NOT NULL,
      company_id       INT64 NOT NULL,
      FOREIGN KEY (company_id) REFERENCES Company (id)
    ) PRIMARY KEY (id, company_id),
      INTERLEAVE IN PARENT Person ON DELETE CASCADE;
    
  2. Mettez à jour le schéma FinGraph en ajoutant la nouvelle définition de nœud Company et la nouvelle définition d'arête PersonInvestCompany.

    CREATE OR REPLACE PROPERTY GRAPH FinGraph
      NODE TABLES (
        Person,
        Account,
        Company
      )
      EDGE TABLES (
        AccountTransferAccount
          SOURCE KEY (id) REFERENCES Account
          DESTINATION KEY (to_id) REFERENCES Account
          LABEL Transfers,
        PersonOwnAccount
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (account_id) REFERENCES Account
          LABEL Owns,
        PersonInvestCompany
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (company_id) REFERENCES Company
          LABEL Invests
      );
    

Mettre à jour des définitions de nœuds ou d'arêtes

Pour mettre à jour une définition de nœud ou d'arête existante, vous devez d'abord modifier la table d'entrée sous-jacente, puis utiliser l'instruction CREATE OR REPLACE PROPERTY GRAPH pour appliquer les modifications de schéma au graphe. Pour personnaliser les propriétés exposées à partir des tables d'entrée, utilisez les PROPERTIES clause. Pour en savoir plus, consultez Personnaliser les libellés et les propriétés.

Les étapes suivantes montrent comment mettre à jour la table sous-jacente d'un schéma, puis appliquer la mise à jour au schéma.

  1. Ajoutez la colonne mailing_address à la table d'entrée sous-jacente Person.

    ALTER TABLE Person
    ADD COLUMN mailing_address STRING(MAX);
    
  2. Appliquez les modifications à la table Person du schéma. Utilisez l'instruction CREATE OR REPLACE PROPERTY GRAPH. La définition de nœud Person reflète la définition de table Person mise à jour, car le schéma de la table d'entrée a changé.

    CREATE OR REPLACE PROPERTY GRAPH FinGraph
      NODE TABLES (
        Person,
        Account
      )
      EDGE TABLES (
        AccountTransferAccount
          SOURCE KEY (id) REFERENCES Account
          DESTINATION KEY (to_id) REFERENCES Account
          LABEL Transfers,
        PersonOwnAccount
          SOURCE KEY (id) REFERENCES Person
          DESTINATION KEY (account_id) REFERENCES Account
          LABEL Owns
      );
    

Supprimer des définitions de nœuds ou d'arêtes

Pour supprimer des définitions de nœuds ou d'arêtes existantes, recréez le graphe de propriétés sans ces tables de nœuds ou d'arêtes.

Le code suivant supprime la définition de nœud Person et la définition d'arête PersonOwnAccount en les omettant dans l'instruction CREATE OR REPLACE PROPERTY GRAPH.

  CREATE OR REPLACE PROPERTY GRAPH FinGraph
    NODE TABLES (
      Account
    )
    EDGE TABLES (
      AccountTransferAccount
        SOURCE KEY (id) REFERENCES Account
        DESTINATION KEY (to_id) REFERENCES Account
        LABEL Transfers
    );

Supprimer un schéma de graphe de propriétés

Pour supprimer un schéma de graphe des tables d'entrée sous-jacentes, utilisez l'instruction LDD DROP PROPERTY GRAPH. Vous ne pouvez pas supprimer les données de la table sous-jacente lorsque vous supprimez un schéma.

Le code suivant supprime le schéma de graphe de propriétés FinGraph :

DROP PROPERTY GRAPH FinGraph;

Créer un graphe de propriétés dans un schéma nommé

Spanner Graph permet de créer des graphes de propriétés dans un schéma nommé.

L'exemple suivant crée deux schémas nommés sch1 et sch2, une table de nœuds et d'arêtes dans le schéma sch1, ainsi qu'un graphe de nœuds et de propriétés dans le schéma sch2 :

CREATE SCHEMA sch1;
CREATE SCHEMA sch2;

CREATE TABLE sch1.Person (
  id               INT64 NOT NULL,
  name             STRING(MAX),
  birthday         TIMESTAMP,
  country          STRING(MAX),
  city             STRING(MAX),
) PRIMARY KEY (id);

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

CREATE TABLE sch1.PersonOwnAccount (
  id               INT64 NOT NULL,
  account_id       INT64 NOT NULL,
  create_time      TIMESTAMP,
  FOREIGN KEY (account_id) REFERENCES sch2.Account (id)
) PRIMARY KEY (id, account_id),
  INTERLEAVE IN PARENT sch1.Person ON DELETE CASCADE;

CREATE OR REPLACE PROPERTY GRAPH sch2.FinGraph
  NODE TABLES (
    sch1.Person,
    sch2.Account
  )
  EDGE TABLES (
    sch1.PersonOwnAccount
      SOURCE KEY (id) REFERENCES Person (id)
      DESTINATION KEY (account_id) REFERENCES Account (id)
      LABEL Owns
  );

Étape suivante