v25.12 Changelog for Cloud
Backward Incompatible Changes
Data type changes
- Introduce
Geometrytype. Support readingWKBandWKTformats for it. In previous versions, theGeometrytype was aliased toString, but now it is a full-featured type. #83344 (Konstantin Vedernikov). - Remove deprecated Object type. #85718 (Pavel Kruglov).
- Escape filenames created for Variant type subcolumns in Wide data part of MergeTree tables. This change breaks compatibility with old tables with Variant/Dynamic/JSON data types. It fixes storing types with special symbols inside Variant (like DateTime with specific timezone that contains
\). Escaping can be disabled by changing MergeTree settingescape_variant_subcolumn_filenames(to keep compatibility disable this setting in the config for MergeTree or setcompatibilitysetting to the previous version before upgrade). Resolves #69590. #87300 (Pavel Kruglov).
Query and function changes
- ALTER MODIFY COLUMN now requires explicit DEFAULT when converting nullable columns to non-nullable types. Previously such ALTERs could get stuck with cannot convert null to not null errors, now NULLs are replaced with column's default expression. Resolves #5985. #84770 (Vladimir Cherkasov).
- Remove settings
allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functions. Allowing non-comparable types in order by or comparison functions may lead to logical errors and unexpected results. Resolves #90028. #90527 (Pavel Kruglov). - Fix functions bitShiftLeft and bitShiftRight to return 0 or empty value in case of a shift exactly of the size of the type. #91943 (Pablo Marcos).
- Ngram tokenizer will no longer return ngrams less than the length N it was set with. Text Search will return no rows when search tokens are empty. #89757 (George Larionov).
Storage and index changes
- Remove the obsolete
LIVE VIEWfeature. If you useLIVE VIEW, upgrading to the new version will not be possible. #88706 (Alexey Milovidov). - Prohibit the creation of multiple
plain-rewritabledisks on top of the shared object storage path, as this can lead to undefined behavior during collisions of different metadata storage transactions. #89038 (Mikhail Artemenko). - It is now forbidden to create special
MergeTreetables (such asReplacingMergeTree,CollapsingMergeTree, etc.) with an emptyORDER BYkey, since merge behavior in these tables is undefined. If you still need to create such a table, enable theallow_suspicious_primary_keysetting. #91569 (Anton Popov). - Multiple fixes around implicit indices. The schema shown or stored (keeper metadata) won't include implicit indices, such as the ones created by settings
add_minmax_index_for_numeric_columnsoradd_minmax_index_for_string_columns. This might cause metadata errors when a ReplicatedMergeTree table is created or updated in a newer version, while there is a replica in an older release. #91429 (Raúl Marín).
Settings and configuration changes
- Support exception tagging for HTTP results response to enable clients to parse exceptions more reliably. Resolves #75175. The setting
http_write_exception_in_output_formatis disabled by default for consistency across formats. #88818 (Kaviraj Kanagaraj). - Fixes Kafka storage SASL settings precedence. Table-level SASL settings specified in CREATE TABLE queries now correctly override consumer/producer-specific settings from configuration files. #89401 (János Benjamin Antal).
- Renamed ACME configuration parameters
refresh_certificates_task_intervaltorefresh_certificates_task_interval_secondsandrefresh_certificates_before to refresh_certificates_before_seconds. Therefresh_certificates_task_interval_secondsparameter now expects a value in seconds. #92211 (Konstantin Bogdanov). - Marks disabled positional arguments in the projections as a backward-incompatible change. Additionally, it introduces the
enable_positional_arguments_for_projectionssetting to enable a safe ClickHouse cluster upgrade when positional arguments are present in the projections. #92007 (Dmitry Novik).
Client changes
- Update clickhouse-client to return a non-zero exit code (159 - TIMEOUT_EXCEEDED) when a query times out due to
receive_timeout. Previously, timeouts would return exit code 0 (success), making it difficult for scripts and automation to detect timeout failures. #91432 (Sav).
Statistics format changes
- When alter column from
StringtoNullable(String), we will not do mutation to the data. But foruniqaggregate function, it uses different data structure: for nullable column, it will useAggregateFunctionNullwith a nested uniq aggregator. TheAggregateFunctionNullwill serialize an extra bool flag. This will make the statistics file incompatible. The format of statistics has changed, the server will crash if we have statistics with old format. To avoid exception, runALTER TABLE [db.]table MATERIALIZE STATISTICS ALLto regenerate the statistics. #90311 (Han Fei).
Other breaking changes
- Fix
Fatalwhen compressing data with size not aligned to element size (in T64 codec). Resolves #89282. #89432 (yanglongwei).
New Features
Functions
- Added new SQL statement EXECUTE AS to support user impersonation. Resolves #39048. #70775 (Shankar).
- Add
flipCoordinatesfunction that unwraps the required number of dimensions in an array and swaps pointers inside the Tuple column. Resolves #79469. #79634 (Sachin Kumar Singh). - Enhanced
IS NOT DISTINCT FROM(<=>) operator: added support for inverseIS DISTINCT FROM, support compatible numeric operands of different types (e.g.,Nullable(UInt32)andNullable(Int64)). #87581 (yanglongwei). - Added support for the
cume_distwindow function. Fixes #86920. #88102 (Manuel). - Functions to calculate area and perimeter for the geometry type. #89047 (Konstantin Vedernikov).
- Implement
dictGetKeysfunction that returns the dictionary key(s) whose attribute equals the specified value. It uses a per-query reverse-lookup cache, tuned by themax_reverse_dictionary_lookup_cache_size_bytessetting, to speed up repeated lookups. #89197 (Nihal Z. Miaji). - Support for
arrayRemove(arr, elem)to remove all elements equal toelemfrom the arrayarr. Resolves #52099. #89585 (tiwarysaurav). - Introduces
midpointscalar function that calculates average. Resolves #89029. #89679 (simonmichal). - You can now retrieve both the argument and its corresponding minimum or maximum value using the new
argAndMinandargAndMaxfunctions. #89884 (AbdAlRahman Gad). - Add
HMAC(algorithm, message, key)sql function as a part of #73900 and #38775. #90837 (Mikhail f. Shiryaev). - Add support for
has()function to use primary key and data skipping indexes when the first argument is a constant array. Closes #90980. #91023 (Nihal Z. Miaji).
System tables
- Add
system.unicodetable, containing a list of Unicode characters and their properties. Closes #80055. #80857 (wxybear). - Added a new system table
shared_merge_tree_condemned_partssimilar toshared_merge_tree_outdated_parts, which lists the condemned parts about to be killed by PartsKillerThread. (Smita Kulkarni).
Table engines and storage
- Support for a part of the Prometheus HTTP Query API. To enable it, add a rule with type
query_apiin the<prometheus>section in the configuration file. Supported handlers are/api/v1/query_rangeand/api/v1/query. #86132 (Nikita Mikhaylov). - Users can now configure S3/Azure Queue tables to move or tag processed files, in addition to the previous options to keep or remove files. Resolves #72944. #86907 (Murat Khairulin).
- Add a new MergeTree setting
merge_max_dynamic_subcolumns_in_wide_partto be able to limit the number of dynamic subcolumns in the Wide part after merge regardless of the parameters specified in the data type. #87646 (Pavel Kruglov). - Microsoft OneLake catalog integration. #89366 (Konstantin Vedernikov).
- Support
CREATE OR REPLACEsyntax for temporary tables. Closes #35888. #89450 (Aleksandr Musorin). - Support
direct(nested loop) join for MergeTree tables. To use it, specify it as the single option in the setting:join_algorithm = 'direct'. #89920 (Vladimir Cherkasov). - This PR introduces projection-level settings, exposed through the new
WITH SETTINGSclause inALTER TABLE ... ADD PROJECTION. These settings allow projections to override certain MergeTree storage parameters (e.g. index_granularity, index_granularity_bytes) on a per-projection basis. #90158 (Amos Bird).
Iceberg and data lakes
- Support
ORDER BYinCREATEoperation for iceberg + sorting inINSERT. Resolves #89916. #90141 (Konstantin Vedernikov).
SQL and query features
- Add
allow_reentryoption towindowFunnelaggregate function. When enabled with strict_order, it ignores events that violate the order instead of stopping the funnel analysis. This enables handling user journeys with refreshes (A->A->B) or back-navigation (A->B->A->C) without underreporting conversion rates. #86916 (Lee ChaeRok). - User can now add a new argument
preprocessorin text index construction. The argument is an arbitrary expression that transforms each document before tokenization. #88272 (Jimmy Aguilar Mena). - Add support for fractional
LIMITandOFFSETfor selecting a fraction of a table. Closes #81892. #88755 (Ahmed Gouda). - Add setting into_outfile_create_parent_directories to automatically create parent directories for INTO OUTFILE, preventing errors when output paths do not exist. Resolves #88610. #88795 (Saksham).
- Add setting
type_json_skip_invalid_typed_pathsto disable exceptions for inserts/type casts to JSON type when input JSON cannot be cast to explicit typed paths in JSON type. Falls back to null/zero value of typed path. Closes #86917. #89886 (Max Justus Spransy).
Client and CLI features
- CLI client can now suppress the 'ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded.' message by specifying
--no-server-client-version-messageorfalse. #87784 (Larry Snizek). - Access ClickHouse Cloud instances using Cloud credentials with --login. #89261 (Krishna Mannem).
- Web UI now provides a download button. It downloads the full result even if the UI displays only part of it. #89768 (Alexey Milovidov).
Server configuration and monitoring
- Adds a
memory_usagefield toX-ClickHouse-ProgressandX-ClickHouse-Summary. This can be used to collect memory usage of queries in real time on the client side. #88393 (Christoph Wurm). - Added
send_profile_eventssetting which allows clients to reduce network traffic when profile events are unused. #89588 (Kaviraj Kanagaraj).
Keeper
- Keeper compatibility with zookeeper: create with statistics. #88797 (Konstantin Vedernikov).
- Support for ZooKeeper persistent watches in ClickHouse Keeper. #88813 (Konstantin Vedernikov).
Input/Output formats
- Implement new input output format
Buffers. This format is similar toNative; however, unlikeNative, it does not store column names, column types, or any extra metadata. Closes #84017. #91156 (Nihal Z. Miaji). - Add
arrow_flight_request_descriptor_typesetting to support Dremio and other Arrow Flight servers that require command-style descriptors. Fixes #89523. #89826 (Shreyas Ganesh). - Added
kafka_schema_registry_skip_bytessetting to Kafka table engine to skip envelope header bytes (e.g., AWS Glue Schema Registry's 19-byte prefix) before parsing message payload. #89621 (Taras Polishchuk).
Other new features
- Add a setting
max_streams_for_files_processing_in_cluster_functionsto control number of streams for parallel files reading in Cluster table functions. Closes #90223. #91323 (Pavel Kruglov). - Allow disabling background download of nearby part data on a per-query basis. Fixes #89524. #89668 (tanner-bruce).
- Experimentally support e2k (Elbrus-2000) as a new platform for ClickHouse. #90159 (Ramil Sattarov).
Experimental Features
- Support TLS certificates retrieval from ACME providers, RFC 8555. #66315 (Konstantin Bogdanov).
- The new logic is introduced to automatically execute queries using parallel replicas, controlled by the setting
automatic_parallel_replicas_mode. #87541 (Nikita Taranov). - Full-text search is now in private preview (from a previously experimental stage). #88928 (Robert Schulze).
- Move
Aliasto experimental, can be enabled withallow_experimental_alias_table_engine=1. #89712 (Kai Zhu).
Performance Improvements
Query execution and optimization
- Fail fast when queries reach row limits. Resolves #61872. #62804 (Sean Haynes).
- Add optimization to remove unused columns in query plans. Resolves #75152. #76487 (János Benjamin Antal).
- Optimization for large value in ConstantNode. Closes #72880. #81104 (Yakov Olkhovskiy).
- Prefetch keys during hash table iteration to minimize cache misses. #84708 (lgbo).
- Improve LZ4 decompression speed by simplifying the code and tweaking the selection algorithm. #88360 (Raúl Marín).
- Implement lazy columns replication in JOIN and ARRAY JOIN. Avoid converting special columns representation like Sparse and Replicated to full columns in some output formats. This avoids unnecessary data copy in memory. #88752 (Pavel Kruglov).
- Use advanced SIMD operations for logical functions via dynamic dispatch. #90432 (Raúl Marín).
- Improve JIT function performing by not initializing the result column to zero unnecessarily. #90449 (Raúl Marín).
- Speed up T64 decompression via dynamic dispatch. #90610 (Raúl Marín).
- Speed up converting columns to bool (in
WHEREclauses) via dynamic dispatch. #91203 (Raúl Marín). - Speed up sorting of single numeric block via dynamic dispatch. #91213 (Raúl Marín).
JOIN optimizations
RIGHTandFULL JOINs now use ConcurrentHashJoi`n; that means that these types of join are now running with a higher degree of parallelism. Improves various cases for RIGHT and FULL JOINs up to 2 times. Resolves #78027. #78462 (Yarik Briukhovetskyi).- Allow rewriting
ANY LEFT JOINorANY RIGHT JOINtoALL INNER JOINin some cases. #89403 (Dmitry Novik). - Support
JOINruntime filters forANTIJOINs. Also, refactor the runtime filters implementation to reduce lock contention. #89710 (Dmitry Novik). - Support keeping reading in order from the left table in
LEFT/INNER JOINoperations, which can be utilized by subsequent steps. #89815 (Vladimir Cherkasov).
MergeTree and storage optimizations
- Up to 8x faster
SELECTqueries with heavy partition pruning on tables with 10K+ parts. #85535 (James Morrison). - When a query uses fixed hash map for aggregation state(group by a small integer), ClickHouse would merge the aggregation state in parallel to speed up the query. Resolves #63666. #87366 (Jianfei Hu).
- Parquet reader v3 is enabled by default. #88827 (Michael Kolupaev).
- Queries can now benefit from optimize_read_in_order and query_plan_optimize_lazy_materialization simultaneously. Resolves #88767. #88866 (Manuel).
- Use aggregate projection for queries with
DISTINCT. Closes #86925. #88894 (Nihal Z. Miaji). - Run streaming
LIMIT BYtransform in cases when input sort order matches LIMIT BY keys. #88969 (Eduard Karacharov). - Added support of sparse serialization for columns of Nullable type. #88999 (Amos Bird).
- Optimize MergeTree reader inplace filtering. Resolves #87119. #90630 (Xiaozhe Yu).
- Introduce an additional heuristic to reduce the widths of the selected merge choices. #91163 (Mikhail Artemenko).
Index and text search optimizations
- ClickHouse now uses skip indexes to perform index analysis on
WHEREclauses with mixedAND- andOR-connected filter conditions. Previously, the WHERE clause needed to be a conjunction (AND) of filter conditions to utilize skip indexes. A new settinguse_skip_indexes_for_disjunctions(default: on) controls this feature. #87781 (Shankar Iyer). - Improved filtering performance for predicates with functions such as
like,equals,has, and others by leveraging an additional preliminary filter built from the text index. This optimization is enabled via thequery_plan_text_index_add_hintsetting. #88550 (Anton Popov). - Improved text index performance by caching dictionary blocks and using hashtables for token lookups instead of binary search. #88786 (Elmi Ahmadov).
- Since posting lists are the largest by the data size, caching them would improve the performance in consecutive runs. #88912 (Elmi Ahmadov).
- Optimize repeated inverse dictionary lookups by doing faster lookups into a precomputed set of possible key values. Closes #7968. #88971 (Nihal Z. Miaji).
- Optimize
ORDER BY...LIMIT Nqueries by using skip index and dynamic threshold filter to significantly reduce rows processed. #89835 (Shankar Iyer). - Users should see lower latency in index analysis when large
minmaxindexes (millions of granules) are present. #90428 (Shankar Iyer).
Aggregation optimizations
- Optimize
AggregateFunctionHistogramby sorting only the tail of points array and skipping sort for monotonic inputs, achieving ~10% speedup. #85760 (MakarDev). - Slightly speed up some countDistinct operations by reducing the overhead of HashSetTable::merge. #89727 (Raúl Marín).
- Improve topK performance and behaviour. #90091 (Raúl Marín).
- Improved performance of Decimal comparison operations. Resolves #28192. #90153 (Konstantin Bogdanov).
S3 and backup optimizations
- S3 partitions objects internally based on key-name prefixes and automatically scales to high request rates per partition. This change introduces two new BACKUP settings: data_file_name_generator and data_file_name_prefix_length. When data_file_name_generator=checksum, backup data files are named using a hash of their contents. #88418 (Julia Kartseva).
- Improve query performance for S3 tables created with glob pattern by pushing down
_pathfilter values, which allows to avoid S3 listing operations. Controlled by thes3_path_filter_limitsetting. #91165 (Eduard Karacharov).
Data lake optimizations
- Distributed execution: better split tasks by row groups IDs, not by files. #87508 (Konstantin Vedernikov).
- Support partition pruning for Paimon functions. #90253 (JIaQi Tang).
Improvements
Query optimization and execution
- Allow
FETCH PARTITIONwhen there are broken disks in replicated merge tree tables. #58663 (Duc Canh Le). - Add
h3PolygonToCellsfunction which can fill geometry with h3 hexagons. Resolves #33991. #66262 (Zacharias Knudsen). - All DDL
ON CLUSTERqueries now execute with the original query user context for better access validation. #71334 (pufit). - Added parallelism for
ALTER TABLE ... FREEZEqueries. #71743 (Kirill). - Allows the use of non-constant second arguments for
IN. It also supports a tuple as a second argument. #77906 (Yarik Briukhovetskyi). - This PR allows using normal projections as a secondary index. When enabled, certain query predicates can be used to read from projection parts and generate bitmaps to filter rows efficiently during the PREWHERE stage. #81021 (Amos Bird).
- Enable
enable_shared_storage_snapshot_in_queryby default for better consistency guarantees. #82634 (Alexey Milovidov). - UNION should unify types with Variant if needed. Resolves #82772. #83246 (Mithun p).
- Log internal queries (those executed internally by dictionaries, refreshable materialized views, etc) and add the new
is_internalcolumn tosystem.query_log. #83277 (Miсhael Stetsyuk). - Allows
INSERTintoALIAScolumns (columns that simply refers to a physical column without any expression). Closes #80060. #84154 (Shaurya Mohan). - You can see a progress bar, logs and performance statistics for
CREATE OR REPLACE TABLEqueries withSELECTin clickhouse-client. Resolves #38416. #87247 (Diskein). - Support JSON and Dynamic types in hash functions. Resolves #87734. #87791 (Pavel Kruglov).
- The default value of
query_plan_optimize_join_order_limitis changed to 10. #89312 (Alexey Milovidov). - The optimization enable_lazy_columns_replication is now the default, which will save memory usage in joins. #89316 (Alexey Milovidov).
- Enable the setting
allow_statistics_optimizeby default, so the JOINs optimizer will use column statistics. #89332 (Alexey Milovidov). - Enable
create_table_empty_primary_key_by_defaultby default. This is better for usability. #89333 (Alexey Milovidov). - Setting
enable_time_time64_typeis now enabled by default. #89345 (Yarik Briukhovetskyi). - Enable setting
allow_special_serialization_kinds_in_output_formatsby default. #89402 (Pavel Kruglov). - Ignore
ON CLUSTERin queries executed through Shared Catalog. (Nikolay Degterinsky). - Add support for
ALTER DATABASE MODIFY COMMENTto Shared Catalog. (Nikolay Degterinsky). - Support
CREATE OR REPLACEfor SharedSet/SharedJoin in Shared databases. (Tuan Pham Anh). - Avoid waiting for other queries when running
SYNC REPLICAin SharedMergeTree. (Raúl Marín).
Storage and MergeTree improvements
- Add new virtual column
_tags(Map(String, String)) with all the tags associated with the blob in S3. Resolves #72945. #77773 (Zicong Qu). - Add error message that the part was deduplicated. #80264 (Aleksandr Musorin).
- Use OpenSSL 3.5.4. #81389 (Konstantin Bogdanov).
- Add cache for bcrypt authentication. #87115 (Nikolay Degterinsky).
- Parquet no-timezone timestamps (isAdjustedToUTC=false) are now read as DateTime64(..., 'UTC') instead of DateTime64(...). #87872 (Michael Kolupaev).
- Roles defined in SQL can now be granted to users defined in
users.xml. #88139 (c-end). - If a skip index used in a FINAL query is on a column that is part of the primary key, the additional step to check for primary key intersection in other parts is unnecessary and now not performed. Resolves #85897. #88368 (Shankar Iyer).
- Allow inserting into remote and data lake tables when
disable_insertion_and_mutationis enabled. #88549 (Alexander Tokmakov). - Cache table-level statistics, add two settings: merge tree setting
refresh_statistics_intervaland session settinguse_statistics_cache. #88670 (Han Fei). - Add a MergeTree setting
alter_column_secondary_index_modeto control what to do with indices during mutations. Possible values: throw, drop, rebuild, and compatibility. Closes #77797. #89335 (Raúl Marín). - Introduce a per-table cache of
ColumnsDescriptionfor parts, reducing memory usage when tables contain many parts and many columns. #89352 (Azat Khuzhin).
System tables and monitoring
- Add multiple histogram metrics for the server and the keeper to instrument the durations of the keeper request execution stages. #88158 (Miсhael Stetsyuk).
- Add a new column statistics in
system.columns, indicating the types of statistics built on this table. #89086 (Han Fei). - The HTTP interface will provide
AgeandExpiresheaders when the query result cache is used. Introduce new profile events:QueryCacheAgeSeconds,QueryCacheReadRows,QueryCacheReadBytes,QueryCacheWrittenRows,QueryCacheWrittenBytes. #89759 (Alexey Milovidov). - Show table properties in Web UI. Clicking on the number of rows or bytes will bring up a query from
system.tables. #89771 (Alexey Milovidov). - Added fields
last_error_time,last_error_message,last_error_query_idandlast_error_tracetosystem.error_logtable. #89879 (Narasimha Pakeer). - Store deduplication blocks ids in system.part_logs. #89928 (Sema Checherinda).
- Changed the default of setting
check_query_single_value_resultfromtruetofalse. This causesCHECK TABLEto return detailed per-part results instead of an aggregated result. #90150 (Robert Schulze). - Add a new column
parts_in_progress_namestosystem.mutationsto improve diagnostics. #90155 (Shaohua Wang). - Introduce
system.background_schedule_pool{,_log}to improve introspection of background jobs. #91157 (Azat Khuzhin). - Add profile events
FailedInitialQueryandFailedInitialSelectQuery. #91172 (RinChanNOW). - Add three columns in
system.tablesfor dangling parts metrics. (Han Fei). - Expose the value of
distributed_cache_client.connection_pool_sizeas a metric. (Francesco Ciocchetti).
Client and UI improvements
- User can now cancel the query by pressing Ctrl-C when the pager is running. Resolves #80778. #88935 (Grigorii Sokolik).
- Web UI will display bars in the table even when the values are negative. #89016 (Alexey Milovidov).
- Queries starting with whitespace are no longer saved to history. #89116 (Konstantin Bogdanov).
clickhouse-clientandclickhouse-localin the interactive mode will highlight identifiers in the command line that have the same name as the current one under the cursor. #89689 (Alexey Milovidov).- Make the resizer of the query textarea in the Web UI full-width. #89457 (Alexey Milovidov).
- Type hints in the Web UI no longer overflow into the table header. #89753 (Alexey Milovidov).
- You can now quickly comment or uncomment your currently selected lines in the Web UI query editor using
Ctrl+/(orCmd+/on Mac). #91160 (Samuel K.). - Add support for loading ClickHouse Client configuration from XDG Base Directory paths. Resolves #89882. #90306 (Wujun Jiang).
S3 and cloud storage improvements
- Allow using opt-in AWS regions for S3 automatically when the region is not specified in the endpoint. #88930 (Andrey Zvonov).
- Set default s3_retry_attempts to 500 for 25.6 to make sure backups succeed when there's an S3 repartitioning. #89051 (Nikita Mikhaylov).
- Cache S3 credentials interacting with STS endpoint so they can be reused for different function calls. #89734 (Antonio Andelic).
- Now pre-signed URLs work with S3. Closes #65032. #90827 (Yarik Briukhovetskyi).
Data lakes improvements
- Support reading DeltaLake CDF via
deltaLaketable function with settingsdelta_lake_snapshot_start_version,delta_lake_snapshot_end_version. #90431 (Kseniia Sumarokova). - Support storage settings in insert into table function for consistency with select. Closes #89386. #91707 (Kseniia Sumarokova).
- Throw a "not implemented" error for truncate query for data lakes instead of silently doing nothing. Closes #86604. #91713 (Kseniia Sumarokova).
Kafka improvements
- The
kafka_compression_codecandkafka_compression_levelsettings can now be used to specify the compression for Kafka producers. #89073 (János Benjamin Antal). - Add
kafka_consumer_reschedule_msas a tunableKafkatable engine setting. Resolves #89204. #90112 (Jeremy Aguilon).
Keeper improvements
- Add byte size limit for append request batch in Keeper. Limit is controlled with
keeper_server.coordination_settings.max_requests_append_bytes_size. #90342 (Antonio Andelic). - Add a keeper-server-side check during handshake to reject clients when
last_zxid_seen (provided by the client) > last_processed_zxid. #90016 (Miсhael Stetsyuk). - Use lower node limit for RemoveRecursive Keeper request during S3Queue cleanup. #90201 (Antonio Andelic).
Input/Output format improvements
- Added support for UUID in Parquet when it is represented by
FixedString(16)with the logical type UUID. #74484 (alekseev-maksim). - Support array of string as an input to the
hasAnyTokensorhasAllTokensfunctions. #89124 (Elmi Ahmadov). - In Pretty format, named tuples are now displayed as Pretty JSON. This closes #65022. #91779 (Mostafa Mohamed Salah).
- Add CapnProto message size limit. It can be changed with
format_capn_proto_max_message_size. #91888 (Antonio Andelic).
Text index improvements
- The text index now works with ReplacingMergeTree tables. #90908 (Elmi Ahmadov).
- Enable using inverted index in
PREWHERE. Resolves #89975. #89977 (Peng Jian). - Ngrams tokenizer can now be built with
ngram_length = 1. #91529 (George Larionov). - Introduced cache for the deserialized header of the text index to reduce I/O and improve query performance. #89513 (Elmi Ahmadov).
Other improvements
- Fixed binary deserialization of
ArrayandMapto use themax_binary_array_sizesetting instead ofmax_binary_string_sizewhen validating size limits. #88744 (Raufs Dunamalijevs). - If the system memory is lower than 5GB, don't mlock the executable by default. #89751 (Alexey Milovidov).
- Reduces memory usage during merges in
system.metric_logtable by settingmin_bytes_for_wide_partandvertical_merge_algorithm_min_bytes_to_activateto 128MB. #89811 (filimonov). - Retry network errors when S3 library parses XML response. #90216 (Sema Checherinda).
- Update warning messages when approaching guardrails limits: show current and throw values. #90438 (Nikita Fomichev).
- Stream chunks in
system.filesystem_cachetable instead of creating a single chunk with all cache state. #90508 (Kseniia Sumarokova). - Entries in the vector similarity index cache are now removed when table parts are dropped or replaced by newer parts. #90750 (Shankar Iyer).
- Avoid exposing the ClickHouse server version in HTTP error responses returned before authentication. #91003 (filimonov).
- Added new settings
apply_row_policy_after_finalandapply_prewhere_after_finalto allow applying row policies andPREWHEREconditions afterFINALprocessing. Fixes #90986. #91065 (Yarik Briukhovetskyi). - Support JSON type in tupleElement. Closes #81630. #91327 (Pavel Kruglov).
- Support negative indexes for tuple element access (e.g. tuple.-1). #91665 (Amos Bird).
- Allow implicit type conversion when casting
ArraytoQBit. #91846 (Raufs Dunamalijevs). - Add a new column,
elapsed_time_microsecondstosystem.blob_storage_log. #92322 (Alexey Milovidov). - Add a new setting
database_shared_drop_table_delay_secondsthat allows users to control the drop table delay in the Shared database. (Nikolay Degterinsky). - Lazy load encrypted keys for named collections. (Pablo Marcos).
- Allow to disable clients cache per buffer for distributed cache. (Kseniia Sumarokova).
- Add shared limit for distributed cache connections. (Kseniia Sumarokova).
Bug Fixes
Note
This section contains a selected subset of important bug fixes. For the complete list of all bug fixes in this release, please refer to the full changelog
Query execution fixes
- Fix incorrect
rows_before_limit_at_leastwhen there are multiple remote shards involved in a distributed merging aggregation. #63511 (Amos Bird). - Fixed
0 rows in setappearance afterINSERT INTO ... SELECTquery. Closes #47800. #79462 (Engel Danila). - Fix
multiIfwith constant arguments and short-circuit evaluation. Closes #72714. #84546 (Yakov Olkhovskiy). - Fix LogicalError when selecting from a table with a subquery constraint. Resolves #84190. #85575 (Pervakov Grigorii).
- Fix logical error in cross join reordering when query_plan_optimize_join_order_limit > 1. Close #89409. #88286 (Vladimir Cherkasov).
- Fix incorrect JOIN results when using OR conditions with unique right table keys. Resolves #89391. #89512 (Vladimir Cherkasov).
- Fix logical error in full_sorting_merge join with duplicate columns. Resolves #86957. #89495 (Vladimir Cherkasov).
- Fix possible 'Invalid number of rows in Chunk' error in JOIN with duplicate columns. Resolves #89411. #90053 (Vladimir Cherkasov).
- Fix duplicate data issue in RIGHT JOIN with distributed table when parallel replicas enabled. #90806 (zoomxi).
- Fix logical error with
join_use_nullsand multiple joins along with cross join. #91853 (Vladimir Cherkasov).
Data type and JSON fixes
- Fix reading subcolumns from a column with dot in the name in some cases. Resolves #81261, #82058, #88169. #87205 (Pavel Kruglov).
- Fix reading mixed array of Floats and Bools in JSON. Previously inserting such data led to an exception. #88008 (Pavel Kruglov).
- Fix cast from
LowCardinality(Nullable(T))to Dynamic. #86365 (Pavel Kruglov). - Fix possible logical error during reading of paths and their subcolumns in advanced JSON shared data serialization. Closes #89805. #89819 (Pavel Kruglov).
- Fix possible stack overflow in data types binary deserialization. Closes #88710. #89822 (Pavel Kruglov).
- Fix possible inconsistent state of shared data and dynamic paths in JSON that could lead to logical errors and unexpected results. #90816 (Pavel Kruglov).
- Fix merging JSON columns in Summing/Aggregating/Coalescing MergeTree. #91151 (Pavel Kruglov).
MergeTree and storage fixes
- Fixed several issues caused by early column removal in TTL. Resolves #88002. #88860 (Amos Bird).
- Fix incorrect min(PK)/max(PK) result when PK is in reverse order. This fixes #83619. #88796 (Amos Bird).
- Fixed incorrect sharding in
JOINoptimization when the primary key is sorted in descending order. Resolves #88512. #88794 (Amos Bird). - Fix race condition in projection index reading path. Resolves #89497. #89762 (Peng Jian).
- Fixed incorrect merge handling of TTL-emptied parts with non-empty projections when using
deduplicate_merge_projection_mode='ignore'. Resolves #89430. #89458 (Amos Bird). - Fix
TOO_MANY_MARKSerror which could have happened after someALTERqueries for compact parts. #91980 (alesapin).
Parquet and format fixes
- Fixed a segmentation fault in the Parquet reader when
input_format_parquet_local_file_min_bytes_for_seekis set to 0. Resolves #78456. #88784 (Animesh). - In parquet writer, emit
created_bystring in correct format. #87735 (Michael Kolupaev). - Fix parquet writing not preserving original order when using single threaded writing with the native writer. #90126 (Arthur Passos).
- Fix the ORC reader bug when reading string columns that are encoded with DICTIONARY_V2 and contain only NULL values. #91889 (Peng Jian).
- Fixes an overflow while reading from ORC format for Date and DateTime64 types. Closes #70976. #91572 (Yarik Briukhovetskyi).
Iceberg and data lake fixes
- Fix icebergS3Cluster protocol. Started supporting schema evolution, positional and equality deletes in iceberg cluster function. Resolves #88287. #88919 (Yang Jiang).
- Fix JSON Exception in iceberg table with timestamp column when using glue catalog. Resolves #90210. #90209 (Alsu Giliazova).
- Now ClickHouse will not use read-in-order optimization for iceberg if sort order is not specified in manifest files. Fixes #89178. #90304 (alesapin).
Function fixes
- Fix bug in the function
reverseUTF8. In previous versions, it mistakenly reversed the bytes of UTF-8 code points of length 4. This closes #88913. #88914 (Alexey Milovidov). - Fix phi-squared computation causing incorrect results in
cramersV,cramersVBiasCorrected,theilsU, andcontingency. #87831 (Nihal Z. Miaji). - Fix
top_kto respect the threshold parameter when called with a single argument. Closes #88757. #88867 (Manuel). - Fix truncating arguments of
countIf(*). Closes #89372. #89373 (Manuel). - Fix
trim,ltrim,rtrimfunctions not working with two arguments. Closes #90170. #90305 (Nihal Z. Miaji). - Fix
arrayFilterfunction not working when using empty array andisNullfunction. Closes #73849. #91105 (Nihal Z. Miaji).
Memory and crash fixes
- Fix possible crash during remote query with
ARRAY JOINinsideINand enabledenable_lazy_columns_replicationsetting. Resolves #90361. #89997 (Pavel Kruglov). - Fixed a crash during the clean server shutdown due to wrong destruction order. Resolves #82420. #90076 (Nikita Mikhaylov).
- Fix a crash in case if a state of an aggregate function contains a serialized value of a column of LowCardinality(String). #89550 (Pavel Kruglov).
- Fix crash in StorageDistributed when parsing malformed shard directory names. #90243 (Aleksandr Musorin).
- Fixed spurious memory limit errors when userspace page cache is enabled. #91361 (Michael Kolupaev).
- Fix possible crash in aggregate functions after
MEMORY_LIMIT_EXCEEDED. #92390 (Azat Khuzhin). - Improved memory tracking in hash joins result generation. #89560 (Azat Khuzhin).
Security and access fixes
- Fix
ACCESS_ENTITY_NOT_FOUNDerror when trying to execute clusterAllReplicas from a user with a non-existing role. Resolves #87670. #89068 (pufit). - Fix access validation for
ALTER UPDATEqueries when aremotetable function is used withlocalhostas a target host. #90761 (pufit). - Fix wildcard grants check for partial revoke. #90922 (pufit).
- Fix handling global grants with wildcard revokes. #90928 (pufit).
Replicated database fixes
- After recovering, a Replicated database replica might get stuck for a long time printing messages like
Failed to marked query-0004647339 as finished, it's fixed. #88671 (Alexander Tokmakov). - Fix use-after-free in Distributed due to race between shutdown and background
INSERTs. Resolves #88640. #89136 (Azat Khuzhin). - Refreshable materialized view: fixed rare server crash if source table was fully dropped during a refresh. #89203 (Michael Kolupaev).
Keeper fixes
- Fix reading of changelogs during Keeper startup in cases a changelog was not renamed properly during rotation. #89496 (Antonio Andelic).
Other notable fixes
- Fixed performance degradation in analysis of skipping indexes. #89004 (Anton Popov).
- Fix hive partitioning incompatibility preventing smooth upgrade in 25.8. #90202 (Kseniia Sumarokova).
- Fix infinite
nan/infWITH FILLquery. Resolves #69261. #90255 (Konstantin Bogdanov). - Time and Time64 now should respect timezones correctly while converting from DateTime and DateTime64. Closes #89896. #90310 (Yarik Briukhovetskyi).
- Fixed possible incorrect query results after lightweight updates in
SELECTqueries with the enabled query condition cache. Fixes #90176. #90204 (Anton Popov). - Fix compatibility of in-memory serialization of String aggregation state. #90880 (Antonio Andelic).
- Fixes
SummingMergeTreeaggregation forNestedLowCardinalitycolumns. #90927 (Ivan Babrou). - Fix
system.view_refreshesfailing with errorNo macro 'replica' in config. #92203 (Michael Kolupaev). - Fix replication of an alter indirectly adding a column to MV with Shared Catalog. (Nikolay Degterinsky).
- Fix failed MV commit hanging the Shared Catalog state application. (Nikolay Degterinsky).
- Fix setting constraints check in
ALTERs on secondary replicas with Shared Catalog. (Nikolay Degterinsky). - Keep database comment on SharedCatalog migration. (Alexander Tokmakov).
- Fix Materialized Views being replaced on secondary replicas in Shared Catalog. (Nikolay Degterinsky).
- Fix system.distributed_cache_usage counters. (Kseniia Sumarokova).
- Fix the stuck DROP of a table that failed to create with an
ILLEGAL_COLUMNexception in Shared Catalog. (Nikolay Degterinsky). - Disable
CREATE OR REPLACEfor SharedSet/SharedJoin in Replicated databases. (Tuan Pham Anh). - Fix
UNFINISHEDexceptions in RMV refreshes with the Shared database. (Nikolay Degterinsky). - Fix crash with
TABLE_ALREADY_EXISTSin Shared databases. (Nikolay Degterinsky). - Fix migration of tables with broken create queries in the Shared Catalog. (Nikolay Degterinsky).
- Always use virtual parts from memory in
getStatus. (Mikhail Artemenko). - Add retries to the Shared catalog state application during startup. (Nikolay Degterinsky).
- Fix for
DROP DATABASEbeing stuck after exception during table creation. (Nikolay Degterinsky). - Fix logical error in distributed cache. (Kseniia Sumarokova).
- Fix distributed cache incorrect error. (Kseniia Sumarokova).
- Fix
LOGICAL_ERRORin ~TemporaryLockForUUIDDirectory in Shared Catalog. (Nikolay Degterinsky). - Fix metadata cache returning incorrect dependencies after renaming a database. (Nikolay Degterinsky).
- Shared Catalog: Fix a case of DROP of big tables on secondary replicas. (Raúl Marín).
- Distributed cache fix logical error in
processWriteRequest. (Kseniia Sumarokova). - Remove checks for MV
ALTERs on secondary replicas. (Nikolay Degterinsky).