6 pontos por xguru 2025-07-01 | Ainda não há comentários. | Compartilhar no WhatsApp
  • 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.

Ainda não há comentários.