CREATE ICEBERG TABLE

Crée une nouvelle table Iceberg dans le schéma actuel/spécifié ou remplace une table Iceberg existante. Les tables Iceberg combinent les fonctionnalités standards des tables Snowflake telles que le traitement SQL rapide, la sécurité et l’autorisation, ainsi que la gouvernance des données, avec les métadonnées et le stockage Apache Iceberg ouverts.

En outre, cette commande prend en charge les variantes suivantes pour les tables Iceberg qui utilisent Snowflake comme catalogue :

  • 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 pour des tables Iceberg.

Si vous utilisez un catalogue Iceberg externe, ou si vous n’utilisez aucun catalogue, vous devez également créer une intégration de catalogue pour la table. Pour en savoir plus, voir Configurer une intégration de catalogue pour des tables Iceberg.

Voir aussi :

ALTER ICEBERG TABLE, DROP ICEBERG TABLE , SHOW ICEBERG TABLES , DESCRIBE ICEBERG TABLE

Dans ce chapitre :

Syntaxe

Snowflake comme catalogue Iceberg

-- Snowflake as the Iceberg catalog
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 ] 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 = '<relative_path_from_external_volume>'
  [ 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 ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

Où :

inlineConstraint ::=
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE
    | PRIMARY KEY
    | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ]
  }
  [ <constraint_properties> ]
Copy

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

Pour plus de détails sur les contraintes hors ligne, voir CREATE | ALTER TABLE … CONSTRAINT.

Catalogue Iceberg externe

-- External Iceberg catalog
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = '<catalog_integration_name>' ]
  externalCatalogParams
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

Où :

externalCatalogParams (for AWS Glue Data Catalog) ::=
  CATALOG_TABLE_NAME = '<catalog_table_name>'
  [ CATALOG_NAMESPACE = '<catalog_namespace>' ]
Copy
externalCatalogParams (for Iceberg files in object storage) ::=
  METADATA_FILE_PATH = '<metadata_file_path>'
Copy

Syntaxe des variantes

La syntaxe des variantes suivante est prise en charge pour la création de tables Iceberg qui utilisent Snowflake comme catalogue.

CREATE ICEBERG TABLE … AS SELECT (également appelé CTAS)

Crée une nouvelle table remplie avec les données renvoyées par une requête :

CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ]
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ COPY GRANTS ]
  AS SELECT <query>
  [ ... ]
Copy

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> [ , ... ] )
  ...
  [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] )
  AS SELECT <query>
  [ ... ]
Copy

Note

Dans un CTAS, la clause 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 les COPY GRANTS, voir COPY GRANTS dans ce document.

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 ]
  [ ... ]
Copy

Pour plus d’informations sur les COPY GRANTS, voir COPY GRANTS dans ce document.

Note

CREATE TABLE … LIKE pour une table avec une séquence d’auto-incrémentation à laquelle on accède par un partage de données est actuellement non pris en charge.

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

query

Sous-requête qui appelle la fonction INFER_SCHEMA et formate la sortie sous forme de tableau.

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.

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 sa définition 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 et IDENTITY 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 et IDENTITY 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 et AUTOINCREMENT 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.

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 à passer dans l’expression SQL de 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 la requête lorsqu’une requête est effectuée sur 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

Le clustering est pris en charge uniquement pour les tables qui utilisent Snowflake comme catalogue Iceberg.

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.

DATA_RETENTION_TIME_IN_DAYS = integer

Spécifie la période de conservation de la table 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 Comprendre et utiliser la fonction « Time Travel » et Utilisation de tables temporaires et transitoires.

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 tables permanentes

    • 0 ou 1 pour les tables temporaires et 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, 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 pour la table.

Par défaut : aucune valeur

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

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

Spécifie la politique d’accès aux lignes à 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.

Paramètres du catalogue Snowflake

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.

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 écrire les données et les métadonnées de la table.

Ce paramètre ne peut pas être modifié après la création d’une table.

Paramètres de catalogue externe (externalCatalogParams)

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.

AWS Glue

CATALOG_TABLE_NAME = 'catalog_table_name'

Spécifie le nom de table tel qu’il est reconnu par votre catalogue de données AWS Glue. Pour un exemple d’utilisation de CATALOG_TABLE_NAME lors de la création d’une table Iceberg, voir Exemples (dans cette rubrique). Ce paramètre ne peut pas être modifié après la création de la table.

CATALOG_NAMESPACE = 'catalog_namespace'

Spécifie éventuellement l’espace de noms (par exemple, my_glue_database) de la source du catalogue de données AWS Glue et remplace l’espace de noms de catalogue par défaut spécifié avec l’intégration de catalogue. En spécifiant un espace de noms au niveau de la table, vous pouvez utiliser une seule intégration de catalogue pour AWS Glue pour créer des tables Iceberg dans différentes bases de données.

Si cette valeur n’est pas spécifiée, la table utilise l’espace de noms de catalogue par défaut associé à l’intégration de catalogue.

Fichiers Iceberg dans le stockage d’objets

METADATA_FILE_PATH = 'metadata_file_path'

Spécifie le chemin d’accès relatif au fichier de métadonnées Iceberg à utiliser pour les définitions de colonne. Par exemple, si s3://mybucket_us_east_1/metadata/v1.metadata.json est le chemin complet à votre fichier de métadonnées et si l’emplacement de stockage du volume externe est s3://mybucket_us_east_1/, indiquez metadata/v1.metadata.json comme valeur pour METADATA_FILE_PATH.

Avant la version 7.34 de Snowflake, ce paramètre était appelé METADATA_FILE_NAME.

Note

Avec les versions 7.34 et ultérieures de Snowflake, vous n’indiquez pas d”BASE_LOCATION pour créer une table à partir de fichiers Iceberg dans le stockage d’objets.

Avant la version 7.34, un paramètre nommé BASE_LOCATION (également appelé FILE_PATH dans les versions précédentes) était nécessaire pour créer une table à partir de fichiers Iceberg dans le stockage d’objets. Le paramètre spécifiait un chemin d’accès relatif à partir de l’emplacement du EXTERNAL_VOLUME.

Vous pouvez continuer à exécuter un script ou une instruction qui utilise la version antérieure de la syntaxe. Dans ce cas, les remarques suivantes s’appliquent :

  • Les fichiers de données Parquet et les fichiers de métadonnées Iceberg pour la table doivent se trouver dans BASE_LOCATION.

  • Pour actualiser la table, vous devez spécifier un chemin relatif à BASE_LOCATION. Par exemple, si le chemin d’accès complet à votre fichier de métadonnées est s3://mybucket_us_east_1/my_base_location/metadata/v1.metadata.json, indiquez metadata/v1.metadata.json comme metadata-file-relative-path.

    Pour plus d’informations, voir ALTER ICEBERG TABLE … REFRESH.

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

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

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

    Pour un exemple, voir la section Exemples (dans cette rubrique).

  • Avec les versions 7.34 et ultérieures de Snowflake, vous n’indiquez pas d”BASE_LOCATION pour créer une table à partir de fichiers Iceberg dans le stockage d’objets.

    Avant la version 7.34, un paramètre nommé BASE_LOCATION (également appelé FILE_PATH dans les versions précédentes) était nécessaire pour créer une table à partir de fichiers Iceberg dans le stockage d’objets. Le paramètre spécifiait un chemin d’accès relatif à partir de l’emplacement du EXTERNAL_VOLUME.

    Vous pouvez continuer à exécuter un script ou une instruction qui utilise la version antérieure de la syntaxe. Dans ce cas, les remarques suivantes s’appliquent :

    • Les fichiers de données Parquet et les fichiers de métadonnées Iceberg pour la table doivent se trouver dans BASE_LOCATION.

    • Pour actualiser la table, vous devez spécifier un chemin relatif à BASE_LOCATION. Par exemple, si le chemin d’accès complet à votre fichier de métadonnées est s3://mybucket_us_east_1/my_base_location/metadata/v1.metadata.json, indiquez metadata/v1.metadata.json comme metadata-file-relative-path.

      Pour plus d’informations, voir ALTER ICEBERG TABLE … REFRESH.

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

      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.

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’instruction spécifie une valeur pour le paramètre BASE_LOCATION. Cela indique à Snowflake où écrire les données et métadonnées de la table dans le volume externe.

CREATE ICEBERG TABLE my_iceberg_table (amount int)
  CATALOG='SNOWFLAKE'
  EXTERNAL_VOLUME='my_external_volume'
  BASE_LOCATION='my/relative/path/from/extvol';
Copy

Créer une table Iceberg avec AWS Glue comme catalogue

Cet exemple crée une table Iceberg qui utilise le catalogue de données AWS Glue. Pour remplacer l’espace de noms de catalogue par défaut et définir un espace de noms de catalogue pour la table, l’instruction utilise le paramètre CATALOG_NAMESPACE facultatif.

CREATE ICEBERG TABLE glue_iceberg_table
  EXTERNAL_VOLUME='glue_catalog_volume'
  CATALOG='glue_catalog_integration'
  CATALOG_TABLE_NAME='my_glue_catalog_table'
  CATALOG_NAMESPACE='icebergcatalogdb2';
Copy

Créer une table Iceberg à partir de métadonnées Iceberg dans le stockage d’objets

Cet exemple crée une table Iceberg à partir de métadonnées Iceberg stockées dans un stockage Cloud externe. Il spécifie également un chemin d’accès relatif aux métadonnées de la table dans le volume externe.

CREATE ICEBERG TABLE my_iceberg_table
  EXTERNAL_VOLUME='my_external_volume'
  CATALOG='my_catalog_integration'
  METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy

Spécifier un volume externe ou une intégration de catalogue avec un identificateur placé entre guillemets doubles

Cet exemple crée une table Iceberg avec un volume externe et une intégration de catalogue dont les identificateurs contiennent des guillemets doubles. Les identificateurs entre guillemets doubles sont sensibles à la casse et contiennent souvent des caractères spéciaux.

Les identificateurs "exvol_lower" et "catint_lower" sont spécifiés exactement tels qu’ils ont été créés (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 itable_with_quoted_catalog
  EXTERNAL_VOLUME = '"exvol_lower"'
  CATALOG = '"catint_lower"'
  METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy