Spanner Graph-Schema – Übersicht

In diesem Dokument wird das Spanner-Graphschema beschrieben und es werden Beispiele zur Veranschaulichung der wichtigsten Konzepte aufgeführt. Weitere Informationen zu Spanner Graph finden Sie unter Spanner Graph – Übersicht.

Attributgrafik-Datenmodell

Mit einem Property-Graph können Sie verbundene Daten modellieren. Dabei werden Informationen als Netzwerk aus 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 Gruppen klassifiziert werden, z. B. Ort.
  • Eigenschaften, d. h. Schlüssel/Wert-Paare, z. B. population.

Das Beispiel in Abbildung 1 zeigt, wie Sie ein Diagramm zum Modellieren von Finanzaktivitäten entwerfen können. Dieses Diagramm enthält die folgenden Arten von Entitäten, die als Knoten modelliert sind:

  • Person: Stellt eine natürliche Person dar, die an Finanztransaktionen beteiligt ist.
  • Konto:Stellt ein Bankkonto dar, das für Transaktionen verwendet wird.

Diese Entitäten 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 überwiesen.

Jede gerichtete Kante gibt eine Einwegbeziehung an, 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.

Schemaübersichtsdiagramm für Spanner Graph

Abbildung 1. Beispiel für einen Graphen mit mehreren Knoten und gerichteten Kanten.

Knoten und Kanten können zusätzliche Informationen in Properties enthalten. Jedes Attribut hat einen Namen und einen Wert.

  • Person-Knoten haben die folgenden Eigenschaften:
    • name (STRING)
    • id (INT64)
  • Kanten vom Typ Übertragungen haben die folgende 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 Freundschaft in einem sozialen Netzwerk, sind jedoch nicht gerichtet und stellen eine beidseitige Verbindung ohne eindeutigen Ursprung oder Endpunkt dar. In diesem Fall können Sie ungerichtete Kanten als zwei gerichtete Kanten modellieren, eine in jede Richtung.

Spanner Graph-Schemadesign

Mit Spanner Graph können Sie mit der Anweisung CREATE PROPERTY GRAPH ein Diagramm aus Tabellen erstellen. Die Tabellen, die zum Erstellen von Diagrammen verwendet werden, werden als Eingabetabellen bezeichnet. Dieser Ansatz basiert auf SQL/PGQ (Property Graph Queries), das Teil der SQL:2023-Standards ist.

Knoten in einer Property-Graphik definieren

Um einen Knoten zu definieren, fügen Sie in der NODE TABLES-Klausel eine Knotendefinition hinzu. Die einfachste Form der Knotendefinition enthält nur den Namen einer Eingabetabelle. Zeilen aus der Eingabetabelle werden Graphknoten zugeordnet.

Im folgenden Beispiel wird mit der Klausel NODE TABLES der Knoten Account in der Property-Graph FinGraph definiert. 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
  );

Standardlabel und -attribute

Standardmäßig wird für alle Knoten der Name der Eingabetabelle als Label verwendet und alle Spalten aus der Eingabetabelle werden als Knoteneigenschaften angezeigt.

Im vorherigen Beispiel:

  • Jeder Kontoknoten hat das Label Account.
  • Jeder Kontoknoten hat Properties vom Typ [id, create_time], die aus den Tabellenspalten vom Typ Account erstellt wurden.

Elementschlüssel

Eine Knotendefinition definiert auch den Elementschlüssel, mit dem ein Graphknoten eindeutig identifiziert wird.

  • Standardmäßig ist der Elementschlüssel der Primärschlüssel der Eingabetabelle.
  • Elementschlüssel können mit der KEY-Klausel explizit definiert werden.
  • Spalten mit Eindeutigkeitsbeschränkungen UNIQUE INDEX können als Elementschlüssel verwendet werden.

Im folgenden Beispiel werden die Knoten Account und Person definiert.

  • Für den Account-Knoten wird standardmäßig der Primärschlüssel der Tabelle Account als Elementschlüssel verwendet.
  • Im Person-Knoten wird dagegen die id mit der KEY-Klausel explizit 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
  );

Zuordnung einer Zeile in der Eingabetabelle zu einem Knoten im Graphen

  • Jede Zeile mit einem nicht nullwertigen Elementschlüssel wird einem eindeutigen Knoten im Graphen zugeordnet, der durch den Elementschlüssel identifiziert wird.
  • Zeilen mit einem Nullelementschlüssel werden ignoriert.

Kanten in einer Property-Graph-Datei definieren

Um eine Kante zu definieren, fügen Sie der Klausel EDGE TABLES eine Kantendefinition hinzu. Die einfachste Form einer Kantendefinition enthält nur den Namen einer Eingabetabelle. Zeilen aus der Eingabetabelle werden den Kanten des Graphen zugeordnet.

Quell- und Zielknotenreferenz

Im folgenden Beispiel erstellen Sie eine Attributgrafik FinGraph mit den folgenden Elementen:

  • Person- und Account-Knoten
  • PersonOwnAccount Edge
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 müssen die Quell- und Zielknotenreferenzen mit den Klauseln SOURCE KEY, DESTINATION KEY und REFERENCES definiert werden. Im folgenden Beispiel wird die Kantendefinition von PersonOwnAccount verwendet, um dieses Konzept zu veranschaulichen:

EDGE TABLES (
  PersonOwnAccount
    SOURCE KEY (id) REFERENCES Person (id)
    DESTINATION KEY (account_id) REFERENCES Account (id)
)

Jede PersonOwnAccount-Kante verbindet einen Person-Knoten (Quellknoten) mit einem Account-Knoten (Zielknoten).

  • Der Quellknoten einer Kante ist ein Person-Knoten, dessen id mit der id der Kante identisch ist.
  • Der Zielknoten einer Kante ist ein Account-Knoten, dessen id mit der Kante account_id identisch ist.

Außerdem gilt für die PersonOwnAccount-Kante Folgendes:

  • Der Elementschlüssel ist der Primärschlüssel der Tabelle PersonOwnAccount, also (id, account_id).
  • Jede Kante hat dieselben Eigenschaften wie die Spalten der Tabelle PersonOwnAccount.
  • Jede Kante hat das Standardlabel PersonOwnAccount.

Zeilen in einer Kanteneingabetabelle Kanten im Graphen zuordnen

  • Jede Zeile in der Eingabetabelle für Kanten, deren Elementschlüssel nicht null ist, wird normalerweise einer eindeutigen Kante im Graphen zugeordnet.
  • Eine Zeile kann null oder mehr als einer Kante im Graphen entsprechen, z. B. wenn die Referenz des Quellknotens mit null oder mehr Knoten in der Tabelle mit Quellknoten übereinstimmt.
  • Die gleiche Eingabetabelle kann in verschiedenen Knoten- oder Kantendefinitionen verwendet werden, um verschiedene Knoten oder Kanten zu erstellen. Weitere Informationen finden Sie unter Knoten- und Kanteneingabetabellen zusammenführen.

Labels und Eigenschaften anpassen

Mit den Klauseln LABEL und PROPERTIES können Sie Labels und Properties anpassen.

Im folgenden Beispiel sind zwei Knoten definiert: Person und Account.

  • Die Person-Knoten stellen die address-Eigenschaft über das Label Customer bereit. Die Property address wird durch den Ausdruck CONCAT(city, ", ", country), definiert, der sich auf die Spalten city und country aus der Eingabetabelle Person bezieht.
  • Für Account stellt der Knoten Account die Eigenschaften id und create_time über das Label Account bereit.
  • Person und Account haben das Label Entity mit den Eigenschaften [id, name].
    • Bei Person stammen die Eigenschaften id und name aus den Spalten der Eingabetabelle.
    • Bei Account bezieht sich die Eigenschaft name auf die Spalte nick_name der Eingabetabelle.
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 Label und Property

In einem Diagramm werden Labels und Eigenschaften eindeutig durch ihre Namen identifiziert. Labels und Eigenschaften mit demselben Namen können in mehreren Knoten- oder Kantendefinitionen vorkommen. Labels und Properties mit demselben Namen müssen jedoch den folgenden Regeln entsprechen:

  • Properties mit demselben Namen müssen denselben Werttyp haben.
  • Labels mit demselben Namen müssen dieselbe Liste von Properties enthalten.

Im vorherigen Beispiel ist das Label Entity sowohl in Person- als auch in Account-Knoten definiert. In beiden Definitionen haben sie dieselben Attributnamen [id, name] mit denselben Werttypen.

Abhängigkeiten zwischen Diagrammen und anderen Schemaobjekten

Der von CREATE PROPERTY GRAPH erstellte Graph ist von anderen Schemaobjekten abhängig, z. B. von den Eingabetabellen der Knoten- und Kantendefinitionen und den Tabellenspalten, auf die die Properties verweisen. Wenn eine Schemaänderung eine dieser Abhängigkeiten verletzt, ist die Änderung nicht zulässig.

Mit der folgenden Anweisung wird eine Abhängigkeit von FinGraph zur Tabelle Account und zu den Spalten id und create_time erstellt.

CREATE OR REPLACE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account PROPERTIES (id, create_time)
  );

Im Folgenden finden Sie Beispiele für Schemaänderungen, die nicht zulässig sind:

Sie können jedoch die folgenden Schemaänderungen vornehmen:

  • Ändern Sie das Schema der Tabelle Account und der Spalten id und create_time, sofern dies durch andere Schemaanforderungen zulässig ist. Weitere Informationen finden Sie unter Schemas aktualisieren.

Nächste Schritte