Timescale flies when you’re having fun: 2021 in review
Welcome to the last blog post of the year!
It has become a Timescale tradition to celebrate #12DaysofTimescale, where we share our favorite content pieces published the previous year. But 2021 was such an awesome year for us in Team Timescale that we didn’t want to end it there.
Today, we are celebrating the accomplishments that made us proud in 2021.
In 2021, Timescale delivered substantial improvements to our category-defining relational database for time series. Early in our history, Timescale made the decision to build on PostgreSQL, the world’s fastest-growing database. Today, that foundation enables us to move quickly and deliver the functionality and dependability that developers demand when building data-intensive applications.
We shipped Timescale, a cloud database that makes it incredibly easy for developers to build and deploy data-intensive applications. We advanced the state-of-the-art in SQL with new hyperfunctions and function pipelines, tools that significantly improve developer productivity by making it easier to manipulate and analyze time-series data using the SQL you know and love. We made significant investments in the observability business by embracing OpenTelemetry and making Promscale your unified store for metrics, logs, and traces.
4,000,000 TimescaleDB instances are active today.
Developers count on us every day. We are proud of our contributions to the developer community and look forward to next year when we can continue to delight our customers as they build and deploy data-intensive applications.
Read on for a summary of everything we’ve shipped this year.
If you’re new to Timescale, check out Timescale; you can create a free account to get started (100 % free for 30 days and no credit card required).
Once you are using Timescale, join the Timescale Community and ask us any questions about time-series data, TimescaleDB, PostgreSQL, and more. And, for those who share our mission of serving developers worldwide 🌏 and want to join our fully remote, global team, we are hiring broadly across many roles!
Timescale ⛅
In October, we launched the new and improved Timescale. Timescale provides a balance between a familiar developer platform and a flexible database for modern applications while retaining the ease and scalability of modern cloud services.
Timescale represents our vision for a modern data platform that combines the ease of use expected from a cloud service with the flexibility that developers need. We call this the database cloud. The database cloud provides developers with a familiar interface so that they can bring their existing skills to solve the complex problems of today, be it in financial services, web-scale infrastructure, IoT, or more. The database cloud gives developers the ability to dig deep into the internals of the database and truly understand how their data is managed. This year, we shipped many new features for Timescale, including:
- Multi-region support
- VPC peering
- Storage autoscaling with zero downtime and configurable limits
- Explorer dashboard for an easy, visual in-console interface
- Automated, zero-downtime upgrades during maintenance windows
- Point-in-time recovery via automated, continuous incremental backups
- Guided demo with pre-loaded data for first-time users
- PDF invoices
- Additional emails for billing
- One-click database forking
New features in TimescaleDB 🐯
At Timescale, we focus every day on delighting our customers with powerful and easy-to-use features. In 2021, we delivered 13 TimescaleDB releases, including:
- Support for PG14. We want TimescaleDB users to benefit from the latest improvements introduced by the Postgres community, so we included support for PostgreSQL 14 only one month after its release.
- Schema modifications and inserts in compressed hypertables. In TimescaleDB 2.3 and above, you can directly insert data into compressed hypertables (vs decompressing, inserting, and then re-compressing chunks manually).
- Drastic performance optimizations through Skip Scan. We implemented a technique that gave users 26x-8000x faster
DISTINCT
queries, not only in TimescaleDB hypertables but in their regular PostgreSQL tables as well. - Experimental schema. In TimescaleDB 2.4 we introduced our experimental schema, where we develop and ship features at an even faster pace than we normally do - to later “graduate” these experimental features once they reach full maturity for normal production usage.
- More flexibility in
time_bucket()
throughtime_bucket_ng()
. A good example of the use of the experimental schema istime_bucket_ng()
, which expands the populartime_bucket()
to also support buckets by months, years, and timezones.
Apart from these major feature releases, we improved the functionality of distributed hypertables, adding support for advanced TimescaleDB features like compression policies, continuous aggregates, triggers, gap-fill, and Skip Scan.
And… We closed 728 issues in GitHub! Thank you so much to everyone who reported bugs and who helped us improve TimescaleDB: this wouldn’t be possible without you! We also love hearing which features you would like to see next (closing those issues feels especially satisfying). Please, keep sharing your suggestions and feedback with us!
In July, we launched TimescaleDB hyperfunctions, a series of SQL functions within TimescaleDB that make it easier to manipulate and analyze time-series data in PostgreSQL with fewer lines of code. You can use hyperfunctions to calculate percentile approximations of data, compute time-weighted averages, downsample and smooth data, and perform faster COUNT DISTINCT
queries using approximations. Moreover, hyperfunctions are “easy” to use: you call a hyperfunction using the same SQL syntax you know and love.
We’ve already delivered all these hyperfunctions:
- approximate_row_count
- first
- last
- histogram
- time_bucket
- time_bucket_ng
- hyperloglog
- rollup
- distinct_count
- stderror
- stats_agg
- rolling
- rollup
- average / average_y / average_x
- corr (correlation coefficient)
- covariance
- determination_coeff (R squared)
- intercept
- kurtosis / kurtosis_y / kurtosis_x
- num_vals
- skewness / skewness_y / skewness_x
- stddev / stddev_y / stddev_x
- slope
- sum/ sum_y / sum_x
- variance / variance_y / variance_x
- x_intercept
- time_bucket_gapfill
- locf
- interpolate
- percentile_agg
- approx_percentile
- approx_percentile_rank
- rollup
- max_val
- mean
- error
- min_val
- num_vals
- counter_agg (point form)
- rollup
- corr
- counter_zero_time
- delta
- extrapolated_delta
- extrapolated_rate
- idelta
- intercept
- irate
- num_changes
- num_elements
- num_resets
- rate
- slope
- time_delta
- with_bounds
- time_weight
- rollup
- average
- asap
- lttb
And in October, we launched function pipelines, a new capability that introduces functional programming concepts inside PostgreSQL (and SQL) using custom operators. Function pipelines radically improve the developer ergonomics of analyzing data in PostgreSQL and SQL, by applying principles from functional programming and popular tools like Python’s Pandas and PromQL.
SELECT device id,
sum(abs_delta) as volatility
FROM (
SELECT device_id,
abs(val - lag(val) OVER (PARTITION BY device_id ORDER BY ts))
as abs_delta
FROM measurements
WHERE ts >= now() - '1 day'::interval) calc_delta
GROUP BY device_id;
Pop quiz: What does this query do?
Even if you are a SQL expert, queries like this can be quite difficult to read - and even harder to express. Complex data analysis in SQL can be hard.
Function pipelines let you express that same query like this:
SELECT device_id,
timevector(ts, val) -> sort() -> delta() -> abs() -> sum()
as volatility
FROM measurements
WHERE ts >= now() - '1 day'::interval
GROUP BY device_id;
Function pipelines: Building functional programming into PostgreSQL using custom operators
Thank you
All of us at Timescale are so proud to work for you every day ❤️ We hope the year ahead brings you great joy and prosperity. Please, stay safe during this holiday season!
We wish you happy holidays and a happy New Year.
On to 2022!