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:
- Especifique o período de retenção de dados para substituir o período de retenção predefinido de um dia.
- Especifique o tipo de captura de valor para substituir o tipo de captura de valor predefinido
OLD_AND_NEW_VALUES
. - Aplique um filtro de eliminações baseadas no TTL para filtrar eliminações baseadas no TTL dos seus streams de alterações.
- Aplique um filtro de modificações da tabela para excluir todas as modificações da tabela
INSERT
,UPDATE
ouDELETE
. Ative uma exclusão de registos ao nível da transação para excluir determinadas transações dos seus fluxos de alteraçõ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 tabelaINSERT
exclude_update
: excluir todas as modificações da tabelaUPDATE
exclude_delete
: excluir todas as modificações da tabelaDELETE
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
ouexclude_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
ouexclude_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
Java
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
ouexclude_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
ouexclude_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
ouexclude_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
ouexclude_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:
Aceda à página de instâncias do Spanner na Google Cloud consola.
Navegue para a instância e a base de dados adequadas.
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?
Use modelos para associar rapidamente um fluxo de alterações ao BigQuery, ao Cloud Storage ou ao Pub/Sub.