Esta página descreve como criar, modificar e visualizar fluxos de mudanças do Spanner. Para saber mais sobre os streams de alterações, consulte Sobre os streams de alterações.
Como os fluxo de alterações são objetos de esquema, eles são criados e gerenciados usando o mesmo esquema orientado a DDL atualizações usadas para qualquer outro tipo de definição de banco de dados, como criar tabelas ou adicionar índices.
o Spanner inicia um processo de execução operação após enviar uma instrução DDL de alteração de esquema, incluindo as usadas para criar, alterar ou excluir fluxo de alterações. Um fluxo de alterações novo ou alterado começar a observar as colunas ou tabelas especificadas pela nova configuração após a conclusão dessa operação de longa duração.
Criar um stream de alterações
Para criar um fluxo de mudanças, é necessário fornecer o nome dele e os objetos de esquema que ele vai monitorar: o banco de dados inteiro ou uma lista de tabelas e colunas específicas. Você também pode especificar o seguinte:
- período de retenção para substituir o período de um dia período de armazenamento padrão
- value capture type para substituir o tipo de captura de valor
padrão
OLD_AND_NEW_VALUES
. - Filtro de exclusões com base em TTL, se você quiser filtrar exclusões com base em TTL dos fluxos de mudanças.
excluir modificações da tabela para excluir todas as modificações de tabela
INSERT
,UPDATE
ouDELETE
GoogleSQL
A sintaxe DDL para criar um fluxo de alterações usando o GoogleSQL é semelhante assim:
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 ) ]
PostgreSQL
A sintaxe DDL para criar um fluxo de alterações usando o PostgreSQL parece assim:
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 ) ]
Um novo fluxo de mudanças começa a monitorar os objetos de esquema atribuídos assim que a operação de longa duração que o criou é concluída.
Os exemplos a seguir ilustram a criação de fluxos de mudanças com várias configurações.
Monitorar um banco de dados inteiro
Para criar um fluxo de alterações que monitora todas as mudanças de dados realizadas
nas tabelas de um banco de dados, use a palavra-chave ALL
:
CREATE CHANGE STREAM EverythingStream
FOR ALL;
A configuração ALL
implicitamente
inclui todos os dados futuros do banco de dados
tabelas e colunas, assim que são criadas. Ele não
incluem visualizações, tabelas de esquema de informações ou
outros objetos além das tabelas de dados normais.
Monitorar tabelas específicas
Para limitar o escopo de um fluxo de alterações a tabelas específicas, em vez de um banco de dados inteiro, especifique uma lista de um ou mais tabelas:
CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;
O Spanner atualiza automaticamente os fluxos de mudanças que monitoram tabelas inteiras para refletir as alterações de esquema que afetam essas tabelas, como colunas adicionadas ou excluídas.
Observe colunas específicas
Use a sintaxe table(column_1[, column_2,
...])
para acompanhar as mudanças em um ou mais
colunas sem chave nas tabelas que você nomeia:
CREATE CHANGE STREAM NamesAndTitles
FOR Singers(FirstName, LastName), Albums(Title);
Não é possível especificar colunas de chave primária aqui porque todos os fluxos de alterações sempre rastreia as chaves primárias de cada tabela observada. Isso permite que cada registro de alteração de dados identifique a linha alterada pela chave primária.
Observar tabelas e colunas em um único stream
É possível combinar a sintaxe de monitoramento de tabela e de coluna dos dois exemplos anteriores em um único fluxo de mudanças:
CREATE CHANGE STREAM NamesAndAlbums
FOR Singers(FirstName, LastName), Albums;
Especificar um período de retenção mais longo
Especificar um período de armazenamento de dados do fluxo de alterações
for mais longo que o padrão de um dia, defina retention_period
como um período
de até uma semana, expresso como 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' );
Especificar um tipo de captura de valor diferente
Para especificar um tipo de captura de valor de fluxo de alterações
diferente de OLD_AND_NEW_VALUES
, defina value_capture_type
como
NEW_VALUES
ou NEW_ROW
, conforme mostrado nos exemplos a seguir:
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' );
Filtrar exclusões baseadas em TTL
É possível filtrar exclusões baseadas em TTL
do escopo do fluxo de mudanças usando o filtro exclude_ttl_deletes
.
Para mais informações sobre como esse filtro funciona, consulte Filtro de exclusões com base no tempo de vida útil.
GoogleSQL
Para criar um fluxo de alterações com o filtro de exclusões baseado em TTL, use o seguinte:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (exclude_ttl_deletes = true)
Substitua:
- CHANGE_STREAM_NAME: o nome do novo fluxo de mudanças
O exemplo a seguir cria um fluxo de alterações chamado NewFilterChangeStream
.
que exclui todas as exclusões baseadas em TTL:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_ttl_deletes = true)
PostgreSQL
Para criar um fluxo de alterações com o filtro de exclusões baseado em TTL, use o seguinte:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (exclude_ttl_deletes = true)
Substitua:
- STREAM_NAME: o nome do novo. fluxo de alterações
O exemplo a seguir cria um fluxo de mudanças chamado NewFilterChangeStream
que exclui todas as exclusões com base no TTL:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_ttl_deletes = true)
Para adicionar ou remover o filtro de exclusões com base em TTL de um fluxo de mudanças, consulte Modificar o filtro de exclusões com base em TTL. É possível confirmar os filtros do fluxo de alterações conferindo as definições do fluxo de alterações como DDL.
Filtrar por tipo de modificação da tabela
Filtre uma ou mais dessas modificações de tabela do escopo do fluxo de mudanças usando as seguintes opções de filtro:
exclude_insert
: excluir todas asINSERT
modificações da tabelaexclude_update
: exclui todas as modificações da tabelaUPDATE
exclude_delete
: exclui todas as modificações da tabelaDELETE
Para mais informações sobre como esses filtros funcionam, consulte Filtros de tipo de modificação de tabela.
GoogleSQL
Para criar um fluxo de alterações com um ou mais tipos de modificação de tabela filtros, use o seguinte:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (MOD_TYPE_FILTER_NAME = true)
Substitua:
- CHANGE_STREAM_NAME: o nome do novo. fluxo de alterações
- MOD_TYPE_FILTER_NAME: o filtro que você
que você quer adicionar:
exclude_insert
,exclude_update
ouexclude_delete
. Se você adicionar mais de um filtro por vez, separe cada um deles com uma vírgula.
O exemplo a seguir cria um fluxo de mudanças chamado NewFilterChangeStream
que exclui os tipos de modificação de tabela INSERT
e UPDATE
:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_insert = true, exclude_update = true)
PostgreSQL
Para criar um fluxo de mudanças com um ou mais filtros de tipo de modificação de tabela, use o seguinte:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (MOD_TYPE_FILTER_NAME = true)
Substitua:
- CHANGE_STREAM_NAME: o nome do existente. fluxo de alterações
- MOD_TYPE_FILTER_NAME: o filtro que você
que você quer adicionar:
exclude_insert
,exclude_update
ouexclude_delete
. Se você adicionar mais de um filtro por vez, separe cada um deles com uma vírgula.
O exemplo a seguir cria um fluxo de mudanças chamado NewFilterChangeStream
que exclui os tipos de transações de modificação de tabela 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 mudanças, consulte Modificar filtro por tipo de modificação de tabela. Você pode confirmar quais filtros de tipo de modificação existem na sua fluxo de alterações por visualizar as definições do fluxo de alterações como DDL.
Modificar um fluxo de alterações
Para modificar a configuração de um fluxo de alterações, use uma DDL ALTER CHANGE STREAM
instrução. Ele usa uma sintaxe semelhante à CREATE CHANGE STREAM
. É possível
mudar as colunas que um fluxo observa ou a duração do período de
retenção de dados. Você também pode suspender a exibição e manter os registros de mudança de dados.
Modificar o que um fluxo de alterações monitora
Este exemplo adiciona a tabela Songs
inteira ao fluxo de alterações NamesAndAlbums
configurado anteriormente:
ALTER CHANGE STREAM NamesAndAlbums
SET FOR Singers(FirstName, LastName), Albums, Songs;
O Spanner substitui o comportamento do fluxo de alterações nomeado por a nova configuração após a conclusão da operação de longa duração que atualiza a definição do fluxo de alterações dentro da esquema.
Modificar o período de armazenamento de dados de um fluxo de alterações
Para modificar o tempo que um fluxo de alterações retém os registros
internos, defina o retention_period
em uma instrução DDL ALTER CHANGE STREAM
.
Este exemplo ajusta o período de retenção de dados para o fluxo de alterações NamesAndAlbums
criado anteriormente:
GoogleSQL
ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( retention_period = '36h' );
PostgreSQL
ALTER CHANGE STREAM NamesAndAlbums
SET ( retention_period = '36h' );
Modificar o tipo de captura de valor de um fluxo de mudanças
Para modificar o tipo de captura de valor de um fluxo de mudanças, defina a cláusula value_capture_type
em uma instruçã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' );
Modificar o filtro de exclusões com base no TTL
Para modificar o filtro Exclusões com base no TTL de um fluxo de
mudanças, defina o filtro exclude_ttl_deletes
em uma instrução DDL ALTER CHANGE STREAM
. Você pode usar isso para adicionar ou remover o filtro
seus fluxo de alterações atuais.
Para mais informações sobre como esses filtros funcionam, consulte Filtro de exclusões baseadas no tempo de vida útil.
Adicionar o filtro de exclusões baseadas em TTL a um fluxo de alterações existente
GoogleSQL
Para adicionar o filtro de exclusões com base no TTL a um fluxo de mudanças,
use o seguinte para definir o filtro como true
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)
Substitua:
- CHANGE_STREAM_NAME: o nome do existente. fluxo de alterações
No exemplo abaixo, o filtro exclude_ttl_deletes
é adicionado a um
fluxo de mudanças chamado NewFilterChangeStream
:
que exclui todas as exclusões baseadas em TTL:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)
Isso exclui todas as exclusões baseadas em TTL do fluxo de alterações.
PostgreSQL
Para adicionar o filtro de exclusões com base no TTL a um fluxo de mudanças,
use o seguinte para definir o filtro como True
:
ALTER CHANGE STREAM STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = true)
Substitua:
- STREAM_NAME: o nome do fluxo de alterações existente.
No exemplo a seguir, o filtro exclude_ttl_deletes
é adicionado a uma
fluxo de alterações atual chamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = true)
Isso exclui todas as exclusões futuras baseadas em TTL do fluxo de alterações.
Remover o filtro de exclusões com base no TTL de um fluxo de alterações
GoogleSQL
Para remover o filtro de exclusões baseadas em TTL de um fluxo de alterações existente, faça o seguinte:
use o seguinte para definir o filtro como False
:
ALTER CHANGE STREAM STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)
Substitua:
- STREAM_NAME: o nome do novo fluxo de mudanças
No exemplo abaixo, o filtro exclude_ttl_deletes
é removido de um fluxo de alterações chamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)
Isso inclui todas as exclusões futuras com base no TTL no fluxo de mudanças.
Também é possível definir o filtro como null
para remover o filtro de exclusões com base no TTL.
PostgreSQL
Para remover o filtro de exclusões baseadas em TTL de um fluxo de alterações existente, faça o seguinte:
use o seguinte para definir o filtro como False
:
ALTER CHANGE STREAM STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = false)
Substitua:
- STREAM_NAME: o nome do novo fluxo de mudanças
No exemplo abaixo, o filtro exclude_ttl_deletes
é removido de um fluxo de alterações chamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = false)
Isso inclui todas as exclusões futuras com base no TTL no fluxo de mudanças.
Também é possível definir o filtro como null
para remover o filtro de exclusões com base no TTL.
Modificar o filtro por tipo de modificação da tabela
Para modificar os filtros de tipo de modificação de tabela de um fluxo de mudanças,
defina o tipo de filtro em uma instrução DDL ALTER CHANGE STREAM
. Você pode usar isso
para adicionar um novo filtro ou remover um existente do fluxo de alterações.
Adicionar um filtro de tipo de modificação de tabela a um fluxo de alterações
GoogleSQL
Para adicionar um ou mais filtros de tipo de modificação de tabela a um fluxo de alterações
existente, use o seguinte para definir o filtro como true
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)
Substitua:
- CHANGE_STREAM_NAME: substitua pelo nome atual fluxo de alterações
- MOD_TYPE_FILTER_NAME: substituir pelo filtro que você
que você quer adicionar:
exclude_insert
,exclude_update
ouexclude_delete
. Se você adicionar mais de um filtro por vez, separe cada um deles com uma vírgula.
No exemplo abaixo, o filtro exclude_delete
é adicionado a um fluxo de mudanças
chamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)
PostgreSQL
Para adicionar um ou mais filtros novos de tipo de modificação da tabela a uma tabela
fluxo de alterações, use o seguinte para definir o filtro como true
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)
Substitua:
- CHANGE_STREAM_NAME: substitua pelo nome atual fluxo de alterações
- MOD_TYPE_FILTER_NAME: substituir pelo filtro que você
que você quer adicionar:
exclude_insert
,exclude_update
ouexclude_delete
. Se você adicionar mais de um filtro por vez, separe cada um deles com uma vírgula.
No exemplo a seguir, o filtro exclude_delete
é adicionado a um
fluxo de alterações chamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)
Remover um filtro de tipo de modificação de tabela de um fluxo de alterações atual
GoogleSQL
Para remover um ou mais filtros de tipo de modificação de tabela no fluxo de mudanças, use o seguinte para definir o filtro como false
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)
Substitua:
- CHANGE_STREAM_NAME: substitua pelo nome do fluxo de alterações existente
- MOD_TYPE_FILTER_NAME: substitua pelo filtro que
você quer remover:
exclude_insert
,exclude_update
ouexclude_delete
. Se você remover mais de um filtro por vez, separe cada um com uma vírgula.
No exemplo abaixo, o filtro exclude_delete
é removido de um fluxo de alterações
chamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)
Também é possível remover um filtro de modificação da tabela configurando o filtro.
de volta ao valor padrão. Para fazer isso, defina o valor do filtro como null
.
PostgreSQL
Para remover um ou mais filtros de tipo de modificação da tabela no
fluxo de alterações, use o seguinte para definir o filtro como False
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)
Substitua:
- CHANGE_STREAM_NAME: substitua pelo nome atual fluxo de alterações
- MOD_TYPE_FILTER_NAME: substituir pelo filtro que você
que você quer adicionar:
exclude_insert
,exclude_update
ouexclude_delete
. Se você adicionar mais de um filtro por vez, separe cada um deles com uma vírgula.
No exemplo a seguir, o filtro exclude_delete
é removido de um
fluxo de alterações chamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)
Também é possível remover um filtro de modificação da tabela configurando o filtro.
de volta ao valor padrão. Para fazer isso, defina o valor do filtro como null
.
Suspender um fluxo de alterações
Se você quiser que um fluxo de alterações interrompa sua atividade, mas mantenha a registros internos, pelo menos durante o período de armazenamento de dados, você pode alterá-lo para que não veja nada.
Para fazer isso, emita uma instrução DDL ALTER CHANGE STREAM
que substitua
a definição do fluxo de mudanças pela frase especial DROP FOR ALL
.
Exemplo:
ALTER CHANGE STREAM MyStream DROP FOR ALL;
O fluxo continua existindo no banco de dados, mas não monitora objetos nem gera outros registros de alteração de dados. Os registros de mudança existentes permanecem intactos, sujeitos à política de retenção de dados do fluxo.
Para retomar uma transmissão suspensa, emita outro ALTER CHANGE STREAM
com a configuração anterior.
Excluir um fluxo de alterações
Para excluir permanentemente um fluxo de alterações, emita uma instrução DROP CHANGE STREAM
que inclua o nome do fluxo:
DROP CHANGE STREAM NamesAndAlbums;
O Spanner interrompe o fluxo imediatamente, remove-o do esquema do banco de dados e exclui os registros de alteração de dados.
Listar e visualizar fluxo de alterações
O console do Google Cloud fornece uma interface da Web para listar e analisar as definições de fluxo de alterações de um banco de dados. Também é possível consultar dos fluxos de alterações como instruções DDL equivalentes ou consultando o esquema de informações do banco de dados.
Conferir fluxo de alterações com o console do Google Cloud
Para ver uma lista dos fluxo de alterações de um banco de dados e revisar as definições deles:
Acesse a página de instâncias do Spanner no console do Google Cloud.
Navegue até a instância e o banco de dados apropriados.
Clique em Mudar fluxos no menu de navegação.
Isso mostra uma lista de todos os fluxos de mudanças do banco de dados e resume a configuração de cada um deles. Clicando no nome de um stream revela mais detalhes sobre as tabelas e colunas que ele monitora.
Conferir definições dos fluxo de alterações como DDL
A visualização do esquema de um banco de dados como DDL inclui descrições de todos os
fluxo de alterações, onde aparecem como instruções CREATE CHANGE STREAM
.
Para fazer isso no console, clique no link Show equivalent DDL na página do banco de dados no console do Google Cloud.
Para fazer isso na linha de comando, use o comando
ddl describe
do Google Cloud CLI.
Consultar o esquema de informações sobre fluxos de alterações
Você pode consultar diretamente as informações de um banco de dados de alterações sobre os fluxo de alterações dele. As tabelas a seguir contêm os metadados que definem os nomes dos fluxos de mudanças, as tabelas e colunas que eles monitoram e os períodos de retenção:
Práticas recomendadas para fluxos de mudanças
Confira a seguir algumas práticas recomendadas para configurar e gerenciar mudanças córregos.
Considere um banco de dados de metadados separado
Os fluxos de alterações usam um banco de dados de metadados para manter o estado interno. O banco de dados de metadados pode ser igual ou diferente do banco de dados que contém os streams de alteração. Recomendamos a criação de um banco de dados separado para armazenamento de metadados.
O conector de fluxos de alterações do Spanner precisa de permissões de leitura e gravação no banco de dados de metadados. Não é necessário preparar esse banco de dados com um esquema. O conector cuida disso.
O uso de um banco de dados de metadados separado elimina as complexidades que possam surgir de permitir que o conector grave diretamente no banco de dados do aplicativo:
Ao separar o banco de dados de metadados do banco de dados de produção com o fluxo de alterações, o conector precisa apenas de permissões de leitura no banco de dados de produção.
Ao restringir o tráfego do conector a um banco de dados de metadados separado, as gravações realizadas pelo próprio conector não são incluídas nos streams de mudanças de produção. Isso é especialmente relevante para fluxos de mudança que monitoram todo o banco de dados.
Se nenhum banco de dados separado estiver sendo usado para armazenar os metadados, recomendamos monitorar o impacto da CPU do conector de fluxos de alterações nas instâncias.
Comparar novos fluxos de alterações e redimensionar se necessário
Antes de adicionar novos fluxos de mudanças à sua instância de produção, considere fazer um comparativo de uma carga de trabalho realista em uma instância de teste com fluxos de mudanças ativados. Isso permite determinar se você precisa adicionar nós à sua instância, com o objetivo de aumentar a capacidade de computação e e capacidades.
Execute esses testes até que as métricas de CPU e armazenamento se estabilizem. O ideal é que a utilização da CPU da instância permaneça abaixo dos valores máximos recomendados e que o uso de armazenamento não exceda o limite da instância.
Usar regiões diferentes para balancear a carga
Ao usar fluxos de mudanças em uma configuração de instância multirregional, considere executar os pipelines de processamento em uma região diferente da região líder padrão. Isso ajuda a espalhar a carga de streaming entre réplicas não líderes. Se você precisa priorizar o menor atraso possível no streaming No entanto, o balanceamento de carga executa a carga de streaming na região líder.
A seguir
Use modelos para conectar rapidamente um fluxo de alterações ao BigQuery, Cloud Storage ou Pub/Sub.