CREATE ICEBERG TABLE (fichiers Delta dans le stockage d’objets)¶
Crée ou remplace une table Apache Iceberg dans le schéma actuel/spécifié à l’aide de fichiers de table Delta dans le stockage d’objets (stockage Cloud externe). Ce type de table Iceberg nécessite une intégration de catalogue.
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.
Vous avez également besoin d’une intégration de catalogue pour la table. Pour plus d’informations, voir Configurer une intégration de catalogue pour des fichiers dans le stockage d’objets.
- 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>
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = '<catalog_integration_name>' ]
BASE_LOCATION = '<relative_path_from_external_volume>'
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
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.
BASE_LOCATION = 'relative_path_from_external_volume'
Spécifie un chemin d’accès relatif au répertoire à partir de l’emplacement du
EXTERNAL_VOLUME
de la table auquel Snowflake peut accéder à vos files de table Delta.L’emplacement de base doit pointer vers un répertoire et ne peut pas pointer vers un seul fichier. Il doit contenir le sous-dossier du journal des transactions Delta (par exemple,
my/base/location/_delta_log/
).
Paramètres facultatifs¶
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 = 'catalog_integration_name'
Spécifie l’identificateur (le nom) de l’intégration de catalogue de cette table.
Si cette valeur n’est pas spécifiée, la table Iceberg utilise par défaut l’intégration de catalogue 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.
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. 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.
Si cette valeur n’est pas spécifiée, la table Iceberg utilise par défaut la valeur de paramètre 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.
Par défaut :
FALSE
COMMENT = 'string_literal'
Spécifie un commentaire pour la table.
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 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. |
CREATE INTEGRATION |
Compte |
Nécessaire pour créer une nouvelle intégration de catalogue. |
USAGE |
Intégration de catalogue |
Nécessaire pour référencer une intégration de catalogue existante. |
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 :
Si vous avez créé votre volume externe ou votre intégration de catalogue à l’aide d’un identificateur entre guillemets doubles, vous devez spécifier l’identificateur exactement tel qu’il a été créé (y compris 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).
Considérations relatives aux tables Iceberg créées à partir de fichiers de table Delta :
Vous pouvez utiliser Time Travel pour interroger les tables Iceberg créées à partir de fichiers de table Delta. Les versions des tables correspondent aux fichiers individuels de validation du journal Delta.
Les tables Iceberg sont compatibles avec les données générées par Delta Lake version 3.1 et versions antérieures.
Les flux Snowflake ne sont pas pris en charge pour les tables Iceberg créées à partir de fichiers de table Delta avec des colonnes de partition. Cependant, les flux d’insertion uniquement pour les tables créées à partir de fichiers Delta sans colonnes de partition sont pris en charge.
Les tables dynamiques ne sont pas prises en charge sur les tables Iceberg créées à partir de fichiers de table Delta.
Snowflake ne prend pas en charge la création de tables Iceberg à partir de définitions de table Delta dans le catalogue de données AWS Glue.
Les fichiers Parquet (fichiers de données pour les tables Delta) qui utilisent l’une des fonctionnalités ou l’un des types de données suivants ne sont pas pris en charge :
IDs de champ.
Le type de données est INTERVAL.
Le type de données DECIMAL avec une précision supérieure à 38.
Types LIST ou MAP avec représentation à un ou deux niveaux.
Types d’entiers non signés (INT(signé = faux)).
Le type de données est FLOAT16.
Pour plus d’informations sur les types de données Delta et les tables Iceberg, voir Types de données Delta.
L’actualisation des opérations pendant CREATE et ALTER … REFRESH peut traiter un maximum de 1 000 fichiers de validation Delta par opération.
Note
Snowflake utilise des fichiers de point de contrôle Delta lors de la création d’une table Iceberg. La limite de 1 000 fichiers de validation s’applique uniquement aux validations effectuées après le dernier point de contrôle.
La génération de métadonnées Iceberg à l’aide de la fonction SYSTEM$GET_ICEBERG_TABLE_INFORMATION n’est pas prise en charge.
Les fonctionnalités suivantes de Delta Lake ne sont actuellement pas prises en charge : suivi des lignes, suppression de fichiers vectoriels, modification de fichiers de données, modification de métadonnées, DataChange, CDC, évolution du protocole.
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.
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¶
L’exemple de commande suivant crée une table Iceberg à partir de fichiers de table Delta dans le stockage d’objets.
L’exemple spécifie un volume externe associé à l’emplacement cloud des fichiers de la table Delta, une intégration du catalogue configurée pour Delta et une valeur pour le paramètre requis BASE_LOCATION
.
CREATE ICEBERG TABLE my_delta_iceberg_table
CATALOG = delta_catalog_integration
EXTERNAL_VOLUME = delta_external_volume
BASE_LOCATION = 'relative/path/from/ext/vol/';
Si la table Delta utilise un schéma de partitionnement, Snowflake interprète automatiquement le schéma à partir du journal Delta.