Grafik erstellen und abfragen
Mit BigQuery Graph können Sie relationale Daten als Knoten und Kanten modellieren, um komplexe Beziehungen mithilfe der Graph Query Language (GQL) abzufragen. In dieser Anleitung erstellen Sie Knoten- und Kantentabellen für ein Finanz-Dataset, definieren einen Attributgraphen und führen Graphmusterabfragen aus.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle BigQuery-Datenbearbeiter (roles/bigquery.dataEditor) für das Dataset zuzuweisen, in dem Sie die Knotentabellen, Kantentabellen und das Diagramm erstellen, um die Berechtigungen zu erhalten, die Sie für die Arbeit mit Diagrammen benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigungen, die zum Arbeiten mit Graphen erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um mit Graphen zu arbeiten:
-
Diagramm erstellen:
bigquery.propertyGraphs.create -
Diagramme und ihre Metadaten auflisten:
bigquery.propertyGraphs.list -
Rufen Sie die Metadaten und die Definition eines Diagramms ab:
bigquery.propertyGraphs.get -
Aktualisieren Sie die Metadaten und die Definition eines Diagramms:
bigquery.propertyGraphs.update -
Diagramm löschen:
bigquery.propertyGraphs.delete
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Knoten- und Kantentabellen erstellen
Diagramme werden aus vorhandenen BigQuery-Tabellen erstellt und in Datasets gespeichert.
Erstellen Sie ein Dataset, um die Tabellen und den Graphen zu speichern, die Sie in den folgenden Beispielen erstellen.
Mit der folgenden Abfrage wird ein Dataset namens graph_db erstellt:
CREATE SCHEMA IF NOT EXISTS graph_db;
Die folgenden Tabellen enthalten Informationen zu Personen und Konten sowie zu den Beziehungen zwischen diesen Entitäten:
Person: Informationen zu Personen.Account: Informationen zu Bankkonten.PersonOwnAccount: Informationen darüber, wer welche Konten besitzt.AccountTransferAccount: Informationen zu Übertragungen zwischen Konten.
Führen Sie die folgenden CREATE TABLE-Anweisungen aus, um diese Tabellen zu erstellen:
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
);
CREATE OR REPLACE TABLE graph_db.AccountTransferAccount (
id INT64 NOT NULL,
to_id INT64 NOT NULL,
amount FLOAT64,
create_time TIMESTAMP NOT NULL,
order_number STRING,
PRIMARY KEY (id, to_id, create_time) NOT ENFORCED,
FOREIGN KEY (id) REFERENCES graph_db.Account(id) NOT ENFORCED,
FOREIGN KEY (to_id) REFERENCES graph_db.Account(id) NOT ENFORCED
);
Diagramm erstellen
Zum Erstellen eines Graphen können Sie die Anweisung CREATE PROPERTY GRAPH oder den visuellen Graph-Modellierer verwenden.
Im folgenden Beispiel wird die Anweisung CREATE PROPERTY GRAPH verwendet, um im Dataset graph_db einen Graphen mit dem Namen FinGraph zu erstellen. Die Tabellen Account und Person sind die Knotentabellen. Die Tabellen AccountTransferAccount und PersonOwnAccount sind die Kantentabellen, die Beziehungen zwischen den Knotentabellen darstellen.
CREATE OR REPLACE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Account,
graph_db.Person
)
EDGE TABLES (
graph_db.PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
LABEL Owns,
graph_db.AccountTransferAccount
SOURCE KEY (id) REFERENCES Account (id)
DESTINATION KEY (to_id) REFERENCES Account (id)
LABEL Transfers
);
Daten einfügen
Wenn Sie die Daten in einem Graphen aktualisieren möchten, aktualisieren Sie die Daten in den Knoten- und Kantentabellen. Wenn Sie ein Diagramm erstellen, werden Ihre Daten nicht verschoben oder kopiert. Stattdessen fungiert ein Graph als logische Ansicht der Daten, die in Ihren Knoten- und Kantentabellen vorhanden sind. Ihre Graphabfragen geben Ergebnisse basierend auf den Daten zurück, die zum Zeitpunkt der Abfrage in Ihren Knoten- und Kantentabellen vorhanden sind.
Mit der folgenden Abfrage werden Daten in die von Ihnen erstellten Tabellen eingefügt:
INSERT INTO graph_db.Account
(id, create_time, is_blocked, nick_name)
VALUES
(7,"2020-01-10 06:22:20.222",false,"Vacation Fund"),
(16,"2020-01-27 17:55:09.206",true,"Vacation Fund"),
(20,"2020-02-18 05:44:20.655",false,"Rainy Day Fund");
INSERT INTO graph_db.Person
(id, name, birthday, country, city)
VALUES
(1,"Alex","1991-12-21 00:00:00","Australia","Adelaide"),
(2,"Dana","1980-10-31 00:00:00","Czech_Republic","Moravia"),
(3,"Lee","1986-12-07 00:00:00","India","Kollam");
INSERT INTO graph_db.AccountTransferAccount
(id, to_id, amount, create_time, order_number)
VALUES
(7,16,300,"2020-08-29 15:28:58.647","304330008004315"),
(7,16,100,"2020-10-04 16:55:05.342","304120005529714"),
(16,20,300,"2020-09-25 02:36:14.926","103650009791820"),
(20,7,500,"2020-10-04 16:55:05.342","304120005529714"),
(20,16,200,"2020-10-17 03:59:40.247","302290001255747");
INSERT INTO graph_db.PersonOwnAccount
(id, account_id, create_time)
VALUES
(1,7,"2020-01-10 06:22:20.222"),
(2,20,"2020-01-27 17:55:09.206"),
(3,16,"2020-02-18 05:44:20.655");

Graph abfragen
Wenn Sie einen Graphen abfragen möchten, führen Sie Abfragen mit der Graph Query Language aus.
In der folgenden Abfrage wird eine MATCH-Anweisung verwendet, um Informationen darüber zu finden, an wen Dana Geld überwiesen hat:
GRAPH graph_db.FinGraph
MATCH
(person:Person {name: "Dana"})-[own:Owns]->
(account:Account)-[transfer:Transfers]->(account2:Account)<-[own2:Owns]-(person2:Person)
RETURN
person.name AS owner,
transfer.amount AS amount,
person2.name AS transferred_to
ORDER BY person2.name;
Die Ergebnisse sehen in etwa so aus:
+-------+--------+----------------+ | owner | amount | transferred_to | +-------+--------+----------------+ | Dana | 500.0 | Alex | | Dana | 200.0 | Lee | +-------+--------+----------------+
Sie können Graphen auch als Datenquelle in der konversationellen Analyse verwenden, um Fragen zu Ihren Graphen in natürlicher Sprache zu stellen. Sie könnten beispielsweise fragen: „An wen hat Dana Geld überwiesen und wie viel wurde überwiesen?“
Ergebnisse von Diagrammabfragen visualisieren
Sie können die Ergebnisse Ihrer Graphabfrage in einem Notebook visualisieren, indem Sie den magischen Befehl %%bigquery --graph gefolgt von Ihrer GQL-Abfrage verwenden. Die Abfrage muss Diagrammelemente im JSON-Format zurückgeben. Führen Sie die folgende Abfrage in einer Notebook-Codezelle aus, um die Ergebnisse der Abfrage zu visualisieren, die Sie im vorherigen Abschnitt ausgeführt haben:
%%bigquery --graph
GRAPH graph_db.FinGraph
MATCH
p = ((person:Person {name: "Dana"})-[own:Owns]->
(account:Account)-[transfer:Transfers]->(acount2:Account)<-[own2:Owns]-(person2:Person))
RETURN
TO_JSON(p) AS path;

Diagramm löschen
Verwenden Sie die Anweisung DROP PROPERTY GRAPH, um ein Diagramm zu löschen. Das Löschen eines Graphen hat keine Auswirkungen auf die Tabellen, die zum Definieren der Knoten und Kanten des Graphen verwendet wurden. Mit der folgenden Abfrage wird der Graph FinGraph gelöscht:
DROP PROPERTY GRAPH graph_db.FinGraph;
Nächste Schritte
- Einführung in BigQuery Graph
- Weitere Informationen zu Graphschemas
- Weitere Informationen zum Schreiben von Graphabfragen
- Weitere Informationen zur Graph Query Language (GQL)
- Eine Anleitung zur Betrugserkennung finden Sie unter Betrugserkennung mit BigQuery Graph.
- Eine Anleitung zu Kundenprofilen finden Sie unter Customer 360-Empfehlungen mit BigQuery Graph erstellen.
- Eine Anleitung zu Lieferketten finden Sie unter Rückverfolgbarkeit der Lieferkette mit BigQuery Graph.