2025 Changelog
Table of Contents
ClickHouse release v25.2, 2025-02-27
ClickHouse release v25.1, 2025-01-28
Changelog for 2024
Changelog for 2023
Changelog for 2022
Changelog for 2021
Changelog for 2020
Changelog for 2019
Changelog for 2018
Changelog for 2017
ClickHouse release 25.2, 2025-02-27
Backward Incompatible Change
- Completely enable
async_load_databases
by default (even for those installations that do not upgradeconfig.xml
). #74772 (Azat Khuzhin). - Add
JSONCompactEachRowWithProgress
andJSONCompactStringsEachRowWithProgress
formats. Continuation of #69989. TheJSONCompactWithNames
andJSONCompactWithNamesAndTypes
no longer output "totals" - apparently, it was a mistake in the implementation. #75037 (Alexey Milovidov). - Change the
format_alter_operations_with_parentheses
default to true to disambiguate the ALTER commands list (see https://github.com/ClickHouse/ClickHouse/pull/59532). This breaks replication with clusters prior to 24.3. If you are upgrading a cluster using older releases turn off the setting in the server config or upgrade to 24.3 first. #75302 (Raúl Marín). - Remove the possibility of filtering log messages using regular expressions. The implementation introduced a data race, so it has to be removed. #75577 (János Benjamin Antal).
- The setting
min_chunk_bytes_for_parallel_parsing
cannot be zero anymore. This fixes: #71110. #75239 (Nikita Mikhaylov). - Validate settings in the cache configuration. Non existing settings were ignored before, now they will throw an error and they should be removed. #75452 (Kseniia Sumarokova).
New Feature
- Support type
Nullable(JSON)
. #73556 (Pavel Kruglov). - Support subcolumns in the DEFAULT and MATERIALIZED expressions. #74403 (Pavel Kruglov).
- Support writing Parquet bloom filters using the
output_format_parquet_write_bloom_filter
setting (enabled by default). #71681 (Michael Kolupaev). - Web UI now has interactive database navigation. #75777 (Alexey Milovidov).
- Allow the combination of read-only and read-write disks in the storage policy (as multiple volumes or multiple disks). This allows data to be read from the entire volume, while inserts will prefer the writable disk (i.e., Copy-on-Write storage policy). #75862 (Azat Khuzhin).
- Add a new Database engine,
DatabaseBackup,
that allows to instantly attach table/database from backup. #75725 (Maksim Kita). - Support prepared statements in the Postgres wire protocol. #75035 (scanhex12).
- Add the ability to ATTACH tables without a database layer, which is useful for MergeTree tables located on Web, S3, and similar external virtual filesystems. #75788 (Azat Khuzhin).
- Add a new string comparison function,
compareSubstrings
to compare parts of two strings. Example:SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS result
means "compare 6 bytes of strings 'Saxon' and 'Anglo-Saxon' lexicographically, starting at offset 0 in the first string, offset 5 in the second string". #74070 (lgbo). - A new function,
initialQueryStartTime
is added. It returns the start time of the current query. The value is the same across all shards during a distributed query. #75087 (Roman Lomonosov). - Add support for SSL authentication with named collections for MySQL. Closes #59111. #59452 (Nikolay Degterinsky).
Experimental Features
- Added a new setting,
enable_adaptive_memory_spill_scheduler
that allows multiple Grace JOINs in the same query to monitor their combined memory footprint and trigger spilling into external storage adaptively to prevent MEMORY_LIMIT_EXCEEDED. #72728 (lgbo). - Make the new, experimental
Kafka
table engine fully respect Keeper feature flags. #76004 (János Benjamin Antal). - Restore the (Intel) QPL codec, which was removed in v24.10 due to licensing issues. #76021 (Konstantin Bogdanov).
- For the integration with HDFS added support for the
dfs.client.use.datanode.hostname
configuration option. #74635 (Mikhail Tiukavkin).
Performance Improvement
- Improve performance of the whole JSON column reading in Wide parts from S3. It's done by adding prefetches for subcolumn prefixes deserialization, cache of deserialized prefixes, and parallel deserialization of subcolumn prefixes. It improves the reading of the JSON column from S3 4 times in queries like
SELECT data FROM table
and about 10 times in queries likeSELECT data FROM table LIMIT 10
. #74827 (Pavel Kruglov). - Fixed unnecessary contention in
parallel_hash
whenmax_rows_in_join = max_bytes_in_join = 0
. #75155 (Nikita Taranov). - Fixed double preallocation in
ConcurrentHashJoin
in case join sides are swapped by the optimizer. #75149 (Nikita Taranov). - Slight improvement in some join scenarios: precalculate the number of output rows and reserve memory for them. #75376 (Alexander Gololobov).
- For queries like
WHERE a < b AND b < c AND c < 5
, we can infer new comparing conditions (a < 5 AND b < 5
) to have better filter ability. #73164 (Shichao Jin). - Keeper improvement: disable digest calculation when committing to in-memory storage for better performance. It can be enabled with
keeper_server.digest_enabled_on_commit
config. Digest is still calculated when preprocessing requests. #75490 (Antonio Andelic). - Push down filter expression from JOIN ON when possible. #75536 (Vladimir Cherkasov).
- Calculate columns and indices sizes lazily in MergeTree. #75938 (Pavel Kruglov).
- Reintroduce respect
ttl_only_drop_parts
onMATERIALIZE TTL
; only read necessary columns to recalculate TTL and drop parts by replacing them with an empty ones. #72751 (Andrey Zvonov). - Reduce write buffer size for plain_rewritable metadata files #75758 (Julia Kartseva).
- Reduce memory usage for some window functions. #65647 (lgbo).
- Evaluate parquet bloom filters and min/max indexes together. Necessary to properly support:
x = 3 or x > 5
where data = [1, 2, 4, 5]. #71383 (Arthur Passos). - Queries passed to the
Executable
storage are no longer limited to a single-threaded execution. #70084 (yawnt). - Fetch parts in parallel in ALTER TABLE FETCH PARTITION (thread pool size is controlled with
max_fetch_partition_thread_pool_size
). #74978 (Azat Khuzhin). - Allow to move predicates with the
indexHint
function toPREWHERE
. #74987 (Anton Popov).
Improvement
- Fixed calculation of size in memory for
LowCardinality
columns. #74688 (Nikita Taranov). processors_profile_log
table now has a default configuration with a TTL of 30 days. #66139 (Ilya Yatsishin).- Allow naming shards in the cluster configuration. #72276 (MikhailBurdukov).
- Change Prometheus remote write response success status from 200/OK to 204/NoContent. #74170 (Michael Dempsey).
- Add ability to reload
max_remote_read_network_bandwidth_for_serve
andmax_remote_write_network_bandwidth_for_server
on the fly without restart server. #74206 (Kai Zhu). - Allow using blob paths to calculate checksums while making a backup. #74729 (Vitaly Baranov).
- Added a query ID column to
system.query_cache
(closes #68205). #74982 (NamHoaiNguyen). - It is allowed to cancel
ALTER TABLE ... FREEZE ...
queries withKILL QUERY
and automatically by a timeout (max_execution_time
). #75016 (Kirill). - Add support for
groupUniqArrayArrayMap
asSimpleAggregateFunction
. #75034 (Miel Donkers). - Hide catalog credential settings in database engine
Iceberg
. Closes #74559. #75080 (Kseniia Sumarokova). intExp2
/intExp10
: Define undefined behaviour: return 0 for too small argument,18446744073709551615
for too big argument, throw exception ifnan
. #75312 (Vitaly Baranov).- Support
s3.endpoint
natively from catalog config inDatabaseIceberg
. Closes #74558. #75375 (Kseniia Sumarokova). - Don't fail silently if a user executing
SYSTEM DROP REPLICA
doesn't have enough permissions. #75377 (Bharat Nallan). - Add a ProfileEvent about the number of times any of the system logs have failed to flush. #75466 (Alexey Milovidov).
- Add a check and extra logging for decrypting and decompressing. #75471 (Vitaly Baranov).
- Added support for the micro sign (U+00B5) in the
parseTimeDelta
function. Now both the micro sign (U+00B5) and the Greek letter mu (U+03BC) are recognized as valid representations for microseconds, aligning ClickHouse's behavior with Go’s implementation (see time.go and time/format.go). #75472 (Vitaly Orlov). - Replace server setting (
send_settings_to_client
) with client setting (apply_settings_from_server
) that controls whether client-side code (e.g., parsing INSERT data and formatting query output) should use settings from server'susers.xml
and user profile. Otherwise, only settings from the client command line, session, and query are used. Note that this only applies to native client (not e.g. HTTP), and doesn't apply to most of query processing (which happens on the server). #75478 (Michael Kolupaev). - Better error messages for syntax errors. Previously, if the query was too large, and the token whose length exceeds the limit is a very large string literal, the message about the reason was lost in the middle of two examples of this very long token. Fix the issue when a query with UTF-8 was cut incorrectly in the error message. Fix excessive quoting of query fragments. This closes #75473. #75561 (Alexey Milovidov).
- Add profile events in storage
S3(Azure)Queue
. #75618 (Kseniia Sumarokova). - Disable sending settings from server to client (
send_settings_to_client=false
) for compatibility (This feature will be re-implemented as a client setting later for better usability). #75648 (Michael Kolupaev). - Add a config
memory_worker_correct_memory_tracker
to enable correction of the internal memory tracker with information from different sources read in the background thread periodically. #75714 (Antonio Andelic). - Add column
normalized_query_hash
intosystem.processes
. Note: while it can be easily calculated on the fly with thenormalizedQueryHash
function, this is needed to prepare for subsequent changes. #75756 (Alexey Milovidov). - Querying
system.tables
will not throw even if there is aMerge
table created over a database that no longer exists. Remove thegetTotalRows
method fromHive
tables because we don't allow it to do complex work. #75772 (Alexey Milovidov). - Store start_time/end_time for Backups with microseconds. #75929 (Aleksandr Musorin).
- Add
MemoryTrackingUncorrected
metric showing the value of the internal global memory tracker which is not corrected by RSS. #75935 (Antonio Andelic). - Allow parsing endpoints like
localhost:1234/handle
inPostgreSQL
orMySQL
table functions. This fixes a regression introduced in https://github.com/ClickHouse/ClickHouse/pull/52503. #75944 (Nikita Mikhaylov). - Added a server setting
throw_on_unknown_workload
that allows to choose behavior on query withworkload
setting set to unknown value: either allow unlimited access (default) or throw aRESOURCE_ACCESS_DENIED
error. It is useful to force all queries to use workload scheduling. #75999 (Sergei Trifonov). - Don't rewrite subcolumns to
getSubcolumn
inARRAY JOIN
if not necessary. #76018 (Pavel Kruglov). - Retry coordination errors when loading tables. #76020 (Alexander Tokmakov).
- Support flushing individual logs in
SYSTEM FLUSH LOGS
. #76132 (Raúl Marín). - Improved the
/binary
server's page. Using the Hilbert curve instead of the Morton curve. Display 512 MB worth of addresses in the square, which fills the square better (in previous versions, addresses fill only half of the square). Color addresses closer to the library name rather than the function name. Allow scrolling a bit more outside of the area. #76192 (Alexey Milovidov). - Retry ON CLUSTER queries in case of TOO_MANY_SIMULTANEOUS_QUERIES. #76352 (Patrick Galbraith).
- Add the
CPUOverload
asynchronous metric, which calculates the server's relative CPU deficit. #76404 (Alexey Milovidov). - Changed the default value of
output_format_pretty_max_rows
from 10000 to 1000. I think it is better for usability. #76407 (Alexey Milovidov).
Bug Fix (user-visible misbehavior in an official stable release)
- Fix formatting of exceptions using a custom format if they appear during query interpretation. In previous versions, exceptions were formatted using the default format rather than the format specified in the query. This closes #55422. #74994 (Alexey Milovidov).
- Fix type mapping for SQLite (integer types into
int64
, floating points intofloat64
). #73853 (Joanna Hulboj). - Fix identifier resolution from parent scopes. Allow the use of aliases to expressions in the WITH clause. Fixes #58994. Fixes #62946. Fixes #63239. Fixes #65233. Fixes #71659. Fixes #71828. Fixes #68749. #66143 (Dmitry Novik).
- Fix negate function monotonicity. In previous versions, the query
select * from a where -x = -42;
wherex
is the primary key, can return a wrong result. #71440 (Michael Kolupaev). - Fix empty tuple handling in arrayIntersect. This fixes #72578. #72581 (Amos Bird).
- Fix reading JSON sub-object subcolumns with incorrect prefix. #73182 (Pavel Kruglov).
- Propagate Native format settings properly for client-server communication. #73924 (Pavel Kruglov).
- Check for not supported types for some storages. #74218 (Pavel Kruglov).
- Fix crash with query
INSERT INTO SELECT
over PostgreSQL interface on macOS (issue #72938). #74231 (Artem Yurov). - Fixed uninitialized max_log_ptr in the replicated database. #74336 (Konstantin Morozov).
- Fix crash when inserting interval (issue #74299). #74478 (NamHoaiNguyen).
- Fix formatting constant JSON literals. Previously it could lead to syntax errors during sending the query to another server. #74533 (Pavel Kruglov).
- Fix broken create query when using constant partition expressions with implicit projections enabled. This fixes #74596 . #74634 (Amos Bird).
- Avoid leaving connection in broken state after INSERT finishes with exception. #74740 (Azat Khuzhin).
- Avoid reusing connections that had been left in the intermediate state. #74749 (Azat Khuzhin).
- Fix crash during JSON type declaration parsing when type name is not uppercase. #74784 (Pavel Kruglov).
- Keeper: fix logical_error when the connection had been terminated before establishing. #74844 (Michael Kolupaev).
- Fix a behavior when the server couldn't startup when there's a table using
AzureBlobStorage
. Tables are loaded without any requests to Azure. #74880 (Alexey Katsman). - Fix missing
used_privileges
andmissing_privileges
fields inquery_log
for BACKUP and RESTORE operations. #74887 (Alexey Katsman). - HDFS refresh krb ticket if sasl error during hdfs select request. #74930 (inv2004).
- Fix queries to Replicated database in startup_scripts. #74942 (Azat Khuzhin).
- Fix issues with expressions type aliased in the JOIN ON clause when a null-safe comparison is used. #74970 (Vladimir Cherkasov).
- Revert part's state from deleting back to outdated when remove operation has failed. #74985 (Sema Checherinda).
- In previous versions, when there was a scalar subquery, we started writing the progress (accumulated from processing the subquery) during the initialization of the data format, which was before HTTP headers were written. This led to the loss of HTTP headers, such as X-ClickHouse-QueryId and X-ClickHouse-Format, as well as Content-Type. #74991 (Alexey Milovidov).
- Fix
CREATE TABLE AS...
queries fordatabase_replicated_allow_replicated_engine_arguments=0
. #75000 (Bharat Nallan). - Fix leaving connection in a bad state in client after INSERT exceptions. #75030 (Azat Khuzhin).
- Fix crash due to uncaught exception in PSQL replication. #75062 (Azat Khuzhin).
- Sasl can fail any rpc call, the fix helps to repeat the call in case if krb5 ticker is expired. #75063 (inv2004).
- Fixed usage of indexes (primary and secondary) for
Array
,Map
andNullable(..)
columns with enabled settingoptimize_function_to_subcolumns
. Previously, indexes for these columns could have been ignored. #75081 (Anton Popov). - Disable
flatten_nested
when creating materialized views with inner tables since it will not be possible to use such flattened columns. #75085 (Christoph Wurm). - Fix for some of IPv6 addresses (such as ::ffff:1.1.1.1) in forwarded_for field is wrongly interpreted resulting in client disconnect with exception. #75133 (Yakov Olkhovskiy).
- Fix nullsafe JOIN handling for LowCardinality nullable data type. Previously JOIN ON with nullsafe comparison, such as
IS NOT DISTINCT FROM
,<=>
,a IS NULL AND b IS NULL OR a == b
didn't work correctly with LowCardinality columns. #75143 (Vladimir Cherkasov). - Checks that we don't specify key_condition when counting total_number_of_rows for NumRowsCache. #75164 (Daniil Ivanik).
- Fix queries with unused interpolation with the new analyzer. #75173 (János Benjamin Antal).
- Fix the crash bug of CTE with Insert. #75188 (Shichao Jin).
- Keeper fix: avoid writing to broken changelogs when rolling back logs. #75197 (Antonio Andelic).
- Use
BFloat16
as a supertype where appropriate. This closes: #74404. #75236 (Nikita Mikhaylov). - Fix unexpected defaults in join result with any_join_distinct_right_table_keys and OR in JOIN ON. #75262 (Vladimir Cherkasov).
- Mask azureblobstorage table engine credentials. #75319 (Garrett Thomas).
- Fixed behavior when ClickHouse may erroneously do a filter pushdown to an external database like PostgreSQL, MySQL, or SQLite. This closes: #71423. #75320 (Nikita Mikhaylov).
- Fix crash in protobuf schema cache that can happen during output in Protobuf format and parallel query
SYSTEM DROP FORMAT SCHEMA CACHE
. #75357 (Pavel Kruglov). - Fix a possible logical error or uninitialized memory issue when a filter from
HAVING
is pushed down with parallel replicas. #75363 (Vladimir Cherkasov). - Hide sensitive info for
icebergS3
,icebergAzure
table functions and table engines. #75378 (Kseniia Sumarokova). - Function
TRIM
with computed empty trim characters are now correctly handled. Example:SELECT TRIM(LEADING concat('') FROM 'foo')
(Issue #69922). #75399 (Manish Gill). - Fix data race in IOutputFormat. #75448 (Pavel Kruglov).
- Fix possible error
Elements ... and ... of Nested data structure ... (Array columns) have different array sizes
when JSON subcolumns with Array type are used in JOIN over distributed tables. #75512 (Pavel Kruglov). - Fix data corruption with
CODEC(ZSTD, DoubleDelta)
. Closes #70031. #75548 (Konstantin Bogdanov). - Fix interaction between allow_feature_tier and compatibility mergetree setting. #75635 (Raúl Marín).
- Fix incorrect processed_rows value in system.s3queue_log in case file was retried. #75666 (Kseniia Sumarokova).
- Respect
materialized_views_ignore_errors
when a materialized view writes to a URL engine and there is a connectivity issue. #75679 (Christoph Wurm). - Fixed rare crashes while reading from
MergeTree
table after multiple asynchronousRENAME
queries (withalter_sync = 0
) between columns with different types. #75693 (Anton Popov). - Fix
Block structure mismatch in QueryPipeline stream
error for some queries withUNION ALL
. #75715 (Nikolai Kochetov). - Rebuild projection on alter modify of its PK column. Previously it could lead to
CANNOT_READ_ALL_DATA
errors during selects after alter modify of the column used in projection PK. #75720 (Pavel Kruglov). - Fix incorrect result of
ARRAY JOIN
for scalar subqueries (with analyzer). #75732 (Nikolai Kochetov). - Fixed null pointer dereference in
DistinctSortedStreamTransform
. #75734 (Nikita Taranov). - Fix
allow_suspicious_ttl_expressions
behaviour. #75771 (Aleksei Filatov). - Fix uninitialized memory read in function
translate
. This closes #75592. #75794 (Alexey Milovidov). - Propagate format settings to JSON as string formatting in Native format. #75832 (Pavel Kruglov).
- Recorded the default enablement of parallel hash as join algorithm in v24.12 in the settings change history. This means that ClickHouse will continue to join using non-parallel hash if an older compatibility level than v24.12 is configured. #75870 (Robert Schulze).
- Fixed a bug that tables with implicitly added min-max indices could not be copied into a new table (issue #75677). #75877 (Smita Kulkarni).
clickhouse-library-bridge
allows opening arbitrary libraries from the filesystem, which makes it safe to run only inside an isolated environment. To prevent a vulnerability when it is run near the clickhouse-server, we will limit the paths of libraries to a location, provided in the configuration. This vulnerability was found with the ClickHouse Bug Bounty Program by Arseniy Dugin. #75954 (Alexey Milovidov).- We happened to use JSON serialization for some metadata, which was a mistake, because JSON does not support binary data inside string literals, including zero bytes. SQL queries can contain binary data and invalid UTF-8, so we have to support this in our metadata files as well. At the same time, ClickHouse's
JSONEachRow
and similar formats work around that by deviating from the JSON standard in favor of a perfect roundtrip for the binary data. See the motivation here: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790. The solution is to makePoco::JSON
library consistent with the JSON format serialization in ClickHouse. This closes #73668. #75963 (Alexey Milovidov). - Fix check for commit limits in storage
S3Queue
. #76104 (Kseniia Sumarokova). - Fix attaching MergeTree tables with auto indexes (
add_minmax_index_for_numeric_columns
/add_minmax_index_for_string_columns
). #76139 (Azat Khuzhin). - Fixed issue of stack traces from parent threads of a job (
enable_job_stack_trace
setting) are not printed out. Fixed issueenable_job_stack_trace
setting is not properly propagated to the threads resulting stack trace content not always respects this setting. #76191 (Yakov Olkhovskiy). - Fix incorrect permission check where
ALTER RENAME
requiredCREATE USER
grant. Closes #74372. #76241 (pufit). - Fix reinterpretAs with FixedString on big-endian architecture. #76253 (Azat Khuzhin).
- Fix logical error in S3Queue "Expected current processor to be equal to for bucket ". #76358 (Kseniia Sumarokova).
- Fix deadlock for ALTER with Memory database. #76359 (Azat Khuzhin).
- Fix logical error in index analysis if condition in
WHERE
haspointInPolygon
function. #76360 (Anton Popov). - Fix potentially unsafe call in signal handler. #76549 (Yakov Olkhovskiy).
- Fix reverse key support in PartsSplitter. This fixes #73400. #73418 (Amos Bird).
Build/Testing/Packaging Improvement
- Support build HDFS on both ARM and Intel Mac. #74244 (Yan Xin).
- Enable ICU and GRPC when cross-compiling for Darwin. #75922 (Raúl Marín).
- Update to embedded LLVM 19. #75148 (Konstantin Bogdanov).
- Disable network access for user default in the docker image. #75259 (Mikhail f. Shiryaev). Make all clickhouse-server related actions a function, and execute them only when launching the default binary in
entrypoint.sh
. A long-postponed improvement was suggested in #50724. Added switch--users
toclickhouse-extract-from-config
to get values from theusers.xml
. #75643 (Mikhail f. Shiryaev). - Remove about 20MB of dead code from the binary. #76226 (Alexey Milovidov).
ClickHouse release 25.1, 2025-01-28
Backward Incompatible Change
JSONEachRowWithProgress
will write the progress whenever the progress happens. In previous versions, the progress was shown only after each block of the result, which made it useless. Change the way how the progress is displayed: it will not show zero values. This closes #70800. #73834 (Alexey Milovidov).Merge
tables will unify the structure of underlying tables by using a union of their columns and deriving common types. This closes #64864. In certain cases, this change could be backward incompatible. One example is when there is no common type between tables, but conversion to the type of the first table is still possible, such as in the case of UInt64 and Int64 or any numeric type and String. If you want to return to the old behavior, setmerge_table_max_tables_to_look_for_schema_inference
to1
or setcompatibility
to24.12
or earlier. #73956 (Alexey Milovidov).- Parquet output format converts Date and DateTime columns to date/time types supported by Parquet, instead of writing them as raw numbers.
DateTime
becomesDateTime64(3)
(was:UInt32
); settingoutput_format_parquet_datetime_as_uint32
brings back the old behavior.Date
becomesDate32
(was:UInt16
). #70950 (Michael Kolupaev). - Don't allow not comparable types (like
JSON
/Object
/AggregateFunction
) inORDER BY
and comparison functionsless/greater/equal/etc
by default. #73276 (Pavel Kruglov). - The obsolete
MaterializedMySQL
database engine has been removed and is no longer available. #73879 (Alexey Milovidov). - The
mysql
dictionary source no longer doesSHOW TABLE STATUS
query, because it does not provide any value for InnoDB tables, as long as for any recent MySQL versions. This closes #72636. This change is backward compatible, but put in this category so you have a chance to notice it. #73914 (Alexey Milovidov). CHECK TABLE
queries now require a separate,CHECK
grant. In previous versions, it was enough to haveSHOW TABLES
grant to run these queries. But aCHECK TABLE
query can be heavy, and usual query complexity limits forSELECT
queries don't apply to it. It led to the potential of DoS. #74471 (Alexey Milovidov).- Function
h3ToGeo()
now returns the results in the order(lat, lon)
(which is the standard order for geometric functions). Users who wish to retain the legacy result order(lon, lat)
can set settingh3togeo_lon_lat_result_order = true
. #74719 (Manish Gill). - A new MongoDB driver is now the default. Users who like to continue using the legacy driver can set server setting
use_legacy_mongodb_integration
to true. #73359 (Robert Schulze).
New Feature
- Added an ability to apply non-finished (not materialized by background process) mutations during the execution of
SELECT
queries immediately after submitting. It can be enabled by settingapply_mutations_on_fly
. #74877 (Anton Popov). - Implement
Iceberg
tables partition pruning for time-related transform partition operations in Iceberg. #72044 (Daniil Ivanik). - Support subcolumns in MergeTree sorting key and skip indexes. #72644 (Pavel Kruglov).
- Support reading
HALF_FLOAT
values fromApache Arrow
/Parquet
/ORC
(they are read intoFloat32
). This closes #72960. Keep in mind that IEEE-754 half float is not the same asBFloat16
. Closes #73835. #73836 (Alexey Milovidov). - The
system.trace_log
table will contain two new columns,symbols
andlines
containing symbolized stack trace. It allows for easy collection and export of profile information. This is controlled by the server configuration valuesymbolize
insidetrace_log
and is enabled by default. #73896 (Alexey Milovidov). - Add a new function,
generateSerialID
, which can be used to generate auto-incremental numbers in tables. Continuation of #64310 by kazalika. This closes #62485. #73950 (Alexey Milovidov). - Add syntax
query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryN
for DDL queries. That means subqueries{query1, query2, ... queryN}
are allowed to run in parallel with each other (and it's preferable). #73983 (Vitaly Baranov). - Added an in-memory cache for deserialized skipping index granules. This should make repeated queries that use skipping indexes faster. The size of the new cache is controlled by server settings
skipping_index_cache_size
andskipping_index_cache_max_entries
. The original motivation for the cache were vector similarity indexes which became a lot faster now. #70102 (Robert Schulze). - Now, the embedded Web UI has a progress bar during query runtime. It allows cancelling queries. It displays the total number of records and the extended information about the speed. The table can be rendered incrementally as soon as data arrives. Enable HTTP compression. Rendering of the table became faster. The table header became sticky. It allows selecting cells and navigating them by arrow keys. Fix the issue when the outline of the selected cell makes it smaller. Cells no longer expand on mouse hover but only on selection. The moment to stop rendering the incoming data is decided on the client rather than on the server side. Highlight digit groups for numbers. The overall design was refreshed and became bolder. It checks if the server is reachable and the correctness of credentials and displays the server version and uptime. The cloud icon is contoured in every font, even in Safari. Big integers inside nested data types will be rendered better. It will display inf/nan correctly. It will display data types when the mouse is over a column header. #74204 (Alexey Milovidov).
- Add the ability to create min-max (skipping) indices by default for columns managed by MergeTree using settings
add_minmax_index_for_numeric_columns
(for numeric columns) andadd_minmax_index_for_string_columns
(for string columns). For now, both settings are disabled, so there is no behavior change yet. #74266 (Smita Kulkarni). - Add
script_query_number
andscript_line_number
fields tosystem.query_log
, to the ClientInfo in the native protocol, and to server logs. This closes #67542. Credits to pinsvin00 for kicking off this feature earlier in #68133. #74477 (Alexey Milovidov). - Added aggregation function
sequenceMatchEvents
which return timestamps of matched events for longest chain of events in pattern. #72349 (UnamedRus). - Added function
arrayNormalizedGini
. #72823 (flynn). - Add minus operator support for
DateTime64
, to allow subtraction betweenDateTime64
values, as well asDateTime
. #74482 (Li Yin).
Experimental Features
- The
BFloat16
data type is production-ready. #73840 (Alexey Milovidov).
Performance Improvement
- Optimized function
indexHint
. Now, columns that are only used as arguments of functionindexHint
are not read from the table. #74314 (Anton Popov). If theindexHint
function is a central piece of your enterprise data architecture, this optimization will save your life. - More accurate accounting for
max_joined_block_size_rows
setting forparallel_hash
JOIN algorithm. Helps to avoid increased memory consumption compared tohash
algorithm. #74630 (Nikita Taranov). - Support predicate push down optimization on the query plan level for the
MergingAggregated
step. It improves performance for some queries with the analyzer. #74073 (Nikolai Kochetov). - Splitting of left table blocks by hash was removed from the probe phase of the
parallel_hash
JOIN algorithm. #73089 (Nikita Taranov). - Optimize RowBinary input format. Closes #63805. #65059 (Pavel Kruglov).
- Write parts with level 1 if
optimize_on_insert
is enabled. It allows to use several optimizations of queries withFINAL
for freshly written parts. #73132 (Anton Popov). - Speedup string deserialization by some low-level optimisation. #65948 (Nikita Taranov).
- When running an equality comparison between records, such as during merges, start to compare rows from most likely unequal columns first. #63780 (UnamedRus).
- Improve grace hash join performance by re-ranking the right join table by keys. #72237 (kevinyhzou).
- Allow
arrayROCAUC
andarrayAUCPR
to compute partial area of the whole curve, so that its calculation can be parallelized over huge datasets. #72904 (Emmanuel). - Avoid spawn too many idle threads. #72920 (Guo Wangyang).
- Don't list blob storage keys if we only have curly brackets expansion in table function. Closes #73333. #73518 (Konstantin Bogdanov).
- Short circuit optimization for functions executed over Nullable arguments. #73820 (李扬).
- Do not apply
maskedExecute
on non-function columns, improve the performance of short circuit execution. #73965 (lgbo). - Disable the autodetection of headers in input formats for
Kafka
/NATS
/RabbitMQ
/FileLog
to improve performance. #74006 (Azat Khuzhin). - Execute pipeline with a higher degree of parallelism after aggregation with grouping sets. #74082 (Nikita Taranov).
- Reduce critical section in
MergeTreeReadPool
. #74202 (Guo Wangyang). - Parallel replicas performance improvement. Packets deserialization on query initiator, for packets not related to parallel replicas protocol, now always happens in pipeline thread. Before, it could happen in a thread responsible for pipeline scheduling, which could make initiator less responsive and delay pipeline execution. #74398 (Igor Nikonov).
- Improve performance of larger multi requests in Keeper. #74849 (Antonio Andelic).
- Use log wrappers by value and don't allocate them in a heap. #74034 (Mikhail Artemenko).
- Reestablish connection to MySQL and Postgres dictionary replicas in the background, so it wouldn't delay requests to corresponding dictionaries. #71101 (Yakov Olkhovskiy).
- Parallel replicas used historical information about replica availability to improve replica selection but did not update the replica's error count when the connection was unavailable. This PR updates the replica's error count when unavailable. #72666 (zoomxi).
- Added a merge tree setting
materialize_skip_indexes_on_merge
which suppresses the creation of skip indexes during merge. This allows users to control explicitly (viaALTER TABLE [..] MATERIALIZE INDEX [...]
) when skip indexes are created. This can be useful if skip indexes are expensive to build (e.g. vector similarity indexes). #74401 (Robert Schulze). - Optimize keeper requests in Storage(S3/Azure)Queue. #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
- Use up to
1000
parallel replicas by default. #74504 (Konstantin Bogdanov). - Improve HTTP session reuse when reading from s3 disk (#72401). #74548 (Julian Maicher).
Improvement
- Support SETTINGS in a CREATE TABLE query with an implicit ENGINE and support mixing engine and query settings. #73120 (Raúl Marín).
- Enable
use_hive_partitioning
by default. #71636 (Yarik Briukhovetskyi). - Support CAST and ALTER between JSON types with different parameters. #72303 (Pavel Kruglov).
- Support equal comparison for values of JSON column. #72991 (Pavel Kruglov).
- Improve formatting of identifiers with JSON subcolumns to avoid unnecessary back quotes. #73085 (Pavel Kruglov).
- Interactive metrics improvements. Fix metrics from parallel replicas not being fully displayed. Display the metrics in order of the most recent update, then lexicographically by name. Do not display stale metrics. #71631 (Julia Kartseva).
- Make JSON output format pretty by default. Add new setting
output_format_json_pretty_print
to control it and enable it by default. #72148 (Pavel Kruglov). - Allow
LowCardinality(UUID)
by default. This has proven practical among ClickHouse Cloud customers. #73826 (Alexey Milovidov). - Better message during installation. #73827 (Alexey Milovidov).
- Better message about password reset for ClickHouse Cloud. #73831 (Alexey Milovidov).
- Improve the error message with a File table that cannot perform appends into a file. #73832 (Alexey Milovidov).
- Ask when a user accidentally requests to output binary format (such as Native, Parquet, Avro) in the terminal. This closes #59524. #73833 (Alexey Milovidov).
- Highlight trailing spaces in Pretty and Vertical formats in the terminal for better clarity. This is controlled with the
output_format_pretty_highlight_trailing_spaces
setting. Initial implementation by Braden Burns from #72996. Closes #71590. #73847 (Alexey Milovidov). clickhouse-client
andclickhouse-local
will autodetect compression of stdin when it is redirected from a file. This closes #70865. #73848 (Alexey Milovidov).- Cut too long column names in pretty formats by default. This is controlled by the
output_format_pretty_max_column_name_width_cut_to
andoutput_format_pretty_max_column_name_width_min_chars_to_cut
settings. This is the continuation of the work of tanmaydatta in #66502. This closes #65968. #73851 (Alexey Milovidov). - Make
Pretty
formats prettier: squash blocks if not much time passed since the output of the previous block. This is controlled by new settingsoutput_format_pretty_squash_consecutive_ms
(50 ms by default) andoutput_format_pretty_squash_max_wait_ms
(1000 ms by default). Continuation of #49537. This closes #49153. #73852 (Alexey Milovidov). - Add a metric on the number of currently merging source parts. This closes #70809. #73868 (Alexey Milovidov).
- Highlight columns in the
Vertical
format if the output is to a terminal. This can be disabled with theoutput_format_pretty_color
setting. #73898 (Alexey Milovidov). - Enhanced the MySQL compatibility to a level that now,
mysqlsh
(a rich MySQL CLI from Oracle) can connect to ClickHouse. This is needed to facilitate testing. #73912 (Alexey Milovidov). - Pretty formats can render multi-line fields inside a table cell, which improves readability. This is enabled by default and can be controlled by the setting
output_format_pretty_multiline_fields
. Continuation of the work by Volodyachan in #64094. This closes #56912. #74032 (Alexey Milovidov). - Expose X-ClickHouse HTTP headers to JavaScript in the browser. It makes writing applications more convenient. #74180 (Alexey Milovidov).
- The
JSONEachRowWithProgress
format will include events with metadata, as well as totals and extremes. It also includesrows_before_limit_at_least
androws_before_aggregation
. The format prints the exception properly if it arrives after partial results. The progress now includes elapsed nanoseconds. One final progress event is emitted at the end. The progress during query runtime will be printed no more frequently than the value of theinteractive_delay
setting. #74181 (Alexey Milovidov). - Hourglass will rotate smoothly in Play UI. #74182 (Alexey Milovidov).
- Even if the HTTP response is compressed, send packets as soon as they arrive. This allows the browser to receive progress packets and compressed data. #74201 (Alexey Milovidov).
- If the number of output records is larger than N =
output_format_pretty_max_rows
, instead of displaying only the first N rows, we will cut the output table in the middle, displaying N/2 first rows and N/2 last rows. Continuation of #64200. This closes #59502. #73929 (Alexey Milovidov). - Allow more general join planning algorithm when hash join algorithm is enabled. #71926 (János Benjamin Antal).
- Allow to create bloom_filter index on columns with data type
DateTime64
. #66416 (Yutong Xiao). - When
min_age_to_force_merge_seconds
andmin_age_to_force_merge_on_partition_only
are both enabled, the part merging will ignore the max bytes limit. #73656 (Kai Zhu). - Added HTTP headers to OpenTelemetry span logs table for enhanced traceability. #70516 (jonymohajanGmail).
- Support writing
orc
file by custom time zone, not always by theGMT
time zone. #70615 (kevinyhzou). - Respect IO scheduling settings when writing backups across clouds. #71093 (János Benjamin Antal).
- Add
metric
column aliasname
tosystem.asynchronous_metrics
. #71164 (megao). - Historically for some reason, the query
ALTER TABLE MOVE PARTITION TO TABLE
checkedSELECT
andALTER DELETE
rights instead of dedicatedALTER_MOVE_PARTITION
. This PR makes use of this access type. For compatibility, this permission is also will be granted implicitly ifSELECT
andALTER DELETE
are granted, but this behavior will be removed in future releases. Closes #16403. #71632 (pufit). - Throw an exception when trying to materialize a column in the sort key instead of allowing it to break the sort order. #71891 (Peter Nguyen).
- Hide secrets in
EXPLAIN QUERY TREE
. #72025 (Yakov Olkhovskiy). - Support parquet integer logical types in the "native" reader. #72105 (Arthur Passos).
- Interactively request credentials in the browser if the default user requires a password. In previous versions, the server returned HTTP 403; now, it returns HTTP 401. #72198 (Alexey Milovidov).
- Convert access types
CREATE_USER
,ALTER_USER
,DROP_USER
,CREATE_ROLE
,ALTER_ROLE
,DROP_ROLE
from global to parameterized. That means users can now grant access management grants more precise:. #72246 (pufit). - Add the
latest_fail_error_code_name
column tosystem.mutations
. We need this column to introduce a new metric on stuck mutations and use it to build graphs of the errors encountered in the cloud as well as, optionally, adding a new less-noisy alert. #72398 (Miсhael Stetsyuk). - Reduce amount of allocation in the
ATTACH PARTITION
query. #72583 (Konstantin Morozov). - Make
max_bytes_before_external_sort
limit depends on total query memory consumption (previously it was number of bytes in the sorting block for one sorting thread, now it has the same meaning asmax_bytes_before_external_group_by
- it is total limit for the whole query memory for all threads). Also one more setting added to control on disk block size -min_external_sort_block_bytes
. #72598 (Azat Khuzhin). - Ignore memory restrictions by trace collector. #72606 (Azat Khuzhin).
- Add server settings
dictionaries_lazy_load
andwait_dictionaries_load_at_startup
tosystem.server_settings
. #72664 (Christoph Wurm). - Adds setting
max_backup_bandwidth
to the list of settings that can be specified as part ofBACKUP
/RESTORE
queries. #72665 (Christoph Wurm). - Reducing the log level for appearing replicated parts in the ReplicatedMergeTree engine to help minimize the volume of logs generated in a replicated cluster. #72876 (mor-akamai).
- Improve extraction of common expression in disjunctions. Allow simplifying the resulting filter expression even if there's no common subexpression for all the disjuncts. Continuation of #71537. #73271 (Dmitry Novik).
- In Storage
S3Queue
/AzureQueue
allow to add settings where table was created without settings. #73283 (Kseniia Sumarokova). - Introduce a setting
least_greatest_legacy_null_behavior
(default:false
) which controls if functionsleast
andgreatest
handleNULL
arguments by unconditionally returningNULL
(iftrue
) or by ignoring them (iffalse
). #73344 (Robert Schulze). - Use Keeper multi requests in the cleanup thread of ObjectStorageQueueMetadata. #73357 (Antonio Andelic).
- When ClickHouse runs under a cgroup we will still collect system-wide asynchronous metrics related to system load, process scheduling, memory etc. They might provide useful signals when ClickHouse is the only process on the host with high resource consumption. #73369 (Nikita Taranov).
- In storage
S3Queue
allow to transfer old ordered tables created before 24.6 to new structure with buckets. #73467 (Kseniia Sumarokova). - Add
system.azure_queue
similar to existingsystem.s3queue
. #73477 (Kseniia Sumarokova). - Function
parseDateTime64
(and its variants) now produces correct results for input dates before 1970 / after 2106. Example:SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS')
. #73594 (zhanglistar). - Address some
clickhouse-disks
usability issues addressed by users. Closes #67136. #73616 (Daniil Ivanik). - Allow to alter commit settings in storage S3(Azure)Queue. (Commit settings are:
max_processed_files_before_commit
,max_processed_rows_before_commit
,max_processed_bytes_before_commit
,max_processing_time_sec_before_commit
). #73635 (Kseniia Sumarokova). - In storage S3(Azure)Queue aggregate progress between sources to compare with commit limit settings. #73641 (Kseniia Sumarokova).
- Support core settings in
BACKUP
/RESTORE
query. #73650 (Vitaly Baranov). - Take into account the
output_format_compression_level
on Parquet output. #73651 (Arthur Passos). - Adds reading Apache Arrow's
fixed_size_list
as anArray
instead of treating it as an unsupported type. #73654 (Julian Meyers). - Add two backup engines:
Memory
(keeps backups inside the current user session), andNull
(don't keep backups anywhere), which is for testing. #73690 (Vitaly Baranov). concurrent_threads_soft_limit_num
andconcurrent_threads_soft_limit_num_ratio_to_cores
could be changed w/o restart of a server. #73713 (Sergei Trifonov).- Add support for extended numeric types (
Decimal
, big integers) informatReadable
functions. #73765 (Raúl Marín). - Support TLS for Postgres wire protocol compatibility. #73812 (scanhex12).
- The function
isIPv4String
returned true if the correct IPv4 address was followed by a zero byte, while it should return false in this case. Continuation of #65387. #73946 (Alexey Milovidov). - Make the error code in the MySQL wire protocol compatible with MySQL. Continuation of #56831. Closes #50957. #73948 (Alexey Milovidov).
- Add setting
validate_enum_literals_in_opearators
to validate enum literals in operators likeIN
,NOT IN
against the enum type and throw an exception if the literal is not a valid enum value. #73985 (Vladimir Cherkasov). - In Storage
S3(Azure)Queue
commit all files (in a single butch defined by commit settings) in a single keeper transaction. #73991 (Kseniia Sumarokova). - Disable header detection for executable UDFs and dictionaries (could lead to Function 'X': wrong result, expected Y row(s), actual Y-1). #73992 (Azat Khuzhin).
- Add the
distributed
option forEXPLAIN PLAN.
Now,EXPLAIN distributed=1 ...
appends remote plan toReadFromParallelRemote*
steps. #73994 (Nikolai Kochetov). - Use correct return type for not/xor with Dynamic arguments. #74013 (Pavel Kruglov).
- Allow changing
add_implicit_sign_column_constraint_for_collapsing_engine
after table creation. #74014 (Christoph Wurm). - Support subcolumns in materialized view select query. #74030 (Pavel Kruglov).
- There are now three simple ways to set a custom prompt in
clickhouse-client
: 1. via command-line parameter--prompt
, 2. in the configuration file, via settings<prompt>[...]</prompt>
, and 3. also in the configuration file, via per-connection settings<connections_credentials><prompt>[...]</prompt></connection_credentials>
. #74168 (Christoph Wurm). - Autodetect secure connection based on connecting to port 9440 in ClickHouse Client. #74212 (Christoph Wurm).
- Authenticate users with username only for http_handlers (previously it requires user to put the password as well). #74221 (Azat Khuzhin).
- Support for the alternative query languages PRQL and KQL was marked experimental. To use them, specify settings
allow_experimental_prql_dialect = 1
andallow_experimental_kusto_dialect = 1
. #74224 (Robert Schulze). - Support returning the default Enum type in more aggregate functions. #74272 (Raúl Marín).
- In
OPTIMIZE TABLE
, it is now possible to specify keywordFORCE
as an alternative to existing keywordFINAL
. #74342 (Robert Schulze). - Add the
IsServerShuttingDown
metric, which is needed to trigger an alert when the server shutdown takes too much time. #74429 (Miсhael Stetsyuk). - Added Iceberg tables names to EXPLAIN. #74485 (alekseev-maksim).
- Provide a better error message when using RECURSIVE CTE with the old analyzer. #74523 (Raúl Marín).
- Show extended error messages in
system.errors
. #74574 (Vitaly Baranov). - Allow to use password for client communication with clickhouse-keeper. This feature is not very useful if you specify proper SSL configuration for server and client, but still can be useful for some cases. Password cannot be longer than 16 characters. It's not connected with Keeper Auth model. #74673 (alesapin).
- Add error code for config reloader. #74746 (Garrett Thomas).
- Added support for IPv6 addresses in MySQL and PostgreSQL table functions and engines. #74796 (Mikhail Koviazin).
- Implement short circuit optimization for
divideDecimal
. Fixes #74280. #74843 (Kevin Mingtarja). - Now users can be specified inside the startup scripts. #74894 (pufit).
- Add support for Azure SAS Tokens. #72959 (Azat Khuzhin).
Bug Fix (user-visible misbehavior in an official stable release)
- Set parquet compression level only if compression codec supports it. #74659 (Arthur Passos).
- Fixed a regression that using collation locales with modifiers throws an error. As an example,
SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shifted
now works. #73544 (Robert Schulze). - Fix cannot create SEQUENTIAL node with keeper-client. #64177 (Duc Canh Le).
- Fix incorrect character counting in the position functions. #71003 (思维).
RESTORE
operations for access entities required more permission than necessary because of unhandled partial revokes. This PR fixes the issue. Closes #71853. #71958 (pufit).- Avoid pause after
ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE
. Retrieve correct settings for background task scheduling. #72024 (Aleksei Filatov). - Fix handling of empty tuples in some input and output formats (e.g. Parquet, Arrow). #72616 (Michael Kolupaev).
- Column-level GRANT SELECT/INSERT statements on wildcard databases/tables now throw an error. #72646 (Johann Gan).
- Fix the situation when a user can't run
REVOKE ALL ON *.*
because of implicit grants in the target access entity. #72872 (pufit). - Fix positive timezone formatting of formatDateTime scalar function. #73091 (ollidraese).
- Fix to correctly reflect source port when connection made through PROXYv1 and
auth_use_forwarded_address
is set - previously proxy port was incorrectly used. AddcurrentQueryID()
function. #73095 (Yakov Olkhovskiy). - Propagate format settings to NativeWriter in TCPHandler, so settings like
output_format_native_write_json_as_string
are applied correctly. #73179 (Pavel Kruglov). - Fix a crash in StorageObjectStorageQueue. #73274 (Kseniia Sumarokova).
- Fix rare crash in refreshable materialized view during server shutdown. #73323 (Michael Kolupaev).
- The
%f
placeholder of functionformatDateTime
now unconditionally generates six (sub-second) digits. This makes the behavior compatible with MySQLDATE_FORMAT
function. The previous behavior can be restored using settingformatdatetime_f_prints_scale_number_of_digits = 1
. #73324 (ollidraese). - Fixed filtering by
_etag
column while reading froms3
storage and table function. #73353 (Anton Popov). - Fix
Not-ready Set is passed as the second argument for function 'in'
error whenIN (subquery)
is used inJOIN ON
expression, with the old analyzer. #73382 (Nikolai Kochetov). - Fix preparing for squashin for Dynamic and JSON columns. Previously in some cases new types could be inserted into shared variant/shared data even when the limit on types/paths is not reached. #73388 (Pavel Kruglov).
- Check for corrupted sizes during types binary decoding to avoid too big allocations. #73390 (Pavel Kruglov).
- Fixed a logical error when reading from single-replica cluster with parallel replicas enabled. #73403 (Michael Kolupaev).
- Fix ObjectStorageQueue with ZooKeeper and older Keeper. #73420 (Antonio Andelic).
- Implements fix, needed to enable hive partitioning by default. #73479 (Yarik Briukhovetskyi).
- Fix data race when creating vector similarity index. #73517 (Antonio Andelic).
- Fixes segfault when the source of the dictionary contains a function with wrong data. #73535 (Yarik Briukhovetskyi).
- Fix retries on failed insert in storage S3(Azure)Queue. Closes #70951. #73546 (Kseniia Sumarokova).
- Fixed error in function
tupleElement
which may appear in some cases for tuples withLowCardinality
elements and enabled settingoptimize_functions_to_subcolumns
. #73548 (Anton Popov). - Fix parsing enum glob followed by range one. Fixes #73473. #73569 (Konstantin Bogdanov).
- Fixed parallel_replicas_for_non_replicated_merge_tree being ignored in subqueries for non-replicated tables. #73584 (Igor Nikonov).
- Fix for std::logical_error thrown when task cannot be scheduled. Found in stress tests. #73629 (Alexander Gololobov).
- Do not interpret queries in
EXPLAIN SYNTAX
to avoid logical errors with incorrect processing stage for distributed queries. Fixes #65205. #73634 (Dmitry Novik). - Fix possible data inconsistency in Dynamic column. Fixes possible logical error
Nested columns sizes are inconsistent with local_discriminators column size
. #73644 (Pavel Kruglov). - Fixed
NOT_FOUND_COLUMN_IN_BLOCK
in queries withFINAL
andSAMPLE
. Fixed incorrect result in selects withFINAL
fromCollapsingMergeTree
and enabled optimizations ofFINAL
. #73682 (Anton Popov). - Fix crash in LIMIT BY COLUMNS. #73686 (Raúl Marín).
- Fix the bug when the normal projection is forced to use, and query is exactly the same as the projection defined, but the projection is not selected and thus error is prompted. #73700 (Shichao Jin).
- Fix deserialization of Dynamic/Object structure. It could lead to CANNOT_READ_ALL_DATA exceptions. #73767 (Pavel Kruglov).
- Skip
metadata_version.txt
in while restoring parts from a backup. #73768 (Vitaly Baranov). - Fix segmentation fault when Casting to Enum with LIKE. #73775 (zhanglistar).
- Fix for S3 Express bucket not working as disk. #73777 (Sameer Tamsekar).
- Allow merging of rows with invalid sign column values in CollapsingMergeTree tables. #73864 (Christoph Wurm).
- Fix getting error when querying ddl with offline replica. #73876 (Tuan Pham Anh).
- Fixes occasional failure to compare
map()
types due to possibility to createMap
lacking explicit naming ('keys','values') of its nested tuple. #73878 (Yakov Olkhovskiy). - Ignore window functions during GROUP BY ALL clause resolution. Fix #73501. #73916 (Dmitry Novik).
- Fix implicit privileges (worked as wildcard before). #73932 (Azat Khuzhin).
- Fix high memory usage during nested Maps creation. #73982 (Pavel Kruglov).
- Fix parsing nested JSON with empty keys. #73993 (Pavel Kruglov).
- Fix: alias can be not added to the projection if it is referenced by another alias and selected in inverse order. #74033 (Yakov Olkhovskiy).
- Ignore object not found errors for Azure during plain_rewritable disk initialization. #74059 (Julia Kartseva).
- Fix behaviour of
any
andanyLast
with enum types and empty table. #74061 (Joanna Hulboj). - Fixes case when the user specifies keyword arguments in the kafka table engine. #74064 (Yarik Briukhovetskyi).
- Fix altering Storage
S3Queue
settings with "s3queue_" prefix to without and vice versa. #74075 (Kseniia Sumarokova). - Add a setting
allow_push_predicate_ast_for_distributed_subqueries
. This adds AST-based predicate push-down for distributed queries with the analyzer. This is a temporary solution that we use until distributed queries with query plan serialization are supported. Closes #66878 #69472 #65638 #68030 #73718. #74085 (Nikolai Kochetov). - Fixes issue when after #73095 port can be present in the forwarded_for field, which leads to inability to resolve host name with port included. #74116 (Yakov Olkhovskiy).
- Fixed incorrect formatting of
ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)
. #74126 (Han Fei). - Fix for issue #66112. #74128 (Anton Ivashkin).
- It is no longer possible to use
Loop
as a table engine inCREATE TABLE
. This combination was previously causing segfaults. #74137 (Yarik Briukhovetskyi). - Fix security issue to prevent SQL injection in postgresql and sqlite table functions. #74144 (Pablo Marcos).
- Fix crash when reading a subcolumn from the compressed Memory engine table. Fixes #74009. #74161 (Nikita Taranov).
- Fixed an infinite loop occurring with queries to the system.detached_tables. #74190 (Konstantin Morozov).
- Fix logical error in s3queue during setting file as failed. #74216 (Kseniia Sumarokova).
- Fix native copy settings (
allow_s3_native_copy
/allow_azure_native_copy
) forRESTORE
from base backup. #74286 (Azat Khuzhin). - Fixed the issue when the number of detached tables in the database is a multiple of max_block_size. #74289 (Konstantin Morozov).
- Fix copying via ObjectStorage (i.e. S3) when source and destination credentials differs. #74331 (Azat Khuzhin).
- Fix detection of "use the Rewrite method in the JSON API" for native copy on GCS. #74338 (Azat Khuzhin).
- Fix incorrect calculation of
BackgroundMergesAndMutationsPoolSize
(it was x2 from real value). #74509 (alesapin). - Fix the bug of leaking keeper watches when enable Cluster Discovery. #74521 (RinChanNOW).
- Fix mem alignment issue reported by UBSan #74512. #74534 (Arthur Passos).
- Fix KeeperMap concurrent cleanup during table creation. #74568 (Antonio Andelic).
- Do not remove unused projection columns in subqueries in the presence of
EXCEPT
orINTERSECT
to preserve the correct query result. Fixes #73930. Fixes #66465. #74577 (Dmitry Novik). - Fixed
INSERT SELECT
queries between tables withTuple
columns and enabled sparse serialization. #74698 (Anton Popov). - Function
right
works incorrectly for const negative offset. #74701 (Daniil Ivanik). - Fix insertion of gzip-ed data sometimes fails due to flawed decompression on client side. #74707 (siyuan).
- Partial revokes with wildcard grants could remove more privileges than expected. Closes #74263. #74751 (pufit).
- Keeper fix: fix reading log entries from disk. #74785 (Antonio Andelic).
- Fixed checking grants for SYSTEM REFRESH/START/STOP VIEW, now it's not required to have this grant on
*.*
to execute a query for a specific view, only grant for this view are required. #74789 (Alexander Tokmakov). - The
hasColumnInTable
function doesn't account for alias columns. Fix it to also work for alias columns. #74841 (Bharat Nallan). - Fix FILE_DOESNT_EXIST error occurring during data parts merge for a table with an empty column in Azure Blob Storage. #74892 (Julia Kartseva).
- Fix projection column name when joining temporary tables, close #68872. #74897 (Vladimir Cherkasov).
Build/Testing/Packaging Improvement
- The universal installation script will propose installation even on macOS. #74339 (Alexey Milovidov).