Charger des données dans les tables Apache Iceberg™¶
Snowflake prend en charge les options suivantes pour le chargement des données dans une table Iceberg gérée par Snowflake :
Formats de fichier¶
Vous pouvez charger des données dans une table Iceberg à partir de fichiers dans n’importe lequel des formats pris en charge pour le chargement dans les tables Snowflake standard.
Pour CSV, JSON, Avro et ORC, Snowflake convertit les données des formats de fichiers non Parquet en fichiers Parquet Iceberg et stocke les données dans l’emplacement de base de la table Iceberg. Seule l’option par défaut LOAD_MODE = FULL_INGEST
est prise en charge pour ces scénarios de chargement de format de fichier qui nécessitent une conversion de type.
Pour les fichiers Parquet d’Apache, Snowflake charge les données directement dans les colonnes des tables et vous permet de choisir parmi les options LOAD_MODE
suivantes :
FULL_INGEST
: Analyse les fichiers et réécrit les données Parquet sous l’emplacement de base de la table Iceberg.ADD_FILES_COPY
: Le binaire copie les fichiers Parquet Apache compatibles avec Iceberg qui ne sont pas enregistrés dans un catalogue Iceberg dans l’emplacement de base de la table Iceberg, puis enregistre les fichiers dans la table Iceberg.
Pour plus d’informations, voir COPY INTO <table>.
Exemple : Charger des fichiers Parquet compatibles avec Iceberg¶
Cet exemple explique comment créer une table Iceberg et y charger des données à partir de fichiers de données Parquet compatibles avec Iceberg dans une zone de préparation externe.
À des fins de démonstration, cet exemple utilise les ressources suivantes :
Un volume externe nommé
iceberg_ingest_vol
. Pour créer un volume externe, voir Configurer un volume externe.Une zone de préparation externe nommée
my_parquet_stage
contenant des fichiers Parquet compatibles avec Iceberg. Pour créer une zone de préparation externe, voir CREATE STAGE.
Créez un objet de format de fichier qui décrit les fichiers Parquet mis en zone de préparation, en utilisant la configuration requise pour copier les données Parquet compatibles avec Iceberg (
TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE
) :CREATE OR REPLACE FILE FORMAT my_parquet_format TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE;
Créez une table Iceberg gérée par Snowflake, en définissant des colonnes dont les types de données sont compatibles avec les types de données du fichier Parquet source :
CREATE OR REPLACE ICEBERG TABLE customer_iceberg_ingest ( c_custkey INTEGER, c_name STRING, c_address STRING, c_nationkey INTEGER, c_phone STRING, c_acctbal INTEGER, c_mktsegment STRING, c_comment STRING ) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'iceberg_ingest_vol' BASE_LOCATION = 'customer_iceberg_ingest/';
Note
L’instruction d’exemple spécifie les types de données Iceberg qui correspondent aux types de données Snowflake. Pour plus d’informations, voir Types de données des tables Apache Iceberg™.
Utilisez une instruction COPY INTO pour charger les données des fichiers Parquet en zone de préparation (situés directement sous le chemin de l’URL de la zone de préparation) dans la table Iceberg :
COPY INTO customer_iceberg_ingest FROM @my_parquet_stage FILE_FORMAT = 'my_parquet_format' LOAD_MODE = ADD_FILES_COPY PURGE = TRUE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE;
Note
L’exemple spécifie
LOAD_MODE = ADD_FILES_COPY
, ce qui indique à Snowflake de copier les fichiers dans l’emplacement de votre volume externe, puis d’enregistrer les fichiers dans la table.Cette option permet d’éviter les frais de fichiers, car Snowflake ne scanne pas les fichiers Parquet source et ne réécrit pas les données dans de nouveaux fichiers Parquet.
Sortie :
+---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+ | file | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name | |---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------| | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_008.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_006.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_005.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_002.parquet | LOADED | 5 | 5 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_010.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | +---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
Interrogez la table :
SELECT c_custkey, c_name, c_mktsegment FROM customer_iceberg_ingest LIMIT 10;
Sortie :
+-----------+--------------------+--------------+ | C_CUSTKEY | C_NAME | C_MKTSEGMENT | |-----------+--------------------+--------------| | 75001 | Customer#000075001 | FURNITURE | | 75002 | Customer#000075002 | FURNITURE | | 75003 | Customer#000075003 | MACHINERY | | 75004 | Customer#000075004 | AUTOMOBILE | | 75005 | Customer#000075005 | FURNITURE | | 1 | Customer#000000001 | BUILDING | | 2 | Customer#000000002 | AUTOMOBILE | | 3 | Customer#000000003 | AUTOMOBILE | | 4 | Customer#000000004 | MACHINERY | | 5 | Customer#000000005 | HOUSEHOLD | +-----------+--------------------+--------------+