Criar e gerenciar fluxo de alterações

Nesta página, descrevemos como criar, modificar e consultar as alterações no Spanner córregos. Para saber mais, consulte Sobre os fluxos 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 alterações, forneça o nome dele e o esquema objetos que ele observará: todo o banco de dados ou uma lista de objetos específicos tabelas e colunas. Opcionalmente, é possível especificar o seguinte:

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 alterações começa a observar os objetos de esquema atribuídos assim que possível que a operação de longa duração que a criou é concluída.

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

Monitorar um banco de dados inteiro

Para criar um fluxo de alterações que observa cada alteração de dados realizada 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.

Observar 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;

Mudança nas atualizações automáticas do Spanner streams que observam tabelas inteiras para refletir as alterações no esquema que afetam essas tabelas, como colunas adicionadas ou descartadas.

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 cada registro de alteração de dados para identificar a linha alterada por sua chave primária.

Monitorar tabelas e colunas em um único stream

É possível combinar a sintaxe de observação de tabelas e de colunas dos dois exemplos anteriores em um único fluxo de alterações:

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

Especificar um período de armazenamento 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

Especificar um tipo de captura do valor do 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 alterações usando o filtro exclude_ttl_deletes.

Para mais informações sobre como esse filtro funciona, consulte Filtro de exclusões baseadas 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 alterações

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 alterações chamado NewFilterChangeStream. que exclui todas as exclusões baseadas em TTL:

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

Para adicionar ou remover o filtro de exclusões baseadas em TTL de uma fluxo de alterações, consulte Modificar o filtro de exclusões baseadas em TTL. Para confirmar seus filtros de fluxo de alterações, visualizar 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 da tabela do seu o escopo do fluxo de alterações usando as seguintes opções de filtro disponíveis:

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

Para mais informações sobre como esses filtros funcionam, consulte Filtros de tipo de modificação da 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 ou exclude_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 alterações 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 alterações com um ou mais tipos de modificação de tabela filtros, 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 ou exclude_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 alterações chamado NewFilterChangeStream. que exclui a modificação da tabela INSERT e UPDATE tipos de transação:

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

Para adicionar ou remover um filtro de tipo de modificação da tabela de uma tabela atual fluxo de alterações, consulte Modificar filtro por tipo de modificação da 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 . Ele usa uma sintaxe semelhante a CREATE CHANGE STREAM. Você pode mudam as colunas que são monitoradas por um stream ou o tamanho dos dados dele. período de armazenamento. Você também pode suspender totalmente a exibição enquanto e manutenção dos registros de alteração de dados.

Modificar o que um fluxo de alterações assiste

Este exemplo adiciona a tabela Songs inteira ao NamesAndAlbums fluxo de alterações 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 das esquema.

Modificar o período de armazenamento de dados de um fluxo de alterações

Para modificar o período pelo qual um fluxo de alterações retém seu valor registros, defina o retention_period em uma instrução DDL ALTER CHANGE STREAM.

Este exemplo ajusta o período de armazenamento de dados para NamesAndAlbums fluxo de alterações 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 alterações

Para modificar o tipo de captura de valor de um fluxo de alterações, defina o 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 filtro de exclusões baseadas em TTL

Modificar o filtro de exclusões baseadas em TTL para uma alteração stream, defina o filtro exclude_ttl_deletes em uma 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 baseadas em TTL a um fluxo de alterações existente: 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 a seguir, o filtro exclude_ttl_deletes é adicionado a uma fluxo de alterações atual 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 baseadas em TTL a um fluxo de alterações existente: 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 existente. fluxo de alterações

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 baseadas em TTL de um fluxo de alterações atual

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 alterações

No exemplo a seguir, o filtro exclude_ttl_deletes é removido de uma fluxo de alterações atual chamado NewFilterChangeStream:

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

Isso inclui todas as exclusões futuras baseadas em TTL no fluxo de alterações.

Também é possível definir o filtro como null para remover o filtro de exclusões baseadas em 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 alterações

No exemplo a seguir, o filtro exclude_ttl_deletes é removido de uma fluxo de alterações atual chamado NewFilterChangeStream:

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

Isso inclui todas as exclusões futuras baseadas em TTL no fluxo de alterações.

Também é possível definir o filtro como null para remover o filtro de exclusões baseadas em TTL.

Modificar filtro por tipo de modificação da tabela

Para modificar os filtros de tipo de modificação da tabela em um fluxo de alterações: 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 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 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 ou exclude_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 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 ou exclude_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 da tabela no fluxo de alterações, 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 atual fluxo de alterações
  • MOD_TYPE_FILTER_NAME: substituir pelo filtro que você quer remover: exclude_insert, exclude_update ou exclude_delete. Se você remover 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 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 ou exclude_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 isso, emita uma instrução DDL ALTER CHANGE STREAM que substitua a definição do fluxo de alterações com a frase especial DROP FOR ALL. Exemplo:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

O stream continua no banco de dados, mas não observa objetos. e não gera mais registros de alteração de dados. A mudança atual os registros permaneçam intactos, sujeitos à política de retenção de dados do stream.

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 um DROP CHANGE STREAM que inclui o nome do stream:

DROP CHANGE STREAM NamesAndAlbums;

O Spanner interrompe imediatamente o stream, remove-o da do banco de dados e exclui os registros de alteração de dados dele.

Listar e visualizar fluxo de alterações

O console do Google Cloud tem uma interface da Web para listar e revisar 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:

  1. Acesse a página de instâncias do Spanner no console do Google Cloud.

    Abrir a página "Instâncias"

  2. Navegue até a instância e o banco de dados apropriados.

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

Isso exibe uma lista de todos os fluxo de alterações desse banco de dados. resume a configuração de cada um. 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 Mostrar DDL equivalente 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 fluxo 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. O as tabelas a seguir contêm os metadados que definem o fluxo de as tabelas e colunas que eles observam e os nomes períodos:

Práticas recomendadas de fluxos de alterações

Confira a seguir algumas práticas recomendadas para configurar e gerenciar mudanças córregos.

Considere um banco de dados de metadados separado

Os streams de alteração 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 que contém os fluxo de alterações. Recomendamos a criação de um banco de dados separado para armazenamento de metadados.

O conector de fluxo de alterações do Spanner precisa de leitura e gravação permissões ao banco de dados de metadados. Não é necessário preparar este 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 permissões de leitura no banco de dados de produção.

  • Restringindo o tráfego do conector a metadados separados. no banco de dados, as gravações realizadas pelo próprio conector não são incluídas nos fluxo de alterações da produção. Isso é especialmente relevante para fluxo de alterações. 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 sobre o conector de fluxo de alterações nas instâncias.

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

Antes de adicionar novos fluxo de alterações à sua instância de produção, considere comparar uma carga de trabalho realista em uma instância de preparo com alterações streams 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 o uso de CPU da instância deve permanecer abaixo os máximos recomendados, e o uso do armazenamento dela não deve exceder o limite de armazenamento da instância.

Use regiões diferentes para balancear a carga

Ao usar fluxo de alterações em um configuração de instância multirregional, considere executar os pipelines de processamento em uma região diferente da região líder padrão regiã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