Kate Shao-Community Manager
07/16/2026, 9:54 AMGitHub
07/21/2026, 6:33 PMLIKE predicates with constant operands (folded on the FE) now matches MySQL 8: SELECT 'a\\b' LIKE 'a\\\\b' returns 1 and SELECT 'a\\b' LIKE 'a\\b' returns 0. Queries that relied on the previous non-MySQL escaping semantics will return different results. #74814
• SHOW [FULL] FUNCTIONS now always includes the isolation property (shared or isolated) in the Properties column of UDFs, so users can tell whether the property is set without recreating the function. #75255
• Iceberg REST catalogs with vended credentials use the table metadata cache again, reverting the earlier cache bypass that sent every getTable() to the REST catalog and caused AWS Lake Formation Rate exceeded failures. Cached tables now renew their credentials on every refresh cycle, and the table cache expiry for REST catalogs is additionally capped at 3000 seconds. #75431
Improvements
• Added checksum protection for shared-data tablet metadata and transaction logs. #74924
• Supported combined transaction log / file bundling for FRONTEND_STREAMING loads. #74460
• Scoped shared-data schema-change job locks to the table to reduce lock contention. #75087
• Batch tablet force-delete marking now acquires the TabletInvertedIndex write lock once per batch instead of once per tablet. #75616
• Added an FE metric for the maximum pending-publish time of committed transactions. #75025
• Added a memory limit check for column upgrades in window operator processing. #75821
• Removed unnecessary per-row seeks in the offsets-only read path of array columns. #75861
• Foreground row-count estimation of Iceberg tables is now computed from manifest metadata without enumerating every data file. #75280
• Addressed security vulnerabilities (CVE): excluded the vulnerable org.jline:jline (jline-remote-telnet) from Hadoop transitive dependencies, and upgraded jackson-databind to 2.21.4. #75066 #75373
Bug Fixes
The following issues have been fixed:
• Incremental scan-range scheduling could recompute a different per-driver layout when reusing a deployed fragment instance, leaving part of the scan ranges unconsumed and losing rows (for example, INSERT from Hive). #74674
• INT96 timestamps nested inside ARRAY/MAP/STRUCT in Parquet files read via FILES() or Broker Load missed the session-timezone conversion and were returned shifted by the timezone offset (top-level INT96 columns were correct). #74868
• The audit log did not record the exported row count of SELECT INTO OUTFILE. #74467
• A strict cast could raise an overflow error from the underlying data of NULL rows, which should be ignored. #74903
• parse_json did not respect the ALLOW_THROW_EXCEPTION setting when handling invalid input. #74976
• First-load statistics collection could not be enabled per table while disabled globally: an explicitly set table property now takes precedence over the global configuration enable_statistic_collect_on_first_load. #74794
• Partial column updates on shared-data tables could crash the BE or silently corrupt data when the tablet schema drifted from the transaction schema. #74005
• Unexpected BE process restarts. #74424
• A BE crash (SIGFPE) in Iceberg `truncate`/`bucket` partition transforms when the width or bucket count is zero. #74998
• A BE crash caused by a null driver_executor in FragmentContext::set_final_status. #75030
• A race between transaction begin and autovacuum could delete a still-needed transaction log, permanently wedging the partition's publish ("Both txn_log and corresponding tablet_meta missing"). #74906
• avg(DISTINCT x) was incorrectly rewritten to use a sum/count materialized view, returning wrong results. #75071
• A boundary bug in TopN RANK sorting could produce incorrect results. #75045
• split / split_part / str_to_map with an empty delimiter could read out of bounds on invalid UTF-8 input. #75068
• ALTER TABLE ... MODIFY COLUMN ... AFTER a nonexistent column now returns a clear error message. #75073
• A BE crash (SIGFPE) in mod() / pmod() when computing the type's minimum value modulo -1. #74980
• bar() grew memory without bound on a negative or huge width (potential DoS); such inputs are now rejected with an error. #75143
• The transaction-state callback was not unregistered when a multi-statement stream load task was removed. #75188
• A crash when a query was cancelled during spill partition sorting. #75140
• The query memory limit was not enforced during table function execution. #75179
• Selecting a column named floor or ceil failed at parse time with a ClassCastException. #75241
• A heap-use-after-free in OrderedPartitionExchanger when the previous chunk was mutated downstream. #75279
• Three FE metadata-lock correctness races. #74968
• Load spilling could dereference a missing query context when recording spill metrics. #75236
• ADLS2 ListPaths on storage accounts without hierarchical namespace caused CN crashes and vacuum failures. #75166
• BE/CN JVM metrics emitted invalid Prometheus # TYPE lines. #75240
• JIT code generation truncated LARGEINT literals to 64 bits, producing wrong results. #75137
• A combined ALTER TABLE on an external Iceberg table re-executed already-queued actions. #74036
• A nested-loop join crash caused by a build-side column nullability mismatch. #75343
• Iceberg manifest column statistics are now cached selectively to avoid excessive FE memory usage. #75395
• addPhysicalPartition could create only one physical partition per call, making physical-partition backfill of random-distribution tables extremely slow. #75430
• A SQL injection vulnerability in the `informatio…
StarRocks/starrocksGitHub
07/23/2026, 7:58 AMCREATE DATABASE IF NOT EXISTS on Iceberg REST catalogs now succeeds silently when the database already exists, instead of raising an error. #75017
• Iceberg REST catalogs with vended credentials now cache Table objects and keep their credentials refreshed on access, instead of bypassing the cache and re-fetching from the REST catalog/Lake Formation on every getTable() call, which could trigger AWS Rate exceeded errors. #75431
• GIN inverted-index-accelerated NOT MATCH predicates no longer return rows with a NULL value, matching SQL three-valued-logic semantics. #75578
Improvements
• Added the FE metric txn_max_committed_pending_publish_ms, a per-database gauge reporting the longest time a committed transaction has been pending publish, to help diagnose stuck or lagging version publishing. #75025
• Enforced the query memory limit when a column is upgraded (widened) during window-function aggregation in Analytor, instead of letting it grow unbounded. #75821
• Removed useless per-rowid seeks in the array-column offsets-only read path used by `array_length()`/`cardinality()`. #75861
Bug fixes
The following issues have been fixed:
• Several wrong-result issues: EliminateSortColumnWithEqualityPredicateRule dropping the global LIMIT under concurrency; SplitJoinORToUnionRule producing duplicate rows for a null-safe-equal (<=>) `JOIN ON p1 OR p2`; JIT codegen truncating LARGEINT literals >= 2^64 to 64 bits; `array_map`/`transform` silently dropping NULL rows when all non-null input arrays were empty; nested dictionary expressions rebuilt inconsistently across exchange fragments causing dict-decode failures; and a LIKE pattern with the _ wildcard returning wrong rows on a GIN inverted index. #74983 #75038 #75137 #75141 #75246 #75551
• Join-reorder column pruning could drop a column still referenced by a predicate, causing a missing statistic of col planning error, and JoinTuningGuide could lose predicateCommonOperators when rebuilding a join, failing plan validation. #74791 #75773
• Sync materialized view/rollup rewrite could lose a rollup column when a query aggregated the same base column twice (e.g. min(c) and max(c)), and async materialized view rewrite could serve stale results after an Iceberg base table's rollback_to_snapshot. #75528 #75924
• PARTITION-TOP-N could rewrite its partition-by column to a dictionary slot that no longer existed, failing with a slot_id not found error. #75956
• An NPE collecting view tables when a SECURITY INVOKER view's stored definition contains a CTE. #74813
• Three FE metadata-lock correctness races around DROP PERSISTENT INDEX, RestoreJob post-restore handling, and related unlocked paths. #74968
• A race between FE EOS-cancel and BE stage-2 deploy could mark a fully successful query as canceled. #75009
• ApplyTuningGuideRule could throw UnsupportedOperationException when an earlier rewrite produced an OptExpression with an immutable input list. #70785
• BE/CN crashes: a null driver_executor when a cancel RPC arrives before pipeline start; a use-after-free in the spill partition-sort-sink cancel path; a heap-use-after-free in OrderedPartitionExchanger for a skew-hinted window function at DOP>1; an NLJoin crash from a build-side column nullability mismatch; a StructColumn field-count mismatch in UNNEST output; a crash loop reading a flat-JSON column that changed from NOT NULL to nullable during compaction; an uncaught memory-allocation exception in `NLJoinProbeOperator`; a crash in primary-key auto-increment partial-update apply; and a crash rewriting predicates inside an array_map lambda during scan-predicate pushdown. #75030 #75140 #75279 #75343 #75445 #75680 #75788 #76119 #76380
• histogram() crashed (or silently mis-bucketed values) on a non-positive bucket_num instead of raising a clear error, and bar() could grow an unbounded string for a negative or huge width argument, exhausting BE memory. #75041 #75143
• A query using unnest over array columns could exceed query_mem_limit and get the BE OOM-killed instead of failing just that query. #75179
• A second-order SQL injection in the information_schema.task_runs `TASK_NAME`/`QUERY_ID` predicate lookup. #75520
• SHOW CREATE ROUTINE LOAD could emit a spurious leading comma before the first load-desc clause, and an unescaped jsonpaths value, producing non-runnable DDL. #75522 #75755
• Shared-data (lake) SHOW PARTITIONS and information_schema.partitions_meta reported every physical partition's bucket count as the table-level default instead of its own bucket count. #75734
• Several dependency CVEs by upgrading jackson-databind and Netty. #75373 #76555
• Batched TabletInvertedIndex write-lock acquisition in markTabletsForceDelete, reducing lock churn when force-deleting many tablets at once. #75616
• Batched tablet inverted-index writes in the insert-overwrite path. #75923
• Skipped an unnecessary remote clear_parent_path call when a load spill never used remote storage. #76224
• A null-padding size mismatch for missing columns in ParquetScanner so padded rows match the actual per-batch chunk size instead of the whole Parquet/Arrow batch size. #75981
• Vulnerable, stale transitive dependencies (old BouncyCastle, OkHttp 2.x, Tomcat, and others) that previously shipped alongside their fixed counterparts. #76097
StarRocks/starrocksBeryl Chen
07/30/2026, 1:45 PMKate Shao-Community Manager
08/06/2026, 9:29 AMKate Shao-Community Manager
08/13/2026, 9:48 AMBeryl Chen
08/20/2026, 1:45 PMKate Shao-Community Manager
08/25/2026, 1:46 AMGitHub
08/27/2026, 1:40 AMINSERT into an Iceberg or Hive table is now validated even when a target column list is given. A clause that names a column which is not a partition column of the table is rejected with a clear error instead of being silently ignored. Every INSERT shape that was accepted before is still accepted. #76659
• ARRAY and MAP constructors now fail with a CapacityLimitExceed error when the flattened result of a single chunk exceeds the addressable byte limit, instead of silently returning corrupted values that CREATE TABLE AS SELECT, INSERT, or a materialized view refresh could persist. For affected queries, reduce chunk_size or split the constructor expression. #76419
• Division expressions whose divisor is not constant (for example, 10 DIV c) are no longer treated as monotonic, which stops unsafe Zone Map pruning from dropping rows that satisfy the predicate. Queries filtering on such an expression may return more rows than in earlier versions; the previous results were incorrect. Monotonic forms such as c DIV 10 still benefit from the pruning. #76744
• On a column with a GIN inverted index, NOT MATCH no longer returns rows whose value is NULL, which brings it in line with SQL three-valued logic. Queries that depended on the previous behavior return fewer rows. #75578
• Under "compression" = "zstd", flat JSON sub-columns and the synthetic null and offset sub-columns of ARRAY, MAP, and STRUCT columns are now compressed. They were previously written as raw pages, which could make a ZSTD table larger on disk than the same table compressed with LZ4. Only segments written after the upgrade are affected, so existing tables shrink gradually as their segments are rewritten. #76949
• The Iceberg partition cache is now bounded by memory instead of by entry count, through the new catalog property iceberg_partition_cache_memory_usage_ratio (default 0.1), and its footprint is reported in /api/memory_usage and the minute-level memory logs. Under memory pressure the cache may hold fewer entries than before; raise the ratio to restore the previous footprint. #76165
• FE memory estimation now also counts the internal overhead of maps and collections — per-entry nodes and the backing table — instead of only the sampled keys, values, and elements. Weight-bounded caches such as the Iceberg metadata caches therefore report their true footprint and evict earlier for the same *_memory_usage_ratio, which lowers FE memory usage but may increase cache misses. #75971
• When the keep-alive GC reaps an expired external scan context — left behind by a Spark or Flink connector reader that died without calling close_scanner — it now cancels the corresponding pipeline fragment. The buffered scan memory is released within keep_alive_min plus one GC interval instead of staying pinned until query_timeout. #76535
• The audit log of a statement forwarded to the Leader FE now records the relations resolved by the Leader, so QueriedRelations holds fully qualified table names with CTE references excluded, matching what the Leader logs. A Follower falls back to local collection only when the statement ran locally or the Leader did not return the list, for example during a rolling upgrade. #76387
• The Operation column of SHOW ALTER TABLE OPTIMIZE now shows a readable description of the optimize operation instead of an internal object address such as com.starrocks.sql.ast.OptimizeClause@b5dc069. #75948
Improvements
• Supported complex types (ARRAY, MAP, and STRUCT) in Paimon tables; querying such columns could previously crash the BE. #66784
• Added the LAST_REFRESH_TIME column to information_schema.materialized_views and SHOW MATERIALIZED VIEWS. It reports the data-freshness timestamp used by the mv_rewrite_staleness_second check, which is distinct from the existing LAST_REFRESH_FINISHED_TIME (when the refresh job finished running). #71642
• Added the mutable BE configuration item object_storage_client_cache_size (default 8), which replaces the hard-coded capacity of the S3 and Azure Blob client caches. #75851
• Metadata refresh of a filesystem-backed external table triggered by INSERT ... SELECT no longer runs while FE internal metadata locks are held, so slow remote metadata access no longer stalls unrelated work on the same path. #73391
• Multi-statement (multi-table) transaction Stream Load now dispatches all per-table channels before waiting for them, instead of dispatching and waiting for each table in turn, which shortens commit time for CDC pipelines that write many tables under one label. #76715
• Reduced lock contention across the INSERT OVERWRITE code path by relaxing or shortening the table-level locks held in each phase. #75828
• Error messages for the large-column capacity limit no longer embed internal diagnostics such as the driver address and the operator chain, and the Capaticy typo in the shared status string is corrected. #76303
• Shared-data Primary Key publish now applies the per-segment delete vectors carried in op_write.seg_delvecs, so a BE running this version consumes such metadata correctly instead of leaving duplicate primary-key rows live. #76474
• Addressed security vulnerabilities (CVE): upgraded Thrift to 0.24.0 and Netty to 4.1.136.Final, bumped the PostgreSQL JDBC driver to 42.7.12, and removed vulnerable transitive dependencies that shipped alongside their fixed counterparts, namely bcprov-jdk15on, the end-of-life OkHttp 2.x line, avro-ipc (which bundles jQuery 1.4.2), and the Jetty client and security jars. #76922 #76555 #76783 #76097 #76270
Bug Fixes
The following issues have been fixed:
• The query cache could store an incomplete per-tablet result and serve it to later queries, returning wrong results. #77066 #77404
• COUNT(DISTINCT) on an Iceberg table partitioned by bucket() returned an over-count when enable_bucket_aware_execution_on_lake was enabled and the GROUP BY list was a superset of the bucket column. #76601
• JSON subfield pushdown returned wrong results when two subfield keys of the same column differed only in case (for example, get_json_string(c, 'Campaign') and get_json_string(c, 'campaign')), because the generated column names are resolved case-insensitively. Such collisions are now excluded from the pushdown. #76594 #76593
• array_difference on integer input computed each adjacent difference in the 32-bit input typ…
StarRocks/starrocksGitHub
08/31/2026, 8:28 AMbranch-3.5, that caching caused INSERT OVERWRITE transactions against a slow Iceberg REST catalog to stay COMMITTED but not VISIBLE for several seconds, because a REST metadata refresh could now run while the planner held a lock that transaction publishing also needs. The caching behavior remains in place on the 4.x line. #77039
• GIN (inverted) indexes on Primary Key tables now read from the correct segment after a column-mode partial update, instead of serving stale index data from the unmodified base segment. #76271
• Audit logs for statements forwarded to the leader FE now record the leader-resolved, fully qualified table relations (with CTEs excluded), instead of the follower's unresolved names. #76387
• `ARRAY`/`MAP` constructor expressions now reject a result whose flattened size exceeds 4 GB instead of silently wrapping around and returning corrupted values. #76419
• Iceberg REST catalogs using OAuth2 client-credentials now self-heal their background token-refresh session after a prolonged failure, instead of leaving the catalog permanently unable to refresh its access token. #76457
• External scan contexts (for example, an abandoned Spark/Flink connector read) now properly cancel their pipeline fragments when reaped as expired, instead of leaving them running. #76535
• External scan plans (Spark/Flink connector reads) now set query_delivery_timeout, so their QueryContext no longer waits indefinitely for fragments that will never arrive. #76536
• array_difference() on integer arrays no longer overflows in 32-bit precision before widening to BIGINT, fixing incorrect results when the true difference falls outside the INT range. #76569
• Division expressions with a non-constant divisor (for example, 10 DIV c) are no longer treated as monotonic, fixing incorrect ZoneMap-based pruning that could return an empty or wrong result. #76744
• The configured compression codec now applies to the synthetic null/offset sub-columns of flat JSON, ARRAY, MAP, and STRUCT columns, instead of always writing them as uncompressed raw pages. #76949
• Load quorum selection no longer picks a replica in DECOMMISSION state as the load primary. #77035
• Optimizer rules that rebuild a logical window operator now preserve its inputIsBinary flag, keeping the binary-input merge optimization for ranking-window pre-aggregation intact. #77058
Improvements
• Materialized views no longer force a full-partition refresh when manually set from INACTIVE to `ACTIVE`; only the metadata version map is cleared during a schema change. #57371
• Improved error messages for large-column-capacity-limit checks by removing internal diagnostics (raw pointers, operator dumps) from the user-facing error, and fixed a typo in the shared status string. #76303
Bug fixes
The following issues have been fixed:
• Guarded against cyclic view definitions: an ALTER VIEW that closes a reference cycle (v1 -> v2 -> v1) is now rejected with a clear error instead of causing a later SELECT to recurse forever and crash with StackOverflowError. #75033
• Forbade pushing an aggregate down through a CASE expression that has a non-null constant ELSE branch, fixing a planning abort (IllegalStateException) that could occur once the rule fired. #75037
• CTEAnchor now prunes correctly when its child is a ValueOperator. #64491
• Fixed predicate conversion for Paimon: an AND-combined predicate now retains its convertible not-null branch instead of the whole conversion returning null. #66038
• The Arrow Flight prepared-statement schema no longer reports every view column as nullable regardless of its actual NOT NULL definition, and a related regression that produced wrong nullability for `GROUP BY ROLLUP`/`CUBE`/`GROUPING SETS` key columns has also been fixed. #75684 #76149
• Fixed two statistics bugs: an OR-predicate statistics estimate that always clamped the merged nullsFraction to 1 regardless of the real value, and a column-statistics cache load failure under ERROR_IF_OVERFLOW when a column's persisted min/max is an empty string. #75864 #76684
• Fixed a bRPC stub cache timer leak that leaked memory over time. #75973
• UNNEST output struct pruning now uses its input array's subfield group instead of the output's own, fixing a mismatch between the struct type BE materializes and the one FE declares. #76002
• Fixed Arrow Flight Prepared Statement forwarding sending the wrong action-type string when a request is forwarded to a different FE, which caused every ADBC client using prepared statements behind a load balancer to fail. #76310
• Hive getTable() now reconnects before falling back to get_table_req(), fixing an intermittent out of sequence response / Unknown table error when querying an Iceberg table through a Hive metastore catalog. #76456
• Made catalog-drop existence checks atomic under the write lock, fixing a check-then-act race that could persist a redundant drop record when two drops of the same catalog ran concurrently. #76778
• Fixed PipeObservable emitting a source event instead of a sink event on a deferred sink notification, which could leave a driver blocked on OUTPUT_FULL unresponsive. #76782
• dictionary_get() no longer rejects a non-NULL key when its input column's cached has_null flag is stale. #76881
• Added the missing arrow-compression module for Arrow Flight SQL, restoring LZ4/ZSTD codec support for compressed Arrow IPC clients. #76921
• Fixed an OOM in streaming pre-aggregation under memory pressure with spill enabled. #76702
• Set operators are no longer placed in colocate execution groups, fixing a hang caused by their branches being terminated by a plain local-exchange sink instead of a grouped-execution sink. #77025
• Stopped the query cache from storing incomplete per-tablet results for an aggregation with a LIMIT, which could return wrong results from the cache. #77066
• An insert-overwrite failure is no longer journaled against a table that was concurrently dropped, fixing an FE crash on journal replay. <https://github.com/StarRocks/starrocks/pull/77…
StarRocks/starrocksKate Shao-Community Manager
08/31/2026, 11:14 AMBeryl Chen
09/03/2026, 1:45 PMKate Shao-Community Manager
09/08/2026, 5:15 PMKate Shao-Community Manager
09/15/2026, 9:17 PMBeryl Chen
09/17/2026, 1:45 PMGitHub
09/17/2026, 10:35 PMCTAS now preserves explicitly declared VARCHAR(N) column lengths instead of widening them to VARCHAR(MAX). Existing tables are unaffected; new tables created with CTAS will enforce the declared length on subsequent writes. #73498
• Querying sys.fe_memory_usage or sys.fe_locks without the OPERATE ON SYSTEM privilege now returns a clear access-denied error instead of a misleading node-lookup failure. #73567
• FILES() and broker/stream load no longer apply a session timezone shift to INT64 Parquet timestamps written with `isAdjustedToUTC=false`; those timestamps are now treated as wall-clock values and loaded as-is. Data loaded from such files before v4.1.3 may differ from data loaded after upgrading; reload if consistency is required. #73674
• Successfully committed multi-table transaction stream load jobs are now correctly shown as VISIBLE in information_schema.loads and SHOW STREAM LOAD instead of remaining stuck at PREPARING. #74386
• Connector incremental scan range scheduling now consistently reuses the deployed fragment's driver layout, preventing scan ranges from being incorrectly assigned to non-existent drivers. #74674
• LIKE constant-folding now matches MySQL 8 backslash-escape semantics, correcting cases where patterns such as 'a\\\\b' previously returned opposite results. #74814
• Routine Load now supports the property.kafka_partition_discovery property, which allows partition auto-discovery to continue even when kafka_partitions and kafka_offsets are specified to seed exact starting offsets. When property.kafka_default_offsets is not set, the default starting offset for partitions discovered after the job already has consuming progress changes from OFFSET_END to OFFSET_BEGINNING — and this applies to all auto-discovery jobs, not only those using the new property. #74729
• Non-group-by aggregates are now pushed down through UNION ALL branches before merging, reducing network transfer and memory usage for queries that aggregate over a union. #73930
• IVM maintenance queries are now re-derived from the current view definition at each refresh instead of using the frozen query text stored at CREATE time; existing MVs automatically benefit from rewriter bug fixes without needing to be recreated. #74881
• Sample-based tablet pre-split now spreads pre-split shards across all compute nodes (SPREAD placement) instead of packing them onto the source tablet's worker (PACK placement), improving load parallelism. #75514
• ALTER TABLE ... MODIFY COLUMN that changes only the column comment now takes the lightweight metadata-only path instead of spawning a full schema-change job, and this now works on Primary Key columns as well. #75325
• FLOOR and CEIL are now treated as non-reserved keywords and can be used as column names without quoting. #75241
• SHOW FUNCTIONS output now always includes the isolation property (shared or isolated) in the Properties column for UDFs and UDAFs. #75255
• The default value of lake_vacuum_min_batch_delete_size is raised from 100 to 200, improving vacuum throughput on object storage by batching more stale-file deletions per DeleteObjects request. #74304
• Iceberg REST catalog tables with vended credentials are now cached and their credentials are refreshed in the background, eliminating per-getTable() GetDataAccess calls that caused AWS Lake Formation rate limiting. #75431
• IVM bitmap_union, hll_union, and percentile_union aggregate states are now stored once in the materialized view instead of twice (visible column + hidden __AGG_STATE_ column), halving storage for those sketch types. #75760
• Incremental materialized views now support bitmap_agg, hll_union, percentile_union, and bitmap_union aggregate functions, enabling exact distinct-count and sketch-based aggregations to be maintained incrementally. #75587 #75610
• Sample-based tablet pre-split tablet count is now rounded up to the nearest multiple of the active compute-node count for even distribution, and bounded below by a minimum tablet size to avoid excessive fragmentation on small loads. #75360 #75584
Improvements<#improvements|>
• The ngram_search function now accepts a non-constant needle argument. #74675
• Added an HTTP authentication framework controlled by the enable_http_auth FE configuration, gating authentication and RBAC enforcement on all external HTTP endpoints. #73822
• Added refresh and placement observability columns (refresh_warehouse, refresh_resource_group, refresh_mode, refresh_type, last_refresh_details) to information_schema.materialized_views. #74342
• Added opt-in lazy refresh of the external statistics cache on journal replay, controlled by a new FE config, to prevent a slow or stuck external metastore from stalling FE journal replay or startup. #74371
• VARCHAR length increase is now allowed on range-distribution (shared-data) sort-key columns via fast schema evolution without a data rewrite. #74698
• Added a stack-trace dump when a shared-data transaction log write exceeds a configurable threshold, making slow put_txn_log / put_combined_txn_log calls easier to diagnose. #74704
• Tablet pre-split meta-tier footer readers now support DATE, DATETIME, DECIMAL, VARCHAR, and ORC TIMESTAMP sort keys, reducing the number of loads that must fall back to data-tier sampling. #74710 #74739 #74792 #74902 #74955 #75186 #75209 #75427 #75697
• Sample-based tablet pre-split now applies to INSERT INTO ... SELECT ... FROM <OLAP table> loads, and also to column-list INSERT statements that include all sort-key columns. #74828 #75345
• Added Adler-32 checksum protection for shared-data tablet metadata and transaction log files, enabling silent corruption to be detected on read. #74924
• Added the txn_max_committed_pending_publish_ms FE metric per database, reporting the age of the…
StarRocks/starrocksBeryl Chen
10/01/2026, 1:45 PMKate Shao-Community Manager
10/13/2026, 9:59 PMBeryl Chen
10/15/2026, 1:45 PMKate Shao-Community Manager
10/20/2026, 5:31 PMKate Shao-Community Manager
10/28/2026, 6:33 PMGitHub
11/03/2026, 3:51 AMSHOW FUNCTIONS now masks UDF file and object-file paths as *** for users who can see a function through function-level privileges but do not hold the create-function scope privilege. #73425
• Ranger row filter and column masking policies are now correctly applied when querying Hive views from external catalogs. #73265
• ALTER TABLE ... ADD COLUMN ... DEFAULT current_timestamp now correctly preserves the current_timestamp generator expression. DESCRIBE and information_schema now reflect the expression rather than the backfill-time literal. #73455
• information_schema.loads load-time filtering no longer shifts filter bounds on clusters whose session timezone differs from UTC+8. Load times are now exchanged as UTC epoch milliseconds across the FE–BE boundary. #73365
• The connector_max_split_size session variable now correctly applies to Paimon scan split calculation instead of always using the default value. #71756
• pipeline_enable_large_column_checker is now enabled by default. #72798
• Hive partition statistics are no longer refreshed automatically per key on a timer. Partition stats are now only refreshed during explicit refreshTable() calls, reducing HMS load on large partitioned tables. #73563
• When an Iceberg or external-catalog base table undergoes schema drift (column type change, column drop, or table drop), the dependent materialized view is now marked inactive at the next refresh instead of silently producing NULL rows or opaque errors. #73770
• The Iceberg connector now partially pushes down the convertible side of AND compound predicates instead of discarding the entire predicate when only one side is convertible, improving partition pruning and data skipping. #70293
• Explicit-transaction COMMIT now correctly waits up to query_timeout seconds (not milliseconds) for the database write lock, preventing spurious lock-timeout failures under brief concurrent write activity. #73549
• IVM refresh now surfaces strict-load filter errors to the caller instead of silently dropping filtered rows. #73938
• count_combine(nullable_col) now correctly excludes NULL rows, matching COUNT(col) semantics. Incremental MVs backed by COUNT(<nullable column>) were previously materializing inflated counts. #74029
• SHOW ALTER TABLE COLUMN now also displays asynchronous metadata-only alter jobs triggered by ALTER TABLE ... SET (...) for properties such as file_bundling and enable_persistent_index on cloud-native (shared-data) tables. #74198
• Creating an incremental MV with a HAVING clause that references an aggregate function now fails at CREATE time with a clear error instead of producing an internal plan error on first refresh. #74054
• IVM now supports `MIN`/`MAX(DECIMAL)` aggregate functions in incremental materialized views. #73969
• IVM adaptive refresh now correctly bounds the delta window when the first delta trait already exceeds mv_max_rows_per_refresh, preventing the entire backlog from being refreshed in one task run. #74464
• GROUP-BY-only incremental MVs (for example, SELECT k FROM t GROUP BY k) now correctly encode __ROW_ID__ as VARCHAR, fixing a crash on the second refresh. #74030
Improvements
• Supports Paimon views, including `CREATE`/`REPLACE`/`DROP`, `SHOW`/`DESC`, and querying Paimon views from external catalogs. Table references inside Paimon views are now resolved against the Paimon catalog instead of default_catalog. #56058 #70217
• Supports an explicit schema parameter in FILES() for stable schema control when reading files with schema drift or complex nested types. #72033
• get_query_profile() now retrieves query profile information across all FE nodes, not only the connected FE. #71123
• Added the query_id() built-in function, which returns the UUID of the currently executing query. #73621
• `CREATE`/`ALTER STORAGE VOLUME` in shared-data mode now validates storage location accessibility (credentials and endpoints) before persisting metadata, failing early on misconfiguration. #70053
• Added WebIdentity token provider support for AWS S3 credentials in BE, matching the existing FE support for AWS_S3_USE_WEB_IDENTITY_TOKEN_FILE. #69966
• Added the ADMIN SKIP COMMITTED TRANSACTION command to unblock stuck COMMITTED transactions on shared-data tables when publish is permanently blocked by missing txnlog, lost segments, or slow remote I/O. #73553
• information_schema.tables_config now pushes down table_name predicates to the FE, greatly reducing overhead for single-table lookups. #73210
• Added missing MySQL 8 columns to information_schema tables to improve compatibility with BI tools and JDBC drivers that inspect MySQL 8 schemas during connection introspection. #73370
• Added the enable_pipeline_event_scheduler BE configuration as a cluster-wide kill switch that overrides the per-session variable when set to false. #73264
• Added opt-in wide-string column isolation for statistics collection to reduce per-query memory peaks when collecting statistics on tables with multiple wide string columns. #73258
• Slow-lock logging now supports per-event rate limiting and configurable stack-capture controls to prevent JVM safepoint stalls under high lock contention. #73647
• MV refresh log entries now include the database name in the prefix, making log lines distinguishable in multi-tenant deployments where the same MV name exists in multiple schemas. #73521
• enable_profile_log FE configuration is now mutable and can be toggled at runtime via ADMIN SET FRONTEND CONFIG without an FE restart. #73894
• Added the enable_print_load_profile_to_log FE configuration (default false) to write load profiles (stream load, routine load, broker load, and merge-commit load) to fe.profile.log, preserving them even when the in-memory store is evicted by query-profile bursts. #74150
• SHOW ROUTINE LOAD now correctly renders column mappings in JobProperties instead of Java object references. <https://github.com/StarRo…
StarRocks/starrocksGitHub
11/03/2026, 3:51 AMTABLESAMPLE / SAMPLE clause and ANALYZE SAMPLE TABLE now take effect on lake tables. Previously the sample options never reached the BE, so a full scan was performed. #71874
• ALTER TABLE changes to the flat_json configuration are now propagated to BE nodes through a versioned task so they take effect reliably. #74747
• NOT MATCH predicates answered by a GIN inverted index no longer return NULL rows; NULL rows are now correctly excluded from the result. #75578
• ANALYZE ... UPDATE HISTOGRAM ON no longer computes histograms for char-family columns (which the optimizer does not use) and computes only MCVs, reducing analyze cost. #75968
• rewrite_manifests now clusters output manifests by order-preserving partition ranges, producing tighter per-manifest partition bounds and better manifest pruning on tables with many partitions. #76193
• Multi-table stream load now honors each table's file_bundling property when deciding whether to use a combined transaction log, instead of following only the global lake_use_combined_txn_log config. #76806
• A GIN inverted index combined with column-mode partial update on a Primary Key table no longer returns corrupted results; the index is now served from the delta column group segment. #76271
• array_difference on integer arrays now computes adjacent differences in 64-bit before widening to BIGINT, fixing int32 overflow. #76569
• Division expressions with a non-constant divisor are no longer treated as monotonic, fixing incorrect ZoneMap pruning that could produce wrong results. #76744
• Array and map constructors now raise an error instead of silently corrupting data when the flattened result of a chunk exceeds 4 GB. #76419
• Primary Key inserts now correctly reject keys that already exist in the L1/L2 persistent index; the existence check was previously skipped. #76591
• Sample-based tablet pre-split on range-colocate tables now spreads new shards across compute nodes instead of packing them onto the source tablet's worker, fixing range batch imports that were roughly 3x slower than hash. #76608
• Incremental-or-AUTO materialized views now rebuild the maintenance query for the PCT fallback in AUTO refresh mode, fixing refresh failures for shapes that IVM does not support. #75961
• ALTER MATERIALIZED VIEW ... ACTIVE now works for non-aggregate INCREMENTAL materialized views; the storage-filled __ROW_ID__ column is kept out of the MV DDL column list so an inactive IVM can be re-activated. #77017
• The Iceberg partition cache is now bounded by memory (not just entry count) and its usage is exposed, preventing unbounded growth on tables with many partitions. #76165
• Iceberg REST catalogs using OAuth2 client credentials now self-heal after the background token-refresh task dies, instead of failing all subsequent requests. #76457
• Lake full vacuum now reclaims orphaned .lcrm (Lake Compaction Rows Mapper) files that were previously skipped. #76522
• Shared-data publish now refuses to write a bundle tablet metadata file that is missing tablets, preventing a partition from getting permanently stuck on publish. #76850
• Abandoned external (Spark/Flink connector) scan contexts now cancel their pipeline fragments when reaped, and external scan plans set query_delivery_timeout to bound the QueryContext lifetime. #76535 #76536
• Materialized view pinned-range maps are now keyed correctly (by table UUID), fixing MV bootstrap pinning being disabled for OLAP tables and mishandling of same-named tables in different databases. #76320 #76351
• Audit logs for statements forwarded to the leader FE now record fully-qualified queried relations (matching the leader) instead of CTE aliases and unqualified table names. #76387
• Aggregating a full STRUCT column together with ROLLUP, CUBE, or GROUPING SETS no longer fails at plan time with a usedStructFiledPos error. #76804
• The FE memory Estimator now counts container overhead, and the Parquet scanner now pads missing columns using the bounded chunk size instead of the full batch size, improving memory accounting accuracy. #75971 #75981
Improvements
• Added support for an INCLUDE METADATA clause in Routine Load to expose Kafka/Pulsar message metadata (such as partition, offset, and timestamp). #73840
• Made the Routine Load metadata alias optional. #76294
• Added a LAST_FRESHNESS_CONFIRMED_AT column to information_schema.materialized_views. #74585
• Exposed data cache metrics through the /metrics endpoint, and added FE compaction metrics, ALTER TABLE column-operation metrics and durations, and a CompressedInputBytes metric on the exchange sink. #58204 #72941 #76247 #76309
• Exposed authentication and connectivity error details from connector metadata operations to end users. #75490
• Improved error messages for large-column capacity limit checks. #76303
• Added the hdfs_backend_selector_cache_replica_num variable, and made the object storage client cache size runtime mutable. #75023 #75851
• Extended sample-based tablet pre-split meta-tier readers to more sort-key types, including CHAR, composite sort keys, and UTC-adjusted Parquet TIMESTAMP / ORC TIMESTAMP_INSTANT. #75937 #76011 #76114
• Improved external-table statistics collection: predicate column usage is now tracked, multiple columns are collected in a single scan, and a bounded-cost scan budget is applied for Iceberg tables. #75938 #76638 #76549
• Supports right-outer, semi, anti, and full-outer range-colocate joins. #76040
• Optimized Query Queue V2 cost estimators. #76609
• Pushed t…
StarRocks/starrocksGitHub
11/03/2026, 3:51 AMenable_poco_client_for_aws_sdk now defaults to false. Set it to true to restore the previous behavior. #78375
• Online optimize table is now opt-in: the FE configuration enable_online_optimize_table defaults to false, so ALTER TABLE ... DISTRIBUTED BY ... again blocks writes unless the config is turned on. #78206
• jemalloc's dedicated oversize arena is enabled by default, so large allocations no longer land in the per-CPU arena of the calling thread. This improves reuse of large buffers and reduces fragmentation, and changes how BE and CN memory is distributed across arenas. #78396
• Shared-data tablet metadata and transaction log files are now written with an Adler-32 checksum by default (lake_enable_protobuf_file_checksum), so corruption is detected on read. Readers already verified the checksum whenever a file carried one, so no downgrade step is needed. #75334
• A shared-data primary-key load that mixes UPSERT and DELETE rows for the same key now preserves their in-transaction order by default (lake_enable_pk_preserve_txn_delete_order). #76211
• Multi-table transactions now participate in shared-data batch publish instead of publishing one transaction at a time, which removes the serialization that CDC micro-batches fanning out to many tables used to hit. #77029
• A shared-data partition now advances straight to the final version of a batch publish instead of through each intermediate version, so a query can no longer request an intermediate version that has no tablet metadata object, which surfaced as The specified key does not exist. #79175
• A shared-data publish that keeps failing now backs off and throttles its retry logging instead of emitting the previous publish version task has not finished message on every attempt, which could dominate the FE leader's CPU and log volume during an incident. #79299
• Del-file tombstone rows now count toward cloud_native_pk_index_rebuild_rows_threshold, so a delete-heavy shared-data workload triggers the primary-key index early flush it was supposed to. #76222
• A shared-data column-upsert publish that supersedes its own segments now merges the delete vector, which previously could leave two live rows for one primary key. The damage only surfaced much later, when a CN restart rebuilt the persistent index and reported insert found duplicate key. #78797
• The shared-data primary-key index compactor no longer stops silently while the flush side keeps producing sstables, which left a tablet whose persistent index grew without bound. #78812
• HDFS files are no longer `hsync`ed before they are closed. The hsync was a workaround for a crash that a separate change had already fixed, and it forced an fsync() on every DataNode replica on each close. #78864
• A Parquet null_count that under-reports NULLs is no longer taken at face value during decoding and pruning. Files written by older parquet-mr versions previously returned corrupted values or dropped rows. #78329
• List partition pruning of !=, NOT IN, and IS NOT NULL no longer discards a multi-value partition just because its value list also contains NULL. Queries on such a table, including joins that derive IS NOT NULL on the join key, return the non-null rows that were previously lost. #78946
• Batch DDL can now build date range partitions that start at year 0000, which is a legal DATE value. Such a statement previously failed with the range of the partition is invalid. #78746
• max_partitions_in_one_batch and the partition-number limit now count the partitions the request in hand is about to create. An oversized batch is rejected up front instead of being admitted and only failing the following batch. #79379
• TRUNCATE TABLE <external_catalog>.<db>.<table> now checks the DELETE privilege against the catalog named in the statement instead of the session's current catalog. A user who was previously allowed through may now be denied, and vice versa. #79047
• Streaming aggregation tuning is now driven by the group-by cardinality instead of the rows left after HAVING, so a query whose HAVING clause filters most groups away no longer loses its local pre-aggregation. #79064
• Audit log rows now carry scanBytes, scanRows, returnRows, cpuCostNs, and memCostBytes for DML that targets an external Iceberg or Hive table or the FILES() table function, and for asynchronous materialized-view refreshes. These fields previously reported 0. #74072 #74954
• The query profile and EXPLAIN ANALYZE now report the plan a retried query actually ran, rather than the plan from the first attempt. #79225
• A Broker Load no longer writes its submit-time snapshot of enable_tablet_pre_split back onto the submitting client's live session variable. #79177
• ALTER MATERIALIZED VIEW ... ACTIVE works again for non-aggregate incremental materialized views; the storage-filled __ROW_ID__ column is kept out of the materialized-view DDL column list. #77017
• The Operation column of SHOW ALTER TABLE OPTIMIZE now shows a readable description of the optimize operation instead of an internal object address such as com.starrocks.sql.ast.OptimizeClause@b5dc069. #75948
• A column that is missing from the tablet schema no longer aborts the BE during predicate push-down; the predicate is simply not pushed down. #79234
• When OlapTableSink initialization fails, the partially initialized sink is no longer taken through the full close path, which could dereference state that was never created and abort the BE. The original initialization error is returned instead. #79370
• Short key index page geometry is now validated without 32-bit overflow, so a corrupted page footer is rejected instead of wrapping and causing a heap out-of-bounds write. #79048
• An HTTPS request whose TLS handshake times out is no longer treated as connected and retried on the same socket. A stalled request now fails after approximately one timeout instead of connect_timeout plus two receive timeouts. #79369
Improvements
• LDAP and Active Directory groups can now be resolved from the user's memberOf attribute, so a new directory group no longer requires a matching group-provider configuration on the cluster. #79254
• The audit log now records the query's error message, not just the coarse `Err…
StarRocks/starrocksGitHub
11/03/2026, 3:51 AMskip_pindex_l1_l2_check_in_insert defaults to `true`; L0 (memtable) checks are always performed. Set it to false to restore the previous behavior. #81304
• BE JVM metrics are enabled by default (enable_jvm_metrics now defaults to true). They are collected only once a JVM exists, so enabling them no longer starts a JVM on a BE that does not otherwise need one. #81113 #81074
• The default of spill_max_dir_bytes_ratio is lowered from 0.8 to 0.5, so spill uses at most 50% of each spill directory's capacity. #80189
• Lake replication file copies now run in a dedicated CN-wide pool. lake_replication_file_copy_threads defaults to 16 instead of 0 (which meant 4 × CPU cores), and the new lake_replication_max_parallel_files_per_tablet (default 4) bounds the files copied in parallel for one tablet. #78078
• Delete-triggered base compaction of shared-data Primary Key tablets is now opt-in through the new BE configuration lake_pk_compaction_base_enable_delete_trigger, which defaults to false. #79926
• When pk_index_parallel_execution_threadpool_max_threads is 0, the Primary Key index parallel execution pool is sized to all CPU cores instead of half of them. #80460
• CAST(x AS CHAR(N)) now truncates the result to N characters, consistent with MySQL. Both constant folding in the FE and execution in the BE apply the truncation. #75909
• Credential values are masked wherever configurations and task definitions are displayed or logged: ADMIN SHOW FRONTEND CONFIG, the FE /variable page, BE /varz, information_schema.be_configs, task run definitions archived to task_run_history, and the request URIs and headers written to FE and BE HTTP logs. Values set through ADMIN SET FRONTEND CONFIG, the FE /api/_set_config endpoint, and the BE /api/update_config endpoint are masked as well. #80097 #80040 #80492 #80444 #80280 #80447 #80515 #80203
• The FE HTTP endpoints /service_id, /dump, and /dump_starmgr now require an admin user. #80749 #80701
Improvements
• Added the table property enable_statistic_auto_collect. Set it to false with CREATE TABLE or ALTER TABLE to exclude a table from automatic statistics collection. Collection triggered by data loading is not affected. #81027
• LDAP and Active Directory user and group names can be matched case-insensitively by setting the new FE configuration authentication_ldap_case_insensitive to true (default false). #79255
• Added ALTER GROUP PROVIDER to update the properties of a group provider in place. #79166
• Under Query Queue V2, query_queue_mem_used_pct_limit is applied to every node that runs queries. #81026
• Large Primary Key index deletes during publish are faster, using a parallel reverse lookup and a tombstone sstable path. #76785
• A searched CASE WHEN evaluates each branch only on the rows that reach it. #79484
• convert_tz caches daylight-saving-time offset lookups instead of converting the time zone for every row. #78459
• UNNEST is zero-copy for nullable arrays and with LEFT JOIN, expands multiple arrays one chunk at a time instead of materializing the whole input chunk, and the remaining table functions are guarded against out-of-memory. #79221 #79222
• A fragment's plan is serialized once for all of its instance requests. #80716
• Colocate aggregation and window functions can be planned on range-colocate tables. #79946
• Backported tablet pre-split improvements from the main branch, including new FE configurations that bound how much data the sample-based tablet pre-split scans (tablet_pre_split_data_tier_scan_byte_limit, tablet_pre_split_data_tier_min_scan_files, tablet_pre_split_data_tier_max_scan_files, and tablet_pre_split_meta_tier_footer_read_parallelism). #79949
Security
• Bumped pprof to release/20261012. #80439
• Bumped lz4-java to 1.11.4. #80319
• Bumped BouncyCastle to 1.86, Jackson to 2.21.7, zstd-jni to 1.5.7-15, and Parquet to 1.18.1. #80248
• Bumped the Tomcat used by Broker to 9.0.121. #79719
• Bumped ZooKeeper to 3.8.7 and 3.9.6. #79707
• The arguments of lookup_string are escaped to prevent SQL injection, and its internal query runs with the caller's identity. #79991 #79959
• The FE web console HTML-encodes admin- and host-provided values and table cells, including on the /system and /query pages, and validates and encodes the node parameter on /proc_profile. #80656 #80639 #80582 #80565 #80689
Bug Fixes
The following issues have been fixed:
• Iceberg equality deletes were not scoped to their partition. #81139
• Datacache memory writes could be rejected by the eviction probability even when free space was available. #80542
• Bucket properties were not carried along with the partition type of a pipeline source. #80099
• Bucket shuffle join inputs that the sender had already aligned were re-partitioned. #79769
• Driver partitioning was not aligned across `EXCEPT`/`INTERSECT` and hash join inputs. #78920
• yearweek crashed the BE on invalid str_to_date input. #78358
• A queued spill data task could still run while the spill channel was closing. #80252
• Lake compaction read buffers were not bounded by the per-worker memory budget. <https://github.com/StarRocks/starrocks/p…
StarRocks/starrocksGitHub
11/03/2026, 9:23 AMenable_poco_client_for_aws_sdk now defaults to false. Set it to true to restore the previous behavior. #78375
• jemalloc's dedicated oversize arena is enabled by default, so large allocations no longer land in the per-CPU arena of the calling thread. This improves reuse of large buffers and reduces fragmentation, and changes how BE and CN memory is distributed across arenas. #78396
• A shared-data transaction whose combined txn log was not fully written is now refused at commit instead of committing and then failing publish forever with txn log list does not contain txn log of tablet. replication_num no longer weakens the shared-data write quorum. #78162
• A shared-data partition now advances straight to the final version of a batch publish instead of through each intermediate version, so a query can no longer request an intermediate version that has no tablet metadata object, which surfaced as The specified key does not exist. #79175
• A shared-data publish that keeps failing now backs off and throttles its retry logging instead of emitting the previous publish version task has not finished message on every attempt, which could dominate the FE leader's CPU and log volume during an incident. #79299
• A shared-data load cancelled by a user error now reports that error instead of the derived AsyncDeltaWriter has been closed. #78632
• HDFS files are no longer `hsync`ed before they are closed. The hsync was a workaround for a crash that a separate change had already fixed, and it forced an fsync() on every DataNode replica on each close. #78864
• A Parquet null_count that under-reports NULLs is no longer taken at face value during decoding and pruning. Files written by older parquet-mr versions previously returned corrupted values or dropped rows. #78329
• List partition pruning of !=, NOT IN, and IS NOT NULL no longer discards a multi-value partition just because its value list also contains NULL. Queries on such a table, including joins that derive IS NOT NULL on the join key, return the non-null rows that were previously lost. #78946
• Batch DDL can now build date range partitions that start at year 0000, which is a legal DATE value. Such a statement previously failed with the range of the partition is invalid. #78746
• Serialized datetime partition bounds now keep their microseconds. An operator-precedence error previously added the fractional seconds to the shift distance instead of the shifted value, corrupting the bound and potentially blocking metadata replay. #78922
• max_partitions_in_one_batch and the partition-number limit now count the partitions the request in hand is about to create. An oversized batch is rejected up front instead of being admitted and only failing the following batch. #79379
• Streaming aggregation tuning is now driven by the group-by cardinality instead of the rows left after HAVING, so a query whose HAVING clause filters most groups away no longer loses its local pre-aggregation. #79064
• Audit log rows now carry scanBytes, scanRows, returnRows, cpuCostNs, and memCostBytes for DML that targets an external Iceberg or Hive table or the FILES() table function, and for asynchronous materialized-view refreshes. These fields previously reported 0. #74072 #74954
• Internal queries issued while filling information_schema.materialized_views and SHOW MATERIALIZED VIEWS are now bounded by the outer statement's query_timeout instead of statistic_collect_query_timeout (default one hour), so such a statement can no longer hang far past its own timeout. #77585
• SQL blacklist verification no longer holds a global read lock while matching, so an expensive pattern or a concurrent `ADD`/`DELETE SQLBLACKLIST` no longer stalls every query at the SQL entry point. #78476
• paimon.option.cache-enabled = false disables the Paimon metadata cache again. #78271
• The background metadata refresh for a Paimon catalog now visits only tables that were recently accessed and have changed, instead of enumerating and reloading the whole warehouse every cycle. A table that StarRocks has never queried is no longer refreshed. #78057
• A VARCHAR column of a Paimon table now reports the length declared in the Paimon schema instead of an incorrect one. #68383
• ALTER TABLE ... RENAME on an Iceberg REST catalog no longer fails with a NullPointerException. #76498
• Reading the $partitions metadata table of an Iceberg table with a DECIMAL partition field, or with a null timestamptz partition value, no longer fails with a NullPointerException. #77742
• A table with many stale partitions no longer reports a statistics health pinned near 1.0, so auto-ANALYZE is triggered when it should be. Tables that were previously considered healthy may now be re-analyzed. #76927
• A column whose name contains a special character such as # no longer fails the low-cardinality dictionary collection query with a `ParsingException`; the generated alias is quoted. #77132
• A GROUPING SETS aggregation joined to another one on its group-by keys no longer fails at planning with no executable plan for this sql. #77296
• encode_sort_key now expands a constant argument once per row instead of writing the single stored element into every row buffer. #77847
• A statement forwarded to the Leader FE now keeps its original SQL text in the audit log and the query profile, instead of a form rebuilt from the AST. #77982
• A connection ID that wraps the 24-bit per-FE counter no longer collides with a live connection, which previously hid the older session and drifted the global and per-user connection accounting. #78217
• A column that is missing from the tablet schema no longer aborts the BE during predicate push-down; the predicate is simply not pushed down. #79234
• When OlapTableSink initialization fails, the partially initialized sink is no longer taken through the full close path, which could dereference state that was never created and abort the BE. The original initialization error is returned instead. #79370
• Short key index page geometry is now validated without 32-bit overflow, so a corrupted page footer is rejected instead of wrapping and causing a heap out-of-bounds write. <https://github.com/StarRocks/star…
StarRocks/starrocksGitHub
11/03/2026, 9:27 AM/varz endpoint, information_schema.be_configs, the FE ADMIN SHOW FRONTEND CONFIG output and /variable endpoint, BE HTTP request logs, and the values echoed back by BE /api/update_config, BE /api/_set_config, and ADMIN SET FRONTEND CONFIG. #80040 #80097 #80203 #80280 #80444 #80492
• Sensitive query parameters are no longer written to the request URIs that the HTTP layer logs, and request URIs are sanitized with the same query parser as the actions that serve them. #80515 #80461
• Values shown in the FE web console (shared table renderer, /query, /system, and admin- and host-provided values) are now HTML-encoded, and the /system page looks up the raw proc path. #80565 #80582 #80639 #80648 #80656
• The FE /dump, /dump_starmgr, and /service_id endpoints now apply an admin check. #80701 #80749
• lookup_string now runs its internal query with the caller's identity and escapes its arguments to prevent SQL injection. #79959 #79991
• The tablet metadata dump endpoint /api/cloudnative/dump_tablet_metadata is restricted to metadata already present in the local cache of the selected CN. #78449
• The default value of the BE configuration spill_max_dir_bytes_ratio is lowered from 0.8 to 0.5, so spill on a disk shared with storage_root_path is limited to 50% of the disk capacity. #80189
• Explicit CAST(x AS CHAR(N)) now truncates the result to the first N characters, consistent with MySQL. #75909
• yearweek(str_to_date('0000-01-00', '%Y-%m-%d')) and similar inputs with a zero month or day now return NULL instead of crashing the BE in ASAN/debug builds. #78358
• A SHOW statement whose LIMIT offset is past the end of the result now returns no rows. #79764
• SHOW ALTER TABLE OPTIMIZE ... ORDER BY now resolves the column against the columns of its own result instead of those of SHOW ALTER TABLE COLUMN. #79687
• SHOW statements backed by proc directories now check that each row's width matches the column headers. #79619
• sys.fe_memory_usage is now populated by collecting memory usage when queried instead of reading an empty map. #79809
• COM_STMT_CLOSE now reads the statement ID in little-endian order, so closed prepared statements are released from the connection instead of being retained. #79860
• A custom_query_id set through a SET_VAR hint is now recorded in the audit log. #79871
• NGRAMBF pushdown is disabled for NOT, so NOT LIKE no longer drops pages that satisfy the predicate. #79243
• The transaction stream load endpoint now rejects a non-boolean partial_update header instead of treating it as false. #79350
• A non-positive compact_threads value is now rejected instead of crashing the CN. #79641
• Dropping a Primary Key tablet no longer increments primary_key_table_error_state_total. #79558
• With enable_short_circuit, a point lookup whose IN list repeats a key now returns the row once. #80318
• Bloom filter columns of unsupported types are now rejected when the column type is changed, instead of failing the schema change later. #80871
• An analyze job now keeps collecting the remaining tables after one table fails, instead of ending the round at the first failure. #81028
• Materialized view (MV) behavior changes: lastRefreshTime is logged instead of recomputed on replay; the version-map repair is no longer skipped by the physical partition id lookup; list-partition drift is compared against the live table; MV partitions that outlived a dropped base partition are refreshed; the legacy MV task postRun is ignored during refresh; and adaptive partition refresh supports cloud-native tables. #78467 #78469 #78470 #79057 #79943 #80270
• GCS Broker Load with an inline service account key now works with gcs-connector 3.x. #78649
• Failed multi-table transaction stream load commits now report their errors correctly. #80351
• The LDAP group provider stays usable after an FE restart and when Active Directory returns referrals. #80361
• A broken Ranger audit configuration no longer fails catalog access, and the ZooKeeper classes that Solr audit needs are shipped with the FE. #81075 #77294
• Standalone vector index files are now copied during rowset migration. #80391
• Peer cache data is now copied to the output when datacache_block_buffer_enable is false, and memory cache writes into free space are accepted regardless of the evict probability. #80438 #80542
• Primary Key compaction no longer overflows the row source mask when there are more than 32,767 sources. #80472
• Internal statistics DML now binds its own context, so DROP STATS in an external catalog session no longer reports Unknown database '_statistics_'. #80473
• Driver capacity is now reserved before drivers and operators are instantiated, so a fragment that exceeds the limit is rejected before it allocates them. #80495
• hasDelete is now restored when visible DELETE transactions are applied. #80592
• The FE brpc client now uses com.starrocks:jprotobuf-rpc-core, so an OutOfMemoryError no longer leaves event loops dead and makes exec_plan_fragment requests wait for their full timeout. #80684
• Heavy express…
StarRocks/starrocksSida Shen
11/03/2026, 11:30 PMBeryl Chen
11/04/2026, 4:57 PMBeryl Chen
11/04/2026, 11:48 PM