Utilisation de tables temporaires et transitoires

Outre les tables permanentes, qui sont le type de table par défaut lors de la création de tables, Snowflake prend en charge la définition de tables temporaires ou transitoires. Ces types de tables sont particulièrement utiles pour stocker des données qui n’ont pas besoin d’être gérées pendant de longues périodes (c’est-à-dire des données transitoires).

Dans ce chapitre :

Tables temporaires

Snowflake permet de créer des tables temporaires pour stocker des données temporaires et transitoires (p. ex. des données ETL, des données spécifiques à une session). Les tables temporaires n’existent que dans la session dans laquelle elles ont été créées et n’existent que pour le reste de la session. Par conséquent, elles ne sont pas visibles par les autres utilisateurs ou sessions. Une fois la session terminée, les données stockées dans la table sont purgées entièrement du système et, par conséquent, ne elles sont pas récupérables, ni par l’utilisateur qui a créé la table ni par Snowflake.

Note

Outre les tables, Snowflake prend en charge la création de certains autres objets de base de données en tant qu’objets temporaires (par exemple, des zones de préparation). Ces objets suivent la même sémantique (c’est-à-dire qu’ils sont basés sur une session et n’existent que pour le reste de la session).

Utilisation du stockage de données pour les tables temporaires

Pour la durée de l’existence d’une table temporaire, les données stockées dans la table contribuent aux frais de stockage globaux que Snowflake facture à votre compte. Pour éviter toute modification inattendue du stockage, en particulier si vous créez de grandes tables temporaires dans des sessions que vous gérez pour des périodes supérieures à 24 heures, Snowflake recommande de détruire explicitement ces tables une fois qu’elles ne sont plus nécessaires. Vous pouvez également quitter explicitement la session dans laquelle la table a été créée pour vous assurer qu’aucun frais supplémentaire n’est cumulé.

Pour plus d’informations, consultez Comparaison des types de table (dans cette rubrique).

Conflits de nom potentiels avec d’autres types de table

Comme les autres types de table (transitoire et permanente), les tables temporaires appartiennent à une base de données et à un schéma spécifiés. Cependant, comme elles sont basées sur des sessions, elles ne sont pas liées par les mêmes exigences d’unicité. Ceci signifie que vous pouvez créer des tables temporaires et non temporaires avec le même nom dans le même schéma.

Toutefois, notez que, dans la session, la table temporaire a la priorité sur toute autre table portant le même nom dans le même schéma. Ceci peut conduire à des conflits potentiels et à des comportements inattendus, en particulier lors de l’exécution de DDL sur des tables temporaires et non temporaires. Par exemple :

  • Vous pouvez créer une table temporaire portant le même nom qu’une table existante dans le même schéma, masquant ainsi la table existante.

  • Vous pouvez créer une table portant le même nom qu’une table temporaire existante dans le même schéma. Toutefois, la table nouvellement créée est masquée par la table temporaire.

Par la suite, toutes les requêtes et autres opérations effectuées dans la session sur la table n’affectent que la table temporaire.

Important

Ce comportement est particulièrement important à noter lorsque vous détruisez une table dans une session et que vous utilisez Time Travel pour restaurer la table. Il est également important de prendre note de ce comportement lors de l’utilisation de CREATE OR REPLACE pour créer une table, car cela fait détruire une table (si elle existe) et crée une nouvelle table avec la définition spécifiée.

Création d’une table temporaire

Pour créer une table temporaire, il suffit de spécifier le mot-clé TEMPORARY (ou l’abréviation TEMP) dans CREATE TABLE.

Notez que la création d’une table temporaire ne nécessite pas le privilège CREATE TABLE sur le schéma dans lequel l’objet est créé.

Par exemple :

CREATE TEMPORARY TABLE mytemptable (id NUMBER, creation_date DATE);
Copy

Note

Après la création, les tables temporaires ne peuvent pas être converties en un autre type de table.

Tables transitoires

Snowflake prend en charge la création de tables transitoires qui existent jusqu’à ce qu’elles soient explicitement détruites, et qui sont disponibles pour tous les utilisateurs possédant les privilèges adéquats. Les tables transitoires sont similaires aux tables permanentes, à la différence près qu’elles n’ont pas de période Fail-safe. Par conséquent, les tables transitoires sont spécialement conçues pour les données transitoires qui doivent être conservées au-delà de chaque session (par opposition aux tables temporaires), mais qui n’ont pas besoin du même niveau de protection et de récupération des données que les tables permanentes.

Utilisation du stockage des données pour les tables transitoires

Tout comme les tables permanentes, les tables transitoires contribuent aux frais de stockage globaux que Snowflake facture à votre compte. Cependant, comme les tables transitoires n’utilisent pas Fail-safe, il n’y a aucun coût Fail-safe (c’est-à-dire les coûts associés au maintien des données requises pour la récupération après sinistre Fail-safe).

Pour plus d’informations, consultez Comparaison des types de table (dans cette rubrique).

Tables transitoires créées en tant que clones de tables permanentes

Lorsque vous créez une table transitoire en tant que clone d’une table permanente, Snowflake crée un clone à zéro copie. Cela signifie que lorsque la table transitoire est créée, elle n’utilise aucun stockage de données, car elle partage toutes les micropartitions existantes de la table permanente d’origine. Lorsque des lignes sont ajoutées, supprimées ou mises à jour dans le clone, il en résulte de nouvelles micropartitions qui appartiennent exclusivement au clone (dans ce cas, la table transitoire).

Lorsqu’une table permanente est supprimée, elle entre en état Fail-safe pour une période de 7 jours. Les octets Fail-safe intégrés entraînent des coûts de stockage. Si une table transitoire est créée en tant que clone d’une table permanente, cela peut retarder le moment où la table permanente est supprimée et où tous ses octets passent à l’état Fail-safe. Si le clone de la table transitoire partage des micropartitions avec la table permanente lorsqu’il est supprimé, ces octets partagés n’entreront en état Fail-safe que lorsque la table transitoire sera supprimée.

Bases de données et schémas transitoires

Snowflake prend également en charge la création de bases de données et de schémas transitoires. Toutes les tables créées dans un schéma transitoire, ainsi que tous les schémas créés dans une base de données transitoire, sont transitoires par définition.

Création d’une table, d’un schéma ou d’une base de données transitoire

Pour créer une table, un schéma, une base de données transitoire, il suffit de spécifier le mot-clé TRANSIENT lors de la création de l’objet :

Par exemple, pour créer une table transitoire :

CREATE TRANSIENT TABLE mytranstable (id NUMBER, creation_date DATE);
Copy

Note

Après la création, les tables transitoires ne peuvent pas être converties en un autre type de table.

Comparaison des types de table

Le tableau suivant résume les différences entre les trois types de tableaux, en particulier en ce qui concerne leur impact sur Time Travel et Fail-safe :

Type

Persistance

Clonage (type de source => type de cible)

Période de conservation de Time Travel (jours)

Période Fail-safe (jours)

Temporaire

Reste de la session

Temporaire => Temporaire . . Temporaire => Transitoire

0 ou 1 (la valeur par défaut est 1)

0

Transitoire

Jusqu’à sa destruction explicite

Transitoire => Temporaire . . Transitoire => Transitoire

0 ou 1 (la valeur par défaut est 1)

0

Permanent (Standard Edition)

Jusqu’à sa destruction explicite

Permanent => Temporaire . . Permanent => Transitoire . . Permanent => Permanent

0 ou 1 (la valeur par défaut est 1)

7

Permanent (Enterprise Edition et supérieur)

Jusqu’à sa destruction explicite

Permanent => Temporaire . . Permanent => Transitoire . . Permanent => Permanent

0 à 90 (la valeur par défaut est configurable)

7

Notes Time Travel

  • La période de conservation de Time Travel pour une table peut être spécifiée lors de la création de la table ou ultérieurement. Pendant la période de conservation, toutes les opérations de Time Travel peuvent être effectuées sur les données de la table (par exemple, les requêtes) et la table elle-même (par exemple, le clonage et la restauration).

  • Si la période de conservation Time Travel d’une table permanente est définie sur 0, elle entrera immédiatement dans la période Fail-safe au moment de la destruction.

  • Les tables temporaires peuvent avoir une période de conservation de Time Travel de 1 jour. Cependant, une table temporaire est purgée une fois que la session (dans laquelle la table a été créée) se termine, de sorte que la période de conservation réelle est de 24 heures ou la durée restante de la session, en fonction de ce qui est le plus court.

  • Une requête Time Travel de longue durée retardera la purge des tables temporaires et transitoires jusqu’à ce que la requête soit terminée.

Remarques sur Fail-safe

  • La période Fail-safe n’est configurable pour aucun type de table.

  • Les tables transitoires et temporaires n’ont pas de période Fail-safe. Par conséquent, aucun frais de stockage de données supplémentaires n’est encouru au-delà de la période de conservation Time Travel.

Important

Étant donné que les tables transitoires n’ont pas de période Fail-safe, elles constituent une option intéressante pour gérer le coût des très grandes tables utilisées pour stocker des données transitoires. Cependant, les données de ces tables ne peuvent pas être récupérées après l’expiration de la période de conservation Time Travel.

Par exemple, si une défaillance du système se produit et qu’une table transitoire est perdue ou détruite, après 1 jour, les données ne peuvent être récupérées par vous ou Snowflake. Par conséquent, nous recommandons d’utiliser les tables transitoires seulement pour les données qui n’ont pas besoin d’être protégées contre les pannes ou les données qui peuvent être reconstruites à l’extérieur de Snowflake.

Pour plus d’informations, consultez Remarques relatives au stockage de données.