- Formato e interfaz de código abierto diseñado para serializar e intercambiar operaciones estructuradas de procesamiento de datos (álgebra relacional, planes de consulta, etc.) entre distintas bases de datos y motores de análisis/consulta
- Está siendo adoptado e incorporado con el objetivo de intercambiar planes de consulta/ejecución y asegurar compatibilidad entre sistemas distintos en varios motores de BD, procesamiento distribuido y consulta como DuckDB, Spark, DataFusion y Sirius
- Expresa los planes de ejecución de distintos lenguajes o motores de consulta como SQL, DataFrame y Pandas en un formato neutral/estandarizado (Protocol Buffers, YAML, JSON, etc.), lo que simplifica la integración de plugins y motores de terceros, así como la conexión con aceleradores de hardware
¿Qué es Substrait?
- Proyecto de código abierto que define en un formato estándar los "planes de consulta" (Logical/Physical Plan) de los sistemas de análisis/procesamiento de datos
- Serializa y deserializa con un esquema estándar las estructuras de consulta de diversos lenguajes como SQL, DataFrame y LINQ (por ejemplo: SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter, etc.)
- Como cada base de datos y motor tiene su propio parser y plan de ejecución, existen límites para la interoperabilidad y el uso de aceleradores de hardware → se abstrae mediante un estándar común (representación intermedia)
- Los planes de ejecución de distintos lenguajes y frameworks de consulta, como SQL, DataFrame y Pandas, pueden convertirse al formato Substrait y compartirse
Características principales de Substrait
- Representación neutral de consultas: puede expresar tanto planes de consulta lógicos (operadores lógicos) como físicos (operadores de ejecución)
- Serialización basada en Protocol Buffers (principalmente usando esquemas
.proto), lo que permite un intercambio eficiente de datos en diversos lenguajes y sistemas
- Extensibilidad de motores/plugins: también se pueden ampliar nuevas funciones, operadores y tipos mediante un esquema de plugins
- Integración con aceleración por hardware: facilita la integración a nivel de plan de consulta con motores para GPU/FPGA/aceleradores dedicados (Sirius, Velox, NVIDIA RAPIDS, etc.)
- Interoperabilidad entre plataformas: distintos motores para data lakes, procesamiento distribuido y análisis local pueden aceptar y ejecutar el mismo plan de consulta
¿Por qué es importante Substrait?
- Si cada motor soporta Substrait, la integración del ecosistema se vuelve posible de inmediato sin que cada uno tenga que crear interfaces personalizadas por separado
- Funciona como el "lenguaje común de los planes de consulta/análisis" entre motores y plataformas de datos
- Consulta en una BD → plan Substrait → envío y ejecución en un motor GPU/distribuido o en un acelerador independiente
- Conexión entre motores a nivel de plan de ejecución sin necesidad de convertir o reescribir la consulta
- Aunque aparezcan nuevos motores de consulta, pueden reemplazarse o combinarse fácilmente como "plugins" (flexibilidad para cambiar de motor)
- Unifica distintos lenguajes y entornos de consulta como SQL/Python/consultas distribuidas
- Permite operar combinando varios motores en entornos de clúster/distribuidos (soporte para entornos heterogéneos)
- Al ofrecer una versión en texto, permite analizar fácilmente los planes de consulta o integrarlos con herramientas de visualización
Ejemplos de uso real
- Intercambio de planes de consulta entre un parser SQL y un motor de ejecución (Calcite → Arrow, DuckDB → Sirius, etc.)
- DuckDB: soporta exportar planes de consulta internos a Substrait e importar consultas Substrait desde el exterior
- Sirius: puede recibir directamente el plan de consulta Substrait generado por DuckDB y ejecutar SQL sobre GPU, sin necesidad de parsear ni modificar la consulta
- Ejecución de operaciones de DataFrame (como Pandas) en una base de datos externa
- Creación de herramientas de visualización de planes de consulta de terceros (D3, Web, etc.)
- Velox, Spark, DataFusion, etc.: exportan los planes de consulta de cada motor a Substrait para integrarse con diversos motores de análisis y aceleración
¿Qué estructura tiene técnicamente?
- Los planes de Substrait se definen principalmente con base en Protocol Buffers (
.proto)
- Se componen de LogicalPlan, PhysicalPlan, Rel, Expression, Function, etc.
- Esquemas claros por operador, como Filter, Join, Aggregate, Project y Sort
- Catálogo extensible de funciones/tipos y posibilidad de ampliar UDF (User-Defined Function)
Conclusión
- Substrait es el "estándar de planes de ejecución de consultas" del ecosistema de bases de datos y plataformas de análisis, y es clave para la interoperabilidad entre motores, la aceleración por hardware y la escalabilidad del ecosistema de datos
- Se está consolidando como un estándar base que simplifica la integración de aceleradores de hardware y motores de consulta, y facilita construir infraestructura de análisis de alto rendimiento sin necesidad de parsing o transformación compleja de consultas
Aún no hay comentarios.