Transactions et tables Apache Iceberg™¶
Cette rubrique fournit des informations sur la manière dont Snowflake gère spécifiquement les transactions pour les tables Apache Iceberg™. Les règles décrites dans la rubrique Transactions Snowflake s’appliquent également aux tables Iceberg.
Tables qui utilisent Snowflake comme catalogue¶
Pour une table qui utilise Snowflake comme catalogue, Snowflake gère les métadonnées Iceberg afin que d’autres moteurs de requête, tels que Spark, puissent lire la table.
Requêtes¶
Lorsque vous utilisez Snowflake pour interroger ce type de table, la table suit les principes transactionnels généraux de Snowflake.
Snowflake prend actuellement en charge l’isolation de lecture validée pour les transactions pour une simultanéité et un débit supérieurs, tandis qu’Iceberg prend actuellement en charge l’isolation sérialisable ou des instantanés.
Instructions DDL¶
Snowflake traite les instructions DDL comme des transactions individuelles et n’isole pas les instructions DDL sur plusieurs transactions simultanées. Pour plus d’informations, voir DDL dans les transactions implicites.
Cela diffère de la façon dont les tables Iceberg gèrent généralement les transactions avec des instructions DDL, où une seule transaction validée peut inclure à la fois des instructions DML et DDL, ou plusieurs instructions DDL regroupées.
Note
Les métadonnées Iceberg n’affichent pas toujours une nouvelle version de schéma pour chaque modification de DDL individuelle. Dans certains cas, Snowflake regroupe les instructions DDL et enregistre le groupe comme une seule nouvelle version de schéma dans les métadonnées Iceberg.
Des modifications de DDL peuvent apparaître dans le désordre dans les métadonnées Iceberg, en particulier si un changement de DDL se produit à proximité d’autres opérations DDL ou DML.
Écritures à partir de moteurs externes dans les tables gérées par Snowflake¶
Snowflake ne prend actuellement pas en charge les écritures dans les tables gérées par Snowflake à partir de moteurs de requête externes, tels que Spark.
Tables utilisant un catalogue externe¶
Pour une table Iceberg qui utilise un catalogue externe, Snowflake récupère le dernier état de la table à partir du catalogue externe lorsque vous exécutez la commande ALTER ICEBERG TABLE … REFRESH.
Actualisation des transactions¶
Snowflake valide automatiquement les instructions ALTER ICEBERG TABLE … REFRESH à l’intérieur d’une transaction à instruction unique.
Dans une transaction implicite, Snowflake traite l’instruction de la même manière qu’il traite toute autre instruction lorsque AUTOCOMMIT est activé.
Dans une transaction explicite (avec plusieurs instructions), Snowflake exécute et valide automatiquement l’actualisation en tant que transaction à instruction unique avant de valider le bloc de transaction explicite.
Écritures dans des tables gérées en externe¶
Snowflake ne prend actuellement pas en charge les écritures dans des tables gérées en externe.
Transactions à plusieurs instructions¶
Snowflake prend en charge les transactions à plusieurs instructions en validant plusieurs instructions DML de manière atomique et utilise la logique suivante :
Chaque instruction DDL s’exécute comme une transaction individuelle lorsqu’elle est rencontrée.
Chaque opération ALTER ICEBERG TABLE … REFRESH s’exécute comme une transaction unique lorsqu’elle est rencontrée.
Toutes les autres instructions au sein d’une transaction explicite ou implicite sont regroupées et validées en tant que transaction unique.
Prenons l’exemple suivant d’un bloc de transaction explicite pour une table Iceberg dans Snowflake :
BEGIN
INSERT INTO table1 VALUES (1, "One");
INSERT INTO table1 VALUES (2, "Two");
ALTER ICEBERG TABLE table1 ALTER COLUMN c3 SET DATA TYPE ARRAY(long);
INSERT INTO table1 VALUES (3, "Three");
INSERT INTO table1 VALUES (4, "Four");
COMMIT;
Lorsque Snowflake rencontre l’instruction ALTER ICEBERG TABLE, il valide les deux premières instructions INSERT INTO TABLE (tout ce qui a été traité jusqu’à présent) comme une transaction.
Snowflake valide ensuite l’instruction ALTERICEBERGTABLE comme une transaction distincte.
Snowflake crée ensuite une nouvelle transaction et traite les instructions INSERT INTO restantes. Étant donné que le reste du bloc ne contient pas d’instructions DDL ou d’instructions d’actualisation, il valide les transactions restantes à la fin du bloc (à COMMIT).