CREATE DATABASE (liée à un catalogue)¶
Crée une nouvelle base de données liée à un catalogue pour les tables Apache Iceberg™ qui utilisent un catalogue REST Iceberg externe.
Syntaxe¶
CREATE DATABASE <name>
LINKED_CATALOG = ( catalogParams ),
[ EXTERNAL_VOLUME = '<external_vol>' ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ CATALOG_CASE_SENSITIVITY = { CASE_SENSITIVE | CASE_INSENSITIVE } ]
[ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
Où :
catalogParams ::= CATALOG = '<catalog_int>', [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ ALLOWED_WRITE_OPERATIONS = { NONE | ALL } ] [ NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE } ] [ NAMESPACE_FLATTEN_DELIMITER = '<string_literal>' ] [ SYNC_INTERVAL_SECONDS = <value> ]
Paramètres requis¶
nameSpécifie l’identificateur pour la base de données liée à un catalogue ; 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 (par exemple,
"My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.Pour plus d’informations, voir Exigences relatives à l’identificateur.
Paramètres facultatifs¶
EXTERNAL_VOLUME = my_external_volSpécifie un volume externe qui donne accès aux données et aux métadonnées de vos tables Iceberg distantes.
Non requis si vous utilisez des identifiants distribués.
COMMENT = 'string_literal'Spécifie un commentaire pour la base de données.
Par défaut : aucune valeur
CATALOG_CASE_SENSITIVITY = { CASE_SENSITIVE | CASE_INSENSITIVE }Spécifie la sensibilité à la casse que votre catalogue Iceberg externe utilise pour les identificateurs.
CASE_SENSITIVE: Le catalogue Iceberg externe utilise des identificateurs sensibles à la casse. Par exemple, Snowflake Open Catalog est un catalogue sensible à la casse.Snowflake fait correspondre les identificateurs exactement tels qu’ils apparaissent, en respectant la casse. Snowflake convertit automatiquement les identificateurs sans guillemets en majuscules, mais les identificateurs entre guillemets doivent correspondre exactement à la casse dans votre catalogue externe.
Toutefois, si le catalogue Iceberg externe est réellement insensible à la casse, et s’il normalise en minuscules, vous devez mettre les identificateurs entre guillemets doubles.
Ces exigences ne s’appliquent qu’à l’identification des schémas, des tables et des colonnes de table qui existent déjà.
CASE_INSENSITIVE: Le catalogue Iceberg externe utilise des identificateurs insensibles à la casse. Par exemple, Unity Catalog et AWS Glue sont des catalogues insensibles à la casse.Si le catalogue Iceberg externe n’est pas sensible à la casse et que vous exécutez l’une des commandes suivantes, vous devez entourer les identificateurs entre guillemets doubles :
CREATE ICEBERG TABLE
CREATE SCHEMA
ALTER ICEBERG TABLE ADD COLUMN
ALTER ICEBERG TABLE RENAME COLUMN
Cependant, si le catalogue Iceberg externe est réellement sensible à la casse, Snowflake traite les identificateurs sans guillemets comme insensibles à la casse et convertit automatiquement les identificateurs sans guillemets en majuscules. Lorsque vous créez ou interrogez des objets, Snowflake fait correspondre les identificateurs, indépendamment de la casse, à condition qu’ils ne soient pas entre guillemets.
L’utilisation de ce modèle est déconseillée, car Snowflake ne peut pas résoudre deux identificateurs différents qui diffèrent par leur casse. Ce modèle ne fonctionne que lorsque deux identificateurs ne diffèrent pas uniquement par leur casse.
Sauf indication contraire, ces exigences ne s’appliquent qu’à l’identification des schémas, des tables et des colonnes de table qui existent déjà.
Par défaut :
CASE_INSENSITIVEPour plus d’informations sur les exigences en matière de résolution d’identificateur et obtenir des exemples, voir Exigences pour la résolution des identificateurs dans une base de données liée à un catalogue.
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.
WITH CONTACT ( purpose = contact [ , purpose = contact ...] )Associez le nouvel objet à un ou plusieurs contacts.
Paramètres du catalogue (catalogParams)¶
CATALOG = catalog_intSpécifie le nom de votre intégration de catalogue.
ALLOWED_NAMESPACES = ('namespace1', 'namespace2', ... )Spécifie éventuellement un ou plusieurs espaces de noms dans votre catalogue distant pour limiter la portée de la découverte automatique des tables. Snowflake synchronise les espaces de noms spécifiés et tous les espaces de noms et toutes les tables qui leur sont imbriqués. Si un espace de noms imbriqué se trouve dans la liste ALLOWED_NAMESPACES mais que vous définissez le paramètre NAMESPACE_MODE sur IGNORE_NESTED_NAMESPACE, Snowflake ne synchronise pas l’espace de noms imbriqué ni les schémas et tables sous celui-ci.
BLOCKED_NAMESPACES = ('namespace1', 'namespace2', ... )Spécifie éventuellement un ou plusieurs espaces de noms dans votre catalogue distant à bloquer pour la découverte automatique des tables.
Snowflake bloque les espaces de noms spécifiés et tous les espaces de noms et toutes les tables qui leur sont imbriqués.
Si vous spécifiez ALLOWED_NAMESPACES et BLOCKED_NAMESPACES, la liste BLOCKED_NAMESPACES est prioritaire. Par exemple, si
ns1.ns2est autorisé, mais quens1est bloqué, Snowflake ne synchronisera pasns1.ns2.ALLOWED_WRITE_OPERATIONS = { NONE | ALL }Spécifie si votre base de données liée au catalogue est en lecture seule ou en écriture.
NONE: Votre base de données liée au catalogue est en lecture seule.Lorsque votre base de données liée au catalogue est en lecture seule, toute opération que vous exécutez qui nécessite une validation du catalogue échoue. Par exemple, DROP ICEBERG TABLE.
ALL: Votre base de données liée au catalogue est accessible en écriture.Avertissement
Lorsque les autorisations d’écriture sont activées dans votre base de données liée au catalogue, Snowflake propage les suppressions de table vers le catalogue distant, ce qui supprime la table et les données des deux systèmes.
Par défaut :
ALLNAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE }Spécifie comment Snowflake gère les espaces de noms pour les tables Iceberg dans la base de données liée à un catalogue.
IGNORE_NESTED_NAMESPACE: Snowflake lie uniquement les tables du premier niveau d’espace de noms de votre catalogue.FLATTEN_NESTED_NAMESPACE: Snowflake lie les tables dans tous les niveaux d’espace de noms de votre catalogue. Pour une table dans un espace de noms imbriqué, Snowflake utilise le paramètre NAMESPACE_FLATTEN_DELIMITER pour créer un espace de noms plat. Avec cette option, vous devez définir le paramètre NAMESPACE_FLATTEN_DELIMITER.Par exemple, considérons une table nommée
iceberg_table_5dans l’espace de nomsnamespace3aa:my_catalog_linked_db |-- namespace3 | |-- namespace3a | |-- namespace3aa | |-- iceberg_table_5
Si vous définissez
NAMESPACE_FLATTEN_DELIMITER = "/", vous pouvez spécifier"my_catalog_linked_db"."namespace3/namespace3a/namespace3aa"."iceberg_table_5"pour faire référence à la table.
Par défaut :
IGNORE_NESTED_NAMESPACENAMESPACE_FLATTEN_DELIMITER = 'string_literal'Requis si vous définissez NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE. Spécifie un délimiteur, que Snowflake utilise pour créer des espaces de noms plats pour les tables dans votre catalogue.
Important
Le caractère que vous choisissez pour un délimiteur ne peut pas apparaître dans vos espaces de noms distants. Pendant le processus de découverte automatique, Snowflake ignore tout espace de noms contenant le délimiteur et ne crée pas de schéma correspondant dans votre base de données liée à un catalogue.
Caractères valides : Tout caractère autorisé dans les identificateurs Snowflake.
SYNC_INTERVAL_SECONDS = valueSpécifie l’intervalle de temps en secondes que Snowflake doit utiliser pour découvrir automatiquement les schémas et les tables dans votre catalogue distant.
Valeurs : 30 à 86 400 (1 jour), inclusif
Par défaut : 30 secondes
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 |
Nécessaire pour référencer un volume externe existant. |
USAGE |
Intégration de catalogue |
Nécessaire pour référencer une intégration de catalogue existante. |
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 sur l’utilisation¶
Prise en charge uniquement lorsque vous utilisez une intégration de catalogue pour REST Iceberg (par exemple, Snowflake Open Catalog).
Update: We will start billing sometime in December 2025.
Pour limiter la découverte automatique des tables à un ensemble spécifique d’espaces de noms, utilisez le paramètre ALLOWED_NAMESPACES. Vous pouvez également utiliser le paramètre BLOCKED_NAMESPACES pour bloquer un ensemble d’espaces de noms.
Snowflake ne synchronise pas le contrôle d’accès au catalogue distant pour les utilisateurs ou les rôles.
Vous pouvez créer des schémas ou des tables Iceberg gérées en externe dans une base de données liée à un catalogue. La création d’autres objets Snowflake n’est actuellement pas prise en charge.
Vous ne pouvez pas créer de rôles de base de données dans une base de données liée à un catalogue.
Latence :
Pour les bases de données liées à 7 500 espaces de noms dans un catalogue distant, la découverte des espaces de noms et des tables prend environ une heure.
Pour les catalogues distants comportant 500 000 tables, le processus d’actualisation automatique prend environ une heure. Pour les espaces de noms ayant des exigences de latence différentes, nous vous recommandons de créer des bases de données liées à un catalogue distinctes. Chaque base de données doit référencer une intégration de catalogue avec un intervalle d’actualisation automatique approprié (REFRESH_INTERVAL_SECONDS).
Pour les tables Iceberg dans une base de données liée à un catalogue :
Snowflake ne copie pas les propriétés de la table de catalogue distante (telles que les politiques de conservation ou les tampons) et ne prend actuellement pas en charge la modification des propriétés de la table.
L’actualisation automatique est activée par défaut. Si l’
table-uuidd’une table externe et la table de la base de données liée au catalogue ne correspondent pas, l’actualisation échoue et Snowflake supprime la table de la base de données liée au catalogue. Snowflake ne modifie pas la table distante.Si vous supprimez une table du catalogue distant, Snowflake supprime la table de la base de données liée au catalogue. Cette action est asynchrone, de sorte que vous ne verrez peut-être pas immédiatement cette modification dans le catalogue distant.
Si vous renommez une table dans le catalogue distant, Snowflake supprime la table existante de la base de données liée au catalogue et crée une table avec le nouveau nom.
Les politiques de masquage et les balises sont prises en charge. Les autres fonctionnalités spécifiques à Snowflake, notamment la réplication et le clonage, ne sont pas prises en charge.
Le caractère que vous choisissez pour le paramètre NAMESPACE_FLATTEN_DELIMITER ne peut pas apparaître dans vos espaces de noms distants. Pendant le processus de découverte automatique, Snowflake ignore tout espace de noms contenant le délimiteur et ne crée pas de schéma correspondant dans votre base de données liée à un catalogue.
Si vous spécifiez autre chose que
_,$ou des chiffres pour le paramètre NAMESPACE_FLATTEN_DELIMITER, vous devez mettre le nom du schéma entre guillemets lorsque vous interrogez la table.Pour les bases de données liées à AWS Glue, vous devez utiliser des minuscules et mettre les noms de schémas, de tables et de colonnes entre guillemets doubles. Cela est également requis pour les autres catalogues REST Iceberg qui ne prennent en charge que les identificateurs en minuscules.
L’exemple suivant montre une requête valide :
CREATE SCHEMA "s1";
Les instructions suivantes ne sont pas valides, car elles utilisent des lettres majuscules ou omettent les guillemets doubles :
CREATE SCHEMA s1; CREATE SCHEMA "Schema1";
L’utilisation de UNDROP ICEBERG TABLE n’est pas prise en charge.
Partage :
Le partage avec une annonce n’est actuellement pas pris en charge.
Le partage direct est pris en charge.
Pour l’écriture dans les tables d’une base de données liée à un catalogue :
La création de tables dans des espaces de noms imbriqués n’est actuellement pas prise en charge.
L’écriture dans des tables dans des espaces de noms imbriqués n’est actuellement pas prise en charge.
Les suppressions de position au niveau des lignes sont prises en charge pour les tables stockées sur Amazon S3, Azure ou Google Cloud. Les suppressions au niveau des lignes avec des fichiers de suppression d’égalité ne sont pas prises en charge. Pour plus d’informations sur les suppressions au niveau des lignes, consultez Utiliser les suppressions de niveau ligne. Pour désactiver les suppressions de position, qui permettent l’exécution des opérations du langage de manipulation des données (DML) en mode copie sur écriture, définissez le paramètre
ENABLE_ICEBERG_MERGE_ON_READsur FALSE au niveau de la table, du schéma ou de la base de données.
Pour ALLOWED_NAMESPACES et BLOCKED_NAMESPACES, Snowflake ne stocke pas les espaces de noms imbriqués si l’ensemble contient déjà l’espace de noms parent. Par exemple, si vous créez une base de données et que vous spécifiez
ALLOWED_NAMESPACES = ('ns1', 'ns1.ns2', 'ns1.ns3'), Snowflake ne stocke quens1, car les deux autres sont automatiquement inclus. Si vous utilisez GET_DDL sur la base de données d’exemple, Snowflake renvoieALLOWED_NAMESPACES = ('ns1'). La même chose s’applique pour BLOCKED_NAMESPACES.Pour interroger les tables Iceberg dans une base de données liée à un catalogue :
Snowflake convertit automatiquement les identificateurs sans guillemets (noms de tables et de colonnes) en majuscules. Si votre catalogue Iceberg externe utilise des identificateurs sensibles à la casse, vous devez mettre les noms de tables et de colonnes entre guillemets doubles.
Pour plus d’informations sur les identificateurs d’objets, consultez Exigences relatives à l’identificateur.
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.
Exemples¶
Créez une base de données liée à un catalogue avec des espaces de noms aplatis et imbriqués qui utilise un volume externe.
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int',
NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
NAMESPACE_FLATTEN_DELIMITER = '-'
)
EXTERNAL_VOLUME = 'my_external_vol';
Créez une base de données liée à un catalogue qui utilise des identifiants de connexion distribués et spécifie un espace de noms autorisé :
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int_vended_creds',
ALLOWED_NAMESPACES = ('my_namespace')
);