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.6 (August 24, 2026)
This release incorporates Apache Doris v4.0.8 (build base 4.0.8-rc02) along with VeloDB-specific enhancements.
Improvements
- Upgrades from versions based on Apache Doris 3.x now enable the Nereids distributed planner consistently instead of retaining a disabled setting from older metadata.
- Raised the default
autobucket_min_bucketsvalue from 1 to 3, so automatically bucketed tables start with more parallelism and better data distribution. - Reduced the latency of lightweight
information_schema.tablesqueries on large OLAP tables by avoiding unnecessary tablet-level status collection. - Improved S3 wildcard scans by pushing expandable path prefixes into object listing, which reduces listing work for selective glob patterns.
- Reduced repeated credential-provider setup when accessing AWS Glue catalogs.
- Routine Load now records the first source error, returns it consistently from non-master frontends, and masks sensitive Kafka properties in job metadata.
- Workload Group memory-limit changes now refresh effective memory tracking promptly.
- Data and expression failures during scans now preserve the original diagnostic instead of being reported as storage-reader initialization failures.
- Increased the table-version fetch timeout to reduce transient query and load failures during slow metadata responses.
- Hardened JDBC catalog
driver_urlvalidation. New or changed catalogs now reject path traversal and scheme-less paths that are not plain JAR file names.
Bug Fixes
- Fixed sample
ANALYZEchoosing parameters from one sampling algorithm and SQL from another, which could fail with an unknown-column error on small tables when DUJ1 sampling was selected. - Fixed inverted-index queries returning zero rows for legacy V1 tables after an upgrade and Schema Change introduced mixed physical index formats.
- Fixed Broker Load job-level retries reusing a transaction that the previous attempt had already aborted.
- Fixed metadata checkpoint loading failing when a persisted
storage_mediumvalue used lowercase or mixed-case letters. - Fixed high-concurrency asynchronous Stream Load with Group Commit waiting indefinitely after plan creation failed or left an unusable block queue.
- Fixed prepared-statement loads with a reused Group Commit plan sharing one load ID, which could report success while silently losing rows.
- Fixed automatic-partition loads without physical partitions selecting a dummy tablet location from a cluster other than the current cluster.
- Fixed Stream Load routing with the
compute_groupproperty selecting the wrong cluster, and stopped assigning load work to decommissioning backends. - Fixed urgent merge-on-write loads preempting an active Schema Change lock, which could cause the Schema Change to fail.
- Fixed cleanup from an older load attempt aborting a newer transaction that reused the same label.
- Fixed
INSERTcontinuing with a backend that restarted during execution. The statement now fails promptly. - Fixed
INSERT INTO ... SELECT,DELETE, andUPDATEfailing the filter-ratio check when ordinary query predicates filtered all scanned rows. - Fixed
DELETEfailing on unique merge-on-write tables with generated columns when light delete was disabled. - Fixed Arrow Stream Load failing when input column names used uppercase letters.
- Fixed S3-backed writes hanging or hiding the original error when asynchronous task submission failed.
- Fixed multi-table CDC snapshots mixing schemas when captured tables used different column layouts.
- Fixed queries with multiple co-located window functions returning incorrect results when a Partition TopN filter was pushed below windows with incompatible
PARTITION BYkeys. - Fixed aggregation simplification returning incorrect results when a
GROUP BYexpression was not injective, such asa * 0, floating-point expressions, or NULL literals. - Fixed predicates containing
rand,uuid,random_bytes, oruuid_numericbeing moved across plan operators in ways that changed query results. - Fixed a
UNION ALLjoin pull-up rewrite comparing plan inputs with different output shapes, which could produce an invalid rewritten plan. - Fixed
from_base64andto_base64corrupting memory for large inputs whose actual output exceeded the incorrectly sized scratch buffer. - Fixed legacy Decimal scans losing the declared precision and scale of values.
- Fixed Arrow Flight SQL queries against external tables failing with
Split source is releasedor crashing during batch split retrieval, and closed several frontend off-heap memory leaks in prepared-statement and result lifecycles. - Fixed the time-sharing scan executor retaining queued-task counts after queued splits were removed, which could reject later scans as if the queue were full.
- Fixed block serialization errors caused by standard-library exceptions terminating a backend. The query now returns an error.
- Fixed queries hanging while local runtime filters were merged.
- Fixed variable metadata scans crashing when a frontend returned an incomplete response.
- Fixed failed scheduled job tasks not recording their finish time.
- Fixed retries after a stale table-version error continuing to use the same stale cached version.
- Fixed conflicting
default.replication_allocationanddefault.replication_numtable properties causingSHOW CREATE TABLEto report the wrong default allocation. - Fixed Colocate replica allocation changes being restored incorrectly after metadata replay.
- Fixed VeloDB Cloud schema views reporting inconsistent local and remote tablet sizes, and fixed
SHOW PROCreporting incorrect tablet health and Colocate details. - Fixed
SHOW WARM UP JOBretaining a stale error after a successful retry and displaying detailed synchronization timestamps without dates. - Fixed failed Iceberg metadata commits replacing the original storage error with a misleading
Self-suppression not permittedmessage. - Fixed Iceberg scans using a table-level file format for every split when a table contained both Parquet and ORC files.
- Fixed Paimon splits losing or corrupting partition values when runtime partition pruning was disabled or replacement columns reused a prune block.
- Fixed Iceberg and Paimon external schemas, partition specifications, and metadata losing the original case of mixed-case column names.
- Fixed external table scans terminating a backend when scan scheduling received a missing or incompatible task handle. The query now returns an error.
- Fixed full-text searches over inverted indexes spanning multiple segments potentially skipping postings when block-WAND optimization was used.
- Fixed
SHOW ALTER TABLE ROLLUPandSHOW ALTER TABLE MATERIALIZED VIEWlosing the persisted state of older jobs after metadata reload. - Fixed sparse vertical compaction writing values at the wrong row offset for specific mixed-type column groups.
- Fixed concurrent query-profile cleanup and reporting leaving execution profiles incomplete.
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.