Phase 2: DataFusion query engine over Parquet

- queryd: SessionContext with custom URL scheme to avoid path doubling with LocalFileSystem
- queryd: ListingTable registration from catalog ObjectRefs with schema inference
- queryd: POST /query/sql returns JSON {columns, rows, row_count}
- queryd→catalogd wiring: reads all datasets, registers as named tables
- gateway: wires QueryEngine with shared store + registry
- e2e verified: SELECT *, WHERE/ORDER BY, COUNT/AVG all correct

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
root
2026-03-27 05:48:20 -05:00
co-authored by Claude Opus 4.6
parent 655b6c0b37
commit 19bdfab227
9 changed files with 1259 additions and 15 deletions
+4 -1
View File
@@ -19,11 +19,14 @@ async fn main() {
tracing::warn!("catalog rebuild failed (empty store?): {e}");
}
// Query engine — DataFusion over catalog-registered Parquet
let engine = queryd::context::QueryEngine::new(registry.clone(), store.clone());
let app = Router::new()
.route("/health", get(health))
.nest("/storage", storaged::service::router(store))
.nest("/catalog", catalogd::service::router(registry))
.nest("/query", queryd::service::router())
.nest("/query", queryd::service::router(engine))
.nest("/ai", aibridge::service::router())
.layer(TraceLayer::new_for_http());