, ,

ClickHouse® 26.1 Release Notes: A Practical Overview

Sanjeev Kumar G avatar
ClickHouse® 26.1 Release Notes: A Practical Overview

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 VIEW queries that reference aliases inside IN expressions 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_filenames MergeTree 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 UNION queries
  • 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 icebergLocalCluster table 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_preemption server 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_read enabled by default
  • Improved filter pushdown across JOIN types (ANY, SEMI, ANTI)
  • Faster DISTINCT on LowCardinality columns
  • Better performance for window functions when PARTITION BY aligns 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_Info metric is exposed via Prometheus
  • New system table system.zookeeper_info
  • system.parts now includes a files column

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.

Contact

Quantrail Data

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.

References

https://clickhouse.com/docs/whats-new/changelog