Änderungsstreams erstellen und verwalten

Auf dieser Seite wird beschrieben, wie Sie Spanner-Änderungsstreams für GoogleSQL- und PostgreSQL-Dialektdatenbanken erstellen, ändern und ansehen. Weitere Informationen zu Änderungsstreams finden Sie unter Änderungsstreams.

Da Änderungsstreams Schemaobjekte sind, werden sie mit denselben DDL-gesteuerten Schemaaktualisierungen erstellt und verwaltet, die für jede andere Art von Datenbankdefinition verwendet werden, z. B. zum Erstellen von Tabellen oder Hinzufügen von Indexen.

Spanner startet einen lang andauernden Vorgang, nachdem Sie eine DDL-Anweisung zum Ändern des Schemas gesendet haben, einschließlich der Anweisungen zum Erstellen, Ändern oder Löschen von Änderungsstreams. Ein neuer oder geänderter Änderungsstream beginnt nach Abschluss dieses Vorgangs mit langer Ausführungszeit, die in seiner neuen Konfiguration angegebenen Spalten oder Tabellen zu beobachten.

Änderungsstream erstellen

Wenn Sie einen Änderungsstream erstellen möchten, müssen Sie seinen Namen und die Schemaobjekte angeben, die er überwacht: entweder die gesamte Datenbank oder eine Liste bestimmter Tabellen und Spalten. Optional können Sie einen Änderungsstream mit einer der folgenden Optionen konfigurieren:

GoogleSQL

Die DDL-Syntax zum Erstellen eines Änderungsstreams mit GoogleSQL sieht so aus:

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

Die DDL-Syntax zum Erstellen eines Änderungsstreams mit PostgreSQL sieht so aus:

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

Ein neuer Änderungsstream beginnt mit der Überwachung der ihm zugewiesenen Schemaobjekte, sobald der zugehörige Vorgang mit langer Ausführungszeit abgeschlossen ist.

Die folgenden Beispiele veranschaulichen das Erstellen von Änderungsstreams mit verschiedenen Konfigurationen.

Eine gesamte Datenbank beobachten

Wenn Sie einen Änderungsstream erstellen möchten, der jede Datenänderung in den Tabellen einer Datenbank verfolgt, verwenden Sie das Schlüsselwort ALL:

CREATE CHANGE STREAM EverythingStream
FOR ALL;

Die ALL-Konfiguration umfasst implizit alle zukünftigen Datentabellen und ‑spalten der Datenbank, sobald sie erstellt werden. Sie umfasst nicht Ansichten, Informationsschematabellen oder andere Objekte außer normalen Datentabellen.

Bestimmte Tabellen beobachten

Wenn Sie den Umfang eines Änderungsstreams auf bestimmte Tabellen und nicht auf eine gesamte Datenbank beschränken möchten, geben Sie eine Liste mit einer oder mehreren Tabellen an:

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

Spanner aktualisiert automatisch Änderungsstreams, die ganze Tabellen überwachen, um alle Schemaänderungen zu berücksichtigen, die sich auf diese Tabellen auswirken, z. B. hinzugefügte oder gelöschte Spalten.

Bestimmte Spalten beobachten

Verwenden Sie die table(column_1[, column_2, ...])-Syntax, um Änderungen an einer oder mehreren bestimmten Spalten, die keine Schlüsselspalten sind, in Tabellen zu beobachten, die Sie benennen:

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

Sie können hier keine Primärschlüsselspalten angeben, da in jedem Änderungsstream immer die Primärschlüssel jeder Tabelle erfasst werden, die er überwacht. So kann in jedem Datensatz für Datenänderungen die geänderte Zeile anhand ihres Primärschlüssels identifiziert werden.

Tabellen und Spalten in einem einzigen Stream ansehen

Sie können die Syntax für das Beobachten von Tabellen und Spalten aus den beiden vorherigen Beispielen in einem einzelnen Änderungsstream kombinieren:

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

Längere Aufbewahrungsdauer angeben

Wenn Sie einen Aufbewahrungszeitraum für Änderungsstreamdaten angeben möchten, der länger als der Standardwert von einem Tag ist, legen Sie retention_period auf einen Zeitraum von bis zu 30 Tagen fest, der entweder in Stunden (h) oder Tagen (d) angegeben wird.

Zwei Beispiele:

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' );

Anderen Werterfassungstyp angeben

Wenn Sie einen anderen Erfassungstyp für Änderungsstreamwerte als OLD_AND_NEW_VALUES angeben möchten, legen Sie value_capture_type auf NEW_VALUES oder NEW_ROW fest, wie in den folgenden Beispielen gezeigt:

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' );

TTL-basierte Löschvorgänge filtern

Sie können TTL-basierte Löschvorgänge aus dem Umfang Ihres Änderungsstreams mit dem Filter exclude_ttl_deletes herausfiltern.

Weitere Informationen zur Funktionsweise dieses Filters finden Sie unter Filter für Löschvorgänge basierend auf der Gültigkeitsdauer.

GoogleSQL

Führen Sie das folgende Beispiel aus, um einen Änderungsstream mit dem Filter für TTL-basierte Löschvorgänge zu erstellen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des neuen Änderungsstreams

Im folgenden Beispiel wird ein Änderungsstream mit dem Namen NewFilterChangeStream erstellt, in dem alle TTL-basierten Löschvorgänge ausgeschlossen werden:

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

PostgreSQL

Führen Sie das folgende Beispiel aus, um einen Änderungsstream mit dem Filter für TTL-basierte Löschvorgänge zu erstellen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des neuen Änderungsstreams

Im folgenden Beispiel wird ein Änderungsstream mit dem Namen NewFilterChangeStream erstellt, in dem alle TTL-basierten Löschvorgänge ausgeschlossen werden:

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

Informationen zum Hinzufügen oder Entfernen des Filters für TTL-basierte Löschvorgänge aus einem vorhandenen Änderungsstream finden Sie unter Filter für TTL-basierte Löschvorgänge ändern. Sie können Ihre Änderungsstreamfilter bestätigen, indem Sie Definitionen des Änderungsstreams als DDL ansehen.

Nach Art der Tabellenänderung filtern

Sie können eine oder mehrere dieser Tabellenänderungen aus dem Bereich Ihres Änderungsstreams herausfiltern. Verwenden Sie dazu die folgenden Filteroptionen:

  • exclude_insert: Alle INSERT-Tabellenänderungen ausschließen
  • exclude_update: Alle UPDATE-Tabellenänderungen ausschließen
  • exclude_delete: Alle DELETE-Tabellenänderungen ausschließen

Weitere Informationen zur Funktionsweise dieser Filter finden Sie unter Filter für Tabellenänderungstypen.

GoogleSQL

Führen Sie Folgendes aus, um einen Änderungsstream mit einem oder mehreren Filtern für den Tabellenänderungstyp zu erstellen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des neuen Änderungsstreams
  • MOD_TYPE_FILTER_NAME: der Filter, den Sie hinzufügen möchten: exclude_insert, exclude_update oder exclude_delete. Wenn Sie mehrere Filter gleichzeitig hinzufügen, trennen Sie sie durch ein Komma.

Im folgenden Beispiel wird ein Änderungsstream mit dem Namen NewFilterChangeStream erstellt, in dem die Tabellenänderungstypen INSERT und UPDATE ausgeschlossen werden:

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

PostgreSQL

Führen Sie Folgendes aus, um einen Änderungsstream mit einem oder mehreren Filtern für den Tabellenänderungstyp zu erstellen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des neuen Änderungsstreams
  • MOD_TYPE_FILTER_NAME: der Filter, den Sie hinzufügen möchten: exclude_insert, exclude_update oder exclude_delete. Wenn Sie mehrere Filter gleichzeitig hinzufügen, trennen Sie sie durch ein Komma.

Im folgenden Beispiel wird ein Änderungsstream mit dem Namen NewFilterChangeStream erstellt, in dem die Tabellenänderungstypen INSERT und UPDATE ausgeschlossen werden:

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

Informationen zum Hinzufügen oder Entfernen eines Filters für den Tabellenänderungstyp aus einem vorhandenen Änderungsstream finden Sie unter Filter nach Tabellenänderungstyp ändern. Sie können bestätigen, welche Filter für Tabellenänderungstypen für Ihren Änderungsstream vorhanden sind, indem Sie Definitionen des Änderungsstreams als DDL ansehen.

Ausschluss von Datensätzen auf Transaktionsebene aktivieren

Sie können Ihre Änderungsstreams so konfigurieren, dass Datensätze aus bestimmten Schreibtransaktionen ausgeschlossen werden. Dazu legen Sie die Option allow_txn_exclusion fest, wenn Sie einen Änderungsstream erstellen, oder ändern einen vorhandenen Änderungsstream.

Weitere Informationen zur Funktionsweise dieser Option finden Sie unter Ausschluss von Datensätzen auf Transaktionsebene.

GoogleSQL

So erstellen Sie einen Änderungsstream, in dem Datensätze aus bestimmten Schreibtransaktionen ausgeschlossen werden können:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des neuen Änderungsstreams

Im folgenden Beispiel wird ein Änderungsstream mit dem Namen NewChangeStream erstellt, in dem Datensätze aus angegebenen Schreibtransaktionen ausgeschlossen werden können:

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

PostgreSQL

So erstellen Sie einen Änderungsstream, in dem Datensätze aus bestimmten Schreibtransaktionen ausgeschlossen werden können:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des neuen Änderungsstreams

Im folgenden Beispiel wird ein Änderungsstream mit dem Namen NewChangeStream erstellt, in dem Datensätze aus angegebenen Schreibtransaktionen ausgeschlossen werden können:

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

Informationen zum Aktivieren oder Deaktivieren des Ausschlusses von Datensätzen auf Transaktionsebene aus einem vorhandenen Änderungsstream finden Sie unter Ausschluss von Datensätzen auf Transaktionsebene ändern. Informationen zum Prüfen der Einstellung dieser Option finden Sie unter Definitionen von Änderungsstreams als DDL ansehen.

Schreibtransaktion angeben, die aus Änderungsstreams ausgeschlossen werden soll

Wenn Sie eine Schreibtransaktion angeben möchten, die aus Änderungsstreams ausgeschlossen werden soll, müssen Sie den Parameter exclude_txn_from_change_streams auf true festlegen. Die folgenden Codebeispiele zeigen, wie Sie mit der Clientbibliothek eine Schreibtransaktion angeben, die aus Änderungsstreams ausgeschlossen werden soll.

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

Änderungsstream ändern

Verwenden Sie eine ALTER CHANGE STREAM-DDL-Anweisung, um die Konfiguration eines Änderungsstreams zu ändern. Die Syntax ähnelt der von CREATE CHANGE STREAM. Sie können ändern, welche Spalten in einem Stream beobachtet werden oder wie lange die Daten aufbewahrt werden. Sie können die Beobachtung auch ganz aussetzen und trotzdem die Datensatzänderungen beibehalten.

Änderungsstream ändern

In diesem Beispiel wird die gesamte Songs-Tabelle dem zuvor konfigurierten NamesAndAlbums-Änderungsstream hinzugefügt:

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

Spanner ersetzt das Verhalten des benannten Änderungsstreams durch die neue Konfiguration, sobald der lang andauernde Vorgang abgeschlossen ist, der die Definition des Änderungsstreams im Schema der Datenbank aktualisiert.

Aufbewahrungsdauer für Daten eines Änderungsstreams ändern

Wenn Sie die Dauer ändern möchten, für die ein Änderungsstream seine internen Datensätze beibehält, legen Sie retention_period in einer ALTER CHANGE STREAM-DDL-Anweisung fest.

In diesem Beispiel wird die Datenaufbewahrungsdauer an den zuvor erstellten NamesAndAlbums-Änderungsstream angepasst:

GoogleSQL

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

PostgreSQL

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

Wertaufnahmetyp eines Änderungsstreams ändern

Wenn Sie den Typ der Werterfassung eines Änderungsstreams ändern möchten, legen Sie die value_capture_type-Klausel in einer ALTER CHANGE STREAM-DDL-Anweisung fest.

In diesem Beispiel wird der Typ der Wertfassung auf NEW_VALUES angepasst.

GoogleSQL

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

PostgreSQL

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

Filter für TTL-basierte Löschvorgänge ändern

Wenn Sie den Filter TTL-based deletes (Löschvorgänge basierend auf der TTL) für einen Änderungsstream ändern möchten, legen Sie den Filter exclude_ttl_deletes in einer ALTER CHANGE STREAM-DDL-Anweisung fest. Damit können Sie den Filter Ihren vorhandenen Änderungsstreams hinzufügen oder daraus entfernen.

Weitere Informationen zur Funktionsweise dieser Filter finden Sie unter Filter für Löschvorgänge basierend auf der Gültigkeitsdauer.

TTL-basierte Löschfilter einem vorhandenen Änderungsstream hinzufügen

GoogleSQL

Wenn Sie den TTL-basierten Löschfilter einem vorhandenen Änderungsstream hinzufügen möchten, führen Sie den folgenden Befehl aus, um den Filter auf true festzulegen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres vorhandenen Änderungsstreams.

Im folgenden Beispiel wird der Filter exclude_ttl_deletes einem vorhandenen Änderungsstream namens NewFilterChangeStream hinzugefügt, der alle TTL-basierten Löschvorgänge ausschließt:

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

Dadurch werden alle zukünftigen TTL-basierten Löschvorgänge aus dem Änderungsstream ausgeschlossen.

PostgreSQL

Wenn Sie den TTL-basierten Löschfilter einem vorhandenen Änderungsstream hinzufügen möchten, führen Sie den folgenden Befehl aus, um den Filter auf true festzulegen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres vorhandenen Änderungsstreams.

Im folgenden Beispiel wird der Filter exclude_ttl_deletes einem vorhandenen Änderungsstream namens NewFilterChangeStream hinzugefügt, der alle TTL-basierten Löschvorgänge ausschließt:

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

Dadurch werden alle zukünftigen TTL-basierten Löschvorgänge aus dem Änderungsstream ausgeschlossen.

TTL-basierte Löschfilter aus einem vorhandenen Änderungsstream entfernen

GoogleSQL

Wenn Sie den TTL-basierten Filter für Löschvorgänge aus einem vorhandenen Änderungsstream entfernen möchten, führen Sie den folgenden Befehl aus, um den Filter auf false festzulegen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des neuen Änderungsstreams

Im folgenden Beispiel wird der Filter exclude_ttl_deletes aus einem vorhandenen Änderungsstream namens NewFilterChangeStream entfernt:

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

Das gilt auch für alle zukünftigen TTL-basierten Löschvorgänge im Änderungsstream.

Sie können den Filter auch auf null setzen, um den Filter für TTL-basierte Löschvorgänge zu entfernen.

PostgreSQL

Wenn Sie den TTL-basierten Filter für Löschvorgänge aus einem vorhandenen Änderungsstream entfernen möchten, führen Sie den folgenden Befehl aus, um den Filter auf false festzulegen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des neuen Änderungsstreams

Im folgenden Beispiel wird der Filter exclude_ttl_deletes aus einem vorhandenen Änderungsstream namens NewFilterChangeStream entfernt:

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

Das gilt auch für alle zukünftigen TTL-basierten Löschvorgänge im Änderungsstream.

Sie können den Filter auch auf null setzen, um den Filter für TTL-basierte Löschvorgänge zu entfernen.

Filter nach Tabellenänderungstyp ändern

Wenn Sie die Filter für den Tabellenänderungstyp für einen Änderungsstream ändern möchten, legen Sie den Filtertyp in einer ALTER CHANGE STREAM-DDL-Anweisung fest. Damit können Sie Ihrem Änderungsstream einen neuen Filter hinzufügen oder einen vorhandenen Filter daraus entfernen.

Filter für den Typ der Tabellenänderung zu einem vorhandenen Änderungsstream hinzufügen

GoogleSQL

Wenn Sie einem vorhandenen Änderungsstream einen oder mehrere neue Filter für den Tabellenänderungstyp hinzufügen möchten, führen Sie den folgenden Befehl aus, um den Filter auf true festzulegen:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Ersetzen Sie diesen Parameter durch den Namen Ihres vorhandenen Änderungsstreams.
  • MOD_TYPE_FILTER_NAME: Ersetzen Sie diesen Platzhalter durch den Filter, den Sie hinzufügen möchten: exclude_insert, exclude_update oder exclude_delete. Wenn Sie mehrere Filter gleichzeitig hinzufügen, trennen Sie sie durch ein Komma.

Im folgenden Beispiel wird der Filter exclude_delete einem vorhandenen Änderungsstream namens NewFilterChangeStream hinzugefügt:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

Wenn Sie einem vorhandenen Änderungsstream einen oder mehrere neue Filter für den Tabellenänderungstyp hinzufügen möchten, führen Sie den folgenden Befehl aus, um den Filter auf true festzulegen:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Ersetzen Sie diesen Parameter durch den Namen Ihres vorhandenen Änderungsstreams.
  • MOD_TYPE_FILTER_NAME: Ersetzen Sie diesen Platzhalter durch den Filter, den Sie hinzufügen möchten: exclude_insert, exclude_update oder exclude_delete. Wenn Sie mehrere Filter gleichzeitig hinzufügen, trennen Sie sie durch ein Komma.

Im folgenden Beispiel wird der Filter exclude_delete einem vorhandenen Änderungsstream namens NewFilterChangeStream hinzugefügt:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

Filter für Tabellenänderungstyp aus einem vorhandenen Änderungsstream entfernen

GoogleSQL

Wenn Sie einen oder mehrere vorhandene Filter für den Tabellenänderungstyp im Änderungsstream entfernen möchten, führen Sie den folgenden Befehl aus, um den Filter auf false festzulegen:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Ersetzen Sie diesen Parameter durch den Namen Ihres vorhandenen Änderungsstreams.
  • MOD_TYPE_FILTER_NAME: Ersetzen Sie diesen Platzhalter durch den Filter, den Sie entfernen möchten: exclude_insert, exclude_update oder exclude_delete. Wenn Sie mehrere Filter gleichzeitig entfernen möchten, trennen Sie sie durch ein Komma.

Im folgenden Beispiel wird der Filter exclude_delete aus einem vorhandenen Änderungsstream namens NewFilterChangeStream entfernt:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)

Sie können einen Filter für Tabellenänderungen auch entfernen, indem Sie ihn auf den Standardwert zurücksetzen. Setzen Sie dazu den Filterwert auf null.

PostgreSQL

Wenn Sie einen oder mehrere vorhandene Filter für den Tabellenänderungstyp im Änderungsstream entfernen möchten, führen Sie den folgenden Befehl aus, um den Filter auf false festzulegen:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Ersetzen Sie diesen Parameter durch den Namen Ihres vorhandenen Änderungsstreams.
  • MOD_TYPE_FILTER_NAME: Ersetzen Sie diesen Platzhalter durch den Filter, den Sie entfernen möchten: exclude_insert, exclude_update oder exclude_delete. Wenn Sie mehrere Filter gleichzeitig entfernen möchten, trennen Sie sie durch ein Komma.

Im folgenden Beispiel wird der Filter exclude_delete aus einem vorhandenen Änderungsstream namens NewFilterChangeStream entfernt:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)

Sie können einen Filter für Tabellenänderungen auch entfernen, indem Sie ihn auf den Standardwert zurücksetzen. Setzen Sie dazu den Filterwert auf null.

Änderungsstream so ändern, dass Datensätze auf Transaktionsebene ausgeschlossen werden können

Sie können Ihren Änderungsstream so ändern, dass Datensätze aus bestimmten Schreibtransaktionen ausgeschlossen werden. Dazu legen Sie die Option allow_txn_exclusion in einer ALTER CHANGE STREAM-DDL-Anweisung auf true fest. Wenn Sie diese Option nicht festlegen oder auf false setzen, werden alle Schreibtransaktionen im Änderungsstream beobachtet.

Weitere Informationen zur Funktionsweise dieser Option finden Sie unter Ausschluss von Datensätzen auf Transaktionsebene.

Ausschluss von Datensätzen auf Transaktionsebene für einen vorhandenen Änderungsstream aktivieren

GoogleSQL

So aktivieren Sie den Ausschluss von Datensätzen auf Transaktionsebene für einen vorhandenen Änderungsstream:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres vorhandenen Änderungsstreams.

Im folgenden Beispiel wird die Option allow_txn_exclusion für einen vorhandenen Änderungsstream, NewAllowedChangeStream, aktiviert:

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

So können Datensätze aus bestimmten Schreibtransaktionen aus dem Änderungsstream ausgeschlossen werden.

PostgreSQL

So aktivieren Sie den Ausschluss von Datensätzen auf Transaktionsebene für einen vorhandenen Änderungsstream:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres vorhandenen Änderungsstreams.

Im folgenden Beispiel wird die Option allow_txn_exclusion für einen vorhandenen Änderungsstream, NewAllowedChangeStream, aktiviert:

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

So können Datensätze aus bestimmten Schreibtransaktionen aus dem Änderungsstream ausgeschlossen werden.

Ausschluss von Datensätzen auf Transaktionsebene für einen vorhandenen Änderungsstream deaktivieren

GoogleSQL

So deaktivieren Sie den Ausschluss von Datensätzen auf Transaktionsebene für einen vorhandenen Änderungsstream:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name Ihres Änderungsstreams

Im folgenden Beispiel wird die Option allow_txn_exclusion für einen vorhandenen Änderungsstream namens NewAllowedChangeStream deaktiviert:

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

Der Änderungsstream überwacht alle Schreibtransaktionen.

PostgreSQL

So deaktivieren Sie den Ausschluss von Datensätzen auf Transaktionsebene für einen vorhandenen Änderungsstream:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name Ihres Änderungsstreams

Im folgenden Beispiel wird die Option allow_txn_exclusion für einen vorhandenen Änderungsstream namens NewAllowedChangeStream deaktiviert:

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

Der Änderungsstream überwacht alle Schreibtransaktionen.

Änderungsstream aussetzen

Wenn Sie möchten, dass ein Änderungsstream seine Aktivität einstellt, aber seine internen Datensätze beibehält – zumindest für die Dauer des Aufbewahrungszeitraums –, können Sie ihn so ändern, dass er nichts überwacht.

Dazu müssen Sie eine ALTER CHANGE STREAM-DDL-Anweisung ausgeben, die die Definition des Änderungsstreams durch den speziellen Ausdruck DROP FOR ALL ersetzt. Beispiel:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

Der Stream ist weiterhin in der Datenbank vorhanden, beobachtet aber keine Objekte und generiert keine weiteren Datensatzänderungen. Die vorhandenen Änderungsdatensätze bleiben gemäß der Richtlinie zur Datenaufbewahrung des Streams erhalten.

Wenn Sie einen angehaltenen Stream fortsetzen möchten, geben Sie eine weitere ALTER CHANGE STREAM-Anweisung mit der vorherigen Konfiguration aus.

Einen Änderungsstream löschen

Wenn Sie einen Änderungsstream endgültig löschen möchten, geben Sie eine DROP CHANGE STREAM-Anweisung mit dem Namen des Streams aus:

DROP CHANGE STREAM NamesAndAlbums;

Spanner beendet den Stream sofort, entfernt ihn aus dem Schema der Datenbank und löscht die zugehörigen Datenänderungsdatensätze.

Änderungsstreams auflisten und ansehen

Die Google Cloud -Konsole bietet eine Weboberfläche zum Auflisten und Überprüfen der Change Stream-Definitionen einer Datenbank. Sie können sich die Struktur von Änderungsstreams auch als entsprechende DDL-Anweisungen ansehen oder das Informationsschema für die Datenbank abfragen.

Änderungsstreams mit der Google Cloud Console ansehen

So rufen Sie eine Liste der Änderungsstreams einer Datenbank auf und sehen sich ihre Definitionen an:

  1. Rufen Sie in derGoogle Cloud -Konsole die Seite „Spanner-Instanzen“ auf.

    Weiter zur Seite "Instanzen"

  2. Rufen Sie die entsprechende Instanz und Datenbank auf.

  3. Klicken Sie im Navigationsmenü auf Streams ändern.

Dadurch wird eine Liste aller Änderungsstreams der Datenbank angezeigt und die Konfiguration der einzelnen Streams wird zusammengefasst. Wenn Sie auf den Namen eines Streams klicken, werden weitere Details zu den Tabellen und Spalten angezeigt, die er überwacht.

Definitionen von Änderungsstreams als DDL ansehen

Wenn Sie das Schema einer Datenbank als DDL ansehen, werden Beschreibungen aller zugehörigen Änderungsstreams angezeigt, die als CREATE CHANGE STREAM-Anweisungen dargestellt werden.

Informationsschema zu Änderungsstreams abfragen

Sie können das Informationsschema einer Datenbank direkt nach ihren Änderungsstreams abfragen. Die folgenden Tabellen enthalten die Metadaten, die die Namen von Änderungsstreams, die Tabellen und Spalten, die sie beobachten, und ihre Aufbewahrungszeiträume definieren:

Best Practices für Änderungsstreams

Im Folgenden finden Sie einige Best Practices für die Konfiguration und Verwaltung von Änderungsstreams.

Separate Metadatendatenbank in Betracht ziehen

Für Änderungsstreams wird eine Metadatendatenbank verwendet, um den internen Status zu verwalten. Die Metadatendatenbank kann mit der Datenbank, die die Änderungsstreams enthält, identisch sein oder sich von ihr unterscheiden. Wir empfehlen, eine separate Datenbank für die Speicherung von Metadaten zu erstellen.

Der Connector für Spanner-Änderungsstreams benötigt Lese-/Schreibberechtigungen für die Metadatenbank. Sie müssen für diese Datenbank kein Schema erstellen, da dies vom Connector übernommen wird.

Durch die Verwendung einer separaten Metadatenbank werden Komplexitäten vermieden, die entstehen könnten, wenn der Connector direkt in Ihre Anwendungsdatenbank schreiben darf:

  • Durch die Trennung der Metadatendatenbank von der Produktionsdatenbank mit dem Änderungsstream benötigt der Connector nur Leseberechtigungen für die Produktionsdatenbank.

  • Wenn Sie den Traffic des Connectors auf eine separate Metadatendatenbank beschränken, werden Schreibvorgänge, die vom Connector selbst ausgeführt werden, nicht in die Produktionsänderungsstreams aufgenommen. Das ist besonders wichtig für Änderungsstreams, die die gesamte Datenbank überwachen.

Wenn keine separate Datenbank zum Speichern der Metadaten verwendet wird, empfehlen wir, die CPU-Auswirkungen des Connectors für Änderungsstreams auf die Instanzen zu beobachten.

Neue Änderungsstreams vergleichen und bei Bedarf die Größe anpassen

Bevor Sie Ihrer Produktionsinstanz neue Änderungsstreams hinzufügen, sollten Sie eine realistische Arbeitslast auf einer Staging-Instanz mit aktivierten Änderungsstreams testen. So können Sie feststellen, ob Sie Ihrer Instanz Knoten hinzufügen müssen, um ihre Rechen- und Speicherkapazität zu erhöhen.

Führen Sie diese Tests so lange aus, bis sich die CPU- und Speichermesswerte stabilisiert haben. Im Idealfall sollte die CPU-Auslastung der Instanz unter den empfohlenen Höchstwerten bleiben und die Speichernutzung das Speicherlimit der Instanz nicht überschreiten.

Verschiedene Regionen für das Load-Balancing verwenden

Wenn Sie Änderungsstreams in einer Konfiguration mit mehreren Regionen verwenden, sollten Sie die Verarbeitungspipelines in einer anderen Region als der standardmäßigen führenden Region ausführen. So wird die Streaminglast auf die Nicht-Leader-Replikate verteilt. Wenn Sie die geringstmögliche Streamingverzögerung gegenüber dem Load-Balancing priorisieren müssen, führen Sie die Streaminglast in der Leader-Region aus.

Nächste Schritte