v4.1
This article describes the release notes for VeloDB Core v4.1.
Note VeloDB Core v4.1 was developed based on Apache Doris v3.1 .
v4.1.8 (June 24, 2026)
This release incorporates Apache Doris v3.1.7 along with VeloDB-specific enhancements.
New Features
- Added IAM role authentication for the Iceberg REST catalog and S3 Tables catalog, so you can grant access with a role instead of long-lived access keys.
- Added visibility into which compute group runs each materialized view (MTMV) refresh task, making it easier to troubleshoot compute group selection and failed refreshes.
- Added per-job metrics for routine load, covering consumed and error rows, throughput, progress, consumer lag, and abort count, so you can isolate a slow or failing job.
- Added metrics for asynchronous materialized views, covering refresh-task status and the time spent rewriting queries to use a materialized view during planning.
Improvements
- Raised the default partition limit for auto and dynamic partitioning to 20000, and added a metric that fires when a table passes 80% of the limit.
- Auto-bucketed tables now create at least 3 buckets by default instead of 1, which improves parallelism for small tables and for tables whose row count is underestimated.
- Reduced backend memory usage during high-concurrency loads and row-store writes.
- The cloud write path now packs small files and omits empty rowset metadata by default, which cuts the number of object-storage files and the metadata written by frequent small loads.
- Routine load now reports consumer lag more promptly, and a Kafka read_committed consumer no longer spins on empty retries when it encounters uncommitted transactions.
- Statistics collection now skips string columns longer than 1024 bytes per row, so wide text columns no longer slow down or stall ANALYZE. The job still finishes and records why the column was skipped.
- Asynchronous cache warm-up no longer blocks queries, and duplicate warm-up jobs submitted for the same table are now ignored.
- The S3 reader now fails fast on a SlowDown throttling response instead of retrying, so a retry storm no longer adds to the pressure on object storage.
Bug Fixes
- Fixed several planner bugs that could return wrong results: runtime filters pushed through outer joins, filters with non-deterministic functions such as random() pushed below a join, pre-aggregation state leaking across the two sides of a join, count(null) being treated as count(*), and a rewrite that turned some TOP-N queries into MAX.
- Fixed null probe rows being dropped by a mark join, which could produce wrong results for NOT IN and NOT EXISTS subqueries.
- Fixed view definitions being rewritten incorrectly when the view used an aggregate alias, a star (*) expansion, or a Variant subfield, which could make queries on the view fail or return wrong results.
- Fixed materialized view rewrites returning wrong results with outer joins or partition compensation, where the rewrite could pick the wrong partitions or fail to reject null rows.
- Fixed narrowing datetimev2 casts being lost when an IN predicate was simplified, which could change query results.
- Fixed a Variant column losing its contents after a row-store partial update, and fixed reads of a dotted Variant subcolumn written by an earlier version failing after an upgrade.
- Fixed inconsistent handling of duplicate JSON paths in a Variant value, which now keeps the first value, and rejected JSONB and Variant columns as hash distribution keys instead of letting them fail later during writes or queries.
- Fixed JSONB functions crashing the backend on invalid input or an unexpected JSONB type, including json_set on a malformed JSONB value.
- Fixed a backend crash when the same tablet was scanned concurrently during a light schema change or a rowset state change.
- Fixed errors reading some external Parquet files, including a type mismatch after a dictionary-encoded row group and incorrect decoding of Parquet V2 data pages.
- Fixed stream load picking the wrong backend, or failing outright, when backend IDs were far apart, caused by an integer overflow when comparing them.
- Fixed a broken-pipe error when the frontend redirected a slow or chunked stream load client.
- Fixed concurrent INSERT OVERWRITE with auto-detected partitions failing with an unknown tablet error, caused by rows reaching a replacement partition before it was fully open.
- Fixed transactional writes being routed to a backend outside the current compute group, which could fail INSERT and transactional loads in warehouses that have 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 failed ADD PARTITION on a cloud table leaving partition metadata behind, which could break later partition creation, queries, or metadata sync.
- Fixed parallel SELECT INTO OUTFILE where several backends could clear the target directory at once and delete files that were still needed or fail the export. Exports to a local filesystem now reject the unsupported delete_existing_files option.
- Fixed row and byte counts being counted twice while loading into an auto-partitioned table, which inflated the reported load metrics.
- Fixed a null-pointer error in routine load when fetching Kafka metadata.
- Fixed the Iceberg REST catalog being unable to use temporary credentials with S3-compatible object storage.
- Fixed JDBC queries to SQL Server failing to read the schema with newer driver versions.
- Fixed incomplete row-count caching for Hive tables, and fixed queries and transactions failing when an external file system was evicted from the cache while still in use.
- Fixed COM_RESET_CONNECTION not fully resetting a session, so a pooled MySQL connection could keep user variables, temporary tables, prepared statements, or an open transaction after being handed out again.
- Fixed Arrow Flight SQL not seeing the real client IP, which broke IP-based authentication and access control.
- Fixed skip_catalog_priv_check applying too broadly, which let some catalog operations skip privilege checks.
- Fixed the SQL parser so IS NULL now binds to the correct primary expression.
- Fixed Prometheus histogram metrics losing their labels, which corrupted the metric names and broke aggregation and alerting on them.
- Fixed SHOW TABLET failing when no database was selected, and SHOW BACKENDS returning columns that did not line up with the header.
- Fixed version holes and stale compaction rowsets left after a cloud schema change, which could affect queries, the delete bitmap, and later compaction.
- Fixed low-write tablets not starting time-series compaction on schedule after a backend restart or migration.
v4.1.7 (May 21, 2026)
This release incorporates Apache Doris v3.1.6 along with VeloDB-specific enhancements.
New Features
- Added the mmh64_v2 hash function.
- Added the ability to view the compute group used by a routine load job.
Improvements
- Reduced memory usage during data loading and large queries.
- Improved the performance of large table scans.
- Allowed Variant columns to use light schema change, speeding up ALTER TABLE operations.
Bug Fixes
- Fixed incorrect column parsing when loading CSV files that both use an enclosure character and begin with a UTF-8 byte order mark (BOM). You are affected if you load such CSV files.
- Fixed the date_format function dropping microseconds for datetimev2 values. You are affected if you format datetime values that carry sub-second precision.
- Fixed the json_extract_string function returning an incorrect result in some cases. You are affected if you use json_extract_string to read string values from JSON.
- Fixed a missing predicate filter that could return extra rows when a single scan of an external file table used both native and JNI readers, for example a Hive or Iceberg table whose columns are read by different reader types.
- Fixed ALTER VIEW not propagating the new definition to follower frontends when the statement included a comment, which left followers serving the old view. You are affected only in multi-frontend deployments.
- Fixed RESTORE not preserving cross-database references when restoring views that reference tables in another database.
- Fixed a crash in set operations (UNION, INTERSECT, EXCEPT) when the combined data exceeded 4 GB.
- Fixed a crash in the ORC reader when predicate pushdown was applied while reading ORC files, for example external Hive or Iceberg tables.
v4.1.6 (April 30, 2026)
This is a maintenance release with internal stability and performance improvements. No user-facing changes.
v4.1.5 (April 15, 2026)
Improvements
- Improved read performance after cluster scaling or failover, so newly added compute resources can serve cached data sooner.
- Improved the performance of queries that sort large result sets.
v4.1.4 (March 27, 2026)
This release incorporates Apache Doris v3.1.5 along with VeloDB-specific enhancements.
New Features
- Added custom analyzer support for full-text search, including a pinyin tokenizer and filter.
- Added support for 45-minute time zone offsets.
- Extended Paimon catalog support, including the REST catalog and additional partition data types.
- Added support for writing compressed CSV files with column names and types in SELECT INTO OUTFILE.
Improvements
- Improved the performance of queries that sort data or that run large joins and aggregations.
- Raised the default maximum number of Variant subcolumns to 2048.
- Improved storage and compaction efficiency for wide tables with many sparse columns.
Bug Fixes
- Fixed INSERT OVERWRITE failing on an auto-partitioned table when the cluster was rebalancing tablets at the same time.
- Fixed INSERT OVERWRITE raising an error when it targeted partitions that had already been deleted.
- Fixed the disable_auto_compaction table property being ignored in cloud mode. You are affected if you set this property on a table.
- Fixed routine load jobs being incorrectly cancelled after a frontend restart that followed a table swap (REPLACE).
- Fixed queries not being automatically retried after a backend restarted, for example during an upgrade or a scaling operation.
- Fixed an INSERT failing when a schema change ran on the same table at the same time.
- Fixed primary-key point queries ignoring the session time zone for time functions such as from_unixtime.
- Fixed JDBC catalog issues, including incorrect NULL detection for PostgreSQL arrays and date predicate pushdown for SQL Server. You are affected if you query PostgreSQL or SQL Server through a JDBC catalog.
- Fixed a crash when casting a string to a STRUCT where the string contained more fields than the struct.
- Fixed a crash in the substring_index function on certain arguments.
- Fixed DELETE incorrectly requiring the LOAD privilege on a table referenced only in a subquery, such as a NOT EXISTS clause, which could block users who had the correct SELECT privilege.
- Fixed several cases that could return incorrect results: set operations (UNION, INTERSECT, EXCEPT), queries with a filter pushed through a UNION that contains constant expressions, and aggregation over a primary-key to foreign-key join.
v4.1.3 (February 12, 2026)
Improvements
- Merged all features, improvements and bug fixes from Apache Doris v3.1.4.
v4.1.2 (January 7, 2026)
Improvements
- Optimized the processing logic of view creation in special scenarios to improve the SQL user experience.
- Optimized the temporary resource management mechanism to enhance the long - term operational stability of the system.
- Optimized the cache capacity management strategy to improve resource utilization efficiency.
- Optimized the execution performance and stability of Routine Load in update scenarios.
- Optimized the transaction recycling process to strengthen the system's robustness.
- Added monitoring metrics related to transaction writing to enhance observability capabilities.
- Optimized the task scheduling and resource recycling efficiency in cloud environments.
v4.1.1 (December 10, 2025)
Improvements
- Merged all features, improvements and bug fixes from Apache Doris v3.1.3.
v4.1.0 (October 17, 2025)
Improvements
- Merged all features, improvements and bug fixes from Apache Doris v3.1.1.