Altinity Stable® Build for ClickHouse® 25.3
Here are the detailed release notes for version 25.3.
Release history
Version 25.3.6.10034 is the latest release. We recommend that you upgrade to this version. But read the detailed release notes and upgrade instructions for version 25.3 first. Once you’ve done that, review the details for each release for known issues and changes between the Altinity Stable Build and the upstream release.
Version | Release date | Details | Docker images |
---|---|---|---|
25.3.6.10034 (latest) | 2025-07-29 | CI report Release page Install guide |
AMD64 and Aarch64 |
Builds are available for both AMD64 and Aarch64 from builds.altinity.cloud as either .deb
, .rpm
, or .tgz
.
Finally, check the Altinity ClickHouse® Upgrade E-book, which provides guidelines for upgrading ClickHouse databases.
Major new features in 25.3 since the previous Altinity Stable release 24.8
A new release introduces a lot of changes and new functions. Click any of the tabs below for specifics:
Major New Changes
-
Production Ready Now!
- Refreshable Materialized Views – production ready with new
APPEND
mode - JSON, Dynamic, Variant Data Types – incl. ALTER from deprecated
Object
, and support for subcolumns in PK/indexes #77785
- Refreshable Materialized Views – production ready with new
-
Workload Management With SQL Added SQL syntax for workload/resource management. #69187
-
BFloat16 (16-bit brain floating point) Data Type 16-bit float with 8-bit exponent + 7-bit mantissa. Includes support in
cosineDistance
,dotProduct
,L1/L2/LinfDistance
. #73840 -
Lightweight Updates
-
SQL Features
- Standard CTE syntax now supported in INSERTs #70593
- Table aliases can rename columns:
CREATE VIEW my_view(a, b) AS SELECT 1, 2
#72480 create_if_not_exists
SETTING- Better enum support:
LIKE
,=
,IN
- Parallel DDL:
PARALLEL WITH
- Support for
staleness
clause inORDER BY ... WITH FILL
#71151 - Allow
CREATE MATERIALIZED VIEW
withUNION [ALL]
.First table in SELECT acts as insert trigger (like with JOINs). #72347
-
MergeTree-family Tables
- Reverse Ordering:
allow_experimental_reverse_key = 1
ORDER BY (time DESC, key)
#71095 (Amos Bird) ATTACH PARTITION ALL FROM
#61987- Attach
MergeTree
asReplicatedMergeTree
(and vice versa) #65401 (Kirill) - Create table with query:
CREATE TABLE ... CLONE AS ...
Clones schema and attaches partitions #69091 Closes #65015 - Improved
CREATE TABLE AS
#69739 - Auto-cleanup of partitions after timeout via
enable_replacing_merge_with_cleanup_for_min_age_to_force_merge
#76440 - Enable default min-max (skipping) indices:
add_minmax_index_for_numeric_columns
/add_minmax_index_for_string_columns
(off by default) #74266 - New:
SYSTEM LOAD PRIMARY KEY
– preloads indexes for all parts (useful in benchmarks) #66252 - New setting:
max_parts_to_move
– limits number of parts moved #70520
- Reverse Ordering:
-
New:
DatabaseBackup
engine – attach tables/dbs from backup instantly #75725
Click any tab in the tab bar above for more release notes.
Requires Attention
- Upgrade caution (24.8 → 24.9+) – Pending mutation tasks can block server start. Ensure all mutations are complete before upgrading. #74528
- Cluster version mismatch warning – Don’t mix pre-24.3 with 25.3 in the same cluster. Ensure all DDLs complete before upgrading/downgrading. Clean queue if needed. #75302
- ZooKeeper compatibility enforcement – Removed
metadata_version
node creation on restart. Upgrades skipping 20.4 → 24.10 will throw an exception; update in supported steps. #71385 - More introspection metrics/tables – Additional columns and metrics may increase memory usage; configure TTLs or disable unused tables.
- Metrics behavior change –
system.cpu_usage
now uses cgroup-specific metrics (instead of system-wide). #62003 - Malformed HTTP responses – HTTP errors that occur after query start may result in malformed chunked encoding. Some clients may report protocol issues. #68800
- Increased network traffic with progress formats
JSONEachRowWithProgress
now streams updates continuously.- This may require tuning for sensitive networks. #73834
enable_job_stack_trace
is now enabled by default. #71039, #71625- Kafka consumer lifecycle – Dropping Kafka table no longer exits consumer group immediately; it times out after
session_timeout_ms
. #76621 async_load_databases
is now enabled by default, even without explicit config changes. #74772- See the Known Issues section below for other things that require your attention.
Click any tab in the tab bar above for more release notes.
Security
- Wildcard GRANT syntax – support for granting privileges to wildcard table names, e.g.
GRANT SELECT ON db.table_prefix_* TO user
andGRANT SELECT ON db*.table TO user
. #65311 - Multiple credentials per user – each auth method can now have its own expiration date; credentials removed from the user entity. #70090 (Altinity)
- TLS for PostgreSQL wire protocol – adds encryption support to Postgres-compatible interface. #73812
- SSL for MySQL with named collections – adds support for SSL auth using named collections. Closes #59111, #59452
- Storage encryption for named collections – encrypts storage used by named collection configs. #68615
- Push external roles to cluster nodes – query originator can push external user roles to other nodes (e.g., LDAP scenarios). #70332 (Altinity)
- CHECK GRANT query – verifies whether current user/role has privileges and if target table/column exists. #68885
- Strict identifier enforcement –
enforce_strict_identifier_format
prevents usage of insecure identifiers. #69411 - Extended encryption support in config files –
encrypted_by
XML attribute can now be used in any config file (config.xml
,users.xml
, or nested). Previously limited to top-level config. #75911 (Mikhail Gorshkov)
Click any tab in the tab bar above for more release notes.
Formats
- New JSON formats:
JSONCompactEachRowWithProgress
andJSONCompactStringsEachRowWithProgress
– continue work from #69989 - Parquet
- Evaluates bloom filters and min/max indexes together. #71383 (Altinity)
- Boolean support in native reader. #71055 (Altinity)
- Bloom filter support: filtering by bloom filters in 24.10; write support via
output_format_parquet_write_bloom_filter
- Parallel reading + prefetching of row groups in single-threaded mode. #69862
- Support for Parquet Page V2 in native reader. #70807 (Altinity)
ParquetMetadata
now indicates presence of bloom filters. #70947
- Half-float support – can now read
HALF_FLOAT
values from Arrow/Parquet/ORC (mapped toFloat32
). #73836 Note: IEEE-754 half float ≠ BFloat16. - ORC
- Enables reading
LowCardinality
string columns. #69481
- Enables reading
- Pretty & Vertical Format Usability
- Thousand-group highlighting and readable number tooltips. #71630
- Column name shortening via
output_format_pretty_max_column_name_width_cut_to
and..._min_chars_to_cut
. #73851 - Trailing spaces highlighting in terminal via
output_format_pretty_highlight_trailing_spaces
. #73847 - Block squashing if emitted within short intervals. Controlled via
output_format_pretty_squash_consecutive_ms
(default: 50ms) andoutput_format_pretty_squash_max_wait_ms
(default: 1000ms). #73852 - Mid-row cutting if output exceeds
output_format_pretty_max_rows
. #73929 - Support for multi-line values:
output_format_pretty_multiline_fields
- Fallback to vertical format:
output_format_pretty_fallback_to_vertical_max_rows_per_chunk=10
,..._min_columns=5
- JSON
- Pretty-print by default – controlled via
output_format_json_pretty_print
. #72148 - Other format-related settings:
input_format_json_empty_as_default
schema_inference_make_columns_nullable
=0
/1
/auto
- Pretty-print by default – controlled via
Click any tab in the tab bar above for more release notes.
Functions
These are the most important changes to ClickHouse functions. For a complete list, see the Functions tab in the Appendix below.
- Introspection
- String
- DateTime
- Array
arrayElementOrNull
– safe element access. #69646arrayZipUnaligned
– zip arrays of different lengths.arrayUnion
– union of arrays. #68989arraySymmetricDifference
– returns symmetric diff. #76231- Higher-Order Functions – now allow constant arguments.
arrayAUC
– addsscale
argument (default:true
). #69717arrayPrAUC
– computes area under precision-recall curve. #72073indexOfAssumeSorted
– optimized search for sorted arrays. #72517arrayNormalizedGini
– returns normalized Gini coefficient. #72823
- JSON Analysis
distinctDynamicTypes
,distinctJSONPaths
,distinctJSONPathsAndTypes
– introspection of JSON structure.
- Crypto Hash Functions
RIPEMD160
– new hash function.keccak256
– Ethereum-compatible hashing. #76669
- Aggregation
quantileExactWeightedInterpolated
– new precise quantile function. #69619anyRespectNulls
,firstValueRespectNulls
,anyValueRespectNulls
,anyLastRespectNulls
,lastValueRespectNulls
– better null handling.windowFunnel
– newstrict_once
mode prevents double-counting events. #69738groupConcat
– now supports optional delimiter argument. #72540sequenceMatchEvents
– returns timestamps of matched events (longest chain in pattern). #72349 (Altinity)groupUniqArrayArrayMap
– now allowed asSimpleAggregateFunction
. #75034
Click any tab in the tab bar above for more release notes.
New Optimizations
These are the most important new optimizations in ClickHouse 25.3. For a complete list, see the New Optimizations tab in the Appendix below.
- JOINs
optimize_extract_common_expressions = 1
– extract common expressions fromWHERE
andON
to reduce hash table usage. #71537- Removed
allow_experimental_join_condition
, enabling non-equi JOINs by default. #69910 - Parallel Hash Join – now default.
- Automatic JOIN Reordering via
query_plan_join_swap_table
. #71577 - New setting
query_plan_join_inner_table_selection = auto
– picks the smaller table as inner. #68682 temporary_data_in_cache
support for partial merge joins. #77390- Push-down filter from JOIN
ON
condition. #75536 enable_adaptive_memory_spill_scheduler
– spill multiple grace JOINs together based on combined memory usage. #72728
- PREWHERE filter reordering – now allowed by default; controlled via
allow_reorder_prewhere_conditions
. #70657 - Row comparison optimization – compare most likely unequal columns first. #63780 (Altinity)
pointInPolygon
now uses indices.- Transitive condition inference – improved filtering, e.g.
WHERE start_time >= '2025-08-01' AND end_time > start_time
- TTL recalculation now respects
ttl_only_drop_parts
– reads only necessary columns. #65488 (Altinity) - ThreadPool improvements – optimized thread creation to avoid contention; improves performance under high load. #68694 (Altinity)
ALTER TABLE ... REPLACE PARTITION
no longer waits for unrelated mutations/merges. #59138 (Altinity)- Short-circuit eval for Nullable columns – new settings:
short_circuit_function_evaluation_for_nulls
and its_threshold
version. Functions that return NULL for NULL args will skip evaluation if NULL ratio is high. #60129 - ReplacingMergeTree merge algorithm optimized for non-intersecting parts. #70977
- JIT compilation enabled for more expressions:
abs
,bitCount
,sign
,modulo
,pmod
,isNull
,isNotNull
,assumeNotNull
, casts to Int/UInt/Float, comparisons, logical ops. #70598 (李扬) - Distributed INSERT … SELECT – respects
prefer_localhost_replica
when building query plan. #72190 (Altinity) - Predicate pushdown for distributed queries – setting
allow_push_predicate_ast_for_distributed_subqueries
enables temporary AST-based pushdown until query plan serialization is ready. Closes #66878, #69472, #65638, #68030, #73718; implemented in #74085 (Nikolai Kochetov) ALTER TABLE FETCH PARTITION
now fetches parts in parallel; pool size set viamax_fetch_partition_thread_pool_size
. #74978- New MergeTree setting
materialize_skip_indexes_on_merge
– disables index materialization during merge, allowing explicit control viaALTER TABLE ... MATERIALIZE INDEX ...
. #74401 - MergeTree optimizations for petabyte-scale workloads
- Memory optimization for index granularity – new setting
use_const_adaptive_granularity
ensures efficient metadata memory use in large workloads. #71786 (Anton Popov) - Primary key caching – setting
use_primary_key_cache
enables LRU cache for PKs;prewarm_primary_key_cache
warms it on insert/merge/fetch/startup. #72102 (Anton Popov)
- Memory optimization for index granularity – new setting
- Caches
use_query_condition_cache
– remembers data ranges that don’t match repeated query conditions as temporary in-memory index. Closes #67768, implemented in #69236 (zhongyuankai)- Active eviction – cache no longer grows unnecessarily when data volume is smaller. #76641
- Skipping index granule cache – in-memory cache improves repeated query performance. Controlled by
skipping_index_cache_size
and_max_entries
. Motivated by vector similarity indexes. #70102 (Robert Schulze) prewarm_mark_cache
setting – loads mark cache on insert, merge, fetch, and table startup. #71053 (Anton Popov). Example:SYSTEM PREWARM MARK CACHE t
- Userspace Page Cache – control with
page_cache_max_size
anduse_page_cache_for_disks_without_file_cache
Click any tab in the tab bar above for more release notes.
Operations
These are the most important changes to ClickHouse operations. For a complete list, see the Operations tab in the Appendix below.
- Configuration
allowed_feature_tier
– global switch to disable all experimental/beta features. #71841- Limit number of replicated tables, dictionaries, and views. #71179 (Kirill)
- User-level disk space checks:
min_free_disk_bytes_to_perform_insert
andmin_free_disk_ratio_to_perform_insert
. #69755 (Marco Vilas Boas) - IP family filtering with
dns_allow_resolve_names_to_ipv4
anddns_allow_resolve_names_to_ipv6
. #66895 - Add users to startup scripts; allows controlling
DEFINER
, etc. #74894
- Usability
- Embedded documentation for settings is now richer and will become the source for website docs (always accurate, versioned, and offline-capable). #70289
print_pretty_type_names
– improvesTuple
display.- Automatic disk spilling in
GROUP BY
/ORDER BY
based on memory use. Controlled viamax_bytes_ratio_before_external_group_by
and..._sort
. #71406, #73422
- Monitoring
- New per-host dashboards: Overview (host) and Cloud overview (host) in advanced dashboard. #71422
- Cluster
- Disks:
plain_rewritable
- Userspace Page Cache
- New implementation caches in-process (useful for remote VFS without local FS cache). #70509
- External Tables
- Support for attaching external tables without databases:
table_disk = 1
- Support for attaching external tables without databases:
- CPU Scheduling
- New setting
concurrent_threads_scheduler = round_robin | fair_round_robin
– improves CPU fairness across INSERT/SELECT. #75949
- New setting
- Memory Tracker
memory_worker_correct_memory_tracker
– correct memory tracker regularly. #75714
- Introspection & Logging
processors_profile_log
has 30-day TTL by default. #66139system.filesystem_cache_log
now respectsenable_filesystem_cache_log
. #77650- New table
system.histogram_metrics
– supportsobserve(value)
histogram-style metrics (e.g., Keeper response times). #75736 system.trace_log
now includessymbols
andlines
(symbolized stack traces); controlled viatrace_log.symbolize
, enabled by default. #73896date_time_utc
config option – enables UTC datetime formatting in logs (RFC 3339 / ISO 8601). #71560- Disable heavy async metrics by default – avoids unnecessary overhead. #71087
- Skip detached parts from readonly/write-once disks in
system.detached_parts
. #71086 - New introspection tables:
system.s3_queue_settings
,system.azure_queue_settings
#70841 system.replicas
has new column:readonly_duration
– useful for distinguishing sentinel replicas. #69871- Throttle frequency of log messages. #70601
system.query_metric_log
– tracks query memory/metric history and flushes to disk. #66532- New profile events for merges and mutations. #68015
system.projections
– addedsystem.trace_log
(again) – now includes symbolized stack traces. #73896- Use cgroup-specific CPU metrics for more accurate accounting. #62003
- TLS
- Client certificates can now be reloaded without restarting – same as server certs. #70997
- Merge Fine-Tuning (Experts Only)
- Official Docker Image – ClickHouse now has one! (But no strong reason to switch if your current setup works.)
- Backup Database Engine – allows mounting a backup as a read-only database.
Click any tab in the tab bar above for more release notes.
Interfaces
These are the most important changes to ClickHouse interfaces. For a complete list, see the Interfaces tab in the Appendix below.
- SSH
- Added SSH interface – connect via any SSH client for interactive queries using embedded
clickhouse-client
(PTY-based). #48902
- Added SSH interface – connect via any SSH client for interactive queries using embedded
- HTTP
- Web UI: now features interactive database navigation. #75777
- Play UI enhancements:
- Progress bar with live stats, cancellation, speed metrics
- Incremental rendering with HTTP compression
- Sticky headers, cell navigation via arrow keys
- Improved number formatting, fixed cell resizing issues
- Client-side rendering finalization logic
- Mouse-over shows column data types
- Displays server status, version, uptime
- Better support for nested data and special floats (
inf
,nan
) - Overall refreshed design, incl. Safari-compatible cloud icon #74204
- HTML merge visualizer: available at
http://localhost:8123/merges
. #70821 - Custom HTTP response headers: via
http_response_headers
. Enables e.g. image rendering in browser. Closes #59620, #72656 - Support for user/password in
http_handlers
fordynamic_query_handler
/predefined_query_handler
. #70725 - Username-only authentication in HTTP handlers now allowed (password optional). #74221
- Better handling of streaming errors – generate malformed chunked encoding when exceptions occur. #68800
- CLI (
clickhouse-client
&clickhouse-local
)--progress-table
– new mode shows live query metrics as a table; can toggle usingCtrl+Space
if--enable-progress-table-toggle
is set. #63689clickhouse-local
supports--copy
mode as shortcut for format conversion. #68503, #68583- CLI tools now auto-detect stdin compression. Closes #70865, implemented in #73848
- Implicit command-line mode:
ch "SELECT 1"
orch script.sql
clickhouse-compressor
now supports--threads
for parallel compression. #70860- Logs now include
script_query_number
andscript_line_number
insystem.query_log
and native protocol. #74477 - Replaced
send_settings_to_client
(server-side) with client-sideapply_settings_from_server
to control client behavior (only applies to native protocol). #75478, #75648 - Set custom prompt via:
--prompt
CLI option<prompt>
in config<connections_credentials><prompt>
in config #74168
- Secure connection auto-detect: recognizes port 9440 as TLS. #74212
- PostgreSQL Wire Protocol
- Now supports prepared statements. #75035
- MySQL Wire Protocol
- Error codes now match MySQL compatibility. #73948
Click any tab in the tab bar above for more release notes.
Integrations
These are the most important changes to ClickHouse integrations. For a complete list, see the Integrations tab in the Appendix below.
- Storage (S3/Azure) Queue
ALTER TABLE ... MODIFY/RESET SETTING ...
is now supported forS3Queue
. #70811
- Kafka
- Upgraded librdkafka to 2.8.0. #76621 (Altinity)
- MongoDB
- URL Engine
- New
_headers
column - User-defined
Content-Type
via custom headers. #70859
- New
- Datalakes
- Iceberg
- REST Catalog integration. #71542
- Supports Iceberg on Azure, HDFS, S3, Local
- Support reading Iceberg tables on HDFS. #70268
- Schema evolution support: column reordering, renaming, type widening. #69445
- Partition pruning with truncate transform (
SET use_iceberg_partition_pruning = 1
). ImplementsicebergTruncate
,toYearNumSinceEpoch
,toMonthNumSinceEpoch
. #77403 - Iceberg-related Parsing improvements:
- Sequence ID parsing in manifest files
- Extendable Avro metadata parsing #75010
- Support
iceberg_metadata_file_path
to explicitly select Iceberg metadata file. #77318 - Experimental AWS Glue catalog integration. #77257
- DeltaLake
- S3
- Fixes for S3 Express support. #73777
- Azure
- Support for SAS Tokens. #72959
- Performance
- Automatic parallelization for external data queries using
parallel_replicas_for_cluster_engines
andcluster_for_parallel_replicas
- Hive-style partition pruning supported
- Automatic parallelization for external data queries using
- Iceberg
Note: Starting with version 25.4, icebergCatalog
, UnityCatalog
, and Delta
were unified under the DataLakeCatalog umbrella (with subtypes). Altinity builds support that remapping in 25.3 for convenience.
Click any tab in the tab bar above for more release notes.
Backward Incompatible Changes
These are the most important backward incompatible changes in ClickHouse 25.3. For a complete list, see the Backward Incompatible Changes tab in the Appendix below.
- Docker default user – Passwordless
default
user is now disabled. Restore viaCLICKHOUSE_SKIP_USER_SETUP=1
(unsafe!). #77212 - Parquet output type changes (#70950)
Date
→Date32
;DateTime
→DateTime64(3)
by default- Restore legacy
UInt32
output usingoutput_format_parquet_datetime_as_uint32 = 1
- Security grants
- Mutations – Full query (incl. subqueries) now validated before execution. #71300
- Removed:
StorageExternalDistributed
(MySQL/PostgreSQL with shard/replica). #71176 - Removed: system tables
generate_series
andgenerateSeries
– added by mistake. #71091 - Renamed setting –
skip_download_if_exceeds_query_cache
→filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit
. #71578 deltaSumTimestamp
function – dropped support for:- Enums, UInt128/UInt256 (first arg)
- Int8, UInt8, Int16, UInt16 (timestamp arg) #71790
- Functions
greatest
/least
now ignore NULLs – behavior matches PostgreSQL. Useleast_greatest_legacy_null_behavior = true
to restore old behavior. #65519, #73389, #73344 - MongoDB legacy integration removed –
use_legacy_mongodb_integration
is obsolete. #71997 - Dictionary validation – added validation when ClickHouse is used as a dictionary source. #72548
- ORDER BY/comparisons – disallow non-comparable types (
JSON
,Object
,AggregateFunction
) by default. #73276 - MaterializedMySQL engine removed – deprecated and no longer available. #73879
- MySQL dictionary optimization – no longer executes
SHOW TABLE STATUS
(was irrelevant for InnoDB). #73914 - Merge table type inference – now unifies structure across tables using union of columns. May break in cases where type coercion was implicit. Restore old behavior with
merge_table_max_tables_to_look_for_schema_inference = 1
orcompatibility = 24.12
. #73956 h3ToGeo()
now returns(lat, lon)
(standard order). Restore legacy(lon, lat)
viah3togeo_lon_lat_result_order = true
. #74719- Forced merges ignore max bytes when both
min_age_to_force_merge_seconds
andmin_age_to_force_merge_on_partition_only
are enabled. #73656 - Non-SQL dialects degraded to experimental #74224:
- PRQL:
allow_experimental_prql_dialect = 1
- KQL:
allow_experimental_kusto_dialect = 1
- PRQL:
JSONCompactWithNames
and...AndTypes
no longer emit “totals” row (was a bug). #75037format_alter_operations_with_parentheses = true
by default – may break replication with pre-24.3 clusters. #75302- Cache config strictness – invalid settings now throw errors (were previously ignored). #75452
TRUNCATE DATABASE
is now disallowed for replicated DBs. #76651 (Bharat Nallan)- Parallel replicas disabled by default if analyzer is off. Can override via
parallel_replicas_only_with_analyzer = false
. #77115 - Disallow NaN/inf as values in float-type settings. #77546 (Yarik Briukhovetskyi)
- New mergetree constraint –
enforce_index_structure_match_on_partition_manipulation
allows attaching partitions only when projections/secondary indices of source ⊆ target. Closes #70602, #70603 lightweight_mutation_projection_mode
moved to merge_tree_settings
Click any tab in the tab bar above for more release notes.
Known Issues
Here is your cleaned-up and clearly formatted Known Issues section. Each item has been tightened for clarity, grouped by topic when possible, and all GitHub issue links are inlined and deduplicated.
- PostgreSQL Certificate Errors
- Table Creation & Dependency Check Regression
- Bloom Filter Issues
- Kafka Metrics
- Incorrect
KafkaAssignedPartitions
metric since 25.3. #81950
- Incorrect
- Azure Blob Crashes
- Segfault when creating tables against Azure Blob with
getCombinedIndicesExpression
. #79504
- Segfault when creating tables against Azure Blob with
- Analyzer & Query Planner
- Short-circuiting disrupted by
query_plan_merge_filters
. #83611 - Analyzer not fully controlled by initiator. #65777
- Many open issues under label: Analyzer Issues
- Short-circuiting disrupted by
- Performance Degradations
- Modified TPC-H queries regress. #76519
- Trivial queries slower. #76334
- Multiple
JOIN
s result in slowdown. #75261 (workaround:join_algorithm='direct,hash'
) - Major regression from 24.10 to 24.11+ – same JOIN reads 20x less data on 24.10.
#74754 (
query_plan_merge_filters=1
) - Upgrade from 23.8 → 24.8 degrades performance.
#82406 (workaround:
query_plan_optimize_prewhere=0
,enable_analyzer=0
) - Regression on Gorilla codec. #78253
- Increased query latency and page faults reported in new versions. #78430
- Query Execution Bugs
- ALTER / UPDATE Concurrency
- Index & Dictionary Issues
- Configuration / Limits
- TRIM function bugs #78796, #82900
Click any tab in the tab bar above for more release notes.
List of changes from 24.8.14 to 25.3.6.56
- Number of authors: 344
- Number of commits: 13843
- Number of pull requests: 3377
There are a number of new fields in system tables, particularly in system.metric_log
, which now has more than 1200 fields, and system.query_metric_log
, which now has more than 850. You can run DESCRIBE system.metric_log
or DESCRIBE system.query_metric_log
for a complete list of all the fields, including short descriptions of each.
Click any tab in the tab bar above for more release notes.
Appendix: Complete details
The sections above highlight the most important changes. For advanced users, this appendix contains all of the details not covered above.
Functions - Complete details
- Introspection
- String
- DateTime
- Array
arrayElementOrNull
– safe element access. #69646arrayZipUnaligned
– zip arrays of different lengths.arrayUnion
– union of arrays. #68989arraySymmetricDifference
– returns symmetric diff. #76231- Higher-Order Functions – now allow constant arguments.
arrayAUC
– addsscale
argument (default:true
). #69717arrayPrAUC
– computes area under precision-recall curve. #72073indexOfAssumeSorted
– optimized search for sorted arrays. #72517arrayNormalizedGini
– returns normalized Gini coefficient. #72823
- JSON Analysis
distinctDynamicTypes
,distinctJSONPaths
,distinctJSONPathsAndTypes
– introspection of JSON structure.
- Crypto Hash Functions
RIPEMD160
– new hash function.keccak256
– Ethereum-compatible hashing. #76669
- Aggregation
quantileExactWeightedInterpolated
– new precise quantile function. #69619anyRespectNulls
,firstValueRespectNulls
,anyValueRespectNulls
,anyLastRespectNulls
,lastValueRespectNulls
– better null handling.windowFunnel
– newstrict_once
mode prevents double-counting events. #69738groupConcat
– now supports optional delimiter argument. #72540sequenceMatchEvents
– returns timestamps of matched events (longest chain in pattern). #72349 (Altinity)groupUniqArrayArrayMap
– now allowed asSimpleAggregateFunction
. #75034 -
Click any tab in the tab bar above for more information.
New Optimizations - Complete details
- JOINs
optimize_extract_common_expressions = 1
– extract common expressions fromWHERE
andON
to reduce hash table usage. #71537- Removed
allow_experimental_join_condition
, enabling non-equi JOINs by default. #69910 - Parallel Hash Join – now default.
- Automatic JOIN Reordering via
query_plan_join_swap_table
. #71577 - New setting
query_plan_join_inner_table_selection = auto
– picks the smaller table as inner. #68682 temporary_data_in_cache
support for partial merge joins. #77390- Push-down filter from JOIN
ON
condition. #75536 enable_adaptive_memory_spill_scheduler
– spill multiple grace JOINs together based on combined memory usage. #72728
- PREWHERE filter reordering – now allowed by default; controlled via
allow_reorder_prewhere_conditions
. #70657 - Row comparison optimization – compare most likely unequal columns first. #63780 (Altinity)
pointInPolygon
now uses indices.- Transitive condition inference – improved filtering, e.g.
WHERE start_time >= '2025-08-01' AND end_time > start_time
- TTL recalculation now respects
ttl_only_drop_parts
– reads only necessary columns. #65488 (Altinity) - ThreadPool improvements – optimized thread creation to avoid contention; improves performance under high load. #68694 (Altinity)
ALTER TABLE ... REPLACE PARTITION
no longer waits for unrelated mutations/merges. #59138 (Altinity)- Short-circuit eval for Nullable columns – new settings:
short_circuit_function_evaluation_for_nulls
and its_threshold
version. Functions that return NULL for NULL args will skip evaluation if NULL ratio is high. #60129 - ReplacingMergeTree merge algorithm optimized for non-intersecting parts. #70977
- JIT compilation enabled for more expressions:
abs
,bitCount
,sign
,modulo
,pmod
,isNull
,isNotNull
,assumeNotNull
, casts to Int/UInt/Float, comparisons, logical ops. #70598 (李扬) - Distributed INSERT … SELECT – respects
prefer_localhost_replica
when building query plan. #72190 (Altinity) - Predicate pushdown for distributed queries – setting
allow_push_predicate_ast_for_distributed_subqueries
enables temporary AST-based pushdown until query plan serialization is ready. Closes #66878, #69472, #65638, #68030, #73718; implemented in #74085 (Nikolai Kochetov) ALTER TABLE FETCH PARTITION
now fetches parts in parallel; pool size set viamax_fetch_partition_thread_pool_size
. #74978- New MergeTree setting
materialize_skip_indexes_on_merge
– disables index materialization during merge, allowing explicit control viaALTER TABLE ... MATERIALIZE INDEX ...
. #74401 - MergeTree optimizations for petabyte-scale workloads
- Memory optimization for index granularity – new setting
use_const_adaptive_granularity
ensures efficient metadata memory use in large workloads. #71786 (Anton Popov) - Primary key caching – setting
use_primary_key_cache
enables LRU cache for PKs;prewarm_primary_key_cache
warms it on insert/merge/fetch/startup. #72102 (Anton Popov)
- Memory optimization for index granularity – new setting
- Caches
use_query_condition_cache
– remembers data ranges that don’t match repeated query conditions as temporary in-memory index. Closes #67768, implemented in #69236 (zhongyuankai)- Active eviction – cache no longer grows unnecessarily when data volume is smaller. #76641
- Skipping index granule cache – in-memory cache improves repeated query performance. Controlled by
skipping_index_cache_size
and_max_entries
. Motivated by vector similarity indexes. #70102 (Robert Schulze) prewarm_mark_cache
setting – loads mark cache on insert, merge, fetch, and table startup. #71053 (Anton Popov). Example:SYSTEM PREWARM MARK CACHE t
- Userspace Page Cache – control with
page_cache_max_size
anduse_page_cache_for_disks_without_file_cache
Click any tab in the tab bar above for more information.
Operations - Complete details
- Configuration
allowed_feature_tier
– global switch to disable all experimental/beta features. #71841- Limit number of replicated tables, dictionaries, and views. #71179 (Kirill)
- User-level disk space checks:
min_free_disk_bytes_to_perform_insert
andmin_free_disk_ratio_to_perform_insert
. #69755 (Marco Vilas Boas) - IP family filtering with
dns_allow_resolve_names_to_ipv4
anddns_allow_resolve_names_to_ipv6
. #66895 - Add users to startup scripts; allows controlling
DEFINER
, etc. #74894
- Usability
- Embedded documentation for settings is now richer and will become the source for website docs (always accurate, versioned, and offline-capable). #70289
print_pretty_type_names
– improvesTuple
display.- Automatic disk spilling in
GROUP BY
/ORDER BY
based on memory use. Controlled viamax_bytes_ratio_before_external_group_by
and..._sort
. #71406, #73422
- Monitoring
- New per-host dashboards: Overview (host) and Cloud overview (host) in advanced dashboard. #71422
- Cluster
- Disks:
plain_rewritable
- Userspace Page Cache
- New implementation caches in-process (useful for remote VFS without local FS cache). #70509
- External Tables
- Support for attaching external tables without databases:
table_disk = 1
- Support for attaching external tables without databases:
- CPU Scheduling
- New setting
concurrent_threads_scheduler = round_robin | fair_round_robin
– improves CPU fairness across INSERT/SELECT. #75949
- New setting
- Memory Tracker
memory_worker_correct_memory_tracker
– correct memory tracker regularly. #75714
- Introspection & Logging
processors_profile_log
has 30-day TTL by default. #66139system.filesystem_cache_log
now respectsenable_filesystem_cache_log
. #77650- New table
system.histogram_metrics
– supportsobserve(value)
histogram-style metrics (e.g., Keeper response times). #75736 system.trace_log
now includessymbols
andlines
(symbolized stack traces); controlled viatrace_log.symbolize
, enabled by default. #73896date_time_utc
config option – enables UTC datetime formatting in logs (RFC 3339 / ISO 8601). #71560- Disable heavy async metrics by default – avoids unnecessary overhead. #71087
- Skip detached parts from readonly/write-once disks in
system.detached_parts
. #71086 - New introspection tables:
system.s3_queue_settings
,system.azure_queue_settings
#70841 system.replicas
has new column:readonly_duration
– useful for distinguishing sentinel replicas. #69871- Throttle frequency of log messages. #70601
system.query_metric_log
– tracks query memory/metric history and flushes to disk. #66532- New profile events for merges and mutations. #68015
system.projections
– addedsystem.trace_log
(again) – now includes symbolized stack traces. #73896- Use cgroup-specific CPU metrics for more accurate accounting. #62003
- TLS
- Client certificates can now be reloaded without restarting – same as server certs. #70997
- Merge Fine-Tuning (Experts Only)
- Official Docker Image – ClickHouse now has one! (But no strong reason to switch if your current setup works.)
- Backup Database Engine – allows mounting a backup as a read-only database.
Click any tab in the tab bar above for more information.
Interfaces - Complete details
- SSH
- Added SSH interface – connect via any SSH client for interactive queries using embedded
clickhouse-client
(PTY-based). #48902
- Added SSH interface – connect via any SSH client for interactive queries using embedded
- HTTP
- Web UI: now features interactive database navigation. #75777
- Play UI enhancements:
- Progress bar with live stats, cancellation, speed metrics
- Incremental rendering with HTTP compression
- Sticky headers, cell navigation via arrow keys
- Improved number formatting, fixed cell resizing issues
- Client-side rendering finalization logic
- Mouse-over shows column data types
- Displays server status, version, uptime
- Better support for nested data and special floats (
inf
,nan
) - Overall refreshed design, incl. Safari-compatible cloud icon #74204
- HTML merge visualizer: available at
http://localhost:8123/merges
. #70821 - Custom HTTP response headers: via
http_response_headers
. Enables e.g. image rendering in browser. Closes #59620, #72656 - Support for user/password in
http_handlers
fordynamic_query_handler
/predefined_query_handler
. #70725 - Username-only authentication in HTTP handlers now allowed (password optional). #74221
- Better handling of streaming errors – generate malformed chunked encoding when exceptions occur. #68800
- CLI (
clickhouse-client
&clickhouse-local
)--progress-table
– new mode shows live query metrics as a table; can toggle usingCtrl+Space
if--enable-progress-table-toggle
is set. #63689clickhouse-local
supports--copy
mode as shortcut for format conversion. #68503, #68583- CLI tools now auto-detect stdin compression. Closes #70865, implemented in #73848
- Implicit command-line mode:
ch "SELECT 1"
orch script.sql
clickhouse-compressor
now supports--threads
for parallel compression. #70860- Logs now include
script_query_number
andscript_line_number
insystem.query_log
and native protocol. #74477 - Replaced
send_settings_to_client
(server-side) with client-sideapply_settings_from_server
to control client behavior (only applies to native protocol). #75478, #75648 - Set custom prompt via:
--prompt
CLI option<prompt>
in config<connections_credentials><prompt>
in config #74168
- Secure connection auto-detect: recognizes port 9440 as TLS. #74212
- PostgreSQL Wire Protocol
- Now supports prepared statements. #75035
- MySQL Wire Protocol
- Error codes now match MySQL compatibility. #73948
Click any tab in the tab bar above for more information.
Integrations - Complete details
- Storage (S3/Azure) Queue
ALTER TABLE ... MODIFY/RESET SETTING ...
is now supported forS3Queue
. #70811
- Kafka
- Upgraded librdkafka to 2.8.0. #76621 (Altinity)
- MongoDB
- URL Engine
- New
_headers
column - User-defined
Content-Type
via custom headers. #70859
- New
- Datalakes
- Iceberg
- REST Catalog integration. #71542
- Supports Iceberg on Azure, HDFS, S3, Local
- Support reading Iceberg tables on HDFS. #70268
- Schema evolution support: column reordering, renaming, type widening. #69445
- Partition pruning with truncate transform (
SET use_iceberg_partition_pruning = 1
). ImplementsicebergTruncate
,toYearNumSinceEpoch
,toMonthNumSinceEpoch
. #77403 - Iceberg-related Parsing improvements:
- Sequence ID parsing in manifest files
- Extendable Avro metadata parsing #75010
- Support
iceberg_metadata_file_path
to explicitly select Iceberg metadata file. #77318 - Experimental AWS Glue catalog integration. #77257
- DeltaLake
- S3
- Fixes for S3 Express support. #73777
- Azure
- Support for SAS Tokens. #72959
- Performance
- Automatic parallelization for external data queries using
parallel_replicas_for_cluster_engines
andcluster_for_parallel_replicas
- Hive-style partition pruning supported
- Automatic parallelization for external data queries using
- Iceberg
Note: Starting with version 25.4, icebergCatalog
, UnityCatalog
, and Delta
were unified under the DataLakeCatalog umbrella (with subtypes). Altinity builds support that remapping in 25.3 for convenience.
Click any tab in the tab bar above for more information.
Backward Incompatible Changes - Complete details
- Docker default user – Passwordless
default
user is now disabled. Restore viaCLICKHOUSE_SKIP_USER_SETUP=1
(unsafe!). #77212 - Parquet output type changes (#70950)
Date
→Date32
;DateTime
→DateTime64(3)
by default- Restore legacy
UInt32
output usingoutput_format_parquet_datetime_as_uint32 = 1
- Security grants
- Mutations – Full query (incl. subqueries) now validated before execution. #71300
- Removed:
StorageExternalDistributed
(MySQL/PostgreSQL with shard/replica). #71176 - Removed: system tables
generate_series
andgenerateSeries
– added by mistake. #71091 - Renamed setting –
skip_download_if_exceeds_query_cache
→filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit
. #71578 deltaSumTimestamp
function – dropped support for:- Enums, UInt128/UInt256 (first arg)
- Int8, UInt8, Int16, UInt16 (timestamp arg) #71790
- Functions
greatest
/least
now ignore NULLs – behavior matches PostgreSQL. Useleast_greatest_legacy_null_behavior = true
to restore old behavior. #65519, #73389, #73344 - MongoDB legacy integration removed –
use_legacy_mongodb_integration
is obsolete. #71997 - Dictionary validation – added validation when ClickHouse is used as a dictionary source. #72548
- ORDER BY/comparisons – disallow non-comparable types (
JSON
,Object
,AggregateFunction
) by default. #73276 - MaterializedMySQL engine removed – deprecated and no longer available. #73879
- MySQL dictionary optimization – no longer executes
SHOW TABLE STATUS
(was irrelevant for InnoDB). #73914 - Merge table type inference – now unifies structure across tables using union of columns. May break in cases where type coercion was implicit. Restore old behavior with
merge_table_max_tables_to_look_for_schema_inference = 1
orcompatibility = 24.12
. #73956 h3ToGeo()
now returns(lat, lon)
(standard order). Restore legacy(lon, lat)
viah3togeo_lon_lat_result_order = true
. #74719- Forced merges ignore max bytes when both
min_age_to_force_merge_seconds
andmin_age_to_force_merge_on_partition_only
are enabled. #73656 - Non-SQL dialects degraded to experimental #74224:
- PRQL:
allow_experimental_prql_dialect = 1
- KQL:
allow_experimental_kusto_dialect = 1
- PRQL:
JSONCompactWithNames
and...AndTypes
no longer emit “totals” row (was a bug). #75037format_alter_operations_with_parentheses = true
by default – may break replication with pre-24.3 clusters. #75302- Cache config strictness – invalid settings now throw errors (were previously ignored). #75452
TRUNCATE DATABASE
is now disallowed for replicated DBs. #76651 (Bharat Nallan)- Parallel replicas disabled by default if analyzer is off. Can override via
parallel_replicas_only_with_analyzer = false
. #77115 - Disallow NaN/inf as values in float-type settings. #77546 (Yarik Briukhovetskyi)
- New mergetree constraint –
enforce_index_structure_match_on_partition_manipulation
allows attaching partitions only when projections/secondary indices of source ⊆ target. Closes #70602, #70603 lightweight_mutation_projection_mode
moved to merge_tree_settings
Click any tab in the tab bar above for more information.
v25.3.6.10034
Released 2025-07-29
Build report - 25.3.6.10034 | Release page
Changes in Altinity Stable build compared to upstream build 25.3.6.56-lts
Like upstream builds, Altinity Stable builds for ClickHouse are open source and are based on upstream LTS versions.
Fixes backported to Altinity Stable Build 25.3.6.10034
Altinity Stable Build version 25.3.6.10034 is based on upstream 25.3.6.56-lts, but we have additionally backported several fixes:
- Fix lambdas in skip index analysis #80025
- Remove guard pages from fibers and alternative stack for signals in threads #79147
- Do not check for cyclic dependencies on create table with no dependencies #83077
- Fix wrong results for grouping sets with ColumnConst #79743
- Ignore parse error in system.distributed_ddl_queue #79369
- Add _time virtual column in S3Queue engine #78926
Let’s Install!
Linux packages for both AMD64 and Aarch64 can be found at builds.altinity.cloud/ as either .deb
, .rpm
, or .tgz
. Linux packages for upstream builds are at packages.clickhouse.com.
Altinity Stable Build images are available at DockerHub as altinity/clickhouse-server:25.3.6.10034.altinitystable.
For more information on installing ClickHouse from either the Altinity Builds or the upstream builds, see the ClickHouse Altinity Stable Builds Install Guide.
Please contact us at info@altinity.com if you experience any issues with the upgrade.