Zurück zur Startseite

WebAssembly SQL für Excel und Parquet im Browser

Der Artikel beschreibt eine C++ SQL-Engine auf WebAssembly zum Parsen von Excel, CSV, Parquet im Browser. Workbook mountet Dateien als virtuelle Tabellen mit JOIN-Unterstützung. API-Beispiele, Metadaten und Anwendungsfälle für offline Analysen werden bereitgestellt.

C++ SQL im Browser: Parsing von Parquet und Excel auf WebAssembly
Advertisement 728x90

# SQL-Analyse von Excel, CSV und Parquet im Browser mit C++ und WebAssembly

WebAssembly ermöglicht das Ausführen von C++17-Code zum Parsen tabellarischer Daten direkt im Browser. Die auf excel_loader basierende Lösung virtualisiert Dateien als SQL-Tabellen: XLSX, Parquet und CSV werden gemountet, ohne sie vollständig in den Speicher zu laden. Dadurch entfallen UI-Blockierungen und Speicherlecks, die in JS-Bibliotheken üblich sind, und die Benutzerdaten bleiben privat auf dem Gerät.

Die Architektur kombiniert einen C++-Kern mit Emscripten-Interop und einem JS-Wrapper. Der Engine erkennt das Format anhand der Blob-Signatur und unterstützt JOINs zwischen heterogenen Dateien in einem einzigen Workbook.

Architektur: Vom Parsing zu SQL-Abfragen

Der C++-Kern von excel_loader übernimmt das Parsing mit nativen Bibliotheken, baut virtuelle Tabellen auf und plant Abfragen. Emscripten exportiert die Klassen ExcelLoaderEngine, Workbook und QueryResult nach JS. Die Client-Schicht übergibt einen ArrayBuffer aus der Eingabe und erhält JSON-Ergebnisse.

Google AdInline article slot

Workbook ist die zentrale Abstraktion: ein Container für mehrere Dateien, die als einzige Datenbank behandelt werden. Unterstützte Formate:

  • Excel/Office: XLSX, XLSB, XLS, ODS
  • Flache Dateien: CSV, TSV, TXT
  • Spaltenorientiert/BigData: Parquet, DuckDB, ORC, AVRO
  • Legacy-DBs: SQLite, DBF, MDB, ACCDB
  • NoSQL/Dokumente: JSON, JSONL, XML, HTML

Die automatische Format-Erkennung vereinfacht die Integration: Das Frontend übergibt einen Uint8Array ohne Vorverarbeitung.

Praktische API-Implementierung

Die Initialisierung des WASM-Moduls und das Laden einer Datei erfordert minimalen Code. Die Engine erkennt den Typ automatisch.

Google AdInline article slot
// Initialization WASM-modulya
const module = await ExcelLoaderModule();
const engine = new module.ExcelLoaderEngine();

// Poluchaem file from standartnogo input
const fileInput = document.getElementById("fileUploader");
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();

// Otkryvaem file how Workbook
const workbook = engine.openSingleFile(
    file.name, 
    new Uint8Array(arrayBuffer)
);

window.currentWorkbook = workbook;

Ausführung einer SQL-Abfrage auf der gemounteten Datei:

const sql = "SELECT * FROM 'Sheet1' WHERE Amount > 1000 ORDER BY Date DESC LIMIT 10";

try {
    const result = window.currentWorkbook.executeQuery(sql);
    const data = result.toJSON(); 
    console.table(data);
} catch (e) {
    console.error("SQL Error:", e);
}

Für Multi-File-Projekte ein JSON-Manifest verwenden:

// manifest.json
{
  "files": [
    { "name": "data_2023.parquet", "alias": "History" },
    { "name": "new_orders.csv", "alias": "Current" }
  ]
}
const workbook = openProjectFromManifest(engine, manifestJson, fileBuffers);
// Dostupno: SELECT * FROM History JOIN Current ...

Metadaten und Performance

Die Methode getStats() liefert Datenstrukturen ohne Abfragen auszuführen:

Google AdInline article slot
{
    "name": "sheet1$",
    "displayName": "Otchet_Prodazhi",
    "fileName": "report_final.xlsx",
    "type": "excel-sheet",
    "rows": 15400,
    "columns": 24,
    "memoryUsage": "..."
}

In-Memory-Operationen in C++ minimieren den Overhead im Vergleich zu V8. Parquet liest effizient dank spaltenorientierter Strukturen und Vektorisierung.

Wichtige LeistungsVorteile:

  • Keine UI-Blockierung beim Parsen von 50+ MB-Dateien
  • JOINs zwischen XLSX und CSV ohne Server
  • Minimaler Speicherverbrauch im Vergleich zu JS-Alternativen (SheetJS, AlaSQL)
  • Offline-Metadatenzugriff für die UI

Anwendungen in der Entwicklung

Diese Lösung eignet sich ideal für Middle-/Senior-Frontend- und Fullstack-Entwickler.

  • Local-First-Dashboards: Vollständig offline Analytics ohne Datenübertragung
  • Clientseitige Validierung: SQL-Regeln zum Prüfen von Dateien vor dem Upload
  • Converter: Parquet → SQL-Filter → JSON/CSV direkt im Browser
  • Office-Editor-Erweiterungen: SQL-Abfragen auf Zellen in Webversionen

Wichtige Punkte

  • Virtuelle Tabellen mounten Dateien ohne vollständiges Laden in den RAM
  • Automatische Erkennung von 15+ Formaten anhand von Blob-Signaturen
  • Workbook unterstützt JOINs über heterogene Quellen als einzige Datenbank
  • C++ über WASM übertrifft JS bei großen Datensätzen
  • Volle Privatsphäre: Daten verlassen nie den Browser

— Editorial Team

Advertisement 728x90

Weiterlesen