Ringkasan skema Spanner Graph

Spanner Graph memungkinkan Anda memodelkan data yang terhubung sebagai grafik properti yang merepresentasikan informasi sebagai jaringan node dan edge. Node menyimbolkan entitas, dan edge menunjukkan koneksi di antara entitas tersebut. Node dan tepi menyertakan label yang mengklasifikasikan jenis node dan tepi. Node dan tepi juga mencakup properti yang mendeskripsikannya.

Anda menentukan skema Spanner Graph dengan memetakan baris dari tabel input ke node dan edge grafik. Sesuaikan label dan properti untuk node dan tepi, serta pahami pengaruh perubahan skema terhadap dependensi grafik. Anda juga dapat mengelola data tanpa skema untuk definisi grafik yang lebih fleksibel.

Untuk mempelajari Spanner Graph lebih lanjut, lihat ringkasan Spanner Graph.

Memahami model data grafik properti

Grafik properti memungkinkan Anda memodelkan data yang terhubung. Grafik merepresentasikan informasi sebagai jaringan node dan edge. Node melambangkan entitas dalam lanskap data Anda, seperti pelanggan, produk, atau lokasi. Edge menunjukkan koneksi antara node tersebut, yang mencakup hubungan seperti dibeli, mengikuti, atau berada di.

Node dan tepi dapat menyertakan informasi berikut:

  • Label: Mengklasifikasikan jenis node dan tepi. Jika Anda tidak secara eksplisit menentukan label untuk node atau edge, Spanner Graph akan menggunakan nama tabel input sebagai label default. Misalnya, Account bisa berupa label.

  • Properti: Digunakan untuk mendeskripsikan node dan tepi. Misalnya, node Person mungkin memiliki properti name dengan nilai Alex dan properti id dengan nilai 1.

Contoh pada Gambar 1 menunjukkan cara mendesain grafik untuk memodelkan aktivitas keuangan. Grafik ini mencakup jenis entitas berikut yang dimodelkan sebagai node:

  • Orang: Mewakili individu yang terlibat dalam transaksi keuangan.
  • Akun: Merepresentasikan rekening bank yang digunakan untuk transaksi.

Entitas ini terhubung oleh berbagai jenis hubungan, yang diwakili oleh tepi berarah berikut:

  • Memiliki: Seseorang memiliki satu atau beberapa akun.
  • Transfer: Uang dipindahkan dari satu akun ke akun lain.

Setiap tepi berarah menunjukkan hubungan satu arah yang mengalir dari node sumber ke node tujuan. Misalnya, tepi Transfers menghubungkan sumber Account ke tujuan Account, yang menunjukkan aliran uang.

Diagram ringkasan skema Spanner Graph.

Gambar 1. Contoh grafik dengan beberapa node dan tepi berarah.

Node dan tepi menyertakan informasi tambahan dalam properti.

  • Node Person mencakup properti berikut:
    • name (STRING)
    • id (INT64)
  • Edge Transfers mencakup properti ini:
    • amount (FLOAT64)

Tepi berarah dan tidak berarah

Grafik contoh menggunakan tepi berarah yang menunjukkan arah tertentu dalam hubungan antara entity. Namun, beberapa hubungan, seperti hubungan teman di jejaring sosial, tidak terarah dan merepresentasikan koneksi timbal balik tanpa asal atau titik akhir yang berbeda. Dalam hal ini, Anda dapat memodelkan tepi yang tidak berarah sebagai dua tepi berarah, satu tepi di setiap arah.

Desain skema Spanner Graph

Spanner Graph memungkinkan Anda menggunakan pernyataan CREATE PROPERTY GRAPH untuk membuat grafik dari tabel. Tabel yang membuat grafik disebut tabel input. Pendekatan ini menggunakan SQL/PGQ (Property Graph Queries), yang merupakan bagian dari Standar SQL:2023.

Menentukan node dari tabel

Untuk menentukan node, tambahkan definisi node dalam klausa NODE TABLES. Bentuk definisi node yang paling sederhana hanya berisi nama tabel input. Spanner Graph memetakan baris dari tabel input ke node grafik.

Dalam contoh berikut, Anda menggunakan klausa NODE TABLES untuk menentukan node Account dalam grafik properti FinGraph. Definisi node berisi tabel input Account.

-- First, create an Account table.
CREATE TABLE Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
) PRIMARY KEY (id);

-- Next, use the Account table as input table of Account node definition.
CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account
  );

Label dan properti default

Selain menggunakan nama tabel input sebagai label default, Spanner Graph mengekspos semua kolom dari tabel input sebagai properti node.

Pada contoh sebelumnya,

  • Setiap node akun menggunakan label Account.
  • Setiap node akun menyertakan properti [id, create_time] dari kolom tabel Account.

Kunci elemen

Definisi node juga menentukan kunci elemen yang secara unik mengidentifikasi node grafik.

  • Secara default, kunci elemen adalah kunci utama tabel input.
  • Anda dapat menggunakan klausa KEY untuk menentukan kunci elemen secara eksplisit.
  • Anda dapat menggunakan kolom dengan batasan indeks unik sebagai kunci elemen.

Contoh berikut menentukan node Account dan node Person.

  • Node Account menggunakan kunci utama tabel Account sebagai kunci elemennya secara default.
  • Di sisi lain, node Person secara eksplisit menentukan id sebagai kunci elemen dengan klausa KEY.
CREATE TABLE Person (
  id           INT64 NOT NULL,
  name         STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
  id           INT64 NOT NULL,
  create_time  TIMESTAMP,
) PRIMARY KEY (id);

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id),
    Account
  );

Memetakan baris dalam tabel input ke node dalam grafik

  • Setiap baris dengan kunci elemen non-null dipetakan ke node unik dalam grafik, yang diidentifikasi oleh kunci elemen.
  • Baris dengan kunci elemen null akan diabaikan.

Menentukan tepi dari tabel

Untuk menentukan tepi, tambahkan definisi tepi ke dalam klausa EDGE TABLES. Bentuk definisi tepi yang paling sederhana hanya berisi nama tabel input. Spanner Graph memetakan baris dari tabel input ke edge grafik.

Referensi node sumber dan tujuan

Dalam contoh berikut, Anda membuat grafik properti FinGraph dengan berikut ini:

  • Node Person dan Account
  • PersonOwnAccount tepi
CREATE TABLE Person (
 id            INT64 NOT NULL,
 name          STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
 id            INT64 NOT NULL,
 create_time   TIMESTAMP,
) PRIMARY KEY (id);

CREATE TABLE PersonOwnAccount (
 id            INT64 NOT NULL,
 account_id    INT64 NOT NULL,
 create_time   TIMESTAMP,
 FOREIGN KEY (account_id) REFERENCES Account (id)
) PRIMARY KEY (id, account_id),
  INTERLEAVE IN PARENT Person;

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person,
    Account
  )
  EDGE TABLES (
    PersonOwnAccount
      SOURCE KEY (id) REFERENCES Person (id)
      DESTINATION KEY (account_id) REFERENCES Account (id)
  );

Definisi tepi menentukan referensi node sumber dan tujuan menggunakan klausa SOURCE KEY, DESTINATION KEY, dan REFERENCES. Contoh berikut menggunakan definisi tepi PersonOwnAccount untuk menggambarkan konsep ini:

EDGE TABLES (
  PersonOwnAccount
    SOURCE KEY (id) REFERENCES Person (id)
    DESTINATION KEY (account_id) REFERENCES Account (id)
)

Setiap tepi PersonOwnAccount menghubungkan node Person (sumber) ke node Account (tujuan).

  • Node sumber dari tepi adalah node Person dengan id yang sama dengan id tepi.
  • Node tujuan dari tepi adalah node Account dengan id yang sama dengan account_id tepi.

Selain itu, hal berikut berlaku untuk tepi PersonOwnAccount:

  • Kunci elemen adalah kunci utama tabel PersonOwnAccount, yaitu (id, account_id).
  • Setiap tepi memiliki kumpulan properti yang sama dengan kolom dari tabel PersonOwnAccount.
  • Setiap tepi memiliki label PersonOwnAccount default.

Memetakan baris dalam tabel input sisi ke sisi dalam grafik

  • Setiap baris dalam tabel input tepi, dengan kunci elemen tidak null, biasanya dipetakan ke tepi unik dalam grafik Anda.
  • Baris dapat sesuai dengan nol atau lebih dari satu tepi dalam grafik. Misalnya, hal ini terjadi saat referensi node sumber cocok dengan nol atau lebih banyak node dalam tabel node sumber.

Menentukan node dan tepi dalam satu tabel

Anda dapat menentukan node dan tepi masuk atau keluarnya dalam satu tabel jika kolom tabel Anda menentukan hubungan ke tabel lain. Pendekatan ini mengurangi jumlah tabel, menyederhanakan pengelolaan data, dan dapat meningkatkan performa kueri dengan menghilangkan kebutuhan untuk menggabungkan ke tabel tepi yang terpisah.

Misalnya, jika tabel Account berikut memiliki kunci utama gabungan (owner_id, account_id), bagian owner_id dapat berupa kunci asing yang mereferensikan tabel Person. Struktur ini memungkinkan tabel Account untuk merepresentasikan node Account dan tepi masuk dari node Person.

  CREATE TABLE Person (
    id INT64 NOT NULL,
  ) PRIMARY KEY (id);

  -- Assume each account has exactly one owner.
  CREATE TABLE Account (
    owner_id INT64 NOT NULL,
    account_id INT64 NOT NULL,
    FOREIGN KEY (owner_id) REFERENCES Person(id)
  ) PRIMARY KEY (owner_id, account_id);

Anda dapat menggunakan tabel Account untuk menentukan node Account dan tepi Owns masuknya. Hal ini ditunjukkan dalam pernyataan CREATE PROPERTY GRAPH berikut. Dalam klausa EDGE TABLES, Anda memberikan alias Owns pada tabel Account. Hal ini karena setiap elemen dalam skema grafik harus memiliki nama yang unik.

  CREATE PROPERTY GRAPH FinGraph
    NODE TABLES (
      Person,
      Account
    )
    EDGE TABLES (
      Account AS Owns
        SOURCE KEY (owner_id) REFERENCES Person
        DESTINATION KEY (owner_id, account_id) REFERENCES Account
    );

Menyesuaikan label dan properti

Anda dapat menggunakan klausa LABEL dan PROPERTIES untuk menyesuaikan label dan properti.

Contoh berikut menentukan dua node: Person dan Account.

  • Node Person menggunakan label Customer untuk menampilkan properti address. Properti address ditentukan oleh ekspresi CONCAT(city, ", ", country), yang merujuk ke kolom city dan country dari tabel input Person.
  • Untuk Account, node Account menggunakan label Account untuk menampilkan properti id dan create_time.
  • Person dan Account memiliki label Entity dengan properti [id, name].
    • Untuk Person, properti id dan name berasal dari kolom tabel input.
    • Untuk Account, properti name merujuk pada kolom nick_name dari tabel input.
CREATE TABLE Person (
 id               INT64 NOT NULL,
 name             STRING(MAX),
 birthday         TIMESTAMP,
 country          STRING(MAX),
 city             STRING(MAX),
) PRIMARY KEY (id);

CREATE TABLE Account (
 id               INT64 NOT NULL,
 create_time      TIMESTAMP,
 is_blocked       BOOL,
 nick_name        STRING(MAX),
) PRIMARY KEY (id);

CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id)
      LABEL Customer
        PROPERTIES (CONCAT(city, ", ", country) AS address)
      LABEL Entity PROPERTIES (id, name),
    Account KEY (id)
      LABEL Account PROPERTIES (id, create_time)
      LABEL Entity PROPERTIES (id, nick_name AS name)
  );

Konsistensi label dan properti

Dalam grafik, label dan properti diidentifikasi secara unik berdasarkan namanya. Anda dapat menggunakan label dan properti dengan nama yang sama dalam beberapa definisi node atau edge. Namun, label dan properti dengan nama yang sama harus mengikuti aturan berikut:

  • Properti dengan nama yang sama menggunakan jenis nilai yang sama.
  • Label dengan nama yang sama menampilkan daftar properti yang sama.

Dalam contoh sebelumnya, label Entity ditentukan di node Person dan Account. Kedua definisi menyertakan kumpulan nama properti yang sama [id, name] dengan jenis nilai yang identik.

Dependensi antara grafik dan objek skema lainnya

Grafik yang dibuat oleh CREATE PROPERTY GRAPH bergantung pada objek skema lainnya, seperti tabel input definisi node dan edge, serta kolom tabel yang dirujuk oleh properti. Spanner Graph tidak mengizinkan perubahan skema yang merusak salah satu dependensi ini.

Pernyataan berikut membuat FinGraph bergantung pada tabel Account dan kolom id dan create_time.

CREATE OR REPLACE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Account PROPERTIES (id, create_time)
  );

Dalam contoh ini, Spanner Graph tidak mengizinkan perubahan skema berikut:

  • Anda tidak dapat menghapus tabel Account. Untuk melakukannya, Anda harus menghapus definisi node Account. Untuk mengetahui informasi selengkapnya, lihat Menghapus definisi node atau edge yang ada.
  • Anda tidak dapat melepaskan kolom create_time dari tabel Account. Untuk melakukannya, Anda harus menghapus properti create_time dari definisi node Account. Untuk mengetahui informasi selengkapnya, lihat Memperbarui definisi node atau edge yang ada.

Namun, Anda dapat melakukan perubahan skema berikut:

  • Ubah skema tabel Account dan kolom id serta create_time jika persyaratan skema lainnya mengizinkannya. Untuk mengetahui informasi selengkapnya, lihat Membuat update skema.

Melihat visualisasi skema

Anda dapat melihat visualisasi skema di Spanner Studio setelah menjalankan kueri Spanner Graph. Untuk mengetahui informasi selengkapnya, lihat Menggunakan visualisasi Spanner Graph.

Mengelola data tanpa skema

Spanner Graph juga mendukung pengelolaan data tanpa skema yang berguna saat Anda memerlukan definisi grafik yang lebih fleksibel. Untuk mengetahui informasi selengkapnya, lihat Mengelola data tanpa skema di Spanner Graph.

Langkah berikutnya