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.
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 duAccount
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 tableAccount
comme clé d'élément. - En revanche, le nœud
Person
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
);
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.
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 arête est définie de la même manière que les nœuds.
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
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'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œudPerson
dont leid
est identique à celui de l'arêteid
. - Le nœud
DESTINATION
d'une arête est un nœudAccount
dont leid
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'étiquetteCustomer
La La propriétéaddress
est définie par l'expressionCONCAT(city, ", ", country),
qui fait référence aux colonnescity
etcountry
de l'entrée tableauPerson
. - Pour
Account
, le nœudAccount
expose les élémentsid
etcreate_time
via le libelléAccount
. 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
du tableau 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. 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 :
- Supprimer la table
Account
, sauf si vous supprimez d'abord le nœudAccount
définition. Pour en savoir plus, consultez la section Supprimer des définitions de nœuds ou d'arêtes existantes. - Supprimez les colonnes
create_time
de la tableAccount
, sauf si vous supprimez d'abord la propriétécreate_time
de la définition du nœudAccount
. Pour Pour en savoir plus, consultez Mettez à 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
, à 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.