Schemaübersicht
In diesem Dokument werden die Komponenten eines Attributgrafikschemas erläutert und es wird gezeigt, wie Sie ein Grafikschema erstellen und verwalten.
Mit Graphen können Sie verbundene Daten modellieren, die Informationen als Netzwerk von Knoten und Kanten darstellen. Ein Graphenschema besteht aus Knoten und Kanten sowie aus Labels, die ihren Typ klassifizieren, und Attributen, die sie beschreiben. Sie definieren ein Attributgraphenschema, indem Sie Zeilen aus Eingabetabellen Knoten und Kanten des Graphen zuordnen und benutzerdefinierte Labels und Attribute definieren. Weitere Informationen zu BigQuery Graph finden Sie in der Übersicht zu BigQuery Graph.
Attributgrafik-Datenmodell
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 Sie 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 explizit 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 dargestellt 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 wird die Klausel NODE TABLES verwendet, um den Knoten Account im Attributdiagramm 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 Edge-Definition 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. - Jede Kante hat das Standardlabel
PersonOwnAccount.
Zeilen Kanten zuordnen
Jede Zeile in der Eingabetabelle für Kanten mit einem nicht leeren Elementschlüssel wird in der Regel einer einzelnen Kante 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. Diese Struktur ermöglicht es, dass 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 Grafschema 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 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)
DEFAULT LABEL OPTIONS(description = 'A checking or savings account')
PROPERTIES (id, create_time)
LABEL Entity
PROPERTIES (
id,
nick_name AS name OPTIONS(description = 'A user-defined account name',
synonyms = ['friendly name', 'display 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 Eigenschaftnameauf die Spaltenick_nameder Eingabetabelle. - Im
Account-Knoten wird mit dername-Eigenschaft dieOPTIONS-Klausel verwendet, um eine Beschreibung der Eigenschaft und eine Liste von Synonymen bereitzustellen. Diese Felder liefern Kontext und verbessern die Auffindbarkeit für Schnittstellen für Abfragen in natürlicher Sprache. Sie können nicht direkt in Ihren Diagrammabfragen darauf zugreifen und sie ändern die Abfrageergebnisse in keiner Weise.
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 Attribute mit demselben Namen müssen jedoch die folgenden Regeln einhalten:
- 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, dass keine Schemaänderungen vorgenommen werden, die zu Problemen führen. Wir empfehlen folgende Best Practices:
- Bevor Sie eine Tabelle löschen, die in einer Definition eines Grafikknotens 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
Wenn Sie die CREATE PROPERTY GRAPH-Anweisung sehen möchten, mit der ein vorhandenes Diagramm erstellt wurde, fragen Sie die Ansicht INFORMATION_SCHEMA.PROPERTY_GRAPHS ab:
SELECT
property_graph_name,
ddl
FROM
`region-REGION`.INFORMATION_SCHEMA.PROPERTY_GRAPHS;
Ersetzen Sie REGION durch die Region des Datasets, das das Diagramm enthält.
Alternativ können Sie Ihr Grafschema in einem Notebook visualisieren.
Grafikschema 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 DROP PROPERTY GRAPH-Anweisung.
Best Practices
In den folgenden Abschnitten werden Best Practices für das Definieren Ihres Diagrammschemas beschrieben, um die Leistung von Diagrammabfragen zu verbessern.
Property-Definitionen eingrenzen
Eigenschaften sind Schlüssel/Wert-Paare, die zusätzliche Informationen zu Knoten oder Kanten enthalten. Wir empfehlen, nur die erforderlichen Properties in Knoten oder Kanten aufzunehmen und die PROPERTIES ALL COLUMNS-Syntax oder die Standardsyntax zu vermeiden, mit der alle Spalten aus den Knoten- oder Kantentabellen an die Property-Liste angehängt werden. Viele Attribute in Knoten oder Kanten können unnötige Spaltenscans in Diagrammabfragen verursachen, was die Leistung beeinträchtigt.
Wenn Sie die Eigenschaften einschränken möchten, die in eine Knoten- oder Kantendefinition aufgenommen werden, verwenden Sie das Schlüsselwort PROPERTIES, wenn Sie Elementeigenschaften in Ihrer CREATE PROPERTY GRAPH-Anweisung definieren.
Die folgende Knotentabellendefinition beschränkt die Attribute für die Knotentabelle Person auf id und name:
NODE TABLES (
graph_db.Person PROPERTIES (id, name)
)
Beschränkungen für Primär- und Fremdschlüssel für Knoten und Kanten im Diagramm definieren
BigQuery kann Primär- und Fremdschlüsselbeschränkungen für Ihre Knoten- und Kantentabellen verwenden, um Ihre Diagrammabfragen zu optimieren, indem unnötige Tabellenscans reduziert werden. BigQuery erzwingt jedoch keine Primär- oder Fremdschlüsselbeschränkungen für Tabellen. Wenn Ihre Anwendung keine referenzielle Integrität oder Eindeutigkeit für Primärschlüssel garantieren kann, kann die Verwendung von Primär- oder Fremdschlüsseln zur Abfrageoptimierung zu falschen Abfrageergebnissen führen.
Im folgenden Beispiel werden Primär- und Fremdschlüsseleinschränkungen für die Knotentabellen Person und Account sowie die Kantentabelle PersonOwnAccount definiert:
CREATE OR REPLACE TABLE graph_db.Person (
id INT64,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.Account (
id INT64,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id, account_id) NOT ENFORCED,
FOREIGN KEY (id) references graph_db.Person(id) NOT ENFORCED,
FOREIGN KEY (account_id) references graph_db.Account(id) NOT ENFORCED
);
Nächste Schritte
- Weitere Informationen zu BigQuery Graph
- Property-Diagramm erstellen und abfragen
- Informationen zum Schreiben von Graphabfragen
- Weitere Informationen zum Erstellen von Diagrammen mit Messwerten