Schemaübersicht

In diesem Dokument werden die Komponenten eines Eigenschaftsgraphenschemas erläutert und Sie erfahren, wie Sie ein Graphenschema erstellen und verwalten.

Mit Graphen können Sie verbundene Daten modellieren, die Informationen als Netzwerk aus Knoten und Kanten darstellen. Ein Graphenschema besteht aus Knoten und Kanten sowie Labels, die ihren Typ klassifizieren, und Eigenschaften, die sie beschreiben. Sie definieren ein Eigenschaftsgraphenschema, indem Sie Zeilen aus Eingabetabellen Knoten und Kanten des Graphen zuordnen und benutzerdefinierte Labels und Eigenschaften definieren. Weitere Informationen zu BigQuery Graph finden Sie in der Übersicht zu BigQuery Graph.

Datenmodell für Eigenschaftsgraphen

Mit einem Eigenschaftsgraphen können Sie verbundene Daten als Netzwerk aus Knoten und Kanten modellieren. Knoten stellen Entitäten in Ihren Daten dar, z. B. Kunden, Produkte oder Standorte. Kanten stellen Verbindungen zwischen diesen Knoten dar und erfassen Beziehungen wie Käufe, Follows oder Standorte.

Knoten und Kanten können die folgenden Informationen enthalten:

  • Labels: klassifizieren Knoten- und Kantentypen. Beispielsweise können Schüler in einer Klasse die Labels Student und Person haben. Wenn Sie kein Label für einen Knoten oder eine Kante explizit definieren, verwendet BigQuery Graph den Namen der Eingabetabelle als Standardlabel.

  • Eigenschaften: werden verwendet, um Knoten und Kanten zu beschreiben. Ein Knoten, der eine Person darstellt, kann beispielsweise die Eigenschaft name mit dem Wert Alex und die Eigenschaft id mit dem Wert 1 haben.

Das Beispiel in Abbildung 1 zeigt, wie Sie einen Graphen entwerfen können, um Finanzaktivitäten zu modellieren. Dieser Graph enthält die folgenden Arten von Entitäten, die als Knoten modelliert werden:

  • Person: stellt eine Person dar, die an Finanztransaktionen beteiligt ist.
  • Account: 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:

  • Owns: Eine Person besitzt ein oder mehrere Konten.
  • Transfers: Geld wird von einem Konto auf ein anderes überwiesen.

Jede gerichtete Kante gibt eine unidirektionale Beziehung an, die von einem Quellknoten zu einem Zielknoten verläuft. Beispielsweise verbindet eine Transfers-Kante ein Quellkonto (Account) mit einem Zielkonto (Account) und gibt den Geldfluss an.

Knoten, Kanten, Labels und Attribute eines Finanzgraphen.

Abbildung 1. Beispielgraph mit mehreren Knoten und gerichteten Kanten.

Knoten und Kanten enthalten zusätzliche Informationen in Eigenschaften.

  • Person-Knoten enthalten die folgenden Eigenschaften:

    • name (STRING)
    • id (INT64)
  • Transfers-Kanten enthalten die folgende Eigenschaft:

    • amount (FLOAT64)

Gerichtete und ungerichtete Kanten

Gerichtete Kanten geben eine bestimmte Richtung in der Beziehung zwischen Entitäten an. Beispielsweise besitzt eine Person ein Konto, aber ein Konto besitzt keine Person. Einige Beziehungen wie die Freundschaftsbeziehung in einem sozialen Netzwerk sind jedoch ungerichtet und stellen eine wechselseitige Verbindung dar. In diesem Fall können Sie ungerichtete Kanten als zwei gerichtete Kanten modellieren, eine in jeder Richtung.

Schema entwerfen

Mit BigQuery Graph können Sie mit der CREATE PROPERTY GRAPH Anweisung einen Graphen aus Tabellen erstellen. Die Tabellen, aus denen Graphen erstellt werden, werden als Eingabetabellen bezeichnet.

Knoten definieren

Knoten werden durch Zeilen in Tabellen definiert. Wenn Sie einen Knoten definieren möchten, fügen Sie in der NODE TABLES Klausel eine Knotendefinition hinzu. Die einfachste Form einer Knotendefinition enthält den Namen einer Eingabe tabelle mit einem Primärschlüssel. BigQuery Graph ordnet Zeilen aus der Eingabetabelle Knoten des Graphen zu.

Im folgenden Beispiel definieren Sie mit der Klausel NODE TABLES den Knoten Account im Eigenschaftsgraphen FinGraph. Die Knotendefinition enthält die Eingabetabelle Account.

-- Create an Account table.
CREATE TABLE graph_db.Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
  PRIMARY KEY (id) NOT ENFORCED
);

-- Use the Account table as the input table for the Account node definition.
CREATE PROPERTY GRAPH graph_db.FinGraph
  NODE TABLES (
    graph_db.Account
  );

Standardmäßig verwendet BigQuery den Tabellennamen als Label und stellt alle Spalten aus der Eingabetabelle als Eigenschaften zur Verfügung.

  • Jeder Kontoknoten verwendet das Label Account.
  • Jeder Kontoknoten enthält die Eigenschaften id und create_time aus den Spalten der Tabelle Account.

Elementschlüssel

Eine Knotendefinition definiert auch den Elementschlüssel, eine Sammlung von Spalten die einen Graphenknoten eindeutig identifizieren. Standardmäßig ist der Elementschlüssel der Primärschlüssel der Eingabetabelle. Alternativ können Sie mit der Klausel KEY explizit Elementschlüssel definieren.

Im folgenden Beispiel werden ein Account-Knoten und ein Person-Knoten definiert. Der Account-Knoten verwendet den Primärschlüssel der Tabelle Account als Elementschlüssel. Für den Person-Knoten wird die Spalte id mit der Klausel KEY explizit als Elementschlüssel angegeben.

CREATE TABLE graph_db.Person (
  id           INT64 NOT NULL,
  name         STRING
);

CREATE TABLE graph_db.Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE PROPERTY GRAPH graph_db.FinGraph
  NODE TABLES (
    graph_db.Person KEY (id),
    graph_db.Account
  );
  • Jede Zeile mit einem Elementschlüssel, der nicht null ist, wird einem eindeutigen Knoten im Graphen zugeordnet, der durch den Elementschlüssel identifiziert wird.
  • Zeilen mit einem Elementschlüssel, der null ist, werden ignoriert.

Dieselbe Eingabetabelle kann in mehreren Knotendefinitionen verwendet werden. In diesem Fall wird eine bestimmte Zeile in der Eingabetabelle für jede Knotendefinition einem Knoten zugeordnet.

Kante definieren

Kanten werden durch Zeilen in Tabellen definiert. Wenn Sie eine Kante definieren möchten, fügen Sie der EDGE TABLES Klausel eine Kantendefinition hinzu. Die einfachste Form der Kantendefinition enthält den Namen einer Eingabetabelle und definiert Quell- und Zielknotenreferenzen. BigQuery Graph verwendet diese Definition, um Zeilen aus der Eingabetabelle Kanten des Graphen zuzuordnen.

Standardmäßig verwendet BigQuery den Tabellennamen als Label und stellt alle Spalten aus der Eingabetabelle als Eigenschaften zur Verfügung.

  • Der Elementschlüssel jeder Kante wird auf dieselbe Weise wie bei Knoten definiert.

Quell- und Zielknotenreferenzen

Eine Kantendefinition definiert die Quell- und Zielknotenreferenz mit den Klauseln SOURCE KEY, DESTINATION KEY und REFERENCES. Sie müssen die Quell- und Zielknoten definieren, bevor Sie sie in der Kantendefinition verwenden.

Im folgenden Beispiel erstellen Sie einen Eigenschaftsgraphen FinGraph mit den folgenden Elementen:

  • Person- und Account-Knoten
  • PersonOwnAccount-Kante
CREATE TABLE graph_db.Person (
  id            INT64 NOT NULL,
  name          STRING,
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE TABLE graph_db.Account (
  id            INT64 NOT NULL,
  create_time   TIMESTAMP,
  PRIMARY KEY (id) NOT ENFORCED
);

CREATE TABLE graph_db.PersonOwnAccount (
  id            INT64 NOT NULL,
  account_id    INT64 NOT NULL,
  create_time   TIMESTAMP,
  FOREIGN KEY (account_id) REFERENCES graph_db.Account (id) NOT ENFORCED,
  PRIMARY KEY (id, account_id) NOT ENFORCED
);

CREATE PROPERTY GRAPH graph_db.FinGraph
  NODE TABLES (
    graph_db.Person,
    graph_db.Account
  )
  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 (Ziel)-Knoten.

  • Der Quellknoten einer Kante ist ein Person-Knoten, bei dem die Eigenschaft id mit der Eigenschaft id der Kante übereinstimmt.
  • Der Zielknoten einer Kante ist ein Account Knoten, bei dem die id Eigenschaft mit der Eigenschaft account_id der Kante übereinstimmt.
  • Der Elementschlüssel ist der Primärschlüssel der Tabelle PersonOwnAccount, nämlich (id, account_id).
  • Jede Kante hat dieselben Eigenschaften wie die Spalten aus der Tabelle PersonOwnAccount.
  • Jede Kante hat das Standardlabel PersonOwnAccount.

Zeilen Kanten zuordnen

Jede Zeile in der Eingabetabelle für Kanten mit einem Elementschlüssel, der nicht null ist, wird in der Regel einer einzelnen Kante in Ihrem Graphen zugeordnet. Wenn die Quell- oder Ziel knotenreferenz jedoch mit null oder mehreren Knoten in der Quell- oder Zielknoten tabelle übereinstimmt, kann die Zeile in der Eingabetabelle für Kanten zu null oder mehreren Kanten in Ihrem Graphen führen.

Knoten und Kanten in einer einzelnen Tabelle definieren

Sie können einen Knoten und seine eingehenden oder ausgehenden Kanten in einer einzelnen Tabelle definieren, wenn die Spalten der Tabelle eine Beziehung zu einer anderen Tabelle definieren. Dieser Ansatz reduziert die Anzahl der Tabellen, vereinfacht die Datenverwaltung und kann die Abfrageleistung verbessern, da keine Verknüpfung mit einer separaten Kantentabelle erforderlich ist.

Wenn die folgende Tabelle Account beispielsweise einen zusammengesetzten Primärschlüssel (owner_id, account_id) hat, kann die Spalte owner_id ein Fremdschlüssel sein, der auf eine Tabelle Person verweist. Mit dieser Struktur kann die Tabelle Account sowohl den Knoten Account als auch die eingehende Kante vom Knoten Person darstellen.

CREATE TABLE graph_db.Person (
  id INT64 NOT NULL,
  PRIMARY KEY (id) NOT ENFORCED
);

-- Assume each account has exactly one owner.
CREATE TABLE graph_db.Account (
  owner_id INT64 NOT NULL,
  account_id INT64 NOT NULL,
  FOREIGN KEY (owner_id) REFERENCES graph_db.Person(id) NOT ENFORCED,
  PRIMARY KEY (owner_id, account_id) NOT ENFORCED
);

Sie können die Tabelle Account verwenden, um sowohl den Knoten Account als auch die eingehende Kante Owns zu definieren. Dies wird in der folgenden Anweisung CREATE PROPERTY GRAPH gezeigt. In der Klausel EDGE TABLES geben Sie der Tabelle Account den Alias Owns. Das liegt daran, dass jedes Element im Graphenschema einen eindeutigen Namen haben muss.

CREATE PROPERTY GRAPH graph_db.FinGraph
  NODE TABLES (
    graph_db.Person,
    graph_db.Account
  )
  EDGE TABLES (
    graph_db.Account AS Owns
      SOURCE KEY (owner_id) REFERENCES Person
      DESTINATION KEY (owner_id, account_id) REFERENCES Account
  );

Labels und Eigenschaften anpassen

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

Im folgenden Beispiel wird ein Person-Knoten mit einer benutzerdefinierten Eigenschaft und ein Account-Knoten mit mehreren Labels definiert:

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

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

CREATE PROPERTY GRAPH graph_db.FinGraph
  NODE TABLES (
    graph_db.Person KEY (id)
      LABEL Customer
      PROPERTIES (CONCAT(city, ", ", country) AS address)
      LABEL Entity PROPERTIES (id, name),
    graph_db.Account KEY (id)
      LABEL Account PROPERTIES (id, create_time)
      LABEL Entity PROPERTIES (id, nick_name AS name)
  );
  • Die Person-Knoten verwenden das Label Customer, um die Eigenschaft address verfügbar zu machen. Die Eigenschaft address wird durch den Ausdruck CONCAT(city, ", ", country), definiert, der auf die Spalten city und country aus der Eingabetabelle Person verweist.

  • Der Account-Knoten verwendet das Label Account, um die Eigenschaften id und create_time verfügbar zu machen.

Die Knoten Person und Account haben beide das Label Entity mit den Eigenschaften id und name.

  • Im Knoten Person stammen die Eigenschaften id und name aus den Spalten der Eingabetabelle.
  • Im Knoten Account verweist die Eigenschaft name auf die Spalte nick_name der Eingabetabelle.

Label- und Eigenschaftskonsistenz

In einem Graphen werden Labels und Eigenschaften eindeutig durch ihre Namen identifiziert. Sie können Labels und Eigenschaften 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 müssen denselben Werttyp verwenden.
  • Labels mit demselben Namen müssen dieselbe Liste von Eigenschaften verfügbar machen.

Im vorherigen Beispiel wird das Label Entity sowohl im Knoten Person als auch im Knoten Account definiert. Beide Definitionen enthalten dieselben Eigenschaftsnamen, id und name, mit identischen Werttypen.

Schemaabhängigkeiten verwalten

Graphen sind vom Schema der Eingabetabellen für die Knoten- und Kantendefinitionen und den Tabellenspalten abhängig, auf die von den Eigenschaften verwiesen wird. BigQuery Graph prüft nicht, ob durch das Löschen oder Ändern von Tabellen oder Spalten ein vorhandenes Graphenschema ungültig wird.

Sie sind dafür verantwortlich, dass keine Schemaänderungen vorgenommen werden, die zu Fehlern führen. Beachten Sie diese Best Practices:

  • Bevor Sie eine Tabelle löschen, die in einer Knotendefinition verwendet wird, entfernen Sie zuerst diese Knotendefinition aus dem Graphen.
  • Bevor Sie eine Spalte aus einer Tabelle entfernen, die als Eigenschaft in einem Graphen verfügbar gemacht wird, entfernen Sie die Eigenschaft aus der entsprechenden Knoten- oder Kantendefinition.

Graphenschemas ansehen

Wenn Sie die Anweisung CREATE PROPERTY GRAPH sehen möchten, mit der ein vorhandener Graph erstellt wurde, fragen Sie die INFORMATION_SCHEMA.PROPERTY_GRAPHS Ansicht ab:

SELECT
  property_graph_name,
  ddl
FROM
  `region-REGION`.INFORMATION_SCHEMA.PROPERTY_GRAPHS;

Ersetzen Sie REGION durch die Region des Datasets, das den Graphen enthält.

Alternativ können Sie Ihr Graphenschema in einem Notebook visualisieren.

Graphenschema aktualisieren

Wenn Sie Änderungen am Schema eines vorhandenen Graphen vornehmen möchten, müssen Sie das Graphenschema mit der Anweisung CREATE PROPERTY GRAPH neu definieren.

Graphenschema löschen

Verwenden Sie die DROP PROPERTY GRAPH Anweisung, um einen Eigenschaftsgraphen zu löschen.

Nächste Schritte