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.
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;
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');
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_2etext_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.
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' );
Important
Si vous ne spécifiez pas votre propre
STORAGE_AWS_EXTERNAL_IDpour 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.
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';
Dans le compte source, récupérez des informations sur le principal de service Snowflake pour votre compte cible en suivant les étapes suivantes :
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%';
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_namede la sortie SHOW REPLICATION ACCOUNTS.Par exemple :
SELECT SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY('S3', 'MY_TARGET_ACCOUNT_1');
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 :
Configurer un volume externe pour Amazon S3. Utilisez l’ID externe associé à l’emplacement de stockage de votre compte cible.
Configuration d’un volume externe pour Azure. Dans le
AZURE_CONSENT_URL TEMPLATErenvoyé par SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY, remplacezyour_tenant_idpar l’ID de votre client auquel appartient l’emplacement de stockage.
Dans le compte source, utilisez la commande CREATE FAILOVER GROUP pour créer un groupe de basculement. Spécifiez les
EXTERNAL VOLUMESdans la listeOBJECT_TYPES. Dans la listeALLOWED_DATABASES, incluez la base de données avec les tables Iceberg que vous souhaitez répliquer. Dans la listeALLOWED_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;
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 listeOBJECT_TYPES. Incluez tout autre objet existant dans la listeOBJECT_TYPESpour éviter de supprimer ces objets dans le compte cible.Par exemple, ajoutez des
EXTERNAL VOLUMESà un groupe de basculement qui comprend déjà desDATABASES:ALTER FAILOVER GROUP my_iceberg_rg SET OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
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;
Sautez cette étape si vous disposez déjà d’un groupe secondaire qui réplique le groupe dans le compte source.
Dans le compte cible, exécutez une commande d’actualisation.
ALTER FAILOVER GROUP my_iceberg_fg REFRESH;
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_2etext_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.
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' );
Important
Si vous ne spécifiez pas votre propre
STORAGE_AWS_EXTERNAL_IDpour 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.
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';
Dans le compte source, récupérez des informations sur le principal de service Snowflake pour votre compte cible en suivant les étapes suivantes :
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%';
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_namede la sortie SHOW REPLICATION ACCOUNTS.Par exemple :
SELECT SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY('S3', 'MY_TARGET_ACCOUNT_1');
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 :
Configurer un volume externe pour Amazon S3. Utilisez l’ID externe associé à l’emplacement de stockage de votre compte cible.
Configuration d’un volume externe pour Azure. Dans le
AZURE_CONSENT_URL TEMPLATErenvoyé par SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY, remplacezyour_tenant_idpar l’ID de votre client auquel appartient l’emplacement de stockage.
Dans le compte source, utilisez la commande CREATE REPLICATION GROUP pour créer un groupe de réplication. Spécifiez les
EXTERNAL VOLUMESdans la listeOBJECT_TYPES. Dans la listeALLOWED_DATABASES, incluez la base de données avec la ou les table(s) Iceberg que vous souhaitez répliquer. Dans la listeALLOWED_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;
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 listeOBJECT_TYPES. Incluez tout autre objet existant dans la listeOBJECT_TYPESpour éviter de supprimer ces objets dans le compte cible.Par exemple, ajoutez des
EXTERNAL VOLUMESà un groupe de réplication qui comprend déjà desDATABASES:ALTER REPLICATION GROUP my_iceberg_rg SET OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
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;
Sautez cette étape si vous disposez déjà d’un groupe secondaire qui réplique le groupe dans le compte source.
Dans le compte cible, exécutez une commande d’actualisation.
ALTER REPLICATION GROUP my_iceberg_rg REFRESH;
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.