Crie e faça a gestão de streams de alterações

Esta página descreve como criar, modificar e ver streams de alterações do Spanner para bases de dados com dialeto GoogleSQL e bases de dados com dialeto PostgreSQL. Para saber mais sobre os fluxos de alterações, consulte o artigo Acerca dos fluxos de alterações.

Uma vez que os fluxos de alterações são objetos de esquema, cria-os e gere-os através das atualizações do esquema baseadas em LDD usadas para qualquer outro tipo de trabalho de definição de base de dados, como a criação de tabelas ou a adição de índices.

O Spanner inicia uma operação de longa duração depois de enviar uma declaração DDL de alteração do esquema, incluindo as usadas para criar, alterar ou eliminar streams de alterações. Um fluxo de alterações novo ou alterado começa a monitorizar as colunas ou as tabelas especificadas pela respetiva nova configuração após a conclusão desta operação de longa duração.

Crie uma stream de alterações

Para criar uma stream de alterações, tem de indicar o respetivo nome e os objetos de esquema que monitoriza: a base de dados completa ou uma lista de tabelas e colunas específicas. Opcionalmente, pode configurar uma stream de alterações com qualquer uma das seguintes opções:

GoogleSQL

A sintaxe DDL para criar uma stream de alterações com o GoogleSQL tem o seguinte aspeto:

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

A sintaxe DDL para criar uma stream de alterações com o PostgreSQL tem o seguinte aspeto:

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

Uma nova stream de alterações começa a monitorizar os objetos de esquema atribuídos assim que a operação de longa duração que a criou for concluída.

Os exemplos seguintes ilustram a criação de streams de alterações com várias configurações.

Monitorize uma base de dados completa

Para criar uma stream de alterações que monitoriza todas as alterações de dados efetuadas nas tabelas de uma base de dados, use a palavra-chave ALL:

CREATE CHANGE STREAM EverythingStream
FOR ALL;

A configuração ALL inclui implicitamente todas as tabelas e colunas de dados futuras da base de dados, assim que forem criadas. Não inclui visualizações, tabelas de esquemas de informações nem outros objetos além das tabelas de dados normais.

Monitorize tabelas específicas

Para limitar o âmbito de um fluxo de alterações a tabelas específicas, em vez de a uma base de dados inteira, especifique uma lista de uma ou mais tabelas:

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

O Spanner atualiza automaticamente os fluxos de alterações que monitorizam tabelas inteiras para refletir quaisquer alterações de esquema que afetem essas tabelas, como colunas adicionadas ou eliminadas.

Monitorize colunas específicas

Use a sintaxe table(column_1[, column_2, ...]) para monitorizar alterações a uma ou mais colunas específicas, não principais, nas tabelas que nomear:

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

Não pode especificar colunas de chave primária aqui porque cada stream de alterações rastreia sempre as chaves primárias de cada tabela que monitoriza. Isto permite que cada registo de alteração de dados identifique a linha alterada pela respetiva chave principal.

Monitorize tabelas e colunas numa única stream

Pode combinar a sintaxe de monitorização de tabelas e de colunas dos dois exemplos anteriores num único fluxo de alterações:

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

Especifique um período de retenção mais longo

Para especificar um período de retenção de dados do fluxo de alterações superior ao predefinido de um dia, defina o retention_period para um período de até trinta dias, expresso em horas (h) ou dias (d).

Dois exemplos:

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

Especifique um tipo de captura de valor diferente

Para especificar um tipo de captura de valor de fluxo de alterações que não seja OLD_AND_NEW_VALUES, defina value_capture_type como NEW_VALUES ou NEW_ROW, conforme mostrado nos exemplos seguintes:

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

Filtre eliminações baseadas no TTL

Pode filtrar eliminações baseadas no TTL do âmbito da sua stream de alterações através do filtro exclude_ttl_deletes.

Para mais informações sobre o funcionamento deste filtro, consulte o artigo Filtro de eliminações com base no tempo de vida.

GoogleSQL

Para criar uma stream de alterações com o filtro de eliminações baseadas no TTL, execute o seguinte exemplo:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua nova stream de alterações

O exemplo seguinte cria um fluxo de alterações denominado NewFilterChangeStream que exclui todas as eliminações baseadas no TTL:

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

PostgreSQL

Para criar uma stream de alterações com o filtro de eliminações baseadas no TTL, execute o seguinte exemplo:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua nova stream de alterações

O exemplo seguinte cria um fluxo de alterações denominado NewFilterChangeStream que exclui todas as eliminações baseadas no TTL:

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

Para adicionar ou remover o filtro de eliminações baseadas no TTL de uma stream de alterações existente, consulte o artigo Modifique o filtro de eliminações baseadas no TTL. Pode confirmar os filtros do fluxo de alterações vendo as definições do fluxo de alterações como DDL.

Filtre por tipo de modificação da tabela

Filtre uma ou mais destas modificações da tabela do âmbito da sua stream de alterações através das seguintes opções de filtro disponíveis:

  • exclude_insert: excluir todas as modificações da tabela INSERT
  • exclude_update: excluir todas as modificações da tabela UPDATE
  • exclude_delete: excluir todas as modificações da tabela DELETE

Para mais informações sobre o funcionamento destes filtros, consulte o artigo Filtros de tipo de modificação de tabelas.

GoogleSQL

Para criar um fluxo de alterações com um ou mais filtros do tipo de modificação da tabela, execute o seguinte:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua nova stream de alterações
  • MOD_TYPE_FILTER_NAME: o filtro que quer adicionar: exclude_insert, exclude_update ou exclude_delete. Se adicionar mais do que um filtro de cada vez, separe cada um com uma vírgula.

O exemplo seguinte cria um fluxo de alterações denominado NewFilterChangeStream que exclui os tipos de modificações de tabelas INSERT e UPDATE:

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

PostgreSQL

Para criar um fluxo de alterações com um ou mais filtros do tipo de modificação da tabela, execute o seguinte:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua nova stream de alterações
  • MOD_TYPE_FILTER_NAME: o filtro que quer adicionar: exclude_insert, exclude_update ou exclude_delete. Se adicionar mais do que um filtro de cada vez, separe cada um com uma vírgula.

O exemplo seguinte cria um fluxo de alterações denominado NewFilterChangeStream que exclui os tipos de modificações de tabelas INSERT e UPDATE:

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

Para adicionar ou remover um filtro de tipo de modificação de tabela de um fluxo de alterações existente, consulte o artigo Modifique o filtro por tipo de modificação de tabela. Pode confirmar que tipos de modificações de tabelas existem para a sua stream de alterações vendo as definições da stream de alterações como DDL.

Ative a exclusão de registos ao nível da transação

Pode ativar as streams de alterações para excluir registos de transações de escrita especificadas definindo a opção allow_txn_exclusion quando cria uma stream de alterações ou modificando uma stream de alterações existente.

Para mais informações sobre o funcionamento desta opção, consulte o artigo Exclusão de registos ao nível da transação.

GoogleSQL

Para criar uma stream de alterações que possa excluir registos de transações de escrita especificadas, execute o seguinte:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da nova stream de alterações

O exemplo seguinte cria um fluxo de alterações denominado NewChangeStream que pode excluir registos de transações de escrita especificadas:

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

PostgreSQL

Para criar uma stream de alterações que possa excluir registos de transações de escrita especificadas, execute o seguinte:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da nova stream de alterações

O exemplo seguinte cria um fluxo de alterações denominado NewChangeStream que pode excluir registos de transações de escrita especificadas:

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

Para ativar ou desativar a exclusão de registos ao nível da transação de uma stream de alterações existente, consulte o artigo Modifique a exclusão de registos ao nível da transação. Para verificar a definição desta opção, consulte o artigo Veja as definições das streams de alterações como DDL.

Especifique uma transação de escrita a excluir das streams de alterações

Para especificar uma transação de escrita a excluir dos fluxos de alterações, tem de definir o parâmetro exclude_txn_from_change_streams como true. Os exemplos de código seguintes mostram como pode especificar que uma transação de escrita seja excluída das streams de alterações através da biblioteca de cliente.

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

Modifique uma stream de alterações

Para modificar a configuração de uma stream de alterações, use uma declaração ALTER CHANGE STREAM DDL. Usa uma sintaxe semelhante a CREATE CHANGE STREAM. Pode alterar as colunas que uma stream monitoriza ou a duração do respetivo período de retenção de dados. Também pode suspender a monitorização por completo, enquanto mantém os registos de alterações de dados.

Modifique o que uma stream de alterações monitoriza

Este exemplo adiciona a tabela Songs completa à stream de alterações NamesAndAlbums configurada anteriormente:

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

O Spanner substitui o comportamento da stream de alterações com nome pela nova configuração após a conclusão da operação de longa duração que atualiza a definição da stream de alterações no esquema da base de dados.

Modifique o período de retenção de dados de uma stream de alterações

Para modificar o período durante o qual uma stream de alterações retém os respetivos registos internos, defina o retention_period numa declaração DDL ALTER CHANGE STREAM.

Este exemplo ajusta o período de retenção de dados à NamesAndAlbums stream de alterações criada anteriormente:

GoogleSQL

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

PostgreSQL

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

Modifique o tipo de captura de valor de uma stream de alterações

Para modificar o tipo de captura de valor de um fluxo de alterações, defina a cláusula value_capture_type numa declaração DDL ALTER CHANGE STREAM.

Este exemplo ajusta o tipo de captura de valor para 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' );

Modifique o filtro de eliminações baseadas no TTL

Para modificar o filtro eliminações baseadas no TTL para um fluxo de alterações, defina o filtro exclude_ttl_deletes numa declaração ALTER CHANGE STREAM DDL. Pode usar esta opção para adicionar ou remover o filtro dos fluxos de alterações existentes.

Para mais informações sobre o funcionamento destes filtros, consulte o artigo Filtro de eliminações com base no tempo de vida.

Adicione o filtro de eliminações baseadas no TTL a uma stream de alterações existente

GoogleSQL

Para adicionar o filtro de eliminações baseadas no TTL a uma stream de alterações existente, execute o seguinte para definir o filtro como true:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua stream de alterações existente

No exemplo seguinte, o filtro exclude_ttl_deletes é adicionado a uma stream de alterações existente denominada NewFilterChangeStream que exclui todas as eliminações baseadas no TTL:

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

Isto exclui todas as eliminações futuras baseadas no TTL da stream de alterações.

PostgreSQL

Para adicionar o filtro de eliminações baseadas no TTL a uma stream de alterações existente, execute o seguinte para definir o filtro como true:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua stream de alterações existente

No exemplo seguinte, o filtro exclude_ttl_deletes é adicionado a uma stream de alterações existente denominada NewFilterChangeStream que exclui todas as eliminações baseadas no TTL:

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

Isto exclui todas as eliminações futuras baseadas no TTL da stream de alterações.

Remova o filtro de eliminações baseadas no TTL de um stream de alterações existente

GoogleSQL

Para remover o filtro de eliminações baseadas no TTL de uma stream de alterações existente, execute o seguinte para definir o filtro como false:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua nova stream de alterações

No exemplo seguinte, o filtro exclude_ttl_deletes é removido de uma stream de alterações existente denominada NewFilterChangeStream:

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

Isto inclui todas as eliminações futuras baseadas no TTL para a stream de alterações.

Também pode definir o filtro como null para remover o filtro de eliminações baseadas no TTL.

PostgreSQL

Para remover o filtro de eliminações baseadas no TTL de uma stream de alterações existente, execute o seguinte para definir o filtro como false:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua nova stream de alterações

No exemplo seguinte, o filtro exclude_ttl_deletes é removido de uma stream de alterações existente denominada NewFilterChangeStream:

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

Isto inclui todas as eliminações futuras baseadas no TTL para a stream de alterações.

Também pode definir o filtro como null para remover o filtro de eliminações baseadas no TTL.

Modifique o filtro por tipo de modificação da tabela

Para modificar os filtros de tipo de modificação da tabela para um fluxo de alterações, defina o tipo de filtro numa ALTER CHANGE STREAM declaração DDL. Pode usar esta opção para adicionar um novo filtro ou remover um filtro existente da sua stream de alterações.

Adicione um filtro de tipo de modificação de tabela a uma stream de alterações existente

GoogleSQL

Para adicionar um ou mais novos filtros de tipo de modificação de tabela a um fluxo de alterações existente, execute o seguinte para definir o filtro como true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

Substitua o seguinte:

  • CHANGE_STREAM_NAME: substitua pelo nome da sua stream de alterações existente
  • MOD_TYPE_FILTER_NAME: substitua pelo filtro que quer adicionar: exclude_insert, exclude_update ou exclude_delete. Se adicionar mais do que um filtro de cada vez, separe cada filtro com uma vírgula.

No exemplo seguinte, o filtro exclude_delete é adicionado a uma stream de alterações existente denominada NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

Para adicionar um ou mais novos filtros de tipo de modificação de tabela a um fluxo de alterações existente, execute o seguinte para definir o filtro como true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

Substitua o seguinte:

  • CHANGE_STREAM_NAME: substitua pelo nome da sua stream de alterações existente
  • MOD_TYPE_FILTER_NAME: substitua pelo filtro que quer adicionar: exclude_insert, exclude_update ou exclude_delete. Se adicionar mais do que um filtro de cada vez, separe cada filtro com uma vírgula.

No exemplo seguinte, o filtro exclude_delete é adicionado a uma stream de alterações existente denominada NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

Remova um filtro de tipo de modificação de tabela de um fluxo de alterações existente

GoogleSQL

Para remover um ou mais filtros de tipo de modificação de tabela existentes na stream de alterações, execute o seguinte para definir o filtro como false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

Substitua o seguinte:

  • CHANGE_STREAM_NAME: substitua pelo nome da sua stream de alterações existente
  • MOD_TYPE_FILTER_NAME: substitua pelo filtro que quer remover: exclude_insert, exclude_update ou exclude_delete. Se remover mais do que um filtro de cada vez, separe cada um com uma vírgula.

No exemplo seguinte, o filtro exclude_delete é removido de uma stream de alterações existente denominada NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)

Também pode remover um filtro de modificação da tabela definindo o filtro novamente para o valor predefinido. Para tal, defina o valor do filtro como null.

PostgreSQL

Para remover um ou mais filtros de tipo de modificação de tabela existentes na stream de alterações, execute o seguinte para definir o filtro como false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

Substitua o seguinte:

  • CHANGE_STREAM_NAME: substitua pelo nome da sua stream de alterações existente
  • MOD_TYPE_FILTER_NAME: substitua pelo filtro que quer remover: exclude_insert, exclude_update ou exclude_delete. Se remover mais do que um filtro de cada vez, separe cada um com uma vírgula.

No exemplo seguinte, o filtro exclude_delete é removido de uma stream de alterações existente denominada NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)

Também pode remover um filtro de modificação da tabela definindo o filtro novamente para o valor predefinido. Para tal, defina o valor do filtro como null.

Modifique o fluxo de alterações para permitir a exclusão de registos ao nível da transação

Pode modificar o fluxo de alterações para permitir que exclua registos de transações de gravação especificadas. Para o fazer, defina a opção allow_txn_exclusion como true numa declaração de LDD ALTER CHANGE STREAM. Se não definir esta opção ou se a definir como false, o fluxo de alterações monitoriza todas as transações de escrita.

Para mais informações acerca do funcionamento desta opção, consulte o artigo Exclusão de registos ao nível da transação.

Ative a exclusão de registos ao nível da transação para uma stream de alterações existente

GoogleSQL

Para ativar a exclusão de registos ao nível da transação para um fluxo de alterações existente, execute o seguinte:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua stream de alterações existente

No exemplo seguinte, a opção allow_txn_exclusion está ativada numa stream de alterações existente, NewAllowedChangeStream:

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

Isto permite que o fluxo de alterações exclua registos de transações de escrita especificadas.

PostgreSQL

Para ativar a exclusão de registos ao nível da transação para um fluxo de alterações existente, execute o seguinte:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua stream de alterações existente

No exemplo seguinte, a opção allow_txn_exclusion está ativada numa stream de alterações existente, NewAllowedChangeStream:

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

Isto permite que o fluxo de alterações exclua registos de transações de escrita especificadas.

Desative a exclusão de registos ao nível da transação para uma stream de alterações existente

GoogleSQL

Para desativar a exclusão de registos ao nível da transação numa stream de alterações existente, execute o seguinte:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua stream de alterações

No exemplo seguinte, a opção allow_txn_exclusion está desativada numa stream de alterações existente denominada NewAllowedChangeStream:

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

A stream de alterações monitoriza todas as transações de escrita.

PostgreSQL

Para desativar a exclusão de registos ao nível da transação numa stream de alterações existente, execute o seguinte:

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

Substitua o seguinte:

  • CHANGE_STREAM_NAME: o nome da sua stream de alterações

No exemplo seguinte, a opção allow_txn_exclusion está desativada numa stream de alterações existente denominada NewAllowedChangeStream:

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

A stream de alterações monitoriza todas as transações de escrita.

Suspenda uma stream de alterações

Se quiser que um fluxo de alterações interrompa a respetiva atividade, mas mantenha os respetivos registos internos, pelo menos, durante o período de retenção de dados, pode alterá-lo para que não monitorize nada.

Para tal, emita uma declaração DDL que substitua a definição da stream de alterações pela expressão especial DROP FOR ALL.ALTER CHANGE STREAM Por exemplo:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

A stream continua a existir na base de dados, mas não monitoriza objetos e não gera mais registos de alterações de dados. Os registos de alterações existentes permanecem intactos, sujeitos à política de retenção de dados da stream.

Para retomar uma stream suspensa, emita outra declaração com a respetiva configuração anterior.ALTER CHANGE STREAM

Elimine uma stream de alterações

Para eliminar permanentemente uma stream de alterações, emita uma declaração DROP CHANGE STREAM que inclua o nome da stream:

DROP CHANGE STREAM NamesAndAlbums;

O Spanner para imediatamente a stream, remove-a do esquema da base de dados e elimina os respetivos registos de alterações de dados.

Liste e veja streams de alterações

A Google Cloud consola oferece uma interface Web para listar e rever as definições da stream de alterações de uma base de dados. Também pode ver a estrutura dos fluxos de alterações como as respetivas declarações DDL equivalentes ou consultando o esquema de informações da base de dados.

Veja streams de alterações com a consola Google Cloud

Para ver uma lista das streams de alterações de uma base de dados e rever as respetivas definições:

  1. Aceda à página de instâncias do Spanner na Google Cloud consola.

    Abra a página de instâncias

  2. Navegue para a instância e a base de dados adequadas.

  3. Clique em Alterar streams no menu de navegação.

É apresentada uma lista de todas as streams de alterações dessa base de dados e um resumo da configuração de cada uma. Clicar no nome de uma stream revela mais detalhes sobre as tabelas e as colunas que monitoriza.

Veja as definições de streams de alterações como LDD

A visualização do esquema de uma base de dados como DDL inclui descrições de todas as respetivas streams de alterações, onde aparecem como declarações CREATE CHANGE STREAM.

  • Para o fazer a partir da consola, clique no link Mostrar DDL equivalente na página da base de dados na Google Cloud consola.

  • Para o fazer a partir da linha de comandos, use o comando ddl describe da CLI gcloud.

Consulte o esquema de informações sobre streams de alterações

Pode consultar diretamente o esquema de informações de uma base de dados sobre os respetivos fluxos de alterações. As tabelas seguintes contêm os metadados que definem os nomes das streams de alterações, as tabelas e as colunas que monitorizam, e os respetivos períodos de retenção:

Práticas recomendadas para alterar streams

Seguem-se algumas práticas recomendadas para configurar e gerir streams de alterações.

Considere uma base de dados de metadados separada

As streams de alterações usam uma base de dados de metadados para manter o estado interno. A base de dados de metadados pode ser igual ou diferente da base de dados que contém os fluxos de alterações. Recomendamos que crie uma base de dados separada para o armazenamento de metadados.

O conetor de streams de alterações do Spanner precisa de autorizações de leitura/escrita na base de dados de metadados. Não precisa de preparar esta base de dados com um esquema. O conetor trata disso.

A utilização de uma base de dados de metadados separada elimina as complexidades que podem surgir se permitir que o conector escreva diretamente na base de dados da sua aplicação:

  • Ao separar a base de dados de metadados da base de dados de produção com a stream de alterações, o conector só precisa de autorizações de leitura para a base de dados de produção.

  • Ao restringir o tráfego do conetor a uma base de dados de metadados separada, as escritas realizadas pelo próprio conetor não são incluídas nos fluxos de alterações de produção. Isto é especialmente relevante para streams de alterações que monitorizam toda a base de dados.

Se não estiver a ser usada uma base de dados separada para armazenar os metadados, recomendamos que monitorize o impacto da CPU do conetor de streams de alterações nas respetivas instâncias.

Compare novos fluxos de alterações e redimensione-os, se necessário

Antes de adicionar novas streams de alterações à sua instância de produção, considere testar uma carga de trabalho realista numa instância de preparação com as streams de alterações ativadas. Isto permite-lhe determinar se precisa de adicionar nós à sua instância para aumentar as respetivas capacidades de computação e armazenamento.

Execute estes testes até as métricas da CPU e do armazenamento estabilizarem. Idealmente, a utilização da CPU da instância deve permanecer abaixo dos máximos recomendados e a utilização do armazenamento não deve exceder o limite de armazenamento da instância.

Use diferentes regiões para equilibrar a carga

Quando usar streams de alterações numa configuração de instância multirregião, considere executar os respetivos pipelines de processamento numa região diferente da região líder predefinida. Isto ajuda a distribuir a carga de streaming entre réplicas não principais. No entanto, se precisar de dar prioridade ao menor atraso de streaming possível em vez do equilíbrio de carga, execute a carga de streaming na região principal.

O que se segue?