Änderungsstreams erstellen und verwalten

Diese Seite beschreibt, wie man Spanner-Änderungsströme für GoogleSQL-Dialektdatenbanken und PostgreSQL-Dialektdatenbanken erstellt, ändert und anzeigt. Weitere Informationen zu Änderungsstreams finden Sie unter Änderungsstreams.

Da Änderungsströme Schemaobjekte sind, werden sie über die gleichen DDL-gesteuerten Schemaaktualisierungen erstellt und verwaltet, die auch für alle anderen Arten von Datenbankdefinitionsarbeiten verwendet werden, z. B. das Erstellen von Tabellen oder das Hinzufügen von Indizes.

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. Nach Abschluss dieses Vorgangs mit langer Ausführungszeit beginnt ein neuer oder geänderter Änderungsstrom, die in seiner neuen Konfiguration angegebenen Spalten oder Tabellen zu überwachen.

Änderungsstream erstellen

Um einen Änderungsstrom zu erstellen, müssen Sie dessen Namen und die Schemaobjekte angeben, die er überwacht: entweder die gesamte Datenbank oder eine Liste bestimmter Tabellen und Spalten. Optional können Sie einen Änderungsstrom mit 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 Änderungsstroms mit PostgreSQL sieht folgendermaßen 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 die Erstellung von Änderungsströmen mit verschiedenen Konfigurationen.

Eine gesamte Datenbank beobachten

Um einen Änderungsstrom zu erstellen, 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 implizit umfasst alle zukünftigen Datentabellen und Spalten der Datenbank, sobald diese erstellt werden. Sie umfasst nicht Ansichten, Informationsschematabellen oder andere Objekte außer normalen Datentabellen.

Bestimmte Tabellen beobachten

Um den Geltungsbereich eines Änderungsstroms auf bestimmte Tabellen anstatt auf die gesamte Datenbank zu beschränken, geben Sie eine Liste mit einer oder mehreren Tabellen an:

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

Schlüsselautomatische Aktualisierung Änderungsströme, die ganze Tabellen überwachen, um alle Schemaänderungen, die diese Tabellen betreffen, wie z. B. hinzugefügte oder gelöschte Spalten, widerzuspiegeln.

Beachten Sie bestimmte Spalten

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

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

Hier können keine Primärschlüsselspalten angegeben werden, da jeder Änderungsstream always die Primärschlüssel jeder Tabelle verfolgt, die er überwacht. Dadurch kann jeder Datensatz einer Datenänderung die geänderte Zeile anhand ihres Primärschlüssels identifizieren.

Tabellen und Spalten in einem einzigen Datenstrom beobachten

Sie können die Syntax für Tabellen- und Spaltenüberwachung aus den beiden vorherigen Beispielen in einem einzigen Änderungsstrom kombinieren:

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

Längeren Aufbewahrungszeitraum angeben

Um eine Aufbewahrungsfrist für Änderungsdatenströme festzulegen, die länger als die standardmäßige Dauer von sieben Tagen ist, stellen Sie retention_period auf einen Zeitraum von bis zu dreißig Tagen ein, ausgedrückt entweder in Stunden (h) oder in Tagen (d).

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 Typ für die Werterfassung angeben

Um einen anderen change stream value capture type als OLD_AND_NEW_VALUES anzugeben, setzen Sie value_capture_type auf NEW_VALUES oder NEW_ROW, 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' );

Filter TTL-basierte Löschungen

Sie können TTL-basierte Löschvorgänge aus dem Gültigkeitsbereich Ihres Änderungsstroms mit Hilfe des Filters exclude_ttl_deletes herausfiltern.

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

GoogleSQL

Um einen Änderungsstrom mit dem TTL-basierten Löschfilter zu erstellen, führen Sie das folgende Beispiel 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

Das folgende Beispiel erzeugt einen Änderungsstrom namens NewFilterChangeStream, der alle TTL-basierten Löschvorgänge ausschließt:

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

PostgreSQL

Um einen Änderungsstrom mit dem TTL-basierten Löschfilter zu erstellen, führen Sie das folgende Beispiel aus:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres 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 TTL-basierten Löschfilters aus einem bestehenden Änderungsstream finden Sie unter TTL-basierten Löschfilter ändern. Sie können Ihre Änderungsstromfilter überprüfen, indem Sie die Definitionen des Änderungsstroms als DDL anzeigen.

Nach Tabellenänderungstyp filtern

Filtern Sie eine oder mehrere dieser Tabellenänderungen aus dem Bereich Ihres Änderungsstreams heraus. Verwenden Sie dazu die folgenden verfügbaren 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 Tabellenmodifikationstypfilter.

GoogleSQL

Um einen Änderungsstrom mit einem oder mehreren Tabellenmodifikationstypfiltern zu erstellen, 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 Kommas.

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 Tabellenänderungstypen 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 Kommas.

Das folgende Beispiel erstellt einen Änderungsstrom namens NewFilterChangeStream, der die Tabellenmodifikationstypen 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 Tabellenmodifikationstypfilters aus einem bestehenden Änderungsstream finden Sie unter Filter nach Tabellenmodifikationstyp ä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 Änderungsströme so einstellen, dass Datensätze von bestimmten Schreibtransaktionen ausgeschlossen werden, indem Sie die Option allow_txn_exclusion beim Erstellen eines Änderungsstroms festlegen oder einen bestehenden Änderungsstrom ändern.

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

GoogleSQL

Um einen Änderungsstrom zu erstellen, der Datensätze von 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 Änderungsstroms

Das folgende Beispiel erstellt einen Änderungsstrom mit dem Namen NewChangeStream, der Datensätze von bestimmten Schreibtransaktionen ausschließen kann:

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

PostgreSQL

Um einen Änderungsstrom zu erstellen, der Datensätze von 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 Änderungsstroms

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 Transaktionsdatensätzen aus einem bestehenden Änderungsstrom finden Sie unter Ausschluss von Transaktionsdatensätzen ändern. Um die Einstellung dieser Option zu überprüfen, siehe view definitions of change streams as DDL.

Schreibtransaktion angeben, die aus Änderungsstreams ausgeschlossen werden soll

Um eine Schreibtransaktion von Änderungsströmen auszuschließen, müssen Sie den Parameter exclude_txn_from_change_streams auf true setzen. Die folgenden Codebeispiele zeigen, wie Sie mithilfe der Clientbibliothek eine Schreibtransaktion festlegen können, die von Änderungsströmen 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;
          });
}

Ändern eines Änderungsstroms

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 die Länge seiner Datenaufbewahrungsdauer. Sie können die Beobachtung auch vollständig unterbrechen, während die Datensatzänderungen beibehalten werden.

Ändern Sie, was ein Änderungsstrom beobachtet.

Dieses Beispiel fügt die gesamte Songs-Tabelle dem zuvor konfigurierten NamesAndAlbums-Änderungsstrom hinzu:

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

Spanner ersetzt das Verhalten des benannten Änderungsstreams durch die neue Konfiguration, sobald der Vorgang mit langer Ausführungszeit abgeschlossen ist, mit dem die Definition des Änderungsstreams im Schema der Datenbank aktualisiert wird.

Ändern der Datenaufbewahrungsdauer eines Änderungsstroms

Um die Dauer zu ändern, für die ein Änderungsstrom seine internen Datensätze behält, setzen Sie retention_period in einer ALTER CHANGE STREAM DDL-Anweisung.

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

GoogleSQL

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

PostgreSQL

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

Ändern des Werterfassungstyps eines Änderungsstroms

Um den Werterfassungstyp eines Änderungsstroms zu ändern, setzen Sie die value_capture_type-Klausel in einer ALTER CHANGE STREAM-DDL-Anweisung.

In diesem Beispiel wird der Typ der Wert-Erfassung 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.

Fügen Sie den TTL-basierten Löschfilter zu einem vorhandenen Änderungsstream hinzu.

GoogleSQL

Wenn Sie den Filter für TTL-basierte Löschvorgänge 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 bestehenden Ä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)

Dies schließt alle zukünftigen TTL-basierten Löschvorgänge aus dem Änderungsstrom aus.

PostgreSQL

Um den TTL-basierten Löschfilter zu einem bestehenden Änderungsstrom hinzuzufügen, führen Sie Folgendes aus, um den Filter auf true zu setzen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: der Name Ihres bestehenden Ä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)

Dies schließt alle zukünftigen TTL-basierten Löschvorgänge aus dem Änderungsstrom aus.

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

GoogleSQL

Um den TTL-basierten Löschfilter für einen bestehenden Änderungsstrom zu entfernen, führen Sie Folgendes aus, um den Filter auf false zu setzen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres 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)

Dies umfasst alle zukünftigen TTL-basierten Löschungen im Änderungsstrom.

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

PostgreSQL

Um den TTL-basierten Löschfilter für einen bestehenden Änderungsstrom zu entfernen, führen Sie Folgendes aus, um den Filter auf false zu setzen:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres 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)

Dies umfasst alle zukünftigen TTL-basierten Löschungen im Änderungsstrom.

Sie können den Filter auch auf null setzen, um den TTL-basierten Löschfilter 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. Hiermit können Sie einen neuen Filter zu Ihrem Änderungsstrom hinzufügen oder einen vorhandenen Filter daraus entfernen.

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

GoogleSQL

Um einem bestehenden Änderungsstrom einen oder mehrere neue Tabellenmodifikationstypfilter hinzuzufügen, führen Sie Folgendes aus, um den Filter auf true zu setzen:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Ersetzen Sie dies durch den Namen Ihres bestehenden Ä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 bestehenden Änderungsstrom namens NewFilterChangeStream hinzugefügt:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

Um einem bestehenden Änderungsstrom einen oder mehrere neue Tabellenmodifikationstypfilter hinzuzufügen, führen Sie Folgendes aus, um den Filter auf true zu setzen:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Ersetzen Sie dies durch den Namen Ihres bestehenden Ä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 bestehenden Änderungsstrom namens NewFilterChangeStream hinzugefügt:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

Entfernen eines Tabellenänderungstypfilters aus einem vorhandenen Änderungsstrom

GoogleSQL

Um einen oder mehrere vorhandene Tabellenmodifikationstypfilter im Änderungsstrom zu entfernen, führen Sie Folgendes aus, um den Filter auf false zu setzen:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Ersetzen Sie dies durch den Namen Ihres bestehenden Änderungsstreams.
  • MOD_TYPE_FILTER_NAME: Ersetzen Sie dies 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. Um dies zu tun, setzen Sie 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 zu setzen:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Ersetzen Sie dies durch den Namen Ihres bestehenden Änderungsstreams.
  • MOD_TYPE_FILTER_NAME: Ersetzen Sie dies 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. Um dies zu tun, setzen Sie den Filterwert auf null.

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

Sie können Ihren Änderungsstrom so modifizieren, dass Datensätze von bestimmten Schreibtransaktionen ausgeschlossen werden können. Setzen Sie dazu die Option allow_txn_exclusion in einer ALTER CHANGE STREAM-DDL-Anweisung auf true. 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.

Transaktionsdatensatzausschluss für einen bestehenden Änderungsstrom aktivieren

GoogleSQL

Um den Ausschluss von Datensätzen auf Transaktionsebene für einen bestehenden Änderungsstrom zu aktivieren, führen Sie Folgendes aus:

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

Um den Ausschluss von Datensätzen auf Transaktionsebene für einen bestehenden Änderungsstrom zu aktivieren, führen Sie Folgendes aus:

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)

Dies ermöglicht es dem Änderungsstrom, Datensätze von bestimmten Schreibtransaktionen auszuschließen.

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

GoogleSQL

Führen Sie Folgendes aus, um den Ausschluss von Datensätzen auf Transaktionsebene für einen vorhandenen Änderungsstream zu deaktivieren:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres Änderungsstroms

Im folgenden Beispiel ist die Option allow_txn_exclusion für einen bestehenden Änderungsstrom namens NewAllowedChangeStream deaktiviert:

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

Der Änderungsstrom überwacht alle Schreibtransaktionen.

PostgreSQL

Führen Sie Folgendes aus, um den Ausschluss von Datensätzen auf Transaktionsebene für einen vorhandenen Änderungsstream zu deaktivieren:

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

Ersetzen Sie Folgendes:

  • CHANGE_STREAM_NAME: Der Name Ihres Änderungsstroms

Im folgenden Beispiel ist die Option allow_txn_exclusion für einen bestehenden Änderungsstrom namens NewAllowedChangeStream deaktiviert:

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

Der Änderungsstrom überwacht alle Schreibtransaktionen.

Änderungsstream aussetzen

Wenn Sie möchten, dass ein Änderungsstrom seine Aktivität einstellt, aber seine internen Aufzeichnungen beibehält – zumindest für die Dauer seiner Datenaufbewahrungsfrist –, können Sie ihn so ändern, dass er nichts überwacht.

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

ALTER CHANGE STREAM MyStream DROP FOR ALL;

Der Datenstrom existiert weiterhin in der Datenbank, überwacht aber keine Objekte und generiert keine weiteren Datenänderungsdatensätze. Die vorhandenen Änderungsdatensätze bleiben gemäß der Datenaufbewahrungsrichtlinie 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

Um einen Änderungsstrom endgültig zu löschen, geben Sie eine DROP CHANGE STREAM-Anweisung ein, die den Namen des Stroms enthält:

DROP CHANGE STREAM NamesAndAlbums;

Spanner stoppt sofort den Datenstrom, entfernt ihn aus dem Datenbankschema und löscht seine Datenänderungsdatensätze.

Änderungsströme auflisten und anzeigen

Die Google Cloud console bietet eine Weboberfläche zum Auflisten und Überprüfen der Änderungsstromdefinitionen einer Datenbank. Sie können die Struktur der Änderungsströme auch als ihre entsprechenden DDL-Anweisungen anzeigen lassen oder indem Sie das Informationsschema der Datenbank abfragen.

Änderungsströme mit Google Cloud console anzeigen

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

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

    Weiter zur Seite "Instanzen"

  2. Navigieren Sie zur entsprechenden Instanz und Datenbank.

  3. Klicken Sie im Navigationsmenü auf Änderungsstreams.

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

  • Um dies über die Console zu tun, klicken Sie auf den Link Äquivalentes DDL anzeigen auf der Datenbankseite in der Google Cloud Konsole.

  • Verwenden Sie dazu in der Befehlszeile den Befehl ddl describe der Google Cloud CLI.

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 Änderungsströme

Im Folgenden finden Sie einige Best Practices zum Konfigurieren und Verwalten 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 Metadatenspeicherung anzulegen.

Der Connector für Spanner-Änderungsstreams benötigt Lese-/Schreibberechtigungen für die Metadatendatenbank. 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. Dies ist insbesondere relevant für Änderungsströme, 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 Änderungsströme analysieren und bei Bedarf skalieren

Bevor Sie neue Änderungsströme zu Ihrer Produktionsinstanz hinzufügen, sollten Sie eine realistische Arbeitslast auf einer Staging-Instanz mit aktivierten Änderungsströmen testen. Dies ermöglicht es Ihnen festzustellen, ob Sie Ihrer Instanz Knoten hinzufügen müssen, um deren Rechen- und Speicherkapazität zu erhöhen.

Führen Sie diese Tests so lange durch, bis sich die CPU- und Speicherauslastung stabilisiert hat. Optimalerweise sollte die CPU-Auslastung der Instanz unter demempfohlene Maximalwerte und die Speichernutzung sollte das Speicherlimit der Instanz nicht überschreiten.

Verwenden Sie verschiedene Regionen zum Lastausgleich.

Bei der Verwendung von Änderungsströmen in einer Multi-Region-Instanzkonfiguration sollten Sie in Erwägung ziehen, deren Verarbeitungspipelines in einer anderen Region als der Standard-Leader-Region auszuführen. Dies trägt dazu bei, die Streaming-Last auf die Nicht-Leader-Replikate zu verteilen. Wenn Sie jedoch die geringstmögliche Streaming-Verzögerung gegenüber dem Lastausgleich priorisieren müssen, führen Sie die Streaming-Last in der führenden Region aus.

Nächste Schritte