QuestDB 8.1.2 - Tabs & Balance

QuestDB is the world's fast growing time-series database. It offers premium ingestion throughput, enhanced SQL analytics that can power through analysis, and cost-saving hardware efficiency. It's open source and integrates with many tools and languages.

October has arrived, and with it the fall. According to an interesting character, it's also Libra β™Ž season, a phase of balance. It works for us, as this release restores the balance within QuestDB's production reliability. Chasing maximum performance and cutting-edge features is our favourite game. But every now and then, it's essential to double-back and smooth out the edges so that the overall experience presents consistent excellence. And, well, we'll keep improving performance too.

Download, upgrade, and prepare for the seasonal feasts. πŸŽƒ

For the full release notes and bug fixes, see GitHub.

Breaking Changes πŸ’₯​

Though not generally breaking, please be aware of the following:

  • Logging level adjustments: Some log messages previously logged at the INFO level have been changed to DEBUG. This reduction in log verbosity may impact monitoring systems relying on these messages. Adjust logging configurations as necessary.

New features πŸ£β€‹

Web Console UI tabs​

The QuestDB Web Console features tabs for better query management. Tabs are archived upon closing and can be brought back from the history section as needed. They can be labelled, too, for easy identification.

A demo of tabs, in gif format. Functions just like a modern web browser.

Whether you're comparing multiple queries or switching between datasets, tabs streamline your workflow β€” no more losing track of open queries.

New financial function spread_bps​

Introducing the spread_bps function, designed for quick financial insights. By calculating the difference between two numeric values (e.g., bid and ask prices) in basis points, this function streamlines your financial data analysis.

Simple spread_bps exampleDemo this query
SELECT spread_bps(1.5760, 1.5763)

Perfect for traders looking to analyze bid-ask spreads, spread_bps quickly calculates the basis point difference between prices, speeding up your analysis.

Read the docs for more information.

By demand! New greatest and least functions​

We've added greatest and least, two simple yet powerful functions that help you find the maximum or minimum value from a list of expressions, making it easier to compare data across multiple columns or values.

Simple greatest() exampleDemo this query
SELECT greatest(11, 3, 8, 15)

Returns:

greatest
15
Simple least() exampleDemo this query
SELECT least(11, 3, 8, 15)

Returns:

least
3

Interval functions for quick date filtering​

To simplify date queries, we’ve introduced today(), tomorrow(), and yesterday(), which return intervals representing entire days in UTC. No more need to manually define time ranges.

Using todayDemo this query
SELECT true as in_today FROM trades
WHERE now() IN today()
LIMIT -1;

Read the docs for more information.

Flexible timezone support for date intervals​

These interval functions also support timezone adjustments, allowing you to work with localized day intervals effortlessly. Specify a timezone string to adjust the interval accordingly.

Simple day interval exampleDemo this query
SELECT today() as today, today('CEST') as adjusted

Returns:

todayadjusted
('2024-10-08T00:00:00.000Z', '2024-10-08T23:59:59.999Z')('2024-10-07T22:00:00.000Z', '2024-10-08T21:59:59.999Z')

This function allows the user to specify their local timezone and receive a UTC interval that corresponds to their 'day'. In this example, CEST is a +2h offset, so the CEST day started at 10:00 PM UTC the day before.

New aggregate function string_distinct_agg​

The string_distinct_agg function concatenates unique string values into a single, delimited string, making it perfect for creating summaries of distinct dataset entries.

To see it in action, suppose we want to find all the distinct sky cover types observed in the weather tablein our public demo:

string_distinct_agg exampleDemo this query
SELECT string_distinct_agg(skyCover, ',') AS distinct_sky_covers
FROM weather;

Read the docs for more information.

New integrations​

We're always looking for popular tools and projects to connect with QuestDB.

This release brings two more:

  • Bento by Warpstream Labs: In the words of Bento they provide: Fancy stream processing made operationally mundane. Indeed, and now even fancier with a fresh QuestDB component.

  • Redpanda Connect: Formerly Benthos. Comes with a QuestDB output component that can be used as a sink for your stream processing data. Read our docs for more information.

Performance πŸš€πŸš€πŸš€β€‹

As always!...

  • Static metadata cache: Implemented a static metadata cache to improve performance by reducing the overhead associated with frequent metadata access. This enhancement speeds up query compilation and execution.

  • Optimized partition reloads: Reduced unnecessary reloads of TableReader partitions, which enhances query performance, especially in environments with high data ingestion rates and frequent queries.

  • Improved parallel GROUP BY execution: Optimized parallel GROUP BY operations by eliminating redundant bytecode generation. This results in faster execution times for complex aggregation queries.

  • Faster Web Console queries: You'll notice improved performance during the highlighting and execution of queries with SQL comments in the editor.

General improvements πŸ› οΈβ€‹

From community feedback...

  • Enhanced log compatibility: Added a configuration option to control verbose log levels, improving compatibility with log readers and monitoring tools that require specific log formats or verbosity levels.

  • RedHat OpenShift Compatible Docker Image: Beginning with this release, QuestDB Docker images with a -rhel suffix are now compatible with RedHat's OpenShift container orchestration platform.

InfluxDB Line Protocol improvements πŸ’ͺ​

Our core ingestion format, InfluxDB Line Protocol (ILP) keeps getting better:

  • Detailed ILP error messages: Enhanced the server logs to include specific error messages indicating the exact line that caused a receive buffer overflow during ILP ingestion. This aids in troubleshooting and correcting data formatting issues.

  • ILP client row cancellation: The ILP client now supports cancelling the current row during data ingestion. This allows for greater control when writing data and helps prevent incomplete or erroneous data from being committed.

  • ILP traffic to Prometheus: Introduced metrics to monitor ILP (Influx Line Protocol) traffic volumes over both TCP and HTTP. These metrics help in tracking data ingestion rates and diagnosing network-related issues.

Summary​

QuestDB 8.1.2 balances innovation and stability with new features like Web Console tabs, financial functions, and timezone supportβ€”while boosting performance and improving reliability. Dive in, and as always, we’re here to help in our Slack community and Discourse community.

Subscribe to our newsletters for the latest. Secure and never shared or sold.