Update dependency org.questdb:questdb to v9.3.5#319
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
f04eafe to
b78c53f
Compare
b78c53f to
a243acb
Compare
a243acb to
3578c1c
Compare
3578c1c to
cc81fda
Compare
cc81fda to
34cc8bd
Compare
34cc8bd to
f8e98c5
Compare
f8e98c5 to
5617ddb
Compare
5617ddb to
2d59c6e
Compare
2d59c6e to
3dd7f38
Compare
3dd7f38 to
1d2c13e
Compare
1d2c13e to
b86c4d4
Compare
b86c4d4 to
0e18f8f
Compare
0e18f8f to
4d53b3a
Compare
4d53b3a to
b72c863
Compare
b72c863 to
74b19d7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
9.0.3→9.3.5Release Notes
questdb/questdb (org.questdb:questdb)
v9.3.5Compare Source
QuestDB 9.3.5
QuestDB 9.3.5 introduces lateral joins, SQL-standard UNNEST, statistical window functions, and corrects SAMPLE BY timezone handling during DST transitions. It also delivers multiple join performance improvements and important Parquet export fixes.
For any questions or feedback, please join us on Slack or on Discourse.
See also our prettier release notes page.
Breaking changes 💥
Highlights
Lateral joins
QuestDB now supports lateral joins, enabling subqueries in the FROM clause to reference columns from preceding tables. The implementation uses a decorrelation optimizer that transforms correlated subqueries into efficient set-based execution.
LEFT LATERAL and implicit CROSS LATERAL are also supported:
SQL-standard UNNEST
The new UNNEST operator expands array columns and JSON arrays into rows, enabling relational operations on array data:
Multiple arrays can be unnested simultaneously with NULL padding for mismatched lengths, following PostgreSQL-compatible behavior.
Statistical window functions
New window functions for statistical analysis:
stddev_pop(),stddev_samp()/stddev()— standard deviationvar_pop(),var_samp()/variance()— variancecovar_pop(),covar_samp()— covariancecorr()— correlation coefficientAll functions support ROWS, RANGE, and PARTITION BY frame modes with bounded and unbounded frames. Non-removable frames use Welford's online algorithm for numerical stability.
Multi-table HORIZON JOIN
HORIZON JOIN now accepts multiple right-hand-side tables in a single query, aggregating columns from several time-series sources against a common master table:
Other
PARQUET()clause (e.g.,a VARCHAR PARQUET(BLOOM_FILTER)).ALTER TABLE ADD/DROP COLUMNnow works correctly on tables with Parquet-formatted partitions.arg_max(varchar, ...)group-by functions for timestamp, double, long, and int key types.SHOW TABLESresults sorted alphabetically (behindcairo.metadata.cache.snapshot.orderedconfig).Performance
Web Console
Bug fixes
.U+and.N+patterns failing to parse timestamps without fractions.Changelist
Full Changelog: 9.3.4...9.3.5
v9.3.4Compare Source
QuestDB 9.3.4
QuestDB 9.3.4 delivers dynamic windows in WINDOW JOIN, Parquet row group pruning with bloom filters, new array functions, and significant performance improvements across ORDER BY, joins, and Parquet I/O.
For any questions or feedback, please join us on Slack or on Discourse.
See also our prettier release notes page.
Breaking changes 💥
RLE Dictionaryencoding for Varchar columns instead ofDelta Length Byte Array. Parquet files written by 9.3.4 use the new encoding by default. If downstream tools or pipelines depend on the previous encoding, use the new per-column encoding config to override.NaN/Infinityvalues with their runtime behaviour.Infinityand-Infinityin constant float/double expressions are now collapsed to NULL at compile time, consistent with QuestDB's existing NULL convention.CASE/SWITCHexpressions can no longer branch onInfinityor-Infinityas distinct values.Highlights
Dynamic window support in WINDOW JOIN
WINDOW JOIN now supports dynamic window ranges computed from column values or expressions:
Parquet row group pruning with bloom filters
Queries over Parquet files now leverage min/max statistics and bloom filters to skip entire row groups that cannot match the query predicate, dramatically reducing I/O for selective queries.
Array functions
New
DOUBLE[]functions:array_sort(),array_reverse(),array_elem_min(),array_elem_max(),array_elem_avg(), andarray_elem_sum().Other
arg_min()andarg_max()now supportCHARarguments.minTimestampandmaxTimestampcolumns added tosys.telemetry_wal.Performance
cairo.wal.writer.madvise.modeconfig option for tuning memory access patterns.Bug fixes
DECIMAL128andDECIMAL256columns.LATEST BY ALLqueries over large tables.SAMPLE BY FILLwith array column aggregates.read_parquet()crash onSYMBOLcolumns from native Parquet files.WINDOW JOIN INCLUDE PREVAILINGdropping the prevailing row when the window had matches.WINDOW JOINdropping the prevailing row on cross-partition boundaries.AssertionErrortriggered by certain JOIN queries.read_parquet()on Parquet files with stale QuestDB metadata.ALTER COLUMN.Changelist
ALTER COLUMNby @nwoolmer in #6842Full Changelog: 9.3.3...9.3.4
v9.3.3Compare Source
QuestDB 9.3.3
QuestDB 9.3.3 is a feature-rich release introducing HORIZON JOIN for markout analysis, a new
twap()aggregate, SQL-standard WINDOW definitions, JIT compilation on ARM64, and file-based secrets for Kubernetes deployments. It also brings significant performance improvements across Parquet I/O, parallel GROUP BY, UNION queries, and ORDER BY on computed expressions.For any questions or feedback, please join us on Slack or on Discourse.
See also our prettier release notes page.
Highlights
HORIZON JOIN for markout analysis
HORIZON JOIN is a new join type designed for markout analysis — a common financial analytics pattern where you measure how prices or metrics evolve at specific time offsets relative to events like trades or orders.
For each row in the left-hand table and each offset in the horizon, the join computes
left_timestamp + offsetand performs an ASOF match against the right-hand table. Results are implicitly grouped by the horizon offset and any specified keys, with aggregate functions applied across all matched rows.Here's an example measuring post-trade price impact at 1-second intervals up to 60 seconds:
You can also use
LISTfor non-uniform horizons and negative offsets to look at pre-event behavior:The horizon pseudo-table exposes
h.offset(raw microsecond value) andh.timestamp(the computedleft_timestamp + offset), which can be used in expressions and grouping.twap() time-weighted average price
The new
twap(price, timestamp)aggregate computes the time-weighted average price using step-function integration: each price is held constant until the next observation, and the TWAP is the area under the step function divided by the total time span. It supports parallel GROUP BY and SAMPLE BY with FILL modes.WINDOW definition clause
QuestDB now supports the SQL-standard WINDOW clause for defining reusable window specifications. Instead of repeating the same PARTITION BY and ORDER BY in multiple window function calls, define them once and reference by name:
Window inheritance is also supported, where a named window references another as its base:
Chained inheritance and standard merge rules for PARTITION BY, ORDER BY, and frame clauses are all supported.
JIT compilation on ARM64
QuestDB's JIT filter compiler now runs natively on ARM64 (aarch64) systems, including Apple Silicon and AWS Graviton. Previously, JIT-compiled filters were only available on x86. Benchmarks on an Apple M5 show filter evaluations running up to 2x faster with JIT enabled for common WHERE clause patterns, with OR-predicate filters seeing up to 5x improvement.
File-based secrets for Kubernetes
Sensitive configuration like database passwords can now be loaded from files using the
_FILEsuffix convention, enabling integration with Kubernetes Secrets, Docker Secrets, and HashiCorp Vault:export QDB_PG_PASSWORD_FILE=/run/secrets/pg_passwordFile-based secrets are automatically trimmed, visible in
SHOW PARAMETERSwithvalue_source = 'file', and reloaded when contents change viaSELECT reload_config().array_build() function
The new
array_build(nDims, size, filler1, ...)function createsDOUBLE[]orDOUBLE[][]arrays with controlled shape and fill values. The size parameter accepts a scalar integer or aDOUBLE[](using its cardinality), and each filler can be a scalar (repeated) or an array (copied element-by-element with NaN padding or truncation).Performance
Parquet I/O
CAST, arithmetic, string functions) no longer falls back to a temporary table. A new hybrid export mode passes raw columns zero-copy and materializes only computed columns into native buffers.DECIMAL8throughDECIMAL256) has been added for Parquet read and write.Query execution
Security
Changelist
FILL(LINEAR)respects theFROMclause by @nwoolmer in #6790Full Changelog: questdb/questdb@9.3.2...9.3.3
v9.3.2Compare Source
QuestDB 9.3.2
QuestDB 9.3.2 continues the trend of performance upgrades and bugfixes, with some additional new features. Importantly, we introduce the new TICK syntax, a compact DSL for expressing time intervals, alongside faster aggregations, improved applicability of interval scans, and fast parquet queries.
For any questions or feedback, please join us on Slack or on Discourse.
See also our prettier release notes page.
Highlights
New TICK syntax
The Temporal Interval Calendar Kit (TICK is a new DSL for expressing complex time ranges and intervals in a compact, easy-to-use format.
For example, let's say that you want to query one month of data from NYSE, only including trading days and hours. The data in the database is stored in UTC format, so you'd need to convert to different time zones, and build a very complex WHERE clause with ANDs and ORs. Or, alternatively, send lots of narrow queries and combine the results.
Instead, you can express this in a simple string:
Reading this from left to right, we will the days in
2024-01in the range of01..31(all of them), with the interval beginning at09:30in New York time, only considering working days, and the interval ending after6h29mon each day (inclusive, so at 16:00 New York time).We then compile this to an efficient interval scan, with the time filtering pushed down:
This syntax makes it easier to construct complex intervals, and keep confidence that the execution plan will be optimal.
Please see the TICK docs for more information.
arg_min, arg_max, and geomean aggregates
Let's say you are monitoring trading data, and you track what the max trading price was over an hourly period. You can express that like this:
But now we have a problem - at what time or trade was that the max price?
Using
arg_max, we can extract values from the row where the price was max:Pretty handy!
geomean(D)calculates the geometric mean for a set of positive numbers; this is a useful average variant, which improves accuracy for data with large outliers, and commonly used for growth rate calculations.For more details, please check out the aggregate function documentation.
EMA, VWEMA, percent_rank window functions
We've introduced new exponential moving average (EMA) window functions. This smooths out your data base on a smoothing and time period.
Additionally, we've added a volume-weighted variant (VWEMA), which is commonly used for trading data, allowing for smoothing of the function whilst still prioritising higher-volume trades.
Here's an example of the syntax:
percent_rankreturns the relative rank of a row within a group of values. This is calculated based on the number of rows within the group, and its position.For more information, please see the window functions documentation.
Web Console
We've added new improvements to the 'QuestDB AI Assistant' feature, improving the speed and responsiveness of the chat. We'll be following up soon with an expansion of supported model providers.
questdb-assistant.mov
Performance
Time-intrinsics upgrades
dateaddoffset.WHERE dateadd('m', 15, timestamp) = '2022-03-08T18:30:00Z'ORclauses:WHERE timestamp IN '2018-01-01' OR timestamp IN '2018-01-02' OR timestamp IN '2018-01-03'SELECT * FROM (SELECT dateadd('h', -1, timestamp) as ts, price FROM trades) WHERE ts in '2022'Parquet and File-handling
Changelist
first/last/min/max(timestamp)as function argument by @kafka1991 in #6690New Contributors
Full Changelog: questdb/questdb@9.3.1...9.3.2
v9.3.1Compare Source
QuestDB 9.3.1
QuestDB 9.3.1 follows the major 9.3.0 release, focusing on stability, correctness, and performance refinements based on early feedback and production usage.
This release delivers targeted fixes across joins, views, and checkpointing, alongside continued performance improvements on hot SQL execution paths.
Improvements
Arithmetic expressions in window functions
Window functions now support arithmetic expressions directly, allowing analytical queries to compute derived values inline without requiring subqueries or post-processing:
This simplifies common patterns such as calculating deltas, ratios, and scaled values within window definitions.
Extended
tables()metadataThe
tables()system view now exposes two additional columns:table_min_timestamptable_max_timestampThese columns provide quick visibility into the temporal bounds of each table, useful for diagnostics, retention checks, and operational tooling.
ksum()window functionThe
ksum()function now works as a window function, using the Kahan summation algorithm for improved floating-point precision. This complements the existingksum()aggregate function by enabling its use in window contexts:All standard window frame types are supported:
ROWS,RANGE, partitioned, unbounded, and sliding windows.Performance
Streaming Parquet export
Parquet exports via the HTTP
/expendpoint now stream directly from page frames, eliminating intermediate temporary tables. This reduces memory overhead and improves export throughput for large result sets.Reduced garbage on parallel query hot paths
Parallel query execution has been optimized to reduce garbage generation on hot paths. This lowers GC pressure and improves throughput and tail latency under sustained analytical workloads.
Avoid repeated expression execution
Queries where columns reference other columns now avoid redundant expression
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.