Catégories :

Base de données, schéma et partage DDL

CREATE DATABASE

Crée une nouvelle base de données dans le système.

De plus, cette commande peut être utilisée pour :

Voir aussi :

ALTER DATABASE , SHOW DATABASES

DESCRIBE SHARE , SHOW SHARES

Syntaxe

Base de données standard

CREATE [ OR REPLACE ] [ TRANSIENT ] DATABASE [ IF NOT EXISTS ] <name>
    [ CLONE <source_db>
          [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ] ]
    [ DATA_RETENTION_TIME_IN_DAYS = <num> ]
    [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
    [ COMMENT = '<string_literal>' ]

Base de données partagée (à partir d’un partage)

CREATE DATABASE <name> FROM SHARE <provider_account>.<share_name>

Base de données secondaire (réplication de base de données)

CREATE DATABASE <name>
    AS REPLICA OF <snowflake_region>.<account_name>.<primary_db_name>
    AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }

Paramètres requis

nom

Indique l’identificateur de la base de données ; il doit être unique pour votre compte.

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.

Important

En tant que meilleure pratique pour la réplication et le basculement de la base de données, nous vous recommandons de donner à chaque base de données secondaire le même nom que sa base de données principale. Cette recommandation prend en charge le référencement d’objets pleinement qualifiés (c’est-à-dire '<bd>.<schéma>.<objet>') par d’autres objets dans la même base de données, comme la requête d’un nom de table complet dans une vue.

Si une base de données secondaire a un autre nom que celui de la base de données principale, ces références d’objet ne fonctionneraient plus dans la base de données secondaire.

Paramètres de Secure Data Sharing

compte_fournisseur.nom_partage

Spécifie l’identificateur du partage à partir duquel créer la base de données. Tel que documenté, le nom du partage doit être complet avec le nom du compte qui fournit le partage.

Paramètres de réplication de base de données

AS REPLICA OF région_snowflake.nom_compte.nom_bdd_principale

Spécifie l’identificateur d’une base de données principale à partir de laquelle créer un réplica (c’est-à-dire une base de données secondaire). Si l’identificateur contient des espaces, des caractères spéciaux ou des caractères majuscules et minuscules, toute la chaîne doit être délimitée par des guillemets doubles.

Requiert le nom de la base de données principale. En plus du nom de la base de données, des segments supplémentaires sont requis, en fonction de l’emplacement du compte qui stocke la base de données principale par rapport au compte sur lequel vous créez son réplica. Pour plus d’informations, développez le tableau suivant :

Référencement d’une base de données dans un autre compte, une autre région, etc.

Nom de la base de données qualifiée

Compte où le réplica est créé

nom_base_de_données

Même compte que la base de données principale.

compte.nom_base_de_données

Même région, mais compte différent du compte qui stocke la base de données principale.

région_snowflake.compte.nom_base_de_données

Même groupe de régions, mais région différente du compte qui stocke la base de données principale Spécifiez l’ID de région Snowflake de votre région où chaque compte Snowflake est hébergé.

Paramètres facultatifs

TRANSIENT

Spécifie une base de données comme transitoire. Les bases de données transitoires n’ont pas de période Fail-safe et n’encourent donc pas de coûts de stockage supplémentaires une fois qu’elles quittent la période Time Travel ; cependant, cela signifie également qu’elles ne sont pas protégées 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, tous les schémas (et donc toutes les tables) créés dans une base de données transitoire sont transitoires. Pour plus d’informations sur les tables transitoires, voir CREATE TABLE.

Par défaut : aucune valeur (la base de données est permanente)

CLONE bd_source

Spécifie de créer un clone de la base de données source spécifiée. Pour plus d’informations sur le clonage d’une base de données, voir CREATE <objet> … CLONE.

AT | BEFORE ( TIMESTAMP => horodatage | OFFSET => différence_temps | STATEMENT => id )

Lors du clonage d’une base de données, la clause AT | BEFORE spécifie d’utiliser Time Travel pour cloner la base de données à ou avant un point spécifique dans le passé.

DATA_RETENTION_TIME_IN_DAYS = nb

Spécifie le nombre de jours pendant lesquels des actions Time Travel (CLONE et UNDROP) peuvent être effectuées sur la base de données, ainsi que le temps de conservation Time Travel par défaut de tous les schémas créés dans la base de données. Pour plus de détails, voir Comprendre et utiliser 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.

Valeurs :

  • Édition Standard : 0 ou 1

  • Édition Enterprise :

    • 0 à 90 pour les bases de données permanentes

    • 0 ou 1 pour les bases de données 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)

Note

Une valeur de 0 désactive effectivement Time Travel pour la base de données.

DEFAULT_DDL_COLLATION = 'spécification_classement'

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

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

COMMENT = 'litéral_chaine'

Spécifie un commentaire pour la base de données.

Par défaut : aucune valeur

Paramètres de réplication de base de données

AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = TRUE | FALSE

Spécifie si la maintenance en arrière-plan automatique des vues matérialisées dans la base de données secondaire doit être effectuée.

  • TRUE active la maintenance en arrière-plan automatique des vues matérialisées dans la base de données secondaire. Si le clustering automatique est activé pour une vue matérialisée dans la base de données principale, alors cela permet également d’effectuer une surveillance et un reclustering automatique de la vue matérialisée dans la base de données secondaire.

  • FALSE désactive la maintenance en arrière-plan automatique des vues matérialisées. Lors d’une opération d’actualisation, seules les définitions des vues matérialisées sont répliquées dans la base de données secondaire.

Par défaut : FALSE

Notes générales sur l’utilisation

  • La création d’une base de données la définit automatiquement comme la base de données active/courante pour la session en cours (équivalant à l’utilisation de la commande USE DATABASE pour la base de données).

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

    Important

    Utiliser OR REPLACE équivaut à utiliser DROP DATABASE sur la base de données existante et créer ensuite une nouvelle base de données avec le même nom ; cependant, la base de données détruite n’est pas supprimée définitivement du système. En revanche, elle est conservée dans Time Travel. Ceci est important, car les bases de données détruites 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.

  • La création d’une nouvelle base de données crée automatiquement deux schémas dans la base de données :

    • PUBLIC : schéma par défaut de la base de données.

    • INFORMATION_SCHEMA : schéma qui contient des vues et des fonctions de table qui peuvent être utilisées pour interroger les métadonnées sur les objets de la base de données, ainsi que sur tous les objets du compte.

  • Les bases de données créées à partir de partages diffèrent des bases de données standards de la façon suivante :

    • Elles ne possèdent pas les schémas PUBLIC ou INFORMATION_SCHEMA à moins que ces schémas n’aient été explicitement attribués au partage.

    • Elles ne peuvent pas être clonées.

    • Les propriétés telles que TRANSIENT et DATA_RETENTION_TIME_IN_DAYS ne s’appliquent pas.

  • Lorsqu’une base de données est active/courante, le schéma PUBLIC est également actif/courant par défaut sauf si un schéma différent est utilisé ou si le schéma PUBLIC a été détruit.

Notes sur l’utilisation de la réplication de base de données

  • La réplication de base de données utilise des ressources de calcul fournies par Snowflake au lieu de votre propre entrepôt virtuel pour copier des objets et des données. Cependant, le paramètre de session/objet STATEMENT_TIMEOUT_IN_SECONDS contrôle toujours le temps d’exécution d’une instruction avant son annulation. La valeur par défaut est de 172800 (2 jours). Étant donné que la réplication initiale d’une base de données principale peut durer plus de deux jours (en fonction de la quantité de métadonnées dans la base de données ainsi que de la quantité de données dans les objets de base de données), nous vous recommandons d’augmenter la valeur STATEMENT_TIMEOUT_IN_SECONDS et de la définir sur 604800 (sept jours, la valeur maximale) pour la session dans laquelle vous exécutez l’opération de réplication.

    Exécutez l’instruction ALTER SESSION suivante avant l’exécution de l’instruction ALTER DATABASE nom_bdd_secondaire REFRESH dans la même session :

    ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
    

    Notez que le paramètre STATEMENT_TIMEOUT_IN_SECONDS s’applique également à l’entrepôt actif dans une session. Le paramètre respecte la valeur inférieure définie au niveau de la session ou de l’entrepôt. Si vous avez un entrepôt actif dans la session en cours, définissez également STATEMENT_TIMEOUT_IN_SECONDS sur 604800 pour cet entrepôt (avec ALTER WAREHOUSE) également.

    Par exemple :

    -- determine the active warehouse in the current session (if any)
    SELECT CURRENT_WAREHOUSE();
    
    +---------------------+
    | CURRENT_WAREHOUSE() |
    |---------------------|
    | MY_WH               |
    +---------------------+
    
    -- change the STATEMENT_TIMEOUT_IN_SECONDS value for the active warehouse
    
    ALTER WAREHOUSE my_wh SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
    

    vous pouvez réinitialiser la valeur du paramètre à la valeur par défaut une fois l’opération de réplication terminée :

    ALTER WAREHOUSE my_wh UNSET STATEMENT_TIMEOUT_IN_SECONDS;
    

Exemples

Créer deux bases de données permanentes, dont une avec une période de conservation des données de 10 jours :

CREATE DATABASE mytestdb;

CREATE DATABASE mytestdb2 DATA_RETENTION_TIME_IN_DAYS = 10;

SHOW DATABASES LIKE 'my%';

+---------------------------------+------------+------------+------------+--------+----------+---------+---------+----------------+
| created_on                      | name       | is_default | is_current | origin | owner    | comment | options | retention_time |
|---------------------------------+------------+------------+------------+--------+----------+---------+---------+----------------|
| Tue, 17 Mar 2016 16:57:04 -0700 | MYTESTDB   | N          | N          |        | PUBLIC   |         |         | 1              |
| Tue, 17 Mar 2016 17:06:32 -0700 | MYTESTDB2  | N          | N          |        | PUBLIC   |         |         | 10             |
+---------------------------------+------------+------------+------------+--------+----------+---------+---------+----------------+

Créer une base de données transitoire :

CREATE TRANSIENT DATABASE mytransientdb;

SHOW DATABASES LIKE 'my%';

+---------------------------------+---------------+------------+------------+--------+----------+---------+-----------+----------------+
| created_on                      | name          | is_default | is_current | origin | owner    | comment | options   | retention_time |
|---------------------------------+---------------+------------+------------+--------+----------+---------+-----------+----------------|
| Tue, 17 Mar 2016 16:57:04 -0700 | MYTESTDB      | N          | N          |        | PUBLIC   |         |           | 1              |
| Tue, 17 Mar 2016 17:06:32 -0700 | MYTESTDB2     | N          | N          |        | PUBLIC   |         |           | 10             |
| Tue, 17 Mar 2015 17:07:51 -0700 | MYTRANSIENTDB | N          | N          |        | PUBLIC   |         | TRANSIENT | 1              |
+---------------------------------+---------------+------------+------------+--------+----------+---------+-----------+----------------+

Créer une base de données à partir d’un partage fourni par un compte ab67890 :

CREATE DATABASE snow_sales FROM SHARE ab67890.sales_s;

Pour des exemples plus détaillés de création d’une base de données à partir d’un partage, voir Consommateurs de données.

Exemples de réplication de base de données

L’exemple suivant crée un réplica de la base de données principale aws_us_west_2.myaccount1.mydb1 dans le compte aws_us_east_1.myaccount2, avec l’actualisation automatique des vues matérialisées dans le réplica activé. L’instruction SQL est exécutée dans le même groupe de régions AWS (public), mais dans une région différente du compte qui stocke la base de données principale :

CREATE DATABASE mydb1
  AS REPLICA OF aws_us_west_2.myaccount.mydb1
  AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = TRUE;