Backward Incompatible Changes
- The
INoperator now uses exact value semantics forBooltype: only0and1values in the set matchBoolvalues. Previously, numeric values greater than255in theINset were incorrectly clamped to true. - The H3 library has been updated to v4, which improves the precision of length, area, and other metric calculations. This change is backward incompatible because the new results differ from previous ones.
- Disallows using
SELECTas a bareword identifier in aWITHexpression list element. - The merge table will now handle virtuals differently: if the underlying table contains
_tableor_database, these columns will be read from storage; otherwise, they will be filled after the read step. - The
INoperator now rejects lossyDecimalconversions inside composite types (Tuple,Array,Map). - Reduced default
http_max_fieldsfrom 1,000,000 to 1,000 andhttp_max_field_name_sizefrom 128 KB to 4 KB to limit pre-authentication memory usage by HTTP connections.
New Features
- Automatic spilling to hash and parallel hash joins by converting them to grace hash join when memory limit is reached.
- Arrow Flight SQL support.
- Incremental read support for
Paimontable engines with Keeper-backed snapshot progress tracking. - The
stemfunction is now non-experimental. - New behavior of
max_insert_block_size_rowsand related settings under compatibility settinguse_strict_insert_block_limits. - Function
arrayAutocorrelation(arr [, max_lag])for computing normalized autocorrelation of numeric arrays. - SQL function
obfuscateQueryfor query obfuscation. - Support for Map and JSON/Object types as dictionary attributes.
- New MergeTree settings
replicated_fetches_min_part_levelandreplicated_fetches_min_part_level_timeout_secondsto reduce replication overhead. - MergeTree skip index support for JSON columns using JSONAllPaths.
- The
printffunction now supports non-constant format strings. - New projection index
commit_orderthat reorganizes data in insertion order. - Function
highlightthat wraps search terms in HTML tags. - Quotas by normalized query hash to protect public ClickHouse services.
- Support for
NATURAL JOINsyntax. - Support
SET TIME ZONE 'tz'as alias forSET session_timezone. - Parameterized queries in the Web UI with input fields for parameter values.
- SQL standard
VALUESclause as a table expression. - PostgreSQL-compatible units for
EXTRACToperator:EPOCH,DOW,DOY,ISODOW,ISOYEAR,WEEK,CENTURY,DECADE,MILLENNIUM. - SQL-standard compound interval literals with
TOrange qualifiers. - Asynchronous metrics for kernel TCP receive and transmit buffer memory.
- Jemalloc profiling web UI for ClickHouse Keeper.
- Command
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'. - Function
JSONAllValuesreturning all values from JSON columns as Array(String). - Setting
input_format_column_name_matching_modefor different case sensitivities in input formats. watchcommand inclickhouse-keeper-client.getChildrenRecursive(ListRecursive) request to ClickHouse Keeper.- Function
arrayTransposefor transposing two-dimensional arrays. - Auto statistics defaults:
auto_statistics_types mergetreedefaults to'minmax, uniq';materialize_statistics_on_insertdefaults to false. - Setting
prefer_dependency_replicafor materialized view dependency chains. - Function
hasPhrase(aliasmatchPhrase) for phrase search. - Histogram metrics
s3_read_request_duration_microsecondsands3_read_request_bytes. DateandDate32values can now be added toTimeandTime64values using the+operator.- Text index is now GA and stays enabled regardless of the
compatibilitysetting.
Experimental Features
ALTER TABLE ... EXECUTE remove_orphan_filesfor Iceberg tables.- Setting
query_plan_optimize_join_order_randomizefor randomizing join reordering statistics. - AI function support:
aiGenerate,aiClassify,aiExtract,aiTranslatefor calling OpenAI and Anthropic endpoints. - System table
system.histogram_metric_logfor periodically snapshotting histogram metrics.
Performance Improvements
- ClickHouse can now prune entire data parts based on min/max statistics.
- Reduced lock contention during readonly operations on ReplicatedMergeTree tables.
- Respect
optimize_read_in_orderwhen reading projections. - Improvements in Hash Join and Concurrent Hash Join.
- Optimize
DISTINCTby disablingLowCardinalityoptimization when input is almost distinct. - Performance optimization for
LIKEqueries using text indices. - Vectorized math functions accelerated on AArch64 and FreeBSD/Darwin.
- Primary key pruning for regexp alternations over literals with common prefixes.
- Generalized
ORDER BY ... LIMITtop-k dynamic filtering forNullable,String,COLLATEtypes. - Faster hash join on
Int32andInt64keys with small range. - Faster discontinuous queries for
LowCardinalitycolumns. - Faster
var*Stableandstddev*Stablefunctions forFloat64columns. - Optimized base58 encode/decode operations.
- Binary size reduction and instruction cache utilization via linker optimizations.
- Fixed negative scaling for short queries with aggregation.
- Improved performance with parallel replicas.
- Prefetching support for remote file reads.
- Avoided unnecessary String
.sizesubcolumn computation. - Less jittery progress bar in clickhouse-client.
- MemoryWorker support in clickhouse-local for userspace page cache.
LIMITclause push-down optimization forUNION ALL.- JIT compilation for
StringandFixedStringcolumn comparisons inORDER BY. - Virtual row boundary information emission for improved merge reprioritization.
- Faster Float-to-String conversion using extended
itoaandzmijlibrary. - Faster
Int128/UInt128to string conversion. - Avoided redundant threads in
uniqExactparallel merge; batch parallel merge support. - Better parallelization of simple views with parallel replicas.
- Parallel replicas support over simple views including
UNION ALLviews. - Optimized reading in order with
INfilters infull_sorting_merge. - Cached sampling settings to optimize allocations/deallocations.
- Fixed INSERT performance regression with
deduplicate_insert = 'enable'. - Reduced profiled lock overhead.
- AVX2 and ARM NEON support for
arrayDotProduct. - Improved
INSERT VALUESperformance forMap,Array,Tupletypes. - Fixed excessive RabbitMQ table engine CPU usage.
- JOIN order optimizer now infers transitive equi-join predicates.
TRUNCATE DATABASE TABLES LIKEoptimization with parallel merge cancellation.- Monotonicity support for multiply in primary key pruning.
- Cache dictionaries no longer take exclusive lock in
hasKeys. - Inlined VIEW subqueries for more optimizations.
- Optimized cache loading on server startup.
- Lazy column materialization for ReplacingMergeTree with FINAL.
- Re-enabled
optimize_rewrite_array_exists_to_hasoptimization with compatibility fixes.
Improvements
- Improved EXPLAIN PLAN output with better formatting and join information.
- Added MergeTree setting
share_nested_offsetsfor independent nested column handling. - Multiple authentication methods in users.xml/yaml configuration.
- Auto reload Raft inter-node connections using TLS.
- Extended
cast_keep_nullableto work with Dynamic/JSON types. - Reduced memory footprint from internal ISerialization objects via object pool.
- Support for
passwordandidentityfields in keeper-client XML config. - Improved Iceberg writes for unity catalog.
- Setting
finalize_projection_parts_synchronouslyfor synchronous projection finalization. - Added
projections_duration_mscolumn tosystem.part_log. - Improved query cancellation via KILL QUERY and clickhouse-client Ctrl+C.
- Replaced hardcoded
source_table_engineswith runtime lookup. - Setting for type mismatch behavior in Variant and Dynamic.
- Improved Iceberg and Spark compatibility with consistent path handling.
- Fixed race condition in
IPartitionStrategy::cached_result. - ClickHouse Interval datatypes can now be written in Arrow Format.
- Native support for UUID data types in Arrow and Parquet formats.
- Support for 7z archives on object storage.
- ProfileEvents for object storage introspection.
- Fixed
mergetable function with non-present columns. - Included commit time in mutation execution time metric.
- Write-ahead log for blob objects pending removal.
- Disabled AI SQL generation in embedded client for security.
- Changed Iceberg insert interface with deprecated settings.
- Tabs rendered as 4 spaces in clickhouse-client.
- Avoid scanning remote data lake catalog for table hints when disabled.
- Applied
distributed_index_analysis_min_indexes_bytes_to_activateafter partition pruning. - Fixed Parquet bloom filter push-down assertion with empty IN/NOT IN clauses.
- MinMax column statistics now store values as Field with type name serialization.
- Updated cppkafka with Consumer close deadlock fix.
- Iceberg file object information now includes row count and size from manifest.
- Configuration parameter
use_separate_cache_arenafor cache memory arena separation. - Native support for Arrow
StringViewandBinaryViewdata types. - Hot-reloaded Keeper settings:
max_requests_batch_size,max_requests_batch_bytes_size, etc. - Incremented profile events
MemoryAllocatedWithoutCheckin release build. - Cgroupv2 memory tracking excludes
slab_reclaimable. use_partition_pruning = 0disables MinMax index pruning and count optimization.pretty=1in EXPLAIN prints expressions in human readable format.accurateCastOrNullandaccurateCastOrDefaultsupportTupletarget types.- Fixed chart duplication in Play UI theme switching.
- Updated chdig tool to newer versions with perfetto UI and other improvements.
- Trailing comma support in
WITHclause before SELECT. - Setting
compress_per_column_in_compact_partsfor compressed block organization. - Improved Play UI with better table info balloon and engine-specific icons.
- Support for
Nullable(Tuple)in Arrow, ArrowStream, ORC, Parquet formats. - TOTALS row displayed as table footer in web UI.
- Multi-query mode in web UI with parallel SELECT execution.
- Fixed column resize in web UI result table.
- Limit on jemalloc profile flushes per time interval.
- Keeper settings hot-reload:
nuraft_streaming_mode,nuraft_max_log_gap_in_stream. CGroupMemoryUsedWithoutPageCacheasync metric.- Parser-level syntactic sugar for SQL standard
OVERLAYfunction. - Column alias
INDEX_LENGTHininformation_schema.tables. information_schema.tablesnow ignores inactive table parts.ngramsfunction now rejects invalid ngram lengths.- FIPS-specific test filtering and improvements.
- Expandable cells in Web UI with three-line height limit.
- Option to force virtual/path style for S3 endpoints.
restore_replace_external_engines_to_nullnow skips external engine databases.- Text index analysis support for
hasPhrasefunction. - STATISTICS treated as read-only in ColumnDependency.
system.asynchronous_metric_logcreation in keeper-as-server mode.- Configuration option
default_system_log_flush_policy.skip_alias_columns. - Auto statistics disabled for system tables.
arraytokenizer support for LIKE optimization.- MemoryAllocatedWithoutCheck sent in release builds.
- Per-thread untracked_memory exposed in
system.stack_trace.
Bug Fixes
- Fixed
Block structure mismatch in streamerror from Lazy materialization. - Fixed logical error with data masking policy query on CLUSTER.
- Fixed bug when using Unity catalog on GCS.
- DataLakeCatalog respects server's
http_forbid_headersconfiguration. - Fixed N+1
HeadObjectcalls for S3 brace-expansion globs. - Validate setting changes in create queries.
- Fixed
ALTER TABLE UPDATE/DELETEwith MATERIALIZED columns depending on EPHEMERAL columns. - Credentials in JDBC, ODBC, NATS connection strings are now masked.
- Fixed
parseDateTimeBestEffortincorrectly parsing words with month prefixes. - Fixed ignoring TABLE_UUID_MISMATCH for non-analyzer.
- Fixed explicit settings ignored when matched server default with compatibility setting.
- Fixed numbers with leading zeros in hive partitioning causing errors.
- Fixed heap-use-after-free when table dropped concurrently with read query.
- Fixed Keeper read request stuck when unrelated session closed at wrong moment.
- Validate column structure before applying patches.
- Fixed vertical merge assertion with Dynamic columns and SYSTEM STOP/START MERGES.
- Fixed incorrect partition pruning for
toWeek()function. - Fixed exception in functions with ColumnReplicated from JOIN.
- Fixed
CLEAR COLUMNnot rebuilding projections and materialized columns. - Fixed exception in
ConditionSelectivityEstimatorwith scalar query parameters and statistics. - Fixed parts with unknown projections marked as lost forever.
Fetched May 1, 2026

