Creare e gestire i flussi di modifiche

Questa pagina descrive come creare, modificare e visualizzare gli stream di modifiche di Spanner per i database con dialetto GoogleSQL e PostgreSQL. Per scoprire di più sui modifiche in tempo reale, consulta la sezione Informazioni sui flussi di modifiche.

Poiché modifiche in tempo reale sono oggetti schema, li crei e li gestisci tramite gli stessi aggiornamenti dello schema basati su DDL utilizzati per qualsiasi altro tipo di lavoro di definizione del database, come la creazione di tabelle o l'aggiunta di indici.

Spanner avvia un'operazione a lunga esecuzione dopo l'invio di un'istruzione DDL che modifica lo schema, incluse quelle utilizzate per creare, modificare o eliminare modifiche in tempo reale. Un flusso di modifiche nuovo o modificato inizia a monitorare le colonne o le tabelle specificate dalla nuova configurazione al termine di questa operazione a lunga esecuzione.

Crea un flusso di modifiche

Per creare uno stream di modifiche, devi fornire il nome e gli oggetti dello schema che monitora: l'intero database o un elenco di tabelle e colonne specifiche. Facoltativamente, puoi configurare uno stream delle modifiche con uno dei seguenti elementi:

GoogleSQL

La sintassi DDL per creare uno stream di modifiche utilizzando GoogleSQL è la seguente:

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

La sintassi DDL per creare uno stream di modifiche utilizzando PostgreSQL è la seguente:

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

Un nuovo flusso di modifiche inizia a monitorare gli oggetti schema assegnati non appena viene completata l'operazione a lunga esecuzione che lo ha creato.

I seguenti esempi illustrano la creazione di modifiche in tempo reale con varie configurazioni.

Guarda un intero database

Per creare un flusso di modifiche che monitora ogni modifica dei dati eseguita nelle tabelle di un database, utilizza la parola chiave ALL:

CREATE CHANGE STREAM EverythingStream
FOR ALL;

La configurazione ALL include implicitamente tutte le tabelle e le colonne di dati future del database, non appena vengono create. Non include viste, tabelle dello schema informativo o altri oggetti diversi dalle normali tabelle di dati.

Guarda tabelle specifiche

Per limitare l'ambito di un flusso di modifiche a tabelle specifiche, anziché a un intero database, specifica un elenco di una o più tabelle:

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

Spanner aggiorna automaticamente i flussi di modifiche che monitorano intere tabelle per riflettere eventuali modifiche dello schema che interessano queste tabelle, ad esempio colonne aggiunte o eliminate.

Monitorare colonne specifiche

Utilizza la sintassi table(column_1[, column_2, ...]) per monitorare le modifiche a una o più colonne specifiche non chiave all'interno delle tabelle che specifichi:

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

Non puoi specificare le colonne della chiave primaria qui perché ogni stream di modifiche traccia sempre le chiavi primarie di ogni tabella che monitora. In questo modo, ogni record di modifica dei dati può identificare la riga modificata in base alla relativa chiave primaria.

Visualizzare tabelle e colonne in un unico stream

Puoi combinare la sintassi di monitoraggio delle tabelle e delle colonne dei due esempi precedenti in un unico flusso di modifiche:

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

Specificare un periodo di conservazione più lungo

Per specificare un periodo di conservazione dei dati dello stream di modifiche superiore al valore predefinito di un giorno, imposta retention_period su un periodo fino a 30 giorni, espresso in ore (h) o giorni (d).

Due esempi:

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

Specificare un tipo di acquisizione valore diverso

Per specificare un tipo di acquisizione del valore dello stream di modifiche diverso da OLD_AND_NEW_VALUES, imposta value_capture_type su NEW_VALUES o NEW_ROW, come mostrato negli esempi seguenti:

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

Filtrare le eliminazioni basate sul TTL

Puoi filtrare le eliminazioni basate sul TTL dall'ambito dello stream di modifiche utilizzando il filtro exclude_ttl_deletes.

Per saperne di più sul funzionamento di questo filtro, consulta Filtro per eliminazioni basate sul time to live.

GoogleSQL

Per creare uno stream di modifiche con il filtro delle eliminazioni basato sul TTL, esegui il seguente esempio:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome del nuovo stream di modifiche

L'esempio seguente crea un flusso di modifiche denominato NewFilterChangeStream che esclude tutte le eliminazioni basate su TTL:

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

PostgreSQL

Per creare uno stream di modifiche con il filtro delle eliminazioni basato sul TTL, esegui il seguente esempio:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome del nuovo flusso di modifiche

L'esempio seguente crea un flusso di modifiche denominato NewFilterChangeStream che esclude tutte le eliminazioni basate su TTL:

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

Per aggiungere o rimuovere il filtro delle eliminazioni basate sul TTL da un flusso di modifiche esistente, consulta Modificare il filtro delle eliminazioni basate sul TTL. Puoi confermare i filtri dello stream di modifiche visualizzando le definizioni dello stream di modifiche come DDL.

Filtra per tipo di modifica della tabella

Filtra una o più di queste modifiche alla tabella dall'ambito del flusso di modifiche utilizzando le seguenti opzioni di filtro disponibili:

  • exclude_insert: escludi tutte le modifiche alla tabella INSERT
  • exclude_update: escludi tutte le modifiche alla tabella UPDATE
  • exclude_delete: escludi tutte le modifiche alla tabella DELETE

Per saperne di più sul funzionamento di questi filtri, consulta Filtri per tipo di modifica della tabella.

GoogleSQL

Per creare uno stream delle modifiche con uno o più filtri per il tipo di modifica della tabella, esegui questo comando:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome del nuovo stream di modifiche
  • MOD_TYPE_FILTER_NAME: il filtro che vuoi aggiungere: exclude_insert, exclude_update o exclude_delete. Se aggiungi più di un filtro alla volta, separali con una virgola.

L'esempio seguente crea un flusso di modifiche denominato NewFilterChangeStream che esclude i tipi di modifica delle tabelle INSERT e UPDATE:

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

PostgreSQL

Per creare uno stream delle modifiche con uno o più filtri per il tipo di modifica della tabella, esegui questo comando:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome del nuovo stream di modifiche
  • MOD_TYPE_FILTER_NAME: il filtro che vuoi aggiungere: exclude_insert, exclude_update o exclude_delete. Se aggiungi più di un filtro alla volta, separali con una virgola.

L'esempio seguente crea un flusso di modifiche denominato NewFilterChangeStream che esclude i tipi di modifica delle tabelle INSERT e UPDATE:

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

Per aggiungere o rimuovere un filtro per tipo di modifica della tabella da un flusso di modifiche esistente, consulta Modificare il filtro per tipo di modifica della tabella. Puoi confermare quali filtri per il tipo di modifica della tabella esistono per il tuo flusso di modifiche visualizzando le definizioni del flusso di modifiche come DDL.

Abilita l'esclusione dei record a livello di transazione

Puoi attivare gli modifiche in tempo reale per escludere i record dalle transazioni di scrittura specificate impostando l'opzione allow_txn_exclusion quando crei uno stream di modifiche o modificando uno stream di modifiche esistente.

Per maggiori informazioni su come funziona questa opzione, vedi Esclusione dei record a livello di transazione.

GoogleSQL

Per creare uno stream di modifiche che possa escludere i record da transazioni di scrittura specificate, esegui questo comando:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome del nuovo flusso di modifiche

L'esempio seguente crea uno stream delle modifiche denominato NewChangeStream che può escludere i record dalle transazioni di scrittura specificate:

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

PostgreSQL

Per creare uno stream di modifiche che possa escludere i record da transazioni di scrittura specificate, esegui questo comando:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome del nuovo flusso di modifiche

L'esempio seguente crea uno stream di modifiche denominato NewChangeStream che può escludere i record dalle transazioni di scrittura specificate:

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

Per attivare o disattivare l'esclusione dei record a livello di transazione da un flusso di modifiche esistente, consulta Modificare l'esclusione dei record a livello di transazione. Per controllare l'impostazione di questa opzione, vedi Visualizzare le definizioni degli modifiche in tempo reale come DDL.

Specifica una transazione di scrittura da escludere dagli modifiche in tempo reale

Per specificare una transazione di scrittura da escludere dai modifiche in tempo reale, devi impostare il parametro exclude_txn_from_change_streams su true. I seguenti esempi di codice mostrano come specificare che una transazione di scrittura deve essere esclusa daglimodifiche in tempo realehe utilizzando la libreria client.

Vai


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

Modificare un flusso di modifiche

Per modificare la configurazione di uno stream di modifiche, utilizza un'istruzione DDL ALTER CHANGE STREAM. Utilizza una sintassi simile a CREATE CHANGE STREAM. Puoi modificare le colonne monitorate da un flusso o la durata delperiodo di conservazionene dei dati. Puoi anche sospendere completamente la visualizzazione conservando i record delle modifiche ai dati.

Modificare gli elementi monitorati da un flusso di modifiche

Questo esempio aggiunge l'intera tabella Songs al flusso di modifiche NamesAndAlbums configurato in precedenza:

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

Al termine dell'operazione a lunga esecuzione che aggiorna la definizione dello stream di modifiche nello schema del database, Spanner sostituisce il comportamento dello stream di modifiche denominato con la nuova configurazione.

Modificare il periodo di conservazione dei dati di uno stream di modifiche

Per modificare il periodo di tempo in cui un flusso di modifiche conserva i propri record interni, imposta retention_period in un'istruzione DDL ALTER CHANGE STREAM.

Questo esempio regola il periodo di conservazione dei dati in base allo stream di modifiche NamesAndAlbums creato in precedenza:

GoogleSQL

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

PostgreSQL

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

Modificare il tipo di acquisizione valore di uno stream di modifiche

Per modificare il tipo di acquisizione dei valori di uno stream di modifiche, imposta la clausola value_capture_type in un'istruzione DDL ALTER CHANGE STREAM.

Questo esempio modifica il tipo di acquisizione del valore in NEW_VALUES.

GoogleSQL

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

PostgreSQL

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

Modificare il filtro di eliminazione basato sul TTL

Per modificare il filtro eliminazioni basate sul TTL per uno stream di modifiche, imposta il filtro exclude_ttl_deletes in un'istruzione DDL ALTER CHANGE STREAM. Puoi utilizzarlo per aggiungere o rimuovere il filtro daimodifiche in tempo realee esistenti.

Per saperne di più sul funzionamento di questi filtri, consulta Filtro per eliminazioni basate sul TTL.

Aggiungere il filtro delle eliminazioni basate sul TTL a uno stream di modifiche esistente

GoogleSQL

Per aggiungere il filtro delle eliminazioni basate sul TTL a uno stream di modifiche esistente, esegui il comando seguente per impostare il filtro su true:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome dello stream di modifiche esistente

Nell'esempio seguente, il filtro exclude_ttl_deletes viene aggiunto a un flusso di modifiche esistente denominato NewFilterChangeStream che esclude tutte le eliminazioni basate su TTL:

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

Ciò esclude tutte le eliminazioni future basate sul TTL dal flusso di modifiche.

PostgreSQL

Per aggiungere il filtro delle eliminazioni basate sul TTL a uno stream di modifiche esistente, esegui il comando seguente per impostare il filtro su true:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome dello stream di modifiche esistente

Nell'esempio seguente, il filtro exclude_ttl_deletes viene aggiunto a un flusso di modifiche esistente denominato NewFilterChangeStream che esclude tutte le eliminazioni basate su TTL:

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

Ciò esclude tutte le eliminazioni future basate sul TTL dal flusso di modifiche.

Rimuovere il filtro delle eliminazioni basate sul TTL da uno stream di modifiche esistente

GoogleSQL

Per rimuovere il filtro delle eliminazioni basate sul TTL da uno stream di modifiche esistente, esegui il comando riportato di seguito per impostare il filtro su false:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome del nuovo stream di modifiche

Nell'esempio seguente, il filtro exclude_ttl_deletes viene rimosso da un flusso di modifiche esistente chiamato NewFilterChangeStream:

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

Ciò include tutte le eliminazioni future basate sul TTL nel flusso di modifiche.

Puoi anche impostare il filtro su null per rimuovere il filtro delle eliminazioni basate sul TTL.

PostgreSQL

Per rimuovere il filtro delle eliminazioni basate sul TTL da uno stream di modifiche esistente, esegui il comando riportato di seguito per impostare il filtro su false:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome del nuovo stream di modifiche

Nell'esempio seguente, il filtro exclude_ttl_deletes viene rimosso da un flusso di modifiche esistente chiamato NewFilterChangeStream:

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

Ciò include tutte le eliminazioni future basate sul TTL nel flusso di modifiche.

Puoi anche impostare il filtro su null per rimuovere il filtro delle eliminazioni basate sul TTL.

Modificare il filtro in base al tipo di modifica della tabella

Per modificare i filtri del tipo di modifica della tabella per uno stream di modifiche, imposta il tipo di filtro in un'istruzione DDL ALTER CHANGE STREAM. Puoi utilizzare questo per aggiungere un nuovo filtro o rimuovere un filtro esistente dal flusso di modifiche.

Aggiungere un filtro per il tipo di modifica della tabella a uno stream di modifiche esistente

GoogleSQL

Per aggiungere uno o più nuovi filtri del tipo di modifica della tabella a un flusso di modifiche esistente, esegui il seguente comando per impostare il filtro su true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: sostituisci con il nome del tuo stream di modifiche esistente
  • MOD_TYPE_FILTER_NAME: sostituisci con il filtro che vuoi aggiungere: exclude_insert, exclude_update o exclude_delete. Se aggiungi più di un filtro alla volta, separali con una virgola.

Nel seguente esempio, il filtro exclude_delete viene aggiunto a un flusso di modifiche esistente chiamato NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

Per aggiungere uno o più nuovi filtri del tipo di modifica della tabella a un flusso di modifiche esistente, esegui il seguente comando per impostare il filtro su true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: sostituisci con il nome del tuo stream di modifiche esistente
  • MOD_TYPE_FILTER_NAME: sostituisci con il filtro che vuoi aggiungere: exclude_insert, exclude_update o exclude_delete. Se aggiungi più di un filtro alla volta, separali con una virgola.

Nel seguente esempio, il filtro exclude_delete viene aggiunto a un flusso di modifiche esistente chiamato NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

Rimuovere un filtro per tipo di modifica della tabella da un flusso di modifiche esistente

GoogleSQL

Per rimuovere uno o più filtri del tipo di modifica della tabella esistenti nel flusso di modifiche, esegui il comando seguente per impostare il filtro su false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: sostituisci con il nome del tuo stream di modifiche esistente
  • MOD_TYPE_FILTER_NAME: sostituisci con il filtro che vuoi rimuovere: exclude_insert, exclude_update o exclude_delete. Se rimuovi più filtri contemporaneamente, separali con una virgola.

Nell'esempio seguente, il filtro exclude_delete viene rimosso da un flusso di modifiche esistente chiamato NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)

Puoi anche rimuovere un filtro di modifica della tabella impostando il filtro sul valore predefinito. Per farlo, imposta il valore del filtro su null.

PostgreSQL

Per rimuovere uno o più filtri del tipo di modifica della tabella esistenti nel flusso di modifiche, esegui il comando seguente per impostare il filtro su false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: sostituisci con il nome del tuo stream di modifiche esistente
  • MOD_TYPE_FILTER_NAME: sostituisci con il filtro che vuoi rimuovere: exclude_insert, exclude_update o exclude_delete. Se rimuovi più filtri contemporaneamente, separali con una virgola.

Nell'esempio seguente, il filtro exclude_delete viene rimosso da un flusso di modifiche esistente chiamato NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)

Puoi anche rimuovere un filtro di modifica della tabella impostando il filtro sul valore predefinito. Per farlo, imposta il valore del filtro su null.

Modifica lo stream di modifiche per consentire l'esclusione dei record a livello di transazione

Puoi modificare lo stream delle modifiche per consentirgli di escludere i record da transazioni di scrittura specificate. A tal fine, imposta l'opzione allow_txn_exclusion su true in un'istruzione DDL ALTER CHANGE STREAM. Se non imposti questa opzione o se la imposti su false, lo stream delle modifiche monitora tutte le transazioni di scrittura.

Per maggiori informazioni su come funziona questa opzione, vedi Esclusione dei record a livello di transazione.

Abilitare l'esclusione dei record a livello di transazione per un flusso di modifiche esistente

GoogleSQL

Per abilitare l'esclusione dei record a livello di transazione per uno stream di modifiche esistente, esegui il comando seguente:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome dello stream di modifiche esistente

Nell'esempio seguente, l'opzione allow_txn_exclusion è abilitata in un flusso di modifiche esistente, NewAllowedChangeStream:

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

In questo modo, il flusso di modifiche può escludere i record dalle transazioni di scrittura specificate.

PostgreSQL

Per abilitare l'esclusione dei record a livello di transazione per uno stream di modifiche esistente, esegui il comando seguente:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome dello stream di modifiche esistente

Nell'esempio seguente, l'opzione allow_txn_exclusion è abilitata in un flusso di modifiche esistente, NewAllowedChangeStream:

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

In questo modo, il flusso di modifiche può escludere i record dalle transazioni di scrittura specificate.

Disattivare l'esclusione dei record a livello di transazione per un flusso di modifiche esistente

GoogleSQL

Per disattivare l'esclusione dei record a livello di transazione in un flusso di modifiche esistente, esegui questo comando:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome dello stream di modifiche

Nel seguente esempio, l'opzione allow_txn_exclusion è disattivata in un flusso di modifiche esistente chiamato NewAllowedChangeStream:

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

Il flusso di modifiche monitora tutte le transazioni di scrittura.

PostgreSQL

Per disattivare l'esclusione dei record a livello di transazione in un flusso di modifiche esistente, esegui questo comando:

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

Sostituisci quanto segue:

  • CHANGE_STREAM_NAME: il nome dello stream di modifiche

Nel seguente esempio, l'opzione allow_txn_exclusion è disattivata in un flusso di modifiche esistente chiamato NewAllowedChangeStream:

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

Il flusso di modifiche monitora tutte le transazioni di scrittura.

Sospendere un flusso di modifiche

Se vuoi che uno stream di modifiche interrompa la sua attività, ma conservi i suoi record interni, almeno per la durata del periodo di conservazione dei dati, puoi modificarlo in modo che non monitori nulla.

Per farlo, esegui un'istruzione DDL ALTER CHANGE STREAM che sostituisca la definizione dello stream di modifiche con la frase speciale DROP FOR ALL. Ad esempio:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

Lo stream continua a esistere nel database, ma non monitora alcun oggetto e non genera ulteriori record di modifica dei dati. I record di modifica esistenti rimangono intatti, soggetti alle norme di conservazione dei dati dello stream.

Per riprendere uno stream sospeso, emetti un'altra istruzione ALTER CHANGE STREAM con la configurazione precedente.

Eliminare un flusso di modifiche

Per eliminare definitivamente un flusso di modifiche, esegui un'istruzione DROP CHANGE STREAM che includa il nome del flusso:

DROP CHANGE STREAM NamesAndAlbums;

Spanner interrompe immediatamente lo stream, lo rimuove dallo schema del database ed elimina i relativi record di modifica dei dati.

Elencare e visualizzare modifiche in tempo reale

La Google Cloud console fornisce un'interfaccia web per elencare e rivedere le definizioni dello stream di modifiche di un database. Puoi anche visualizzare la struttura deimodifiche in tempo realee come istruzioni DDL equivalenti o eseguendo query sullo schema delle informazioni per il database.

Visualizzare modifiche in tempo reale con la console Google Cloud

Per visualizzare un elenco dei modifiche in tempo reale di un database e rivederne le definizioni:

  1. Visita la pagina delle istanze Spanner della consoleGoogle Cloud .

    Apri la pagina delle istanze

  2. Vai all'istanza e al database appropriati.

  3. Fai clic su Change streams nel menu di navigazione.

Viene visualizzato un elenco di tutti gli modifiche in tempo reale del database e un riepilogo della configurazione di ciascuno. Se fai clic sul nome di un flusso, vengono visualizzati ulteriori dettagli sulle tabelle e sulle colonne che monitora.

Visualizzare le definizioni dei modifiche in tempo reale come DDL

La visualizzazione dello schema di un database come DDL include le descrizioni di tutti modifiche in tempo realee, in cui vengono visualizzati come istruzioni CREATE CHANGE STREAM.

Eseguire query sullo schema delle informazioni relative ai modifiche in tempo reale

Puoi eseguire query direttamente sullo schema delle informazioni di un database sui relativi modifiche in tempo reale. Le seguenti tabelle contengono i metadati che definiscono i nomi degli modifiche in tempo reale, le tabelle e le colonne che monitorano e i relativi periodi di conservazione:

Best practice per i flussi di modifiche

Di seguito sono riportate alcune best practice per la configurazione e la gestione degli stream di modifiche.

Valuta la possibilità di utilizzare un database di metadati separato

Le modifiche in tempo reale utilizzano un database di metadati per mantenere lo stato interno. Il database dei metadati può essere uguale o diverso dal database che contiene imodifiche in tempo realee. Ti consigliamo di creare un database separato per l'archiviazione dei metadati.

Il connettore di modifiche in tempo reale Spanner richiede autorizzazioni di lettura/scrittura per il database dei metadati. Non devi preparare questo database con uno schema, perché se ne occupa il connettore.

L'utilizzo di un database di metadati separato elimina le complessità che potrebbero sorgere se il connettore potesse scrivere direttamente nel database dell'applicazione:

  • Separando il database dei metadati dal database di produzione con lo stream di modifiche, il connettore necessita solo delle autorizzazioni di lettura per il database di produzione.

  • Limitando il traffico del connettore a un database di metadati separato, le scritture eseguite dal connettore stesso non vengono incluse nei modifiche in tempo reale di produzione. Ciò è particolarmente pertinente per modifiche in tempo reale che monitorano l'intero database.

Se non viene utilizzato un database separato per archiviare i metadati, ti consigliamo di monitorare l'impatto sulla CPU del connettore di modifiche in tempo reale sulle istanze.

Esegui il benchmark dei nuovi modifiche in tempo reale e ridimensionali se necessario

Prima di aggiungere nuovi modifiche in tempo reale all'istanza di produzione, valuta il benchmarking di un workload realistico su un'istanza di staging con i flussi di modifiche abilitati. In questo modo puoi determinare se devi aggiungere nodi all'istanza per aumentare la capacità di calcolo e di archiviazione.

Esegui questi test finché le metriche di CPU e spazio di archiviazione non si stabilizzano. Idealmente, l'utilizzo della CPU dell'istanza dovrebbe rimanere al di sotto dei valori massimi consigliati e l'utilizzo dello spazio di archiviazione non dovrebbe superare il limite di archiviazione dell'istanza.

Utilizzare regioni diverse per il bilanciamento del carico

Quando utilizzi modifiche in tempo reale in una configurazione di istanza multiregionale, valuta la possibilità di eseguire le pipeline di elaborazione in una regione diversa da quella leader predefinita. In questo modo, il carico di streaming viene distribuito tra le repliche non leader. Se devi dare la priorità al ritardo di streaming più basso possibile rispetto al bilanciamento del carico, esegui il carico di streaming nella regione leader.

Passaggi successivi