CREATE DATABASE¶

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

Cette commande prend en charge les variantes suivantes :

  • CREATE OR ALTER DATABASE : crĂ©e une base de donnĂ©es si elle n’existe pas ou modifie une base de donnĂ©es existante.

  • CREATE DATABASE 
 CLONE : crĂ©e un clone d’une base de donnĂ©es existante, soit Ă  son statut actuel, soit Ă  un moment prĂ©cis dans le passĂ© (en utilisant Time Travel). Pour plus d’informations sur le clonage d’une base de donnĂ©es, voir Remarques relatives au clonage.

De plus, cette commande peut ĂȘtre utilisĂ©e pour :

Astuce

Outre SQL, vous pouvez Ă©galement utiliser d’autres interfaces, telles que Snowflake REST APIs, Snowflake Python APIs et Snowflake CLI. Voir Interfaces alternatives.

Voir aussi :

ALTER DATABASE , DESCRIBE DATABASE , DROP DATABASE , SHOW DATABASES , UNDROP DATABASE

DESCRIBE SHARE , SHOW SHARES, CREATE LISTING, CREATE OR ALTER <objet>

Syntaxe¶

Base de données standard

CREATE [ OR REPLACE ] [ TRANSIENT ] DATABASE [ 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 ] ]
    [ 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 } ]
    [ COMMENT = '<string_literal>' ]
    [ CATALOG_SYNC = '<snowflake_open_catalog_integration_name>' ]
    [ CATALOG_SYNC_NAMESPACE_MODE = { NEST | FLATTEN } ]
    [ CATALOG_SYNC_NAMESPACE_FLATTEN_DELIMITER = '<string_literal>' ]
    [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
    [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
Copy

Base de donnĂ©es standard (Ă  partir d’une annonce)

CREATE DATABASE <name> FROM LISTING '<listing_global_name>'
Copy

Base de donnĂ©es partagĂ©e (Ă  partir d’un partage)

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

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

CREATE DATABASE <name>
    AS REPLICA OF <account_identifier>.<primary_db_name>
    [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
Copy

Syntaxe des variantes¶

CREATE OR ALTER DATABASE¶

CrĂ©e une nouvelle base de donnĂ©es si elle n’existe pas encore, ou remplace une base de donnĂ©es existante par la base de donnĂ©es dĂ©finie dans l’instruction. Une instruction CREATE OR ALTER DATABASE suit les rĂšgles syntaxiques d’une instruction CREATE DATABASE et prĂ©sente les mĂȘmes limitations qu’une instruction ALTER DATABASE.

Les modifications suivantes sont prises en charge :

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

CREATE OR ALTER [ TRANSIENT ] DATABASE <name>
    [ 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 DATABASE 
 CLONE¶

CrĂ©e une nouvelle base de donnĂ©es avec les mĂȘmes valeurs de paramĂštre :

CREATE [ OR REPLACE ] DATABASE [ IF NOT EXISTS ] <name> CLONE <source_database>
  [ ... ]
Copy

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

ParamÚtres requis¶

name

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 Secure Data Sharing¶

provider_account.share_name

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¶

Important

Cette section dĂ©crit une fonction de rĂ©plication de base de donnĂ©es limitĂ©e qui est diffĂ©rente de la fonction de rĂ©plication de compte. Snowflake recommande vivement d’utiliser la fonction de rĂ©plication de compte pour rĂ©pliquer et basculer les bases de donnĂ©es.

AS REPLICA OF account_identifier.primary_db_name

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 l’identificateur du compte et le nom de la base de donnĂ©es principale.

account_identifier

Identificateur unique du compte qui stocke la base de donnĂ©es principale. L’identificateur prĂ©fĂ©rĂ© est organization_name.account_name. Pour afficher la liste des comptes activĂ©s pour la rĂ©plication dans votre organisation, interrogez SHOW REPLICATION ACCOUNTS.

Bien que l’ancien localisateur de compte puisse Ă©galement ĂȘtre utilisĂ© comme identificateur de compte, son utilisation est dĂ©conseillĂ©e, car il pourrait ne plus fonctionner Ă  l’avenir. Pour plus de dĂ©tails sur l’utilisation du localisateur de compte comme identificateur de compte, voir Notes sur l’utilisation de la rĂ©plication de base de donnĂ©es.

primary_db_name

Nom de la base de donnĂ©es principale. Il est recommandĂ© de donner Ă  chaque base de donnĂ©es secondaire le mĂȘme nom que sa base de donnĂ©es principale.

Note

Comme meilleure pratique pour la rĂ©plication et le basculement des bases de donnĂ©es, nous recommandons de dĂ©finir le paramĂštre facultatif DATA_RETENTION_TIME_IN_DAYS sur la mĂȘme valeur sur la base de donnĂ©es secondaire que sur la base de donnĂ©es principale.

ParamĂštres d’annonce¶

'listing_global_name'

SpĂ©cifie le nom global de l’annonce Ă  partir de laquelle crĂ©er la base de donnĂ©es, qui doit rĂ©pondre aux exigences suivantes :

  • Ne peut pas ĂȘtre un listing payant.

  • Conditions de l’annonce, si elles ne sont pas de type OFFLINE, elles doit avoir Ă©tĂ© acceptĂ©es avec Snowsight.

  • Les produits de donnĂ©es d’annonce doivent ĂȘtre disponibles localement dans la rĂ©gion actuelle.

    La disponibilitĂ© d’un listing dans la rĂ©gion locale peut ĂȘtre dĂ©terminĂ©e en consultant la colonne is_ready_for_import de DESCRIBE AVAILABLE LISTING.

Vous devez avoir le privilĂšge IMPORT LISTING de crĂ©er une base de donnĂ©es Ă  partir d’une annonce. Vous devez avoir le privilĂšge IMPORT SHARE de crĂ©er une base de donnĂ©es Ă  partir d’un partage.

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 source_db

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 => timestamp | OFFSET => time_difference | 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Ă©. Si la durĂ©e Time Travel spĂ©cifiĂ©e est antĂ©rieure ou Ă©gale Ă  la date de crĂ©ation de la base de donnĂ©es, l’opĂ©ration de clonage Ă©choue avec une erreur.

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 une base de donnĂ©es contenant des tables hybrides. La base de donnĂ©es clonĂ©e inclut d’autres objets mais ignore les tables hybrides.

Si vous n’utilisez pas cette option et que votre base de donnĂ©es contient une ou plusieurs tables hybrides, la commande ignore silencieusement les tables hybrides. Cependant, le traitement des erreurs pour les bases de donnĂ©es 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.

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 la base de donnĂ©es, ainsi que la durĂ©e 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 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.

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.

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 de la base de donnĂ©es, 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 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.

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

COMMENT = 'string_literal'

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

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 la base de donnĂ©es 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

CATALOG_SYNC_NAMESPACE_MODE = { NEST | FLATTEN }

SpĂ©cifie le mode d’espace de noms de synchronisation du catalogue pour les tables Iceberg gĂ©rĂ©es par Snowflake dans la base de donnĂ©es que vous synchronisez avec Snowflake Open Catalog. Cette propriĂ©tĂ© indique si Snowflake synchronise la table avec Open Catalog avec un ou deux espaces de noms parents. Elle ne s’applique que si vous rĂ©glez le paramĂštre CATALOG_SYNC. Une fois la base de donnĂ©es créée, vous ne pouvez plus modifier cette propriĂ©tĂ©.

  • NEST : Snowflake synchronise deux espaces de noms parents avec la table.

    Par exemple, supposons que vous ayez une table Iceberg db2.public.table1 enregistrĂ©e dans Snowflake. Vous souhaitez synchroniser cette table, ainsi que ses deux espaces de noms parents, avec le catalogue externe catalog2 dans Open Catalog. Pour synchroniser la table avec ses deux espaces de noms parents, utilisez la valeur par dĂ©faut pour CATALOG_SYNC_NAMESPACE_MODE (NEST). Si vous ne spĂ©cifiez pas la propriĂ©tĂ© CATALOG_SYNC_NAMESPACE_MODE, c’est la valeur par dĂ©faut de cette propriĂ©tĂ© qui est appliquĂ©e, Ă  savoir NEST. Comme vous utilisez la valeur par dĂ©faut de CATALOG_SYNC_NAMESPACE_MODE, vous n’avez pas besoin de spĂ©cifier CATALOG_SYNC_NAMESPACE_FLATTEN_DELIMITER. En consĂ©quence, Snowflake synchronise la table avec Open Catalog avec le nom entiĂšrement qualifiĂ© suivant : catalog2.db2.public.table1.

  • FLATTEN : Snowflake synchronise un espace de noms parent avec la table, qui contient le dĂ©limiteur que vous avez paramĂ©trĂ© Ă  l’aide de la propriĂ©tĂ© CATALOG_SYNC_NAMESPACE_FLATTEN_DELIMITER.

    Important

    Si votre moteur de requĂȘte tiers ne peut interroger que des tables situĂ©es jusqu’au deuxiĂšme niveau d’espace de noms d’un catalogue, vous devez donner Ă  la propriĂ©tĂ© CATALOG_SYNC_NAMESPACE_MODE la valeur FLATTEN. Sinon, Snowflake synchronisera les tables Iceberg gĂ©rĂ©es par Snowflake au troisiĂšme niveau de l’espace de noms dans Open Catalog et vous ne pourrez pas effectuer de requĂȘte sur la table.

    Par exemple, supposons que vous ayez une table Iceberg db1.public.table1 enregistrĂ©e dans Snowflake. Vous souhaitez synchroniser cette table et un espace de noms parent nommĂ© db1-public avec le catalogue externe catalog1 dans Open Catalog, afin que la table soit situĂ©e au deuxiĂšme niveau de l’espace de noms dans Open Catalog.

    Pour synchroniser la table avec l’espace de noms parent db1-public, dĂ©finissez CATALOG_SYNC_NAMESPACE_MODE sur FLATTEN et indiquez un trait d’union (-) comme valeur pour CATALOG_SYNC_NAMESPACE_FLATTEN_DELIMITER. Par consĂ©quent, Snowflake synchronise cette table avec Open Catalog sous le nom entiĂšrement qualifiĂ© suivant : catalog1.db1-public.table1.

Par dĂ©faut : NEST

CATALOG_SYNC_NAMESPACE_FLATTEN_DELIMITER = 'string_literal'

SpĂ©cifie un dĂ©limiteur, que Snowflake insĂšre dans l’espace de noms aplati qui en rĂ©sulte lorsque Snowflake synchronise une table Iceberg gĂ©rĂ©e par Snowflake vers Snowflake Open Catalog avec un espace de noms parent. Ce dĂ©limiteur ne s’applique que lorsque la propriĂ©tĂ© CATALOG_SYNC_NAMESPACE_MODE est dĂ©finie sur FLATTEN. Snowflake insĂšre ce dĂ©limiteur pour Ă©viter les conflits qui pourraient rĂ©sulter de l’aplatissement des espaces de noms parents pour diffĂ©rentes tables. Une fois la base de donnĂ©es créée, vous ne pouvez plus modifier cette propriĂ©tĂ©.

Par exemple, supposons que vous souhaitiez synchroniser les tables Iceberg customer.data.table1 et custom.erdata.table1 gĂ©rĂ©es par Snowflake avec le catalogue externe catalog1 dans Open Catalog. En dĂ©finissant la propriĂ©tĂ© CATALOG_SYNC_NAMESPACE_MODE sur FLATTEN et en spĂ©cifiant un trait d’union (-) comme dĂ©limiteur, Snowflake synchronise ces tables avec Open Catalog avec les noms entiĂšrement qualifiĂ©s suivants :

  • catalog1.customer-data.table1

  • catalog1.custom-erdata.table1

Si vous donnez Ă  la propriĂ©tĂ© CATALOG_SYNC_NAMESPACE_MODE la valeur FLATTEN, une valeur de dĂ©limiteur non vide est requise. Toutefois, si vous donnez Ă  la propriĂ©tĂ© CATALOG_SYNC_NAMESPACE_MODE la valeur NEST, cette propriĂ©tĂ© de dĂ©limiteur ne s’applique pas et la valeur configurĂ©e est ignorĂ©e.

CaractĂšres valides : 0-9, A-Z, a-z, _, $, -

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 Quota de balise pour les objets.

WITH CONTACT ( purpose = contact [ , purpose = contact ...] )

Associez le nouvel objet Ă  un ou plusieurs contacts.

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 DATABASE

Compte

Obligatoire pour la crĂ©ation d’une nouvelle base de donnĂ©es.

Only the SYSADMIN role, or a higher role, has this privilege by default. The privilege can be granted to additional roles as needed.

USAGE

Volume externe, intégration du catalogue

NĂ©cessaire pour dĂ©finir les paramĂštres d’objet EXTERNAL_VOLUME ou CATALOG, respectivement.

IMPORT LISTING

Compte

Requis pour crĂ©er une base de donnĂ©es Ă  partir d’une annonce.

IMPORT SHARE

Compte

CrĂ©er une base de donnĂ©es Ă  partir d’un partage.

MODIFY LOG LEVEL

Compte

Obligatoire pour définir le LOG_LEVEL pour une base de données.

MODIFY TRACE LEVEL

Compte

Obligatoire pour définir le TRACE_LEVEL pour une base de données.

OWNERSHIP

Base de données

Obligatoire uniquement lors de l’exĂ©cution d’une instruction CREATE OR ALTER DATABASE pour une base de donnĂ©es existante.

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’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.

  • Les clauses OR REPLACE et IF NOT EXISTS s’excluent mutuellement. Elles ne peuvent pas ĂȘtre utilisĂ©es dans la mĂȘme instruction.

  • 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.

  • 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.

  • 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 DATABASE¶

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

  • Cette commande prend en charge les propriĂ©tĂ©s et la syntaxe qui se chevauchent entre les commandes CREATE DATABASE et ALTER DATABASE. C’est pourquoi les Ă©lĂ©ments suivants ne sont pas pris en charge :

    • Permutation des bases de donnĂ©es Ă  l’aide du paramĂštre SWAP WITH.

    • Renommer une base de donnĂ©es Ă  l’aide du paramĂštre RENAME TO.

    • CrĂ©ation d’un clone d’une base de donnĂ©es Ă  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’une base de donnĂ©es TRANSIENT en une base de donnĂ©es nonTRANSIENT, et inversement.

    • CrĂ©ation d’une base de donnĂ©es Ă  partir d’un partage Ă  l’aide de CREATE OR ALTER DATABASE 
 FROM SHARE.

    • CrĂ©ation d’une base de donnĂ©es secondaire (rĂ©plique) Ă  l’aide de CREATE OR ALTER DATABASE 
 AS REPLICA OF.

Notes sur l’utilisation de la rĂ©plication de base de donnĂ©es¶

Important

Cette section dĂ©crit une fonction de rĂ©plication de base de donnĂ©es limitĂ©e qui est diffĂ©rente de la fonction de rĂ©plication de compte. Snowflake recommande vivement d’utiliser la fonction de rĂ©plication de compte pour rĂ©pliquer et basculer les bases 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 secondary_db_name REFRESH dans la mĂȘme session :

    ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
    
    Copy

    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).

    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;
    
    Copy

    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;
    
    Copy
  • La mĂ©thode prĂ©fĂ©rĂ©e pour identifier le compte qui stocke la base de donnĂ©es principale utilise le nom de l’organisation et le nom du compte comme identificateur du compte. Si vous dĂ©cidez d’utiliser le localisateur de compte hĂ©ritĂ© Ă  la place, voir Identificateurs de comptes pour la rĂ©plication et le basculement.

  • La commande CREATE DATABASE 
 AS REPLICA ne prend pas en charge la clause WITH TAG.

    Cette clause n’est pas prise en charge, car la base de donnĂ©es secondaire est en lecture seule. Si votre base de donnĂ©es principale spĂ©cifie la clause WITH TAG, supprimez la clause avant de crĂ©er la base de donnĂ©es secondaire. Pour vĂ©rifier si votre base de donnĂ©es possĂšde la clause WITH TAG, appelez la fonction GET_DDL dans votre compte Snowflake et spĂ©cifiez la base de donnĂ©es principale dans l’argument de la fonction. Si une balise est dĂ©finie dans la base de donnĂ©es, la sortie de la fonction comprendra une instruction ALTER DATABASE
 SET TAG.

    Pour plus d’informations, voir RĂ©plication et balises.

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             |
+---------------------------------+------------+------------+------------+--------+----------+---------+---------+----------------+
Copy

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              |
+---------------------------------+---------------+------------+------------+--------+----------+---------+-----------+----------------+
Copy

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;
Copy

Pour des exemples plus dĂ©taillĂ©s de crĂ©ation d’une base de donnĂ©es Ă  partir d’un partage, voir Consommer des donnĂ©es importĂ©es.

Exemples de réplication de base de données¶

Important

Cette section dĂ©crit une fonction de rĂ©plication de base de donnĂ©es limitĂ©e qui est diffĂ©rente de la fonction de rĂ©plication de compte. Snowflake recommande vivement d’utiliser la fonction de rĂ©plication de compte pour rĂ©pliquer et basculer les bases de donnĂ©es.

Pour un exemple de crĂ©ation d’un groupe de rĂ©plication pour rĂ©pliquer une seule base de donnĂ©es dans un compte cible, voir RĂ©pliquer une seule base de donnĂ©es.

Exemples CREATE OR ALTER DATABASE¶

Créer une base de données simple¶

CrĂ©er une base de donnĂ©es nommĂ©e db1 :

CREATE OR ALTER DATABASE db1;
Copy

Modifier la base de donnĂ©es db1 pour dĂ©finir les paramĂštres DATA_RETENTION_TIME_IN_DAYS et DEFAULT_DDL_COLLATION :

CREATE OR ALTER DATABASE db1
  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 la base de donnĂ©es¶

L”absence d’un paramĂštre prĂ©cĂ©demment dĂ©fini dans la dĂ©finition modifiĂ©e de la base de donnĂ©es entraĂźne l’annulation de sa dĂ©finition. Dans l’exemple suivant, annulez la dĂ©finition du paramĂštre DATA_RETENTION_TIME_IN_DAYS pour la base de donnĂ©es db1 créée dans l’exemple prĂ©cĂ©dent :

CREATE OR ALTER DATABASE db1
  DEFAULT_DDL_COLLATION = 'de';
Copy

Interfaces alternatives¶