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>' , ... ] ) ]
Où :
catalogParams ::= CATALOG = '<catalog_int>', [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE } ] [ NAMESPACE_FLATTEN_DELIMITER = '<string_literal>' ] [ SYNC_INTERVAL_SECONDS = <value> ]
Paramètres requis¶
name
Spé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_vol
Spé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
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.
Paramètres du catalogue (catalogParams)¶
CATALOG = catalog_int
Spé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 tables qui en dépendent. 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 tables qui en dépendent.
Si vous spécifiez ALLOWED_NAMESPACES et BLOCKED_NAMESPACES, la liste BLOCKED_NAMESPACES est prioritaire. Par exemple, si
ns1.ns2
est autorisé, mais quens1
est bloqué, Snowflake ne synchronisera pasns1.ns2
.NAMESPACE_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_5
dans 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_NAMESPACE
NAMESPACE_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 = 'value'
Spé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).
Facturation : Pendant la période de prévisualisation, Snowflake ne facture pas les bases de données liées à un catalogue. La facturation démarre une fois que les bases de données liées à un catalogue Apache Iceberg™ deviennent disponibles de manière générale.
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 (utilisateurs ou 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.
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-uuid
d’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, le clonage et le partage, 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
_
,$
, des lettres majuscules 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.
Le partage avec une annonce est pris en charge pour les tables qui utilisent un volume externe. Le partage direct n’est actuellement pas pris en charge.
Pour l’écriture dans les tables d’une base de données liée à un catalogue :
Les identifiants de connexion distribués ne sont pas pris en charge.
L’écriture dans des tables dans des espaces de noms imbriqués n’est actuellement pas prise en charge.
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 imbriqués plats.
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')
);