Membuat dan mengelola aliran perubahan

Halaman ini menjelaskan cara membuat, mengubah, dan melihat aliran perubahan Spanner untuk database dialek GoogleSQL dan database dialek PostgreSQL. Untuk mempelajari aliran perubahan lebih lanjut, lihat Tentang aliran perubahan.

Karena merupakan objek skema, aliran perubahan dibuat dan dikelola melalui pembaruan skema yang didorong DDL yang sama yang digunakan untuk jenis pekerjaan definisi database lainnya, seperti membuat tabel atau menambahkan indeks.

Spanner memulai operasi yang berjalan lama setelah Anda mengirimkan pernyataan DDL yang mengubah skema, termasuk yang digunakan untuk membuat, mengubah, atau menghapus aliran perubahan. Aliran perubahan baru atau yang diubah mulai memantau kolom atau tabel yang ditentukan oleh konfigurasi barunya setelah selesainya operasi yang berjalan lama ini.

Membuat aliran perubahan

Untuk membuat aliran perubahan, Anda perlu memberikan namanya dan objek skema yang dipantaunya: seluruh database, atau daftar tabel dan kolom tertentu. Anda dapat secara opsional mengonfigurasi aliran perubahan dengan salah satu hal berikut:

GoogleSQL

Sintaksis DDL untuk membuat aliran perubahan menggunakan GoogleSQL terlihat seperti ini:

CREATE CHANGE STREAM CHANGE_STREAM_NAME
  [FOR column_or_table_watching_definition[, ... ] ]
  [
    OPTIONS (
      retention_period = timespan,
      value_capture_type = type,
      exclude_ttl_deletes = boolean,
      exclude_insert = boolean,
      exclude_update = boolean,
      exclude_delete = boolean,
      allow_txn_exclusion = boolean
    )
  ]

PostgreSQL

Sintaksis DDL untuk membuat aliran perubahan menggunakan PostgreSQL terlihat seperti ini:

CREATE CHANGE STREAM CHANGE_STREAM_NAME
  [FOR column_or_table_watching_definition[, ... ] ]
  [
    WITH (
      retention_period = timespan,
      value_capture_type = type,
      exclude_ttl_deletes = boolean,
      exclude_insert = boolean,
      exclude_update = boolean,
      exclude_delete = boolean,
      allow_txn_exclusion = boolean
    )
  ]

Aliran perubahan baru mulai memantau objek skema yang ditetapkan segera setelah operasi yang berjalan lama yang membuatnya selesai.

Contoh berikut menggambarkan pembuatan aliran perubahan dengan berbagai konfigurasi.

Memantau seluruh database

Untuk membuat aliran perubahan yang memantau setiap perubahan data yang dilakukan di seluruh tabel database, gunakan kata kunci ALL:

CREATE CHANGE STREAM EverythingStream
FOR ALL;

Konfigurasi ALL secara implisit mencakup semua tabel dan kolom data database di masa mendatang, segera setelah dibuat. Tabel ini tidak mencakup tampilan, tabel skema informasi, atau objek lain selain tabel data normal.

Memantau tabel tertentu

Untuk membatasi cakupan aliran perubahan ke tabel tertentu, bukan seluruh database, tentukan daftar satu atau beberapa tabel:

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

Spanner secara otomatis memperbarui perubahan aliran yang memantau seluruh tabel untuk mencerminkan perubahan skema apa pun yang memengaruhi tabel tersebut, seperti kolom yang ditambahkan atau dihapus.

Memantau kolom tertentu

Gunakan sintaksis table(column_1[, column_2, ...]) untuk memantau perubahan pada satu atau beberapa kolom non-kunci tertentu dalam tabel yang Anda beri nama:

CREATE CHANGE STREAM NamesAndTitles
FOR Singers(FirstName, LastName), Albums(Title);

Anda tidak dapat menentukan kolom kunci utama di sini karena setiap aliran perubahan selalu melacak kunci utama setiap tabel yang dipantaunya. Hal ini memungkinkan setiap rekaman perubahan data mengidentifikasi baris yang diubah berdasarkan kunci utamanya.

Memantau tabel dan kolom dalam satu aliran

Anda dapat menggabungkan sintaksis pemantauan tabel dan pemantauan kolom dari dua contoh sebelumnya dalam satu aliran perubahan:

CREATE CHANGE STREAM NamesAndAlbums
FOR Singers(FirstName, LastName), Albums;

Menentukan periode retensi yang lebih lama

Untuk menentukan periode retensi data aliran perubahan yang lebih lama dari default satu hari, tetapkan retention_period ke periode hingga tiga puluh hari, yang dinyatakan sebagai jam (h) atau hari (d).

Dua contoh:

GoogleSQL

CREATE CHANGE STREAM LongerDataRetention
FOR ALL
OPTIONS ( retention_period = '36h' );
CREATE CHANGE STREAM MaximumDataRetention
FOR ALL
OPTIONS ( retention_period = '7d' );

PostgreSQL

CREATE CHANGE STREAM LongerDataRetention
FOR ALL
WITH ( retention_period = '36h' );
CREATE CHANGE STREAM MaximumDataRetention
FOR ALL
WITH ( retention_period = '7d' );

Menentukan jenis pengambilan nilai yang berbeda

Untuk menentukan jenis pengambilan nilai aliran perubahan selain OLD_AND_NEW_VALUES, tetapkan value_capture_type ke NEW_VALUES atau NEW_ROW, seperti yang ditunjukkan dalam contoh berikut:

GoogleSQL

CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_VALUES' );

PostgreSQL

CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
WITH ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
WITH ( value_capture_type = 'NEW_VALUES' );

Memfilter penghapusan berbasis TTL

Anda dapat memfilter penghapusan berbasis TTL dari cakupan aliran perubahan menggunakan filter exclude_ttl_deletes.

Untuk mengetahui informasi selengkapnya tentang cara kerja filter ini, lihat Filter penghapusan berdasarkan time-to-live.

GoogleSQL

Untuk membuat aliran perubahan dengan filter penghapusan berbasis TTL, jalankan contoh berikut:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (exclude_ttl_deletes = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan baru Anda

Contoh berikut membuat aliran perubahan bernama NewFilterChangeStream yang mengecualikan semua penghapusan berbasis TTL:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_ttl_deletes = true)

PostgreSQL

Untuk membuat aliran perubahan dengan filter penghapusan berbasis TTL, jalankan contoh berikut:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (exclude_ttl_deletes = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan baru Anda

Contoh berikut membuat aliran perubahan bernama NewFilterChangeStream yang mengecualikan semua penghapusan berbasis TTL:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_ttl_deletes = true)

Untuk menambahkan atau menghapus filter penghapusan berbasis TTL dari aliran perubahan yang ada, lihat Mengubah filter penghapusan berbasis TTL. Anda dapat mengonfirmasi filter aliran perubahan dengan melihat definisi aliran perubahan sebagai DDL.

Memfilter menurut jenis modifikasi tabel

Filter satu atau beberapa modifikasi tabel ini dari cakupan aliran perubahan menggunakan opsi filter yang tersedia berikut:

  • exclude_insert: mengecualikan semua modifikasi tabel INSERT
  • exclude_update: mengecualikan semua modifikasi tabel UPDATE
  • exclude_delete: mengecualikan semua modifikasi tabel DELETE

Untuk mengetahui informasi selengkapnya tentang cara kerja filter ini, lihat Filter jenis modifikasi tabel.

GoogleSQL

Untuk membuat aliran perubahan dengan satu atau beberapa filter jenis modifikasi tabel, jalankan perintah berikut:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (MOD_TYPE_FILTER_NAME = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan baru Anda
  • MOD_TYPE_FILTER_NAME: filter yang ingin Anda tambahkan: exclude_insert, exclude_update, atau exclude_delete. Jika menambahkan lebih dari satu filter sekaligus, pisahkan setiap filter dengan koma.

Contoh berikut membuat aliran perubahan bernama NewFilterChangeStream yang mengecualikan jenis modifikasi tabel INSERT dan UPDATE:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_insert = true, exclude_update = true)

PostgreSQL

Untuk membuat aliran perubahan dengan satu atau beberapa filter jenis modifikasi tabel, jalankan perintah berikut:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (MOD_TYPE_FILTER_NAME = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan baru Anda
  • MOD_TYPE_FILTER_NAME: filter yang ingin Anda tambahkan: exclude_insert, exclude_update, atau exclude_delete. Jika menambahkan lebih dari satu filter sekaligus, pisahkan setiap filter dengan koma.

Contoh berikut membuat aliran perubahan bernama NewFilterChangeStream yang mengecualikan jenis modifikasi tabel INSERT dan UPDATE:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_insert = true, exclude_update = true)

Untuk menambahkan atau menghapus filter jenis modifikasi tabel dari aliran perubahan yang ada, lihat Mengubah filter menurut jenis modifikasi tabel. Anda dapat mengonfirmasi jenis modifikasi tabel yang ada untuk aliran perubahan dengan melihat definisi aliran perubahan sebagai DDL.

Mengaktifkan pengecualian data tingkat transaksi

Anda dapat mengaktifkan aliran perubahan untuk mengecualikan rekaman dari transaksi tulis tertentu dengan menyetel opsi allow_txn_exclusion saat membuat aliran perubahan, atau dengan mengubah aliran perubahan yang ada.

Untuk mengetahui informasi selengkapnya tentang cara kerja opsi ini, lihat Pengecualian data tingkat transaksi.

GoogleSQL

Untuk membuat aliran perubahan yang dapat mengecualikan rekaman dari transaksi tulis tertentu, jalankan perintah berikut:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (allow_txn_exclusion = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan baru

Contoh berikut membuat aliran perubahan bernama NewChangeStream yang dapat mengecualikan rekaman dari transaksi tulis tertentu:

CREATE CHANGE STREAM NewChangeStream FOR ALL
OPTIONS (allow_txn_exclusion = true)

PostgreSQL

Untuk membuat aliran perubahan yang dapat mengecualikan rekaman dari transaksi tulis tertentu, jalankan perintah berikut:

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (allow_txn_exclusion = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan baru

Contoh berikut membuat aliran perubahan bernama NewChangeStream yang dapat mengecualikan rekaman dari transaksi tulis yang ditentukan,:

CREATE CHANGE STREAM NewChangeStream FOR ALL
WITH (allow_txn_exclusion = true)

Untuk mengaktifkan atau menonaktifkan pengecualian rekaman tingkat transaksi dari aliran perubahan yang ada, lihat Mengubah pengecualian rekaman tingkat transaksi. Untuk memeriksa setelan opsi ini, lihat melihat definisi aliran perubahan sebagai DDL.

Menentukan transaksi tulis yang akan dikecualikan dari aliran perubahan

Untuk menentukan transaksi tulis yang akan dikecualikan dari aliran perubahan, Anda harus menetapkan parameter exclude_txn_from_change_streams ke true. Contoh kode berikut menunjukkan cara menentukan transaksi tulis yang akan dikecualikan dari aliran perubahan menggunakan library klien.

Go


import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/spanner"
)

// readWriteTxnExcludedFromChangeStreams executes the insert and update DMLs on
// Singers table excluded from tracking change streams with ddl option
// allow_txn_exclusion = true.
func readWriteTxnExcludedFromChangeStreams(w io.Writer, db string) error {
	// db = `projects/<project>/instances/<instance-id>/database/<database-id>`
	ctx := context.Background()
	client, err := spanner.NewClient(ctx, db)
	if err != nil {
		return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.NewClient: %w", err)
	}
	defer client.Close()

	_, err = client.ReadWriteTransactionWithOptions(ctx, func(ctx context.Context, txn *spanner.ReadWriteTransaction) error {
		stmt := spanner.Statement{
			SQL: `INSERT Singers (SingerId, FirstName, LastName)
					VALUES (111, 'Virginia', 'Watson')`,
		}
		_, err := txn.Update(ctx, stmt)
		if err != nil {
			return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.Update: %w", err)
		}
		fmt.Fprintln(w, "New singer inserted.")
		stmt = spanner.Statement{
			SQL: `UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111`,
		}
		_, err = txn.Update(ctx, stmt)
		if err != nil {
			return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.Update: %w", err)
		}
		fmt.Fprint(w, "Singer first name updated.")
		return nil
	}, spanner.TransactionOptions{ExcludeTxnFromChangeStreams: true})
	if err != nil {
		return err
	}
	return nil
}

Java

static void readWriteTxnExcludedFromChangeStreams(DatabaseClient client) {
  // Exclude the transaction from allowed tracking change streams with alloww_txn_exclusion=true.
  // This exclusion will be applied to all the individual operations inside this transaction.
  client
      .readWriteTransaction(Options.excludeTxnFromChangeStreams())
      .run(
          transaction -> {
            transaction.executeUpdate(
                Statement.of(
                    "INSERT Singers (SingerId, FirstName, LastName)\n"
                        + "VALUES (1341, 'Virginia', 'Watson')"));
            System.out.println("New singer inserted.");

            transaction.executeUpdate(
                Statement.of("UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111"));
            System.out.println("Singer first name updated.");

            return null;
          });
}

Mengubah aliran data perubahan

Untuk mengubah konfigurasi aliran perubahan, gunakan pernyataan DDL ALTER CHANGE STREAM. Fungsi ini menggunakan sintaksis yang mirip dengan CREATE CHANGE STREAM. Anda dapat mengubah kolom yang dipantau oleh aliran, atau durasi periode retensi datanya. Anda juga dapat menangguhkan penayangannya sepenuhnya sambil mempertahankan catatan perubahan datanya.

Mengubah apa yang dipantau oleh aliran perubahan

Contoh ini menambahkan seluruh tabel Songs ke aliran perubahan NamesAndAlbums yang dikonfigurasi sebelumnya:

ALTER CHANGE STREAM NamesAndAlbums
SET FOR Singers(FirstName, LastName), Albums, Songs;

Spanner mengganti perilaku aliran perubahan bernama dengan konfigurasi baru setelah selesainya operasi yang berjalan lama yang memperbarui definisi aliran perubahan dalam skema database.

Mengubah periode retensi data aliran perubahan

Untuk mengubah durasi waktu yang digunakan aliran perubahan untuk mempertahankan catatan internalnya, tetapkan retention_period dalam pernyataan DDL ALTER CHANGE STREAM.

Contoh ini menyesuaikan periode retensi data ke NamesAndAlbums aliran perubahan yang dibuat sebelumnya:

GoogleSQL

ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( retention_period = '36h' );

PostgreSQL

ALTER CHANGE STREAM NamesAndAlbums
SET ( retention_period = '36h' );

Mengubah jenis pengambilan nilai aliran perubahan

Untuk mengubah jenis pengambilan nilai aliran perubahan, tetapkan klausa value_capture_type dalam pernyataan DDL ALTER CHANGE STREAM.

Contoh ini menyesuaikan jenis pengambilan nilai menjadi NEW_VALUES.

GoogleSQL

ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( value_capture_type = 'NEW_VALUES' );

PostgreSQL

ALTER CHANGE STREAM NamesAndAlbums
SET ( value_capture_type = 'NEW_VALUES' );

Mengubah filter penghapusan berbasis TTL

Untuk mengubah filter penghapusan berbasis TTL untuk aliran perubahan, tetapkan filter exclude_ttl_deletes dalam pernyataan DDL ALTER CHANGE STREAM. Anda dapat menggunakan ini untuk menambahkan atau menghapus filter dari aliran perubahan yang ada.

Untuk mengetahui informasi selengkapnya tentang cara kerja filter ini, lihat Filter penghapusan berbasis time-to-live.

Menambahkan filter penghapusan berbasis TTL ke aliran perubahan yang ada

GoogleSQL

Untuk menambahkan filter penghapusan berbasis TTL ke aliran perubahan yang ada, jalankan perintah berikut untuk menyetel filter ke true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan yang ada

Dalam contoh berikut, filter exclude_ttl_deletes ditambahkan ke aliran perubahan yang ada bernama NewFilterChangeStream yang mengecualikan semua penghapusan berbasis TTL:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)

Tindakan ini mengecualikan semua penghapusan berbasis TTL mendatang dari aliran perubahan.

PostgreSQL

Untuk menambahkan filter penghapusan berbasis TTL ke aliran perubahan yang ada, jalankan perintah berikut untuk menyetel filter ke true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan yang ada

Dalam contoh berikut, filter exclude_ttl_deletes ditambahkan ke aliran perubahan yang ada bernama NewFilterChangeStream yang mengecualikan semua penghapusan berbasis TTL:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = true)

Tindakan ini mengecualikan semua penghapusan berbasis TTL mendatang dari aliran perubahan.

Menghapus filter penghapusan berbasis TTL dari aliran perubahan yang ada

GoogleSQL

Untuk menghapus filter penghapusan berbasis TTL ke aliran perubahan yang ada, jalankan perintah berikut untuk menyetel filter ke false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan baru Anda

Pada contoh berikut, filter exclude_ttl_deletes dihapus dari aliran perubahan yang ada bernama NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)

Hal ini mencakup semua penghapusan berbasis TTL mendatang ke aliran perubahan.

Anda juga dapat menyetel filter ke null untuk menghapus filter penghapusan berbasis TTL.

PostgreSQL

Untuk menghapus filter penghapusan berbasis TTL ke aliran perubahan yang ada, jalankan perintah berikut untuk menyetel filter ke false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = false)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan baru Anda

Pada contoh berikut, filter exclude_ttl_deletes dihapus dari aliran perubahan yang ada bernama NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = false)

Hal ini mencakup semua penghapusan berbasis TTL mendatang ke aliran perubahan.

Anda juga dapat menyetel filter ke null untuk menghapus filter penghapusan berbasis TTL.

Mengubah filter menurut jenis modifikasi tabel

Untuk mengubah filter jenis modifikasi tabel untuk aliran perubahan, tetapkan jenis filter dalam pernyataan DDL ALTER CHANGE STREAM. Anda dapat menggunakan ini untuk menambahkan filter baru ke atau menghapus filter yang ada dari aliran perubahan Anda.

Menambahkan filter jenis modifikasi tabel ke aliran perubahan yang ada

GoogleSQL

Untuk menambahkan satu atau beberapa filter jenis perubahan tabel baru ke aliran perubahan yang ada, jalankan perintah berikut untuk menyetel filter ke true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: ganti dengan nama aliran perubahan yang ada
  • MOD_TYPE_FILTER_NAME: ganti dengan filter yang ingin Anda tambahkan: exclude_insert, exclude_update, atau exclude_delete. Jika menambahkan lebih dari satu filter sekaligus, pisahkan setiap filter dengan koma.

Dalam contoh berikut, filter exclude_delete ditambahkan ke aliran perubahan yang ada bernama NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

Untuk menambahkan satu atau beberapa filter jenis perubahan tabel baru ke aliran perubahan yang ada, jalankan perintah berikut untuk menyetel filter ke true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: ganti dengan nama aliran perubahan yang ada
  • MOD_TYPE_FILTER_NAME: ganti dengan filter yang ingin Anda tambahkan: exclude_insert, exclude_update, atau exclude_delete. Jika menambahkan lebih dari satu filter sekaligus, pisahkan setiap filter dengan koma.

Dalam contoh berikut, filter exclude_delete ditambahkan ke aliran perubahan yang ada bernama NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

Menghapus filter jenis modifikasi tabel dari aliran perubahan yang ada

GoogleSQL

Untuk menghapus satu atau beberapa filter jenis modifikasi tabel yang ada di aliran perubahan, jalankan perintah berikut untuk menyetel filter ke false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: ganti dengan nama aliran perubahan yang ada
  • MOD_TYPE_FILTER_NAME: ganti dengan filter yang ingin Anda hapus: exclude_insert, exclude_update, atau exclude_delete. Jika menghapus lebih dari satu filter sekaligus, pisahkan setiap filter dengan koma.

Pada contoh berikut, filter exclude_delete dihapus dari aliran perubahan yang ada bernama NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)

Anda juga dapat menghapus filter modifikasi tabel dengan menyetel filter kembali ke nilai default. Untuk melakukannya, tetapkan nilai filter ke null.

PostgreSQL

Untuk menghapus satu atau beberapa filter jenis modifikasi tabel yang ada di aliran perubahan, jalankan perintah berikut untuk menyetel filter ke false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: ganti dengan nama aliran perubahan yang ada
  • MOD_TYPE_FILTER_NAME: ganti dengan filter yang ingin Anda hapus: exclude_insert, exclude_update, atau exclude_delete. Jika menghapus lebih dari satu filter sekaligus, pisahkan setiap filter dengan koma.

Pada contoh berikut, filter exclude_delete dihapus dari aliran perubahan yang ada bernama NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)

Anda juga dapat menghapus filter modifikasi tabel dengan menyetel filter kembali ke nilai default. Untuk melakukannya, tetapkan nilai filter ke null.

Memodifikasi aliran perubahan untuk memungkinkan pengecualian kumpulan data tingkat transaksi

Anda dapat mengubah aliran perubahan untuk memungkinkan aliran tersebut mengecualikan rekaman dari transaksi penulisan tertentu. Untuk melakukannya, tetapkan opsi allow_txn_exclusion ke true dalam pernyataan DDL ALTER CHANGE STREAM. Jika Anda tidak menyetel opsi ini, atau jika Anda menyetelnya ke false, maka aliran perubahan akan memantau semua transaksi tulis.

Untuk mengetahui informasi selengkapnya tentang cara kerja opsi ini, lihat Pengecualian data tingkat transaksi.

Mengaktifkan pengecualian rekaman tingkat transaksi untuk aliran perubahan yang ada

GoogleSQL

Untuk mengaktifkan pengecualian rekaman tingkat transaksi untuk aliran perubahan yang ada, jalankan perintah berikut:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan yang ada

Pada contoh berikut, opsi allow_txn_exclusion diaktifkan pada aliran perubahan yang ada, NewAllowedChangeStream:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = true)

Hal ini memungkinkan aliran perubahan mengecualikan rekaman dari transaksi penulisan yang ditentukan.

PostgreSQL

Untuk mengaktifkan pengecualian rekaman tingkat transaksi untuk aliran perubahan yang ada, jalankan perintah berikut:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = true)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan yang ada

Pada contoh berikut, opsi allow_txn_exclusion diaktifkan pada aliran perubahan yang ada, NewAllowedChangeStream:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = true)

Hal ini memungkinkan aliran perubahan mengecualikan rekaman dari transaksi penulisan yang ditentukan.

Menonaktifkan pengecualian rekaman tingkat transaksi untuk aliran perubahan yang ada

GoogleSQL

Untuk menonaktifkan pengecualian rekaman tingkat transaksi di aliran perubahan yang ada, jalankan perintah berikut:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = false)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan Anda

Pada contoh berikut, opsi allow_txn_exclusion dinonaktifkan pada aliran perubahan yang ada bernama NewAllowedChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = false)

Aliran perubahan memantau semua transaksi tulis.

PostgreSQL

Untuk menonaktifkan pengecualian rekaman tingkat transaksi di aliran perubahan yang ada, jalankan perintah berikut:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = false)

Ganti kode berikut:

  • CHANGE_STREAM_NAME: nama aliran perubahan Anda

Pada contoh berikut, opsi allow_txn_exclusion dinonaktifkan pada aliran perubahan yang ada bernama NewAllowedChangeStream:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = false)

Aliran perubahan memantau semua transaksi tulis.

Menangguhkan aliran perubahan

Jika Anda ingin menghentikan aktivitas aliran perubahan, tetapi mempertahankan catatan internalnya—setidaknya selama masa berlaku periode retensi datanya—Anda dapat mengubahnya sehingga tidak memantau apa pun.

Untuk melakukannya, keluarkan pernyataan DDL ALTER CHANGE STREAM yang menggantikan definisi aliran perubahannya dengan frasa khusus DROP FOR ALL. Contoh:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

Aliran terus ada di database, tetapi tidak memantau objek, dan tidak menghasilkan catatan perubahan data lebih lanjut. Catatan perubahannya yang ada tetap utuh, tunduk pada kebijakan retensi data stream.

Untuk melanjutkan streaming yang ditangguhkan, keluarkan pernyataan ALTER CHANGE STREAM lain dengan konfigurasi sebelumnya.

Menghapus aliran perubahan

Untuk menghapus aliran perubahan secara permanen, keluarkan pernyataan DROP CHANGE STREAM yang menyertakan nama aliran:

DROP CHANGE STREAM NamesAndAlbums;

Spanner akan segera menghentikan aliran, menghapusnya dari skema database, dan menghapus catatan perubahan datanya.

Mencantumkan dan melihat aliran perubahan

Konsol Google Cloud menyediakan antarmuka web untuk mencantumkan dan meninjau definisi aliran perubahan database. Anda juga dapat melihat struktur aliran perubahan sebagai pernyataan DDL yang setara, atau dengan mengirimkan kueri ke skema informasi untuk database.

Melihat aliran perubahan dengan konsol Google Cloud

Untuk melihat daftar aliran perubahan database dan meninjau definisinya:

  1. Buka halaman instance Spanner di konsolGoogle Cloud .

    Buka halaman instance

  2. Buka instance dan database yang sesuai.

  3. Klik Aliran perubahan di menu navigasi.

Tindakan ini akan menampilkan daftar semua aliran perubahan database tersebut, dan meringkas konfigurasi setiap aliran perubahan. Mengklik nama aliran akan menampilkan detail lebih lanjut tentang tabel dan kolom yang dipantaunya.

Melihat definisi aliran perubahan sebagai DDL

Melihat skema database sebagai DDL mencakup deskripsi semua aliran perubahannya, yang muncul sebagai pernyataan CREATE CHANGE STREAM.

Mengirim kueri skema informasi tentang aliran perubahan

Anda dapat langsung membuat kueri skema informasi database tentang aliran perubahannya. Tabel berikut berisi metadata yang menentukan nama aliran perubahan, tabel dan kolom yang dipantau, serta periode retensinya:

Praktik terbaik aliran data perubahan

Berikut adalah beberapa praktik terbaik untuk mengonfigurasi dan mengelola aliran perubahan.

Pertimbangkan database metadata terpisah

Aliran perubahan menggunakan database metadata untuk mempertahankan status internal. Database metadata dapat sama dengan atau berbeda dari database yang berisi aliran perubahan. Sebaiknya buat database terpisah untuk penyimpanan metadata.

Konektor aliran perubahan Spanner memerlukan izin baca-tulis ke database metadata. Anda tidak perlu menyiapkan database ini dengan skema; konektor akan menanganinya.

Penggunaan database metadata terpisah menghilangkan kompleksitas yang mungkin timbul karena mengizinkan konektor menulis langsung ke database aplikasi Anda:

  • Dengan memisahkan database metadata dari database produksi dengan aliran perubahan, konektor hanya memerlukan izin baca ke database produksi.

  • Dengan membatasi traffic konektor ke database metadata terpisah, operasi tulis yang dilakukan oleh konektor itu sendiri tidak disertakan dalam aliran perubahan produksi. Hal ini terutama relevan untuk aliran perubahan yang memantau seluruh database.

Jika tidak ada database terpisah yang digunakan untuk menyimpan metadata, sebaiknya pantau dampak CPU dari konektor aliran perubahan pada instance mereka.

Lakukan tolok ukur aliran perubahan baru dan ubah ukurannya jika diperlukan

Sebelum menambahkan aliran perubahan baru ke instance produksi, pertimbangkan untuk melakukan tolok ukur beban kerja yang realistis pada instance penyiapan dengan aliran perubahan yang diaktifkan. Dengan begitu, Anda dapat menentukan apakah Anda perlu menambahkan node ke instance untuk meningkatkan kapasitas komputasi dan penyimpanan.

Jalankan pengujian ini hingga metrik CPU dan penyimpanan stabil. Idealnya, pemakaian CPU instance harus tetap di bawah nilai maksimum yang direkomendasikan, dan penggunaan penyimpanannya tidak boleh melebihi batas penyimpanan instance.

Menggunakan region yang berbeda untuk load balancing

Saat menggunakan aliran perubahan dalam konfigurasi instance multi-region, pertimbangkan untuk menjalankan pipeline pemrosesannya di region yang berbeda dengan region pemimpin default. Hal ini membantu menyebarkan beban streaming di antara replika non-pemimpin. Namun, jika Anda perlu memprioritaskan penundaan streaming serendah mungkin daripada load balancing, jalankan beban streaming di region pemimpin.

Langkah berikutnya