v26.0
This article describes the release notes for VeloDB Core v26.0.
Note VeloDB Core v26.0 was developed based on Apache Doris v4.0 .
v26.0.5 (July 21, 2026)
This release incorporates Apache Doris v4.0.7 (build base 4.0.7-rc02) along with VeloDB-specific enhancements.
New Features
- Added a SQL block rule that can require a partition filter, so you can block full-partition scans on large tables.
- Added table-level, event-driven cache warm-up, so a table's data warms as it is written rather than on a fixed schedule.
- Added per-job metrics for routine load, covering consumed and error rows, throughput, progress, consumer lag, and abort count.
- Added the ability to view which compute group runs each materialized view (MTMV) refresh task.
- Added a metric for the maximum number of connections.
Improvements
- The cloud write path now packs small files and omits empty rowset metadata by default, which reduces the number of object-storage files and the metadata written by frequent small loads.
- Reduced backend memory usage during high-concurrency loads and row-store writes.
- Inactive page-cache memory is now counted as available, so queries are no longer cancelled for low memory when that memory can be reclaimed.
- Routine load now reports consumer lag more promptly, and a Kafka
read_committedconsumer no longer spins on empty retries when it encounters uncommitted transactions. - The S3 reader now skips listing when a file path is fully determined, using a
HEADrequest instead, which speeds up reads of external tables with many files. - The S3 reader now fails fast on a
SlowDownthrottling response instead of retrying, so a retry storm no longer adds to the pressure on object storage. - Compaction avoids repeatedly selecting the same large cumulative rowset, reducing wasted compaction work.
- Audit logs now mask user passwords in
CREATE USERandALTER USERstatements, and record per-querySET_VARhint session variables.
Bug Fixes
- Fixed several planner bugs that could return wrong results: runtime filters pushed through outer joins, pre-aggregation state leaking across the two sides of a join,
NOT INsubqueries where null-aware handling was dropped by mistake, casts pushed throughUNION DISTINCT, set operations using the wrong child output, and a rewrite that turned some TOP-N queries intoMAX. - Fixed
MERGE_TOP_Nnot clamping the merged limit by the parent offset, which could return the wrong rows forORDER BY ... LIMITwith anOFFSET. - Fixed legacy literal comparison not matching Nereids semantics, which could evaluate some predicates incorrectly.
- Fixed
TopNbeing allowed inside a correlated scalar subquery. - Fixed nullable date literal binding and
datedifffolding, includingdatediffon a zero date. - Fixed
convert_tzproducing wrong partition pruning across DST transitions, and alignedconvert_tzfolding with backend DST handling. - Fixed the sign being lost for negative sub-hour
TIMESTAMPTZoffsets. - Fixed
json_containsreturning wrong results when the JSON array held duplicate candidate values. - Fixed
enable_insert_strictincorrectly changing the semantics ofenable_strict_cast. - Fixed
array_sortlambda arity validation and boolean casts forarray_firstandarray_last, and rejected more than one argument tocount(distinct ...)in a window function. - Fixed
SHOW PROCESSLISTinFULLmode returning unexpected results. - Fixed a crash (
IndexOutOfBoundsException) when computing a view's output hit a schema change on the underlying table. - Fixed MTMV mutating excluded trigger tables, and added null-safety when reading base views for backward compatibility.
- Fixed concurrent
INSERT OVERWRITEwith auto-detected partitions failing with an unknown tablet error, and fixed force-drop-partition handling inINSERT OVERWRITE. - Fixed
load_to_single_tabletrouting for auto-partitioned tables. - Fixed transactional writes being routed to a backend outside the current compute group, which could fail
INSERTand transactional loads in warehouses with more than one compute group. - Fixed concurrent loads and partition changes on the same cloud table conflicting on the table version and failing with
KV_TXN_CONFLICT. - Fixed a null-pointer error in auto-partition creation when a partition was concurrently dropped.
- Fixed
http_streamtruncating a compressed file during stream load, and a broken-pipe error when the frontend redirected a stream load client with an unconsumed request body. - Fixed stream load picking the wrong backend, or failing, when backend IDs were far apart, caused by an integer overflow when comparing them.
- Fixed a routine load task not renewing its lock after a submit failure.
- Fixed several cloud schema-change issues, including refreshing the base tablet before a V1 schema change, and fixed reading a packed inverted index file on a file-cache miss.
- Fixed a race on cloud cumulative compaction that could pair empty-cumulative and base-cumulative work on the same tablet.
- Fixed backend crashes, including a rowset-map race in the tablet scanner, a finalized pipeline task being resubmitted, and an Avro JNI reader dereferencing a null pointer.
- Fixed the
retentionfunction accepting more than 32 arguments, which could overflow the backend heap. - Fixed Iceberg
COUNT(*)pushdown throwing a null-pointer error when the snapshot summary omitted total-row counters, the mapping of the Iceberg varint type, and detection of the format of migrated Iceberg tables. - Fixed filling the Hive metadata cache when loading row counts for queries.
- Fixed JDBC pushing SQL Server and Oracle boolean predicates as
TRUEandFALSEinstead of1and0. - Fixed Lucene-syntax full-text search being accepted on columns without an inverted index, which now returns a clear error.
- Fixed
COM_RESET_CONNECTIONnot fully resetting a session, so a pooled MySQL connection could keep user variables, temporary tables, prepared statements, or an open transaction after reuse. - Fixed a query returning no result packet when the FE master switched during execution.
- Fixed
LIKEpatterns not accepting a dollar sign. - Fixed the SQL parser so
IS NULLbinds to the correct primary expression. - Fixed
CREATE TABLEaccepting an invalid IPv4 default value, which is now rejected. - Fixed rejecting
COUNT(DISTINCT ...)on a Variant column instead of failing later.
v26.0.4 (June 16, 2026)
This release incorporates Apache Doris v4.0.6 (build base 4.0.6-rc02) along with VeloDB-specific enhancements.
New Features
- Added the
mmhash3_u64_v2hash function. - Added the
json_object_flattenscalar function for flattening nested JSON objects. - Added lambda comparator support to
array_sort, so arrays can be sorted with custom comparison logic. - Added Iceberg REST catalog and S3 Tables IAM role authentication support.
- Added Compaction task tracking through a system table.
Improvements
- Changed the default Time Series Compaction trigger threshold from 2000 files to 1000 files, so time series data compacts sooner.
- Reduced memory pressure during load and write workloads by adapting write buffer sizing, allowing online adjustment of the flush thread pool, and releasing unused write memory earlier.
- Improved Compaction isolation in compute-storage decoupled mode, reducing contention between user workloads and background Compaction.
- Reduced optimizer planning overhead for complex queries and improved row-count estimates for queries after partition pruning.
- Reduced statistics collection overhead by skipping overly long string columns.
- Improved audit and metrics accuracy for partition near-limit reporting, histogram labels, internal query status, and prepared statement QPS.
Bug Fixes
- Fixed
INTERSECTandEXCEPTqueries losing NULL rows when predicates were pulled up during planning. - Fixed
count(null)being incorrectly treated ascount(*), and fixedcountqueries with aMATCH_ALLexpression failing with aNoSuchElementException. - Fixed materialized view rewrites returning incorrect results when partition pruning removed constant-true predicates, and fixed rewrites that merged partitions not needed by the query.
- Fixed multi-input fragment queries failing with
Rows mismatched! Data may be lostwhen the same fragment received both broadcast and hash-partitioned inputs. - Fixed errors in queries that push projects into
UNIONor reuse CTE producer statistics. - Fixed the
no_use_cbo_rulehint being silently ignored. - Fixed several TIMESTAMPTZ and datetime issues, including LEAD and LAG preserving the wrong type, DST gap and fold handling, elapsed-time calculations, and TopN runtime predicate support.
- Fixed incorrect results when casting scientific-notation strings to Decimal.
- Fixed incorrect results from
allow_zero_date, and changedfrom_olap_stringto return NULL instead of throwing when datetime parsing fails. - Fixed integer type inference and argument resolution for user variables.
- Fixed
ALTER VIEWdefinitions not propagating to follower FEs when the view has a COMMENT. You are affected only in multi-FE deployments. - Fixed incorrect results from views over Variant columns when the view definition lost Variant subfield references.
- Fixed invalid alias rewriting in view definitions and view columns losing
colUniqueIdunder lazy materialization. - Fixed Variant compaction failures on keyless tables with a Variant column whose uid is 0.
- Fixed Variant subcolumns being lost after Row Store partial-column updates, and fixed reading legacy single-part dot-key subcolumn paths.
- Fixed duplicate Variant JSON paths keeping the wrong occurrence. The first occurrence is now preserved.
- Fixed Broker Load loading only the first file when multiple file paths are specified.
- Fixed PostgreSQL CDC streaming jobs silently dropping DML after a task restart.
- Fixed streaming job offset, statistics, and property restoration after FE checkpoint or restart.
- Fixed Routine Load failures from null Kafka metadata state and from coordinating BE restarts.
- Fixed CSV parsing when a UTF-8 BOM file uses an enclose character.
- Fixed INSERT job statistics disappearing from
SHOW LOADafter FE restart, and fixed InsertLoadJob memory leaks when jobs stayed in PENDING. - Fixed JDBC catalog type mapping for Doris-compatible MySQL endpoints whose
version_commentdoes not containDoris. - Fixed query TVF column aliases being lost across JDBC catalogs.
- Fixed Hive DATE values shifting because of timezone handling in external readers.
- Fixed predicate filters being skipped when external file scans mix native and JNI readers.
- Fixed
SHOW PARTITIONSincompatibility with external catalogs and the partitions TVF. - Fixed an out-of-bounds crash when generating partition columns for Iceberg or Paimon tables.
- Fixed Parquet read and write issues involving INT96 timestamp output, Page V2 encoding, and conditional checks.
- Fixed table-valued functions failing when the generated Thrift message exceeded the configured size limit.
- Fixed several cloud schema change failures involving local rowset replacement, version holes, and delete bitmap capture.
- Fixed a race between first-time dynamic partition setup and concurrent
CREATE MATERIALIZED VIEW. - Fixed
CANCEL ALTERwith an empty job list being treated as canceling all rollup jobs. - Fixed
SHOW TABLETfailing when no database is selected, fixedSHOW BACKENDSfield order mismatch, and fixed partition cached versions missing fromSHOW PROC. - Fixed BE crashes during concurrent OLAP scans, shared-hash-table hash joins that publish runtime filters, and IO callback cleanup.
- Fixed Arrow Flight SQL query execution when results are returned from BE, fixed client IP authentication, and fixed Arrow string size handling.
v26.0.3 (April 12, 2026)
This release incorporates Apache Doris v4.0.5 along with VeloDB-specific enhancements.
New Features
- Added support for ASOF JOIN, which matches each row to the closest preceding row in time and is useful for time series analysis.
- Added ORDER BY and LIMIT clauses to UPDATE and DELETE statements.
- Enhanced full-text search with BM25 relevance scoring, including phrase-level scoring, added prefix and phrase-prefix queries, and made it possible to use a MATCH result as a projected virtual column.
Improvements
- Raised the default partition limit to 20000.
- Changed the default search function mode from standard to Lucene.
- Extended the NDV approximate distinct count function to support the decimalv2 type.
- Improved the performance of queries that read tables through a Paimon catalog.
- Reduced memory usage during data loading.
Bug Fixes
- Fixed the abs() function returning an incorrect result for decimalv2 values. You are affected if you call abs() on a column or expression of the legacy decimalv2 type.
- Fixed SUM and AVG failing with a type error when given JSON input, such as SUM over a json_extract result. These aggregations now work by coercing the JSON value to DOUBLE.
- Fixed array_apply failing with a type error on arrays that contain LARGEINT values.
- Fixed the query cache returning incorrect results when different subcolumns of the same Variant column were read. You are affected only if the query cache is enabled and you query more than one subcolumn of a Variant column.
- Fixed incorrect results from ORDER BY ... LIMIT (TopN) queries over an outer join when the sort key comes from the nullable side of the join.
- Fixed a query error when an asynchronous materialized view defined on a table with Variant columns was eligible to rewrite the query.
- Fixed several full-text search issues: a crash when MATCH was used on an aliased column, incorrect parsing of search terms containing a slash, wrong handling of NULL rows in negated (MUST_NOT) clauses, and a crash on very long indexed string values.
- Fixed crashes when reading Iceberg tables that have both undergone a schema change and use equality deletes, and a failure of Iceberg rewrite_data_files after the table was updated.
- Fixed a crash in set operations (UNION, INTERSECT, EXCEPT) when the combined data exceeded 4 GB, and a crash in the ORC reader when predicate pushdown was applied while reading ORC files.
- Fixed time zone handling in the hour_ceil and hour_floor functions on timestamps that carry a time zone, and incorrect results when using non-standard time zone offsets such as +08:45.
- Fixed streaming insert jobs that could stall or fail, including when no new files were found, an object storage authentication error was silently ignored, table function properties were not refreshed after an ALTER statement, or a null pointer error occurred during replay. You are affected only if you use streaming insert jobs.
- Fixed routine load jobs being incorrectly cancelled after a frontend restart that followed a table swap (REPLACE).
- Fixed INSERT OVERWRITE failing with an error when the partitions being replaced did not exactly match the table's current partition ranges, for example after partitions had been added or removed.
- Fixed query errors when reading an Elasticsearch catalog table whose keyword field contains array data.
- Hardened LDAP filter handling to prevent injection. Relevant only to deployments that use LDAP authentication.
v26.0.2 (March 25, 2026)
Improvements
- Merged all features, improvements and bug fixes from Apache Doris v4.0.4.
v26.0.1 (March 17, 2026)
Improvements
- Merged all features, improvements and bug fixes from Apache Doris v4.0.3.