Grafik erstellen und abfragen

In diesem Dokument wird beschrieben, wie Sie mit BigQuery Graph ein Diagramm mit Finanzinformationen erstellen und Diagrammabfragen 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 Knoten-, Kanten- und Grafiktabelle erstellen, um die Berechtigungen zu erhalten, die Sie zum Erstellen und Abfragen von Grafiken 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

Diagramme werden aus vorhandenen BigQuery-Tabellen erstellt und in Datasets gespeichert. Erstellen Sie ein Dataset, um die Tabellen und das Diagramm 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 Einheiten:

  • Person: Informationen zu Personen.
  • Account: Informationen zu Bankkonten.
  • PersonOwnAccount: Informationen dazu, wem welche Konten gehören.
  • 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 Diagramms verwenden Sie die Anweisung CREATE PROPERTY GRAPH. Im folgenden Beispiel wird im Dataset graph_db ein Diagramm mit dem Namen FinGraph 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 Diagramm aktualisieren möchten, müssen Sie die Daten in Ihren Knoten- und Kantentabellen aktualisieren. 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 enthalten sind. Ihre Diagrammabfragen geben Ergebnisse basierend auf den Daten zurück, die in Ihren Knoten- und Kantentabellen zum Zeitpunkt der Ausführung der Abfrage 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");

Beispiel für die Visualisierung eines Finanzdiagramms

Graph abfragen

Um einen Graphen abzufragen, führen Sie Abfragen aus, die die Graph Query Language verwenden.

In der folgenden Abfrage wird eine MATCH-Anweisung verwendet, um herauszufinden, 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            |
+-------+--------+----------------+

Ergebnisse von Diagrammabfragen visualisieren

Sie können die Ergebnisse Ihrer Diagrammabfrage in einem Notebook visualisieren, indem Sie den magischen Befehl %%bigquery --graph gefolgt von Ihrer GQL-Abfrage verwenden. Die Abfrage muss Grafikelemente im JSON-Format zurückgeben. Um die Ergebnisse der Abfrage zu visualisieren, 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;

Visualisierung der Übertragungen von Dana in einem Notebook

Diagramm löschen

Verwenden Sie die Anweisung DROP PROPERTY GRAPH, um einen Graphen zu löschen. Das Löschen eines Diagramms hat keine Auswirkungen auf die Tabellen, die zum Definieren der Knoten und Kanten des Diagramms verwendet wurden. Mit der folgenden Abfrage wird das Diagramm FinGraph gelöscht:

DROP PROPERTY GRAPH graph_db.FinGraph;

Nächste Schritte