- Formato e interface open source projetados para serializar e trocar operações estruturadas de processamento de dados (álgebra relacional, planos de consulta etc.) entre diferentes bancos de dados e mecanismos de análise/consulta
- Está sendo adotado e incorporado por diversos DBs, mecanismos de processamento distribuído e engines de consulta, como DuckDB, Spark, DataFusion e Sirius, com o objetivo de trocar planos de consulta/execução entre sistemas diferentes e garantir compatibilidade
- Representa planos de execução de diferentes linguagens de consulta ou engines, como SQL, DataFrame e Pandas, em um formato neutro/padronizado (Protocol Buffers, YAML, JSON etc.), simplificando a integração com plugins, engines de terceiros e aceleradores de hardware
O que é Substrait?
- Projeto open source que define o "plano de consulta" (Logical/Physical Plan) de sistemas de análise/processamento de dados em um formato padrão
- Serializa/desserializa em um schema padrão estruturas de consulta de várias linguagens, como SQL, DataFrame e LINQ (ex.: SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter etc.)
- Como cada banco de dados e engine tem parser de consulta e plano de execução diferentes, há limites para interoperabilidade e uso de aceleradores de hardware → abstrai isso em um padrão comum (representação intermediária)
- É possível converter e compartilhar no formato Substrait os planos de execução de diferentes linguagens e frameworks de consulta, como SQL, DataFrame e Pandas
Principais características do Substrait
- Representação neutra de consultas: consegue expressar tanto planos lógicos (operadores lógicos) quanto físicos (operadores de execução)
- Serialização baseada em Protocol Buffers (principalmente com schemas .proto), permitindo troca eficiente de dados entre várias linguagens e sistemas
- Extensibilidade para engines/plugins: novas funções, operadores e tipos também podem ser expandidos no modelo de plugin
- Integração com aceleração por hardware: pode ser integrado com facilidade, no nível do plano de consulta, a engines para GPU/FPGA/aceleradores dedicados (Sirius, Velox, NVIDIA RAPIDS etc.)
- Integração entre plataformas: vários engines, como data lakes, processamento distribuído e análise local, podem receber e executar o mesmo plano de consulta
Por que o Substrait é importante?
- Em vez de cada engine criar uma interface customizada separada, basta suportar o Substrait para possibilitar integração imediata com o ecossistema
- Atua como a "linguagem comum dos planos de consulta/análise" entre engines e plataformas de dados
- Consulta no DB → plano Substrait → envio e execução em engine GPU/distribuído ou acelerador separado
- Conecta engines no nível do plano de execução, sem necessidade de transformação/regravação da consulta
- Mesmo que surja uma nova engine de consulta, ela pode ser facilmente substituída/combinada como "plugin" (flexibilidade na troca de engine)
- Unifica diferentes linguagens e ambientes de consulta, como SQL/Python/consultas distribuídas
- Permite operação mista de várias engines em ambientes de cluster/distribuídos (suporte a ambientes heterogêneos)
- Como oferece uma versão textual, é fácil analisar o plano de consulta ou integrá-lo a ferramentas de visualização
Exemplos de uso real
- Troca de planos de consulta entre parser SQL e engine de execução (Calcite → Arrow, DuckDB → Sirius etc.)
- DuckDB: suporta exportar o plano de consulta interno para Substrait e importar consultas Substrait externas
- Sirius: pode receber diretamente o plano de consulta Substrait gerado no DuckDB e executar SQL na GPU, sem necessidade de parsing ou modificação da consulta
- Executar operações de DataFrame (como Pandas) em um banco de dados externo
- Criar ferramentas de visualização de planos de consulta de terceiros (D3, Web etc.)
- Velox, Spark, DataFusion etc.: exportam os planos de consulta de cada engine para Substrait e se integram com várias engines de análise e aceleração
Tecnicamente, qual é a estrutura?
- O plano Substrait é definido principalmente com base em Protocol Buffers (.proto)
- É composto por LogicalPlan, PhysicalPlan, Rel, Expression, Function etc.
- Schema claro para cada operador, como Filter, Join, Aggregate, Project e Sort
- Catálogo expansível de funções/tipos e possibilidade de extensão com UDF (User-Defined Function)
Conclusão
- O Substrait é o "padrão de plano de execução de consultas" do ecossistema de bancos de dados e plataformas analíticas, sendo peça-chave para interoperabilidade entre engines, aceleração por hardware e expansão do ecossistema de dados
- Está se consolidando como padrão base para simplificar a integração de aceleradores de hardware e engines de consulta, facilitando a construção de infraestrutura analítica de alto desempenho sem parsing/transformação complexa de consultas
Ainda não há comentários.