releases.shpreview

26.3

ClickHouse release 26.3 LTS

$npx -y @buildinternet/releases show rel_ff5x69Y7vhdbPCfSlJv6m

Backward Incompatible Changes

  • Data type serialization: Propagate data types serialization versions to nested data types. String serialization version with_size_stream now applies to String types inside Array/Map/Variant/JSON/etc. Controlled by propagate_types_serialization_versions_to_nested_types (enabled by default). Upgrade is safe, but downgrade is not — data written by 26.3 in columns with nested types will be unreadable in older versions.
  • Skip index type: Removed the hypothesis skip index type. Creating tables with INDEX ... TYPE hypothesis now produces an error.
  • Function removal: Removed experimental detectProgrammingLanguage function.
  • NOT operator precedence: Fixed to match SQL standard. NOT now binds looser than IS NULL, BETWEEN, LIKE, and arithmetic operators. Queries relying on previous non-standard behavior may change results.
  • Skip index filenames: Fixed skip index files not respecting replace_long_file_name_to_hash setting. Long-named indices are now hashed like column files. Backward compatible for upgrades, but downgrading may cause long-named indices to be ignored.
  • Async insert default: Async insert is now enabled by default. Batching all small inserts by default. Can be disabled at config, session, query, or table level. Set compatibility=<version less than 26.2> for previous behavior.
  • MySQL datatype mapping: Changed default mysql_datatypes_support_level to decimal,datetime64,date2Date32, enabling proper mapping of MySQL DATE/DECIMAL/DATETIME to Date32/Decimal/DateTime64. Previously MySQL DATE mapped to Date (cannot represent dates before 1970-01-01).
  • UDF stderr handling: Changed default stderr_reaction from throw to log_last for executable UDFs. UDFs writing warnings to stderr no longer fail when exit code is 0.
  • Metadata changes: Fixed normal projections metadata so multi-column sorting keys are properly recognized.
  • Index function API: mergeTreeAnalyzeIndexes{,UUID} now accepts array of part names instead of regexp for improved performance (experimental).

New Features

  • Bucketed Map serialization: Added bucketed serialization for Map columns in MergeTree with map_serialization_version = 'with_buckets'. Keys split into hash-based buckets, providing 2-49x speedup for single-key lookups. New settings: map_serialization_version, max_buckets_in_map, map_buckets_strategy, map_buckets_coefficient, map_buckets_min_avg_size.
  • Materialized CTE: Support evaluating CTEs only once and storing results in temporary tables.
  • SQL-standard functions: Allow certain functions like NOW without parentheses for compatibility.
  • naturalSortKey function: Added naturalSortKey(s) function.
  • JSON input for JSONExtract: Support native JSON/Object input for JSONExtract functions.
  • Nullable query parameters: If a query parameter has Nullable type and is not specified, assume value is NULL.
  • ZooKeeper auxiliary support: Support auxiliary ZooKeeper for Replicated database.
  • JSON has function: Support has function for JSON type to check path existence.
  • mergeTreeTextIndex function: New table function to read data directly from a text index for introspection.
  • table_readonly setting: Add MergeTree setting to mark tables as read-only.
  • Partition pruning settings: New use_partition_pruning setting and use_partition_key alias to disable partition pruning.
  • Iceberg EXECUTE expire_snapshots: Support ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>') for Iceberg tables.
  • HTTP handlers per port: Allow each type=http entry in <protocols> to specify custom <handlers> key for different routing rules per port.
  • EXPLAIN improvements: Add pretty=1 option for tree-style indented output and compact=1 to collapse Expression steps.
  • Access control: New restore_access_entities_with_current_grants setting for restored users/roles in backups.
  • Unicode functions: Added caseFoldUTF8, removeDiacriticsUTF8, and normalizeUTF8NFKCCasefold functions.
  • asciiCJK tokenizer: New tokenizer for full-text indexes and tokens function using Unicode word boundary rules.
  • Unavailable shards limits: New max_skip_unavailable_shards_num and max_skip_unavailable_shards_ratio settings to limit silent shard skipping.
  • SOME keyword: Added SOME keyword for subquery expressions (identical to ANY).
  • FixedString output formatting: New output_format_trim_fixed_string setting to strip trailing null bytes.
  • Parenthesized table joins: Support parenthesized table join expressions in FROM clause.
  • toDaysInMonth function: Returns number of days in the month of specified date.

Experimental Features

  • WebAssembly UDFs: Experimental support for WebAssembly-based user-defined functions with Wasmtime backend.
  • External SQL dialects: Support for external SQL dialects using polyglot library.
  • ALP codec: Floating-point compression codec (without ALP_rd fallback).
  • Lazy JSON type hints: Experimental lazy type hints for JSON columns. ALTER TABLE ... MODIFY COLUMN json JSON(path TypeName) completes as metadata-only operation without rewriting data.
  • YTsaurus parallel reads: Enable parallel reads from YTsaurus table engine.

Performance Improvements

  • Object storage reads: Improved data lake reading performance by resizing pipeline to number of processing threads, providing ~40x improvements on multi-core machines.
  • Parallel replicas logic: Clarified relationship between enable_parallel_replicas and automatic_parallel_replicas_mode. Queries use parallel replicas if enable_parallel_replicas > 0. automatic_parallel_replicas_mode=1 uses statistics-based decision; mode=0 uses parallel replicas for all supported queries.
  • Enhanced partition pruning: Allow partition pruning when predicate contains comparison operators and partition key is wrapped in deterministic function chain (e.g., cityHash64(x) % 5 > 2, toYYYYMM(x) < 2026).

Fetched April 11, 2026

26.3 — ClickHouse Changelog — releases.sh