Dokumen ini menunjukkan cara mengelola data dalam Spanner Graph dengan menyisipkan, memperbarui, dan menghapus node dan edge. Spanner Graph memetakan data dari tabel ke node dan tepi grafik. Untuk mengubah data dalam grafik, Anda harus mengubah data dalam tabel input yang sesuai.Anda dapat menggunakan konsol Google Cloud , Google Cloud CLI, atau library klien Spanner untuk mengelola data grafik.
Menyiapkan Spanner Graph
Sebelum dapat mengelola data di Spanner Graph, Anda harus menyiapkan Spanner Graph dengan melakukan hal berikut:
Buat database di instance Spanner Anda.
Sisipkan data grafik ke dalam database Anda.
Contoh di bagian ini menggunakan instance dan database yang Anda buat saat menyiapkan Spanner Graph dengan langkah-langkah sebelumnya.
Menyisipkan node atau tepi
Untuk menyisipkan node atau edge ke dalam tabel node atau edge, gunakan konsol Google Cloud , gcloud CLI, atau library klien Spanner.
Di konsol Google Cloud dan di gcloud CLI, Anda dapat menggunakan Bahasa Pengolahan Data (DML) GoogleSQL. Di library klien Spanner, Anda dapat menggunakan DML atau Mutation API.
Sebelum menyisipkan tepi, pastikan node sumber dan tujuan yang dihubungkan oleh tepi ada. Jika Anda menyisipkan tepi saat node sumber atau tujuan yang terhubung oleh tepi tidak ada, Anda mungkin mendapatkan error pelanggaran integritas referensial. Untuk mengetahui informasi selengkapnya, lihat Node sumber yang tidak ada melanggar hubungan INTERLEAVE IN dan Node tujuan yang tidak ada melanggar batasan kunci asing.
Contoh berikut menyisipkan node Account
dan edge Transfer
ke dalam
database yang Anda buat di Menyiapkan Spanner Graph.
Konsol
Di konsol Google Cloud , jalankan pernyataan DML berikut. Untuk informasi selengkapnya, lihat Menjalankan pernyataan di konsol Google Cloud .
-- Insert 2 Account nodes.
INSERT INTO Account (id, create_time, is_blocked)
VALUES (1, CAST('2000-08-10 08:18:48.463959-07:52' AS TIMESTAMP), false);
INSERT INTO Account (id, create_time, is_blocked)
VALUES (2, CAST('2000-08-12 07:13:16.463959-03:41' AS TIMESTAMP), true);
-- Insert 2 Transfer edges.
INSERT INTO AccountTransferAccount (id, to_id, create_time, amount)
VALUES (1, 2, CAST('2000-09-11 03:11:18.463959-06:36' AS TIMESTAMP), 100);
INSERT INTO AccountTransferAccount (id, to_id, create_time, amount)
VALUES (1, 1, CAST('2000-09-12 04:09:34.463959-05:12' AS TIMESTAMP), 200);
gcloud
Di gcloud CLI, jalankan perintah berikut. Untuk mengetahui informasi selengkapnya, lihat Menjalankan pernyataan dengan gcloud CLI.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO Account (id, create_time, is_blocked) VALUES (1, CAST('2000-08-10 08:18:48.463959-07:52' AS TIMESTAMP), false)"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO Account (id, create_time, is_blocked) VALUES (2, CAST('2000-08-12 07:13:16.463959-03:41' AS TIMESTAMP), true)"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO AccountTransferAccount (id, to_id, create_time, amount) VALUES (1, 2, CAST('2000-09-11 03:11:18.463959-06:36' AS TIMESTAMP), 100)"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="INSERT INTO AccountTransferAccount (id, to_id, create_time, amount) VALUES (1, 1, CAST('2000-09-12 04:09:34.463959-05:12' AS TIMESTAMP), 200)"
Ganti kode berikut:
- DATABASE_NAME: nama database Anda.
- INSTANCE_NAME: nama instance Anda.
Library klien
Python
Java
Go
C++
Memperbarui node atau tepi
Untuk memperbarui node atau edge yang ada, gunakan konsolGoogle Cloud , gcloud CLI, atau library klien Spanner.
Anda dapat memperbarui node atau edge yang ada menggunakan pernyataan Bahasa Pengolahan Data (DML) GoogleSQL, atau kueri Spanner Graph dengan pernyataan DML. Jika menggunakan library klien Spanner, Anda juga dapat menggunakan Mutation API.
Memperbarui node atau tepi dengan DML
Contoh berikut menggunakan DML untuk memperbarui node Account
dan edge Transfer
yang Anda tambahkan di Menyisipkan node atau edge.
Konsol
Di konsol Google Cloud , jalankan pernyataan DML berikut. Untuk informasi selengkapnya, lihat Menjalankan pernyataan di konsol Google Cloud .
-- Update Account node
UPDATE Account SET is_blocked = false WHERE id = 2;
-- Update Transfer edge
UPDATE AccountTransferAccount
SET amount = 300
WHERE id = 1 AND to_id = 2;
gcloud
- Jalankan pernyataan dengan gcloud CLI.
- Di gcloud CLI, jalankan perintah berikut:
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE Account SET is_blocked = false WHERE id = 2"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2"
Ganti kode berikut:
- DATABASE_NAME: nama database Anda.
- INSTANCE_NAME: nama instance Anda.
Library klien
Python
Java
Go
C++
Memperbarui node atau tepi dengan kueri grafik dan DML
Contoh berikut menggunakan kueri Spanner Graph dengan DML untuk memperbarui node Account
dan edge Transfer
yang Anda tambahkan di Menyisipkan node atau edge.
Konsol
Di konsol Google Cloud , jalankan pernyataan DML berikut. Untuk informasi selengkapnya, lihat Menjalankan pernyataan di konsol Google Cloud .
-- Use Graph pattern matching to identify Account nodes to update:
UPDATE Account SET is_blocked = false
WHERE id IN {
GRAPH FinGraph
MATCH (a:Account WHERE a.id = 1)-[:Transfers]->{1,2}(b:Account)
RETURN b.id
}
gcloud
Di gcloud CLI, jalankan perintah berikut. Untuk mengetahui informasi selengkapnya, lihat Menjalankan pernyataan dengan gcloud CLI.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE_NAME \ --sql="UPDATE Account SET is_blocked = false"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2" --sql=" WHERE id IN { GRAPH FinGraph MATCH (a:Account WHERE a.id = 1)-[:Transfers]->{1,2}(b:Account) RETURN b.id }"
Ganti kode berikut:
- DATABASE_NAME: nama database Anda.
- INSTANCE_NAME: nama instance Anda.
Library klien
Python
Java
Go
C++
Menghapus node atau tepi
Untuk menghapus node atau edge yang ada, gunakan konsol Google Cloud , gcloud CLI, atau library klien Spanner.
Di konsol Google Cloud dan gcloud CLI, Anda menggunakan Bahasa Pengolahan Data (DML) GoogleSQL untuk menghapus. Di library klien Spanner, Anda dapat menggunakan DML atau Mutation API untuk menghapus node atau edge.
Untuk mencegah error pelanggaran integritas referensial, pastikan tidak ada tepi yang merujuk ke node saat Anda menghapus node. Untuk mengetahui informasi selengkapnya, lihat Edge keluar yang tidak memiliki induk melanggar hubungan induk-turunan dan Edge masuk yang tidak memiliki induk melanggar hubungan induk-turunan.
Contoh berikut menghapus tepi Transfer
dan node Account
dari
grafik.
Konsol
Di konsol Google Cloud , jalankan pernyataan DML berikut. Untuk informasi selengkapnya, lihat Menjalankan pernyataan di konsol Google Cloud .
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;
-- Delete Account node
DELETE FROM Account WHERE id = 2;
gcloud
Di gcloud CLI, jalankan perintah berikut. Untuk mengetahui informasi selengkapnya, lihat Menjalankan pernyataan dengan gcloud CLI.
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2"
gcloud spanner databases execute-sql DATABASE-NAME --instance=INSTANCE-NAME \ --sql="DELETE FROM Account WHERE id = 2"
Ganti kode berikut:
- DATABASE_NAME: nama database Anda.
- INSTANCE_NAME: nama instance Anda.
Library klien
Python
Java
Go
C++
Anda dapat menggabungkan kueri Spanner Graph dengan pernyataan DML, seperti yang ditunjukkan dalam contoh berikut:
-- Use Graph pattern matching to identify Account nodes to delete:
DELETE FROM AccountTransferAccount
WHERE id IN {
GRAPH FinGraph
MATCH (a:Account WHERE a.id = 1)-[:Transfers]->(b:Account)
RETURN b.id
}
Operasi data otomatis dan massal
Selain menggunakan DML untuk menyisipkan, memperbarui, dan menghapus node dan tepi individual, Anda juga dapat menggunakan metode berikut untuk mengelola data Grafik Spanner:
Anda dapat mengotomatiskan penghapusan tepi dalam grafik menggunakan tindakan ON DELETE CASCADE.
Anda dapat mengotomatiskan penghapusan node dan edge dalam grafik menggunakan kebijakan TTL. Untuk mengetahui informasi selengkapnya, lihat TTL pada node dan edge.
Memperbarui dan menghapus node dan edge secara massal dengan efisien dalam grafik menggunakan DML yang dipartisi.
Langkah berikutnya
- Baca ringkasan kueri Spanner Graph.
- Pelajari praktik terbaik untuk menyesuaikan kueri Spanner Graph.