4.0.12
4.0.12
Release Date: June 25, 2026
Behavior Changes
- When reading INT64 timestamps from Parquet files written with
isAdjustedToUTC=false(timezone-naive),SELECT FROM FILES()and broker/stream LOAD no longer shift the values by the session timezone offset. Such timestamps are now read as wall-clock values, consistent with Trino, Spark, and Impala. Previously the values drifted whenever the session timezone was not UTC. #73674 - CTAS (
CREATE TABLE AS SELECT) now preserves the declaredVARCHAR(N)length when the source carries an explicit user length (a catalog column reference,CAST AS VARCHAR(N), or a string literal), instead of widening it toVARCHAR(1048576). This keeps the length constraint enforceable and aligns DDL with dbt schema contracts. Materialized view materialization still widens columns as before. #73498 - The Paimon connector now respects the session variable
connector_max_split_sizewhen calculating scan splits, instead of always using the default value, so tuning it now affects Paimon scan parallelism. #71756
Improvements
- Optimized
base64_to_bitmapby folding the conversion at constant-evaluation time for constant inputs. #74684 ngram_searchnow supports a non-constant needle (the search term can be a column expression rather than only a constant). #74675- The Arrow-to-JSON converter now supports
LARGE_LISTandFIXED_SIZE_LISTtypes. #73714 - Added an opt-in option to isolate wide-string columns during statistics collection to reduce memory pressure. #73258
information_schema.COLUMNSnow populates theDATETIME_PRECISIONfield. #74623- Relaxed database read locks to table-scoped intensive locks in
InformationSchemaDataSourceandFrontendServiceImplto improve concurrency. #73936 #73913 - Narrowed database write locks to table-scoped intensive write locks for shared-nothing clusters, and scoped replica row-count updates to the table lock. #74523 #74521
- Moved the routine-load broker RPC out of the per-job write lock to reduce contention. #73591
- Deferred JDBC
REMARKSfetching out of thegetTable()hot path to speed up metadata access for JDBC catalogs. #73488 - Pushed down the
table_namepredicate forinformation_schema.tables_configqueries. #73210 - Skipped per-replica scans on single-medium BEs in
BackendLoadStatistic. #73555 - Added a write timeout to the MySQL channel result send path to prevent stuck connections. #73646
- Added catalog recycle bin size gauge metrics. #74440
- Added vacuum batch-size and retry-count metrics, and added decorrelated jitter to the lake vacuum retry backoff to reduce retry storms. #74112 #74108
- Upgraded third-party dependencies to address security vulnerabilities (CVE): Netty to 4.1.135.Final, Tomcat to 9.0.118, and Thrift to 0.23.0. #74668 #73797 #73625
Bug Fixes
The following issues have been fixed:
- Successfully committed multi-statement transaction stream loads were shown as
PREPARINGforever ininformation_schema.loadsandSHOW STREAM LOAD. #74386 - Rows were silently dropped from
information_schema.loadson clusters whose session timezone differs from Asia/Shanghai, because load times were exchanged as naive wall-clock strings across the BE/FE thrift boundary. #73365 - The
COMMITof an explicit transaction waited onlyquery_timeoutmilliseconds (instead of seconds) for the database write lock due to a unit mismatch. #73549 current_timestamp/now()column defaults were displayed as a frozen literal afterALTER TABLE ... ADD COLUMNand could be lost across FE restarts or edit-log replay. #73455- Querying
sys.fe_memory_usage/sys.fe_lockswithout theOPERATE ON SYSTEMprivilege returned a misleading RPC-failure message instead of a clear access-denied error. #73567 - Automatic per-key Hive partition stats refresh could overload the Hive Metastore for tables with many partitions. #73563
- A null-pointer issue when reading the GTID during a schema change. #74855
- An empty analytic operator was not pruned after pushing down a distinct aggregation. #74810
- Zero row counts could corrupt partition statistics. #74801
- Vector index rewrite could pollute the shared table schema. #74785
- An
IllegalStateExceptionduring parallel profile collection, fixed by making Tracers fork-aware. #74746 - BE vacuum tasks were not aborted once the FE caller's timeout elapsed. #74694
- Partition consumer errors in
ChunksPartitionerwere lost instead of being propagated. #74693 - A lock mismatch in
blockingAddTabletCtxToScheduler. #74596 - A typo in the
azure_adls2_oauth2_client_endpointconfiguration field name. #74581 - Pipeline observers were not notified on missed operator state transitions. #74557
- The reported vacuum watermark was incorrect when retain-boundary metadata was gone. #74429
- A data race on
MaterializedIndexMetaduringupdateSchemaBackendId. #74412 - A non-primary-key replica could get stuck with a permanent version hole; it now self-heals. #74408
- A use-after-free of
LLVMContextwhen JIT compilation fails. #74396 - A column mismatch in the missing-replica row of
ADMIN SHOW REPLICA STATUS. #74393 - Invalid JIT IR generated for
CASE WHENwith mixed float/int WHEN and result types. #74382 - The
CatalogRecycleBinwas frozen when a cluster snapshot kept failing. #74379 - A partial update targeting a table modified earlier in the same explicit transaction is now rejected with a clear error. #74344
- Immutable-partition updates did not use the transaction's compute resource. #74316
- A potential out-of-bounds error caused by partitioned join. #74315
- Database-level UDFs were not restored to the renamed target database for FE followers. #74313
- Non-root compound predicates yielded
EOFinstead ofNotPushDown. #74218 - Table names were not backquoted when persisting the routine load
origStmt. #74188 - An assertion name lookup error in assert-num-rows. #74178
- Aggregation used type-mismatched aggregate functions. #74159
- Force-killed task runs were not archived, and session-prefixed task-run timeouts were not honored. #74146
RENAMEandSWAP(for tables and materialized views) now take the database write lock to avoid concurrent-modification issues. #74100- Composite-rowset stats were not summed when batching op_writes in primary-key multi-statement transactions. #74059
- The sink was not notified when a distinct aggregate source finished. #74055
pipe_file_listwas not recreated when_statistics_was dropped. #73970- A crash in
TabletInvertedIndex.deleteTablets, fixed by fast-path skipping empty input. #73955 - The task manager could write an illegal edit log for a task run. #73882
- A
set_thread_namerace on data directory load threads. #73862 - A race condition in
TabletSinkSender::_send_chunk_by_node. #73820 - Incorrect memory accounting in
OlapTableSink. #73807 - Incorrect connector bytes-read statistics. #73799
BACKUP ON (ALL FUNCTION)/(ALL EXTERNAL CATALOGS)failures. #73790NullableColumnUnaryFunctionlost the decimal scale when all values were null. #73789- A FlatJSON crash when subwriters had no appends. #73730
LargeList/FixedSizeListcould not be converted to a JSON column during broker load. #73718- Partial-append of nested types failed during JSON load. #73715
- An NPE in
StatisticsCalcUtilswhen a partition is dropped concurrently. #73711 - Decimal-valued unit counters were not parsed in
RuntimeProfileParser. #73683 - An NPE during nested materialized view refresh. #73644
- Multi-statement transactions were not handled correctly in lake
publish_log_version. #73423 - An empty
ALTER TABLEclause is now rejected, andOPTIMIZEreplay was improved. #73352 - Disk cache overflow when Iceberg metadata entries are pinned. #71651