Créer et gérer des flux de modifications

Cette page explique comment créer, modifier et afficher les flux de modifications Spanner pour les bases de données utilisant le dialecte GoogleSQL et celles utilisant le dialecte PostgreSQL. Pour en savoir plus sur les flux de modifications, consultez À propos des flux de modifications.

Étant donné que les flux de modifications sont des objets de schéma, vous les créez et les gérez à l'aide des mêmes mises à jour de schéma basées sur le LDD que celles utilisées pour tout autre type de travail de définition de base de données, comme la création de tables ou l'ajout d'index.

Spanner lance une opération de longue durée après que vous avez envoyé une instruction LDD modifiant le schéma, y compris celles utilisées pour créer, modifier ou supprimer des flux de modifications. Un flux de modifications nouveau ou modifié commence à surveiller les colonnes ou les tables spécifiées par sa nouvelle configuration à la fin de cette opération de longue durée.

Créer un flux de modifications

Pour créer un flux de modifications, vous devez fournir son nom et les objets de schéma qu'il surveille : soit l'intégralité de la base de données, soit une liste de tables et de colonnes spécifiques. Vous pouvez éventuellement configurer un flux de modifications avec l'un des éléments suivants :

GoogleSQL

La syntaxe LDD pour créer un flux de modifications à l'aide de GoogleSQL se présente comme suit :

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 syntaxe LDD pour créer un flux de modifications à l'aide de PostgreSQL se présente comme suit :

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

Un nouveau flux de modifications commence à surveiller les objets de schéma qui lui sont attribués dès que l'opération de longue durée qui l'a créé est terminée.

Les exemples suivants illustrent la création de flux de modifications avec différentes configurations.

Surveiller une base de données entière

Pour créer un flux de modifications qui surveille chaque modification de données effectuée dans les tables d'une base de données, utilisez le mot clé ALL :

CREATE CHANGE STREAM EverythingStream
FOR ALL;

La configuration ALL inclut implicitement toutes les futures tables et colonnes de données de la base de données, dès qu'elles sont créées. Elle n'inclut pas les vues, les tables de schéma d'information ni les autres objets, à l'exception des tables de données normales.

Surveiller des tables spécifiques

Pour limiter le champ d'application d'un flux de modifications à des tables spécifiques plutôt qu'à une base de données entière, spécifiez une liste d'une ou plusieurs tables :

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

Spanner met automatiquement à jour les flux de modifications qui surveillent des tables entières pour refléter les modifications de schéma affectant ces tables, telles que les colonnes ajoutées ou supprimées.

Surveiller des colonnes spécifiques

Utilisez la syntaxe table(column_1[, column_2, ...]) pour surveiller les modifications apportées à une ou plusieurs colonnes spécifiques non clés dans les tables que vous nommez :

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

Vous ne pouvez pas spécifier de colonnes de clé primaire ici, car chaque flux de modifications suit toujours les clés primaires de chaque table qu'il surveille. Cela permet à chaque enregistrement de modification des données d'identifier la ligne modifiée par sa clé primaire.

Surveiller les tableaux et les colonnes dans un seul flux

Vous pouvez combiner la syntaxe d'observation des tables et des colonnes des deux exemples précédents dans un seul flux de modifications :

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

Spécifier une durée de conservation plus longue

Pour spécifier une période de conservation des données du flux de modifications supérieure à la valeur par défaut d'un jour, définissez retention_period sur une période allant jusqu'à 30 jours, exprimée en heures (h) ou en jours (d).

Voici deux exemples :

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

Spécifier un autre type de capture de valeur

Pour spécifier un type de capture de valeur de flux de modifications autre que OLD_AND_NEW_VALUES, définissez value_capture_type sur NEW_VALUES ou NEW_ROW, comme indiqué dans les exemples suivants :

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

Filtrer les suppressions basées sur la valeur TTL

Vous pouvez filtrer les suppressions basées sur le TTL du champ d'application de votre flux de modifications à l'aide du filtre exclude_ttl_deletes.

Pour en savoir plus sur le fonctionnement de ce filtre, consultez Filtre de suppression basé sur le délai avant suppression.

GoogleSQL

Pour créer un flux de modifications avec le filtre de suppression basé sur le TTL, exécutez l'exemple suivant :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre nouveau flux de modifications

L'exemple suivant crée un flux de modifications appelé NewFilterChangeStream qui exclut toutes les suppressions basées sur le TTL :

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

PostgreSQL

Pour créer un flux de modifications avec le filtre de suppression basé sur le TTL, exécutez l'exemple suivant :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre nouveau flux de modifications

L'exemple suivant crée un flux de modifications appelé NewFilterChangeStream qui exclut toutes les suppressions basées sur le TTL :

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

Pour ajouter ou supprimer le filtre des suppressions basées sur le TTL d'un flux de modifications existant, consultez Modifier le filtre des suppressions basées sur le TTL. Vous pouvez confirmer vos filtres de flux de modifications en affichant les définitions du flux de modifications en tant que LDD.

Filtrer par type de modification de tableau

Filtrez une ou plusieurs de ces modifications de table à partir du champ d'application de votre flux de modifications à l'aide des options de filtrage disponibles suivantes :

  • exclude_insert : exclure toutes les modifications de table INSERT
  • exclude_update : exclure toutes les modifications de table UPDATE
  • exclude_delete : exclure toutes les modifications de table DELETE

Pour en savoir plus sur le fonctionnement de ces filtres, consultez Filtres de type de modification de tableau.

GoogleSQL

Pour créer un flux de modifications avec un ou plusieurs filtres de type de modification de table, exécutez la commande suivante :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre nouveau flux de modifications
  • MOD_TYPE_FILTER_NAME : filtre que vous souhaitez ajouter (exclude_insert, exclude_update ou exclude_delete). Si vous ajoutez plusieurs filtres à la fois, séparez-les par une virgule.

L'exemple suivant crée un flux de modifications appelé NewFilterChangeStream qui exclut les types de modification de table INSERT et UPDATE :

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

PostgreSQL

Pour créer un flux de modifications avec un ou plusieurs filtres de type de modification de table, exécutez la commande suivante :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre nouveau flux de modifications
  • MOD_TYPE_FILTER_NAME : filtre que vous souhaitez ajouter (exclude_insert, exclude_update ou exclude_delete). Si vous ajoutez plusieurs filtres à la fois, séparez-les par une virgule.

L'exemple suivant crée un flux de modifications appelé NewFilterChangeStream qui exclut les types de modification de table INSERT et UPDATE :

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

Pour ajouter ou supprimer un filtre de type de modification de table à partir d'un flux de modifications existant, consultez Modifier le filtre par type de modification de table. Vous pouvez vérifier les types de filtres de modification de table qui existent pour votre flux de modifications en affichant les définitions du flux de modifications en tant que LDD.

Activer l'exclusion des enregistrements au niveau des transactions

Vous pouvez activer vos flux de modifications pour exclure les enregistrements de transactions d'écriture spécifiques en définissant l'option allow_txn_exclusion lorsque vous créez un flux de modifications ou en modifiant un flux de modifications existant.

Pour en savoir plus sur le fonctionnement de cette option, consultez Exclusion des enregistrements au niveau des transactions.

GoogleSQL

Pour créer un flux de modifications qui peut exclure des enregistrements de transactions d'écriture spécifiées, exécutez la commande suivante :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom du nouveau flux de modifications

L'exemple suivant crée un flux de modifications nommé NewChangeStream qui peut exclure des enregistrements de transactions d'écriture spécifiées :

CREATE CHANGE STREAM NewChangeStream FOR ALL
OPTIONS (allow_txn_exclusion = true)

PostgreSQL

Pour créer un flux de modifications qui peut exclure des enregistrements de transactions d'écriture spécifiées, exécutez la commande suivante :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom du nouveau flux de modifications

L'exemple suivant crée un flux de modifications nommé NewChangeStream qui peut exclure les enregistrements des transactions d'écriture spécifiées :

CREATE CHANGE STREAM NewChangeStream FOR ALL
WITH (allow_txn_exclusion = true)

Pour activer ou désactiver l'exclusion des enregistrements au niveau des transactions à partir d'un flux de modifications existant, consultez Modifier l'exclusion des enregistrements au niveau des transactions. Pour vérifier le paramètre de cette option, consultez Afficher les définitions des flux de modifications en tant que DDL.

Spécifier une transaction d'écriture à exclure des flux de modifications

Pour spécifier une transaction d'écriture à exclure des flux de modifications, vous devez définir le paramètre exclude_txn_from_change_streams sur true. Les exemples de code suivants montrent comment spécifier qu'une transaction d'écriture doit être exclue des flux de modifications à l'aide de la bibliothèque cliente.

Go


import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/spanner"
)

// readWriteTxnExcludedFromChangeStreams executes the insert and update DMLs on
// Singers table excluded from tracking change streams with ddl option
// allow_txn_exclusion = true.
func readWriteTxnExcludedFromChangeStreams(w io.Writer, db string) error {
	// db = `projects/<project>/instances/<instance-id>/database/<database-id>`
	ctx := context.Background()
	client, err := spanner.NewClient(ctx, db)
	if err != nil {
		return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.NewClient: %w", err)
	}
	defer client.Close()

	_, err = client.ReadWriteTransactionWithOptions(ctx, func(ctx context.Context, txn *spanner.ReadWriteTransaction) error {
		stmt := spanner.Statement{
			SQL: `INSERT Singers (SingerId, FirstName, LastName)
					VALUES (111, 'Virginia', 'Watson')`,
		}
		_, err := txn.Update(ctx, stmt)
		if err != nil {
			return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.Update: %w", err)
		}
		fmt.Fprintln(w, "New singer inserted.")
		stmt = spanner.Statement{
			SQL: `UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111`,
		}
		_, err = txn.Update(ctx, stmt)
		if err != nil {
			return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.Update: %w", err)
		}
		fmt.Fprint(w, "Singer first name updated.")
		return nil
	}, spanner.TransactionOptions{ExcludeTxnFromChangeStreams: true})
	if err != nil {
		return err
	}
	return nil
}

Java

static void readWriteTxnExcludedFromChangeStreams(DatabaseClient client) {
  // Exclude the transaction from allowed tracking change streams with alloww_txn_exclusion=true.
  // This exclusion will be applied to all the individual operations inside this transaction.
  client
      .readWriteTransaction(Options.excludeTxnFromChangeStreams())
      .run(
          transaction -> {
            transaction.executeUpdate(
                Statement.of(
                    "INSERT Singers (SingerId, FirstName, LastName)\n"
                        + "VALUES (1341, 'Virginia', 'Watson')"));
            System.out.println("New singer inserted.");

            transaction.executeUpdate(
                Statement.of("UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111"));
            System.out.println("Singer first name updated.");

            return null;
          });
}

Modifier un flux de modifications

Pour modifier la configuration d'un flux de modifications, utilisez une instruction LDD ALTER CHANGE STREAM. Elle utilise une syntaxe semblable à CREATE CHANGE STREAM. Vous pouvez modifier les colonnes qu'un flux surveille ou la durée de conservation de ses données. Vous pouvez également suspendre complètement la surveillance tout en conservant les enregistrements des modifications de données.

Modifier ce qu'un flux de modifications surveille

Cet exemple ajoute l'intégralité de la table Songs au flux de modifications NamesAndAlbums configuré précédemment :

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

Spanner remplace le comportement du flux de modifications nommé par la nouvelle configuration une fois l'opération de longue durée terminée. Cette opération met à jour la définition du flux de modifications dans le schéma de la base de données.

Modifier la durée de conservation des données d'un flux de modifications

Pour modifier la durée pendant laquelle un flux de modifications conserve ses enregistrements internes, définissez retention_period dans une instruction LDD ALTER CHANGE STREAM.

Cet exemple ajuste la période de conservation des données au flux de modifications NamesAndAlbums créé précédemment :

GoogleSQL

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

PostgreSQL

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

Modifier le type de capture de valeur d'un flux de modifications

Pour modifier le type de capture de valeur d'un flux de modification, définissez la clause value_capture_type dans une instruction LDD ALTER CHANGE STREAM.

Cet exemple ajuste le type de capture de valeur sur 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' );

Modifier le filtre de suppression basée sur le TTL

Pour modifier le filtre suppressions basées sur le TTL pour un flux de modifications, définissez le filtre exclude_ttl_deletes dans une instruction LDD ALTER CHANGE STREAM. Vous pouvez l'utiliser pour ajouter ou supprimer le filtre de vos flux de modifications existants.

Pour en savoir plus sur le fonctionnement de ces filtres, consultez Filtre de suppression basé sur le délai avant expiration.

Ajouter le filtre de suppression basé sur le TTL à un flux de modifications existant

GoogleSQL

Pour ajouter le filtre de suppression basé sur le TTL à un flux de modifications existant, exécutez la commande suivante pour définir le filtre sur true :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre flux de modifications existant

Dans l'exemple suivant, le filtre exclude_ttl_deletes est ajouté à un flux de modifications existant appelé NewFilterChangeStream, qui exclut toutes les suppressions basées sur le TTL :

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

Cela exclut toutes les futures suppressions basées sur le TTL du flux de modifications.

PostgreSQL

Pour ajouter le filtre de suppression basé sur le TTL à un flux de modifications existant, exécutez la commande suivante pour définir le filtre sur true :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre flux de modifications existant

Dans l'exemple suivant, le filtre exclude_ttl_deletes est ajouté à un flux de modifications existant appelé NewFilterChangeStream, qui exclut toutes les suppressions basées sur le TTL :

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

Cela exclut toutes les futures suppressions basées sur le TTL du flux de modifications.

Supprimer le filtre de suppression basé sur le TTL d'un flux de modifications existant

GoogleSQL

Pour supprimer le filtre de suppression basé sur le TTL d'un flux de modifications existant, exécutez la commande suivante pour définir le filtre sur false :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre nouveau flux de modifications

Dans l'exemple suivant, le filtre exclude_ttl_deletes est supprimé d'un flux de modifications existant appelé NewFilterChangeStream :

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

Cela inclut toutes les futures suppressions basées sur le TTL dans le flux de modifications.

Vous pouvez également définir le filtre sur null pour supprimer le filtre des suppressions basées sur le TTL.

PostgreSQL

Pour supprimer le filtre de suppression basé sur le TTL d'un flux de modifications existant, exécutez la commande suivante pour définir le filtre sur false :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre nouveau flux de modifications

Dans l'exemple suivant, le filtre exclude_ttl_deletes est supprimé d'un flux de modifications existant appelé NewFilterChangeStream :

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

Cela inclut toutes les futures suppressions basées sur le TTL dans le flux de modifications.

Vous pouvez également définir le filtre sur null pour supprimer le filtre des suppressions basées sur le TTL.

Modifier le filtre par type de modification du tableau

Pour modifier les filtres de type de modification de tableau pour un flux de modifications, définissez le type de filtre dans une instruction LDD ALTER CHANGE STREAM. Vous pouvez l'utiliser pour ajouter un filtre à votre flux de modifications ou en supprimer un.

Ajouter un filtre de type de modification de table à un flux de modifications existant

GoogleSQL

Pour ajouter un ou plusieurs filtres de type de modification de tableau à un flux de modifications existant, exécutez la commande suivante pour définir le filtre sur true :

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : remplacez cette valeur par le nom de votre flux de modifications existant.
  • MOD_TYPE_FILTER_NAME : remplacez par le filtre que vous souhaitez ajouter : exclude_insert, exclude_update ou exclude_delete. Si vous ajoutez plusieurs filtres à la fois, séparez-les par une virgule.

Dans l'exemple suivant, le filtre exclude_delete est ajouté à un flux de modifications existant appelé NewFilterChangeStream :

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

Pour ajouter un ou plusieurs filtres de type de modification de tableau à un flux de modifications existant, exécutez la commande suivante pour définir le filtre sur true :

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : remplacez cette valeur par le nom de votre flux de modifications existant.
  • MOD_TYPE_FILTER_NAME : remplacez par le filtre que vous souhaitez ajouter : exclude_insert, exclude_update ou exclude_delete. Si vous ajoutez plusieurs filtres à la fois, séparez-les par une virgule.

Dans l'exemple suivant, le filtre exclude_delete est ajouté à un flux de modifications existant appelé NewFilterChangeStream :

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

Supprimer un filtre de type de modification de table d'un flux de modifications existant

GoogleSQL

Pour supprimer un ou plusieurs filtres de type de modification de tableau existants dans le flux de modifications, exécutez la commande suivante pour définir le filtre sur false :

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : remplacez cette valeur par le nom de votre flux de modifications existant.
  • MOD_TYPE_FILTER_NAME : remplacez par le filtre que vous souhaitez supprimer : exclude_insert, exclude_update ou exclude_delete. Si vous supprimez plusieurs filtres à la fois, séparez-les par une virgule.

Dans l'exemple suivant, le filtre exclude_delete est supprimé d'un flux de modifications existant appelé NewFilterChangeStream :

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)

Vous pouvez également supprimer un filtre de modification de tableau en rétablissant sa valeur par défaut. Pour ce faire, définissez la valeur du filtre sur null.

PostgreSQL

Pour supprimer un ou plusieurs filtres de type de modification de tableau existants dans le flux de modifications, exécutez la commande suivante pour définir le filtre sur false :

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : remplacez cette valeur par le nom de votre flux de modifications existant.
  • MOD_TYPE_FILTER_NAME : remplacez par le filtre que vous souhaitez supprimer : exclude_insert, exclude_update ou exclude_delete. Si vous supprimez plusieurs filtres à la fois, séparez-les par une virgule.

Dans l'exemple suivant, le filtre exclude_delete est supprimé d'un flux de modifications existant appelé NewFilterChangeStream :

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)

Vous pouvez également supprimer un filtre de modification de tableau en rétablissant sa valeur par défaut. Pour ce faire, définissez la valeur du filtre sur null.

Modifier le flux de modifications pour permettre l'exclusion des enregistrements au niveau des transactions

Vous pouvez modifier votre flux de modifications pour lui permettre d'exclure les enregistrements de transactions d'écriture spécifiques. Pour ce faire, définissez l'option allow_txn_exclusion sur true dans une instruction LDD ALTER CHANGE STREAM. Si vous ne définissez pas cette option ou si vous la définissez sur false, le flux de modifications surveille toutes les transactions d'écriture.

Pour en savoir plus sur le fonctionnement de cette option, consultez Exclusion des enregistrements au niveau des transactions.

Activer l'exclusion des enregistrements au niveau des transactions pour un flux de modifications existant

GoogleSQL

Pour activer l'exclusion des enregistrements au niveau des transactions pour un flux de modifications existant, exécutez la commande suivante :

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

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre flux de modifications existant

Dans l'exemple suivant, l'option allow_txn_exclusion est activée sur un flux de modifications existant, NewAllowedChangeStream :

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = true)

Cela permet au flux de modifications d'exclure les enregistrements des transactions d'écriture spécifiées.

PostgreSQL

Pour activer l'exclusion des enregistrements au niveau des transactions pour un flux de modifications existant, exécutez la commande suivante :

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = true)

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre flux de modifications existant

Dans l'exemple suivant, l'option allow_txn_exclusion est activée sur un flux de modifications existant, NewAllowedChangeStream :

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = true)

Cela permet au flux de modifications d'exclure les enregistrements des transactions d'écriture spécifiées.

Désactiver l'exclusion des enregistrements au niveau des transactions pour un flux de modifications existant

GoogleSQL

Pour désactiver l'exclusion des enregistrements au niveau des transactions sur un flux de modifications existant, exécutez la commande suivante :

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = false)

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre flux de modifications

Dans l'exemple suivant, l'option allow_txn_exclusion est désactivée sur un flux de modifications existant appelé NewAllowedChangeStream :

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

Le flux de modifications surveille toutes les transactions d'écriture.

PostgreSQL

Pour désactiver l'exclusion des enregistrements au niveau des transactions sur un flux de modifications existant, exécutez la commande suivante :

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = false)

Remplacez les éléments suivants :

  • CHANGE_STREAM_NAME : nom de votre flux de modifications

Dans l'exemple suivant, l'option allow_txn_exclusion est désactivée sur un flux de modifications existant appelé NewAllowedChangeStream :

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = false)

Le flux de modifications surveille toutes les transactions d'écriture.

Suspendre un flux de modifications

Si vous souhaitez qu'un flux de modifications cesse son activité, mais conserve ses enregistrements internes (au moins pendant la durée de conservation des données), vous pouvez le modifier pour qu'il ne surveille rien.

Pour ce faire, exécutez une instruction LDD ALTER CHANGE STREAM qui remplace la définition du flux de modifications par l'expression spéciale DROP FOR ALL. Exemple :

ALTER CHANGE STREAM MyStream DROP FOR ALL;

Le flux continue d'exister dans la base de données, mais ne surveille aucun objet et ne génère plus d'enregistrements de modification de données. Ses enregistrements de modifications existants restent intacts, sous réserve des règles de conservation des données du flux.

Pour reprendre un flux suspendu, émettez une autre instruction ALTER CHANGE STREAM avec sa configuration précédente.

Supprimer un flux de modifications

Pour supprimer définitivement un flux de modifications, exécutez une instruction DROP CHANGE STREAM qui inclut le nom du flux :

DROP CHANGE STREAM NamesAndAlbums;

Spanner arrête immédiatement le flux, le supprime du schéma de la base de données et supprime ses enregistrements de modification des données.

Lister et afficher les flux de modifications

La console Google Cloud fournit une interface Web permettant de lister et d'examiner les définitions de flux de modifications d'une base de données. Vous pouvez également afficher la structure des flux de modifications sous forme d'instructions LDD équivalentes ou en interrogeant le schéma d'informations de la base de données.

Afficher les flux de modifications avec la console Google Cloud

Pour afficher la liste des flux de modifications d'une base de données et examiner leurs définitions :

  1. Accédez à la page des instances Spanner de la consoleGoogle Cloud .

    Ouvrir la page des instances

  2. Accédez à l'instance et à la base de données appropriées.

  3. Cliquez sur Flux de modifications dans le menu de navigation.

La liste de tous les flux de modifications de cette base de données s'affiche, et la configuration de chacun d'eux est résumée. Cliquez sur le nom d'un flux pour afficher plus de détails sur les tables et les colonnes qu'il surveille.

Afficher les définitions des flux de modifications en tant que LDD

L'affichage du schéma d'une base de données en tant que LDD inclut des descriptions de tous ses flux de modifications, où ils apparaissent sous forme d'instructions CREATE CHANGE STREAM.

  • Pour ce faire depuis la console, cliquez sur le lien Afficher les instructions LDD équivalentes sur la page de la base de données dans la console Google Cloud .

  • Pour ce faire depuis la ligne de commande, utilisez la commande ddl describe de Google Cloud CLI.

Interroger le schéma d'informations sur les flux de modifications

Vous pouvez interroger directement le schéma d'informations d'une base de données sur ses flux de modifications. Les tableaux suivants contiennent les métadonnées qui définissent les noms des flux de modifications, les tables et les colonnes qu'ils surveillent, ainsi que leurs périodes de conservation :

Bonnes pratiques concernant les flux de modifications

Voici quelques bonnes pratiques pour configurer et gérer les flux de modifications.

Envisagez une base de données de métadonnées distincte

Les flux de modification utilisent une base de données de métadonnées pour maintenir l'état interne. La base de données de métadonnées peut être identique ou différente de celle qui contient les flux de modifications. Nous vous recommandons de créer une base de données distincte pour le stockage des métadonnées.

Le connecteur de flux de modifications Spanner a besoin d'autorisations de lecture et d'écriture pour la base de données de métadonnées. Vous n'avez pas besoin de préparer cette base de données avec un schéma, car le connecteur s'en charge.

L'utilisation d'une base de données de métadonnées distincte élimine les complexités qui pourraient survenir si le connecteur était autorisé à écrire directement dans la base de données de votre application :

  • En séparant la base de données de métadonnées de la base de données de production avec le flux de modifications, le connecteur n'a besoin que d'autorisations de lecture pour la base de données de production.

  • En limitant le trafic du connecteur à une base de données de métadonnées distincte, les écritures effectuées par le connecteur lui-même ne sont pas incluses dans les flux de modifications de production. Cela est particulièrement pertinent pour les flux de modifications qui surveillent l'ensemble de la base de données.

Si aucune base de données distincte n'est utilisée pour stocker les métadonnées, nous vous recommandons de surveiller l'impact du connecteur de flux de modifications sur le processeur de vos instances.

Évaluer les nouveaux flux de modifications et les redimensionner si nécessaire

Avant d'ajouter de nouveaux flux de modifications à votre instance de production, pensez à effectuer des tests comparatifs sur une charge de travail réaliste sur une instance intermédiaire avec les flux de modifications activés. Cela vous permet de déterminer si vous devez ajouter des nœuds à votre instance pour augmenter ses capacités de calcul et de stockage.

Exécutez ces tests jusqu'à ce que les métriques du processeur et du stockage se stabilisent. Dans l'idéal, l'utilisation du processeur de l'instance doit rester en dessous des valeurs maximales recommandées, et son utilisation du stockage ne doit pas dépasser la limite de stockage de l'instance.

Utiliser différentes régions pour l'équilibrage de charge

Lorsque vous utilisez des flux de modifications dans une configuration d'instance multirégionale, envisagez d'exécuter leurs pipelines de traitement dans une région différente de la région principale par défaut. Cela permet de répartir la charge de streaming entre les répliques non principales. Toutefois, si vous devez privilégier la latence de streaming la plus faible possible plutôt que l'équilibrage de charge, exécutez la charge de streaming dans la région principale.

Étapes suivantes