Configurer la réplication pour les tables Apache Iceberg™ gérées par Snowflake

Avec cette fonctionnalité, vous pouvez répliquer les tables Apache Iceberg™ gérées par Snowflake d’un compte source vers un ou plusieurs comptes cibles dans la même organisation.

La réplication pour les tables Iceberg fonctionne de la même manière que la réplication pour les tables Snowflake standards. Snowflake réplique une table Iceberg lorsque vous ajoutez sa base de données parente à un groupe de basculement ou de réplication.

Cependant, les tables Iceberg gérées par Snowflake reposent sur des volumes externes, qui sont des objets au niveau du compte qui nécessitent une configuration supplémentaire pour se connecter à votre stockage Cloud externe. Avant de pouvoir répliquer une table Iceberg, vous devez configurer la réplication pour les volumes externes.

Activer la prévisualisation publique pour la réplication pour les tables Iceberg gérées par Snowflake

Pour activer cette prévisualisation publique, vous devez activer les comptes source et cible.

  1. Pour activer votre compte source, après avoir activé les fonctions de prévisualisation pour votre compte, utilisez la commande ALTER ACCOUNT pour activer les paramètres suivants au niveau du compte :

    • ENABLE_ICEBERG_MANAGED_TABLE_REPLICATION

      Note

      Vous pouvez également activer ce paramètre au niveau du groupe de basculement.

    • ENABLE_SELECTIVE_EXTERNAL_VOLUME_REPLICATION_PUPR

    Par exemple :

    ALTER ACCOUNT SET
      ENABLE_ICEBERG_MANAGED_TABLE_REPLICATION = TRUE
      ENABLE_SELECTIVE_EXTERNAL_VOLUME_REPLICATION_PUPR = TRUE;
    
    Copy
  2. Répétez l’étape précédente pour votre compte cible.

Activer la réplication

Un utilisateur disposant du rôle ORGADMIN doit activer la réplication pour chaque compte source et cible dans l’organisation :

USE ROLE ORGADMIN;
SELECT SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER(
    '<organization_name>.<account_name>',
    'ENABLE_ACCOUNT_DATABASE_REPLICATION',
    'true');
Copy

Pour plus d’informations, voir. Conditions préalables : Activer la réplication pour les comptes de votre organisation.

Pour plus d’informations sur la réplication, voir Présentation de la réplication et du basculement à travers plusieurs comptes.

Réplication d’un volume externe en utilisant un groupe de basculement

Ces étapes fournissent un exemple de flux de travail pour la réplication d’un volume externe et des tables Iceberg qui en dépendent vers un compte cible à l’aide d’un groupe de basculement.

Important

Lorsqu’un groupe de basculement dans votre compte source comprend des volumes externes, Snowflake supprime tous les volumes externes préexistants dans le compte cible du compte cible au cours d’une opération d’actualisation.

Par exemple :

  • Le compte source possède un seul volume externe nommé ext_vol_1.

  • Le compte cible possède deux volumes externes nommés ext_vol_2 et ext_vol_3.

Lors d’une opération d’actualisation, Snowflake crée ou synchronise un réplique de ext_vol_1 sur le compte cible, mais supprime ext_vol_2 et ext_vol_3 du compte cible.

Note

Si vous ne disposez pas encore d’un volume externe, vous pouvez en créer un avec les emplacements de stockage souhaités, y compris un emplacement dans la même région que votre compte cible. Après avoir configuré l’accès au stockage pour chaque emplacement, vous pouvez créer et répliquer une table Iceberg qui référence le volume externe.

Pour créer un volume externe, voir Configurer un volume externe.

  1. Dans le compte source, mettez à jour votre volume externe pour ajouter un emplacement de stockage dans la même région que votre compte cible.

    Par exemple :

    ALTER EXTERNAL VOLUME exvol1
     ADD STORAGE_LOCATION =
     (
       NAME = 'my-s3-us-central-2'
       STORAGE_PROVIDER = 'S3'
       STORAGE_BASE_URL = 's3://my_bucket_us_central-2/'
       STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole'
       STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id'
     );
    
    Copy

    Important

    Si vous ne spécifiez pas votre propre STORAGE_AWS_EXTERNAL_ID pour le stockage S3, vous devez appeler DESCRIBE EXTERNAL VOLUME après avoir ajouté le nouvel emplacement de stockage pour récupérer l’ID externe généré par Snowflake. Vous avez besoin de l’ID externe pour configurer l’accès à S3 à l’étape suivante.

    Snowflake définit ce nouvel emplacement comme emplacement de stockage actif pour le volume externe secondaire.

  2. Dans le compte source, créez une table Iceberg gérée par Snowflake qui utilise le volume externe que vous avez mis à jour avec l’emplacement de stockage supplémentaire.

    Par exemple :

    CREATE ICEBERG TABLE my_iceberg_table (amount int)
      CATALOG = 'SNOWFLAKE'
      EXTERNAL_VOLUME = 'exvol1'
      BASE_LOCATION = 'my_iceberg_table';
    
    Copy
  3. Dans le compte source, récupérez des informations sur le principal de service Snowflake pour votre compte cible en suivant les étapes suivantes :

    1. Récupérez le nom (account_name) de votre compte cible en utilisant la commande SHOW REPLICATION ACCOUNTS.

      SHOW REPLICATION ACCOUNTS LIKE 'my_target_account%';
      
      Copy
    2. Appelez la fonction système SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY. Spécifiez le fournisseur Cloud pour l’emplacement de stockage cible et le nom de votre compte cible exactement tel qu’il apparaît dans la colonne account_name de la sortie SHOW REPLICATION ACCOUNTS.

      Par exemple :

      SELECT SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY('S3', 'MY_TARGET_ACCOUNT_1');
      
      Copy
  4. Configurez l’accès de Snowflake à l’emplacement de stockage associé à votre compte cible. Suivez les instructions pour votre fournisseur Cloud, en utilisant les informations que vous avez récupérées pour le principal de service dans le compte cible :

  5. Dans le compte source, utilisez la commande CREATE FAILOVER GROUP pour créer un groupe de basculement. Spécifiez les EXTERNAL VOLUMES dans la liste OBJECT_TYPES. Dans la liste ALLOWED_DATABASES, incluez la base de données avec les tables Iceberg que vous souhaitez répliquer. Dans la liste ALLOWED_EXTERNAL_VOLUMES, incluez les volumes externes qui donnent accès aux tables Iceberg que vous souhaitez répliquer.

    CREATE FAILOVER GROUP my_iceberg_fg
      OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES
      ALLOWED_DATABASES = my_iceberg_database
      ALLOWED_EXTERNAL_VOLUMES = my_external_volume
      ALLOWED_ACCOUNTS = myorg.my_account_1;
    
    Copy

    Note

    Si vous recevez une erreur de l’analyseur SQL, votre liste de volumes externes autorisés est peut-être trop longue. Si vous recevez cette erreur, raccourcissez cette liste dans votre instruction CREATE FAILOVER GROUP, puis utilisez la commande ALTER FAILOVER GROUP pour ajouter des volumes externes autorisés supplémentaires au groupe de basculement.

    Pour mettre à jour un groupe existant, utilisez la commande ALTER FAILOVER GROUP pour ajouter des EXTERNAL VOLUMES à la liste OBJECT_TYPES. Incluez tout autre objet existant dans la liste OBJECT_TYPES pour éviter de supprimer ces objets dans le compte cible.

    Par exemple, ajoutez des EXTERNAL VOLUMES à un groupe de basculement qui comprend déjà des DATABASES :

    ALTER FAILOVER GROUP my_iceberg_rg SET
      OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES
      ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
    
    Copy
  6. Dans le compte cible, créez un groupe de basculement comme une réplique du groupe dans le compte source (my_source_account) :

    CREATE FAILOVER GROUP my_iceberg_fg
      AS REPLICA OF myorg.my_source_account.my_iceberg_fg;
    
    Copy

    Sautez cette étape si vous disposez déjà d’un groupe secondaire qui réplique le groupe dans le compte source.

  7. Dans le compte cible, exécutez une commande d’actualisation.

    ALTER FAILOVER GROUP my_iceberg_fg REFRESH;
    
    Copy

    Tant que vous répliquez la base de données qui contient votre table Iceberg gérée par Snowflake et que vous avez configuré l’accès à votre stockage Cloud pour le compte cible, Snowflake réplique la table dans le compte cible.

    Note

    L’opération d’actualisation échoue si Snowflake ne peut pas accéder à l’emplacement de stockage configuré pour le compte cible. Si cela se produit, vérifiez bien vos paramètres de contrôle d’accès, ou essayez de Vérification de l’accès au stockage.

Réplication d’un volume externe en utilisant un groupe de réplication

Ces étapes fournissent un exemple de flux de travail pour la réplication d’un volume externe et des tables Iceberg qui en dépendent vers un compte cible à l’aide d’un groupe de réplication.

Important

Lorsqu’un groupe de réplication dans votre compte source comprend des volumes externes, Snowflake supprime tous les volumes externes préexistants dans le compte cible du compte cible au cours d’une opération d’actualisation.

Par exemple :

  • Le compte source possède un seul volume externe nommé ext_vol_1.

  • Le compte cible possède deux volumes externes nommés ext_vol_2 et ext_vol_3.

Lors d’une opération d’actualisation, Snowflake crée ou synchronise un réplique de ext_vol_1 sur le compte cible, mais supprime ext_vol_2 et ext_vol_3 du compte cible.

Note

Si vous ne disposez pas encore d’un volume externe, vous pouvez en créer un avec les emplacements de stockage souhaités, y compris un emplacement dans la même région que votre compte cible. Après avoir configuré l’accès au stockage pour chaque emplacement, vous pouvez créer et répliquer une table Iceberg qui référence le volume externe.

Pour créer un volume externe, voir Configurer un volume externe.

  1. Dans le compte source, mettez à jour votre volume externe pour ajouter un emplacement de stockage dans la même région que votre compte cible.

    Par exemple :

    ALTER EXTERNAL VOLUME exvol1
     ADD STORAGE_LOCATION =
     (
       NAME = 'my-s3-us-central-2'
       STORAGE_PROVIDER = 'S3'
       STORAGE_BASE_URL = 's3://my_bucket_us_central-2/'
       STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole'
       STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id'
     );
    
    Copy

    Important

    Si vous ne spécifiez pas votre propre STORAGE_AWS_EXTERNAL_ID pour le stockage S3, vous devez appeler DESCRIBE EXTERNAL VOLUME après avoir ajouté le nouvel emplacement de stockage pour récupérer l’ID externe généré par Snowflake. Vous avez besoin de l’ID externe pour configurer l’accès à S3 à l’étape suivante.

    Snowflake définit ce nouvel emplacement comme emplacement de stockage actif pour le volume externe secondaire.

  2. Dans le compte source, créez une table Iceberg gérée par Snowflake qui utilise le volume externe que vous avez mis à jour avec l’emplacement de stockage supplémentaire.

    Par exemple :

    CREATE ICEBERG TABLE my_iceberg_table (amount int)
      CATALOG = 'SNOWFLAKE'
      EXTERNAL_VOLUME = 'exvol1'
      BASE_LOCATION = 'my_iceberg_table';
    
    Copy
  3. Dans le compte source, récupérez des informations sur le principal de service Snowflake pour votre compte cible en suivant les étapes suivantes :

    1. Récupérez le nom (account_name) de votre compte cible en utilisant la commande SHOW REPLICATION ACCOUNTS.

      SHOW REPLICATION ACCOUNTS LIKE 'my_target_account%';
      
      Copy
    2. Appelez la fonction système SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY. Spécifiez le fournisseur Cloud pour l’emplacement de stockage cible et le nom de votre compte cible exactement tel qu’il apparaît dans la colonne account_name de la sortie SHOW REPLICATION ACCOUNTS.

      Par exemple :

      SELECT SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY('S3', 'MY_TARGET_ACCOUNT_1');
      
      Copy
  4. Configurez l’accès de Snowflake à l’emplacement de stockage associé à votre compte cible. Suivez les instructions pour votre fournisseur Cloud, en utilisant les informations que vous avez récupérées pour le principal de service dans le compte cible :

  5. Dans le compte source, utilisez la commande CREATE REPLICATION GROUP pour créer un groupe de réplication. Spécifiez les EXTERNAL VOLUMES dans la liste OBJECT_TYPES. Dans la liste ALLOWED_DATABASES, incluez la base de données avec la ou les table(s) Iceberg que vous souhaitez répliquer. Dans la liste ALLOWED_EXTERNAL_VOLUMES, incluez les volumes externes qui donnent accès à la ou aux table(s) Iceberg que vous souhaitez répliquer.

    CREATE REPLICATION GROUP my_iceberg_rg
      OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES
      ALLOWED_DATABASES = my_iceberg_database
      ALLOWED_EXTERNAL_VOLUMES = my_external_volume
      ALLOWED_ACCOUNTS = myorg.my_account_1;
    
    Copy

    Note

    Si vous recevez une erreur de l’analyseur SQL, votre liste de volumes externes autorisés est peut-être trop longue. Si vous recevez cette erreur, raccourcissez cette liste dans votre instruction CREATE REPLICATION GROUP, puis utilisez la commande ALTER REPLICATION GROUP pour ajouter des volumes externes autorisés supplémentaires au groupe de réplication.

    Pour mettre à jour un groupe existant, utilisez la commande ALTER REPLICATION GROUP pour ajouter des EXTERNAL VOLUMES à la liste OBJECT_TYPES. Incluez tout autre objet existant dans la liste OBJECT_TYPES pour éviter de supprimer ces objets dans le compte cible.

    Par exemple, ajoutez des EXTERNAL VOLUMES à un groupe de réplication qui comprend déjà des DATABASES :

    ALTER REPLICATION GROUP my_iceberg_rg SET
      OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES
      ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
    
    Copy
  6. Dans le compte cible, créez un groupe de réplication comme une réplique du groupe dans le compte source (my_source_account) :

    CREATE REPLICATION GROUP my_iceberg_rg
      AS REPLICA OF myorg.my_source_account.my_iceberg_rg;
    
    Copy

    Sautez cette étape si vous disposez déjà d’un groupe secondaire qui réplique le groupe dans le compte source.

  7. Dans le compte cible, exécutez une commande d’actualisation.

    ALTER REPLICATION GROUP my_iceberg_rg REFRESH;
    
    Copy

    Tant que vous répliquez la base de données qui contient votre table Iceberg gérée par Snowflake et que vous avez configuré l’accès à votre stockage Cloud pour le compte cible, Snowflake réplique la table dans le compte cible.

    Note

    L’opération d’actualisation échoue si Snowflake ne peut pas accéder à l’emplacement de stockage configuré pour le compte cible. Si cela se produit, vérifiez bien vos paramètres de contrôle d’accès, ou essayez de Vérification de l’accès au stockage.

Considérations et limites

Tenez compte des points suivants lorsque vous utilisez la réplication pour les tables Iceberg :

  • Snowflake prend actuellement en charge la réplication des tables gérées par Snowflake uniquement.

  • La réplication des tables Iceberg converties n’est pas prise en charge. Snowflake ignore les tables converties pendant les opérations d’actualisation.

  • Pour les tables répliquées, vous devez configurer l’accès à un emplacement de stockage dans la même région que le compte cible.

  • Si vous supprimez ou modifiez un emplacement de stockage utilisé pour la réplication sur le volume externe principal, les opérations d’actualisation peuvent échouer.

  • Les tables secondaires dans le compte cible sont en lecture seule jusqu’à ce que vous définissiez le compte cible en tant que compte source.

  • Snowflake conserve la hiérarchie des répertoires de la table Iceberg principale pour la table secondaire.

  • Les coûts de réplication s’appliquent à cette fonctionnalité. Pour plus d’informations, voir Compréhension du coût de réplication.

  • Pour connaître les considérations relatives aux objets de compte pour les groupes de réplication et de basculement, consultez Objets de compte.