ClickHouse® 26.1, released on January 29, 2026, is a substantial release that focuses on correctness, scheduling, access control, data lake capabilities, and incremental performance improvements. This post summarizes the changes that are most relevant for users operating ClickHouse® in production, with emphasis on behavioral changes, new features, and upgrade considerations.
Backward-Incompatible and Behavior-Changing Updates
Removal of DEFLATE_QPL and ZSTD_QAT codecs
The compression codecs DEFLATE_QPL and ZSTD_QAT have been removed.
- Existing data compressed with these codecs must be rewritten before upgrading.
- These codecs previously required explicit enablement via settings, which limits the impact.
Upgrade consideration: Identify and recompress affected data parts prior to upgrade.
Analyzer-related incompatibility in CREATE VIEW
A formatting fix related to alias substitution introduces a potential incompatibility:
- When the analyzer is disabled, some
CREATE VIEWqueries that reference aliases insideINexpressions may fail. - The analyzer has been enabled by default since ClickHouse® 24.3, so this primarily affects installations that explicitly disabled it.
Upgrade consideration: Avoid disabling the analyzer unless strictly necessary.
Empty JOIN USING() is now a syntax error
An empty column list in JOIN USING () is now rejected during parsing.
- Previously, this could fail during execution or lead to internal errors in some cases.
This change aligns parsing behavior with SQL expectations and prevents undefined execution paths.
Enforcement of SELECT privileges for joinGet / joinGetOrNull
joinGet and joinGetOrNull now require explicit SELECT privileges on the underlying Join table.
- Permissions are required for both key columns and retrieved attribute columns.
- Queries without proper grants will fail with
ACCESS_DENIED.
Upgrade consideration: Review users and applications relying on joinGet and grant explicit permissions as needed.
Removal of the Lazy database engine
The Lazy database engine has been fully removed.
Upgrade consideration: Migrate any existing databases using Lazy to supported engines.
Hash output format change
The Hash output format is now independent of block size.
- This changes the resulting hash values compared to previous versions.
Upgrade consideration: Update tests or pipelines that rely on stable hash output values.
Escaping of index filenames
Index filenames are now escaped to avoid issues with filesystem handling.
- Indexes created in older versions with non-ASCII names may fail to load.
- The behavior can be controlled via the
escape_index_filenamesMergeTree setting.
New Features
HTTP API and Web UI for ClickHouse® Keeper
ClickHouse® Keeper now provides:
- An HTTP API
- An embedded web interface
This improves observability and operational accessibility compared to TCP-only tooling.

Async insert deduplication with materialized views
Async insert deduplication now works correctly when materialized views depend on the target table.
- On block ID collision, conflicting rows are filtered out.
- Remaining rows are reprocessed through materialized views.
This removes a known limitation when combining async inserts with deduplication and MVs.
Projection index framework redesign
A new syntax and internal framework for projection indexes has been introduced.
- The change primarily affects extensibility and internal structure.
- User-visible behavior remains broadly consistent.
CREATE TABLE pageviews (
CounterID UInt32,
UserID UInt64,
EventTime DateTime,
PROJECTION by_time INDEX EventTime TYPE basic,
) ORDER BY (CounterID, UserID, EventTime)
Variant type enabled by default
The Variant type is now usable across all functions, and use_variant_as_common_type is enabled by default.
This allows:
- Mixed-type arrays
- More flexible
UNIONqueries - Reduced need for explicit casting in conditional expressions
Data lake enhancements
Several additions improve integration with external table formats and storage systems:
- Support for deletion vectors in DeltaLake and
deltaLakeCluster - Google Cloud Storage support for data lakes
- New
icebergLocalClustertable function
These changes extend coverage rather than fundamentally altering existing semantics.
Scheduling and Resource Management
Preemptive CPU scheduling enabled by default
CPU scheduling for workloads is now preemptive.
- Controlled via the
cpu_slot_preemptionserver setting. - Intended to reduce starvation caused by long-running queries.
Max–min fair concurrency scheduler
A new concurrency scheduler based on max–min fairness has been added.
- Designed to improve fairness under high contention.
- Enabled by setting
concurrent_threads_scheduler = max_min_fair.
This is an alternative to existing scheduling strategies, not a mandatory change.
Performance Improvements (Selected)
ClickHouse® 26.1 includes numerous targeted optimizations. Notable examples include:
use_skip_indexes_on_data_readenabled by default- Improved filter pushdown across JOIN types (ANY, SEMI, ANTI)
- Faster
DISTINCTonLowCardinalitycolumns - Better performance for window functions when
PARTITION BYaligns with sort keys - Reduced memory usage in joins, aggregations, AST handling, and wide-table inserts
These are incremental improvements rather than single large performance shifts.
Observability and Debugging Improvements
Improved UDF error visibility
Standard error output from UDFs (e.g., Python UDFs) is now:
- Captured
- Accumulated up to 1 MB
- Exposed in
system.query_log.exception
This makes UDF debugging possible without relying on external logs.
New metrics and system tables
- A
ClickHouse_Infometric is exposed via Prometheus - New system table
system.zookeeper_info system.partsnow includes afilescolumn



These additions improve introspection and monitoring fidelity.
Experimental and Beta Changes
- QBit has moved from Experimental to Beta
- Experimental support added for
Nullable(Tuple) - Support added for Paimon REST catalogs
These features remain opt-in or explicitly marked as non-stable.
Exploring ClickHouse® for Your Analytics?
At Quantrail, we’ve spent time understanding the challenges teams face with real-time analytics. That’s why we provide hands-on support around ClickHouse® – from smooth deployments and guided migrations to ongoing service agreements that keep systems reliable.
At Quantrail, we see these updates in action when helping teams adopt ClickHouse® for demanding analytics pipelines. For example, we recently shared how a customer achieved bare-metal level performance with ClickHouse® in production – you can read the full story here Success Story: Quantrail Baremetal
Whether you’re moving from another database or simply want to get the best out of ClickHouse®, our goal is to make the process straightforward and sustainable. If this resonates, we’d be happy to share how others are approaching it and explore what could work for you.
Conclusion
ClickHouse® 26.1 is a technically dense release with meaningful changes in correctness, scheduling, access control, and ecosystem integration. The most important considerations for upgrading are:
- Handling removed codecs and deprecated engines
- Reviewing access control changes around
joinGet - Being aware of behavior changes related to hashing and parsing
For most users on recent versions, the upgrade path is manageable, provided the backward-incompatible changes are reviewed carefully. The release continues ClickHouse®’s trend toward stronger correctness guarantees, improved multi-tenant behavior, and deeper integration with data lake technologies, without introducing radical changes to core query semantics.
