Menyisipkan, memperbarui, atau menghapus data Spanner Graph

Dokumen ini menjelaskan cara memutasikan data di Grafik Spanner. Mutasi data grafik termasuk menyisipkan, memperbarui, dan menghapus {i>node<i} dan tepi dalam Grafik Spanner.

Spanner Graph memetakan data dari tabel ke node dan tepi grafik. Untuk memutasikan data dalam grafik, Anda harus memutasikan data dalam tabel input yang sesuai. Untuk selengkapnya informasi selengkapnya, lihat Ringkasan skema Spanner Graph.

Sebelum memulai

Menyiapkan dan membuat kueri Spanner Graph.

Menyisipkan node atau tepi

Untuk menyisipkan node atau tepi, gunakan Konsol Google Cloud, Google Cloud CLI, atau Library Klien Spanner untuk memasukkan baris ke dalam tabel {i>node<i} atau {i>edge<i}.

Di konsol Google Cloud dan di Google Cloud CLI, Anda dapat menggunakan SQL Bahasa Manipulasi Data (DML) yang akan disisipkan. Di Library Klien Spanner, Anda dapat menggunakan DML atau Mutation API.

Sebelum Anda memasukkan tepian, pastikan bahwa simpul sumber dan tujuan terhubung oleh tepi. Jika Anda memasukkan tepian ketika sumber atau tujuan yang terhubung oleh edge tidak ada, Anda mungkin mendapatkan referensi pelanggaran integritas. Untuk informasi selengkapnya, lihat Node sumber tidak ada melanggar hubungan INTERLEAVE IN dan Node tujuan tidak ada melanggar batasan kunci asing.

Contoh berikut menyisipkan node Account dan tepi Transfer ke dalam {i>graphic<i}:

Konsol

  1. Jalankan pernyataan di konsol Google Cloud.

  2. Di konsol Google Cloud, masukkan pernyataan DML berikut dan klik Run Query:

-- 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

  1. Menjalankan pernyataan dengan gcloud CLI.
  2. Di gcloud CLI, jalankan perintah berikut:
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --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 example-db --instance=test-instance \
    --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 example-db --instance=test-instance \
    --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 example-db --instance=test-instance \
    --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)"

Memperbarui node atau tepi

Untuk memperbarui node atau edge yang ada, gunakan Konsol Google Cloud, gcloud CLI, atau Library Klien Spanner.

Di Konsol Google Cloud dan di gcloud CLI, Anda dapat menggunakan Bahasa Manipulasi Data (DML) yang akan diperbarui. Di Library Klien Spanner, Anda dapat menggunakan DML atau Mutation API.

Contoh berikut memperbarui node Account dan edge Transfer di grafik.

Konsol

  1. Jalankan pernyataan di konsol Google Cloud.

  2. Di konsol Google Cloud, masukkan pernyataan DML berikut dan klik Run Query:

-- 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

  1. Menjalankan pernyataan dengan gcloud CLI.
  2. Di gcloud CLI, jalankan perintah berikut:
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="UPDATE Account SET is_blocked = false WHERE id = 2"
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="UPDATE AccountTransferAccount SET amount = 300 WHERE id = 1 AND to_id = 2"

Anda dapat menggabungkan kueri Grafik Spanner dengan pernyataan DML, seperti contoh berikut:

  -- 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
  }

Menghapus node atau edge

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 dapat menggunakan Bahasa Manipulasi Data (DML) yang akan dihapus. Di Library Klien Spanner, Anda dapat menggunakan DML atau Mutation API.

Sebelum menghapus node, pastikan tidak ada tepi yang merujuk ke node tersebut. Jika jenis tepi ini ada, Anda mungkin mendapat pelanggaran integritas referensial yang sama. Untuk informasi selengkapnya, lihat Edge keluar yang usang melanggar hubungan induk-turunan dan edge masuk yang usang melanggar hubungan induk-turunan.

Contoh berikut menghapus edge Transfer dan node Account dari grafik.

Konsol

  1. Jalankan pernyataan di konsol Google Cloud.
  2. Di konsol Google Cloud, masukkan pernyataan DML berikut, lalu klik Run Query:
-- Delete Transfer edge
DELETE FROM AccountTransferAccount
WHERE id = 1 AND to_id = 2;

-- Delete Account node
DELETE FROM Account WHERE id = 2;

gcloud

  1. Menjalankan pernyataan dengan gcloud CLI.
  2. Di gcloud CLI, jalankan perintah berikut:
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="DELETE FROM AccountTransferAccount WHERE id = 1 AND to_id = 2"
gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="DELETE FROM Account WHERE id = 2"

Anda dapat menggabungkan kueri Grafik Spanner dengan pernyataan DML, seperti 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
}

Opsi untuk mengubah data grafik

Anda dapat otomatis mengubah data grafik dengan cara berikut:

  • Hapus tepi pada grafik secara otomatis dengan menggunakan DI DELETE CASCADE tindakan.
  • Hapus node dan tepi pada grafik secara otomatis menggunakan metode TTL. Untuk informasi selengkapnya, lihat TTL pada node dan edge.

Untuk memperbarui secara massal dan menghapus node dan tepi dalam grafik secara efisien, gunakan DML yang dipartisi.

Langkah selanjutnya