Configurer une intégration de catalogue pour des tables Iceberg

Cette rubrique fournit des informations qui vous aideront à créer et à configurer une intégration de catalogue pour des tables Iceberg. Pour créer une table Iceberg qui utilise un catalogue Iceberg externe, ou qui n’utilise aucun catalogue, vous devez spécifier une intégration de catalogue.

Note

Une intégration de catalogue n’est nécessaire que lorsque vous souhaitez créer une table Iceberg en lecture seule à l’aide d’un catalogue Iceberg externe. Vous n’avez pas besoin d’une intégration de catalogue pour créer une table Iceberg qui utilise Snowflake comme catalogue Iceberg. Pour utiliser Snowflake comme catalogue, définissez le paramètre CATALOG sur SNOWFLAKE dans la commande CREATE ICEBERG TABLE.

Créer une intégration de catalogue

Vous pouvez créer une intégration de catalogue pour des tables Iceberg via la commande CREATE CATALOG INTEGRATION.

Exemple : Créer une intégration de catalogue pour des fichiers Iceberg dans le stockage d’objets

L’exemple d’instruction suivant crée une intégration de catalogue pour des métadonnées Iceberg qui se trouvent dans un emplacement de stockage Cloud externe en définissant OBJECT_STORE comme valeur CATALOG_SOURCE.

CREATE OR REPLACE CATALOG INTEGRATION icebergCatalogInt
  CATALOG_SOURCE=OBJECT_STORE
  TABLE_FORMAT=ICEBERG
  ENABLED=TRUE;
Copy

Après avoir créé une intégration de catalogue, vous pouvez créer une table Iceberg.

Configurer une intégration de catalogue pour AWS Glue

Cette section explique comment créer une intégration de catalogue pour AWS Glue et accorder à Snowflake un accès restreint au catalogue de données Amazon Glue.

Note

Pour suivre les instructions de cette section, vous devez disposer d’autorisations dans Amazon Web Services (AWS) permettant de créer et de gérer des politiques et des rôles IAM. Si vous n’êtes pas un administrateur AWS, demandez à votre administrateur AWS d’effectuer ces tâches.

Étape 1 : Configurer des autorisations d’accès pour le catalogue de données AWS Glue

Le mieux est de créer une nouvelle politique IAM pour que Snowflake puisse accéder au catalogue de données Glue. Vous pouvez ensuite attacher la politique à un rôle IAM et utiliser les identifiants de sécurité générés par AWS pour que le rôle puisse accéder aux fichiers du catalogue. Pour des instructions, voir Création de politiques IAM et Modification d’une politique d’autorisations de rôle dans le Guide de l’utilisateur IAM (Identity and Access Management - Gestion de l’identité et de l’accès) AWS.

Au minimum, Snowflake a besoin les autorisations suivantes sur le catalogue de données Glue pour pouvoir accéder aux informations sur les tables.

  • glue:GetTable

  • glue:GetTables

L’exemple de politique suivant (au format JSON) fournit les autorisations nécessaires pour pouvoir accéder à toutes les tables d’une base de données spécifique.

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "AllowGlueCatalogTableAccess",
         "Effect": "Allow",
         "Action": [
            "glue:GetTable",
            "glue:GetTables"
         ],
         "Resource": [
            "arn:aws:glue:*:<accountid>:table/*/*",
            "arn:aws:glue:*:<accountid>:catalog",
            "arn:aws:glue:*:<accountid>:database/<database-name>"
         ]
      }
   ]
}
Copy

Note

  • Vous pouvez modifier l’élément Resource de cette politique pour restreindre davantage les ressources autorisées (par exemple, le catalogue, les bases de données ou les tables). Pour plus d’informations, voir Types de ressource définis par AWS Glue

  • Si vous utilisez le chiffrement pour AWS Glue, vous devez modifier la politique pour ajouter des autorisations Key Management Service AWS (AWSKMS). Pour plus d’informations, voir Configuration du chiffrement dans AWS Glue.

Étape 2 : Créer une intégration de catalogue dans Snowflake

Créez une intégration de catalogue pour le catalogue de données Glue via la commande CREATE CATALOG INTEGRATION.

L’exemple suivant crée une intégration de catalogue qui utilise une source de catalogue AWS Glue. L’exemple indique une valeur pour le paramètre GLUE_REGION facultatif.

CREATE CATALOG INTEGRATION glueCatalogInt
   CATALOG_SOURCE=GLUE
   CATALOG_NAMESPACE='my.catalogdb'
   TABLE_FORMAT=ICEBERG
   GLUE_AWS_ROLE_ARN='arn:aws:iam::123456789012:role/myGlueRole'
   GLUE_CATALOG_ID='123456789012'
   GLUE_REGION='us-east-2'
   ENABLED=TRUE;
Copy

Étape 3 : Récupérer l’utilisateur IAM AWS et l’ID externe de votre compte Snowflake

Pour récupérer les informations sur l’utilisateur IAM AWS et l’ID externe qui ont été créés pour votre compte Snowflake lorsque vous avez créé l’intégration de catalogue, exécutez la commande DESCRIBE CATALOG INTEGRATION. Vous fournissez ces informations à AWS dans la section suivante afin d’établir une relation de confiance.

L’exemple de commande suivant décrit l’intégration de catalogue créée à l’étape précédente :

DESCRIBE CATALOG INTEGRATION glueCatalogInt;
Copy

Notez les valeurs suivantes :

Valeur

Description

GLUE_AWS_IAM_USER_ARN

Utilisateur IAM AWS créé pour votre compte Snowflake, par exemple, arn:aws:iam::123456789001:user/abc1-b-self1234. Snowflake provisionne un seul utilisateur IAM pour l’intégralité de votre compte Snowflake. Toutes les intégrations de catalogue Glue de votre compte utilisent cet utilisateur IAM.

GLUE_AWS_EXTERNAL_ID

L’ID externe nécessaire pour établir une relation de confiance.

Vous fournirez ces valeurs dans la section suivante.

Étape 4 : Octroi à l’utilisateur IAM des autorisations lui permettant d’accéder au catalogue de données AWS Glue

Mettez à jour la politique de confiance pour le même rôle IAM que celui que vous avez spécifié via ARN lors de la création de l’intégration de catalogue (GLUE_AWS_ROLE_ARN). Ajoutez à la politique de confiance les valeurs que vous avez enregistrées dans Étape 3 : Récupérer l’utilisateur IAM AWS et l’ID externe de votre compte Snowflake.

Pour des instructions, voir Modification d’une politique de confiance.

L’exemple de politique de confiance suivant montre à quel endroit spécifier les valeurs GLUE_AWS_IAM_USER_ARN et GLUE_AWS_EXTERNAL_ID :

{
   "Version": "2012-10-17",
   "Statement": [
      {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
         "AWS": "<glue_iam_user_arn>"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
         "StringEquals": {
            "sts:ExternalId": "<glue_aws_external_id>"
         }
      }
      }
   ]
}
Copy

Où :

  • glue_iam_user_arn est la valeur GLUE_IAM_USER_ARN que vous avez enregistrée.

  • glue_aws_external_id est la valeur GLUE_AWS_EXTERNAL_ID que vous avez enregistrée.

Note

  • Pour des raisons de sécurité, si vous créez une nouvelle intégration de catalogue (ou si vous recréez une intégration de catalogue existante via la syntaxe CREATE OR REPLACE CATALOG INTEGRATION), la nouvelle intégration de catalogue a un ID externe différent et ne peut pas résoudre la relation de confiance à moins que vous ne modifiiez la politique de confiance en y ajoutant le nouvel ID externe.

  • Pour vérifier que vos autorisations sont configurées correctement, créez une table Iceberg via cette intégration de catalogue. Snowflake ne vérifie pas que vos autorisations sont correctement définies tant que vous n’avez pas créé de table Iceberg qui référence cette intégration de catalogue.

Prochaines étapes

Après avoir configuré une intégration de catalogue pour AWS Glue, vous pouvez Créer une table Iceberg avec AWS Glue comme catalogue.

Pour mettre à jour la table et continuer à la synchroniser en fonction des modifications apportées à AWS Glue, utilisez une instruction ALTER ICEBERG TABLE … REFRESH. Pour plus d’informations, voir Actualiser les métadonnées d’une table Iceberg qui utilise AWS Glue comme catalogue.

Définition d’une intégration de catalogue au niveau du compte, de la base de données ou du schéma

Pour définir l’intégration de catalogue existante à utiliser pour les tables Iceberg, vous pouvez définir le paramètre CATALOG aux niveaux suivants :

Compte:

Les administrateurs de compte peuvent utiliser la commande ALTER ACCOUNT pour définir le paramètre du compte. Si la valeur est définie pour le compte, toutes les tables Iceberg créées dans le compte qui utilisent un catalogue externe emploient par défaut cette intégration de catalogue.

Objet:

Les utilisateurs peuvent exécuter la commande CREATE <objet> ou ALTER <objet> appropriée pour remplacer la valeur du paramètre CATALOG au niveau de la base de données ou du schéma. La déclaration la moins étendue est utilisée : schéma > base de données > compte.

Outre les privilèges minimaux requis pour modifier un objet à l’aide de la commande ALTER <type_objet_> appropriée, un rôle doit avoir le privilège USAGE sur l’intégration de catalogue.

Exemple

L’instruction suivante définit une intégration de catalogue (shared_catalog_integration) pour une base de données nommée my_database_1 :

ALTER DATABASE my_database_1
  SET CATALOG = 'shared_catalog_integration';
Copy

Après avoir défini une intégration de catalogue au niveau de la base de données, vous pouvez créer une table Iceberg dans cette base de données sans spécifier d’intégration de catalogue. L’instruction suivante crée une table Iceberg à partir des métadonnées du stockage d’objets dans my_database_1 qui utilise l’intégration de catalogue par défaut (shared_catalog_integration) définie pour la base de données.

CREATE ICEBERG TABLE my_iceberg_table
   EXTERNAL_VOLUME='my_external_volume'
   METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy