CREATEICEBERGTABLE (Snowflake comme catalogue Iceberg)¶
Crée ou remplace une table Apache Iceberg qui utilise Snowflake comme catalogue Iceberg dans le schéma actuel/spécifié.
Cette commande prend en charge les variantes suivantes :
CREATE ICEBERGTABLE … AS SELECT (crée une table renseignée ; également appelé CTAS)
CREATE ICEBERGTABLE … LIKE (crée une copie vide d’une table existante)
Cette rubrique fait référence aux tables Iceberg en les appelant simplement « tables », sauf lorsque le fait de préciser tables Iceberg permet d’éviter toute confusion.
Note
Avant de créer une table, vous devez créer le volume externe dans lequel sont stockés les métadonnées et les fichiers de données Iceberg. Pour obtenir des instructions, voir Configurer un volume externe.
- Voir aussi :
ALTER ICEBERG TABLE , DROP ICEBERG TABLE , SHOW ICEBERG TABLES , DESCRIBE ICEBERG TABLE , UNDROP ICEBERG TABLE
Syntaxe¶
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name> (
-- Column definition
<col_name> <col_type>
[ inlineConstraint ]
[ NOT NULL ]
[ COLLATE '<collation_specification>' ]
[ { DEFAULT <expr>
| { AUTOINCREMENT | IDENTITY }
[ { ( <start_num> , <step_num> )
| START <num> INCREMENT <num>
} ]
} ]
[ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
[ [ WITH ] PROJECTION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ COMMENT '<string_literal>' ]
-- Additional column definitions
[ , <col_name> <col_type> [ ... ] ]
-- Out-of-line constraints
[ , outoflineConstraint [ ... ] ]
)
[ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = 'SNOWFLAKE' ]
BASE_LOCATION = '<directory_for_table_files>'
[ CATALOG_SYNC = '<open_catalog_integration_name>']
[ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] AGGREGATION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Où :
inlineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } [ <constraint_properties> ]Pour plus de détails sur les contraintes en ligne, voir CREATE | ALTER TABLE … CONSTRAINT.
outoflineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ] | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ] | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ] REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ] } [ <constraint_properties> ]Note
Snowflake représente les colonnes définies comme PRIMARY KEY comme champs d’identificateur dans les métadonnées Iceberg. Les IDs de ces colonnes figurent dans les métadonnées sous forme d”IDs de champ d’identificateur.
Snowflake n’impose pas de contraintes NOT NULL ni UNIQUE sur les colonnes PRIMARY KEY de tables Iceberg.
Pour plus de détails sur les contraintes hors ligne, voir CREATE | ALTER TABLE … CONSTRAINT.
Syntaxe des variantes¶
CREATE ICEBERG TABLE … AS SELECT (également appelé CTAS)¶
Crée une nouvelle table contenant les données renvoyées par une requête. Placez la clause AS SELECT à la fin de l’instruction.
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ] [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ] [ EXTERNAL_VOLUME = '<external_volume_name>' ] [ CATALOG = 'SNOWFLAKE' ] BASE_LOCATION = '<relative_path_from_external_volume>' [ COPY GRANTS ] [ ... ] AS SELECT <query>
Une politique de masquage peut être appliquée à une colonne dans une instruction CTAS. Spécifiez la politique de masquage après le type de données de la colonne. De même, une politique d’accès aux lignes peut être appliquée à la table. Par exemple :
CREATE ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] ) [ EXTERNAL_VOLUME = '<external_volume_name>' ] [ CATALOG = 'SNOWFLAKE' ] BASE_LOCATION = '<directory_for_table_files>' [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] ) [ ... ] AS SELECT <query>
Note
Dans un CTAS, le paramètre COPY GRANTS n’est valide que lorsqu’elle est combinée avec la clause OR REPLACE. COPY GRANTS copie les privilèges de la table remplacée par CREATE OR REPLACE (si elle existe déjà), et non de la ou des tables sources interrogées dans l’instruction SELECT. CTAS avec COPY GRANTS vous permet d’écraser une table avec un nouvel ensemble de données tout en conservant les autorisations existantes sur cette table.
Pour plus d’informations sur le paramètre COPY GRANTS, voir COPY GRANTS.
Pour plus d’informations sur la syntaxe de cette variante, voir les Notes sur l’utilisation.
CREATE ICEBERG TABLE … LIKE¶
Crée une nouvelle table avec les mêmes définitions de colonnes qu’une table existante, mais sans copier les données de la table existante. Les noms de colonnes, les types, les valeurs par défaut et les contraintes sont copiés dans la nouvelle table :
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> LIKE <source_table> [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ] [ COPY GRANTS ] [ ... ]
Pour plus d’informations sur le paramètre COPY GRANTS, voir COPY GRANTS.
Note
CREATE TABLE. .. LIKE n’est pas pris en charge pour les tables dont la séquence d’incrémentation automatique este accessible via un partage de données.
Pour plus d’informations sur la syntaxe de cette variante, voir les Notes sur l’utilisation.
CREATE ICEBERG TABLE … CLONE¶
Crée une table Iceberg avec les mêmes définitions de colonnes et contenant toutes les données existantes de la table source, sans réellement copier les données. Vous pouvez également utiliser cette variante pour cloner une table à un moment ou à un moment précis dans le passé (en utilisant Time Travel) :
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <name> CLONE <source_iceberg_table> [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ] [COPY GRANTS] ...
Note
Si l’instruction remplace une table Iceberg existante du même nom, Snowflake copie les autorisations de la table remplacée. S’il n’existe aucune table de ce nom, Snowflake copie les autorisations à partir de la table source en cours de clonage.
Pour plus d’informations sur le paramètre COPY GRANTS, voir COPY GRANTS.
Pour plus d’informations sur le clonage, voir CREATE <objet> … CLONE et Clonage et tables Apache Iceberg™.
Paramètres requis¶
table_name
Indique l’identificateur (le nom) de la table ; doit être unique pour le schéma dans lequel la table est créée.
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.
col_name
Indique l’identificateur (le nom) de colonne. Toutes les exigences relatives aux identificateurs de table s’appliquent également aux identificateurs de colonne.
Pour plus d’informations, voir Exigences relatives à l’identificateur et Mots clés réservés et limités.
Note
En plus des mots clés réservés standard, les mots clés suivants ne peuvent pas être utilisés comme identificateurs de colonnes, car ils sont réservés aux fonctions de contexte standard ANSI :
CURRENT_DATE
CURRENT_ROLE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
Pour la liste des mots clés réservés, voir Mots clés réservés et limités.
col_type
Spécifie le type de données pour la colonne.
Pour plus d’informations sur les types de données qui peuvent être spécifiés pour les colonnes de la table, voir Types de données des tables Apache Iceberg™.
Note
Vous ne pouvez pas utiliser
float
nidouble
comme clés primaires (conformément à la spécification Apache Iceberg).BASE_LOCATION = 'directory_for_table_files'
Chemin d’accès à un répertoire dans lequel Snowflake peut écrire des fichiers de données et de métadonnées pour la table. Spécifiez un chemin d’accès relatif à partir de l’emplacement
EXTERNAL_VOLUME
de la table. Pour plus d’informations, voir Répertoires de données et de métadonnées.Ce répertoire ne peut pas être modifié après la création d’une table.
Paramètres facultatifs¶
CONSTRAINT ...
Définit une contrainte en ligne ou hors ligne pour la ou les colonnes spécifiées dans la table.
Pour des informations sur la syntaxe, voir CREATE | ALTER TABLE … CONSTRAINT. Pour plus d’informations sur les contraintes, voir Contraintes.
COLLATE 'collation_specification'
Spécifie le classement à utiliser pour des opérations de colonne telles que la comparaison de chaînes. Cette option s’applique uniquement aux colonnes de texte (VARCHAR, STRING, TEXT, etc.). Pour plus d’informations, voir Spécifications de classement.
DEFAULT ...
ou .AUTOINCREMENT ...
Indique si une valeur par défaut est automatiquement insérée dans la colonne lorsqu’une valeur n’est pas spécifiée explicitement via une instruction INSERT ou CREATE TABLE AS SELECT :
DEFAULT expr
La valeur par défaut de la colonne est définie par l’expression spécifiée, qui peut être l’une des suivantes :
Valeur constante.
Référence de séquence (
seq_name.NEXTVAL
).Expression simple qui renvoie une valeur scalaire.
L’expression simple peut inclure une UDF (fonction définie par l’utilisateur) SQL si l’UDF n’est pas une UDF sécurisée.
Note
Si une expression par défaut fait référence à une UDF SQL, la fonction est remplacée par la définition de fonction au moment de la création de la table. Si la fonction définie par l’utilisateur est redéfinie à l’avenir, cela ne mettra pas à jour l’expression par défaut de la colonne.
L’expression simple ne peut pas contenir des références à :
Sous-requêtes.
Agrégats.
Des fonctions de fenêtre.
Des UDFs sécurisées.
Des UDFs écrites dans des langages autres que SQL (par exemple, Java, JavaScript).
Fonctions externes.
- {
AUTOINCREMENT
|IDENTITY
} [ {( start_num , step_num )
|START num INCREMENT num
} ] AUTOINCREMENT
etIDENTITY
sont synonymes. Lorsque l’un ou l’autre est utilisé, la valeur par défaut de la colonne commence par un nombre spécifié et chaque valeur successive augmente automatiquement de la somme spécifiée.Prudence
Snowflake utilise une séquence pour générer les valeurs d’une colonne auto-incrémentée. Les séquences ont des limites ; voir Sémantique de séquence.
La valeur par défaut pour le démarrage et les paliers/incréments est de
1
.AUTOINCREMENT
etIDENTITY
ne peuvent être utilisés que pour les colonnes dont le type de données est numérique.
Par défaut : aucune valeur (la colonne n’a pas de valeur par défaut)
Note
DEFAULT
etAUTOINCREMENT
s’excluent mutuellement ; une seule des deux peut être spécifiée pour une colonne.MASKING POLICY = policy_name
Spécifie la politique de masquage à définir sur une colonne.
PROJECTION POLICY policy_name
Spécifie la politique de projection à définir sur une colonne.
COMMENT 'string_literal'
Spécifie un commentaire pour la colonne.
(Notez que les commentaires peuvent être spécifiés au niveau de la colonne ou de la table. La syntaxe de chacun est légèrement différente).
USING ( col_name , cond_col_1 ... )
Spécifie les arguments à transmettre dans l’expression SQL pour la politique de masquage conditionnelle.
La première colonne de la liste spécifie la colonne pour les conditions de la politique de masquage ou de tokenisation des données et doit correspondre à la colonne à laquelle la politique de masquage est définie.
Les colonnes supplémentaires spécifient les colonnes à évaluer pour déterminer s’il faut masquer ou tokeniser les données de chaque ligne du résultat de requête lorsqu’une requête effectue une sélection à partir de la première colonne.
Si la clause USING est omise, Snowflake traite la politique de masquage conditionnelle comme une politique de masquage normale.
CLUSTER BY ( expr [ , expr , ... ] )
Spécifie une ou plusieurs colonnes ou expressions de colonne dans la table comme clés de clustering. Pour plus d’informations, voir Clés de clustering et tables en cluster.
Par défaut : aucune valeur (aucune clé de clustering n’est définie pour la table)
Important
Les clés de clustering ne sont pas recommandées ni conçues pour toutes les tables. Elles sont généralement intéressantes pour les tables très importantes (de plusieurs téraoctets).
Avant de spécifier une clé de clustering pour une table, vous devez comprendre ce que sont les micro-partitions. Pour plus d’informations, voir Fonctionnement des structures de table dans Snowflake.
EXTERNAL_VOLUME = 'external_volume_name'
Spécifie l’identificateur (le nom) du volume externe dans lequel la table Iceberg stocke ses fichiers de métadonnées et ses données au format Parquet. Les métadonnées et les fichiers manifestes Iceberg stockent le schéma de la table, les partitions, les instantanés et d’autres métadonnées.
Si vous ne spécifiez pas ce paramètre, la table Iceberg utilise par défaut le volume externe du schéma, de la base de données ou du compte. Le schéma est prioritaire sur la base de données, et la base de données est prioritaire sur le compte.
CATALOG = 'SNOWFLAKE'
Spécifie Snowflake comme catalogue Iceberg. Snowflake prend en charge la maintenance tout au long du cycle de vie de la table, comme le compactage.
CATALOG_SYNC = 'open_catalog_integration_name'
Spécifie éventuellement le nom d’une intégration de catalogue configurée pour Snowflake Open Catalog. Si spécifié, Snowflake synchronise la table avec un catalogue externe dans votre compte Snowflake Open Catalog. Pour plus d’informations, voir Synchronisation d’une table gérée par Snowflake avec Snowflake Open Catalog.
STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }
Spécifie la politique de sérialisation du stockage de la table. Si cela n’est pas spécifié lors de la création de la table, la table hérite de la valeur définie au niveau du schéma, de la base de données ou du compte. Si la valeur n’est spécifiée à aucun niveau, la table utilise la valeur par défaut.
Vous ne pouvez pas modifier la valeur de ce paramètre après la création de la table.
COMPATIBLE
: Snowflake effectue un encodage et une compression qui garantissent l’interopérabilité avec les moteurs de calcul tiers.OPTIMIZED
: Snowflake effectue un encodage et une compression qui garantissent les performances optimales des tables au sein de Snowflake.
Par défaut :
OPTIMIZED
DATA_RETENTION_TIME_IN_DAYS = integer
Spécifie la période de conservation de la table gérée par Snowflake pour que les actions Time Travel (SELECT, CLONE, UNDROP) puissent être effectuées sur les données historiques de la table. Pour plus d’informations, 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
ou1
Enterprise Edition : de
0
à90
pour les tables permanentes
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, du schéma ou de la base de données)
Note
Une valeur de
0
désactive effectivement Time Travel pour la table.
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 de la table, afin d’éviter que les flux sur la table ne deviennent obsolètes.
Pour une description détaillée de ce paramètre, voir MAX_DATA_EXTENSION_TIME_IN_DAYS.
CHANGE_TRACKING = { TRUE | FALSE }
Spécifie s’il faut activer le suivi des modifications sur la table.
TRUE
active le suivi des modifications sur la table. Ce paramètre ajoute une paire de colonnes masquées à la table source et commence à stocker les métadonnées de suivi des modifications dans les colonnes. Ces colonnes consomment une petite quantité de stockage.Les métadonnées de suivi des modifications peuvent être interrogées à l’aide de la clause CHANGES pour les instructions SELECT, ou en créant et en interrogeant un ou plusieurs flux sur la table.
FALSE
n’active pas le suivi des modifications sur la table.
Par défaut : FALSE
DEFAULT_DDL_COLLATION = 'collation_specification'
Spécifie une spécification de classement par défaut pour les colonnes de la table, y compris les colonnes ajoutées à la table à l’avenir.
Pour plus d’informations sur ce paramètre, voir DEFAULT_DDL_COLLATION.
COPY GRANTS
Spécifie de conserver les privilèges d’accès de la table d’origine lorsqu’une nouvelle table est créée à l’aide de l’une des variables CREATE TABLE suivantes :
CREATE OR REPLACE TABLE
CREATE TABLE … LIKE
CREATE TABLE … CLONE
Ce paramètre copie tous les privilèges, excepté OWNERSHIP, de la table existante vers la nouvelle table. La nouvelle table n’hérite pas des attributions futures définies pour le type d’objet dans le schéma. Par défaut, le rôle qui exécute l’instruction CREATE TABLE possède la nouvelle table.
Si le paramètre n’est pas inclus dans l’instruction CREATE ICEBERG TABLE, la nouvelle table n’hérite pas des privilèges d’accès explicites accordés sur la table d’origine, mais des attributions futures définies pour le type d’objet dans le schéma.
Remarque :
Avec le partage des données :
Si la table existante a été partagée avec un autre compte, la table de remplacement est également partagée.
Si la table existante a été partagée avec votre compte en tant que consommateur de données et que l’accès a été accordé à d’autres rôles dans le compte (en utilisant
GRANT IMPORTED PRIVILEGES
sur la base de données mère), l’accès est également accordé à la table de remplacement.
La sortie SHOW GRANTS pour la table de remplacement liste le concessionnaire des privilèges copiés comme le rôle qui a exécuté l’instruction CREATE ICEBERG TABLE avec l’horodatage courant lorsque l’instruction a été exécutée.
L’opération de copie des accords s’effectue atomiquement dans la commande CREATE ICEBERG TABLE (c’est-à-dire dans la même transaction).
COMMENT = 'string_literal'
Spécifie un commentaire. Vous pouvez spécifier un commentaire au niveau de la colonne ou de la table. La syntaxe de chacun est légèrement différente.
Par défaut : aucune valeur
ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )
Spécifie la politique d’accès aux lignes à définir sur une table.
AGGREGATION POLICY policy_name
Spécifie la politique d’agrégation à définir sur une table.
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 commande SQL doit avoir les privilèges suivants définis au minimum ainsi :
Privilège |
Objet |
Remarques |
---|---|---|
CREATE ICEBERG TABLE |
Schéma |
|
CREATE EXTERNAL VOLUME |
Compte |
Nécessaire pour créer un nouveau volume externe. |
USAGE |
Volume externe |
Nécessaire pour référencer un volume externe existant. |
Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.
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¶
Considérations relatives à l’exécution de cette commande :
Les tables Iceberg inter-Cloud et interrégionales ne sont actuellement pas prises en charge lorsque vous utilisez Snowflake comme catalogue Iceberg. Si CREATE ICEBERG TABLE renvoie un message d’erreur tel que
"External volume <nom_du_volume> must have a STORAGE_LOCATION defined in the local region ..."
, assurez-vous que votre volume externe utilise un emplacement de stockage dans la même région que celle de votre compte Snowflake.Si vous avez créé votre volume externe via un identificateur entre guillemets doubles, vous devez spécifier l’identificateur exactement tel qu’il a été créé (y compris avec les guillemets doubles) dans votre instruction CREATE ICEBERG TABLE. Le fait de ne pas inclure de guillemets peut entraîner une erreur
Object does not exist
(ou un type d’erreur similaire).Pour un exemple, voir la section Exemples (dans cette rubrique).
Considérations pour créer des tables :
Un schéma ne peut pas contenir de tables et/ou de vues portant le même nom. Lors de la création d’une table :
Si une vue portant le même nom existe déjà dans le schéma, une erreur est renvoyée et la table n’est pas créée.
Si une table portant le même nom existe déjà dans le schéma, une erreur est renvoyée et la table n’est pas créée, sauf si le mot clé facultatif
OR REPLACE
est inclus dans la commande.
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.
Cela signifie que toutes les requêtes simultanées à l’opération CREATE OR REPLACE ICEBERG TABLE utilisent soit l’ancienne soit la nouvelle version de la table.
Comme les mots clés réservés, les noms de fonctions réservés ANSI (CURRENT_DATE, CURRENT_TIMESTAMP, etc.) ne peuvent pas être utilisés comme noms de colonnes.
La recréation d’une table (en utilisant le mot clé
OR REPLACE
facultatif) détruit son historique, ce qui rend tout flux sur la table périmé. Un flux périmé est illisible.
Utilisation de la syntaxe de variante :
CREATE ICEBERG TABLE. .. LIKE :
Si la table source a des clés de clustering, la nouvelle table a elle aussi des clés de clustering. Par défaut, le clustering automatique n’est pas suspendu pour la nouvelle table, même si le clustering automatique a été suspendu pour la table source.
CREATE ICEBERG TABLE … AS SELECT (CTAS) :
Lorsque les clés de clustering sont spécifiées dans une instruction CTAS :
Les définitions des colonnes sont obligatoires et doivent être explicitement spécifiées dans l’instruction.
Par défaut, le clustering automatique n’est pas suspendu pour la nouvelle table, même si le clustering automatique est suspendu pour la table source.
Si vous voulez que la table soit créée avec des lignes dans un ordre spécifique, utilisez une sous-clause ORDER BY dans la clause SELECT du CTAS. En spécifiant CLUSTER BY, les données ne sont pas regroupées au moment de la création de la table ; CLUSTER BY s’appuie sur le clustering automatique pour regrouper à nouveau les données au fil du temps.
La sous-clause ORDER BY d’une instruction CREATE TABLE n’affecte pas l’ordre des lignes retournées par les futures instructions SELECT sur cette table. Pour spécifier l’ordre des lignes dans les futures instructions SELECT, utilisez une sous-clause ORDER BY dans ces instructions.
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.
Pour résoudre les problèmes liés à la création d’une table gérée par Snowflake, consultez Impossible de créer une table gérée par Snowflake.
Exemples¶
Créer une table Iceberg avec Snowflake comme catalogue¶
Cet exemple crée une table Iceberg avec Snowflake comme catalogue Iceberg. La table obtenue est gérée par Snowflake et prend en charge l’accès en lecture et en écriture.
L’exemple définit le nom de table (my_iceberg_table
) comme BASE_LOCATION
. Ainsi, Snowflake écrit les données et les métadonnées dans un répertoire portant le même nom que la table à l’emplacement de votre volume externe.
CREATE ICEBERG TABLE my_iceberg_table (amount int)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table';
Créer une table Iceberg via la syntaxe de variante CTAS¶
Cet exemple utilise la syntaxe de variante CREATE ICEBERG TABLE … AS SELECT pour créer une nouvelle table Iceberg à partir d’une table nommée base_iceberg_table
. La clause AS SELECT doit se trouver à la fin de l’instruction.
CREATE OR REPLACE ICEBERG TABLE iceberg_table_copy (column1 int)
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'iceberg_table_copy'
AS SELECT * FROM base_iceberg_table;
Spécifier un volume externe avec un identificateur entre guillemets doubles¶
Cet exemple crée une table Iceberg avec un volume externe dont l’identificateur contient des guillemets doubles. Les identificateurs entre guillemets doubles sont sensibles à la casse et contiennent souvent des caractères spéciaux.
L’identificateur "external_volume_1"
est spécifié exactement tels qu’il a été créé (y compris avec les guillemets doubles). Le fait de ne pas inclure de guillemets peut entraîner une erreur Object does not exist
(ou un type d’erreur similaire).
Pour en savoir plus, voir Identificateurs entre guillemets doubles.
CREATE OR REPLACE ICEBERG TABLE table_with_quoted_external_volume
EXTERNAL_VOLUME = '"external_volume_1"'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my/relative/path/from/external_volume';