AccueilBlogTest technique Trino : SQL fédéré sur sources multiples
Guide recrutement data

Test technique Trino : SQL fédéré sur sources multiples

Trino (ex-Presto) est le moteur SQL de référence pour interroger plusieurs sources de données depuis une seule requête. En entretien, on évalue la capacité à l architecturer et l optimiser.

Data Builder·Juin 2025·6 min de lecture·Data Engineer
Sommaire
  1. Architecture Trino
  2. Connecteurs
  3. Query Federation
  4. Optimisation
  5. Trino vs Spark SQL
  6. Cas d usage
  7. Grille

1Architecture Trino : coordinator et workers

Question discriminante

Comment est architecturé Trino ? En quoi diffère-t-il de Spark sur ce point ?

  • Coordinator — parse et optimise les requêtes SQL (query planner), génère un plan d'exécution distribué, distribue les fragments aux workers
  • Workers — exécutent les fragments de requête, communiquent directement entre eux (pas via le coordinator). Échange de données en mémoire via pipeline
  • Pull model — les workers tirent les données des connecteurs à la demande, sans charger tout en mémoire d'abord
  • Pas de stockage — Trino ne stocke rien. Tout est lu depuis les connecteurs à chaque requête. C'est un moteur de requête, pas un stockage
  • vs Spark — Trino : latence faible (<1s possible), SQL interactif, query federation native. Spark : batch massif, ML, streaming, Python-first
# Déploiement Trino minimal (docker-compose) version: '3' services: trino-coordinator: image: trinodb/trino:latest ports: ["8080:8080"] volumes: - ./etc/coordinator:/etc/trino environment: - TRINO_NODE_TYPE=coordinator trino-worker: image: trinodb/trino:latest volumes: - ./etc/worker:/etc/trino depends_on: [trino-coordinator] deploy: replicas: 3

2Connecteurs : la richesse de Trino

Question discriminante

Quels connecteurs Trino supportez-vous ? Comment les configurez-vous ?

## etc/catalog/iceberg.properties connector.name=iceberg hive.metastore.uri=thrift://hive-metastore:9083 ## etc/catalog/postgres.properties connector.name=postgresql connection-url=jdbc:postgresql://postgres:5432/analytics connection-user=trino_user connection-password=${ENV:POSTGRES_PASSWORD} ## etc/catalog/kafka.properties connector.name=kafka kafka.nodes=kafka1:9092,kafka2:9092 kafka.table-description-dir=/etc/trino/kafka ## etc/catalog/bigquery.properties connector.name=bigquery bigquery.project-id=mon-projet-gcp -- Requête fédérée : join entre Iceberg (S3) et PostgreSQL (OLTP) SELECT i.order_id, i.amount, p.customer_email, p.segment FROM iceberg.analytics.fct_orders i JOIN postgresql.crm.customers p ON i.customer_id = p.id WHERE i.order_date >= DATE '2025-01-01' AND p.country = 'FR';
  • Connecteurs disponibles — Hive, Iceberg, Delta Lake, PostgreSQL, MySQL, Kafka, MongoDB, Elasticsearch, BigQuery, Redshift, S3 (Hive connector)
  • Catalog = connecteur configuré — chaque catalog mappe vers une source. Notation : catalog.schema.table
  • Predicate pushdown — Trino pousse les filtres aux connecteurs qui le supportent (PostgreSQL, MySQL). Réduit les données transférées

3Query Federation : les pièges de performance

Question discriminante

Quels sont les pièges de performance dans une requête Trino qui joint plusieurs sources ?

  • Pas de pushdown cross-sources — un filtre sur la table PostgreSQL ne peut pas être poussé vers la table Iceberg. Trino doit rapatrier les données des deux côtés
  • Broadcast join automatique — Trino broadcaste automatiquement la petite table. Si les deux sont grandes : shuffle massif et lent
  • Matérialiser les jointures coûteuses — pré-joindre les sources inter-catalogs dans une table Iceberg. Requêter la table pré-jointe
  • ANALYZE régulier — les statistiques de table (row count, NDV par colonne) guident le query planner. Sans statistiques, le planner choisit mal
  • Limiter les colonnes transférées — ne SELECT que les colonnes nécessaires. Trino ne facture pas à l'octet mais le réseau est le goulot d'étranglement

4Optimisation des requêtes Trino

Question discriminante

Comment optimisez-vous une requête Trino lente ? Quels outils utilisez-vous ?

-- 1. EXPLAIN ANALYZE : voir le plan réel d'exécution avec statistiques EXPLAIN ANALYZE SELECT region, SUM(amount) FROM iceberg.analytics.orders WHERE order_date >= DATE '2025-01-01' GROUP BY region; -- Chercher : partition pruning, broadcast vs hash join, spill to disk -- 2. Forcer le broadcast join (quand Trino choisit mal) SELECT /*+ BROADCAST(dim) */ f.*, dim.category_name FROM iceberg.analytics.fct_orders f JOIN iceberg.analytics.dim_categories dim ON f.category_id = dim.id; -- 3. Mettre à jour les statistiques ANALYZE iceberg.analytics.orders; -- 4. Éviter les fonctions sur les colonnes partitionnées -- MAL : WHERE YEAR(order_date) = 2025 (pas de pruning) -- BIEN : WHERE order_date >= DATE '2025-01-01' (pruning actif) -- 5. Requêtes via l'interface Web (port 8080) -- Query details, stage timing, operator stats

5Trino vs Spark SQL : quand utiliser quoi

Question discriminante

Quels sont les critères de décision entre Trino et Spark SQL ?

CritèreTrinoSpark SQL
Latence<1s possiblePlusieurs secondes minimum
Query federationNatif (multi-sources)Limité, complexe
Très gros volumes batchPossible mais sous-optimalExcellent
StreamingNonOui (Structured Streaming)
ML / PythonNonOui (MLlib, PySpark)
MémoireEn-mémoire uniquement (spill possible)Spill to disk nativement
Cas typiqueBI interactive, exploration, federation multi-sourcesETL batch, ML, Streaming

6Cas d'usage Trino en production

Question discriminante

Dans quels contextes concrètement déployez-vous Trino ?

  • Remplacement de Hive — Trino est 10-100x plus rapide que Hive pour les requêtes ad-hoc sur S3/HDFS. Migration souvent la première étape vers le cloud
  • Query layer unifié — une seule interface SQL pour PostgreSQL, S3/Iceberg, MongoDB, Kafka. Les data analysts font leurs joins cross-sources en SQL standard
  • Amazon Athena — basé sur Trino (ex-Presto). Serverless, payer par TB scanné. Idéal pour les organisations AWS sans envie de gérer Trino
  • Starburst Galaxy — version managée cloud de Trino. Pour les équipes sans Ops data
  • Data mesh layer — Trino comme couche de virtualisation qui expose des données de domaines différents sans les centraliser physiquement
  • Amazon Athena - base sur Trino (ex-Presto). Serverless, payer par TB scanne. Ideal pour les organisations AWS sans envie de gerer un cluster Trino
  • Starburst Galaxy - version managee cloud de Trino. Pour les equipes sans Ops data qui veulent la federation multi-sources
  • Data mesh layer - Trino comme couche de virtualisation qui expose des donnees de domaines differents sans les centraliser physiquement
  • ANALYZE pour les stats - les statistiques de table (row count, NDV par colonne) guident le query planner. Sans statistiques, le planner choisit mal les strategies de join
  • Remplacement Hive - Trino est 10-100x plus rapide que Hive pour les requetes ad-hoc sur S3/HDFS. Migration souvent la premiere etape vers le cloud

7Grille par niveau

NiveauMaîtriseSignal GONO-GO
ConfirméArchitecture coordinator/workers, connecteurs, requêtes inter-sourcesA écrit des requêtes fédérées Trino, comprend le pull model et le catalog systemConfond Trino et Spark, ne sait pas ce qu'est un catalog Trino
SeniorOptimisation, statistics, broadcast hints, architecture Trino vs SparkUtilise EXPLAIN ANALYZE, matérialise les jointures coûteuses, justifie Trino vs Spark selon le casNe sait pas pourquoi une jointure cross-sources est lente dans Trino

Vous recrutez un Data Engineer Trino ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.