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.
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 tableauAccount
.
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 tableAccount
comme clé d'élément. - Le nœud
Person
, en revanche, spécifie explicitementid
comme clé d'élément avec la clauseKEY
.
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.
Le libellé et les propriétés par défaut des arêtes sont définis de la même manière que les nœuds.
La clé d'élément de chaque bord est définie de la même manière que les nœuds.
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
etAccount
- 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 leid
est identique auid
du bord. - Le nœud de destination d'un bord est un nœud
Account
dont leid
est identique auaccount_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'expressionCONCAT(city, ", ", country),
qui fait référence aux colonnescity
etcountry
de la table d'entréePerson
. - Pour
Account
, le nœudAccount
utilise le libelléAccount
pour exposer les propriétésid
etcreate_time
. Person
etAccount
ont le libelléEntity
avec les propriétés [id, name
].- Pour
Person
, les propriétésid
etname
proviennent des colonnes de la table d'entrée. - Pour
Account
, la propriéténame
fait référence à la colonnenick_name
de la table d'entrée.
- Pour
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 :
- Vous ne pouvez pas supprimer la table
Account
. Pour ce faire, vous devez supprimer la définition du nœudAccount
. Pour en savoir plus, consultez Supprimer des définitions de nœuds ou d'arêtes existantes. - Vous ne pouvez pas supprimer les colonnes
create_time
de la tableAccount
. Pour ce faire, vous devez supprimer la propriétécreate_time
de la définition du nœudAccount
. Pour en savoir plus, consultez Mettre à jour les définitions de nœuds ou d'arêtes existantes.
Toutefois, vous pouvez apporter les modifications de schéma suivantes :
- Modifiez le schéma de la table
Account
et des colonnesid
etcreate_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
- Créez un schéma Spanner Graph.
- Mettre à jour ou supprimer un schéma Spanner Graph
- Gérez les données sans schéma avec Spanner Graph.