Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation des tables Iceberg à l'aide de Trino
Cette section explique comment configurer et utiliser les tables Iceberg à l'aide de Trino
Amazon EMR lors de la configuration EC2
-
Créez un
iceberg.properties
fichier avec le contenu suivant. Leiceberg.file-format=parquet
paramètre détermine le format de stockage par défaut pour les nouvelles tables si le format n'est pas explicitement spécifié dans l'CREATE TABLE
instruction.connector.name=iceberg iceberg.catalog.type=glue iceberg.file-format=parquet fs.native-s3.enabled=true
-
Chargez le fichier
iceberg.properties
dans votre compartiment S3. -
Créez une action bootstrap qui copie le
iceberg.properties
fichier depuis votre compartiment S3 et le stocke en tant que fichier de configuration Trino sur le cluster Amazon EMR que vous allez créer. Assurez-vous de le remplacer<S3-bucket-name>
par le nom de votre compartiment S3.#!/bin/bash set -ex sudo aws s3 cp s3://<S3-bucket-name>/iceberg.properties /etc/trino/conf/catalog/iceberg.properties
-
Créez un cluster Amazon EMR sur lequel Trino est installé et spécifiez l'exécution du script précédent sous forme d'action d'amorçage. Voici un exemple de commande AWS Command Line Interface (AWS CLI) pour créer le cluster :
aws emr create-cluster --release-label emr-7.9.0 \ --applications Name=Trino \ --region <region> \ --name Trino_Iceberg_Cluster \ --bootstrap-actions '[{"Path":"s3://<S3-bucket-name>/bootstrap.sh","Name":"Add iceberg.properties"}]' \ --instance-groups '[{"InstanceGroupType":"MASTER","InstanceCount":1,"InstanceType":"m5.xlarge"},{"InstanceGroupType":"CORE","InstanceCount":3,"InstanceType":"m5.xlarge"}]' \ --service-role "<IAM-service-role>" \ --ec2-attributes '{"KeyName":"<key-name>","InstanceProfile":"<EMR-EC2-instance-profile>"}'
où vous remplacez :
-
<S3-bucket-name>
avec le nom de votre compartiment S3 -
<region>
avec votre spécifique Région AWS -
<key-name>
avec votre paire de clés. Si la paire de clés n'existe pas, elle sera créée. -
<IAM-service-role>
avec votre rôle de service Amazon EMR qui respecte le principe du moindre privilège. -
<EMR-EC2-instance-profile>
avec votre profil d'instance.
-
-
Lorsque le cluster Amazon EMR a été initialisé, vous pouvez initialiser une session Trino en exécutant la commande suivante :
trino-cli
-
Dans la CLI Trino, vous pouvez consulter les catalogues en exécutant :
SHOW CATALOGS;
Création de tables Iceberg
Pour créer une table Iceberg, vous pouvez utiliser l'CREATE TABLE
instruction. Voici un exemple de création d'une table partitionnée utilisant le partitionnement caché d'Iceberg :
CREATE TABLE iceberg.iceberg_db.iceberg_table ( userid int, firstname varchar, city varchar) WITH ( format = 'PARQUET', partitioning = ARRAY['city', 'bucket(userid, 16)'], location = 's3://<S3-bucket>/<prefix>');
Note
Si vous ne spécifiez pas le format, la iceberg.file-format
valeur que vous avez configurée dans la section précédente sera utilisée.
Pour insérer des données, utilisez la INSERT INTO
commande. Voici un exemple :
INSERT INTO iceberg.iceberg_db.iceberg_table (userid, firstname, city) VALUES (1001, 'John', 'New York'), (1002, 'Mary', 'Los Angeles'), (1003, 'Mateo', 'Chicago'), (1004, 'Shirley', 'Houston'), (1005, 'Diego', 'Miami'), (1006, 'Nikki', 'Seattle'), (1007, 'Pat', 'Boston'), (1008, 'Terry', 'San Francisco'), (1009, 'Richard', 'Denver'), (1010, 'Pat', 'Phoenix');
Lecture depuis les tables Iceberg
Vous pouvez consulter le dernier statut de votre table Iceberg à l'aide d'une SELECT
instruction, comme suit :
SELECT * FROM iceberg.iceberg_db.iceberg_table;
Insérer des données dans des tables Iceberg
Vous pouvez effectuer une opération upsert (insérer simultanément de nouveaux enregistrements et mettre à jour les enregistrements existants) à l'aide de l'MERGE INTO
instruction. Voici un exemple :
MERGE INTO iceberg.iceberg_db.iceberg_table target USING ( VALUES (1001, 'John Updated', 'Boston'), -- Update existing user (1002, 'Mary Updated', 'Seattle'), -- Update existing user (1011, 'Martha', 'Portland'), -- Insert new user (1012, 'Paulo', 'Austin') -- Insert new user ) AS source (userid, firstname, city) ON target.userid = source.userid WHEN MATCHED THEN UPDATE SET firstname = source.firstname, city = source.city WHEN NOT MATCHED THEN INSERT (userid, firstname, city) VALUES (source.userid, source.firstname, source.city);
Supprimer des enregistrements des tables Iceberg
Pour supprimer des données d'une table Iceberg, utilisez l'DELETE FROM
expression et spécifiez un filtre correspondant aux lignes à supprimer. Voici un exemple :
DELETE FROM iceberg.iceberg_db.iceberg_table WHERE userid IN (1003, 1004);
Interrogation des métadonnées d'une table Iceberg
Iceberg fournit un accès à ses métadonnées via SQL. Vous pouvez accéder aux métadonnées d'une table donnée (<table_name>
) en interrogeant l'espace de noms"<table_name>.$<metadata_table>"
. Pour obtenir la liste complète des tables de métadonnées, consultez la section Inspection des tables
Voici un exemple de liste de requêtes permettant d'inspecter les métadonnées d'Iceberg :
SELECT FROM iceberg.iceberg_db."iceberg_table$snapshots"; SELECT FROM iceberg.iceberg_db."iceberg_table$history"; SELECT FROM iceberg.iceberg_db."iceberg_table$partitions"; SELECT FROM iceberg.iceberg_db."iceberg_table$files"; SELECT FROM iceberg.iceberg_db."iceberg_table$manifests"; SELECT FROM iceberg.iceberg_db."iceberg_table$refs"; SELECT * FROM iceberg.iceberg_db."iceberg_table$metadata_log_entries";
Par exemple, cette requête :
SELECT * FROM iceberg.iceberg_db."iceberg_table$snapshots";
fournit le résultat :

Utiliser le voyage dans le temps
Chaque opération d'écriture (insertion, mise à jour, modification ou suppression) dans une table Iceberg crée un nouvel instantané. Vous pouvez ensuite utiliser ces instantanés pour voyager dans le temps, pour revenir dans le temps et vérifier le statut d'un tableau dans le passé.
La requête de voyage dans le temps suivante affiche le statut d'une table en fonction d'un paramètre spécifique snapshot_id
:
SELECT * FROM iceberg.iceberg_db.iceberg_table FOR VERSION AS OF 241938428756831817;
La requête de voyage dans le temps suivante affiche le statut d'une table en fonction d'un horodatage spécifique :
SELECT * FROM iceberg.iceberg_db.iceberg_table FOR TIMESTAMP AS OF TIMESTAMP '2025-05-28 16:09:40.268 UTC'
Considérations relatives à l'utilisation d'Iceberg avec Trino
Les opérations d'écriture de Trino sur les tables Iceberg suivent le merge-on-readdesign, de sorte qu'elles créent des fichiers de suppression positionnels au lieu de réécrire des fichiers de données entiers affectés par les mises à jour ou les suppressions. Si vous souhaitez utiliser copy-on-write cette approche, pensez à utiliser Spark pour les opérations d'écriture.