Dokumen ini menjelaskan skema Grafik Spanner dan memberikan contoh untuk menggambarkan konsep-konsep utama. Untuk mempelajari Spanner Graph lebih lanjut, lihat Ringkasan Grafik Spanner.
Model data grafik properti
Grafik properti memungkinkan Anda membuat model data yang terhubung. Pola ini mewakili informasi sebagai jaringan dari {i>node<i} dan {i>edge<i}. {i>Node<i} melambangkan entity dalam lanskap data Anda, seperti "pelanggan", "produk", atau "lokasi", Tepi menunjukkan hubungan antara {i>node<i} tersebut, menangkap hubungan seperti "dibeli", "mengikuti", atau "berlokasi di".
Node dan tepi dapat menyertakan informasi berikut:
- Label, yang mengklasifikasikan node dan tepi menjadi kumpulan, misalnya, Kota.
- Properti, yang merupakan pasangan nilai kunci, misalnya, populasi.
Contoh pada Gambar 1 menunjukkan cara mendesain grafik untuk memodelkan aktivitas keuangan Anda. Grafik ini mencakup jenis entitas berikut dimodelkan sebagai node:
- Orang: Mewakili individu yang terlibat dalam transaksi keuangan.
- Rekening: Merupakan rekening bank yang digunakan untuk transaksi.
Entitas-entitas ini dihubungkan oleh berbagai jenis hubungan, yang yang diwakili oleh tepi terarah berikut:
- Milik: Seseorang memiliki satu atau beberapa akun.
- Transfer: Uang berpindah dari satu rekening ke rekening lain.
Setiap tepian yang terarah menunjukkan hubungan satu arah, yang mengalir dari {i>node<i} sumber
ke {i>node<i} tujuan. Misalnya, edge Transfers
menghubungkan sumber
Account
ke Account
tujuan, yang menunjukkan aliran uang.
Gambar 1. Contoh grafik dengan beberapa node dan tepi terarah.
Node dan tepi dapat berisi informasi tambahan dalam bentuk properti. Setiap properti memiliki nama dan nilai.
- Node Person memiliki properti berikut:
name
(STRING
)id
(INT64
)
- Edge transfer memiliki properti berikut:
amount
(FLOAT64)
Tepi terarah dan tidak mengarah
Grafik contoh menggunakan tepi terarah, yang menunjukkan arah tertentu dalam hubungan antar entity. Namun, beberapa hubungan, seperti "teman" hubungan dalam jejaring sosial, tidak diarahkan, dan mewakili koneksi timbal balik tanpa titik asal atau titik akhir yang berbeda. Dalam hal ini, Anda dapat memodelkan tepi yang tidak berarah sebagai dua tepi terarah, satu tepi di setiap arah.
Desain skema Grafik Spanner
Spanner Graph memungkinkan Anda membuat grafik dari tabel menggunakan Pernyataan BUAT GRAFIK PROPERTI. Tabel yang digunakan untuk membuat grafik disebut tabel input. Pendekatan ini didasarkan pada SQL/PGQ (Kueri Grafik Properti), yang merupakan bagian dari SQL:2023 Standards.
Menentukan node dalam grafik properti
Untuk menentukan node, tambahkan definisi node dalam klausa NODE TABLES. Bentuk definisi node yang paling sederhana hanya berisi nama tabel input. Baris dari tabel input dipetakan ke grafik node.
Dalam contoh berikut, Anda menggunakan klausa NODE TABLES untuk menentukan
Node Account
di grafik properti FinGraph
. Definisi {i>node<i} berisikan
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 semua kolom dari tabel input diekspos sebagai properti node.
Pada contoh sebelumnya,
- Setiap node akun memiliki label
Account
. - Setiap node akun memiliki properti
[id, create_time]
yang dibuat dariAccount
kolom tabel.
Kunci Elemen
Definisi node juga menentukan kunci elemen, yang secara unik mengidentifikasi node grafik.
- Secara default, kunci elemen adalah kunci utama tabel input.
- Kunci elemen dapat ditentukan secara eksplisit oleh klausa
KEY
. - Kolom dengan batasan keunikan
UNIQUE INDEX
dapat berupa digunakan sebagai kunci elemen.
Contoh berikut menentukan node Account
dan node Person
.
- Node
Account
menggunakan kunci utama tabelAccount
sebagai elemennya tombol 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 sebuah simpul unik di grafik, yang diidentifikasi dengan kunci elemen.
- Baris berisi kunci elemen null akan diabaikan.
Menentukan tepi dalam grafik properti
Untuk menentukan tepi, tambahkan definisi edge ke dalam klausa EDGE TABLES. Bentuk definisi tepi yang paling sederhana hanya berisi nama tabel input. Baris dari tabel input dipetakan ke tepi grafik.
Label dan properti {i>default<i} dari tepi adalah ditentukan dengan cara yang sama seperti node.
Kunci elemen setiap tepi ditentukan dengan cara yang sama seperti node.
Referensi node sumber dan tujuan
Pada contoh berikut, Anda membuat grafik properti FinGraph
dengan
berikut ini:
Person
danAccount
node- tepi
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 harus menentukan referensi node sumber dan tujuan, menggunakan
klausul SOURCE KEY
, DESTINATION KEY
, dan REFERENCES
. Hal berikut
contoh ini 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 Account
node (tujuan).
- Node
SOURCE
dari tepi adalah nodePerson
yangid
-nya sama dengan tepiid
. - Simpul
DESTINATION
dari tepi adalah nodeAccount
yangid
-nya sama sebagai tepiaccount_id
.
Selain itu, hal berikut berlaku untuk edge 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 edge ke tepi dalam grafik
- Setiap baris dalam tabel input edge, yang kunci elemennya bukan null, biasanya dipetakan ke tepian yang unik dalam grafik Anda.
- Sebuah baris mungkin sesuai dengan nol atau lebih dari satu tepi pada grafik, misalnya Misalnya, ketika referensi node sumber cocok dengan nol atau beberapa {i>node<i} di tabel {i>node<i} sumber.
- Tabel input yang sama dapat digunakan dalam definisi node atau edge yang berbeda untuk membuat set {i>node<i} atau {i>edge<i} yang berbeda. Untuk informasi selengkapnya, lihat Menggabungkan input node dan edge tabel.
Menyesuaikan label dan properti
Anda dapat menggunakan LABEL dan PROPERTI klausa untuk menyesuaikan label dan properti.
Pada contoh berikut, ada dua node yang ditentukan, Person
dan
Account
.
- Node
Person
expose
propertiaddress
melalui labelCustomer
. Tujuan Propertiaddress
ditentukan oleh ekspresiCONCAT(city, ", ", country),
yang mengacu pada kolomcity
dancountry
dari input tabelPerson
. - Untuk
Account
, nodeAccount
mengeksposid
dancreate_time
melalui labelAccount
. Person
danAccount
memiliki labelEntity
dengan properti [id, name
].- Untuk
Person
, propertiid
danname
memiliki dari kolom tabel input. - Untuk
Account
, propertiname
mengacu padanick_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. Label dan properti dengan nama yang sama dapat muncul di beberapa node atau edge definisi. Namun, label dan properti dengan nama yang sama harus mengikuti aturan:
- Properti dengan nama yang sama harus memiliki jenis nilai yang sama.
- Label dengan nama yang sama harus menampilkan daftar properti yang sama.
Pada contoh sebelumnya, label Entity
ditentukan di Person
dan
Account
node. Di kedua definisi, keduanya memiliki kumpulan nama properti yang sama
[id
, name
] dengan jenis nilai identik.
Dependensi antara grafik dan objek skema lainnya
Grafik yang dibuat oleh CREATE PROPERTY GRAPH
memiliki dependensi pada skema lain
seperti tabel input dari node dan definisi edge, serta tabel
kolom yang direferensikan oleh properti. Jika perubahan skema akan
melanggar salah satunya
dependensi, perubahan tidak diizinkan.
Pernyataan berikut membuat dependensi dari FinGraph
ke Account
tabel dan kolom id
, create_time
.
CREATE OR REPLACE PROPERTY GRAPH FinGraph
NODE TABLES (
Account PROPERTIES (id, create_time)
);
Berikut adalah contoh perubahan skema yang tidak boleh Anda lakukan:
- Tempatkan tabel
Account
, kecuali jika Anda menghapus nodeAccount
terlebih dahulu definisi. Untuk informasi selengkapnya, lihat Hapus node atau definisi edge yang ada. - Tempatkan
create_time
kolom dari tabelAccount
, kecuali jika Anda terlebih dahulu hapus properticreate_time
dari definisi nodeAccount
. Sebagai informasi selengkapnya, lihat Memperbarui definisi node atau edge yang ada.
Namun, Anda dapat membuat perubahan skema berikut:
- Ubah tabel
Account
serta skema kolomid
dancreate_time
sebagai selama diizinkan oleh persyaratan skema lainnya. Untuk selengkapnya informasi, lihat Buat pembaruan skema.