CREATE SCHEMA

Crée un nouveau schéma dans la base de données actuelle.

Cette commande prend en charge les variantes suivantes :

Voir aussi :

ALTER SCHEMA , DESCRIBE SCHEMA , DROP SCHEMA , SHOW SCHEMAS , UNDROP SCHEMA

CREATE OR ALTER <objet>

Syntaxe

CREATE [ OR REPLACE ] [ TRANSIENT ] SCHEMA [ IF NOT EXISTS ] <name>
  [ CLONE <source_schema>
      [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
      [ IGNORE TABLES WITH INSUFFICIENT DATA RETENTION ]
      [ IGNORE HYBRID TABLES ] ]
  [ WITH MANAGED ACCESS ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ EXTERNAL_VOLUME = <external_volume_name> ]
  [ CATALOG = <catalog_integration_name> ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ CLASSIFICATION_PROFILE = '<classification_profile>' ]
  [ COMMENT = '<string_literal>' ]
  [ CATALOG_SYNC = '<snowflake_open_catalog_integration_name>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

Syntaxe des variantes

CREATE OR ALTER SCHEMA

Crée un nouveau schéma s’il n’existe pas encore, ou modifie un schéma existant en schéma défini dans l’instruction. Une instruction CREATE OR ALTER SCHEMA suit les règles syntaxiques d’une instruction CREATE SCHEMA et présente les mêmes limitations qu’une instruction ALTER SCHEMA.

Pour plus d’informations, voir Notes sur l’utilisation de CREATE OR ALTER SCHEMA.

CREATE OR ALTER [ TRANSIENT ] SCHEMA <name>
  [ WITH MANAGED ACCESS ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ EXTERNAL_VOLUME = <external_volume_name> ]
  [ CATALOG = <catalog_integration_name> ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ LOG_LEVEL = '<log_level>' ]
  [ TRACE_LEVEL = '<trace_level>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ COMMENT = '<string_literal>' ]
Copy

CREATE SCHEMA … CLONE

Crée un nouveau schéma avec les mêmes valeurs de paramètre :

CREATE [ OR REPLACE ] SCHEMA [ IF NOT EXISTS ] <name> CLONE <source_schema>
  [ ... ]
Copy

Pour plus de détails, voir CREATE <objet> … CLONE.

Paramètres requis

name

Indique l’identificateur du schéma ; doit être unique pour la base de données dans laquelle le schéma est créé.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex. "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails, voir Exigences relatives à l’identificateur.

Paramètres facultatifs

TRANSIENT

Spécifie un schéma comme transitoire. Les schémas transitoires n’ont pas de période Fail-safe et n’encourent donc pas de coûts de stockage supplémentaires une fois qu’ils quittent la période Time Travel ; cependant, cela signifie également qu’ils ne sont pas protégés par Fail-safe en cas de perte de données. Pour plus d’informations, voir Compréhension et affichage de Fail-safe.

De plus, par définition, toutes les tables créées dans un schéma transitoire sont transitoires. Pour plus d’informations sur les tables transitoires, voir CREATE TABLE.

Par défaut : aucune valeur (le schéma est permanent)

CLONE source_schema

Spécifie de créer un clone du schéma source spécifié. Pour plus de détails sur le clonage d’un schéma, voir CREATE <objet> … CLONE.

AT | BEFORE ( TIMESTAMP => timestamp | OFFSET => time_difference | STATEMENT => id )

Lors du clonage d’un schéma, la clause AT | BEFORE spécifie d’utiliser la fonction Time Travel pour cloner le schéma à ou avant un point spécifique dans le passé.

IGNORE TABLES WITH INSUFFICIENT DATA RETENTION

Ignorez les tables qui n’ont plus de données historiques disponibles dans Time Travel à cloner. Si le moment dans le passé spécifié dans la clause AT | BEFORE dépasse la période de conservation des données pour toute table enfant dans une base de données ou un schéma, ignorez l’opération de clonage pour la table enfant. Pour plus d’informations, voir Objets enfants et durée de conservation des données.

IGNORE HYBRID TABLES

Ignorez les tables hybrides, qui ne seront pas clonées. Utilisez cette option pour cloner un schéma contenant des tables hybrides. Le schéma cloné inclut d’autres objets mais ignore les tables hybrides.

Si vous n’utilisez pas cette option et que votre schéma contient une ou plusieurs tables hybrides, la commande ignore silencieusement les tables hybrides. Cependant, le traitement des erreurs pour les schémas contenant des tables hybrides changera dans une prochaine version ; par conséquent, vous souhaiterez peut-être ajouter ce paramètre à vos commandes de manière préventive.

WITH MANAGED ACCESS

Spécifie un schéma géré. Les schémas d’accès gérés centralisent la gestion des privilèges avec le propriétaire du schéma.

Dans les schémas classiques, le propriétaire d’un objet (c’est-à-dire le rôle disposant du privilège OWNERSHIP sur l’objet) peut octroyer des privilèges supplémentaires sur leurs objets à d’autres rôles. Dans les schémas gérés, le propriétaire du schéma gère toutes les attributions de privilèges, y compris les autorisations futures, sur les objets du schéma. Les propriétaires d’objets conservent les privilèges OWNERSHIP sur les objets ; cependant, seul le propriétaire du schéma peut gérer les attributions de privilèges sur les objets.

DATA_RETENTION_TIME_IN_DAYS = integer

Spécifie le nombre de jours pendant lesquels des actions Time Travel (CLONE et UNDROP) peuvent être effectuées sur le schéma, ainsi que la durée de conservation Time Travel par défaut de toutes les tables créées dans le schéma. Pour plus de détails, voir Compréhension et utilisation de la fonction Time Travel.

Pour une description détaillée de ce paramètre de niveau objet, ainsi que plus d’informations sur les paramètres d’objet, voir Paramètres. Pour plus d’informations sur la durée de conservation au niveau de la table, voir CREATE TABLE et Compréhension et utilisation de la fonction Time Travel.

Valeurs :

  • Édition Standard : 0 ou 1

  • Édition Enterprise :

    • 0 à 90 pour les schémas permanents

    • 0 ou 1 pour les schémas transitoires

Par défaut :

  • Édition Standard : 1

  • Édition Enterprise (ou supérieure) : 1 (sauf si une valeur par défaut différente a été spécifiée au niveau du compte ou de la base de données)

Note

Une valeur de 0 désactive effectivement Time Travel pour le schéma.

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Paramètre d’objet qui spécifie le nombre maximum de jours pendant lesquels Snowflake peut prolonger la période de conservation des données pour les tables du schéma, afin d’éviter que les flux sur les tables ne deviennent obsolètes.

Pour une description détaillée de ce paramètre, voir MAX_DATA_EXTENSION_TIME_IN_DAYS.

EXTERNAL_VOLUME = external_volume_name

Paramètre d’objet qui spécifie le volume externe par défaut à utiliser pour des Tables Apache Iceberg™.

Pour plus d’informations sur ce paramètre, voir EXTERNAL_VOLUME.

CATALOG = catalog_integration_name

Paramètre d’objet qui spécifie l’intégration de catalogue par défaut à utiliser pour des Tables Apache Iceberg™.

Pour plus d’informations sur ce paramètre, voir CATALOG.

REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }

Spécifie s’il faut remplacer les caractères UTF-8 non valides par le caractère de remplacement Unicode (�) dans les résultats de requête d’une table Iceberg. Vous ne pouvez définir ce paramètre que pour les tables qui utilisent un catalogue Iceberg externe.

  • TRUE remplace les caractères UTF-8 non valides par le caractère de remplacement Unicode.

  • FALSE laisse les caractères UTF-8 non valides inchangés. Snowflake renvoie un message d’erreur utilisateur lorsqu’il rencontre des caractères UTF-8 non valides dans un fichier de données Parquet.

Par défaut : FALSE

DEFAULT_DDL_COLLATION = 'collation_specification'

Spécifie une spécification de classement par défaut pour toutes les tables ajoutées au schéma. La valeur par défaut peut être remplacée au niveau de la table individuelle.

Pour plus de détails sur le paramètre, voir DEFAULT_DDL_COLLATION.

LOG_LEVEL = 'log_level'

Spécifie le niveau de gravité des messages qui doivent être ingérés et mis à disposition dans la table des événements actifs. Les messages du niveau spécifié (et des niveaux plus sévères) sont ingérés.

Pour plus d’informations sur les niveaux de journalisation, voir LOG_LEVEL. Pour plus d’informations sur la définition du niveau de journalisation, voir Définition des niveaux de journalisation, des métriques et du traçage.

TRACE_LEVEL = 'trace_level'

Contrôle la manière dont les événements de trace sont intégrés dans la table des événements.

Pour plus d’informations sur les niveaux, voir TRACE_LEVEL. Pour plus d’informations sur la définition du niveau de trace, voir Définition des niveaux de journalisation, des métriques et du traçage.

STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }

Spécifie la politique de sérialisation du stockage des Tables Apache Iceberg™ qui utilisent Snowflake comme catalogue.

  • COMPATIBLE : Snowflake effectue l’encodage et la compression des fichiers de données, ce qui garantit l’interopérabilité avec les moteurs de calcul tiers.

  • OPTIMIZED : Snowflake effectue l’encodage et la compression des fichiers de données, ce qui garantit des performances optimales de la part des tables au sein de Snowflake.

Par défaut : OPTIMIZED

CLASSIFICATION_PROFILE = 'classification_profile'

Associe le schéma à un profil de classification afin que les données sensibles du schéma soient automatiquement classées.

COMMENT = 'string_literal'

Spécifie un commentaire pour le schéma.

Par défaut : aucune valeur

CATALOG_SYNC = 'snowflake_open_catalog_integration_name'

Spécifie le nom d’une intégration de catalogue configurée pour Snowflake Open Catalog. Si spécifié, Snowflake synchronise les tables Apache Iceberg™ gérées par Snowflake dans le schéma avec un catalogue externe dans votre compte Snowflake Open Catalog. Pour plus d’informations sur la synchronisation des tables Iceberg gérées par Snowflake avec Open Catalog, voir Synchronisation d’une table gérée par Snowflake avec Snowflake Open Catalog.

Pour plus d’informations sur ce paramètre, voir CATALOG_SYNC.

Par défaut : aucune valeur

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

Spécifie le nom de la balise et la valeur de la chaîne de la balise.

La valeur de la balise est toujours une chaîne de caractères et le nombre maximum de caractères pour la valeur de la balise est 256.

Pour plus d’informations sur la spécification des balises dans une instruction, voir Quotas de balises pour les objets et les colonnes.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :

Privilège

Objet

Remarques

CREATE SCHEMA

Base de données

Peut créer à la fois des schémas ordinaires et des schémas d’accès géré.

CREATE SCHEMA … CLONE … WITH MANAGED ACCESS

Options

Les privilèges requis varient selon que le schéma source est géré ou non géré :

  • Géré : OWNERSHIP sur le schéma source.

  • Non géré : MANAGE GRANTS ON ACCOUNT et USAGE sur le schéma source.

USAGE

Volume externe, intégration du catalogue

Nécessaire pour définir les paramètres d’objet EXTERNAL_VOLUME ou CATALOG, respectivement.

MODIFY LOG LEVEL

Compte

Obligatoire pour définir le LOG_LEVEL pour un schéma.

MODIFY TRACE LEVEL

Compte

Obligatoire pour définir le TRACE_LEVEL pour un schéma.

OWNERSHIP

Schéma

Obligatoire uniquement lors de l’exécution d’une instruction CREATE OR ALTER SCHEMA pour un schéma existant.

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Notes générales sur l’utilisation

  • La création d’un schéma le définit automatiquement comme le schéma actif/courant pour la session en cours (équivalant à l’utilisation de la commande USE SCHEMA pour le schéma).

  • Si un schéma du même nom existe déjà dans la base de données, une erreur est renvoyée et le schéma n’est pas créé, sauf si le mot clé facultatif OR REPLACE est spécifié dans la commande.

    Important

    Utiliser OR REPLACE équivaut à utiliser DROP SCHEMA sur la schéma existant et créer ensuite un nouveau schéma avec le même nom ; cependant, le schéma détruit n’est pas supprimé définitivement du système. En revanche, il est conservé dans Time Travel. Ceci est important, car les schémas détruits dans Time Travel contribuent au stockage des données de votre compte. Pour plus d’informations, voir Coûts de stockage pour Time Travel et Fail-safe.

  • Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacé, l’ancien objet est supprimé et le nouvel objet est créé dans une seule transaction.

  • Dans un schéma à accès géré, le propriétaire du schéma gère les autorisations sur les objets contenus (par exemple, des tables ou des vues), mais ne dispose d’aucun autre privilège (USAGE, SELECT, DROP, etc.) sur les objets.

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

Notes sur l’utilisation de CREATE OR ALTER SCHEMA

  • Toutes les limitations de la commande ALTER SCHEMA s’appliquent.

  • Cette commande ne prend pas en charge les actions suivantes :

    • Permutation des schémas à l’aide du paramètre SWAP WITH.

    • Renommer un schéma à l’aide du paramètre RENAME TO.

    • Création d’un clone d’un schéma à l’aide du paramètre CLONE.

    • Ajout ou modification de balises et de politiques. Toutes les balises et politiques existantes sont conservées.

    • Conversion d’un schéma TRANSIENT en schéma nonTRANSIENT, et inversement.

Exemples

Créer un schéma permanent :

CREATE SCHEMA myschema;

SHOW SCHEMAS;

+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
| created_on                    | name               | is_default | is_current | database_name | owner        | comment                                                   | options | retention_time |
|-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------|
| 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N          | N          | MYDB          |              | Views describing the contents of schemas in this database |         | 1              |
| 2018-12-10 09:33:56.793 -0800 | MYSCHEMA           | N          | Y          | MYDB          | PUBLIC       |                                                           |         | 1              |
| 2018-11-26 06:08:24.263 -0800 | PUBLIC             | N          | N          | MYDB          | PUBLIC       |                                                           |         | 1              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
Copy

Créer un schéma transitoire :

CREATE TRANSIENT SCHEMA tschema;

SHOW SCHEMAS;

+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+
| created_on                    | name               | is_default | is_current | database_name | owner        | comment                                                   | options   | retention_time |
|-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------|
| 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N          | N          | MYDB          |              | Views describing the contents of schemas in this database |           | 1              |
| 2018-12-10 09:33:56.793 -0800 | MYSCHEMA           | N          | Y          | MYDB          | PUBLIC       |                                                           |           | 1              |
| 2018-11-26 06:08:24.263 -0800 | PUBLIC             | N          | N          | MYDB          | PUBLIC       |                                                           |           | 1              |
| 2018-12-10 09:35:32.326 -0800 | TSCHEMA            | N          | Y          | MYDB          | PUBLIC       |                                                           | TRANSIENT | 1              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+
Copy

Créer un schéma d’accès géré :

CREATE SCHEMA mschema WITH MANAGED ACCESS;

SHOW SCHEMAS;

+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+
| created_on                    | name               | is_default | is_current | database_name | owner        | comment                                                   | options        | retention_time |
|-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------|
| 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N          | N          | MYDB          |              | Views describing the contents of schemas in this database |                | 1              |
| 2018-12-10 09:36:47.738 -0800 | MSCHEMA            | N          | Y          | MYDB          | ROLE1        |                                                           | MANAGED ACCESS | 1              |
| 2018-12-10 09:33:56.793 -0800 | MYSCHEMA           | N          | Y          | MYDB          | PUBLIC       |                                                           |                | 1              |
| 2018-11-26 06:08:24.263 -0800 | PUBLIC             | N          | N          | MYDB          | PUBLIC       |                                                           |                | 1              |
| 2018-12-10 09:35:32.326 -0800 | TSCHEMA            | N          | Y          | MYDB          | PUBLIC       |                                                           | TRANSIENT      | 1              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+
Copy

Exemples CREATE OR ALTER SCHEMA

Créer un schéma simple

Créer un schéma nommé s1 :

CREATE OR ALTER SCHEMA s1;
Copy

Créer ou modifier le schéma s1 et en définir les propriétés et les paramètres :

CREATE OR ALTER SCHEMA s1
  WITH MANAGED ACCESS
  DATA_RETENTION_TIME_IN_DAYS = 5
  DEFAULT_DDL_COLLATION = 'de';
Copy

Annuler la définition d’un paramètre précédemment défini sur le schéma

L”absence d’un paramètre précédemment défini dans la définition modifiée du schéma entraîne l’annulation de sa définition. Dans l’exemple suivant, désactivez l’accès géré pour le schéma s1 créé dans l’exemple précédent :

CREATE OR ALTER SCHEMA s1
  DATA_RETENTION_TIME_IN_DAYS = 5
  DEFAULT_DDL_COLLATION = 'de';
Copy