At Extracellular, we’re supporting the future of food and biomanufacturing by providing bioprocessing as a service to companies working on cell-cultivated product manufacturing. Our facilities run a variety of bioreactors that generate high-frequency telemetry — recording hundreds of metrics per second, from pressures and pump states to temperatures and agitator speeds.
We rely on TDengine as our time-series database to manage and make sense of this data. One feature that has become particularly valuable in our operations is virtual tables, which help us simplify access to telemetry and streamline our dashboards across different tools.
Structuring Our Data in TDengine
All of our process data flows into a supertable in TDengine. Each data point includes a timestamp, a metric name, a value, and associated tags (such as reactor_id
and unit
). This schema provides both scalability and consistency as we ingest data from multiple bioreactors in parallel.
We use this data for real-time monitoring through tools like Grafana and Perspective Studio, where quick access to the right metrics is critical.
Introducing Virtual Tables
Virtual tables allow us to define custom, logical views over our telemetry data using simple SQL. Rather than pulling from the full super table every time, we can create targeted subsets of data optimized for specific dashboards or use cases.
For example, I can define a virtual table for one of our G3 Pro reactors that includes only the metrics we care about:
CREATE VTABLE IF NOT EXISTS database.virtual_g3 (ts TIMESTAMP, pump4_rpm FLOAT FROM modular_control.`X40-Modbus-pump_4-value`.metric, weight_kg FLOAT FROM modular_control.`X40-Wago-load_cell-weight_scaled`.metric, temp_c FLOAT FROM modular_control.`X40-Wago-temp-temp`.metric, pump4_failcount FLOAT FROM modular_control.`X40-Modbus-pump_4-failcount`.metric, temp_failcount FLOAT FROM modular_control.`X40-Wago-temp-failcount`.metric, weight_failcount FLOAT FROM modular_control.`X40-Wago-load_cell-failcount`.metric );
This creates a lightweight, queryable view that behaves like a normal table — but only includes the metrics we’ve chosen.

How It Helps Our Team
Virtual tables have brought several key benefits to our workflow:
- Efficient Dashboarding: In Grafana, we can now display multiple key metrics in a single panel with a single query — cutting down configuration time and complexity.
- Better Integration with Perspective: Perspective Studio allows just one query per data source. Using virtual tables, we define the needed metrics once and reuse them cleanly across visualizations.
- Logical Organization: We align virtual tables with how we think about our operations—by reactor or by metric group — so the whole team can find what they need quickly.
With virtual tables, I can send one query and get everything I need. It’s made our dashboards easier to build and more reliable to operate.
— Alex Tolenaar, Technical Specialist, Extracellular
A Real-World Example
Our G3 Pro reactor emits over 100 telemetry metrics. However, only about 27 are typically needed for monitoring and analysis. By selecting those 27 into a virtual table (vt_g3
), we’ve created a clean interface for both Grafana and Perspective to consume — without clutter or overhead.
This also reduces the need to reference sub-tables or filter by tags repeatedly, which simplifies dashboard management and improves consistency.
Final Thoughts
TDengine’s virtual table feature has become a key part of how we structure and access time-series data across our bioreactors. It gives us flexibility without sacrificing performance, and it integrates seamlessly with the tools we use to monitor and manage our bioprocesses.
For any organization working in cell-cultivated product manufacturing or other high-frequency telemetry environments, virtual tables offer a powerful way to make your data infrastructure more efficient and user-friendly.