releases.shpreview

ClickHouse release 26.6

v26.6

Backward Incompatible Changes
  • Removed allow_experimental_query_deduplication feature after long experimental period with no tests or support.
  • XRay-based SYSTEM INSTRUMENT feature renamed from parameters to arguments: system.instrumentation.parametersarguments, and SYSTEM INSTRUMENT ADD ... HANDLER PARAMETERS ...SYSTEM INSTRUMENT ADD ... HANDLER ARGUMENTS ...
  • Setting show_data_lake_catalogs_in_system_tables renamed to show_remote_databases_in_system_tables with expanded scope: when set to 0 (default), MySQL and PostgreSQL databases are also hidden from system tables (old name kept as alias).
  • Default x86 build now targets x86-64-v3 (AVX2) instead of x86-64-v2 (SSE4.2); requires CPU with AVX2 support. Use amd64compat build for older CPUs.
  • Nested Dynamic/Variant now rejected in min/max aggregates and minmax indexes.
  • icebergHash and icebergBucket now explicitly reject Int128, UInt128, Int256, UInt256, and Decimal256 arguments.
  • --echo CLI option now accepts optional boolean value; positional queries after bare --echo treated as its value; use --echo --query "..." or --echo=false instead.
  • Removed experimental KQL functions array_sort_asc, array_sort_desc, and their SQL backends.
  • ALTER TABLE ... REPLACE PARTITION ... FROM ... now rejects requests when source table has no parts in requested partition (previously silently dropped destination data). Set allow_replace_partition_from_empty_source = 1 to restore old behavior.
  • Default insert_deduplication_version changed from compatible_double_hashes to new_unified_hash; deduplication now per-insert instead of per-part/partition.
New Features
  • Continuous queries over MergeTree tables via snapshot reads (first step toward streaming query support).
  • Hypothetical (what-if) skip indexes with CREATE HYPOTHETICAL INDEX and EXPLAIN WHATIF for cost estimation.
  • Embedded /schema web UI visualizing dependency graph between tables, views, materialized views, dictionaries, and distributed tables.
  • PNG output format support for rendering query results as images.
  • AI coding agent detection (Claude Code, Cursor, Codex, etc.) reported in system.query_log, system.query_thread_log, and system.processes.
  • New system.documentation table with embedded reference documentation for functions, table engines, data types, settings, and formats.
  • GeoJSON input format for reading FeatureCollection documents with native Geometry type support.
  • Mapbox Vector Tile functions: MVTEncodeGeom, MVTEncode, MVTBoundingBox, MVTBoundingBoxMercator (with PostGIS aliases).
  • clickhouse-local now supports SYSTEM START LISTEN and SYSTEM STOP LISTEN queries.
  • Interactive help command in clickhouse-client and clickhouse-local with syntax-highlighted documentation.
  • Azure Data Lake Storage Gen2 write support.
  • RowBinaryWithNamesAndTypesAndDefaults format for better schema evolution support.
  • ADD ENUM VALUES in ALTER TABLE to append new enum values without respecifying all current values.
  • Refreshable materialized view REFRESH DEPENDS ON for dependency-triggered refreshes.
  • Column selection by name pattern: * LIKE '<pattern>' and * ILIKE '<pattern>'.
  • ESCAPE syntax for custom escape characters in LIKE patterns.
  • materialize_projections_on_insert and materialize_projections_on_merge MergeTree settings.
  • allow_tuple_element_aggregation setting for recursive tuple flattening in aggregating engines.
  • quantizeBFloat16ToInt8 and dequantizeInt8ToBFloat16 scalar codec functions.
  • arrayTopK and arrayBottomK array functions.
  • system.iceberg_files table exposing per-file metadata for Iceberg tables.
  • system.constraints table for CHECK and ASSUME constraints.
  • system.dictionary_layouts, system.dictionary_sources, system.data_skipping_index_types, system.disk_types tables with embedded documentation.
  • SYSTEM RESTART DISK command for reloading disk metadata and re-scanning data parts.
  • PostgreSQL-style expr OP SOME(array) / expr OP ALL(array) syntax.
  • hostname_longest_common_prefix and hostname_longest_common_suffix load balancing strategies.
  • TLS client certificate information in system.session_log.
  • Optional external_id credential for S3 role-based access.
  • S3Queue setting after_processing_move_preserve_path for preserving source paths during moves.
  • message_queue_disable_insertion setting to disable insertion from message queue engines.
  • LOCALTIME and LOCALTIMESTAMP SQL-standard functions.
  • date_part() function as syntactic sugar for EXTRACT().
  • PostgreSQL-compatible EXTRACT(TIMEZONE_HOUR/MINUTE FROM dt) and interval extraction.
  • min_by and max_by aggregate aliases for argMin and argMax.
  • REGEXP_SUBSTR case-insensitive alias of regexpExtract.
  • SESSION_USER case-insensitive alias of currentUser().
  • Trailing NULL / NOT NULL modifier in ALTER TABLE ... ADD/MODIFY COLUMN.
  • h3PolygonToCellsWithContainment for H3 polygon-to-cells conversion with containment modes.
  • IPV4_PREFIX_BITS and IPV6_PREFIX_BITS flags for IP-based keying.
  • formatReadableTimeDelta now accepts INTERVAL expressions other than Month/Year.
  • Optional precision argument for formatReadableSize, formatReadableDecimalSize, formatReadableQuantity.
  • output_format_float_precision setting for controlling decimal digits in float output.
  • output_format_always_write_decimal_point_in_float_and_decimal setting.
  • New HTTP handler configuration elements: <url_prefix>, <full_url_prefix>, <url_regexp>, <full_url_regexp>, <headers_regexp>.
  • basic statistics (compact per-column min/max, avg string length, NULL counts).
  • TTL nodes in ClickHouse Keeper (opt-in via create_ttl feature flag).
  • Memory reservation feature for workloads.
Experimental Features
  • Multi-stage distributed query execution with scatter/broadcast/gather/shuffle exchanges via TCP or shared object storage.
  • dphyp join reordering algorithm for inner joins with query_plan_optimize_join_order_max_searched_plans setting.
  • aiEmbed function for LLM-based embedding generation.
  • Linux OOM canary: sacrificial child process to shed memory pressure before main server.
  • Web terminal interface (/webterminal) promoted to production feature (enabled by default).
  • PromQL HTTP endpoints with database/table URL query parameters.
  • PromQL histogram_quantile function support in prometheusQuery and prometheusQueryRange.
  • Lazy posting list apply mode for text indexes with cursor-based decoding.
  • AssemblyScript ABI support for WebAssembly UDFs.
  • Prometheus handlers on main HTTP port with optional prefix.
  • packed_skip_index_max_bytes MergeTree setting for bundling skip-index substreams.
  • Buffers serialization for WebAssembly UDFs using ABI BUFFERED_V1.
  • use_reader_executor setting routing reads through new pipeline-based ReaderExecutor.
  • Descending sort order in MergeTree sorting keys (no longer requires allow_experimental_reverse_key).
  • Nullable(Tuple(...)) type (Beta, disabled by default).
Performance Improvements
  • Keeper ~2x faster overall (better batching, message pipelining, log append pipelining).
  • Simple SELECT queries ~50% faster (reduced per-query overhead for parsing, analysis, planning).
  • Primary key index analysis optimized for long and high-cardinality keys.
  • New ipnsort and driftsort stable sorting implementations for faster ORDER BY.
  • GROUP BY optimization for high cardinality evenly distributed keys via row scattering (enable_sharding_aggregator).
  • Hash table prefetching for string key GROUP BY queries (~8% improvement).
  • Reduced peak memory for merging partial two-level aggregation results.
  • Enum DataType memory optimization (up to 10x footprint reduction).
  • Identifier resolution caching to prevent duplicate resolution.
  • Query analysis ~50x faster for nested SELECT * over tables with ~1200 columns.
  • Query analysis faster for queries with many/deeply nested function calls.
  • Replicated access storage login/startup stalls fixed with per-entity cache batching.
  • Hash join runtime filter from FixedHashMap sharing via join_runtime_filter_from_fixed_hash_table.
  • Lazy selector/replication index application for JOIN + LIMIT scenarios.
  • DP JOIN reordering now allowed with parallel replicas.
  • JOIN runtime filter aware join-reorder cost model.
  • RIGHT/FULL join non-joined row emission de-virtualized via batching.
  • Packed keys32/keys64 methods in HashJoin and Set.
  • Optimal nullable column handling in aggregation.
  • LIMIT BY query performance improvements via multiple optimizations.
  • Sharded aggregation, grace_hash join, parallel window partitioning ~2x faster (hardware CRC32C).
  • Array distance functions auto-vectorized on x86-64-v4/v3.
  • {Norm}Distance and dotProduct functions improved.
  • arrayNorm function performance improved.
  • AVX-512 const-left path improvements for distance functions.
  • encrypt, decrypt, tryDecrypt, aes_encrypt_mysql, aes_decrypt_mysql up to 10x faster.
  • encrypt, decrypt, halfMD5 faster via OpenSSL 3.x provider lookup avoidance.
  • SHA1 SIMD implementation using AVX-512 for parallel hashing.
  • AArch64 ASIMD/NEON backend for multi-buffer MD5.
  • MATERIALIZE PROJECTION ~3.4x faster via pre-squashing.
  • MergeTree INSERT latency reduced via skip index column permutation optimization.
  • Parquet BYTE_STREAM_SPLIT decoding faster via Arrow SIMD paths.
  • LowCardinality insertion performance improved for bloom_filter indexes.
  • Blob copy parallelization in DiskObjectStorageTransaction.
  • One input format avoids file content reading.
  • macOS startup ~3x faster (no dynamic symbol export).
  • Filesystem cache loading faster via redundant directory open elimination.
  • Filesystem cache loading faster via idle thread re-utilization.
  • Startup overhead reduced via WasmEdge library update.
  • MergeTree primary key and skip indexes prune granules for ifNull/coalesce wrapped conditions.
  • DateTime64 skip index evaluation consumes less CPU.
  • Text index multi-token search analysis optimized for rare tokens.
  • Text index posting-list segment caching.
  • Generic exclusion search performance improved.
  • S3 client endpoint/bucket region discovery caching.
  • has() with constant arrays transformed to faster in() implementation.
  • ThreadPool LIFO wake strategy reduces memory fragmentation.
  • Approximate runtime filter and bloom filter index performance improved.
  • ASOF JOIN can now use parallel_hash algorithm.
  • Early termination for empty INTERSECT/EXCEPT results.
  • bitmapContains for non-UInt64 groupBitmap optimized.
  • Faster discontinuous queries for single-dictionary LowCardinality columns.
  • HashJoin probe fast path for single-row blocks.
  • Predicate pushdown for remote table function queries.
  • enable_join_transitive_predicates enabled by default.
  • Text index support for multiSearchAny, multiSearchAnyUTF8, multiMatchAny, improved match pattern analysis.
  • Filter merging into PREWHERE on second optimizer pass.
  • QueryConditionCache records individually filtered-out granules.
  • Keeper nuraft_use_bg_thread_for_snapshot_io enabled by default.
  • Keeper snapshot application peak memory usage reduced.
  • LLVM/JIT allocations routed to dedicated jemalloc arena.
  • Excessive memory reservation for sparse dictionary-encoded Nullable(String) Parquet columns fixed.
  • Cardinality estimation improved for deterministic single-argument functions in join reordering.
  • Asynchronous logging CPU overhead reduced via LIFO queue notifications.
  • Duplicate calculation removal during query execution.
  • Recursive CTE result processing parallelized.
  • Case-insensitive substring search faster via NEON (ARM) and wider AVX2 (x86).
  • FPC floating-point codec ARM regression fixed.
Improvements
  • Dynamic server hard memory limit adjustment based on current memory usage and system MemAvailable.
  • C# PostgreSQL client support in PostgreSQL protocol.
  • Mutations now use the analyzer.
  • Schema evolution with concurrent consistency checks for data lake catalogs.
  • Cache disk support for datalake table engines.
  • DataLakeCatalog onelake type now uses Blob endpoint by default.
  • S3(Azure)Queue default persistent_processing_node_ttl_seconds increased from 1 hour to 6 hours.
  • Iceberg metadata cache default size reduced from 1 GB to 128 MB.
  • S3Queue streaming task query_id propagated to dependent table inserts.
  • system.query_log used_storages populated with storage engine name for DataLakeCatalog queries.
  • Iceberg snapshot operation and summary information now accessible.
  • S3 multipart upload finalization completed asynchronously via task tracker.
  • MergeTree text index default parameter settings: text_index_dictionary_block_size, text_index_dictionary_block_frontcoding_compression, text_index_posting_list_block_size, text_index_posting_list_codec.
  • Projections can override additional MergeTree settings (compression, part format, serialization).
  • system.merges new columns: current_projection, current_projection_progress, projections_completed, projections_remaining.
  • PREWHERE with IN subquery on primary key columns now uses primary key index for granule pruning.
  • h3PolygonToCells enforces max array size, validates H3 return codes, rejects MultiLineString.
  • system.keeper_snapshots table with local Keeper snapshot information.
  • system.keeper_changelogs table with Keeper changelog (Raft log) file information.
  • system.keeper_cluster table with Raft cluster member information.
  • Keeper profile events expanded for watches.
  • Keeper coordination_settings for NuRaft uncommitted log entry admission limiting and append-entries throttling.
  • enable_compression setting for mysql table function, MySQL table/database engines, and MySQL dictionary source.
  • Query cancellation latency reduced for PostgreSQL wire protocol.
  • Query cancellation latency reduced for MySQL wire protocol.
  • MySQL handshake auth_response length reading fixed for values >= 128.
  • MaterializedPostgreSQL maps PostgreSQL numeric(p, 0) with precision > 76 to Int256.

Fetched June 27, 2026