
You are debugging a latency spike from three hours ago. The dashboard shows the incident, but the underlying table has gaps where sensors dropped out, two readings landed out of order, and the rollup job that was supposed to downsample yesterday's data never ran.
Every one of those is a data engineering problem. That is what working with time series data actually looks like.
Time series data powers monitoring, forecasting, IoT telemetry, and most of the AI systems that need fresh data rather than last quarter's snapshot. It also breaks in ways ordinary tabular data does not, because order matters, arrival time and event time are different things, and volume compounds every second.
This guide covers what time series data is, how it differs from other data shapes, how to store and query it, and how to build pipelines that stay reliable as volume grows.
Key Takeaways
Time series data is a sequence of observations indexed by time, where the order of the records carries as much information as the values.
It differs from cross-sectional data (many entities, one moment) and panel data (many entities, many moments).
Four components explain most of what you see in a series: trend, seasonality, cyclicity, and noise.
The hard engineering problems are late and out-of-order events, irregular intervals, missing readings, and cardinality growth.
Storage choice follows query pattern. Time series databases, columnar OLAP stores, and warehouses each win in different situations.
A pipeline is only as fresh as its slowest stage, so ingestion latency caps how current every dashboard and alert downstream can be.
What Is Time Series Data?
Time series data is a sequence of observations recorded in chronological order, where each record is tied to a timestamp. Time is the primary index, so the order of the records is part of the information, not just metadata about it.
Those observations may arrive at fixed intervals, such as a CPU metric scraped every 15 seconds, or at irregular intervals driven by events, such as a trade executing or a door sensor tripping. Both are time series. The difference in spacing changes how you store and query them, which is why it matters more to engineers than to analysts.
Why Time Series Data Matters to Data Engineers
Nearly every system built on real-time data runs on a time series underneath. Server metrics, stock prices, patient vitals, energy consumption, and shipment locations are all the same shape: a value, a timestamp, and a set of identifying labels.
Your job is to move those readings from where they are produced to where they are queried, without losing any, reordering them, or letting them arrive too late to be useful. That sounds simple until volume reaches millions of points per second and the readings come from devices on unreliable networks.
What Makes It Different in Engineering Workflows
Three properties drive most design decisions:
- Order carries meaning. A reordered set of rows in a customer table is still correct. A reordered time series is a different series.
- Writes are append-heavy and reads are range-heavy. You almost never update a past reading, and you almost always query a window of them.
- Value decays with age. Last minute's data is worth more than last year's, which is why retention policies and rollups belong in the initial design.
Time Series vs. Cross-Sectional vs. Panel Data
These three shapes get confused constantly, and picking the wrong one leads to analysis that looks fine and is quietly wrong.
| Shape | What it captures | Example | Primary index |
|---|---|---|---|
| Time series | One entity measured repeatedly over time | Hourly temperature from a single sensor for a year | Time |
| Cross-sectional | Many entities measured at one moment | Temperature from every sensor in a plant at 09:00 today | Entity |
| Panel (longitudinal) | Many entities measured repeatedly over time | Hourly temperature from every sensor in a plant for a year | Entity and time |
The practical consequence: forecasting, trend analysis, and anomaly detection all need the time dimension, so they need time series or panel data. A cross-sectional snapshot can tell you which sensor is hottest right now, but it cannot tell you whether that sensor has been climbing for a week.
Most production systems collect panel data and then slice it into individual time series at query time.
Types of Time Series Data
Four distinctions come up often enough to be worth naming.
- Metric-based vs. event-based: Metric series are sampled on a schedule, like a gauge read every second. Event series are emitted when something happens, like a click or a transaction, which is the pattern behind most event-driven architectures. Metric series have predictable volume; event series spike.
- Continuous vs. discrete: Continuous series measure something that always has a value, such as temperature. Discrete series count occurrences within a bucket, such as orders per minute.
- Univariate vs. multivariate: A univariate series tracks one variable over time. A multivariate series tracks several that move together, such as temperature, vibration, and pressure from the same machine. Multivariate series are where correlation and joint anomaly detection become possible.
- Stationary vs. non-stationary: A stationary series has statistical properties (mean, variance) that stay stable over time. Most real-world series are non-stationary because they trend or drift. Stationarity matters because several classical models assume it, so you either transform the series or pick a model that does not require it.
Components of Time Series Data
Decomposing a series into its parts is how you tell a real signal from an artifact.
Trend
The long-run direction of the series, up, down, or flat. Monthly energy consumption creeping upward over three years is a trend. Trends drive capacity planning, and they are the first thing to remove when you need a stationary series.
Seasonality
Repeating patterns on a fixed period: hourly, daily, weekly, or annual. Retail sales climb every December. Web traffic dips every weekend. Seasonal effects are predictable, which means a model that ignores them will read every December as an anomaly.
Cyclicity
Repeating patterns without a fixed period, usually driven by broader conditions rather than the calendar. Economic expansion and contraction is the classic case. Cycles are easy to confuse with seasonality, and the distinction matters: you can schedule around seasonality, but you can only detect cycles after the fact.
Noise and Outliers
Random variation left over after trend, seasonality, and cycles are accounted for. Some of it comes from genuine randomness and some from measurement error. Outliers are the extreme cases, and deciding whether a given outlier is a broken sensor or a real event is one of the more consequential judgment calls in a time series pipeline.
Structural Breaks
A permanent shift in the underlying behavior of the series, caused by a firmware update, a pricing change, a new data center, or a policy change. Structural breaks invalidate models trained on the earlier regime, which is why detecting them matters more than smoothing them away.
Examples of Time Series Data
| Domain | What is measured | Typical frequency | What it drives |
|---|---|---|---|
| Infrastructure | CPU, memory, request latency, error rate | 1 to 60 seconds | Alerting, autoscaling, incident response |
| Industrial IoT | Telemetry: temperature, vibration, pressure | 100ms to 1 second | Predictive maintenance, safety shutdowns |
| Finance | Trade prices, order book depth, volume | Sub-second | Pricing, risk, algorithmic execution |
| Product analytics | Sessions, conversions, feature usage | 1 minute to 1 hour | Experimentation, funnel analysis |
| Energy | Meter readings, grid load, generation | 1 to 15 minutes | Demand forecasting, load balancing |
| Healthcare | Heart rate, blood oxygen, glucose | 1 second to 5 minutes | Patient monitoring, early warning scores |
| Logistics | GPS position, temperature in transit | 10 seconds to 5 minutes | ETA prediction, cold-chain compliance |
The pattern across all of them: high write volume, range queries over recent windows, and a steep drop in the value of any individual reading once it ages.
Challenges in Working With Time Series Data
Late and Out-of-Order Events
Event time is when something happened. Processing time is when your system saw it. On mobile networks, in IoT fleets, and across any queue with retries, those two diverge, and readings arrive out of sequence or minutes late. Systems that assume arrival order equals event order will silently compute the wrong aggregates. Watermarks, grace periods, and idempotent writes are the standard defenses, and they are why stateful stream processing exists as a category.
Irregular Intervals
Not every series is evenly spaced. Sensor dropouts, network delays, and event-driven sources all produce gaps. You either interpolate to a regular grid, which introduces values that were never measured, or you keep the irregular spacing and use models that tolerate it. Both are defensible. Doing neither is not.
Missing or Incomplete Readings
Connectivity failures and logging errors leave holes. Forward-fill, interpolation, and explicit null handling all work, but the choice changes downstream results. Record which one you used: a gap filled by interpolation and a gap filled by the last known value tell very different stories during an incident review.
Data Drift
The statistical properties of a series change over time, gradually as behavior shifts or abruptly after a system change. Models trained on the old distribution degrade quietly. Monitoring the input distributions catches this before a stale model reaches a dashboard.
Cardinality and Scale
Volume is the product of frequency and series count, and the series count is where it usually explodes. Ten thousand devices with twelve metrics each and a per-request label is millions of distinct series. High cardinality degrades most time series databases faster than raw write volume does, so label design deserves as much scrutiny as schema design. The same constraint shapes how streaming data pipelines are partitioned.
How to Store Time Series Data
Storage follows query pattern. Three options cover most cases.
Time series databases (InfluxDB, TimescaleDB, Prometheus, QuestDB) index on time by default, compress aggressively, and ship with retention policies, continuous aggregates, and time-aware functions. Choose one when time-range queries dominate and you want downsampling handled for you. Watch cardinality limits.
Columnar and real-time OLAP databases (ClickHouse, Apache Druid, Apache Pinot) handle high-cardinality analytical queries across large windows and scale further horizontally. Choose one when you need to slice by many dimensions, not just time.
Cloud data warehouses (Snowflake, BigQuery, Databricks) are the right call when time series data needs to join against the rest of your business data. Partition by time and cluster on your highest-selectivity label, or costs climb quickly. See our data warehouse guide for the tradeoffs.
Many teams run two of these: a time series database or OLAP store for operational queries, and a warehouse for anything that joins to customer, product, or revenue tables. That works as long as one pipeline feeds both. Two pipelines will drift. For a wider view, see types of databases and their use cases.
Common Time Series Query Patterns
Five patterns cover most of what you will write.
Time bucketing: Group readings into fixed windows to make them comparable and plottable.
sql
SELECT
time_bucket('5 minutes', reading_at) AS bucket,
device_id,
AVG(temperature) AS avg_temp,
MAX(temperature) AS max_temp
FROM sensor_readings
WHERE reading_at > NOW() - INTERVAL '24 hours'
GROUP BY bucket, device_id
ORDER BY bucket DESC;
Downsampling and rollups: Store raw data at full resolution for a short window, then keep pre-aggregated hourly or daily summaries for the long tail. Most storage savings come from here.
Rolling windows: Moving averages and rolling standard deviations smooth short-term noise and expose the underlying movement. Window functions handle this without moving data out of the database.
ASOF joins: Join two series whose timestamps never line up exactly, matching each row to the most recent prior row in the other series. Essential for pairing a price with the sensor reading closest to it in time.
Gap filling: Generate the expected time grid and left-join actual readings against it, so missing intervals show up as explicit nulls rather than disappearing from the result.
Building a Time Series Data Pipeline
A data pipeline for time series has four stages, and the slowest one sets the freshness of everything downstream.
Ingestion: Readings come from databases via change data capture (CDC), from devices over MQTT, from a Kafka data pipeline, or from streaming APIs. The data streaming technologies guide compares the transport options. This is where ingestion latency is decided. Batch collection every 15 minutes caps every dashboard downstream at 15-minute freshness, no matter how fast the query engine is.
Processing: Filtering, aggregation, unit conversion, and enrichment happen here. A stream processing framework handles windowing and late-arrival logic, and this is also where deduplication belongs, so a retry does not double-count a reading. If you are still deciding between scheduled jobs and continuous processing, see batch vs. stream processing and real-time processing.
Storage: Route to the store that matches the query pattern, applying partitioning, compression, and retention as covered above.
Visualization and alerting: Real-time dashboards and thresholds turn the series into something actionable, and streaming analytics sits between the two. If latency at any earlier stage exceeds your alerting threshold, the alert is already too late to matter.
At-least-once delivery plus a non-idempotent write equals inflated metrics, a failure mode that is very hard to spot after the fact.
Time Series Analysis and Modeling: A Quick Map
Time series analysis covers everything from plotting a trend to forecasting next quarter. These are the model families worth knowing, and when each one earns its place.
| Model | What it assumes | Best fit |
|---|---|---|
| Autoregressive (AR) | Current value depends on recent values | Strong short-term dependence |
| Moving average (MA) | Current value depends on recent forecast errors | Correlated noise |
| ARMA / ARIMA | Combines AR and MA; ARIMA adds differencing | The workhorse for stationary and trending univariate series. ARIMA stands for autoregressive integrated moving average |
| SARIMA | ARIMA plus explicit seasonal terms | Clear repeating seasonality, such as retail or energy |
| Exponential smoothing | Recent observations matter more, weighted by recency | Fast, reliable baselines that often beat complex models |
| Vector autoregression (VAR) | Multiple series influence each other | Multivariate cases like ad spend and traffic |
| Spectral analysis | Signal decomposes into frequency components | Finding hidden periodicity |
| Machine learning and deep learning | Few structural assumptions | Large datasets, non-linear relationships, many related series |
Three practical notes. Check stationarity before reaching for ARIMA-family models, and difference the series if it fails. Treat exponential smoothing as a real baseline and beat it before deploying anything more expensive. And whatever the model, its inputs are usually derived rather than raw: lag features for autocorrelation, rolling statistics to smooth noise, time-based flags for day of week. Compute those in the pipeline, not in notebooks, or training and production will quietly disagree.
Best Practices for Time Series Pipelines
- Validate at ingestion: Check timestamp format, timezone, and plausible range at the edge. A bad timestamp caught at ingestion is a warning; the same timestamp caught after storage is a backfill.
- Separate event time from processing time: Store both. You cannot reconstruct event-time correctness later if you only kept arrival time.
- Make writes idempotent: Assign every reading a stable key so retries overwrite rather than duplicate.
- Plan retention and rollups on day one: Decide how long raw resolution is worth keeping before storage costs force the decision for you.
- Handle schema evolution explicitly: New fields and changed types are normal in device fleets. Schema enforcement with versioning prevents a firmware update from breaking a downstream table.
- Track end-to-end freshness: A pipeline that is running but eight minutes behind is failing at its actual job. Measure lag from event time to query availability, and alert on it the same way you alert on uptime. See real-time monitoring for the wider picture, and real-time analytics for what fresh data unlocks downstream.
Building a Time Series Pipeline With Estuary
Every challenge above is solvable with enough custom code. The question is whether you want to maintain it.
Example Scenario
A manufacturer wants to monitor equipment health across three plants. IoT sensors emit temperature, vibration, and pressure readings every second. Those readings need to reach a time series database for operational dashboards and a warehouse for joins against maintenance records and warranty claims. Machines go offline. Readings arrive late. The plant runs 24 hours a day.
How Estuary Fits In
Estuary is the right-time data platform: it captures data once and delivers it wherever it is needed, streaming when latency matters and batching when it does not.
- Capture from any source. 200+ no-code connectors cover databases via log-based CDC, streaming systems, APIs, and event sources, so telemetry data from sensors and change data from operational databases land in the same pipeline. For how this compares to assembling it yourself, see best data streaming platforms.
- Deliver to multiple destinations at once. Capture once, sync everywhere. The same readings materialize continuously into TimescaleDB for operational queries and into Snowflake or BigQuery for joins against business data, with no second pipeline to keep in sync.
- Exactly-once delivery. Readings are not duplicated on retry and not lost on failure, which is what makes an aggregate trustworthy. Backed by a durable append-only transaction log with deterministic recovery.
- Schema enforcement built in. Schema changes are caught at the pipeline, before a downstream table breaks.
- Sub-100ms latency, with cadence you control. Stream the equipment telemetry that feeds safety alerts. Batch the warranty joins that run nightly. This is what real-time data streaming looks like when you are not forced into it everywhere.
Why It Works for Time Series Workloads
Two properties matter most. Ingestion sets the freshness floor for everything downstream, so a sub-100ms capture layer is what makes a real-time dashboard possible at all. And operational and analytical stores need the same readings without divergence, which capture-once-sync-everywhere handles by design.
Estuary is not a time series database and does not replace one. It is the movement layer that keeps your time series database, your OLAP store, and your warehouse fed from a single source of truth. Pricing is $0.50/GB moved plus $0.14/connector/hour, which stays predictable as reading volume grows rather than scaling with row counts.
Worth being straightforward about the tradeoffs: there is a learning curve, and the connector library is in continuous improvement. Teams that want to build visually can work in the Estuary UI, and teams that prefer version-controlled configuration can use the flowctl CLI.
Related Real-Time Guides
- What Is Real-Time Data?
- What Is Real-Time Processing?
- What Is Real-Time Data Streaming?
- Real-Time Data Streaming Architecture
- Real-Time Data Ingestion
- Streaming Data Pipelines
- Data Streaming Technologies
- Kafka Data Pipeline
- Event-Driven Architecture Examples
- Real-Time OLAP Databases
- Real-Time Monitoring
Conclusion
Time series data is data where order is information, where arrival time and event time diverge, and where the value of a reading decays from the moment it is recorded.
That shapes every decision downstream: whether you interpolate a gap or leave it visible, whether you keep raw resolution for a week or a year, whether your storage engine indexes on time or on dimensions, and whether your alert fires while the incident is still unfolding or after it has resolved.
Get the components and the query patterns right, and the analysis becomes straightforward. Get the pipeline right, and the analysis becomes possible.
Estuary is the right-time data platform that replaces fragmented data stacks by consolidating CDC, streaming, batch, and pipelines into a single managed system.
FAQs
How long should you retain raw time series data?
How do you handle late-arriving or out-of-order time series data?
How can Estuary help with time series data pipelines?

About the author
Team Estuary is a group of engineers, product experts, and data strategists building the future of real-time and batch data integration. We write to share technical insights, industry trends, and practical guides.





