# Análisis SQL de Excel, CSV y Parquet en el navegador con C++ y WebAssembly
WebAssembly permite ejecutar código C++17 para analizar datos tabulares directamente en el navegador. La solución basada en excel_loader virtualiza los archivos como tablas SQL: XLSX, Parquet y CSV se montan sin cargarlos completamente en memoria. Esto elimina el bloqueo de la UI y las fugas de memoria comunes en las bibliotecas JS, manteniendo los datos del usuario privados en su dispositivo.
La arquitectura combina un núcleo en C++ con interoperabilidad Emscripten y un envoltorio JS. El motor detecta el formato desde la firma del blob y soporta JOIN entre archivos heterogéneos en un solo Workbook.
Arquitectura: Desde el análisis hasta las consultas SQL
El núcleo en C++ de excel_loader maneja el análisis con bibliotecas nativas, construye tablas virtuales y planifica consultas. Emscripten exporta las clases ExcelLoaderEngine, Workbook y QueryResult a JS. La capa cliente pasa un ArrayBuffer del input y recibe resultados JSON.
Workbook es la abstracción central: un contenedor para múltiples archivos tratados como una sola base de datos. Formatos soportados:
- Excel/Office: XLSX, XLSB, XLS, ODS
- Archivos planos: CSV, TSV, TXT
- Columnar/BigData: Parquet, DuckDB, ORC, AVRO
- Bases de datos legadas: SQLite, DBF, MDB, ACCDB
- NoSQL/Documentos: JSON, JSONL, XML, HTML
La detección automática de formato simplifica la integración: el frontend pasa un Uint8Array sin ningún preprocesamiento.
Implementación práctica de la API
Inicializar el módulo WASM y cargar un archivo requiere código mínimo. El motor detecta el tipo automáticamente.
// 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;
Ejecutar una consulta SQL en el archivo montado:
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);
}
Para proyectos multiarchivo, usa un manifiesto JSON:
// 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 ...
Metadatos y rendimiento
El método getStats() devuelve estructuras de datos sin ejecutar consultas:
{
"name": "sheet1$",
"displayName": "Otchet_Prodazhi",
"fileName": "report_final.xlsx",
"type": "excel-sheet",
"rows": 15400,
"columns": 24,
"memoryUsage": "..."
}
Las operaciones en memoria en C++ minimizan la sobrecarga en comparación con V8. Parquet se lee de forma eficiente gracias a las estructuras columnares y la vectorización.
Ventajas clave de rendimiento:
- Sin bloqueo de la UI al analizar archivos de más de 50 MB
- JOIN entre XLSX y CSV sin servidor
- Uso mínimo de memoria frente a alternativas JS (SheetJS, AlaSQL)
- Acceso offline a metadatos para la UI
Aplicaciones en el desarrollo
Esta solución es ideal para desarrolladores frontend y fullstack de nivel medio/senior.
- Dashboards local-first: Análisis completamente offline sin enviar datos a ningún lado
- Validación en el lado del cliente: Reglas SQL para verificar archivos antes de subirlos
- Convertidores: Parquet → filtro SQL → JSON/CSV directamente en el navegador
- Extensiones de editores de Office: Consultas SQL en celdas en versiones web
Puntos clave
- Las tablas virtuales montan archivos sin cargarlos completamente en RAM
- Detección automática de más de 15 formatos desde firmas de blob
- Workbook admite JOIN entre fuentes heterogéneas como una sola base de datos
- C++ mediante WASM supera a JS en conjuntos de datos grandes
- Privacidad total: los datos nunca salen del navegador
— Editorial Team
Aún no hay comentarios.