- Format et interface open source conçus pour sérialiser et échanger des opérations structurées de traitement de données (algèbre relationnelle, plans de requête, etc.) entre différentes bases de données et différents moteurs d’analyse/de requête
- Adopté et en cours d’intégration dans divers moteurs de BD, de traitement distribué et de requête comme DuckDB, Spark, DataFusion et Sirius, afin de permettre l’échange des requêtes/plans d’exécution et d’assurer la compatibilité entre systèmes différents
- Les plans d’exécution de différents langages ou moteurs de requête, comme SQL, DataFrame ou Pandas, sont représentés dans un format neutre et standardisé (Protocol Buffers, YAML, JSON, etc.), ce qui simplifie l’intégration de plugins et de moteurs tiers, ainsi que la connexion avec des accélérateurs matériels
Qu’est-ce que Substrait ?
- Projet open source qui définit dans un format standard les "plans de requête" (Logical/Physical Plan) des systèmes d’analyse et de traitement des données
- Sérialise/désérialise dans un schéma standard les structures de requête de divers langages comme SQL, DataFrame ou LINQ (par ex. SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter, etc.)
- Comme chaque base de données ou moteur a son propre parseur de requêtes et son propre plan d’exécution, l’interopérabilité et l’usage des accélérateurs matériels sont limités → abstraction via un standard commun (représentation intermédiaire)
- Les plans d’exécution de différents langages et frameworks de requête, comme SQL, DataFrame ou Pandas, peuvent être convertis au format Substrait puis partagés
Principales caractéristiques de Substrait
- Représentation neutre des requêtes : permet d’exprimer à la fois les plans de requête logiques (opérateurs logiques) et physiques (opérateurs d’exécution)
- Sérialisation basée sur Protocol Buffers (principalement via des schémas .proto), permettant des échanges de données efficaces entre divers langages et systèmes
- Extensibilité des moteurs/plugins : de nouvelles fonctions, de nouveaux opérateurs et types peuvent aussi être ajoutés via un mécanisme de plugin
- Intégration avec l’accélération matérielle : intégration aisée au niveau des plans de requête avec des moteurs pour GPU/FPGA/accélérateurs dédiés (Sirius, Velox, NVIDIA RAPIDS, etc.)
- Interopérabilité entre plateformes : divers moteurs de data lake, de traitement distribué ou d’analyse locale peuvent accepter et exécuter le même plan de requête
Pourquoi Substrait est-il important ?
- Sans que chaque moteur ait à créer une interface custom distincte, le simple support de Substrait permet une intégration immédiate dans l’écosystème
- Sert de "langage commun des plans d’exécution de requêtes et d’analyse" entre moteurs et plateformes de données
- Requête depuis la BD → plan Substrait → transmission et exécution sur un moteur GPU/distribué, un accélérateur dédié, etc.
- Connexion entre moteurs au niveau du plan d’exécution, sans besoin de transformation ou de réécriture de la requête
- Même lorsqu’un nouveau moteur de requête apparaît, il peut facilement être remplacé ou combiné sous forme de plugin (souplesse de remplacement des moteurs)
- Unifie divers langages et environnements de requête : SQL / Python / requêtes distribuées, etc.
- Permet d’exploiter un mélange de moteurs dans des environnements cluster/distribués (prise en charge des environnements hétérogènes)
- Une version texte est également fournie, ce qui facilite l’analyse des plans de requête ou leur intégration avec des outils de visualisation
Exemples d’usage concret
- Échange de plans de requête entre parseur SQL et moteur d’exécution (Calcite → Arrow, DuckDB → Sirius, etc.)
- DuckDB : prise en charge de l’export des plans de requête internes vers Substrait et de l’import de requêtes Substrait externes
- Sirius : peut recevoir tel quel un plan de requête Substrait généré par DuckDB et exécuter du SQL sur GPU, sans parsing ni modification de la requête
- Exécution d’opérations de dataframe (Pandas, etc.) dans une base de données externe
- Création d’outils tiers de visualisation de plans de requête (D3, Web, etc.)
- Velox, Spark, DataFusion, etc. : exportent les plans de requête de chaque moteur vers Substrait pour une intégration avec divers moteurs d’analyse et d’accélération
Quelle est son architecture technique ?
- Les plans Substrait sont principalement définis sur une base Protocol Buffers (.proto)
- Composés de LogicalPlan, PhysicalPlan, Rel, Expression, Function, etc.
- Schéma clair pour chaque opérateur : Filter, Join, Aggregate, Project, Sort, etc.
- Catalogue extensible de fonctions/types et prise en charge de l’extension UDF (User-Defined Function)
Conclusion
- Substrait s’impose comme le "standard des plans d’exécution de requêtes" pour l’écosystème des bases de données et des plateformes analytiques, au cœur de l’interopérabilité entre moteurs, de l’accélération matérielle et de l’extensibilité de l’écosystème data
- Il s’établit comme un standard de base qui simplifie l’intégration des accélérateurs matériels et des moteurs de requête, et facilite la mise en place d’infrastructures analytiques haute performance sans parsing ni transformation complexes des requêtes
Aucun commentaire pour le moment.