En esta página, se describe cómo crear, modificar y ver transmisiones de cambios de Spanner para bases de datos con dialecto de GoogleSQL y bases de datos con dialecto de PostgreSQL. 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, se crean y administran a través de las mismas actualizaciones de esquema controladas por DDL que se usan para cualquier otro tipo de trabajo de definición de bases de datos, como la creación de tablas o la adición de índices.
Spanner inicia una operación de larga duración después de que envías una declaración en DDL que cambia el esquema, incluidas las que se usan para crear, alterar o borrar flujos de cambios. Un flujo de cambios nuevo o alterado comienza a observar las columnas o tablas especificadas por su nueva configuración cuando se completa esta operación de larga duración.
Crear transmisión de cambios
Para crear un flujo de cambios, debes proporcionar su nombre y los objetos de esquema que supervisa: toda la base de datos o una lista de tablas y columnas específicas. De manera opcional, puedes configurar un flujo de cambios con cualquiera de las siguientes opciones:
- Especifica el período de retención de datos para anular el período de retención predeterminado de un día.
- Especifica el tipo de captura de valor para anular el tipo de captura de valor predeterminado
OLD_AND_NEW_VALUES
. - Aplica un filtro de eliminaciones basadas en el TTL para filtrar las eliminaciones basadas en el TTL de tus flujos de cambios.
- Aplica un filtro de modificaciones de la tabla para excluir todas las modificaciones de las tablas
INSERT
,UPDATE
oDELETE
. Habilita una exclusión de registros a nivel de la transacción para excluir ciertas transacciones de tus flujos de cambios.
GoogleSQL
La sintaxis del DDL para crear un flujo de cambios con GoogleSQL es la siguiente:
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
La sintaxis de DDL para crear un flujo de cambios con PostgreSQL es la siguiente:
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
)
]
Una nueva transmisión de cambios comienza a observar los objetos de esquema asignados tan pronto como se completa la operación de larga duración que la creó.
En los siguientes ejemplos, se ilustra la creación de flujos de cambios con varios parámetros de configuración.
Cómo observar una base de datos completa
Para crear un flujo de cambios que observe cada cambio de datos que se realice en las tablas de una base de datos, usa la palabra clave ALL
:
CREATE CHANGE STREAM EverythingStream
FOR ALL;
La configuración de ALL
incluye de forma implícita todas las futuras tablas y columnas de datos de la base de datos, en cuanto se crean. No incluye vistas, tablas de esquemas de información ni otros objetos, además de las tablas de datos normales.
Cómo mirar tablas específicas
Para limitar el alcance de un flujo de cambios a tablas específicas, en lugar de a toda una base de datos, 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 afecte a esas tablas, como las columnas agregadas o quitadas.
Supervisa columnas específicas
Usa la sintaxis table(column_1[, column_2,
...])
para observar los cambios en una o más columnas específicas que no sean clave dentro de las tablas que nombres:
CREATE CHANGE STREAM NamesAndTitles
FOR Singers(FirstName, LastName), Albums(Title);
Aquí no puedes especificar columnas de clave primaria, ya que cada transmisión de cambios siempre hace un seguimiento de las claves primarias de cada tabla que supervisa. Esto permite que cada registro de cambio de datos identifique la fila modificada por su clave primaria.
Observa tablas y columnas en una sola transmisión
Puedes combinar la sintaxis de observació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 treinta días, expresado en 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' );
Cómo especificar otro tipo de captura de valor
Para especificar un tipo de captura de valor de transmisión de cambios que no sea OLD_AND_NEW_VALUES
, establece 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' );
Filtra las eliminaciones basadas en el TTL
Puedes filtrar los borrados basados en el TTL del alcance de tu flujo de cambios con el filtro exclude_ttl_deletes
.
Para obtener más información sobre cómo funciona este filtro, consulta Filtro de eliminación basado en el tiempo de actividad.
GoogleSQL
Para crear un flujo de cambios con el filtro de borrados basados en TTL, ejecuta el siguiente ejemplo:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (exclude_ttl_deletes = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu nuevo flujo de cambios.
En el siguiente ejemplo, se crea un flujo de cambios llamado NewFilterChangeStream
que excluye todos los borrados basados en TTL:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_ttl_deletes = true)
PostgreSQL
Para crear un flujo de cambios con el filtro de borrados basados en TTL, ejecuta el siguiente ejemplo:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (exclude_ttl_deletes = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu nuevo flujo de cambios.
En el siguiente ejemplo, se crea un flujo de cambios llamado NewFilterChangeStream
que excluye todos los borrados basados en TTL:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_ttl_deletes = true)
Para agregar o quitar el filtro de borrados basados en TTL de un flujo de cambios existente, consulta Cómo modificar el filtro de borrados basados en TTL. Puedes confirmar tus filtros de transmisión de cambios viendo las definiciones de la transmisión de cambios como DDL.
Filtrar por tipo de modificación de la tabla
Filtra una o más de estas modificaciones de la tabla del alcance de tu flujo de cambios con las siguientes opciones de filtro disponibles:
exclude_insert
: Excluye todas las modificaciones de la tablaINSERT
.exclude_update
: Excluye todas las modificaciones de la tablaUPDATE
.exclude_delete
: Excluye todas las modificaciones de la tablaDELETE
.
Para obtener más información sobre cómo funcionan estos filtros, consulta Filtros de tipo de modificación de la tabla.
GoogleSQL
Para crear un flujo de cambios con uno o más filtros de tipo de modificación de tabla, ejecuta el siguiente comando:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (MOD_TYPE_FILTER_NAME = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu nuevo flujo de cambios.
- MOD_TYPE_FILTER_NAME: Es el filtro que deseas agregar:
exclude_insert
,exclude_update
oexclude_delete
. Si agregas más de un filtro a la vez, sepáralos con una coma.
En el siguiente ejemplo, se crea un flujo de cambios llamado NewFilterChangeStream
que excluye los tipos de modificación de la tabla INSERT
y UPDATE
:
CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_insert = true, exclude_update = true)
PostgreSQL
Para crear un flujo de cambios con uno o más filtros de tipo de modificación de tabla, ejecuta el siguiente comando:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (MOD_TYPE_FILTER_NAME = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu nuevo flujo de cambios.
- MOD_TYPE_FILTER_NAME: Es el filtro que deseas agregar:
exclude_insert
,exclude_update
oexclude_delete
. Si agregas más de un filtro a la vez, sepáralos con una coma.
En el siguiente ejemplo, se crea un flujo de cambios llamado NewFilterChangeStream
que excluye los tipos de modificación de la tabla INSERT
y UPDATE
:
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 un flujo de cambios existente, consulta Cómo modificar el filtro por tipo de modificación de tabla. Para confirmar qué filtros de tipo de modificación de tabla existen para tu flujo de cambios, consulta las definiciones del flujo de cambios como DDL.
Habilita la exclusión de registros a nivel de la transacción
Puedes habilitar tus flujos de cambios para excluir registros de transacciones de escritura especificadas si configuras la opción allow_txn_exclusion
cuando creas una transmisión de cambios o modificas una transmisión de cambios existente.
Para obtener más información sobre cómo funciona esta opción, consulta Exclusión de registros a nivel de la transacción.
GoogleSQL
Para crear un flujo de cambios que pueda excluir registros de transacciones de escritura especificadas, ejecuta lo siguiente:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (allow_txn_exclusion = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: El nombre del nuevo flujo de cambios
En el siguiente ejemplo, se crea un flujo de cambios llamado NewChangeStream
que puede excluir registros de transacciones de escritura especificadas:
CREATE CHANGE STREAM NewChangeStream FOR ALL
OPTIONS (allow_txn_exclusion = true)
PostgreSQL
Para crear un flujo de cambios que pueda excluir registros de transacciones de escritura especificadas, ejecuta lo siguiente:
CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (allow_txn_exclusion = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: El nombre del nuevo flujo de cambios
En el siguiente ejemplo, se crea un flujo de cambios llamado NewChangeStream
que puede excluir registros de transacciones de escritura especificadas:
CREATE CHANGE STREAM NewChangeStream FOR ALL
WITH (allow_txn_exclusion = true)
Para habilitar o inhabilitar la exclusión de registros a nivel de la transacción de un flujo de cambios existente, consulta Cómo modificar la exclusión de registros a nivel de la transacción. Para verificar la configuración de esta opción, consulta Cómo ver las definiciones de los flujos de cambios como DDL.
Cómo especificar una transacción de escritura que se excluirá de los flujos de cambios
Para especificar que se excluya una transacción de escritura de los flujos de cambios, debes establecer el parámetro exclude_txn_from_change_streams
en true
. En los siguientes ejemplos de código, se muestra cómo puedes especificar que una transacción de escritura se excluya de los flujos de cambios con la biblioteca cliente.
Go
Java
Modifica un flujo de cambios
Para modificar la configuración de un flujo de cambios, usa una declaración DDL ALTER CHANGE STREAM
. Usa una sintaxis similar a CREATE CHANGE STREAM
. Puedes cambiar las columnas que supervisa un flujo o la duración de su período de retención de datos. También puedes suspender su observación por completo y conservar sus registros de cambios de datos.
Cómo modificar lo que observa un flujo de cambios
En este ejemplo, se agrega toda la tabla Songs
al flujo de cambios NamesAndAlbums
configurado anteriormente:
ALTER CHANGE STREAM NamesAndAlbums
SET FOR Singers(FirstName, LastName), Albums, Songs;
Spanner reemplaza el comportamiento del flujo de cambios con nombre por la nueva configuración 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.
Cómo modificar el período de retención de datos de un flujo de cambios
Para modificar el período durante el cual un flujo de cambios conserva sus registros internos, establece retention_period
en una instrucción DDL de ALTER CHANGE STREAM
.
En este ejemplo, se ajusta el período de retención de datos al flujo de cambios NamesAndAlbums
creado anteriormente:
GoogleSQL
ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( retention_period = '36h' );
PostgreSQL
ALTER CHANGE STREAM NamesAndAlbums
SET ( retention_period = '36h' );
Modifica 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' );
Modifica el filtro de eliminaciones basadas en el TTL
Para modificar el filtro de borrados basados en TTL de un flujo de cambios, establece el filtro exclude_ttl_deletes
en una instrucción DDL de ALTER CHANGE STREAM
. Puedes usar este método para agregar o quitar el filtro de tus flujos de cambios existentes.
Para obtener más información sobre cómo funcionan estos filtros, consulta Filtro de eliminación basado en el tiempo de actividad.
Agrega el filtro de borrados basados en TTL a un flujo de cambios existente
GoogleSQL
Para agregar el filtro de borrados basados en TTL a un flujo de cambios existente, ejecuta el siguiente comando 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 de tu transmisión de cambios existente.
En el siguiente ejemplo, el filtro exclude_ttl_deletes
se agrega a un flujo de cambios existente llamado NewFilterChangeStream
que excluye todos los borrados basados en TTL:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)
Esto excluye todos los borrados futuros basados en el TTL del flujo de cambios.
PostgreSQL
Para agregar el filtro de borrados basados en TTL a un flujo de cambios existente, ejecuta el siguiente comando para establecer el filtro en true
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu transmisión de cambios existente.
En el siguiente ejemplo, el filtro exclude_ttl_deletes
se agrega a un flujo de cambios existente llamado NewFilterChangeStream
que excluye todos los borrados basados en TTL:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = true)
Esto excluye todos los borrados futuros basados en el TTL del flujo de cambios.
Quita el filtro de eliminación basado en TTL de un flujo de cambios existente
GoogleSQL
Para quitar el filtro de borrados basados en TTL de un flujo de cambios existente, ejecuta el siguiente comando para establecer el filtro en false
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu 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 todos los borrados futuros basados en el TTL del flujo de cambios.
También puedes establecer el filtro en null
para quitar el filtro de borrados basados en el TTL.
PostgreSQL
Para quitar el filtro de borrados basados en TTL de un flujo de cambios existente, ejecuta el siguiente comando para establecer el filtro en false
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = false)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu 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 todos los borrados futuros basados en el TTL del flujo de cambios.
También puedes establecer el filtro en null
para quitar el filtro de borrados basados en el TTL.
Modifica el filtro por tipo de modificación de la tabla
Para modificar los filtros de tipo de modificación de la tabla para un flujo de cambios, establece el tipo de filtro en una instrucción DDL ALTER CHANGE STREAM
. Puedes usar este método para agregar un filtro nuevo a tu flujo de cambios o quitar uno existente.
Agrega un filtro de tipo de modificación de tabla a un flujo de cambios existente
GoogleSQL
Para agregar uno o más filtros de tipo de modificación de tabla nuevos a un flujo de cambios existente, ejecuta el siguiente comando 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: Reemplaza este valor por el nombre de tu flujo de cambios existente.
- MOD_TYPE_FILTER_NAME: Reemplaza con el filtro que deseas agregar:
exclude_insert
,exclude_update
oexclude_delete
. Si agregas más de un filtro a la vez, separa cada uno con una coma.
En el siguiente ejemplo, se agrega el filtro exclude_delete
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 de tipo de modificación de tabla nuevos a un flujo de cambios existente, ejecuta el siguiente comando para establecer el filtro en true
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Reemplaza este valor por el nombre de tu flujo de cambios existente.
- MOD_TYPE_FILTER_NAME: Reemplaza con el filtro que deseas agregar:
exclude_insert
,exclude_update
oexclude_delete
. Si agregas más de un filtro a la vez, separa cada uno con una coma.
En el siguiente ejemplo, se agrega el filtro exclude_delete
a un flujo de cambios existente llamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)
Quita un filtro de tipo de modificación de tabla de un flujo de cambios existente
GoogleSQL
Para quitar uno o más filtros de tipo de modificación de tabla existentes en el flujo de cambios, ejecuta el siguiente comando 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: Reemplaza este valor por el nombre de tu flujo de cambios existente.
- MOD_TYPE_FILTER_NAME: Reemplaza con el filtro que deseas quitar:
exclude_insert
,exclude_update
oexclude_delete
. Si quitas más de un filtro a la vez, separa cada uno con una coma.
En el siguiente ejemplo, se quita el filtro exclude_delete
de un flujo de cambios existente llamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)
También puedes quitar un filtro de modificación de la tabla si restableces el valor predeterminado del filtro. Para ello, establece el valor del filtro en null
.
PostgreSQL
Para quitar uno o más filtros de tipo de modificación de tabla existentes en el flujo de cambios, ejecuta el siguiente comando para establecer el filtro en false
:
ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Reemplaza este valor por el nombre de tu flujo de cambios existente.
- MOD_TYPE_FILTER_NAME: Reemplaza con el filtro que deseas quitar:
exclude_insert
,exclude_update
oexclude_delete
. Si quitas más de un filtro a la vez, separa cada uno con una coma.
En el siguiente ejemplo, se quita el filtro exclude_delete
de un flujo de cambios existente llamado NewFilterChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)
También puedes quitar un filtro de modificación de la tabla si restableces el valor predeterminado del filtro. Para ello, establece el valor del filtro en null
.
Se modificó el flujo de cambios para permitir la exclusión de registros a nivel de la transacción
Puedes modificar tu flujo de cambios para permitirle excluir registros de transacciones de escritura especificadas. Para ello, configura la opción allow_txn_exclusion
en true
en una declaración DDL ALTER CHANGE STREAM
. Si no estableces esta opción o si la estableces en false
, el flujo de cambios supervisa todas las transacciones de escritura.
Para obtener más información sobre cómo funciona esta opción, consulta Exclusión de registros a nivel de la transacción.
Habilita la exclusión de registros a nivel de la transacción para un flujo de cambios existente
GoogleSQL
Para habilitar la exclusión de registros a nivel de la transacción para un flujo de cambios existente, ejecuta el siguiente comando:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu transmisión de cambios existente.
En el siguiente ejemplo, se habilita la opción allow_txn_exclusion
en un flujo de cambios existente, NewAllowedChangeStream
:
ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = true)
Esto permite que el flujo de cambios excluya registros de transacciones de escritura especificadas.
PostgreSQL
Para habilitar la exclusión de registros a nivel de la transacción para un flujo de cambios existente, ejecuta el siguiente comando:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = true)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: Es el nombre de tu transmisión de cambios existente.
En el siguiente ejemplo, se habilita la opción allow_txn_exclusion
en un flujo de cambios existente, NewAllowedChangeStream
:
ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = true)
Esto permite que el flujo de cambios excluya registros de transacciones de escritura especificadas.
Inhabilita la exclusión de registros a nivel de la transacción para un flujo de cambios existente
GoogleSQL
Para inhabilitar la exclusión de registros a nivel de la transacción en un flujo de cambios existente, ejecuta el siguiente comando:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = false)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: El nombre de tu flujo de cambios
En el siguiente ejemplo, se inhabilita la opción allow_txn_exclusion
en un flujo de cambios existente llamado NewAllowedChangeStream
:
ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = false)
El flujo de cambios supervisa todas las transacciones de escritura.
PostgreSQL
Para inhabilitar la exclusión de registros a nivel de la transacción en un flujo de cambios existente, ejecuta el siguiente comando:
ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = false)
Reemplaza lo siguiente:
- CHANGE_STREAM_NAME: El nombre de tu flujo de cambios
En el siguiente ejemplo, se inhabilita la opción allow_txn_exclusion
en un flujo de cambios existente llamado NewAllowedChangeStream
:
ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = false)
El flujo de cambios supervisa todas las transacciones de escritura.
Suspender un flujo de cambios
Si quieres que un flujo de cambios detenga su actividad, pero conserve sus registros internos (al menos durante el período de retención de datos), puedes modificarlo para que no supervise nada.
Para ello, emite una sentencia DDL ALTER CHANGE STREAM
que reemplaza la definición del flujo de cambios por la frase especial DROP FOR ALL
.
Por ejemplo:
ALTER CHANGE STREAM MyStream DROP FOR ALL;
El flujo seguirá existiendo en la base de datos, pero no supervisará ningún objeto ni generará más registros de cambios de datos. Sus registros de cambios existentes permanecen intactos, sujetos a la política de retención de datos de la transmisión.
Para reanudar una transmisión suspendida, emite otra instrucción ALTER CHANGE STREAM
con su configuración anterior.
Borra una transmisión de cambios
Para borrar de forma permanente un flujo de cambios, emite una instrucción DROP CHANGE STREAM
que incluya el nombre del flujo:
DROP CHANGE STREAM NamesAndAlbums;
Spanner detiene el flujo de inmediato, lo quita del esquema de la base de datos y borra sus registros de cambios de datos.
Cómo enumerar y ver flujos de cambios
La consola de Google Cloud proporciona una interfaz web para enumerar y revisar las definiciones de los flujos de cambios de una base de datos. También puedes ver la estructura de los flujos de cambios como sus declaraciones DDL equivalentes o consultando el esquema de información de la base de datos.
Cómo ver los 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:
Visita la página de instancias de Spanner de la consola deGoogle Cloud .
Navega a la instancia y la base de datos correspondientes.
Haz clic en Change streams en el menú de navegación.
Se muestra una lista de todos los flujos de cambios de esa base de datos y se resume la configuración de cada uno. Si haces clic en el nombre de una transmisión, se revelarán más detalles sobre las tablas y las columnas que supervisa.
Cómo ver las definiciones de los flujos de cambios como DDL
Ver el esquema de una base de datos como DDL incluye descripciones de todos sus flujos de cambios, en los que aparecen como instrucciones 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 hacerlo desde la línea de comandos, usa el comando
ddl describe
de Google Cloud CLI.
Cómo 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 flujos de cambios. Las siguientes tablas contienen los metadatos que definen los nombres de los flujos de cambios, las tablas y las columnas que supervisan, y sus períodos de retención:
Prácticas recomendadas para los flujos de cambios
A continuación, se incluyen algunas prácticas recomendadas para configurar y administrar los flujos de cambios.
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 la misma que la base de datos que contiene los flujos de cambios o puede ser diferente. Te recomendamos que crees una base de datos independiente para el almacenamiento de metadatos.
El conector de flujos de cambios de Spanner necesita permisos de lectura y escritura para la base de datos de metadatos. No es necesario que prepares esta base de datos con un esquema, ya que el conector se encarga de eso.
Usar una base de datos de metadatos independiente elimina las complejidades que podrían surgir si se permite que el conector escriba directamente en la base de datos de la aplicación:
Al separar 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.
Al restringir el tráfico del conector a una base de datos de metadatos independiente, las escrituras que realiza el conector no se incluyen en los flujos de cambios de producción. Esto es especialmente relevante para los flujos de cambios que supervisan toda la base de datos.
Si no se usa una base de datos separada para almacenar los metadatos, recomendamos supervisar el impacto en la CPU del conector de flujos de cambios en sus instancias.
Comparar los nuevos flujos de cambios y cambiar su tamaño si es necesario
Antes de agregar nuevos flujos de cambios a tu instancia de producción, considera realizar pruebas comparativas de una carga de trabajo realista en una instancia de etapa de pruebas con los 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. Lo ideal es que el uso de CPU de la instancia permanezca por debajo de los máximos recomendados y que su uso de almacenamiento no supere el límite de almacenamiento de la instancia.
Usa diferentes regiones para el balanceo de cargas
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 que no son líderes. Sin embargo, si necesitas priorizar la menor demora de transmisión posible por sobre el balanceo de cargas, ejecuta la carga de transmisión en la región principal.
¿Qué sigue?
Usa plantillas para conectar rápidamente un flujo de cambios a BigQuery, Cloud Storage o Pub/Sub.