Membuat dan mengkueri 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

Untuk mendapatkan izin yang diperlukan guna 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 entitas 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 CREATE TABLE berikut:

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 menggunakan pernyataan CREATE PROPERTY GRAPH. Contoh berikut membuat grafik bernama FinGraph dalam set data graph_db. Tabel Account dan Person adalah tabel node. Tabel AccountTransferAccount dan PersonOwnAccount adalah tabel tepi, yang merepresentasikan hubungan antar-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
  );

Masukkan data

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

Kueri berikut menyisipkan 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 Bahasa Kueri Grafik.

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 mirip seperti berikut:

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

Memvisualisasikan hasil kueri grafik

Anda dapat memvisualisasikan hasil kueri grafik dalam notebook menggunakan perintah ajaib %%bigquery --graph yang diikuti dengan kueri GQL Anda. Kueri harus menampilkan elemen grafik dalam format JSON. Untuk memvisualisasikan hasil kueri yang Anda jalankan di bagian sebelumnya, jalankan kueri berikut dalam 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 tepi grafik. Kueri berikut menghapus grafik FinGraph:

DROP PROPERTY GRAPH graph_db.FinGraph;

Langkah berikutnya