Schemaübersicht

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

Mit Grafiken können Sie verbundene Daten modellieren, die Informationen als Netzwerk von Knoten und Kanten darstellen. Ein Graphschema besteht aus Knoten und Kanten sowie Labels, die ihren Typ klassifizieren, und Attributen, die sie beschreiben. Sie definieren ein Property Graph-Schema, indem Sie Zeilen aus Eingabetabellen Graphknoten und ‑kanten zuordnen und benutzerdefinierte Labels und Attribute definieren. Weitere Informationen zu BigQuery Graph finden Sie in der Übersicht zu BigQuery Graph.

Attributdatenmodell verstehen

Mit einem Property Graph können Sie verbundene Daten als Netzwerk von 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, Follower oder Standorte.

Knoten und Kanten können die folgenden Informationen enthalten:

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

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

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: Ein Bankkonto, das für Transaktionen verwendet wird.

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.

Knoten, Kanten, Labels und Attribute eines Finanzgraphen.

Abbildung 1. Beispiel für ein Diagramm mit mehreren Knoten und gerichteten Kanten.

Knoten und Kanten enthalten zusätzliche Informationen in Attributen.

  • Person-Knoten haben die folgenden Eigenschaften:

    • name (STRING)
    • id (INT64)
  • Transfers-Kanten enthalten diese Property:

    • amount (FLOAT64)

Gerichtete und ungerichtete Kanten

Gerichtete Kanten geben eine bestimmte Richtung in der Beziehung zwischen Entitäten an. Eine Person kann beispielsweise ein Konto haben, aber ein Konto kann keine Person haben. Einige Beziehungen, z. B. 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 Anweisung CREATE PROPERTY GRAPH einen Graphen aus Tabellen erstellen. Die Tabellen, aus denen Grafiken erstellt werden, werden als Eingabetabellen bezeichnet.

Knoten definieren

Knoten werden durch Zeilen in Tabellen definiert. Um einen Knoten zu definieren, fügen Sie eine Knotendefinition in die NODE TABLES-Klausel ein. Die einfachste Form einer Knotendefinition enthält den Namen einer Eingabetabelle mit einem Primärschlüssel. In BigQuery Graph werden Zeilen aus der Eingabetabelle Knoten im Diagramm zugeordnet.

Im folgenden Beispiel verwenden Sie die NODE TABLES-Klausel, um den Knoten Account im Property-Graphen FinGraph zu definieren. 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 Attribute zur Verfügung.

  • Für jeden Kontoknoten wird das Label Account verwendet.
  • Jeder Kontoknoten enthält id- und create_time-Properties aus den Account-Tabellenspalten.

Elementschlüssel

In einer Knotendefinition wird auch der Elementschlüssel definiert, eine Sammlung von Spalten, die einen Knoten im Diagramm eindeutig identifiziert. Standardmäßig ist der Elementschlüssel der Primärschlüssel der Eingabetabelle. Alternativ können Sie die Klausel KEY verwenden, um Element-Schlüssel explizit zu definieren.

Im folgenden Beispiel werden ein Account-Knoten und ein Person-Knoten definiert. Für den Account-Knoten wird der Primärschlüssel der Tabelle Account als Elementschlüssel verwendet. Im Knoten Person 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 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.

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. Um eine Kante zu definieren, fügen Sie der EDGE TABLES-Klausel eine Kantendefinition hinzu. Die einfachste Form einer Kantendefinition enthält den Namen einer Eingabetabelle und definiert Quell- und Zielknotenreferenzen. BigQuery Graph verwendet diese Definition, um Zeilen aus der Eingabetabelle den Grafkanten zuzuordnen.

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

Quell- und Zielknotenreferenzen

In einer Kantendefinition wird die Quell- und Zielknotenreferenz mithilfe der Klauseln SOURCE KEY, DESTINATION KEY und REFERENCES definiert. Sie müssen die Quell- und Zielknoten definieren, bevor Sie sie in der Kantendefinition verwenden.

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

  • Person- und Account-Knoten
  • PersonOwnAccount Rahmen
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-Knoten (Ziel).

  • Der Quellknoten einer Kante ist ein Person-Knoten, dessen id-Attribut mit dem id-Attribut der Kante übereinstimmt.
  • Der Zielknoten einer Kante ist ein Account-Knoten, dessen id-Property mit der account_id-Property der Kante übereinstimmt.
  • 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.
  • Jeder Edge hat das Standardlabel PersonOwnAccount.

Zeilen Kanten zuordnen

Jede Zeile in der Edge-Eingabetabelle mit einem nicht leeren Elementschlüssel wird in der Regel einem einzelnen Edge in Ihrem Diagramm zugeordnet. Wenn die Quell- oder Zielknotenreferenz jedoch mit null oder mehr Knoten in der Quell- oder Zielknotentabelle übereinstimmt, kann die Zeile in der Eingabetabelle für Kanten zu null oder mehreren Kanten in Ihrem Diagramm 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 Edge-Tabelle 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 in der Tabelle Account sowohl der Knoten Account als auch die eingehende Kante vom Knoten Person dargestellt werden.

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 CREATE PROPERTY GRAPH-Anweisung gezeigt. In der EDGE TABLES-Klausel geben Sie der Tabelle Account den Alias Owns. Das liegt daran, dass jedes Element im Diagrammschema 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 Attribute anpassen

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

Im folgenden Beispiel wird ein Person-Knoten mit einer benutzerdefinierten Property 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)
  );
  • Für die Person-Knoten wird das Label Customer verwendet, um das Attribut address verfügbar zu machen. Das Attribut address wird durch den Ausdruck CONCAT(city, ", ", country), definiert, der auf die Spalten city und country aus der Eingabetabelle Person verweist.

  • Für den Account-Knoten wird das Label Account verwendet, um die Properties id und create_time verfügbar zu machen.

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

  • Im Knoten Person stammen die Attribute id und name aus den Spalten der Eingabetabelle.
  • Im Knoten Account bezieht sich die Property name auf die Spalte nick_name der Eingabetabelle.

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. Für Labels und Attribute mit demselben Namen gelten jedoch die folgenden Regeln:

  • Für Attribute mit demselben Namen muss derselbe Werttyp verwendet werden.
  • Labels mit demselben Namen müssen dieselbe Liste von Attributen enthalten.

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

Schemaabhängigkeiten verwalten

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

Sie sind dafür verantwortlich, funktionsgefährdende Schemaänderungen zu vermeiden. Wir empfehlen folgende Best Practices:

  • Bevor Sie eine Tabelle löschen, die in einer Definition eines Diagrammknotens verwendet wird, müssen Sie diese Knotendefinition zuerst aus dem Diagramm entfernen.
  • Bevor Sie eine Spalte aus einer Tabelle entfernen, die als Attribut in einem Diagramm verfügbar ist, müssen Sie das Attribut aus der entsprechenden Knoten- oder Kantendefinition entfernen.

Diagrammschemas ansehen

Sie können Ihr Diagrammschema in einem Notebook visualisieren.

Diagrammschema aktualisieren

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

Graph-Schema löschen

Verwenden Sie zum Löschen eines Property-Graphen die Anweisung DROP PROPERTY GRAPH.

Nächste Schritte