Tables Apache Iceberg™ : Prise en charge de Apache Iceberg™ v3 (Prévisualisation)¶
Cette prévisualisation introduit la prise en charge de la v3 de la spécification Apache Iceberg™, mais avec certaines considérations et limitations. Sauf indication contraire, les tables Iceberg gérées par Snowflake et celles gérées en externe sont prises en charge dans cette prévisualisation.
Fonctionnalités Iceberg v3 prises en charge¶
Cette section répertorie les fonctionnalités Iceberg v3 prises en charge dans cette prévisualisation.
Types de données¶
Les types de données v3 suivants sont pris en charge dans la prévisualisation publique :
geographygeometrynanosecondvariant
Pour plus d’informations, voir Types de données Iceberg v3.
Valeurs par défaut¶
Consultez Valeurs par défaut.
Vecteurs de suppression¶
Consultez Vecteurs de suppression.
Lignée de lignes¶
Consultez Lignée de lignes.
Configurer la version Iceberg par défaut¶
Les tables Iceberg ont par nature une version de format à laquelle elles sont conformes. Pour les tables Iceberg gérées en externe dans une base de données Snowflake standard, Snowflake récupère cette version à partir des métadonnées de la table.
Pour les tables Iceberg suivantes, le propriétaire de la table doit spécifier la version Iceberg à laquelle la table doit être conforme :
Tables Iceberg gérées par Snowflake
Tables Iceberg gérées en externe que vous créez dans une base de données liée à un catalogue
La version de format Iceberg par défaut du système dans Snowflake est la v2, mais vous pouvez la définir sur la v3, si nécessaire. Pour définir la version Iceberg sur la v3, effectuez l’une des actions suivantes :
Utilisez le paramètre ICEBERG_VERSION_DEFAULT pour définir la version Iceberg sur
3au niveau du compte, de la base de données ou du schéma. Pour plus d’informations, voir ICEBERG_VERSION_DEFAULT.Spécifiez
ICEBERG_VERSION = 3dans votre instruction CREATE ICEBERG TABLE.Note
Si vous ne spécifiez pas de version Iceberg lorsque vous créez une table Iceberg, la table utilise par défaut la version Iceberg définie pour le schéma, la base de données ou le compte. Le schéma est prioritaire sur la base de données, et la base de données est prioritaire sur le compte.
Prudence
Avant d’utiliser d’autres moteurs pour mettre à niveau une version de format de tables Iceberg dans les propriétés de table vers la v3, assurez-vous que la table n’est pas utilisée par des moteurs ou des applications qui ne prennent pas encore en charge la v3. La rétrogradation des versions de format n’est pas prise en charge dans la spécification Apache Iceberg. Par conséquent, tous les lecteurs et rédacteurs doivent prendre en charge la v3. La version par défaut des tables Iceberg dans Snowflake est la v2, qui peut être configurée en v3 si nécessaire. L’utilisation de Snowflake pour effectuer des mises à niveau de version sur place n’est pas prise en charge pour le moment.
Notes sur l’utilisation¶
Pour modifier le paramètre ICEBERG_VERSION_DEFAULT au niveau du compte, vous devez être un administrateur de compte. En d’autres termes, vous devez être un utilisateur disposant du rôle ACCOUNTADMIN.
Pour modifier le paramètre ICEBERG_VERSION_DEFAULT au niveau de la base de données ou du schéma, le rôle utilisé pour effectuer l’opération doit disposer du privilège OWNERSHIP sur la base de données ou le schéma respectif.
Exemples¶
Spécifiez que les nouvelles tables Iceberg dans la base de données my_db doivent être créées à l’aide de la v3 :
ALTER DATABASE my_db SET ICEBERG_VERSION_DEFAULT=3;
Créez une nouvelle table Iceberg gérée en externe avec la v3. Les définitions de colonnes incluses avec la commande indiquent qu’une nouvelle table sera créée, ou qu’une table existante sera remplacée, dans le catalogue distant. La table est correctement créée, car il s’agit d’une nouvelle table qui n’a pas de version existante.
CREATE OR REPLACE ICEBERG TABLE my_iceberg_v3_table (
boolean_col boolean,
int_col int,
long_col long,
)
CATALOG='my_catalog_integration'
ICEBERG_VERSION=3;
Créez une table Iceberg gérée en externe avec la v3 depuis une table existante avec des métadonnées Iceberg. L’absence de définitions de colonne ou de version de format dans cet exemple indique que cette table existe déjà et que la spécification de la colonne et la version de format seront déduites des métadonnées Iceberg du catalogue distant. Cet exemple utilise des identifiants de connexion distribués par catalogue, de sorte que le paramètre EXTERNAL_VOLUME est exclu de l’instruction CREATE ICEBERG TABLE :
CREATE OR REPLACE ICEBERG TABLE my_iceberg_v3_table
CATALOG = 'my_catalog_integration'
CATALOG_TABLE_NAME = 'my_table'
AUTO_REFRESH = TRUE;
Note
Vous ne pouvez pas utiliser la commande ALTER ICEBERG TABLE pour modifier la version de format d’une table existante.
Obtenir la version de format pour les tables Iceberg¶
L’exemple suivant montre comment obtenir la version Iceberg pour une table spécifique :
SHOW PARAMETERS LIKE 'ICEBERG_VERSION' IN TABLE my_v3_iceberg_table;
Sortie :
+-----------------+-------+---------+-------+---------------------------------------------------+--------+ | key | value | default | level | description | type | +-----------------+-------+---------+-------+---------------------------------------------------+--------+ | ICEBERG_VERSION | 3 | 2 | TABLE | Specifies the Iceberg table format version to ... | NUMBER | +-----------------+-------+---------+-------+---------------------------------------------------+--------+
L’exemple suivant montre comment obtenir la version Iceberg d’une table spécifique à l’aide de la fonction GET_DDL pour récupérer la définition de la table Iceberg :
SELECT GET_DDL('ICEBERG_TABLE', 'my_v3_iceberg_table');
Sortie :
CREATE ICEBERG TABLE my_v3_iceberg_table ( record VARIANT, event_timestamp TIMESTAMP_LTZ(6) ) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'my_external_volume' BASE_LOCATION = 'my_iceberg_table' ICEBERG_VERSION = 3;
Considérations et limites des fonctionnalités Iceberg v3¶
Tenez compte des informations suivantes lorsque vous utilisez les fonctionnalités Iceberg v3 :
Fonctionnalités Snowflake non prises en charge¶
Les fonctionnalités suivantes de Snowflake ne sont pas prises en charge dans cette prévisualisation pour Iceberg v3 :
Flux d’ajout uniquement sur les tables Iceberg gérées en externe
Régions SnowGov
Pour les tables qui utilisent un catalogue externe, vous ne pouvez pas créer de tables Iceberg v3 avec des colonnes de type structuré, qui incluent OBJECT, ARRAY ou MAP. Par exemple, vous ne pouvez pas utiliser CREATE ICEBERG TABLE … AS SELECT (CTAS) pour créer une table Iceberg v3 gérée en externe avec des colonnes de type structuré.
Vous pouvez créer des tables Iceberg v3 gérées par Snowflake avec des colonnes de type structuré.
Mise à niveau sur place d’une table Iceberg gérée par Snowflake de la v2 vers la v3, qui inclut le clonage d’une table v2, puis la mise à niveau du clone vers la v3
Important
Si vous utilisez Apache Spark pour mettre à niveau une table Iceberg gérée en externe de la v2 vers la v3, vous devez utiliser une validation qui crée un nouvel instantané, comme des opérations DML. Dans le cas contraire, si la version de format est mise à jour dans les propriétés de la table sans nouvel instantané, l’actualisation manuelle et automatique de la table échouera jusqu’à ce qu’un nouvel instantané soit créé.
L’exemple suivant utilise Apache Spark pour mettre à niveau une table Iceberg gérée en externe de la v2 vers la v3 :
ALTER TABLE table_name SET TBLPROPERTIES('format-version'='3');
Note
La liste des fonctionnalités non prises en charge n’est pas finalisée et est susceptible d’être modifiée à l’avenir. La liste sera mise à jour, si nécessaire, pour refléter les dernières fonctionnalités non prises en charge.
Pour connaître les considérations et les limitations spécifiques à une fonctionnalité v3, consultez le chapitre des fonctionnalités pour une fonctionnalité.
Fonctions Snowflake prises en charge¶
Les fonctionnalités non répertoriées dans la section Fonctionnalités Snowflake non prises en charge sont prises en charge. Les fonctionnalités prises en charge sont les suivantes :
Fonctionnalité |
Remarques |
|---|---|
Clustering |
Iceberg v3 géré par Snowflake uniquement. |
Conversion de tables v3 gérées en externe en tables gérées par Snowflake |
Prise en charge avec les considérations suivantes :
|
LOAD_MODE = FULL_INGEST ou ADD_FILESCOPY sont pris en charge avec les considérations suivantes :
|
|
Prise en charge avec les limitations suivantes :
|
|
Politiques de protection des données |
Les politiques de protection des données suivantes sont prises en charge :
|
Application de la politique de protection des données à partir d’Apache Spark |
|
Supervision de la qualité des données |
|
Écrivez une table Iceberg v3 gérée en externe comme cible d’une table dynamique. |
|
Accélération de requête. |
|
Classification des données sensibles |
|
Les tables partitionnées ne peuvent pas également écrire de vecteurs de suppression. Seule la copie sur écriture est prise en charge pour les tables partitionnées. |
|
Versions 4.0 ou plus récentes. |
|
1.33.0 ou plus récente. |
|
Méthode d’API Snowpark pandas to_iceberg |
Uniquement prise en charge pour Iceberg v3 lorsqueICEBERG_VERSION_DEFAULT est défini sur le compte, la base de données ou le schéma. Si ICEBERG_VERSION = 3 est défini au niveau de la table, la méthode d’API Snowpark pandas to_iceberg n’est pas prise en charge. |
L’écriture de dataframes dans des tables Iceberg v3 existantes en utilisant une méthode d’ajout ou de réécriture est prise en charge. La création d’une nouvelle table Iceberg v3 n’est pas prise en charge. |
|
|
|
Fonctionnalités Iceberg v3 non prises en charge¶
Les fonctionnalités suivantes de la spécification Iceberg v3 ne sont pas prises en charge :
Variante imbriquée
Transformations multi-arguments pour le partitionnement et le tri
Clés de chiffrement de table
Type de données UNKNOWN
Exemples : Prise en charge de la v3 avec les fonctionnalités Snowflake existantes¶
Cette section présente des exemples des fonctionnalités existantes de Snowflake prises en charge avec la v3. Une annonce de fonctionnalités comprend un exemple pour une table gérée par Snowflake et une table gérée en externe, si elles sont prises en charge.
Pour obtenir la liste complète des fonctionnalités Snowflake prises en charge dans cette prévisualisation pour Iceberg v3, consultez Fonctionnalités Snowflake prises en charge.
Créer une table Iceberg v3¶
L’exemple suivant crée une table Apache Iceberg™ gérée par Snowflake conforme à la v3 de la spécification Apache Iceberg™ :
CREATE ICEBERG TABLE my_v3_iceberg_table (
record VARIANT,
event_timestamp TIMESTAMP_LTZ(6)
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table'
ICEBERG_VERSION = 3;
L’exemple suivant crée une table Apache Iceberg™ qui utilise un catalogue REST Iceberg distant et est conforme à la v3 de la spécification Apache Iceberg™ :
Note
Vous n’avez pas besoin de spécifier ICEBERG_VERSION = 3 avec la commande, car la version de format est déjà définie dans les métadonnées du catalogue externe, de sorte que Snowflake récupère cette version à partir des métadonnées.
CREATE ICEBERG TABLE my_v3_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'my_rest_catalog_integration'
CATALOG_TABLE_NAME = 'my_remote_table'
AUTO_REFRESH = TRUE;
L’exemple suivant crée une table Iceberg accessible en écriture dans une base de données liée à un catalogue avec des définitions de colonnes et conforme à la v3 de la spécification Apache Iceberg™ :
USE DATABASE my_catalog_linked_db;
USE SCHEMA 'my_namespace';
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
first_name string,
last_name string,
amount int,
create_date date
)
ICEBERG_VERSION = 3;
Écrire dans une table Iceberg v3¶
Les commandes DML INSERT, UPDATE, DELETE, MERGE, TRUNCATE TABLE et COPY INTO sont prises en charge pour l’écriture sur des tables Iceberg v3 gérées par Snowflake et gérées en externe :
L’exemple suivant insère une ligne dans une table Apache Iceberg™ conforme à la v3 de la spécification de table Apache Iceberg™ :
INSERT INTO my_v3_iceberg_table (id, payload) VALUES (1, PARSE_JSON('{"name": "Alice", "age": 30}'));
L’exemple suivant charge des fichiers dans une table Apache Iceberg™ conforme à la v3 de la spécification de table Apache Iceberg™ :
COPY INTO my_v3_iceberg_table
FROM @my_json_stage
FILE_FORMAT = 'my_json_format'
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE;
Charger des données en utilisant Snowpipe¶
L’exemple suivant charge des données à partir de fichiers pour les tables Iceberg v3, pour les tables gérées par Snowflake et les tables gérées en externe :
CREATE PIPE mypipe
AUTO_INGEST = TRUE
INTEGRATION = 'MYINT'
AS
COPY INTO snowpipe_db.public.my_v3_iceberg_table
FROM @snowpipe_db.public.mystage
FILE_FORMAT = (TYPE = 'JSON');
Note
Snowflake prend en charge des fonctionnalités d’écriture supplémentaires pour Iceberg v3. Pour cette liste, consultez Considérations et limites pour les fonctionnalités Iceberg v3, puis consultez la liste des fonctionnalités Snowflake prises en charge.
Créer une table Iceberg dynamique v3¶
L’exemple suivant écrit une table Iceberg v3 gérée par Snowflake comme sortie d’une table dynamique :
CREATE DYNAMIC ICEBERG TABLE my_dynamic_iceberg_v3_table (
num_orders NUMBER(10,0),
order_day
)
TARGET_LAG = '20 minutes'
WAREHOUSE = my_warehouse
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my_dynamic_iceberg_v3_table'
ICEBERG_VERSION = 3
AS
SELECT
COUNT(DISTINCT order_id)
DATE_TRUNC('DAY', order_timestamp_ns) AS order_day
FROM staging_v3_iceberg_table;
Note
L’écriture d’une table Iceberg v2 ou v3 gérée en externe comme cible d’une table dynamique n’est pas prise en charge. La sortie d’une table Iceberg dynamique ne peut être gérée que par Snowflake.
Interroger une table Iceberg v3¶
L’exemple suivant interroge une table Iceberg v3 gérée par Snowflake ou en externe :
SELECT * FROM MY_DB.MY_SCHEMA.MY_ICEBERG_V3_TABLE;