Query Engine
The query engine resolves channel selections and evaluates time-series expressions against the silver-layer data. It has two parts:
- TSAL — the expression language you write to select channels, derive virtual signals, and define events and aggregations.
- Query Solvers — the
DefaultSolverthat knows how your silver tables are laid out, reads them, and evaluates the expressions per container.
Two ways to use it
-
Directly, for ad-hoc analysis. Build a query against a
MeasurementDBand solve it interactively — no reporting setup required:eng_rpm = db.query.channel(channel_name='Engine RPM')
result = db.query.select(eng_rpm.mean().alias('rpm_mean')).solve(spark, solver=DefaultSolver(spark))
# or .toPandas(spark, solver=DefaultSolver(spark)) for a pandas DataFrame -
As the foundation of the Report component. The reporting layer embeds TSAL expressions in events and aggregations, and the
Reportorchestrator batch-solves them through the query engine and persists the results to the gold layer.