unstale

pypi / starrocks

starrocks

What changed in starrocks 3 to 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-25.

12 breaking7 security8 new APIs and options3 performance11 behavior and defaults67 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.2.6 on npm

starrocks 489 changes

Breaking changes 10

  • CTAS preserves explicitly declared VARCHAR(N) lengths; newly created tables enforce those lengths on subsequent writes.

    4.1.3release notes

  • INT64 Parquet timestamps with isAdjustedToUTC=false are loaded as wall-clock values without a session timezone shift; reload older data if consistency is required.

    4.1.3release notes

  • Constant folding now matches MySQL 8 backslash-escape semantics, correcting results for some patterns.

    4.1.3release notes

  • Malformed JSON now fails the query in ALLOW_THROW_EXCEPTION SQL mode instead of silently returning NULL.

    4.1.3release notes

  • When unset, newly discovered partitions in auto-discovery jobs with consuming progress start at OFFSET_BEGINNING instead of OFFSET_END.

    4.1.3release notes

  • The query memory limit is now enforced during unnest execution, so large arrays fail the query rather than potentially OOM-killing the BE.

    4.1.3release notes

  • Queries without OPERATE ON SYSTEM now return a clear access-denied error instead of a misleading node-lookup failure.

    4.1.3release notes

  • ARRAY and MAP constructors fail with CapacityLimitExceed when a single chunk exceeds the addressable byte limit; reduce chunk_size or split the expression.

    4.0.14release notes

  • Static partition clauses for Iceberg and Hive tables are validated even when an INSERT specifies target columns; non-partition columns are rejected.

    4.0.14release notes

  • On columns with a GIN inverted index, NOT MATCH no longer returns rows whose value is NULL, following SQL three-valued logic.

    4.0.14release notes

Security 7

  • Negative width values no longer permit unbounded string growth and BE memory exhaustion.

    4.1.3release notes

  • This FE configuration controls HTTP authentication and RBAC enforcement on all external HTTP endpoints.

    4.1.3release notes

  • Fixes SQL injection where a single quote in a predicate value could escape the literal boundary.

    4.1.3release notes

  • Upgraded jackson-databind to fix two deserialization vulnerabilities.

    4.1.3release notes

  • Upgraded Netty to address SNI handler heap exhaustion, IPv6 subnet filter bypass, and DNS cache poisoning.

    4.1.3release notes

  • Masks Tencent COS access and secret keys and the Iceberg JDBC password in catalog output.

    4.1.3release notes

  • Fixes an out-of-bounds read when input ends with a truncated percent-escape sequence.

    4.1.3release notes

New APIs and options 8

  • Adds a BE configuration to reduce memory usage during Primary Key compaction in shared-nothing mode by releasing retained chunk capacity.

    4.1.3release notes

  • Adds refresh_warehouse, refresh_resource_group, refresh_mode, refresh_type, and last_refresh_details observability columns.

    4.1.3release notes

  • Adds a BE configuration item for jemalloc runtime options and exposes it through information_schema.be_configs.

    4.1.3release notes

  • Iceberg and Delta Lake external tables now support partition filter requirements and partition count limits.

    4.1.3release notes

  • Routine Load can continue partition auto-discovery when kafka_partitions and kafka_offsets seed exact starting offsets.

    4.1.3release notes

  • Adds a catalog property that bounds the Iceberg partition cache by memory rather than entry count; its default is 0.1.

    4.0.14release notes

  • Adds LAST_REFRESH_TIME to information_schema.materialized_views and SHOW MATERIALIZED VIEWS, reporting the data-freshness timestamp used by mv_rewrite_staleness_second.

    4.0.14release notes

  • Adds a mutable BE configuration item for the S3 and Azure Blob client cache capacity; its default is 8.

    4.0.14release notes

Performance 3

  • Changing only a column comment uses a lightweight metadata-only path, including for Primary Key columns.

    4.1.3release notes

  • Enables page-level predicate pushdown for BOOLEAN columns in Parquet files.

    4.0.14release notes

  • Table-level locks held during INSERT OVERWRITE are relaxed or shortened, reducing lock contention.

    4.0.14release notes

Behavior and default changes 9

  • Avro Routine Load supports native MAP and STRUCT target columns.

    4.1.3release notes

  • FLOOR and CEIL are non-reserved keywords and can be used as column names without quoting.

    4.1.3release notes

  • Incremental materialized views support bitmap_agg, hll_union, percentile_union, and bitmap_union aggregate functions.

    4.1.3release notes

  • The default increases from 100 to 200, batching more stale-file deletions per object-storage DeleteObjects request.

    4.1.3release notes

  • The function accepts a non-constant needle argument.

    4.1.3release notes

  • The Properties column includes partition, column, and snapshot metadata for external table statistics jobs.

    4.1.3release notes

  • Length increases are allowed on range-distribution shared-data sort-key columns through fast schema evolution without a data rewrite.

    4.1.3release notes

  • With zstd compression, flat JSON sub-columns and synthetic null and offset sub-columns of ARRAY, MAP, and STRUCT columns are compressed for newly written segments.

    4.0.14release notes

  • The Operation column now shows a readable description of the optimize operation instead of an internal object address.

    4.0.14release notes

Fixes and other changes 52

  • Prevents committing cyclic view definitions that could cause subsequent SELECT statements to throw StackOverflowError.

    4.1.3release notes

  • Fixes dropped NULL rows and incorrect row counts when all non-null arrays are empty.

    4.1.3release notes

  • Materialized-view rewriting no longer drops DISTINCT from avg(DISTINCT x), preventing incorrect results when duplicates exist.

    4.1.3release notes

  • CAST(json/variant AS struct) no longer crashes fragment preparation when a struct field name is not a parseable JSON path.

    4.1.3release notes

  • count_combine over nullable columns no longer crashes the BE in the streaming pre-aggregation pass-through path.

    4.1.3release notes

  • CTAS into a Unified catalog using a Hive metastore works with the ENGINE clause in CREATE TABLE AS SELECT.

    4.1.3release notes

  • DATETIME microseconds use ASCII digits regardless of the JVM default locale, so tablet pre-split boundary values remain parseable.

    4.1.3release notes

  • Nested dictionary expressions no longer produce incompatible dictionary translations between producer and consumer fragments that cause runtime failures.

    4.1.3release notes

  • The table-level override can enable first-load statistics collection even when the global config disables it.

    4.1.3release notes

  • Vacuum no longer deletes bundle files still referenced by sibling tablets when bundled segments have zero rows.

    4.1.3release notes

  • The planner locates the target scan node by physical table identity, preserving the base snapshot ID and conflict-detection filter.

    4.1.3release notes

  • DATETIME_PRECISION no longer always returns NULL, restoring column-size metadata for MySQL-protocol clients.

    4.1.3release notes

  • Successfully committed multi-table transaction stream load jobs are shown as VISIBLE rather than remaining at PREPARING.

    4.1.3release notes

  • Shared-data tables now report each physical partition's actual bucket count rather than the table-level default.

    4.1.3release notes

  • Java UDFs load on JDK 21 and later without relying on the removed reflective DirectByteBuffer constructor lookup.

    4.1.3release notes

  • Feedback-driven join rebuild preserves predicateCommonOperators, avoiding InputDependenciesChecker validation failures with common sub-expression reuse.

    4.1.3release notes

  • Changing a flat-JSON column from NOT NULL to nullable no longer causes a CHECK crash in the compaction read path.

    4.1.3release notes

  • The optimizer rule no longer produces nullable outputs with non-nullable declared types when a union branch has no input rows.

    4.1.3release notes

  • Query cache normalization no longer crashes on tables with sub-partitions when empty sub-partitions are pruned.

    4.1.3release notes

  • Query dump replay no longer skips session variables stored under a legacy alias, preventing fallback to default values.

    4.1.3release notes

  • The Iceberg _row_id virtual column returns correct values for data files with multiple Parquet row groups.

    4.1.3release notes

  • Schema changes no longer crash when get_rowset_by_version returns nullptr.

    4.1.3release notes

  • The audit log now records the actual exported row count instead of ReturnRows=0.

    4.1.3release notes

  • Snapshots remain restorable after tablet splits or merges because reshard jobs are considered before parent tablet metadata is reaped.

    4.1.3release notes

  • Compaction dropped during tablet reshard no longer deletes SSTable files reused by pass-through.

    4.1.3release notes

  • Compaction publish preserves rollup and synchronous materialized view indexes that become visible after the compaction transaction begins.

    4.1.3release notes

  • The Properties column always includes the isolation property, shared or isolated, for UDFs and UDAFs.

    4.1.3release notes

  • Partition row counts are no longer written as zero after INSERT OVERWRITE before tablet statistics are refreshed, preserving optimizer cardinality estimates.

    4.1.3release notes

  • Sampling ratios below 1% are supported, including in histogram ANALYZE, avoiding failures when computed ratios previously truncated to zero.

    4.1.3release notes

  • Fixes crashes and incorrect results when multiple UNNEST operators share an input array column and consume different subfields.

    4.1.3release notes

  • Fixes failures when the first argument is an untyped NULL literal.

    4.0.14release notes

  • Integer adjacent differences are widened before calculation, preventing overflow when the difference exceeds the INT range.

    4.0.14release notes

  • Fixes failures when the first argument is an untyped NULL literal.

    4.0.14release notes

  • Prepared-statement ADBC clients can open behind a load balancer; forwarded create and close actions now carry the correct Flight SQL action type.

    4.0.14release notes

  • Fixes std::length_error for predicates on wildcard CHAR columns, such as CAST(json_col->'$.x' AS char).

    4.0.14release notes

  • Fixes over-counting for COUNT(DISTINCT) on bucket-partitioned Iceberg tables with bucket-aware execution and a GROUP BY list containing the bucket column.

    4.0.14release notes

  • Division expressions with a non-constant divisor are no longer treated as monotonic, preventing unsafe Zone Map pruning and incorrect missing rows.

    4.0.14release notes

  • JSON subfield pushdown excludes case-colliding keys from pushdown to prevent wrong results.

    4.0.14release notes

  • Grouping key columns are no longer incorrectly reported as non-nullable at analysis time, correcting result schemas for Arrow Flight SQL clients.

    4.0.14release notes

  • OAuth2 client-credential catalogs rebuild their session and retry a request once after background token refresh exhausts retries; at most one rebuild occurs per 60 seconds.

    4.0.14release notes

  • Garbage collection no longer journals a failed-state change for a table already dropped.

    4.0.14release notes

  • Fixes Java UDF failures on JDK 21 and later caused by removal of a private DirectByteBuffer constructor.

    4.0.14release notes

  • Fixes query rewrite for materialized views on un-partitioned Delta Lake or Kudu tables after successful refresh.

    4.0.14release notes

  • Materialized views no longer treat negative staleness after rollback_to_snapshot as within the rewrite staleness budget.

    4.0.14release notes

  • Paimon tables now support ARRAY, MAP, and STRUCT columns, which could previously crash the BE when queried.

    4.0.14release notes

  • Unconvertible Paimon predicates no longer discard the whole conjunction; convertible conjuncts are retained.

    4.0.14release notes

  • Fixes incomplete per-tablet results being stored and served from the query cache, which could return wrong results.

    4.0.14release notes

  • With checked consistency and a staleness threshold, chained partial refreshes no longer renew freshness for the whole view while another partition lags.

    4.0.14release notes

  • Escapes double quotes in the jsonpaths value so emitted DDL can be parsed and replayed.

    4.0.14release notes

  • Fixes loading column statistics for all-NULL columns when sql_mode includes ERROR_IF_OVERFLOW.

    4.0.14release notes

  • Fixes plan-time failures when aggregating a whole STRUCT column with ROLLUP, CUBE, or GROUPING SETS.

    4.0.14release notes

  • Cyclic view definitions are detected and reported instead of failing with an opaque Unknown error caused by StackOverflowError.

    4.0.14release notes

starrocks 319 changes

Breaking changes 2

  • ALTER VIEW now rejects changes that create cyclic view definitions, rather than allowing a later SELECT to recurse and crash.

    3.5.21release notes

  • Constructors reject results whose flattened size exceeds 4 GB instead of wrapping around and returning corrupted values.

    3.5.21release notes

Behavior and default changes 2

  • The configured codec now also compresses synthetic null/offset sub-columns of flat JSON, ARRAY, MAP, and STRUCT columns.

    3.5.21release notes

  • Manually setting a materialized view from INACTIVE to ACTIVE no longer forces a full-partition refresh.

    3.5.21release notes

Fixes and other changes 15

  • Integer-array differences are widened to BIGINT before subtraction, preventing incorrect results when the true difference exceeds the INT range.

    3.5.21release notes

  • Forwarded requests now use the correct action-type string, fixing prepared statements for ADBC clients behind a load balancer.

    3.5.21release notes

  • Prepared-statement schemas now report view-column nullability correctly; nullability for grouping-set key columns was also corrected.

    3.5.21release notes

  • The missing arrow-compression module was added, restoring LZ4 and ZSTD codec support for compressed Arrow IPC clients.

    3.5.21release notes

  • Statements forwarded to the leader FE now log leader-resolved, fully qualified table relations, excluding CTEs.

    3.5.21release notes

  • dictionary_get no longer rejects a non-NULL key when the input column's cached has_null flag is stale.

    3.5.21release notes

  • Expressions with a non-constant divisor are no longer treated as monotonic, preventing incorrect ZoneMap-based pruning.

    3.5.21release notes

  • Expired external scan contexts now cancel their pipeline fragments instead of leaving them running.

    3.5.21release notes

  • External scan plans now set query delivery timeouts so their query contexts do not wait indefinitely for fragments that will never arrive.

    3.5.21release notes

  • GIN indexes on Primary Key tables now read the correct segment after a column-mode partial update, avoiding stale index data.

    3.5.21release notes

  • Hive getTable now reconnects before falling back to get_table_req(), avoiding intermittent errors when querying Iceberg tables through a Hive metastore catalog.

    3.5.21release notes

  • Background token-refresh sessions now self-heal after prolonged failure, allowing the catalog to refresh its access token again.

    3.5.21release notes

  • Caching of vended-credential tables was reverted on branch-3.5 to avoid delayed visibility of INSERT OVERWRITE transactions against slow REST catalogs.

    3.5.21release notes

  • The cache no longer stores incomplete per-tablet results for aggregations with LIMIT, preventing wrong results from cache hits.

    3.5.21release notes

  • Output struct pruning now uses the input array's subfield group, fixing mismatches between the struct type materialized by BE and declared by FE.

    3.5.21release notes