Mit Spanner Graph können Sie verbundene Daten als Attributgraph modellieren, der Informationen als Netzwerk von Knoten und Kanten darstellt. Knoten symbolisieren Einheiten und Kanten zeigen Verbindungen zwischen ihnen. Knoten und Kanten enthalten Labels, mit denen Knoten und Kanten in Gruppen klassifiziert werden. Knoten und Kanten enthalten auch Attribute, die Schlüssel/Wert-Paare sind.
Sie definieren ein Spanner Graph-Schema, indem Sie Zeilen aus Eingabetabellen Knoten und Kanten im Diagramm zuordnen. Sie können Labels und Eigenschaften für Knoten und Kanten anpassen und nachvollziehen, wie sich Schemaänderungen auf Diagrammabhängigkeiten auswirken. Sie können auch schemalose Daten verwalten, um flexiblere Diagrammdefinitionen zu ermöglichen.
Weitere Informationen zu Spanner Graph finden Sie in der Übersicht zu Spanner Graph.
Attributgrafik-Datenmodell
Mit einem Property-Graphen können Sie verbundene Daten modellieren. Dabei werden Informationen als Netzwerk von Knoten und Kanten dargestellt. Knoten symbolisieren Entitäten in Ihrer Datenlandschaft, z. B. Kunden, Produkte oder Standorte. Kanten zeigen die Verbindungen zwischen diesen Knoten und erfassen Beziehungen wie „gekauft“, „folgt“ oder „befindet sich in“.
Sowohl Knoten als auch Kanten können die folgenden Informationen enthalten:
- Labels, mit denen Knoten und Kanten in Sets klassifiziert werden, z. B. city.
- Attribute, die Schlüssel/Wert-Paare sind, z. B. population.
Das Beispiel in Abbildung 1 zeigt, wie Sie ein Diagramm zur Modellierung von Finanzaktivitäten entwerfen können. Dieses Diagramm enthält die folgenden Arten von Entitäten, die als Knoten modelliert werden:
- Person:Stellt eine Person dar, die an Finanztransaktionen beteiligt ist.
- Konto:Stellt ein für Transaktionen verwendetes Bankkonto dar.
Diese Einheiten sind durch verschiedene Arten von Beziehungen verbunden, die durch die folgenden gerichteten Kanten dargestellt werden:
- Inhaber: Eine Person ist Inhaber eines oder mehrerer Konten.
- Überweisungen:Geld wird von einem Konto auf ein anderes übertragen.
Jede gerichtete Kante steht für eine unidirektionale Beziehung, die von einem Quellknoten zu einem Zielknoten verläuft. Eine Transfers
-Kante verbindet beispielsweise eine Quelle Account
mit einem Ziel Account
und gibt den Geldfluss an.
Abbildung 1. Beispiel für ein Diagramm mit mehreren Knoten und gerichteten Kanten.
Knoten und Kanten enthalten zusätzliche Informationen in Attributen. Jedes Attribut hat einen Namen und einen Wert.
- Person-Knoten haben die folgenden Eigenschaften:
name
(STRING
)id
(INT64
)
- Transfers-Kanten enthalten diese Eigenschaft:
amount
(FLOAT64)
Gerichtete und ungerichtete Kanten
Im Beispielgraphen werden gerichtete Kanten verwendet, die eine bestimmte Richtung in der Beziehung zwischen Entitäten angeben. Einige Beziehungen, z. B. die Beziehung Freund in einem sozialen Netzwerk, sind jedoch ungerichtet und stellen eine wechselseitige Verbindung ohne eindeutigen Ursprung oder Endpunkt dar. In diesem Fall können Sie ungerichtete Kanten als zwei gerichtete Kanten modellieren, eine in jeder Richtung.
Spanner Graph-Schemadesign
Mit Spanner Graph können Sie mit der Anweisung CREATE PROPERTY GRAPH ein Diagramm aus Tabellen erstellen. Die Tabellen, aus denen Grafiken erstellt werden, werden als Eingabetabellen bezeichnet. Bei diesem Ansatz wird SQL/PGQ (Property Graph Queries) verwendet, das Teil der SQL:2023-Standards ist.
Knoten in einer Attributgrafik definieren
Um einen Knoten zu definieren, fügen Sie eine Knotendefinition in die Klausel NODE TABLES ein. Die einfachste Form der Knotendefinition enthält nur einen Namen für die Eingabetabelle. In Spanner Graph werden Zeilen aus der Eingabetabelle Diagrammknoten zugeordnet.
Im folgenden Beispiel verwenden Sie die Klausel NODE TABLES, um den Knoten Account
im Property-Graphen FinGraph
zu definieren. Die Knotendefinition enthält die Eingabetabelle 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
);
Standardlabels und ‑attribute
Standardmäßig verwenden alle Knoten den Namen der Eingabetabelle als Label und Spanner Graph stellt alle Spalten aus der Eingabetabelle als Knotenattribute zur Verfügung.
Im vorherigen Beispiel
- Für jeden Kontoknoten wird das Label
Account
verwendet. - Jeder Kontoknoten enthält
[id, create_time]
-Properties aus den TabellenspaltenAccount
.
Elementschlüssel
In einer Knotendefinition wird auch der Elementschlüssel definiert, der einen Knoten im Diagramm eindeutig identifiziert.
- Standardmäßig ist der Elementschlüssel der Primärschlüssel der Eingabetabelle.
- Mit der Klausel
KEY
können Sie Element-Schlüssel explizit definieren. - Sie können Spalten mit der Einschränkung eindeutiger Index als Elementschlüssel verwenden.
Im folgenden Beispiel werden der Account
-Knoten und der Person
-Knoten definiert.
- Für den
Account
-Knoten wird standardmäßig der Primärschlüssel der TabelleAccount
als Elementschlüssel verwendet. - Im
Person
-Knoten wird dagegen mit derKEY
-Klausel explizitid
als Elementschlüssel angegeben.
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
);
Eine Zeile in der Eingabetabelle einem Knoten im Diagramm zuordnen
- Jede Zeile mit einem nicht leeren Elementschlüssel wird einem eindeutigen Knoten im Diagramm zugeordnet, der durch den Elementschlüssel identifiziert wird.
- Zeilen mit einem Null-Elementschlüssel werden ignoriert.
Kante in einer Attributgrafik definieren
Um einen Knoten zu definieren, fügen Sie der Klausel EDGE TABLES eine Knotendefinition hinzu. Die einfachste Form einer Edge-Definition enthält nur einen Namen für die Eingabetabelle. In Spanner Graph werden Zeilen aus der Eingabetabelle Graphkanten zugeordnet.
Das Standardlabel und die Standardeigenschaften der Kanten werden auf dieselbe Weise wie Knoten definiert.
Der Elementschlüssel jeder Kante wird auf dieselbe Weise wie Knoten definiert.
Quell- und Zielknotenreferenzen
Im folgenden Beispiel erstellen Sie eine Attributgrafik FinGraph
mit den folgenden Elementen:
Person
- undAccount
-KnotenPersonOwnAccount
Kante
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)
);
In einer Kantendefinition wird die Quell- und Zielknotenreferenz mithilfe der Klauseln SOURCE KEY
, DESTINATION KEY
und REFERENCES
definiert. Im folgenden Beispiel wird das Konzept anhand der Edge-Definition von PersonOwnAccount
veranschaulicht:
EDGE TABLES (
PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
)
Jede PersonOwnAccount
-Kante verbindet einen Person
-Knoten (Quelle) mit einem Account
-Knoten (Ziel).
- Der Quellknoten einer Kante ist ein
Person
-Knoten, dessenid
mit demid
der Kante übereinstimmt. - Der Zielknoten einer Kante ist ein
Account
-Knoten, bei dem dieid
mit deraccount_id
der Kante übereinstimmt.
Außerdem gilt für die PersonOwnAccount
-Kante Folgendes:
- Der Elementschlüssel ist der Primärschlüssel der Tabelle
PersonOwnAccount
, nämlich(id, account_id)
. - Jede Kante hat dieselben Attribute wie die Spalten aus der
PersonOwnAccount
-Tabelle. - Jede Kante hat das Standardlabel
PersonOwnAccount
.
Eine Zeile in einer Eingabetabelle für Kanten Kanten im Diagramm zuordnen
- Jede Zeile in der Eingabetabelle für Kanten, in der der Elementschlüssel nicht null ist, wird in der Regel einer eindeutigen Kante in Ihrem Diagramm zugeordnet.
- Eine Zeile kann null oder mehr als einer Kante im Diagramm entsprechen. Das ist beispielsweise der Fall, wenn die Quellknotenreferenz mit null oder mehr Knoten in der Quellknotentabelle übereinstimmt.
- Sie können dieselbe Eingabetabelle in verschiedenen Knoten- oder Kantendefinitionen verwenden, um verschiedene Knotensätze oder Kantensätze zu erstellen. Weitere Informationen finden Sie unter Knoten- und Kanten-Eingabetabellen zusammenführen.
Labels und Eigenschaften anpassen
Mit den Klauseln LABEL und PROPERTIES können Sie Labels und Eigenschaften anpassen.
Im folgenden Beispiel werden zwei Knoten definiert: Person
und Account
.
- Für die
Person
-Knoten wird das LabelCustomer
verwendet, um das Attributaddress
verfügbar zu machen. Das Attributaddress
wird durch den AusdruckCONCAT(city, ", ", country),
definiert, der auf die Spaltencity
undcountry
aus der EingabetabellePerson
verweist. - Für
Account
verwendet derAccount
-Knoten das LabelAccount
, um die Attributeid
undcreate_time
verfügbar zu machen. Person
undAccount
haben das LabelEntity
mit den Attributen [id, name
].- Für
Person
stammen die Attributeid
undname
aus den Spalten der Eingabetabelle. - Für
Account
bezieht sich das Attributname
auf die Spaltenick_name
der Eingabetabelle.
- Für
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)
);
Konsistenz von Labels und Attributen
In einem Diagramm werden Labels und Eigenschaften eindeutig durch ihre Namen identifiziert. Sie können Labels und Attribute mit demselben Namen in mehreren Knoten- oder Kantendefinitionen verwenden. Labels und Eigenschaften mit demselben Namen müssen jedoch die folgenden Regeln einhalten:
- Eigenschaften mit demselben Namen verwenden denselben Werttyp.
- Labels mit demselben Namen enthalten dieselbe Liste von Attributen.
Im vorherigen Beispiel ist das Label Entity
sowohl im Knoten Person
als auch im Knoten Account
definiert. Beide Definitionen enthalten dieselben Attributnamen [id
, name
] mit identischen Werttypen.
Abhängigkeiten zwischen Diagrammen und anderen Schemaobjekten
Der von CREATE PROPERTY GRAPH
erstellte Graph hängt von anderen Schemaobjekten ab, z. B. von den Eingabetabellen der Knoten- und Kantendefinitionen und den Tabellenspalten, auf die von den Attributen verwiesen wird. Spanner Graph lässt keine Schemaänderung zu, die eine dieser Abhängigkeiten unterbricht.
Mit der folgenden Anweisung wird FinGraph
von der Tabelle Account
und den Spalten id
und create_time
abhängig gemacht.
CREATE OR REPLACE PROPERTY GRAPH FinGraph
NODE TABLES (
Account PROPERTIES (id, create_time)
);
In diesem Beispiel sind die folgenden Schemaänderungen in Spanner Graph nicht zulässig:
- Sie können die Tabelle
Account
nicht löschen. Dazu müssen Sie die KnotendefinitionAccount
entfernen. Weitere Informationen finden Sie unter Vorhandene Knoten- oder Kantendefinitionen entfernen. - Sie können keine
create_time
-Spalten aus der TabelleAccount
löschen. Dazu müssen Sie die Eigenschaftcreate_time
aus der KnotendefinitionAccount
entfernen. Weitere Informationen finden Sie unter Vorhandene Knoten- oder Kantendefinitionen aktualisieren.
Sie können jedoch die folgenden Schemaänderungen vornehmen:
- Ändern Sie das Schema der Tabelle
Account
und der Spaltenid
undcreate_time
, sofern andere Schemaanforderungen dies zulassen. Weitere Informationen finden Sie unter Schemas aktualisieren.
Schemavisualisierung ansehen
Nachdem Sie eine Spanner Graph-Abfrage ausgeführt haben, können Sie in Spanner Studio eine Schemavisualisierung aufrufen. Weitere Informationen finden Sie unter Mit Spanner Graph-Visualisierungen arbeiten.
Schemalose Daten verwalten
Spanner Graph unterstützt auch die schemalose Datenverwaltung, was hilfreich ist, wenn Sie eine flexiblere Graphdefinition benötigen. Weitere Informationen finden Sie unter Schemalose Daten in Spanner Graph verwalten.
Nächste Schritte
- Spanner Graph-Schema erstellen
- Spanner Graph-Schema aktualisieren oder löschen
- Schemalose Daten mit Spanner Graph verwalten