Trino
Interrogez des données CSV et Parquet stockées dans le stockage objet RustFS avec Trino et le metastore fichier du connecteur Hive.
Ce guide connecte Trino — le moteur de requêtes SQL distribué — à RustFS via le connecteur Hive avec son metastore basé sur les fichiers et le système de fichiers S3 natif. Vous allez créer un schéma et une table, insérer des lignes, les relire, puis vérifier les objets dans RustFS. Les métadonnées et les fichiers de données résident tous deux dans RustFS. Le flux a été validé avec trinodb/trino:435 et rustfs/rustfs-x86-musl:v2.3.1.
Vous avez besoin de Docker avec le plugin Compose. Ce déploiement est destiné aux tests d’intégration locaux, pas à la production.
Schéma d’architecture
Le connecteur Hive avec hive.metastore=file conserve les métadonnées de schémas et de tables sous forme d’objets JSON sous le répertoire du catalogue, et le système de fichiers S3 natif (fs.s3.enabled) stocke les métadonnées et les données dans RustFS avec un adressage de type chemin (path-style) en HTTP non chiffré.
Créer les fichiers du projet
Créez un répertoire de travail :
mkdir rustfs-trino
cd rustfs-trinoCréez un fichier d’environnement et remplacez les deux valeurs d’identifiants indicatives :
RUSTFS_ACCESS_KEY=<your-access-key>
RUSTFS_SECRET_KEY=<your-secret-key>Utilisez des identifiants dédiés pour le compartiment. N’ajoutez pas le fichier .env au dépôt (ne le versionnez pas).
Créez la configuration du catalogue pour Trino :
connector.name=hive
hive.metastore=file
hive.metastore.catalog.dir=s3://my-bucket/trino-metastore
fs.s3.enabled=true
s3.endpoint=http://rustfs:9000
s3.region=us-east-1
s3.path-style-access=true
s3.aws-access-key=<your-access-key>
s3.aws-secret-key=<your-secret-key>hive.metastore.catalog.dir place le metastore fichier dans le compartiment : les métadonnées et les données résident donc dans RustFS. fs.s3.enabled active le système de fichiers S3 natif ; s3.path-style-access est requis pour le point de terminaison du réseau de conteneurs.
Créez le fichier Compose :
services:
rustfs:
image: rustfs/rustfs-x86-musl:v2.3.1
environment:
RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
RUSTFS_VOLUMES: /data
RUSTFS_ADDRESS: ":9000"
RUSTFS_CONSOLE_ADDRESS: ":9001"
RUSTFS_CONSOLE_ENABLE: "true"
volumes:
- rustfs-data:/data
ports:
- "9000:9000"
- "9001:9001"
healthcheck:
test: ["CMD", "curl", "-sf", "http://127.0.0.1:9000/health"]
interval: 10s
timeout: 5s
retries: 6
start_period: 10s
networks:
- warehouse
create-bucket:
image: rustfs/rc:latest
depends_on:
rustfs:
condition: service_healthy
environment:
RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY}
RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY}
entrypoint:
- /bin/sh
- -c
- |
until /usr/bin/rc alias set rustfs http://rustfs:9000 "$${RUSTFS_ACCESS_KEY}" "$${RUSTFS_SECRET_KEY}"; do
echo "Waiting for RustFS..."
sleep 2
done
/usr/bin/rc ls rustfs/my-bucket >/dev/null 2>&1 || /usr/bin/rc mb rustfs/my-bucket
networks:
- warehouse
trino:
image: trinodb/trino:435
volumes:
- ./hive.properties:/etc/trino/catalog/hive.properties:ro
- metastore-data:/data/metastore
depends_on:
create-bucket:
condition: service_completed_successfully
networks:
- warehouse
networks:
warehouse:
volumes:
rustfs-data:
metastore-data:Démarrer le déploiement
Vérifiez le fichier Compose avant de démarrer les conteneurs :
docker compose configDémarrez les services et attendez la fin de l’initialisation du compartiment :
docker compose up -d
docker compose ps -aTrino est démarré quand le journal du serveur indique SERVER STARTED. Le conteneur s’exécute sous l’utilisateur trino (uid 1000) ; assurez-vous que le volume du metastore est inscriptible :
docker compose exec trino id
docker compose exec trino ls -la /data/metastoreCréer un schéma et une table
Créez le schéma sans emplacement explicite — Trino le place sous le répertoire du catalogue dans RustFS :
docker compose exec trino trino --execute \
"CREATE SCHEMA hive.demo"Créez une table et insérez cinq lignes :
docker compose exec trino trino --execute \
"CREATE TABLE hive.demo.events (id bigint, label varchar) WITH (format = 'parquet')"
docker compose exec trino trino --execute \
"INSERT INTO hive.demo.events VALUES (1,'alpha'),(2,'bravo'),(3,'charlie'),(4,'delta'),(5,'echo')"INSERT: 5 rowsInterroger les données
Relisez les lignes :
docker compose exec trino trino --execute \
"SELECT * FROM hive.demo.events ORDER BY id""1","alpha"
"2","bravo"
"3","charlie"
"4","delta"
"5","echo"Vérifier les objets dans RustFS
Listez le préfixe du metastore via l’image d’initialisation du compartiment :
docker compose run --rm --entrypoint /bin/sh create-bucket -c \
'/usr/bin/rc alias set rustfs http://rustfs:9000 "$RUSTFS_ACCESS_KEY" "$RUSTFS_SECRET_KEY" >/dev/null && /usr/bin/rc ls rustfs/my-bucket/trino-metastore --recursive'[2026-09-21 01:55:16] 155 B trino-metastore/.demo.trinoSchema
[2026-09-21 01:55:19] 474 B trino-metastore/demo/events/.trinoPermissions/user_trino
[2026-09-21 01:55:25] 1007 B trino-metastore/demo/events/.trinoSchema
[2026-09-21 01:55:25] 432 B trino-metastore/demo/events/20260921_..._cb761cec-...parquetVous pouvez également parcourir le préfixe dans la Console RustFS :

Utiliser RustFS S3 Tables
RustFS S3 Tables fournit un catalogue REST Apache Iceberg intégré, permettant à Trino de traiter un compartiment de tables (table bucket) comme un entrepôt Iceberg géré tandis que les données restent dans RustFS. Activez un compartiment de tables et connectez le connecteur Iceberg de Trino au catalogue REST comme décrit dans S3 Tables : l’URI du catalogue REST est http://<rustfs-host>:9000/iceberg, le warehouse est le nom du compartiment, et les requêtes de catalogue (AWS Signature Version 4, nom de signature s3) comme l’accès aux fichiers S3 utilisent l’adressage de type chemin (path-style).
Selon la matrice de prise en charge S3 Tables, Trino a fait l’objet d’une vérification en lecture seule face au catalogue ; validez la compatibilité en écriture et la version exacte de Trino que vous déployez avant d’adopter ce chemin en production.
Arrêter ou réinitialiser la pile
Arrêtez les conteneurs en conservant le volume de données RustFS :
docker compose downPour supprimer les métadonnées et données stockées et repartir d’un volume RustFS vide, ajoutez explicitement --volumes :
docker compose down --volumesDépannage
Erreurs de configuration pour fs.native-s3.enabled ou fs.s3.enabled
Le nom de la propriété du système de fichiers S3 natif a changé selon les versions de Trino : Trino 435 utilise fs.native-s3.enabled, les versions plus récentes fs.s3.enabled. Ce guide épingle trinodb/trino:435, utilisez donc fs.native-s3.enabled.
« Table directory must be ... » lors de la création d’une table
Avec le metastore fichier, les emplacements des tables doivent rester sous hive.metastore.catalog.dir. Créez le schéma sans emplacement explicite, ou pointez l’emplacement du schéma vers un répertoire du même préfixe de compartiment.
Hive CSV storage format only supports VARCHAR
Le format CSV rejette les colonnes non textuelles. Utilisez format = 'parquet' pour les tables typées, comme dans ce guide.
Réponses AccessDenied ou 403
Vérifiez que les identifiants de hive.properties correspondent aux identifiants RustFS et que la tâche create-bucket s’est terminée avec succès :
docker compose logs create-bucketÉtapes suivantes
- Consultez les notes de compatibilité S3 avant d’adopter d’autres opérations S3.
- Créez des identifiants de production dédiés avec la gestion des clés d’accès.
- Suivez la documentation Trino pour connecter des outils BI et ajouter des catalogues de stockage objet.