6 Punkte von xguru 2025-07-01 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Ein Open-Source-Format und Interface, das dafür entwickelt wurde, strukturierte Datenverarbeitungsoperationen (relationale Algebra, Query-Pläne usw.) zu serialisieren und zwischen verschiedenen Datenbanken, Analyse- und Query-Engines auszutauschen
  • Wird von verschiedenen DB-, Distributed-Processing- und Query-Engines wie DuckDB, Spark, DataFusion und Sirius eingeführt bzw. übernommen, um den Austausch von Queries/Ausführungsplänen und Kompatibilität zwischen unterschiedlichen Systemen sicherzustellen
  • Stellt Ausführungspläne aus unterschiedlichen Query-Sprachen oder Engines wie SQL, DataFrame und Pandas in einem neutralen/standardisierten Format (Protocol Buffers, YAML, JSON usw.) dar und vereinfacht damit die Integration von Plugins und Third-Party-Engines sowie die Anbindung von Hardware-Beschleunigern

Was ist Substrait?

  • Ein Open-Source-Projekt, das den „Query-Plan“ (Logical/Physical Plan) von Datenanalyse- und Datenverarbeitungssystemen als Standardformat definiert
    • Serialisiert/deserialisiert Query-Strukturen aus verschiedenen Sprachen wie SQL, DataFrame und LINQ (z. B. SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter usw.) in ein Standardschema
  • Da Query-Parser und Ausführungspläne je nach Datenbank und Engine unterschiedlich sind, gibt es Grenzen bei Interoperabilität und der Nutzung von Hardware-Beschleunigern → Abstraktion über einen gemeinsamen Standard (Intermediate Representation)
  • Ausführungspläne aus unterschiedlichen Query-Sprachen und Frameworks wie SQL, DataFrame und Pandas lassen sich ins Substrait-Format konvertieren und gemeinsam nutzen

Die wichtigsten Merkmale von Substrait

  • Neutrale Query-Repräsentation: Sowohl logische (logische Operatoren) als auch physische (Ausführungsoperatoren) Query-Pläne können dargestellt werden
  • Protocol-Buffers-basierte Serialisierung (vor allem mit .proto-Schemas), die effizienten Datenaustausch in verschiedenen Sprachen und Systemen ermöglicht
  • Erweiterbarkeit für Engines/Plugins: Neue Funktionen, Operatoren und Typen lassen sich ebenfalls per Plugin-Modell erweitern
  • Anbindung von Hardware-Beschleunigern: Einfache Integration mit Engines für GPU/FPGA/spezialisierte Beschleuniger auf Ebene des Query-Plans (Sirius, Velox, NVIDIA RAPIDS usw.)
  • Plattformübergreifende Interoperabilität: Verschiedene Engines für Data Lakes, Distributed Processing oder lokale Analysen können denselben Query-Plan übernehmen und ausführen

Warum ist Substrait wichtig?

  • Statt dass jede Engine eigene Custom-Interfaces baut, wird mit Unterstützung von Substrait sofort eine Integration ins Ökosystem möglich
  • Dient als „gemeinsame Sprache für Query- und Analyseausführungspläne“ zwischen Daten-Engines und Plattformen
    • Query in der DB → Substrait-Plan → Weitergabe und Ausführung auf GPU-/Distributed-Engines oder separaten Beschleunigern
    • Verbindung zwischen Engines auf „Ausführungsplan-Ebene“, ohne dass Query-Konvertierung oder -Umschreibung nötig ist
  • Auch wenn neue Query-Engines entstehen, lassen sie sich leicht als „Plugins“ austauschen oder kombinieren (Flexibilität beim Engine-Wechsel)
  • Vereinheitlicht verschiedene Query-Sprachen und Umgebungen wie SQL/Python/Distributed Query
  • Ermöglicht den gemischten Betrieb verschiedener Engines in Cluster- und Distributed-Umgebungen (Unterstützung heterogener Umgebungen)
  • Durch die Bereitstellung einer Textversion lassen sich Query-Pläne leicht analysieren oder mit Visualisierungstools verknüpfen

Beispiele aus der Praxis

  • Austausch von Query-Plänen zwischen SQL-Parser und Ausführungs-Engine (Calcite → Arrow, DuckDB → Sirius usw.)
    • DuckDB: Unterstützt den Export interner Query-Pläne nach Substrait sowie den Import externer Substrait-Queries
    • Sirius: Kann einen in DuckDB erzeugten Substrait-Query-Plan direkt übernehmen und SQL auf der GPU ausführen, ohne Query-Parsing oder Änderungen
  • Ausführung von DataFrame-Operationen (z. B. Pandas) in externen Datenbanken
  • Entwicklung von Third-Party-Tools zur Visualisierung von Query-Plänen (D3, Web usw.)
  • Velox, Spark, DataFusion usw.: Exportieren die Query-Pläne ihrer jeweiligen Engines nach Substrait und integrieren sie so mit verschiedenen Analyse- und Beschleuniger-Engines

Wie ist es technisch aufgebaut?

  • Substrait-Pläne werden hauptsächlich auf Basis von Protocol Buffers (.proto) definiert
    • Bestehen aus LogicalPlan, PhysicalPlan, Rel, Expression, Function usw.
    • Klare Schemas je Operator wie Filter, Join, Aggregate, Project und Sort
  • Erweiterbarer Funktions-/Typkatalog sowie Erweiterbarkeit für UDFs (User-Defined Functions)

Fazit

  • Substrait ist der „Standard für Query-Ausführungspläne“ im Ökosystem von Datenbanken und Analyseplattformen und ein zentraler Baustein für Interoperabilität zwischen Engines, Hardware-Beschleunigung und die Erweiterbarkeit des Datenökosystems
  • Es etabliert sich als grundlegender Standard zur Vereinfachung der Anbindung von Hardware-Beschleunigern und der Integration von Query-Engines und erleichtert den Aufbau einer hochperformanten Analyseinfrastruktur auch ohne komplexes Query-Parsing oder aufwendige Konvertierung

Noch keine Kommentare.

Noch keine Kommentare.