Backward Incompatible Changes
- Changed defaults of
date_time_input_formatandcast_string_to_date_time_modefrombasictobest_effort. Set tobasicorcompatibilityto restore old parsing behavior. - Tuple element name
nullis now forbidden due to conflicts with Nullable subcolumn names. - Added settings
dynamic_disk_allow_from_env,dynamic_disk_allow_from_zk,dynamic_disk_allow_includethat disallow these operations by default in dynamic disks. - Removed obsolete Arrow-based Parquet reader/writer; native implementation is used instead.
SHOW CREATE TABLE tnow prefers temporary tables when both exist;DESCRIBE TEMPORARY TABLEsyntax is now supported.- 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. - Added
histogramsnested column tosystem.metric_log; deprecatessystem.histogram_metric_logtable. CASTtoDateTimeorDateTime64without explicit timezone now preserves source timezone.- Removed
kqltable function; useSET dialect = 'kusto'instead. - Window functions
RANKandDENSE_RANKnow reject arguments per SQL standard.
New Features
- Added
max_bytes_ratio_before_external_joinsetting (default 0.5) for hash join spill-to-disk threshold as fraction of available memory. - Added
filesystemtable function to represent directory structure as queryable table. - Allow passing bare function names to higher-order functions like
arrayMap,arrayFilter. - Added
send_table_structure_on_insert_with_inline_datasetting and--inline-insert-dataclient option. - Added
tokenizeQueryandhighlightQueryfunctions for SQL query tokenization and syntax highlighting. - Added
url_basesetting to resolve relative URLs inurltable function andURLtable engine. - Support negative values in
LIMIT BYclause to select rows from end of each group. - Support
tupleandarrayoutput injson_valuefunction. - Added
kafka_autodetect_client_rackparameter to discover Availability Zone and propagate as client rack. - Added
Readevent type tosystem.blob_storage_logfor tracking object storage reads. - Users can now see ZooKeeper watches via new
system.zookeeper_watchestable. - Added
Shardsprofile event counting shards in distributed queries. WASMUDFs can be declaredDETERMINISTICfor constant folding.- Added
parallel_replicas_prefer_local_replicasetting to control replica selection. - Added socket buffer size settings:
{disk,storage,http}_connections_{rcvbuf,sndbuf}. - Support
CREATE OR REPLACE MATERIALIZED VIEWwith atomic swap semantics. - Added S3 histogram metrics
s3_read_request_duration_microsecondsands3_read_request_bytes. - Added
Paimon,PaimonS3,PaimonAzure,PaimonHDFS,PaimonLocaltable engines with incremental read support. - Added Kafka
kafka_map_virtual_columns_on_writesetting to map virtual columns on insert. - Added
SYSTEM PAUSE VIEWandSYSTEM PAUSE VIEWSfor refreshable materialized views. - Added
regexpPositionfunction (PostgreSQL-compatible aliasesregexpInstr,regexp_instr) for regex match position. - New functions
isPrimeandisProbablePrimefor primality checks. clearand/clearnow clear the terminal in CLI tools.- Allow
filetable function to acceptArray(String)of paths. - Added
deterministicandhigher_ordercolumns tosystem.functions. - Added optional encoding variant parameter to
bech32Encodeand raw decode mode tobech32Decode. - Can now write data in
AvroConfluentformat withoutput_format_avro_confluent_subjectsetting. - Added
prettyPrintJSONfunction to format JSON strings into human-readable form. - Added
STRING_AGGas case-insensitive alias ofgroupConcat. - Individual subquery results can be cached independently with
use_query_cacheper subquery. - Added lexer-based syntax highlighting to web UI query editor.
Experimental Features
- Added experimental web terminal interface at
/webterminalwith interactiveclickhouse-clientover WebSocket. Kafka2engine now supports directSELECTqueries andkafka_commit_on_selectsetting.WASMUDFs support more numeric type coercions.- Support
LIKEfunction inDELETE FROM system.webassembly_modules. - Support geo types for
Iceberg. - Add prepared statements functionality to ArrowFlight SQL server.
- Improved KQL parser robustness.
Performance Improvements
- Reuse Parquet footer metadata cache for local files.
- Push
ORDER BY ... LIMIT nthroughLEFT/RIGHTjoins when applicable. - Enable
use_top_k_dynamic_filteringanduse_skip_indexes_for_top_kby default. - Use jemalloc oversize-arena feature to reduce page faults.
- Limit simultaneously active streams in
UNION ALLto reduce peak memory. - Optimize userspace page cache; cold reads through object storage page cache now coalesce consecutive misses into single HTTP request.
- Speed up index analysis with type casting and function application.
- Speed up queries on
Mergetables with many underlying tables. - Remove vtable from settings, reducing
Settingscopy size by ~28x. - Added
max_threads_min_free_memory_per_threadandmax_insert_threads_min_free_memory_per_threadsettings for automatic parallelism reduction. - Reduce memory usage on low-memory systems (<4 GiB).
- Added
OptimizeTrivialGroupByLimitPassfor trivial GROUP BY queries. - Granule-level implicit min-max index for
_part_offsetand_block_numbervirtual columns. - Precompute per-row hashes for
prealloc_serializedaggregation methods. - Query condition cache for
Icebergtables. - Optimize
cramersVand related functions with window functions. - Rewrite
tupleElement(dictGet(...), N)optimization. - Enable buffering for sorting steps in distributed queries.
- Performance improvements for
partial_mergeJOIN. - Reduced memory over-allocation in
partial_mergeJOIN. - Optimize memory tracker sampling.
- Reduce memory allocation during S3 multipart uploads.
- Add software prefetch in hash join probe phase.
- Optimize
MemoryTrackerlayout improving performance by ~25%. - Rewrite
coalesce(a, b, ...) <op> constpredicates for better index pruning. - Significantly improved Iceberg catalog query performance with large JSON metadata.
- Avoid index uncompressed cache overhead when disabled.
- Fix excessive granule reading in
ORDER BY ... LIMITwith non-selective filters. - Fixed missing hash table sizes cache reuse after JOIN reordering.
- Fsync of part files now performed in parallel, speeding up insert finalization by ~22%.
- Vectorize string search helpers on AArch64 using NEON.
- Restore I/O savings for aliased complex columns.
- Reduced lock contention on asynchronous remote-FS read path.
- Slightly better query plan for projections in-order scan.
- Extend projection optimization to handle cases where projection's sorting key removes sorting step.
- Allow
json.path[]syntax sugar on typed JSON paths. - Optimize
json.path[N].nested.pathexpansion. - Optimize
SHOW TABLESaccess checks. - Remove redundant per-table access check in
system.tablesfast path. - Enable JIT compilation on macOS.
- Skip row policy deferral after
FINALwhen deterministic and depends only on sorting-key columns. - Support
hasAnyandhasAllas text index filter predicates. - Route long-lived MergeTree heap state to dedicated jemalloc arena.
- Improve ZooKeeper client timeout handling under heavy load with progress-based timeout.
- Move per-event trace flags into separate array with lazy allocation.
- Add
compareTrackAtforColumnDecimal. - Added SIMD implementation of
MD5(AVX2/AVX512) for parallel hashing.
Improvements
- Improved
--helpoutput for all ClickHouse applications with better formatting and subcommand listing. - Changed default
input_format_column_name_matching_modefrommatch_casetoautofor case-insensitive fallback. - Added
STDDEValias ofstddevSamp. - Added
array_to_stringalias ofarrayStringConcat. - Added
unnestalias ofarrayJoin. - Progress bar in
clickhouse-clientnow shows temporary disk data usage. - Added
system.predicate_statistics_logfor predicate filter selectivity sampling. - Allow skipping local shard with missing table when
skip_unavailable_shardsenabled. - Added startup warnings for Linux mdraid array issues.
- WASM UDFs now appear in
system.functionswith correct metadata. generate_seriestable function supports negative step values.- Fixed context expiration in functions used in deferred execution paths.
- Fixed spurious cache limit violations.
- Auto-detect region for S3 Express endpoints.
- Support field IDs for
Icebergdata files. - Left panel in web UI scrolls independently and stays visible.
- Allow opening Play UI in new tab via Ctrl/Cmd/Shift+click.
- New metrics for projection primary key and index granularity memory usage.
- Apply network bandwidth limits to remote filesystem operations.
- Improved backup resilience for Refreshable Materialized Views.
- Consistent database listing in
system.databasesregardless of catalog settings. - Aligned
concurrent_threads_soft_limit_ratio_to_coresdefault in code with config. - Improved sanitizer robustness in parser and string functions.
- Improved monotonicity inference for
divide(0, x)andintDiv(0, x). - Replaced HTTPConnectionPool async metrics with bucket-based histogram.
- Socket buffer settings now reported as changeable without restart.
- Added symbol resolution support in
flameGraph. - CLI client supports
<rainbow_parentheses>false</rainbow_parentheses>config. - Fixed
MultiVolnitskyUTF-8 case-insensitive search. - Implemented
sched_getcpuviarseqTLS in glibc-compatibility musl. - Replicated refreshable materialized views no longer refresh twice on ZK reconnection.
- Allow Distributed tables without explicit column list to validate sharding keys.
- Fixed REST catalog with Azure
abfsspaths. - Honor
role_arnandrole_session_namein Keeper S3 snapshot client. - Fixed memory leak in
MATERIALIZEDCTEs. - Fixed exception in
lowerUTF8/upperUTF8with large non-ASCII datasets. - Hardened MergeTree column-statistics loading against transient I/O failures.
INSERT INTO ... SELECT FROM input(...)no longer requiresCREATE TEMPORARY TABLEgrant.- Added
concurrent_part_removal_threshold_for_remote_disksetting (default 16). - New setting
defer_partition_pruning_after_finalfor opt-out of 26.3 behavior. - Fixed
intExp2returning wrong results for out-of-range inputs. - Fixed shell argument quoting in
clickhouse installandclickhouse git-import. Aliastable engine is now non-experimental.- Added
--queries-formatoption toclickhouse-benchmark. - Tuple element-wise operators are now variadic.
- Added
/processors-profileweb UI for pipeline visualization. - Setting
query_plan_use_logical_join_stepis now obsolete. - Pre-filled
userinput removed from web UI pages. - Decoupled
ORCreader offset-based read fromuse_prefetch. - Downloaded CSV files now use
.csvextension. - More input validation for BigLake catalog.
Bug Fixes
- Fixed inconsistent expression formatting with parenthesis tracking.
- Fixed accurate comparison between Decimal and Float types.
- Allow positional arguments in distributed queries.
- Fixed assertion failure when dropping/recreating materialized views and view dependencies.
- Fixed server abort when creating table with duplicate UUID.
- Fixed skip index usage on data read with patch parts from lightweight updates.
- Fixed "Not-ready Set" exception with IN subqueries moved to PREWHERE.
- Fixed "Cannot find column" error combining ADD and RENAME COLUMN.
- Fixed views with mixed set operations returning wrong results after detach/attach.
- Fixed PLACEHOLDER action exception in stress testing.
- Fixed logical error with Iceberg Date partitions.
- Fixed skip index incompatibility after column type modification.
- Fixed credential leak in query logs.
- Fixed DROP TABLE on Kafka tables potentially hanging indefinitely.
- Fixed runtime lookup for source table engines and database source grants.
- Fixed server crash with ALIAS column containing correlated subqueries.
- Fixed server crash with correlated subqueries and CONSTRAINT ASSUME.
- Fixed exception with JSON dynamic fields as GROUP BY key.
- Fixed workload IO scheduling bypass for S3/object-storage writes.
- Fixed Protobuf/ProtobufList schema cache collision.
- Fixed heap-buffer-overflow in Rust CXX bridge.
- Fixed FunctionVariantAdaptor exception handling.
- Fixed TRUNCATE ALL TABLES with views.
- Fixed
optimize_rewrite_array_exists_to_hastype compatibility and re-enabled. - Fixed S3 settings priority for storage configuration.
- Fixed sparse serialization losing negative zero sign.
- Fixed WKT geometry parser MULTILINESTRING corruption and malformed string handling.
- Fixed GROUPING SETS on distributed single-shard tables.
- Fixed LOGICAL_ERROR column identifier already registered.
- Fixed LOGICAL_ERROR with
additional_result_filteron UNION/EXCEPT. - Fixed server crash with * APPLY on aggregate functions with grouping.
- Fixed infinite loop with CSV/TSV skip first lines exceeding file lines.


