Spanner Graph memungkinkan Anda memodelkan data terhubung sebagai grafik properti yang merepresentasikan informasi sebagai jaringan node dan edge. Node melambangkan entitas, dan edge menunjukkan koneksi di antara node. Node dan edge menyertakan label yang mengklasifikasikan jenis node dan edge. Node dan edge juga menyertakan properti yang mendeskripsikannya.
Dokumen ini menjelaskan cara menentukan skema Spanner Graph dengan memetakan baris tabel ke node dan edge grafik. Anda juga akan mempelajari cara menyesuaikan label dan properti untuk node dan edge serta cara menggunakan dependensi objek skema dan grafik.
Jika Anda menginginkan definisi grafik yang lebih fleksibel, lihat Mengelola data tanpa skema. Jika Anda ingin mempelajari cara menggunakan tampilan SQL, bukan tabel, untuk menentukan node dan edge, lihat Ringkasan grafik yang dibuat dari tampilan SQL. Untuk mempelajari Spanner Graph lebih lanjut, lihat Ringkasan Spanner Graph.
Memahami model data grafik properti
Grafik properti memungkinkan Anda memodelkan data terhubung. Grafik ini 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 menangkap hubungan seperti dibeli, mengikuti, atau berlokasi di.
Node dan edge dapat menyertakan informasi berikut:
Label: Mengklasifikasikan jenis node dan edge. Jika Anda tidak menentukan label secara eksplisit untuk node atau edge, Spanner Graph akan menggunakan nama tabel input sebagai label default. Misalnya,
Accountdapat menjadi label.Properti: Digunakan untuk mendeskripsikan node dan edge. Misalnya, node
Personmungkin memiliki propertinamedengan nilaiAlexdan propertiiddengan nilai1.
Contoh pada Gambar 1 menunjukkan cara Anda dapat mendesain grafik untuk memodelkan aktivitas keuangan. Grafik ini mencakup jenis entitas berikut yang dimodelkan sebagai node:
- Person: Mewakili individu yang terlibat dalam transaksi keuangan.
- Account: Mewakili rekening bank yang digunakan untuk transaksi.
Entitas ini terhubung oleh berbagai jenis hubungan, yang direpresentasikan oleh edge terarah berikut:
- Owns: Seseorang memiliki satu atau beberapa akun.
- Transfers: Uang berpindah dari satu akun ke akun lain.
Setiap edge terarah menunjukkan hubungan satu arah yang mengalir dari node sumber ke node tujuan. Misalnya, edge Transfers menghubungkan Account sumber ke Account tujuan, yang menunjukkan aliran uang.
Gambar 1. Contoh grafik dengan beberapa node dan edge terarah.
Node dan edge menyertakan informasi tambahan dalam properti.
- Node Person menyertakan properti berikut:
name(STRING)id(INT64)
- Edge Transfers menyertakan properti berikut:
amount(FLOAT64)
Edge terarah dan tidak terarah
Grafik contoh menggunakan edge terarah yang menunjukkan arah tertentu dalam hubungan antar-entitas. Namun, beberapa hubungan, seperti hubungan teman di jejaring sosial, tidak terarah dan mewakili koneksi timbal balik tanpa asal atau endpoint yang berbeda. Dalam hal ini, Anda dapat memodelkan edge tidak terarah sebagai dua edge terarah, satu edge di setiap arah.
Desain skema Spanner Graph
Di Spanner Graph, Anda menggunakan pernyataan CREATE PROPERTY GRAPH untuk membuat grafik dari tabel atau tampilan SQL. Tabel yang digunakan untuk membuat grafik disebut tabel input. Dokumen ini menunjukkan cara menggunakan tabel untuk membuat grafik. Untuk mengetahui informasi tentang cara menggunakan tampilan SQL, lihat Membuat Spanner Graph dari tampilan SQL.
Menentukan node dari tabel
Untuk menentukan node, tambahkan definisi node dalam klausa NODE TABLES. Bentuk definisi node yang paling sederhana berisi nama tabel input yang memiliki referensi node sumber dan tujuan yang ditentukan. Spanner Graph memetakan baris dari tabel input ke node grafik.
Dalam contoh berikut, Anda menggunakan
NODE TABLES
klausa 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.
Dalam 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 mengidentifikasi node grafik secara unik.
- Secara default, kunci elemen adalah kunci utama tabel input.
- Anda dapat menggunakan klausa
KEYuntuk menentukan kunci elemen secara eksplisit. - Anda dapat menggunakan kolom dengan a indeks unik batasan sebagai kunci elemen.
Contoh berikut menentukan node Account dan node Person.
- Secara default, node
Accountmenggunakan kunci utama tabelAccountsebagai kunci elemennya. - Di sisi lain, node
Personsecara eksplisit menentukanidsebagai 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 dari tabel
Untuk menentukan edge, tambahkan definisi edge ke dalam EDGE TABLES klausa. Bentuk definisi edge yang paling sederhana hanya berisi nama tabel input. Spanner Graph memetakan baris dari tabel input ke edge grafik.
Label dan properti default edge ditentukan dengan cara yang sama seperti node.
Kunci elemen setiap edge ditentukan dengan cara yang sama seperti node.
Referensi node sumber dan tujuan
Dalam contoh berikut, Anda membuat grafik properti FinGraph dengan hal berikut:
- Node
PersondanAccount - Edge
PersonOwnAccount
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 dengan menggunakan klausa SOURCE KEY, DESTINATION KEY, dan REFERENCES. Contoh berikut menggunakan definisi edge PersonOwnAccount untuk mengilustrasikan konsep ini:
EDGE TABLES (
PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
)
Setiap edge PersonOwnAccount menghubungkan Person (sumber) ke node Account
(tujuan).
- Node sumber edge adalah node
Persondenganidyang sama denganidedge. - Node tujuan edge adalah node
Accountdenganidyang sama denganaccount_idedge.
Selain itu, hal berikut berlaku untuk edge PersonOwnAccount:
- Kunci elemen adalah kunci utama tabel
PersonOwnAccount, yaitu(id, account_id). - Setiap edge memiliki kumpulan properti yang sama dengan kolom dari tabel
PersonOwnAccount. - Setiap edge memiliki label
PersonOwnAccountdefault.
Memetakan baris dalam tabel input edge ke edge dalam grafik
- Setiap baris dalam tabel input edge, dengan kunci elemen yang tidak null, biasanya dipetakan ke edge unik dalam grafik Anda.
- Satu baris mungkin sesuai dengan nol atau lebih dari satu edge dalam grafik. Misalnya, hal ini terjadi saat referensi node sumber cocok dengan nol atau lebih node dalam tabel node sumber.
Menentukan node dan edge dalam satu tabel
Anda dapat menentukan node dan edge masuk atau keluar 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 edge terpisah.
Misalnya, jika tabel Account berikut memiliki kunci utama gabungan
(owner_id, account_id), bagian owner_id dapat menjadi kunci asing yang
mereferensikan tabel Person. Struktur ini memungkinkan tabel Account merepresentasikan node Account dan edge 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 edge Owns masuk. Hal ini ditunjukkan dalam pernyataan CREATE PROPERTY GRAPH berikut. Dalam klausa EDGE TABLES, Anda memberi tabel Account alias Owns. 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
Personmenggunakan labelCustomeruntuk mengekspos propertiaddress. Propertiaddressditentukan oleh ekspresiCONCAT(city, ", ", country),yang merujuk ke kolomcitydancountrydari tabel inputPerson. - Untuk
Account, nodeAccountmenggunakan labelAccountuntuk mengekspos propertiiddancreate_time. PersondanAccountmemiliki labelEntitydengan properti [id, name].- Untuk
Person, propertiiddannameberasal dari kolom tabel input. - Untuk
Account, propertinamemerujuk ke kolomnick_namedari 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 mengekspos daftar properti yang sama.
Dalam contoh sebelumnya, label Entity ditentukan di node Person dan Account. Kedua definisi tersebut 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 dari definisi node dan edge, serta kolom tabel yang direferensikan oleh properti. Spanner Graph tidak mengizinkan perubahan skema yang melanggar salah satu dependensi ini.
Pernyataan berikut membuat FinGraph bergantung pada tabel Account dan kolom id serta 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 node atau edge yang ada. - Anda tidak dapat menghapus kolom
create_timedari tabelAccount. Untuk melakukannya, Anda harus menghapus properticreate_timedari definisi nodeAccount. Untuk mengetahui informasi selengkapnya, lihat Memperbarui definisi node atau edge yang ada.
Namun, Anda dapat melakukan perubahan skema berikut:
- Ubah skema tabel
Accountdan kolomidsertacreate_timejika persyaratan skema lainnya mengizinkannya. Untuk mengetahui informasi selengkapnya, lihat Melakukan 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
- Membuat skema Spanner Graph.
- Memperbarui atau menghapus skema Spanner Graph.
- Mengelola data tanpa skema dengan Spanner Graph.
- Mempelajari praktik terbaik untuk desain skema Spanner Graph.
- Mempelajari praktik terbaik untuk menyesuaikan kueri Spanner Graph.