{"id":25331,"date":"2025-05-06T07:55:15","date_gmt":"2025-05-06T14:55:15","guid":{"rendered":"https:\/\/tdengine.com\/?p=25331"},"modified":"2025-05-08T03:01:36","modified_gmt":"2025-05-08T10:01:36","slug":"how-extracellular-uses-tdengines-virtual-tables-to-streamline-bioprocess-monitoring","status":"publish","type":"post","link":"https:\/\/tdengine.com\/how-extracellular-uses-tdengines-virtual-tables-to-streamline-bioprocess-monitoring\/","title":{"rendered":"How Extracellular Uses TDengine\u2019s Virtual Tables to Streamline Bioprocess Monitoring"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #141414;color:#141414\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #141414;color:#141414\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/tdengine.com\/how-extracellular-uses-tdengines-virtual-tables-to-streamline-bioprocess-monitoring\/#Structuring_Our_Data_in_TDengine\" >Structuring Our Data in TDengine<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/tdengine.com\/how-extracellular-uses-tdengines-virtual-tables-to-streamline-bioprocess-monitoring\/#Introducing_Virtual_Tables\" >Introducing Virtual Tables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/tdengine.com\/how-extracellular-uses-tdengines-virtual-tables-to-streamline-bioprocess-monitoring\/#How_It_Helps_Our_Team\" >How It Helps Our Team<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/tdengine.com\/how-extracellular-uses-tdengines-virtual-tables-to-streamline-bioprocess-monitoring\/#A_Real-World_Example\" >A Real-World Example<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/tdengine.com\/how-extracellular-uses-tdengines-virtual-tables-to-streamline-bioprocess-monitoring\/#Final_Thoughts\" >Final Thoughts<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>At Extracellular, we&#8217;re supporting the future of food and biomanufacturing by providing bioprocessing as a service to companies working on <strong>cell-cultivated product manufacturing<\/strong>. Our facilities run a variety of bioreactors that generate high-frequency telemetry &#8212; recording hundreds of metrics per second, from pressures and pump states to temperatures and agitator speeds.<\/p>\n\n\n\n<p>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 <strong>virtual tables<\/strong>, which help us simplify access to telemetry and streamline our dashboards across different tools.<\/p>\n\n\n\n<h2 class=\"gb-text\"><span class=\"ez-toc-section\" id=\"Structuring_Our_Data_in_TDengine\"><\/span>Structuring Our Data in TDengine<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>All of our process data flows into a <strong>supertable<\/strong> in TDengine. Each data point includes a timestamp, a metric name, a value, and associated tags (such as <code class=\"\" data-line=\"\">reactor_id<\/code> and <code class=\"\" data-line=\"\">unit<\/code>). This schema provides both scalability and consistency as we ingest data from multiple bioreactors in parallel.<\/p>\n\n\n\n<p>We use this data for real-time monitoring through tools like <strong>Grafana<\/strong> and <strong>Perspective Studio<\/strong>, where quick access to the right metrics is critical.<\/p>\n\n\n\n<h2 class=\"gb-text\"><span class=\"ez-toc-section\" id=\"Introducing_Virtual_Tables\"><\/span>Introducing Virtual Tables<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><a href=\"https:\/\/docs.tdengine.com\/reference\/taos-sql\/virtualtable\/\">Virtual tables<\/a> 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.<\/p>\n\n\n\n<p>For example, I can define a virtual table for one of our G3 Pro reactors that includes only the metrics we care about:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-sql\" data-line=\"\">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 );<\/code><\/pre>\n\n\n\n<p>This creates a lightweight, queryable view that behaves like a normal table &#8212; but only includes the metrics we\u2019ve chosen.<\/p>\n\n\n\n<figure class=\"gb-element-fd09820d\">\n<img decoding=\"async\" width=\"1142\" height=\"296\" src=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2.jpg?strip=all&sharp=1\" srcset=\"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2.jpg?strip=all&amp;sharp=1 1142w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2-300x78.jpg?strip=all&amp;sharp=1 300w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2-1024x265.jpg?strip=all&amp;sharp=1 1024w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2-768x199.jpg?strip=all&amp;sharp=1 768w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2.jpg?strip=all&amp;sharp=1&amp;w=228 228w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2.jpg?strip=all&amp;sharp=1&amp;w=456 456w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2.jpg?strip=all&amp;sharp=1&amp;w=685 685w, https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/extracellular-image-2.jpg?strip=all&amp;sharp=1&amp;w=913 913w\" sizes=\"(max-width: 1142px) 100vw, 1142px\" \/>\n\n\n\n<figcaption class=\"gb-text\">Creating a dashboard for key metrics more efficiently using a virtual table<\/figcaption>\n<\/figure>\n\n\n\n<h2 class=\"gb-text\"><span class=\"ez-toc-section\" id=\"How_It_Helps_Our_Team\"><\/span>How It Helps Our Team<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Virtual tables have brought several key benefits to our workflow:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Efficient Dashboarding<\/strong>: In Grafana, we can now display multiple key metrics in a single panel with a single query &#8212; cutting down configuration time and complexity.<\/li>\n\n\n\n<li><strong>Better Integration with Perspective<\/strong>: Perspective Studio allows just one query per data source. Using virtual tables, we define the needed metrics once and reuse them cleanly across visualizations.<\/li>\n\n\n\n<li><strong>Logical Organization<\/strong>: We align virtual tables with how we think about our operations\u2014by reactor or by metric group &#8212; so the whole team can find what they need quickly.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-style-default is-layout-flow wp-block-quote-is-layout-flow\">\n<p>With virtual tables, I can send one query and get everything I need. It\u2019s made our dashboards easier to build and more reliable to operate.<\/p>\n<cite>\u2014 <em>Alex Tolenaar, Technical Specialist, Extracellular<\/em><\/cite><\/blockquote>\n\n\n\n<h2 class=\"gb-text\"><span class=\"ez-toc-section\" id=\"A_Real-World_Example\"><\/span>A Real-World Example<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>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 (<code class=\"\" data-line=\"\">vt_g3<\/code>), we\u2019ve created a clean interface for both Grafana and Perspective to consume &#8212; without clutter or overhead.<\/p>\n\n\n\n<p>This also reduces the need to reference sub-tables or filter by tags repeatedly, which simplifies dashboard management and improves consistency.<\/p>\n\n\n\n<h2 class=\"gb-text\"><span class=\"ez-toc-section\" id=\"Final_Thoughts\"><\/span>Final Thoughts<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>TDengine\u2019s 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.<\/p>\n\n\n\n<p>For any organization working in <strong>cell-cultivated product manufacturing<\/strong> or other high-frequency telemetry environments, virtual tables offer a powerful way to make your data infrastructure more efficient and user-friendly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For high-frequency telemetry environments like cell-cultivated product manufacturing, virtual tables offer a powerful way to make data infrastructure more efficient and user-friendly.<\/p>\n","protected":false},"author":131,"featured_media":25334,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[23],"tags":[],"ppma_author":[273],"class_list":["post-25331","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-case-studies"],"authors":[{"term_id":273,"user_id":131,"is_guest":0,"slug":"atolenaar","display_name":"Alex Tolenaar","avatar_url":"https:\/\/eujqw4hwudm.exactdn.com\/wp-content\/uploads\/atole.jpg?strip=all&#038;sharp=1&#038;resize=96%2C96","1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/25331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/users\/131"}],"replies":[{"embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/comments?post=25331"}],"version-history":[{"count":6,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/25331\/revisions"}],"predecessor-version":[{"id":25392,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/posts\/25331\/revisions\/25392"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/media\/25334"}],"wp:attachment":[{"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/media?parent=25331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/categories?post=25331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/tags?post=25331"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/tdengine.com\/wp-json\/wp\/v2\/ppma_author?post=25331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}