Conversion d’une table Apache Iceberg™ pour utiliser Snowflake comme catalogue

Convertissez une table Apache Iceberg™ non gérée par Snowflake en une table qui utilise Snowflake comme catalogue Iceberg.

Vous pouvez choisir de convertir une table lorsque vous souhaitez une prise en charge de plateforme Snowflake complète, y compris la prise en charge du SDK du catalogue Snowflake.

Pour en savoir plus sur les différences entre les types de table Iceberg, voir Options de catalogue.

Avant et après la conversion de table

Lorsque vous convertissez une table Iceberg pour utiliser Snowflake comme catalogue, la table devient accessible en écriture et Snowflake prend en charge la gestion de son cycle de vie.

Le tableau suivant compare des tables Iceberg avant et après la conversion :

Avant la conversion

Après la conversion

Catalogue Iceberg

Catalogue externe (tel que AWS Glue), ou pas de catalogue du tout. Nécessite une intégration de catalogue.

Snowflake. Snowflake enregistre les modifications apportées aux données sources et enregistre les modifications dans le catalogue Snowflake. Snowflake met ensuite à jour les métadonnées de la table dans votre volume externe.

Ne nécessite pas d’intégration de catalogue.

Opérations de lecture Snowflake

Opérations d’écriture Snowflake

Emplacement de stockage des données et des métadonnées de la table

Volume externe (stockage Cloud externe).

Volume externe (stockage Cloud externe) sous un emplacement de base que vous spécifiez.

Nettoyage des données et des métadonnées

Géré par vous ou votre catalogue externe.

Géré par Snowflake. Snowflake ne supprime jamais aucune métadonnée, liste de manifestes ou manifestes créés avant la conversion depuis votre stockage externe. Snowflake ne réécrit aucun fichier de données Parquet pendant la conversion. Après avoir converti une table, Snowflake peut réécrire certains fichiers de données dans le cadre de la maintenance régulière de la table.

Accessible à partir du SDK du catalogue Snowflake

Important

Lorsque vous convertissez une table Iceberg, Snowflake ne verrouille pas et n’assume pas l’accès exclusif à votre stockage externe. Pour éviter la corruption des tables, assurez-vous de surveiller ou d’arrêter toutes les écritures autres que Snowflake (telles que les tâches de maintenance automatisées) dans votre emplacement de stockage externe.

Exigences

Avant de convertir une table Iceberg, assurez-vous que Snowflake puisse écrire dans votre volume externe.

Pour que Snowflake puisse écrire dans votre volume externe, les conditions suivantes doivent être remplies :

  • Utilisez la commande ALTER ICEBERG TABLE … REFRESH pour actualiser manuellement la table avant de la convertir.

  • La propriété ALLOW_WRITES de votre volume externe est définie sur TRUE. Pour mettre à jour la valeur de cette propriété pour un volume externe existant, utilisez la commande ALTER EXTERNAL VOLUME. Par exemple : ALTER EXTERNAL VOLUME my_ext_vol SET ALLOW_WRITES=TRUE.

  • Les autorisations de contrôle d’accès que vous définissez sur le compte de stockage Cloud doivent permettre l’accès en écriture. Par exemple, si vous utilisez un volume externe configuré pour Amazon S3, votre rôle IAM doit avoir l’autorisation s3:PutObject pour votre emplacement S3.

Note

La conversion d’une table dont la colonne de partition d’identité n’est pas matérialisée n’est pas prise en charge. Une colonne de partition d’identité non matérialisée est créée lorsqu’une table définit une transformation d’identité en utilisant une colonne source qui n’existe pas dans un fichier Parquet.

Exemple : Convertir une table

Important

Lorsque vous convertissez une table Iceberg, Snowflake ne verrouille pas et n’assume pas l’accès exclusif à votre stockage externe. Pour éviter la corruption des tables, assurez-vous de surveiller ou d’arrêter toutes les écritures autres que Snowflake (telles que les tâches de maintenance automatisées) dans votre emplacement de stockage externe.

Cet exemple commence par créer une table Iceberg à partir de fichiers Iceberg dans le stockage d’objets. Snowflake utilise la valeur METADATA_FILE_PATH pour rechercher les métadonnées de la table à l’emplacement suivant pour les définitions de colonne : <ext-vol-storage-base-url>/path/to/metadata/v1.metadata.json.

CREATE ICEBERG TABLE myIcebergTable
  EXTERNAL_VOLUME='icebergMetadataVolume'
  CATALOG='icebergCatalogInt'
  METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy

Ensuite, utilisez la commande ALTER ICEBERG TABLE … REFRESH pour synchroniser les métadonnées de la table sur le dernier fichier de métadonnées. L’exemple de commande suivant actualise la table en spécifiant un chemin d’accès au fichier de métadonnées.

ALTER ICEBERG TABLE myIcebergTable REFRESH 'metadata/v2.metadata.json';
Copy

Pour finir, convertissez la table de sorte à utiliser Snowflake comme catalogue Iceberg via une commande ALTER ICEBERG TABLE … CONVERT TO MANAGED.

ALTER ICEBERG TABLE myIcebergTable CONVERT TO MANAGED
  BASE_LOCATION = 'my/relative/path/from/external_volume';
Copy

Note

Dans cet exemple, l’instruction ALTER doit spécifier un BASE_LOCATION, parce que la table a été créée à partir de fichiers Iceberg dans le stockage objet et que l”BASE_LOCATION ne faisait pas partie de l’instruction CREATE ICEBERG TABLE d’origine. L”BASE_LOCATION définit le chemin d’accès relatif depuis votre volume externe à un répertoire dans lequel Snowflake écrit les données et métadonnées de table de la table convertie.

Sinon, si BASE_LOCATION a été spécifié dans l’instruction CREATE ICEBERG TABLE d’origine, il n’est pas nécessaire de l’inclure dans la commande ALTER ICEBERG TABLE …. CONVERT TO MANAGED.

Par exemple, Snowflake écrit les données de table dans <ext-vol-storage-base-url>/myBaseLocation/data/.

Snowflake écrit les métadonnées de la table convertie dans <ext-vol-storage-base-url>/myBaseLocation/metadata/.

Conversion et types de données

Note

Vous ne pouvez pas convertir une table qui utilise les types de données Iceberg suivants :

  • uuid

  • fixed(L)

Snowflake utilise les types de données Snowflake pour traiter et renvoyer des valeurs, mais écrit les types Iceberg d’origine dans les fichiers de données des tables.

Pour les types de données tels que int et long, le type de données Snowflake prend en charge une plus grande plage de valeurs que le type de données Iceberg. Pour rester cohérent avec le type de données source, Snowflake ne permet pas d’insérer des valeurs en dehors de la plage prise en charge par le type de données source. Pour plus d’informations, voir Types approximatifs.