Graph erstellen und abfragen
In diesem Dokument wird beschrieben, wie Sie mit BigQuery Graph einen Graph mit Finanzinformationen erstellen und Graphabfragen mit der Graph Query Language (GQL) ausführen.
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 den Graph erstellen, um die Berechtigungen zu erhalten, die Sie zum Erstellen und Abfragen von Graphen benötigen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Knoten- und Kantentabellen erstellen
Graphen werden aus vorhandenen BigQuery-Tabellen erstellt und in Datasets gespeichert.
Erstellen Sie ein Dataset, um die Tabellen und den Graph zu speichern, die Sie in den folgenden Beispielen erstellen,
.
Mit der folgenden Abfrage wird ein Dataset mit dem Namen 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 PersonenAccount: Informationen zu BankkontenPersonOwnAccount: Informationen dazu, wem welche Konten gehörenAccountTransferAccount: Informationen zu Überweisungen 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
);
Graph erstellen
Sie können einen Graph mit der
CREATE PROPERTY GRAPH Anweisung
oder mit dem visuellen Graphmodellierer erstellen.
Im folgenden Beispiel wird mit der Anweisung CREATE PROPERTY GRAPH ein Graph mit dem Namen FinGraph im Dataset graph_db erstellt. 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 Graph aktualisieren möchten, aktualisieren Sie die Daten in den Knoten- und Kantentabellen. Wenn Sie einen Graph erstellen, werden Ihre Daten nicht verschoben oder kopiert. Stattdessen fungiert ein Graph als logische Ansicht der Daten, die in den Knoten- und Kantentabellen vorhanden sind. Ihre Graphabfragen geben Ergebnisse basierend auf den Daten zurück, die in den Knoten- und Kantentabellen vorhanden sind, wenn Sie die Abfrage ausführen.
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 Graph abfragen möchten, führen Sie Abfragen aus, die die Graph Query Language verwenden.
Mit der folgenden Abfrage wird eine
MATCH Anweisung
verwendet, um Informationen dazu 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 Konversationsanalyse verwenden, wodurch Sie Fragen zu Ihren Graphen in natürlicher Sprache stellen können. Sie können beispielsweise fragen: „An wen hat Dana Geld überwiesen und wie viel wurde überwiesen?“
Ergebnisse von Graphabfragen visualisieren
Sie können
die Ergebnisse von Graphabfragen
in einem Notebook visualisieren. Verwenden Sie dazu den %%bigquery --graph Magic-Befehl, gefolgt von Ihrer
GQL-Abfrage. Die Abfrage muss Graphelemente im JSON-Format zurückgeben. Wenn Sie die Ergebnisse der Abfrage visualisieren möchten, die Sie im vorherigen Abschnitt ausgeführt haben, führen Sie die folgende Abfrage in einer Notebook-Codezelle aus:
%%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;

Graph löschen
Verwenden Sie die DROP PROPERTY GRAPH Anweisung, um einen Graph zu löschen. Das Löschen eines Graphen hat keine Auswirkungen auf die Tabellen, die zum Definieren der Graphknoten und -kanten 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 Graphschemata.
- Weitere Informationen zum Schreiben von Graphabfragen .
- Weitere Informationen zur Graph Query Language (GQL)
- Ein Tutorial zur Betrugserkennung finden Sie unter Betrugserkennung mit BigQuery Graph.
- Ein Tutorial zu Kundenprofilen finden Sie unter 360-Grad-Kundenempfehlungen mit BigQuery Graph erstellen.
- Ein Tutorial zu Lieferketten finden Sie unter Rückverfolgbarkeit der Lieferkette mit BigQuery Graph.