Crea y administra flujos de cambios

En esta página, se describe cómo crear, modificar y ver los cambios de Spanner transmisiones continuas. Para obtener más información sobre los flujos de cambios, consulta Acerca de los flujos de cambios.

Dado que los flujos de cambios son objetos de esquema, debes crearlos y administrarlos a través del mismo esquema impulsado por DDL actualizaciones que se usan para cualquier otro tipo de definición de bases de datos, como crear tablas o agregar índices.

Spanner inicia una red de larga duración una operación después de enviar una declaración DDL que cambie el esquema, incluidas las que se usaron para crear, alterar o borrar flujos de cambios. Un flujo de cambios nuevo o alterado comenzar a observar las columnas o tablas especificadas por su nueva configuración cuando se complete esta operación de larga duración.

Crear transmisión de cambios

Para crear un flujo de cambios, debes proporcionar su nombre y el esquema de objetos que observará: toda la base de datos o una lista de tablas y columnas. De manera opcional, puedes especificar lo siguiente:

GoogleSQL

La sintaxis de DDL para crear un flujo de cambios con GoogleSQL se ve así:

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

La sintaxis de DDL para crear un flujo de cambios con PostgreSQL parece así:

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

Un nuevo flujo de cambios comienza a observar sus objetos de esquema asignados en cuanto mientras se completa la operación de larga duración que la creó.

Los siguientes ejemplos ilustran la creación de flujos de cambios con varios parámetros de configuración.

Mira una base de datos completa

Para crear un flujo de cambios que observe cada cambio en los datos realizado en las tablas de una base de datos, usa la palabra clave ALL:

CREATE CHANGE STREAM EverythingStream
FOR ALL;

La configuración ALL implícitamente incluye todos los datos futuros de la base de datos tablas y columnas, apenas se crean. No realiza incluir vistas, tablas de esquema de información o otros objetos además de las tablas de datos normales.

Ver tablas específicas

Para limitar el alcance de un flujo de cambios a tablas específicas, en lugar que una base de datos completa, especifica una lista de una o más tablas:

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

Spanner actualiza automáticamente los flujos de cambios que supervisan tablas completas para reflejar cualquier cambio de esquema que las afecte, como columnas agregadas o eliminadas.

Supervisa columnas específicas

Usa la sintaxis table(column_1[, column_2, ...]) para observar los cambios en uno o más casos específicos. columnas sin clave dentro de las tablas a las que les asignas un nombre:

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

No puedes especificar columnas de clave primaria aquí porque en cada flujo de cambios siempre realiza un seguimiento de las claves primarias de cada tabla que supervisa. Esto permite en cada registro de cambios de datos para identificar la fila modificada por su clave primaria.

Mira tablas y columnas en una sola transmisión

Puedes combinar la sintaxis de visualización de tablas y columnas de los dos ejemplos anteriores en un solo flujo de cambios:

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

Especifica un período de retención más largo

Para especificar un período de retención de datos del flujo de cambios más largo que el predeterminado de un día, establece retention_period en un período de hasta una semana, expresado como horas (h) o días (d).

Dos ejemplos:

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

Especifica un tipo de captura de valor diferente

Especificar un tipo de captura de valor de flujo de cambios distinto de OLD_AND_NEW_VALUES, establece el value_capture_type en NEW_VALUES o NEW_ROW, como se muestra en los siguientes ejemplos:

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 eliminaciones basadas en el TTL

Puedes filtrar las eliminaciones basadas en el TTL del alcance de tus flujos de cambios mediante el filtro exclude_ttl_deletes.

Para obtener más información sobre el funcionamiento de este filtro, consulta Filtro de eliminaciones basadas en el tiempo de actividad:

GoogleSQL

Para crear un flujo de cambios con el filtro de eliminaciones basadas en el TTL, usa lo siguiente:

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

Reemplaza lo siguiente:

  • CHANGE_STREAM_NAME: Es el nombre del nuevo. flujo de cambios

En el siguiente ejemplo, se crea un flujo de cambios llamado NewFilterChangeStream que excluya todas las eliminaciones basadas en el TTL:

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

PostgreSQL

Para crear un flujo de cambios con el filtro de eliminaciones basadas en el TTL, usa lo siguiente:

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

Reemplaza lo siguiente:

  • STREAM_NAME: Es el nombre del nuevo. flujo de cambios

En el siguiente ejemplo, se crea un flujo de cambios llamado NewFilterChangeStream que excluye todas las eliminaciones basadas en TTL:

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

Para agregar o quitar el filtro de eliminaciones basadas en el TTL de un flujo de cambios, consulta Modifica el filtro de eliminaciones basadas en el TTL. Para confirmar los filtros de los flujos de cambios, haz lo siguiente: visualizar definiciones del flujo de cambios como DDL

Filtrar por tipo de modificación de tabla

Filtra una o más de estas modificaciones de la tabla de tu el alcance de los flujos de cambios con las siguientes opciones de filtro disponibles:

  • exclude_insert: Excluye todas las modificaciones de la tabla INSERT.
  • exclude_update: Excluye todas las modificaciones de la tabla UPDATE.
  • exclude_delete: Excluye todas las modificaciones de la tabla DELETE.

Para obtener más información sobre el funcionamiento de estos filtros, consulta Filtros de tipos de modificación de tablas.

GoogleSQL

Cómo crear un flujo de cambios con uno o más tipos de modificación de tabla filtros, usa lo siguiente:

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

Reemplaza lo siguiente:

  • CHANGE_STREAM_NAME: Es el nombre del nuevo. flujo de cambios
  • MOD_TYPE_FILTER_NAME: El filtro que deseas agregar: exclude_insert, exclude_update o exclude_delete. Si agregas más de un filtro a la vez, separa cada uno con una coma.

En el siguiente ejemplo, se crea un flujo de cambios llamado NewFilterChangeStream que excluya los tipos de modificación de tabla INSERT y UPDATE:

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

PostgreSQL

Cómo crear un flujo de cambios con uno o más tipos de modificación de tabla filtros, usa lo siguiente:

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

Reemplaza lo siguiente:

  • CHANGE_STREAM_NAME: Es el nombre del proyecto. flujo de cambios
  • MOD_TYPE_FILTER_NAME: El filtro que deseas agregar: exclude_insert, exclude_update o exclude_delete. Si agregas más de un filtro a la vez, separa cada uno con una coma.

En el siguiente ejemplo, se crea un flujo de cambios llamado NewFilterChangeStream que excluya la modificación de la tabla INSERT y UPDATE tipos de transacciones:

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

Para agregar o quitar un filtro de tipo de modificación de tabla de una tabla flujo de cambios, consulte Cómo modificar los filtros por tipo de modificación de la tabla. Puedes confirmar qué filtros de tipo de modificación de tabla existen para tu flujo de cambios de visualizar definiciones del flujo de cambios como DDL

Cómo modificar un flujo de cambios

Para modificar la configuración de un flujo de cambios, usa un DDL ALTER CHANGE STREAM declaración. Su sintaxis es similar a la de CREATE CHANGE STREAM. Puedes cambiar las columnas que observa un flujo o la duración de su período de retención de datos. También puedes suspender su reproducción por completo para conservar sus registros de cambios en los datos.

Modificar lo que observa un flujo de cambios

En este ejemplo, se agrega toda la tabla Songs a NamesAndAlbums flujo de cambios configurado anteriormente:

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

Spanner reemplaza el comportamiento del flujo de cambios nombrado por la configuración nueva cuando se completa la operación de larga duración que actualiza la definición del flujo de cambios dentro del esquema de la base de datos.

Modifica el período de retención de datos de un flujo de cambios

Para modificar el tiempo que un flujo de cambios retiene su configura el retention_period en una declaración DDL ALTER CHANGE STREAM.

En este ejemplo, se ajusta el período de retención de datos al NamesAndAlbums flujo de cambios creado anteriormente:

GoogleSQL

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

PostgreSQL

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

Cómo modificar el tipo de captura de valor de un flujo de cambios

Para modificar el tipo de captura de valor de un flujo de cambios, establece la Cláusula value_capture_type en una declaración DDL ALTER CHANGE STREAM.

En este ejemplo, se ajusta el tipo de captura de valor a 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 eliminaciones basadas en el TTL

Para modificar el filtro de borradores basados en el TTL para realizar un cambio establece el filtro exclude_ttl_deletes en un DDL ALTER CHANGE STREAM declaración. Puedes usar esta opción para agregar el filtro o quitarlo de tus flujos de cambios existentes.

Para obtener más información sobre el funcionamiento de estos filtros, consulta Filtro de eliminaciones basadas en el tiempo de actividad:

Agrega el filtro de eliminaciones basadas en el TTL a un flujo de cambios existente

GoogleSQL

Para agregar el filtro de eliminaciones basadas en el TTL a un flujo de cambios existente, usa lo siguiente para establecer el filtro en true:

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

Reemplaza lo siguiente:

  • CHANGE_STREAM_NAME: Es el nombre del proyecto. flujo de cambios

En el siguiente ejemplo, el filtro exclude_ttl_deletes se agrega a un flujo de cambios existente llamado NewFilterChangeStream: que excluya todas las eliminaciones basadas en el TTL:

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

Esto excluye todas las eliminaciones basadas en el TTL del flujo de cambios.

PostgreSQL

Para agregar el filtro de eliminaciones basadas en el TTL a un flujo de cambios existente, usa lo siguiente para establecer el filtro en True:

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

Reemplaza lo siguiente:

  • STREAM_NAME: Es el nombre del proyecto. flujo de cambios

En el siguiente ejemplo, el filtro exclude_ttl_deletes se agrega a un flujo de cambios existente llamado NewFilterChangeStream:

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

Esto excluye todas las eliminaciones futuras basadas en el TTL del flujo de cambios.

Quita el filtro de eliminaciones basadas en el TTL de un flujo de cambios existente

GoogleSQL

Para quitar el filtro de eliminaciones basadas en el TTL de un flujo de cambios existente, usa lo siguiente para establecer el filtro en False:

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

Reemplaza lo siguiente:

  • STREAM_NAME: Es el nombre del nuevo. flujo de cambios

En el siguiente ejemplo, se quita el filtro exclude_ttl_deletes de un flujo de cambios existente llamado NewFilterChangeStream:

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

Esto incluye todas las eliminaciones futuras basadas en el TTL del flujo de cambios.

También puedes establecer el filtro en null para quitar el filtro de eliminaciones basadas en el TTL.

PostgreSQL

Para quitar el filtro de eliminaciones basadas en el TTL de un flujo de cambios existente, usa lo siguiente para establecer el filtro en False:

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

Reemplaza lo siguiente:

  • STREAM_NAME: Es el nombre del nuevo. flujo de cambios

En el siguiente ejemplo, se quita el filtro exclude_ttl_deletes de un flujo de cambios existente llamado NewFilterChangeStream:

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

Esto incluye todas las eliminaciones futuras basadas en el TTL del flujo de cambios.

También puedes establecer el filtro en null para quitar el filtro de eliminaciones basadas en el TTL.

Modificar el filtro por tipo de modificación de la tabla

Para modificar los filtros de tipo de modificación de tabla de un flujo de cambios, establece el tipo de filtro en una declaración DDL ALTER CHANGE STREAM. Puedes usar esta para agregar un filtro nuevo a tu flujo de cambios o quitar uno existente.

Cómo agregar un filtro de tipo de modificación de tabla a un flujo de cambios existente

GoogleSQL

Para agregar uno o más filtros nuevos de tipos de modificación de tabla a una tabla existente flujo de cambios, utiliza lo siguiente para establecer el filtro en true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

Reemplaza lo siguiente:

  • CHANGE_STREAM_NAME: Reemplázalo por el nombre de tu archivo existente. flujo de cambios
  • MOD_TYPE_FILTER_NAME: Reemplaza con el filtro que deseas agregar: exclude_insert, exclude_update o exclude_delete. Si agregas más de un filtro a la vez, separa cada uno con una coma.

En el siguiente ejemplo, el filtro exclude_delete se agrega a un flujo de cambios existente llamado NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

Para agregar uno o más filtros nuevos de tipos de modificación de tabla a una tabla existente flujo de cambios, utiliza lo siguiente para establecer el filtro en true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

Reemplaza lo siguiente:

  • CHANGE_STREAM_NAME: Reemplázalo por el nombre de tu archivo existente. flujo de cambios
  • MOD_TYPE_FILTER_NAME: Reemplaza con el filtro que deseas agregar: exclude_insert, exclude_update o exclude_delete. Si agregas más de un filtro a la vez, separa cada uno con una coma.

En el siguiente ejemplo, el filtro exclude_delete se agrega a un bucket flujo de cambios llamado NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

Cómo quitar un filtro de tipo de modificación de tabla de un flujo de cambios existente

GoogleSQL

Para quitar uno o más filtros existentes de tipos de modificación de tabla en flujo de cambios, utiliza lo siguiente para establecer el filtro en false:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

Reemplaza lo siguiente:

  • CHANGE_STREAM_NAME: Reemplázalo por el nombre de tu archivo existente. flujo de cambios
  • MOD_TYPE_FILTER_NAME: Reemplaza con el filtro que deseas quitar: exclude_insert, exclude_update o exclude_delete. Si quieres quitar más de un filtro a la vez, separa cada uno con una coma.

En el siguiente ejemplo, el filtro exclude_delete se quita de un flujo de cambios llamado NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)

También puedes configurar el filtro para quitar un filtro de modificación de tablas al valor predeterminado. Para ello, establece el valor del filtro en null.

PostgreSQL

Para quitar uno o más filtros existentes de tipos de modificación de tabla en flujo de cambios, utiliza lo siguiente para establecer el filtro en False:

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

Reemplaza lo siguiente:

  • CHANGE_STREAM_NAME: Reemplázalo por el nombre de tu archivo existente. flujo de cambios
  • MOD_TYPE_FILTER_NAME: Reemplaza con el filtro que deseas agregar: exclude_insert, exclude_update o exclude_delete. Si agregas más de un filtro a la vez, separa cada uno con una coma.

En el siguiente ejemplo, el filtro exclude_delete se quita de un flujo de cambios llamado NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)

También puedes configurar el filtro para quitar un filtro de modificación de tablas al valor predeterminado. Para ello, establece el valor del filtro en null.

Cómo suspender un flujo de cambios

Si deseas que un flujo de cambios detenga su actividad, pero conserve su registros internos, al menos durante la vigencia del período de retención de datos, puede modificarla para que no vea nada.

Para ello, emite una sentencia DDL ALTER CHANGE STREAM que reemplace la definición del flujo de cambios por la frase especial DROP FOR ALL. Por ejemplo:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

La transmisión sigue existiendo en la base de datos, pero no observa objetos. y no genera más registros de cambios de datos. Su cambio existente los registros permanecen intactos, sujetos a la política de retención de datos de la transmisión.

Para reanudar una transmisión suspendida, emite otra ALTER CHANGE STREAM. con su configuración previa.

Cómo borrar un flujo de cambios

Para borrar de forma permanente un flujo de cambios, emite una DROP CHANGE STREAM que incluya el nombre de la transmisión:

DROP CHANGE STREAM NamesAndAlbums;

Spanner detiene de inmediato la transmisión y la quita de la el esquema de la base de datos y borra los registros de cambios en los datos.

Enumera y visualiza flujos de cambios

La consola de Google Cloud proporciona una interfaz web para enumerar y revisar las definiciones del flujo de cambios de una base de datos También puedes consultar el de los flujos de cambios como sus declaraciones DDL equivalentes, o consultar el esquema de información de la base de datos.

Consulta flujos de cambios con la consola de Google Cloud

Para ver una lista de los flujos de cambios de una base de datos y revisar sus definiciones, haz lo siguiente:

  1. Visita la página Instancias de Spanner de la consola de Google Cloud.

    Abrir la página de instancias

  2. Navega a la instancia y base de datos adecuadas.

  3. En el menú de navegación, haz clic en Cambiar transmisiones.

Se mostrará una lista de todos los flujos de cambios de esa base de datos. resume la configuración de cada uno. Hacer clic en el nombre de una transmisión revela más detalles sobre las tablas y columnas que supervisa.

Ver definiciones de flujos de cambios como DDL

Ver el esquema de una base de datos como DDL incluye descripciones de todos sus flujos de cambios, donde aparecen como sentencias CREATE CHANGE STREAM.

  • Para hacerlo desde la consola, haz clic en el vínculo Mostrar DDL equivalente en la página de la base de datos en la consola de Google Cloud.

  • Para hacer esto desde la línea de comandos, usa el comando ddl describe de Google Cloud CLI.

Consultar el esquema de información sobre los flujos de cambios

Puedes consultar directamente el esquema de información de una base de datos sobre sus transmisiones de cambios. El siguientes tablas contienen los metadatos que definen los flujos de cambios nombres, las tablas y las columnas que miran y su retención períodos:

Prácticas recomendadas para las transmisiones de cambios

Las siguientes son algunas prácticas recomendadas para configurar y administrar cambios transmisiones continuas.

Considera una base de datos de metadatos independiente

Los flujos de cambios usan una base de datos de metadatos para mantener el estado interno. La base de datos de metadatos puede ser igual o diferente a la base de datos que contiene los flujos de cambios. Recomendamos crear una base de datos separada para el almacenamiento de metadatos.

El conector de flujos de cambios de Spanner necesita operaciones de lectura y escritura permisos a la base de datos de metadatos. No es necesario que prepares base de datos con un esquema; y el conector se encarga de eso.

Usar una base de datos de metadatos separada elimina las complejidades que pueden surgir para permitir que el conector escriba directamente en la base de datos de tu aplicación:

  • Cuando se separa la base de datos de metadatos de la base de datos de producción con el flujo de cambios, el conector solo necesita permisos de lectura para la base de datos de producción.

  • Mediante la restricción del tráfico del conector a metadatos independientes no se incluyen las operaciones de escritura realizadas por el conector en los flujos de cambios de producción. Esto es especialmente relevante para los flujos de cambios que miran toda la base de datos.

Si no se usa ninguna base de datos separada para almacenar los metadatos, recomendamos supervisar el impacto en la CPU del conector de flujos de cambios en sus instancias

Genera comparativas de los flujos de cambios nuevos y cambia el tamaño si es necesario

Antes de agregar flujos de cambios nuevos a tu instancia de producción, considera realizar comparativas de una carga de trabajo realista en una instancia de preparación con flujos de cambios habilitados. Esto te permite determinar si necesitas agregar nodos a tu instancia para aumentar sus capacidades de procesamiento y almacenamiento.

Ejecuta estas pruebas hasta que se estabilicen las métricas de CPU y almacenamiento. De manera óptima, el uso de CPU de la instancia debe permanecer por debajo de los valores máximos recomendados, y su uso de almacenamiento no debe exceder el límite de almacenamiento de la instancia.

Usa diferentes regiones para balancear la carga

Cuando uses flujos de cambios en una configuración de instancia multirregional, considera ejecutar sus canalizaciones de procesamiento en una región diferente de la región líder predeterminada. Esto ayuda a distribuir la carga de transmisión entre las réplicas no líderes. Si debes priorizar la menor demora en la transmisión mientras que el balanceo de cargas ejecuta la carga de transmisión en la región líder.

¿Qué sigue?