CREATE OR ALTER <objet>

CREATE OR ALTER sont des commandes DDL qui combinent la fonctionnalité de la commande CREATE et de la commande ALTER en vous permettant de définir un objet en utilisant la syntaxe prise en charge par la commande CREATE <objet> avec les limites de la commande ALTER <objet>.

Les commandes gèrent les données et les associations, ce qui signifie que les données et les autres états, les associations de balises et les politiques jointes, ainsi que les privilèges accordés sur l’objet sont préservés. Cependant, certaines transformations d’objets peuvent entraîner des pertes de données. Par exemple, si une instruction CREATE OR ALTER TABLE aboutit à la suppression d’une colonne, toutes les données contenues dans la colonne sont supprimées.

CREATE OR ALTER vous permettent d’appliquer des mises à jour incrémentielles aux objets à l’aide d’une méthode déclarative et idempotente. Lorsqu’elle est exécutée, une instruction CREATE OR ALTER produit l’un des résultats suivants :

  • Si l’objet n’existe pas, il est créé conformément à la définition.

  • Si l’objet existe, il est transformé en objet défini dans l’instruction.

  • Si l’objet correspond déjà à la définition, il reste inchangé.

La commande préserve les données, les états, les associations de balises, les politiques jointes et les privilèges accordés sur l’objet. Cependant, certaines transformations peuvent entraîner des pertes de données. Par exemple, si une instruction CREATE OR ALTER TABLE supprime une colonne, les données de cette colonne seront perdues mais pourront toujours être récupérées avec Time Travel.

Voir aussi :

CREATE <objet>, ALTER <objet>

Syntaxe

CREATE OR ALTER <object_type> <object_name>
  [ <object_type_properties> ]
  [ <object_type_params> ]
  [ COMMENT = '<string_literal>' ]
Copy

object_type_properties et object_type_params sont spécifiques au type d’objet.

Pour des informations spécifiques sur la syntaxe, les notes sur l’utilisation et des exemples, voir :

Objets du compte :

Objets de la base de données :

Notes générales sur l’utilisation

  • Gouvernance des données : les commandes CREATE OR ALTER ne prennent pas en charge les modifications de la gouvernance des données. Les balises ou politiques existantes ne sont pas affectées par les instructions CREATE OR ALTER et restent inchangées.

  • Annulation de la définition des propriétés et des paramètres d’un objet : si une propriété ou un paramètre précédemment défini est absent de la définition de l’objet modifié, sa définition est annulée.

    Si vous annulez la définition de la valeur d’un paramètre explicite, la valeur par défaut du paramètre est rétablie. Si le paramètre est défini sur un objet qui contient l’objet cible, l’objet cible hérite de la valeur définie sur l’objet qui le contient. Dans le cas contraire, la valeur du paramètre de l’objet est réinitialisée à la valeur par défaut.

  • Atomicité : la commande CREATE OR ALTER TABLE ne garantit pas actuellement l’atomicité. Cela signifie que si une instruction CREATE OR ALTER TABLE échoue lors de l’exécution, il est possible qu’un sous-ensemble de modifications ait été appliqué à la table. S’il existe une possibilité de modifications partielles, le message d’erreur, dans la plupart des cas, comprend le texte suivant :

    CREATE OR ALTER execution failed. Partial updates may have been applied.
    

    Par exemple, si l’instruction tente de supprimer la colonne A et d’ajouter une nouvelle colonne B à une table, et si l’instruction est interrompue, il est possible que la colonne A ait été abandonnée, mais que la colonne B n’ait pas été supprimée.

    Note

    Si les modifications sont partiellement appliquées, la table résultante est toujours à l’état valide et vous pouvez utiliser d’autres instructions ALTER TABLE pour compléter l’ensemble de modifications d’origine.

    Pour une récupération suite à des mises à jour partielles, Snowflake recommande les mécanismes de récupération suivants :

    • Fix forward (Correction vers l’avant)

      • Réexécutez l’instruction CREATEORALTERTABLE. Si l’instruction réussit lors de la deuxième tentative, l’état cible est atteint.

      • Analysez le message d’erreur. Si possible, corrigez l’erreur et réexécutez l’instruction CREATE OR ALTER TABLE.

    • Roll back (Retour en arrière)

      S’il n’est pas possible de corriger vers l’avant, Snowflake recommande d’annuler manuellement les modifications partielles :

      • Examinez l’état de la table à l’aide des commandes DESCRIBE TABLE et SHOW TABLES. Déterminez les modifications partielles qui ont été appliquées, le cas échéant.

      • Si des modifications partielles ont été appliquées, exécutez les instructions ALTER TABLE appropriées pour ramener la table à son état d’origine.

        Note

        Dans certains cas, il se peut que vous ne puissiez pas annuler des modifications partielles. Pour plus d’informations, voir les actions prises en charge et non prises en charge pour la modification des propriétés des colonnes dans la rubrique ALTER TABLE … ALTER COLUMN.

    • Si vous avez besoin d’aide pour rétablir l’état précédant une mise à jour partielle, contactez le support Snowflake.

Limitations

Les limites spécifiques de la commande CREATE OR ALTER <objet> dépendent de l’objet. Voici quelques exemples de limites :

  • Les commandes CREATE OR ALTER TABLE ne prennent pas en charge l’optimisation de la recherche car celle-ci ne fait pas partie de la syntaxe CREATE TABLE.

  • Vous ne pouvez pas remplacer le type de données d’une colonne d’une table par un type de données incompatible.

  • Vous ne pouvez pas modifier la définition d’une vue existante.

  • Vous devez suspendre une tâche avant de pouvoir la modifier.

  • La syntaxe de variante pour la création d’objets (par exemple, CREATE OR ALTER TABLE … AS SELECT) n’est actuellement pas prise en charge.

Pour connaître les limites d’un objet spécifique, consultez le sujet de référence pour l’objet.

Exemple de cas

Si vous avez des scripts SQL qui configurent les objets Snowflake pour une application, vous pouvez utiliser les instructions CREATE OR ALTER <objet> dans vos scripts pour faciliter le déploiement des modifications dans les environnements de développement, de test et de production. Au fur et à mesure que l’application évolue, vous pouvez apporter des modifications au script.

En utilisant l’instruction CREATE OR ALTER <objet>, vous pouvez exécuter le script dans un nouvel environnement, tout en réexécutant le script dans un environnement existant, ce qui vous permet d’écrire une seule fois la définition de l’objet souhaité et de l’appliquer à tous les environnements.