Änderungsstreams erstellen und verwalten

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

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

Spanner startet einen langlaufenden Vorgang, nachdem Sie eine DDL-Anweisung zum Ändern des Schemas gesendet haben. Dazu gehören auch Anweisungen zum Erstellen, Ändern oder Löschen von Änderungsstreams. Ein neuer oder geänderter Änderungsstream beginnt nach Abschluss dieses langwierigen Vorgangs, die in der 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 überwacht werden sollen: entweder die gesamte Datenbank oder eine Liste bestimmter Tabellen und Spalten. Sie können einen Änderungsstream optional mit einer der folgenden Optionen konfigurieren:

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

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, die zugewiesenen Schemaobjekte zu beobachten, sobald der langlaufende Vorgang, durch den er erstellt wurde, abgeschlossen ist.

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

Eine ganze Datenbank ansehen

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

CREATE CHANGE STREAM EverythingStream
FOR ALL;

Die ALL-Konfiguration enthält implizit alle zukünftigen Datentabellen und ‑spalten der Datenbank, sobald sie erstellt werden. Außer normalen Datentabellen sind keine Ansichten, Informationsschematabellen oder anderen Objekte enthalten.

Bestimmte Tabellen beobachten

Wenn Sie den Umfang eines Änderungsstreams auf bestimmte Tabellen statt auf eine ganze 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 beobachten, um alle Schemaänderungen zu berücksichtigen, die sich auf diese Tabellen auswirken, z. B. hinzugefügte oder gelöschte Spalten.

Bestimmte Spalten beobachten

Mit der table(column_1[, column_2, ...])-Syntax können Sie Änderungen an einer oder mehreren bestimmten nicht primären Spalten in von Ihnen benannten Tabellen beobachten:

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

Hier können Sie keine Primärschlüsselspalten angeben, da jeder Änderungsstream immer die Primärschlüssel aller beobachteten Tabellen erfasst. So kann in jedem Datenänderungseintrag 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 die Tabellen- und Spaltenbeobachtung aus den beiden vorherigen Beispielen in einem einzigen Änderungsstream kombinieren:

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

Längere Aufbewahrungsdauer angeben

Wenn Sie eine Aufbewahrungsdauer für Änderungsstream-Daten festlegen möchten, die länger als der Standardzeitraum von einem Tag ist, legen Sie für retention_period einen Zeitraum von bis zu einer Woche fest, ausgedrückt in Stunden (h) oder Tagen (d).

Zwei Beispiele:

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

Einen anderen Werterfassungstyp angeben

Wenn Sie einen anderen Werterfassungstyp für den Änderungsstream 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:

CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_VALUES' );
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öschungen herausfiltern

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

Weitere Informationen zur Funktionsweise dieses Filters finden Sie unter Löschfilter auf Grundlage der Gültigkeitsdauer.

Führen Sie zum Erstellen eines Änderungsstreams mit dem TTL-basierten Löschfilter den folgenden Befehl aus:

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 namens NewFilterChangeStream erstellt, der alle TTL-basierten Löschvorgänge ausschließt:

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

Führen Sie zum Erstellen eines Änderungsstreams mit dem TTL-basierten Löschfilter den folgenden Befehl aus:

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 namens NewFilterChangeStream erstellt, der alle TTL-basierten Löschvorgänge ausschließt:

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

Informationen zum Hinzufügen oder Entfernen des TTL-basierten Löschfilters aus einem vorhandenen Änderungsstream finden Sie unter TTL-basierten Löschfilter ändern. Sie können die Filter des Änderungsstreams prüfen, indem Sie sich Definitionen des Änderungsstreams als DDL ansehen.

Nach Tabellenänderungstyp filtern

Mit den folgenden Filteroptionen können Sie eine oder mehrere dieser Tabellenänderungen aus dem Geltungsbereich Ihres Änderungsstreams herausfiltern:

  • 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 den Tabellenänderungstyp.

Wenn Sie einen Änderungsstream mit einem oder mehreren Filtern für den Tabellenänderungstyp erstellen möchten, führen Sie Folgendes aus:

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 namens NewFilterChangeStream erstellt, der die Tabellenänderungstypen INSERT und UPDATE ausschließt:

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

Wenn Sie einen Änderungsstream mit einem oder mehreren Filtern für den Tabellenänderungstyp erstellen möchten, führen Sie Folgendes aus:

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 namens NewFilterChangeStream erstellt, der die Tabellenänderungstypen INSERT und UPDATE ausschließt:

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. Welche Filter für den Tabellenänderungstyp für Ihren Änderungsstream vorhanden sind, können Sie in den Definitionen des Änderungsstreams als DDL-Code sehen.

Ausschluss von Einträgen auf Transaktionsebene aktivieren

Sie können in Ihren Änderungsstreams Datensätze aus bestimmten Schreibtransaktionen ausschließen. Dazu müssen Sie beim Erstellen eines Änderungsstreams die Option allow_txn_exclusion festlegen oder einen vorhandenen Änderungsstream ändern.

Weitere Informationen zur Funktionsweise dieser Option finden Sie unter Ausschluss von Einträgen auf Transaktionsebene.

Wenn Sie einen Änderungsstream erstellen möchten, der Einträge aus bestimmten Schreibtransaktionen ausschließen kann, führen Sie Folgendes aus:

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, der Einträge aus bestimmten Schreibtransaktionen ausschließen kann:

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

Wenn Sie einen Änderungsstream erstellen möchten, der Einträge aus bestimmten Schreibtransaktionen ausschließen kann, führen Sie Folgendes aus:

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, der Einträge aus bestimmten Schreibtransaktionen ausschließen kann:

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. In den folgenden Codebeispielen wird gezeigt, wie Sie mithilfe der Clientbibliothek eine Schreibtransaktion angeben, die aus Änderungsstreams ausgeschlossen werden soll.


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
}
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 ein Stream überwacht, und die Dauer der Datenaufbewahrungsdauer festlegen. Sie können die Datenaufzeichnung auch vollständig pausieren und dabei die Datenänderungsprotokolle beibehalten.

Was ein Änderungsstream beobachtet, ändern

In diesem Beispiel wird dem zuvor konfigurierten NamesAndAlbums-Änderungsstream die gesamte Tabelle Songs 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. Dadurch wird die Definition des Änderungsstreams im Schema der Datenbank aktualisiert.

Aufbewahrungsdauer für Daten eines Änderungsstreams ändern

Wenn Sie ändern möchten, wie lange die internen Datensätze eines Änderungsstreams aufbewahrt werden, legen Sie die retention_period in einer ALTER CHANGE STREAM-DDL-Anweisung fest.

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

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

Erfassungstyp für Werte eines Änderungsstreams ändern

Wenn Sie den Werterfassungstyp 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 Erfassungstyp für Werte auf NEW_VALUES angepasst.

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

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

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

Weitere Informationen zur Funktionsweise dieser Filter finden Sie unter Löschfilter auf Grundlage der Gültigkeitsdauer.

Filter für TTL-basierte Löschvorgänge einem vorhandenen Änderungsstream hinzufügen

Wenn Sie einem vorhandenen Änderungsstream den TTL-basierten Löschfilter hinzufügen möchten, führen Sie Folgendes 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: Name des 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.

Wenn Sie einem vorhandenen Änderungsstream den TTL-basierten Löschfilter hinzufügen möchten, führen Sie Folgendes 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: Name des 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-basierten Löschfilter aus einem vorhandenen Änderungsstream entfernen

Wenn Sie den TTL-basierten Löschfilter 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)

Dazu gehören alle zukünftigen TTL-basierten Löschvorgänge im Änderungsstream.

Sie können den Filter auch auf null setzen, um den TTL-basierten Löschfilter zu entfernen.

Wenn Sie den TTL-basierten Löschfilter 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)

Dazu gehören alle zukünftigen TTL-basierten Löschvorgänge im Änderungsstream.

Sie können den Filter auch auf null setzen, um den TTL-basierten Löschfilter zu entfernen.

Filter nach Art der Tabellenänderung ä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. So können Sie Ihrem Änderungsstream einen neuen Filter hinzufügen oder einen vorhandenen Filter daraus entfernen.

Einem vorhandenen Änderungsstream einen Filter für den Tabellenänderungstyp hinzufügen

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

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 Wert 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 den Tabellenänderungstyp aus einem vorhandenen Änderungsstream entfernen

Wenn Sie einen oder mehrere vorhandene Filter für den Tabellenänderungstyp im Änderungsstream entfernen möchten, führen Sie Folgendes 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 Wert 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 den Filter auf den Standardwert zurücksetzen. Legen Sie dazu den Filterwert auf null fest.

Wenn Sie einen oder mehrere vorhandene Filter für den Tabellenänderungstyp im Änderungsstream entfernen möchten, führen Sie Folgendes 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 Wert 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 den Filter auf den Standardwert zurücksetzen. Legen Sie dazu den Filterwert auf null fest.

Ä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. Legen Sie dazu in einer ALTER CHANGE STREAM-DDL-Anweisung die Option allow_txn_exclusion auf true fest. Wenn Sie diese Option nicht festlegen oder auf false setzen, überwacht der Änderungsstream alle Schreibtransaktionen.

Weitere Informationen zur Funktionsweise dieser Option finden Sie unter Ausschluss von Einträgen auf Transaktionsebene.

Ausschluss von Einträgen auf Transaktionsebene für einen vorhandenen Änderungsstream aktivieren

So aktivieren Sie den Ausschluss von Einträgen 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: Name des vorhandenen Änderungsstreams

Im folgenden Beispiel ist 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 im Änderungsstream Datensätze aus bestimmten Schreibtransaktionen ausgeschlossen werden.

So aktivieren Sie den Ausschluss von Einträgen 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: Name des vorhandenen Änderungsstreams

Im folgenden Beispiel ist 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 im Änderungsstream Datensätze aus bestimmten Schreibtransaktionen ausgeschlossen werden.

Ausschluss von Einträgen auf Transaktionsebene für einen vorhandenen Änderungsstream deaktivieren

So deaktivieren Sie den Ausschluss von Einträgen auf Transaktionsebene in einem vorhandenen Änderungsstream:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des Änderungsstreams

Im folgenden Beispiel ist 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.

So deaktivieren Sie den Ausschluss von Einträgen auf Transaktionsebene in einem vorhandenen Änderungsstream:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name des Änderungsstreams

Im folgenden Beispiel ist 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 pausieren

Wenn Sie möchten, dass ein Änderungsstream seine Aktivität beendet, aber seine internen Datensätze beibehält (zumindest für die Dauer der Aufbewahrungsdauer), können Sie ihn so ändern, dass er nichts überwacht.

Geben Sie dazu eine ALTER CHANGE STREAM-DDL-Anweisung aus, die die Definition des Änderungsstreams durch den speziellen Ausdruck DROP FOR ALL ersetzt. Beispiel:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

Der Stream bleibt in der Datenbank erhalten, überwacht aber keine Objekte und generiert keine weiteren Datenänderungseinträge. Die vorhandenen Änderungsdatensätze bleiben gemäß der Datenaufbewahrungsrichtlinie des Streams intakt.

Wenn du einen angehaltenen Stream fortsetzen möchtest, gib eine weitere ALTER CHANGE STREAM-Anweisung mit der vorherigen Konfiguration aus.

Ä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 Datenänderungsdatensätze.

Änderungsstreams auflisten und ansehen

Die Google Cloud Console bietet eine Weboberfläche, über die Sie die Definitionslisten für Änderungsstreams einer Datenbank aufrufen und prüfen können. 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 und ihre Definitionen auf:

  1. Rufen Sie in der Google Cloud Console die Seite „Spanner-Instanzen“ auf.

    Weiter zur Seite "Instanzen"

  2. Rufen Sie die entsprechende Instanz und Datenbank auf.

  3. Klicken Sie im Navigationsmenü auf Änderungsstreams.

Daraufhin wird eine Liste aller Änderungsstreams dieser Datenbank angezeigt und die Konfiguration jedes einzelnen wird zusammengefasst. Wenn Sie auf den Namen eines Streams klicken, werden weitere Details zu den Tabellen und Spalten angezeigt, die er beobachtet.

Definitionen von Änderungsstreams als DDL ansehen

Wenn Sie das Schema einer Datenbank als DDL aufrufen, sind darin Beschreibungen aller Änderungsstreams enthalten, die als CREATE CHANGE STREAM-Anweisungen angezeigt werden.

Informationsschema zu Änderungsstreams abfragen

Sie können das Informationsschema einer Datenbank direkt auf Änderungsstreams abfragen. Die folgenden Tabellen enthalten die Metadaten, die die Namen von Änderungsstreams, die beobachteten Tabellen und Spalten sowie die 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

Änderungsstreams verwenden eine Metadatendatenbank, um den internen Status aufrechtzuerhalten. 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 den Metadatenspeicher zu erstellen.

Der Spanner-Connector für Änderungsstreams benötigt Lese-/Schreibberechtigungen für die Metadatendatenbank. Sie müssen diese Datenbank nicht mit einem Schema vorbereiten. Das übernimmt der Connector.

Wenn Sie eine separate Metadatendatenbank verwenden, können Sie Probleme vermeiden, die durch das direkte Schreiben des Connectors in Ihre Anwendungsdatenbank entstehen können:

  • Da die Metadatenbank von der Produktionsdatenbank mit dem Änderungsstream getrennt ist, benötigt der Connector nur Leseberechtigungen für die Produktionsdatenbank.

  • Durch die Beschränkung des Traffics des Connectors auf eine separate Metadatendatenbank werden Schreibvorgänge, die vom Connector selbst ausgeführt werden, nicht in die Produktionsänderungsstreams aufgenommen. Das ist besonders relevant für Änderungsstreams, die die gesamte Datenbank beobachten.

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 als Benchmark verwenden und bei Bedarf die Größe anpassen

Bevor Sie Ihrer Produktionsinstanz neue Änderungsstreams hinzufügen, sollten Sie einen realistischen Arbeitslast-Benchmark auf einer Staging-Instanz mit aktivierten Änderungsstreams durchführen. So können Sie feststellen, ob Sie Ihrer Instanz Knoten hinzufügen müssen, um die Rechen- und Speicherkapazität zu erhöhen.

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

Unterschiedliche 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 Nicht-Leader-Replikate verteilt. Wenn Sie jedoch die geringstmögliche Streamingverzögerung vor dem Load Balancing priorisieren möchten, führen Sie die Streaminglast in der Hauptregion aus.

Nächste Schritte