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
Studentund das LabelPersonhaben. 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
namemit dem WertAlexund das Attributidmit dem Wert1haben.
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.

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
Accountverwendet. - Jeder Kontoknoten enthält
id- undcreate_time-Properties aus denAccount-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.
- Der Elementschlüssel jeder Kante wird auf dieselbe Weise wie Knoten definiert.
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- undAccount-KnotenPersonOwnAccountRahmen
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, dessenid-Attribut mit demid-Attribut der Kante übereinstimmt. - Der Zielknoten einer Kante ist ein
Account-Knoten, dessenid-Property mit deraccount_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 LabelCustomerverwendet, um das Attributaddressverfügbar zu machen. Das Attributaddresswird durch den AusdruckCONCAT(city, ", ", country),definiert, der auf die Spaltencityundcountryaus der EingabetabellePersonverweist.Für den
Account-Knoten wird das LabelAccountverwendet, um die Propertiesidundcreate_timeverfügbar zu machen.
Die Knoten Person und Account haben beide das Label Entity mit den Attributen id und name.
- Im Knoten
Personstammen die Attributeidundnameaus den Spalten der Eingabetabelle. - Im Knoten
Accountbezieht sich die Propertynameauf die Spaltenick_nameder 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.