Conversion d’une table Iceberg¶
Ce chapitre fournit des informations sur la conversion d’une table 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 Iceberg Snowflake.
Pour en savoir plus sur les différences entre les types de table Iceberg, voir Options de catalogue Iceberg.
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. |
Snowflake does not touch any externally generated data and metadata files. |
Accessible à partir du SDK du catalogue Iceberg Snowflake |
❌ |
✔ |
Important
When you convert an Iceberg table, Snowflake doesn’t lock down or assume sole access to your external storage. To prevent table corruption, ensure that you monitor and/or stop any non-Snowflake writes (such as automated maintenance jobs) to your external storage location.
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 surTRUE
. 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.
Exemple : Convertir une table Iceberg¶
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';
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';
Finally, convert the table to use Snowflake as the Iceberg catalog by using a ALTER ICEBERG TABLE … CONVERT TO MANAGED command.
ALTER ICEBERG TABLE myIcebergTable CONVERT TO MANAGED
BASE_LOCATION = myBaseLocation;
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¶
If you convert a table with an Iceberg data type that Snowflake doesn’t support, Snowflake uses a Snowflake data type to process and return values. However, Snowflake writes the original Iceberg data type to the table data files so that you can use the table with other compute engines like Apache Spark.
For data types such as int
and long
, the data type that Snowflake uses for processing supports a larger range of values than the source data type.
To stay consistent with the source data type, Snowflake does not allow inserting values outside the range that the
source data type supports.
For example, consider a table with a column of Iceberg type int
. After conversion, Snowflake processes the column values
using the Snowflake data type NUMBER(10,0). NUMBER(10,0) has a range of (-9,999,999,999, +9,999,999,999), but int
has a
more limited range of (-2,147,483,648, +2,147,483,647). If you try to insert a value of 3,000,000,000 into that column, Snowflake
returns an out-of-range error message.
For more information about data types, including limitations, see Types de données des tables Iceberg.