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 node dan tepi ke dalam set. Node dan tepi juga mencakup properti yang merupakan key-value pair.
Anda menentukan skema Spanner Graph dengan memetakan baris dari tabel input ke node dan tepi 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. Representasi informasi sebagai jaringan node dan tepi. 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, yang mengklasifikasikan node dan tepi ke dalam set, misalnya, city.
- Properti, yang merupakan pasangan nilai kunci, misalnya, populasi.
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.
Gambar 1. Contoh grafik dengan beberapa node dan tepi berarah.
Node dan tepi menyertakan informasi tambahan dalam properti. Setiap properti mencakup nama dan nilai.
- Node Person mencakup properti berikut:
name
(STRING
)id
(INT64
)
- Edge transfer 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 tidak terarah sebagai dua tepi terarah, 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 dalam grafik properti
Untuk menentukan node, tambahkan definisi node dalam klausa NODE TABLES. Bentuk definisi node 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
Secara default, semua node menggunakan nama tabel input sebagai labelnya, dan 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 tabelAccount
.
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 tabelAccount
sebagai kunci elemennya secara default. - Di sisi lain, node
Person
secara eksplisit menentukanid
sebagai kunci elemen dengan klausaKEY
.
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 edge dalam grafik properti
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 tepi grafik.
Label dan properti default tepi ditentukan dengan cara yang sama seperti node.
Kunci elemen setiap tepi ditentukan dengan cara yang sama seperti node.
Referensi node sumber dan tujuan
Dalam contoh berikut, Anda membuat grafik properti FinGraph
dengan
berikut ini:
- Node
Person
danAccount
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 edge menentukan referensi node sumber dan tujuan menggunakan
klausa SOURCE KEY
, DESTINATION KEY
, dan REFERENCES
. Contoh berikut menggunakan definisi tepi PersonOwnAccount
untuk mengilustrasikan 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
denganid
yang sama denganid
tepi. - Node tujuan dari tepi adalah node
Account
denganid
yang sama denganaccount_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.
- Anda dapat menggunakan tabel input yang sama dalam definisi node atau edge yang berbeda untuk membuat kumpulan node atau edge yang berbeda. Untuk mengetahui informasi selengkapnya, lihat Menggabungkan tabel input node dan edge.
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 labelCustomer
untuk menampilkan propertiaddress
. Propertiaddress
ditentukan oleh ekspresiCONCAT(city, ", ", country),
yang merujuk ke kolomcity
dancountry
dari tabel inputPerson
. - Untuk
Account
, nodeAccount
menggunakan labelAccount
untuk menampilkan propertiid
dancreate_time
. Person
danAccount
memiliki labelEntity
dengan properti [id, name
].- Untuk
Person
, propertiid
danname
berasal dari kolom tabel input. - Untuk
Account
, propertiname
merujuk pada kolomnick_name
dari tabel input.
- Untuk
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 nodeAccount
. Untuk mengetahui informasi selengkapnya, lihat Menghapus definisi tepi atau node yang ada. - Anda tidak dapat melepaskan
create_time
kolom dari tabelAccount
. Untuk melakukannya, Anda harus menghapus properticreate_time
dari definisi nodeAccount
. Untuk mengetahui informasi selengkapnya, lihat Memperbarui definisi node atau tepi yang ada.
Namun, Anda dapat melakukan perubahan skema berikut:
- Ubah skema tabel
Account
dan kolomid
sertacreate_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 Bekerja dengan visualisasi Grafik Spanner.
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
- Buat skema Spanner Graph.
- Perbarui atau hapus skema Spanner Graph.
- Mengelola data tanpa skema dengan Spanner Graph.