Ringkasan skema
Dokumen ini menjelaskan komponen skema grafik properti dan menunjukkan cara membuat dan mengelola skema grafik.
Grafik memungkinkan Anda memodelkan data yang terhubung yang merepresentasikan informasi sebagai jaringan node dan edge. Skema grafik terdiri dari node dan tepi, beserta label yang mengklasifikasikan jenisnya, dan properti yang mendeskripsikannya. Anda menentukan skema grafik properti dengan memetakan baris dari tabel input ke node dan edge grafik serta menentukan label dan properti kustom. Untuk mempelajari lebih lanjut BigQuery Graph, lihat Ringkasan BigQuery Graph.
Memahami model data grafik properti
Grafik properti memungkinkan Anda memodelkan data yang terhubung sebagai jaringan node dan edge. Node merepresentasikan entity dalam data Anda, seperti pelanggan, produk, atau lokasi. Edge merepresentasikan koneksi antar-node tersebut, yang mencakup hubungan seperti pembelian, pengikut, atau lokasi.
Node dan tepi dapat mencakup informasi berikut:
Label: mengklasifikasikan jenis node dan tepi. Misalnya, siswa dalam suatu kelas mungkin memiliki label
Studentdan labelPerson. Jika Anda tidak secara eksplisit menentukan label untuk node atau edge, BigQuery Graph akan menggunakan nama tabel input sebagai label default.Properti: digunakan untuk mendeskripsikan node dan tepi. Misalnya, sebuah node yang merepresentasikan seseorang mungkin memiliki properti
namedengan nilaiAlexdan propertiiddengan nilai1.
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 berpindah 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.
Node
Personmencakup properti berikut:name(STRING)id(INT64)
Tepi
Transfersmencakup properti ini:amount(FLOAT64)
Tepi berarah dan tidak berarah
Bagian tepi Terarah menunjukkan arah tertentu dalam hubungan antar-entitas. Misalnya, seseorang memiliki akun, tetapi akun tidak memiliki seseorang. Namun, beberapa hubungan, seperti hubungan pertemanan di jejaring sosial, bersifat tidak terarah dan merepresentasikan koneksi timbal balik. Dalam hal ini, Anda dapat memodelkan tepi yang tidak berarah sebagai dua tepi berarah, satu tepi di setiap arah.
Mendesain skema
BigQuery Graph memungkinkan Anda menggunakan pernyataan
CREATE PROPERTY GRAPH
untuk membuat grafik dari tabel. Tabel yang membuat grafik disebut tabel input.
Menentukan node
Node ditentukan oleh baris dalam jenis tabel atau tampilan berikut:
- Tabel standar
- Tabel eksternal
- Tabel terkelola Apache Iceberg
- Tabel katalog REST Iceberg Lakehouse
- Tampilan, termasuk tampilan yang diotorisasi
- Tampilan terwujud non-inkremental
Untuk menentukan node, tambahkan definisi node di
klausa NODE TABLES.
Bentuk definisi node yang paling sederhana berisi nama tabel input
dengan kunci utama.
BigQuery 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.
-- Create an Account table.
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
-- Use the Account table as the input table for the Account node definition.
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Account
);
Secara default, BigQuery menggunakan nama tabel sebagai label dan mengekspos semua kolom dari tabel input sebagai properti.
- Setiap node akun menggunakan label
Account. - Setiap node akun menyertakan properti
iddancreate_timedari kolom tabelAccount.
Kunci elemen
Definisi node juga menentukan kunci elemen, kumpulan kolom yang secara unik mengidentifikasi node grafik. Secara default, kunci elemen adalah kunci utama tabel input.
Atau, Anda dapat menggunakan klausa KEY untuk menentukan kunci elemen secara eksplisit.
Contoh berikut menentukan node Account dan node Person. Node
Account menggunakan kunci utama tabel Account sebagai kunci elemennya.
Node Person secara eksplisit menentukan kolom id sebagai kunci
elemen dengan menggunakan klausa KEY.
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person KEY (id),
graph_db.Account
);
- 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.
Tabel input yang sama dapat digunakan dalam beberapa definisi node. Dalam kasus ini, baris tertentu dalam tabel input dipetakan ke satu node untuk setiap definisi node.
Menentukan tepi
Tepi ditentukan oleh baris dalam jenis tabel atau tampilan berikut:
- Tabel standar
- Tabel eksternal
- Tabel terkelola Apache Iceberg
- Tabel katalog REST Iceberg Lakehouse
- Tampilan, termasuk tampilan yang diotorisasi
- Tampilan terwujud non-inkremental
Untuk menentukan tepi, tambahkan definisi tepi ke
klausa EDGE TABLES.
Bentuk definisi edge yang paling sederhana berisi nama tabel input dan
menentukan referensi node sumber dan tujuan.
BigQuery Graph menggunakan definisi ini untuk memetakan baris dari
tabel input ke tepi grafik.
Secara default, BigQuery menggunakan nama tabel sebagai label dan mengekspos semua kolom dari tabel input sebagai properti.
- Kunci elemen setiap tepi ditentukan dengan cara yang sama seperti node.
Referensi node sumber dan tujuan
Definisi edge menentukan referensi node sumber dan tujuan menggunakan
klausa SOURCE KEY, DESTINATION KEY, dan REFERENCES.
Anda harus menentukan node sumber dan tujuan sebelum menggunakannya dalam
definisi tepi.
Dalam contoh berikut, Anda membuat grafik properti FinGraph dengan
berikut ini:
- Node
PersondanAccount - Tepi
PersonOwnAccount
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
FOREIGN KEY (account_id) REFERENCES graph_db.Account (id) NOT ENFORCED,
PRIMARY KEY (id, account_id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person,
graph_db.Account
)
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 tepi adalah node
Persondengan propertiidyang sama dengan propertiidtepi. - Node tujuan tepi adalah node
Accountdengan propertiidyang sama dengan propertiaccount_idtepi. - 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
PersonOwnAccountdefault.
Memetakan baris ke tepi
Setiap baris dalam tabel input tepi dengan kunci elemen non-null biasanya dipetakan ke satu tepi dalam grafik Anda. Namun, jika sumber atau referensi node tujuan cocok dengan nol atau lebih node dalam tabel node sumber atau tujuan, maka baris dalam tabel input edge dapat menghasilkan nol atau beberapa edge dalam grafik Anda.
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), kolom owner_id dapat menjadi kunci asing yang
mereferensikan tabel Person. Struktur ini memungkinkan tabel Account untuk merepresentasikan node Account dan edge masuk dari node Person.
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
PRIMARY KEY (id) NOT ENFORCED
);
-- Assume each account has exactly one owner.
CREATE TABLE graph_db.Account (
owner_id INT64 NOT NULL,
account_id INT64 NOT NULL,
FOREIGN KEY (owner_id) REFERENCES graph_db.Person(id) NOT ENFORCED,
PRIMARY KEY (owner_id, account_id) NOT ENFORCED
);
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 ke tabel Account. Hal ini karena setiap elemen dalam skema grafik harus memiliki nama
yang unik.
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person,
graph_db.Account
)
EDGE TABLES (
graph_db.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 node Person dengan properti kustom
dan node Account dengan beberapa label:
CREATE TABLE graph_db.Person (
id INT64 NOT NULL,
name STRING,
birthday TIMESTAMP,
country STRING,
city STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE TABLE graph_db.Account (
id INT64 NOT NULL,
create_time TIMESTAMP,
is_blocked BOOL,
nick_name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE PROPERTY GRAPH graph_db.FinGraph
NODE TABLES (
graph_db.Person KEY (id)
LABEL Customer
PROPERTIES (CONCAT(city, ", ", country) AS address)
LABEL Entity PROPERTIES (id, name),
graph_db.Account KEY (id)
DEFAULT LABEL OPTIONS(description = 'A checking or savings account')
PROPERTIES (id, create_time)
LABEL Entity
PROPERTIES (
id,
nick_name AS name OPTIONS(description = 'A user-defined account name',
synonyms = ['friendly name', 'display name'])
)
);
Node
Personmenggunakan labelCustomeruntuk menampilkan propertiaddress. Propertiaddressditentukan oleh ekspresiCONCAT(city, ", ", country),yang merujuk pada kolomcitydancountrydari tabel inputPerson.Node
Accountmenggunakan labelAccountuntuk menampilkan propertiiddancreate_time.
Node Person dan Account memiliki label Entity dengan properti
id dan name.
- Di node
Person, propertiiddannameberasal dari kolom tabel input. - Di node
Account, propertinamemerujuk pada kolomnick_nametabel input. - Di node
Account, propertinamemenggunakan klausaOPTIONSuntuk memberikan deskripsi properti dan daftar sinonim. Kolom ini memberikan konteks dan meningkatkan visibilitas untuk antarmuka kueri bahasa alami. Anda tidak dapat mengakses kolom ini secara langsung dalam kueri grafik dan kolom ini tidak mengubah hasil kueri dengan cara apa pun.
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 harus menggunakan jenis nilai yang sama.
- Label dengan nama yang sama harus menampilkan daftar properti yang sama.
Pada contoh sebelumnya, label Entity ditentukan di node Person dan
Account. Kedua definisi mencakup kumpulan nama properti yang sama, id
dan name, dengan jenis nilai yang identik.
Mengelola dependensi skema
Grafik bergantung pada skema tabel input ke definisi node dan edge, serta kolom tabel yang dirujuk oleh properti. Grafik BigQuery tidak memeriksa apakah penghapusan atau pengubahan tabel atau kolom membatalkan skema grafik yang ada.
Anda bertanggung jawab untuk menghindari perubahan skema yang merusak. Ikuti praktik terbaik berikut:
- Sebelum menghapus tabel yang digunakan dalam definisi node grafik, hapus terlebih dahulu definisi node tersebut dari grafik.
- Sebelum menghapus kolom dari tabel yang ditampilkan sebagai properti dalam grafik, hapus properti dari definisi node atau tepi yang sesuai.
Melihat skema grafik
Untuk melihat pernyataan CREATE PROPERTY GRAPH yang digunakan untuk membuat grafik yang ada, kueri tampilan
INFORMATION_SCHEMA.PROPERTY_GRAPHS:
SELECT
property_graph_name,
ddl
FROM
`region-REGION`.INFORMATION_SCHEMA.PROPERTY_GRAPHS;
Ganti REGION dengan region set data yang berisi
grafik.
Atau, Anda dapat memvisualisasikan skema grafik dalam notebook.
Memperbarui skema grafik
Untuk membuat perubahan pada skema grafik yang ada, Anda harus mendefinisikan ulang skema grafik menggunakan pernyataan CREATE PROPERTY GRAPH.
Menghapus skema grafik
Untuk menghapus grafik properti, gunakan
pernyataan DROP PROPERTY GRAPH.
Praktik terbaik
Bagian berikut menjelaskan praktik terbaik untuk menentukan skema grafik guna meningkatkan performa kueri grafik.
Mencakup definisi properti Anda
Properti adalah pasangan nilai kunci yang memberikan informasi tambahan yang dilampirkan ke
node atau tepi. Sebaiknya sertakan hanya properti yang diperlukan di node
atau tepi, dan hindari penggunaan sintaksis PROPERTIES ALL COLUMNS atau sintaksis
default yang melampirkan semua kolom dari tabel node atau tepi ke daftar
properti. Memiliki banyak properti di node atau tepi dapat menyebabkan pemindaian kolom yang tidak perlu dalam kueri grafik, yang menurunkan performa.
Untuk membatasi properti yang Anda sertakan dalam definisi node atau tepi, gunakan kata kunci PROPERTIES saat Anda menentukan properti elemen dalam pernyataan CREATE PROPERTY GRAPH.
Definisi tabel node berikut membatasi properti untuk tabel node Person ke id dan name:
NODE TABLES (
graph_db.Person PROPERTIES (id, name)
)
Menentukan batasan kunci utama dan kunci asing pada node dan tepi grafik
BigQuery dapat menggunakan batasan kunci primer dan asing pada tabel node dan edge untuk mengoptimalkan kueri grafik dengan mengurangi pemindaian tabel yang tidak perlu. Namun, BigQuery tidak menerapkan batasan kunci utama atau kunci asing pada tabel. Jika aplikasi Anda tidak dapat menjamin integritas referensial atau keunikan pada kunci utama, penggunaan kunci utama atau kunci asing untuk pengoptimalan kueri dapat menyebabkan hasil kueri yang salah.
Contoh berikut menentukan batasan kunci utama dan kunci asing pada tabel
node Person dan Account, serta tabel edge PersonOwnAccount:
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
);
Langkah berikutnya
- Pelajari lebih lanjut Grafik BigQuery.
- Pelajari cara membuat dan mengkueri grafik properti.
- Pelajari cara menulis kueri grafik.
- Pelajari lebih lanjut cara membuat grafik dengan ukuran.