Membuat dan membuat kueri grafik

Dokumen ini menunjukkan cara menggunakan BigQuery Graph untuk membuat grafik dengan informasi keuangan dan menjalankan kueri grafik menggunakan Graph Query Language (GQL).

Peran yang diperlukan

Agar mendapatkan izin yang diperlukan untuk membuat dan membuat kueri grafik, minta administrator untuk memberi Anda peran IAM BigQuery Data Editor (roles/bigquery.dataEditor) di set data tempat Anda membuat tabel node, tabel edge, dan grafik. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat tabel node dan edge

Grafik dibuat dari tabel BigQuery yang ada dan disimpan dalam set data. Untuk menyimpan tabel dan grafik yang Anda buat dalam contoh berikut, buat set data. Kueri berikut membuat set data bernama graph_db:

CREATE SCHEMA IF NOT EXISTS graph_db;

Tabel berikut berisi informasi tentang orang dan akun, serta hubungan antara setiap entity ini:

  • Person: informasi tentang orang.
  • Account: informasi tentang rekening bank.
  • PersonOwnAccount: informasi tentang siapa yang memiliki akun mana.
  • AccountTransferAccount: informasi tentang transfer antar-akun.

Untuk membuat tabel ini, jalankan pernyataan berikut CREATE TABLE:

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
);

Membuat grafik

Untuk membuat grafik, Anda dapat menggunakan pernyataan CREATE PROPERTY GRAPH atau modeler grafik visual. Contoh berikut menggunakan pernyataan CREATE PROPERTY GRAPH untuk membuat grafik bernama FinGraph di set data graph_db. Tabel Account dan Person adalah tabel node. Tabel AccountTransferAccount dan PersonOwnAccount adalah tabel edge, yang mewakili hubungan antara tabel node.

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
  );

Memasukkan data

Untuk memperbarui data dalam grafik, Anda memperbarui data di tabel node dan edge. Saat Anda membuat grafik, data Anda tidak dipindahkan atau disalin. Sebagai gantinya, grafik bertindak sebagai tampilan logis data yang ada di tabel node dan edge. Kueri grafik Anda menampilkan hasil berdasarkan data yang ada di tabel node dan edge pada saat Anda menjalankan kueri.

Kueri berikut memasukkan data ke dalam tabel yang Anda buat:

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");

Contoh visualisasi grafik keuangan

Membuat kueri grafik

Untuk membuat kueri grafik, Anda menjalankan kueri yang menggunakan Graph Query Language.

Kueri berikut menggunakan pernyataan MATCH untuk menemukan informasi tentang siapa yang menerima transfer uang dari Dana:

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;

Hasilnya akan terlihat seperti berikut:

+-------+--------+----------------+
| owner | amount | transferred_to |
+-------+--------+----------------+
| Dana  | 500.0  | Alex           |
| Dana  | 200.0  | Lee            |
+-------+--------+----------------+

Anda juga dapat menggunakan grafik sebagai sumber data dalam analisis percakapan, yang memungkinkan Anda mengajukan pertanyaan dalam bahasa alami tentang grafik Anda. Misalnya, Anda dapat bertanya "Siapa yang menerima transfer uang dari Dana dan berapa jumlah yang ditransfer?"

Memvisualisasikan hasil kueri grafik

Anda dapat memvisualisasikan hasil kueri grafik di notebook dengan menggunakan perintah magic %%bigquery --graph yang diikuti dengan kueri GQL. Kueri harus menampilkan elemen grafik dalam format JSON. Untuk memvisualisasikan hasil kueri yang Anda jalankan di bagian sebelumnya, jalankan kueri berikut di sel kode notebook:

%%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;

Visualisasi transfer Dana dalam notebook

Menghapus grafik

Untuk menghapus grafik, gunakan pernyataan DROP PROPERTY GRAPH. Menghapus grafik tidak akan memengaruhi tabel yang digunakan untuk menentukan node dan edge grafik. Kueri berikut menghapus grafik FinGraph:

DROP PROPERTY GRAPH graph_db.FinGraph;

Langkah berikutnya