Skip to main content

ClickHouse リリース 26.8 LTS、2026-08-27、FIXME (作業中)

後方互換性を持たない変更

  • JSONEachRow および類似のフォーマットで、DateTime および DateTime64 カラムの引用符なし JSON 数値は、ValuesCASTtoDateTime64 と同様に、オプションのサブ秒精度を持つ Unix タイムスタンプとして解釈されるようになりました。以前は、1703363853.035 のような小数は拒否され、1703363853 のような引用符なし整数は DateTime64 のスケーリング済み生値として読み取られ、1970-... のタイムスタンプが生成されていました。引用符付き文字列および ClickHouse’s 独自の JSON 出力には影響ありません。 #108091 (Alexey Milovidov).
  • max_insert_threads のデフォルト値が 1 から auto に変更されました。auto はサーバーで使用可能な CPU コア数に設定されます。これにより、デフォルトで INSERT SELECT が並列化され、宛先への書き込みパスを安全に分岐できる場合は、max_insert_threads によって通常の INSERT の書き込み側も並列化できるようになりました。この変更により、このようなクエリで作成されるパーツ数や挿入行の順序が変わる可能性があります。以前の動作に戻すには、max_insert_threads1 に設定するか、compatibility26.8 未満のバージョンに設定してください。 #109000 (Alexey Milovidov). #109006 (Alexey Milovidov).
  • PostgreSQL および MaterializedPostgreSQL データベースエンジンは、PostgreSQL テーブルエンジン、postgresql テーブル関数、および DDL で作成された Dictionary と同様に、remote_url_allow_hosts を適用するようになりました。remote_url_allow_hosts が設定されている場合、CREATE DATABASE およびユーザーが実行する ATTACH DATABASE は、許可されていないホストを指す PostgreSQL および MaterializedPostgreSQL データベースを UNACCEPTABLE_URL で拒否するようになりました。既存のデータベースは引き続きサーバー起動時に読み込まれます。 #111135 (Alexey Milovidov).
  • 実験的な ALP(STD) コーデックは、Float32 のスケーリング演算を Float64 で行うようになりました。これにより圧縮率が向上し、小数データの圧縮時に例外が多発する問題が解消されますが、以前のバージョンで書き込まれた Float32 値は、1 ULP 異なる値としてデコードされる可能性があります。 #111627 (Raufs Dunamalijevs).
  • library Dictionary ソースを削除しました。SOURCE(LIBRARY(...))UNKNOWN_ELEMENT_IN_CONFIG で失敗するようになり、dictionaries_lib_path サーバー設定は廃止され、効果がありません。 #111980 (Alexey Milovidov).
  • TODO: @Mikhail Artemenko これはなぜ後方互換性を持たない変更なのですか?変更履歴エントリには説明がありません: オブジェクトストレージディスクのトランザクションは、以前の疑似トランザクションではなく、デフォルトでメタデータストレージのネイティブトランザクションを使用するようになりました。 #89658 (Mikhail Artemenko).
  • Arrow および ArrowStream フォーマット向けの Apache Arrow ライブラリベースの reader と writer を削除しました。26.7 以降デフォルトとなっていたネイティブ ClickHouse 実装が、唯一の実装となりました。設定 input_format_arrow_use_native_reader および output_format_arrow_use_native_writer は廃止されました。これらは引き続き受け付けられますが効果はないため、Apache Arrow 実装を強制するために 0 を設定していたクエリも、現在はネイティブ実装を使用します。 #111996 (Alexey Milovidov).
  • TODO: 後方互換性の問題を説明: Int64 のマイクロ秒値でオーバーフローする timespan 設定 (ミリ秒/秒) の値を拒否します。 #112757 (Azat Khuzhin).
  • MySQL ソースの TLS 認証情報 (ssl_cassl_certssl_key) は、サーバーが自身の権限でこれらのファイルを開くため、CREATE NAMED COLLECTION、クエリ引数、CREATE DICTIONARY などの SQL からファイルパスとして指定できなくなりました。パスは引き続きサーバー設定ファイルでサポートされます。それ以外では、新しい ssl_ca_pemssl_cert_pemssl_key_pem パラメータで証明書または秘密鍵の内容を指定してください。これらはパスワードと同様に、ログおよび SHOW クエリではマスクされます。#112070 (Alexey Milovidov).
  • SYSTEM ... CACHE ON CLUSTER コマンドの権限チェックでは、SYSTEM DROP CACHE 権限グループではなく、各コマンド固有の権限を使用するようになりました。これにより、個別の cache 権限を持つユーザーは対応するコマンドを実行できるようになり、権限グループを持つユーザーが SYSTEM SYNC FILESYSTEM CACHE 権限なしで SYSTEM SYNC FILESYSTEM CACHE ON CLUSTER を実行することも防止されます。#114042 (Groene AI).
  • 本体が単一の Distributed テーブルに対する単純な SELECT であるビューでは、外側のクエリ全体が分片にプッシュダウンされるようになりました (新しい設定 optimize_trivial_view_pushdown_to_distributed、デフォルトで有効) 。これにより、このようなビューで観測可能な動作が変わります。ビュー参照に指定した FINALSAMPLE は、無視されるのではなく分片ローカルのテーブルに伝播されるようになり、単一分片のクラスターでは extremes が報告されなくなります。以前の動作に戻すには、optimize_trivial_view_pushdown_to_distributed = 0 を設定してください。#101791 (simonmichal).
  • TODO: revert-of-revert を待つ。軽量 UPDATE のパッチパートでは、(sorting_key..., _block_number, _block_offset) でソートされた新しい v2 オンディスクフォーマットが使用され、新しいマージアルゴリズムで適用されるようになりました。ピークメモリはパッチ全体ではなく、同一ソートキーを持つ最大の連続範囲に制限され、マージ境界をまたぐ更新もインメモリ Join 適用にフォールバックしなくなりました。旧フォーマットのパッチパートは引き続き読み取り可能です。26.8 より前のバージョンからローリングアップグレードする場合は、すべてのレプリカがアップグレードされるまで patch_parts_version = 'v1' を維持するか、compatibility 設定を使用してください。#103182 (Anton Popov).
  • CREATE USER および ALTER USER に、VALID UNTIL の短縮形として VALID FOR <interval> 句を追加しました。有効期限のデッドラインは、クエリ実行時に現在時刻に指定された interval を加算して算出され、VALID UNTIL 形式で保存されます。system.users テーブルの valid_until カラムは、2106 年以降のデッドラインを正確に表現できるよう、Array(DateTime) ではなく Array(DateTime64(0)) 型になりました。このカラムを読み取るツールでは、新しい型を処理する必要があります。#110171 (Alexey Milovidov).
  • EXPLAIN SYNTAX は、行ごとに 1 レコードではなく、再フォーマットされたクエリを埋め込み改行を含む単一の String レコードとして返すようになりました。そのため、出力は復元可能な単一行となり、そのまま直接使用できます (たとえば、SELECT count() FROM (EXPLAIN SYNTAX ...)1 を返します) 。これは、デフォルトで 1 に設定される新しい single_record オプションで制御されます。従来の行ごとに 1 レコードの出力に戻すには、single_record = 0 を設定してください。その他の EXPLAIN 種類 (PLAN/PIPELINE/AST) は、引き続き行ごとのツリー出力を維持します。#110479 (Alexey Milovidov).
  • Date32 のサポート範囲を [1900-01-01, 2299-12-31] から、DateTime64 と同じ [0000-01-01, 9999-12-31] へ拡張しました。パースおよび変換では、以前の境界に暗黙的にクランプするのではなく、拡張後の範囲を受け入れるようになりました。後方互換性に関する注意: 数値変換 toDate32(N) では、[120530, 2932896] の値が、1970 年初頭の Unix タイムスタンプではなく日数 (2300-01-01 から 9999-12-31 までの日付) として解釈されるようになりました。これは、日数の範囲に収まる数値は日数として扱うルールに従うものです。0000-01-01 の日数より小さい数値と、9999-12-31 より後のタイムスタンプは、新しい境界値に飽和します。#111534 (Alexey Milovidov).
  • arrayIntersectarraySymmetricDifference は、単一の引数内で繰り返される値を、複数の引数に出現したかのように扱わなくなりました。以前の動作に依存するクエリでは、異なる結果が返される場合があります。arrayIntersect([1], [2], [1, 1])[1] ではなく [] を返し、arrayIntersect([1, 2], [2], [1, 1, 2])[1, 2] ではなく [2] を返し、arraySymmetricDifference([1], [2], [1, 1])[2] ではなく [2, 1] を返します。arraySymmetricDifference では 2 つの引数で十分です。arraySymmetricDifference([1], [2, 2])[1] ではなく [2, 1] を返します。値は、それ以前のすべての引数に存在していた場合にのみその引数についてカウントされるため、結果にはすべての引数に存在する値のみが含まれます。同じ変更の一環として、arrayIntersect はすべての引数ではなく最小の引数からハッシュテーブルを構築するようになり、引数間でサイズに大きな差がある場合は最大 1.85 倍高速化され、メモリ使用量も 3 分の 1 削減されます。arrayUnion は影響を受けません。#113021 (Alexey Milovidov).
  • disable_insertion_and_mutation は、外部ストレージへの直接書き込みを引き続き許可しながら、KafkaRabbitMQNATS テーブルからのバックグラウンド消費を停止するようになりました。無効化された Kafka2NATSRabbitMQ テーブルでは、直接の SELECT に対してコンシューマーを初期化しません。最近導入された message_queue_disable_insertion 設定は、サーバーの再起動が必要になりました。#113660 (Christoph Wurm).
  • AggregateFunction カラムに対するウィンドウ PARTITION BY または ORDER BY は、このようなカラムに対する最上位の ORDER BY と同様に、ILLEGAL_COLUMN で拒否されるようになりました。以前は、このようなクエリが少なくとも 1 つのアナライザで受け入れられ、ウィンドウ PARTITION BY によるパーティション分割は max_threads に応じて異なっていました。この拒否は、ArrayTupleMapVariant、または SimpleAggregateFunction にネストされた state にも適用されます。通常の型に対する SimpleAggregateFunctionQBit、および state に対する GROUP BYDISTINCT は影響を受けません。#113878 (Groene AI).
  • include_from 設定は、デフォルトで /etc/metrika.xml を使用しなくなりました。以前は、ClickHouse 構成でこのファイルを参照していなくても、ファイルが存在すれば構成の置換に使用されていました。この暗黙的な置換ファイルに依存していた場合は、影響を受ける各設定ファイルに <include_from>/etc/metrika.xml</include_from> を明示的に追加してください。個別に読み込まれる users.xml および XML Dictionary の構成には、それぞれ独自の include_from 要素が必要です。#114161 (Alexey Milovidov).
  • NATS テーブルエンジンでは、新しい nats_credentials 設定で認証情報をインライン指定できるようになりました (.creds ファイルと同じペイロード) 。一方、SQL での nats_credential_file の指定は受け付けなくなりました。このパスは、サーバー自身の権限で開かれるサーバーファイルシステム上のファイルを参照するため、サーバー設定ファイルで定義された名前付きコレクション内、またはサーバー設定自体の nats.credential_file としてのみ指定できます。オペレーターが <nats_credential_file overridable="false"> で固定していない限り、クエリでこの設定済みパスをインラインの nats_credentials に置き換えることができます。この制限導入前に作成されたテーブルは、アップグレード後も引き続き動作します。#114644 (Alexey Milovidov)。
  • 非同期メトリクスで Map データ型を使用できるようになり、CPU コア単位およびデバイス単位のメトリクスは単一のキー・バリューのメトリクスに統合されました。OSUserTimeCPU0OSUserTimeCPU1、… は、CPU コア番号をキー、値を値とするマップを持つ単一の OSUserTimeCPU メトリクスになりました (他の OS*TimeCPU* メトリクス、CPUFrequencyMHz_*Temperature*EDAC*Block*_*Network(Receive|Send)*_*Disk*_**BlobsQueueEstimateAsyncLogging*QueueSize についても同様です) 。system.asynchronous_metrics には、新たに key_values Map(LowCardinality(String), Float64) カラムが追加されました (この種のメトリクスでは value カラムは NaN です) 。system.asynchronous_metric_log では、新しい key カラムを使用して、これらのメトリクスをキーごとに 1 行として記録します。Prometheus エンドポイントではラベル付きでエクスポートされ (例: ClickHouseAsyncMetrics_BlockReadBytes{device="sda"}) 、Graphite の MetricsTransmitter では <prefix>.<Metric>.<key> として送信されます。#115333 (Alexey Milovidov)。

新機能

  • SQL でカスタム HTTP ハンドラーを定義し、ローカルまたは Keeper ストレージに永続化するための CREATE HANDLERALTER HANDLERDROP HANDLER 文を追加しました。currentHandler 関数と currentRequestURL 関数、system.handlers テーブル、および system.query_loghttp_handler_name / http_request_url 列も追加しました。#106231 (Alexey Milovidov).
  • HTTP インターフェースで、URL パスを介してテーブルおよびデータベースにアクセスする方法を追加しました (例: `/database/table.format.gz?filter=a>0`) 。さらに、相互に、また既存の `query` URL パラメータとも組み合わせ可能な新しい設定 (`http_allow_database_as_path`、`http_allow_table_as_file`、`http_allow_filters_as_path`、`http_allow_filters_as_unrecognized_url_parameters`、`select`、`order`、`sort`、`filter`、`page`、`compression`、`format`、`input_format`、`output_format`、`default_format`、`database`) を追加しました。#105249 (Alexey Milovidov).
  • 新しい設定 framing_output_format で選択できるフレーミングフォーマットを追加しました。これにより、データチャンク、totals と extremes、進捗パケット、プロファイルイベント、サーバーログ、例外といったクエリレスポンスの各部分を、単一の HTTP レスポンスストリームで多重化できます。実装されたフレーミングフォーマットは、None (デフォルト。従来どおり動作) 、EventStream (HTTP サーバー送信イベント) 、JSONEachPacketBase64JSONEachPacketString (パケットごとに、Base64 エンコードされたデータまたは文字列データを含む JSON オブジェクト) です。#110127 (Alexey Milovidov).
  • default_session_user サーバー設定を追加しました。これは、クライアントがユーザー名を指定せずに接続した場合に認証に使用するユーザーです (従来は default にハードコードされていました。ネイティブ、MySQL、PostgreSQL プロトコルでは、空のユーザー名を拒否せず受け入れるようになり、Arrow Flight では独自にハードコードされた default ではなくこの設定が使用されます) 。protocols セクションの合成可能なプロトコルエンドポイントでは、エンドポイントごとに default_session_user キーを指定してこれを上書きできるため、異なる待ち受けポートで異なる匿名ユーザーを使用できます。空文字列に設定すると、ユーザー名を指定しない接続は禁止されます。サーバー間接続でデフォルトセッションユーザーが使用されることはありません。#110179 (Alexey Milovidov).
  • SQL クエリでパイプ演算子をサポートしました: FROM t |> WHERE x > 1 |> AGGREGATE count() AS c GROUP BY y |> ORDER BY c DESC |> LIMIT 10。GoogleSQL のパイプ構文に似ています。任意の SELECT クエリの後に |> 演算子を連鎖させることができ、各演算子はその前のクエリをサブクエリでラップするため、生成される AST はネストしたサブクエリを使用する同等のクエリと同じになります。FROM 句で始まるクエリでは、SELECT 句はオプションとなり、デフォルトは SELECT * です。#111151 (Alexey Milovidov).
  • AST を JSON としてシリアル化およびデシリアル化する parseQueryToJSON 関数と formatQueryFromJSON 関数、および enable_json_ast_dialect で有効化される実験的な clickhouse_json 方言を追加しました。#100412 (Alexey Milovidov). #113480 (Nikita Fomichev).
  • 新しい設定 run_query_in_background。サーバーはクエリを受け付けると直ちに空の結果を返し、接続の状態にかかわらず完了まで実行を続けます。結果は破棄されます。system.processes および system.query_logquery_id によりクエリを追跡できます。接続が切断されても中断してはならない INSERT ... SELECTCREATE TABLE … AS SELECTCREATE MATERIALIZED VIEW … POPULATE などの長時間実行クエリを想定しています。#112816 (Miсhael Stetsyuk).
  • 新しいシステムテーブル system.user_query_log を追加しました。クエリログテーブルへのアクセス権がなくても、各ユーザーは自身のクエリログレコードを確認できます。元の実装とアイデアは Yue Ni (@niyue) によるものです。#104462#110156 (Alexey Milovidov).
  • URL 統合の残りの項目を実装しました (issue #59617) 。新しい s3_base 設定は、url_base と同様に、s3 テーブル関数および S3 テーブルエンジン (およびその設定を共有する s3Clustergcsoss 関数) の相対 URL を解決します。新しい URL データベースエンジンはテーブル名を URL として扱い、オプションのベース URL を基準に解決して URL スキームに応じたバックエンドへ振り分けるため、ファイル、Web、オブジェクトストレージを統一的に処理できます。これにより、clickhouse-local のデフォルト (Overlay) データベースでは、Filesystemfile:// ベース URL を持つ URL に置き換えられます。そのため、通常のファイル名は引き続き使用でき、SELECT * FROM 'https://example.com/data.csv' と記述することもできます。#111512 (Alexey Milovidov).
  • パブリックデータセットを含む Google BigQuery テーブルの読み取りと書き込みに対応する bigquery テーブル関数および BigQuery テーブルエンジンを追加しました。テーブル構造は BigQuery のテーブルスキーマから推論されます。認証では、OAuth アクセストークン、JSON 形式のサービスアカウントキー、リフレッシュトークンを使用する OAuth クライアントをサポートします。#110166 (Alexey Milovidov).
  • 通常の CREATE MATERIALIZED VIEW ... POPULATE がローカルでアトミックになりました。ビューはソーステーブルへの新規 insert を購読し、既存データはソースに対する短時間の排他的ロック下でまとめてスナップショットされるため、population と同時に同じサーバー経由で insert された行が欠落または重複しなくなります (新しい設定 materialized_views_populate_atomically、デフォルトで有効) 。この保証はローカルの insert パスのみに適用されます。別のレプリカに到着する insert や分散書き込みパス経由の insert は対象外であり、固定されたスナップショットを提供できるソース (MergeTree family および Memory) が必要です。その他のソース、ならびに CREATE OR REPLACE / REPLACEReplicated データベースで作成されたビューでは、従来の非アトミックな population が維持されます。POPULATE は、ターゲットテーブルをバックフィルするために TO と組み合わせて使用することも可能になりました。#108715 (Alexey Milovidov).
  • Keeper は、カスタム LSM ツリーを使用してデータをディスクに保存できるようになりました。パフォーマンスは従来のストレージと同程度です。有効にするには coordination 設定 use_lsmt_storage = true を使用します。ファイルをディスクに保存するには storage_memory_only = false を設定し、保存先を指定するには config に data_storage_path または data_storage_disk を追加します。S3 に書き込むには、data_storage_disks3_plain タイプのディスクを指定します。#113903 (Michael Kolupaev).
  • データレイク向けの “S3 tables” エンジンカタログです。#103220 と同じものですが、INSERT が動作します。#113505 (Konstantin Vedernikov).
  • Snowflake Horizonのサポートを追加しました。Horizonカタログの背後にあるIceberg内のIcebergテーブルをクエリできるようになりました。カタログを介してIcebergテーブルに書き込むこともできます。 #114547 (Melvyn Peignon).
  • Puffinファイルフォーマットのサポートを追加しました。fileurls3などのテーブル関数で使用できます。 #103936 (Konstantin Vedernikov).
  • ウィンドウ関数のGROUPSフレームモード (SQL:2011) をサポートしました。例: any(price) OVER (PARTITION BY symbol ORDER BY ts GROUPS BETWEEN CURRENT ROW AND 1 FOLLOWING)GROUPSフレームでは、境界は完全なピアグループ (ORDER BYキーの値が等しい行の集合) 単位で数えられます。そのため、N PRECEDING/N FOLLOWINGは、物理行 (ROWS) やORDER BY値の距離 (RANGE) ではなく、現在の行のピアグループの前後にあるN個のピアグループを意味します。 #108653 (Nihal Z. Miaji).
  • mergeTreeCodecBlockCountsテーブル関数を追加しました。この関数は、MergeTreeテーブルの各パート、カラム、サブストリームについて、各codecを使用している圧縮ブロック数を報告します。 #109623 (Raufs Dunamalijevs).
  • Array(Point)として格納され、Geometry型にも含まれるMultiPoint Geoデータ型を追加しました。 #109951 (David Meng).
  • HDFSストレージ用の_etag仮想カラムを追加しました。 #108255 (Zhang Yifan).
  • ネイティブのORCリーダーと出力フォーマットでuniontypeをサポートし、ClickHouseのVariant型にマッピングするようになりました。以前は、このようなカラムの読み取りはUnsupported ORC typeで失敗し、書き込みはILLEGAL_COLUMNで失敗していました。 #110078 (Alexey Milovidov). #110085 (Alexey Milovidov).
  • MeCab形態素アナライザを使用する、テキスト索引およびtokenshasAnyTokenshasAllTokens関数向けのjapaneseトークナイザーを追加しました。Dictionaryはサーバー設定で指定された場所からランタイム時に読み込まれ、使用前にSHA-256チェックサムで検証されます。 #111420 (Jimmy Aguilar Mena).
  • tokens関数およびMergeTreeテキスト索引用のchineseトークナイザーを追加しました。Dictionaryと隠れマルコフモデルを使用して中国語テキストを単語に分割します (アルゴリズムはjiebaに準拠) 。coarse_grained (デフォルト) とfine_grainedの粒度を提供します。#80174の継続です。 #89945 (Amos Bird).
  • テキスト索引およびtokenshasAnyTokenshasAllTokens関数向けに、新しいicuトークナイザーを追加しました。ロケールに対応したUnicodeの単語分割を提供します。中国語、日本語、タイ語などの言語向けのDictionaryベースの分割も含まれます。 #109940 (Jimmy Aguilar Mena).
  • テキスト索引および tokens 関数用の splitByRegexp トークナイザーを追加しました。正規表現を区切り文字として入力をトークンに分割します。たとえば、tokenizer = splitByRegexp('[^\p{L}\p{N}#+]+') を使用すると、他のトークナイザーでは分割される C++C# のような特殊文字を含むトークンを保持できます。#110002 (Jimmy Aguilar Mena).
  • Keeper HTTP ダッシュボードに、Raft メンバーシップをヘルス状態の色、lag、優先度とともにトポロジーグラフで表示する Cluster タブを追加しました。これにより、正常なノード、遅延しているノード、到達不能なノードを確認し、リーダーのダッシュボードを直接開けます。#111655 (yanglongwei).
  • 新しいサーバー構成セクション create_union_system_log_tables では、システムログテーブル、そのローテーション済みバージョン、またはクラスター内のすべてのレプリカにある同じテーブルのユニオンをクエリする all_... テーブル (例: system.all_query_log) の作成と自動保守を要求できます。remoteremoteSecureclusterclusterAllReplicas テーブル関数は、作成する Distributed ストレージの設定を指定する末尾の SETTINGS 句を受け付けるようになりました。例: clusterAllReplicas('default', system.query_log, SETTINGS skip_unavailable_shards = 1)#112670 (Alexey Milovidov).
  • NATS テーブルエンジンに nats_credentials 設定を追加し、NATS の認証情報を文字列としてインライン指定できるようにしました (.creds ファイルのペイロードに対応) 。#110733 (addshore).
  • 結合対象テーブル間の 2 つの不等比較 (<<=>>=) を含む ON 句の join 向けに、ソートベースの IEJoin アルゴリズムを追加しました。join_algorithm 設定に ie_join を追加することで有効になります。対応する種類は ALL INNER/LEFT/RIGHT/FULL JOIN および SEMI/ANTI LEFT/RIGHT JOIN です。以前は、このようなクエリはフィルター付きの CROSS JOIN (INNER のみ) として実行され、大きなテーブルでは大幅に低速でした。#109920 (Vladimir Cherkasov).
  • 有限の非負数値の Gini coefficient を計算する集計関数 gini を追加しました。グループ化集計および分散集計にも対応しています。#112280 (Amirreza Akhondi). #114643 (Groene AI).
  • Apache Hive の LazySimpleSerDe テキストを書き込む HiveText 出力フォーマットを追加しました。フィールドは \x01、行は format_hive_text_rows_delimiter 設定 (デフォルトは \n) で区切られ、ネストされた ArrayMapTuple の値には Hive の区切り文字リストが使用されます。出力は Hive のデフォルト LazySimpleSerDe を対象としており、ネストされた値やカスタム行区切り文字については ClickHouse の HiveText 入力と対称ではありません。#107582 (Alexey Milovidov).
  • Prometheus metrics endpoint の定数 labels をサポートしました。<prometheus> 内の新しい <labels> セクションにより、構成した labels が公開されるすべての metric に追加され、同じ Prometheus によってスクレイピングされる複数のクラスターを区別しやすくなります。label の値では、from_env などの標準的な config substitutions を使用できます。#85969 をクローズします。#111672 (Valery Petrov).
  • always_fetch_mutated_part 設定を追加しました。有効にすると、レプリカはローカルでミューテーションを実行する代わりに、別のレプリカからミューテーション済みのパートをダウンロードできます。#113020 (Rory Shanks).
  • JSON 値に対する RFC 7396 スタイルのマージパッチ集約用の集約関数 mergedJSONPatch を追加しました。状態のマージをサポートし、AggregatingMergeTree でも使用できます。タイムスタンプまたは別の順序付けカラムをソートキーとして JSON カラムを集約することで、最新の状態を算出できます。#108349 (larryluogit).
  • 埋め込みモデルを使用して2つのテキスト間の意味的類似度を計算する aiSimilarity 関数を追加しました。[-1, 1]Nullable(Float32) を返します。1 はテキストが同一であることを示し、いずれかのオペランドが NULL または空である場合、あるいはその埋め込みの生成に失敗した場合は NULL を返します。#110777 (David Meng).
  • 復元対象をきめ細かく制御するための restore_table_datarestore_access_entitiesrestore_functions 復元設定を追加しました。これらは、個々のカテゴリについて structure_only を上書きできます。たとえば、structure_only=true, restore_access_entities=true では、テーブルデータを復元せずにテーブル定義とアクセスエンティティを復元します。#102402 (Nikita Fomichev).
  • 配列の添字演算子で、整数配列を索引としてサポートします。arr[indexes] は、arrayMap(i -> arr[i], indexes) と同様に、指定されたすべての位置の要素を返します。#108371 (folly).
  • 配列、マップ、JSON に対する has の否定である関数 notHas を追加しました。検索対象が定数配列の場合、notHas(constant_array, x)optimize_rewrite_has_to_in (デフォルトで有効) によって x NOT IN constant_array に書き換えられます。そのため、Set のルックアップを介して実行され、NOT IN と同様に主キー索引による枝刈りが可能です。#109926 (Nihal Z. Miaji).
  • 関数 arrayElement (vec[n] 演算子) および arraySliceQBit データ型で動作するようになりました。qbit[n] は n 番目のベクトル要素を元の精度で返し、arraySlice(qbit, offset, length) は次元のサブセットへの射影を返します。どちらも必要な stride group の bit plane のみを読み取り、stride group の境界に整列したスライスはコピーせずに保存済みストリームを再利用します。これにより #109942 が解決されます。#109953 (Utkal Singh).
  • PNG 出力フォーマットでアニメーション PNG をサポートします。t カラムによりクエリ結果がアニメーションとなり、t の時間スケールは output_format_image_time_multiplier_seconds および output_format_image_time_divisor_seconds で設定します。さらに、output_format_image_streaming_animation を使用すると、フレームをメモリにバッファリングする代わりに、クエリによる生成に合わせて書き出せます。#112846 (Alexey Milovidov).
  • LLM provider を使用してテキスト内の個人を特定できる情報 (PII) を検出・マスキングする新しい関数 aiRedact を追加しました。マスキングするカテゴリ (例: ['email', 'name']) を指定するか、空の配列を渡してデフォルトの PII カテゴリセットを使用します。一致した値はトークン (デフォルトでは [REDACTED]) に置き換えられます。#110464 (David Meng).
  • LLM を使用してテキストに対する自然言語条件を評価し、WHEREPREWHEREJOIN ... ON で使用できる UInt8 を返す aiFilter 関数を追加しました。#110594 (yanglongwei).
  • PostgreSQL テーブルエンジン、postgresql テーブル関数、PostgreSQL および MaterializedPostgreSQL データベースエンジン、ならびに PostgreSQL 辞書における PostgreSQL への TLS/SSL 接続をサポートしました。sslmode に加え、証明書と秘密鍵をリテラルの内容 (sslrootcert_pemsslcert_pemsslkey_pem。パスワードと同様にマスクされます) またはパス (sslrootcertsslcertsslkey。サーバー設定ファイルで定義された名前付きコレクションからのみ指定可能) として指定できます。#110615 (Alexey Milovidov).
  • ClickHouse server にイントロスペクションポートが追加されました。これはネイティブプロトコルの TCP リスナーで、server がテーブルのアタッチを開始する前に起動し、テーブルのデタッチが完了した後にのみ停止します。この期間中、operator は clickhouse client で接続し、SHOW PROCESSLISTSELECT * FROM system.stack_traceSYSTEM INSTRUMENT ADD 'QueryMetricLog::startQuery' SLEEP ENTRY 0.5 などのクエリを実行できます。さらに、shutdown_wait_unfinished server setting のデフォルト値を 5 秒から 120 秒に引き上げました。以前のデフォルト値は接続のポーリング間隔より短かったため、server は未完了の接続の終了を待たずに、シャットダウンの途中で強制終了する可能性がありました。#110838 (Miсhael Stetsyuk).
  • Keeper の mntr コマンドに、エミュレートされた ZooKeeper メトリクス zk_leader_uptimezk_sum_election_timezk_cnt_election_timezk_sum_leader_unavailable_timezk_cnt_leader_unavailable_time を追加しました。また、Keeper 専用の関連するリーダー指向メトリクス KeeperLastLeaderElectionTimeKeeperLastLeaderUnavailableTime も追加しました。#113334 (Maxim Orlovsky).
  • ALTER TABLE … MODIFY PROJECTION をサポートし、既存の projection を再構築することなく、projection レベルの設定 (例: index_granularity) を変更できるようにしました。新しい設定はマージ時に遅延適用されます。#113343 (Diego Gomes Tomé).
  • mutation の完了時刻を記録する finish_time 列を system.mutations に追加しました。未完了の mutation と完了時刻が不明な mutation では、ゼロが返されます。#113474 (Nikita Mikhaylov).
  • experimentalbeta の間に新しい private preview 機能 tier を追加しました。これにより、機能 tier の順序は experimental < private preview < beta < production になります。server setting allow_feature_tier に新たなレベルが追加され、0 はすべての tier を許可、1 は experimental を除外、2 はさらに private preview を除外、3 は production 設定のみを許可します。これまで production 設定のみを許可するために allow_feature_tier = 2 を固定していた configuration では、3 を使用する必要があります。#113481 をクローズします。#113581 (Groene AI).
  • 組み込みの Web SQL UI (/play) で、クエリを編集せずに、結果をカラムでソートしたり、値でフィルタリングしたり、ページ送りしたりできるようになりました。各カラムヘッダーにはソート矢印とフィルター入力欄が表示され、選択したセルではその値に応じた比較を指定できます。また、1画面に収まらない結果の下には、ページサイズを調整できるページャーが表示されます。これらはすべて orderfilterlimitpage のクエリ構築設定を使用してサーバー側で実行されるため、たまたま表示されている行だけでなく、結果全体に適用されます。選択したソート、フィルター、ページはページ URL に含まれるため、共有リンクから同じ結果を再現できます。 #115540 (Alexey Milovidov) 。
  • chdig v26.8.1: ratatui、tmux ペイン、tmuxinator セッション、色付きログの共有、機能ツアー#115216 (Azat Khuzhin) 。

実験的機能

  • enable_cascades_optimizer = 1make_distributed_plan = 1 をともに指定して有効になる、分散クエリプラン向けの実験的な Cascades コストベースオプティマイザを追加しました。推定コストに基づいて、シャッフル、ブロードキャスト、レプリケート、ローカルの JOIN 戦略、2 フェーズ、シャッフル、ローカルの集約、2 段階の分散 top-N、並列読み取りとレプリケート読み取りを選択し、必要に応じて exchange 演算子を挿入します。 #86353 (Alexander Gololobov)。
  • 実験的な MergeTree 設定 enable_adaptive_codec_selection を追加しました。有効にすると、デフォルトの codec を使用するカラムについて、マージとミューテーションで block ごとに出力サイズが最小となる codec が選択されます。 #111834 (Raufs Dunamalijevs)。* アダプティブ codec 選択では、すべての候補を測定してから選択した codec で再圧縮するのではなく、各候補 codec による各 block の圧縮を最大 1 回にしました。 #113511 (Raufs Dunamalijevs)。
  • clickhouse バイナリが WebAssembly (Emscripten 経由の wasm64) 向けにビルドされ、clickhouse local が Node.js ≥ 24 およびブラウザ上で、MergeTree テーブルを含むクエリを実行できるようになりました。新しい Build (wasm64) CI ジョブは、ビルドと Node.js の実行パスを固定し (ブラウザの実行パスはまだ CI の対象外です) 、WebAssembly モジュールを artifact として提供します。 #113404 (Alexey Milovidov)。
  • parallel_replicas_plan_based は、クエリプランを最適化してローカル/リモート境界を選択するようになり、parallel_replicas_allow_view_over_mergetree を指定しなくても UNION を含む view 上のクエリを並列化できるようになりました。また、IN (subquery) クエリでは失敗する代わりにローカルプランへフォールバックし、適格な JOIN (INNERLEFTRIGHTSEMI/ANTI を含む) も分散するようになりました。 #111063 (Igor Nikonov)。 #112268 (Igor Nikonov)。 #112443 (Igor Nikonov)。
  • 分散クエリプラン (make_distributed_plan) が、空の MergeTree テーブルからの読み取りなど、計画時にソースが行を生成しないと判明しているクエリもサポートするようになりました。 #111941 (Groene AI)。
  • デフォルトで無効の use_projection_index_in_read_pools 設定を追加しました。有効にすると、projection またはスキップ索引によって完全にフィルタリングされる範囲は、読み取り中に granule ごとにスキップされるのではなく、MergeTree 読み取り pool 内で読み取り task が作成される前に除外されます。これにより、読み取られないデータに対する読み取り task の作成や reader のセットアップを回避できます。 #110291 (Nikolai Kochetov)。 #112296 (Anton Popov)。
  • PromQL: tag のないインスタントベクトルに対する操作 (例: vector(1) + vector(2)topk(1, vector(1))label_replace(vector(1), ...)、および on() を伴う二項演算子) が型エラーで失敗していた問題を修正しました。 #111872 (Valery Petrov)。
  • PromQL: changes および resets 関数を実装しました。 #112352 (Valery Petrov)。
  • 単なる QUERY_WAS_CANCELLED ではなく、分散クエリ (make_distributed_plan = 1) をキャンセルしたエラーを報告するようになりました。以前は、失敗したワーカータスクの実際のエラーはサーバーログでしか確認できませんでした。#112590 (Alexander Gololobov).
  • make_distributed_plan = 1 の場合、ClickHouse は後で失敗させるのではなく、分散クエリプランでまだサポートされていない機能を無効にするようになりました。#109476 をクローズします。#112463 (alesapin).
  • 分散クエリプラン (make_distributed_plan) で、ORDER BY ... LIMIT k クエリに遅延マテリアライゼーションを使用するようになりました。#113111 (Shankar Iyer).
  • 分散クエリプラン (make_distributed_plan) で、パーティション化されていないウィンドウ関数 (OVER (ORDER BY ...)) をサポートするようになりました。以前は、WindowStep をリモート実行用にシリアライズできなかったため、ウィンドウ関数を含むすべてのクエリが失敗していました。PARTITION BY を使用するウィンドウは、現時点では引き続き拒否されます。#109802 (Vighnesh Pathrikar).
  • ORDER BY ... LIMIT n (TopK) クエリに対するクエリ条件キャッシュを制御する設定 use_query_condition_cache_for_top_k を追加しました。#111492 (Alexey Milovidov)。クエリ条件キャッシュは、ORDER BY <column> LIMIT n (TopK) 最適化を使用するクエリでデフォルトで有効になりました。設定 use_query_condition_cache_for_top_k で再度無効にできます。#114539 (Alexey Milovidov).
  • kafka_partition_shard_num および kafka_shard_count 設定を通じて、StorageKafka2 に静的なパーティションと分片の対応付けを追加しました。これにより、複数の ClickHouse 分片が Kafka パーティションの重複しないサブセットを決定論的に消費できます。#108886 (johnjing).
  • Experimental の AI 関数を強化しました。デフォルトでリモートホストへの安全でない (http) エンドポイントを拒否し (新しい設定 ai_function_allow_insecure_endpoint) 、クエリあたりのアウトバウンド API 呼び出し数をデフォルトで制限し (ai_function_max_api_calls_per_query のデフォルトは 1000) 、ログに記録されるプロバイダーのエラー応答をサニタイズします。#111286 (George Larionov).
  • PromQL: 分位点レベルが [0, 1] の範囲外である quantile は、エラーを返す代わりに Prometheus と同様に -Inf/+Inf/NaN を返すようになりました。また、histogram_quantile は Prometheus と同様に、le ラベルが欠落しているか解析できない入力系列を無視するようになりました。#111871 (Valery Petrov).
  • TimeSeries テーブルで複数要素からなる識別子を使用できるようになりました。#112799 (Vitaly Baranov).
  • 内部テーブルの索引粒度を制御する TimeSeries 設定 samples_index_granularity および tags_inner_granularity を追加しました。#113075 (Vitaly Baranov).
  • PromQL: deriv 関数を追加し、ミリ秒精度のタイムスタンプで基盤となる集約関数が本来の 1000 分の 1 の値を返すバグを修正しました。#112360 (Valery Petrov).
  • PromQL: 文字列内の無効な異なる区切り文字のエスケープ、および無効な Unicode サロゲートコードポイントを拒否します。 #113587 (Minh Vu). #113203 (Minh Vu).
  • PromQL: 無限の除数に対して剰余演算を使用する場合でも、有限値を保持します。 #113746 (Minh Vu).
  • PromQL: 日時関数 hourminutemonthyearday_of_weekday_of_monthday_of_year、および days_in_month を引数なしで呼び出せるようになりました。Prometheus と同様に、デフォルトでは vector(time()) が使用されます。 #111869 (Valery Petrov).
  • PromQL が、インスタントクエリおよび範囲クエリ向けの Prometheus HTTP API lookback_delta パラメータをサポートするようになりました。 #113971 (Minh Vu).
  • 分散クエリプラン (make_distributed_plan) が、IN (subquery)JOIN に書き換えずにサポートするようになりました。Set はイニシエーターで一度だけ構築され、その値はワーカータスクとともに送信されます。強制的な rewrite_in_to_join オーバーライドは削除されましたが、書き換えは明示的な設定として引き続き利用できます。 #113826 (Alexander Gololobov).
  • ストリーミングクエリがウォーターマークをサポートします。 #106169 (Mikhail Artemenko).
  • 実験的な ReaderExecutor の読み取りパスに、読み取りスルー型ファイルシステムキャッシュを追加しました (use_reader_executor、デフォルトでは無効) 。 #110029 (Sema Checherinda).
  • PromQL: 関数 clampclamp_minclamp_max、および round を実装しました。 #111870 (Valery Petrov).
  • Prometheus remote-write エンドポイント経由で、挿入統計とクエリを正しく収集します。 #112825 (James Cunningham).
  • PromQL の集計演算子が、Prometheus と同様に大文字小文字を混在させた表記を受け入れるようになりました。 #114076 (Minh Vu).
  • TimeSeries: すべてのタグを tags カラムに格納します。 #114300 (Vitaly Baranov).
  • parallel_replicas_plan_based が有効な場合、ORDER BY クエリに順序どおりに読み取る最適化を適用します。ソートはレプリカに送られ、イニシエーターでマージされるため、各レプリカはソートキー順に読み取ります。また、この設定が有効な状態でプライマリキー以外のカラムに対して ORDER BY を使用した場合に発生する Unknown function __topKFilter も修正します。 #114315 (Igor Nikonov).
  • 通常の引用符付き PromQL 文字列内のリテラルな改行を拒否します。 #114381 (Minh Vu).
  • make_distributed_plan の部分集計戦略における重複した GROUP BY キーを修正し、分散読み取りに対する集計でもこの戦略を使用できるようにしました。 #114523 (Alexander Gololobov).
  • WHATIF において、仮想索引タイプの許可リストに違反した場合に例外をスローします。 #114646 (Yarik Briukhovetskyi).
  • vector search 用の量子化されたサブカラム読み取りを復元しました (導入バージョン: 26.7) 。#114763 (Shankar Iyer).
  • 実験的な TimeSeries テーブルエンジンでは、samples 内部テーブルで自動作成される value カラムに Gorilla codec を適用しなくなりました。これらのカラムのデフォルトは CODEC(ZSTD(1)) になりました。明示的に宣言されたカラムでは、ユーザーが指定した codec がそのまま維持されます。timestamp カラムのデフォルトは変更されていません (CODEC(DoubleDelta, ZSTD(1))) 。#114790 (Nikita Mikhaylov).
  • 分散プランクエリ (make_distributed_plan) は、結果全体を計算して破棄するのではなく、LIMIT を満たした時点で上流ステージを停止するようになりました。 #114806 (Alexander Gololobov).
  • 実験的な ReaderExecutor の読み取りパス (デフォルトでオフの use_reader_executor) に、ユーザー空間ページキャッシュ層を追加しました。キャッシュミス時には executor がユーザー空間ページキャッシュを設定し、以降の読み取りはゼロコピーでそこから提供されます。 #114890 (Sema Checherinda).
  • make_distributed_plan = 1 で実行されるクエリで、ROLLUPCUBEGROUPING SETS、および grouping 関数をサポートしました。 #114950 (Alexander Gololobov).
  • PromQL クエリで範囲セレクター内に offset を使用した場合に発生するエラー Illegal type Decimal(18, 0) of argument of function toIntervalNanosecond を修正しました。例: rate(m[2m] offset 5m)#114997 (Nikita Mikhaylov).
  • 非常に大きな distributed_plan_workers_num が指定されても、実験的な make_distributed_planenable_cascades_optimizer が有効な場合に、サーバーが std::length_error で異常終了しなくなりました。このようなノード数は INVALID_SETTING_VALUE で拒否されるようになりました。 #115398 (Groene AI).
  • Cascades optimizer によって構築された分散プランでの GROUPING SETS 集約をサポートしました (make_distributed_plan = 1, enable_cascades_optimizer = 1) 。 #115426 (Alexander Gololobov).
  • TimeSeries テーブルで “最近のサンプル” テーブルを保持できるようになりました。新しいエンジン設定 recent_samples_ttl_seconds がゼロ以外の場合、エンジンは samples テーブルの有効期限 (TTL) 付きコピーを作成します (recent_samples_partition_by でパーティション化され、デフォルトは日単位) 。このコピーにはすべての挿入時に書き込まれ、time range が TTL ウィンドウ内に収まる PromQL クエリは自動的にそこから読み取ります。これにより、大規模テーブルでの alert/recording rules と短期間のダッシュボードが数倍高速になります。この優先設定は、新しいクエリレベル設定 time_series_prefer_recent_samples_table で無効にできます。 #115441 (Nikita Mikhaylov).
  • TimeSeries からの SELECT クエリを実装しました。 #115622 (Vitaly Baranov).
  • TimeSeries テーブル向けに Prometheus HTTP API の /api/v1/series エンドポイントを実装しました。match[] シリーズセレクター (繰り返し指定された値は和集合) 、任意の start/end time range、および任意の limit パラメーターをサポートします。 #115676 (Nikita Mikhaylov).
  • 分散クエリプラン (make_distributed_plan) では、LIMIT が満たされた後、アイドル状態のアップストリームステージを速やかに停止するようになりました。アイドル状態の exchange sink は NoMoreDataNeeded の到着を即座に読み取り、アイドル状態の exchange source は出力が閉じたことを検知して停止をアップストリームに伝播します。以前は、このようなステージは消費されないデータの読み取りと計算を続けていました。#115690 (Alexander Gololobov) 。
  • parallel_replicas_plan_based が有効な場合、自動並列レプリカでランタイム統計を収集し、サポート対象のクエリで並列レプリカを有効にできるようになりました。#115788 (Igor Nikonov) 。
  • TimeSeries テーブルの外部の最新サンプルテーブルを、参照整合性上の依存関係として登録します。#115944 (Groene AI) 。

パフォーマンス改善

  • 並列 GROUP BY 向けの新しいアダプティブアルゴリズム (設定 enable_adaptive_aggregator で制御、デフォルトで有効) :各スレッドは adaptive_aggregator_freeze_threshold 個のキーに達するまで専用のハッシュテーブルで集計し、その後そのテーブルを固定します。これにより、頻出キーは協調なしでキャッシュ常駐の小さなテーブルを更新し続け、まれなキーはハッシュに基づいてバケットごとのバックログに振り分けられ、バケット並列マージ内で正確に1回集計されます。 #111459 (Nihal Z. Miaji).
  • スキーマから導出されるパーツ単位のメタデータ (カラムリスト、カラム定義、シリアライゼーション、カラムのサブストリーム) を各パーツにコピーするのではなく、テーブル内のパーツ間で共有することで、多数のデータパーツを持つ MergeTree テーブルのメモリ使用量を削減しました。この効果は、多数の小さなパーツを持つ列数の多いテーブルで特に大きくなります。 #109816 (Raúl Marín).
  • 集計中にサイズが制限されたヒープを維持し、結果に含まれないグループを枝刈りすることで、GROUP BY ... ORDER BY ... LIMIT および GROUP BY ... LIMIT クエリを最適化します。これにより、高カーディナリティのグループ化におけるメモリ使用量と実行時間を大幅に削減します。設定 enable_group_by_top_k_optimization で制御されます。Dmitriy Terenichev による初期実装 (#78553) に基づいています。 #96630 (Konstantin Bogdanov).
  • 単一の String 集計キーに対するハッシュテーブルのセルサイズを削減し、文字列を多用する GROUP BY ワークロードの性能を向上しました。新しい設定 enable_packed_string_keys_in_aggregation はデフォルトで有効です。これを無効にするか、compatibility26.8 未満に設定すると、従来の StringHashTable 方式に戻ります。この方式は、11バイトを超えるキーを使用した非常に低カーディナリティの集計では、依然としてより高速な場合があります。 #110573 (Harikrishnan Prabakaran). #112089 (Harikrishnan Prabakaran).
  • デフォルトで有効な新しい設定 enable_parallel_single_level_merge により、単一レベルの集計ハッシュテーブルの最終マージを並列化します。これにより、スレッドごとのハッシュテーブルは2レベルのしきい値未満にとどまる一方で、そのマージが実行時間の大半を占める GROUP BY クエリを高速化します。 #110395 (Nihal Z. Miaji).
  • 入力ストリームが重複除去対象のカラムの接頭辞でソートされている場合、DISTINCT のパフォーマンスを向上しました。たとえば、SELECT DISTINCT a, b FROM table ORDER BY a のようなクエリです。このようなクエリは最大2.4倍高速に実行されます。 #110170 (Nihal Z. Miaji).
  • パーティション化された MergeTree テーブル上の DISTINCT クエリでは、各パーティションの行を単一ストリーム内に保持することで、高速化とメモリ使用量の削減を実現します。これにより、同じキーセットが複数の事前 DISTINCT に現れるのではなく、各ストリームの事前 DISTINCT が互いに重複しないキーセットを処理します。これは、パーティション式が DISTINCT カラムの決定論的関数である場合に適用され、パーティション数と偏りに基づくコストヒューリスティックで制御されます (デフォルトで無効の設定 force_distinct_partitions_independently で切り替え可能) 。同じパーティション単位の非重複性は、ExpressionFilterARRAY JOIN の各ステップを通じて最終的な DISTINCTLIMIT BYGROUP BY コンシューマーにも伝播されるため、これらもマージをスキップできます。新しい設定 allow_distinct_partitions_independently (デフォルトで有効) と、ヒューリスティックを調整するための max_number_of_partitions_for_independent_distinct で制御されます。 #108326 (Nihal Z. Miaji).
  • キーなし集約における関数 uniquniqExactuniqHLL12 を最適化しました。#110150 (Anton Popov).
  • Parquet V3 リーダーで、カラムチャンクが完全に辞書エンコードされている場合、等価条件および IN 条件に対し、最小値/最大値統計やブルームフィルタに加えて辞書ページを使用し、行グループ全体をスキップできるようになりました。新しい input_format_parquet_dictionary_filter_push_down 設定で制御されます。#106952 (Alexey Milovidov). #110567 (Alexey Milovidov).
  • Iceberg テーブルを含むオブジェクトストレージ上の Parquet ファイルの読み取りに、遅延マテリアライゼーションを導入しました。ORDER BY ... LIMIT n クエリでは、ソートとフィルタリングに不要なカラムは、LIMIT 通過後の n 行についてのみ読み取られます。S3 上の 200 MB の Parquet ファイルでは、SELECT k, s ... ORDER BY k DESC LIMIT 10 は 171 MB ではなく 3.3 MB を読み取ります (I/O が 51 分の 1、8 倍高速) 。新しい設定 query_plan_optimize_lazy_materialization_for_object_storage で制御されます (デフォルトで有効。query_plan_optimize_lazy_materialization も必要です) 。#110970 (Alexey Milovidov). * ORDER BY ... LIMIT n クエリ向けの遅延マテリアライゼーション (#110970) が、file テーブル関数および File テーブルエンジンで読み取るローカル Parquet ファイルにも適用されるようになりました。ソートとフィルタリングに不要なカラムは、LIMIT 通過後の n 行についてのみ読み取られます。残ったファイルの 2 回目の読み取りでは、2 回の読み取りの間にファイルが変更されていると、新しい FILE_CHANGED_DURING_READ エラーによりクローズに失敗します。新しい設定 query_plan_optimize_lazy_materialization_for_file で制御されます (デフォルトで有効) 。また、要求されたサブカラム (例: JSON カラムのサブカラム) が遅延されると、オブジェクトストレージでの遅延マテリアライゼーションが Not found column or subcolumn ... in block で失敗する問題も修正しました。#114262 (Alexey Milovidov).
  • テーブルの現在のアクティブサイズと書き込み対象ブロックのサイズの合計が、新しい materialize_statistics_on_insert_max_table_size 設定 (デフォルトは 25 GiB) 以下の場合、カラム統計がデフォルトで INSERT 時にマテリアライズされるようになりました。このチェックは書き込み対象ブロックごとに行われるため、空のテーブルへの最初の一括ロードでは、書き込まれる各ブロックで統計がマテリアライズされる場合があります。これにより、コストベースの join オプティマイザは新たにロードされたディメンションテーブルに対して正確な推定値を取得でき、非効率な join 順序を回避できます (たとえば、TPC-H Q5 と Q8 はスケール係数 40 でもタイムアウトしなくなります) 。一方、大規模な既存のファクトテーブルでは、マージ中に統計のマテリアライズが継続されます。#109454 (Alexey Milovidov).
  • パーティション化された MergeTree テーブルで window functions を高速化しました。各パーティションを専用ストリームで読み取り、パーティションごとにウィンドウを評価することで、通常はウィンドウソート前にすべての行をスレッド間で再分散するハッシュスキャッターを省略します。これは、テーブルのパーティション式が window PARTITION BY カラムの決定論的関数であり、パーティションごとの GROUP BY / DISTINCT と同じコストヒューリスティック (max_threads に対して十分な数のパーティションがあり、支配的なパーティションがない) を満たす場合に適用されます。新しい設定 allow_window_partitions_independently (デフォルトで有効) 、force_window_partitions_independentlymax_number_of_partitions_for_independent_window で制御されます。#114783 (Nihal Z. Miaji).
  • パックされたパートの書き込み時に、パートのコミット中に完全なコピーをもう 1 つメモリに保持する代わりに、最終アーカイブを宛先ファイルへ直接ストリーミングすることで、メモリ使用量を削減しました。#111995 (Alexey Milovidov).
  • 新しい join_algorithmparallel_full_sorting_merge を追加しました。ハッシュ互換の等価結合では、結合キーのハッシュに基づいてフルソートマージ結合を独立した分片ごとのマージ結合に分割し、すべてのスレッドで実行します。マージ結合の低いストリーミングメモリ使用量を維持したまま並列化できます (ベンチマークでは parallel_hash より約2.4倍高速で、メモリ使用量は約3.3分の1) 。ASOF 結合は単一の full_sorting_merge にフォールバックします。ハッシュ非互換のキー型 (浮動小数点、JSONObjectDynamic) ではハッシュ分散の書き換えのみをスキップし、query_plan_join_shard_by_pk_ranges が有効な場合は、主キー範囲に基づいてソース側で分片化できます。結果は順序付けされません。#109005 (Alexey Milovidov).
  • Parquet リーダーに、行グループおよびページレベルでの GeoParquet 空間プルーニングを追加しました。行グループのプルーニングでは、バウンディングボックスがクエリジオメトリと重複しない行グループ全体をスキップします。ページレベルのプルーニングでは、covering.bbox カラム索引を使用して行グループ内の不要なページをスキップします。また、空間述語のプッシュダウンが Parquet の行読み取り時にも適用されるようになりました。#104435 (Vasily Chekalkin).
  • Parquet フィルタープッシュダウン (行グループのプルーニングおよびカラム索引) が、より多くの型変換をサポートするようになりました。DateTime64(x) <-> DateTime64(y)Decimal(x) <-> Decimal(y)Float32 <-> Float64#110457 (Michael Kolupaev).
  • たとえば主キーやスキップ索引によってマーク範囲が断片化されている場合に、リモートディスクに対する重複した読み取りリクエストを削減しました。#113584 (Anton Popov).
  • クラスタリングされた (例: 主キーでソートされた) カラムに対する IN の実行を高速化しました。連続する等しい行では前の行’の結果を再利用します。#114853 (Nikita Mikhaylov).
  • GROUP BY キーを持たない集約では、単一行の出力を max_threads ストリームに展開しなくなりました。これにより、このような集約の後に処理が続くクエリでは、並列度を損なうことなくパイプラインが大幅に小さくなります (作成、スケジュール、プロファイルが必要なプロセッサが減少) 。#115170 (Nikita Mikhaylov).
  • Keeper は、ロック競合を抑えて changelog エントリを読み取るようになりました。catch-up 読み取りは共有ロック下で計画され、ディスク I/O はロックなしで実行されます。また、フォロワーの catch-up とコミットパスの両方で、バックグラウンドスレッドプールによりエントリを事前デコードできるため、リーダーでの冗長なディスク読み取りと CPU デコードを削減します。#108473 (Antonio Andelic).
  • Keeper の起動を高速化しました。changelog ファイルを直列ではなく並行して読み取ります。これは新しい設定 log_startup_read_max_streams および log_startup_read_buffer_size で制御されます。#109881 (Antonio Andelic).
  • system.metric_log に新しい bucketed スキーマ型を追加しました。128 バケットのバケット化 Map シリアライゼーションを使用して、すべてのメトリクスを単一の Map(Enum16(...), Int64) カラムに格納し、互換性のためにメトリクスごとの ALIAS カラムを追加します。テーブルは数千ではなく少数のカラムで構成され、ゼロ値は格納されず、単一のメトリクスを読み取る際は 128 バケットのうち1つだけを読み取ります。さらに、Enum キーを持つ Map は、map['name'] のように列挙値の文字列名でインデックス参照できるようになりました。#115380 (Alexey Milovidov).
  • ボリュームを削減する関数 (lengthlengthUTF8emptynotEmpty) をSortingおよびFilterステップより下にプッシュダウンし、幅の広いString / FixedString引数を固定サイズの結果に置き換えるクエリプラン最適化を追加しました。これにより、ソート時にバッファリングされず、フィルターによるコピーも不要になります。新しい設定query_plan_push_down_volume_reducing_functionsで制御され、デフォルトで有効です。#106199 (Peng).
  • read_in_order_use_virtual_rowをデフォルトで有効にしました。多数のパーツを持つテーブルを主キー順 (例: ORDER BY primary_key LIMIT n) に読み取る場合、実際に結果に寄与するパーツのみが読み取られます (並列読み取りを維持するため、最大max_threads個のパーツを先読みするウィンドウを除く) 。これにより、ピークメモリ使用量が大幅に削減されます。#106215 (Alexey Milovidov).
  • 集計関数を使用しない集計クエリでは、対応するキー型についてHashMapではなくHashSetベースの手法を使用するようになりました。最大1.8倍の高速化が確認されています。#108862 (Nikita Taranov).
  • プローブ側が小さいと推定される場合、JOINランタイムフィルターのオーバーヘッドを回避します。しきい値は新しいjoin_runtime_filter_min_probe_rows設定 (デフォルト1000) で制御されます。#104860 (Vladimir Cherkasov).
  • nullIf(key, sentinel) = constのような述語を含むクエリで、主キー、パーティション、およびスキップ索引によるプルーニングを使用できるようになりました。#107308 (Aditya Kumar).
  • MergeTreeパーツおよびテーブルメタデータ用の専用jemallocアリーナを制御するjemalloc_merge_tree_arenasサーバー設定を追加しました。多数コアのサーバーでは、CPUごとのプールにより同時実行マージ間のアロケータロック競合を軽減でき、専用アリーナには長期間存続するメタデータのみが保持されるようになりました。#109490 (Raúl Marín).
  • 固定幅整数カラムなど、マッチオフセットが小さいカラムに対するx86_64でのZSTD解凍を、SSSE3 pshufbによって短いオフセットの重複コピーをベクトル化することで高速化しました。たとえば、UInt64カラムの解凍はAMD Zen 5で最大約1.2倍高速になります。#110909 (Konstantin Bogdanov).
  • uniqExactと同様にCRC32ハッシュを使用し、行ごとの挿入をインライン化することで、数値型のgroupUniqArrayを最大3倍高速化しました。#110917 (Manuel).
  • NONEコーデック使用時のestimateCompressionRatioを高速化しました。#111107 (Raufs Dunamalijevs).
  • 多数のパーツを持つテーブルのスナップショットをコミットする際のCFSスロットリングを軽減するため、デフォルトのmax_snapshot_commit_thread_pool_sizebackup_threadsに合わせて16へ引き下げました。#111417 (Han Fei).
  • 非常に多数のファイルを持つテーブルのスナップショットをコミットする際のCPU使用量を削減しました。#112297 (Han Fei).
  • 重複排除が無効な場合、async-insertの重複排除ハッシュの事前ウォームアップをスキップします。#111549 (Sema Checherinda).
  • ON 条件が常に false となる JOIN (例: ON 1 = 2ON NULLa.t = 'A' AND a.t = 'B') で、結果に寄与しない側を読み取らなくなりました。query_plan_short_circuit_constant_false_join 設定で制御され、デフォルトで有効です。#110234 (Groene AI).
  • 現在のマニフェストの解析中に次のマニフェストファイルをプリフェッチし、I/O と CPU 処理を並列化することで、Iceberg テーブルの読み取りを高速化しました。#108543 (Asya Shneerson).
  • 小さい LIMIT を指定して主キー順に読み取る FINAL を含むクエリで、split_intersecting_parts_ranges_into_layers_final を使用しなくなりました。#110431 (Nikolai Kochetov).
  • 右側に NULL の結合キーまたは ON 式でフィルタリングされる行が含まれる場合に、null マップの再構築を回避することで、parallel_hash アルゴリズムを使用する RIGHT および FULL JOIN のパフォーマンスを改善しました。#111258 (Hechem Selmi).
  • 多数の一致を含む数 MB の検索対象文字列で関数の実行に数分かかる可能性があった二次計算量の問題を修正し、countSubstringsCaseInsensitiveUTF8 を高速化しました。#112003 (Groene AI).
  • 実験的な TimeSeries エンジンの Prometheus Query API (/api/v1/query/api/v1/query_range) が、単一スレッドではなくクエリを並列に実行するようになりました。#112108 (Nikita Mikhaylov).
  • TimeSeries サンプル内部テーブルで自動作成される timestamp および value カラムのデフォルトが、それぞれ CODEC(DoubleDelta, ZSTD(1)) および CODEC(Gorilla, ZSTD(1)) になりました。#112110 (Nikita Mikhaylov).
  • system.query_log のインジェストにおけるパフォーマンスリグレッションを修正しました。Settings および asynchronous_read_counters のマップカラムの構築が以前より約 6 倍遅くなっており、多数の設定が変更されたクエリを多く記録するサーバーでは、SYSTEM FLUSH LOGS query_log が 180 秒のタイムアウトを超過する可能性がありました。#112191 をクローズします。#112210 (Groene AI).
  • ON セクションに複数の OR 選言肢がある RIGHT および FULL ハッシュ JOIN と、残余 (不等式) 条件を持つ RIGHT/FULL JOIN のパフォーマンスを改善しました。#111590 (Hechem Selmi).
  • ロック解除処理で使用しないデータパーツごとのメタデータを読み込まないことで UNLOCK SNAPSHOT のメモリ使用量を削減し、非常に多数のパーツを含むスナップショットでのメモリ不足を回避しました。#111849 (Julia Kartseva).
  • 非同期 INSERT のフラッシュ中に JSON カラムの動的パスに対するメモリ事前割り当てを復元し、バッチ行の追加時に繰り返し再割り当てが発生することを回避しました。#112222 (Groene AI).
  • マージ中の TTL ... GROUP BY 集約に対する連続キー最適化を再有効化しました。この処理経路では誤って無効化されていたため、結果は正しかったものの、マージで必要以上の処理が行われていました。#112314 (Groene AI).
  • input_format_binary_decode_types_in_binary_format が有効な場合に、NativeRowBinary などのバイナリエンコード形式から Nested カラムを読み取る処理を高速化し、不正なネストされた Tuple 型名を、解析に指数関数的な時間を費やす代わりに構文エラーとして報告するようにしました。 #112560 (Alexey Milovidov).
  • 動的バリアントや JSON パスが多い Dynamic および Object カラムのまとめる処理とマージ処理のパフォーマンスを改善しました。 #110583 (Christoph Viebig).
  • 128 ビットおよび 256 ビット型 (Int128UInt128Int256UInt256Decimal128Decimal256) での minmax を高速化しました。幅の広い整数では最大 1.8 倍、幅の広い小数では最大 3.4 倍高速です。 #111965 (Manuel).
  • ディスク上の 2 つの機能をデフォルトで有効化し、ベータに昇格させました。1) packed_skip_index_max_bytes = '1M': 最大 1 MiB のスキップ索引サブストリームを、パーツごとに単一の skp_idx.packed アーカイブへ書き込むようになり、オブジェクトストレージ上のオブジェクト数と書き込みリクエストを削減します。互換性: 影響を受けるのは新たに書き込まれるパーツのみで、古いバージョンでも完全に読み取り可能です。26.6 より前のバージョンでは、プルーニングに packed 索引を使用しないだけです (マテリアライズされていないものとして扱われます) 。スタンドアロンのファイルごとのレイアウトを維持するには、packed_skip_index_max_bytes = 0 を設定します。2) compute_exact_num_defaults_for_sparse_columnsoptimize_trivial_count_with_sparsity_filter: カラムごとの正確な num_defaults カウンターを永続化し、述語によって行がデフォルト値と非デフォルト値に分かれる場合に、データスキャンなしで SELECT count() FROM t WHERE <pred> に応答するために使用します。互換性: serialization.jsonexact_num_defaults フラグは古いバージョンでは無視されるため、ダウングレード後もパーツは完全に読み取り可能です。count の書き換えは正確なカウンターを持つパーツにのみ適用されるため、パーツが混在するテーブルでも結果の正確性は維持されます。 #111816 (Raúl Marín).
  • テキスト索引に存在しないトークンに対するオプションのキャッシュ機能を追加しました。 #112742 (Rory Shanks).
  • 共有データとして JSON 値を保持する Array の複製時に、再割り当てが二次的に発生する問題を修正しました。たとえば、集計関数に渡される定数の Array(JSON) が該当します。このようなクエリでは、行数に対して二次的に増加するバイト数がコピーされていました。 #112897 (Groene AI).
  • 点を表す引数が Point 型 (または 2 つの数値要素を持つ別の Tuple) のキーカラム全体である場合、pointInPolygon で主キー索引を使用するようにしました。たとえば、coord で順序付けられたテーブルでは pointInPolygon(coord, [...]) のように指定します。以前は、2 つのスカラーキーカラムを使用する pointInPolygon((x, y), [...]) 形式のみが解析されていました。#54805 を解決します。 #112956 (Alexey Milovidov).
  • TTLDrop マージではデータ読み取りステップを完全に省略し、特に読み取りバッファーと先読みバッファーのメモリ使用量を削減します。#105639 を解決します。 #105859 (Pavel Kruglov).
  • ファイルエントリをコピーする代わりにインメモリマップへ移動することで、バックアップメタデータの読み取り時のメモリ割り当てを削減しました。 #111718 (Julia Kartseva).
  • arrayFilter(s -> s != '', ...) のような空文字列との比較を式に含む場合、optimize_empty_string_comparisons = 1 によって notEmpty に書き換えられてもテキスト索引を使用します。#111788 をクローズしました。#112115 (Jimmy Aguilar Mena) 。
  • lightweight DELETE 後のクエリ条件キャッシュによる枝刈りを復元しました。これまでに lightweight DELETE が実行されたテーブルに対する選択性の高い繰り返しクエリで、すべてのマークの読み取りにフォールバックしなくなりました。#112947 (Nikita Fomichev) 。
  • enable_lazy_columns_replication が有効な場合、高階関数は配列要素ごとにキャプチャしたカラムを物理的にコピーしなくなり、大きなカラムをキャプチャするラムダのメモリ使用量とコピー時間を削減します。#111581 (Diego Gomes Tomé) 。
  • Dynamic キーおよび JSON パスのサブカラムに対する GROUP BY において、26.5 で導入された約1.5倍のパフォーマンスリグレッションを修正しました。#112316 (Utkal Singh) 。
  • text_index_posting_list_apply_mode のデフォルトが lazy になりました。これにより、posting_list_codec が設定されたテキスト索引では、テキスト索引クエリがポスティングリストをビットマップに即座にマテリアライズするのではなく、カーソルを使用してパックドブロック粒度でオンデマンドにデコードします。#113521 (Anton Popov) 。
  • TimeSeries テーブルに対する PromQL クエリを高速化しました。連続する行が同じ series ID を持つ場合、timeSeriesIdToGroup は前の行のグループを再利用するようになり、行ごとの ID シリアライゼーションとハッシュ検索をスキップします。#113580 (Nikita Mikhaylov) 。
  • PromQL 集約演算子 topkbottomklimitk は、すべての series を単一の行に収集するのではなく、メモリ使用量が上限付きのストリーミング並列実行計画を使用するようになりました。以前は MEMORY_LIMIT_EXCEEDED で失敗していた高カーディナリティのメトリクスに対するクエリも、メモリ使用量を上限内に抑えて実行されるようになりました。#113656 (Nikita Mikhaylov) 。#114409 (Alexey Milovidov) 。
  • 256ビット整数 (Int256UInt256Decimal256) の除算を高速化しました。intDivmoduloDecimal256 の演算、およびこれらの型からテキストへの変換に影響します。#112477 (Konstantin Bogdanov) 。
  • 必要な変換時に解決済みのサブカラムメタデータを再利用することで、JSON サブカラムに対する MergeTree の読み取りパフォーマンスを改善しました。#113008 (Rory Shanks) 。
  • sparseGrams トークナイザーを使用したテキスト索引およびブルームフィルターベースのスキップ索引の構築を高速化しました。#110541 (UnamedRus) 。
  • スナップショットの作成で専用のスレッドプールを使用するようになったため、負荷の高い同時 BACKUP によってリソースが枯渇することがなくなりました。#113509 (Han Fei) 。
  • 複数のプランステップで共有される PromQL サブ式 (topk/bottomk/limitk のオペランド、or の左辺) を、2 回ではなく 1 回だけ評価するようにしました。PromQL から生成される SQL で共有サブクエリがマテリアライズされるようになりました。これにより Samples テーブルの重複スキャンがなくなり、rate に対する topk はコールド時で約 2 倍高速化され、kubernetes-mixin のルールクエリは 10~29% 改善されます。 #113772 (Nikita Mikhaylov).
  • enable_function_early_short_circuit 設定により、解析時に組み込みの andor に対する早期短絡畳み込みを有効にできるようになりました。通常の型推論と意味論的検証を維持しながら、到達不能な単一行の count() スカラーサブクエリの実行をスキップできます。#83017 を解決します。 #83505 (fhw12345).
  • PREWHERE 条件の順序付けで I/O コストと選択性を組み合わせるようにしました。これにより、#101275 以降に導入された、一部のケースにおける PREWHERE 実行のパフォーマンスリグレッションを修正します。#110462 の一部です。 #110695 (Pavel Kruglov).
  • ブロック化された Myers コードパスで行ごとのヒープ割り当てを回避することで、ARM 上の中程度の長さの文字列に対する levenshteinDistance (および editDistance) のパフォーマンスを改善しました。 #108185 (Groene AI).
  • 通常の MergeTree マージでバッチソートキューを任意に使用できる merge_use_batch_sorting_queue MergeTree 設定を追加しました。ソートマージのコストが大きいマージワークロードにおいて、CPU 使用量と実時間を削減します。 #108468 (Rory Shanks).
  • コア数の多いサーバーで実行される通常のローカル非順序・少数カラムの MergeTree スキャンにおいて、過剰な読み取りストリームとパイプラインのオーバーヘッドを削減する merge_tree_min_bytes_per_read_stream 設定を追加しました。 #109035 (Jiebin Sun).
  • SECONDMINUTEHOUR の間隔における関数 toStartOfInterval (エイリアス: time_bucketdate_bin) を最大 5 倍高速化しました。 #109729 (Manuel).
  • ネイティブプロトコルでは、両方のピアのプロトコルリビジョンが 54489 以降の場合、String カラムを値ごとの varint 長プレフィックスではなく、累積バイトオフセットの個別ストリーム (Array のオフセットと同じレイアウト) の後に連結データを続ける形式で送信するようになりました。これにより、クライアントは正確にバッファを事前割り当てし、単一の一括コピーで String カラムを読み取ることができ、値ごとのレイアウトより約 4 倍高速です。古いクライアントとサーバーには影響しません。レイアウトはプロトコルリビジョンを通じてネゴシエートされます。同じレイアウトは、新しい設定 output_format_native_write_string_with_size_stream / input_format_native_read_string_with_size_stream を通じて Native および Buffers フォーマットでも利用できます (デフォルトではオフのため、フォーマットの可搬性は維持されます) 。 #110320 (vahid-sohrabloo).
  • iceberg_metadata_log_level が呼び出し元のしきい値を下回る場合、Iceberg マニフェストエントリの不要な JSON シリアライゼーションを回避します。 #110437 (Andy Bradshaw).
  • 疎なシナリオにおける full sorting merge join のパフォーマンスを最大 1.5~3 倍改善しました。 #111200 (Vladimir Cherkasov).
  • 浮動小数点カラムに対する minmax および基本的なカラム統計を効率化しました。 #111221 (Christoph Viebig).
  • プローブ側とビルド側の結合キーの型が異なる場合 (例: Nullable のプローブキーと非 Nullable のビルドキー) に、join_runtime_filter_from_fixed_hash_table を有効化しました。 #111244 (Hechem Selmi).
  • COUNT() クエリの結果をテキスト索引のカーディナリティメタデータから直接返すようにしました。 #111494 (Elmi Ahmadov).
  • 共有データに格納された JSON/Object カラム値の行単位のハッシュ化を高速化しました。これは、JSON カラムに対する uniq/uniqExact や、ハッシュ化された GROUP BY/DISTINCT キーなどで使用されます。値ごとの ColumnDynamic の再構築を回避しています。ハッシュ値は変更されません。 #111501 (Valery Petrov).
  • 非定数パターンを使用する関数 mapContainsKeyLikemapContainsValueLikemapExtractKeyLikemapExtractValueLike は、enable_lazy_columns_replication が有効な場合、メモリ使用量と実行時間を削減します。パターンはキャプチャ時にマップエントリごとに即座にコピーされなくなり、内部ラムダの実行時までコピーが遅延され、より早く解放されます。そのため、ピーク時のパターンの展開済みコピーが 1 つ減ります。 #111749 (Diego Gomes Tomé).
  • パスが共有データに格納されている JSON カラムに対するソートおよびその他の比較ベースの操作を高速化しました。以前は、値を比較するたびに一時的な Dynamic カラムをマテリアライズし、両側で完全なバイナリデシリアライゼーションを実行していたため、このようなカラムに対する ORDER BY は極端に低速でした。 #111894 (Groene AI).
  • clickhouse-client は各クエリの前にサーバーへ ping を送信しなくなり、クエリごとのネットワーク往復が不要になりました。また、サーバーの ping 応答が遅いという理由だけで接続を再確立しなくなりました。これにより、新しいセッションが暗黙的に開始され、一時テーブル、現在のデータベース、セッション設定が失われることもなくなります。 #111990 (Alexey Milovidov).
  • 推移的条件の最適化をより適切に使用するようにしました。推移性によって作成される追加フィルターは、フィルター全体を適用できない場合の索引解析にのみ使用されるようになりました。optimize_and_compare_chain 設定を参照してください。 #112076 (Yarik Briukhovetskyi).
  • shrink_over_allocated_columns_min_waste_ratioshrink_over_allocated_columns_min_waste_bytes の 2 つの設定を追加しました。これらにより、INSERT 時に、可変長カラムの 2 の累乗による拡張のため予約メモリが使用メモリを上回っている過剰割り当てカラムを、マテリアライゼーションおよびパートへの書き込みの前に適切なサイズへ縮小し、ピークメモリ使用量を削減します。デフォルトでは無効です。 #112161 (Pavel Kruglov).
  • ARRAY JOIN の遅延カラムレプリケーションが、クエリプランのシリアル化時に失われなくなりました。serialize_query_plan = 1 の場合、リモートプランフラグメントを実行するノードは、設定がデフォルトで有効であるにもかかわらず、以前は enable_lazy_columns_replication を無視し、レプリケートされたすべてのコピーを常に実体化していました。#112330 (Groene AI).
  • Decimal 値をテキストにフォーマットする処理が大幅に高速化されました。スケールが大きい Decimal256 では最大190倍、Decimal64 では約1.6倍高速です。AVX-512 IFMA を搭載したプロセッサでは、64ビット整数からテキストへの変換が約1.4倍高速になります。また、小数部からの桁上がりが失われていた toDecimalString の丸めも修正されました。toDecimalString(toDecimal64('9.995', 3), 2) は以前 9.00 を返していましたが、現在は 10.00 を返します。#112457 (Konstantin Bogdanov).
  • WHERE の等価条件で、オペランドの型が異なっていても Int32Nullable(Int32) のように共通スーパータイプを持つ場合、その条件が JOIN 条件にマージされるようになりました。これにより、CROSS JOIN を INNER JOIN に変換できます。#112630 (Hechem Selmi).
  • 多数の削除ファイルを持つ Iceberg テーブルに対するクエリの開始が高速化されました。ClickHouse は削除マニフェストファイルを1つずつではなく同時に読み取り・デコードするため、ストレージからの読み取りが並行して行われます。新しい設定 iceberg_delete_manifest_decode_concurrency (デフォルトは 4) で、同時にデコードする数を制御します。#112679 (Asya Shneerson).
  • 非同期ロギングで、有界ロックフリーキューを使用するようになりました。ログメッセージを書き込むスレッドが、ミューテックスでブロックされたりロギングスレッドを起床させたりすることはありません。#112803 (Alexey Milovidov).
  • 定数ベクトルに対する randomHadamardTransform が、行ごとではなく1回だけ評価されるようになりました。これにより、QBit カラムとの比較前に randomHadamardTransform でクエリベクトルを回転させるベクトル検索クエリが高速化されます。#112921 (Alexey Milovidov).
  • 主キーカラムに対する IN (subquery) でフィルタリングする1つの mutation の part タスク間での Set 共有を復元しました。enable_sharing_sets_for_mutations はデフォルトでオンですが、主キー分析用に構築された Set が共有 cache に含まれなくなっていたため、N 個の part を持つテーブルでは同じ Set が N 回実体化されていました。#112941 (Groene AI).
  • 異なる構造を持つ多数のテーブルにまたがる Merge テーブルとの JOIN で、クエリプランニングの計算量が3次になる問題を修正しました。このようなクエリでは、以前は max_execution_timeKILL QUERY に応答せず、クエリプランニングに数分かかることがありました。#113140 (Alexey Milovidov).
  • S3 クライアントのバケットリージョン cache がデータレイクカタログでも機能するようになりました。以前は、データレイクカタログへのリクエストごとにリージョンが再度解決されていました。#113330 (Konstantin Vedernikov).
  • GROUP BY キーを持たない aggregation が、使用されることのないハッシュテーブルサイズの cache キーを計算するために、定数畳み込みされたリテラルの内容全体を含む入力プランサブツリー全体を実行ごとにシリアル化していたパフォーマンス低下を修正しました。SELECT quantileMerge(arrayJoin(arrayMap(x -> state, range(5000000)))) のようなクエリでは、以前は実行ごとにクエリプラン最適化に約63 msを費やしていましたが、現在は0.15 msです。#113333 (Groene AI).
  • UInt128/UInt256/Int128/Int256 を DECIMAL としてオプトインで Parquet シリアライゼーションできるようにし、行グループおよびページのプルーニングを可能にしました。 #113347 (Ivan Babrou).
  • uniq_v2 カラム STATISTICS 使用時のクエリプランニングを高速化しました。推定される一意の値の数を、クエリプランニングでクエリごとに何度も発生するリクエストのたびに再計算するのではなく、キャッシュするようにしました。(issue #113038). #113357 (Groene AI).
  • 高度な共有データから JSON パス全体を読み取る際、不要なサブストリームをプリフェッチしないようにしました。 #113380 (Pavel Kruglov).
  • Parquet および ORC ファイルの Tuple サブカラムでフィルタープッシュダウンが機能するようになりました。file()s3()、または url() に対する WHERE tup.1 = 555555 のような述語では、ファイル全体を読み取る代わりに、タプル要素自体の統計を使用して行グループと行インデックスストライドをプルーニングするようになりました。 #113383 (Groene AI).
  • timeSeries*ToGrid 集約関数内のバケットごとのハッシュマップを、フラットなソート済みサンプル配列に置き換えました。これにより、順序どおりの入力 (圧倒的に多いケース) ではサンプルのインジェストが O(1) の追加処理となり、最終処理時のバケットごとのコピーとソートが不要になります。 #113681 (Nikita Mikhaylov).
  • TimeSeries エンジンにおける PromQL クエリパフォーマンスを改善しました。内部セレクター SQL がサンプルテーブルのプライマリキーカラムを直接読み取り (何もしないキャストを行わず) 、series-id セットより先にタイムスタンプ範囲を確認するようになったため、コールド状態でセレクターを多用するクエリが 30~44% 高速化されます。 #113768 (Nikita Mikhaylov).
  • 時系列タグ collector で型付き ID マップを使用するようにしました。 #113839 (Vitaly Baranov).
  • ソートキーがすべて定数である MergeTree パーツの書き込み時に、冗長なソート済み状態のスキャンをスキップするようにしました。 #113899 (Perfloop Agent).
  • 正規の ID ジェネレーターを使用する ID レイアウトが 2 要素タプルである場合、単一メトリクスのすべての series に一致する PromQL セレクターは、巨大な id IN <set> 条件ではなく、索引解析時に id の連続したプライマリキー範囲を使用して TimeSeries テーブルの Samples テーブルをフィルタリングするようになりました。セレクターを多用する PromQL クエリにおける支配的なシングルスレッドの索引解析コストを削減します。620 億サンプルのテーブルで、ダッシュボードおよびルールクエリのパターンではコールドレイテンシが最大 45% 短縮され、フルスイート全体のコールド時の幾何平均は 11% 改善されます。 #114131 (Nikita Mikhaylov).
  • タググループ ID がコンパクトな範囲に収まる場合、ハッシュベースの再マッピングを直接インデックス化に置き換えることで、ベクトル化された TimeSeries タグ変換を高速化しました。 #114244 (Minh Vu).
  • Prometheus HTTP API エンドポイント /api/v1/query および /api/v1/query_range では、複数のプランステップで共有される PromQL サブクエリを、prometheusQuery および prometheusQueryRange テーブル関数と同様に一度だけ評価するようになりました。以前は、enable_analyzer = 0 を指定したリクエスト、またはこれを設定するプロファイルを持つユーザーによるリクエストでは、参照するステップごとに共有サブクエリを再スキャンしていました。 #114261 (Groene AI).
  • カラム STATISTICS から col IN (...) の選択性を推定するコストを抑制しました。これまで単一クエリのプランニングに数百ミリ秒かかることがありました。推定器は、選択性の値を 1 つ得るだけのために col IN (subquery) 内のサブクエリを実行してセットを構築することはなくなり、未構築のセットはスキップされます。新しい statistics_max_set_size_for_exact_selectivity_estimation 設定 (デフォルト: 10000) を超えるセットでは、セットのサイズと値域から選択性を導出します。#114389 (Nikita Taranov).
  • 同名のクエリパラメータやヘッダーを多数含む HTTP リクエスト (たとえば role= パラメータが数千回繰り返される場合) の解析が、二次時間を要しなくなりました。#114410 (James).
  • 26.7 のリグレッションを修正しました。DateTime64 カラムの toUnixTimestamp (または他の整数変換) で順序付けた MergeTree テーブルで、そのカラムに対する単純な範囲フィルターが主キーを使用せず、一致するパートのすべてのグラニュールを読み取っていた問題を修正しました。さらに、生の DateTime64 カラムで順序付けたテーブルでは、toInt64(ts) >= c のようなフィルターでも主キーを使用するようになりました。#114413 (Alexey Milovidov).
  • ColumnArray の負荷の高い整合性チェックは、デバッグビルドでのみ実行するようになりました。#114469 (Anton Popov).
  • ソート記述がすべて定数の分散 gather では、マージソートを実行しないようにしました。#114626 (Groene AI).
  • パーティション化された MergeTree テーブルでの IN (subquery) のセット構築を高速化しました。各パーティション’の行を単一ストリームに保持し、各ストリームで個別に重複を排除することで、従来はすべての行を直列にハッシュしていた単一のセット充填変換が、一意の行だけを処理するようにしました。これは、パーティション式がサブクエリ’の出力カラムの決定論的関数である場合に適用されます。最大パーティションの行数が平均パーティションの 2 倍を超える場合、この最適化は適用されません。新しい設定 force_creating_set_partitions_independently (デフォルトでは無効) を使用すると、このチェックを回避できます。新しい設定 allow_creating_set_partitions_independently (デフォルトでは有効) で制御されます。#114645 (Nihal Z. Miaji).
  • マージ前に、スレッドごとの集約状態を単一レベルから二レベルへ変換する処理を並列化しました。これにより、集約メモリの計上を正確化した 26.7 開発ビルドで導入された、多数のコアを持つマシンでの重い集約状態 (例: COUNT(DISTINCT ...)、ClickBench Q10/Q11) を伴う短い GROUP BY クエリの 2~3 倍のリグレッションを修正しました。#114691 (Alexey Milovidov).
  • timeSeries*ToGrid 集約関数を高速化しました。サンプルごとのバケット計算で Int128 除算を回避し、同じバケットに含まれる連続サンプルではハッシュマップの検索をスキップするようになりました。#114889 (Nikita Mikhaylov).
  • システムログキューへの追加時、キューの拡張に伴ってキュー全体をディープコピーしなくなりました。#115030 (Groene AI).
  • timeSeries*ToGrid 集約関数のサンプルを、同一のグリッドバケットに含まれる連続サンプルのまとまりとして処理するようにしました。これにより、ソート済み時系列データにおける timeSeriesRateToGrid および関連関数のサンプル取り込み段階を 1.2~2 倍高速化します。#115041 (Nikita Mikhaylov).
  • PromQL の集合演算子で compact な存在マスクを使用するようにしました。#115224 (Minh Vu).
  • PromQL インスタントクエリの評価を高速化しました。timeSeries*ToGrid 集計関数は、単一点グリッドでベクトル化されたサンプル分類パスを使用し、timeSeriesIdToGroup は結果カラムを直接埋めるようになりました。#115267 (Nikita Mikhaylov).
  • ON 句に OR で結合された複数の等価条件を持つ JOIN で、クエリが選択しない右側のキーカラムをマテリアライズしなくなりました。#115465 (Nikita Taranov).
  • DateTime または DateTime64 型の指定時に、参照されない UTC タイムゾーンのルックアップテーブルを構築しなくなりました。これにより、これらの型の構築、および clickhouse localclickhouse client の起動が高速化されます。#115488 (Konstantin Bogdanov).
  • システムテーブルのアタッチ時に、テーブルコメントを設定するだけのために、完全なカラム定義を含む各テーブルのメタデータを 2 回コピーしなくなりました。#115490 (Konstantin Bogdanov).
  • クライアントのホスト名は、clickhouse clientclickhouse local の呼び出しごとではなく、初回の報告時に解決されるようになりました。#115491 (Konstantin Bogdanov).
  • 関数 h3kRingh3ToChildrenh3PolygonToCellsh3PolygonToCellsWithContainment が多数の行に対して結果を構築する際の二次時間を修正しました。196,000 行に対するクエリでは、CI ストレステストでメモリコピーに 838 秒を要していましたが、現在は約 5 秒です。#115773 (Groene AI).
  • すべてゼロの PromQL 条件ベクトルに対する重複 series チェックを高速化しました。#115822 (Minh Vu).
  • StringFixedStringLowCardinality キーに対する集計関数なしの GROUP BY を高速化しました。クエリは、未使用のプレースホルダーをすべての行でハッシュテーブルに書き込むのではなく、新しいキーを追加する行でのみ書き込むようになりました。#115834 (Nikita Taranov).
  • DateTime64 引数に対する toUTCTimestamp/to_utc_timestamp および fromUTCTimestamp/from_utc_timestamp を高速化し、#109738 のオーバーフロー修正前のスループットを復元しました。結果に変更はありません。#115802 をクローズします。#115838 (Groene AI).
  • 大きな定数畳み込み済みリテラルに対するキー付き集計でのメモリ使用量とクエリプラン最適化時間を削減しました。集計ハッシュテーブル統計キャッシュキーは、まずメモリに蓄積するのではなく、シリアル化と同時にハッシュ化されるため、大きなリテラルを含むプランは最適化中にそのコピーを保持しなくなります。80 MB のリテラルでは、ピークメモリが約 250 MB、最適化時間が約 2.5 倍削減されます。計算されるキーに変更はありません。#115847 (Groene AI).

改善

  • 送信される OpenAI 形式の HTTP リクエストに、アップストリームエンドポイントの識別に使用する、呼び出し元 AI 関数の SQL 名がタグ付けされるようになりました。 #110449 (George Larionov).
  • 正形式の LIMIT BY におけるキャンセル遅延を短縮しました。KILL QUERY と Ctrl+C は、ステップ全体の完了を待たずに、単一のチャンク内で中断するようになりました。 #106070 (Roman Vasin).
  • 挿入パイプラインの構築中に materialized view の TO ターゲットテーブルが書き込みを拒否して INSERT が失敗した場合、エラーメッセージには単なるストレージエラーではなく、その materialized view とターゲットテーブルの名前が表示されるようになりました。 #107234 (Groene AI).
  • input_format_protobuf_oneof_presence 使用時、ClickHouse は oneof の存在を示す列挙型に Protobuf スキーマで宣言されたタグを厳密に列挙することを要求しなくなりました。ターゲットテーブル内に対応するカラムがない追加のタグも許可されるようになり、スキーマ変更が容易になります。 #109174 (Ilya Golshtein).
  • QBit 向けの転置距離関数 (L2DistanceTransposedcosineDistanceTransposeddotProductTransposed およびその量子化バリアント) が、検索対象の次元数より長い参照ベクトルを受け入れ、末尾の余分な要素を無視するようになりました。これにより、縮小次元の Matryoshka 検索で、フルサイズのクエリベクトルをあらかじめスライスせずに再利用できます。 #109388 (Alexey Milovidov).
  • basic 統計の NullCount サブ統計は DefaultCount に改名され、Nullable カラムの NULL 行だけでなく、カラム型のデフォルト値に等しい行をカウントするようになりました。 #109977 (Han Fei).
  • ローカルディスク上の Iceberg テーブルへの同時書き込みをサポートしました。LocalObjectStorage が条件付き書き込みを実装したことで、version-hint.text を通じて新しいスナップショットを公開する compare-and-swap が利用可能になり、同時に書き込むライター同士で更新が失われることはありません。 #112556 (Alexey Milovidov).
  • 粒度に互換性のない 2 つの MergeTree テーブル間での ALTER TABLE ... MOVE/REPLACE PARTITION は、LOGICAL_ERROR ではなく BAD_ARGUMENTS をスローするようになりました。 #110535 (Groene AI).
  • ストリーミングパースから SQL 式のパースへのフォールバックが成功した場合、Values フォーマットは system.errors および system.error_log に誤ったパースエラーを記録しなくなりました。 #111141 (Pablo Marcos).
  • *MergeTree テーブルへの INSERT ブロックの重複排除中に実行される、カラム単位のデータハッシュ計算をカウントする DuplicationDataHashComputations ProfileEvent を追加しました。 #111173 (Valery Petrov).
  • universal インストールスクリプトの出力で、./clickhouse および sudo ./clickhouse install コマンドを強調表示するようになりました。 #111514 (Alexey Milovidov).
  • アナライザ使用時、Cartesian join およびアナライザがプランニングした定数述語 join は、互換性のない join_algorithm 設定が原因で失敗しなくなりました。 #108289 (János Benjamin Antal).
  • bitmaskToArraybitmaskToListInt128UInt128Int256UInt256 の引数をサポートするようになりました。bitPositionsToArray も、最上位のセットビット位置ではなくセットビット数に応じてスケールするようになったため、大整数の引数に対して高速化されました。 #110743 (Manuel).
  • ホスト OS に適した LLVM ホストトリプルを使用することで、ネイティブのソースからビルドした macOS/aarch64 環境における JIT コンパイル済み式のクラッシュを修正しました。 #111591 (Raúl Marín).
  • タプルパス引数に LowCardinality 要素が含まれる Dynamic 入力に対する JSON_EXISTSJSON_VALUEJSON_QUERY を修正し、LOGICAL_ERROR 例外を回避しました。#110345 をクローズします。 #109944 (Groene AI).
  • 型ツリーでストライプフッターより多くのカラムが宣言されている破損した ORC ファイルでは、デバッグ/サニタイザービルドで中断する代わりに、スキーマ推論が CANNOT_EXTRACT_TABLE_STRUCTURE で失敗するようになりました。 #110967 (Groene AI).
  • system.metric_log などのローテーションされたシステムログテーブルは、メタデータが max_query_size を超える場合でも table_readonly としてマークできるようになりました。これにより、ローテーション時に QUERY_IS_TOO_LARGE がログに記録されなくなり、正常に続行されます。 #111703 (Alexey Milovidov).
  • Play に、現在のタブ以外のすべてのタブを閉じるボタンを追加しました。 #111835 (Mikhail Artemenko). このボタンが自身を非表示にする場合、Enter または Space で有効化した後のキーボードフォーカスを修正しました。 #111899 (Alexey Milovidov).
  • Play では、値がイメージ URL のテーブルセルにマウスオーバーした状態で Ctrl (Mac では Cmd) を押すと、イメージプレビューが表示されるようになりました。 #109347 (Alexey Milovidov).
  • Linux では、rseq が使用できない場合、CPU ごとのプロファイルカウンターが低速な sched_getcpu パスにフォールバックするため、ClickHouse は起動時に system.warnings エントリを追加するようになりました。 #109283 (Azat Khuzhin).
  • スキーマ推論によってカラムが Nullable でラップされる場合でも、file テーブル関数に対する COUNT(*) が例外をスローしなくなりました。#102044 をクローズします。 #102509 (Rory Shanks).
  • 関数 L1NormalizeL2NormalizeLinfNormalizeLpNormalize (およびそれらの別名) が、L2Norm および距離関数と同様に、Tuple 引数だけでなく Array 引数でも動作するようになりました。 #110052 (Alexey Milovidov).
  • 従来の Apache Arrow ベースの ORC リーダーを削除しました。ORC 入力フォーマットでは、すでにデフォルトだったネイティブ ClickHouse デコーダが常に使用されるようになりました。input_format_orc_use_fast_decoder 設定は廃止され、効果はありません。 #110074 (Alexey Milovidov).
  • よく使用される clickhouse-client の引数を XML (<hints/><highlight/><echo/><echo_query_id/><echo_formatted/><print-profile-events/>) で設定可能にしました。また、history_max_entriessuggestion_limitprogressprogress-tableenable_progress_table_toggleprint-memory-to-stderrchime-threshold-secondsprofile-events-delay-ms などの設定では、対応するデフォルト値付き CLI フラグを省略した場合にクライアント設定の値が保持されるようにしました。 #110607 (Larry Snizek).
  • JOIN の最も左側のテーブルに指定した FINAL が、結合される他のテーブルにも適用される従来の動作を復元するため、analyzer_compatibility_apply_final_to_all_joined_tables 設定を追加しました。この設定は設定変更履歴に登録されているため、26.6 より前のバージョンとの compatibility では従来のセマンティクスが自動的に復元されます。 #111589 (Nikita Fomichev).
  • Play で、+ (新しいタブ) ボタンが Firefox で正しい高さに表示されるようになりました。 #109524 (Alexey Milovidov).
  • 直接の外側のクエリよりさらに外側のスコープにあるカラムを参照するネストされた相関 EXISTS サブクエリで、内部の NOT_FOUND_COLUMN_IN_BLOCK 例外ではなく NOT_IMPLEMENTED が返されるようになりました。 #110310 (Groene AI).
  • AST の書き換え後に EXECUTE AS クエリをフォーマットしても、たとえば AST fuzzer においてクライアント側の例外がスローされなくなりました。 #111725 (Groene AI).
  • パラメーター化ビューに対する DESCRIBE クエリのサポートを改善し、新しいアナライザでスカラー式内のパラメーター化ビューをサポートしました。#66307 をクローズします。#69598 をクローズします。 #68978 (Dmitry Novik).
  • format-parse-format の往復処理を通過できない不正な CREATE INDEX および CREATE HYPOTHETICAL INDEX 式で、デバッグおよび sanitizer ビルドにおいて Inconsistent AST formatting 論理エラーに至る代わりに例外が報告されるようになりました。 #109175 (Groene AI).
  • Web UI: 認証情報が正しく、サーバーに到達可能な場合でもユーザー名/パスワードフィールドが赤いままになる問題を修正しました。また、接続の編集後に認証情報を再確認し、正しい値が緑色で表示されるようにしました。 #109414 (Alexey Milovidov).
  • テキスト索引ビルダーが一時セグメントをフラッシュするタイミングを制御するため、text_index_max_processed_tokens_before_flush および text_index_max_memory_usage_before_flush 設定を追加しました。 #111573 (Rory Shanks).
  • use_split_cache が有効な場合にシステム cache に格納するファイル拡張子を制御する system_cache_extensions 設定を追加しました。 #111575 (Kirill).
  • musl ベースのビルドでは、エラーメッセージに strerror: 0 のような空または数値の値ではなく、人が読める strerror テキストが表示されるようになりました。 #111620 (Konstantin Bogdanov).
  • 実際に使用される名前付きコレクションのストレージタイプが、system.server_settingsnamed_collections_storage.type および getServerSetting('named_collections_storage_type') から取得できるようになりました。 #111806 (Pablo Marcos).
  • ColumnReplicated::permute の過度に厳格な置換サイズチェックを緩和し、制限が設定されている場合にカラムより短い置換を許可する、一般的な IColumn::permute の契約に従うようにしました。 #109897 (Groene AI).
  • 内部のストリーミング読み取りプランを統一することで、ストリーミングクエリのプランニングを改善しました。これにより、直接テキスト索引読み取りの二重最適化を回避します。 #111821 (Mikhail Artemenko).
  • Web UI: Run one ボタンと Run all ボタンの間隔が、最初のボタンの左余白と同じになりました。 #111988 (Alexey Milovidov).
  • メモリ予約スケジューリング (実験的) では、保留中のメモリ解放によって上限超過の予約増加に必要な領域を確保できる場合、割り当てをエビクションしなくなりました。エビクションの判断は転送中の減少が適用されるまで待機するため、メモリ逼迫時に不要なクエリ停止を回避できます。 #112299 (Sergei Trifonov).
  • Iceberg v2 ではマニフェストファイルに sequence_number が必要ですが、BigQuery などの他のエンジンではこれなしでマニフェストファイルを書き込むことがあります。ClickHouse でこのようなテーブルを読み取れるようになりました。 #112431 (Konstantin Vedernikov).
  • join reordering 用の統計情報がない場合に警告を表示するようにしました。 #107666 (Vladimir Cherkasov).
  • INFORMATION_SCHEMA ビューに MySQL 互換のカラムを追加しました: SCHEMATA.DEFAULT_COLLATION_NAMEDEFAULT_ENCRYPTIONTABLES.ENGINE および関連する MySQL カラム、さらに COLUMNS.COLUMN_KEYPRIVILEGESGENERATION_EXPRESSIONSRS_ID。これにより、MySQL 対応クライアントは UNKNOWN_IDENTIFIER を発生させずにカタログイントロスペクションクエリを実行できます。 #109351 (Alexey Milovidov).
  • ON 条件で等しいとされる INNER JOIN キーへの無修飾の参照 (例: SELECT id FROM a INNER JOIN b ON a.id = b.id) は、両側が同じ値を持つことが保証されるため、曖昧な識別子として報告されなくなりました。 #109366 (Alexey Milovidov).
  • HTTP インターフェイス経由の ACCESS_DENIED 例外に対し、HTTP コード 500 Internal Server Error ではなく 403 Forbidden を返すようにしました。 #111043 (Schum).
  • UNIQUE KEY 索引 SST をローカル一時ファイルにステージングせず、直接パートストレージに書き込むようにしました。これにより、ローカル一時ボリュームへの依存と余分なコピーをなくします。 #111189 (johnjing).
  • UTMToGeo は、整数の半球フラグに加え、第 4 引数として geoToUTM が返す MGRS 緯度帯文字を受け入れるようになりました。これにより、geoToUTM の結果を直接 UTMToGeo で往復変換できます。 #111521 (Alexey Milovidov).
  • part_minmax_index_columns を下げた後 (たとえば with_block_number_offset から partition_key_only に戻した場合) に、デバッグ/サニタイザービルドでバックグラウンドマージが中断される可能性のあった LOGICAL_ERROR (“Part level Min-Max index was constructed from unexpected columns set”) を修正しました。 #111511 (Groene AI).
  • ディスクにスピルする JOIN で、ProfileEvents['JoinResultRowCount'] が結果サイズを過少報告する問題を修正しました。遅延バケットから出力された行は JoinDelayedJoinedTransformRowCount にのみ計上され、合計には含まれていませんでした。クエリ結果は常に正しく、誤っていたのはプロファイルイベントのみでした。#112673 (Groene AI).
  • SYSTEM DISABLE FAILPOINT は、SYSTEM ENABLE FAILPOINT と同様に、存在しないフェイルポイント名を拒否し、BAD_ARGUMENTS を発生させるようになりました。以前は名前を誤入力しても成功と報告され、意図したフェイルポイントは有効なままでしたが、何も無効化されなかったことは示されませんでした。#112680 (Groene AI).
  • system.tables テーブルに新しい列 skipping_indices_types を追加しました。この列には、各テーブルに定義されたデータスキップインデックスの型が重複なく格納されます。#106388 (Anton Popov).
  • 分散クエリに常に既知のクライアントバージョンが含まれていることを検証する健全性チェックを追加しました。これにより、バージョン 0 をリモート分片へ黙って転送するのではなく、論理エラーを発生させます。サーバー起点のクエリ (バックグラウンドフラッシュ、ストリーミングコンシューマー、Dictionary の再読み込み、非同期挿入のフラッシュ) は、イニシエーターバージョンとしてサーバー自身のバージョンを報告するようになりました。#109408 (Alexey Milovidov).
  • MergeTree におけるパートごとの主キー二分探索診断について、トレースログからテストログに変更し、詳細度を下げました。#110324 (Alexey Milovidov).
  • オブジェクトストレージテーブル (例: S3) の Hive パーティション化サンプルパスは、CREATE/ATTACH 時ではなく、テーブルの初回使用時に解決されるようになりました。これにより、到達不能なエンドポイントによってテーブルの作成やサーバーの起動が妨げられなくなります。#111842 (Nikolay Degterinsky).
  • ReadBufferFromPocoSocketBase::setReceiveTimeout が引数をマイクロ秒ではなく秒として適用していた問題と、-DENABLE_LIBFIU=OFF を設定したビルドがコンパイルできなかった問題を修正しました。libfiu を含まないビルドでは、SYSTEM ENABLE FAILPOINT および関連コマンドは何もせずに終了するのではなく、例外をスローするようになりました。#112767 (Alexey Milovidov).
  • clickhouse-localJSON/XML 出力の statistics および進行状況バーで rows_read やその他の進行状況カウンターを過少報告する問題を修正しました。進行状況パケットの組み立て中に到着した進行状況の増分が破棄されていました。#112958 (Alexey Milovidov).
  • Distributed テーブルへの非同期 INSERT で、名前がファイルシステムの 255 バイト制限を超えるキューディレクトリが必要となる場合 (use_compact_format_in_distributed_parts_names = 0 で発生可能) に報告されるエラーを修正しました。以前は、internal_replication を持つ分片では LOGICAL_ERROR、それ以外では発生元情報のない Code: 1001. std::exception が報告されていましたが、現在はいずれもテーブル、クラスター、制限を示す ARGUMENT_OUT_OF_BOUND を報告します。#113083 (Groene AI).
  • execution_time のクォータ制限が範囲外の場合、内部ナノ秒にスケーリングする際に未定義の動作に依存するのではなく、BAD_ARGUMENTS で拒否するようにしました。#113178 (Alexey Milovidov).
  • 自動並列レプリカが JOIN クエリをサポートするようになりました。#106073 (Nikita Taranov).
  • OneLake カタログでリフレッシュトークン認証をサポートしました。#110413 (alesapin).
  • write_snapshot_version Keeper 設定がホットリロード可能になりました。#112150 (alesapin).
  • SYSTEM DROP FILESYSTEM CACHE を並列化しました。#112532 (Kseniia Sumarokova).
  • s3ClusterurlCluster、または fileCluster を対象とする SQL SECURITY DEFINER または SQL SECURITY NONE ビューの非対応のネストは、デバッグビルドおよび sanitizer ビルドで LOGICAL_ERROR になる代わりに、通常のクエリエラーとして拒否されるようになりました。#113371 (Groene AI).
  • 設定 analyzer_compatibility_multiple_joins_qualify_column_names (デフォルトは false) を追加しました。有効にすると、クエリの FROM 句に 2 つ以上の JOIN が含まれる場合、アナライザが生成する結果カラム名は、古いアナライザによる複数 JOIN の書き換えを模倣します。* から展開されたカラムには <alias-or-table>.<column> という名前が付けられ、SELECT リスト内のエイリアスなしカラム参照は記述どおりの名前を維持します。これにより、SELECT ll.Date FROM (SELECT * FROM t AS ll JOIN t1 ON ... JOIN t2 ON ...) のように修飾名を参照する外側のクエリが、古いアナライザと同様に動作します。また、group_by_use_nullsROLLUPCUBE、または GROUPING SETS と組み合わせた際に、アナライザが * から展開されたカラムの修飾済み結果カラム名を失う問題も修正しました。この問題は、結果カラム名の重複を引き起こし、それらのカラムへの外側からの参照を失敗させていました。#110746 (Dmitry Novik).
  • allow_experimental_delta_kernel_rsallow_delta_kernel_rs に改名しました。古い名前はエイリアスとして維持されます。#113476 (Kseniia Sumarokova).
  • remote/remoteSecure テーブル関数または Remote/RemoteSecure テーブルエンジンに、存在しない名前付きコレクションと key = value によるオーバーライドを同時に指定した場合、ClickHouse は呼び出しを位置指定形式で再解析して無関係なエラーを報告する代わりに、存在しない名前付きコレクションを報告するようになりました。#113510 (Groene AI).
  • ユーザー補完フックから補完が読み込まれた場合、clickhouse-bootstrap の補完機能を使用したシェル起動時に環境変数が出力されなくなりました。#113694 (Azat Khuzhin).
  • shared_merge_tree_merge_coordinator_distribution_algorithmsainte_lague 値を追加し、water_filling に代わるデフォルト値にしました。#113442 (Mikhail Artemenko).
  • 別のクエリが単一チャンク (約 1 MiB、ファイルセグメント全体ではない) をファイルシステムキャッシュにダウンロードしている間、読み取りが待機する時間を制限する設定 filesystem_cache_wait_for_concurrent_download_timeout_milliseconds を追加しました。#113322 (Kseniia Sumarokova).
  • Keeper 設定 min_time_between_fsyncs_ms (デフォルトは 5 ms) を追加しました。これにより、前回のフラッシュ直後に到着した changelog への追記は、すぐに別のフラッシュを開始するのではなくバッチ処理されます。#113749 (Michael Kolupaev).
  • Keeper にオフセットを保存する Kafka テーブル (kafka_keeper_path) は、たとえば直接読み取りやマテリアライズドビューのストリーミング中に、Keeper セッションの喪失後にテーブルが非アクティブになった場合、LOGICAL_ERROR ではなく ABORTED をスローするようになりました。#113913 (Alexey Milovidov).
  • viewIfPermitted の AST フォーマットの不整合を修正しました。テーブル関数形式では、ELSE 分岐内の not などの演算子が誤ってフォーマットされなくなり、式形式の viewIfPermitted(...) に不要な ELSE が追加されなくなりました。#113652 (Alexey Milovidov).
  • database_atomic_wait_for_drop_and_detach_synchronously が有効な状態で、リフレッシャブルmaterialized view のリフレッシュが (たとえばサーバーのシャットダウンにより) キャンセルされた際に記録される、不要な Failed to drop temporary table after refresh. Table ... is left behind and requires manual cleanup. エラーを修正しました。一時テーブルは実際には削除されていたため、手動でのクリーンアップは不要でした。#113957 (Groene AI).
  • サーバー設定内の未知の設定オプションに対して、サーバーが UNKNOWN_ELEMENT_IN_CONFIG をスローするようになりました。これにより、タイプミスや誤った設定を早期に検出できます。このチェックは <skip_check_for_incorrect_settings> で無効にできます。#100332 (Alexey Milovidov).
  • Web UI では、キーを押すたびにブラウザー履歴と URL が更新されなくなりました。クエリが正常に実行されたとき、またはタブを切り替えたときに記録されます。#113596 (Alexey Milovidov).
  • ClickHouse は、何も出力せずに終了するのではなく、スタックオーバーフローを報告するようになりました。致命的なシグナルハンドラーは代替シグナルスタック上で実行されるため、障害が発生したスレッドのスタックが枯渇している場合でも、SIGSEGVSIGABRTSIGILLSIGBUSSIGSYSSIGFPESIGTRAP によってスタックトレースが生成されます。#113927 (Groene AI).
  • 名前付き Tuple に対する ALTER TABLE ... MODIFY COLUMN <col> Tuple(...) は、サブフィールドの追加のみの場合、メタデータのみの操作となり、トップレベルの ADD COLUMN と同等の速度になりました。SET allow_metadata_only_named_tuple_alter = 1 により有効化されます。#107305 (Amos Bird).
  • パース時の JSON object サイズを制限する input_format_json_max_object_size 設定を追加しました。#106704 を解決します。#107669 (Pavel Kruglov).
  • Kerberos keytab 認証を使用しない Kafka エンジンの設定に対して、sasl.kerberos.kinit.cmd configuration parameter is ignored. をログに記録しないようにしました。#108235 (Ivan Shelestov).
  • system.s3(azure)_queue_metadata を追加しました。#108522 (Kseniia Sumarokova).
  • リモート MySQL/PostgreSQL データベースへの許容可能な接続失敗を、エラーではなく警告としてログに記録するようにしました。#109472 (Shaohua Wang).
  • portsecure も指定されていない場合、clickhouse-client はデフォルトポート 9000 とセキュアポート 9440 の両方を同時に試行し、先に応答した方を使用します。そのため、clickhouse-client --host play.clickhouse.com --user play は、--secure を指定しなくても TLS 経由で接続します。このサーバーの通常ポートは接続を拒否するのではなく、応答なしで切断されます。応答したポートが使用不能であることが判明した場合 (たとえば、信頼されていない証明書を持つセキュアポートの場合) 、プロトコルが明示的に指定されていないため、クライアントはもう一方のポートにフォールバックします。#110130 (Alexey Milovidov).
  • Playground のクラウドロゴをクリックすると、新しいタブで ClickHouse のウェブサイトが開くようになり、クエリの実行中に進行状況が失われることがなくなりました。 #110422 (William Hatcher).
  • STREAM BOUNDED 修飾子を追加しました。ストリーミングクエリでは最初のスナップショットのみを読み取り、更新をサブスクライブせずに終了します。 #110653 (Smita Kulkarni).
  • EXPLAIN ANALYZE に JOIN の内部状態に関する情報を追加しました。 #110892 (Kirill Kopnev).
  • RWLockImpl::getLock() の再入アサーションが発生した場合 (RWLock is already locked in exclusive mode / Cannot acquire exclusive lock while RWLock is already locked) 、エラーメッセージに、現在ロックを所有している他の query_id と、要求元の query_id がすでに保持しているロック数が表示されるようになりました。これにより、このようなロック順序エラーを診断できます。 #110971 (Groene AI).
  • ClickHouse Keeper は、“Client has not sent any data” イベントを Warning ではなく Information レベルでログに記録するようになりました。これはサーバーの TCP handler と整合しています。これにより、Keeper クライアントポートへの接続を開いてすぐに閉じる TCP ヘルスチェック probe (たとえば Kubernetes の tcpSocket liveness probe) による不要な警告を回避します。 #111217 (Zeynel).
  • MaterializedPostgreSQL は、更新時に変更されていない PostgreSQL の TOAST 値をデフォルト値で置き換えるのではなく、保持するようになりました。 #111552 (OrpheusAgent).
  • keeper: デフォルトの write_snapshot_version を 8 に引き上げ、ホットリロード可能にしました。 #111715 (Michael Kolupaev).
  • STREAM UNORDERED 修飾子を追加しました。スナップショットごとのコミット順ソートをスキップします。 #111794 (Smita Kulkarni).
  • テキスト索引のオンディスクフォーマットバージョン (v0_initialv1_with_codecv2_with_positions) を制御する、新しい MergeTree setting text_index_version を追加しました。ローリングアップグレード中またはダウングレード前に古いバージョンに設定すると、新しいサーバーでも古いサーバーが読み取れるフォーマットでテキスト索引 part を書き込み続けます。互換性設定により自動的に調整されます。 #111803 (Anton Popov).
  • AI テキスト関数 (aiGenerateaiClassifyaiExtractaiTranslate) は、部分的な出力を黙って返すのではなく、切り詰められた、またはその他の不完全なプロバイダーレスポンス (例: モデルが max_tokens 制限に達した場合) を拒否するようになりました。動作は ai_function_throw_on_error 設定に従います。 #111830 (George Larionov).
  • p < 8QBit(Int8) コードをガウス条件付き平均プレフィックス重心で再構築することで、低精度の L2DistanceTransposedQuantizedcosineDistanceTransposedQuantizeddotProductTransposedQuantized を改善しました。元の精度 (p = 8) ではビット単位の正確性が維持されます。低精度の近似距離は変化する可能性があり、再現率とレイテンシの向上はワークロードに依存します。 #111867 (Sergey Kuznetsov).
  • 複数の AND 条件を持つ WHERE clause で、最後以外の連言条件によって除外された granule に対して query condition cache が格納されなかった問題を修正しました。 #112083 (Shankar Iyer).
  • JSON カラムの構築時に内部 String バッファーが2のべき乗で増加する際の増加量を制限し、大規模な JSON ドキュメントの挿入時のピークメモリを削減する新しい設定 input_format_json_max_string_column_growth_step を追加しました。デフォルトでは無効です。 #112159 (Pavel Kruglov).
  • バケット化された共有データのシリアライゼーション (map_with_buckets および advanced) で JSON カラムを書き込む際、すべてのバケットを同時にマテリアライズするのではなく、書き込み時に共有データを1バケットずつ分割することで、ピークメモリを削減しました。これは主に Array(JSON) カラムで効果があります。スカラー JSON では、共有データは粒度ごとに分割され (index_granularity_bytes による上限あり) 、削減効果は小さい一方、単一の Array(JSON) 粒度には多数のネストされた行、ひいては大量の共有データを含められるため、1バケットずつ分割することでピークメモリを大幅に削減できます。 #112172 (Pavel Kruglov).
  • 組み込みの /docs ページおよび help コマンドで表示される system.documentation の設定ドキュメントに、デフォルト値の変更履歴が含まれるようになりました。設定が導入されたバージョン、それ以降のデフォルト値のすべての変更、変更前後の値、および変更理由が表示されます。 #112177 (Alexey Milovidov).
  • EXPLAIN ANALYZE がストリーミングクエリで動作するようになりました。 #112445 (Kirill Kopnev).
  • カラム宣言の修飾子である COMMENTCODECSTATISTICSTTLCOLLATEPRIMARY KEY、およびカラムごとの SETTINGS を、CREATE TABLE で任意の順序で、それぞれ1回まで記述できるようになりました。以前は固定された1つの順序のみが受け入れられ、たとえば x UInt64 CODEC(ZSTD) COMMENT 'text' は構文エラーでした。ALTER TABLE ... ADD COLUMN / MODIFY COLUMN では、サポートされる修飾子である COMMENTCODECSTATISTICSTTL、およびカラムごとの SETTINGS も任意の順序で記述できます。ADD COLUMN のカラムごとの SETTINGS と、ADD COLUMN / MODIFY COLUMN で宣言された STATISTICS は、暗黙的に破棄されるのではなく適用されるようになりました。また、これらの ALTER コマンドの COLLATEPRIMARY KEY は、暗黙的に無視されるのではなく例外をスローするようになりました。 #112788 (Alexey Milovidov).
  • pread_threadpool 読み取り方式では、読み取りをスレッドプールに渡さずにページキャッシュ内にすでにあるデータを読み取るため、RWF_NOWAIT フラグを指定した preadv2 システムコールが必要です。起動時にこのシステムコールを使用できるか確認するようになり、使用できない場合 (Linux カーネルが 5.11 より古い、またはコンテナーランタイムの seccomp プロファイルがシステムコールを拒否する場合) は、local_filesystem_read_method のデフォルト値が pread に切り替えられ、その理由がサーバーログに記録されます。以前は、このようなシステムではすべての読み取りでスレッドプールへの受け渡しコストが発生し、EPERM を返す seccomp プロファイルではクエリが CANNOT_READ_FROM_FILE_DESCRIPTOR で失敗していました。 #112945 (Alexey Milovidov).
  • 形式が不正な Parquet thrift メタデータを INCORRECT_DATA として報告するようになりました。 #113311 (Groene AI).
  • 負の数を含む符号付き固定幅値に対する GCD codec の処理を修正しました。以前は符号付き値から直接除数を計算していたため、公約数を見逃し、符号付き整数および小数カラムの圧縮効率が大幅に低下する可能性がありました。現在は、符号なし型および圧縮解除の既存の動作を維持しつつ、符号付き型では絶対値から除数を計算します。 #113798 (Kirill Shcherbatov).
  • 各実験的圧縮コーデックを個別に有効化するための設定 enable_alp_codecenable_sz3_codecenable_zxc_codecenable_quantized_codec を追加しました。#113824 (Raufs Dunamalijevs) 。
  • キーで使用されるサブカラムがオンディスク互換の型を維持する限り、主キーまたはパーティションキーでサブカラムが使用されているカラムに対する ALTER TABLE ... MODIFY COLUMN を許可するようになりました。以前は、このような ALTER はすべて禁止されていました。#113862 (Pavel Kruglov) 。
  • system.dashboardsFilesystem cache ダッシュボードを追加しました。#113884 (Kseniia Sumarokova) 。
  • バッファの再充填ごとのキャッシュログは、filesystem_cache_verbose_logging が有効な場合にのみ出力されるようになりました。#113885 (Groene AI) 。
  • MergeTree の読み取り中にカラムの宣言型とデータの型が不一致となった場合 (型の由来が混在している場合。たとえば、mutation が完了していない ALTER TABLE ... MODIFY COLUMN の後など) 、サーバーは未チェックのキャストを行う代わりに、カラム名と両方の構造を示す明確な例外を報告するようになりました。以前は、debug および sanitizer build ではカラム名を示さない単なる Bad cast from type A to B で中断し、release build では不整合なメモリを黙って走査していました。#114087 (Alexey Milovidov) 。
  • PARTITION BY を含む window function が make_distributed_plan で動作するようになりました。plan の構造が許す場合、完全なパーティションをそれぞれ受け取るバケット間で window が並列に実行されます。#114111 (Vighnesh Pathrikar) 。
  • Web UI: データベースパネルの砂時計型読み込みインジケーターが再びアニメーション表示されるようになりました。#114187 (Alexey Milovidov) 。
  • 外部 Nullable 固定幅集約メソッドで 64 ビットハッシュ関数が使用されるようになりました (非常に高いカーディナリティの集約で発生するハッシュ衝突の問題を回避します) 。#114210 (Nikita Taranov) 。
  • カラムリストを省略した Distributed および Buffer テーブルでは、作成ユーザーのアクセス権に基づいて常に構造を推論するようになりました。#114211 (Pedro Ferreira) 。
  • LowCardinality カラムに対する x IN (subquery)LowCardinality(UInt8) を返すようになりました。これは x IN (literal list) と同じ型です。以前は、この2つの形式は異なる型を返しており、このような IN を含む distributed plan では plan の型チェックで特別なケースが必要でした。#114229 (Alexander Gololobov) 。
  • ie_join をデフォルトで有効化しました。join_algorithm のデフォルト値は direct,parallel_hash,hash,ie_join になりました。ON セクションに不等価条件 (結合対象テーブルの式どうしを比較する <<=>>= の比較が2つ) のみを含む JOIN は、フィルター付きの CROSS JOIN ではなく、ソートベースの IEJoin アルゴリズムで実行されるようになりました。また、このような条件を含む LEFT/RIGHT/FULL/SEMI/ANTI join がサポートされます。ie_join はリストの最後にあるため、他のアルゴリズムが適用されない場合にのみ使用されます。#114327 (Vladimir Cherkasov) 。
  • Web UI のチャートで、x の降順で並べた結果に対し、ホバーバルーンに対称点のデータが表示される問題を修正しました。DateDate32DateTimeDateTime64 列をプロットできるようになりました。以前は整数の Unix タイムスタンプしか使用できませんでした。軸上とバルーン内の日付は ISO 8601 形式で表示され、数量には高度なダッシュボードと同様に K/M/G/… の接尾辞が付きます。#114349 (Alexey Milovidov).
  • JSON データ型、JSONExtract、および isValidJSON で、64 ビットの範囲を超える整数の解析をサポートしました。このような値はドキュメント全体を拒否するのではなく、Int128/UInt256 などのより広い整数型として読み取られます。#114379 (Pavel Kruglov).
  • QueryRunner テーブルは、テーブルのライフタイム全体にわたってスレッドを占有するのではなく、必要に応じてワーカースレッドを起動し、アイドル状態になると解放するようになりました。#114522 (Miсhael Stetsyuk).
  • リモートレプリカとの非同期通信に使用されるファイバーのスタックに関するオブザーバビリティを追加しました。プロファイルイベントは FiberStackAllocsFiberStackAllocBytesFiberStackAllocNanosecondsFiberStackFreeNanoseconds、メトリクスは FiberStacksFiberStackBytes です。#114541 (Alexey Milovidov).
  • PromQL: @ start() および @ end() のタイムスタンプ修飾子をサポートしました。#114558 (Minh Vu).
  • 非同期接続の確立およびリモートクエリ実行 (ヘッジリクエスト、async_socket_for_remoteasync_query_sending_for_remote) に使用されるファイバーに OpenTelemetry trace context を伝播します。分散クエリ内のリモートクエリのスパンは、クライアント指定の trace context に直接アタッチされるのではなく、イニシエーターの Connection::sendQuery スパンの子として正しく設定されるようになりました。また、非同期タスクの実行ごとに独自のスパンが生成されます。#114813 (Diego Gomes Tomé).
  • この変更により、WHATIF インデックスの使用時、projection によって提供されるベースラインはステートメントを失敗させる代わりに、候補ごとに not_applicable を報告します。#114846 (Yarik Briukhovetskyi).
  • DROP DATABASE は、ロード依存関係と参照依存関係の両方に基づく逆トポロジカル順序でテーブルを削除するようになりました (以前はロード依存関係のみ) 。これにより、DROP DATABASE の途中でクラッシュしても、依存先がすでに削除されたテーブルが残ることはありません。#114952 (Alexey Milovidov).
  • Web UI のダッシュボードでは、グローバルエラー画面をダッシュボード上部の注記に置き換え、失敗したチャートによってページ全体が非表示にならないようにしました。#115019 (Mikhail Artemenko).
  • メモリ逼迫時に、アダプティブアグリゲータの学習フェーズのテーブルをスピルします。#115038 (Groene AI).
  • clickhouse-local は、clickhouse-server と同じ許容的なヘッダーを付けて CORS プリフライトリクエストに応答するようになりました。これにより、SYSTEM START LISTEN HTTP で開かれた HTTP インターフェイスは、file:// URL から開いた Web UI を含め、追加設定なしでブラウザから使用できます。#115045 (Alexey Milovidov).
  • PostgreSQL 形式の正規表現一致演算子をサポートしました。~ (match 関数のエイリアス) 、~* (大文字・小文字を区別しない一致) 、!~ および !~* (否定) に対応しています。PostgreSQL 互換プロトコル経由で ClickHouse に接続した場合、psql\d\dt\dv コマンドが使用可能になり、クエリが失敗しても接続が切断されなくなりました。 #115066 (Alexey Milovidov).
  • clickhouse-client が対話形式でパスワードを要求する際、Connecting to ... メッセージを二重に出力しなくなりました。 #115081 (Alexey Milovidov).
  • EXPLAIN WHATIF で、empirical_statusunsupported の場合に表示される新しい empirical_reason 行に、経験的推定がスキップされた理由が示されるようになりました。 #115140 (Yarik Briukhovetskyi).
  • join_algorithm 設定で有効化された結合アルゴリズムのいずれも JOIN を実行できない場合、エラーメッセージに、単にいずれも機能しなかったと表示するのではなく、試行したアルゴリズムと失敗した JOIN の厳密性および種類が表示されるようになりました。 #115226 (Alexey Elkin).
  • 参照ベクトルが整数配列リテラルの場合、ベクトル検索クエリでベクトル類似度索引を使用できるようになりました。例: ORDER BY L2Distance(vec, [1, 2])。以前は、このようなクエリは暗黙的に総当たりスキャンにフォールバックしていました。 #115255 (Robert Schulze).
  • Azure のクライアント側ネットワーク障害 (接続リセット・拒否、DNS エラー、TLS エラー) は、合成された 500 として返されるのではなく、S3 クライアントと同様にトランスポートエラーとして再試行されるようになりました。 #115269 (Arsen Muk).
  • すべての SQL ステートメントのドキュメント (名前、構文、説明、例など) を、システムテーブル system.statements から取得できるようになりました。 #115341 (Robert Schulze).
  • BACKUP は、ロックファイルを作成した試行が何も書き込む前に失敗した場合、宛先にロックファイルを残さなくなりました。これは、宛先の確保中またはアーカイブを開く際に失敗した場合に適用されます。このようなロックに後続のバックアップが対応することはできないため、同じ宛先への再試行は、ファイルを手動で削除するまで常に失敗していました。S3 および Azure 宛先へのバックアップでもロックが排他的に作成され、別のバックアップに属するロックは、ストレージから返されたエラーではなく、同時実行中のバックアップとして報告されます。 #115387 (Julia Kartseva).
  • BuilderRWBufferFromHTTP でベアラートークン認証をサポートしました (第 2 試行) 。 #115400 (Sergei Trifonov).
  • S3Queue に次元メトリクスを追加しました。 #115422 (Bharat Nallan).
  • OpenSearch、Elasticsearch、SolR、Lucene との互換性を向上させるため、テキスト索引トークナイザー array のエイリアスとして keyword を追加しました。 #115507 (Robert Schulze).
  • 独自の S3 テーブルを作成できるようにしました。 #115652 (Konstantin Vedernikov).
  • サーバー全体に影響しない MEMORY_LIMIT_EXCEEDED エラーでは、スレッドごとの未追跡メモリをログに記録しないようにしました。 #115658 (Azat Khuzhin).
  • Prometheus remote-write プロトコルが非同期挿入をサポートするようになりました。複数の同時実行 remote-write リクエストからのデータは、パーツの作成前に async_insert 設定に従ってバッチ処理されます (デフォルトで有効。同期動作を維持するには、ハンドラー URL に async_insert=0 を追加してください) 。リクエストは、データが対象の TimeSeries テーブルのすべての内部テーブルにフラッシュされた後にのみ確認応答されます。#115688 (Nikita Mikhaylov).
  • すべての timeSeries* 集約関数で、重複するタイムスタンプを単一のルール (最大値が優先され、NaN は他のすべての値より劣先される) に従って処理するようになりました。これにより、同一タイムスタンプの一部の値が NaN の場合に timeSeriesInstantRateToGridtimeSeriesInstantDeltaToGridtimeSeriesLastTwoSamplestimeSeriesResampleToGridWithStaleness で発生していた順序依存の結果が修正されます。このルールは文書化され、テストされています。#115920 (Vitaly Baranov).

バグ修正 (正式な安定版リリースにおけるユーザーに影響する不具合)

  • inject_random_order_for_select_without_order_by 使用時に発生するカラム名の破損と BAD_ARGUMENTS 例外を修正しました。複数カラムを含む SELECT クエリが失敗しなくなり、CREATE TABLE AS SELECTCREATE VIEW AS SELECT、および JSONEachRow などの名前付きフォーマットの出力カラム名が、内部的な __subquery_column_<UUID> エイリアスに置き換えられることなく保持されるようになりました。#102812 をクローズします。#101107 をクローズします。 #105896 (Groene AI).
  • 共通の中間式を共有する連言条件を含む PREWHERE を使用した場合に、ネイティブ Parquet V3 リーダーで発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。 #107059 (Groene AI).
  • 遅延マテリアライゼーションと併用して WHERE_part_starting_offset または _part_offset 仮想カラムを使用するクエリで発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。 #108287 (Vladimir Cherkasov).
  • 古いデータファイルの書き込み後に追加されたスキーマ進化済みの Iceberg カラムに対し、optimize_functions_to_subcolumns = 1 (デフォルト) で WHERE col IS NULL または IS NOT NULL を実行した際に発生する Not found column or subcolumn c.null in block を修正しました。 #109515 (Groene AI).
  • テーブルメタデータでは decimal(20,0)、マニフェストでは decimal(20, 0) のように、decimal 型などのパラメーター化された Primitive 型がメタデータファイル間で異なる空白を含む形でシリアル化されている Iceberg テーブルの読み取り時に発生する、誤った ICEBERG_SPECIFICATION_VIOLATION エラーを修正しました。 #109676 (Groene AI).
  • PREWHEREFINAL の後に適用される場合の、optimize_move_to_prewhere = 1 による遅延 PREWHERE を修正しました。WHERE 条件が遅延された ROW POLICY より前へ移動しなくなったため、クエリ結果が変わる可能性がなくなりました。 #109703 (Yarik Briukhovetskyi).
  • Array(String) カラムを arr = ['x'] のような配列リテラルと比較し、そのカラムに texttokenbf_v1、または ngrambf_v1 スキップ索引がある場合に発生する BAD_GET を修正しました。このような比較では、クエリを失敗させる代わりにフルスキャンにフォールバックするようになりました。 #110057 (Groene AI).
  • テキスト索引が存在する場合に、空の検索対象で hasmapContainsKey、および mapContainsValue が誤った結果を返す問題を修正しました。 #110246 (Robert Schulze).
  • CREATE TABLE ... AS SELECT クエリで、スカラーサブクエリを s3 テーブル関数の URL 引数、または他のテーブル関数の引数として使用した場合に発生する Host is empty in S3 URI を修正しました。 #110254 (Sema Checherinda).
  • SYSTEM STOP/START CLEANUP および SYSTEM STOP/START VIRTUAL PARTS UPDATEON CLUSTER 権限チェックを修正しました。これらで SYSTEM PULLING REPLICATION LOG は不要となり、代わりに SYSTEM CLEANUP または SYSTEM VIRTUAL PARTS UPDATE が使用されるようになりました。 #110289 (Groene AI).
  • read_only = true の読み取り専用オブジェクトストレージレプリカが refresh_parts_interval により新しいパーツを検出しない問題、およびこのようなディスクで table_disk = truetable_disk is not supported for non-ObjectStorage disks というエラーで失敗する問題を修正しました。 #110460 (Julia Kartseva).
  • INSERT INTO FUNCTION icebergS3(...) などのデータレイクテーブル関数を介した書き込みで、String 型のカラムから String 型の注釈が失われた Parquet ファイルが生成され、書き込まれたデータを Spark などの外部リーダーで読み取れなくなる問題を修正しました。 #110465 (Shaohua Wang).
  • Spark によって書き込まれたファイルや、output_format_orc_dictionary_key_size_threshold を有効にして ClickHouse 自身が書き込んだファイルを含む、マップキーが辞書エンコードされた ORC ファイルの読み取り時に、Map cannot have a key of type LowCardinality(Nullable(String)) によりスキーマ推論が失敗する問題を修正しました。 #110492 (Shaohua Wang).
  • メタデータのみの ALTER MODIFY COLUMN T によって Nullable(T) に変更された Nullable カラムで、optimize_functions_to_subcolumns 使用時に IS NULL / IS NOT NULL / count() の結果が誤る問題を修正しました。変換前に書き込まれたパーツでは、.null サブカラムはストレージ型のデフォルト値ではなく、物理的に存在する親カラムから導出されるようになりました。 #110584 (Groene AI).
  • EnumStringDecimalFloat64、幅の異なる FixedString 値など、推移的な条件に比較セマンティクスが異なる型が混在する場合、optimize_and_compare_chain 最適化によってクエリ結果が誤る問題を修正しました。 #110621 (Yarik Briukhovetskyi).
  • オプティマイザがソートキーのプレフィックスを拡張した場合に、一部の順序読み取りクエリで誤った結果が返される問題を修正しました。 #110725 (Groene AI).
  • COMMENT 句を含む CREATE ステートメントでコメント文字列リテラルが欠落している場合に、誤ってパースされたクエリを黙って受け入れるのではなく、構文エラーを発生させるよう修正しました。たとえば、CREATE VIEW v COMMENT AS SELECT 1 はコメントなしのビューを作成しなくなりました。 #111159 (Shaohua Wang).
  • optimize_move_to_prewhere_if_final = 1 が設定され、WHERE 句が WHERE k のようにソートキーカラムに対する暗黙的な真偽値条件である場合に、FINAL を使用した SummingMergeTree および CoalescingMergeTree で誤った結果が返される問題を修正しました。 #111342 (Groene AI).
  • DROP DATABASE など、オブジェクトストレージをバックエンドとするデータベースおよびテーブルに対するメタデータのみの操作で、Directory '...' was created concurrently with remote path '...' という不要な例外が発生する問題を修正しました。 #111353 (Mikhail Artemenko).
  • データレイク REST カタログで、期限切れの認証情報をテーブルが存在しないものとして黙って扱ったり、UNKNOWN_TABLE を返したりするのではなく、適切な例外を報告するようになりました。 #111379 (alesapin).
  • アナライザが無効 (enable_analyzer = 0) の場合に、パラメーター化ビューで SQL SECURITY DEFINER および SQL SECURITY NONE が適用されない問題を修正しました。以前は、基になるテーブルに対する権限がないユーザーがこのようなビューを選択すると、アナライザを有効にした場合は同じビューが動作するにもかかわらず、ACCESS_DENIED で失敗していました。 #111458 (Groene AI).
  • ストレージからスキーマを推論する場合、SELECT NULL を実行するビューに対するカラムなしの remoteRemoteDistributed テーブルなどで、Nullable(Nothing) カラムやテーブルで許可されていないその他の型を CREATE TABLE 時に拒否するようにしました。これにより、次回のサーバー再起動時に読み込みに失敗し、無関係なテーブルの読み込みも妨げるメタデータが永続化されることを防ぎます。 #111487 (Groene AI).
  • 内部の Struct が変更されたネストした Array(Map(...)) カラムで発生する std::bad_variant_access と、誤った Iceberg スキーマ進化を修正しました。 #111489 (Konstantin Vedernikov).
  • Nullable(UInt8) から StringLowCardinality(String)、または Array(UInt8) への変換など、DEFAULT を持つ Nullable カラムを別の型に変換する際に ALTER MODIFY COLUMN が失敗する問題を修正しました。 #102156 (DQ).
  • DETACH DICTIONARY ... PERMANENTLYHAVE_DEPENDENT_OBJECTS により拒否された後に dictGet で発生する BAD_ARGUMENTS (Dictionary not found) を修正しました。detach が拒否された場合でも、Dictionary は引き続き使用できます。 #105259 (Groene AI).
  • ClickHouse が Iceberg テーブル用に書き込むデータファイルに、Avro および ORCIceberg フィールド ID が埋め込まれるようになりました。また、ORCString カラムはバイナリではなく string として書き込まれ、任意の複合 ORC フィールド (ArrayMapTuple) では正しい iceberg.required メタデータが維持されるようになりました。これにより、カラム名変更後に NULL が暗黙的に返される問題が修正され、Spark や iceberg-java など、仕様に準拠したリーダーとの互換性が回復します。 #109994 (Groene AI). #111775 (Groene AI).
  • 既存のパスが異なるサイズのコンテンツで書き換えられた後に、plain_rewritable ディスク上のファイルを読み取る際の問題を修正しました。古いインメモリメタデータにより、UNEXPECTED_END_OF_FILE が発生する可能性がありました。 #110304 (Konstantin Bogdanov).
  • query_logquery_views_log などのシステムログレコードによって生じるユーザー単位のメモリトラッカーのずれを修正しました。このずれにより、継続的なワークロードを持つユーザーに対して max_memory_usage_for_user 制限が誤ってトリガーされる可能性がありました。 #110708 (Raúl Marín).
  • ReplicatedMergeTree テーブルに対するコメントのみ、または設定のみの ALTER によって、同時実行された ALTER ... ADD COLUMN が追加したカラムが暗黙的に削除され、レプリカのテーブルメタデータが古くなる可能性がある、まれな競合状態を修正しました。 #111029 (Shaohua Wang).
  • ORDER BY (g, r DESC) など、ソートキーの末尾が降順となるテーブルで、不正な主キーの枝刈りにより一致する行が除外される可能性がある問題を修正しました。 #111059 (Nihal Z. Miaji).
  • 証明書検証が有効な場合に、TLS ハンドシェイクごとに発生するピア証明書のメモリリークを修正しました。 #111425 (Konstantin Bogdanov).
  • ALTER TABLE ... UPDATE/DELETE ... IN PARTITION {param:Type} でパーティションにクエリパラメータを使用する mutation を修正しました。シリアル化されたパーティション値を正しく再解析できるようになったため、テーブルの読み込みを妨げる mutation エントリが ALTER によって書き込まれなくなりました。 #111518 (Michael Kolupaev).
  • メモリプロファイラなどがコルーチンまたはファイバーのスタック上でスタックトレースを取得した際に発生する macOS/aarch64 のクラッシュを修正しました。 #111656 (Raúl Marín).
  • input_format_allow_errors_num > 0 を指定して Protobuf データを読み取る際、同じブロック内で有効なメッセージの後に不正だがスキップ可能なメッセージが続く場合にサーバーがクラッシュする問題を修正しました。 #107739 (Andrey Tsarevskiy | Андрей Царевский ).
  • Distributed テーブルに対するクエリで、FULL JOINjoin_use_nulls = 1 を併用する場合などに Nullable となる _shard_num または shardNum を、ORDER BY およびアナライザとともに使用した際の NOT_FOUND_COLUMN_IN_BLOCK を修正しました。 #109798 (Groene AI).
  • join_algorithm = 'full_sorting_merge' を使用する LEFT/RIGHT/FULL/ASOF JOIN で、結合されなかった行がカラム型のデフォルト値ではなく 0 で埋められることがあったことによる誤った結果および UNKNOWN_ELEMENT_OF_ENUM 例外を修正しました。 #111197 (Groene AI).
  • 高階関数のラムダ本体が、たとえば arrayFilter(p -> multiIf(false, true, p = 'ALL'), ['ALL']) のように、Bool リテラルの分岐と UInt8 比較の分岐を混在させる定数条件の if または multiIf である場合に発生する LOGICAL_ERROR 例外を修正しました。 #111245 (Groene AI).
  • 明示的な partition_strategy を指定していない S3AzureBlobStorageURL などのファイル系エンジンのパス内にある {_partition_id} プレースホルダーは、再び wildcard 戦略を暗黙的に指定するようになりました。これにより、BAD_ARGUMENTS で失敗するようになっていた 26.6 より前の DDL との互換性が復元されます。 #111279 (Nikita Fomichev).
  • グループ化キーがカラムの関数であり、集約で同じカラムを読み取る場合に、Distributed テーブルをラップする Merge テーブルに対する GROUP BY クエリで発生する NUMBER_OF_COLUMNS_DOESNT_MATCH を修正しました。 #111334 (Groene AI).
  • 同じロールに対する GRANT role TO role は、system.role_grants に自己参照エントリを暗黙的に作成するのではなく、BAD_ARGUMENTS で拒否されるようになりました。 #103315 (zxuhan7).
  • メタデータファイルに refs セクションがない場合の Iceberg テーブルへの書き込みを修正しました。 #106896 (Aleksandr Musorin).
  • Arrow Flight でのログイン後に system.session_log が読み取れなくなる問題を修正しました。interface カラムは Enum8 ですが、列挙に ArrowFlight 値が含まれていなかったため、Arrow Flight プロトコル経由のログインで生の値 10 が書き込まれ、そのような行を読み取る SELECT はすべて Unexpected value 10 in enum 例外を送出していました。 #110758 (Alexey Milovidov).
  • サブ秒インターバルを使用する toStartOfInterval における符号付き整数オーバーフローを修正しました。Int64 の下限から 1 インターバル以内の DateTime64 値では、丸め結果が正の無意味な値に暗黙的にラップしていましたが、現在は関数が DECIMAL_OVERFLOW 例外を送出します。 #111370 (Alexey Milovidov).
  • POINT M EMPTY のような次元タグ付きの空ポイントに対し、readWKTPoint および readWKT が未初期化の座標 (スカラー) または前行の座標 (ベクトル化) を返す問題を修正しました。このような入力は、POINT EMPTY と同様に CANNOT_PARSE_TEXT で拒否されるようになりました。#111517 (Groene AI).
  • 左側に 1 AS b, 1 AS b のような同名の重複カラムがあり、それが UNION ALL を通過する場合に、RIGHT および FULL JOIN で発生する Unexpected number of columns in result sample block 例外を修正しました。#111554 (Groene AI).
  • ネストした集約関数コンビネータ内で RESPECT NULLS または IGNORE NULLS 修飾子とともに -Tuple コンビネータを使用する分散クエリ (例: anyRespectNullsStateTuple(...) IGNORE NULLS) で発生する CANNOT_CONVERT_TYPE および LOGICAL_ERROR 例外を修正しました。#111570 (Alexey Milovidov).
  • iPhone の Play における SQL 構文ハイライトを修正しました。iOS Safari の自動テキスト拡大により、ハイライトのオーバーレイがずれることがありました。#111683 (Alexey Milovidov).
  • 型が ArrayTuple、または LowCardinality のサブクエリを値とする引数を指定してパラメーター化ビューを呼び出した際に発生する UNKNOWN_QUERY_PARAMETER を修正しました。例: SELECT * FROM v(param = (SELECT groupArray(x) FROM t))#111790 (Groene AI).
  • Dictionary キーがラップされていない場合に、Dictionary に対する JOINNullableLowCardinality、または LowCardinality(Nullable) の結合キーを使用すると発生する TYPE_MISMATCH (Key type for complex key ... does not match) を修正しました。直接結合の Dictionary ルックアップでは、dictGet および dictHas と同様にキーを Dictionary で宣言されたキー型に正規化するようになり、NULL キーは一致しなくなりました。#111857 (Groene AI).
  • fsync_part_directory = 1 の場合、パートディレクトリを一時名から最終名へ変更する操作自体も、親ディレクトリ (親をまたぐ移動では移動元の親ディレクトリも) を fsync することで永続化されるようになりました。以前は移動先のディレクトリのみが fsync されていたため、パートのコミット直後に電源障害が発生すると、設定が有効であってもパートがディスク上から失われ、行が失われる可能性がありました。#111861 (Groene AI).
  • 極端なパラメーターを指定した randChiSquaredrandStudentTrandFisherF、および randBinomial で発生するハングを修正しました。このようなクエリは max_execution_timeKILL QUERY で中断できませんでした。max_rand_distribution_parameter または max_rand_distribution_trials0 に設定されている場合でも、これらのパラメーターは拒否されるようになりました。また、randBinomial では max_rand_distribution_trials をデフォルト値の 10^9 より大きく設定できなくなりました。#111909 (Alexey Milovidov).
  • アナライザが x = c1 OR x = c2 OR ...x != c1 AND x != c2 AND ...、または has(const_array, x) のような比較チェーンを IN および NOT IN に書き換えた際に誤った結果を返す問題を修正しました。また、DynamicArray(Dynamic)、または JSON 構造を含む式で発生する Illegal type ... of argument of function in 例外も修正しました。#111924 (Groene AI).
  • MergeTree テーブルから Nullable(Tuple(...)) カラムと、null を保持するその要素サブカラム (VariantDynamic、または LowCardinality) のいずれかを同時に選択した際に、誤った結果が返され LOGICAL_ERROR が発生する問題を修正しました。 #111949 (Groene AI).
  • 不明なクラスターに対する、または <secret> 要素なしで構成されたクラスターに対する USER_INTERSERVER_MARKER を使用したネイティブプロトコルのハンドシェイクを拒否するようにしました。以前は、このようなハンドシェイクが認証前に interserver モードに入り、ローカルテーブルに関する情報を読み取る可能性がありました。 #99675 (Dan Anderson).
  • String または Nullable(String) キーで DirectKeyValueJoin を使用した場合に、EmbeddedRocksDBRedis、および KeeperMap テーブルに対する JOIN が警告なしに 0 行を返す問題を修正しました。 #105253 (Vladimir Cherkasov).
  • MULTI_READ 機能フラグのない Keeper で再アタッチした後、Replicated データベース内の協調型リフレッシュ可能なマテリアライズドビューが停止したままになる問題を修正しました。ビューは Unexpected exception in refresh scheduling を無期限にログ出力する代わりに、ステータス Disabled で正常に停止するようになりました。 #108890 (Groene AI).
  • ZooKeeper クライアントが、INT32_MAX バイトを超えるリクエストに対してオーバーフローした int32 長さプレフィックスを送信する問題を修正しました。サイズ超過のリクエストはクライアント側で拒否されるようになりました。この上限は <zookeeper> 配下の max_request_size で設定でき、設定しない場合は Keeper から取得されます。#109165 をクローズします。 #109190 (Arsen Muk).
  • 永続的な処理ノードを使用する S3Queue/AzureQueue の順序付きモードを修正しました。ストリーミング中にバケットロックが更新されるため、persistent_processing_node_ttl_seconds によって制御される TTL クリーンアップで稼働中のプロセッサのロックが削除されなくなりました。それでもロック所有権が失われた場合は検出・報告され、ストリーミングは新しいファイルイテレータで復旧します。 #110292 (Kseniia Sumarokova).
  • 先頭の行をスキップした後に string_serialization_version = 'with_size_stream' を使用して String カラムを読み取る場合、および object_shared_data_serialization_version = 'map' で保存された JSON カラムのサブオブジェクトを読み取る場合に、誤ったデータが返される、または範囲外読み取りが発生する可能性がある問題を修正しました。 #110471 (Alexey Milovidov).
  • analyzer を使用した CREATE TABLE および ALTER TABLE で、_table_database などの仮想カラムを参照する DEFAULT または MATERIALIZED 式が受け入れられる問題を修正しました。これらの式は、後で挿入時に NOT_FOUND_COLUMN_IN_BLOCK で失敗するのではなく、定義時に拒否されるようになりました。 #111776 (Groene AI).
  • 実行可能 UDF、executable table engine、および実行可能辞書において、すでに閉じられたファイルディスクリプタに対する fcntl が、並行クエリの無関係なディスクリプタを破損してクエリを無期限に停止させる可能性がある競合状態を修正しました。 #111779 (Raúl Marín).
  • 非推奨の minmax 統計の作成時に、例外をスローする代わりに警告を出力するようになりました。 #111785 (Han Fei).
  • ClickHouse によって書き込まれた Iceberg テーブルを PyIceberg や Spark などの外部リーダーで読み取れない問題を修正しました。マニフェストリストとマニフェストの Avro スキーマに、必要な Icebergfield-id プロパティが含まれるようになりました。 #111786 (Groene AI).
  • パートの attach/detach/move/clone 操作時に、パートにマテリアライズされる block_number および block_offset カラムを再生成し、パート操作後に古い状態のままにならないようにしました。 #111801 (Mikhail Artemenko).
  • query_plan_split_filter 最適化で、INTERSECT または UNION の一方のブランチに内部 __split_filter カラムが残り、Block structure mismatch in IntersectOrExceptStep stream: different number of columns 例外が発生する可能性があった問題を修正しました。 #111930 (Groene AI).
  • join_use_nulls = 1JOIN ON 条件を WHERE 句内で繰り返すクエリで発生する AMBIGUOUS_COLUMN_NAME を修正しました。このようなクエリは失敗せずに結果を返すようになりました。 #112007 (Groene AI).
  • Paimon REST カタログの DLF 認証を修正しました。最初のリクエスト以降のリクエストが HTTP 401 で失敗しなくなり、テーブルの存在確認で HTTP 404 を正しく検出するようになりました。 #112015 (JIaQi Tang).
  • Keeper で Kafka テーブルを同時にクリーンアップする際に発生する LOGICAL_ERROR を修正しました。セッションの期限切れ後にテーブルの Keeper パスが消失しても、作成や削除が失敗しなくなりました。 #112078 (Groene AI).
  • _block_number および _block_offset カラムに対してパートレベルの min-max 索引が有効な場合のマージとミューテーションを修正しました。 #109281 (Mikhail Artemenko).
  • DeltaLakeLocal または deltaLake テーブルへの INSERT が失敗した際に、書き込み開始後の未完了データファイルが残る問題を修正しました。 #109328 (Groene AI).
  • s3/s3ClusterS3 バックエンドのエンジン、BACKUP ... TO S3、および式または SQL UDF で構築された encryptdecrypt、HMAC 関数のシークレット引数について、SHOW CREATEsystem.query_log、サーバーログ、EXPLAIN 出力で認証情報が漏洩する問題を修正しました。 #109768 (Raúl Marín).
  • s3 および file 経由で、非圧縮の STORED zip エントリから大容量の Parquet ファイルを読み取る際の問題を修正しました。 #110495 (Eva Wuuu).
  • サブクエリ、CTE、またはビュー内に隠れたストリーミング FROM ... STREAM 読み取りを含むクエリで EXPLAIN ANALYZE がハングする問題を修正しました。このようなクエリは、最上位レベルのストリーミング読み取りと同様に、NOT_IMPLEMENTED で拒否されるようになりました。 #110935 (Groene AI).
  • i8 量子化を使用する vector_similarity 索引で、二乗ノルムがオーバーフローして無限大になるベクトルを拒否するようにしました。以前は、このようなベクトルにより警告なく不正なデータが生成されていました。 #111085 (Groene AI).
  • min_rows_to_fsync_after_mergemin_compressed_bytes_to_fsync_after_merge、または fsync_part_directory が設定されている場合、マージまたはマテリアライズされたパートのテキスト索引ファイルを fsync するようにしました。以前は、これらのファイルだけがパート内で同期されずに残っていたため、マージ直後に電源が失われると、コミット済みだが破損したパートが残り、データ損失を引き起こす可能性がありました。 #111335 (Groene AI).
  • user_files に対するパス検証を修正しました。 #111442 (Alexander Tokmakov).
  • 停止中の RabbitMQ テーブルに対する SYSTEM REFRESH で、キューに蓄積されたバックログの消費に失敗することがある問題を修正しました。更新操作は、1 回限りの順序外ストリーミングサイクルを消費する前に、AMQP 配信ループが開始されるまで待機するようになりました。#111480 (Groene AI).
  • ローカルオブジェクトへのアクセスを user_files パスに制限しました。#111483 (Konstantin Vedernikov).
  • String 値を含む不正な集約関数の状態をデシリアライズする際に、範囲外メモリアクセスによって発生するセグメンテーション違反を修正しました。このような状態は検証のうえ拒否されるようになりました。#111606 (Miсhael Stetsyuk).
  • system.zookeeper_info の解析中に発生する整数オーバーフローを修正しました。#111629 (Kseniia Sumarokova).
  • FINAL クエリで SELECT リストに含まれないソートキーのカラムをフィルタリングし、そのフィルタが PREWHERE に移動された場合に発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。たとえば、optimize_move_to_prewhere_if_final = 1 を指定した SELECT s FROM t FINAL WHERE k GROUP BY s が該当します。#111721 (Groene AI).
  • allow_experimental_delta_lake_writes = 1 を指定した DeltaLake へのパーティション化された INSERT で、パス文字を含むパーティション値が破損し、NULL のパーティション値が拒否される問題を修正しました。パーティション値は単一のパスセグメントにパーセントエンコードされ、NULL または空文字列の値は null の partitionValues エントリとともに __HIVE_DEFAULT_PARTITION__ として書き込まれるようになりました。#111793 (Groene AI).
  • Buffer テーブル経由で動的サブカラムを読み取る際に発生する例外と、データが暗黙的にスキップされる問題を修正しました。#111948 (Alexey Milovidov).
  • USE {db:Identifier} の後に clickhouse-client が現在のデータベースを失う問題を修正しました。後で再接続が必要になった場合、クライアントはセッションを暗黙的に default データベースへ切り替えていました。#111982 (Alexey Milovidov).
  • 統計情報を持つカラムの型をメタデータのみの ALTER MODIFY COLUMN で変更した後、MergeTree ミューテーション中に発生する LOGICAL_ERROR 例外 (Type mismatch when building statistics for column) を修正しました。ミューテーションによって実際に再書き込みされるカラムでは統計情報が再計算され、変更されないカラムでは既存の統計情報が保持されるようになりました。#112009 (Groene AI).
  • 可変の snapshot/LATEST ヒントが同時に置き換えられている際に失敗する可能性があった Paimon テーブルの読み取りを修正しました。無効または古いヒントは無視され、代わりにカタログからスナップショットが読み込まれるようになりました。#112010 (JIaQi Tang).
  • WKT エンコードされたジオメトリカラムで、point(1 2) のように型キーワードが大文字でない場合や、LINESTRING EMPTYPOLYGON() のように空のコンテナーを使用する場合の GeoParquetArrow、および ArrowStream ファイルの読み取りを修正しました。これにより、空のジオメトリに対する wkt の出力を格納したファイルを再度読み取る際の問題も修正されます。#112020 (Groene AI).
  • クエリレベルの設定オーバーライドが Azure ネイティブコピーに適用されない問題を修正しました。#112037 (Smita Kulkarni).
  • query_masking_rules によって EPHEMERAL 列の型が書き換えられ、CREATE TABLE が誤った型を保存したり失敗したりする問題を修正しました。#112048 (Alexey Milovidov) 。
  • テーブル関数のパラメーターで aggregate state を受け付けないようにしました。これまでは、このようなパラメーターはサポートされていないにもかかわらず論理エラーが発生していました。#112085 をクローズします。#112087 (Pedro Ferreira) 。
  • ON 式に定数の連言条件 (例: ON l.id = r.id AND CAST(NULL AS Nullable(UInt8))) を含む JOIN で誤った結果が返る問題を修正しました。#112155 (Vladimir Cherkasov) 。
  • text_index_posting_list_apply_mode = 'lazy' の場合に、aarch64 など simdcomp を使用しないビルドで hasAllTokens やその他の複数トークンによるテキスト索引検索が誤った結果を返す問題を修正しました。#112178 (Groene AI) 。
  • パラメーター化ビューを parameter = value 形式の代入ではない引数で呼び出した場合に、誤った結果が返る問題を修正しました。このような呼び出しは、両方の実行パスで UNKNOWN_QUERY_PARAMETER として拒否されるようになりました。#112194 (Groene AI) 。
  • SELECT 本体で INTERSECTEXCEPT、または UNION DISTINCTUNION ALL が混在する UNION 連鎖を使用するパラメーター化ビューが通常のビューとして誤分類され、メタデータを読み込めなくなる問題を修正しました。#112211 (Groene AI) 。
  • TSV ファミリーのスキーマ推論で、0.00.5 のように先頭がゼロの小数値に対して String が推論され、そのような先頭行がヘッダーとして消費される問題を修正しました。また、TSKVx=1\x2E5 のようなエスケープエンコードされた値に対して数値型が推論される問題も修正しました。#112105 をクローズします。#112226 (Groene AI) 。
  • system.s3_queue_settingsbucketing_modepartitioning_modepartition_regex、および partition_component について誤った値を報告する問題を修正しました。#112300 (Bharat Nallan) 。
  • 主キーが Array または Tuple であり、クエリでそれに plusminusmultiplydivide、または intDiv を適用した場合に、誤った結果、誤った順序の ORDER BY 出力、および BAD_TYPE_OF_FIELD 例外が発生する問題を修正しました。#112339 (Groene AI) 。
  • Distributed テーブルや *Cluster テーブル関数などを介して実行する、PASTE JOIN を含むクエリのリモート実行を修正しました。ClickHouse はクエリを無効な構文 ALL PASTE JOIN としてフォーマットしなくなりました。#112404 (Groene AI) 。
  • 一意の右側キー、混在した ON 条件、および小さい max_joined_block_size_rows を持つ LEFT JOIN で、JoiningTransform において発生する LOGICAL_ERROR (Invalid number of rows in Chunk) を修正しました。#106928 (Groene AI) 。
  • S3Queue テーブルエンジンの _tags 仮想カラムを修正しました。宣言はされていたものの値が設定されていなかったため、SELECT _tags は常に空のマップを返していました。現在は、S3 エンジンおよび s3 テーブル関数と同様に、オブジェクトタグを返します。#108676 (Groene AI).
  • マージが ALTER TABLE... RENAME COLUMN と同時に実行される場合、またはカラムの値が論理更新 UPDATE のみに由来する場合に、デフォルト式のないカラムのデータが失われる問題を修正しました。カラムがマージ済みパートから削除され、読み戻した値がすべて NULL になる可能性がありました。#109356 (Groene AI).
  • Wide パートで、MATERIALIZED カラムに対する ALTER TABLE... DROP COLUMN など、パート全体を書き換える mutation の後に、スキップインデックスがデータパートから削除される (または CHECK TABLEUNEXPECTED_FILE_IN_DATA_PART で失敗する) 問題を修正しました。#109616 (Groene AI).
  • toUTCTimestamp/fromUTCTimestamp (およびその to_utc_timestamp/from_utc_timestamp 別名) と toTime64DateTime64 処理における2つのバグを修正しました。1つ目は、Int64 境界付近での符号付き整数オーバーフローです (現在は Int128 で計算し、表現可能な範囲にクランプします) 。2つ目は、タイムゾーンオフセットの境界付近にある負の小数値で誤った結果が返される問題です。秒への分割がゼロ方向に切り捨てられていたため、timezoneOffset() が次の秒を調べ、DST/オフセット変更の誤った側を選択する可能性がありました。#109738 (Groene AI).
  • 子テーブルに、フィルターが既存のカラムのみからなる行ポリシー (例: CREATE ROW POLICY... USING flag) がある Merge テーブルから読み取る際に発生する論理エラー (“Cannot determine row level filter; 0 columns deleted, 0 columns added”) を修正しました。#109843 (Groene AI).
  • GROUP BY GROUPING SETS を含むクエリ (またはそれを含むスカラーサブクエリや mutation サブクエリ) を force_aggregation_in_order = 1 で実行した際に発生する2つのエラーを修正しました。旧アナライザ (enable_analyzer = 0) での Trying to get name of not a column: ExpressionList と、アナライザ使用時に enable_memory_bound_merging_of_aggregation_results = 1 を設定した分散クエリでの Memory bound merging of aggregated results is not supported for grouping sets. です。#109862 (Groene AI).
  • コンテナー型 (例: Array(Bool)Tuple(Bool,...)) 内で数値の 1/0Bool 値として解析できるように修正しました。以前は [true,false] は動作しましたが、[1,0]CANNOT_READ_ARRAY_FROM_TEXT で失敗していました。#109976 (Groene AI).
  • 適用時にカラムがすでに存在する場合、ALTER TABLE... ADD COLUMN IF NOT EXISTS で誤って ILLEGAL_COLUMN エラーが発生する問題を修正しました。これは、1つのステートメント内で同じカラムを IF NOT EXISTS 付きで2回追加した場合や、準備フェーズと適用フェーズの間に同時実行中の ALTER がカラムを追加した場合に発生していました。#110080 (Groene AI).
  • 選択性の高いフィルターを含むクエリを並列レプリカで実行した場合に、FixedString カラムの length (および QBit の次元) が固定サイズ N ではなく 0 を返す問題を修正しました。#110427 (Groene AI).
  • flipCoordinatesGeometry 型が失われる問題を修正しました。Geometry 引数の場合、結果は基底の Variant(...) ではなく再び Geometry 型となるため、areaCartesian などの関数に直接渡せます。 #110694 (Groene AI).
  • optimize_injective_functions_in_group_by によって GROUP BY GROUPING SETS および GROUP BY... WITH TOTALS のクエリ結果が変わる問題を修正しました。この設定は結果を保持するものとして文書化されていますが、グループ化キーの単射関数を除去すると、そのキーが集計セットに含まれない行 (GROUPING SETS の非メンバーセット) や WITH TOTALS 行で、誤った値が生成されたり行が削除されたりしていました。誤った値が実際のキー値と一致する可能性があり、スーパー集計行を同じ結果セット内の実際のグループと区別できなくなる場合がありました。 #110721 (Groene AI).
  • JSON の Bool 解析における数値の 1/0 が、allow_special_bool_values 設定に従うようになりました。以前は、JSON の Bool パーサーがこの設定を無視し、BoolVariant デシリアライズ優先度が整数型より高いため、allow_special_bool_values_inside_variant = 0 であっても、Variant(Bool, UInt32) に対する {"v":1} のような JSON 入力が Bool として読み取られていました。 #110835 (Groene AI).
  • ターゲットが Alias であり、内部クエリによって行数が変化する依存 materialized view を INSERT が経由し、そのエイリアスの先に重複排除を行うテーブルがある場合に発生する論理エラー block.rows() == getRows() を修正しました。この問題により、リリースビルドでは範囲外読み取りと挿入の重複排除の破損が発生していました。 #111103 (Alexey Milovidov).
  • TupleArrayMapNullableVariant などのコンテナカラム内にネストされた、互換性のある集計状態カラム (例: quantileState および quantilesState(0.9)) に対する集合演算で発生する論理エラー Block structure mismatch (デバッグおよび sanitizer ビルド) と、Illegal types of arguments エラーを修正しました。 #111191 (Alexey Milovidov).
  • DISTINCT の早期停止制限ヒントで結果の先頭を制限できない場合に、順序付き LIMIT/OFFSET を伴う DISTINCT が誤った行を返す問題を修正しました。対象は、負の LIMIT (末尾ではなく先頭を返していた) 、小数の LIMIT/OFFSET (小数部分は全件読み取り後にのみ解決される) 、および LIMIT のない単独の OFFSET (オフセット以降の末尾が削除されていた) です。たとえば、複数パートのテーブルに対する SELECT DISTINCT intDiv(x, 100) FROM t ORDER BY intDiv(x, 100) LIMIT -1 は、最大の重複しない値ではなく最小の値を返していました。 #111326 (Groene AI).
  • クエリに set スキップ索引があり、述語が (x AND <null-value>) OR y の形式で、NULL が関数 (例: toInt64OrNull('x')nullIf(1, 1)CAST(NULL AS Nullable(Int64))) によって生成される場合に、誤った結果が返される問題を修正しました。このような値は __bitWrapperFunc でラップされ、“unknown” マスクではなく NULL を伝播していたため、set 索引によって実際には一致するグラニュールが除外され、クエリが本来より少ない行を返す可能性がありました。 #111604 (Groene AI).
  • Iceberg テーブルに ALTER TABLE... ADD COLUMN の前後に書き込まれた data files が含まれ、かつ optimize_move_to_prewhere が有効な場合に、DELETE/UPDATE が誤った行を暗黙的に削除する (または NOT_FOUND_COLUMN_IN_BLOCK をスローする) 問題を修正しました。 #111693 (Groene AI).
  • 2 つ以上の分片を持つ Distributed テーブル、clusterAllReplicas、またはカスタムキーの並列レプリカに対する ORDER BY ... WITH FILL ... INTERPOLATE で発生する LOGICAL_ERROR (“Invalid number of rows in Chunk”) と、強化ビルドで発生する関連した範囲外アクセスによる中断を修正しました。空の結果の場合も対象です。WITH FILL は最終結果を生成するノードでのみ適用されるようになり、分片やレプリカ間で生成される補完行の重複も修正されました。#111919 (Yakov Olkhovskiy).
  • 任意の試行回数で、退化した確率 0 および 1 の場合でも randBinomial を使用できるようにしました。#112021 (Alexey Milovidov).
  • ベクトル検索クエリがクエリ条件キャッシュを汚染して誤った結果を返す問題を修正しました。vector_similarity 索引を持つテーブルに対する SELECT... WHERE <condition> ORDER BY <distance function> LIMIT n クエリで、粒度が <condition> に一致しないものとして記録される可能性があり、その結果、同じテーブルに対する後続の通常の SELECT... WHERE <condition> が行数を少なく返すことがありました。ベクトル検索の読み取りでは、クエリ条件キャッシュに書き込まれなくなりました。#112086 (Groene AI).
  • 定義内で substring の文法では再解析できない形式の substrmid、または byteSlice を呼び出す CREATE VIEW または CREATE FUNCTION が受け入れられる一方、ClickHouse が書き込むメタデータが有効な SQL ではなくなる問題を修正しました。その後にこの定義を読み込むと SYNTAX_ERROR で失敗し、サーバー起動時にはメタデータの読み込みが中断されるため、サーバーがまったく起動できなくなります。このような定義はラウンドトリップ可能になり、substring(x, a, b, c) 形式の既存のメタデータファイルも再び読み取り可能になったため、影響を受けたサーバーも手動操作なしで起動できるようになりました。#112195 (Groene AI).
  • ローカルメタデータが Keeper と乖離した TimeSeries テーブルにより、Replicated データベースでのレプリカ復旧が永久にハングし、レプリカが再びデータベースを提供できず、再起動後も壊れたままになる問題を修正しました。このようなテーブルの内部テーブルは、DROP を実行できないバックグラウンドタスクに延期するのではなく、復旧メタデータトランザクションがまだ利用可能な間に削除されるようになりました。#112218 (Groene AI).
  • 同じクエリで親サブカラムも読み取る場合に、要素が null 非許容の LowCardinality(T) である Nullable(Tuple(...)) カラムのサブカラムを読み取る処理を修正しました。Compact パーツでは、親サブカラムが誤った値を返す、クエリが Unexpected return type from assumeNotNull で失敗する、または抽出されたサブカラムが LowCardinality(Nullable(T)) バッファにデシリアライズされ、そのサブストリームが親サブカラムの読み取りと共有されることで、サーバーが string_view 強化アサーションにより停止することがありました。#112232 (Groene AI).
  • サンプリングクエリプロファイラが有効な場合に pthread_rwlock がウェイクアップを失うことで macOS 上で発生する恒久的なサーバーハング (Apple バグ FB24027930) を修正しました。Darwin では、pthread_rwlock をシグナルに対して堅牢な実装に置き換えました。#112267 (Raúl Marín).
  • クエリが geohashesInBoxarrayFoldsleepbase58Decodeh3PolygonToCells、または h3PolygonToCellsWithContainment を評価している間に max_execution_time および KILL QUERY が無視される問題を修正しました。このようなクエリは、キャンセル後も数分間実行され続ける可能性がありました。これには、ソートキー、スキップ索引、PARTITION BY キーなど、テーブルメタデータに保存された式内の評価も含まれます。#112273 (Groene AI). #113456 (Groene AI).
  • FINALPREWHEREフィルター、小さいLIMITmake_distributed_plan = 1を使用するクエリで、選択するカラムがテーブルのカラム順とは異なる順序で列挙されている場合に発生する論理エラーCannot add step Expression to QueryPlan because it has incompatible header with root step JoinLazyColumnsStepを修正しました。遅延マテリアライゼーションが出力ヘッダーを保持せずにクエリプランのノードを置き換えていたため、クエリプランに不整合が生じていました。 #112303 (Groene AI).
  • スキーマにタプル内にネストされたタプルを含むIcebergテーブルへの書き込みを修正しました。公開されたテーブルメタデータで内部タプルのフィールド名が位置名12、…に置き換えられていたため、デフォルトのParquet形式ではINSERTINCORRECT_DATAで失敗し、Avroではカラムを読み戻せませんでした。 #112480 (Groene AI).
  • マージするパーツのいずれかが空の場合 (たとえば、そのパーツのすべての行を削除するmutationの後) に、テキスト索引を持つパーツのマージ時に発生するATTEMPT_TO_READ_AFTER_EOFエラーを修正しました。 #112490 (Anton Popov).
  • toDecimal32のscaleやtoDateTimeのtimezoneなど、定数でなければならないargumentがスカラーサブクエリから取得され、旧analyzerが使用されている場合に発生する誤った結果および論理エラーを修正しました。このようなargumentは値がゼロまたは空であるかのように解析されていたため、宣言された結果型と計算された値が一致せず、CREATE VIEWおよびCREATE MATERIALIZED VIEWによって誤ったカラム型が永続化されていました。 #112492 (Groene AI).
  • ReplicatedMergeTreeレプリカが、自身の保留中のALTER... ADD COLUMNを適用する前に別のレプリカから取得したパーツにmutationを実行する際に発生するLOGICAL_ERROR (“Part… contains column… that is absent in table…”) を修正しました。このようなmutationは、メタデータ変更が適用されるまで延期されるようになりました。 #112510 (Groene AI).
  • projection内でGROUP BY、ORDER BY、arrayJoinを使用した場合に誤ったクエリ結果が返される問題を修正しました。 #101775 (Yash ).
  • enable_hash_ring_filtering = 1を指定したS3Queue/AzureQueueで、Batchに処理不能なファイルが含まれ、同時にBatchをprocessingに設定するKeeper requestが失敗した場合に発生するサーバークラッシュ (範囲外アクセス) を修正しました。 #108977 (Groene AI).
  • Wideパーツを持つテーブルで、ALTER TABLE... MODIFY COLUMNによりカラムを動的subcolumnsを持つ型 (例: VariantからDynamic) に変更した後、そのパーツを読み取るかマージする際に発生する論理エラーStream <col>.variant_discr... is not found (debugおよびsanitizerビルドではサーバー中断) を修正しました。 #110204 (Groene AI).
  • 負のoffsetを持つtimezoneで、極端なDateTime64値 (例: INT64_MIN) をTime/Time64へ変換する際に発生する符号付き整数オーバーフロー (UBSan) を修正しました。 #110451 (Groene AI).
  • _part_offsetまたはcommit-order projectionを持つMergeTreeテーブルで、allow_part_offset_column_in_projectionsまたはallow_commit_order_projectionを無効にした後にテーブルをdetachするかサーバーを再起動すると、以後ATTACHできなくなる問題を修正しました。これら2つの設定はCREATE時のゲートであるため、ATTACH時には再チェックされなくなりました。 #110570 (Groene AI).
  • analyzer_compatibility_join_using_top_level_identifier = 1 を使用すると、JOIN... USING 内の識別子を、SELECT リスト内の部分式で定義されたエイリアスから解決できるようになりました (例: SELECT uniqExact(lower(x) AS id) FROM t1 JOIN t2 USING (id)) 。これは旧アナライザの動作と一致します。以前は最上位のプロジェクションエイリアスのみが考慮されており、このようなクエリは設定を有効にしていても UNKNOWN_IDENTIFIER 例外で失敗していました。一致するエイリアスがネストされている場合にも、この設定を提案するエラーヒントが表示されるようになりました。#110739 (Dmitry Novik).
  • 未認証のリクエストによって、転送されたクライアントアドレスヘッダーで指定されたホスト名を ClickHouse が解決できる問題を修正しました。ClickHouse はこれらのヘッダーから数値形式の IP アドレスのみを受け入れるようになりました。無効な値は、DNS 解決を行わずに転送元アドレスのクォータ割り当てでは無視されます。auth_use_forwarded_address が有効な場合、無効な転送元アドレスは認証時に拒否されます。拒否は debug レベルでログに記録されます。#111060 (Dmitriy Borisenko).
  • 行ポリシーと additional_table_filters が、クエリで他に選択されていない同じカラムを参照する場合の NOT_FOUND_COLUMN_IN_BLOCK を修正しました。#111099 (Groene AI).
  • アナライザが有効な場合に、ビューに保存されたクエリ内で CTE 名により修飾されたカラム (cte_name.column) に対して発生する UNKNOWN_IDENTIFIER エラーを修正しました。#111386 (Dmitry Novik).
  • 並列レプリカでの読み取り時、クエリがイニシエーター上のプロジェクション最適化 (exact-count、minmax-count、または範囲を選択しない保存済みの集約/通常プロジェクション) によって完全に処理される場合に、サーバーを停止させる可能性がある LOGICAL_ERROR (Got read request from replica N for unknown stream...) を修正しました。#111689 (Groene AI).
  • toStartOfInterval の3引数オーバーロードにおける符号付き整数オーバーフローを修正しました。Int64 の下限付近の origin 引数に対し、この関数はエラーを報告する代わりにラップアラウンドした値を返していました。#112045 (Alexey Milovidov).
  • 2つのサブ結合がどちらも出力カラムを生成しない複数テーブル結合で発生する LOGICAL_ERROR 例外 (Block structure mismatch in joined block stream) を修正しました。たとえば、query_plan_optimize_join_order_limit0 または 1 に設定されている場合の SELECT count() FROM t1, t2, t3, t4 WHERE (t1.b = t2.b) AND (t3.a = t4.a) です。#112205 (Groene AI).
  • values テーブル関数で、String/テキストカラムに挿入された非リテラルの Bool 定数 (例: CAST(true, 'Nullable(Bool)')) が、true/false ではなく 1/0 としてレンダリングされる問題を修正しました。#112308 (Yakov Olkhovskiy).
  • 位置削除によって空になった Iceberg データチャンクをパーティション化する際に発生する LOGICAL_ERROR (partitions_count > 0) を修正しました。たとえば、データファイルが完全に削除されたパーティション化済み Iceberg テーブルのコンパクション中に発生します。#112432 (Pedro Ferreira).
  • 値パーサーで読み戻せないテキスト値に対して、スキーマ推論が数値型を提案する問題を修正しました。推論では、不完全な指数部 (1e+) 、仮数部のない値 (.) 、繰り返された符号 (++inf) を受け入れていましたが、推論されたスキーマの読み取り時に readFloatTextPrecise がこれらを CANNOT_PARSE_NUMBER として拒否していました。Dynamic 列では、これは INSERT 時のエラーとなっていました。現在は、リーダーが実際に使用するパーサーで数値を検証します。これにより、推論される型が max_read_buffer_size に依存するケースも解消され、0e5 のような有効な先頭ゼロ付き指数形式を、CSV と同様に TSV でも Float64 と推論できるようになります。#112226 に追従し、#112105 の指数部に関する問題を解決します。#112453 (Groene AI)。
  • PromQL クエリのエラー位置を正しく報告するようにしました。#112494 (Minh Vu)。
  • クラスター全体で集計するクエリを serialize_query_plan = 1 およびプランベースの並列レプリカで実行した際に発生する LOGICAL_ERROR (Cannot add transform Resize to Pipes because it has no outputs) を修正しました。これは、マージステップでパイプラインがストリーム数ゼロにリサイズされることが原因でした。#112506 (Groene AI)。
  • 削除できないテーブルを作成できてしまう、テーブル名の長さチェックにおける符号なしアンダーフローを修正しました。エスケープ後のデータベース名が 214 バイトに達すると、metadata_dropped ファイル名に対して計算される上限値がラップアラウンドし、CREATE TABLE は受け入れられる一方、後続の DROP TABLE または DROP DATABASEFile name too long で失敗していました。このような名前は、その境界の直下ですでに返されているものと同じエラーである ARGUMENT_OUT_OF_BOUND で拒否されるようになりました。#112527 (Groene AI)。
  • getClientHTTPHeader をサブクエリ内で使用した際の Context has expired 例外を修正しました。#112533 (Alexey Milovidov)。
  • s3_allow_server_credentials_in_user_queries がクエリで指定された extra_credentials(role_arn = '...') を誤って拒否する問題を修正しました。明示的なロールを指定する STS assume-role は常に許可されるようになりました。これはサーバー自身の認証情報をクエリに公開せず、プライベート S3 bucket へのアクセスを許可するための文書化された方法です。#112603 (Raúl Marín)。
  • ORDER BY がディスクにスピルするクエリで、読み取りカウンター (read_rowsread_bytesProfileEvents['SelectedRows']ProfileEvents['SelectedBytes']) と READ_ROWS および READ_BYTES の QUOTA が過剰に計上される問題を修正しました。外部ソートの一時ファイルから再読み取りされた行がソース読み取りとして再度カウントされていたため、スピルするクエリでは読み取り量が過大に報告され、QUOTA 内に収まっているにもかかわらず QUOTA_EXCEEDED で拒否される可能性がありました。#112645 (Groene AI)。
  • 書き込み形式が Avro の Iceberg table で、型が listmap、または struct"required": false と宣言されたフィールドが、["null", T] ユニオンなしで必須としてシリアル化される問題を修正しました。この結果、データファイル自体のスキーマがテーブルメタデータと一致せず、他の Iceberg リーダーからは必須フィールドとして認識されていました。このようなフィールドは、オプションフィールドに対して Iceberg 仕様で使用される ["null", T] ユニオンとして書き込まれるようになりました。#112648 (Groene AI)。
  • WHERE 述語に delta-kernel の述語変換器で処理できないサブ式が NOT 配下にある場合、DeltaLake テーブルが返す行数が少なすぎる問題を修正しました。このようなサブ式は、以前のように子イテレータの終端としてではなく、明示的な未知の述語として delta-kernel に報告されるようになりました。これにより、外側の連言が暗黙的に切り詰められることがなくなります。#112652 (Groene AI).
  • 同時実行中のクエリで共有されるアクセス権ツリーを const メソッド AccessRights::getFilters が変更することにより発生し、シャットダウン時にサーバーがクラッシュする可能性があったヒープ破損を修正しました。#112692 (Groene AI).
  • ARRAY JOIN 句に式がない場合にクエリのフォーマットで発生する論理エラーを修正しました。このような句は、空の USING と同様に、受け入れて再解析できないテキストにフォーマットするのではなく、解析時に SYNTAX_ERROR として拒否されるようになりました。#112699 (Groene AI).
  • 分散クエリプランのローカル実行 (distributed_plan_execute_locally = 1) でクエリがハングする問題を修正しました。データを生成するソースが開始される前に、インメモリ交換リーダーが唯一のパイプラインスレッドをブロックする可能性がありました。#111762 (Alexander Gololobov).
  • "required": false と宣言され、型が listmap、または struct である Iceberg フィールドが、Parquet フッターに REQUIRED として書き込まれる問題を修正しました。このようなフィールドは、公開された Iceberg スキーマおよび他のリーダーと整合する OPTIONAL として書き込まれるようになりました。#112669 (Groene AI).
  • クエリが実行時にプロセッサを削除する場合 (たとえば、遅延読み取りまたは外部ソートを伴う FINAL) にサーバーをクラッシュさせる可能性があった、パイプラインエグゼキュータのヒープ使用後解放を修正しました。この問題は AST fuzzer により検出されました。#111017 (Groene AI).
  • 共有ストレージスナップショット (設定 enable_shared_storage_snapshot_in_query) を使用するクエリがスナップショットからデータパーツを除去する際に発生する使用後解放 (セグメンテーション違反) を修正しました。たとえば、クエリの別の部分が同時に読み取る同じ MergeTree テーブルを、ストリーミングサブクエリが読み取る場合です。#111192 (Alexey Milovidov).
  • AggregateFunction 列を TTL 式でサポートされない方法で使用する場合 (例: TTL toDateTime(state)) 、後で TTL 実行中に ILLEGAL_TYPE_OF_ARGUMENT で失敗するのではなく、CREATE TABLE 時に拒否するようにしました。これは Variant の代替値および Dynamic 値内に含まれる状態も対象とします。finalizeAggregation のような有効な状態対応コンシューマーは引き続き受け入れられます。#107366 (Ria Khatoniar).
  • Distributed テーブルに対するクエリで、MATERIALIZED CTE が結合ツリー内の複数の位置 (たとえば、結合された 2 つのサブクエリ、または結合されたサブクエリと WHERE 内のスカラーサブクエリ) から参照される場合に発生する LOGICAL_ERROR (CTE '...' does not have query tree, but was not planned yet) を修正しました。例外を発生させる代わりにクエリが実行されるようになりました (デバッグ/サニタイザービルドではサーバーが中断していました) 。#108924 (Groene AI).
  • バケット化された Map シリアライゼーションで元のキー順序を保持するようにし、その順序に依存する比較操作を修正しました。#109178 (Pavel Kruglov).
  • IcebergテーブルでALTER TABLE... EXECUTE expire_snapshotsを実行した後、保持されているスナップショットのsystem.iceberg_historyにおけるmade_current_at1970-01-01になる問題を修正しました。また、メタデータにsnapshot-logがないテーブルでsystem.iceberg_historyが行を返さない問題も修正しました。#111781 (Groene AI).
  • FixedStringテキストの試行パースで、パースに失敗した際に部分的に追加されたバイトがカラムに残る問題を修正しました。これにより、Variant/Array/Nullableカラムのシリアライゼーション中にSizes of nested column and null map of Nullable column are not equalという論理エラーが発生したり、結果のバイトがずれたりする可能性がありました。#111908 (Groene AI).
  • replaceOnereplaceAllreplaceRegexpOnereplaceRegexpAllmax_execution_timeおよびKILL QUERYを無視する問題を修正しました。1回の呼び出しでも処理中にキャンセルを確認するようになったため、大きな値や多数の行に対する長時間実行の置換処理は、完了までサーバースレッドを占有するのではなく停止します。このような呼び出しでは部分結果を返せないため、timeout_overflow_mode = 'break'では期限超過がエラーとして発生します。定数畳み込み時は常に、パイプラインではエグゼキュータのブロック間チェックより前にこのチェックポイントに到達した場合に発生します。後者では引き続きクエリはエラーを出さずに停止します。#112483 (Groene AI).
  • 通常のVIEWの本体がCREATE VIEW v AS SELECT x FROM {db:Identifier}.tのようにクエリパラメータを介してテーブルまたはDictionaryを参照する際に発生する論理エラーおよび誤った依存関係レコードを修正しました。このようなビューは、現在のデータベース内の同名テーブルへの参照依存関係を記録しなくなったため、無関係なテーブルを再びdropできるようになりました。#112704 (Groene AI).
  • カラムがdropされた後に再追加されたNested要素サブカラムを誤った型で読み取る問題を修正しました。このようなサブカラムを親カラムとともにselectすると、ブロックは要素型を宣言したままであるにもかかわらず、サブカラムの位置に要素全体が返されていました。これにより、リリースビルドでは不定の値が生成され、デバッグおよびsanitizerビルドでは論理エラーが発生していました。#112769 (Groene AI).
  • Quantized('product',...)コーデックを持つカラムのproduct_quantization_codebookサブカラムを読み取る際のCannot read all data of type FixedStringを修正しました。パートごとのコードブックはすべてのgranulesのデータの後に書き込まれるため、マークで区切られておらず、マーク範囲がパートの最終マークより前で終了する読み取りでは短く読み取られる可能性がありました。#112818 (Alexey Milovidov).
  • Fileエンジンまたはfileテーブル関数へのINSERTで、Avroなど追記をサポートしないフォーマットの空でないファイルに追記する際に発生するセグメンテーション違反およびサイレントなデータ破損を修正しました。ファイルディスクリプタまたはパーティション化されたパスを介した書き込みでは既存のチェックが回避されるため、フォーマットのプレフィックスが抑制され、既存のバイト列の後に2つ目のヘッダーが書き込まれてファイルが読み取り不能になっていました。このようなINSERTは、通常のパスの場合と同様に、現在はCANNOT_APPEND_TO_FILEで拒否されます。#112839 (Groene AI).
  • 関数の構築時にクライアントの接続IDをキャプチャすることで、サブクエリ内で使用したconnectionIdContext has expiredを発生させる問題を修正しました。#112533をクローズします。#112870 (ClickGap AI Bot).
  • JSON 数値の読み取りに使用される Poco::NumberParser で、対象の型に収まらない整数のパースを修正しました。このような数値は拒否されるべきところ、誤った値として暗黙的にパースされていました (たとえば 184467440737095516171 になっていました) 。また、Int64 の最大値を超える UInt64 数値は、AST JSON のラウンドトリップで保持されませんでした。#112904 (Alexey Milovidov).
  • NULL と比較する Array および Map 値に対する IS DISTINCT FROM を修正しました。#103042 をクローズします。#103162 (yanglongwei).
  • リーダーで実行される複製対応の分散 DDL で再試行回数を使い果たした場合に、後続の ON CLUSTER DDL クエリが恒久的にブロックされることを防止しました。#108505 (Ahaan Limaye).
  • 相関サブクエリと correlated_subqueries_default_join_kind = 'left' を使用する分岐を集合演算 (INTERSECT / UNION ALL / EXCEPT) で結合した際に発生する LOGICAL_ERROR (“すべての入力が完了する前に ChunkBuffer から chunk を抽出しようとしています”) を修正しました。#108554 (Groene AI).
  • 範囲外の浮動小数点値 (BFloat16Float32Float64) および Int64::max() を超える UInt64 値から DateTime および Time への変換が、すべてのアーキテクチャで確実に範囲境界へ飽和するようになりました (以前は範囲外変換の結果がアーキテクチャに依存し、x86-64 ではラップアラウンドする可能性がありました) 。また、非有限値 (NaNinf) は任意の結果を生成する代わりに例外をスローするようになりました。同じ修正を、toDate における浮動小数点数から Date への変換パス、および UInt64 と wide 整数 ((U)Int128(U)Int256) から Date および Date32 への変換にも適用しました。これらは飽和する代わりにエポック以前の日付を返す可能性がありました。数値から Time への変換は、すべての数値ソース型で型の範囲に飽和するようになりました (以前は、narrow unsigned または wide integer ソースの値がクランプされずに格納され、出力時にのみクランプされていました) 。また、Time への正確なキャストでは、Time がサポートする負の値が拒否されず、収まらない値が暗黙的に飽和されることもなくなりました。数値から Date32 への正確なキャスト (accurateCastaccurateCastOrNull) は、範囲外または非有限値を暗黙的に飽和させず、Date および DateTime と同様に例外をスローするか NULL を返すようになりました。また、OrDefault 系はそのような入力に対して Date32 のデフォルト値を返します。非整数の浮動小数点数から DateDate32DateTime、または Time への正確なキャストは、暗黙的に切り捨てられる代わりに拒否されるようになりました。また、誤って toDateTime64 の例を示し、DateTime64 の値の範囲を説明していた toDateTime32 関数のドキュメントを修正しました。#110459 (Alexey Milovidov).
  • テーブルの fsync_part_directory 設定が有効な場合、ALTER TABLE... DETACH PARTITION/PART は、detached/ 配下に作成するクローン (パーツのサブツリーとディスクルートまでのディレクトリチェーン) を、Full (ディレクトリ) および Packed パーツストレージの両方で fsync するようになりました。以前は、アクティブセットから行を削除する空のカバリングパーツは fsync される一方で、クローンは一度も fsync されなかったため、確認応答の直後に電源が失われると、btrfs 上のデタッチされたデータが破壊される可能性がありました (同期されていないクローンのディレクトリエントリがロールバックされ、detached/ が空になり、ATTACH する対象がなくなります) 。既存の fsync_part_directory 設定によって制御され、デフォルトの動作は変更されません。#111426 (Groene AI).
  • 呼び出し元に置換対象オブジェクトに対する drop 権限がない場合に、CREATE OR REPLACE が置換前のオブジェクトを内部名で残してしまう問題を修正しました。#111466 (Nikolay Degterinsky).
  • 複数のパーティションを持ち、行ポリシーが定義されたテーブルに対して STREAM 読み取り (enable_streaming_queries = 1) を実行するとクラッシュする問題を修正しました。デバッグおよび sanitizer ビルドでは Filter column... not found in DAG outputs 論理エラーで失敗し、リリースビルドではセグメンテーション違反が発生する可能性がありました。#111572 (Groene AI).
  • スナップショットサマリーが不正確または破損している Iceberg テーブルでの count() を修正しました。単純な count 最適化では、マニフェストファイルから正確な行数を取得し、行レベルの削除によってメタデータ上の件数が不正確になる場合は実際のスキャンにフォールバックするようになりました。また、Iceberg の OPTIMIZE TABLE が不正なマニフェストリストの件数および系統情報を書き込む問題を修正し、破損したサマリーに対する totalBytes メタデータの堅牢性を向上させました。#111617 (Melvyn Peignon).
  • PREWHERE 条件が複数の読み取りステップに分割された場合に、パートに存在しない DEFAULT カラムが DEFAULT 式ではなく型のデフォルト値で埋められる問題を修正しました。#111757 をクローズします。#111795 (Yarik Briukhovetskyi).
  • enable_parallel_blocks_marshalling (デフォルトで有効) が設定されたシャードで実行される分散クエリで発生する、Expected UInt64 column for __grouping_set, got BLOB および ColumnBLOB should be converted to a regular column before usage 論理エラーを修正しました。たとえば、ローカルレプリカを持つクラスターでの GROUP BY GROUPING SETS、またはローカルテーブルと分散テーブルにまたがる Merge テーブルの読み取りで発生していました。同じプロセス内で消費されるブロックを含むプランには、BlocksMarshallingStep が追加されなくなりました。#111997 (Groene AI).
  • 破損した MergeTree 統計情報が読み込まれた場合、エラーを無視するのではなく操作が失敗するようになりました。#112201 (Sergey Kuznetsov).
  • 別の Merge テーブルまたはカラム型が異なる materialized view 上の Merge テーブルで PREWHERE を使用した際に発生する論理エラーを修正しました。また、リモートサーバーから読み取るテーブル (Distributed テーブル、またはそれをラップするテーブル) で行ポリシーが暗黙的に無視され、本来ポリシーで非表示にすべき行が公開される可能性があった問題も修正しました。このようなクエリは ILLEGAL_PREWHERE エラーで拒否されるようになりました。代わりに、各リモートサーバー上の基盤となるローカルテーブルにこれらのポリシーを定義してください。なお、serialize_query_plan = 1 を使用して送信される読み取りには、このポリシーは引き続き適用されません。これは別の既存のバグです。#112326 (Pedro Ferreira).
  • connection_pool_max_wait_ms を修正し、ドキュメント上およびデフォルト値である 0 が無限タイムアウトを意味するようにしました。接続プールが満杯だったクエリは、以前はタイトなループで再試行され、CPU を消費するとともに、反復ごとに No free connections in pool. Waiting 0 ms. をログ出力していました。現在は、接続がプールに返却されるまで待機します。#112053 をクローズします。#112380 (Groene AI).
  • HDFS 上で確認応答済みの Iceberg 書き込みが暗黙的に失われる問題を修正しました。Iceberg コミットでは、条件付き書き込みを使用して新しい各メタデータファイルを公開しますが、HDFSObjectStorage は条件を破棄して通常の上書きを実行していたため、同時書き込みを行うすべてのライターに確認応答が返される一方で、1 つのライターのスナップショットが到達不能になっていました。HDFS は条件付き書き込みを拒否するようになったため、HDFS 上のストレージ管理 Iceberg 書き込み、および明示的なカラムリストを含む CREATE TABLE... ENGINE = IcebergHDFS(...) は失敗するようになりました。読み取りへの影響はありません。#112437 (Groene AI).
  • 行数を変更する内部クエリを持つmaterialized viewを介してINSERTが実行され、重複排除対象のターゲットテーブルがパーティション化されている場合に、挿入の重複排除で発生する範囲外読み取り (リリースビルドではクラッシュ) を修正しました。DeduplicationInfo::filterToPartitionは、 (より小さい) view出力ブロックのサイズに合わせたパーティションセレクタ上でトークンのソース行範囲を走査し、各重複排除トークンをパーティションに割り当てていたため、範囲外を読み取っていました。行数変更後はソース行からパーティションへのマッピングが存在しなくなるため、materialized viewのターゲットではすべてのパーティションにすべてのトークンを保持するようになりました。これにより、範囲外の走査、および同じ挿入に対して後続のガードが発生させていたNOT_IMPLEMENTEDを回避します。#112649 (Sema Checherinda).
  • finalizeAggregationを、状態表現は共有するものの異なる型にファイナライズされる別々の関数のaggregate stateを持つカラムに適用した場合に発生する論理エラー (デバッグビルドおよびsanitizerビルドでは中断) を修正しました。たとえば、UNIONで結合された、またはarrayReduceによって生成されたquantileStatequantilesState(0.9)が該当します。このようなクエリでは、クラッシュする代わりに通常のエラーが発生するようになりました。#112662 (Zain Ul Abidin).
  • KeeperMapテーブルに対するDELETEが、一致した行のうち最初のmax_block_size行しか削除しないにもかかわらず、mutationが正常に完了したと報告する問題を修正しました。また、keeper_map_strict_mode = 1を指定したDELETEがアトミックでない問題も修正しました。バージョンなしの削除にフォールバックして同時更新された行を削除する可能性があり、一致した行をブロックごとに適用していたため、競合により削除が部分的に適用されたままになる可能性がありました。#112777 (Alexey Milovidov).
  • 未完了のRENAME COLUMN alter-mutationがまだ進行中である間に、MergeTreeテーブルに対するALTERが適用される問題を修正しました。これにより、ストレージメタデータが互換性のない形で更新され、後続のmutationが完全に停止する可能性がありました。#112783 (Mikhail Artemenko).
  • enable_analyzer = 0がserverのデフォルトである場合に、再帰CTEを含むviewでserverの起動およびATTACHWITH RECURSIVE is not supported with the old analyzerにより失敗する問題を修正しました。#112784 (Nikolay Degterinsky).
  • 両テーブルのカラムを参照する条件を含むON句を持つJOINの右側でJoin table engineを使用した場合に発生する論理エラーを修正しました。たとえば、ON (t.key = j.key) AND (t.a < j.a)が該当します。このようなクエリは、required columns:... but not found any in left tableまたはstd::bad_variant_accessを発生させる代わりに、明確な例外で拒否されるようになりました。#112815 (Groene AI).
  • ON句に混合条件、すなわちON (t1.key = t2.key) AND (t1.a * 10 < t2.a)のようなテーブル間の非等値残余条件を含むJOINで誤った結果が返される問題を修正しました。このような条件を評価するのはhashファミリーのみですが、full_sorting_mergepartial_merge、およびdirectキー・バリューjoinはこれらのjoinを実行できるとして残余条件を黙って無視し、余分な行を返していました。これらは現在実行を拒否するため、代わりにhashアルゴリズムが使用されます。#112831 (Groene AI).
  • direct I/Oを使用するencryptedディスクからCompactパートを読み取る際に発生するReadBufferFromEncryptedFile: Wrong file position論理エラーを修正しました。この問題により、mergeがsystem.replication_queueで停止していました。#112943 (Alexey Milovidov).
  • 未認識の文字列が長く続く PromQL クエリ (例: NUL バイトで埋められた FixedString 値) のパース時に発生する二次的な速度低下を修正しました。以前は、メガバイト規模の無効な入力をパースするとスレッドが数十分間占有され、クエリ分析中に発生するためキャンセルできませんでした。パーサーは最初のエラーで停止するようになりました。#112944 (Alexey Milovidov).
  • 単位が重複している、または長い単位から短い単位の順に並んでいない PromQL 期間を拒否するようにしました。#112954 (Minh Vu).
  • output_format_parquet_parallel_encoding が有効 (デフォルト) で、max_threads が 1 より大きい場合に Parquet へ書き込む際にハングする問題を修正しました。エンコーダーが追加スレッドのスケジューリングに失敗した場合、実行中スレッド数のカウンターがアンダーフローし、書き込みが完了もエラー報告もせず、永続的に進まなくなる可能性がありました。#112959 (Groene AI). #113170 (Alexey Milovidov).
  • geohashesInBox(0., 0., 180., 0., 12) のような面積がゼロのボックスに対して、geohashesInBox が際限なく時間を消費する問題を修正しました。このようなクエリは正しい単一の geohash を返していましたが、行ごとに約 5e8 回の空のループ反復を実行し、max_execution_timeKILL QUERY の両方を無視していました。#112976 (Groene AI).
  • 置換文字列がマッチに参加しなかったキャプチャグループを参照する場合 (例: replaceRegexpAll('abc', '(a)|(b)', '\\2')) の replaceRegexpOne/replaceRegexpAll における未定義動作 (memcpy に null ポインターを渡す問題) を修正しました。#113012 (Alexey Milovidov).
  • 値なしで書き込み済みとマークされた SETTINGS 変更について、true 以外の値を伴う場合は拒否し、クエリのフォーマット時にその値を省略しないようにしました。以前は、細工された AST JSON ペイロードにより、system.query_log および formatQueryFromJSON では値なしの形式が表示される一方で、false を指定した Bool 設定を実行できました。#113025 (Alexey Milovidov).
  • 非常に大きな遅延でバックグラウンドタスクをスケジュールした場合の未定義動作と、サイレントなスケジューリングエラーを修正しました。たとえば、非常に大きな REFRESH AFTER 期間を持つリフレッシャブルmaterialized view で発生します。遅延はオーバーフローするのではなく、表現可能な最大値に制限されるようになりました。#113041 (Groene AI).
  • 物理型が宣言された精度に対応する型よりも広い ParquetDECIMAL カラム (例: 物理 INT64 として格納された DECIMAL(9, 2)) を読み取る際の範囲外書き込みを修正しました。このようなファイルは有効な Parquet であり、他のライターも生成しますが、リーダーは宣言された精度に基づいて宛先カラムのサイズを決定する一方、デコーダは物理幅で書き込んでいたため、メモリーが破損していました。このようなファイルを読み取る際、値が宣言された精度に収まらない場合は、破損したデータを返す代わりに DECIMAL_OVERFLOW が発生するようになりました。また、物理型と同等以上の幅を持つ型ヒントを指定すれば、損失なく読み取れます。#113046 (Groene AI).
  • 定数の除数 -1 を指定した非定数カラムに対する intDiv で、他の実行パスのように ILLEGAL_DIVISION 例外をスローせず、最小の符号付き数の除算 (例: intDiv(-9223372036854775808, -1)) が黙ってラップアラウンドする問題を修正しました。このラップアラウンドにより、誤った ORDER BY/DISTINCT 結果が生成される可能性もありました。read-in-order 最適化では、負の定数による intDiv を正しく単調とみなしますが、ラップアラウンドした値がそのソート順序に違反していたためです。 #113048 (Alexey Milovidov).
  • ClickHouse 26.3 で unicode_word トークナイザーを使用して作成したテキスト索引を、以降のバージョンで読み込めない互換性の問題を修正しました。 #113061 (Robert Schulze).
  • PARTITION BY を含むウィンドウ関数や join_algorithm = 'parallel_full_sorting_merge' を使用する結合など、パーティション単位でデータを分散するクエリで、ブロックの分散が完了していない段階で一方のシャードの下流処理が完了した場合に発生する Pipeline stuck 論理エラーを修正しました。 #113190 (Groene AI).
  • 8 バイトを超える型 (UInt128Int128UInt256Int256 およびそれらの Nullable バリアント) の単一の LowCardinality キーを持つハッシュ結合で、誤った結果が返される問題を修正しました。このような結合では、キー値が等しくない行が黙って返されていました。 #113230 (Groene AI).
  • セッションで optimize_respect_aliases = 0 が設定されている場合に、テーブルレベルの ALIAS カラムに対する ALTER TABLE ... ADD PROJECTION によってテーブルが使用不能となり、後続の INSERTUNKNOWN_IDENTIFIER (Missing columns) で失敗する問題を修正しました。 #109091 (Groene AI).
  • MergeTree の右テーブルに対する direct JOIN で発生する NOT_FOUND_COLUMN_IN_BLOCK および LOGICAL_ERROR 例外と、関連するデバッグビルドおよび sanitizer ビルドでの異常終了を修正しました。 #109932 (Groene AI).
  • オペランドに最小共通スーパータイプがない場合に、以前は ILLEGAL_TYPE_OF_ARGUMENT をスローしていた比較を修正しました。Array(Int64)Array(UInt64)、および Array(Int256)Array(UInt256) などの Array を、=!=<<=>>=IS DISTINCT FROMIS NOT DISTINCT FROM で辞書式順序に比較できるようになりました。isDistinctFromisNotDistinctFrom では、サポート対象の非 Array の数値型および Decimal 型の組み合わせについても、例外をスローせず値で比較するようになりました。また、Tuple(Nullable(...)) 内にネストされた Array の等価比較も修正しました。#33897 を修正しました。 #110245 (Diego Gomes Tomé).
  • LowCardinality キーカラムが、LowCardinality を再導入するネストした CAST チェーンでラップされている場合に、主キー索引解析中に発生する LOGICAL_ERROR (Bad cast from ColumnString to ColumnLowCardinality) を修正しました。例: WHERE CAST(CAST(s, 'LowCardinality(String)'), 'String') < '5'。デバッグビルドおよび sanitizer ビルドではサーバーが異常終了し、リリースビルドではクエリが失敗していました。 #111050 (Groene AI).
  • 左キーが Nullable でストレージキーがそうでない場合に、USING を使用した Join エンジンテーブルに対する FULL JOIN で誤った結果が返される問題を修正しました。NULL キーを持つ一致しない左行で、NULL ではなく 0 が返されていました。 #111371 (Groene AI).
  • MaterializedPostgreSQL データベースを Merge テーブル経由で読み取った際に、古い行バージョンや削除済みの行バージョンが表示される問題を修正しました。このような読み取りは、直接読み取りと同様に FINAL および _sign = 1 のフィルタリングを適用して、MaterializedPostgreSQL ラッパー経由で行われるようになりました。#112382 (Alexey Milovidov).
  • たとえば ALTER TABLE ... MODIFY COLUMN の後に ALTER TABLE ... MATERIALIZE PROJECTION を実行した場合など、テーブルメタデータのカラム型より古いカラム型を持つパートに対してパート全体を書き換える mutation を実行した際に発生する Bad cast from ColumnNullable to ColumnString を修正しました。#112501 (Alexey Milovidov).
  • 行ベースの入力形式で、ブロックの解析中に数分間 KILL QUERYmax_execution_time が無視される問題を修正しました。現在は 8192 行ごとにキャンセルを確認するため、停止された INSERT (バックグラウンドの async-insert フラッシュを含む) はブロックの末尾まで実行されず、速やかに停止します。#112646 (Groene AI).
  • RENAME TABLE が最大テーブル名長を宛先データベースではなくソースデータベースに対して確認する問題を修正しました。名前の長いデータベースにテーブルをリネームすると、DROP TABLE で削除できないテーブルが作成される可能性があり、そのようなデータベースからテーブルをリネームする操作も誤って拒否されていました。#113019 (Groene AI).
  • 宣言されたカラム型と内部クエリが生成する型が異なる VIEW から選択する際に発生する UNKNOWN_IDENTIFIER を修正しました。たとえば、String カラムに対して varr Array(UInt8) を宣言している場合の SELECT sum(length(arr)) FROM v です。デフォルトの optimize_functions_to_subcolumns = 1 では、オプティマイザが length(arr)arr.size0 サブカラムの読み取りに書き換え、その名前を当該サブカラムを持たない内部クエリに渡していました。#113057 (Groene AI).
  • mutation の predicate で明示的なデータベース名なしに merge テーブル関数を使用した場合に発生する例外 (リリースビルドではサーバーの起動を妨げるエラー) を修正しました。テーブル名の場合と同様に、現在は mutation 対象テーブルのデータベースが使用されます。#113185 (Alexey Milovidov).
  • share_nested_offsets = 1 を使用する MergeTree テーブルで、削除後に再追加された Nested メンバーのサブカラムと、同じグループ内に存在するメンバーを同時に読み取った際の不正な結果および LOGICAL_ERROR を修正しました。読み取りが複数のブロックにまたがる場合、存在するメンバーは後続のブロックの値を返していました。#113225 (Groene AI).
  • 別のレプリカを待機している間にテーブルのシャットダウンが開始された場合 (たとえば、同時実行中の DROP DATABASE ... SYNC が原因の場合) に、ReplicatedMergeTreealter_sync = 2 を指定した ALTEROPTIMIZETRUNCATE、およびパーティション操作ステートメントがハングする問題を修正しました。このようなステートメントは現在 UNFINISHED で失敗し、max_execution_timeKILL QUERY も考慮されます。#113228 (Groene AI).
  • stdout が TTY の場合に、ANSI エスケープシーケンスを INTO OUTFILE に書き込まないようにしました。#113252 (Azat Khuzhin).
  • 異なるエントリの期限が同一の場合に async insert キューでまれに発生する use-after-free を修正しました。#113363 (Miсhael Stetsyuk).
  • 同じバックアップから複数の ENGINE = Backup データベースを作成した場合や、このようなデータベースを別名で再作成した場合に、テーブルが何のエラーもなく空になる問題を修正しました。Backup データベースを支えるストレージポリシーは、ローカルデータベース名を含む名前で識別されるようになったため、各データベースには自身のデータパス用のディスクが割り当てられます。#113378 (Groene AI).
  • MergeTree テーブルに、時刻式が同一で WHERE 条件だけが異なる TTL ... DELETE WHERE ルールが2つ以上ある場合、行が削除されない問題を修正しました。TTL 削除マージ後にパートの rows_where_ttl_info がゼロにリセットされるため、このパートに対する TTL マージは以降スケジュールされず、期限切れの行がエラーやログメッセージなしに無期限に保持されていました。#113116 をクローズします。#113384 (Groene AI).
  • 多数のテーブルに一致する Merge テーブル (または merge テーブル関数) に対するクエリが、すべての子テーブルのプランニング完了後だけでなく、テーブルごとのクエリプラン構築中にも KILL QUERYmax_execution_time に応答するようになりました。timeout_overflow_mode = 'break' では、ドキュメントどおり、残りの一致テーブルのクエリプラン構築も停止し、エラーを返さずに部分結果を返すようになりました。#113415 (Alexey Milovidov). #113642 (Groene AI).
  • Ctrl+C でクエリをキャンセルした後、または stdin からデータを読み取る INSERT の後に、clickhouse-client0 ではなく終了コード 139 で終了する問題を修正しました。#113431 (Groene AI).
  • テキスト索引の preprocessor および postprocessor 式から ALIAS カラムを参照できるようにしました。#110014 (Jimmy Aguilar Mena).
  • 並列レプリカが重複した行を返す複数のケースを修正しました。プランベースの並列レプリカでは distributed_aggregation_memory_efficient が無視されていたため、メモリ効率的なマージのバケットが順不同で到着し、二重にマージされていました。また、クエリに並列レプリカを適用できない場合、または parallel_replicas_custom_key なしで parallel_replicas_mode がカスタムキーによるフィルタリングを要求した場合には、データがレプリカ間で分割されていないにもかかわらず、シャードがすべてのレプリカから読み取られていました。#112942 (Nikita Taranov).
  • データ投入用の SELECT が失敗し、database_atomic_wait_for_drop_and_detach_synchronously が有効な場合に、CREATE TABLE ... AS SELECT を停止できなくなる問題を修正しました。一時テーブルをクリーンアップする内部 DROP がバックグラウンド削除キューを待機し、KILL QUERYmax_execution_time の両方を無視していました。#113504 (Groene AI).
  • ALTER TABLE ... EXECUTE remove_orphan_files が、Iceberg テーブルで使用中の metadata/version-hint.text ファイルを削除する問題を修正しました。到達可能セットのエントリは、末尾スラッシュが存在しない値に末尾スラッシュがあると仮定して文字列連結により構築されていたため、実際のヒントファイルが到達可能と認識されず、older_than の閾値を超えると削除されていました。iceberg_use_version_hint = 1 の場合、その後テーブルをまったく読み取れなくなっていました。#113548 (Groene AI).
  • パラメーター化ビューを修飾なしで参照するクエリが分片に送信された場合に、そのビューのデータベース情報が失われ、分片自身のデフォルトデータベースを基準に名前解決される問題を修正しました。そのデータベースの内容によっては、クエリが UNKNOWN_FUNCTION で失敗するか、別のビューの行を何も通知せずに返していました。Distributed テーブル経由の INJOINremote に影響します。 #113550 (Groene AI).
  • クエリが indexHint 内のサブクエリで system.databasesname カラムをフィルタリングする際に発生する LOGICAL_ERROR を修正しました。例: SELECT count() FROM system.databases WHERE indexHint(name IN (SELECT 'foo'))#113556 (Groene AI).
  • merge_max_block_size_bytes が空のカラムの byteSize() より小さく設定されている場合に、バックグラウンドマージおよび OPTIMIZE で発生する無限ループを修正しました。空の LowCardinality カラムも Dictionary を保持しているため、1 行もマージされる前にバイト制限に達する可能性がありました。その結果、マージが空のブロックを無限に生成し、CPU コアを 100% 消費したままバックグラウンドプールのスロットを解放しない状態になっていました。 #113585 (Groene AI).
  • Variant カラムに対するクエリが max_execution_time および KILL QUERY を無視する問題を修正しました。複数の Variant 引数を持つ関数呼び出しでは、各引数のすべての代替型ごとに関数を解決していましたが、この処理を行う 2 つのループのどちらもキャンセルを確認していなかったため、このようなクエリは完了するまで停止できませんでした。 #113612 (Groene AI).
  • auto および none の圧縮ヒントをすべて小文字以外の大文字・小文字で記述した場合に発生する Unknown compression method を修正しました。例: file('data.csv.gz', 'CSV', 'x String', 'AUTO')GZIP などのコーデック名はすでに大文字・小文字を区別せずに受け付けられていましたが、これら 2 つの特殊ヒントも同様に扱われるようになりました。 #113631 (Groene AI).
  • 新しいアナライザでの定数畳み込みによって定数 Geometry 値の型が変わる問題を修正しました。Geometry は名前付きの Variant であり、代替型間で同じストレージレイアウトを共有できるため (LineString/RingMultiLineString/Polygon、および空の値) 、代替型だけが異なる 2 つの畳み込み済み定数が 1 つに統合される可能性がありました。たとえば、MULTIPOLYGON EMPTYLINESTRING() になっていました。 #110709 (Groene AI).
  • 唯一のカラムに完全に期限切れとなるカラム TTL が設定され、min_bytes_for_wide_part = 1 が指定された単一カラムの MergeTree テーブルのマージ時に発生する例外 (Cannot calculate columns sizes when columns or checksums are not initialized) を修正しました。 #111169 (Groene AI).
  • バックグラウンドスケジュールプールの起動に失敗しても (たとえば、グローバルスレッドプールの枯渇時に iceberg プールを起動できない場合) 、サーバーが停止しなくなりました。エラーは回復可能な例外として処理されます。system.background_schedule_pool を読み取っても、副作用としてこれらのプールが作成されなくなりました。 #111209 (Groene AI).
  • 破損した索引データに対するネイティブプロトコルでの範囲外読み取りを修正しました。 #112331 (Pavel Kruglov).
  • 2 つのクエリが同時に同じテーブル名を解決した場合に、Filesystem または HDFS データベースが永続的にハングするデッドロックを修正しました。そのデータベースに対する以降のすべてのクエリが無期限にブロックされ、中断もできないため、復旧にはサーバーの再起動が必要でした。 #112495 (Groene AI).
  • レプリカへの接続を確立中の分散クエリで、max_execution_timeKILL QUERY が通知なく効かなくなる問題を修正しました。このようなクエリは、残りのすべてのレプリカへの接続と再試行を続けるのではなく、次回の接続試行時に停止するようになりました。 #112689 (Groene AI).
  • リフレッシャブルmaterialized view がリフレッシュクエリのプランニング中にブロックされた場合に、DROP TABLESYSTEM STOP VIEW がハングする問題を修正しました。 #113188 (Nikolay Degterinsky).
  • ENGINE = Distributed(...) または ENGINE = Buffer(...) を使用し、カラムリストを指定しない CREATE TABLE によって、作成ユーザーに閲覧権限のない参照先テーブルの構造が公開される問題を修正しました。ローカルの CREATE では、構造がユーザー自身のコンテキストで推論されるようになったため、参照先テーブルに対する SHOW COLUMNS 権限が必要です。DDL キューから再実行される CREATE (ON CLUSTER、または Replicated データベース内) は対象外です。 #113220 (Groene AI). #113372 (Groene AI).
  • merge テーブル関数および Merge テーブルエンジンを介して内部 _temporary_and_external_tables データベースを読み取れる問題を修正しました。この問題により、あるセッションが他のセッションや他のユーザーの一時テーブルを読み取ることが可能でした。データベース正規表現でこのデータベースをスキップするようになり、直接アクセスの場合と同様に、明示的に指定することも拒否されます。 #113224 (Alexey Milovidov).
  • countSubstringscountSubstringsCaseInsensitivecountSubstringsCaseInsensitiveUTF8countMatches、および countMatchesCaseInsensitiveKILL QUERYmax_execution_time を無視する問題を修正しました。多数の行、多数の一致、または1つの大きな値に対する呼び出しでは、クエリがキャンセルされた後も数分間実行され続ける可能性がありました。 #113369 (Groene AI). #113886 (Groene AI).
  • テーブルで serialization_info_version = 'basic' を使用している場合、compact パーツの mutation で、そのパーツのシリアライゼーション情報がメモリ内に残っているか、serialization.json から再読み込みされたかによって結果が異なる問題を修正しました。ReplicatedMergeTree では、これによりバイト単位で同一のソースパーツを保持する2つのレプリカが異なる mutation 後のパーツを書き込み、mutation が CHECKSUM_DOESNT_MATCH で失敗していました。 #113500 をクローズします。 #113588 (Groene AI).
  • 同じ snapshot-idIcebergsnapshot-log に複数回出現する場合 (ロールバック後に残る場合など) 、system.iceberg_historymade_current_at が、スナップショットが最新の状態になった時刻ではなく最初にその状態になった時刻を報告する問題を修正しました。 #113598 (Groene AI).
  • EmbeddedRocksDBKeeperMapRedis、または Dictionary などのキー・バリュー ソースに対する JOIN の右側から選択した _table_database などの仮想カラムで、誤った値が返される問題を修正しました。データカラムの値が返される場合や、LOGICAL_ERROR 例外で失敗する場合がありました。 #113698 (Groene AI).
  • 複数の子を持つ Merge テーブル、カラムのみを指定した PREWHERE、および別個の WHERE に対する EXPLAIN ANALYZE が、Required output position N is out of range for pass-through inputs で失敗する問題を修正しました。 #113621 をクローズします。 #113725 (Groene AI).
  • metadata_type = plain_rewritable (例: s3_plain_rewritable) のディスクで、ディレクトリに対する clickhouse-disks moveDIRECTORY_ALREADY_EXISTS で失敗し、空の宛先ディレクトリが残る問題を修正しました。 #113727 (Groene AI).
  • 子テーブルが IN を含む ALIAS カラムを宣言し、そのカラムのデフォルト値が子テーブル間で異なる場合に、Merge テーブルの読み取りが No set is registered for key ... で失敗する問題を修正しました。 #113757 (Groene AI).
  • サブクエリ内の untuple によって生成されたカラムを WHERE が参照する場合 (例: SELECT t.keys FROM (SELECT untuple(arrayJoin(m)) AS t FROM ...) WHERE t.values > 0) に、enable_analyzer = 0UNKNOWN_IDENTIFIER となる問題を修正しました。enable_optimize_predicate_expression の書き換えにより、このような述語が、名前がまだ存在しない HAVING としてサブクエリにプッシュダウンされていました。 #113760 (Groene AI).
  • 1 つのステートメントで ALIAS カラムを物理カラム (DEFAULT または MATERIALIZED) に変更し、かつ CODEC を指定する場合に、ALTER TABLE ... MODIFY COLUMNCannot specify codec for column type ALIAS で失敗する問題を修正しました。#113693 をクローズします。 #113853 (Groene AI).
  • 旧アナライザ (allow_experimental_analyzer = 0) で結合された Merge テーブルに対する ORDER BY ALL および GROUP BY ALL の問題を修正しました。クエリは内部例外で失敗しなくなり、デバッグビルドおよび sanitizer ビルドも中断しなくなりました。 #109139 (Groene AI).
  • initializeAggregation('sumState', 0::UInt64) のように、式に数値キャストを含む値を挿入する際に発生する可能性があった、断続的な Cannot parse string ... as UInt64 ... While executing ValuesBlockInputFormat 例外を修正しました。 #110637 (Groene AI).
  • 正常なローカルディスクが定期的なローカルディスクチェックで障害として報告される問題を修正しました。サーバーが local ディスクとともに埋め込み Keeper を実行している場合、2 つのチェック用スレッドが同じファイルを検査し、一時的に FILE_DOESNT_EXISTCANNOT_READ_ALL_DATA、または CANNOT_UNLINK をログに記録して、BrokenDisks メトリクスでディスクを一時的にカウントすることがありました。 #110773 (Groene AI).
  • プランベースの並列レプリカが有効な場合に、Merge テーブルおよび merge テーブル関数に対するクエリで誤った結果と、論理エラー Cannot serialize FutureSetFromSubquery with no query plan が発生する問題を修正しました。 #112849 (Alexey Milovidov).
  • URL データベースエンジンのテーブルが、読み取り元に対する grant を持たないユーザーにローカルファイルの存在有無を開示しなくなりました。SHOW TABLES 権限のみを必要とする EXISTS TABLE とテーブル名の解決は、ファイルシステムを検査する前に grant チェックを行うようになりました。 #113029 (Alexey Milovidov).
  • 定数畳み込みにより参照先のカラムが除外されたときに TTL 式が使用不能になる問題を修正しました。たとえば、非 Nullablex に対する TTL d + INTERVAL 1 DAY DELETE WHERE isNull(x) では、テーブルへのすべての INSERTMissing columns で失敗していました。また、variant_throw_on_type_mismatch = 0 で作成された Variant カラムに対する TTL 式を持つテーブルがある場合に、サーバーが起動に失敗する問題も修正しました。 #113042 (Alexey Milovidov).
  • postgresql テーブル関数および PostgreSQL テーブルエンジンによる読み取りのキャンセルを修正しました。読み取りの開始中にキャンセルするとトランザクションポインターを巡る競合によりキャンセルが失われ、PostgreSQL がクエリを完了するまでクエリが実行され続ける可能性がありました。 #113150 (Groene AI).
  • UNDROP TABLE が、実行中のクエリによって削除済みテーブルが解放されるのを待機している間に、KILL QUERY で中断できるようになりました。 #113263 (Alexey Milovidov).
  • Poco XML ハンドラーがパース途中で例外をスローした場合に発生する、XML パーサー全体のメモリリークを修正しました。たとえば、多数の一意な要素名を含むドキュメントのパース中に Poco::XML::NamePool がオーバーフローした場合などです。 #113348 (Alexey Milovidov).
  • HDFS ディスクへの書き込みを修正しました。生成されたオブジェクトキーにネストしたディレクトリプレフィックスが含まれる場合でも、不足している親ディレクトリが作成されるようになったため、Parent directory doesn't exist エラーで失敗しなくなりました。 #113396 (Alexey Milovidov).
  • join_use_nulls が有効な場合に、ON 句に ON (t.key = d.key) AND (t.a * 10 < d.a) のような両テーブルにまたがる非等価条件を含む Dictionary への JOIN で、誤った結果が返される問題、およびアサーションを有効にしたビルドでアサーション失敗により中止される問題を修正しました。 #113534 (Alexey Milovidov).
  • イニシエーターで非常に短時間に完了するクエリが、最大 receive_timeout 秒間ハングする問題を修正しました。 #113551 (Nikita Taranov).
  • 更新対象テーブルのデータベースがセッションのデータベースと異なる場合に、UPDATE および論理削除 DELETE が誤ったテーブルを読み取る問題を修正しました。修飾されていないテーブル名および merge テーブル関数は更新対象テーブルのデータベースを基準に解決されるようになり、このステートメントが別のテーブルから選択した行を暗黙的に更新または削除しなくなりました。 #113748 (Groene AI).
  • 並列 INSERT が誤って TOO_MANY_PARTS で拒否される問題を修正しました。max_insert_threads が通常の INSERT を並列化する場合、クエリは自身の兄弟シンクによってコミットされたパーツをカウントしなくなりました。#114015 をクローズします。 #114016 (Alexey Milovidov).
  • 並列レプリカを使用するクエリが GLOBAL JOIN 一時テーブルとして転送されたテーブルの ALIAS カラムを選択する際の NO_SUCH_COLUMN_IN_TABLE、分散 JOIN の両側で同名の ALIAS カラムを宣言する際の MULTIPLE_EXPRESSIONS_FOR_ALIAS、および Distributed テーブルが別の ALIAS カラムに基づく ALIAS カラムを宣言する際 (JOIN USING キーとして使用する場合を含む) の UNKNOWN_IDENTIFIER を修正しました。 #107700 (Yakov Olkhovskiy).
  • 先頭要素が NULL の CSV Tuple の読み取りを修正しました。input_format_csv_deserialize_separate_columns_into_tupleinput_format_null_as_default が有効な場合、\N,1 のような行の先頭の \N がカラム全体の NULL として扱われ、行がデフォルト値に置き換えられ、残りの要素セルで解析エラーが発生していました。現在は先頭の NULL が最初の要素の値として扱われ、input_format_null_as_default はその要素に適用されます。単体の Tuple 全体に対して単一の \N フィールドを指定する行は、残りの要素が不足しているため拒否されるようになりました。そのようなフィールドを再びカラム全体として読み取るには、input_format_csv_deserialize_separate_columns_into_tuple = 0 を設定してください。 #109744 (Groene AI).
  • LIMIT を含む有効な分散クエリでまれに発生する Logical error: 'No more packets are available.' を修正しました。デバッグビルドおよび sanitizer ビルドでは、サーバーも異常終了していました。 #110334 (Groene AI).
  • リモートデータベース名を空にして定義した Distributed テーブルを、distributed_product_mode = 'local'JOIN に使用した際に発生する論理エラー (!part.empty()) を修正しました。 #110677 (Groene AI).
  • データベースと同じ名前を持つテーブルについて、アナライザーで db.table.column のような完全修飾カラム名を解決できない問題を修正しました。#82084 をクローズします。 #110976 (Alexey Milovidov).
  • 26.5 以降デフォルトとなっている自動ディスクスピルのしきい値が設定されている場合に、ハッシュ結合でビルド後の最適化 (固定ハッシュテーブルへの変換、共有ランタイムフィルタ、右テーブルの再範囲設定) が失われる問題を修正しました。 #111972 (Alexey Milovidov).
  • サブカラムがプライマリキー/ソートキー、パーティションキー、または明示的なスキップ索引で使用されているカラムに対し、JSON 型ヒントを変更する ALTER TABLE ... MODIFY COLUMN (allow_experimental_json_lazy_type_hints 有効時) によって、オンディスクのキーまたは索引が破損する可能性があるバグを修正しました。通常の読み取りではキャッシュされた構造により問題が隠蔽されていましたが、構造の再読み込み後 (たとえばサーバー再起動時) には、クエリが CANNOT_READ_ALL_DATA で失敗するか、誤った結果を返していました。参照されている JSON サブカラムのオンディスク型を変更するこのような ALTER は、現在は拒否されます。これらの構造外にあるカラムの型ヒント変更、または参照されるサブカラムのオンディスク型を変更しない変更 (たとえば無関係な型付きパスの追加) は、引き続きメタデータのみの操作です。 #112302 (Pavel Kruglov).
  • join_any_take_last_row = 1 の場合に query_plan_join_swap_tableANY JOIN を入れ替えると誤った結果を返す問題を修正しました。ClickHouse は元の結合側の順序を維持するようになり、ANY JOIN は引き続き最後に一致した行を返します。#111645 をクローズします。 #112458 (Vladimir Cherkasov).
  • プレフィックス付きエンドポイントの AzureBlobStorage ディスクで、ページネーションがエンドポイントプレフィックスを削除するクライアントラッパーをバイパスしていたため、listObjects が最初のページ以降の各ページで誤ったブロブ名を返す問題を修正しました。ページネーションは継続トークンを介して再びラッパーを通るようになり、すべてのページで正しいブロブ名が返されます。 #112872 (Arsen Muk).
  • Thrift メタデータで、メタデータ自体より大きいコンテナまたは文字列の長さが宣言されている Parquet ファイルの読み取り時に、メモリが無制限に割り当てられる問題を修正しました。このような長さは割り当てずに拒否されるようになりました。 #113212 (Groene AI).
  • read_in_order_use_virtual_row が有効な場合に、MergeTree の順序読み取りクエリで WITH FILL ... INTERPOLATEIN または has フィルターを組み合わせると発生する Cannot insert element into Set (NOT_IMPLEMENTED) を修正しました。 #113264 (Groene AI).
  • 仮想行を使用するクエリや、String ソートキーに対して toString/CAST(..., 'Nullable(String)') を使用するクエリなど、一部の ORDER BY クエリで optimize_read_in_order が暗黙的にスキップされる問題を修正しました。また、夏時間があるタイムゾーンで、TimeTime64、または DateTime 値の toString に対するフィルターや ORDER BY により誤った結果が返される問題も修正しました。 #113291 (Vladimir Cherkasov).
  • カスタムキー型リストの末尾を超えて読み取るのではなく、tuple()(x, y) などの無効な parallel_replicas_custom_key 式を ILLEGAL_TYPE_OF_COLUMN_FOR_FILTER で拒否するようにしました。 #113359 (Nikita Taranov).
  • 名前付きコレクションを使用するテーブルの DROP TABLE 中にサーバーが停止された場合、再起動に失敗する問題を修正しました。その後の DROP NAMED COLLECTION が成功すると、存在しない名前付きコレクションを参照するテーブルメタデータが残り、次回の起動が NAMED_COLLECTION_DOESNT_EXIST で失敗する可能性がありました。 #113524 (Alexey Milovidov).
  • AWS Glue DataLakeCatalog データベースが、エラーを報告すべき場合にテーブルが存在しないと報告する2つのケースを修正しました。たとえば、同じ AWS アカウント内の無関係なデータベースが同時に削除されたことにより、テーブルの一覧取得中に Glue データベースが存在しなくなった場合、SHOW TABLES および system.tablesDATALAKE_DATABASE_ERROR (“Exception calling GetTables … not found”) で失敗しなくなりました。このようなデータベースは一覧表示を中断せず、テーブルを持たないものとして扱われます。また、基盤となる GetTable 呼び出しが認証、DNS、5xx エラーなど、テーブルが存在しないこと以外の理由で失敗した場合、存在するテーブルに対して EXISTS TABLE0 を返さなくなりました。その他の Glue エラーは、どちらの経路でも引き続き伝播されます。 #113591 (Groene AI).
  • Raft 状態ファイル (termvoted_for を格納) の永続化中にクラッシュすると、ノードに有効な状態もバックアップも残らない可能性があった Keeper の耐久性に関するバグを修正しました。再起動時にノードが term = 0 にリセットされ、その term ですでに付与した投票を再度付与することで、2つのリーダーが発生し、コミット済みデータが失われる可能性がありました。新しい状態ファイルが完全に書き込まれ、同期されるまで、以前の状態が保持されるようになりました。 #113654 (Alexey Bakharew).
  • MergeTree テーブルのバックグラウンドでの統計情報更新、パーツ更新、または古いパーツや予期しないパーツの読み込みタスクがまだ実行中にテーブルが削除された場合に発生するデータ競合を修正しました。 #113722 (Alexey Milovidov).
  • 旧アナライザで発生していた、WINDOW VIEWORDER BY ALL の問題と、結合を含む Merge または Distributed テーブルに対するクエリでの INTERPOLATEWINDOWLIMIT BY に関する UNKNOWN_IDENTIFIER エラーを修正しました。 #113759 (Alexey Milovidov).
  • 実験的な SZ3 圧縮コーデックのメモリリークを修正しました。圧縮しにくいデータまたは破損したデータの圧縮が例外で失敗した際、一時スクラッチバッファーが割り当てられたままになっていました。 #113916 (Alexey Milovidov).
  • remotemysql などのテーブル関数のアドレス引数解析における二次計算量の問題を修正しました。非常に長いアドレス (たとえば、ゼロ埋めされたメガバイト規模の FixedString) により、解析中にクエリがハングし、キャンセルできなくなる問題がありました。#113918 (Alexey Milovidov) 。
  • Iceberg テーブルで OPTIMIZE TABLE を実行した際、テーブル’s履歴に位置削除ファイルあたり複数の行を削除する行削除が含まれていると、Unsupported snapshot's operation type OVERWRITE エラーで失敗する問題を修正しました。#113745 をクローズします。#113964 (Groene AI) 。
  • レプリケーション対応データベースでは ALTER TABLE ATTACH PARTITION FROM をレプリケートしないようにしました。#94835 (MikhailBurdukov) 。
  • 無効な Azure アップロードサイズ設定 (たとえば azure_min_upload_part_size = 0azure_max_blocks_in_multipart_upload = 0) は、書き込みパスの奥深くで内部例外 (second_size > 0) を発生させるのではなく、明確なエラーとともに早期に拒否されるようになりました。これはクエリ設定と Azure ディスク設定の両方に適用されます。#103394 (Statxc) 。
  • WHERE 述語を SQLite にプッシュダウンする際の、StorageSQLite および sqlite() テーブル関数における不正な SQL リテラルのエスケープを修正しました。シングルクォートと制御文字 (\n\r\t\) が SQLite で解釈されないバックスラッシュでエスケープされていたため、構文エラーや誤ったクエリ結果が発生していました。また、PostgreSQL にプッシュダウンされる文字列リテラルのエスケープも修正しました。IN リスト内にネストされた文字列には ClickHouse のエスケープが残り、制御文字は PostgreSQL で異なるバイトとして解釈されるバックスラッシュシーケンスとして送信されていました。#104217 (Shaohua Wang) 。
  • query_plan_convert_join_to_in が有効で、SELECT がソース配列カラムを参照する場合の INNER JOIN ... ON arrayJoin(...) = ... クエリにおける NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#104809 (Shaohua Wang) 。
  • 現在の行のカラムを参照する非定数の右辺オペランドを持つ IN および NOT IN 式を修正し、新しいアナライザでのタプル右辺の処理を既存の ClickHouse IN セマンティクスに合わせました。古いアナライザでは、右辺が単独のソースカラムである場合 (x IN (arr)) でもテーブル名として解決され、スコープ外のままでした。#104993 (Yue Ni) 。
  • 同じソースカラムを複数回選択した場合に、files3input などのテーブル関数からの INSERT SELECTCannot add column ...: column with this name already exists エラーが発生する問題を修正しました。#105982 (etienne) 。
  • Replicated データベースで max_replication_lag_to_enqueue = 0 を拒否するようにしました。この値により、リカバリ後の未同期チェックが自明に真となり、デバッグおよび sanitizer ビルドでは LOGICAL_ERROR によりサーバーが停止していました。現在は、すべての設定元 (CREATE DATABASE ... SETTINGS<database_replicated> サーバー設定ブロック、ATTACH のリプレイ、既存メタデータのアップグレード時リプレイ) で、解析時に BAD_ARGUMENTS として 0 が拒否されます。有効な最小値は 1 です。#98823 をクローズします。#106006 (Groene AI) 。
  • enable_sharding_aggregator = 1UNION ALL とパイプライン幅より小さい max_streams_for_union_step とともに使用するクエリで発生する Logical error: 'Pipeline stuck' を修正しました。BufferedShardByHashTransform は、入力をすべて消費すると空キューの出力ポートを直ちに終了するようになりました。また、兄弟キューがバックプレッシャーの上限に達している場合でも、要求された空のポートに排出可能なデータがないときは入力の取得を継続します。#106251 (Groene AI).
  • interactive_delay などの待機タイムアウト設定に非常に大きな値を設定した際に発生する符号付き整数オーバーフローを修正しました。この問題により、待機せずに即座にタイムアウトすることがあり、Undefined Behavior Sanitizer 下ではサーバーが中断する可能性がありました。#106961 (Groene AI).
  • 有効な時刻範囲外 (負の値または >= 24h) の Time/Time64 値を Arrow フォーマットにエクスポートする際、無効な Arrow time32/time64 データを書き込む代わりに、明確なエラーで拒否するようになりました。#107179 (Shaohua Wang).
  • 二段階 / メモリ効率のよい分散集約で、同じ式に展開される重複した ALIAS カラム (例: 両方のカラムが toString(x) として定義されている) を持つ Distributed テーブルに対する GROUP BY の誤った結果を修正しました。重複キーは分片では1つにまとめられる一方、イニシエーターでは完全なキーセットでマージされていたため、二段階集約では異なる分片の同一グループが別々のバケットに配置されてマージされず、分割された count() とともに分片ごとに1回グループが返されていました。#108855 (Groene AI).
  • ALTER TABLE ... MOVE PART ... TO SHARD '<path>' で誤って発生する Inconsistent AST formatting エラーを修正しました。クエリフォーマッタが SHARD キーワードを削除していたため、フォーマット済みクエリを再解析できず、LOGICAL_ERROR が発生していました (リリースビルドでは処理される例外、デバッグおよび sanitizer ビルドでは中断) 。#109060 (Groene AI).
  • 絶対値としてデコードするすべての読み取りパスで、Native フォーマットだけでなく、非単調な Array オフセットも拒否するようになりました。破損した set スキップ索引グラニュールは以前は検証されずに通過し、その後範囲外読み取りが発生していました。#109212 (Groene AI).
  • JSONExtract は、文字列の JSON 値を DateTime/DateTime64 に変換する際、CAST と一貫して cast_string_to_date_time_mode を考慮するようになりました。#109126 をクローズします。#109252 (Utkal Singh).
  • 互換性設定の更新中に発生する可能性がある論理エラー “Unexpected substream … for column …” を修正しました。#109496 (Pavel Kruglov).
  • system.detached_parts のサイズ計算で不足していた協調コンポーネントを設定しました。#109553 (Den Kalantaevskii).
  • クエリプロファイラが有効な間、ストリーミング挿入のブロック待機タイムアウト (input_format_max_block_wait_ms) が失効しない可能性がある問題を修正しました。ファイルディスクリプタのポーリングがプロファイラシグナルのたびに完全なタイムアウトで再開していたため、入力元が停止すると、待機上限に達した時点でフラッシュされるべき部分ブロックのフラッシュが無期限に遅延する可能性がありました。#109602 (Shaohua Wang).
  • クエリプランニング中の定数畳み込みで、分析時に解決された関数の型と異なる型の引数を持つ関数が実行されなくなりました。このような型の不一致は以前、出力ヘッダーの計算中に LOGICAL_ERROR を発生させ、デバッグおよび sanitizer ビルドではアサーション失敗となっていました。現在は畳み込みをスキップし、実際に無効なクエリについては通常の実行パスから回復可能な ILLEGAL_TYPE_OF_ARGUMENT エラーが引き続き報告されます。 #109747 (Groene AI).
  • _sample_factor 仮想カラムを参照する mutation が実行途中で Unexpected const virtual column: _sample_factor により失敗し、停止状態のままになる問題を修正しました。mutation は、SAMPLE を指定しないクエリと同じく、この値を 1 として読み取るようになりました。 #109813 (Groene AI).
  • use_constant_folding_in_index_analysis に関する 3 つの問題を修正しました。テーブルで part_minmax_index_columns = 'with_block_number_offset' を設定している場合に通常の projection を使用する SELECT を中断する可能性がある論理エラー Invalid partition key sizePARTITION BY id % 200 のような剰余パーティションキーに対するフィルターで誤った結果となる問題 (行が通知なく除外される) 、および sparseGrams トークナイザーを持つ text 索引に対し、多数のパーティションにまたがる LIKE 述語で max_threads > 1 を指定してクエリした場合のクラッシュ (データ競合) です。 #109896 (Groene AI).
  • ファイル/オブジェクトストレージテーブルの読み取り中に解析/分析エラーが報告された際に発生するデータ競合 (およびまれなクラッシュ) を修正しました。遅延 KeyCondition 初期化中に発生した解析エラーは、reader thread 間で単一の例外オブジェクトとして共有されており、2 つの thread がそのメッセージに (in file/uri ...) を同時に追加することで、例外メッセージ文字列で競合する可能性がありました。 #109911 (Groene AI).
  • accurateCastOrDefault におけるクエリ設定の伝播を修正し、Dynamic および Variant でエンコードされたソース NULL を保持します。#109943 をクローズします。 #109946 (Pavel Kruglov). #114912 (Alexey Milovidov).
  • UInt64 および Int64 の要素値が 2^32 を超える場合を含め、小さい表現のまま保持されているビットマップに対する subBitmapbitmapSubsetInRangebitmapSubsetLimit の誤った結果を修正しました。これらの値は 32 ビットに切り詰められていました。符号付き要素型のビットマップ関数における比較では、要素型の符号なし値を一貫して使用するようになりました。そのため、Int8 ビットマップでは要素 -1 は符号拡張された 4294967295 ではなく 255 として比較されます。これにより、小さい表現を超えて拡張されたビットマップにおける bitmapMinbitmapMaxbitmapContainsbitmapTransform も修正されます。符号拡張されたしきい値を渡していたクエリは調整が必要です。Int8 ビットマップでは、bitmapSubsetInRange(bm, 4294967168, 4294967296)bitmapSubsetInRange(bm, 128, 256) になります。また、groupNumericIndexedVector がより幅の広い索引タイプとは異なる結果を Int8 および Int16 索引カラムで返す問題と、numericIndexedVectorGetValue が負の索引に対して 0 を返す問題も修正しました。1 始まりのインデックス付けを使用すると記載されていた subset function や、符号付き bitmapBuild / bitmapToArray のサポートを含むビットマップ関数のドキュメントを修正しました。 #110072 (Rami Darwiche).
  • クエリのキャンセルを無視する optimize_aggregation_in_order を修正しました。AggregatingInOrderTransform は chunk の集約中にもキャンセルを確認するようになったため、KILL QUERY または max_execution_time (デフォルトの timeout_overflow_mode = 'throw') によって停止されたクエリは、chunk 全体の処理完了を待たずに速やかに停止します。#110104 (Groene AI) 。
  • トランザクション内で実行される KILL TRANSACTIONALTER TABLE ... UPDATE/DELETE 間の競合状態を修正しました。mutation のトランザクションへの登録後、テーブルへの登録前にロールバックが発生すると、孤立した mutation エントリが残り、バックグラウンドジョブで論理エラー (Cannot find transaction ... that has started mutation ...) が発生し、サーバーを再起動するまで影響を受けたパーツに対する後続のすべての mutation がブロックされていました。#110226 (Shaohua Wang) 。
  • query_plan_merge_expression_into_join が有効な場合に、複数テーブルのビューに対するカンマ JOIN によってトリガーされる可能性があった、JOIN 順序オプティマイザの LOGICAL_ERROR (Left and right columns have same names) を修正しました。#110227 (Groene AI) 。
  • JOIN 順序のカーディナリティ推定で、すべてのアクティブなパーツではなく、パーティション/PK プルーニング後に残ったパーツのカラム統計を組み合わせるようになりました。以前は、小さなパーティションにプルーニングされたクエリでもテーブル全体の統計に基づいてプランニングされており (行数を 2500 倍過大評価して hash JOIN のビルド側が逆転する事例が確認されました) 、逆説的に統計を無効化したほうがより良いプランになっていました。また、JOIN 配下の MergeTree リレーションで lazy FINAL が暗黙的に無効化される問題も修正しました。これは、JOIN 順序オプティマイザがメモ化したインデックス分析結果を適用済みの projection と誤認していたためです。#110283 (Sergey Kuznetsov) 。
  • 外側のクエリに相関カラムの重複値があり、サブクエリが CROSS JOIN パスを介して非相関化される場合に、相関スカラーサブクエリが誤った結果を返す問題を修正しました。以前は、count()sum() などの集計値が重複数分だけ乗算されていました。これは実験的な allow_experimental_correlated_subqueries 機能に影響します。#110311 (Groene AI) 。
  • optimize_or_like_chain が有効な場合に、OR チェーン内の LIKE/ILIKE/match の左辺に集約関数またはウィンドウ関数があると発生する可能性があった論理エラー (Function node with name '...' is not resolved as ordinary function) を修正しました。#110641 (Groene AI) 。
  • WHERE で参照されるカラムに対する ALTER TABLE ... UPDATE により、<cond> に一致し始めた行が TTL ... DELETE WHERE <cond> で削除されない問題を修正しました。mutation が行の TTL を再計算するようになったため、新たに条件に一致した期限切れの行は暗黙的に保持されず、削除されます。#110648 (Groene AI) 。
  • メモリトラッキングの計上漏れを修正しました。親メモリトラッカー (たとえばサーバー全体のメモリ制限) によって割り当てが拒否された場合、スレッド、クエリ、ユーザーレベルのトラッカーには拒否された量が残っていました。この誤差は時間とともに蓄積し、MemoryTracking とクエリごと/ユーザーごとのメモリ使用量を増加させ、誤った MEMORY_LIMIT_EXCEEDED エラーにつながる可能性がありました。#110784 (Seva Potapov) 。
  • 空のポリゴンに対する非正規な WKB シリアライゼーションを修正しました。wkb(POLYGON EMPTY) は、不要な単一のゼロポイント ring ではなく numRings = 0 を出力するようになったため、標準的な空のポリゴンの WKB 往復変換でも同一性が保持されます。#110796 (Groene AI) 。
  • INTERSECT または EXCEPT クエリで CTE のカラム別名を使用した場合、たとえば WITH t (a, b) AS (SELECT 1, 2 INTERSECT SELECT 1, 2) SELECT a, b FROM t でクエリが UNKNOWN_IDENTIFIER エラーで失敗していた問題を修正しました。#104770 をクローズします。#110885 (Yarik Briukhovetskyi).
  • UInt64 の最大値に近い異常な max_streams_for_merge_tree_reading 値と allow_asynchronous_read_from_io_pool_for_merge_tree = 1 を併用して MergeTree テーブルを読み取る際に発生する std::length_error (LOGICAL_ERROR) を修正しました。この設定は現在、max_threads と同じ上限値に制限されます。#110936 (Groene AI).
  • 内部型ヒントのサブカラム名、つまりバッククォート型マーカーで始まる名前を持つ JSON 引数に対して getSubcolumn が呼び出された際に発生するクラッシュ (クエリ分析中の null ポインタ逆参照) を修正しました。#110940 (Groene AI).
  • mysql テーブル関数または MySQL テーブル/データベースエンジンを介して nullable な MySQL 空間カラム (LINESTRINGPOLYGONMULTILINESTRINGMULTIPOLYGONMULTIPOINT、または汎用の GEOMETRY) を読み取る際の Nested type LineString cannot be inside Nullable type (ILLEGAL_TYPE_OF_ARGUMENT) を修正しました。このようなカラムは、MySQL が返す値 (4 バイトの SRID プレフィックスとそれに続く WKB ペイロード) を保持する Nullable(String) にフォールバックするようになりました。POINT は引き続き Nullable(Point) にマッピングされます。#110943 (Groene AI).
  • 古いピア向けに、バージョン付き集約状態を含む SimpleAggregateFunction ラッパーの Native シリアライゼーションを修正しました。#110997 (Groene AI).
  • 複数のスレッドがリーダーを共有している際に、スピルされたブロックの読み取りが途中で失敗した場合、grace_hash 結合で発生する可能性があった LOGICAL_ERROR: ReadBuffer is canceled. Can't read from it. を修正しました。#111056 (Groene AI).
  • SSH 秘密鍵ごとに max_authentication_methods_per_user の上限へ個別にカウントされるようになり、構文にかかわらず一貫して上限が適用されます。以前は、単一の ssh_key メソッド内の複数の秘密鍵は 1 つとしてカウントされていました。#111181 (Yecine Megdiche).
  • 再利用されるマテリアライズド CTE (enable_materialized_cte) を、WITH TOTALS または extremes の出力が破棄される分岐で読み取った場合に発生する LOGICAL_ERROR (Reading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan) を修正しました。これには外側の集約、INSERT ... SELECT、集合演算、EXPLAIN ANALYZE が含まれます。#111194 (Groene AI).
  • map[key] が最初の重複キーではなく、後続する重複キーの値を返していた問題を修正しました。Map カラムに重複キーが含まれている場合、map[key] の結果は同じブロック内の先行する行や optimize_functions_to_subcolumns 設定に依存する可能性があったため、同じ行に対する SELECTWHERE で結果が異なることがありました。#111246 (Groene AI).
  • use_variant_default_implementation_for_comparisons = 0 のとき、AND 連鎖でカラムと非 Nullable 型の NULL 値を持つ定数 (たとえば NULL 値の Variant) を比較すると発生する、論理式オプティマイザの論理エラー !rhs_literal->getValue().isNull() を修正しました。#111292 (Groene AI).
  • parallel_replicas_min_number_of_rows_per_replica が設定され、左側テーブルのカラムが射影される RIGHT JOIN で発生する NOT_FOUND_COLUMN_IN_BLOCK / THERE_IS_NO_COLUMN エラー、および一部のリリースで暗黙的に誤った結果が返される問題を修正しました。#111332 (Groene AI).
  • 宛先テーブルで fsync_after_insert が有効な場合、RESTORE は復元したパーツファイルに fsync を実行するようになりました。これにより、復元したパーツは挿入されたパーツと同等に電源喪失に対して耐久性を持つようになります。以前は、復元ファイルは書き込みとクローズのみが行われ、fsync は実行されていなかったため、RESTORERESTORED を返した直後に電源が失われると、パーツが不完全な状態となりテーブルが空になる可能性がありました。#111378 (Groene AI).
  • ローカルスナップショットディスクにおける、まれな Keeper のデータ損失の可能性を修正しました。スナップショットの書き込みパスで tmp_ マーカーを削除した後にスナップショットディレクトリを fsync するため、電源喪失時にスナップショット内容を保持したままマーカーの unlink だけが失われることはなくなりました。以前はこのようなクラッシュにより、Keeper が正常で完全に同期済みのスナップショットを未完了と見なして再起動時に削除し、force_sync=true であっても確認済みの書き込みが失われていました。オブジェクトストレージをバックエンドとするスナップショットディスクは対象外です。#111397 (Groene AI).
  • 複数の text 索引を持つ MergeTree テーブルで、text 索引からの直接読み取りの最適化によって未使用の索引仮想カラムが読み取りヘッダーに残された場合に発生する、遅延マテリアライゼーションの最適化における範囲外読み取り (リリースビルド) /論理エラー (デバッグビルド) 、および Merge テーブルにおける Pipe::unitePipes の論理エラーを修正しました。#111467 (Groene AI).
  • HTTP Last-Modified ヘッダーの移植性のない解析により、musl ベースのビルドで常に NULL となっていた url/urlCluster テーブル関数の _time 仮想カラムを修正しました。#111619 (Konstantin Bogdanov).
  • MergeTree テーブルが、現在の設定でポリモーフィックパーツ (非適応的粒度) が無効になっている状態で既存の Compact パーツを読み込む際に発生する LOGICAL_ERROR (Cannot create part with type Compact and storage type Full because table does not support polymorphic parts) を修正しました。これは、たとえば読み取り専用テーブルが別のテーブルとディスク上のパスを共有し、SYSTEM RESTART DISK 実行時またはサーバー起動時にパーツを再読み込みする場合に発生する可能性がありました。デバッグおよび sanitizer ビルドでは、この例外によってサーバーが中断されます。#111626 (Groene AI).
  • 同じ Keeper パス上の別のテーブルが同時に削除された場合に、CREATE TABLE ... ENGINE = KeeperMapCoordination error: No node, path .../metadata/drop_lock_version で失敗する問題を修正しました。作成処理では、消失したメタデータサブツリーを完了済みのクリーンアップとして扱い、同じ状況で一つ後のステートメントですでに行っているのと同様に再試行するようになりました。#111966 (Groene AI).
  • ReplicatedMergeTree の mutation と古い一時ディレクトリの削除との競合状態を修正しました。この競合により、一部のファイルが欠落した mutation 済みパーツが公開され、そのパーツの読み取りと後続するすべての mutation が失敗する可能性がありました。#111992 (Alexey Milovidov).
  • クエリで並列レプリカ、分散テーブル、外部集約を使用する場合、または状態がテーブル内 (Dynamic 値内を含む) に保存されている場合に、quantileDeterministicquantilesDeterministicmedianDeterministic が同じデータに対して実行ごとに異なる結果を返す問題を修正しました。バージョンなしの型表記でこのバージョンより前に書き込まれた状態は、レイアウトを変更できないため、従来の動作を維持します。 #112052 (Alexey Milovidov).
  • シリアル化されたクエリプランから serialize_string_in_memory_with_zero_byte が欠落する問題を修正しました。serialize_query_plan = 1 の場合、この設定を無効にして実行しているクラスターでは、設定はデシリアライゼーション時に読み取られる一方、シリアライゼーション時には書き込まれないため、実行ノードでは常にデフォルト値になります。その結果、イニシエーターとデシリアライズされたプランを実行するノードの間で、インメモリ文字列表現が異なる可能性がありました。 #112131 (Groene AI).
  • 致命的なログメッセージおよび system.crash_logtrace_full カラムで、スタックフレームが関数名ではなく ? と表示される問題を修正しました。これは、libc++ の __functional ヘッダーにコードが帰属する通常の関数のフレームに影響し、リリースビルドでよく発生していました。 #112152 (Alexey Milovidov).
  • クエリが intDiv(constant, key) または divide(constant, key) でフィルタリングする際に、行がエラーなく欠落する問題を修正しました。主キーおよびパーティション分析が、キーカラムで定数を除算する場合の単調性の方向を誤って判定していたため、一致するグラニュールが除外され、クエリはエラーなしで少ない行数を返していました。また、上位ビットがセットされた符号なし定数を被除数とする intDivDecimal オペランドによって除算が Decimal のネイティブ幅で計算される場合に単調性があると判定する問題、および IPv4/IPv6 定数をキーカラムで除算する有効なクエリに対してキー分析が Cannot compare DB::IPv4 with long を発生させる問題も修正しました。 #112156 (Groene AI).
  • system.replicas に対するクエリがステータスリクエストの処理前に停止された場合に、DROP TABLE ... SYNC が永久にハングする問題を修正しました。 #112164 (Nikolay Degterinsky).
  • BUFFERED_V1 WebAssembly UDF が空の結果バッファを返した場合にサーバーが異常終了 (SIGABRT) する問題を修正しました。クエリは捕捉可能な WASM_ERROR で失敗するようになり、サーバーは稼働を継続します。 #112182 (Nikolai Ovchinnikov).
  • Dictionary に対する join_algorithm = 'direct'JOIN で、疎なシリアライゼーションで保存された結合キーを使用した場合に発生する解放後使用を修正しました。getColumnVectorData が一時カラムへの参照を返していたため、Dictionary のルックアップで解放済みメモリを読み取っていました。リリースビルドでは誤った結果を返す可能性があり、デバッグまたは sanitizer ビルドでは異常終了していました。 #112327 (Groene AI).
  • クエリ実行時に MergeTree Projections で ROW POLICY が使用されない場合がある問題を修正しました。 #112329 (Yarik Briukhovetskyi).
  • MATERIALIZED VIEW 経由で到達する Iceberg table への insert 時に発生するデータ破損を修正しました。データファイルが、現在の Iceberg スキーマではなく、対象の CREATE 時点のカラム型に基づいて書き込まれていたため、DateTime 値が単なる Avro int として保存され、読み戻す際にマイクロ秒として解釈されていました。また、DateTime64(0) または DateTime64(9) の場合、ファイルをまったく読み戻せませんでした。そのため、Iceberg スキーマが view で宣言されたカラムより広い対象に対する INSERT INTO <materialized view> では、破損した行を書き込む代わりに TYPE_MISMATCH が発生するようになりました。#112359 (Groene AI).
  • Keeper は、max_memory_usage_soft_limit を超過している場合でも、データが空の Set リクエストを拒否しなくなりました。このようなリクエストで保存データ量が増えることはなく、拒否するとクライアントが session を再確立できず、Keeper のメモリイベント中、table が read-only のままになる可能性がありました。#112386 (Shaohua Wang).
  • 大きな snapshot のインストールに成功した後、Keeper follower が長時間 quorum から脱落し、大量の Session expired エラーを引き起こす問題を修正しました。snapshot の適用に snapshot-install timeout より長い時間がかかると、leader は follower の acknowledgement を破棄し、その follower の Log index をラウンドトリップごとに 1 エントリずつ巻き戻していました。また、この timeout を制御する Keeper setting nuraft_snapshot_sync_ctx_timeout_ms を追加しました。以前は raft_limits_response_limit を通じてしか変更できず、dead-peer 検出を遅くせずに変更することはできませんでした。#112405 (Shaohua Wang).
  • profile events および memory tracker の data race を修正しました。#112466 (Miсhael Stetsyuk).
  • セキュリティ関連のバグを修正しました。#112479 (Kseniia Sumarokova).
  • mutation が実行されなかった ALTER TABLE ... MODIFY COLUMN による型変更後に、古い secondary (スキップ) 索引を読み取る問題を修正しました。たとえば、KILL MUTATION により mutation が削除された場合です。ディスク上の granule は古い型で書き込まれているにもかかわらず新しい型でデコードされていたため、LOGICAL_ERROR の発生、数エクサバイト規模の割り当て要求、または誤った結果のサイレントな返却につながっていました。また、保存されているすべてのバイトが同一のまま expression の意味だけが変わり、mutation がまったく作成されない索引で誤った結果が返される問題も修正しました。たとえば、DateTime の timezone のみを変更する MODIFY COLUMN や、UInt8 から Bool のようにカスタム型名のみを変更する場合です。このような索引は、影響を受ける part ではスキップされるようになりました。#112213 をクローズします。#112484 (Groene AI).
  • 一貫性のない bloom filter メタデータを含む Parquet file の読み取り時にクラッシュする問題を修正しました。このような file では、本来より少ない行がサイレントに返される可能性もありました。#112498 (Shaohua Wang).
  • AsynchronousBoundedReadBuffer の readBigAt における data race を修正しました。#109678 をクローズします。#112573 (Kseniia Sumarokova).
  • (SELECT 1) AS t(x)WITH t(x) AS (SELECT 1) のようなカラムエイリアスリストが view table function 内で参照できず、同じ構文が view の外部では機能するにもかかわらず、t.x への参照が UNKNOWN_IDENTIFIER で失敗する問題を修正しました。#112690 (Groene AI).
  • 二段階集約を使用する多層分散 GROUP BY クエリで発生する可能性があった論理エラー SortingAggregatedTransform already got bucket with number N を修正しました。#112794 (Nikita Taranov).
  • nats_stream が設定された NATS テーブルで、NATS サーバーの再起動後にメッセージを消費しなくなる問題を修正しました。JetStream サブスクリプションは、DETACH TABLEATTACH TABLE を実行しなくても自動的に再確立されるようになりました。#112828 (Groene AI).
  • 読み取りまたはマージのパスで発生する一時的な Azure Blob Storage エラー (RBAC 権限の伝播による 403 Forbidden、認証情報による認証の失敗、または 408 として報告される接続タイムアウト) が再試行不可と誤分類され、正常なデータ part に対する誤った重大アラートを発生させる POTENTIALLY_BROKEN_DATA_PART (コード 740) として報告される問題を修正しました。これらの一時的な障害は再試行可能として扱われるようになり、実際に永続する障害は、実在しない破損データ part ではなく通常の Azure エラーとして報告されます。#112871 (Arsen Muk).
  • バッチリクエスト自体が失敗した場合に、Azure のバッチオブジェクト削除で system.blob_storage_log の Delete イベントが記録されず、バッチ全体がログに残らない問題を修正しました。バッチレベルで失敗した場合も、各オブジェクトについて Delete イベントが記録されるようになりました。#112873 (Arsen Muk).
  • パート全体を書き換えない mutation によって part が生成された場合に、テーブルの再読み込み後、_block_number および _block_offset に対する part ごとの MinMax 索引が失われる問題を修正しました。#112878 (Alexey Milovidov).
  • join 中に評価される非等価 JOIN ON 条件に arrayJoin が含まれる場合に、論理エラーや誤った結果が発生する問題を修正しました。hashparallel_hash、または grace_hash join は、このような条件を INVALID_JOIN_ON_EXPRESSION で拒否するようになりました。展開が片側のみに依存する場合は、join の前にサブクエリ内の ARRAY JOIN に移動してください。arrayJoin の引数が両側のカラムを参照する条件は、再構成する必要があります。#112889 (Groene AI).
  • Distributed テーブル上の Merge テーブルから読み取る際、ORDER BY の結果が誤る問題を修正しました。行が順不同で返される場合があり、LIMIT 使用時には結果に含まれるべき行が欠落する場合がありました。#112931 (Alexey Milovidov).
  • IN の右辺にある Bool 定数が、String 型の左辺に対して標準形の 'true'/'false' ではなく '1'/'0' に変換される問題を修正しました (現在は CAST および values table function と一貫しています) 。#113051 (Yakov Olkhovskiy).
  • ターゲットが materialized view をトリガーする Alias テーブルへの挿入時に、常に空だった query_logviews カラムを修正しました。#113076 (Enric Calabuig).
  • 式に set スキップ索引が定義されたテーブルを読み取る際、クエリ内でその式を Nullable オペランド付きで繰り返すと発生する LOGICAL_ERROR を修正しました。たとえば、INDEX b_set intDiv(id, 1000) TYPE set(100) に対する WHERE intDiv(id, (SELECT 1000)) = 3 が該当します。スカラーサブクエリは Nullable 型であるため、これだけでトリガーされます。#113244 (George Larionov).
  • 設定 inject_random_order_for_select_without_order_by が有効で、集計クエリが Distributed の子を含む Merge テーブルを読み取る際に発生する論理エラー (例外) Chunk info was not set for chunk in MergingAggregatedTransform を修正しました。中間ステージまでしかプランニングされないクエリには、ランダムな ORDER BY rand() ラッパーが注入されなくなりました。#113266 (Alexey Milovidov).
  • WHERE 句に多数のドットを含む大きな文字列定数があり、テーブルに bloom_filtertokenbf_v1ngrambf_v1、または text スキップ索引がある場合に発生するクエリプラン最適化の停滞を修正しました。フィルターカラム名と JSONAllPaths(...) 索引カラムを照合する際、名前をドットで分割したすべての候補が列挙されていたため、スキップ索引条件の構築が定数長に対して二次時間となっていました。#113003 をクローズします。#113289 (Groene AI).
  • kafka_num_consumers が CPU コア数から算出される上限を超える場合の Kafka テーブルの ATTACH を修正しました。#113390 (Nikolay Degterinsky).
  • マテリアライズド CTE を使用するクエリが失敗した後に発生する、永続的な DROP TABLE のハングとメモリリークを修正しました。サーバーを再起動するまで、テーブルはドロップキューに残り続けていました。#113397 (Shaohua Wang).
  • analyzer_compatibility_join_using_top_level_identifier = 1 の場合に、view(...) 引数を持つ remote ファミリーのテーブル関数を、キーが SELECT リストのエイリアスである JOIN ... USING の左側で使用すると発生する論理エラー IDENTIFIER is not a table expression を修正しました。#113400 (Groene AI).
  • ミリ秒を超える精度の TIMESTAMP カラムでパーティション化された Paimon テーブルの読み取りを修正しました。これまでは scale 6 is not supported, only support scale <= 3 で失敗していました。#112768 をクローズします。#113401 (JIaQi Tang).
  • make_distributed_plan でサブクエリが独自の SETTINGS 句に distributed_plan_execute_locally を設定した場合に発生するセグメンテーションフォールトと LOGICAL_ERROR (No host found for exchange stream final_result__0_0) を修正しました。分散プランとそれを実行するコードが異なるコンテキストから設定を読み取るため不一致が生じ、イニシエーターが自己矛盾したパイプラインを構築する可能性がありました。#113422 (Groene AI).
  • nullable の ARRAY または MAP カラムを含む Paimon テーブルの読み取りを修正しました。このようなテーブルは、スキーママッパーが複合型を Nullable でラップしており、ClickHouse ではこれが禁止されているため、まったく読み取れず、DESCSELECT の両方が Nested type Array(Nullable(Int32)) cannot be inside Nullable type で失敗していました。nullable の複合カラムは非 Nullable の複合型にマッピングされ、NULL 値は空の値として読み取られるようになりました。#113337 をクローズします。#113450 (Groene AI).
  • もう一方の側の定数カラムを含む JOIN ON 条件に対するパートおよびグラニュールプルーニングを修正しました。#113484 (Vladimir Cherkasov).
  • Dynamic カラム内の Map 値について、自身のメタデータと矛盾する Map レイアウトを持つパートが書き込まれないようにしました。map_serialization_version だけが異なるテーブル間でキャッシュされた同一のシリアライゼーションオブジェクトが共有されていたため、メタデータでは with_buckets が宣言されているにもかかわらず、パートに basic Map レイアウトが設定され、後で読み取る際に LOGICAL_ERROR: Stream ...buckets_info ... is not found で失敗する可能性がありました。以前のバージョンでこの方法によりすでに書き込まれたパートは引き続き読み取れないため、削除する必要があります。#113514 (Groene AI).
  • スキーマがキャッシュされているソースで、推論されるカラム型が以前のクエリの順序に依存する問題を修正しました。推論型を変更する設定がスキーマ推論キャッシュキーに含まれていなかったため、最初のクエリの設定値によって、以降のすべてのクエリで使用される型が決まっていました: input_format_try_infer_exponent_floatsmax_parser_depthinput_format_json_infer_array_of_dynamic_from_array_of_different_types、および Parquet の場合は input_format_parquet_local_time_as_utcinput_format_parquet_allow_geoparquet_parserinput_format_parquet_skip_columns_with_unsupported_types_in_schema_inferenceschema_inference_make_json_columns_nullable。また、Form に不足していたキャッシュキーゲッターを登録し、Template のゲッターが独自の行フォーマットのエスケープ規則を使用するようにしました。#113533 (Groene AI).
  • trace_profile_events_list 設定を使用して特定のプロファイルイベントのスタックトレースを system.trace_log に書き込む際に発生し得る理論上のデータ競合を修正しました。#113553 (Miсhael Stetsyuk).
  • テーブルを削除できなくなるほど長い対象名を RENAME DATABASE が受け入れる問題を修正しました。テーブル名の長さチェックは、check_table_dependencies にかかわらず実行されるようになりました。また、これまでチェックされておらず、デフォルト設定でも影響を受けていたデタッチされたテーブルも対象となります。#101747 をクローズします。#113557 (Groene AI).
  • 複数の子を持つ Merge テーブルが、外側のクエリから参照されるマテリアライズド CTE を読み取る際に発生する LOGICAL_ERROR Reading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan を修正しました。#113558 (Alexey Milovidov).
  • スカラーサブクエリを含む行ポリシーが、テーブルを Merge テーブル経由で読み取った後、一度だけ評価され、その結果が以降ずっと再利用される問題を修正しました。解析済みのポリシー条件はキャッシュされ、すべてのクエリで共有されますが、Merge 経由で読み取るとキャッシュされた式がその場で書き換えられ、同じポリシーを使用する並行クエリ間でデータ競合も発生していました。#113563 (Alexey Milovidov).
  • キーが複合キー (複数のカラム) または UUIDInt256FixedString(4) などの単一の 16/32 バイト値である Join エンジンテーブルを読み取る際に発生する Unsupported JOIN keys of type keys256 in StorageJoin を修正しました。このようなテーブルは作成、書き込み、JOIN の対象として使用できましたが、SELECT で読み戻すことはできませんでした。#74362 および #77394 をクローズします。#113578 (Groene AI).
  • Web UI で run=1 を含むリンクを開いても、次回のページ再読み込み時に他のタブの URL に含まれるクエリが自動実行されなくなりました。#113595 (Alexey Milovidov).
  • 要素型が Nothing の配列を比較する際の論理エラーを修正しました。#113609 (Groene AI).
  • 宛先ストレージが .lock ファイルを読み取れない場合、バックアップが同時実行中のバックアップであると誤って報告するのではなく、ロックファイルへのアクセス時に発生したエラーを報告するようになりました。#113637 (Kirill Shokhin).
  • リモート分片上の構造を持たない Distributed テーブルを、古いサーバーバージョンで書き込まれたメタデータからアタッチまたはロードした際に発生する論理エラー Sending a distributed query with unknown (zero) client version を修正しました。#113675 (Alexey Milovidov).
  • match() パターン内の NUL バイトを通常のリテラルとして扱うようにしました。#113690 (Vitaly Baranov).
  • ウィンドウフレーム内で第1引数が定数の場合に、theilsU が 0 ではなく任意の値を返す問題を修正しました。#113691 (Alexey Milovidov).
  • 自動並列レプリカ (automatic_parallel_replicas_mode) が、単一ノード版が query_plan_join_shard_by_pk_ranges によって分片化されたプランを採用する際に発生する Logical error: Duplicate announcement received for replica number N を修正しました。#113730 (Alexey Milovidov).
  • カスタムキー並列レプリカ (parallel_replicas_mode = 'custom_key_sampling' または 'custom_key_range') で、子テーブルの1つが Distributed テーブルである Merge テーブルを読み取る際に発生する CANNOT_CONVERT_TYPE および GroupingAggregatedTransform の例外を修正しました。#113741 を解決します。#113742 (Alexey Milovidov).
  • 名前付きテーブルに対する SELECTSTREAM 修飾子を使用し、読み取りタスクモードの並列レプリカと併用した場合に発生する LOGICAL_ERROR を修正しました。マテリアライズド CTE を PREWHEREIN セットとして使用すると、サーバーは Reading from materialized CTE ... DelayedPortsProcessor gate is missing in the query plan を発生させていました (デバッグおよび sanitizer ビルドではサーバーが中断します) 。並列レプリカが要求された場合、STREAM を含むテーブルは拒否されるようになりました。enable_parallel_replicas = 2 ではクエリは SUPPORT_IS_DISABLED で失敗し、1 では並列レプリカを使用せずに実行されます。これは FINAL の場合と同じ動作です。#113754 (Groene AI).
  • ARRAY JOIN を含む右側に対して定数の ON 式で JOIN した際に発生するサーバークラッシュを修正しました。遅延レプリケーションされた右側カラムの読み取り時に、解放済みの ColumnReplicated を使用していました。#113859 を解決します。#113901 (Groene AI).
  • Date/DateTime/DateTime64/Time/Time64 に対する avg の未定義動作と誤った結果を修正しました。平均は整数演算で正確に計算されるようになり、Int64 の境界でのオーバーフロー (未定義動作および x86 での誤った結果) と、2^53 を超える場合の Float64 の精度損失 (ナノ秒スケールで顕在化) の両方を修正しました。#113912 (Alexey Milovidov).
  • 右側に totals がある場合の join_algorithm = 'partial_merge' を使用した JOIN で、誤った結果が返される問題を修正しました。右側がマージされないままになることがあり、その結果、LEFT JOIN では実際に一致する行にデフォルト値が代入され、INNER/RIGHT JOIN では行がまったく返されませんでした。RIGHT/FULL の非結合パスでは、同じ状態で null ポインターが逆参照され、サーバーがクラッシュしていました。#113936 (Groene AI).
  • MySQL インテグレーションの不具合を修正しました。名前付きコレクションに認証情報が contents 形式で保存されている場合、空の ssl_ca_pem/ssl_cert_pem/ssl_key_pem 値で TLS 認証情報の上書きが受け入れられ、上書きを拒否せずに設定済みの CA またはクライアント証明書が暗黙的に削除されていました。 #113947 (Alexey Milovidov).
  • Parquet v3 リーダーで、フィルター評価にのみ必要なカラムが出力スロットの破棄後にデコードされるようスケジュールされた場合に発生する std::out_of_range 例外を修正しました (Logical error: 'std::exception. Code: 1001, type: std::out_of_range'。デバッグビルドおよび sanitizer ビルドではサーバーも停止します) 。 #113956 (Groene AI).
  • カラム型が基盤となるストレージと異なるビュー (例: engineNullable(String)information_schema.tables を、engineStringsystem.tables 上に定義した場合) に対するフィルターがストレージにプッシュダウンされた際に発生する論理エラー (Unexpected return type) を修正しました。 #113984 (Alexey Milovidov).
  • セグメントをまたぐ Raft ログの切り詰め (writeAt) 中にクラッシュした後、ClickHouse Keeper が CORRUPTED_DATA により起動を拒否する問題を修正しました。この問題により、承認済みのログエントリが古い changelog セグメントの後方に取り残される可能性がありました。 #114003 (Nishant Agarwal).
  • {database} または {table} マクロを通じて ReplicatedMergeTree ZooKeeper パスに名前が展開されるテーブルまたはデータベースでは、その名前が単一の安全なパス部分にならない場合に拒否されるようになりました。以前は、/ を含む名前がエスケープされずに挿入されていたため、テーブルの znode が別のテーブルの Keeper サブツリー内に登録され、そこでの ALTEROPTIMIZE が恒久的に壊れていました。. または .. の部分、制御文字、マクロ構文も拒否されます。既存のテーブルは引き続きロードおよびアタッチできます。 #114006 (Groene AI).
  • テーブルのソートキーが GROUP BY キーの厳密なプレフィックスであり、quantileDD など状態がヒープメモリを保持する集約関数を使用する場合に、optimize_aggregation_in_order = 1 で発生するメモリリークを修正しました。このようなクエリを実行するたびにサーバーメモリが増加し、再起動まで増え続けていました。 #114010 (Groene AI).
  • 分散クエリプランに集約関数の状態を生成する window function が含まれる場合、たとえば make_distributed_plan = 1 を指定した theilsUState(a, b) OVER (ORDER BY a) で発生する論理エラーを修正しました。cramersVcramersVBiasCorrectedtheilsUcontingency ファミリーに影響します。 #114020 (Groene AI).
  • 入力全体を読み取る必要がある LIMIT を伴う SELECT DISTINCT で誤った結果が返される問題を修正しました。LIMIT n WITH TIES では同順位の行が除外され、exact_rows_before_limit = 1 では切り詰められた rows_before_limit_at_least が報告され、GROUP BY ... WITH TOTALS ではストリームのプレフィックスから totals 行が計算されていました。 #114025 (Groene AI).
  • UInt128/UInt256 において max_execution_time および KILL QUERY を無視する isProbablePrime を修正しました。幅の広い値のブロックは、キャンセルポイントなしに単一の関数呼び出し内で完了まで実行されるため、クエリが期限を過ぎて数分間実行される可能性がありました。 #114032 (Groene AI).
  • materialized_views_ignore_errors を有効にして依存関係を収集している際に失敗した materialized view について、system.query_views_log の行が欠落する問題を修正しました。デバッグビルドおよび sanitizer ビルドで、view をログに記録せずに std::out_of_range によりサーバーが中断される問題も修正しました。#114064 (Groene AI).
  • PREWHERE 句に IN (subquery) 述語が含まれ、rewrite_in_to_join = 1 (またはこれを強制的に有効化する make_distributed_plan = 1) が設定されている場合に発生する Code: 46. DB::Exception: Unknown function exists. (UNKNOWN_FUNCTION) を修正しました。同じクエリを WHERE 句で記述した場合は正しく動作していました。#114067 (RohithPariki).
  • 行ポリシーがクエリの唯一のフィルターであり、ソートカラムに minmax スキップ索引がある場合に、ORDER BY ... LIMIT が要求より少ない行数、場合によっては1行も返さない問題を修正しました。トップ K 最適化により、行ポリシーの適用前に読み取り範囲が絞り込まれていました。#114073 (Alexey Milovidov).
  • bloom_filter 索引を FixedString 定数でクエリした際に、hasAnyhasAllhasindexOfmapContainsKeymapContainsValuemapContains が返す行数が少なすぎる、または TOO_LARGE_STRING_SIZE で失敗する問題を修正しました。索引では定数のパディング済みの形式をハッシュする一方、関数ではパディングなしの形式を比較していたため、一致するグラニュールがスキップされていました。#114089 (Alexey Milovidov).
  • 統計パーツ剪枝が索引解析中に IN/GLOBAL IN サブクエリを投機的に実行し、そのサブクエリが失敗した場合に発生する可能性があった LOGICAL_ERROR “Not-ready Set is passed as the second argument for function globalNullIn” と、クエリ本来のエラーメッセージが失われる問題を修正しました。#114121 (Groene AI).
  • PREWHERE 最適化で allow_calculating_subcolumns_sizes_for_merge_tree_reading 設定を尊重するようにしました。#114146 (Pavel Kruglov).
  • バッファーへの書き込み前に、lcp が前のトークンを超える、または lcp + data_size がオーバーフローする、破損または悪意のある Dictionary を拒否するようにしました。#114155 (Elmi Ahmadov).
  • 集約関数が JIT コンパイルされ、データに1970年以前のタイムスタンプが含まれる場合に、DateTime64 カラムに対する min および max が誤った結果を返す問題を修正しました。Decimal64 から派生する DateTime64 および Time64 用に is_signed が特殊化されていなかったため、生成されたコードは tick 数を符号なし整数として比較し、1970年以前のタイムスタンプが max では選ばれ、min では選ばれませんでした。#114168 (Groene AI).
  • レイヤーが空のパイプを生成した場合に、主キー範囲レイヤーを使用して MergeTree テーブルを読み取る際に発生する例外を修正しました。#114177 (Alexey Milovidov).
  • ネイティブプロトコル経由で受信した一部の不正な形式の Replicated シリアライズ済みカラムで報告されるエラーコードを修正しました。これらは現在、LOGICAL_ERROR ではなく INCORRECT_DATA で拒否されます (LOGICAL_ERROR はデバッグビルドおよび sanitizer ビルドでサーバーを中断していました) 。#114186 (Pavel Kruglov).
  • ATTACH PARTITION FROMREPLACE PARTITIONMOVE PARTITION TO TABLE、および ReplicatedMergeTree レプリカの追加において、PARTITION BY (a)ORDER BY (b)INDEX ix (b * c) TYPE minmaxPROJECTION p (SELECT (b) ...)CONSTRAINT c CHECK (a > 0)TTL (d + INTERVAL 10 YEAR)DEFAULT (a + 1) のように冗長な括弧を含む定義で記述されたテーブルに対し、Tables have different ...METADATA_MISMATCH、または INCOMPATIBLE_COLUMNS が発生して失敗する問題を修正しました。 #114188 (Alexey Milovidov).
  • ALPFPC、および GCD が型から導出されるパラメータを codec ハッシュに含めていなかった問題を修正しました。compact パーツでは、ライターは codec ハッシュごとに 1 つの圧縮ストリームを共有するため、同じ codec を使用する値幅の異なる 2 つのカラムが競合し、誤った幅を持つ codec オブジェクトを共有していました。その結果、幅が異なる場合は有効な insert が CANNOT_COMPRESS で拒否され、それ以外の場合は一方のカラムの圧縮率が本来より低下していました。 #114189 (Groene AI).
  • MergeTree のキー式に、キーカラム自体ではない mortonEncode または hilbertEncode の呼び出しが含まれる場合 (例: ORDER BY mortonEncode(hilbertEncode(x, y), x, y)PARTITION BY mortonEncode(x, y) % 4) に発生する std::out_of_range: map::at: key not found を修正しました。 #114233 (Groene AI).
  • window view の backfill 元クエリから、通常の LIMIT/OFFSET を削除します。 #114247 (Alexey Milovidov).
  • 引数が要素型 Nothing の空でない配列である場合 (例: SELECT arrayAutocorrelation([arrayMax([])]))に arrayAutocorrelationで発生するLOGICAL_ERRORを修正しました。このような引数はILLEGAL_COLUMNで拒否されるようになりました。空配列リテラル[]は引き続き[]` を返します。 #114249 (Groene AI).
  • nuraft_use_bg_thread_for_snapshot_io が有効な場合に Keeper サーバーがクラスターに参加できない問題を修正しました。参加中のサーバーに送信されたログバッチが暗黙的に破棄され、メンバーシップの変更が完了しませんでした。 #114275 (Shaohua Wang).
  • XDG_CACHE_HOMEXDG_STATE_HOME から読み取られていた問題を修正しました。 #114278 (Alexey Milovidov).
  • テーブルファイルを書き込む前に Iceberg ネームスペースをカタログに登録するようにしました (SeaweedFS で必要) 。 #114285 (Azat Khuzhin).
  • 右テーブルの非キーカラムに対する filter が ANY INNER JOIN の下にプッシュダウンされた場合に、結果が不整合となる問題を修正しました。 #114313 (Kirill Shokhin).
  • bash-completion 2.12+ での bash 補完を修正しました (_comp_get_words) 。 #114339 (Azat Khuzhin).
  • スキーマで名前が空のカラムを宣言したデータレイクテーブルの読み取り時にクラッシュする問題を修正しました。不正な Iceberg メタデータは ICEBERG_SPECIFICATION_VIOLATION で拒否され、カタログ、Delta Lake、または Paimon から提供されたスキーマは AMBIGUOUS_COLUMN_NAME で拒否されます。このチェックは無条件で実施されるため、空のフィールド名を持つ未使用の履歴スキーマを保持しているだけの Iceberg テーブルも、そのスキーマの読み取り時に中断するのではなく読み取れなくなります。#114394 (Groene AI).
  • Raft リーダーの変更中に ClickHouse Keeper へ接続するクライアントが、転送中のリクエストが破棄された時点で接続を拒否されるのではなく、接続が拒否されるまで session_timeout_ms (デフォルトでは 30 秒) の間待機させられる可能性があった問題を修正しました。接続中のクライアントは、より早く別のレプリカに再接続できるようになりました。#114401 (Groene AI).
  • BACKUPRESTORE、および ENGINE = Backup では、s3()file()azureBlobStorage() と同様に、ユーザーの SOURCES 権限に基づいてバックアップの保存先を認可するようになりました。以前は、BACKUP は保持していても SOURCES を持たないユーザーが、サーバーから到達可能な任意の場所にバックアップを書き込み、そこから読み取ることができました。バックアップの書き込みには宛先のログソースに対する WRITE 権限 (WRITE ON S3WRITE ON AZUREWRITE ON FILE) が必要で、読み取りには READ が必要です。Disk(...) の宛先は引き続き backups.allowed_disk のみによって制限されます。#114405 (Groene AI).
  • ignore_drop_queries_probability が設定されている場合に、CREATE OR REPLACE が内部の _tmp_replace_* テーブルを残してしまう問題と、CREATE OR REPLACE VIEWNOT_IMPLEMENTED で失敗する問題を修正しました。内部的に発行される DROP は単一のユーザーステートメントの処理の一部であるため、DROP の障害挿入はそれらに適用されなくなりました。#114420 (Groene AI).
  • JSON AST (dialect = clickhouse_json) からデシリアライズされた ALTER TABLE ... MOVE コマンドで、PART 形式と TO TABLE、または PARTITION 形式と TO SHARD が組み合わされた場合に発生する LOGICAL_ERROR (Bad cast from type DB::ASTLiteral to DB::ASTPartition) および解析不能な整形済み SQL を修正しました。このようなペイロードは BAD_ARGUMENTS で拒否されるようになりました。#114429 (Groene AI).
  • テキスト索引の仮想カラムに書き換えられた場合でも、PREWHEREWHERE の両方のフィルタ条件で参照されているカラムを削除しないようにしました。#114460 (Elmi Ahmadov).
  • IN (subquery) を含む述語を持つ mutation が、サブクエリの Set がまだ構築中である間に KILL MUTATIONDETACH DATABASE などによってキャンセルされた場合に発生する Not-ready Set is passed as the second argument for function 'in' エラーを修正しました。関連: #107619#114463 (Groene AI).
  • ソートキー、主キー、またはパーティションキーで使用されているカラムに対する ALTER TABLE ... DROP COLUMN は、ALTER TABLE ... CLEAR COLUMN と同様に、説明を添えて ALTER_OF_COLUMN_IS_FORBIDDEN で失敗するようになりました。以前は、キー式の再計算に起因する分かりにくい UNKNOWN_IDENTIFIER: Missing columns エラーで失敗していました。グループ内のカラムがキーで使用されている場合、共通プレフィックスを指定した Nested グループ全体の削除またはクリアにも同じことが適用されます。以前は、これによりグループのデータが暗黙的に破壊されたり、完了しない mutation が残ったりする可能性がありました。TTL 式でのみ使用されているカラムを削除する場合も、どの TTL 式が壊れるかを報告するようになりました。#114468 (Maksim Dergousov).
  • CSV エスケープ規則を使用する CustomSeparatedRegexpTemplate フォーマットで、先頭要素が NULLTuple カラムを読み取る際の問題を修正しました。単体の Tuple では各要素が1つのフィールドを占めるため、先頭の \N フィールドはカラム全体ではなくその要素を表します。以前はこれがカラム全体として処理され、残りの要素フィールドが後続のカラムにずれていたため、CustomSeparated は自身の出力を読み戻せませんでした。#114402 をクローズします。#114471 (Groene AI).
  • 配列要素と needle の文字列型が異なる場合 (たとえば、Array(FixedString(N)) の要素に対する String needle) に、arrayExists(x -> x = needle, arr) が誤った結果を返したり、TOO_LARGE_STRING_SIZE で失敗したりする問題を修正しました。デフォルトで有効な optimize_rewrite_array_exists_to_has 最適化により、このような呼び出しは has に書き換えられていましたが、has= のようにゼロ埋めを比較しません。#114496 (Groene AI).
  • メタデータに Iceberg 仕様で禁止されているスキーマ進化が記述された Iceberg table を読み取っても、サーバーが停止しなくなりました。IcebergSchemaProcessor における4件の仕様違反は、失敗したアサーションとして扱われる LOGICAL_ERROR として報告されるか、未チェックのまま致命的なアサーションに到達していましたが、現在は ICEBERG_SPECIFICATION_VIOLATION を送出します。#114518 (Groene AI).
  • Regexp 入力フォーマットが一致したフィールドの未解析部分を黙って破棄し、エラーを報告せずに切り詰められた値や不正な値を格納する問題を修正しました。たとえば、UInt64 への v=-10 として読み取られ、JSON 規則では Date への v=2020-01-01junk1975-07-14 として読み取られていました。不正なフィールドは現在、これらの規則が同様に動作すると文書化されているフォーマットに合わせ、EscapedCSVJSON 規則で拒否されます。Raw では、タブを含む一致フィールドはタブ位置で切り詰められず、全体として読み取られるようになりました。#114520 (Groene AI).
  • ALTER TABLE ... MODIFY COLUMN により Nullable にされた Iceberg カラムをフィルタリングした際の LOGICAL_ERROR を修正しました。#85029 をクローズします。#114521 (Groene AI).
  • CREATE TABLEALTER TABLE は、ソートキーで使用されるカラムに対する SZ3 などの非可逆コーデックを拒否するようになりました。#114531 (Groene AI).
  • metaData.partitionColumnsmetaData.schemaString で宣言されていないカラムを指定する Delta Lake table を読み取る際の LOGICAL_ERROR を修正しました。このようなメタデータは、クエリに predicate が含まれる場合だけでなく、テーブルまたはそのスキーマを snapshot から読み取る際には常に、delta-kernel リーダーでは BAD_ARGUMENTS、レガシーリーダーでは INCORRECT_DATA として拒否されるようになりました。#114538 (Groene AI).
  • ORC の分岐が1つの型として読み戻される Variant を拒否します。#114540 (Groene AI).
  • Map または JSON コンテナーに基づく LIKE/ILIKE 演算子のテキスト索引評価を修正しました。#114544 (Elmi Ahmadov).
  • PromQL のグループ化修飾子で、引用符付きラベル名をサポートします。 #114545 (Minh Vu).
  • 低スケールの Decimal64 を再スケーリングする際に Int64 がオーバーフローした場合に生成される、不正でしばしば符号が反転した Time64 リテラルおよび IN リスト定数を修正しました。このような変換では、DateTime64 の分岐および明示的な CAST と同様に、DECIMAL_OVERFLOW が報告されるようになりました。#114546 (Groene AI).
  • PromQL のグループ化ラベルリストで末尾のカンマを許可します。. #114548 (Minh Vu).
  • PromQL セレクターで、引用符で囲まれたメトリクス名およびラベル名をサポートしました。#114551 (Minh Vu).
  • max_execution_time が経過する最大 1 ms 前にクエリがキャンセルされ、自己矛盾した Timeout exceeded: elapsed 999.672 ms, maximum: 1000 ms エラーで失敗する可能性がありました。#114559 (Alexey Milovidov).
  • mutation の実行中にテーブルを読み取る際の問題を修正しました。MATERIALIZED カラムが古い値を返す可能性があり、更新されたカラムと同時に選択するとエラーになる可能性がありました。#114561 (Shaohua Wang).
  • clickhouse-local が、設定された --default_database では名前が長すぎる CREATE TABLE を受け入れ、削除できないテーブルを作成してしまう問題を修正しました。DatabaseOverlay は、書き込み先のディスク上のデータベースと同様にテーブル名の長さを確認するようになりました。#114567 (Groene AI).
  • Alias テーブルエンジンにおいて、ターゲットテーブルに対する権限を持たないユーザーが、そのスキーマ、行数、サイズ、および存在を確認できる RBAC バイパスを修正しました。#114596 (Kai Zhu).
  • 遅延実行 FINAL 最適化 (query_plan_optimize_lazy_final) を使用するクエリがサーバー起動後に最初に実行された集約クエリであった場合、ハッシュテーブル統計と、それに伴う集約ハッシュテーブルの事前割り当てが、サーバー全体で暗黙的かつ永続的に無効化される問題を修正しました。#114597 (Alexey Milovidov).
  • 1 つの ALTER 内で名前変更、削除、再追加されたカラムが、mutation の保留中に自身のデフォルト値ではなく削除されたカラムの値を返す問題を修正しました。#114601 (Shaohua Wang).
  • 秒単位の interval 引数の範囲が 2^32 の倍数である場合 (例: toIntervalDay(2147483648)) に、関数 hop および windowID で発生する無限かつキャンセル不能なループを修正しました。ラップアラウンドした減算によって時刻オーバーフローのチェックが回避され、定数引数の場合にはクエリを停止することすらできない解析時にループが実行されていました。同じ interval により、WINDOW VIEW のバックグラウンドスレッドも永久にループする可能性がありました。このような window view は作成時に拒否されるようになりました。#114607 (Alexey Milovidov).
  • http_response_headers または additional_table_filters を含む設定プロファイルなど、Map 値の設定を持つ access entity が ClickHouse で読み戻せない形式で保存され、再起動後にその entity を永続的に読み込めなくなるバグを修正しました。#114620 (Groene AI).
  • ignore_drop_queries_probability が有効な場合に、リフレッシャブルmaterialized view がローテーションで不要になったターゲットテーブルを残してしまう問題を修正しました。以前のターゲットをクリーンアップするために refresh が発行する DROP は refresh の処理の一部であり、ユーザーが要求した DROP ではないため、フォールトインジェクションは適用されなくなりました。#114622 (Groene AI).
  • 空の String や数値のゼロなど、要素型のデフォルト値に等しい定数 LowCardinality の検索値に対して、hasindexOfcountEqualmapContainsKeymapContainsValue、および Map の添字演算子が “not found” を返す問題を修正しました。 #114624 (Groene AI).
  • 遅延ポスティングリスト適用モードでテキスト索引を持つテーブルに対するクエリで、読み取り中にクエリがキャンセルされた際に発生する論理エラー Multi-block postings must be compressed を修正しました。 #114636 (Anton Popov).
  • 外側のクエリに末尾の SETTINGS 句がある場合の、view および viewIfPermitted テーブル関数のサブクエリ引数のフォーマットを修正しました。このようなクエリは view((SELECT ...)) としてフォーマットされ、再パースできないため、内部のフォーマット・パース・フォーマットチェックに失敗し、Inconsistent AST formatting が発生していました。 #114658 (Groene AI).
  • 読み取りバッファを所有する入力フォーマット経由で Parquet を読み取る際に発生するヒープメモリ破損を修正しました。たとえば、SOURCE(FILE(... format 'Parquet')) を使用する Dictionary が該当します。バックグラウンドの先読みおよびデコードタスクが、パイプラインでバッファが解放された後もそのバッファを介して読み書きでき、サーバーが異常終了する可能性がありました。 #114668 (Groene AI).
  • 基になるテーブルで親カラムが ALIAS として宣言されている場合に、Merge テーブル経由でサブカラム (.size0.null、タプル要素、String.size) を読み取る問題を修正しました。このような読み取りでは型のデフォルト値が返され、同じクエリで親カラムも選択されている場合は、無関係なカラムの値が返されることがありました。 #114673 (Groene AI).
  • ON 句に OR で結合された複数の条件を持つ ANY RIGHT JOIN および SEMI RIGHT JOIN で、右テーブルの一部の行が重複して返され、他の行の一致が失われる問題を修正しました。プランナーがテーブルを入れ替えて ANY RIGHT JOIN として実行する場合があるため、記述された ANY LEFT JOIN も影響を受けていました。 #114676 (Vladimir Cherkasov).
  • DISTINCTQUALIFY、ウィンドウ関数、または射影内の arrayJoin を含むクエリにおける、単純な GROUP BY ... LIMIT 最適化 (設定 optimize_trivial_group_by_limit_query) で誤った結果が返される問題を修正しました。これらは集約後にグループを消費またはフィルタリングするため、集約を LIMIT + OFFSET 個のキーに制限すると、返される行が少なすぎたり、値が誤ったりする可能性がありました。この最適化は、このようなクエリには適用されなくなりました。 #114695 (Alexey Milovidov).
  • ポリゴン引数が無効な定数リテラルであり、validate_polygons = 0 の場合に、MergeTree 主キーに対する pointInPolygon でフィルタリングされた SELECT の結果から行が欠落する問題を修正しました。主キー解析が検証していないポリゴンに基づいてグラニュールプルーニングを行い、一致する行を含むグラニュールを除外していました。 #114710 (Groene AI).
  • group_by_overflow_mode = 'any' およびゼロ以外の max_rows_to_group_by-OrNull または -OrDefault 集約関数コンビネータの集約状態をマージする際に発生するサーバークラッシュを修正しました。たとえば、クエリが集約射影経由で読み取る場合に発生します。 #114740 (Groene AI).
  • PREWHEREFINAL によるマージに必要なカラム (veris_deletedsign) を使用しているにもかかわらず、そのカラムを選択していない SELECT ... FINAL で発生する LOGICAL_ERROR (“Unexpected number of kept output positions after removing unused columns from ReadFromMergeTree”) を修正しました。 #114746 (Groene AI).
  • 内部集合演算を含む子テーブルに対して make_distributed_plan を有効にした Merge テーブルの読み取り時に発生する論理エラー (Block structure mismatch) を修正しました。 #114753 (Alexey Milovidov).
  • Kafka テーブルエンジン内での割り当て失敗ではなく、異常に大きい kafka_num_consumers を明確なエラーで拒否するようにしました。以前は、kafka_disable_num_consumers_limit が有効な場合、このような値によって std::length_error 例外が発生していました。 #114764 (Alexey Milovidov).
  • accurateCastOrDefault または to<Type>OrDefault 関数を含む保存済み式が、その式を作成したクエリの完了後に評価された場合 (たとえば、INSERT 時の MATERIALIZED カラムのデフォルト値や mutation 式) に発生する LOGICAL_ERROR: Context has expired 例外を修正しました。 #114769 (Groene AI).
  • クエリに JOIN があり、その配下のテーブルのテキストインデックス付きカラムが PREWHEREWHERE の両方のテキスト検索述語で使用される場合に発生する LOGICAL_ERROR (Cannot find input column ... on its position in inputs of expression actions DAG) を修正しました。 #114771 (Groene AI).
  • attach スレッドからの起動時に再起動スレッドのウェイクアップが失われる問題を修正しました。 #114802 (Azat Khuzhin).
  • コンパクションを実装していないエンジンを使用するオブジェクトストレージテーブルに対する OPTIMIZE TABLE が、何もせずに成功を報告していました。現在は、このステートメントをサポートしない他のすべてのエンジンと同様にエラーを発生させます。これは DeltaLakePaimonHudi、および通常のオブジェクトストレージエンジン (S3GCSCOSNOSSAzureBlobStorageHDFS、およびオブジェクトストレージをバックエンドとする URL) に影響します。コンパクションを実装している Iceberg は変更ありません。#114765 をクローズします。 #114805 (Groene AI).
  • 開始/終了タイムスタンプが符号なし値として読み取られていたため、timeSeriesRangetimeSeriesFromGrid は 1970 年以前のタイムスタンプに対して誤った DECIMAL_OVERFLOW をスローしていました。また、DateTime/UInt32 タイムスタンプでは、ステップが下位 32 ビットに暗黙的に切り詰められていました。現在、すべての計算は Int64 で行われます。 #114815 (Vitaly Baranov).
  • ReplicatedMergeTree テーブルに対する論理更新 UPDATE と同時に DROP TABLE が実行された際に発生するサーバーの異常終了 (Logical error: Part patch-... doesn't exist) を修正しました。更新はパッチパートがコミットされるまでテーブルの共有ロックを保持するようになったため、DROP はパッチパートを削除せず待機します。 #114826 (Groene AI).
  • 非同期 INSERT のいくつかのバグを修正しました (MEMORY_LIMIT_EXCEEDED により一部のクエリが失敗した場合にクラッシュする可能性、および動作していなかった async_insert_queue_flush_on_shutdown) 。 #114839 (Azat Khuzhin).
  • LowCardinality カラムを IN (subquery) と比較し、サブクエリ境界をまたいで tuple(...) 経由で読み取る場合に、enable_analyzer = 0 で発生していた LOGICAL_ERROR: Unexpected return type from tuple. Expected Tuple(..., UInt8). Got Tuple(..., LowCardinality(UInt8)) を修正しました。旧アナライザでは、LowCardinality カラムに対する x IN (subquery) が、x IN (literal list) および enable_analyzer = 1 の場合と同じ LowCardinality(UInt8) 型を返すようになりました。 #114856 (Nikita Fomichev).
  • AI 関数のクォータ設定 (ai_function_max_api_calls_per_queryai_function_max_input_tokens_per_queryai_function_max_output_tokens_per_query) は、クエリ単位ではなくブロック単位で適用されていたため、処理するブロック数とスレッド数に比例して設定済みの上限を超過する可能性がありました。現在は、サーバーごとにクエリ全体に対して上限が適用されます。API 呼び出し上限は厳密な上限 (アトミックな予約) であり、トークン上限はベストエフォートです。分散クエリでは、参加する各サーバー/フラグメントで上限が個別に適用されます。 #114885 (George Larionov).
  • テーブルのロード中にグローバルスレッドプールが一時的に飽和した場合に発生するサーバーの異常終了を修正しました。AsyncLoader は、追加のローダーワーカーを起動できなくても、いずれかのワーカーがキュー内のジョブを処理する場合は、std::terminate を呼び出さずに動作を継続します。 #114897 (Groene AI).
  • DateTime64 および高精度の Decimal 値における quantilequantiles の未定義動作および誤った境界値を修正しました。 #114919 (Alexey Milovidov).
  • 破損した ORC ストライプフッターが原因でサーバーが異常終了する問題を修正しました。 #114924 (Groene AI).
  • ThreadGroup の解放後使用が原因で発生する可能性があるクラッシュを修正しました (非同期 INSERT/MV/EXPLAIN ANALYZE) 。 #114940 (Azat Khuzhin).
  • 内部テーブル名より辞書式順序で前に来る名前の TimeSeries テーブル (例: DROP TABLE `-ts`) 、または ENGINE = TimeSeries で宣言された materialized view を削除する際にハングする問題を修正しました。削除処理が DDL ガードで自己デッドロックし、KILL QUERY でキャンセルできない場合がありました。 #114953 (Groene AI).
  • allow_deprecated_syntax_for_merge_tree で非推奨の位置依存構文を使用して作成された ReplicatedMergeTree で発生する BAD_DATA_PART_NAME (“Trying to get part name in new format for old format version”) を修正しました。mutation を適用していないレプリカで完了と報告される可能性があり、再起動後もテーブルが readonly のままになる可能性がありました。 #114980 (Groene AI).
  • リモートクラスターから読み取る IN サブクエリを含むクエリで発生する論理エラー Not-ready Set is passed as the second argument for function 'in' を修正しました。現在は、接続失敗などサブクエリで発生した実際のエラーによりクエリが失敗します。 #114983 (Alexey Milovidov).
  • 旧アナライザで、両辺に同一の非定数タプルを使用した IN の論理エラーを修正しました。 #114988 (Groene AI).
  • 位置依存の Tuple 構造ヒントを使用したタプル要素の読み取りを修正しました。 #115000 (Groene AI).
  • arrayReduceInRanges でサイズ 0 の集約の事前集約状態にエイリアスを付けないようにしました。 #115008 (Groene AI).
  • 記録されたファイルサイズのコミット時に失敗する LogTinyLog、または StripeLog テーブルへの INSERT を修正しました。このような insert では、エラーが報告されたにもかかわらず行がテーブルに残ったり、配列カラムのデータファイル間で不整合が生じたりする可能性がありました。要素を保持していないにもかかわらず offsets が要素ありと示す配列カラムを持つ Log または TinyLog テーブルの読み取り時には、要素の末尾を越えて読み取るのではなく、カラム名を含むエラーが発生するようになりました。部分的に書き込まれた elements カラムは、以前から拒否されていました。 #115027 (Groene AI).
  • 遅延レプリケーションされるカラムでアダプティブアグリゲータが異常終了する問題を修正しました。 #115034 (Groene AI).
  • 座標が +-DBL_MAX に達する場合など、バウンディングボックスが無制限の定数 Polygon を使用した pointInPolygon での範囲外読み取りを修正しました。このような Polygon は BAD_ARGUMENTS で拒否されるようになり、空のリングを持つ Polygon は内部を持たないものとして扱われます。以前は、クエリが誤った結果を返したり、ハードニングまたはサニタイザを有効にしたビルドでサーバーが異常終了したりする可能性がありました。 #115035 (Groene AI).
  • sequenceMatchsequenceCount、または sequenceMatchEvents のパターンにイベント番号 0 が含まれる場合 (例: sequenceMatch('(?0)')) に、内部エラー Code: 1001 として発生する out_of_range 例外を修正しました。このようなパターンは BAD_ARGUMENTS で拒否されるようになりました。sequenceMatch('(?1)(?t>+)(?2)') のように単独の符号を含む時間条件は、これまで暗黙的に (?t>0) として扱われていましたが、現在は SYNTAX_ERROR で拒否されます。 #115056 (Groene AI).
  • 論理更新を使用するテーブルで発生する Found patch part ... that intersects mutation with version ... (LOGICAL_ERROR) を修正しました。パッチパートのマージにより、既存パートのデータバージョンをまたぐデータバージョン範囲を持つパッチが生成される可能性がありました。このパッチは適用もスキップもできず、その後のパーティションに対するすべての操作が失敗し、レプリケーションキューが停止していました。このようなマージは割り当てられなくなりました。 #115064 (Alexey Milovidov).
  • experimental の use_reader_executor 設定でファイルシステムキャッシュ経由で読み取る際に発生する LOGICAL_ERROR (Cache file segment is in detached state) を修正しました。このリグレッションは #110029 で導入されたもので、どのリリースにも含まれていないため、バックポートは不要です。 #115070 (Groene AI).
  • Arrow Flight サーバー: ADBC Flight SQL ドライバーなどの Go ベースの Flight クライアントから送信される、パディングなしで Base64 エンコードされた Basic 認証情報を受け入れ、authorization ヘッダーの形式が不正な場合は、一般的な Unexpected error in RPC handling ではなく適切な認証エラーを返すようにしました。 #115085 (Alexey Milovidov).
  • SSH インターフェースおよびウェブターミナルで使用される組み込み client の autocompletion (system.completions によるヒントおよび TAB 補完) を修正しました。候補は、空の password を持つ default ユーザーとして認証する別の connection 経由で読み込まれていたため、default に password が設定されているサーバーでは失敗し、それ以外の場合はログイン中のユーザーにアクセス権のないエンティティ名が漏洩していました。候補はセッション自身の connection 経由で読み込まれるようになりました。 #115086 (Alexey Milovidov).
  • allow_experimental_url_wildcard_from_index_pages が有効な状態で CREATE TABLE ... AS url('http://host/**/', ...) によりテーブルを作成した後、サーバーが起動しなくなる問題を修正しました。このようなテーブルのメタデータを読み込む際に Experimental チェックが再評価され、SUPPORT_IS_DISABLED で失敗して起動が中止されていました。#115095 (Groene AI).
  • bucketIndexForTimestamp を 64 ビット演算を使用するよう書き換えました。#115097 (Vitaly Baranov).
  • ALTER TABLE ... MATERIALIZE INDEXMATERIALIZE STATISTICSMATERIALIZE PROJECTION のフォーマット時に IF EXISTS 句が削除され、整形後のクエリがパースされたクエリと一致しない問題を修正しました。また、SQL parser では生成できず、別のコマンドとしてフォーマットされる 4 種類の ALTER ... STATISTICS AST JSON ペイロードを拒否するようにしました。#115099 (Groene AI).
  • ソートキーが式であるテーブルに対する PREWHERE を含む一部の SELECT ... FINAL クエリで発生する例外 (Block structure mismatch in Expression for FilterSortedStreamByRange) を修正しました。#115113 (Shaohua Wang).
  • clickhouse-local の CORS CLI オーバーライドを修正しました。#115129 (Alexey Milovidov).
  • projections での分散索引解析を無効化しました (誤った結果を返すため) 。#115132 (Azat Khuzhin).
  • Time 分岐が Time64DateTime、または DateTime64 と組み合わされ、式が JIT コンパイルされる場合に、ifmultiIf が負の値ではなく大きな正の値を返す問題を修正しました。#115146 (Groene AI).
  • SQL Console や play.html など別のページに埋め込まれたウェブターミナルは、そのページから認証情報を受け取り、認証情報が届く前に独自に接続を開かなくなりました。以前は、空のパスワードで一度、実際の認証情報でもう一度接続し、Connecting... を 2 回表示していました。#115148 (Alexey Milovidov).
  • WHERE 句に NOT 配下の NULL 式が含まれる場合 (例: SELECT count() FROM t WHERE NOT (id >= 20 AND NULL)) に、誤った結果になる問題を修正しました。索引解析がこのような条件を範囲全体で確実に true として扱い、filter をスキップしていました。その結果、count() はクエリが除外すべき行を返し、この条件を使用した ALTER TABLE ... DELETE は保持すべき行を削除していました。#115152 (Groene AI).
  • 本文に JOIN を含む SQL SECURITY DEFINER または SQL SECURITY NONE として宣言された view の join statistics が、EXPLAIN ANALYZE で失われる問題を修正しました。debug および sanitizer ビルドでは、クエリが論理エラー JoinStep analyzed without the analyze mode で中止していました。#115156 (Groene AI).
  • テキスト索引の破損した posting lists をデシリアライズする際の範囲外読み取りを修正しました。#115222 (Anton Popov).
  • デフォルトの optimize_trivial_count_query = 1 を使用する SELECT count(arrayJoin(arr)) で誤った結果になる問題を修正しました。配列要素数ではなく保存済みの行数が返され、file() および url() ではクエリが 0 を返していました。#115123 をクローズします。#115227 (Groene AI).
  • ALIAS または EPHEMERAL カラムに STATISTICS(...) を宣言したテーブルに対するすべての INSERTNOT_FOUND_COLUMN_IN_BLOCK が発生し、テーブルが読み取り専用になる問題を修正しました。#115231 (Groene AI).
  • 完了したクエリの最終統計情報 (N rows in resultRead ... rows) が Web UI で見えない色で表示される問題を修正しました。#115245 (Alexey Milovidov).
  • 不正な形式の AggregateFunction(uniq, ...) 状態の読み取り時に、エラーにならず誤った結果が返される、または未定義の動作が発生する問題を修正しました。シリアル化された状態の skip_degree フィールドが検証なしにシフト指数として使用されていたため、範囲外の値ではエラーではなく任意のカーディナリティが生成されていました。このような状態は現在 INCORRECT_DATA として拒否されます。#115276 (Groene AI).
  • source table の SELECT ROW POLICY によって非表示となる行の主キーおよび MinMax index の値を mergeTreeIndex table function から取得できてしまう ROW POLICY のバイパスを修正しました。ROW POLICY を持つテーブルに対する mergeTreeIndex の読み取りは現在拒否されます。#115304 (Yarik Briukhovetskyi).
  • インターバル間の区切りカンマを省略した場合に、CREATE QUOTA および ALTER QUOTA が最後の FOR INTERVAL ブロック以外を暗黙的に破棄する問題を修正しました。このようなステートメントは成功する一方で、それ以前の制限はいずれも設定されませんでした。インターバルは 2020 年以前と同様に再び累積されるようになりました。#115282 をクローズします。#115320 (Groene AI).
  • ある分岐が Date または Date32 で、結果型が DateTime または DateTime64 の場合に、ifmultiIfCASE が誤った結果を返す問題を修正しました。compile_expressions = 1 (デフォルト) では、コンパイル済みの式が日数を秒に変換せずに日付の日数カウントを timestamp カラムにコピーしていたため、if(cond, toDate32('1900-01-01'), toDateTime64('1970-01-01', 3))1969-12-31 23:59:34.433 を返していました。#115272 をクローズします。#115325 (Groene AI).
  • 削除された named collection を参照するメタデータが残らないようにしました。#115326 (Groene AI).
  • timezoneOffset (alias timeZoneOffset) が、Pacific/Kiritimati や国際日付変更線を越えた後の Pacific/Apia など、UTC offset が 1970-01-01 時点の offset と丸 1 日異なる time zone、および 1970 年以前のほとんどの zone において、ちょうど 1 日ずれた offset を返す問題を修正しました。これにより、その offset を使用する parseDateTimeparseDateTimeOrNullparseDateTime64parseDateTimeInJodaSyntaxEXTRACT(TIMEZONE_HOUR / TIMEZONE_MINUTE ...)formatDateTime%ztoUTCTimestampfromUTCTimestamp も修正されます。#115281 をクローズします。#115332 (Groene AI).
  • 設定の制約をバイパスできる問題を修正しました。SET <name> = DEFAULT はユーザーの profile にある制約を確認せずに設定をリセットしていたため、設定値を代入する代わりにリセットすることで MIN/MAX/CONST 制約を回避でき、SET readonly = DEFAULT によって session が readonly モードを解除できていました。#115334 (Alexey Milovidov).
  • Arrow Flight サーバー: ユーザー名とパスワードの区切り文字を欠く不正な Basic 認証の認証情報を拒否するようにしました。 #115347 (Alexey Milovidov).
  • 2 つの側のいずれかが主キー、カラム STATISTICS、またはテーブルが空であることによりパーツがまったくない状態まで枝刈りされた場合に、query_plan_join_shard_by_pk_ranges を有効にした full_sorting_merge JOIN で発生する LOGICAL_ERROR (Join is supported only for pipelines with one output port) を修正しました。 #115352 (Alexey Milovidov).
  • _part_starting_offset に対するフィルターでは、クエリ条件キャッシュを無効にしました。 #115358 (Azat Khuzhin).
  • 呼び出しに異なる別名が付いている場合に、randConstant が 1 つのクエリ内で 2 つの異なる値を返す問題を修正しました。randConstant はクエリ全体で単一の値を保持するものとして文書化されており、SELECT randConstant() = randConstant() はすでに 1 を返していましたが、SELECT randConstant() AS a, randConstant() AS b のように別名を追加すると、関連のない 2 つの値が生成されていました。 #115384 (Alexey Milovidov).
  • Nullable カラムに対する uniqExact(tuple(x)) のように、NULL 可能性を隠す単射関数でラップされた引数に対して、uniquniqExactuniqHLL12uniqTheta が誤った結果を返す問題を修正しました。optimize_injective_functions_inside_uniq 最適化によってラップ関数が削除された結果、NULL 行がカウントされずにスキップされていました。 #115466 (Vladimir Cherkasov).
  • GroupingAggregatedTransform が同じバケットに対して重複したチャンクを生成する問題を修正しました。 #115487 (Nikita Taranov).
  • 座標が Float64 でない場合に、geoToH3 のエラーメッセージが誤った引数位置と型を示す問題を修正しました。デフォルトの geotoh3_argument_order = 'lat_lon' では、メッセージがもう一方の引数を指し、その引数の型を表示していました。#101813 をクローズします。 #115503 (Groene AI).
  • HTTP ヘッダーフィルターを通過する HTTP ヘッダー名および値で、ラインフィード (\n) に加えて単独の復帰 (\r) も拒否するようにしました。これにより、url テーブル関数およびエンジン、HTTP Dictionaries、データレイクカタログなど、ユーザー指定のヘッダーを渡す機能における HTTP ヘッダー挿入 (リクエスト/レスポンス分割) の欠陥を修正します。 #115510 (Sergei Trifonov).
  • 最大エントリ数 (SLRU ポリシー) で設定されたキャッシュが、その数のエントリに少なくとも 2 回アクセスされると、新しいエントリの受け入れを通知なく停止する問題を修正しました。影響を受けるキャッシュには、Iceberg および Paimon のメタデータファイルキャッシュ、Parquet メタデータキャッシュ、テキスト索引キャッシュ、ベクトル類似度索引キャッシュ、コンパイル済み式キャッシュ、ObjectStorageQueue ファイルステータスキャッシュが含まれます。 #115517 (Groene AI).
  • 名前付きコレクションで http_client = 'gcp_oauth' を設定しており、Google OAuth2 トークンエンドポイントが接続を受け入れるものの応答しない場合に、BACKUP/RESTORE ... TO S3、GCS ディスク、s3 テーブル関数で最大 1 時間ハングする問題を修正しました。Bearer token リクエストは呼び出し元のデータ転送リクエストタイムアウトを継承しなくなり、応答待機時間は STS AssumeRole リクエストの上限と同じ 10 秒に制限されます。 #115531 (Groene AI).
  • 分散クエリにおける dictGet およびその派生関数を修正しました。修飾されていない Dictionary 名は、各シャードの現在のデータベースに対して解決されるのではなく、イニシエーターの現在のデータベースに紐付けられるようになりました。従来は、Dictionary が見つからないか、同名の別の Dictionary に解決されていました。 #115541 (Alexey Milovidov).
  • STREAM BOUNDED クエリが、開始前にコミットされた行数より少ない行を返す可能性があった競合状態を修正しました。通常は 0 行が返されていました。 #115543 (Alexey Milovidov).
  • compress_snapshots_with_zstd_format が無効な場合に、Keeper スナップショットが空のファイルとして書き込まれる問題を修正しました。サーバーは Created persistent snapshot をログに記録していましたが、スナップショットファイルは 0 バイトであり、ノードはその後 CORRUPTED_DATA で起動を拒否していました。#115388 をクローズします。 #115553 (Groene AI).
  • system.query_thread_logread_rowsread_byteswritten_rowswritten_bytes が、ログに記録されたクエリの値ではなく、スレッドの存続期間全体の累計を報告する問題を修正しました。長期間存続するプール済みスレッド、特にクエリを開始する HTTPHandler スレッドの行数が影響を受けていました。 #115596 (Groene AI).
  • 集計中に Dictionary が拡張される LowCardinality(String) キーに対して集計または結合を行う際、キャッシュされた Dictionary ハッシュで範囲外読み取りが発生する問題を修正しました。この問題は TTL ... GROUP BY から発生する可能性がありました。誤ったハッシュ値や、sanitizer ビルドでの heap-buffer-overflow を引き起こす可能性がありました。 #115604 (Groene AI).
  • CREATE TABLE および ALTER TABLE で、パーティションキーに使用されるカラムへ SZ3 などの不可逆コーデックを指定した場合に拒否するようになりました。 #115626 (Groene AI).
  • text、tokenbf_v1、ngrambf_v1 インデックスにおける無効なバックスラッシュエスケープ文字を修正しました。 #115634 (Elmi Ahmadov).
  • アクティブなデータパートセットに存在するパートに対して呼び出された場合の removePartAndCoveredParts を修正しました。 #115640 (Mikhail Artemenko).
  • 同等の主キーが冗長な外側の括弧だけ異なる場合に、KeeperMap リーダーが共有メタデータを受け入れられるようにしました。 #115642 (Sergey Kuznetsov).
  • 新しい名前でデータベースまたはテーブルを復元すると、保存済み VIEW の定義からテーブルエイリアスが削除され、復元した VIEW の読み取りが UNKNOWN_IDENTIFIER で失敗するバグを修正しました。#115479 をクローズします。 #115645 (Groene AI).
  • has または notHas 述語に NULL の Array 要素が含まれ、主キーが StringArray(String)、または Map(String, String) である場合に発生する Code: 349. Cannot convert NULL value to non-Nullable type を修正しました。また、その要素が NULL を保持する Dynamic または Variant である場合に誤った結果が返される問題も修正しました。他のキー型と同様に、キー分析中に NULL はセットから除外されるようになりました。 #115647 (Groene AI).
  • 関数 formatRowNoNewline で、行を空の結果にフォーマットした際に不正な結果または論理エラーが発生する可能性があったバグを修正しました。 #115669 (Alexey Milovidov).
  • 単一点の Prometheus range クエリで、ゼロまたは負の step 値を拒否するようにしました。 #115679 (Minh Vu).
  • Int64 の範囲を超える PromQL のタイムスタンプおよび期間を拒否するようにしました。 #115682 (Minh Vu).
  • readWKBJSONMergePatchurl/remote/cluster/mysql/postgresql テーブル関数のアドレスパーサー、CURSOR 句パーサー、CapnProto スキーマパーサーにおいて、深くネストされた入力によってサーバーがクラッシュする問題を修正しました。引数がリテラルでない場合に EXECUTE ステートメントのパーサーがクラッシュする問題も修正しました。 #115700 (Alexey Milovidov).
  • 長さが 8 の倍数でないバイナリ文字列リテラルの結果や、圧縮ブロックに本体がない場合の LZ4 圧縮解除器から、未初期化メモリを返さないようにしました。 #115704 (Alexey Milovidov).
  • 認証前に読み取られる PostgreSQL ワイヤプロトコルの起動メッセージのサイズに上限を設けました。 #115708 (Alexey Milovidov).
  • カラムエイリアスが FROM 句内のテーブル式のエイリアスと一致するクエリで発生する MULTIPLE_EXPRESSIONS_FOR_ALIAS エラーを修正しました (バージョン 25.2 のアナライザのリグレッション) 。 #115714 (Alexey Milovidov).
  • SYSTEM START LISTEN で開始したリスナーの接続ハンドラーが、たとえばクライアントが不正なパケットを送信したり keep-alive ソケットをリセットしたりしたことで例外をスローした場合に、clickhouse-local がプロセス全体を終了していた問題を修正しました。このような場合、clickhouse-server と同様にエラーをログに記録し、サービス提供を継続するようになりました。 #115715 (Groene AI).
  • カラムを一切持たないテーブル式からクエリがカラムを読み取らない場合に発生する LOGICAL_ERROR: No available columns を修正しました。たとえば、ターゲットが削除された Alias テーブルまたはパラメーター化ビューである tbl に対する SELECT count() FROM loop(db, tbl) です。このようなクエリは、デバッグおよび sanitizer ビルドでサーバーを異常終了させる代わりに、UNSUPPORTED_METHOD で失敗するようになりました。 #115716 (Groene AI).
  • Distributed テーブルに対する IN サブクエリ内で MATERIALIZED CTE を読み取る際に発生する LOGICAL_ERROR “マテリアライズド CTE ‘X’ のマテリアライズ完了前に読み取りました - クエリプランに DelayedPortsProcessor ゲートがありません” を修正しました。#113184 をクローズします。 #115740 (Groene AI).
  • 無効な projection 名およびインデックス名を拒否するようにしました。 #115824 (Alexander Tokmakov).
  • 一方のオペランドがスカラーの場合、PromQL のベクトルマッチング修飾子を拒否するようにしました。 #115828 (Minh Vu).
  • ターゲット型が LowCardinality の場合に cast_keep_nullable が NULL 許容性を維持しない問題を修正しました。NULL を許容する値を LowCardinality(T) にキャストすると、LowCardinality(Nullable(T)) を生成する代わりに CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN がスローされていました。#103485 をクローズします。 #115851 (Groene AI).
  • Objects のパスを重複排除ハッシュに追加し、誤った重複排除を防止しました。#115866 (Mikhail f. Shiryaev).
  • Distributed テーブル上または並列レプリカで実行される、has([map('k', 'v')], m) のような Array(Map(...)) 型の定数を含むクエリで発生する TYPE_MISMATCH (“CAST AS Array can only be performed between same-dimensional array types”) を修正しました。#115883 (Alexey Milovidov).
  • ウィンドウクエリのソートカラムが、そのカラムを参照しない Expression ステップを通過する場合に、make_distributed_plan = 1 でのクエリプラン最適化中に発生する Unknown identifier を修正しました。#115737 を解決します。#115890 (Groene AI).
  • 行ブロックの展開中に h3kRingh3HexRingh3Lineh3ToChildrenmax_execution_time および KILL QUERY を無視する問題を修正しました。#115893 (Alexey Milovidov).
  • ターゲットがパラメーター化ビューである Alias テーブルに一致する Merge テーブルを介した読み取りで、LOGICAL_ERROR: Table has no columns. が発生しなくなりました (このエラーはデバッグおよび sanitizer ビルドではサーバーを異常終了させます) 。このようなテーブルでは、パラメーター化ビュー自体と同じ STORAGE_REQUIRES_PARAMETER エラーが返されるようになりました。カラムを提供できないその他の一致テーブルでは、内部エラーではなく UNSUPPORTED_METHOD が返されるようになりました。#115896 (Groene AI).
  • 式が _sample_factor を参照する保留中のミューテーションのオンザフライプレビューを修正しました。apply_mutations_on_fly = 1SAMPLE 句を使用する場合、式はバックグラウンドでの materialization により永続化される値ではなく、読み取りクエリのサンプル係数で評価されていたため、プレビューされた行が最終的な materialized の結果と一致せず、保留中の ALTER TABLE t DELETE WHERE _sample_factor > 1 により SAMPLE 読み取りで行がまったく返されなくなる可能性がありました。クエリ自体の _sample_factor カラムは変更されません。#115906 (Groene AI).
  • ENGINE = URL(...) 定義を含む ATTACH TABLE が、URL スキームによってディスパッチされるエンジンの TABLE ENGINE 権限を確認しない問題を修正しました。TABLE ENGINE ON URL のみを持つユーザーが、CREATE TABLE では正しく拒否される FileS3AzureBlobStorage、または HDFS をバックエンドとするテーブルをアタッチして読み取ることができました。#115914 (Groene AI).
  • 解析できない KeeperMap メタデータノードによってサーバーの起動が妨げられないようにしました。#115941 (Groene AI).
  • ACME (Let’s Encrypt) で TLS 証明書を取得するサーバー上での showCertificate 関数のクラッシュを修正しました。この関数は、証明書の再読み込み後も、実際に提供されている証明書を報告するようになりました。#115976 (Alexey Milovidov).
  • TO ターゲットが別の materialized view である materialized view への insert 時に、デバッグおよび sanitizer ビルドでサーバーが異常終了する問題を修正しました。このような insert はリリース済みバージョンでもすでに失敗しており、情報量の少ない Code: 1001 STD_EXCEPTION が返されていましたが、現在は問題のビュー名を含む NOT_IMPLEMENTED が返されます。#115985 (Groene AI).
  • フォーマットバージョン V3 の統計ファイルを、ILLEGAL_STATISTICS で拒否せず読み取れるようにしました。このようなファイルはごく限られた期間の master ビルドでのみ生成されていましたが、これらを含むパーツはまったく読み取れず、readonly ディスクでは ALTER TABLE ... MATERIALIZE STATISTICS による再生成もできませんでした。 #116030 (Alexey Milovidov).
  • 暗黙的な minmax 索引 (add_minmax_index_for_numeric_columns など) を持つテーブルで、単一の ALTER TABLE ステートメント内で RENAME COLUMNMODIFY SETTING などの別のコマンドを組み合わせた場合に発生する LOGICAL_ERROR: Index with name auto_minmax_index_<column> already exists を修正しました。また、通常のカラムをリネームした場合も、後続の DROP COLUMNUNKNOWN_IDENTIFIER で失敗したり、後続の ADD COLUMN で暗黙的な索引が作成されなかったりすることがなくなりました。 #116063 (Groene AI).
  • オブジェクトストレージ使用時に stateless workers がクラッシュする問題を修正しました。 #116067 (Konstantin Vedernikov).

ビルド/テスト/パッケージングの改善

  • macOS 向けの署名済みアーティファクトを提供。 #115169 (Konstantin Bogdanov).
  • clang 23 でのソースからのビルドを修正。 #112288 (Azat Khuzhin).
  • SQL パーサーの依存関係とコードサイズを削減し、単独でビルドできるようにしました。スタンドアロンの WebAssembly ビルドについては、utils/wasm-parser を参照してください。SQL キーワードとアクセス種別のテーブルは、サーバーの起動ごとではなくコンパイル時に生成されるようになりました。 #112067 (Alexey Milovidov).
  • ライセンス生成に失敗した場合、StorageSystemLicenses.generated.cpp が破損する代わりに、CMake の生成中にソースからのビルドが失敗するようになりました。 #111222 (Mikhail Artemenko).
  • バンドルされている Apache Thrift ライブラリをバージョン 0.24.0 に更新。 #111278 (Groene AI).
  • musl ビルド向けに libucontext を追加し、sanitizer ビルドで使用される boost::contextucontext バックエンドを有効化。 #111437 (Konstantin Bogdanov).
  • musl でビルドする際のソースレベルでの移植性の問題を修正。 #111631 (Konstantin Bogdanov).
  • ソースからビルドする際、Core/ProtocolDefines.h を編集しても、ほぼ完全な再ビルドがトリガーされなくなりました。BlockInfo.h から include を削除し、その定数を使用するファイルにのみ追加しました。 #111650 (Alexander Gololobov).
  • システムライブラリによる割り当てに対するメモリトラッカーの debug チェックを無効化し、macOS の debug ビルドで起動時に異常終了する問題を修正。 #112080 (Arsen Muk).
  • バンドルされている libarchive をバージョン 3.8.9 に更新。 #112434 (Konstantin Bogdanov).
  • StringZilla をバージョン 5.0.5 に更新。 #112319 (Konstantin Bogdanov).
  • jwt-cpp を v0.7.2 に更新。 #112595 (Konstantin Bogdanov).
  • バンドルされている SQLite amalgamation を 3.41.2 から 3.53.4 に更新。 #112599 (Konstantin Bogdanov).
  • aws-c-http をバージョン 0.11.0 に更新。 #112413 (Govind R Nair).
  • libcotp を v4.2.1 に更新。 #112596 (Konstantin Bogdanov).
  • OpenSSL は、ビルド記述に手書きのアセンブリがないアーキテクチャで、最終リンク時に未定義シンボルにより失敗する代わりに、移植可能な C ソースからビルドできるようになりました。新しい OPENSSL_NO_ASM CMake オプションを使用すると、同じビルド方式を明示的に選択できます。 #112863 (Alexey Milovidov).
  • ENABLE_ORC CMake オプション (デフォルトで有効) を追加しました。これにより、ORC および ORC に付随する protobuf と protoc を含めずに、Parquet を使用するビルドが可能になります。 #112864 (Alexey Milovidov).
  • Common/Exception.cpp のコンパイルに、ClickHouse のパッチ適用済み libc++ が不要になりました。これにより、別の C++ 標準ライブラリにリンクするビルドでは、コンパイルに失敗するのではなく、throw-site のスタックトレースなしで例外を取得できるようになります。 #112865 (Alexey Milovidov).
  • aarch64 musl ビルドでのスタックアンワインドが、libc フレームで停止せず、シグナルフレームおよびブロック中の syscall を越えて継続するようになりました。これにより、致命的エラーハンドラーおよびサンプリングクエリプロファイラのスタックトレースが改善されます。 #112592 (Konstantin Bogdanov).
  • ベンダー提供の libexpat を 2.8.2 に更新しました。 #112593 (Konstantin Bogdanov).
  • simdjson を v4.6.5 に更新しました。 #112594 (Konstantin Bogdanov).
  • Apache Arrow を 25.0.0 に、Apache ORC を 2.3.1 に更新しました。 #112604 (Konstantin Bogdanov).
  • カバレッジビルド (WITH_COVERAGE) では、ホストの clang ツールチェーンにバンドルされたアーカイブではなく、ベンダー提供の LLVM ソースからツリー内でビルドしたプロファイルランタイムにリンクするようになりました。 #112607 (Konstantin Bogdanov).
  • Protocol Buffers を v35.1 に、gRPC を v1.83.0 に更新しました。 #112614 (Konstantin Bogdanov).
  • 実験的な WebAssembly ターゲット (Emscripten 経由の wasm64) を追加しました。emcmake cmake でソースツリーを構成できるようになり、下位レイヤーもビルドされます。また、どのプラットフォームでもビルドできなかった -DENABLE_LIBFIU=OFF を修正しました。 #112911 (Alexey Milovidov).
  • すべての -Wunique-object-duplication の発生箇所を修正しました。対象は、プロセスごとに 1 つではなく共有オブジェクトごとに 1 つのコピーが作成される、ヘッダーで定義された可変シングルトンです。主に定義を .cpp に移動して修正しました。 #112995 (Alexey Milovidov).
  • 壊れたシンボリックリンク上に tgz パッケージをインストールする際、シンボリックリンクチェーンを保持し、umask に基づくモードではなく、パッケージ内のターゲットのモードと所有権を適用するようになりました。 #112766 (Alexey Milovidov).
  • aarch64 musl ビルドでは、memmove が汎用 C の word-at-a-time ループではなく、ARM optimized-routines のアセンブリ実装 (memcpy と共有) を使用するようになりました。 #113502 (Konstantin Bogdanov).
  • musl ビルドでは、AI_ADDRCONFIG を使用する getaddrinfo が glibc のセマンティクスに従うようになりました。これにより、IPv4 専用環境で localhost が使用不能な ::1 に先に解決されなくなり、sysconf は -1 ではなく getpwuid_r/getgrgid_r 用の glibc のバッファーサイズヒントを返すため、libhdfs3 が再び使用可能になります。 #113485 (Konstantin Bogdanov).
  • musl ビルドでは、sched_getcpu が syscall ではなく rseq の読み取り (約1ns) となり、glibc と同等になりました。これにより、割り当て負荷の高いワークロードにおける jemalloc’s percpu_arena のシステム時間オーバーヘッドが解消されます。musl は rseq を即時に登録し、glibc の __rseq_* ABI もエクスポートします。#113501 (Konstantin Bogdanov).
  • ベンダー提供のすべての Rust コード (PCO codec、delta-kernel-rs による Delta Lake の読み取り、prqlcchdigwasmtimeskim によるクライアントのあいまい履歴検索) を opt-level = 0 でコンパイルしていたローカル (非 CI) ビルドを修正しました。SANITIZE CMake 変数は option で宣言されていたため、デフォルト値が BOOL の OFF となっていました。このため、STREQUAL "" による「sanitizer なし」のチェックに失敗し、明示的な -DSANITIZE=... を指定せずに構成されたすべてのビルドで、Rust の最適化を無効化する sanitizer 回避パスが選択されていました。#114083 (Alexey Milovidov).
  • Docker イメージのレイヤーを zstd 圧縮して Push します。#114342 (Alexey Milovidov).
  • Debian パッケージはリリースビルドに対してのみビルドします。#114739 (Alexey Milovidov).
  • 完全なライブラリセットがない構成 (ENABLE_LIBRARIES=0 または ENABLE_ROCKSDB=0) での unit_tests_dbms のビルドを修正しました。#115655 (Alexey Milovidov).

ClickHouse リリース 26.7、2026-07-22。 プレゼンテーションビデオ

後方互換性を持たない変更

  • ユーザー SQL に起因する S3 アクセスでは、デフォルトでサーバー自身のクラウド認証情報 (environment、IMDS/IRSA、instance profile、AWS config files、role_arn ベースの STS、GCP OAuth metadata) は解決されなくなりました。このようなリクエストでは、明示的な認証情報または NOSIGN を使用する必要があります。named collections では、use_environment_credentials のデフォルトが 0 になりました。以前の動作に戻すには、新しい設定 s3_allow_server_credentials_in_user_queries (デフォルトでは無効) とあわせて、リクエストごとに use_environment_credentials = 1 を指定するか、または <s3> config でグローバルに設定します。明示的に指定した認証情報と、オペレーターによってプロビジョニングされた config 認証情報は影響を受けません。サーバー起動時または RESTORE 時には、その定義でこの種の認証情報を解決する永続的な S3/S3Queue テーブル、動的 S3 ディスク、または DataLakeCatalog は、起動を中止する代わりに匿名で読み込まれます (認証情報を再設定するまでアクセス不可) 。この動作は、新しいサーバー設定 s3_load_table_anonymously_if_credentials_restricted (デフォルトで有効) で制御されます。 #106855 (Raúl Marín).
  • **/ glob は、同じディレクトリ (任意の数のディレクトリ) にも一致するようになりました。以前は、glob パターン内の **/ は特別扱いされていなかったため、data/**/file.txtdata/file.txt (ディレクトリ階層 0) に一致しませんでした。 #97676 (Alexey Milovidov).
  • オブジェクトストレージに保存されるバックアップでは、BACKUPRESTORE の両方について zip/zipx バックアップアーカイブフォーマットを拒否するようになりました。対象は、直接の S3(...)/AzureBlobStorage(...) 宛先と、S3 または Azure をバックエンドとする Disk(...) 宛先です。Zip は中央ディレクトリの読み取りにシークを必要としますが、オブジェクトストレージ越しでは非常に低速です。代わりに tar.gz などの tar ベースのフォーマットを使用してください。 #101770 (Yash ).
  • DateTime64 のサポート範囲を [1900-01-01, 2299-12-31] から [0000-01-01, 9999-12-31] に拡張しました。従来の範囲外の値も、境界値にクランプされるのではなく、正しく計算されるようになりました (cctz 経由) 。精度 8 または 9 では、tick が Int64 として保存されるため、範囲は引き続き狭いままです (ナノ秒精度での最大値は引き続き 2262-04-11 です) 。後方互換性については、以前に範囲外の date-time を使用していて、旧範囲内での非常に特殊な飽和ルールに依存していた場合、結果がより正確なものに変わる点に注意してください。 #107907 (Alexey Milovidov).
  • AggregatingMergeTree は、カラムが sorting key の一部でも aggregate-state measure (AggregateFunction/SimpleAggregateFunction) でもないスキーマを、テーブル作成時に拒否するようになりました。このようなカラムは background merges の際に暗黙的に任意の値へまとめられるため、それらに対して GROUP BY やフィルタを行うクエリで誤った結果を招きます。以前の動作に戻すには、allow_dimensions_outside_sorting_key = 1 を設定してください。 Closes #751. #108087 (Alexey Milovidov).
  • config ベースの Workload scheduling 設定 (server config の resources および workload_classifiers セクション) を削除しました。代わりに CREATE RESOURCE および CREATE WORKLOAD クエリを使用してください。廃止された config セクションは、警告を出したうえで無視されます。 #108286 (Sergei Trifonov).
  • ClickHouse は、同期挿入と非同期挿入の両方で、今後は常に統一された挿入の重複排除ハッシュを使用します。挿入ごとの従来の重複排除動作は削除されました。サーバー設定 insert_deduplication_version は移行ガードとして残されています。この設定が従来の値 (old_separate_hashes または compatible_double_hashes) になっている場合、サーバーは起動を拒否します。従来の値を使っていたバージョンからアップグレードする場合は、まず compatible_double_hashes をサポートするリリースを実行してください (このリリースでは従来のハッシュと統一ハッシュの両方が書き込まれます) 。レプリケートテーブルでは、少なくとも replicated_deduplication_window_seconds の間実行してください (デフォルトでは 1 時間です。デフォルトのウィンドウでは、その期間内のすべての挿入について統一ハッシュが保持されるため、挿入の再試行ループには十分とみなされます) 。non_replicated_deduplication_window > 0 の非レプリケートテーブルでは、このウィンドウは時間ベースではなく件数ベースなので、少なくともその件数分の挿入について compatible_double_hashes を実行してください。その後、このバージョンへアップグレードする前に、この設定を削除するか、new_unified_hash に設定してください。#108361 (Sema Checherinda)。insert_deduplication_version を一度も設定したことがない場合は、この項目は無視してかまいません。
  • 長らく非推奨だった関数 snowflakeToDateTimesnowflakeToDateTime64dateTimeToSnowflakedateTime64ToSnowflake を削除しました。これらは v24.6 の時点で非推奨となっており、代わりに snowflakeIDToDateTimesnowflakeIDToDateTime64dateTimeToSnowflakeIDdateTime64ToSnowflakeID を使用する必要があります。設定 allow_deprecated_snowflake_conversion_functions (以前はこれらの関数を再度有効にしていました) は、現在では廃止されており、効果はありません。#108711 (Alexey Milovidov)。
  • 設定 use_legacy_to_time のデフォルト値は 0 になりました。そのため、toTime は日時を固定日付に変換するのではなく、値を Time データ型に変換します。従来の動作は、toTimeWithFixedDate 関数を使うか、use_legacy_to_time = 1 を設定することで引き続き利用できます。#108729 (Alexey Milovidov)。
  • Naive Bayes モデル (naiveBayesClassifier で使用) は、従来のサーバー側設定 (シリアライズ済み .bin モデルファイルを参照する XML 設定ファイル) ではなく、クラスごとに事前集計された n-gram 出現回数のテーブルから読み込み時に構築される NAIVE_BAYES レイアウトの Dictionary として設定する方式になりました。従来方式はサポートされなくなったため、既存のモデルは Dictionary として作り直す必要があります。naiveBayesClassifier とあわせて 3 つの新しい関数も追加されました。naiveBayesClassifierWithProb は予測クラスとその確率を返し、naiveBayesClassifierWithAllProbs はすべてのクラスとそれぞれの確率を返します。naiveBayesNgrams は Dictionary と同じ方法でテキストを n-gram にトークン化し、生のラベル付きテキストから学習データを構築できるようにします。さらに、いくつかの性能最適化も適用されています。9.7 MiB のコードポイント三連字言語モデルでは、使用メモリ量は約 49 分の 1 になり (1.84 GiB から 38 MiB) 、読み込みは約 11 倍高速化し、分類も約 11 倍高速化しています。#108773 (Nihal Z. Miaji)。
  • hasColumnInTable 関数は、任意のリモートサーバー上のカラムを確認するためのオプション引数 hostnameusernamepassword を受け付けなくなりました。現在は hasColumnInTable(database, table, column) 形式だけが残っています。削除されたリモートモードにはセキュリティ上の懸念がありました。任意のユーザーが任意のホストへの外向き接続を発生させることができ、認証情報がクエリログに漏えいするうえ、これを制限する privilege もありませんでした。#110881 (Alexey Milovidov)。

新機能

  • クエリパフォーマンスを調査するための EXPLAIN ANALYZE を追加しました。クエリを実行し、実際の実行メトリクスを使い慣れたクエリプラン形式で表示します。#106586 (Kirill Kopnev). #110668 (Kirill Kopnev).
  • projection 定義での WHERE 句のサポートを追加しました。WHERE を持つ projection は、predicate に一致する行だけをマテリアライズします。また、クエリの WHERE が projection の WHERE を含意する場合、オプティマイザはそれらを (コストベースで) 利用できます。#102347 (S Bala Vignesh).
  • skip_unavailable_shards が有効な場合に、リモート分片からのどの例外を黙って無視するかを制御する skip_unavailable_shards_mode 設定 (Distributed エンジン設定としても利用可能) を追加しました。#79091 (cjw).
  • 指定した出力フォーマットを使って各グループ内の行を整形し、その結果を文字列として返す集約関数 groupFormat を追加しました。#93201 (Yang Hu).
  • kafka_sasl_mechanism のサポート対象の値として AWS_MSK_IAM を追加し、ClickHouse が SASL/SCRAM 認証情報を管理することなく、IAM ロールを使用して Amazon MSK に認証できるようになりました。#96100 (kalavt).
  • aggregate function combinator -Tuple を追加しました。これは基になる集約関数を Tuple カラムの各要素に独立して適用し、要素名を保持したまま結果の Tuple を返します。t = (a, b) に対する sumTuple(t)(sum(a), sum(b)) を返します。複数の引数を取る集約関数では、引数ごとに 1 つの tuple を受け取り、位置ごとに対応付けます。corrTuple((a1, a2), (b1, b2))(corr(a1, b1), corr(a2, b2)) を返します。配列に対する -ForEach とは異なり、要素ごとに異なる型を持つことができ、各要素の結果の型と名前も保持されます。#98190 (RinChanNOW).
  • テキスト索引が postprocessor 引数をサポートするようになりました。これは、トークン化後に各トークンを変換する任意の式です (たとえば lower) 。#98939 (Jimmy Aguilar Mena). #108606 (Jimmy Aguilar Mena).
  • stem 関数に指定できるすべての言語を一覧表示する system.stemmers システムテーブルを追加しました。#100611 (Jimmy Aguilar Mena).
  • 負の LIMIT に対する WITH TIES のサポートを追加しました。#100930 (Nihal Z. Miaji).
  • toTimeZone の糖衣構文として、Standard SQL の後置演算子 AT TIME ZONE および AT LOCAL のサポートを追加しました。式 expr AT TIME ZONE zonetoTimeZone(expr, zone) と等価になり、expr AT LOCALtoTimeZone(expr, timeZone()) と等価です。#106092 (lizepeng).
  • URL テーブルエンジンと url テーブル関数は、URL スキームに応じて適切なバックエンドへ振り分けられるようになりました。file://File エンジン、s3:///gs:///gcs:///oss://S3az:///azure:///abfss:///abfs://AzureBlobStoragehdfs://HDFShttp(s):// は従来どおり URL エンジンが処理します。url_base 設定は、スキームの振り分け前に適用されます。振り分け対象となるのは、デフォルトの url_scheme_mappers で解決される S3 スキームのみです。その他の S3-compatible ベンダースキーム (cosobs、…) は対象外のため、s3 エンジン/関数を直接使用する必要があります。#106093 (Alexey Milovidov).
  • Remote および RemoteSecure テーブルエンジンを追加しました。これらは remote および remoteSecure テーブル関数の永続的な対応物です。CREATE TABLE ... ENGINE = Remote('addresses', db, table, ...) が、CREATE TABLE ... AS remote(...) に加えて使えるようになりました。#106189 (Alexey Milovidov).
  • KafkaRabbitMQNATSS3Queue/AzureQueue テーブル、およびリフレッシュ可能なマテリアライズドビューのバックグラウンド処理を、単一の統一インターフェイスで制御するため、エンジン非依存の SYSTEM STOPSYSTEM STARTSYSTEM PAUSESYSTEM CANCELSYSTEM REFRESH コマンドと、そのサーバー全体版である ... ALL BACKGROUND 形式を追加しました。リフレッシュ可能なマテリアライズドビューでは、これらは既存の SYSTEM ... VIEW コマンドのエイリアスになります。NATS でこれらの制御をサポートする一環として、JetStream テーブルは insert の成功後にのみメッセージを確認応答するようになりました (at-least-once。従来は配信時に自動で確認応答されていたため、insert が失敗するとメッセージが失われる可能性がありました) 。新しい nats_wait_for_flush_interval 設定 (デフォルトは false で、従来の低レイテンシ動作を維持) では、キューが空になり次第すぐに flush するのではなく、消費サイクルを flush interval 全体にわたって開いたままにできます。新しい nats_commit_on_select 設定により、JetStream テーブルに対する直接の SELECT で、読み取ったメッセージを消費 (確認応答) するようになります。#107476 (Samuel Krempaský).
  • mysqlpostgresqlsqlite のテーブル関数およびテーブルエンジンが、テーブル名の代わりにユーザーのクエリを受け取り、それを external database にそのまま渡せるようになりました。クエリは、サブクエリ (SELECT ...) または query('SELECT ...') として記述できます。生成されるテーブルの構造は query result から推論され、このようなテーブルは read-only です。#46758 をクローズしました。初期実装は Denis Vidiaev に基づいています (#79652) 。#107740 (Alexey Milovidov).
  • ClickHouse Web UI (Play) に、複数のクエリを同時に扱うためのタブを追加しました。タブ、そのタイトル、パラメータ、アクティブ状態、小さな結果スナップショットはリロード後も保持されます (大きな結果や画像の結果は復元されません) 。また、ブラウザ履歴や URL と連携し、マウスホイールで切り替えられます。#107826 (Alexey Milovidov).
  • QueryRunner テーブルエンジンを導入しました。QueryRunner テーブルに挿入されたレコードは、そのエンジンが実行するクエリを表します。このエンジンは、非同期クエリ実行、生成されたクエリのバッチ実行、リモートクラスターへのクエリの振り分け、ベンチマーク、ファジング、シャドウトラフィックを使ったテストに利用できます。#107888 (Miсhael Stetsyuk).
  • GeoJSONFeatureCollection ドキュメントを書き込むための GeoJSON 出力フォーマットを追加し、1行につき1つの feature を生成できるようにしました。単一の Geo 型カラム (PointLineStringMultiLineStringPolygonMultiPolygonRing、または Geometry) は各 feature の geometry になり、id という名前のカラムは feature の id になり、残りのカラムは feature の properties になります。このとき、properties という名前の単一の object 型カラム (JSONMap、または名前付き Tuple) がある場合は、そのまま properties object として書き込まれます。Ring は単一リングの Polygon として書き込まれます。新しい format_geojson_validate_geometry setting (デフォルトで有効) は、4点未満の Polygon や閉じていない Polygon ring など、有効な GeoJSON shape ではない geometry を読み書き時に拒否するかどうかを制御します。さらに、GeoJSON input format は id カラムを String ではなく Nullable(String) として推論するようになったため、"id": null メンバーが存在しない feature や明示的に指定された feature は NULL として読み取られ、空文字列 "" と区別して保持されます。初期実装は Mark Needham によるものです (#98124) 。#108065 (Nihal Z. Miaji).
  • QBit カラムと参照ベクトルの近似内積を計算する dotProductTransposed 関数 (別名 scalarProductTransposed) を追加しました。これは既存の L2DistanceTransposed および cosineDistanceTransposed 関数を補完するものです。#108100 (Alexey Milovidov). また、quantizeBFloat16ToInt8 の Lloyd-Max codes からなる QBit(Int8)`` に対して動作し、格納された codes を on the fly で逆量子化する量子化転置距離関数 cosineDistanceTransposedQuantizedL2DistanceTransposedQuantizeddotProductTransposedQuantized も追加しました。floating-point の参照ベクトルはフル精度のクエリとして扱われ、Float32 精度で比較されます(Float64クエリはFloat32 に縮小されます)。Array(Int8)` の参照はそれ自体が逆量子化され、対称的な quantized-vs-quantized distance になります。#109405 (Alexey Milovidov).
  • QBit データ型 (QBit(T, dimension, stride)) にオプションの stride parameter を追加しました。これにより、次元のグループを別々の stream に格納できるため、vector search で先頭の次元だけを効率的に読み取れます (たとえば Matryoshka embeddings) 。転置距離関数は、使用する次元数を減らして読み取るためのオプションの第4 used_dims argument を受け付けます。#108103 (Alexey Milovidov).
  • QBit データ型で Int8 element type をサポートし、量子化された 8-bit integer vector に対する保存と転置距離 vector search (L2DistanceTransposedcosineDistanceTransposed) を可能にしました。#108105 (Alexey Milovidov).
  • 新関数 randomHadamardTransform(vector[, seed[, output_dims]]):float vector に対する決定論的なランダム化 Hadamard transform。これは、量子化前の埋め込みの preprocessing に有用な、ノルムを保持する直交回転であり、 (truncated の場合は) Johnson–Lindenstrauss / subsampled-randomized-Hadamard ランダム射影としても利用できます。#108227 (Alexey Milovidov).
  • dictionary 定義内の dictionary_lazy_load setting により、dictionary ごとに遅延読み込みを設定できるようにしました。これにより、グローバルな dictionaries_lazy_load server setting を上書きし、一部の dictionary は遅延読み込みにし、他の dictionary は即時読み込みにできます。#108314 (Miсhael Stetsyuk).
  • 組み込みのドキュメント検索ページを追加しました。HTTP interface の /docs パスで利用でき、system.documentation テーブルに対するインスタント検索を提供し、リファレンスドキュメントをレンダリングします (syntax highlighting、数式、相互リンクに対応) 。 #108345 (Alexey Milovidov).
  • 関数 xxHash64Spark を追加しました。これは seed 42 を使用して String および NULL 入力に対する Spark 互換の xxHash64 値を計算し、Int64 を返します。 #108436 (Lalit Yadav).
  • ALTER USERALTER ROLEALTER SETTINGS PROFILE で、MODIFY SETTING name = value の別名として SET name = value を受け付けるようになりました。これにより、設定リスト全体を置き換える bare SETTINGS clause とは異なり、他の設定を保持したまま個々の設定をその場で変更できます。これによって、ユーザーの他の設定を誤って消してしまう可能性が低くなります。 #108722 (Groene AI).
  • 既存の制約の expression をその場で変更する ALTER TABLE ... MODIFY CONSTRAINT [IF EXISTS] name CHECK expr をサポートしました。 #108768 (Alexey Milovidov).
  • Web UI: カラムごとの color coding 切り替え (カラムヘッダー内の 🌈 アイコン) を追加し、bar、heatmap、categorical、なしを切り替えられるようにしました。選択した mode は URL とブラウザ履歴に保存されます。 #108873 (Alexey Milovidov).
  • KeeperZooKeeperCreateContainer opcode (19) を正しく処理するようになりました。これは新しいオプトインの create_container feature flag で制御されます (既定では create_ttl と同様に無効) 。ensemble 全体の upgrade 後にこれを有効化すると、外部の ZooKeeper clients (例: Java ZooKeeper 3.9+) は ConnectionLoss を受け取る代わりに Keeper に対してコンテナー node を作成できるようになります。コンテナー node は期待どおりの ephemeralOwner センチネル値を返し、leader 上の background GC thread が子を持たないコンテナーを自動削除します。opcode 19 を伴わずに CONTAINER create-mode flag を持つ通常の Create request は、引き続き拒否されます (ZBADARGUMENTS) 。既知の ZooKeeper client でその組み合わせを送出するものはありません。これはサーバー側のプロトコル互換性のみです。ClickHouse 独自の ZooKeeper client (zkutil) には変更はなく、自身でコンテナー node を作成する API もありません。 #108908 (unintended).
  • WGS84 地理座標と UTM および MGRS 座標系の間で変換する関数 geoToUTMUTMToGeogeoToMGRSMGRSToGeo を追加しました。 #108939 (Alexey Milovidov).
  • digits(n, offset[, length]) 関数を追加しました。これは、1始まりの offset から始まる n の各桁を length 桁分返し、length を省略した場合は数値の末尾まで返します。 #109012 (Umang Agrawal).
  • 数値の二乗を計算する算術関数 sqr を追加しました。 #109061 (Lalit Yadav).
  • hierarchical dictionary 内のキーの最上位の祖先 (root) を返す新しい関数 dictGetRoot を追加しました。これは dictGetHierarchy(dict_name, key)[-1] と等価な便利な関数です。 #109459 (Alexey Milovidov).
  • Dictionary の定義を削除せずに Dictionary が使用しているメモリを解放するための SYSTEM UNLOAD DICTIONARY および SYSTEM UNLOAD DICTIONARIES コマンドを追加しました。Dictionary は次回アクセス時に遅延読み込みされます。#109639 (Matheus Nerone).
  • 2 つのジオメトリが交差しているかどうかを返す関数 geometryIntersectCartesiangeometryIntersectSpherical を追加しました。polygonsIntersectCartesian/polygonsIntersectSpherical とは異なり、これらは共通の Geometry 型を含む任意の geometry data type (PointLineStringMultiLineStringRingPolygonMultiPolygon) を受け付け、2 つの引数は異なる型でもかまいません。#110062 (Alexey Milovidov).
  • クエリパラメータ ({name:Type} による substitution) を設定値として使用できるようになりました。これは、クエリの SETTINGS clause (SELECTINSERT など) 内と、standalone の SET クエリの両方で利用できます。たとえば、SELECT ... SETTINGS max_threads = {threads:UInt64}SET max_threads = {threads:UInt64} のように指定できます。#108760 (Alexey Milovidov).

実験的機能

  • url table function と URL table engine のワイルドカード展開: URL パス内のワイルドカードを、HTTP の索引ページ (HTML または平文のディレクトリ一覧) を列挙して一致する URL を抽出することで展開できるようになりました。索引ページのサイズと読み取るディレクトリ数には制限があります。allow_experimental_url_wildcard_from_index_pages 設定で有効になります。#95181 (Yue Ni).
  • テキスト索引でトークン位置 (support_phrase_search 索引引数) を保存できるようになり、hasPhrase function に対して direct read による完全なフレーズ一致が可能になりました。これを使用するには、MergeTree 設定 allow_experimental_text_index_phrase_search を有効にする必要があります。#103172 (Elmi Ahmadov). この引数は当初、positions という名前で導入されました。#109900 (Elmi Ahmadov).
  • OPTIMIZE TABLE ... MANIFEST により Iceberg table のマニフェストファイル compaction をサポートしました (allow_experimental_iceberg_compaction 設定でガードされています) 。#95174 をクローズしました。#98178 (Smita Kulkarni). また、マニフェストのパーティションタプルが partition spec と一致しない場合の Iceberg table 向け OPTIMIZE TABLE ... MANIFEST を修正しました。#111368 (Smita Kulkarni).
  • 実験的な ALP codec に Real Doubles (RD) バリアントと、オプションの ALP(AUTO|STD|RD) 引数を追加しました。単独の ALP は、常に STD を使うのではなく、既存の STD 方式と RD の間で自動選択するようになりました。#99654 (Nazarii Piontko).
  • deserialized された Paimon metadata files (manifest lists と manifests) 向けのインメモリー SLRU cache を追加しました。use_paimon_metadata_files_cache 設定で有効にすると、同じ Paimon table に対する繰り返しクエリで、object storage からの metadata の再ダウンロードと再解析をスキップします。#104657 (XiaoBinMu).
  • 実行可能な user-defined functions 向けの “drivers” を追加しました。<user_defined_executable_function_drivers_config> で宣言した driver は、CREATE FUNCTION name ARGUMENTS (...) RETURNS T ENGINE = DriverName(...) AS '...code...' で使用でき、function 作成時にユーザー code スニペットを compile するなどして処理し、実行可能 UDF を生成できます。生成された configuration は <dynamic_user_defined_executable_functions_path> に保存され、元の query は ATTACH FUNCTION として永続化されるため、server の再起動後も function は保持されます。概念実証版の c_function_body driver は、executable_pool mode でサンドボックス化された Docker コンテナー内で C function body を compile して実行します。初期実装は Daniil Timižev に基づいています (#77128) 。#105131 (Alexey Milovidov).
  • predicate がカラムを default 値と非 default 値に正確に分割する場合、SELECT count(*) FROM t WHERE col <op> default(col) を、データを一切スキャンせずに serialization.json 内のカラムごとの疎性統計から処理できるようになりました (新しい experimental setting optimize_trivial_count_with_sparsity_filter で有効化でき、既定では無効です) 。#105890 (Raúl Marín).
  • /api/v1/query および /api/v1/query_range への Prometheus Query API request が、read_rowsread_bytes metrics とともに system.query_log に記録されるようになりました。#106611 (James Cunningham).
  • 実験的な ReaderExecutor の読み取りパス (use_reader_executor、既定ではオフ) で、リモートのソース接続を開いたまま維持し、連続する読み取りで再利用できるようになりました。これにより、スキャン時のオブジェクトストレージへのリクエスト数を削減できます。#107735 (Sema Checherinda). また、暗号化ファイルの読み取りにも対応しました。グローバルな encryption header cache は encryption_header_cache_size server setting で設定し、SYSTEM DROP ENCRYPTION HEADERS CACHE でクリアできます。#109702 (Sema Checherinda).
  • make_distributed_plan が有効な場合、MergeTree family のテーブルに対する SELECT ... FINAL で、分散クエリプランによる読み取りをサポートしました。#108148 (Alexander Gololobov).
  • MergeTree クエリ向けに、実験的なプランベースの並列レプリカ実行を追加しました。#108504 (Igor Nikonov).
  • 実験的な Quantize ベクトル codec ファミリーと、量子化された companion streams に対するオプトイン方式の 2 段階近似ベクトル検索 rewrite を追加しました。#108565 (Shankar Iyer).
  • Float32/Float64 (およびそれらの配列) カラム向けの、誤差境界付きの非可逆圧縮 codec である実験的な SZ3 を復活させました。これはもともと Konstantin Vedernikov が実装したものです (#83088) 。これを使用するには allow_experimental_codecs が必要です。#108788 (Alexey Milovidov). また、以前は CORRUPTED_DATA で失敗していた SZ3('ALGO_LORENZO_REG', ...) で圧縮されたデータの読み取りを修正し、有限でない浮動小数点値 (NaN および無限大) を圧縮する際の未定義動作も回避しました。#110762 (Alexey Milovidov).
  • 実験的な ZXC codec を追加しました。これは圧縮は低速ですが、展開は非常に高速な非対称 LZ codec で、圧縮率は LZ4ZSTD の中間です。これを使用するには allow_experimental_codecs = 1 が必要で、system.compression_codecs では experimental として表示されます。#110620 (Alexey Milovidov). #111007 (Alexey Milovidov).
  • onelake_client_idonelake_client_secret の代わりに、onelake_bearer_token setting を通じて事前に取得した Bearer token を使用して OneLake に認証できるようになりました。これにより、長期間有効な client secret を共有せずに済みます。token は更新されないため、有効期限が切れたら database を再作成する必要があります。#109104 (Asya Shneerson).
  • AI functions は、named collection を最初の位置引数として受け取らなくなりました。credentials は ai_function_text_default_credentials / ai_function_embedding_default_credentials settings、または省略可能な末尾の Map(String, String) 引数内の credentials キーから取得されます。この引数には、チューニング用パラメータ (model, max_tokens, temperature, system_prompt, instructions, dimensions) も含められます。#109232 (George Larionov). また、aiEmbed 関数は named collection から model を読み取るのではなく、必須の位置引数として model を受け取るようになりました (aiEmbed(text, model[, params])) 。これにより、埋め込みの再現性が確保されます。#110619 (George Larionov).
  • skp_idx.packed に格納されたスキップ索引の data_uncompressed_bytes を修正しました (packed_skip_index_max_bytes 経由) 。報告される非圧縮サイズが実際には圧縮サイズになっており、その結果 distributed_index_analysis が有効化されないことがありました。#109272 (Raúl Marín).
  • MergeTree テーブル向けに、実験的な packed data part ストレージを追加しました。これにより、part を構成するファイルの大半が、ストリームごとに個別のファイルとして保存される代わりに、単一の data.packed アーカイブに格納されます (projections および txn_version.txt などの一部の service file は引き続き別途書き込まれます) 。これは min_bytes_for_full_part_storagemin_rows_for_full_part_storagemin_level_for_full_part_storage の各設定で制御され、既定では無効です。テーブルが packed part の書き込みを開始すると、古いサーバーバージョンではそれを読み取れなくなるため、このフォーマットを有効にするとサーバーをダウングレードできなくなります。#108118 (Raúl Marín).
  • 実験的な table function eval を追加しました。これは定数 expression をクエリ文字列として評価し、結果として得られた単一の SELECT クエリを実行します。この機能は既定で無効になっており、allow_experimental_eval_table_function 設定で有効にできます。作成者: Yue Ni#110132 (Alexey Milovidov).
  • 実験的な Prometheus remote-write v1 HTTP ハンドラーに zstd 圧縮のサポートを追加しました。#110907 (James Cunningham).
  • Delta Lake テーブルへの書き込み (allow_experimental_delta_lake_writes 設定) が Beta に昇格しました。#107034 (Kseniia Sumarokova).
  • 実験的な distributed query plan (make_distributed_plan) の実行状況を観測するため、ProfileEvents DistributedPlanRemoteTasksDistributedPlanLocalExecutionDistributedPlanHostsUsed を追加しました。#107985 (Shankar Iyer).
  • Keeper の実験的な RocksDB ベースのストレージ (experimental_use_rocksdb) を削除しました。より優れた新しいオンディスクストレージをまもなく導入予定です。#108000 (Michael Kolupaev).
  • 分散索引解析 (distributed_index_analysis 設定で制御される実験的機能) では、大量の data part 名リストをクエリテキストに埋め込むのではなく、スカラーとしてリモートサーバーに送信するようになりました。これにより、max_ast_elements / max_query_size 制限による障害の可能性を回避し、AST のパースに伴うオーバーヘッドを削減します。#110419 (Azat Khuzhin).
  • 実験的な timeSeries*ToGrid aggregation 関数を最適化しました。buckets は step と window の両方に揃えられるようになり、window が step より大幅に大きい場合の最終 aggregation が大幅に高速化されました。aggregation state のシリアライゼーションフォーマットは、互換性のない形で変更されています (これらの関数は実験的です) 。#106724 (Vitaly Baranov).
  • TimeSeries テーブルの external target table は、参照依存関係として登録されるようになりました。materialized view と同様に、これにより、それを参照する TimeSeries テーブルを削除する前に external target table を削除できなくなります (check_referential_table_dependencies が有効な場合) 。#108388 (Vitaly Baranov).
  • PromQL 関数 increase を追加しました。#111023 (Vitaly Baranov).

パフォーマンス改善

  • JOIN で、左側テーブルの主キー索引またはスキップ索引を使ってグラニュールをプルーニングできるようになりました。設定 enable_join_runtime_filters_index_analysis で制御します。#109085 (Shankar Iyer).
  • 自明にシリアライズ可能な型のベクターのシリアライゼーションおよびデシリアライゼーションでは、個々の要素を処理する代わりに、単一のバッファ I/O 呼び出しを使用するようになりました。#89842 (Jimmy Aguilar Mena).
  • 逆引き Dictionary ルックアップを最適化しました。WHERE dictGet(dict, attr, key_expr) = value のような定数等価述語は、IN (SELECT ... FROM dictionary(...)) サブクエリに書き換えられる代わりに、キーのフィルター (key_expr = constkey_expr IN [...]、または WHERE 0) へ直接定数畳み込みされるようになり、dictGetKeys の定数パスも並列に実行されるようになりました。#91164 (Nihal Z. Miaji).
  • 新しい設定 merge_tree_generic_exclusion_search_max_steps を追加しました。これにより、汎用排除検索アルゴリズムが各データ part の主キー索引の解析に費やす step 数を制限できます。この予算は、残っている中で最も大きいキー範囲から優先的に消費されるため、小さな予算でもデータの大部分をプルーニングできます。完全に解析されなかった範囲は丸ごと読み込まれるため、クエリ結果の正確性は保たれますが、より多くのグラニュールが読み込まれる可能性があります。この制限は厳密には適用されず、最大で merge_tree_coarse_index_granularity step に加え、その part がすでに分割されている各範囲につき 1 step (たとえば query condition cache によるもの) だけ超過する場合があります。デフォルト値 0 は step 数が無制限であることを意味します。#92779 (Michael Jarrett).
  • Distributed テーブル上の view に対する ORDER BYLIMIT を含むクエリで、merge-sorted-streams 最適化を使うようになりました。外側の ORDER BY/LIMIT が単純な view の内側のクエリにプッシュダウンされるため、各 shard がローカルでデータをソートし、マージコーディネーターは完全なソートを行う代わりに、事前にソート済みの stream をマージします。#94102 (matanper).
  • optimize_or_like_chain がデフォルトで有効になりました。#87779 をクローズしました。#94517 (Alexey Milovidov).
  • TTL のないローテーション済みの非 replicated MergeTree システムログテーブルを table_readonly としてマークし、不要なバックグラウンド処理を回避するようにしました。table_readonly MergeTree 設定は、通常の MergeTree テーブルに対するすべてのバックグラウンド処理、すなわち通常の merge、TTL (DELETE/MOVE/再圧縮) および再圧縮 merge、バックグラウンド mutation、バックグラウンド part 移動も抑止し、さらに、これまで拒否していた insert、mutation、OPTIMIZE に加えて、変更系のパーティションコマンド (ATTACH/MOVE/DROP/DROP DETACHED/FETCH/REPLACE PARTITION およびテーブルへの MOVE PARTITION ... TO TABLE) も拒否するようになりました。その結果、TTL を持つ table_readonly テーブルは、この設定が有効な間、有効期限切れデータを回収しなくなります。#95079 (Mathuranath Metivier).
  • サーバーに多数のユーザーが存在する場合の、system.users から単一のユーザーレコードを取得する処理の性能を改善しました。#96699 (Alistair Evans).
  • 並列レプリカによる順序付き読み取りでは、ローカル読み取りと同様にテーブルを max_threads 個の部分に分割するロジックを使うようになり、並列度が向上しました。#101434 (Nikita Taranov).
  • MergeTree テーブルで、主キーカラムがパーティションキーの入力カラムでもある場合、主キー索引解析時にパーティションの minmax 索引境界を使って、より多くの granule を刈り込めるようになりました。たとえば、ORDER BY (id, event_time) および PARTITION BY toYYYYMM(event_time) を持つ MergeTree テーブルでは、ClickHouse は主キー索引解析時に event_time のパーティション minmax 索引を使用し、より適切な granule 刈り込み判断を行います。これは新しい設定 use_partition_minmax_for_primary_key_pruning で制御されます (デフォルトで有効) 。 #103480 (UnamedRus).
  • Top-K dynamic filtering (ORDER BY ... LIMIT n) を使用するクエリで、query condition cache を有効化しました。cache エントリは Top-K のプランパラメータごとに分割されるため、同じクエリではキャッシュ済みの WHERE フィルター結果が再利用され、LIMIT、ソート対象カラム、またはソート方向が異なる場合は新しいエントリが作成されます。 #104478 (Alexey Milovidov).
  • use_constant_folding_in_index_analysis 設定を追加しました (デフォルトでは無効) 。有効にすると、MergeTree の主キー、MinMax、およびスキップ索引の解析で、パーティションレベルの定数を part ごとに個別にフィルター predicate に畳み込み、パーティション値に依存する分岐を含むフィルターの刈り込みを改善します。たとえば、PARTITION BY a(a = 1 AND b >= 1) OR (a = 2 AND b > 10) のようなケースです。 #104582 (Mikhail Artemenko).
  • GROUP BY キーが ORDER BY キーおよびテーブルの sorting key と一致する場合に早期終了できるよう、aggregation-in-order に LIMIT をプッシュダウンしました。これにより、読み取る行数を大幅に削減できます。 #104859 (Konstantin Bogdanov).
  • サーバー全体およびユーザーごとのカウンターに per-CPU atomics を使用することで、profile events の更新が最大 30 倍高速になりました。これは user_profile_events_per_cpu server setting で制御されます (64 コア環境ではユーザーあたり約 640 KiB を使用するため、ユーザー数が非常に多い場合は無効のままにしておくのが妥当なことがあります) 。 #105056 (Azat Khuzhin).
  • allow_aggregate_partitions_independently をデフォルトで有効にしました。GROUP BY キーがパーティションキーに適している場合、ClickHouse は各パーティションを独立して集約し、グローバルなマージ処理を省略できます。実行時の heuristic により、パーティション構成が不利な場合 (パーティション数が少なすぎる、多すぎる、またはパーティションサイズの偏りが大きい) は、この optimization を自動的にスキップします。 #105128 (Alexey Milovidov).
  • rescoring を伴うベクトル検索クエリ (vector_search_with_rescoring = 1) では、ベクトル索引が返した行に対してのみ正確な距離を計算するようになりました。同じ MergeTree granule 内の近傍行を brute-force で rescoring するのではなく、正確な行位置フィルターを適用します。 #105591 (Sergey Kuznetsov). #108846 (Sergey Kuznetsov).
  • FixedString キーに対する partial_merge join algorithm の性能を改善しました。値ごとに 1 回ずつ比較を呼び出す代わりに、連続する値をまとめて比較します。 #105737 (Artem Zuikov).
  • データレイクのカタログ (Iceberg REST、Glue、Unity、Hive、Paimon) に対する SHOW TABLESsystem.tables で、ネームスペースに関連する predicates をカタログにプッシュダウンするようになり、カタログ全体のスキャンを回避します。 #105022 をクローズしました。 #106029 (Smita Kulkarni).
  • overcommit やメモリ不足エラーを防ぐため、CPU ごとの未追跡メモリ量に上限を設けました (上限は server settings の max_per_cpu_untracked_memoryper_cpu_untracked_memory_thread_buffer で設定します) 。#106055 (Azat Khuzhin).
  • ソート済みの stream を走査して同じ key 値の連続区間を検出する演算子を高速化しました。対象は、順序付き DISTINCT、順序付き LIMIT BY、順序付きの負の LIMIT BYfull_sorting_merge および partial_merge joins です。#106502 (Nihal Z. Miaji).
  • Apache Arrow ライブラリを使わない、Arrow および ArrowStream フォーマット用の native reader / writer を実装し、余分なデータコピーや変換を回避しました。これは現在デフォルトになっており (settings input_format_arrow_use_native_reader および output_format_arrow_use_native_writer) 、読み取り・書き込みの両方で高速です。#106522 (Alexey Milovidov).
  • LTO で発生していた thread-cache の破損を修正したうえで、jemalloc の LTO を再び有効にし、性能を向上させました。#106898 (Azat Khuzhin).
  • JOIN の memory usage を削減し、性能を向上させました。ハッシュ結合の右辺では、すべての key 型で ALL joins のハッシュテーブルエントリが ANY joins と同じサイズになるよう、compact な 8 バイトのインデックスベースの行参照を使うようになりました。大規模な parallel_hash join クエリで benchmark を実施したところ、UInt64 および String の結合キーを持つ 1 億~3 億行テーブルに対する INNER および ANY joins で、キーが一意の場合と重複する場合の両方において、クエリの中央値は約 12% 高速化し、Peak memory は約 15% 減少し、遅くなったクエリはありませんでした。特に UInt64 結合キーの INNER joins で改善が大きく、中央値で約 21% 高速化し、memory は 38% 削減されました。#107189 (Harikrishnan Prabakaran).
  • 単一カラムの非 Nullable LowCardinality(String) 結合キーが、ハッシュ結合でネイティブにサポートされるようになりました。#107264 (Nikita Taranov).
  • dpsub join-order 列挙アルゴリズム (部分集合に対する動的計画法) を追加しました。これにより、dpsize より低い optimization overhead で最適な join plan を提供でき、非 inner joins もサポートします。#107351 (Fisnik Kastrati).
  • 各 cache ファイルのサイズをファイル名 (<offset>_<size>) にエンコードすることで、起動時の filesystem cache loading を高速化し、ファイルごとの stat を不要にしました。古いバージョンで書き込まれた cache ファイルの loading も引き続きサポートされます。#107415 (Alexey Milovidov).
  • 不要な文字列 materialization を回避することで、Array(LowCardinality(String)) に対する arrayElement と、key または values に LowCardinality(String) を持つ Map に対する map LIKE 関数の性能を向上させました。#107450 (Michael Jarrett).
  • クエリ全体ではなく aggregation state 自体のメモリを追跡することで、memory usage が小さい場合に single-level aggregation を二段階集約へ変換しないようにしました。#107490 (Hechem Selmi).
  • aggregating queries の解析を高速化しました。aggregation ハッシュテーブルサイズ統計の cache key は、完全な query AST を構築する代わりに、クエリプランから計算されるようになりました。#107643 (Dmitry Novik).
  • 各行を SipHash でハッシュ化する代わりに、行の値をキーとして多重集合を扱うことで、INTERSECT ALLEXCEPT ALL (INTERSECTEXCEPT のデフォルトモード) の性能を数倍向上しました。 #107649 (Raúl Marín).
  • cache ロックを保持せずに行ポリシーフィルタを再構築することで、CREATE ROW POLICYDROP ROW POLICY の同時実行時におけるクエリのスケーラビリティを向上しました。 #107917 (Azat Khuzhin).
  • 単純な正規表現に対する matchextractextractAllreplaceRegexpOnereplaceRegexpAll 関数を、LLVM によって native code にコンパイルすることで高速化しました。これは新しい設定 compile_regular_expressions (デフォルトで有効) で制御され、サポート対象外の subset の pattern は透過的に RE2 engine にフォールバックします。 #108004 (Alexey Milovidov).
  • 固定幅整数カラムのように match offsets が小さいカラムに対して、短い offset のオーバーラップコピーを NEON でベクトル化することで、AArch64 (ARM) での ZSTD 展開を高速化しました。たとえば、UInt64 カラムの展開は AWS Graviton 4 で最大約 2.3 倍高速になります。 #108049 (Alexey Milovidov).
  • gzip/zlib/deflate の圧縮および展開に libdeflate ライブラリを使用することで、.gz/HTTP/url/s3 データおよび Parquet GZIP codec を高速化しました (圧縮は比率も改善しつつ約 1.15 倍、展開は約 1.4~1.5 倍) 。 #108074 (Alexey Milovidov).
  • 主キー filter と組み合わせたテキスト検索クエリの性能を向上しました。 #108114 (Anton Popov).
  • クエリの初回実行時に収集した runtime statistics を使って後続の実行を最適化できるようになりました。hash join algorithm は、収集した統計に基づいて自動的に parallel_hash に切り替わる場合があります。 #108125 (Hechem Selmi). JOINランタイムフィルタのサイズは、runtime join statistics の hash table サイズを使って最適化されます。これは新しい設定 join_runtime_filter_size_from_hash_table_stats で制御されます。 #108313 (Hechem Selmi).
  • 固定サイズで低カーディナリティなカラムに対する LZ4 展開速度を改善しました。 #108175 (Nikita Taranov).
  • デフォルトの空白文字を対象とする trimLeft/trimRight/trimBoth 関数 (およびその別名 ltrim/rtrim/trim) を高速化しました。トリミングが不要な連続する行は 1 つの batch としてまとめてコピーされ、行ごとの空白走査は実際に先頭または末尾に空白がある行に対してのみ実行されます。 #108177 (Groene AI).
  • pattern が単一文字で、replacement も単一文字の場合の replaceAllreplaceRegexpAll の性能を向上しました (たとえば replaceRegexpAll(s, ' ', '_')) 。この種の置換では文字列の layout が変わらないため、カラムは 1 回だけコピーされ、一致したバイトは一致ごとに検索ループを回す代わりにその場で書き換えられます。 #108178 (Groene AI).
  • 定数の Polygon に対する pointInPolygon 関数の性能を改善しました。前処理済み Polygon の cache は生の定数 argument をキーにするようになり、定数 Polygon は入力ブロックごとに毎回再パースされるのではなく、1 度だけ (キャッシュミス時に) パースされるようになりました。#108184 (Groene AI).
  • デフォルトである best-effort モード (date_time_input_format = 'best_effort', cast_string_to_date_time_mode = 'best_effort') で、標準的な YYYY-MM-DD hh:mm:ss 形式の日時表現のパースを高速化しました。これにより、これらのデフォルト値を basic から best_effort に切り替えた際に生じたパース性能の低下を解消します。#108187 (Groene AI).
  • 機能が無効な場合 (predicate_statistics_sample_rate = 0、デフォルト) 、MergeTree の読み取りパスで system.predicate_statistics_log の selectivity counters を維持しないようにしました。これにより、すべての読み取りで granule ごとの atomic update と O(rows) の filter popcount が不要になり、特に AArch64 で顕著だった性能低下を解消します。#108190 (Groene AI).
  • precise_float_parsing = 1 でのテキストからの floating-point numbers のパースを高速化し、ほぼすべての入力でデフォルトパーサーと同等以上の速度を実現しました。あわせて、同梱の fast_float ライブラリを v8.2.10 に更新しました。#108205 (Raúl Marín).
  • base64 の encoding / decoding 関数で simdutf ライブラリを使用するようにし、性能を向上させました。#108333 (Konstantin Bogdanov).
  • 高コストな high-cardinality の key に対する DISTINCT を最適化しました。#108366 (Nihal Z. Miaji).
  • Linux 以外の build (macOS および FreeBSD) では、jemalloc が dirty pages を積極的にパージしなくなりました (free ごとに madvise syscall を実行しません) 。代わりに、Linux と同様に、有限の dirty_decay_ms を持つバックグラウンドのパージスレッドを使用するようになりました。これにより、recursive CTE のように割り当てが頻繁に発生する workload が大幅に高速化されます (macOS の recursive CTE benchmark で約 2 倍) 。一方、RSS への影響はごくわずかです。#108430 (Alexey Milovidov).
  • 同じ WITH エイリアスを参照する expression や、同じ subexpression を何度も繰り返す expression (たとえば深くネストした if/multiIf の連鎖) について、actions DAG の構築時に共有 subexpression を再構築しないようにすることで、アナライザによるクエリプランニングを高速化しました。#108523 (Dmitry Novik).
  • ON clause に非等価 predicate が含まれている場合でも、Runtime Filters が等価 key に対して構築されるようになりました。これにより、等価条件と非等価条件が混在する join で、ハッシュ結合 に入る行数を減らせます。LEFT ANTI JOIN には影響ありません。#108579 (Antonio Álvarez Caballero).
  • codebase 全体で -fno-math-errno を有効化し、compiler が数学関数をより適切に最適化できるようにしました。#108628 (Nikita Taranov).
  • aggregation および join hash tables に対する software-prefetch の threshold を 4 * L2 cache size から L2 cache size に引き下げ、hash table が L2 に収まらなくなった時点で prefetch が有効になるようにしました。これにより、報告される L2 が大きいプラットフォーム (例: 2 MiB の L2 を持つ AArch64) で、中規模の hash tables (約 1~8 MiB) に対する GROUP BY および JOIN で発生していた性能低下を解消します。#108655 (Groene AI).
  • window function のパフォーマンスを向上しました。SELECT * を含む列数の多いテーブルに対するウィンドウクエリでは、メモリ使用量が大幅に減り、実行速度も向上しました。quantile*uniq*groupArray を含むウィンドウ aggregate は、OVER () および OVER (ORDER BY ... RANGE ...) で高速化されています。cume_dist 関数も高速化され、PARTITION BY または ORDER BY を使用するウィンドウは、同じ値が多く含まれるカラムでもパフォーマンスが向上しました。#108688 (Nihal Z. Miaji).
  • 比較の AND-chain が多数あるクエリや、非常に大きな AND-chain を含むクエリの query analysis を高速化しました。optimize_and_compare_chain optimization は、クエリ tree の大部分を hash 化する代わりに、作業予算 (新しい設定 optimize_and_compare_chain_max_hash_work) によって制限されるようになりました。また、lambda の解決では、再帰ガードのために lambda 本体の hash を再計算しなくなりました。#108757 (Alexey Milovidov).
  • 複数スレッドで JSON/Dynamic カラムを読み取る際のパフォーマンス低下を修正しました。input_format_binary_max_type_complexity 設定を値ごとに参照していたため、共有クエリコンテキストで参照カウントの contention が発生し、並列読み取りが直列化されていました。現在は設定値がスレッドごとに cache されます。#108797 (Seva Potapov).
  • s3 などの table function を介して object storage から多数の小さなファイルを読み取る際のパフォーマンス低下 (#71781 で導入) を修正しました。プリフェッチが停止して同期読み取りにフォールバックしていたため、大量の極小ファイルを単一スレッドまたは低い Concurrency で読み取る場合に大幅な速度低下が発生していました。#108872 (Nikita Fomichev). さらに、object storage の読み取りがファイルシステムキャッシュ (filesystem_cache_name) を経由する場合でも、最初の小さな object に対するプリフェッチが行われるようになりました。これにより、cache を有効にした状態で多数の小さなファイル (例: S3Queue インジェスト) を読み取る処理は、同期的なレイテンシ律速ではなくなりました。#109478 (Nikita Fomichev).
  • 深くネストした配列や tuple リテラルを、二次時間ではなく線形時間で parse するようにしました。#108892 (Alexey Milovidov).
  • parallel_hash join algorithm におけるロック contention に起因するオーバーヘッドを削減しました。#108938 (Hechem Selmi).
  • 圧縮する代わりに圧縮サイズを解析的に計算することで、T64 エンコードされたカラムに対する estimateCompressionRatio を高速化しました。#109054 (Raufs Dunamalijevs).
  • distributed query plan のシャッフル段階にあった single-threaded の bottleneck を解消しました。各上流 stream が、データ stream 全体を単一の transform に集約するのではなく、それぞれ独立して行を宛先 bucket に振り分けるようになりました。#109206 (Alexander Gololobov).
  • Keeper サーバー のアイドル時の CPU usage を削減しました。#109255 (Michael Kolupaev).
  • shared data に多数の疎な path を含む JSON カラムのシリアライゼーションとマージを高速化しました。shared data を path ごとのカラムに flattening する際、蓄積されたすべての path カラムを各行ごとに走査する処理を除去し、欠損部分はセル単位でデフォルト値を挿入するのではなく、一括で backfilled するようになりました。#109341 (Groene AI).
  • 多数のカラムを含むクエリでの expression 評価に伴う CPU overhead を削減しました (例: stride が小さい QBit カラムに対する vector search では、各ベクトルが数百個の bit-plane sub-columns に展開され、それらすべてが単一の *DistanceTransposed 呼び出しに渡される場合) 。 #109380 (Alexey Milovidov).
  • H3 Geo 関数 (h3ToGeoBoundaryh3ToGeoh3CellAreaM2/h3CellAreaRads2geoToH3) の性能を改善しました。正弦と余弦の組をまとめて計算し、座標変換での冗長な三角関数呼び出しを排除しています。結果は変わりません (bit-for-bit で同一です) 。 #109399 (Alexey Milovidov).
  • 比較処理と符号拡張コードを分岐なしにすることで、広い整数型 (Int128UInt128Int256UInt256 および Decimal128 などの派生型) の比較 (<><=>=) を最大 7 倍高速化し、符号付き整数から Int256 への変換も改善しました (符号が混在するデータで最大 7 倍) 。 #109474 (Manuel).
  • uniqCombined (キーなし aggregation の場合を含む) および uniqHLL12 を最適化しました。 #109794 (Anton Popov). #109831 (Anton Popov).
  • arraySortarrayReverseSort は、lambda なしで呼び出した場合、数値 Array (Decimal および DateTime64 を含む) に対して数倍高速になりました。 #109832 (Manuel).
  • 算術演算の高速パスを使うことで、固定オフセットの time zone (UTC など) における DateTime および DateTime64 値に対する addDaysaddWeekssubtractDayssubtractWeeks を高速化しました。 #109836 (Manuel).
  • テキスト索引の解析を最適化しました。 #109886 (Anton Popov).
  • parallel_hash join algorithm における非結合行の processing を、さらに 2 つのケースで並列化しました。残余 filter がある場合と、小さい 結合キー (単一レベルの hash map) の場合です。 #110008 (Hechem Selmi).
  • 組み込み web UI のレスポンス (Play UI、dashboards、静的ファイルハンドラー) は、client の Accept-Encoding header に応じて、zstd、gzip、deflate、brotli、lz4、xz、snappy、または bzip2 で圧縮されるようになりました。たとえば /play ページは、非圧縮時の約 350 KB から、zstd では 120 KB 未満にまで縮小され、低速な connections での load time を短縮します。すでに圧縮済みのレスポンスはそのまま維持され、CDN と cache の適切な パーティション化 のために Vary: Accept-Encoding が出力されます。 #110108 (Sayantanu Dey).
  • 安全な場合には、フィルタをウィンドウ関数または LIMIT BY の下まで押し下げられるようになりました。これにより、それらの外側に書かれた述語条件 (サブクエリを囲む外側の WHERE、または QUALIFY 内の AND 条件) のうち、ウィンドウの PARTITION BY カラムのみ、または LIMIT BY のキーカラムのみを参照するもの (n >= 1 かつ OFFSET なしの LIMIT n BY の場合) がストレージ層まで到達し、主キーやパーティションの pruning、スキップ索引、プロジェクションを利用できるようになります。たとえば、SELECT ... row_number() OVER (PARTITION BY key ORDER BY ts) AS rn ... QUALIFY rn = 1 AND key = 'x' は、テーブル全体を読み込んでウィンドウ処理する必要がなくなりました。#110114 (Groene AI). #110116 (Groene AI).
  • join_use_nulls = 1 の場合、外部 join の両側のカラムを参照する null-rejecting な WHERE (例: WHERE l.k = 42 AND r.k = 42) は、join_use_nulls = 0 の場合と同様に、join を INNER (または LEFT/RIGHT) に変換し、主キーの pruning も行うようになりました。従来はこのケースでは変換がスキップされ、両方のテーブルが全件読み込まれていました。#110121 (Groene AI).
  • 非 const の Nullable 引数を 1 つだけ持つ関数は、新しい null map を割り当ててマージする代わりに、その引数の null map を結果と共有するようになりました。#110151 (Manuel).
  • 主キー索引解析で、hyperrectangle のチェックごとに発生していたヒープ割り当てを回避し、クエリの形状に応じて mark filtering を 5~26% 高速化しました。#110153 (Manuel).
  • 要素ごとの比較ループの代わりにベクトル化された reduction を使うことで、数値配列に対する関数 arrayMinarrayMax の性能を約 1.3~1.5 倍向上させました。#110163 (Manuel).
  • Delta codec の展開をベクトル化しました。8/16/32-bit の data types ではデコードが 1.5~5 倍高速化され、Delta 圧縮されたカラムのスキャンも最大 20% 高速になりました。#110189 (Manuel).
  • 定数 needle を使う Enum カラム上の文字列検索関数 (likepositionmatchcountSubstringshasToken など) を高速化しました。各行を検索する代わりに、重複しない enum 名だけを検索し、その結果を各行に対応付けます。#110325 (Alexey Milovidov).
  • ベクトル化されたバッチ処理により、aggregate functions groupBitOr/groupBitAnd/groupBitXor と variance family (varPop, varSamp, stddevPop, stddevSamp, skewPop, skewSamp, kurtPop, kurtSamp, covarPop, covarSamp, corr) を高速化しました。予測しにくい条件で -If combinator を使う場合は最大 4 倍、これを使わない variance family でも最大 3 倍高速です。#110461 (Manuel).
  • テキスト索引の解析 (どのグラニュールを読むかを選ぶ段階) を高速化しました。すべてのグラニュールを順に調べる代わりに exclusion search を使用し、各 range check ごとの一時 bitmap 作成も回避します。#110530 (Anton Popov).
  • 自動 PREWHERE 最適化で Map サブカラムのオンディスクサイズも考慮するようにしました。これにより、#99200 で導入された PREWHERE の性能回帰を修正しました。#110462 の一部です。#110623 (Pavel Kruglov).
  • テキストからの UUID 値のパースを高速化しました (例: JSONExtract から LowCardinality(UUID)toUUIDCAST AS UUID) 。16 進数の検証と変換を 2 回ではなく 1 回の走査で行うようにしました。#110625 (Groene AI).
  • より高速なソートおよびハッシュテーブル実装を使用することで、timeSeries*ToGrid 集約関数の性能を大幅に向上させました。#110875 (Nikita Mikhaylov).
  • SELECT * FROM t WHERE id のようなクエリで、id カラムに対する索引スキップが使われるようになりました。#89222 をクローズします。#89603 (Aditya Chopra).
  • JOIN 並べ替え最適化の際に、式ステップを JOIN ステップにマージできるようにする query_plan_merge_expression_into_join 設定 (既定で有効) を追加しました。これにより、JOIN をラップするサブクエリ (たとえば、計算済みカラムを持つサブクエリ内に JOIN がある場合) をまたいだ JOIN 並べ替えが可能になり、複雑な JOIN ツリーをより適切に最適化できます。#98533 (Vladimir Cherkasov).
  • 同じ式に対する複数の比較条件を含む AND チェーンを最適化しました。矛盾を検出し (例: a < 3 AND a > 5false) 、冗長な条件を削除します (例: a = 3 AND a < 5a = 3) 。#99736 (Xiaozhe Yu).
  • UNION クエリの複数の分岐から参照されるマテリアライズド CTE は、1 回だけマテリアライズされ、すべての分岐で共有されるようになりました。従来は各分岐ごとに CTE のコピーが作成され、それぞれがインライン展開されて個別に評価されていました。#102107 (Dmitry Novik).
  • BackgroundSchedulePool のスレッドは、サーバー起動時にまとめて作成されるのではなく、必要に応じて遅延作成されるようになりました。新しいサーバー設定 background_schedule_pool_initial_size (既定値 16) で事前生成するワーカー数を制御し、必要に応じてプールは background_schedule_pool_size まで拡張されます。これにより、低負荷のサーバーでアイドルスレッド数を削減できます。#85265 をクローズします。#105066 (Alexey Milovidov).
  • JSON 型の高度な共有データシリアライゼーションにおいて、不要なマークファイルの読み込みをスキップするようにしました。#107051 (Pavel Kruglov).
  • 関数 pointInPolygon 用に前処理された定数 Polygon の cache は、クエリ間およびスレッド間で共有されるようになり、新しいサーバー設定 point_in_polygon_cache_size (デフォルト 256 MiB、0 で cache を無効化、実行時に変更可能) によって上限が設定されました。以前は、この cache は前処理済みの各 Polygon について最大 max_threads 個のコピーを保持し、異なる Polygon が増えるにつれて際限なく肥大化し、サーバーを再起動するまで解放されませんでした。この cache は SYSTEM DROP POINT IN POLYGON CACHE でクリアでき、現在の使用量は system.metricsPointInPolygonCacheBytesPointInPolygonCacheCellsPointInPolygonCacheSizeLimit として報告されます。#106393 をクローズしました。#107247 (Nihal Z. Miaji).
  • Keeper は、スナップショットをディスクにシリアライズして書き込む間や、スナップショットをディスク間で移動する間、内部の snapshots lock を保持しなくなりました。これにより、他ノードへのスナップショット転送や Raft 処理が、ローカルでのスナップショット作成によって停止しなくなります。#107595 (Antonio Andelic).
  • ファイルシステムキャッシュの background eviction (keep_free_space_ratio 設定で制御) を並列化しました。並列度を制御するための新しい設定 keep_free_space_eviction_threads を追加し、keep_free_space_remove_batch のデフォルト値を 100 から 250 に引き上げました。#108147 (Kseniia Sumarokova).
  • Azure Blob Storage の read-then-write copy (ネイティブ copy が利用できない場合にバックアップで使用) において、同時にステージングされるパーツ数を max_inflight_parts_for_one_file に制限し、多数の大きなファイルを並列にコピーする際の過剰なメモリ使用量を防止します。#108232 (Smita Kulkarni).
  • 3 種類すべてのテキスト索引 cache をグローバルに有効化しました。以前はクエリ内でのみ有効でした。また、posting lists cache size は現在ゼロになっており、実質的に再び無効化されています。これは、posting lists はサイズが大きく、cache するコストが高すぎるためです。#108274 (Robert Schulze).
  • marks の loading 中に、ストリーミング方式の in-memory marks 圧縮を追加し、Peak memory usage を削減します。#108285 をクローズしました。#108325 (Pavel Kruglov).
  • 新しいファイルシステムキャッシュ設定 reserve_granularity (デフォルト 4 MiB) は、より粗い granule 単位であらかじめ領域を予約することで、ファイルシステムキャッシュの領域予約ホットパスにおける lock contention を軽減します。#108369 (Kseniia Sumarokova).
  • ファイルシステムキャッシュのメタデータ (file segment ごとおよび key ごと) で使用するメモリ量を削減しました。#108477 (Kseniia Sumarokova).
  • database および table カラムに対する WHERE filters を含む system.iceberg_history へのクエリは、一致する database のみを参照するようになりました。これにより、サーバー上に無関係なリモート database が多数ある場合に時間を節約できます。#108492 (Den Kalantaevskii).
  • ファイルシステムキャッシュ内の不要な locking を削除し、lock contention を軽減しました。#108932 (Kseniia Sumarokova).
  • BACKUP および RESTORE のメタデータ処理におけるメモリ使用量を削減しました。バックアップを開く際 (RESTORE 用、またはインクリメンタル BACKUP のベースとして) 、.backup メタデータをメモリ上の XML ドキュメントツリー全体に読み込むのではなく、ストリームとして解析するようになりました。これにより、大規模なバックアップ (特にインクリメンタルバックアップ) で、複数 GB に及ぶ DOM ツリーの割り当てを回避できます。#109107 (Julia Kartseva)。また、BACKUP の完了処理では、すべてのファイルのファイル情報を一時ベクターにコピーしなくなったため、数百万ファイル規模のバックアップで一時的に数 GB を消費することがなくなりました。#109861 (Julia Kartseva)。さらに、バックアップエントリの書き込み時にも、現在のホストのファイル情報リストをコピーしなくなりました。#111162 (Julia Kartseva).
  • アグリゲーターのメモリ消費を削減しました。#109224 (Konstantin Vedernikov).
  • File テーブルエンジン経由で読み取るローカル Parquet ファイルで、クエリ条件キャッシュをサポートしました (従来は object storage とデータレイクのみ対応) 。#109247 (Alexey Milovidov).
  • テキスト索引ヘッダーキャッシュのメモリ使用量を 2~2.5 倍削減しました。より多くのデータパーツのヘッダーが cache (設定 text_index_header_cache_size) に収まるようになり、テキスト検索クエリでのディスク読み取りが減少します。#109332 (Anton Popov).
  • 転置ベクトル距離関数 L2DistanceTransposedcosineDistanceTransposeddotProductTransposed が、Nullable(QBit) カラムに対して部分的な bit plane 読み取り optimization を適用するようになり、カラム全体ではなく、必要な bit planes のみを読み取るようになりました。#109358 (Alexey Milovidov).
  • IS NOT DISTINCT FROM および IS TRUE が、= と同様に primary-key と MinMax索引を使ってグラニュールを絞り込めるようになりました。従来は k IS NOT DISTINCT FROM 42(k = 42) IS TRUE はすべてのグラニュールを scan していました。#110006 (Groene AI).
  • プールされた接続は、使用前に毎回 ping されなくなりました。これにより、再利用される接続ごとに追加されていた Ping-Pong のラウンドトリップがなくなり、分散クエリおよび clickhouse-benchmark のレイテンシーが低減します。古くなったプールされた接続は、タイムアウト 0 の poll (ラウンドトリップを追加しない non-blocking チェック) で検出し、再接続によって復旧します。#110068 (Alexey Milovidov).
  • TLS 上のプールされた HTTP keep-alive 接続 (HTTPS、S3) で発生していた不要な再接続を修正しました。古い接続のチェックではソケットに対して poll を使用していましたが、未読の TLS post-handshake レコード (session ticket または KeyUpdate) を保持している有効な TLS 接続を、誤って closed と判定していました。現在は、通常のソケットでは non-blocking の MSG_PEEK、TLS ソケットでは SSL_peek/SSL_has_pending を使用するようになり、正常な TLS shutdown と、一部しか到着していない TLS レコードも正しく検出できます。#110402 (Alexey Milovidov).
  • TopK dynamic filtering (ORDER BY ... LIMIT k) で高速化されるクエリが、クエリ条件キャッシュをより有効に活用するようになりました。クエリに 遅延マテリアライゼーション が適用される場合でも cache が populate されるようになり、同じ WHERE predicate を持つ通常のクエリが以前に書き込んだ エントリ を再利用できるようになりました。#110507 (Shankar Iyer).
  • ワイルドカード (%, _) を含まない LIKE/NOT LIKE パターンでは、より広い接頭辞範囲ではなく、正確な主キー範囲を使うようになりました。これにより、同等の =/!= 述語と同じ数のグラニュールを読み取ります。 #107077 (Groene AI).
  • ファイルシステムキャッシュ経由でデータを読み取る際の、不要なファイルセグメントのロック競合 (26.1 で導入された性能低下) を修正しました。 #109577 (Kseniia Sumarokova).
  • Tuple サブカラムに定義されたスキップ索引が、tupleElement(t, 'name')tupleElement(t, N)、または t.N でフィールドにアクセスし、同じクエリ内で完全な tuple も読み取る場合 (例: SELECT *) に使われない問題を修正しました。これらすべての形式で、名前付きサブカラムアクセス t.name と同様にグラニュールを絞り込めるようになりました。 #110056 (Groene AI).
  • prefer_localhost_replica がローカルレプリカを選択した場合に、Distributed tables に対する ORDER BY ... LIMIT クエリが遅くなる問題を修正しました。ローカルシャードの実行プランから preliminary limit が削除され、これにより遅延マテリアライゼーションと動的 top-K フィルタリングが妨げられなくなりました。 #110136 (Michael Jarrett).
  • テキスト索引が、単なるカラムではなく式に対して定義されている場合に、ILIKE 演算子で使われない問題を修正しました (たとえば lower(...) プリプロセッサを伴う assumeNotNull(col)) 。このようなクエリは、索引を使わずにすべてのグラニュールを読み取っていました。これにより #110350 をクローズします。 #110595 (Elmi Ahmadov).
  • ファイルシステムキャッシュでのロック競合を低減しました。cache から読み取るクエリは、エントリの LRU priority を更新する際に、優先度キューのロックでブロックされなくなりました。 #109065 (Antonio Andelic).
  • フィルタ専用の postprocessor 式 (たとえば if(..., '', token)) を使うテキスト索引クエリでは、空の token を行ごとにマテリアライズするのではなく、先に破棄するようになり、性能が向上しました。 #109049 (Elmi Ahmadov).
  • system log queue でのロック競合を低減し、高負荷なクラスターでのクエリの tail latency を改善しました。 #110539 (Sean Haynes).
  • 非定数の needle を持つ substring search functions (position, countSubstrings, multiSearch*, replaceAll, replaceOne、およびそれらの大文字小文字を区別しない版と UTF-8 版) について、単純な実装の代わりに行ごとのパスで SIMD 対応の string searcher を使うことで、最大 1.5 倍の性能向上を実現しました。 #110580 (Raúl Marín).
  • 遅延マテリアライゼーションが、ORDER BY がなくても、FINAL、フィルタ、小さな LIMIT を伴う ReplacingMergeTree クエリに適用されるようになりました。フィルタと FINAL merge に不要なカラムは、limit 適用後に残った行に対してのみ取得されるため、選択性の高いフィルタで wide カラムを選択するこの種のクエリが大幅に高速化されます。これは query_plan_optimize_lazy_materializationquery_plan_max_limit_for_lazy_materialization で制御されます。 #110722 (Nikolai Kochetov).
  • deduplication が有効で、1 回の flush が複数のパーティションに分割される場合の非同期 INSERT の性能を改善しました。ClickHouse は、各パーティションごとに deduplication hash を再計算するのではなく、一度計算したものをパーティション間で再利用するようになりました。 #111150 (Valery Petrov).

改善

  • 設定 input_format_csv_missing_nullable_as_empty_string を追加しました (デフォルトでは無効) 。有効にすると、CSV 入力の Nullable(String) カラムで欠損値があった場合、input_format_csv_empty_as_default の設定にかかわらず、NULL ではなく空の String として読み込まれます。#58225 (kevinyhzou). #107577 (Alexey Milovidov).
  • 関数 toDateOrNulltoDateTimeOrNulltoDateTime64OrNull が、すべてのネイティブ整数型の整数引数を受け付けるようになりました (toDatetoDateTimetoDateTime64 と同様に解釈され、必要に応じてタイムゾーン引数も指定できます) 。結果型の範囲外の値に対しては NULL を返します。たとえば、toDateTimeOrNull(1583851242, 'Asia/Shanghai')2020-03-10 22:40:42 を返し、toDateTimeOrNull(4294967296)NULL を返します。#79791 (Jitendra).
  • system.grants テーブルに is_wildcard カラムを追加しました。このカラムは、権限付与でワイルドカードのプレフィックス一致を使用しているかどうか (例: GRANT SELECT ON db*.*) を示します。これまでは、同じ名前に対するワイルドカード指定の権限付与と完全一致の権限付与を system.grants 上で区別できませんでした。#92835 をクローズします。#98577 (DQ).
  • HTTP インターフェイスで Snappy 圧縮 (Accept-Encoding: snappy) を利用できるようにし、汎用 file/url の snappy I/O で Hadoop Snappy ブロックフォーマットと Snappy framing フォーマットを選択するための snappy_mode 設定を追加しました。#100752 (Alexey Milovidov).
  • analyzer_compatibility_allow_non_aggregate_in_having 設定のもとで、旧アナライザとの互換性をサポートしました。有効にすると、非集約の連言条件が HAVING から WHERE に移されます。#104232 (Dmitry Novik).
  • 新しいサーバー設定 memory_worker_rss_speculative_reserve_ratio (デフォルト値は 1.0) を追加しました。これにより、サンプル間で RSS の増加がトラッカーの記録を上回った場合、グローバル memory tracker は観測された RSS に加えて推測的にメモリを予約します。これにより、割り当てはより早い段階で MEMORY_LIMIT_EXCEEDED となり、kernel OOM-killer が先に発動する可能性を低くできます。推測を無効にするには、ratio を 0 に設定してください。#104976 (Alexey Milovidov).
  • ファイルシステムキャッシュのエビクション状況に関するオプトインの Prometheus メトリクス (filesystem_cache_evictions_totalfilesystem_cache_evicted_bytes_totalfilesystem_cache_evicted_segment_hitsfilesystem_cache_evicted_segment_size_bytes、および user_id ラベル付きのユーザー単位バリアント) を追加しました。これらは system.dimensional_metricssystem.histogram_metrics、および Prometheus エンドポイントを通じて、各キャッシュごとに公開されます。制御にはキャッシュディスク設定 expose_prometheus_eviction_metricsexpose_prometheus_eviction_metrics_per_user (どちらもデフォルトではオフ) を使用し、SYSTEM RELOAD CONFIG によって実行時に切り替えられます。#105020 (Sacheendra Talluri).
  • EXPLAIN [PLAN] actions=1, compact=1, pretty=1 をデフォルトにしました。#105036 (Kirill Kopnev).
  • delta-kernel-rs (DeltaLake インテグレーションを支えるライブラリ) を v0.23.0 に更新しました。#105861 (Smita Kulkarni).
  • clickhouse-disksdu および wc コマンドを追加しました。これらはそれぞれ、指定したファイルまたはディレクトリの合計サイズをバイト単位で表示し、ファイル内のバイト数、行数、単語数を表示します。#106268 (Asya Shneerson).
  • 新しい非同期メトリクス UntrackedMemory (system.asynchronous_metrics で確認可能) を追加しました。これは、スレッドによってすでに割り当てられているものの、グローバルなメモリ追跡カウンターにはまだ計上されていないメモリ量を報告します。各スレッドは小さな割り当てをローカルに蓄積し、まとめて報告します。これにより、MemoryTracking とプロセスの実際のメモリ使用量との食い違いを説明しやすくなります。MEMORY_LIMIT_EXCEEDED エラーメッセージにも未追跡メモリ量が含まれるようになり、クエリまたはサーバーがメモリ制限に達した理由を把握しやすくなりました。#106386 (Miсhael Stetsyuk).
  • ClickStack (オブザーバビリティ UI) をバージョン 2.28.0 にアップグレードしました。#106406 (Aaron Knudtson).
  • dotProductBFloat16 をサポートし、SIMD パスをバッチ処理化することでパフォーマンスも改善しました。#106569 (Nikita Taranov).
  • max_named_collection_num_to_throwmax_table_num_to_throwmax_replicated_table_num_to_throwmax_view_num_to_throwmax_dictionary_num_to_throwmax_database_num_to_throw の各設定を、サーバーの再起動なしで変更できるようにしました。#106821 (Maxim Orlovsky).
  • s3_storage_class_name 設定で、STANDARD および INTELLIGENT_TIERING に加えて、REDUCED_REDUNDANCYSTANDARD_IAONEZONE_IAGLACIER_IREXPRESS_ONEZONE もサポートしました。#107251 (Aditya Kumar).
  • MaterializedPostgreSQL データベースエンジンに、作成時設定 materialized_postgresql_use_extended_date_and_time_types を追加しました。デフォルトでは (有効時) 、PostgreSQL の date/timestamp カラムは Date32/DateTime64 として推論されます。CREATE DATABASE 時にこれを 0 に設定すると、より狭い Date/DateTime 型として推論されます。この設定は MaterializedPostgreSQL テーブルエンジンには適用されません。#107428 (Alexey Milovidov).
  • SOME / ALL 配列数量子 (expr OP SOME(array) / expr OP ALL(array)) で、キーワード比較述語 IS DISTINCT FROM および IS NOT DISTINCT FROM、さらに文字列検索述語 LIKEILIKENOT LIKENOT ILIKEREGEXP もサポートするようになりました。これらは arrayExists / arrayAll に書き換えられます。#107454 (Alexey Milovidov).
  • SQLite データベースを開くのに失敗した場合 (たとえば、sqlite テーブル関数または SQLite データベースエンジンに、開けないパスが指定された場合) に発生していたメモリリークを修正しました。#107807 (Alexey Milovidov).
  • Web UI (play.html) で、実行ショートカットのヒントは常に Ctrl/Cmd+Enter を表示するのではなく、Mac では Cmd+Enter、その他のプラットフォームでは Ctrl+Enter を表示するようになりました。また、ヒント内の , +Shift to run all は、複数のクエリがある場合にのみ表示されます。#107817 (Alexey Milovidov). #108957 (Alexey Milovidov).
  • Alias table engine で、ターゲットテーブルが MergeTree ファミリーの場合、並列レプリカでの読み取りがサポートされるようになりました。#107830 (Kai Zhu).
  • uniqCombined64 スケッチに基づく、uniq 統計の軽量な代替である uniq_v2 カラム STATISTICS タイプを追加しました。#107863 (Han Fei). また、minmax カラム STATISTICS タイプは非推奨となり、auto_statistics_types のデフォルト値は basic, uniq_v2 に変更されました。#108680 (Han Fei).
  • AI 関数 (aiGenerate, aiEmbed, aiClassify, aiExtract, aiTranslate) は、ai_function_max_retries が設定されている場合、一時的なネットワーク障害 (接続リセット、TLS 接続失敗、タイムアウト、到達不能なアドレス) で再試行するようになり、url table function の再試行動作と一致するようになりました。以前は、provider 側の HTTP エラーレスポンスのみが再試行対象でした。#107927 (Alexey Milovidov).
  • MergeTree table への INSERT は、多数の part を書き込んでいる間も、強制終了後に長時間動作し続ける可能性があるのではなく、クエリのキャンセルと max_execution_time を反映するようになりました。#107929 (Michael Kolupaev).
  • Web UI (play.html) で、ウェブターミナルのアイコンを中ボタンクリックまたは Ctrl/Cmd/Shift+クリックで新しいブラウザータブに開けるようになりました。#108006 (Alexey Milovidov).
  • クライアントの AI SQL generation では、configuration で ai.temperature によって明示的に設定されていない限り、temperature parameter を送信しなくなりました。これにより、temperature parameter を受け付けないモデルでも AI SQL generation が正しく動作するようになります。#108014 (Alexey Milovidov).
  • オープンソースビルドに system.masking_policies table と SHOW MASKING POLICIES による introspection を追加しました。マスキングポリシー自体は引き続き ClickHouse Cloud の機能であるため、オープンソースビルドでは table は空のままですが、introspection クエリが error で失敗することはなくなりました。#108030 (Alexey Milovidov).
  • Keeper ベースの Kafka consumer は、replicas 間で一時的なパーティション lock を取得する順序をランダム化するようになり、パーティション分散の公平性が向上し、lock contention が軽減されます。以前は、意図したシャッフルが効果を発揮していませんでした。#108033 (Alexey Milovidov).
  • system.completions と WASM ベースの SQL lexer に基づくオートコンプリートを Web UI (play.html) に追加しました。#108059 (Alexey Milovidov).
  • clickhouse-clientclickhouse-local で、カーソルが入力末尾にあるときに、最もよく一致する候補の入力中オートコンプリートヒント (インラインの “ghost” テキスト) が表示されるようになりました。関連性の高い候補 (最近使用したものや、クエリ内にすでに含まれている識別子) が優先的に上位表示されます。Up/Down (または Ctrl-Up/Ctrl-Down) で移動し、単一のヒントまたは選択中のヒントを Tab または Right で確定できます。選択中のヒントは Enter でも確定できます。Tab では従来の補完リストも開きます。新しい --hints オプションで制御されます (デフォルトで有効、--highlight が必要です) 。#108070 (Alexey Milovidov).
  • QBit データ型で length 関数をサポートしました。ベクトルの次元を定数として返します。#108071 (Alexey Milovidov). また、QBit から Array への CAST もサポートし、元のベクトルを復元できるようになりました。これは既存の Array から QBit への変換の逆です。#108072 (Alexey Milovidov).
  • REST データレイクカタログ (OneLake など) へのリクエストに、ClickHouse の User-Agent ヘッダーが含まれるようになりました。#108117 (Konstantin Vedernikov).
  • arrayFold がクエリのキャンセルと max_execution_time を考慮するようになりました。従来は、非常に長い配列に対する fold は 1 回の関数呼び出し内で最後まで実行され、中断できなかったため、KILL QUERY や時間制限は fold の完了まで無視されていました。#108192 (Groene AI).
  • MVTEncodeGeom は、clip の前に geometry を整数ピクセルグリッドにスナップし、wagyu ライブラリで polygons を clip するようになりました。これにより、clip 後の出力は有効になり (自己交差する ring は修復されます) 、境界に揃えられ、PostGIS ST_AsMVTGeom と一致します。#108248 (Saarthak Gupta).
  • フェーズごとのクエリ実行前 ProfileEvents として、QueryParseMicrosecondsQueryAnalysisMicrosecondsQueryPlanBuildMicrosecondsQueryPipelineBuildMicroseconds を追加しました。これにより、クエリ実行前のどこで時間が使われているか (パース、解析、クエリプランの構築、パイプラインの構築) が分かるようになり、system.query_logsystem.events で利用できます。#108282 (Jordi Villar).
  • ALTER TABLE により max_query_size を超えるテーブルメタデータが生成される場合、その操作は事前に拒否されるようになりました。これにより、DDL distribution やレプリカ復旧などのコンポーネントによってテーブルが読み込めなくなる事態を防げます。#108283 (Andrew Kravchuk).
  • system.backupssystem.backup_logsettings および engine_settings カラムを追加しました。settings には、その操作で要求されたバックアップ/restore 固有の設定 (例: allow_s3_native_copydeduplicate_filesstructure_only) が格納されます。engine_settings には、バックアップ engine の reader と writer が実際に使用した設定 (例: エンドポイント設定のマージ後に要求内容と異なる可能性がある allow_native_copy などの S3 リクエスト設定) が格納されます。これにより、BACKUP/RESTORE 操作が実際にどの設定で実行されたかを確認できます。#108334 (Julia Kartseva).
  • system.documentationsource カラムを追加し、各エンティティのドキュメントが定義されているソースファイルのパスを格納できるようになりました。このテーブルでは、圧縮 codec、profile events、current メトリクス、asynchronous メトリクス、さらにシステムテーブル自体 (そのカラムを含む) もドキュメント化されるようになり、settings のドキュメントには type とデフォルト値も含まれるようになりました。#108346 (Alexey Milovidov)。また、setting のデフォルト値が空の場合は、空のバッククォートではなく empty string として表示されるようになりました。#108708 (Alexey Milovidov)。
  • kqueue 上に epoll ベースの polling primitives を実装することで、macOS でリモートレプリカからの asynchronous な reads (async_socket_for_remote) をサポートしました。これにより macOS では、distributed queries が shard を直列ではなく並列に読み取れるようになります。#108403 (Raúl Marín)。
  • バイナリ math functions で BFloat16 をサポートしました。#108442 (Zhang Yifan)。
  • MergeTree が、ブロックごとに異なる codec を使う compressed stream を読み取れるようになりました。これは adaptive codec selection のための read 側の prerequisite です (#105404) 。#108592 (Raufs Dunamalijevs)。
  • max_threads などの settings の自動値は、system.settings'auto(8)' ではなく auto(8) と表示されるようになりました。これまで値を囲んでいたシングルクォートは、長年値の一部として組み込まれていた artifact でした。バージョン間の互換性は維持されており、古いサーバーから受信した settings の解析時には、従来のクォート付き形式も引き続き受け付けます。#108657 (Alexey Milovidov)。
  • /schema Web UI の使い勝手を複数改善しました。Enter でのスキーマ読み込み、テーマ対応スクロールバー、読みやすい table 名、独立した table の database ごとの一貫したグループ化、ドラッグ中のテキスト選択の無効化、さらに play スタイルの authentication form (Credential Management API、URL で渡された credentials からのパスワード除去、認証情報のライブ検証) を追加しています。#108724 (Alexey Milovidov)。
  • テキスト索引の lazy posting-list apply mode は experimental ではなくなり、allow_experimental_text_index_lazy_apply なしで text_index_posting_list_apply_mode = 'lazy' を指定して選択できるようになりました。また、density-threshold setting は text_index_density_threshold から text_index_lazy_intersection_density_threshold に名前変更されました。#108814 (Anton Popov)。
  • Databricks Delta Sharing の Iceberg REST endpoint 向けに、DataLakeCatalog に新しい delta_sharing カタログ type を追加しました。この endpoint ではネームスペースがフラットで、parent listing filter は無視されます。そのような endpoints では catalog_type = 'rest' の代わりにこれを使用してください。そうしないと SHOW TABLES がハングする可能性があります。#108865 (Seva Potapov)。
  • clickhouse-client/clickhouse-local に新しいオプション --echo-query-separator を追加しました。これにより、整形して echo されたクエリの前にカスタム区切り文字を表示できるようになり、入力したクエリと再整形後の echo を見分けやすくなります。デフォルトでは無効です。#108888 (David Meng)。
  • Web UI のデータベースパネルを改善しました。データベース名を展開すると、その横にテーブル数が括弧付きで表示されます。#108891 (Alexey Milovidov)。展開したデータベースの横にある更新ボタンで、テーブル一覧を再読み込みできます。#108958 (Alexey Milovidov)。パネルを再度開くと、前回展開していたデータベースが復元されます。#108964 (Alexey Milovidov)。
  • EXPLAIN WHATIF で skip-index の複合的な効果を計算できるようにしました。既存の適切な仮想インデックスすべての積集合に対するデータ比率を表示します。#108934 (Yarik Briukhovetskyi)。
  • Web UI でセル内のリンクをクリックしてページに戻ると、結果テーブルの横スクロール位置がリセットされる問題を修正しました。#108941 (Alexey Milovidov)。
  • MySQL のデータベースエンジン、テーブルエンジン、テーブル関数で、MySQL の空間カラム型 (LINESTRINGPOLYGONMULTILINESTRINGMULTIPOLYGON、および汎用の GEOMETRY) を、String ではなく対応する ClickHouse の幾何型にマッピングするようになりました。これは mysql_datatypes_support_level 設定の新しい geometry フラグで制御され、デフォルトで有効です。POINT は引き続き常に Point に変換されます。汎用の GEOMETRY カラムは包括的な Geometry 型にマッピングされます。ClickHouse に対応する型がないサブタイプ (MULTIPOINTGEOMETRYCOLLECTION) の値を読み取ると、読み取り時に例外が発生します。#108944 (Alexey Milovidov)。
  • Web UI (play.html): キーボード操作に完全対応しました。データベースパネルと結果テーブルでの矢印キーによる移動、ツールバーボタン、テーマ切り替え、ダウンロードメニューへのキーボードアクセス、および視認可能なフォーカス枠線に対応しています。#108972 (Alexey Milovidov)。
  • HTTP インターフェイス: URL パラメータ (user/password) と Authorization ヘッダーの両方で認証情報が指定された場合、リクエストを拒否するのではなく、URL パラメータが優先されるようになりました。これにより、ブラウザーが Basic 認証情報を記憶している場合に Web UI (play.html) から結果をダウンロードすると AUTHENTICATION_FAILED (エラー 516) で失敗する問題を修正しました。#108980 (Alexey Milovidov)。
  • show_data_lake_catalogs_in_system_tables を、system.tablessystem.columnssystem.completions における DataLakeCatalog の表示のみを制御する設定として復元しました。さらに、デフォルトで有効な show_remote_databases_in_system_tables を追加し、これらのシステムテーブルで MySQL および PostgreSQL データベースを個別に非表示にできるようにしました。#109082 (Pablo Marcos)。
  • 正確な (表現可能な値のうち最も近い) 浮動小数点パースアルゴリズムをデフォルトで使用し、precise_float_parsing 設定を toFloat*/CAST だけでなく、入力フォーマット (CSVTSVJSONVALUES、…) と数値リテラルにも適用するようにしました。以前の、場合によってはより高速だが精度の低い動作に戻すには、precise_float_parsing = 0 を設定してください。Closes #60146。Closes #74647。Closes #68914#109086 (Raúl Marín)。
  • 単一の CTE を含むクエリも、複数の CTE を含むクエリと同じ改行・インデントで整形されるようになりました。従来は WITH a AS (...) では CTE が WITH と同じ行に配置されていましたが、CTE が 2 つ以上ある場合は WITH が単独の行になり、各 CTE がインデントされていました。 #109092 (Groene AI).
  • Web UI: ハイライトされている補完候補が、すでに入力済みの単語と同じ場合、または大文字・小文字だけが異なる同じ単語である場合 (たとえば、入力済みの hash に対して HASH が提示される場合) 、Right/Tab/Enter を押しても単語が書き換えられたり、自動補完に吸収されたりしなくなりました。キーは期待どおり、キャレットの移動または改行の挿入を行います。 #109106 (Alexey Milovidov). #109384 (Alexey Milovidov).
  • Web UI (play.html) に、clickhouse-client と同様のレインボー括弧、対応括弧、対応する Identifier、桁区切りのハイライトを追加しました。 #109108 (Alexey Milovidov).
  • Web UI で、TabShift+Tab により、選択した行を 4 文字分インデント/逆インデントできるようになりました。 #109110 (Alexey Milovidov).
  • Web UI: クエリエディタで構文エラーの位置を赤い背景でハイライトするようにしました。ユーザーがエディタに再びフォーカスを戻すと、このハイライトはすぐにクリアされます。 #109112 (Alexey Milovidov).
  • clickhouse-compressor --stat と古いパーツのデフォルト codec 検出で、破損した block ヘッダーが、誤解を招く EOF エラーではなく、破損として報告されるようになりました。 #109157 (Raufs Dunamalijevs).
  • ClickHouse Keeper が os_collect_psi_metrics 設定を尊重し、無効時には PSI メトリクスの収集をスキップするようになりました。 #109179 (Maxim Orlovsky).
  • Web UI でクエリ tabs が表示されている場合、接続 parameter (host、user、password) は右上の鍵ボタンの下に隠され、必要に応じてドロップダウンで表示されるようになりました。 #109243 (Alexey Milovidov).
  • Web UI: 単一値の結果 (1 行 1 カラム。たとえば SHOW CREATE TABLE) が 3 行に制限されず、全高で表示されるようになりました。 #109245 (Alexey Milovidov).
  • Web UI で、databases パネル内の table を中クリックする、Shift を押しながらクリックする、またはプラットフォームの新規 tab 修飾キー (macOS では Cmd、それ以外では Ctrl) を使ってクリックすると、そのクエリが新しい Web UI tab で開くようになりました。 #109246 (Alexey Milovidov).
  • リモート (object storage) の Parquet ファイルに対する query condition cache のキーとして、path に加えて ETag も使うようにしました。これにより、その場でオブジェクトを上書きした場合でも、古い cache 済み結果が返されなくなります。 #109310 (Alexey Milovidov).
  • Web UI で、空文字列と NULL は categorical 色分けモードでは色付けされなくなりました。 #109342 (Alexey Milovidov).
  • Web UI: データベースパネルでテーブルのアイコンをクリックすると、そのテーブルのカラム一覧が表示されるようになりました。型アイコン、圧縮サイズに比例したサイズバー、さらに圧縮サイズ/非圧縮サイズと圧縮率を表示するツールチップが含まれます。#109346 (Alexey Milovidov).
  • Web UI: タブのタイトルが切り詰められている場合、ホバー時に完全なタイトルをツールチップで表示するようになりました。#109354 (Alexey Milovidov).
  • Web UI で、タブのタイトルを中クリックするか (または Ctrl/Shift/Cmd+クリックするか) すると、そのタブを複製できるようになりました。#109357 (Alexey Milovidov).
  • Web UI: ブラウザウィンドウが狭いときに不自然に折り返されないよう、最終的な Progress とクエリ統計の領域を均等にリサイズするようにしました。#109363 (Alexey Milovidov).
  • Web UI: データベースパネルでデータベースを選択すると、エディタから実行するクエリのデフォルトデータベースとして使用されるようになりました。#109372 (Alexey Milovidov).
  • 固定サイズ要素の ArrayString として reinterpret できるようになりました。これは既存の、String/FixedStringArray として reinterpret する機能の逆方向です。#109383 (Alexey Milovidov).
  • Web UI で、結果が 1 行以下の場合は、カラムごとの色分けトグルを表示しないようにしました。#109385 (Alexey Milovidov).
  • 次元が同じである限り、要素型および/または stride が異なる QBit 型の間で CAST を許可しました (たとえば QBit(Float32, N) から CAST(x AS QBit(Float64, N))) 。stride のみの変更は損失がなく、要素型の変更は対応する Array の変換セマンティクスに従います (たとえば Float32 から BFloat16 では精度が失われる可能性があり、accurateCast / accurateCastOrNull は正確に表現できない行を拒否します) 。#109387 (Alexey Milovidov).
  • 関数 quantizeBFloat16ToInt8dequantizeInt8ToBFloat16 が、既存の scalar オーバーロードに加えて、Array および QBit の argument も受け付けるようになりました。Lloyd-Max codec をベクトル全体に適用し、対応する要素型の Array/QBit を返します。#109398 (Alexey Milovidov).
  • Web UI: Documentation リンクの URL に current user 名を含めるようになりました。#109419 (Alexey Milovidov).
  • BFloat16 の配列に対して arraySumarrayAvgarrayProduct をサポートしました。#109420 (Alexey Milovidov).
  • parseDateTime / parseDateTime64 (およびそれらの OrZero / OrNull バリアント) における MySQL 形式のフォーマット指定子 %f が、これまでのように厳密に 6 桁を要求するのではなく、MySQL の STR_TO_DATE と同様に左寄せのマイクロ秒として解釈される 1〜6 桁の小数点以下の桁数を受け付けるようになりました。あわせて、組み込み関数ドキュメントの例における PrettyCompact テーブルの位置ずれも修正しました。#109421 (Alexey Milovidov).
  • Web UI: クエリタブが永続化されるようになりました — タブを切り替えて戻ってきても、各タブはレンダリング済みの結果 (画像やチャートを含む) と実行中のクエリを保持し、長時間かかるクエリもバックグラウンドで実行され続けます。タブタイトルには、そのクエリのスピナー、プログレスバー、完了チェックマークが表示されます。 #109425 (Alexey Milovidov).
  • Web UI: クエリ結果の一部がすでにストリーミングされたあとでクエリが失敗した場合、クライアント側の SyntaxError: Unexpected end of JSON input を表示したり (または http_write_exception_in_output_format により失敗したクエリを成功扱いしたり) するのではなく、正しくエラーを表示するようになりました。 #109430 (Alexey Milovidov).
  • Web UI にピン留めされたカラムを追加しました: カラムはヘッダーからピン留めでき、結果テーブルを横方向にスクロールしている間も表示されたまま (端に固定された状態) になります。 #109439 (Alexey Milovidov).
  • 高度なダッシュボード (/dashboard) では、特定のメトリクスのチャートを、ソースコードやドキュメントに記載されているメトリクス名を使って直接追加できるようになり、デバッグセッション中に複数のメトリクスを追加しやすくなりました。 #109449 (Mikhail Artemenko).
  • Web UI: 接続設定のドロップダウンで、マウスでテキストを選択して境界の外までドラッグすると閉じてしまう問題を修正しました。 #109451 (Alexey Milovidov).
  • Web UI: 結果テーブルのカラムヘッダーにマウスオーバーすると、完全なカラム名と型がツールチップに表示されるようになり、省略されたヘッダーも全文を確認できるようになりました。 #109463 (Alexey Milovidov). また、カラムが完全なタイトルを表示するのに十分な幅がある場合でも、カラムヘッダーのタイトルが省略記号で切り詰められてしまう問題を修正しました。 #110397 (Alexey Milovidov).
  • macOS ビルドで SSD cache 辞書 (SSD_CACHE レイアウト) と FileLog テーブルエンジンをサポートしました。 #109493 (Raúl Marín).
  • Web UI: ページを開いたときに、空のクエリを含むタブを復元しないようにしました。 #109529 (Alexey Milovidov).
  • TERM256 が含まれていない端末 (例: Ghostty、kitty、Alacritty、foot) で、対話型クライアントの入力中オートコンプリートヒントが読みにくくなり、明るい色も見づらくなる問題を修正しました: 明るい色は、bold + 暗い色にフォールバックするのではなく、常に aixterm の明るい色コードとして出力されるようになりました。これは、モダンな端末では dark background 上で暗く読みにくい色としてレンダリングされるためです。 #109622 (Alasdair Brown).
  • macOS ビルドで jemalloc の per-CPU arenas と割り当てプロファイリングを有効にしました。 #109684 (Raúl Marín).
  • OneLake データレイクカタログデータベースの一部の認証設定を、ALTER DATABASE ... MODIFY SETTING で変更できるようにしました。 #110019 (alesapin).
  • Hive engine は、Apache Arrow ORC アダプターの代わりに、ClickHouse ネイティブの ORC リーダーで ORC ファイルのメタデータ (min/max 索引、行数) を読み取るようになりました。 #110086 (Alexey Milovidov).
  • 比較演算および算術演算において、あまり使われない混在型の組み合わせ (Decimal とビット幅の異なる整数の組み合わせ、および Int128/UInt128/Int256/UInt256 を含む組み合わせ) について、型の組み合わせごとに専用のコンパイル済みカーネルを用意する代わりに、共通型に変換して処理するようにし、バイナリサイズを約 10.5 MB 削減しました。同一型の組み合わせ、よく使われる組み合わせ、およびメモリ帯域律速の plus/minus/multiply は、引き続き専用カーネルを使用します。結果、結果型、例外ケースに変更はありません。#110131 (Alexey Milovidov).
  • IN の右辺にあるサブクエリで、その単一カラムが左側の引数より 1 次元深い配列である場合、分かりにくい型不一致エラーで失敗するのではなく、その配列の要素の集合 (配列リテラルや配列を返す関数と同様) として解釈されるようになりました。たとえば、x IN (SELECT groupArray(x) FROM ...) が動作するようになりました。#110169 (Alexey Milovidov).
  • SQLite テーブルエンジンまたは sqlite テーブル関数からの読み取りで、別の接続によって SQLite データベースがロックされている場合に、CPU core を 1 つフルに消費してビジースピンすることがなくなりました。読み取りはロック待ちの間はアイドル状態となり、引き続きキャンセル可能です。#110248 (Groene AI).
  • ログおよび例外メッセージ内の経過時間、レート、比率の値を 3 桁に丸めるようにし、1.345844286 sec. のような数値が完全な精度で出力されなくなりました。#110277 (Alexey Milovidov).
  • Web UI (Play) で、BFloat16 が浮動小数点数として認識されるようになり、そのカラムはそれに応じて右揃えで表示され、色分けされます。#110433 (Alexey Milovidov).
  • PostgreSQL テーブルエンジンおよび postgresql テーブル関数で SETTINGS clause (たとえば SETTINGS postgresql_connection_pool_size = 50) をサポートし、MySQL engine と同等の機能を提供するようになりました。#110614 (Alexey Milovidov).
  • SHOW CREATE TABLE (および SHOW CREATE VIEW / SHOW CREATE DICTIONARY) で、要求されたテーブルが存在しない場合に、SELECT クエリと同様に、エラーメッセージ内で名前の似たテーブルを提案するようになりました。#110633 (Alexey Milovidov).
  • merge_selector_enable_heuristic_to_lower_max_parts_to_merge_at_once 設定をデフォルトで有効化しました。マージセレクタは、パーティションがどの程度埋まっているかに基づいて、一度にマージするパーツの最大数を自動的に引き下げるようになりました。#91163 を参照してください。#110726 (Mikhail Artemenko).
  • PostgreSQL ワイヤプロトコルで、PostgreSQL のクリーンアップコマンド RESETUNLISTENDISCARD を、構文エラーにする代わりに no-op として受け付けるようになりました。これにより、接続のセットアップおよびクリーンアップ時に RESET ALLUNLISTEN * を送信する Skunk のようなドライバーとの互換性が向上します。#110780 (Alexey Milovidov).
  • auto_statistics_types 設定のデフォルト値を basic, uniq から basic, uniq_v2 に変更しました。#110878 (Han Fei).
  • randomHadamardTransform は、最大の奇数因子が 64 以下である任意のベクトル長に対して、長さを保った厳密な transform を計算できるようになりました (例: 3584 = 512 * 7。埋め込みモデルで一般的です) 。これにより、従来の 2^N2^k * {12, 20}2^k * 9 の各ファミリーが拡張されます。厳密に表現できない長さに対する完全な transform は、より長いベクトルに暗黙的にゼロ埋めされるのではなく、例外を送出するようになりました。任意の長さの truncated projection を計算するには、output_dims を指定してください。#111006 (Alexey Milovidov).
  • 同時に dropping と再作成が行われている Replicated database の backup 中に発生していた LOGICAL_ERROR 例外を修正しました。こうした backups は、今後は CANNOT_GET_REPLICATED_DATABASE_SNAPSHOT を返して適切に失敗するようになります。#100651 (Alexey Milovidov).
  • zip アーカイブを展開できない場合に、実際の根本原因となる error が表示されるようになりました (たとえば、アーカイブを S3 から読み込んでいて、読み取りバッファが seek を拒否した場合) 。従来は、実際の error は汎用的な Couldn't unpack zip archive: Code = -100 / Couldn't open zip archive というメッセージの背後に隠れていました。#105103 (Groene AI).
  • server の再起動後 (または DETACH DATABASE/ATTACH DATABASE の後) に表示される紛らわしい “Maybe you meant X?” ヒントを修正しました。すでに drop 済みの table を dropping すると、代替候補として直前に drop された名前が提案されることがありました。#106238 (Groene AI).
  • バックグラウンドの table-drop queue で発生していた論理エラー (Logical error: 'removed'。debug builds では server が abort していました) を修正しました。この問題は、同じ明示的な UUID を複数の CREATE OR REPLACE TABLE クエリで再利用し、その UUID を共有する drop 済み table が複数 queue に入れられたときに triggered されていました。#107031 (Groene AI).
  • エイリアス付きラムダがアクセス演算子 (タプル要素 .N または配列要素 []) のオペランドとして式リストの先頭以外の位置で使われた場合に、debug builds および sanitizer builds で server を abort させることがあった Inconsistent AST formatting 論理エラーを修正しました。例: SELECT 1, ((p0, p1) -> p0 AS a7).4[3] FROM t#107092 (Groene AI).
  • 別の distributed query の内側にネストされた cluster table function (urlClusterfileClusters3Cluster など) (例: clusterAllReplicas(..., urlCluster(...))) は、論理エラー (Distributed task iterator is not initialized) で失敗するのではなく、BAD_ARGUMENTS error として拒否されるようになりました。#107107 (Groene AI).
  • クエリ timeout (timeout_overflow_mode = 'break' を伴う max_execution_time) によって中断された OPTIMIZE ... DRY RUN は、rows_sources に関する論理エラーではなく、TIMEOUT_EXCEEDED を返すようになりました (従来は debug/sanitizer builds で server が abort していました) 。#107114 (Groene AI).
  • macOS で ZooKeeper セッションの終了処理中に、無害な Net Exception: Socket is not connected error をロギングしないようにしました。clickhouse keeper-client も、終了時にこの不要な error を stderr に出力しなくなりました。#107438 (Groene AI).
  • リフレッシャブルmaterialized view が、refresh_retries に非常に大きな値 (Int64 の最大値近く) が設定されている状態で失敗した refresh を再試行した際に発生していた、符号付き整数 overflow を修正しました。この overflow は、undefined behavior sanitizer を有効にした builds で server を abort させる可能性がありました。#108005 (Groene AI).
  • JOIN で null-safe 比較演算子 (<=> / IS NOT DISTINCT FROM) を使用し、キーの 1 つが scalar subquery (例: ... JOIN t2 ON (SELECT x FROM t1) <=> t2.k) である場合に、古いアナライザ (enable_analyzer = 0) で発生していた LOGICAL_ERROR (debug/sanitizer build での server abort) を修正しました。このようなクエリは、論理エラーではなく通常の NOT_FOUND_COLUMN_IN_BLOCK エラーを返すようになりました。#108123 (Groene AI).
  • _distance カラムを選択する vector search クエリで、論理エラーで失敗するのではなく、適切なエラーが返されるようになりました。#108423 (Robert Schulze).
  • 最終的な非同期 S3/Azure マルチパートアップロード完了タスクのスケジューリングが失敗したとき (たとえばスレッドプール枯渇時) に発生し、debug および sanitizer build で server を abort させる可能性があった std::future_error (The associated promise has been destructed prior to the associated state becoming ready) を修正しました。代わりに、実際の scheduling エラーが報告されるようになりました。#108730 (Groene AI).
  • 非常に大きな regular expression (たとえば数十万個の wildcards を含む LIKEmatch の pattern) を compile した際に、server log の出力やエラーメッセージが過大になる問題を回避するようにしました。このような pattern は、明確な CANNOT_COMPILE_REGEXP エラーで失敗するようになりました。#108821 (Raúl Marín).
  • 範囲外のプロトコル パケットタイプ を文字列化する際の未定義動作を修正しました (たとえば、desync または fuzz 済み connection での Unexpected packet from server / Received ... packet エラーメッセージ内) 。#108885 (Groene AI).
  • table expression が IN operator の左側の argument として使用されたときに発生していた、わかりにくい内部エラー (Method getResultType is not supported for TABLE query tree node) を修正しました。このようなクエリでは、明確なエラーメッセージが表示されるようになりました。#109412 (Alexey Milovidov).
  • version 番号が数字だけで構成されているものの、32-bit 整数の範囲を超える metadata file (たとえば v99999999999999999999.metadata.json) を持つ Iceberg table の読み取りを修正しました。以前は、このような名前に対して、明確な BAD_ARGUMENTS エラーではなく、不明瞭な std::out_of_range (STD_EXCEPTION) が発生していました。#109619 (Groene AI).
  • 行ベースの input format (たとえば TSV/CSV) で入力の parse に失敗し、かつ基盤となる読み取りがすでにキャンセルされていた場合 (たとえば不正な HTTP chunk や切り詰められた body) に、Logical error: 'ReadBuffer is canceled. Can't read from it.' が発生する可能性があった問題を修正しました。verbose な parse 診断の構築時に、キャンセル済みの buffer から読み取らないようになりました。#109708 (Groene AI).
  • arrayJoin (またはその unnest alias) を使う ROW POLICY フィルタ式 は、明確なエラーで拒否されるようになりました。以前は、このような policies により query time に column->size() == num_rows の論理エラーが発生していました。#109753 (Raúl Marín). #109973 (Raúl Marín).
  • schema に unsupported な Nested 型 (たとえば ROW field) を含む Paimon table の読み取りで、メッセージなし・エラーコード 0 の素の DB::Exception. (OK) ではなく、unsupported な型名を示す明確な BAD_ARGUMENTS エラーが報告されるようになりました。#109762 (Groene AI).
  • 実験的設定 make_distributed_plan = 1 を使用するクエリで、distributed_plan_default_reader_bucket_count または distributed_plan_default_shuffle_join_bucket_count に非常に大きな値を指定した場合に発生していた LOGICAL_ERROR (std::length_error) を修正しました。現在、このような値は INVALID_SETTING_VALUE で拒否されます。#109770 (Groene AI).
  • 再帰 CTE が外側のスコープの識別子を相関カラムとして解決した場合 (allow_experimental_correlated_subqueries = 1) に発生していた LOGICAL_ERROR (query tree node does not have valid source node) を修正しました。現在、このようなクエリは明確な UNSUPPORTED_METHOD エラーを返します。#109863 (Groene AI).
  • ORDER BY ... WITH FILLInt64/UInt64 カラムで非常に大きなギャップを飛ばす場合 (たとえば 2^63 近傍のギャップをステップ 2 でまたぐ場合) に発生していた符号付き整数オーバーフローを修正しました。このオーバーフローはサニタイザ環境では未定義動作となり、リリースビルドでは暗黙にラップアラウンドしていました。#109937 (Groene AI).
  • Distributed テーブルに対して、低い optimize_const_name_sizeSELECT ... ORDER BY ... WITH FILL を実行した際に発生していた Bad cast from type DB::FunctionNode to DB::ConstantNode 論理エラー (debug/sanitizer ビルドでサーバーが異常終了) を修正しました。#109938 (Groene AI).
  • 古いアナライザ (enable_analyzer = 0) で、INTERPOLATE の対象が WITH FILL カラムのエイリアスである場合に発生していた Invalid number of rows in Chunk 論理エラーを修正しました。現在、このようなクエリは明確な INVALID_WITH_FILL_EXPRESSION エラーで拒否されます。#110103 (Groene AI).
  • indexHint/ignore/isZeroOrNull 関数に、型が Nothing に解決される引数を渡した場合 (たとえば indexHint(assumeNotNull(materialize(NULL))) のような式内) に発生していた論理エラー (debug/sanitizer ビルドでサーバーが異常終了) を修正しました。#110192 (Groene AI).
  • max_read_buffer_sizemax_read_buffer_size_local_fs などの読み取りバッファサイズ設定に範囲外の値を設定した際に発生しうる Too large size (...) passed to allocator 論理エラーを修正しました。現在、このような値は設定の妥当性チェックによって 256 MiB に制限されます。さらに、妥当性チェックが適用されない clickhouse-client 内でファイルを読む INSERT ... FROM INFILE については、その使用箇所でも追加で制限されます。#110207 (Alexey Milovidov).
  • CHECK TABLE は、メタデータの読み込みに失敗したプロジェクションパートに対して、誤解を招く Columns doesn't match ... Expected: 0 columns エラーではなく、実際の破損内容を報告するようになりました。#110262 (Raúl Marín).
  • PostgreSQL ソース (たとえば postgresql テーブル関数や PostgreSQL テーブルエンジン) から読み取った値を宣言されたカラム型にパースできない場合の型不一致 (たとえば text カラムを Int32 として宣言した場合) が、現在は適切なクエリエラーとして報告されるようになりました。以前は debug ビルドおよび sanitizer ビルドでサーバーが異常終了していました。#110264 (Groene AI).
  • macOS でクエリプロファイラ、メモリプロファイラ、トレースプロファイラ、および system.trace_log のシンボル化をサポートしました。#109825 (Raúl Marín).
  • chdigv26.7.1 に更新: 共有向けの圧縮スタックトレース、クエリパターン、個別アリーナメモリのサポート、Perfetto の改善、互換性修正。 #110938 (Azat Khuzhin).
  • 符号なしキーを符号付き定数で除算する場合の intDiv における単調性の推論誤りを修正しました。この不具合により、結果型の符号境界をまたぐ IN/NOT IN 述語で、プライマリキー索引のプルーニングが無効になる可能性がありました。また、デバッグビルドでは LOGICAL_ERROR Invalid binary search result in MergeTreeSetIndex も発生していました。 #107586 (Groene AI).
  • allow_lossy_numeric_supertype 設定を追加しました (デフォルトでは無効) 。有効にすると、損失なく共有できる共通型を持たない数値 argument (たとえば DecimalFloat64、または Int64Float64) に対する ifmultiIfcoalesceifNullarraymap は、Variant ではなく Float64 に解決されるようになります。これにより、その結果を sumavgminmax などの aggregate functions で使用できます。関連する aggregate-function の error メッセージには、この設定名が表示されるようになりました。 #106707 をクローズ。 #107236 (Groene AI).
  • Prometheus エンドポイント (メトリクス専用構成向け) と非同期メトリクス収集を、テーブルのロード前に開始するようにしました。これにより、長時間かかる可能性のあるメタデータのロード中でもメトリクスを確認できます。 #108402 (Christoph Wurm).

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • 多数の deduplication ブロックを持つテーブルで TRUNCATE TABLEDROP PARTITION が失敗する問題を修正しました。これらを 1 回の ZooKeeper リクエストで削除すると、デフォルトの 1 MB の jute.maxbuffer 制限を超える可能性がありました。#105991 (Clayton McClure)。この問題の影響を受けるのは、ClickHouse Keeper ではなく Apache ZooKeeper (非推奨) を使用している場合のみです。
  • MergeTree ファミリーのテーブルに対する mutation の WHERE 句で、DELETE FROMALTER TABLE ... UPDATE/DELETE などにおいて修飾付きカラム名 (database.table.column) を使用した場合の問題を修正しました。従来は、このようなクエリは missing-columns エラーで失敗していました。#71760 を修正。#109491 (Mikhail Artemenko)。
  • PromQL クエリの query result cache を修正しました。promql dialect は non-deterministic-function チェックをバイパスしており、now() を基準にした古い結果を返す可能性がありました。また、Prometheus HTTP API (/api/v1/query, /api/v1/query_range) では cache entries がまったく保存されていませんでした。#110887 (Nikita Mikhaylov)。
  • TZ 環境変数が空の場合に server の起動に失敗する問題を修正しました。#68920 を修正。#68921 (Ardenwick)。
  • Backup データベースエンジンが使用不可になったバックアップ (たとえばファイルが削除された場合や、underlying storage にアクセスできない場合) を参照しているときに、server の起動に失敗する問題を修正しました。これにより、server 全体の起動を妨げるのではなく、database はテーブルなしで読み込まれるようになりました。#83188 (Vitaly Orlov)。
  • Distributed engine のテーブルへのバックグラウンド inserts 使用時に、リモート shard へのデータ送信で繰り返し error が発生していた場合、その error の解消後は遅延が減少するようになりました。従来は、遅延は増える一方でリセットされませんでした。#87378 (Andrei Kochemirovskii)。
  • 起動時に Distributed async-insert queue をスキャンして見つかった破損ファイルについて、system.distribution_queuebroken_data_filesBrokenDistributedFilesToInsert metric が常に 0 を報告していた問題を修正しました。#92124 (KG.Xu)。
  • ディスクフル error 後のログ復旧を修正しました。従来は、log 用ディスクがいっぱいになると ClickHouse は failed 状態に入り、syslog に error メッセージを大量に出し続け (1 時間あたり 100 GB 超を書き込む可能性がありました) 、disk space が解放された後も復旧せず、server の再起動が必要でした。現在は、disk space が利用可能になると、server を再起動しなくても logging system が自動的に復旧します。#93127 (jaehanbyun)。
  • vended_credentials が無効な場合、静的な S3 credentials を Unity DataLakeCatalog table の読み取りに転送するようにし、匿名でのオブジェクトストレージアクセス失敗を防ぐようにしました。#96910 (kgeg401)。
  • DeltaLake table engine のスキーマ パース コードで発生するクラッシュを修正しました。#97112 (Kseniia Sumarokova)。
  • 認証されていない TCP client が interserver port 経由で table の存在やレプリケーション状態を調べられてしまう security issue を修正しました。#99854 (Shaohua Wang)。
  • DESCRIBE TABLE で、サブクエリの後にエイリアスが続く場合に発生する構文エラーを修正しました。#100031 を修正。#100205 (Yarik Briukhovetskyi).
  • ROLLUP/CUBE とともに group_by_use_nulls を使用した際に、外部カラムが Nullable になる場合の相関サブクエリで発生する例外を修正しました。#100365 (Alexey Milovidov).
  • ロールバックされたトランザクションの MergeTree パートがコミット済みのパートと交差した場合に、テーブル起動中に発生していたサーバーの異常終了 (sanitizer ビルド) およびサイレントなデータ消失を修正しました。#100992 (Tuan Pham Anh).
  • MergeTree テーブルの Array(LowCardinality(String)) カラムに対して indexOfAssumeSorted が誤った結果を返す問題を修正しました。#101771 (Yash ).
  • テーブルのソートキーが Date カラムを toDateTime でラップしている場合 (例: ORDER BY toDateTime(date_column)) に、クエリが WHERE date_column >= '...' のように元のカラムを比較でフィルタすると、主キーによる pruning が誤って行われる問題を修正しました。toDateTime(Date)DateTime の範囲を超える Date 値 (2106-02-07 より後) で overflow するため、保存されるキーは単調ではありません。そのため ClickHouse は、このキーと述語の組み合わせに対して主キーによる pruning を行わないようになりました。これを行うと、一致する行を含む granules を落としてしまう可能性があるためです。#101744 をクローズ。#101814 (Nihal Z. Miaji).
  • 除算によって floating-point exception (ゼロ除算または INT_MIN / -1) が発生した場合に、符号付き/符号なしの混在引数を含め、intDivOrNullmoduloOrNullpositiveModuloOrNullNULL ではなく 0 を返していた問題と、intDivOrNull および intDivOrZeroNULL / 0 を返す代わりに例外を送出していた問題を修正しました。#101976 (Yarik Briukhovetskyi).
  • Iceberg のメタデータ更新の同時実行時や、DeltaLake テーブルに対する merge table function 経由の読み取りなどのコーナーケースで、Iceberg または DeltaLake テーブルの読み取り時に LOGICAL_ERROR 例外が発生する問題を修正しました。#102033 (Groene AI).
  • 外向き HTTP リクエスト (例: aiGenerate function、url table function、S3) で、IPv4 と IPv6 address の両方を通知する host に対し、片方のアドレスファミリしか到達可能でない場合に No route to host で失敗する問題を修正しました。HTTP connection pool は、最初のアドレスがネットワークエラーで失敗した場合、最初のリクエストの時点でそのエラーをそのまま返すのではなく、次に名前解決されたアドレスへフォールバックするようになりました。#103786 (Alexey Milovidov).
  • 循環 dependencies を持つテーブルを含むバックアップの RESTORE 中に、サーバーが異常終了する問題を修正しました。#103824 (Konstantin Bogdanov).
  • Arrow の time32/time64 カラムに対する schema inference (例: SELECT * FROM file(..., 'Arrow')) で、DateTime64 ではなく Time64 を推論するようになりました。これまで推論されていた型に依存している下流処理では、アップグレード後に新しい型が使われるようになります。あわせて、Time/Time64 の値を Arrow に export する際、精度に応じて適切な Apache Arrow の time 型が選択されるようになりました。#104038 を修正。#104316 (/bin/cat).
  • MergeTree で、ALTER TABLE ... RENAME COLUMN と同時実行される OPTIMIZE TABLE ... FINAL (または任意のバックグラウンド merge) の競合を修正しました。この不具合により、リネーム後のカラムのデータが気付かないうちにデフォルト値へ置き換えられることがありました。 #104822 (Groene AI).
  • DETACH DATABASE/ATTACH DATABASE の後、lazy_load_tables = 1Atomic database で、ALTER TABLE ... RENAME COLUMN の実行中に同時実行された INSERT によって発生する Block structure mismatch 論理エラーを修正しました。 #104852 (Groene AI).
  • パラメトリック形式と 2 引数形式を混在させた場合の groupConcat を修正しました。たとえば groupConcat(',', 2)(x, '/') では、行数制限パラメータが気付かないうちに無視され、指定した件数ではなくすべての行が返されていました。現在は、2 番目の引数の区切り文字が正しくパラメータを上書きします。 #104882 (Yarik Briukhovetskyi).
  • KILL QUERY/KILL MUTATION/KILL PART_MOVE_TO_SHARD/KILL TRANSACTIONWHERE clause に行ごとのサブクエリが含まれている場合、または対象の system.* table に対する内部 SELECT が複数の block を出力するほど max_block_size が小さい場合に発生する LOGICAL_ERROR (Expected one block from input stream) を修正しました。 #104927 (Groene AI).
  • より小さい interval 単位からより大きい interval 単位への CAST が誤った結果を返す不具合を修正しました (たとえば、CAST(toIntervalSecond(60) AS IntervalMinute)1 ではなく 0 を返していました) 。 Closes #104986. #105058 (Yarik Briukhovetskyi).
  • read-in-order pipeline (optimize_read_in_order = 1 および read_in_order_use_virtual_row_per_block = 1) で実行される LIMIT ... WITH TIES クエリで発生する論理エラー (Assertion 'row < chunk.getNumRows()' failed) を修正しました。 #105102 (Groene AI).
  • リフレッシャブルmaterialized view (MATERIALIZED VIEW ... REFRESH ...) におけるリークを修正しました。refresh で EXCHANGE TABLES によって入れ替え対象から外される一時的な内部 table は、max_table_size_to_drop を超えていると drop できなかったため、その後の refresh のたびに新たな一時内部 table が作成され、最終的にはディスクを使い切るまで view の data directory が増え続けていました。現在は、refresh タスクの内部 drop では max_table_size_to_dropmax_partition_size_to_drop をバイパスします。これらの安全機構は、view 自体に対してユーザーが発行する DROP TABLE には引き続き適用されます。 Closes #104900. #105106 (Groene AI).
  • sorting key を変更しない ALTER クエリ (settings、comments、codecs の変更、key ではないカラムの追加など) で、sorting key に SimpleAggregateFunction (または allow_suspicious_primary_key = 1 の場合にのみ許可される別の型) を含む MergeTree table に対して、予期しない DATA_TYPE_CANNOT_BE_USED_IN_KEY error が発生する不具合を修正しました。 #105111 (Groene AI).
  • Replicated database の drop または detach 中に system.clusters のレプリカ状態カラム (is_activeunsynced_after_recoveryrecovery_time など) をクエリすると発生していた use-after-free を修正しました。また、このコードパスで握りつぶされていた無害な Keeper 例外 (影響を受ける database は一時的に使用不可として扱われ、スキップされます) は、Error ではなく Information レベルでログに記録されるようになったため、デフォルトの send_logs_level = 'warning' ではクライアントに届かなくなりました。#105149 (Groene AI).
  • clickhouse-local --ignore-error で複数のステートメントを実行した際、字句エラーや括弧の不一致エラーが発生するたびに、それ以降の各ステートメントがエラーメッセージ内にそのまま出力されてしまう問題を修正しました。#105480 (Groene AI).
  • リフレッシャブルmaterialized view が、リフレッシュのスケジューリングと同時に drop または replace されたときに発生する、まれな server crash を修正しました。#105588 (Groene AI).
  • データファイルのフォーマットが Parquet ではない Iceberg table に対する ALTER TABLE ... DELETE および ALTER TABLE ... UPDATE について、server が crash したり table が黙って破損したりする代わりに、明確な NOT_IMPLEMENTED エラーで拒否するようにしました。#105893 (Groene AI).
  • EXCEPT または INTERSECT で定義され、そのオペランドが UNION チェーンである view で、DETACH/ATTACH 後または server 再起動後に誤った結果が返される問題を修正しました。フォーマッタが INTERSECT/EXCEPTUNION 子要素を括弧で囲んでいなかったため、保存された SQL が逆の優先順位で再解析されていました。#105935 (Groene AI).
  • フォーマット自動検出時に JSON data が TSKV と誤判定される問題を修正しました。#100797 をクローズします。#106009 (Pavel Kruglov).
  • JSON カラムに minmax スキップ索引を直接作成することを禁止しました。混在型の配列が insert された場合、後で NO_COMMON_TYPE 例外により insert が失敗することがあったためです。代わりに、型付き subcolumns に索引を作成してください (例: INDEX idx json.field TYPE minmax) 。#106094 (linhaojie).
  • Time 型の partition key を持つ table で、OPTIMIZE TABLE ... PARTITION ... やパーティション値を解決するその他のクエリで発生していた論理エラー (Parsed partition value ... doesn't match partition value for an existing part with the same partition ID) を修正しました。#106202 (Groene AI).
  • 論理削除によって projection part が残らなかった場合に、data part が壊れた projection を持つものとして誤ってマークされる問題を修正しました。これは、projection が出力 0 行で再構築された場合、または drop された場合 (lightweight_mutation_projection_mode = 'rebuild'/'drop') に発生していました。従来は、この broken 状態によって、その part に対するクエリで projection optimization が無効化されていました。#106273 (Shaohua Wang).
  • plain object storage disk (s3_plain など) 上の removeDirectory が、空でない directory の削除を再帰削除であるかのように扱い、その中のすべての files を削除してしまう問題を修正しました。空でない directory の削除は CANNOT_RMDIR で失敗するようになり、再帰削除では内容を明示的に処理するようになりました。#106281 (RinChanNOW).
  • クォーラムが同時に失敗としてマークされた場合に、Keeper のハードウェアエラーからのクォーラム INSERT の復旧中に server を異常終了させる可能性があった論理エラー (Part ... doesn't exist) を修正しました。#106424 (Alexey Milovidov).
  • row policies の適用時に、重複したカラム名に関する LOGICAL_ERROR 例外が発生する問題を修正しました。#106438 (János Benjamin Antal).
  • CREATE OR REPLACE TABLE および REPLACE TABLE で、既存の対象が max_table_size_to_drop を超えている場合に、ディスク上に _tmp_replace_* テーブルが取り残され、元のテーブルが空のテーブルに置き換えられてしまう問題を修正しました。サイズチェックはスワップ前に実行されるようになったため、制限に違反した場合は、ユーザーに表示されるテーブル名を含むエラーを出して安全に中止されます。#106782 (Groene AI).
  • Dynamic 引数に対して JSON_QUERY/JSON_VALUE/JSON_EXISTSString/UInt8 ではなく Dynamic を返していた問題を修正しました。#106461 をクローズしました。#106877 (Pavel Kruglov).
  • query_plan_optimize_lazy_final が有効な状態で、テキスト索引に対する filter を伴う FINAL 付きの ReplacingMergeTree table へのクエリで、誤った結果が返る問題を修正しました。遅延 FINAL optimization が、テキスト索引からの direct read を再現しない読み取りステップを構築していたため、filter によって一致するすべての行が除外されていました。#106894 (Jimmy Aguilar Mena).
  • 例外に追記されるメッセージにも query_masking_rules を適用するようにし、masking rules が設定されている場合に、jdbc/odbc table functions からのエラーの (in file/uri ...) 接尾辞に含まれる URL-encoded credentials が漏洩しないようにしました。#106916 (Gaurav Dubey).
  • partition key に LowCardinality(Nullable(...)) カラムを含むテーブルで、part の再読み込み時 (server の再起動、DETACH/ATTACH) に毎回パーツが壊れているものとしてマークされ、detach される問題を修正しました。26.5 以降、このようなカラムの最小値と最大値が NULL の場合、part ごとの minmax 索引 file は書き込まれていませんでしたが、part の整合性 check では引き続きその file が必須とされていました。影響を受けるバージョンで書き込まれたパーツには minmax 索引 file がないため、引き続き手動で再 attach する必要があります。#106837 をクローズしました。#106945 (Pedro Ferreira).
  • Nothing 型のカラム (たとえば ARRAY JOIN [] が生成するもの) を非等価 JOIN ... ON predicate が参照した際に、LOGICAL_ERROR (Unexpected expression in JOIN ON section. Expected boolean (UInt8), got 'Nothing') が発生する問題を修正しました。#106981 (Groene AI).
  • enable_filesystem_query_cache_limit = 1 で作成された filesystem cache disk 経由で MergeTree tables を読み取る際に、まれに LOGICAL_ERROR (Attempt to release query context that does not exist) と、それに伴う server crash が発生する問題を修正しました。#107028 (Groene AI).
  • 空の part を plain_rewritable disk に移動した際に server crash が発生する問題を修正しました (たとえば、remove_empty_parts = 0 によって保持されている空の part に対して ALTER TABLE ... MOVE PARTITION ... TO DISK を実行した場合) 。#107040 (Groene AI).
  • optimize_read_in_orderread_in_order_use_virtual_row が有効な場合に、UNION ALL に対する ORDER BY クエリで行順序が不正になる問題を修正しました。#106879 をクローズしました。#107053 (Vladimir Cherkasov).
  • geohashesInBox 関数で、座標の引数に定数値と非定数値が混在している場合、または座標が BFloat16 の場合に発生していた LOGICAL_ERROR (Unsupported argument types) を修正しました。定数/非定数が混在する Float32 引数は動作するようになり、BFloat16 引数は明確なエラーとともに拒否されます。#107063 (Groene AI).
  • 同じキーに対して WITH CUBEWITH ROLLUP、または GROUPING SETS を伴う GROUP BY 上の SELECT DISTINCT で、誤った結果 (重複行) が返る問題を修正しました。これらのケースでは、グループ化修飾子がキーカラムをデフォルト値にした追加の行を出力し、それが実際のグループ値と衝突する可能性があるため、query_plan_remove_redundant_distinct 最適化は DISTINCT を削除しなくなりました。#107072 (Groene AI).
  • WHERE フィルターが定数項を含む論理積である場合の OUTER JOIN における誤った結果を修正しました (たとえば p AND 1、または QUALIFY NULLWHERE にマージされる WHERE p QUALIFY NULL) 。この定数項が JOIN の非保持側に押し込まれ、JOIN 後のフィルターから削除されることがあり、その結果、JOIN が片側のカラムをデフォルト値にした非一致行を生成し、それらの行が誤ってフィルターを通過していました。#107084 (Groene AI).
  • <lifetime> を設定した executable_pool ユーザー定義関数が、基盤となるスクリプトの変更を反映しない問題を修正しました。以前は、編集後のスクリプトを再読み込みするのは SYSTEM RELOAD FUNCTIONS のみで、定期的な <lifetime> による再読み込みでは古いバージョンが実行され続けていました。#107087 (Groene AI).
  • correlated_subqueries_default_join_kind = 'left' のとき、同じカラム識別子を 2 回投影するソース (例: SELECT number, *) に対する相関スカラーサブクエリで発生する LOGICAL_ERROR 例外 (Cannot find input column ... on its position in inputs of expression actions DAG) を修正しました。#107112 (Groene AI).
  • ワーカースレッドがプロファイラーを開始する処理とサーバーのシャットダウンとの間で、サーバーグローバルなトレースコレクターに発生していたデータ競合を修正しました。#107307 (Groene AI).
  • インクリメンタルバックアップは、.backup メタデータファイルの <base_backup> ロケーターに S3 資格情報を保存しなくなりました。use_same_s3_credentials_for_base_backup = 1 を指定して作成したバックアップ、またはこのバックアップロケーターと一致する明示的なベースバックアップ資格情報を使用して作成したバックアップでは、秘密情報を含まないマーカーが保存され、復元時に追加設定なしで復元できます。異なる明示的なベースバックアップ資格情報、または追加のベース認証引数を使って作成したバックアップについては、それらを base_backup 設定とともに RESTORE に渡してください。古いバージョンで埋め込み資格情報を使って作成されたバックアップも引き続き復元可能です。#107357 (Pablo Marcos).
  • output_format_csv_serialize_tuple_into_separate_columns が有効な場合 (デフォルト) 、CSVWithNames および CSVWithNamesAndTypes のヘッダーのカラム数がデータより少なくなる問題を修正しました。ヘッダー (および型の行) は、現在 Tuple カラムをドット区切りの名前 (例: t.a, t.b) を持つ末端フィールドへフラット化するため、ヘッダーのカラム数がデータと一致します。これを制御する新しい設定 output_format_csv_header_serialize_tuple_into_separate_columns (デフォルト 1) が追加され、0 に設定すると以前の単一名ヘッダーに戻せます。#107371 (Groene AI).
  • Parquet の data files に予約済みの row-lineage カラム (_row_id など) が含まれている Iceberg v3 テーブルの読み取りを修正しました。ネイティブの Parquet リーダーは、テーブルスキーマに含まれない予約済みフィールド ID に対して ICEBERG_SPECIFICATION_VIOLATION を発生させなくなりました。#107377 (Greg Maher).
  • スレッドプールのキューから、スケジュール済みタスクが実行前に取り除かれることで発生していた、シャットダウン中のまれな server の異常終了 (std::future_error: The associated promise has been destructed prior to the associated state becoming ready) を修正しました。 #107383 (Groene AI).
  • MaterializedPostgreSQL のテーブルエンジンおよびデータベースエンジンを修正し、デフォルト以外の PostgreSQL スキーマ (materialized_postgresql_schema) から単一のテーブルまたはデータベースをレプリケートできるようにしました。これには、同じデータベース内の複数のスキーマに同名のテーブルが存在する場合も含まれます (従来は publication と replication slot を共有し、相互に干渉していました) 。 #107425 (Alexey Milovidov).
  • server の停止中に 1 つのレプリケートテーブルの structure が変更されると、MaterializedPostgreSQL がデータベース全体のレプリケーションを停止してしまう問題 (LOGICAL_ERROR: Columns number mismatch) を修正しました。現在は影響を受けたテーブルだけがスキップされ、DETACH/ATTACH で復旧できます。 #107427 (Alexey Milovidov).
  • MaterializedPostgreSQL データベースの BACKUPTable ... were created or changed its definition during scanning により無期限にハングすることがなくなり、テーブルデータも実際にバックアップされるようになりました (基盤となる ReplacingMergeTree に委譲されます) 。これにより、独立した ReplacingMergeTree として復元できます。 #107433 (Alexey Milovidov).
  • compatibility = '26.6' を設定した場合 (暗黙的に hive パーティション方式が有効になります) に、S3/object storage テーブルパス内の {_partition_id}BAD_ARGUMENTS を返さずに黙って受け入れてしまうリグレッションを修正しました。 #107437 (Lefteris).
  • 同梱の mongo-c-driver におけるメモリリークを修正しました。この問題は、MongoDB からの読み取り時 (たとえば MongoDB Dictionary や mongodb table function 経由) に、再試行可能な読み取り error の後、再試行時の server 選択に失敗した場合に発生する可能性がありました。 #107448 (Groene AI).
  • 外部 engine によって作成され、任意の snapshotsmetadata-logsnapshot-log 配列が省略されている Iceberg テーブルへの insert 時に発生する例外を修正しました。これにより、そのような insert も失敗せず成功するようになりました。 #107473 (Shaohua Wang).
  • DELETE FROM (論理削除) で、ALTER DELETE に加えて ALTER UPDATE privilege も必要になっていた問題を修正しました。これにより、ドキュメントどおり ALTER DELETE のみを付与されたユーザーでも DELETE FROM を実行できます。 #107491 (Shaohua Wang).
  • use_hive_partitioning = 1 を指定し、実カラム (仮想カラムではないカラム) を絞り込む WHERE/PREWHERE 句と Hive パーティションカラムの選択を同時に行った場合に、Hive パーティション化されたファイルの読み取りで発生していた NOT_FOUND_COLUMN_IN_BLOCK を修正しました。 #107505 (Groene AI).
  • 旧アナライザ (enable_analyzer = 0) が、UNION の子が INTERSECT/EXCEPT 集合演算であるサブクエリから一部のカラムを読み取る際に発生する LOGICAL_ERROR (Different order of columns in UNION subquery) を修正しました。 #107511 (Groene AI).
  • Arrow/ORC データを LowCardinality(Nullable(...)) カラムに insert する際、NULL 値が黙って空文字列に変換されていた問題を修正しました。これは 26.5 で導入されたリグレッションでした。 #107532 (Jimmy Aguilar Mena).
  • Dynamic カラムを持つテーブルに対する mutation で生成された MergeTree part のマージまたは読み取り時に発生する可能性があった論理エラー (Stream ... variant_discr ... is not found) を修正しました。#107562 (Alexey Milovidov).
  • pointInPolygonVariantDynamic などのラッパー型の定数 Polygon 引数で呼び出された場合 (たとえば pointInPolygon((x, y), if(c, [(0, 0), ...], NULL))) に、主キー解析中に発生していた論理エラー (WhichDataType(const_type).isArray()) を修正しました。#107589 (Groene AI).
  • 監視対象のファイルが削除された後、同じ inode を再利用して再作成された際に FileLog engine で発生する可能性があった論理エラー (Last stored last_written_position in meta file ... is bigger than current last_written_pos) を修正しました。#107617 (Groene AI).
  • 非同期の Keeper リクエストが送信中に破棄された場合 (たとえばメモリ逼迫時) に、ZooKeeper クライアントのリクエスト処理中にまれに発生していた server abort (std::future_error: The associated promise has been destructed prior to the associated state becoming ready) を修正しました。#107647 (Groene AI).
  • ReplicatedMergeTree テーブルの RESTORE を修正し、バックアップ内の重複コンテンツを持つ part が暗黙に重複排除されるのではなく、保持されるようにしました。#107652 (Pablo Marcos).
  • JSON カラムに対する runtime join filter が誤った結果を返す問題を修正しました。#107646 をクローズしました。#107663 (Pavel Kruglov).
  • 共通の部分式を共有する ALIAS カラムを選択する distributed queries で、誤った結果が返る問題を修正しました。カラムの対応関係がずれて、別のカラムの値として返されることがありました。#107675 (Vladimir Cherkasov).
  • normalized_query_hash をキーとする quota で、クエリ数の counters と同様に、単一のユーザー共有 bucket に計上するのではなく、各 query pattern ごとにすべての resource (read_rows, read_bytes, result_rows, result_bytes, execution_time, written_bytes, errors) を計上するようになりました。#107681 (Alexey Milovidov).
  • UNION/INTERSECT/EXCEPT の sibling branches が WHERE predicate だけ異なり、一方の branch の predicate が Const カラムへ定数畳み込みされた場合に発生していた Block structure mismatch in UnionStep stream 論理エラー (debug/sanitizer builds では server abort、release builds では Code: 49) を修正しました。#107719 (Groene AI).
  • Variant および Dynamic カラム内にネストされた LowCardinality の除去処理の不整合によって発生していた論理エラー (Bad cast) を修正しました。たとえば concatformat、主キー解析で発生していました。#107598 をクローズしました。#107773 (Pavel Kruglov).
  • クラスターに非アクティブなレプリカ (たとえばオートスケーリング後に残った古いエントリ) が含まれる場合に、並列レプリカでワークロード分散が大きく偏る深刻な問題を修正しました。こうしたレプリカは読み取りコーディネーターによってカウントされなくなり、1 つのレプリカに作業が集中するのではなく、オンラインのレプリカ間で均等に分散されるようになりました。#107805 (Alexey Milovidov).
  • プライマリキー解析中に IN サブクエリの Set を構築する際、処理が暗黙のうちに失敗した場合 (たとえば overflow_mode = 'break' を伴うサブクエリのタイムアウト) に Not-ready Set is passed as the second argument 例外が発生し得る問題を修正しました。この問題では、クエリパイプラインで使われる Set がそのクエリ中で恒久的に未構築のままになっていました。 #107924 (Alexey Milovidov).
  • 述語 pushdown (enable_optimize_predicate_expression、レガシーアナライザ) において、JOIN ... ON 条件内に UNION サブクエリがある場合に発生していたサーバークラッシュを修正しました。 #107930 (Groene AI).
  • S3 または S3-compatible (たとえば GCS) の object を読み取り中にその場で上書きした場合に、誤って CHECKSUM_DOESNT_MATCHParquet の読み取りエラーが発生したり (さらに一部のフォーマットでは気付かれないまま誤った結果を返したり) する問題を修正しました。こうした読み取りは、2 つの object バージョンをつぎはぎしたデータを返す代わりに、明確で retryable な error で失敗するようになりました。これは新しい設定 s3_validate_etag_on_read (デフォルトで有効) で制御されます。 #107934 (Shaohua Wang).
  • set のデータスキッピング索引を持つ table に対して、row policy が常に真となる条件と非索引カラムのチェックを組み合わせてフィルタする場合に、SELECTNOT_FOUND_COLUMN_IN_BLOCK で失敗する問題を修正しました。 #107971 (Shaohua Wang).
  • 実行可能 user-defined function のコマンド parameter のパースを修正し、名前が空または無効なプレースホルダーを parameter として受け付けないようにしました。 #107983 (Goutam Adwant).
  • PREWHERE 使用時の Map subcolumn におけるパフォーマンス低下を修正しました。#107912 をクローズします。原因は #99200 でした。 #107988 (Pavel Kruglov).
  • 存在しない variant 索引を判別子が参照している不正な Native block から Variant カラムを読み取る際に発生する、範囲外書き込みを修正しました。 #107991 (uwezkhan).
  • Date32 キーカラムに対して toStartOfDaytoStartOfISOYeartoDaysSinceYearZerotoRelativeSecondNumtoRelativeMinuteNumtoRelativeHourNumtoRelativeWeekNumtoRelativeDayNumtoMonthNumSinceEpoch、または toYearNumSinceEpoch を適用した際に、関数で表現可能な範囲外の日付 (特に 1970-01-01 より前の日付) を含む場合、誤ったプライマリキーおよびパーティション pruning によりクエリ結果が誤る問題を修正しました。これらの関数はプライマリインデックスに対して自身を単調であると報告しますが、以前はそのような argument に対して値が折り返していたため、実際には一致する行を含む granule を索引が刈り込んでしまう可能性がありました。現在は結果型の bounds で飽和するようになり、Date32 の全範囲で単調性を保ちます。 #108018 (Nihal Z. Miaji).
  • 要素が Dynamic/VariantTuple に対する accurateCastOrNull を修正しました。実際のソース NULL が変換失敗として扱われていました。対象要素が Nullable の場合、ソース NULL は要素 NULL のままになります (通常の Tuple(Nullable(...)) ソースと同じ挙動) 。対象要素が非 Nullable の場合、ソース NULL は要素のデフォルト値を生成するのではなく、タプル全体を NULL にします。なお、parse/overflow の失敗時は引き続きタプル全体が NULL になります。 #108023 (Groene AI). また、Tuple 内にネストされた Dynamic または Variant カラムを、accurateCastOrNull または accurateCastOrDefault で非 Nullable の要素型に CAST する際の論理エラーも修正しました。 #108061 (Alexey Milovidov).
  • numericIndexedVectorPointwiseMultiply が、BSI (bit-sliced index) 構成の異なる全要素 1 のベクトルとの乗算時に空の結果を返していた問題を修正しました。 #108027 (Alexey Milovidov).
  • toTime64 および CAST(... AS Time64) が、saturate および ignore overflow モードで範囲外の値を Time64 の範囲内に丸めていなかった問題を修正しました。この問題により、表示上は同一でも比較結果が異なる値が生成されることがありました。 #108028 (Alexey Milovidov).
  • getClientHTTPHeader が非決定論的として正しく扱われるようになり、その結果がクエリ結果 cache に誤って再利用されなくなりました。 #108029 (Alexey Milovidov).
  • clickhouse-client --port 9440 で、安全な (TLS) 接続が再び自動的に有効になるようになりました。これは、リファクタリングによって secure connection のチェックに port が渡されなくなっていたために壊れていました。 #108032 (Alexey Milovidov).
  • 読み取り専用 table の data part の refresh 中に一時的な error が発生しても、バックグラウンド refresh タスクが恒久的に停止しないようになりました。 #108034 (Alexey Milovidov).
  • system.warnings における memory/CPU/mutation 過負荷の warning が、非同期メトリクス cycle より 1 cycle 遅れていた (さらに最初の cycle では存在しなかった) 問題を修正しました。 #108035 (Alexey Milovidov).
  • mongodb table function が、oid_columns を名前付き argument (例: oid_columns='_id') として受け付けるようになり、BAD_ARGUMENTS で拒否しなくなりました。 #108039 (Alexey Milovidov).
  • 修飾付き asterisk (t.*) で JOIN USING キーを select し、その join が PASTE/CROSS/カンマ join または外側の ON join の下にネストされていて、join_use_nulls = 0 の場合に発生していた Bad cast from type DB::ColumnNullable to DB::ColumnVector<...> 例外 (論理エラー) を修正しました。 #108043 (Groene AI).
  • 正規表現の「すべて一致」関数 extractAll, extractAllGroupsVertical, extractAllGroupsHorizontal, countMatches, splitByRegexp における、幅ゼロアサーション (\b, ^, $) の不正な処理を修正しました。たとえば、extractAll('new york is the greatest', '\b(\w)') は、すべての文字ではなく、各単語の先頭文字を正しく返すようになりました。 #108047 (Alexey Milovidov).
  • Atomic データベースで、クエリが失敗した際に CREATE TABLE ... AS SELECT が空のテーブルを残してしまう不具合を修正しました。たとえば、ユーザーにサブクエリから参照されるテーブルへのアクセス権がない場合です。従来は再試行すると、本来のエラーではなく、テーブルがすでに存在するというメッセージが返されていました。現在は一時テーブル経由でテーブルが作成され、完全にデータが投入されるまで可視状態になりません。#108048 (Alexey Milovidov).
  • DateTime64Decimal、または浮動小数点の range を使用する range_hashed または complex_key_range_hashed Dictionary について、dictGet/dictHas に対応する引数を指定してクエリできるようにしました。従来、このようなクエリは must be convertible to Int64 で失敗し、Decimal/DateTime64 range の終端未指定インターバルでは誤ってデフォルト値が返されていました。#108052 (Alexey Milovidov).
  • 明示的なクエリを使用するローカル ClickHouse ログソースで、キーカラムが Dictionary 定義の先頭カラムではない複合キーを持つ Dictionary を読み込む際に発生していた例外 (CANNOT_PARSE_TEXT) を修正しました。ログソースのカラムは、位置ではなく名前で Dictionary の構造に対応付けられるようになりました。#108053 (Alexey Milovidov).
  • 狭い浮動小数点カラムで正確に表現できない decimal リテラル (たとえば Float32 カラムに対する 0.1) を使用した場合に、values table function が ARGUMENT_OUT_OF_BOUND で失敗する不具合を修正しました。例: SELECT * FROM values('x Float32', 0.1)。このような値は現在受け入れられ、CAST および INSERT ... VALUES と一貫して、表現可能な最も近い値に変換されます。#108055 (Alexey Milovidov).
  • ユーザーが ALIAS カラムに対してのみ SELECT アクセス権を付与されているテーブルで SELECT count() (またはその他の自明なクエリ) を実行した際に発生していた LOGICAL_ERROR (No available columns) を修正しました。#108056 (Alexey Milovidov).
  • mapFiltermapSort (およびその派生版) 、mapConcatMap のキーおよび値の型から LowCardinality を落としてしまう不具合を修正しました。従来、Map(LowCardinality(String), String) カラムに対する mapFilterMap(String, String) を返しており、これにより CREATE TABLE ... AS SELECT で作成されたテーブルのメタデータが破損し、CHECK TABLE が失敗する可能性がありました。#108057 (Alexey Milovidov).
  • splitByNonAlpha 以外のトークナイザーを使うテキスト索引で hasToken を使用した際に、不正な結果になる不具合を修正しました。#108066 (Robert Schulze).
  • XML で定義された多数の MySQL Dictionary が share_connection を介して単一の接続プールを共有している場合に、SYSTEM RELOAD DICTIONARIES (および RELOAD DICTIONARY) が停止する不具合を修正しました。これらのプールは現在、設定の connection_pool_sizeconnection_wait_timeout (デフォルトは 5 seconds) を反映し、named collections を通じて定義された Dictionary と同じ動作になります。#108083 (Alexey Milovidov).
  • Dictionary に対して SHOW DICTIONARIES 権限だけを持つユーザーでも EXISTS <dictionary> を実行できるようにしました (従来は SHOW TABLES が必要でした) 。#108084 (Alexey Milovidov).
  • CREATE TABLE dst AS src SETTINGS ... (および、明示的な ENGINE を指定せずに ORDER BY/PARTITION BY を伴う類似の構文) で、ソース table の engine、ストレージ clause (table TTL やキーなど) 、および settings が暗黙に破棄される問題を修正しました。現在は、engine と上書きされていないストレージ clause はソース table から継承され、指定した settings はソース table の settings に上書きマージされます。#108085 (Alexey Milovidov)。
  • MergeTree table への INSERT が、Windows ベースの filesystem (WSL、CIFS/SMB、Docker Desktop の bind mount) で filesystem error: in rename: Permission denied により失敗する問題を修正しました。原因は、part writer が part directory の rename をまたいでファイルディスクリプタを開いたままにしていたことでした。#108089 (Alexey Milovidov)。
  • WHERE clause なしで Hive table (例: SELECT * FROM hive_table) をクエリした際にクラッシュ (null pointer の逆参照) が発生する問題を修正しました。#108094 (Alexey Milovidov)。
  • 非定数または false の条件を伴う ALTER UPDATE col = ... WHERE <cond> の後に ALTER MODIFY COLUMN col <new type> を実行した場合、apply_mutations_on_fly = 1 でカラムを読み取ると LOGICAL_ERROR (“Unexpected return type from if”) が発生する問題を修正しました。#108128 (Groene AI)。
  • 入力の精度が interval の単位より細かい場合に、toStartOfIntervaldateTrunc が、その interval に含まれる開始時刻ではなく丸められた値を返す問題を修正しました。たとえば、toStartOfInterval(toDateTime64('2023-10-09 10:11:12.000999', 6), INTERVAL 1 millisecond)10:11:12.000 ではなく 10:11:12.001 を返していました。明示的な origin を指定する overload も影響を受けていました。#103535 をクローズします。#108186 (Yarik Briukhovetskyi)。
  • system.query_views_logview_query カラムに含まれる機密情報を隠すようにしました。#108214 (Valerii Mordovskii)。
  • 旧式の hypothesis スキップ索引 (削除済みの索引タイプで、ATTACH 互換性のためだけに残されているもの) を使ってアタッチされた MergeTree table で、処理が停止する問題を修正しました。従来は、そのような table に対する論理削除、OPTIMIZE、通常の INSERT、またはフィルタ付き SELECTILLEGAL_INDEX (“Index of type ‘hypothesis’ is no longer supported”) で失敗し、DELETE mutation は無限に再試行されていました。現在はこの無効な索引は不活性として扱われます。つまり、merge/mutation 中は変更せずに引き継がれ、INSERT 時およびクエリプラン作成時にはスキップされ、さらに ALTER TABLE ... DROP INDEX で引き続き削除できます。#108217 (Groene AI)。
  • setting type_json_allow_duplicated_key_with_literal_and_nested_object が、JSON の型付き path で機能しない問題を修正しました。#108218 (Pavel Kruglov)。
  • 通常 projection / aggregate projection を持つ MergeTree table に対して make_distributed_plan = 1 でクエリを実行した際に、LOGICAL_ERROR (Different list of shards in child plans) が発生する問題を修正しました。#108256 (Groene AI)。
  • replaceRegexpOnereplaceRegexpAll を修正し、. がデフォルトで改行文字にも一致するようにしました。これにより、他の regular expression 関数との一貫性が保たれます。#108265 (linjiayu1025-collab)。
  • Array(Dynamic) または Array(Variant)accurateCastOrNullQBit にキャストする際に発生する論理エラーを修正しました。例: accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')#108288 (Groene AI).
  • index_granularity_bytesAggregateFunction の state カラムにも適用されるようになりました。以前は、この種のカラムでは granule のバイト上限が無視されていました (たとえば AggregatingMergeTree テーブルの uniqExact state や aggregating projections) 。その結果、設定した上限を大幅に超える granule が生成され、読み取り増幅やクエリ実行時のメモリ使用量が増えていました。 #108297 (Groene AI).
  • 論理更新 UPDATE/DELETE の condition が 2 回評価される問題を修正しました。これにより、非決定論的な condition では誤動作が発生し、決定論的な condition でも余分な処理が行われる可能性がありました。 #86032 をクローズします。 #108323 (ofeliacode).
  • headers_regexp regular expression が空文字列を許容する header がリクエストに存在しない場合に、定義済みの HTTP handler で発生する exception を修正しました。 #108324 (Vitaly Baranov).
  • 非定数の limit argument を指定した arrayPartialSort の問題を修正しました。 #108327 (Vitaly Baranov).
  • キャンセル済みまたは KILL された INSERT が、スキップ索引 の build 中に長時間実行され続ける問題を修正しました (たとえば、高カーディナリティなカラムに対する無制限の set(0) 索引) 。クエリがキャンセルされると、索引の build も速やかに停止するようになりました。 #108351 (Shaohua Wang).
  • primes table function からの SELECT がキャンセルに応答しない問題を修正しました。step (または limit) が大きい場合、KILL QUERY やタイムアウトの後でもクエリが長時間実行され続けることがありましたが、これで速やかに停止するようになりました。 #108353 (Shaohua Wang).
  • 名前に INT という substring を含むデータ型名の解析を修正しました (たとえば、データ型の位置で使われる quantileInterpolatedWeighted のような関数風の名前) 。このような名前は MySQL の整数型と誤認され、最初の (...) argument グループが表示幅修飾子として暗黙に消費されていたため、クエリのフォーマットの往復変換が壊れる可能性がありました。 #108354 (Groene AI).
  • 不正な ARRAY JOIN の後にカンマと括弧付きの table リストが続く場合、本来は拒否されるべきところを cross join として誤って解析していた不整合を修正しました。 #108365 (Raúl Marín).
  • format_display_secrets_in_show_and_select が無効 (デフォルト) の場合、EXPLAIN actionsEXPLAIN headerEXPLAIN PIPELINE の出力で、encryptdecryptHMAC などの関数の secret argument を表示しないようにしました。 #108386 (Raúl Marín).
  • TO ターゲットを持つリフレッシャブルmaterialized view の CREATE OR REPLACE を修正しました。置き換え対象の view がすでにターゲットテーブルを所有しているため、誤って拒否されていました。 #108392 (Nikolay Degterinsky).
  • 不正な形式または同期がずれた native TCP protocol ストリームによって発生し得たサーバークラッシュ (Received signal 4, illegal instruction) を修正しました。クライアントが指定する初期アドレスは、解析前に数値の host:port 形式であることを検証するようになり、数値でないポートがトラップされた getservbyname libc 関数に渡されないようになりました。 #108410 (Groene AI).
  • シャットダウン中に、database の停止処理で例外がスローされた場合に発生していたサーバークラッシュを修正しました (たとえば、table の flush が ZooKeeper のタイムアウトに達した場合) 。シャットダウンシーケンスの残りがスキップされなくなり、サーバー終了前に system logs が flush され、それらのスレッドも join されるようになりました。 #108417 (Groene AI).
  • パターンに NUL (\0) バイトが含まれているときに、正規表現関数 (matchextractextractAllreplaceRegexpOnereplaceRegexpAll など) が誤った結果を黙って返していた問題を修正しました。NUL は RE2 と同様、通常のリテラルバイトとして扱われるようになりました。 #108427 (Alexey Milovidov).
  • http_options_response が設定されていない場合に、clickhouse-local が HTTP OPTIONS リクエストに対して空の応答を返していた問題を修正しました。これにより、クエリは動作しているにもかかわらず、Web UI (/play) では接続が壊れているように表示されていました。 #108428 (Alexey Milovidov).
  • distributed query で、構造的に同一の重複 ALIAS カラムを deduplicate しつつ、key = value 形式の named-collection 引数を持つ table function (たとえば oss(s3_conn, filename = '...')) を参照している場合に発生する LOGICAL_ERROR (Invalid action query tree node ...) 例外を修正しました。 #108435 (Groene AI).
  • Replicated database 内の協調型リフレッシャブルmaterialized view が、MULTI_READ 機能フラグをサポートしない Keeper 上で attach されていた場合に、起動時に発生し得たサーバークラッシュ (LOGICAL_ERROR: 'Unexpected exception in refresh scheduling') を修正しました (たとえば Keeper のダウングレード後) 。今後はサーバーを異常終了させる代わりに、その view を正常に停止します。 #108441 (Groene AI).
  • 並列レプリカ環境で MergeTree table から仮想カラムを選択する際に発生する NOT_FOUND_COLUMN_IN_BLOCK error (例: Column _part not found) を修正しました。これには、asterisk_include_virtual_columns = 1 を指定した SELECT * 経由の場合も含まれます。 #108451 (Groene AI).
  • SYSTEM RESET DDL WORKER の実行に、新しい SYSTEM RESET DDL WORKER privilege が必要になりました。以前は、認証済みの任意のユーザー (readonly を含む) がこれを実行でき、DDL worker の状態を繰り返しリセットして ON CLUSTER DDL を妨害できていました。 #108460 (Groene AI).
  • catboostEvaluate の model path を、file table function や dictionary sources と同様に user_files ディレクトリ内に制限しました。以前は、この関数は任意の filesystem path を包含チェックなしで受け入れていたため、user_files 外のファイルの存在確認や read のトリガーが可能でした。今後、model は user_files 内に配置する必要があります。 #108463 (Groene AI).
  • hasColumnInTable 関数に、ターゲットテーブルに対する SHOW COLUMNS privilege が必要になりました。これは DESCRIBE および SHOW CREATE TABLE に必要な grant と同じです。以前は、どのユーザーでも hasColumnInTable を呼び出してカラム名を調べたり、アクセスチェックなしで table や database の存在を確認したりできました。 #108464 (Groene AI).
  • mannWhitneyUTestrankCorrlargestTriangleThreeBucketsquantileGKsequenceMatch/sequenceCountgroupArrayIntersect の細工された aggregate function states のデシリアライズ時に、過剰なメモリ割り当てが発生する問題を修正しました。不正な state が巨大な要素数を宣言すると、数バイトの入力しかないのに server が数十 GB のメモリを割り当てようとする可能性がありましたが、そのような state は現在 TOO_LARGE_ARRAY_SIZE で拒否されます。#108465 (Groene AI).
  • S3 の 301 Moved Permanently response のリダイレクト先を remote_url_allow_hosts (RemoteHostFilter) に照らして検証するようにしました。これまでは AWS SDK の 301 処理で、response (Location header または <Endpoint> 要素) 内の攻撃者指定の endpoint が host チェックなしで追跡されていたため、悪意のある、または compromised された S3-compatible server が ClickHouse を任意の host にリダイレクトさせることができました (SSRF) 。307 のリダイレクト経路ではすでにこのチェックが行われており、現在は両方の経路で動作が統一されています。#108466 (Groene AI).
  • DataLakeCatalog データベースエンジンの従来の storage_aws_access_key_idstorage_aws_secret_access_keystorage_catalog_credentialstorage_auth_header 設定が、system.databases.engine_fullSHOW CREATE DATABASE に平文で表示される credential 漏えいを修正しました。これらは現在 [HIDDEN] としてマスクされます。#108470 (Groene AI).
  • ssl_certificate のユーザー識別において、単一の * ワイルドカードが名前の 1 つの部分にのみ正確に一致するよう修正しました (RFC 6125 6.4.3) 。これまでは CN または DNS: SAN subject 内のワイルドカード (たとえば *.corp.example.com) が、evil.deep.corp.example.com のような複数ラベルの name にも一致していたため、より深い subdomain 用 certificate の所有者がワイルドカード user として認証できてしまっていました。URI: SAN のマッチングは変更ありません。#108472 (Groene AI).
  • MySQL wire protocol における SQL 挿入を修正しました。SHOW TABLE STATUS LIKE の argument と、MySQL インターフェイス (port 9004) 経由で送信される SET <mysql_setting> の値は、書き換え後のクエリにそのまま連結されるのではなく、parse したうえで再度クォートされるようになりました。また、MySQL インターフェイス経由の KILL QUERY <id> が複数桁の connection id を黙って無視していた問題も修正しました。#108474 (Groene AI).
  • HTTP の query-string parameter として渡される機密性の高い値 (たとえば param_secret_key/param_aws_secret_access_key のような param_* query-parameter バインディング、password parameter、または S3 形式の signature parameter) が、system.text_log や OpenTelemetry spans にそのまま書き込まれないようになりました。Request URI のログ行では、名前から機密性が高いと判断される parameter の値は [HIDDEN] に置き換えられます。#108475 (Groene AI).
  • url table function および URL storage engine の schema inference 中に http_forbid_headers configuration を適用するようにしました。これまでは schema inference 中 (たとえば Regexp format や DESCRIBE) でも禁止された header がネットワーク越しに送信され、その response body が parse エラーに含まれることで secret が漏えいする可能性がありました。現在は inference 経路でネットワークアクセスを行う前に header filter がチェックされ、既存の urlCluster の動作と一致します。#108476 (Groene AI).
  • SELECT ... SAMPLE ... を query condition cache (設定 use_query_condition_cache、デフォルトで有効) と併用した際に誤った結果になる問題を修正しました。#108488 (Groene AI).
  • max_parser_depth が大きな値に設定されている場合に、[[[ ... ]]]array(array( ... )) のような深くネストした式が原因で発生していたサーバークラッシュ (stack overflow) を修正しました。 #108493 (Raúl Marín).
  • RabbitMQ table engine で、ハートビートの欠落によりブローカーが TCP RST を送信せずに AMQP connection を閉じた際、DROP TABLE またはサーバー停止時に無期限にハングする問題を修正しました。すべてのブロッキング event loop 呼び出しに 30 秒のタイムアウトを設定し、停止処理が必ず完了するようにしました。 #108497 (Aly Ayman).
  • internal query の一部として実行される secondary query は、今後 internal query として記録されます。 #108506 (Miсhael Stetsyuk).
  • ArrowFlight table engine と arrowFlight table function が、<remote_url_allow_hosts> の許可リストに従うようになりました。従来は connection の host と port が検証されていなかったため、クエリが許可リストにない host に到達できていました。 #108507 (Groene AI).
  • MySQL wire protocol コマンド COM_FIELD_LIST (mysql_list_fields) と COM_INIT_DB (USE database) に、それぞれの SQL 相当機能 (SHOW COLUMNS/DESCRIBE および USE) と同じアクセス制御が適用されるようになりました。従来は、ユーザーが一部のカラムにしか権限を持たない table のカラム名を開示できてしまい、さらに SHOW DATABASES privilege がなくても current database を切り替えられていました。 #108508 (Groene AI).
  • http_forbid_headers が大文字・小文字を区別せずに照合されるようになりました。HTTP header 名は大文字・小文字を区別しないため、Authorization を禁止すると、authorizationAUTHORIZATION、その他の表記違いもブロックされるようになりました。設定された header_regexp パターンも、明示的に (?i) フラグを付けなくても大文字・小文字を区別せずに照合されるようになりました。 #108509 (Groene AI).
  • distributed query が、まだ materialize されていない MATERIALIZED CTE を external table として参照し、かつ remote source が遅延生成される場合に発生しうるサーバークラッシュ (segmentation fault) を修正しました。 #108547 (Groene AI).
  • query condition cache (use_query_condition_cache = 1) が、別のスキップ索引の組み合わせで実行されたクエリに対してスキップ索引由来の mark 除外を再利用してしまい、誤った結果を返す問題を修正しました。たとえば、use_skip_indexes = 0ignore_data_skipping_indices、または use_skip_indexes_for_disjunctions のモードが異なる場合です。スキップ索引由来の cache entries は、実際に実行された有効なスキップ索引の組み合わせをキーにするようになりました。 #108548 (Groene AI).
  • DateTime64 argument を取る changeYear, changeMonth, changeDay, changeHour, changeMinute, changeSecond に関する複数の不具合を修正しました。結果カラムが argument の scale ではなく、ハードコードされたデフォルト scale 3 で作成されていたため、結果を arrayPushBack/arrayPushFront/arrayConcat に渡すと LOGICAL_ERROR (writeSlice expects same column types) が発生していました。また、ナノ秒精度 (scale 9) の入力では DECIMAL_OVERFLOW が発生し、epoch 以前の sub-second 入力では誤った calendar second が返されていました。あわせて、DateTime64 に対する timeSlots で、宣言された return type においてオプションの Size argument の scale が無視され、Size の最大 scale で誤った timestamp が返される問題も修正しました。 #108551 (Groene AI). #108681 (Takumi Hara). #108994 (Groene AI).
  • enable_identifier_resolve_cache が有効 (既定) な場合に、褃合predicateに GROUP BY 内でエイリアスを付けて再度参照すると発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。#108553 (Groene AI).
  • STREAM 読み取り (SELECT DISTINCT ... FROM table STREAM) に対して DISTINCT を実行した際に発生する論理エラー (Equal values are not contiguous within the range assumed to be sorted) を修正しました。STREAM 読み取りではソートキー順ではなくコミット順で行が生成されるため、read-in-order の最適化は STREAM 読み取りには適用されなくなりました。#108568 (Groene AI).
  • 2 つのケースで、projections がカラムの宣言された DEFAULT 値 (例: -1) ではなく、型の既定値 (例: 0) を返していた問題を修正しました。1 つ目は、projection 作成後に ALTER TABLE ... ADD COLUMN ... DEFAULT で追加されたカラムを読み取る場合です (基となるテーブルからの読み取りはすでに正しく動作していました) 。2 つ目は、wide part 上でそのカラムの TTL が期限切れになった後です。#108569 (Shaohua Wang). #109013 (Shaohua Wang).
  • S3 へのアップロード (たとえばバックアップ) で、一時的な読み取りエラーの後に再試行した際に発生しうる ReadBuffer is canceled. Can't read from it. エラーを修正しました。#108573 (Groene AI).
  • ATTACH PARTITION ... FROM が、主キーは等価でも宣言方法が異なるテーブル (一方は明示的な PRIMARY KEY、もう一方は ORDER BY から暗黙的に導出) を拒否していた問題を修正しました。#108590 (Jordi Orihuela).
  • 複数のテキスト索引が部分的に materialized されている場合に、テキスト索引からの direct read が失敗する問題を修正しました。#108530 を修正します。#108607 (Anton Popov).
  • DESCRIBE loop('db', 'table') および DESCRIBE loop(<inner table function>)SHOW COLUMNS / ソースアクセスチェックを回避し、権限のないユーザーでもテーブルのカラムスキーマを読み取れてしまうメタデータ漏えいを修正しました。#108624 (Groene AI).
  • S3Queue および AzureQueue テーブルエンジンの _etag 仮想カラムを修正しました。宣言されているにもかかわらず一度も populate されていなかったため、SELECT _etag は常に空文字列を返していました。これで S3 エンジンや s3 table function と同様に、オブジェクトの ETag を返すようになりました。#108625 (Groene AI).
  • timestamp カラムが固定の数値 UTC オフセット (例: +05:30, -08:00, 00:00) または非 IANA マーカー fixed を timezone として持つ ArrowArrowStream、および Arrow ベースの ORC ファイルを読み取れない問題を修正しました。従来は Cannot load time zone ... (BAD_ARGUMENTS) で失敗していました。#108633 (Groene AI).
  • SEMI/ANTI join に join_algorithm = 'full_sorting_merge' を使用した場合に発生する例外 (LOGICAL_ERROR: Join is supported only for pipelines with one output port または NOT_IMPLEMENTED: MergeJoinAlgorithm is not implemented for strictness Semi) を修正しました。これには、相関のある EXISTS サブクエリのデコリレーションによって生成される join も含まれます。full_sorting_merge は、実行できない strictness / kind の組み合わせを受け付けないようになったため、プランナーは別の有効な algorithm にフォールバックするか、その join を実行できないことを報告します。#108658 (Groene AI).
  • 多数の異なる短いトークンに対して positions = 1 でテキスト索引を構築する際に発生していた heap buffer overflow を修正しました。#108659 (Groene AI).
  • S3 から読み取る、または S3 に書き込むクエリが、S3 リクエストの実行中に (たとえば KILL QUERY により) キャンセルされた場合、紛らわしいネットワーク/S3 エラーではなく、キャンセルとして報告されるようになりました。特に、S3 へのバックアップまたは S3 からの復元がキャンセルされた場合、system.backupsBACKUP_CANCELLED/RESTORE_CANCELLED が報告されるようになりました。#108673 (Julia Kartseva).
  • 古いバージョン (25.12 以前) で不正な auth_header を指定して作成された DataLakeCatalog データベースが、26.2 以降へのアップグレード後にアタッチできず、その結果サーバーが起動できなくなる問題を修正しました。auth_headerCREATE 時にのみ検証されるようになり、ATTACH 時には起動中ではなく初回使用時に遅延してカタログが構築されるため、設定ミスのある、または到達不能な単一のカタログデータベースがサーバー起動を妨げることはなくなりました。#108674 (Groene AI).
  • Nullable(Tuple(...)) カラムの非 Nullable な LowCardinality 要素がサブカラムとして使用された場合 (たとえばソートキーとして) に、マージ中に発生していた論理エラー (Sort order of blocks violated) と不正な読み取りを修正しました。#108679 (Groene AI).
  • 同じ Distributed テーブルに対する DROP TABLESYSTEM FLUSH DISTRIBUTED が同時実行された際に起こりうるクラッシュ (use-after-free) を修正しました。#108684 (Groene AI).
  • Azure アカウントの秘密鍵の Base64 デコード時に発生するクラッシュを修正しました。この問題は、秘密鍵が有効な Base64 でない場合に azureBlobStorage (および関連する Azure の table function やストレージ) 経由で発生する可能性がありました。>= 0x80 のバイトがあると範囲外読み取りが発生し、さらに任意の不正なバイトで未定義動作が発生していました。現在は不正な秘密鍵は適切に拒否されます。#108716 (Groene AI).
  • Distributed テーブル上のサブクエリが、同じ式に展開される 2 つ以上の ALIAS カラム (たとえば a1 String ALIAS toString(x), a2 String ALIAS toString(x)) を読み取り、そのサブクエリが外側のクエリに渡される場合 (例: SELECT count() FROM (SELECT a1, a2 FROM dist GROUP BY a1, a2)) に発生していた NUMBER_OF_COLUMNS_DOESNT_MATCH エラーを修正しました。#108725 (Groene AI).
  • CREATE OR REPLACE MATERIALIZED VIEW ... POPULATE により、新しい materialized view がソーステーブルをサブスクライブしないままになり、replace 後に挿入されたすべての行が静かに失われていた問題を修正しました。#108728 (Alexey Milovidov).
  • Distributed テーブルのシャーディングキーが、たとえば if(1, toInt32(id), toInt32(id) + 1) のようにアナライザによって定数畳み込みされる式であり、optimize_skip_unused_shards = 1 のときに発生していた例外 (Cannot find sharding key column、および debug / sanitizer build ではサーバー abort) を修正しました。#108737 (Groene AI).
  • GROUPING SETS/ROLLUP/CUBELowCardinality の定数グループ化キーと group_by_use_nulls を使用した際に発生していた論理エラー (Bad cast from type DB::ColumnNullable to DB::ColumnString) と、誤った結果が返る可能性を修正しました。#108771 (Alexey Milovidov).
  • LowCardinality(FixedString) (または LowCardinality(Nullable(FixedString))) のキー カラムがキー内で関数でラップされている場合、たとえば PARTITION BY sipHash64(k) % NWHERE k = 'literal' のようなケースで、パーティションおよび主キーの pruning が暗黙的に無効化されていた問題を修正しました。このようなクエリでは pruning が行われず、すべてのパーティションがスキャンされていました。 #108777 (Groene AI).
  • Alias table 経由、または TimeSeries table への INSERT ... SELECT が、たとえば timeout_overflow_mode = 'break' のように例外を伴わずにキャンセルされた際、論理エラー (debug および sanitizer builds での server abort) が発生する問題を修正しました。 #108783 (Groene AI). #108796 (Shaohua Wang).
  • groupConcat を、String 要素がスパースに格納された Tuple に適用したときに発生する Bad cast from type DB::ColumnSparse to DB::ColumnString 論理エラー (debug および sanitizer builds での server abort) を修正しました。 #108790 (Groene AI).
  • Map の値に LowCardinality を含むネストされた Map がある場合に、mapFiltermapSortmapReverseSortmapPartialSortmapConcatTYPE_MISMATCH が発生する問題を修正しました。例: mapFilter((k, v) -> 1, map('a'::LowCardinality(String), map('x'::LowCardinality(String), 'y'))). #108798 (Groene AI).
  • insert_quorum = 'auto' で、生存中のレプリカが過半数未満の場合に inserts が事前に拒否されなかった問題を修正しました。このような inserts は、ローカル part を書き込んだ後に UNKNOWN_STATUS_OF_INSERT で timeout するのではなく、今後は TOO_FEW_LIVE_REPLICAS により即座に失敗します。 #108800 (Gagan Dhakrey).
  • JOINWITH TOTALS 行に、join の片側にある定数サブクエリ由来の定数値ではなく、デフォルト値 (たとえば 0) が含まれることがある bug を修正しました。この誤った結果が現れるのは、一部の JOIN 順序、または query_plan_join_swap_table setting を使用した場合のみでした。 #108807 (Vladimir Cherkasov).
  • server の shutdown と S3Queue/AzureQueue table の shutdown が同時実行された際に発生し得た segmentation fault (null-pointer dereference) を修正しました。 #108810 (Miсhael Stetsyuk).
  • シグナルスタックサイズが大きい CPU (たとえば AMX 対応カーネル上の Intel Sapphire Rapids / Granite Rapids) で動作する glibc builds において、signal alt-stack size がページサイズの倍数に切り上げられていなかったために発生していた、起動時 abort (Cannot allocate ThreadStackEINVAL) を修正しました。 #108813 (Groene AI).
  • 以前にキャンセルされたクエリによって同期が崩れたままの connection がプールから再利用された際に、distributed queries が UNEXPECTED_PACKET_FROM_SERVER (expected TablesStatusResponse, got ProfileInfo) で断続的に失敗する問題を修正しました。 #108854 (Alexey Milovidov).
  • 分散テーブルに対して複数の LowCardinality 引数を持つ関数呼び出しで発生し得た論理エラー (リリースビルドでは例外、debug および sanitizer ビルドでは server の異常終了) を修正しました。たとえば、remote table function で GROUP BY キーとして使用される concatAssumeInjective((SELECT toLowCardinality('p')), s) です。表示されていたメッセージは、Default functions implementation for LowCardinality is supported only with a single LowCardinality argument または Expected the argument ... to have N rows, but it has M でした。#108871 (Groene AI).
  • reinterpret(x, 'Decimal128(scale)') (および Decimal32/Decimal64/Decimal256/DateTime64 の変換先) で、変換元と変換先の物理型が同じ場合に、要求された変換先の scale ではなく変換元の scale を内部 scale とする結果カラムが生成される問題を修正しました。値自体は正しかったものの、カラムオブジェクトの構造が宣言された型と一致していませんでした。#108878 (Groene AI).
  • MergeTree テーブルに対する DROP/DETACH/MOVE/REPLACE PARTITION が、以前の同種の操作が中断され (たとえばロールバックされた transaction やクラッシュ) 、古い tmp_empty_<part> directory が残っている状態で実行された場合に、debug および sanitizer ビルドで server を異常終了させる可能性があった LOGICAL_ERROR (New empty part is about to materialize but the directory already exist) を修正しました。今後は失敗する代わりに、この古い directory が回収されます。#108879 (Groene AI).
  • ClickHouse Keeper が Create2 レスポンスの Stat で誤って dataLength = 0 を返していた問題と、ClickHouse ZooKeeper client が Create2 レスポンスの Stat をデシリアライズしていなかった問題を修正しました。#108909 (unintended).
  • clickhouse-local= の直後に記述された空のオプション値 (たとえば --format_csv_null_representation='') を拒否していた問題を修正しました。現在は --format_csv_null_representation "" および SET format_csv_null_representation = '' と同様に動作します。#108910 (Vismay).
  • 名前付き要素と名前なし要素が混在する Tuple データ型 (たとえば Tuple(a UInt8, UInt16)) をフォーマットする際に、debug および sanitizer ビルドで server を異常終了させていた LOGICAL_ERROR (Inconsistent AST formatting) を修正しました。#108915 (Groene AI).
  • GROUPING SETSROLLUP、または CUBEmax_threads > 1 を併用して uniqExact aggregate states をマージする際に発生していた segmentation fault を修正しました。#108928 (Raúl Marín).
  • lazy なカラムレプリケーション (enable_lazy_columns_replication) が有効な場合に、バッチ途中のエラー後に INSERT がロールバックされると (たとえば Buffer テーブル、非同期挿入、または Kafka/RabbitMQ/FileLog engine で) 、誤った結果や範囲外読み取りが発生する可能性があった問題を修正しました。#108935 (Groene AI).
  • join_any_take_last_row が、自動的な spilling to disk を使用する join を含む、サポート対象のすべてのハッシュベース join パスで反映されるようになりました。#108936 (János Benjamin Antal).
  • アナライザのバグを修正しました。JOIN の片方のテーブルに対する FINAL (例: FROM t1 FINAL JOIN t2) が、誤って結合先の他のテーブルにも適用されており、その結果、この種のクエリが遅くなる可能性がありました。#108979 (Vladimir Cherkasov).
  • アナライザーを無効にした状態で、一方のブランチが並列レプリカ付きの GROUP BY GROUPING SETS を使用し、もう一方のブランチが FINAL を使用する UNION ALL/INTERSECT/EXCEPT において発生しうる LOGICAL_ERROR (“Cannot find __grouping_set column in header of MergingAggregatedTransform with grouping sets”、または “Chunk info was not set for chunk in MergingAggregatedTransform”) を修正しました。#109003 (Groene AI).
  • automatic_parallel_replicas_mode を有効にし、かつ parallel_replicas_min_number_of_rows_per_replica が 0 より大きい場合に、自動並列レプリカプランナーで発生しうる LOGICAL_ERROR を修正しました。#109011 (Groene AI).
  • MsgPack フォーマットの schema inference 中に発生していた過剰なメモリ割り当てを修正しました。配列/map/string/binary のヘッダーで巨大な要素数が宣言された破損入力によって、単一の数 GB 規模の割り当てが発生することはなくなり、不正な入力として拒否されます。これにより、リリース build でのメモリ不足状態 (および sanitizer 下での allocation-size-too-big abort) も修正されます。#109019 (Groene AI).
  • サーバー上で解釈される DateTime/DateTime64 文字列リテラル (非同期 INSERTSELECT リテラル) で use_client_time_zone が無視される問題を修正しました。use_client_time_zone が有効な場合、クライアントは自身のローカルタイムゾーンを session_timezone として伝播するようになり、サーバー側での解析が同期 INSERT の経路と一致するようになりました。#109051 (Groene AI).
  • query_plan_optimize_lazy_final が有効で、かつ WHERE フィルターが部分的に PREWHERE にプッシュダウンされる (optimize_move_to_prewhere_if_final 経由) 場合に発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。#109073 (Groene AI).
  • クエリ内で b.* のような修飾付きアスタリスクを使用し、その b が別のテーブルの非複合カラムと同名のテーブル (またはサブクエリ/CTE) エイリアスである場合に発生するエラーを修正しました。このようなクエリは失敗しなくなり、b のすべてのカラムを正しく選択できるようになりました。#109078 (Vladimir Cherkasov).
  • 相関サブクエリが join にデコリレートされ、かつソース relation が同じ column name を複数回持つ場合に発生する Block structure mismatch in JoinStep 論理エラー (debug および sanitizer builds ではサーバー abort) を修正しました。例: WITH t AS (SELECT number, * FROM numbers(3)) SELECT *, (SELECT t.number WHERE t.number >= 0) FROM t (correlated_subqueries_default_join_kind = 'right' の場合) 。#109114 (Groene AI).
  • ファイルシステムキャッシュ経由で読み取るクエリが、KILL QUERY でキャンセルされた後も進行中のダウンロードを待ち続けてハングすることがある問題と、そのような待機によってリフレッシュが停止したリフレッシャブルmaterialized view を drop または SYSTEM STOP VIEW した際に処理がブロックされる問題を修正しました。#109116 (Murphy).
  • materialized view を持つテーブルへの insert 時に parallel_view_processing 設定が無視される問題を修正しました。25.10 以降、この設定に関係なく view は常に並列に実行されていました。#109170 (Antonio Andelic).
  • INSERT のカラムリストで、t.* LIKE '<pattern>' / t.* ILIKE '<pattern>' と書かれた修飾付きカラムマッチャーは受け付ける一方、その正規形である t.COLUMNS('<regexp>') は拒否するというパーサーの不整合を修正しました。これにより、クエリフォーマットの往復変換が壊れる問題 (および debug / sanitizer builds でサーバーが abort する問題) も解消されます。#109176 (Groene AI).
  • ProfileEvents の増分が単調増加しない問題を修正しました。NetworkReceiveBytesAIOWriteBytes のカウンターは、ソケットタイムアウトや AIO の失敗時に負の値だけ増加してしまい (巨大な値にラップアラウンドする) 、MemoryOvercommitWaitTimeMicroseconds は非単調クロックで計測されていました。 #109180 (Azat Khuzhin).
  • ArrowArrowStreamAvro 形式、および従来の ORCParquet リーダーでのスキーマ推論を修正しました。nullable な struct カラムに対して、Nullable(Tuple) 型が許可されていないにもかかわらず Nullable(Tuple) を返していた問題を解消しています (allow_experimental_nullable_tuple_type は無効) 。DESCRIBECREATE TABLE で拒否される型を返していたため、推定したスキーマを使ったテーブル作成やデータ挿入は Nullable Tuple type is not allowed エラーで失敗していました。 #109185 (Nihal Z. Miaji).
  • 相関付き EXISTS およびスカラーサブクエリで、相関がサブクエリのプロジェクションにのみ現れ、かつ非相関の WHERE 句と組み合わさる場合に誤った結果になる問題を修正しました (サブクエリがすべての行に対して false / NULL と評価される可能性がありました) 。 #105760 を修正しました。 #109186 (Dmitry Novik).
  • CREATE USER ... HOST LIKE 'a', 'b' (および同等の ALTER USER) で、最初の pattern だけが暗黙的に保持されていた問題を修正しました。指定したすべての HOST LIKE patterns が、ユーザーの host allow-list に保存されるようになりました。 #109187 (Groene AI).
  • アナライザ使用時に、Distributed engine テーブル経由でテーブルをクエリすると、mapValues(map) または mapKeys(map) に定義されたテキスト索引が暗黙的に使われない問題を修正しました。この索引はローカルテーブルおよび cluster/remote table functions 経由では使われていましたが、Distributed engine テーブル経由のクエリではスキップされていました (force_data_skipping_indices 有効時は INDEX_NOT_USED で失敗していました) 。 #109188 (Groene AI).
  • Replicated database に対して DDL query を実行する際、Keeper 内のホストごとの finished status ノードがすでにクリーンアップされていると、debug ビルドおよび sanitizer ビルドでサーバーが異常終了する可能性のあった誤った LOGICAL_ERROR (There was an error on <host>: Cannot obtain error message (probably it's a bug)) を修正しました。 #109192 (Groene AI).
  • 絶対値が Int32 をオーバーフローする指数を持つ SAMPLE 比率 (例: SAMPLE 1e-3000000000) が、暗黙的に SAMPLE 1 として扱われる問題を修正しました。 #109197 (Raúl Marín).
  • SYSTEM PREWARM PRIMARY INDEX CACHE ... ON CLUSTER のアクセスチェックを修正しました。誤って SYSTEM PREWARM PRIMARY INDEX CACHE ではなく SYSTEM PREWARM MARK CACHE privilege を要求していました。 #109198 (Raúl Marín).
  • カスタム disk setting (SETTINGS disk = disk(...)) を使って作成された MergeTree テーブルで、ALTER queries が失敗する問題を修正しました。 #63019 を修正しました。 #109199 (Mikhail Artemenko).
  • ウィンドウコンテキスト (OVER ()) の aggregate functions cramersVcramersVBiasCorrectedcontingencytheilsU の state と、通常の aggregation の state を、連鎖した集合演算 (EXCEPT, INTERSECT) やネストした UNION ALL で組み合わせた後、たとえば -Merge combinator 経由で読み取ると server が crash する問題を修正しました。 #109200 (Groene AI).
  • 定数の ON 条件を持つ ANY JOIN (例: t1 ANY INNER JOIN t2 ON 1) で誤った結果が返される問題を修正しました。この query は ANY join result ではなく、完全なデカルト積を返していました。 #109207 (Vladimir Cherkasov).
  • deduplication を伴う非同期挿入で、optimize_on_insert によって inserted block が空になる場合 (たとえば SummingMergeTree で行の合計が 0 になる場合) に server が crash する問題を修正しました。 #109229 (Den Kalantaevskii).
  • SYSTEM DROP REPLICA および SYSTEM DROP DATABASE REPLICA ... FROM ZKPATH について、空またはルートのみの ZooKeeper パス を parse 時に BAD_ARGUMENTS で拒否し、補助 Keeper パス を名前付き Keeper に振り分け、さらに Keeper パス を正規化することで、ローカルの自己保護チェックが意図した レプリカ を誤って対象にしたり、保護を回避されたりしないよう修正しました。 #109230 (Groene AI).
  • URL スコープの <s3> endpoint block が、トップレベルの <s3> デフォルトより優先されるよう、S3 settings の優先順位を修正しました。 #109251 (Bharat Nallan).
  • INSERT INTO TABLE FUNCTION (たとえば remotefile) でインラインの VALUES data を使い、server 自身がそのインライン data を parse する場合 (send_table_structure_on_insert_with_inline_data = 0) に、カラム DEFAULT 値が適用されない bug を修正しました。DEFAULT を持つ非 Nullable カラムに明示的に NULL を insert すると、宣言された default ではなく 0 になっていました。現在は通常の table INSERT および HTTP protocol と同じ動作になります。 #109258 (Groene AI).
  • Replicated database 内で、s3Cluster (および fileCluster/urlCluster などの他の cluster table functions) からの CREATE TABLE ... AS SELECT が、NOT_FOUND_COLUMN_IN_BLOCK により失敗する問題を修正しました。 #109266 (Groene AI).
  • data lake catalog database に対して SHOW TABLESSELECT ... FROM system.tables が異なる結果を返していた問題を修正しました。ClickHouse が読み取れない tables は、今後は両方で一貫して非表示になります。 #109273 (Smita Kulkarni).
  • projections を持つ MergeTree table を、enable_block_number_column または enable_block_offset_column setting が有効な状態で merge すると、不要な _block_number/_block_offset カラムを含む projection parts が生成される bug を修正しました。その結果、merge 後の projection part は projection 定義や insert で生成された projection parts と一致しなくなり、CHECK TABLEOPTIMIZE ... DRY RUN で corrupted (CORRUPTED_DATA) と報告されていました。 #109284 (Groene AI).
  • 2 フィールドの {key, value} records からなる Avro array を ClickHouse の Map カラムとして読み取れるようにしました。これは、非 string の key を持つ MAP<K, V> に対して Iceberg と Spark が生成する encoding です (Avro ネイティブの maps は string key のみをサポートします)。以前はそのような file は Array(Tuple(key, value)) としては読み取れましたが、Map(K, V) としては読み取れず、Type Map(...) is not compatible with Avro array で失敗していました。 #109289 (Groene AI).
  • 必須の索引引数が省略された場合に CREATE HYPOTHETICAL INDEX ... TYPE set (および ngrambf_v1/tokenbf_v1) で発生していたサーバークラッシュを修正しました。こうしたステートメントは、今後は明確なエラーを返して拒否されます。#109294 (Groene AI).
  • enforce_keeper_component_tracking サーバー設定が有効な場合に、メタデータを Keeper に格納する MergeTree テーブルで、KILL MUTATION などの mutation 操作によって発生しうる LOGICAL_ERROR (Current component is empty) を修正しました。#109297 (Groene AI).
  • scale が 9 より粗い DateTime64 カラムに、約 2262 年以降の ORC timestamp を読み込む際の問題を修正しました。ネイティブの ORC リーダーは、これまで全ての timestamp を固定の DateTime64(9) 中間形式を経由して変換していましたが、これはナノ秒 scale では Int64 の overflow を引き起こすため、要求された DateTime64 の scale (たとえば Iceberg が生成する DateTime64(6)) であれば値を表現できる場合でも、VALUE_IS_OUT_OF_RANGE_OF_DATA_TYPE として拒否していました。現在は timestamp を要求された scale で直接読み込むようになり、対象の scale でも値を保持できない場合は date_time_overflow_behavior が適用されます。#109302 (Groene AI).
  • サーバーとして動作する clickhouse-local は、SYSTEM START LISTEN HTTP の後、対話用の PrettyCompact 既定値ではなく、clickhouse-server と同じ TabSeparated 既定の出力フォーマットで HTTP connection を処理するようになりました。これにより、clickhouse-connect などのドライバーから HTTP 経由で clickhouse-local に接続する際の問題が修正されます。対話型の端末セッションでは、引き続き結果は PrettyCompact で表示されます。#109362 (Alexey Milovidov).
  • S3 multipart upload で一時的に発生する Code: 499 ... InvalidPart (S3_ERROR) エラーを修正しました。MinIO では CompleteMultipartUpload 実行時に、アップロード直後の part が一時的に存在しないように報告されることがありますが、このエラーは、すでに処理対象となっている NoSuchKey と同様に、s3_max_unexpected_write_error_retries の範囲内で再試行されるようになりました。#109364 (Groene AI).
  • 別のカラムに、インライン alias を定義して参照する DEFAULT または MATERIALIZED expression がある場合、ALTER TABLE ... DROP COLUMN で発生する UNKNOWN_IDENTIFIER エラーを修正しました。#109374 (Alexey Milovidov).
  • GROUPING SETSROLLUPCUBE で発生しうる、二段階 sets を使った uniqExact aggregate states の並列 merge における data race (およびその結果としてまれに発生するクラッシュ) を修正しました。#109389 (Groene AI).
  • 2 つ以上の shard を持つクラスターで Distributed テーブルを読み取る CREATE TABLE ... ON CLUSTER ... AS SELECT の実行時に発生するエラー (NOT_FOUND_COLUMN_IN_BLOCK、または古いバージョンでは std::bad_function_call) を修正しました。#109407 (Alexey Milovidov).
  • TTL ... GROUP BY (ロールアップ) を持つテーブルの merge を修正しました。すでに完全に集計済みのパーツが merge のために何度も無限に再スケジュールされることがあり、さらに MATERIALIZED カラムや有効な永続仮想カラムを持つテーブルが正しく処理されていませんでした。これらのカラムは現在 any で集計されます。#105647 をクローズします。#109410 (Mikhail Artemenko). #109532 (Mikhail Artemenko).
  • 右辺の引数に素の配列カラムを指定した IN が、誤った結果 (常に false) を黙って返したり、例外を投げたりしていた問題を修正し、x IN arrhas(arr, x) と同様に動作するようにしました。#109416 (Alexey Milovidov).
  • 永続仮想カラム _block_number/_block_offset に対する暗黙的な min-max 索引を持つ MergeTree テーブルで、ALTER TABLE 操作 (RENAME/ADD/MODIFY COLUMN、および新たに挿入された part を持つテーブルでの MATERIALIZE INDEX) 時に UNKNOWN_IDENTIFIER エラーが発生する問題を修正しました (add_minmax_index_for_block_number_column/add_minmax_index_for_block_offset_column で有効化) 。#109428 (Groene AI). #110236 (Groene AI).
  • 非 const の Array(LowCardinality(T)) 引数に対する arrayFold で発生する LOGICAL_ERROR を修正しました (例: arrayFold((acc, x) -> acc + x, materialize([1, 2, 3]::Array(LowCardinality(Int64))), toInt64(0))) 。この問題により、Arguments of 'plus' have incorrect data types で失敗していました (debug および sanitizer ビルドでは server abort) 。#109462 (Groene AI).
  • ReplicatedMergeTree テーブルに対する CHECK TABLE で、チェック中に一時的かつ再試行可能な ZooKeeper エラー (例: connection loss) が発生すると、正常な part が壊れていると報告される問題を修正しました。今後、このようなエラーは再試行可能なクエリエラーとして返されます。#109465 (Alexey Milovidov).
  • groupArrayLastMerge および largestTriangleThreeBuckets aggregate function における segfault を修正しました。aggregate function states の deserialization を検証するようにしたことで、壊れた state がメモリ範囲外アクセスを引き起こさないようになりました。#109485 (Miсhael Stetsyuk). #109492 (Miсhael Stetsyuk).
  • parallel_hash join algorithm に対してグローバルな max_rows_in_join / max_bytes_in_join 制限が適用されていなかった問題を修正しました。この問題により、join_overflow_mode = 'throw' を指定したクエリが SET_SIZE_LIMIT_EXCEEDED を発生させる代わりに、黙って成功することがありました。#109488 (Hechem Selmi).
  • 値が Int32 に収まらない BIGINT カラムでパーティション分割された Paimon table の読み取りを修正しました。こうしたパーティション値は切り詰められており (たとえば 9223372036854775807-1 になる) 、誤ったパーティションパスが生成され、filesystem error で失敗していました。#109510 (Groene AI).
  • equality delete file を持つ Iceberg tables の読み取り時に発生する crash を修正しました。equality delete file では nullable でも table schema では non-nullable のカラム (またはその逆) がある場合、delete file から読み取った値が未検証の cast によって異なる型のカラムに挿入されていました (column type confusion) 。その結果、カラムが破損し、server が crash していました。#109551 (Miсhael Stetsyuk).
  • MySQL の connect_timeout、read timeout、write timeout が有効にならない問題を修正しました。応答しない MySQL server への接続試行では、connect_timeout = 1 を指定していても 2 分以上ハングすることがありました。これは、sampling query profiler の定期シグナルが MySQL client の内部 poll deadline を繰り返しリセットしていたためです。#109592 (Shaohua Wang).
  • 非 transactional な TRUNCATE が、同じテーブルに insert を行った未コミットの transaction と同時実行された際に発生しうる LOGICAL_ERROR (creation_csn is not set while removal_csn is set to 1) を修正しました。このような TRUNCATE で、まだコミットされていない transaction によって作成された part が削除されることはなくなりました。#109598 (Tuan Pham Anh).
  • 物理的な null 許容性が要求された ClickHouse 型と異なる Parquet の struct カラムを読み取る際に発生する TYPE_MISMATCH エラーを修正しました。これにより、non-nullable な Parquet group を Nullable(Tuple(...)) として読み取れるようになり、ネイティブの Parquet リーダーでも、物理的に nullable な struct (ParquetOPTIONAL group) を Nullable(Tuple(...)) として読み取れるようになりました。#109615 (Groene AI). #109898 (Groene AI).
  • マルチクエリストリーム内の INSERT ... VALUES の後ろに SQL comment (たとえば VALUES (1) -- comment) が続く場合に、server-side の inline insert parsing パス (send_table_structure_on_insert_with_inline_data = 0) で発生していたサイレントなデータ損失を修正しました。末尾の comment が終端の ; を越えて行データとして走査され、その結果、ストリーム内の後続クエリが黙ってスキップされていました。#109643 (Groene AI).
  • 起動時エラーの発生後、server のシャットダウン中というごく短いタイミングでクエリが到着した場合に発生する segfault を修正しました。#109675 (Miсhael Stetsyuk).
  • ALTER TABLE ... APPLY PATCHES で論理更新をマテリアライズした後に、古い skip index (textbloom_filter など) や projection が残る問題を修正しました。従来は、patch によって更新されたカラムに依存する index および projection ファイルが更新されないままだったため、それらを使用するクエリが誤った結果を返す可能性がありました (たとえば hasToken が更新済みの行を見落としたり、使い終わったパッチパートが削除された後に projection が古い集計結果を返したりすることがありました) 。#109709 (Groene AI).
  • クエリが name/database カラムだけを読み取る場合に、database ごとの grant を持つユーザーについて system.tables が黙って database をスキップしてしまう問題を修正しました。導入バージョン 26.2。#109723 (Samay Sharma).
  • output_format_arrow_low_cardinality_as_dictionary = 1 のときに、LowCardinality(Time) カラムを Arrow フォーマットに書き込む際に発生する LOGICAL_ERROR を修正しました。#109730 (Groene AI).
  • オブジェクトストレージが continuation token とともに空の listing page を返した場合に、ObjectStorageQueue/AzureQueue (および azureBlobStorage table function) が object を黙ってスキップしてしまう問題を修正しました。Azure Blob Storage ではこの挙動が発生することがあり (たとえば listing が内部パーティション境界をまたぐ場合) 、async list iterator は空ページを listing の終端と見なして token を破棄していました。現在は continuation token を追跡するようになりました。#109761 (Gal Ben Moshe).
  • timestamp (DateTime64) カラムでパーティション分割された Iceberg tables で、partition pruning によって行が返されなくなる問題を修正しました。#109764 (Den Kalantaevskii).
  • conv function で FixedString 引数に対して発生する ILLEGAL_COLUMN 例外を修正しました。これらは正しく String に cast されるようになりました。#109670 をクローズしました。#109771 (hp).
  • getClientHTTPHeader 関数は、RFC 9110 に従って、ヘッダー名を大文字小文字を区別せず扱うようになりました。特に、authorization ヘッダーは大文字小文字に関係なくフィルタリングされるようになりました。#103957 をクローズします。#109791 (Mikhail f. Shiryaev).
  • max_execution_time (timeout_overflow_mode = 'throw' の場合) で、クエリがときどきまったくキャンセルされない問題を修正しました。内部のタイムアウト監視が、より遅いデッドラインを持つクエリをすでに待機していると、その後に登録されたより早いデッドラインのクエリが完全に見落とされ、制限時間を大幅に超えて実行され続けることがありました。#109792 (Shaohua Wang).
  • gzip 圧縮された Iceberg メタデータファイルのファイル名を修正しました。ClickHouse はこれまで v{N}.gzip.metadata.json (HTTP の Content-Encoding トークン) として書き込んでいましたが、Iceberg の仕様では gz 拡張子の v{N}.gz.metadata.json が想定されています。その結果、Spark やその他の Hadoop カタログリーダーは ClickHouse が書き込んだメタデータを見つけられませんでした。ClickHouse は現在 v{N}.gz.metadata.json を書き込み、後方互換性のため従来の gzip 名も引き続き読み取ります。#109812 (Groene AI).
  • enable_join_runtime_filters = 1 (26.2 以降デフォルトで有効) での join において、build 側の join key が NULL 値を含む LowCardinality(Nullable(...)) で、ランタイムフィルタが bloom filter にフォールバックした際に、NOT_IMPLEMENTED エラー (“Method getDataAt is not supported for Nullable(String)”) が発生することがあった問題を修正しました。#109824 (Groene AI).
  • external database engine (例: PostgreSQL) は、UUID カラムに対する範囲比較 (>=><=<) をプッシュダウンしなくなりました。ClickHouse と外部データベースでは UUID の並び順が異なるため、これをプッシュダウンすると結果から行が暗黙のうちに欠落していました。現在は、このような predicates は ClickHouse 側で評価されます。#109833 (Vismay).
  • higher-order function が具体的な値を期待する箇所に lambda expression が渡された場合に発生するサーバークラッシュを修正しました (例: arrayFold(lambda, arr, another_lambda) における arrayFold の accumulator) 。このようなクエリは、enable_analyzer = 0 の場合、クラッシュする代わりに ILLEGAL_TYPE_OF_ARGUMENT で拒否されるようになりました。#109840 (Groene AI).
  • icebergLocal table function および IcebergLocal engine が、object storage の種別として local ではなく azure を宣言していた問題を修正しました。これにより、SETTINGS disk = '...' でローカルディスクを指定して使用した際、ディスク種別チェック (Disk type doesn't match) に失敗していました。#109872 (Pedro Ferreira).
  • 同じ source column で複数回パーティション化された Iceberg tables (例: PARTITIONED BY (hours(ts), ts)) の読み取りを修正しました。従来、このような table は Cannot add column ...: column with this name already exists (ILLEGAL_COLUMN) で失敗していました。#109895 (Groene AI).
  • 反転した (DESC) key column を持つ table で、part に final mark がない場合 (非 adaptive granularity、index_granularity_bytes = 0) に、primary key index が granule を誤って刈り込み、誤った query results になる問題を修正しました。#109901 (Nihal Z. Miaji).
  • 型のネストが内部の深さ制限を超えた際に、generateRandomStructure が無効な構造文字列を生成し、2 つのデータ型が連結されることがあった不具合 (例: Decimal32(7)IPv4) を修正しました。これにより結果をパースできなくなっていました。 #109928 (Groene AI).
  • Array(LowCardinality(Nullable(String))) (その形式で保存された Nested フィールドを含む) 上に text 索引を構築し、索引対象の配列に NULL 要素が含まれている場合に発生していた NOT_IMPLEMENTED error (Method getDataAt is not supported for Nullable(String) in case if value is NULL) を修正しました。索引構築時には NULL の配列要素が Array(Nullable(String)) と同様にスキップされるようになりました。 #110055 (Groene AI).
  • LowCardinality(Nullable(...)) カラム上に minmax スキップ索引を構築した場合に誤った結果になる不具合を修正しました。以前は、ストレージにプッシュダウンされた WHERE/PREWHERE/HAVING ... IS NULL 条件により、カラムに NULL 値が含まれていてもすべての granule が刈り込まれ、0 行が返されていました。 #110061 (Groene AI).
  • distinct_overflow_mode = 'break' を修正しました。DISTINCT はドキュメントどおり、制限に達するまでに蓄積された部分結果を返して、ソースの読み取りを停止するようになりました。以前は、max_rows_in_distinct / max_bytes_in_distinct を超えた chunk が破棄され (結果が切り詰められるか空になっていた) 、その後もクエリは入力の末尾まで読み取りとハッシュセットへの挿入を続けていたため、MEMORY_LIMIT_EXCEEDED に至ることがありました。 #110075 (Sergey Kuznetsov).
  • すべての position delete files より新しい非 Parquet 形式 (例: ORC) の data file を含む Iceberg table に対する OPTIMIZE TABLE で発生していた論理エラー ChunkInfoRowNumbers does not exist を修正しました。 #110107 (Alexey Milovidov).
  • max_bytes_in_distinctmax_bytes_in_set を修正しました。文字列の keys は、制限チェックでカウントされていなかったアリーナに保存されていたため、文字列 keys に対する DISTINCT / IN では、キー payload 全体の分だけバイト制限を超えるメモリを保持できていました (キー長に対して実質的に無制限) 。これらの制限は、ドキュメントどおりアリーナも考慮するようになりました。そのため、バイト制限に近い文字列 keys を持つクエリは、以前より早く正しく制限に達する場合があります。 #110120 (Sergey Kuznetsov).
  • identity (または scalar subquery の結果) が、ネストした LowCardinality を含む値をラップしており、クエリで WITH TOTALS/WITH ROLLUP を使用した場合に発生していた LOGICAL_ERROR (Bad cast from type ColumnLowCardinality to ColumnString) を修正しました。 #110138 (Groene AI).
  • 内側の次元サイズが 0 の Npy ファイルの読み取りを修正しました。materialized された行数と、最適化された count および最適化されていない count の結果が一致するようになりました。 #110146 (Yanjun Qiu).
  • 複数の keys でグループ化し、その sort order が grouping key の接頭辞にすぎない場合に、順序付き集約で二次時間的な増大 (および max_execution_time への非応答) が発生していた不具合を修正しました。 #110159 (Alexey Milovidov).
  • 相関のあるサブクエリ (例: exists((SELECT ...))) を含むフィルターが convert_query_to_cnf または optimize_and_compare_chain で最適化された際に発生していた論理エラー (Unexpected number of columns in result sample block) を修正しました。 #110187 (Alexey Milovidov).
  • DELETE または ALTER UPDATE の mutation で、その WHERE 条件または UPDATE の代入内のサブクエリに set operation (UNION/UNION ALL/UNION DISTINCT/EXCEPT/INTERSECT) を使用した際に発生していた例外 (UNION mode UNION_DEFAULT must be normalized) を修正しました。#110196 (Alexey Milovidov).
  • zip アーカイブの読み取り中 (たとえば zip バックアップからの RESTORE 時) に、同じアーカイブから先行して行われた読み取りがストリームの途中で失敗したあとに発生し得た ReadBuffer is canceled. Can't read from it. 論理エラー (debug/sanitizer build での server 異常終了) を修正しました。#110197 (Groene AI).
  • x IN (subquery) を含む mutation がプライマリキー解析中にサブクエリの set を構築している際、server のシャットダウンが遅くなり、KILL MUTATION が応答しなくなる問題を修正しました。set の構築は即座にキャンセルされるようになりました。#110198 (Alexey Milovidov).
  • 複数ノード構成で無限 append-entries ループに陥る代わりに、Keeper は協調 settings max_requests_batch_sizemax_requests_append_size0 に設定されている場合、それを拒否するようになりました。#110200 (Alexey Milovidov).
  • タプル式に対して ORDER BY とともに GROUP BY ALL を使用した際に発生していた NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。#110206 (Alexey Milovidov).
  • サブカラム (Nullable カラムの x.nullArrayarr.size0 など) を参照する CHECK 制約を持つ table への INSERT で発生していた NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。#110208 (Alexey Milovidov).
  • クォートが必要なカラム (例: @timestamp) をデフォルトの sort order が参照している Iceberg tables の読み取りを修正しました。このような table は、生成された storage の ORDER BY が生の column name から構築されていたため、SYNTAX_ERROR でパースに失敗し、読み取れなくなっていました。#110233 (Groene AI).
  • DataLakeCatalog (Iceberg/Glue) database の system.tables で、単一の table のメタデータを解決できない場合にクエリ全体が中断したり、その table が黙って欠落したりする問題を修正しました。このような table は、opened storage object を必要とするカラム (enginetotal_rows など) にはデフォルト値または NULL 値を設定したうえで、database_datalake_require_metadata_access に関係なく、name 付きで一覧に残るようになりました。壊れた table への直接アクセスでは、引き続きエラーが報告されます。#110242 (Groene AI).
  • quantileTDigest ファミリーの aggregate-function state カラムが GROUP BY キーとして使用され、複数の threads によって同時に serialize された場合に発生し得たクラッシュ (heap-buffer-overflow) を修正しました。#110263 (Groene AI).
  • Microsoft Fabric / OneLake の DataLakeCatalog table への INSERTIncorrectEndpointError (HTTP 400) で失敗する問題を修正しました。ADLS Gen2 (DFS) への書き込みを .blob host ではなく .dfs endpoint host にルーティングするようにしたためです。注: remote_url_allow_hosts を使用する場合、INSERT のために .blob (読み取り) と .dfs (書き込み) の両方の Fabric host を許可リストに含める必要があります。#110290 (Mohammad Lareb Zafar).
  • 特定の PRQL クエリ (SET dialect = 'prql') の解析時に server が abort する問題を修正しました。prqlc compiler 内の panic により、本来はクエリエラーとして報告されるべきところ、process が abort していました。#110316 (Groene AI).
  • projection のカラム集合が変更される前に書き込まれた projection part (たとえば、ALIAS カラムの参照元を materialize する方法が異なるバージョンをまたいでアップグレードした後や、projection で使われる ALIAS カラムの参照先を ALTER TABLE ... MODIFY COLUMN で変更した後) が、projection 経由で読み取られたり merge されたりした際に、誤ったクエリ結果が静かに返される問題を修正しました。欠落していたカラムは実データではなくデフォルト値で埋められていました。今後、このような part は基となるテーブルから読み取られ、merge 時には基となるデータから projection が再構築されます。#110328 (Shaohua Wang).
  • ORDER BY ... WITH FILLmax_execution_time を尊重せず、大きな補完範囲を生成する際にキャンセルに時間がかかる問題 (特に INTERPOLATE 使用時) を修正しました。#110332 (Alexey Milovidov).
  • UPDATE ..., DELETE ... のような複数コマンドの ALTER を Iceberg table に対して実行した際に発生する論理エラー (debug/sanitizer build での server abort) を修正しました。こうした mutations は今後、明確な NOT_IMPLEMENTED エラーで拒否されます。#110347 (Groene AI).
  • SELECT クエリが単独の table Identifier の直後で終わる場合 (例: ... FROM t COMMENT 'x') に、COMMENT が暗黙的 alias として誤って解釈され、その結果、comment が view/table に適用される代わりに誤解を招く構文エラーが発生するパーサーの bug を修正しました。#110372 (Aditya Kumar).
  • 深くネストした Array/Tuple/Map/Object literal をコピーまたは破棄した際に発生する server crash (ネイティブの stack overflow) を修正しました。たとえば、max_parser_depth を引き上げた状態で、非常に深くネストした literal を含むクエリです。#110393 (Raúl Marín).
  • vector search が期待より少ない行を返す可能性があった 2 つのケースを修正しました。vector_search_index_fetch_multiplier の値が 1.0 未満だと、計算された fetch 数が 0 に切り捨てられて空の結果になる可能性がありました (このような値は今後拒否されます) 。また、vector search optimization は LIMIT ... WITH TIES クエリではスキップされるようになりました。これは、この optimization が探索対象をちょうど N 個の候補に制限し、N 番目の行と同順位の行を落としていたためです。#110452 (Tamish Mhatre). #110453 (Tamish Mhatre).
  • IN (subquery) において、subquery に相関したサブクエリが含まれ、かつ Set が索引解析中に構築される場合に発生する、論理エラー Expected CommonSubplanReferenceStep to reference CommonSubplanStep、エラー Subplan cannot be used to build pipeline、および論理エラー Trying to extract chunk from ChunkBuffer before all inputs are finished を修正しました。#110491 (Alexey Milovidov).
  • 名前付き WINDOW 句の定義内でクエリパラメータの置換が行われない問題を修正しました。以前は、そこにある parameter は黙って未置換のまま保持され、未設定の Identifier parameter によって EXPLAIN SYNTAX 実行中に例外 Logical error: '!part.empty()' が発生する可能性がありました。#110506 (Alexey Milovidov).
  • 残存した txn_version.txt.tmp ファイルによってディスクレベルのメタデータが破損している場合に、object storage disk 上の MergeTree table で server の起動に失敗する問題を修正しました。#110519 (Alexey Milovidov).
  • バックグラウンドでの cache ダウンロードがファイルシステム以外のエラーで失敗した際 (たとえば Iceberg table で OPTIMIZE を実行中など) に、空の孤立した cache ファイルが残り、ファイルシステムキャッシュで論理エラー (Expected file ... not to exist) が発生することがあった問題を修正しました。#110549 (Groene AI).
  • Dynamic type のカウント、または JSON/Object パスのカウントが SIZE_MAX に近い破損した Native 形式の stream の読み取りを修正しました。このような不正な入力は、今後は未捕捉の std::length_error ではなく、明確な INCORRECT_DATA エラーで拒否されます。#110590 (Alexey Milovidov).
  • MaterializedPostgreSQL データベースエンジンで、table がまだ同期キューに残っている間にデタッチされた (または structure が変更された) 場合に発生し得たサーバークラッシュを修正しました。#110596 (Alexey Milovidov).
  • クライアントの SET param_<name> (および --param_<name> フラグ) で、parameter 名が limitoffsetmax_threadslog_comment などの組み込み設定名と一致した場合に誤動作する問題を修正しました。競合した設定によっては、クエリが CANNOT_PARSE_QUOTED_STRING で失敗したり、値が暗黙に正規化されたり (例: max_threads=0auto(N) になる) 、設定エイリアス名が失われたりしていました。また、そのような parameter があると、同じセッション内の以降のすべての SET param_* も壊れていました。#110597 (Raúl Marín).
  • DEFAULT expression を持ち、part 内で materialized されていないカラムの subcolumn 読み取りを修正しました (例: ALTER TABLE ADD COLUMN の後や ALTER TABLE MATERIALIZE COLUMN の実行中) 。これまでは、subcolumn が評価された DEFAULT expression ではなく型のデフォルト値で埋められており、そのような QBit カラムに対する転置ベクトル距離関数 (cosineDistanceTransposed など) が SIZES_OF_ARRAYS_DONT_MATCH エラーで失敗していました。これにより #110634 をクローズします。#110636 (Alexey Milovidov).
  • non_replicated_deduplication_window を有効にしたパーティション化 MergeTree table への INSERT で、LOGICAL_ERROR Invalid partition key size: 0 により失敗することがあった問題を修正しました。これは、async insert バッチが部分的にしか deduplicate されなかった場合 (insert_deduplication_token の一部が重複で、一部が新規だった場合) に発生していました。#110651 (Groene AI).
  • バックグラウンドの非同期挿入 flush は、KILL QUERY で kill されると速やかに停止するようになりました。従来は、大きなバッファ済みペイロードの flush が最後まで解析を続け、キャンセルを無視していました。#110652 (Shaohua Wang).
  • partial_merge JOIN 上に置かれた optimize_aggregation_in_order を伴う GROUP BY と、optimize_distinct_in_order を伴う DISTINCT が誤った結果を返す問題を修正しました。read-in-order optimization が partial-merge join を通じて伝播していましたが、この join は左入力を join key で再ソートするため、左 stream 本来の順序を保持しません。その結果、行が誤ってグループ化されていました。#110671 (Groene AI).
  • Date/Date32/DateTime64 値に対し、極端な MONTHWEEK、または DAY interval count を指定した toStartOfInterval で発生していた符号付き整数 overflow を修正しました。#110688 (Groene AI).
  • 並列レプリカが custom_key_sampling / custom_key_range モードで動作している際に、FROM にサブクエリを含むクエリで発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。こうしたクエリ (例: SELECT * FROM (SELECT id, k, v FROM t WHERE id < 20) ORDER BY k) は、以前は Not found column __table2.id in block ... で失敗していました。#110690 (Groene AI).
  • 先頭に空白を含む WKT 文字列 (例: readWKT(' POINT(1 2)')) を readWKT が拒否していた問題を修正しました。これらの文字列は、型付きの readWKTPoint/readWKTPolygon/… リーダーおよび WKT の文法では受け入れられます。#110706 (Groene AI).
  • Distributed table の上に構築された Merge table に対するクエリで、同じテキストインデックス predicate が PREWHEREWHERE の両方で使われた場合に発生する論理エラー (Column ... already added for reading、debug/sanitizer builds では server abort) を修正しました。#110710 (Groene AI).
  • 並列レプリカが有効な場合に、スカラーサブクエリまたは定数の参照ベクトルを指定して呼び出した QBit カラム向けの転置距離関数 (cosineDistanceTransposed など) で発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。これにより #110719 はクローズされます。#110729 (Alexey Milovidov).
  • ReplicatedMergeTree で、2 つのパーティション操作 (たとえば 2 つの MOVE PARTITION/REPLACE PARTITION クエリ、またはバックグラウンドの DROP_RANGE と競合する 1 つのクエリ) が、重複する範囲に対するバックグラウンドのパーツチェックを同時にキャンセルしたときに発生する、まれな LOGICAL_ERROR (Unexpected number of parts to remove from parts_queue、debug/sanitizer builds では server abort) を修正しました。#110738 (Groene AI).
  • Quantized(...) codec を持つカラムが別のシリアライゼーションの内側にラップされている場合に発生し得た Hash is not set for serialization 論理エラーを修正しました。たとえば、同名カラムの型が異なる SOURCES 上の Merge table (Variant にマージされる) で発生していました。#110776 (Groene AI).
  • median/quantile aggregate function の state に非常に大きな整数定数を乗算したとき (例: medianState(x) * 18446744073709551615) に server がハングする問題を修正しました。このクエリはキャンセルに応答しなくなり、無期限に実行される可能性がありました。#110779 (Groene AI).
  • 長さ 0 の interval を持つ quota (例: CREATE QUOTA q FOR INTERVAL 0 SECOND MAX queries = 1000) が消費された際に発生する server crash (整数のゼロ除算) を修正しました。現在は、0 以下の quota interval duration は quota 作成時に拒否されます。#110846 (Pedro Ferreira).
  • colLowCardinality のときに、throwIf(notLike(col, pattern)) (および関数に対する他の throwIf) が無条件に throw していた問題を修正しました。デフォルトの LowCardinality 実装では Dictionary 全体に対して throwIf を実行していましたが、Dictionary はどの行からも参照されていなくても予約済みのデフォルト値を常に保持しているため、その未使用スロットに 0 以外の値があると、条件を満たさないデータに対しても throwIf が throw していました。#110864 (Groene AI).
  • 並列レプリカおよび interserver secret で保護されたクラスター上での Distributed 読み取りで、クエリの有効なロール (SET ROLE または role パラメータ) をリモートノードに伝播するようにしました。従来はリモートノードがユーザーのデフォルトロールにフォールバックしていたため、行ポリシーの評価結果がイニシエーターと一致していませんでした。#110867 (Nikolay Degterinsky).
  • 初期スキーマにネストしたフィールド (Tuple/Array/Map) が含まれている場合に、ALTER TABLE ... ADD COLUMN の後で Icebergテーブルが重複したフィールドIDを生成してしまう不具合を修正しました。last-column-id は、ネストした子要素を含む割り当て済みフィールドIDの最大値を記録するようになったため、その後に追加したカラムがネストしたフィールドIDを再利用することはなくなり、ICEBERG_SPECIFICATION_VIOLATION (Duplicate field id) で読み取りが失敗することもなくなりました。#110884 (Groene AI).
  • Ed25519 SSH 秘密鍵 (CREATE USER ... IDENTIFIED WITH ssh_key ... TYPE 'ssh-ed25519'、または users.xml 内の同種の秘密鍵) を使用した際に、FIPSビルドで発生していたクラッシュを修正しました。Ed25519 は FIPS で承認されていないため、このような秘密鍵は今後、明確な LIBSSH_ERROR エラーで拒否されます。#110891 (Konstantin Bogdanov).
  • QBit カラムに対する転置距離関数 (cosineDistanceTransposedL2DistanceTransposeddotProductTransposed) の低精度時の結果を修正しました。precision bit planes に切り詰められた値は、削除された bit を 0 で埋めて再構成されていたため、再構成後の値がすべて 0 に偏り、低精度では退化していました。QBit(BFloat16) で precision 1 の場合は符号 bit だけが残るため、すべての値が ±0.0 に再構成され、距離はすべての行で同じ定数となって順位付け情報を失っていました。切り詰められた値は今後、残りの精度 cell の有界な中点に再構成されます (生の Int8 コードはその cell の中心に変換され、正確な 0 と無限大は保持されます) 。これにより、小さい precision では精度と速度をトレードオフしつつも、極端に偏った結果にはなりません。フル精度の結果は変わりません。これにより #110898 を修正します。#110911 (Alexey Milovidov).
  • 一時テーブルも使用していたセッションから Icebergテーブルをクエリした後、graceful shutdown 中にサーバーがクラッシュする (use-after-free) 不具合を修正しました。#110914 (Miсhael Stetsyuk).
  • 旧式の (バージョン 0) state フォーマットでシリアライズされた Bool 値を持つ sumMap/sumMapWithOverflow/sumMapFiltered aggregate states のマージ時に発生していた LOGICAL_ERROR: Cannot sum Bools (debug/sanitizer builds でのサーバー abort) を修正しました。この修正により、バージョン 0 の Bool state に関する 2 つのサイレントな誤結果も是正されます。型が Bool の map keys は states 間で deduplicate されておらず、さらに 0 値 compaction で誤ったエントリが削除されていました。#110922 (Groene AI).
  • -Tuple combinator を持つ aggregate function が RESPECT NULLS とともに使用され、中間 state (-State、distributed aggregation、WITH ROLLUP/WITH CUBE) を生成した際に発生していたクラッシュを修正しました。結合後の function に誤った state variant の名前が付けられていたため、シリアライズされた AggregateFunction type が往復変換時に互換性のないインメモリレイアウトへ再解決されていました。#110930 (Groene AI).
  • schema evolution によって名前変更された Iceberg のカラムに対する PREWHERE (および行レベルポリシー) が、古い data files では暗黙に 0 行を返してしまう不具合を修正しました。このようなクエリは今後、WHERE と同じ正しい行を返します。#110941 (Groene AI).
  • 複数の距離が同点になった場合に、vector_search_with_rescoring = 1 を指定したベクトル検索クエリで遅延マテリアライゼーションと組み合わせると発生する可能性があった LOGICAL_ERROR (LazyMaterializingTransform: Number of rows in lazy chunk N does not match number of offsets M) を修正しました。#111003 (Groene AI).
  • Apache Arrow Java < 19.0.0 (Apache Spark に同梱) で生成された、空のネストされた Array/Map 列を含む Arrow/ArrowStream データの読み取りを修正しました。これらのデータは以前、offsets バッファが小さすぎるという INCORRECT_DATA エラーで拒否されていました。#111101 (Raúl Marín).
  • ページキャッシュ有効時に plain_rewritable ディスクで stale read が発生する問題を修正しました。#111105 (Mikhail Artemenko).
  • Variant 型 (Geometry を含む) の定数で、distributed queries および並列レプリカを使用するクエリで発生する CANNOT_CONVERT_TYPE エラーを修正しました。#111136 (Nikita Fomichev).
  • HDFS から大きなファイルを読み取る際、単一の read request が hdfsPread の 32 ビットサイズ上限 (INT_MAX) を超えると、読み取りが失敗したり不正な内容を読み込んだりする可能性がある不具合を修正しました。#98470 (Arup Chauhan).
  • 空の needle に対する等値比較でテキスト索引が誤って使用される問題を修正しました。#108340 (Robert Schulze).
  • スケジュールされた merge を空きのない background pool に投入できない場合に、Manual merge selector で SYSTEM SYNC MERGES がハングする問題を修正しました。#108770 (Alexey Milovidov).
  • stale な txn_version.txt.tmp ファイルが data part に残っていると、ATTACH TABLE ... AS REPLICATED によってコミット済みデータが破棄され、mutation 前の行が復活してしまう問題を修正しました。#108772 (Alexey Milovidov).
  • non-replicated な MergeTree テーブルでの ALTER TABLE ... MOVE PARTITION TO TABLE における race condition の可能性を修正しました。この問題は、移動したパーツの commit とブロック番号の割り当てが同じ lock の下で行われていなかったため、交差する data parts が生成される可能性があるものでした。#108922 (Mikhail Artemenko).
  • Databricks UniForm によって書き込まれた Iceberg テーブルの読み取りを修正しました。Databricks UniForm は、退化したプレースホルダー schema (フィールドリストが空) をマニフェストファイルに書き込みます。#108945 (Konstantin Vedernikov).
  • パーティション化されていない Hive テーブルを複数スレッドで読み取る際に発生する use-after-free を修正しました。#109164 (Alexey Milovidov).
  • logger.startup_console_log_level が設定されている場合に、server の起動後もコンソールの log level が元に戻らない問題を修正しました。誤った configuration key から level を取得していたため、コンソールは server の lifetime を通じて引き上げられた startup level のままになっていました。#103472 をクローズします。#109858 (Garrett Thomas).
  • plain_rewritable ディスクの metadata transaction における snapshot isolation の異常を修正しました。#92055 を修正します。#110948 (Mikhail Artemenko).
  • ホストが明示的に --host 引数で渡されていない場合に clickhouse-client --login で発生する abort (front() called on an empty vector) を修正しました。たとえば、ホストが --connection、設定ファイル、または CLICKHOUSE_HOST 環境変数から指定されている場合に発生していました。#103603 をクローズしました。#110279 (Christoph Wurm)。
  • ラムダ引数がバッククォートで囲まれた Identifier で、その名前にドットが含まれる場合 (たとえば __table1.) に発生する論理エラー (!part.empty()) を修正しました。以前はこのようなクエリで、release build では処理済みの例外が発生し、エラーメッセージのフォーマット中に debug build および sanitizer build ではサーバーが abort していました。#108735 (Groene AI)。
  • 式で IN operator を使う ALIAS カラム (別の ALIAS カラム経由の場合を含む) を持つ table に対する ALTER TABLE ... DROP COLUMNALTER TABLE ... DELETE/UPDATE mutations、および lightweight DELETE FROM で発生する LOGICAL_ERROR (No set is registered for key) を修正しました。#111039 (Pedro Ferreira)。
  • 非同期 INSERT と deduplication (async_insert=1, async_insert_deduplicate=1) で発生していた、気づかれにくいデータ消失を修正しました。異なる insert_deduplication_token 値を持つ複数の async-insert エントリが、別々のパーティションに書き込まれる 1 回の flush にまとめられた際、各 token は自身の行が実際に書き込まれたパーティションだけでなく、その flush が触れたすべてのパーティションの deduplication log に登録されていました。そのため、これらの token のいずれかを再利用する後続の insert が、それまで一度も書き込んでいないパーティションに対して行われると、静かに deduplicate されて失われていました。現在は、token は自身の行が実際に書き込まれたパーティションに対してのみ登録されます。#111031 をクローズしました。#111049 (Groene AI)。
  • 実験的 setting make_distributed_plan = 1 のもとで、Distributed tables または views 上の Merge table をクエリした際に発生する LOGICAL_ERROR 例外 (ScatterExchangeStep should have one source shard, got 8) と、行の重複を修正しました。#107946 をクローズしました。#108401 (Groene AI)。
  • Nullable(Tuple(...)) カラムを、複数のカラムに flattening するのではなく、単一の CSV フィールドとして serialize するようにしました。以前は、非 NULL 値は複数の CSV フィールドとして書き込まれる一方、NULL は単一の \N として書き込まれていたため、行ごとにカラム数が変わり、CSVWithNames/CSVWithNamesAndTypes ヘッダーや往復変換が壊れていました。#108959 (Groene AI)。
  • Parquet v3 reader で、フォーマットレベルの key condition が Parquet file から読み込まれないカラムを参照している場合に発生する論理エラー (KeyCondition uses PREWHERE output) を修正しました。#109267 (Groene AI)。
  • serialize_query_plan = 1 のもとで、FINAL または SAMPLE を伴う table function の読み取り結果が誤っていた問題を修正しました。あわせて、table functions 用の aggregation hash-table statistics cache key も修正し、異なる table functions が同じ preallocation エントリを共有しないようにしました。#109847 (Azat Khuzhin)。
  • 完了前に失敗した BACKUP ... TO Memory(...) の cleanup を修正しました。失敗した backup が登録されたまま残るため、その名前を再利用できませんでした。#109947 (Julia Kartseva)。
  • WITH FILL STEPadd* / subtract* の日付・時刻 interval 関数における極端な interval 演算を修正しました。範囲外の差分が符号付き overflow に依存しなくなり、WITH FILL で非常に大きな YEAR step を指定した場合も、カレンダーを逆方向にたどって停止してしまうことがなくなりました。#110158 (Groene AI).
  • Azure services からの 411 Length Required エラーを修正しました。Poco ベースの Azure HTTP transport が、Azure Key Vault など、自身では Content-Length を設定しない SDK clients 向けに、request body から Content-Length を設定するようになりました。#110299 (Konstantin Bogdanov).
  • lazy FINAL optimization (query_plan_optimize_lazy_final、既定では無効) は、クエリが sorting-key 順に読み込まれる場合には適用されなくなりました。置き換え後の plan ではその順序が維持されず、結果が誤った順序で返る可能性があるためです。また、読み取る行数より小さい LIMIT が読み取り step に直接適用される場合にも適用されなくなりました。この場合、必須の set 構築パスによって早期終了の効果が失われるためです。#110576 (Nikolai Kochetov).
  • readWKTreadWKTPointPOINT EMPTY に対して、未初期化の座標 (scalar) や前の行の古い座標 (vectorized) を返していた問題を修正しました。ClickHouse Point は空の表現を持たない固定の Tuple(Float64, Float64) であるため、POINT EMPTY は今後 CANNOT_PARSE_TEXT として拒否されます。#110692 (Groene AI).
  • ハッシュ結合で右側カラムをマテリアライズする際の timezone 処理の誤りを修正しました。#111033 をクローズします。#111074 (Yarik Briukhovetskyi).
  • String (またはそれより短い FixedString) のキーや minmax スキップ索引 が、より長い FixedString 定数との比較で filter された場合に、count() の結果が誤りになり、行が欠落する問題を修正しました。例: toFixedString('abc', 257) = string_col。プライマリキー と minmax pruning が NUL 埋めされた定数から range を構築してしまい、一致する granules を誤ってスキップしていました。#111106 (Groene AI).
  • Asynchronous な Native フォーマット inserts を修正し、ALTER ... MODIFY COLUMN の後で互換性がなくなった 1 つのバッファ済みエントリが原因で、バッチ全体が失敗することがないようにしました。#111064 をクローズします。#111108 (Mikhail f. Shiryaev).
  • 別種のオブジェクトに対する dictionary の CREATE OR REPLACE を修正しました。replace がすでに committed された後に CANNOT_DETACH_DICTIONARY_AS_TABLE で失敗し、孤立した _tmp_replace_* table が残る問題がありました。#111142 (Nikolay Degterinsky).
  • Join engine table に対する ANY join で、右側カラムへの WHERE filter によりクエリ planner がその join を SEMI または ANTI に Rewrite できる場合に、INCOMPATIBLE_TYPE_OF_JOIN が発生する問題を修正しました。Join engine table では宣言された strictness が固定で変更できないため、そのような table に対してはこの変換を行わないようになりました。#111362 (Groene AI).
  • 入力データの parse 結果が 0 行になったとき (たとえば空の JSON document や feature を持たない GeoJSON FeatureCollection など) に、format table function がカラムを返さない問題を修正しました。NOT_FOUND_COLUMN_IN_BLOCK を投げる代わりに、正しいカラムを持つ空の結果を返すようになりました。#111390 をクローズします。#111428 (Groene AI).

ビルド/テスト/パッケージングの改善

  • Sanitizer buildで、サニタイザレポートがグローバルバッファ sanitizer_report に取り込まれるようになり、コアダンプアナライザがそれをコアダンプから読み取れるようになりました。#109333 (Miсhael Stetsyuk).
  • vendored binariesを使う代わりに、musl をソースからbuildするようになりました。#97452 (Konstantin Bogdanov).
  • LLVM-libc の SIMD memcmp/memcpy/memmove/memset/bcmp/memmem 実装を使用するようになりました。#107566 (Konstantin Bogdanov). あわせて、AVX-512 搭載マシンで -O0 Debug build (-DDEBUG_O_LEVEL=0) 時に発生する memmove のサイレント破損を修正しました。#110904 (Konstantin Bogdanov).
  • コードベースおよび同梱のサードパーティライブラリ全体から、curl ライブラリの使用を削除しました。#108296 (Konstantin Bogdanov).
  • mariadb-connector-c を 3.4.9 に更新しました。#108328 (Konstantin Bogdanov).
  • libssh を 0.12.0 に更新しました。#108329 (Konstantin Bogdanov).
  • macOS で transaction COMMIT 時にハングする問題を修正しました。#108375 (Raúl Marín).
  • object file 内の DWARF デバッグセクションを圧縮する (-gz) COMPRESS_DEBUG_SECTIONS CMake オプションを追加しました。これは compiler が対応している環境では自動的に有効になり、Debug build のディレクトリサイズを縮小します。最終的な binaries は非圧縮のままなので、runtime のスタックトレースのシンボル化には影響しません。#109306 (Murphy). また、同梱の LLVM toolchain は zlib 付きで build されるようになり、その clang が -gz=zlib をサポートするようになりました。さらに、不足していた clang++-21 の symlink も追加されました。#109596 (Murphy).
  • Debug build では、vendored Rust crates を、削減したデバッグ情報 (debug = 1、cargo の limited レベル) かつインクリメンタル cache なし (REDUCE_RUST_DEBUG_INFO、デフォルトで有効) で compile するようになりました。これにより、Rust build artifact が縮小され (クリーンbuildで約 12 → 約 7 GB) 、再build時に cargo cache が無制限に増大するのを防ぎます。完全な DWARF とインクリメンタル compile を復元するには、-DREDUCE_RUST_DEBUG_INFO=OFF を設定してください。#109471 (Murphy).
  • macOS で streaming distributed query exchange と STREAM reads をサポートしました。#109769 (Raúl Marín).
  • libarchive を 3.8.7 から 3.8.8 に更新しました。#109874 (Robert Schulze).
  • c-ares を 1.34.6 から 1.34.8 に更新しました。#109905 (Robert Schulze).
  • CVE-2026-40355 および CVE-2026-40356 に対応するため、krb5 を更新しました。#109910 (Robert Schulze).
  • libpng のサードパーティ依存関係を削除しました。FORMAT PNG は今後、代わりに小型の組み込み PNG エンコーダ (同梱の zlib を利用) を使用します。#110051 (Alexey Milovidov).
  • jemalloc の malloc zone をラップすることで、macOS 上では operator new を経由しない生の C の割り当てもメモリトラッカーで追跡し、これらにもメモリ制限が適用されるようにしました。#110370 (Raúl Marín).
  • clickhouse-server および clickhouse-keeper-distroless Docker イメージは、現在はシェルを含まない本番用ステージからビルドされます。以前はデバッグステージからビルドされ、/busybox/sh が含まれていました。#105677 をクローズ。#105678 (ashishch432).
  • abseil-cpp を LTS 20260526.0 に更新しました。#108991 (Konstantin Bogdanov).

ClickHouseリリース 26.6、2026-06-25。 プレゼンテーション, ビデオ

後方互換性を持たない変更

  • この変更により、allow_experimental_query_deduplication 機能が削除されました。この機能は長期間 experimental のままで、テストもなく、今後サポートされる予定もありません (初期テストは不安定だったため、#49579 で削除されました) 。 #99398 (Igor Nikonov).
  • XRay ベースの SYSTEM INSTRUMENT 機能では、parameters ではなく arguments を使うようになりました。具体的には、system.instrumentation.parameters カラムは arguments にリネームされ、SYSTEM INSTRUMENT ADD ... HANDLER PARAMETERS ... 構文は SYSTEM INSTRUMENT ADD ... HANDLER ARGUMENTS ... に変更されました。古いカラム名や構文を使っているクエリまたは自動化は、新しい名前を使うよう更新する必要があります。古い名前は、もうサポートされません。 #103854 (Pablo Marcos).
  • 設定 show_data_lake_catalogs_in_system_tablesshow_remote_databases_in_system_tables にリネームされ、対象範囲も拡大されました。値が 0 (デフォルト) の場合、データレイクのカタログに加えて、MySQL および PostgreSQL のデータベースも system.tablessystem.columnssystem.completions から非表示になります。古い設定名はエイリアスとして維持されます。 #104416 (Pablo Marcos).
  • デフォルトの x86 build は、x86-64-v2 (SSE4.2) ではなく x86-64-v3 (AVX2) を対象とするようになりました。これには AVX2 をサポートする CPU (Intel Haswell 以降、AMD Excavator 以降) が必要です。お使いの CPU が AVX2 をサポートしていない場合は、通常の x86-64 を対象とする amd64compat build を使用してください。 #105019 (Raúl Marín).
  • min/max aggregate および minmax 索引で、ネストされた Dynamic/Variant を拒否するようになりました。以前は最上位レベルの Dynamic/Variant しかチェックしていませんでした。 #104747 をクローズします。 #105468 (Pavel Kruglov).
  • icebergHashicebergBucket は、Int128UInt128Int256UInt256Decimal256 の argument を明示的なエラーで拒否するようになりました。以前は、より広い値を暗黙的に切り捨て、衝突する hash を生成していました。Iceberg spec では、32/64-bit 整数と、精度 38 までの decimal に対する hash しか定義されていません。収まる値について従来の挙動を維持したい場合は、Int64 または Decimal128 に cast してください。 #105866 (Raúl Marín).
  • CLI でのクエリ echo をきめ細かく制御できるようになりました。--echo オプションは省略可能なブール値を受け取るようになり、対話モードと batch mode の両方で動作します。新しいオプション --echo-formatted--echo-query-id は、それぞれ echo されたクエリを整形するかどうか、および query_id を表示するかどうかを制御します。--hilite/--highlight オプションは、echo されたクエリのハイライトも制御するようになりました。その副作用として、--echo はブール値オプションになったため、値を伴わない --echo の直後に置かれた位置引数のクエリはその値として扱われます。代わりに --echo --query "..." または --echo=false を使用してください。 #106191 (Alexey Milovidov).
  • experimental な KQL (Kusto) 関数 array_sort_ascarray_sort_desc、およびそれらの SQL backend である kql_array_sort_asckql_array_sort_desc を削除しました。これらの関数は experimental で、実装品質が低く、正確性やパーサーに関する不具合の原因にもなっていました。これらの名前を使うクエリは、今後 UNKNOWN_FUNCTION を返します。 #108101 (Groene AI).
  • ALTER TABLE ... REPLACE PARTITION ... FROM ... は、ソーステーブルの要求されたパーティションにパーツが存在しない場合でも、宛先パーティションのデータを黙って削除しないようになりました。以前は、このようなリクエストを行うと宛先パーティションが削除され、その代わりに何も書き込まれないため、データ損失を招きやすい危険な挙動でした。現在はデフォルトで BAD_ARGUMENTS により拒否されます。従来の黙ってクリアする挙動に戻すには、新しい設定 allow_replace_partition_from_empty_source = 1 を設定するか、compatibility26.5 以下に設定してください。宛先データを明示的に削除するには、ALTER TABLE ... DROP PARTITION を使用してください。#104939 (Groene AI).
  • サーバー設定 insert_deduplication_version のデフォルトが compatible_double_hashes から new_unified_hash に変更されます。挿入の重複排除は、パーツ/パーティション単位ではなく、挿入ブロック全体 (insert ごと) に対して機能するようになりました。つまり、同じ insert の再試行は引き続き重複排除されますが、同一のパーツを生成する 2 つの異なる insert は相互に重複排除されなくなり、同じ行を並べ替えて insert した場合も重複排除されなくなります。従来の挙動に戻すには、insert_deduplication_version = compatible_double_hashes を設定してください。old_separate_hashes がデフォルトだったリリースから直接アップグレードするインスタンスでは、new_unified_hash を使用する前に、関連する最長の重複排除ウィンドウが経過するまで、まず compatible_double_hashes で実行する必要があります。#107886 (Sema Checherinda).

新機能

  • 一連のスナップショットリードで実装された、MergeTree テーブルに対する継続的クエリのサポートを追加しました。これは、汎用的なストリーミングクエリのサポートに向けた最初の一歩です。#105114 (Mikhail Artemenko).
  • 仮想 (what-if) スキップ索引を追加しました。CREATE HYPOTHETICAL INDEX ... ON t (expr) TYPE ... を使用してセッションスコープの仮想スキップ索引を定義し、続いて EXPLAIN WHATIF SELECT ... を使用すると、マテリアライズすることなく、そのスキップ率とコストを見積もれます。定義した索引は、新しい system.hypothetical_indexes テーブルに表示されます。#104608 (Yarik Briukhovetskyi).
  • clickhouse-server に、テーブル、materialized view、リフレッシュ可能なマテリアライズドビュー、辞書、分散テーブル、ビューの間の依存関係グラフを可視化する埋め込み /schema Web UI を追加しました。#105276 (Nikita Mikhaylov).
  • PNG 出力フォーマットのサポートを追加し、クエリ結果を PNG 画像として直接レンダリングできるようにしました。#74691 (Maksim Dergousov).
  • 環境変数に基づいて、clickhouse-client または clickhouse-local を呼び出した AI コーディングエージェント (Claude Code、Cursor、Codex、Gemini CLI、Goose など) を検出する機能を追加しました。検出されたエージェントは、system.query_logsystem.query_thread_logsystem.processes の新しい client_agent カラムに記録されます。#106619 (Alexey Milovidov).
  • 関数、テーブルエンジン、データ型、設定、フォーマットなど、システムの共通コンポーネントに埋め込まれたリファレンスドキュメントを Markdown としてレンダリングし、1 つのテーブルに集約する新しい system table system.documentation を追加しました。#107463 (Alexey Milovidov).
  • GeoJSONFeatureCollection ドキュメントを読み込むための GeoJSON 入力フォーマットを追加しました。各 feature ごとに 1 行を生成し、id (String) 、geometry (Geometry) 、properties (Nullable(JSON)) の各カラムを持ちます。PointLineStringMultiLineStringPolygonMultiPolygon の geometry は、ClickHouse ネイティブの Geometry 型に読み込まれます。Geometry 型で表現できない GeometryCollectionMultiPoint は、デフォルトでは例外を発生させますが、input_format_geojson_unsupported_geometry_handling 設定を使えば NULL として格納することもできます。#91533 への寄与です。#98124 (Mark Needham).
  • SQL から直接 Mapbox Vector Tiles を提供するための関数を追加しました。MVTEncodeGeom は geometry を slippy-map タイルのピクセル空間に投影してクリップし、MVTEncode はグループ内の投影済み geometry を単一レイヤーのタイルのバイナリバイト列に集約し、MVTBoundingBox / MVTBoundingBoxMercator は行をその範囲に制限するためのタイルのバウンディングボックスを返します。Point、line、polygon の geometry をサポートします。PostGIS のエイリアス ST_AsMVTGeom および ST_AsMVT でも利用できます。#106107 (Saarthak Gupta).
  • clickhouse-localSYSTEM START LISTEN および SYSTEM STOP LISTEN クエリをサポートするようになり、TCP 接続と HTTP 接続を受け付けるサーバーとして動作できるようになりました。#101143 (Alexey Milovidov).
  • clickhouse-clientclickhouse-local に、対話型の help コマンドを追加しました。help <name> (/helpman/man も可) と入力すると、関数、table engine、Data type、フォーマット、setting、そのほかのコンポーネントのドキュメントが表示され、Markdown から SQL のシンタックスハイライト付きでターミナル内にレンダリングされます。語が曖昧な場合は一致する候補をすべて表示し、見つからない場合は類似する名前を提案します。#108042 (Alexey Milovidov).
  • Azure Data Lake Storage Gen2 への書き込みをサポートしました。#105406 (Konstantin Vedernikov).
  • RowBinaryWithNamesAndTypesAndDefaults フォーマットを追加し、schema evolution への対応を強化しました。#105736 (Mark Zitnik).
  • 既存の Enum 型に新しい値を追加する際、現在の Enum 値をすべて再指定しなくても済むように、ALTER TABLE クエリで ADD ENUM VALUES を実装しました。#93830 (Ilya Golshtein).
  • リフレッシャブルmaterialized view が REFRESH DEPENDS ON をサポートするようになり、時間ベースのスケジュールではなく、別の RMV のリフレッシュを契機にリフレッシュできるようになりました。 (REFRESH EVERY ... DEPENDS ON はすでに存在していましたが、この用途では信頼性に欠けていました。) CREATE MATERIALIZED VIEW のドキュメントを参照してください。#104440 (Michael Kolupaev).
  • * LIKE '<pattern>' および * ILIKE '<pattern>' を使った、名前パターンによるカラム選択をサポートしました。これには table.* LIKE '<pattern>'table.* ILIKE '<pattern>' のような修飾形式も含まれます。LIKE はカラム名を case-sensitive に、ILIKE は case-insensitively に一致させます。#104569 (Yue Ni).
  • LIKE pattern 内でカスタムのエスケープ文字を定義できる ESCAPE 構文を追加しました。これにより、%_ を wildcards ではなくリテラル文字として扱えます。#99774 (Ilya Yatsishin).
  • materialize_projections_on_insert および materialize_projections_on_merge MergeTree テーブル設定を追加しました。materialize_projections_on_insert = 0 の場合、INSERT では projection parts の構築をスキップするため、多数の projections を持つテーブルで insert throughput が向上します。materialize_projections_on_merge = 1 の場合、merge は元のすべてのパーツに存在しない projection を再構築するため、projections を INSERT 時ではなく merges 中に構築できます。なお、merges は引き続き、同じ projections の組み合わせを共有するパーツだけを結合します。#100993 (Christoph Wurm).
  • 新しい immutable な MergeTree setting allow_tuple_element_aggregation を追加しました。デフォルトでは無効です。有効にすると、SummingMergeTreeAggregatingMergeTreeCoalescingMergeTreeTuple カラムを再帰的に平坦化し、merges 中に各 leaf 要素を独立して aggregation します。これは、その要素がトップレベルのカラムである場合とまったく同じで、SummingMergeTree はその値を合計し、AggregatingMergeTree はその aggregate-function state を merge し、CoalescingMergeTree は最後の非 NULL 値を保持します。この setting はテーブル作成時に指定する必要があり、対応していない engine では暗黙的に無視されます。#98039 (johnjing).
  • 新しい関数 quantizeBFloat16ToInt8dequantizeInt8ToBFloat16:256 レベルの Gaussian Lloyd-Max 量子化器を使って embedding の部分を 8 ビットに圧縮する scalar codec で、そこから bit-truncation によって Int4/Int2/binary codes を抽出できます。#108102 (Alexey Milovidov).
  • 関数 arrayTopKarrayBottomK を追加: - arrayTopK(k, array) は大きい順に K 個の要素を返します - arrayBottomK(k, array) は小さい順に K 個の要素を返します。 #104563 (Vitaly Baranov).
  • Iceberg テーブル向けに、各テーブルの current snapshot 内の各データファイルまたは削除ファイルごとに 1 行ずつ、ファイルごとのメタデータを公開する新しい system table system.iceberg_files を追加しました。これにより #98777 をクローズします。 #104415 (Asya Shneerson).
  • すべてのテーブルにある CHECK および ASSUME 制約について、制約名、種別、式を含む情報を提供する system.constraints テーブルを追加しました。 #105337 (Pedro Ferreira).
  • 利用可能な dictionary layouts を、埋め込みドキュメント (description, syntax, examples, introduced_in, related) とともに一覧表示する新しい system.dictionary_layouts テーブルを追加しました。 #106182 (Alexey Milovidov).
  • 利用可能な dictionary sources を、埋め込みドキュメント (description, syntax, examples, introduced_in, related) とともに一覧表示する新しい system.dictionary_sources テーブルを追加しました。 #106184 (Alexey Milovidov).
  • 利用可能な data skipping index types を、埋め込みドキュメント (description, syntax, examples, introduced_in, related) とともに一覧表示する新しい system.data_skipping_index_types テーブルを追加しました。 #106186 (Alexey Milovidov).
  • 利用可能なディスクタイプを、埋め込みドキュメント (description, syntax, examples, introduced_in, related) とともに一覧表示する新しい system.disk_types テーブルを追加しました。 #106187 (Alexey Milovidov).
  • SYSTEM RESTART DISK <name> を実装しました。これにより、ディスクの in-memory メタデータを再読み込みし、その上にある読み取り専用レプリカテーブルのデータパーツを再スキャンするようになりました。これにより、共有 plain_rewritable ストレージ上のテーブルの読み取り専用レプリカは、refresh_parts_interval を待ったりサーバーを再起動したりすることなく、別のサーバーによって書き込まれたデータを必要に応じて認識できます。 #106645 (Jordi Villar).
  • PostgreSQL 形式の expr OP SOME(array) / expr OP ALL(array) (右辺がサブクエリではない形式) がサポートされ、=/<> については has / NOT has に、それ以外の比較演算子については arrayExists / arrayAll のラムダに書き換えられるようになりました。ANY は array form では受け付けられません。これは any も集約関数であるためです。代わりに SOME を使用してください。ANY/SOME/ALL の subquery form は引き続き IN / NOT IN に変換されます。 #105129 (Alexey Milovidov).
  • 新たに 2 つの load_balancing 戦略 hostname_longest_common_prefixhostname_longest_common_suffix を追加しました。これらは、イニシエーターのホスト名と最長の共通プレフィックス (または接尾辞) を持つレプリカを優先します。これらは、ホスト名のプレフィックスまたは接尾辞にデータセンターが埋め込まれており、数値セグメントの長さが可変な場合に有用です。このような場合、既存の nearest_hostname および hostname_levenshtein_distance 戦略では誤ったレプリカが選ばれることがあります。 #107360 (Denny [DBA at Innervate]).
  • 証明書ベース認証のオブザーバビリティを向上させるため、TLS クライアント証明書の情報 (subjects、serial number、issuer、validity period) を system.session_log テーブルに追加しました。#107679 (Alexey Milovidov).
  • S3 のロールベースアクセス向けに、オプションの external_id 認証情報を追加しました。#106941 (Elian Gidoni).
  • 新しい S3Queue 設定 after_processing_move_preserve_path を追加しました。after_processing='move' および after_processing_move_prefix と併せて有効にすると、処理済みオブジェクトはファイル名だけにフラット化されるのではなく、宛先プレフィックス配下で完全なソースパスを保持したまま移動されます。#105354 (Asya Shneerson).
  • message queue エンジン (KafkaRabbitMQNATS) からアタッチされた materialized view への挿入を無効にする message_queue_disable_insertion サーバー設定を追加しました。read-only レプリカのシナリオで有用です。#104911 (JIaQi Tang).
  • LOCALTIMELOCALTIMESTAMP (SQL 標準 / PostgreSQL 構文) を追加しました。LOCALTIMESTAMPnow() の別名です (DateTime を返します) 。LOCALTIME は現在の時刻を Time 値として返します。#106139 (Thomas Cabral).
  • EXTRACT(unit FROM expr) の糖衣構文として date_part('unit', expr) を追加しました。標準の interval kind と PostgreSQL 独自拡張 (epochdowdoyisodowisoyearcenturydecademillennium) をすべてサポートします。#105127 (Alexey Milovidov).
  • timezone offset の時部分と分部分を取得する PostgreSQL 互換の EXTRACT(TIMEZONE_HOUR FROM dt) および EXTRACT(TIMEZONE_MINUTE FROM dt)、さらに interval から値を抽出するための EXTRACT(<unit> FROM INTERVAL n <unit>) / date_part('<unit>', INTERVAL n <unit>) を追加しました。#106227 (Vinayak Joshi).
  • argMinargMax の aggregate 別名として min_bymax_by を追加しました。#105712 (Joey Yu). これらの別名はばかげています。本物のエンジニアは元の ClickHouse 名を使います。
  • Oracle/MySQL/Snowflake 互換のため、regexpExtract の大文字小文字を区別しない別名として REGEXP_SUBSTR を追加しました。#105122 (Alexey Milovidov).
  • PostgreSQL / SQL 標準互換のため、currentUser() の大文字小文字を区別しない別名として SESSION_USER を追加しました。#106081 (Takumi Hara).
  • CREATE TABLE と同様に、ALTER TABLE ... ADD/MODIFY COLUMN で末尾の NULL / NOT NULL modifier をサポートしました。#106150 (Takumi Hara).
  • h3 の h3PolygonToCellsWithContainment 関数を使って、center-based、fully-contained、overlapping の containment mode をサポートする新しい algorithm を利用できるようになりました。#104455 (Youssef Kadry).
  • IP_ADDRESS または FORWARDED_IP_ADDRESS でキー化を行う際に、IPV4_PREFIX_BITS and IPV6_PREFIX_BITS フラグを追加しました。#89270 (Aditya Chopra).
  • formatReadableTimeDelta が、Month および Year 以外の型の INTERVAL 式も入力として受け付けるようになりました。#64315 (Francisco J. Jurado Moreno).
  • formatReadableSizeformatReadableDecimalSizeformatReadableQuantity 関数で、オプションの精度引数を指定して小数点以下の桁数を制御できるようになりました。デフォルトは 2 で、従来の動作を維持します。#104648 (Antonio Filipovic).
  • 浮動小数点数のテキスト出力における小数桁数を制御する output_format_float_precision 設定を追加しました。#99721 (phulv94).
  • 値が整数であっても、浮動小数点数および Decimal 数値のテキストフォーマット出力で常に小数点を表示する設定 output_format_always_write_decimal_point_in_float_and_decimal を追加しました。たとえば 1 ではなく 1. を出力します。デフォルトでは無効です。#62614 (Ilya Yatsishin).
  • 新しい HTTP ハンドラーの設定要素 <url_prefix><full_url_prefix> (ベースパス配下のすべてのパスに一致し、たとえば Prometheus ハンドラーで有用) に加え、<url_regexp><full_url_regexp><headers_regexp> をサポートしました。従来の <url>regex:...</url> 形式は現在廃止されています。#107492 (Vitaly Baranov).
  • basic STATISTICS をサポートしました。これはカラムごとの compact な統計で、該当する場合に数値の最小値/最大値、文字列の平均長、NULL の件数を格納します。#106048 (Han Fei).
  • ClickHouse Keeper で TTL ノードをサポートしました。create_ttl feature フラグで有効化できます。#100397 (Konstantin Vedernikov).
  • workloads 向けに memory reservation 機能を導入しました。workload scheduling のドキュメントを参照してください。#82414 (Sergei Trifonov).

実験的機能

  • マルチステージの分散クエリ実行: プランナーがクエリプランを scatter / broadcast / gather / shuffle exchange で接続されたステージに分割し、そのプラン断片を worker ノードに振り分けます。ステージ間のデータは TCP 経由でストリーミングされるか、共有オブジェクトストレージ上の一時ファイルを介して受け渡されます。この仕組みにより、分散 shuffle および broadcast hash join、shuffle 集約、分散ソートがサポートされます。この機能は Experimental で、デフォルトでは無効です。#106020 (Alexander Gololobov)。Experimental な distributed query plan engine (make_distributed_plan) では、worker ごとに異なるタスクディスパッチポートおよび streaming-exchange ポートを使用できるようになりました。これらは <remote_servers> 内で、レプリカごとに stateless_worker_portstreaming_exchange_port を使って設定します。未設定の場合は、従来の server レベルのポート (stateless_worker_client.portdistributed_query.streaming_exchange_port) が使用されます。これにより、1 台のホスト上で複数の worker を実行できるようになります。#107885 (Alexander Gololobov).
  • inner joins 向けの Experimental な dphyp join 並べ替えアルゴリズムが、query_plan_optimize_join_order_algorithm 設定のオプションとして追加されました。あわせて、join 順序探索に上限を設け、その上限を超えた場合はチェーン内の次のアルゴリズムにフォールバックする query_plan_optimize_join_order_max_searched_plans 設定も追加されました。従来の上限なし探索の動作を維持するには、これを 0 に設定してください。#98798 (Alexander Gololobov).
  • ClickHouse 内から LLM API を使って埋め込みを生成する aiEmbed 関数を追加しました。#102922 (George Larionov).
  • Experimental な Linux OOM canary を追加しました。これは、メインの server プロセスより先に Linux OOM killer の対象となる sacrificial child process です。oom_canary_enable で有効にすると、アロケータキャッシュの削除、クエリのキャンセル、マージのキャンセル、および system.crash_log へのイベント記録によってメモリ逼迫を軽減します。OOM への応答には、cgroup v2 の memory.events に OOM-kill の記録があることが必要です。#101942 (Peng).
  • /webterminal の Web 端末インターフェースが正式機能となり、デフォルトで有効になりました。これは新しい enable_webterminal server 設定で制御されます。従来の allow_experimental_webterminal 設定は非推奨になりましたが、後方互換性のため引き続き有効です。エンドポイントを無効にするには、enable_webterminalfalse に設定してください。#106255 (Alexey Milovidov).
  • PromQL HTTP エンドポイントで、URL クエリパラメータ (database=, table=, または table=db.table) による database と table の指定がサポートされるようになりました。従来の暗黙的な default.prometheus table へのフォールバックは廃止されました。handler config にも URL にも table が指定されていない場合、ハンドラーは The time series table name is not set を返すようになりました。従来の動作を維持するには、<table>default.prometheus</table> を設定するか、URL で table=... を渡してください。#107553 (Vitaly Baranov).
  • prometheusQuery および prometheusQueryRange Table functions で、PromQL の histogram_quantile 関数がサポートされました。これにより、le ラベルで識別される従来の Prometheus histogram バケットに対する quantile の計算が可能になります。#103477 (Joe Smith).
  • テキスト索引に遅延ポスティングリスト適用モードを追加しました。SET allow_experimental_text_index_lazy_apply = 1 および SET text_index_posting_list_apply_mode = 'lazy' で有効にすると、ポスティングリストは Roaring Bitmaps として完全に実体化されるのではなく、packed-block 粒度で必要に応じてカーソルベース方式でデコードされるため、選択的なテキスト索引クエリでのメモリ使用量と CPU 時間を削減できます。#100035 (Peng).
  • WebAssembly UDF 向けの AssemblyScript ABI のサポートを追加しました。AssemblyScript のコードをコンパイルし、生成された WebAssembly モジュールをローカルの ClickHouse に読み込むブラウザベースの プレイグラウンド を使えば、ローカルにツールチェーンをインストールしなくても AssemblyScript ABI を試せます。#104606 (Vladimir Cherkasov).
  • オプションのプレフィックスを付けた Prometheus ハンドラーをメインの HTTP ポートにアタッチできるようにしました。#104975 (James Cunningham).
  • 実験的な MergeTree 設定 packed_skip_index_max_bytes を追加しました。これにより、小さなスキップ索引の substream を、part ごとに単一の skp_idx.packed アーカイブへまとめられるようになり、table に多数のスキップ索引が定義されている場合の inode 負荷を軽減できます。判定は書き込み時に substream 単位で行われ、シリアライズ後のサイズがしきい値未満の substream はアーカイブに格納され、それより大きいものは従来どおり独立した skp_idx_<name>.idx2 / .mrk2 layout のままになります。1 つの part 内で layout を混在させることもできます。全文索引はサポートされておらず、常にファイルごとに保持されます。デフォルトは 0 (パック無効) です。#105321 (Raúl Marín).
  • ABI BUFFERED_V1 を使用する WebAssembly UDF 向けに Buffers シリアライゼーションをサポートし、永続化される WASM UDF 関数設定として webassembly_udf_enable_fuel を追加しました。#105574 (Antonio Andelic).
  • 実験的な use_reader_executor 設定 (デフォルトではオフ) を追加しました。これにより、読み取りは従来の読み取りバッファの legacy chain ではなく、新しい pipeline ベースの ReaderExecutor を経由するようになります。#106570 (Sema Checherinda). 実験的な use_reader_executor の読み取りパス向けに、モデル化された読み取りコスト KPI (ReaderExecutorModeledCostMsPerRequestedMiB) を含むオブザーバビリティ メトリクスを追加しました。#106968 (Sema Checherinda). 実験的な use_reader_executor 読み取りパスの内部で ChainedBuffers バッファを導入し、ReaderExecutorChainedBufferBytes メトリクスを追加しました。#107210 (Sema Checherinda).
  • MergeTree sorting key における降順の sort order (例: ORDER BY (time DESC, key)) が常にサポートされるようになり、実験的設定 allow_experimental_reverse_key は不要になりました。この設定は廃止されました。#106440 (Nikita Mikhaylov).
  • Nullable(Tuple(...)) はベータになりました。デフォルトでは無効で、使用するには enable_nullable_tuple_type = 1 を設定してください。#107754 (Nihal Z. Miaji).

パフォーマンス改善

  • Keeper にさまざまな変更を加え、全体として約 2 倍高速化しました (バッチ処理の改善、リーダーへのメッセージのパイプライン化、ログ追記のパイプライン化) 。 #101757 (Michael Kolupaev).
  • 単純な SELECT クエリにおけるクエリごとのオーバーヘッド (パース、解析、プランニング) を削減しました。たとえば、単一接続での SELECT count() FROM hits はおおよそ 50% 高速になりました。 #104513 (Raúl Marín).
  • 長い主キーおよび高カーディナリティな主キーに対する主キー索引解析を最適化しました。長い主キーでは、索引解析の実行時間は主キーの長さではなく、主にクエリのフィルタの複雑さ (実際に使用するキーカラム) に依存するようになりました。そのため、ソートキーを拡張しても、そのうち少数のカラムだけでフィルタするクエリに対する索引解析の追加オーバーヘッドはほぼ無視できます。高カーディナリティな主キーでは、ClickHouse はキーカラムのうち選択性の高いプレフィックスのみをメモリ内に保持し、後続のカラムは読み込まないため、索引解析は主キー全体ではなく、そのインメモリのプレフィックスだけを対象に動作するようになりました。この最適化はデフォルトで有効で、新しい設定 use_lightweight_primary_key_index_analysis で無効化できます。 #65103 をクローズします。 #91836 (Nihal Z. Miaji).
  • デフォルトの x86 ビルドは、x86-64-v2 (SSE4.2) ではなく x86-64-v3 (AVX2) を対象とするようになりました。これには AVX2 をサポートする CPU (Intel Haswell 以降、AMD Excavator 以降) が必要です。CPU が AVX2 をサポートしていない場合は、プレーンな x86-64 を対象とする amd64compat ビルドを使用してください。 #105019 (Raúl Marín).
  • 汎用の比較ソートに ipnsortdriftsort (安定ソート) を使用するようになりました。これらは Rust 標準ライブラリのソート実装を C++ に移植したものです。これにより、数値以外のカラムに対する ORDER BY や安定ソートが高速化され、逆順にソート済みの入力での最悪ケースも解消されます。 #106650 (Alexey Milovidov).
  • 高カーディナリティで均等に分散したキー向けに、新しい GROUP BY 最適化を追加しました。grouping key をハッシュ化して行をスレッド間に分散し、各スレッドが互いに重ならないキー集合を merge フェーズなしで集約します。有効にするには enable_sharding_aggregator = 1 を設定してください。 #104233 (Nihal Z. Miaji).
  • 文字列キーの GROUP BY クエリでハッシュテーブルのプリフェッチを有効にし、高カーディナリティな文字列集約の性能を約 8% 改善しました。 #101007 (Le Zhang).
  • 大きな aggregate state (たとえば groupArray) を持つ部分的な二段階集約結果を merge する際の Peak memory usage を削減しました。merge が完了するまで各 bucket の元の state をすべて保持し続けるのではなく、merge 中に bucket ごとに段階的に解放するようにしました。 #102330 (Yuri Fedoseev).
  • Enum DataType のメモリ表現を最適化しました。Enum 型を含むテーブルでは、Enum 部分のメモリ使用量が最大 10 倍改善される場合があります。値 (数値) から name を取得する処理時間は同等か、それ以上に高速です。name による検索はやや低速ですが、この方向のアクセスはあまり一般的ではありません。 #95668 (Ilya Yatsishin).
  • クエリ解析中に同じ識別子の解決が重複して行われるのを防ぐため、識別子解決のキャッシュを追加しました。 #88043 (Max Justus Spransy).
  • 多数のカラムを持つテーブルに対するクエリのクエリ解析性能を改善しました。不要な場合は、カラムノードのハッシュ (ソーステーブル式全体を含む) の計算を回避します。約1200カラムのテーブルに対する、ネストした SELECT * サブクエリの解析が、現在は約50倍高速になりました。#106957 (Dmitry Novik).
  • 多数または深くネストした関数呼び出しを含むクエリについて、関数解決 cache から冗長なクエリツリーのハッシュを削除し、クエリ解析を高速化しました。#107516 (Dmitry Novik).
  • 多数のアクセスエンティティ (行ポリシー、ロール、クォータ、設定プロファイル) が同時に変更された際に、レプリケートされたアクセスストレージでログインやクエリ開始が長時間停止する問題を修正しました。エンティティごとの cache は、変更された各エンティティごとではなく通知バッチごとに1回だけ再計算されるようになり、アクセスロックを数分間保持し得た二乗オーダーの処理を解消しました。#107672 (Azat Khuzhin).
  • probe 側の JOIN ランタイムフィルタとして、ハッシュ結合の FixedHashMap を共有するようになりました。build 側の hash table が FixedHashMap である場合 (または FixedHashMap に変換可能な場合) 、それがランタイムフィルタとして使われ、通常 BuildRuntimeFilterStep が設定する Set/BloomFilter を置き換えます。これは新しい設定 join_runtime_filter_from_fixed_hash_table (デフォルトは true) で制御されます。#105640 (Xiaozhe Yu).
  • JOIN の後に選択性の高い LIMITTopN、または別の JOIN が続く場合に、selector 索引とレプリケーション索引を遅延適用するようになりました。遅延 selector 索引を有効にするためのペイロードカラム数は、設定 query_plan_min_columns_for_join_lazy_indexing で制御できます (0 はこの最適化が無効であることを意味します) 。この最適化を適用する LIMIT は、設定 query_plan_max_limit_for_join_lazy_indexing で制御できます。#106566 (Hechem Selmi).
  • DP (動的計画法) による JOIN の並べ替えが、並列レプリカでも使用可能になりました。#105889 (Nikita Taranov).
  • JOIN がランタイムフィルタ (デフォルトで有効な enable_join_runtime_filters) を使用する場合のクエリプランを改善しました。JOIN 並べ替えのコストモデルが、右側の部分木にある WindowTransform (およびその他の行保持型プランステップ) を透過して見られるようになり、統計なしにフォールバックする代わりに、基になる行数とカラムごとの NDV を使用します。#107229 (UnamedRus).
  • RIGHT および FULL JOIN における未結合行の出力で、バッチ化により仮想関数呼び出しを排除しました。#105679 (Hechem Selmi).
  • HashJoin で packed keys32 および keys64 メソッドをサポートしました。#107202 (Nikita Taranov).
  • Set で packed keys32 および keys64 メソッドをサポートしました。#107564 (Nikita Taranov).
  • 集約における Nullable カラムの処理をさらに最適化しました。#106015 (Nikita Taranov).
  • LIMIT BY クエリの性能を改善しました。#103349 (Nihal Z. Miaji).
  • LIMIT BY のカラムが ORDER BY のプレフィックスである場合、Sort 中に各並列ソート済みストリーム内で LIMIT BY を実行することで、ORDER BY ... LIMIT BY クエリを高速化しました。これにより、最終的なソートマージや後続のパイプライン処理を流れる行数を削減できます。この最適化は、新しい設定 query_plan_push_limit_by_into_sort (デフォルトで有効) で制御されます。#104000 (Nihal Z. Miaji).
  • <cols> がテーブルのソートキーのプレフィックスである場合、または WHERE col = const によって先頭カラムが固定されて結果的にそうなる場合に、SELECT ... LIMIT N BY <cols> クエリを高速化しました。これを有効にすると、MergeTree はプライマリキー順にデータを読み取り、まずストリーミングモードで LIMIT BY を適用して、ソート済みストリームごとに O(1) のメモリで大部分のデータを除外します。その後、絞り込まれたデータに対して通常の LIMIT BY を実行し、最終結果を取得します。新しい設定 optimize_limit_by_in_order (デフォルトで有効) で制御されます。#105135 (Nihal Z. Miaji).
  • パーティション化された MergeTree テーブル上の LIMIT BY クエリを高速化しました。すべてのストリームを 1 つにマージしてから制限を適用する代わりに、各パーティションのストリーム内で LIMIT BY を並列に実行します。これは、パーティション式が LIMIT BY のカラムの決定論的関数であり、どの LIMIT BY グループも 2 つのパーティションにまたがらない場合に適用されます。新しい設定 allow_limit_by_partitions_independently (デフォルトで有効) で制御されます。#105126 (Nihal Z. Miaji).
  • 冗長なキー式を削除することで LIMIT BY クエリを高速化しました。他のキーの決定論的関数であるキーは削除され (例: LIMIT 5 BY x, f(x)LIMIT 5 BY x になる) 、キーの単射関数はその引数に置き換えられます (例: LIMIT 5 BY toString(x)LIMIT 5 BY x になる) 。これにより、各行で評価する式の数が減り、評価コストも下がります。新しい設定 optimize_limit_by_function_keys および optimize_injective_functions_in_limit_by (いずれもデフォルトで有効) で制御されます。#106818 (Nihal Z. Miaji).
  • 分片化された aggregation、grace_hash join の bucket 化、および並列 window パーティション化を高速化しました。chunk ごとのカラム hash を、ハードウェア CRC32C を使用するカーネルに置き換えています。#106538 (Harikrishnan Prabakaran).
  • x86-64-v4/v3 において、マルチターゲット自動 vectorization により、配列引数に対する L1DistanceL2DistanceL2SquaredDistanceLinfDistancecosineDistance を最適化しました。非 const の配列引数については、実行時の指数を使って std::pow を使用する LpDistance を除き、これらすべてで compiler によって vectorized されたカーネルを利用できるようになりました。既存の AVX-512 および Sapphire Rapids の BFloat16 定数引数高速パスは、L2DistancecosineDistance について維持されています。#101310 (Peng).
  • {Norm}Distance および dotProduct 関数のパフォーマンスを改善しました。#106007 (Nikita Taranov).
  • arrayNorm 関数のパフォーマンスを改善しました。#106211 (Nikita Taranov).
  • 一部のケースで dotProduct のパフォーマンスが向上しました。#106210 (Nikita Taranov).
  • 配列長がベクトル化処理幅でちょうど割り切れる場合の、Array(Float32)Array(Float64)Array(BFloat16) に対する L2Distance および cosineDistance の AVX-512 const-left パスの性能を改善しました。#104625 (Sergey Kuznetsov).
  • amd 向けの AVX-512 codegen を有効にし、arrayDistance の codegen も改善しました。#106505 (Nikita Taranov).
  • QBit データ型に対する L2DistanceTransposed および cosineDistanceTransposed 関数の性能を改善しました。#106701 (Raufs Dunamalijevs).
  • encryptdecrypttryDecryptaes_encrypt_mysqlaes_decrypt_mysql 関数の性能を最大で 1 桁向上させ、BoringSSL から OpenSSL 3.x への移行 (24.4) で失われた性能を回復しました。#107339 (Konstantin Bogdanov).
  • OpenSSL 3.x で暗黙的に行ごとに行われていた OpenSSL provider のルックアップを回避することで、encryptdecrypthalfMD5 関数の性能を改善しました。#99105 (Konstantin Bogdanov).
  • AVX-512 を使用して複数の入力を並列にハッシュ化する SHA1 の SIMD 実装を追加し、スループットを向上させました。#105459 (Joanna Hulboj).
  • マルチバッファ MD5 実装向けに AArch64 ASIMD/NEON バックエンドを追加しました。#105563 (Venkata Vineel ).
  • MATERIALIZE PROJECTION 実行時に projection の計算前にソース block をまとめることで、一時的な projection パーツの数と merge のオーバーヘッドを削減しました。5000 万行の table で約 3.4 倍高速化します。#100047 (Amos Bird).
  • ORDER BY カラムに skip 索引がある MergeTree table で、part 書き込み時の不要なカラム並べ替えを回避することで INSERT レイテンシを削減しました (traces 系ワークロードで約 17%) 。#101101 (Amos Bird).
  • Arrow の SIMD code path (ARM の NEON、x86 の SSE4.2/AVX2/AVX512) を有効にし、それらを使用して BYTE_STREAM_SPLIT でエンコードされた Parquet の FLOAT/DOUBLE カラムのデコードを高速化しました。#106376 (Raúl Marín).
  • bloom_filter 索引を持つ LowCardinality カラムの挿入性能を改善しました。#106410 (Michael Jarrett).
  • ディスクごとの thread pool を使用して、DiskObjectStorageTransaction::copyFile で blob コピーを並列化しました。#105089 (Asya Shneerson).
  • files3 などの file 系 table function で One input format を使用する際に、ファイルの内容を読み込まないようにしました。#105157 (Yue Ni).
  • 動的シンボルを export しないようにすることで、macOS における clickhouse の起動を約 3 倍高速化しました。これにより、動的リンカーが起動のたびにそれらを処理する必要がなくなります。#107768 (Raúl Marín).
  • 起動時のファイルシステムキャッシュのloadingを、cache keyごとの冗長なディレクトリopenを避けることで高速化しました。#107414 (Alexey Milovidov).
  • 起動時のファイルシステムキャッシュのloadingを、ディレクトリ一覧取得の完了後に一覧取得用スレッドでもcacheメタデータを読み込めるようにし、スレッドの半分がidleのままにならないようにすることで高速化しました。#107416 (Alexey Milovidov).
  • 同梱のWasmEdgeライブラリを更新し、起動のたびにグローバル初期化子でランダムなhashシークレットを生成しなくなったことで、clickhouseプロセスの起動overheadを削減しました。#107869 (Raúl Marín).
  • MergeTreeの主キーとスキップ索引で、ifNullcoalesceが条件を包んでいるfilter、たとえばifNull(key = 0, 0)coalesce(key = 0, 0)でもgranuleを刈り込めるようになりました。こうしたpredicateは、NULLになり得る比較を確定的なブール値に変換するためにクエリジェネレータが出力することが多いものの、従来は索引解析から見て不透明だったため、granuleをスキップできませんでした。これは既存のallow_key_condition_coalesce_rewrite設定 (デフォルトで有効) を拡張するものです。#106264をクローズします。#106272 (Andy Zhao).
  • DateTime64型に対するスキップ索引の評価で、26.6ではCPU使用量が低減されるはずです。#107707 (Shankar Iyer).
  • まれなtokenの処理を最適化し、複数token検索におけるテキスト索引解析の性能を向上しました。#98226 (Anton Popov).
  • テキスト索引のposting list圧縮segmentにcacheを使用するようにしました。#106299 (Anton Popov).
  • テーブルの大きな連続範囲を選択するクエリに対する汎用排除検索の性能を向上しました。#93813 (Michael Jarrett).
  • 同じendpointとbucketを持つS3 clientsでcacheを共有し、重複したリージョンdiscoveryを回避するようにしました。#92482をクローズします。#96802 (Andrey Zvonov).
  • クエリにhas(<constant array>, <expr>)が含まれている場合、可能であればアナライザはそのノードを、より高速なin実装を使う形にtransformします。#97341 (Shankar Iyer).
  • ThreadPoolで新しいjobがscheduleされたとき、任意のワーカースレッドではなく、直近でidleになったワーカースレッド (LIFO) を起こすようにしました。これにより、スレッドごとのアロケータcacheに起因するメモリ断片化を低減します。jobの処理順序は変わりません。#100177 (Alexey Milovidov).
  • 近似ランタイムフィルタとbloom filter indexesの性能を向上しました。#100201 (Christoph Viebig).
  • ASOF JOINparallel_hash join algorithmを使えるようにし、異なる等価キー値ごとにbuildを並列化できるようにしました。従来、ASOFは無条件でparallel_hashの対象外でした。#105375 (Greg Maher).
  • 結果が空になることが分かっている空の入力がある場合、INTERSECTおよびEXCEPTクエリで無制限の入力を読み込まないようにしました。#105393 (Yue Ni).
  • 各種 MemoryTracker ブロッカーに constinit を追加しました。#105490 (Azat Khuzhin).
  • 範囲チェック時の rb_max の繰り返し呼び出しを回避することで、UInt64 以外の groupBitmap 状態に対する bitmapContains の性能を改善しました。#105960 (Yue Ni).
  • 単一の Dictionary を参照する LowCardinality カラムで、不連続なクエリを高速化しました。#103662 (Ivan Babrou).
  • ブロックが 1 行 בלבדの場合の HashJoin の probe に高速パスを追加しました。#106008 (Nikita Taranov).
  • SELECT ... FROM view(SELECT ... FROM remote(...)) WHERE ... のようなクエリの predicates が、リモートシャードに送信されるクエリに pushdown されるようになりました。最適化 allow_push_predicate_ast_for_distributed_subqueries では、table function のケースが考慮されていませんでした。#105986 (Nikolai Kochetov).
  • enable_join_transitive_predicates をデフォルトで有効化しました。#103724 (Alexander Gololobov).
  • テキスト索引で関数 multiSearchAnymultiSearchAnyUTF8multiMatchAny をサポートしました。あわせて、関数 match のテキスト索引解析も改善し、選択肢グループを含むパターンでより多くの granule をスキップできるようになりました。#106279 (Anton Popov).
  • 初回の PREWHERE 選択後に導入された filter (predicate pushdown、ランタイムフィルタ、または明示的な PREWHERE とプランナーが設定した WHERE) を、MergeTree 読み取りの上に отдель отдельの Filter ステップとして残すのではなく、2 回目のオプティマイザーパスで既存の PREWHERE にマージできるようにしました。#105445 (Yarik Briukhovetskyi).
  • QueryConditionCache が、PREWHERE を部分的に通過する読み取りバッチ内であっても、個別に filter で除外された granule を記録するようになりました。これにより、同じ condition を持つ後続クエリで再読み取りされる mark 数を削減できます。#105335 (Han Fei).
  • Keeper 設定 nuraft_use_bg_thread_for_snapshot_io を追加し、デフォルトで有効にしました。これにより、NuRaft は snapshot オブジェクトを Raft のワーカースレッドではなくバックグラウンドスレッドで読み込むようになります。#106285 (Antonio Andelic).
  • KeeperMemoryStorage を使用する ClickHouse Keeper で、受信した snapshot の適用時におけるピークメモリ使用量を削減しました。#105851 (Antonio Andelic).
  • LLVM/JIT の割り当てを専用の jemalloc アリーナに振り分けるようにしました。これにより、長寿命の JIT 管理用データと短命なクエリ割り当てが混在することで発生する RSS の断片化を軽減します。オブザーバビリティ向けに、新しい非同期メトリクス jemalloc.jit_arena.active_bytesjemalloc.jit_arena.dirty_bytesCompiledExpressionCacheBytesMaxCompiledExpressionCacheCountMax も追加しました。SYSTEM DROP COMPILED EXPRESSION CACHE は、基盤となる CHJIT インスタンスも破棄し、JIT アリーナをパージするようになりました。#104113 (Raúl Marín).
  • ネイティブ V3 リーダーで Parquet から疎な辞書エンコード済み Nullable(String) カラムを読み取る際に発生していた、過剰な memory reservation を修正しました。#102805 (Francisco).
  • 暗号化ディスク上で CREATE TABLE ... CLONE AS (and REPLACE / ATTACH PARTITION ... FROM) が、データをハードリンクせずコピーしてしまう問題を修正しました。 #106731 (Nikita Mikhaylov).
  • クエリプランオプティマイザにおけるカーディナリティ推定を改善しました。決定論的な単一引数関数 (例: toYear(date)) によって生成されるカラムは、統計情報がないまま扱われるのではなく、引数の異なる値の数を上限として引き継ぐようになり、join の並べ替え精度が向上しました。 #107757 (Alexander Gololobov).
  • 高ログレート時の非同期ログの CPU オーバーヘッドを削減しました。各メッセージごとではなく、キューが空から非空に遷移したときにのみログ consumer に通知するようにしました。 #107352 (Nikita Mikhaylov).
  • より多くの場面で、クエリ実行中の重複計算を削減しました。 #106113 (Yarik Briukhovetskyi).
  • recursive CTE の結果処理を並列化しました。大規模な WITH RECURSIVE の結果に対する GROUP BY などの操作が、単一スレッドに制限されなくなりました。 #107694 (Alexey Milovidov).
  • ARM では NEON SIMD パス、x86 ではより広い AVX2 kernel を追加し、大文字小文字を区別しない substring 検索 (positionCaseInsensitiveUTF8, ILIKE, multiSearchAnyCaseInsensitiveUTF8 などの関連関数) の性能を改善しました。 #107882 (Raúl Marín).
  • FPC 浮動小数点 codec で、ARM において約 16% 発生していたスループット低下を修正しました。この問題は、predictor table が VectorWithMemoryTracking を使用するようになった際に発生したものです。 #108182 (Groene AI).

改善

  • バックグラウンドの MemoryWorker が、現在のメモリ使用量とカーネルが利用可能として報告するメモリ量に基づき、サーバーの hard memory limit を定期的に更新するようになりました。これにより、ClickHouse は同じホスト上で動作するほかのプロセスのための余裕を確保できます。計算式は (resident memory + system MemAvailable) * max_server_memory_usage_to_ram_ratio です。同じ server setting max_server_memory_usage_to_ram_ratio で、起動時の上限と動的調整の両方を制御します。両方を無効にするには 0 に設定してください。静的な起動時/再読み込み時の上限のみ (以前のバージョンの動作) を維持するには、新しい server setting memory_worker_dynamic_hard_limit0 に設定してください。#104964 (Alexey Milovidov).
  • PostgreSQL プロトコルで C# PostgreSQL client をサポートしました。これにより #18611 が解決されます。#80785 (Konstantin Vedernikov).
  • mutations でアナライザを使用するようになりました。#98884 (Nikolai Kochetov).
  • CLI でのクエリのエコー出力をきめ細かく制御できるようになりました。--echo オプションはオプションのブール値を受け取るようになり、対話モードと batch mode の両方で動作します。新しいオプション --echo-formatted--echo-query-id は、それぞれエコーされたクエリを整形するかどうか、および query_id を表示するかどうかを制御します。--hilite/--highlight オプションは、エコーされたクエリのハイライトも制御するようになりました。その副作用として、--echo はブール値オプションになったため、値を指定しない --echo の直後に位置引数のクエリを置くと、その値として扱われます。代わりに --echo --query "..." または --echo=false を使用してください。#106191 (Alexey Milovidov).
  • データレイクのカタログで、schema evolution と同時実行の整合性チェックを併用できるようになりました。#106102 (Konstantin Vedernikov).
  • datalake table engines でキャッシュディスクを利用できるようになりました。#102017 (RinChanNOW).
  • catalog_type = 'onelake' を使用する DataLakeCatalog database での table データ読み取りを修正し、デフォルトで OneLake Blob endpoint (.blob.fabric.microsoft.com) を使用するようにしました。以前の DFS endpoint (.dfs.fabric.microsoft.com) の動作を維持するには、onelake_use_blob_endpoint = false を設定してください。#106843 (Konstantin Vedernikov).
  • S3(Azure)Queue setting persistent_processing_node_ttl_seconds のデフォルト値を 1 hour から 6 hours に変更しました (service の異常再起動などに伴うクリーンアップ時間を表します) 。以前のデフォルトは処理ノードの ttl としては問題ありませんでしたが、bucket lock の ttl にも使われており、こちらはより長時間保持される場合があるため、1 時間では不十分でした。#106838 (Kseniia Sumarokova).
  • Iceberg メタデータキャッシュのデフォルトサイズを 1 GB から 128 MB に縮小しました。#106492 (Konstantin Vedernikov).
  • S3Queue streaming task の query_id を、依存先の table insert に伝播するようにしました。#106494 (Christoph Wurm).
  • DataLakeCatalog 経由で table をクエリする際に、system.query_logused_storages に storage engine 名を設定するようになりました。#100706 (Melvyn Peignon).
  • Iceberg の snapshots がどの 'operation' とどの 'summary' を持つかを確認できるようになりました。テストやデバッグに役立ちます。#106246 (Den Kalantaevskii).
  • 最終的な S3 の multipart upload リクエストを task tracker 経由で非同期に完了するようにし、finalize で直列に実行する代わりに、最後の part の upload と並行して処理できるようにしました。#105487 (Asya Shneerson).
  • テキスト索引のデフォルトパラメータを制御するための 4 つの新しい MergeTree テーブル設定 text_index_dictionary_block_sizetext_index_dictionary_block_frontcoding_compressiontext_index_posting_list_block_sizetext_index_posting_list_codec を追加しました。これらの設定により、各索引定義で毎回パラメータを指定しなくても、テーブルレベルでテキスト索引の動作を調整できます。明示的に指定した索引ごとの argument は引き続き優先されます。#100626 (Anton Popov).
  • projections が、index_granularity だけでなく、追加の MergeTree 設定 (圧縮、part フォーマット、シリアライゼーション) も上書きできるようにしました。これには、許可された設定の allow-list と検証が含まれます。#101170 (Amos Bird).
  • projection の merge の進捗を公開するため、system.mergescurrent_projectioncurrent_projection_progressprojections_completedprojections_remaining カラムを追加しました。#102611 (Amos Bird).
  • 主キーカラムに対する IN サブクエリ付きの PREWHERE で、granule pruning に主キー索引が使われず、関連する granule だけでなく full table scan が発生していた問題を修正しました。#102570 (Nikita Mikhaylov).
  • 関数 h3PolygonToCells が、MultiPolygon のすべての Polygon に対して最大配列サイズを適用し、基盤となる H3 ライブラリの戻りコードを検証し、空の結果を黙って返す代わりに MultiLineString argument を拒否するようになりました。#106399 (Raúl Marín).
  • ローカルの ClickHouse Keeper snapshots に関する情報を持つ、keeper 専用の新しい system.keeper_snapshots テーブルを追加しました。#105571 (Miсhael Stetsyuk).
  • ローカルの ClickHouse Keeper changelog (Raft log) ファイルに関する情報を持つ、keeper 専用の新しい system.keeper_changelogs テーブルを追加しました。#105617 (Miсhael Stetsyuk).
  • keeper 専用の system.keeper_cluster テーブルを追加しました。現在の Keeper から見た各 Raft クラスター member につき 1 行を持ちます。#105646 (Miсhael Stetsyuk).
  • watches 向けに、Keeper の profile event (server-side + client-side) をさらに追加しました。#97703 をクローズします。#105336 (Konstantin Vedernikov).
  • NuRaft の未コミット log entry の受け入れ制限と append-entries の backward-probe throttling 向けの Keeper coordination_settings を追加しました。#106108 (Antonio Andelic).
  • mysql table function、MySQL table engine、MySQL データベースエンジン、dictionary SOURCE(MYSQL)、および named collections に enable_compression 設定を追加しました。有効にすると、ClickHouse は connection 上で転送されるすべてのデータに対して MySQL プロトコルレベルの圧縮をネゴシエートします。#103229 (Bernard Lim).
  • PostgreSQL ワイヤプロトコル経由で実行されるクエリのキャンセル遅延を短縮しました。KILL QUERY は、chunk 全体がクライアントに送信されるのを待たず、単一の chunk 内で出力のシリアライゼーションを中断できるようになりました。#106535 (Roman Vasin).
  • MySQL ワイヤプロトコル経由で実行されるクエリのキャンセル遅延を短縮しました。KILL QUERY は、chunk 全体がクライアントに送信されるのを待たず、単一の chunk 内で出力のシリアライゼーションを中断できるようになりました。#107228 (Roman Vasin).
  • MySQL ハンドシェイクにおける auth_response の長さの読み取りを修正しました。長さバイト >= 128 が signed char として読み取られていたため、複数 GB の値として解釈されていました。#107384 (uwezkhan).
  • MaterializedPostgreSQL で、精度が 76 を超える PostgreSQL の numeric(p, 0) 列 (たとえば 256 ビット整数に使われる numeric(78, 0)) を、“Precision too big” で失敗させる代わりに、ClickHouse の Int256 にマッピングするようになりました。Int256 に収まらない値は、明確なエラーで拒否されます。#107431 (Alexey Milovidov).
  • TCP connection の確立に失敗した場合、クライアントに例外を送信するようにしました。#107317 (Nikolai Kochetov).
  • AvroFixed フィールドを、8 ビット / 16 ビット / 32 ビット / 64 ビット整数バリアントに挿入できるようになりました。#98139 (Patrick Pichler).
  • AvroConfluent フォーマットで、一時的な障害 (転送タイムアウト、接続拒否、DNS エラー、HTTP 5xx/408/429) が発生した場合、最初のネットワーク障害で INSERT を中止するのではなく、Confluent スキーマレジストリ HTTP クライアントを指数バックオフ付きで再試行するようになりました。新しい設定 format_avro_schema_registry_max_retries (デフォルト 5) および format_avro_schema_registry_retry_initial_backoff_ms (デフォルト 100) でこのポリシーを制御します。スキーマ検証エラー (HTTP 409、不正な Avro JSON) は引き続き致命的です。#106661 (Groene AI).
  • system.query_log.used_privileges に、例外を送出しない isGranted 経路 (checkAccessWithFilter) を含む、付与済みのすべてのアクセスチェックの privileges を記録するようになりました。従来は、例外を送出するエントリポイント (checkAccess / checkGrantOption) 経由でチェックされた privileges のみが記録されていたため、file / s3 / azure / url table functions を使う DESCRIBECREATE TABLE AS、および同様のクエリでは、READ ON FILE / READ ON S3 / READ ON AZURE / READ ON URL が監査ログに記録されませんでした。アクセス制御の適用自体に変更はありません。#104693 (Alexey Bakharew).
  • MergeTree ファミリーのテーブルに格納されたデータの総非圧縮サイズを報告する非同期メトリクス TotalUncompressedBytesOfMergeTreeTablesTotalUncompressedBytesOfMergeTreeTablesSystem を追加しました。#106364 (Alexey Milovidov).
  • サーバー全体のメモリ制限に達したタイミングを運用担当者が監視できるよう、プロファイルイベント GlobalMemoryLimitExceeded を追加しました。#106466 (Sacheendra Talluri).
  • executable_pool UDF 向けに ExecutableUserDefinedFunction* ProfileEvents カウンターを追加しました。呼び出しごとの実行回数、実時間とプール待機時間、子プロセスの CPU 使用量とピークメモリ、stdin/stdout のバイト数が system.query_log.ProfileEvents で確認できるようになりました。#105010 (Xu Jia) #105618 (Ilya Andreev).
  • 非同期メトリクス ExecutableUserDefinedFunctionMemoryResidentBytes および ExecutableUserDefinedFunctionProcesses を追加しました。これらは、executable および executable_pool user-defined function について、子孫プロセスや待機中のプールワーカーを含む常駐メモリ (VmRSS) と稼働中プロセス数を報告します。#107300 (Hanzi Jiang).
  • Linux 専用の 3 つの async メトリクス MemoryThreadStacksCountMemoryThreadStacksVirtualMemoryThreadStacksResident を追加しました。これらは pthread スタックメモリを、その他の匿名メモリとは分けて報告します。asynchronous_metrics_enable_heavy_metrics で有効になります。Linux 5.17+ (prctl(PR_SET_VMA_ANON_NAME)) と、読み取り可能な /proc/self/smaps が必要です。これらの条件を満たさない場合、メトリクスは出力されず、その制限は system.warnings に記録されます。#106230 (Raúl Marín).
  • macOS で MemoryThreadStacks* 非同期メトリクス (スレッドスタックの resident/virtual サイズと本数) を利用できるようにしました。#107752 (Raúl Marín).
  • テーブルエンジンに埋め込みドキュメントが追加され、新しい system.table_engines テーブルの descriptionsyntaxexamplesintroduced_inrelated カラムを通じて内部情報を確認できるようになりました。#106177 (Alexey Milovidov).
  • データベースエンジンに埋め込みドキュメントが追加され、新しい system.database_engines テーブルの descriptionsyntaxexamplesintroduced_inrelated カラムを通じて内部情報を確認できるようになりました。#106178 (Alexey Milovidov).
  • データ型に埋め込みドキュメントが追加され、新しい system.data_type_families テーブルの descriptionsyntaxexamplesintroduced_inrelated カラムを通じて内部情報を確認できるようになりました。#106180 (Alexey Milovidov).
  • 入力/出力フォーマットに埋め込みドキュメントが追加され、新しい system.formats テーブルの descriptionexamplesintroduced_inrelated カラムを通じて内部情報を確認できるようになりました。#106181 (Alexey Milovidov).
  • 集約関数コンビネータに埋め込みドキュメントが追加され、新しい system.aggregate_function_combinators テーブルの descriptionsyntaxexamplesintroduced_inrelated カラムを通じて内部情報を確認できるようになりました。#106185 (Alexey Milovidov).
  • clickhouse-clientclickhouse-local、および埋め込み client に --chime コマンドラインオプションを追加しました。クエリの実行時間が少なくとも N 秒に達したあとで終了すると (成功時・エラー時を問いません) 、client は ASCII の BEL 制御文字 (\x07) を stderr に書き込みます。音を鳴らすか画面を点滅させるかは、ユーザー設定に応じて端末が判断します。既定では 5 秒のしきい値で有効です。任意のしきい値を設定するには --chime N を、無効にするには --chime 0 を指定します。#92718 をクローズしました。#104545 (Groene AI).
  • clickhouse-client では、端末が bracketed paste をサポートしていない場合でも、貼り付けた複数行クエリ内の改行が、行ごとに継続プロンプトへ切り替わるのではなく、同じ編集バッファにまとめられるようになりました。貼り付けたクエリは 1 つのプロンプト配下に保持され、矢印キーで行をまたいで移動できます。これは一般的な TTY のバッファ付き貼り付け動作に依存する、ベストエフォートの改善です。#104299 (Alexey Milovidov). また、構文ハイライトが無効 (--highlight 0) な場合でも動作するようになりました。#106665 (Alexey Milovidov).
  • clickhouse-client/clickhouse-local に、MySQL 形式の runtime pager 制御を追加しました。#105706 (Azat Khuzhin).
  • clickhouse-client が UTF-8 以外の端末にも対応するようになりました。端末の文字エンコーディングが UTF-8 でない場合 (たとえば LANG=C のとき) 、Pretty フォーマットは、端末表示を乱すおそれのある Unicode の罫線文字を出力する代わりに、ASCII のグリッド罫線にフォールバックします。#106213 (Alexey Milovidov).
  • clickhouse-clientHello パケット処理で、server から渡される表示用文字列 (server 名、time zone、表示名、password ルールの pattern とメッセージ) をサニタイズし、悪意のある server が client にそのまま表示されるバイト列を注入できないようにしました。あわせて、無制限な割り当てを防ぐため、これらのサイズにも上限を設けました。#105243 (Raúl Marín).
  • Web UI では、クエリが FORMAT PNG のような image 出力フォーマットを使用している場合、生データ bytes を table として表示する代わりに、結果を image として表示するようになりました。#107638 (Alexey Milovidov).
  • output_format_pretty_use_nbsp_for_padding setting を追加しました。output_format_pretty_grid_charsetUTF-8 の場合、table スタイルの Pretty フォーマットで table レイアウトの padding を U+00A0 NO-BREAK SPACE として描画します。これにより、通常のスペースを詰めてしまうツールでも、コピーした Pretty 出力で table の位置合わせを維持しやすくなります。この setting はデフォルトで無効で、ASCII charset の出力では通常のスペースを使用します。#103559 (Ashrith Bandla).
  • universal install script が、Linux と macOS で clickhousectl~/.local/binchctl の symlink とともにインストールするようになりました。スキップするには CLICKHOUSE_ONLY=1 を設定してください。#105399 (Alasdair Brown).
  • curl https://clickhouse.com/ | sh で ClickHouse をインストールする際、現在のディレクトリにすでに clickhouse binary が存在すると断続的に発生していた、誤検知の Syntax error: Unterminated quoted string を修正しました。#106417 (Alexey Milovidov).
  • ウェブターミナルが開いているときに play.html ページの左パネルの高さを修正し、下部の端末トグルボタンが見えたままになるようにしました。#105087 (Alexey Milovidov).
  • Web UI で、実行後に唯一のクエリが選択されないようにしました。#105711 (Joey Yu).
  • Web SQL UI で、クエリの高さが現在の editor の高さを最大 30% 上回る場合に、クエリエディタを展開するようになりました。#105713 (Joey Yu).
  • Web UI では、左パネルを展開した際に下部メニューのアイコン (ウェブターミナルと GitHub) を横並びにし、データベースとテーブルの一覧により多くの縦方向のスペースを確保するようにしました。 #106427 (Alexey Milovidov).
  • Web UI (play.html) で、Escape キーを押すと現在選択中の結果テーブルのセルが非アクティブになるようになりました。 #107777 (Alexey Milovidov).
  • Web SQL UI (Play) のデータベースパネルを改善しました。データベースアイコンのツールチップ、パネルを非表示にするボタン、データベース名/テーブル名全体をクリック可能にする変更、およびスクロールバー表示時にパネル幅がずれる問題の修正が含まれます。 #108013 (Alexey Milovidov).
  • 任意の割り当てで MEMORY_LIMIT_EXCEEDED を送出できるようにするサーバー設定 (min_allocation_size_to_throw_on_memory_limit) を追加しました。これにより OOM の防止に役立つはずです。 #105265 (Azat Khuzhin).
  • SSH で NONE 認証を許可しました (no_password ユーザーにパスワードを求めないようにします) 。 #105476 (Azat Khuzhin).
  • clickhouse su で、権限を落とす前に補助グループの一覧をリセットするようにし、/bin/su および sudo の動作に合わせました。これまでは、権限を落としたプロセスが呼び出し元の補助グループを継承していました。 #105247 (Raúl Marín).
  • 数値判定関数 (isFinite, isNaN) に BFloat16 のサポートを追加しました。 #105391 (Mohamed Hussain S).
  • polygon dictionaries (polygon_index_cell, polygon_index_each) のメモリ使用量を削減し、system.dictionaries.bytes_allocated がそれらの構築するルックアップ索引を正しく反映するようにしました。 #105431 (Raúl Marín).
  • パーティション割り当て後も短いポーリング間隔を使い続けていた Kafka table engine のコンシューマーを修正し、設定された kafka_poll_timeout_ms に戻るようにしました。これにより、過剰な空ポーリング、より小さい挿入パート、rebalance 後の余分な merge オーバーヘッドを回避します。 #100431 (sugaf1204).
  • クエリプランで未使用カラムを削除する際、カラムを名前ではなく位置で識別するようにしました。これにより、重複したカラム名が存在する場合でも未使用カラムの削除が可能になります。 #100586 (János Benjamin Antal).
  • レプリケーション対応エンジンに対して table_readonly を使おうとした場合に、ClickHouse が適切な例外を送出するようになりました。また、この設定に関連する DDLクエリ (および DatabaseReplicated) の例外処理も改善されています。 #100950 (alesapin). OPTIMIZE TABLE ... ON CLUSTER やその他の DDL は、ターゲットテーブルに table_readonly = 1 が設定されていても、もうハングしません。この設定は新しい専用のエラーコード TABLE_IS_PERMANENTLY_READ_ONLY を送出するようになり、DDLWorker はこれを再試行不可として扱います (ReplicatedMergeTree の一時的な ZooKeeper 切断時に発生する一過性の TABLE_IS_READ_ONLY とは区別されます) 。また、table_readonly 設定は ReplicatedMergeTree に対して、作成時にも ALTER MODIFY SETTING 経由でも、明示的に拒否されるようになりました。 #97652 の後続対応です。 #105109 (Alexey Milovidov).
  • ターゲットテーブルの置き換え後 (たとえば EXCHANGE TABLES や削除して再作成した場合) に UNKNOWN_TABLE で失敗することがあったリフレッシャブルmaterialized view の refresh を修正しました。refresh は古い UUID に依存せず、名前でターゲットテーブルを解決するようになりました。#102724 (Seva Potapov).
  • 設定 wait_for_part_commit_in_dependent_materialized_views (デフォルトは false) を追加しました。materialized view の SELECT が自身のソーステーブルを再度読み込む場合 (たとえばソースに対する INNER JOIN を介する場合) 、依存 view の実行時点では挿入中の part がまだ commit されていないため、カスケード処理でその時点の行を取りこぼすことがありました。この設定を有効にすると、依存 view が実行される前に part を commit するため、処理中の行も参照できるようになりますが、その代償として挿入の並列度は低下します。#105943 (Elmi Ahmadov).
  • tryDeserialize で致命的なエラー (たとえば MEMORY_LIMIT_EXCEEDED) を握りつぶさないようにしました。#106808 (Azat Khuzhin).
  • InverseDictionaryLookupPass で、CREATE TEMPORARY TABLE の権限を遅延チェックするようにしました。#107098 (Azat Khuzhin).
  • serialize_query_plan = 1 が設定され、定数 argument を持つラムダ (たとえば arrayMap(t -> t.2, ...)) を含む distributed queries で発生していた ILLEGAL_TYPE_OF_ARGUMENT エラーを修正しました。ActionsDAGINPUT ノードにある定数カラムが、クエリプランのシリアライゼーション時にも保持されるようになりました。#107124 (Alexey Milovidov).
  • contingencycramersVcramersVBiasCorrectedtheilsU の aggregate functions の状態のデシリアライゼーションで、保存されたカウントが整合性のある contingency table を構成していることを検証するようになり、そうでない場合は CORRUPTED_DATA 例外を送出します。#106899 をクローズしました。#107185 (Nihal Z. Miaji).
  • arrow::Status でラップされた例外について、元の error codes を保持するようにしました。#107267 (Azat Khuzhin).
  • 静的な server configuration (users.xml) で定義された quota で keyed_by_normalized_query_hash をサポートし、既存の CREATE QUOTA ... KEYED BY normalized_query_hash DDL syntax と整合するようにしました。#107654 (Alexey Milovidov).
  • 互換性設定は廃止された設定を適用しなくなったため、それらを変更済みとしてマークしたり、廃止された設定に関する警告を出したりしなくなりました。#107737 (Maxim Orlovsky).
  • 非同期 INSERT では、trace/debug レベルで query_id の完全な一覧をログ出力しなくなりました。これは 26.2 以降、非同期 INSERT トラフィックの多い services で text_log を肥大化させる可能性があったためです。詳細な行は現在 test レベルで出力されます。#107852 (Sema Checherinda).
  • ファイルシステムキャッシュの改善: 無効化された priority エントリが KeyMetadata を pin しないようにしました。#106387 のフォローアップです。#107903 (Kseniia Sumarokova).
  • FileCache のメトリクスを改善しました。#106116 (Kseniia Sumarokova).
  • スタックトレースが実際には空の場合、例外メッセージで “Stack trace (when copying this message, always include the lines below):” という前置きを表示しないようにしました。 #106524 (Alexey Milovidov).
  • 非常に大きなオフセットに対するファイルシステムキャッシュの境界アラインメント計算時に、roundUpToMultiple で発生しうる overflow を修正しました。 #92579 (Bharat Nallan).
  • EXPLAIN SYNTAX が、explain 出力内で演算子を一貫して関数呼び出しとして整形するようになりました (たとえば 1 + 2 ではなく plus(1, 2)) 。 #94681 (Mohamed Abdelhalim ).
  • error メッセージ内の table 名候補を改善しました。同じ名前そのものは候補に出さなくなり、候補に database 名も含めるようになりました (例: “Maybe you meant other_db.my_table?”) 。 #95116 (Mathuranath Metivier).
  • FROM clause のないクエリで未解決の Identifier がある場合の error メッセージを改善し、FROM clause を追加するよう案内するようにしました。 #101769 (Yash ).
  • 繰り返される processor chain を compact に表示する EXPLAIN PIPELINE オプションを追加しました。 #104662 (Yue Ni).
  • 構文 error メッセージの構築時に発生していた heap-buffer-overflow の読み取り (parseQuery.cpp 経由の UTF8::computeWidthImpl) を修正しました。これは、パーサーが最初のセミコロンまたはストリーム終端トークンより前までバックトラックした際に発生していました。release builds では近傍の heap メモリのバイト列が表示される error に混入し、ASan builds では異常終了していました。 #105086 (Groene AI).
  • 互換性設定 file_like_engine_default_partition_strategy で、hive パーティション方式をデフォルトにしました。 #86746 (Kseniia Sumarokova).
  • macOS で thread stack をより大きい 8 MiB にして Linux のデフォルトに合わせ、JIT コンパイル中の stack overflow によるまれな server クラッシュを修正しました。 #107033 (Raúl Marín).
  • clickhouse-local の一時ストレージサイズ上限は、1 GiB にハードコードされなくなりました。デフォルトは 1 TiB に引き上げられ、max_temporary_data_on_disk_size サーバー設定で構成できます。 #106689 (Alexey Milovidov).
  • clickhouse-disksread-checksums コマンドを追加しました。MergeTreeDataPartchecksums.txt ファイルを読み取り、人間が読みやすいタブ区切りの table として出力します。 #106901 (Asya Shneerson).
  • clickhouse-disksread-bitmap コマンドを追加しました。 #107834 (murphy-4o).
  • Chdig: セキュアな接続のために TLS を有効化しました (従来は “unknown setting skip_verify” または “connection reset by peer” のいずれかが発生していました) 。 #105864 (Azat Khuzhin).
  • chdig v26.5.1#105918 (Azat Khuzhin).
  • chdig v26.6.1 - {asynchronous_,}metric_log、クエリパターン、ヒートマップ、ディスクに保存された logs/traces に対応しました (以前は1時間分の traces で >40GiB を使用することがありました) 。#107678 (Azat Khuzhin).
  • サーバー設定 (programs/server/config.xml) で keep_alive_timeout が 30 に設定されるようになりました (従来は 10) 。これにより、ドキュメントおよび実装上の実際のデフォルト値と整合します。#107779 (Dan Checkoway).
  • サーバー設定 disk_connections_rcvbuf のデフォルト値が 0 (kernel TCP autotuning) から 204800 (200 KB) に変更され、オブジェクトストレージ (S3/Azure/GCS) のディスクへの接続におけるソケットごとの TCP 受信バッファの上限が設定されました。#107859 (Sema Checherinda).
  • PREWHERE オプティマイザは、選択性を見積もる前に同じカラム集合を参照する conjuncts をグループ化するようになりました。これにより、a > 2500 AND a < 2502 のような条件は、2つの独立した predicates ではなく、1つの結合された range としてまとめて評価され、より正確に選択性を推定できます。#106337 (Han Fei).
  • silk fiber 対応の secure/plain socket 実装を追加しました。#107680 (Miсhael Stetsyuk).
  • nested 関数で、文字化けしたエラーメッセージ (引数の順序が入れ替わっていた) とタイプミスを修正しました。#108031 (Alexey Milovidov).
  • clickhouse-disks に、指定した path に sed 式をインプレースで適用する sed コマンドを追加しました。#107131 (Asya Shneerson).
  • MaterializedPostgreSQL データベースエンジンに、作成時設定 materialized_postgresql_use_extended_date_and_time_types を追加しました。デフォルトでは (有効時) 、PostgreSQL の date/timestamp カラムは Date32/DateTime64 として推論されます。CREATE DATABASE 時にこれを 0 に設定すると、より狭い Date/DateTime 型として推論されます。#107428 (Alexey Milovidov).

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • tryN サフィックスが付いたデタッチされたパーツを削除できるようにしました。#58957 (János Benjamin Antal).
  • 並列レプリカ実行時に、ネストされたサブクエリ内で重複する projection alias (たとえば SELECT *, day + 365 AS day) を含むクエリで発生していた MULTIPLE_EXPRESSIONS_FOR_ALIAS 例外を修正しました。#80310 (Alexey Milovidov).
  • セミコロンの後に comment がある形で終わるクエリに対して、splitMultipartQuery が “Empty query” エラーを返す不具合を修正しました。#85491 (Yarik Briukhovetskyi).
  • ARRAY JOIN に関する不具合を修正しました。LowCardinality の Numeric types を使用している場合に、Function writeSlice expects same column types for GenericArraySlice and GenericArraySink 例外が発生していました (issue #57243) 。#91784 (Jimmy Aguilar Mena).
  • 新しいアナライザで、定数カラムを DISTINCT および ORDER BY と併用した LIMIT BY 使用時に発生する NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#93195 (Ashrith Bandla).
  • data_type_default_nullable = 1 で、かつテーブルを Replicated database 内または ON CLUSTER 経由で作成した場合に、NOT NULL カラムが暗黙的に Nullable として作成されてしまう問題を修正しました。#97572 (xiaohuanlin).
  • Hive Metastore との通信時に発生する TTransportException エラーに対処するため、自動リトライ機構と再接続ロジックを追加し、HiveCatalog connection の安定性を改善しました。#98471 (Dmitriy Borisenko).
  • nested 関数 (ARRAY JOIN の内部で使用) がカラム型から LowCardinality を取り除いてしまい、出力で Array(LowCardinality(String))Array(String) になってしまう問題を修正しました。#95582 をクローズします。#98974 (Yash ).
  • 並列レプリカを有効にしたクエリで urls3、または同様の table function を使用した際に発生する “Distributed task iterator is not initialized” 例外を修正しました。#100146 (Alexey Milovidov).
  • external ツール (例: Spark) によって format version が更新された Iceberg tables の読み取り時に発生する論理エラー例外を修正しました。#100407 (Alexey Milovidov).
  • likeilikenotLikenotILikematch 関数が、定数でない needle を伴う定数 haystack (例: 'foo' LIKE pattern_column) をサポートするようになりました。これまでは ILLEGAL_COLUMN が発生していました。#100479 (Yash ).
  • view が整数カラムを Bool カラムにマッピングしている場合に、query_plan_enable_optimizations = 0 を指定した MaterializedView クエリで返される行数が誤っていた問題を修正しました。#100692 (Maksim Moisiuk).
  • PREWHERE optimization が有効な状態で、ORC data files を含む Iceberg tables を読み取る際に発生する例外 (LOGICAL_ERROR: 'PREWHERE passed to format that doesn't support it') を修正しました。#101206 (Groene AI).
  • RestCatalog の競合状態を修正しました。#101216 (Smita Kulkarni).
  • 通常の projection を持つ table 上の VIEW から select する際に発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。#101218 (Amos Bird).
  • file が削除されて再作成されたときに、FileLog で古いメタデータが残る問題を修正しました。#101408 (Azat Khuzhin).
  • RIGHT/LEFT JOIN が別の table とカンマ結合 (cross) されている場合 (例: t1 RIGHT JOIN t2 ON t1.c = t2.c, t3) に、join の並べ替えによって不一致の行が欠落してしまう問題を修正しました。以前は、クエリは outer join の結果ではなく inner join の結果を返していました。#101684 (Groene AI).
  • EXPLAIN INSERT INTO ... SELECT ... FORMAT ... において、FORMAT clause が EXPLAIN の出力に適用されず、INSERT によって消費されてしまう問題を修正しました。#101772 (Yash ).
  • table レベルの default_compression_codec setting が明示的に設定されている場合に、MergeTree パーツで誤った圧縮 codec が選択される問題を修正しました。INSERT 時、merge 中、および projection 用に書き込まれるパーツで、table レベルの setting ではなく server 全体の default codec が使われていました (完全削除 mutation によって生成される空の part も今回の修正対象に含まれます) 。#101784 (Yash ).
  • max_bytes_per_secondmax_cpus などのワークロード設定で、負の Float64 値 (例: -100.5) を拒否するようにしました。以前は負の整数しか検証されておらず、その結果、負の浮動小数点数によって壊れた scheduler node が気付かれないまま作成される可能性がありました。#101825 をクローズします。#101842 (Groene AI).
  • JOIN 内で aggregation を含む VIEW が関与するクエリの実行時に発生することがあった LOGICAL_ERROR (“Port is not connected”, code 49) を修正しました。#102574 (Jimmy Aguilar Mena).
  • default 以外のシリアライゼーションを持つカラムに対する mutation 後に、part のメタデータが不整合になる問題を修正しました。#102817 (Eduard Karacharov).
  • mutation の実行前にメタデータを更新するよう修正し、#96806 を解消しました。#102882 (Smita Kulkarni).
  • 同時実行中の INSERT があると SELECT クエリが大幅に遅くなる問題を修正しました。以前は INSERT pipeline が、実際にはほとんどの slots を使わない場合でも、クエリ開始時に max_threads まで CPU slots を予約していたため、同時実行中の SELECT が飢餓状態になっていました。CPU slot の割り当ては需要駆動型になり、pipeline は実際に並列化可能な作業を push するときにのみ slots をリクエストします。これは同時実行制御と、ワークロード向けのプリエンプティブ CPU scheduler の両方に適用されます。新しい server setting concurrent_threads_lazy_allocation (default は true) は rollback の手段として機能します。#102928 (Seva Potapov).
  • Nullable(Tuple(...)) カラムから抽出した subcolumns の読み取り時における NULL の伝播を修正しました。たとえば tup Nullable(Tuple(s Nullable(String))) では、SELECT tup.s が、外側の tuple が NULL の行で garbage values ではなく正しく NULL を返すようになりました。これは NULL を表現できるすべての要素型、すなわち NullableDynamicVariantLowCardinality(Nullable(...)) を対象としています。#105356 をクローズしました。#102942 (Nihal Z. Miaji).
  • Native format でクライアントから渡されたデータが truncated している、または不正な形式である場合に、LOGICAL_ERROR ではなく INCORRECT_DATA を送出するようにしました。#102975 (János Benjamin Antal).
  • ObjectStorage の読み取り処理にキャンセルチェックを追加しました。#98165 をクローズしました。#103016 (Smita Kulkarni).
  • aggregate function のパラメーターのデコード時に input_format_binary_max_type_complexity を考慮するようにしました。#102903 をクローズしました。#103026 (Pavel Kruglov).
  • Arrow ベースの Parquet リーダーで Geo カラムの Nullable 推論を修正しました。#101845 をクローズしました。#103032 (Pavel Kruglov).
  • recursiveRemoveLowCardinality がカスタムのジオメトリ型名 (例: LineStringRingMultiLineStringPolygon) を消してしまい、ジオメトリ型の誤解釈を引き起こしていた問題を修正しました。#103207 をクローズしました。#103041 (Joanna Hulboj).
  • max_insert_block_size_bytes0 (デフォルト) の場合に、INSERT のパース中に input_format_max_block_size_bytes が黙って無視されていた問題を修正しました。これにより、この設定は行 input formats によって生成される blocks のサイズを正しく制限するようになりました。#103068 (Kirill Kopnev).
  • ClickHouse が、末尾の null byte を不適切に削除していたために無効な GSSAPI tokens を断続的に生成していた問題を修正しました。#103114 (Michael Jarrett).
  • short-circuit functions (ifmultiIfandor など) に対するアナライザ時の定数畳み込みを修正し、静的に到達不能な分岐で解析時に例外が発生しないようにしました。たとえば WITH 0 AS n SELECT multiIf(n = 0, 0, intDiv(100, n)) は、ゼロ除算エラーで失敗するのではなく、正しく 0 を返すようになりました。#103157 (Peng).
  • EXPLAIN SYNTAX がパラメーター化ビューを展開するようになりました。#103263 (Jordi Villar).
  • INSERT INTO FUNCTION hdfs(...) 経由で HDFS に Parquet (および ORC や Arrow などの trailer を持つ他のフォーマット) を書き込む際に発生していたデータ破損を修正しました。26.1 以降、WriteBufferFromHDFSfinalize() 時に作業バッファを flush していなかったため、各ファイルの末尾最大 DBMS_DEFAULT_BUFFER_SIZE バイトが黙って失われ、Parquet の PAR1 footer もその対象になっていました。このようなファイルを読み込むと、Not a Parquet file (wrong magic bytes at the end of file) が返されていました。#103268 (Groene AI).
  • 相関サブクエリで、join サイズ制限 (max_rows_in_join / max_bytes_in_join) を join_overflow_mode = 'break' と併用した場合に発生していた、誤った結果および論理エラーの可能性を修正しました。相関サブクエリを評価するために内部的に作成される join は、これらのユーザー制限を無視するようになったため、途中で早期停止して行を落とすことがなくなりました。#103322 (Groene AI).
  • EmbeddedRocksDB テーブルに対する ALTER TABLE ... MODIFY SETTING で、server がクエリを拒否した場合でも、無効な設定値がテーブルのメタデータファイルに永続化されることがある bug を修正しました。次回の server 再起動時には、テーブルの attach が CANNOT_PARSE_BOOL (または同様のパース error) で失敗し、ロード失敗が致命的となる database では server の起動自体が拒否されていました。現在は、無効な設定値はメタデータが書き込まれる前に拒否されます。#103417 (Groene AI).
  • サポートされていない数の argument を指定して object storage engine (AzureBlobStorage, DeltaLakeAzure, S3, HDFS) でテーブルを作成した際に、server が異常終了する問題を修正しました。debug/sanitizer ビルドでは異常終了する代わりに、NUMBER_OF_ARGUMENTS_DOESNT_MATCH error を適切に返すようになりました。#103544 (Groene AI).
  • 抽象構文木 (AST) が構造的に不正な場合 (たとえば AST fuzzer によって生成された場合) の、JSON および Dynamic data type の parameter パースにおける server crash を修正しました。equals(name, value) parameter expression の children が 2 つ未満のままになることがあり、その結果 DataTypeObjectDataTypeDynamic が境界チェックなしでそれを参照していました。#103545 (Groene AI).
  • PREWHERE で使われる lambda 内のカラム名の衝突により、アナライザで発生していた論理エラーを修正しました。Closes #103584. #103627 (Pavel Kruglov).
  • 非同期メタデータ読み込み中に通常の database 内で Iceberg engine テーブルがロードされた際、DataLakeConfiguration::getCatalog から断続的に返されていた Logical error: 'Database <name> not found' を修正しました。#103775 (Groene AI).
  • PREWHERE / WHERE / HAVING / QUALIFY 内で projection aliases を参照するクエリ (例: SELECT x AS a, y AS b, (a AND b) AS c FROM t PREWHERE c) や、カラム名が重複する self-join に対する SELECT * を、並列レプリカかつ parallel_replicas_local_plan = 0 で実行した際に remote replicas が投げていた MULTIPLE_EXPRESSIONS_FOR_ALIAS error を修正しました。Closes #74324. #103806 (Groene AI).
  • 複数の minmax スキップ索引を持つ MergeTree テーブルで、クエリがネストした coalesce/ifNull 比較 (例: WHERE coalesce(a, b, coalesce(c, d), e) = const) を使用し、use_skip_indexes_for_disjunctions = 1 が設定されている場合に server が異常終了する問題を修正しました。<op>(coalesce(...), const) のスキップ索引の書き換えは、内側の coalesce argument に対しても再帰的に適用されるようになり、各索引の KeyCondition RPN が template の RPN と一致するようになりました。これは、選言追跡コードがすでに前提としている動作です。#103929 (Groene AI).
  • 新しいアナライザで GLOBAL IN および GLOBAL JOIN クエリに対して max_rows_to_transfermax_bytes_to_transfer が黙って無視される問題を修正しました。これらの設定は、マテリアライズされた external table が設定上限を超えた場合、従来のアナライザの挙動と同様に SET_SIZE_LIMIT_EXCEEDED を発生させるか (transfer_overflow_mode に応じて) 処理を中断するようになりました。#103333 をクローズしました。#104119 (Groene AI).
  • show_data_lake_catalogs_in_system_tables が有効な DataLake カタログ database で、INSERT または DDL ステートメントが存在しない table を参照した際に、catalog/S3 メタデータの読み取りが過剰に発生する問題を修正しました。タイプミス候補の提示処理でカタログ全体の table ごとの完全な Iceberg メタデータを読み込んでいたため、大規模なカタログではメモリを使い果たすおそれがありました。#104124 (DQ).
  • 最適化中に lookup plan がカラムを並べ替えた場合に、右側の MergeTree table に対して direct join_algorithm を使用するクエリで発生し得たクラッシュ (デバッグビルドでは LOGICAL_ERROR “Columns are assumed to be of identical types, but they are different in Nullable”、リリースビルドでは ColumnString::compareAt の null ポインタによる SIGSEGV) および誤った結果を修正しました。右側のカラムが誤った名前のスロットに入ることで、join key に対する filter や比較が誤った型のカラムを参照してしまう可能性がありました。この問題は AST fuzzer により STID 2139-5111 として検出され、#107272 で報告されました。#104174 (Groene AI).
  • Date に対して、範囲外の整数パーティション ID を、ALTER 時に黙ってオーバーフローさせたり LOGICAL_ERROR にしたりするのではなく、拒否するようにしました。#104250 (Azat Khuzhin).
  • 並列レプリカ使用時かつ、クエリプランのシリアライゼーションなしでアナライザを使う場合は additional_table_filters を無効化しました。従来は、これにより不正な結果が返される可能性がありました。#104296 (Azat Khuzhin).
  • dictionary に値が存在しない Nullable な Key column を指定して dictGetOrNull を呼び出した際、SELECT projection 内の他のカラムが黙って NULL で上書きされる問題を修正しました。この関数は入力にエイリアスされた null map をその場で変更していましたが、現在は変更前に結果カラムをディープコピーするようになりました。#73633 をクローズしました。#104327 (Groene AI).
  • ALTER TABLE ... DROP PARTITION ID 'patch-...' の後に DETACH/ATTACH TABLE を実行した際、パッチパートが破損する問題を修正しました。以前は空の covering part が partition.datsource_parts.dat なしで書き込まれていたため、次回の attach またはサーバー再起動後に system.detached_partsbroken-on-start_patch-... エントリが現れていました。#93132 をクローズしました。#102103 をクローズしました。#104353 (Groene AI).
  • HTTP インターフェイスおよび INSERT SELECT FROM input で、input_format_max_block_wait_ms を使用した streaming INSERT を修正し、リクエスト完了前に部分的な入力ブロックが flush されるようにしました。#104534 (Alexey Milovidov).
  • JOIN の後に ORDER BY ... LIMITarrayJoin を組み合わせたクエリが、気づかれないまま 0 行を返してしまうことがある不具合を修正しました。関数評価を SortingStep の上に持ち上げるクエリプラン最適化は、持ち上げ対象の式に arrayJoin が含まれる場合には適用されなくなりました。arrayJoin は行数を変化させる可能性があるためです。#82279 をクローズしました。#104558 (Groene AI)。
  • MergeTree ファミリーのテーブル破棄中にまれに発生するサーバーの異常終了を修正しました。この異常終了は、バックグラウンドジョブスケジューラが完全に停止する前に shutdown が例外を送出した場合に発生することがありました。そのごく短い間にバックグラウンドタスクが実行されると、部分的に破棄されたストレージオブジェクト経由で仮想呼び出しがディスパッチされ、__cxa_pure_virtual に到達していました。#104561 (Groene AI)。
  • NULL 値を含む type hint と組み合わせた JSON の複合サブカラムで、不整合な結果が返る問題を修正しました。#104584 (Pavel Kruglov)。
  • 集約プロジェクションに異なる IN (...) 条件を持つ複数の sumIf 集約が含まれている場合に、誤った結果が返ったり、projection が使われなかったりする問題を修正しました。#104765 (Jimmy Aguilar Mena)。
  • JOIN ON 内で使用された arrayJoin() により誤った行数が返る問題を修正しました。結果が配列長の分だけ余計に乗算されていました。#104785 (Shaohua Wang)。
  • ゼロをまたぐ符号付き整数型に対して deltaSumTimestamp が誤った結果を返す問題を修正しました。#104750 を解決しました。#104830 (Konstantin Bogdanov)。
  • NULL 定数を使った filter push-down 後の UnionStep におけるブロック構造の不一致を修正しました。#104821 をクローズしました。#104853 (Pavel Kruglov)。
  • アタッチ直後の IcebergDeltaLake、または Hudi テーブルで、メタデータファイルが破損しているか読み込めない場合に DELETE FROMLogical error: 'Metadata is not initialized' を発生させる問題を修正しました。代わりに通常のユーザー向け例外が返され、サーバーは動作を継続します。#104891 をクローズしました。#104917 (Groene AI)。
  • 設定変更時に max_memory_usage_soft_limit が on-the-fly で更新されない問題を修正しました。ソフトメモリ制限は起動時に一度だけ計算されてキャッシュされていたため、その後の設定再読み込みは反映されていませんでした。この修正後は、設定を再読み込みするたびに制限が再計算され、即座に適用されます。Keeper の再起動は不要です。#104940 (Kai Zhu)。
  • macOS での JIT シンボル解決を修正し、ソート、式、集約の JIT コンパイルが CANNOT_COMPILE_CODE: Could not find symbol _<name> で失敗しないようにしました。#104946 (Alexei Fedotov)。
  • 新しいアナライザで optimize_skip_unused_shards_rewrite_in が有効な場合に、SELECT ... FROM <分散テーブル> WHERE/HAVING/GROUP BY ... (sharding_key_column IN tuple()) 形式のクエリを実行すると発生する例外 (vector hardening における Received signal 6 (abort)。空のベクタに対する Tuple::back() として観測されます) を修正しました。#104966 (Alexey Milovidov)。
  • デバッグ / サニタイザビルドで、CREATE TABLE t (c0 Int CODEC(not((not(materialize(1), materialize(2)))), ZSTD)) ENGINE = Memory のようなクエリにより発生していた Logical error: 'Inconsistent AST formatting' によるサーバー中断 (STID 1941-1bfa) を修正しました。フォーマッタは、CODEC / STATISTICS / BACKUP_NAME の引数リスト内に現れる、複数引数の tuple(...) 関数呼び出し (演算子形式 (a, b) が無効な箇所) に対して、不要な外側の括弧を出力しなくなり、format-parse-format の往復変換の安定性が保たれるようになりました。#104991 (Groene AI).
  • 25.8 で作成され、別個の ALTER TABLE ... ADD COLUMN で追加されたカラム上のスキップ索引を含む part に対して ALTER TABLE ... MATERIALIZE INDEX を実行した際に発生していた NOT_FOUND_COLUMN_IN_BLOCK を修正しました。mutation は、強制再計算時に、その part 上の既存のすべてのスキップ索引と projection に必要なすべてのカラムを正しく読み取るようになりました。#104872 をクローズしました。#105039 (Groene AI).
  • enable_materialized_cte を指定したクエリで発生していた、2 種類の LOGICAL_ERROR: Reading from materialized CTE 'X' before it has been materialized を修正しました: (1) 別の マテリアライズド CTE に対する IN (subquery) でフィルタされた、再利用される マテリアライズド CTE、(2) 直接参照されると同時に、ネストした IN-サブクエリ を介して MergeTree の主キーに到達する WHERE ... IN (...) フィルタ内でも参照される マテリアライズド CTE。これらのバグはプラン最適化中に発生していたため、同じクエリに対する EXPLAIN も影響を受けていました。#101940#102320 をクローズしました。#105041 (Dmitry Novik).
  • Float32 カラムに対する countmin statistics の PREWHERE 選択性推定を修正しました。2 つのバグにより、countmin statistics は Float32 カラムに対して誤った推定値を黙って生成していました。ConditionSelectivityEstimator は、カラム型 (Float32) がリテラル型 (Float64) より狭い場合に statistics を完全にスキップし、デフォルトの選択性にフォールバックして sketch を無視していました。また、StatisticsCountMinSketch::estimateEqualField オブジェクトの先頭 N バイトをハッシュしていましたが、FieldFloat32Float64 として保存するため (NearestFieldType<Float32> = Float64) 、クエリ時に使用されるバイトパターンが、build 時に保存された実際の Float32 のバイト列と異なっていました。#105047 (Han Fei).
  • ENGINE なしでストレージ clauses (ORDER BYPARTITION BYPRIMARY KEYSAMPLE BYTTLUNIQUE KEY、または engine SETTINGS) を指定した ATTACH TABLE name <clauses>; クエリは、保存済みの定義でテーブルを黙って再アタッチしてユーザー指定の clauses を破棄するのではなく、BAD_ARGUMENTS を返すようになりました。クエリレベルのセッション SETTINGS (log_comment など) は引き続き適用されます。保存されたメタデータで再アタッチするには ATTACH TABLE t; を使用し、設定を変更するには ATTACH の後に ALTER TABLE t MODIFY SETTING ... を使用してください。#105068 (Groene AI).
  • 集約関数が自身の state を返すカラム (例: uniqStateOrDefaultStatesumStateOrDefaultStateuniqStateForEachState) に対して runningAccumulate を呼び出した際の use-after-free を修正しました。#105085 (János Benjamin Antal).
  • Web UI (play.html) のバグを修正しました。末尾に 1 つだけある ; のさらに後ろにカーソルがある状態でクエリを実行すると、クエリが実行されず、代わりに “empty query” と表示されていました。#105107 (Alexey Milovidov).
  • Replicated データベース内で CREATE TABLE ... AS SELECTsystem.current_roles または system.enabled_roles を参照した際に、この内部 DDL worker コンテキストで発生していた LOGICAL_ERROR: 'No user in current context, it's a bug' を修正しました。これにより、クエリは正常に実行され、空の result set を返すようになりました。#105150 (Groene AI).
  • quantileExactWeightedInterpolatedquantileDDquantilePrometheusHistogram の aggregate state を、それぞれ対応する複数形の quantilesXxxMerge とマージする際 (およびその逆) に発生していた ILLEGAL_TYPE_OF_ARGUMENT を修正しました。これら 3 つの quantile ファミリーでは、単数形と複数形の variants が同じ内部 aggregate state を共有していますが、内部の名前マッピングテーブルに登録されていなかったため、関数をまたぐ state の merge と、これらのファミリーに対する function-fusion optimization が拒否されていました。#105189 (Groene AI).
  • Date32 および DateTime64 の argument に対して、結果が Date の range 外になる場合の toStartOfWeektoLastDayOfWeektoMondaytoStartOfMonthtoLastDayOfMonthtoStartOfQuartertoStartOfYear の誤った結果を修正しました。従来は任意の日付に overflow していましたが、1970-01-01 より前の結果は 1970-01-01 に clamped され、2149-06-06 より後の結果は 2149-06-06 に clamped されるようになりました。これにより、このような関数を range 外の値を含む Date32 または DateTime64 の key に対する WHERE 句で使用した際に発生していた、誤った query result (パーツおよび granules の誤った pruning) も修正されます。#105244 (Yarik Briukhovetskyi).
  • 第 1 引数が Variant の配列で、そのすべての代替型が第 2 引数の型と互換性がなく、かつ variant_throw_on_type_mismatch が無効な場合に arrayRemove で発生していた論理エラーを修正しました。関数はこの比較を「決して等しくない」として扱い、server-side の assertTypeEquality failure を起こす代わりに、配列を変更せずそのまま返すようになりました。#105248 (Groene AI).
  • FileCache が Caching のためにディスク上の一部の directory を作成できなかった場合でも、クエリを正常に実行できるようになりました。#105250 (Den Kalantaevskii).
  • extremes = 1 を指定したクエリが、ExtremesTransform で最初の chunk から extremes のカラムを構築中に例外 (たとえば MEMORY_LIMIT_EXCEEDED) に遭遇した際、Assertion 'px != 0' failed により server が異常終了していた問題を修正しました。これにより、server がクラッシュする代わりに、クライアントは元の例外を受け取れるようになりました。#105264 (Groene AI).
  • LEFT ANTI JOIN で、一致しない行に対して左側の join key の値を複製するのではなく、右側の join key カラムにデフォルト値を正しく返すようになりました。以前は、SELECT a.x AS l, b.x AS r FROM a LEFT ANTI JOIN b ON a.x = b.x において、一致しない行に対し、本来はデフォルト値 (Int32 なら 0String なら ''Nullable なら NULL) を返すべきところ、r = a.x が返ることがありました。影響を受けていたのは join key カラムのみで、key ではない右側カラムは従来から正しくデフォルト値が設定されていました。同じ bug は、optimizer が左右を入れ替えた場合の RIGHT ANTI JOIN でも発生していました。#99959 をクローズしました。#105278 (Groene AI).
  • 非デフォルトの --default_database を指定して clickhouse-local を繰り返し起動した際に発生していたデータ消失を修正しました (例: clickhouse-local --path X -- --default_database=mydb) 。永続化されたデータベース UUID の参照先が metadata/default にハードコードされていたため、再起動のたびに新しい UUID が発行され、前回実行時のテーブルが見えなくなっていました。#101831 をクローズしました。#105284 (Groene AI).
  • ALTER TABLE <memory_table> APPLY PATCHES または ALTER TABLE <memory_table> APPLY DELETED MASK の実行時に発生していた論理エラー Mutation of Memory table produced incomplete output を修正しました。Memory テーブルはパッチパートや削除マスクを保持しないため、現在は両方のコマンドが正しく no-op として扱われます。#105286 (Groene AI).
  • クエリリクエストに table_id パラメーターを渡すようにし、Unity Catalog で長時間実行されるクエリの問題を修正しました。#105303 (Konstantin Vedernikov).
  • distributed_group_by_no_merge=1 の場合に、Distributed 上の Merge 上の Merge で発生する CANNOT_CONVERT_TYPE を修正しました。#105330 (Azat Khuzhin).
  • 位置指定のファイル引数も与えられているときに、clickhouse localclickhouse client--query/-q を黙って無視していた問題を修正しました。現在はどちらの場合も一貫して BAD_ARGUMENTS が返されます。#105334 (Raúl Marín).
  • REPLACE TEMPORARY TABLE が対象テーブル不存在時に黙って新しいテーブルを作成していた問題を修正しました。現在は REPLACE TABLE の動作に合わせて UNKNOWN_TABLE を返します。create-or-replace の動作を維持したい場合は CREATE OR REPLACE TEMPORARY TABLE を使用してください。#105373 (Groene AI).
  • catalog_type = 'glue' を持つ DataLakeCatalog database からの長時間の reads (例: INSERT ... SELECT) が、table-metadata load time に取得した STS session credentials の有効期限が切れると ExpiredToken エラーで失敗していた問題を修正しました。現在は AWS STS credentials がクエリ実行中に更新されるため、そのような reads も token の有効期限をまたいで継続されます。#105381 (Pratima Patel).
  • ARRAY JOIN とともに使用した一部のケースで、負の LIMIT BY に論理エラーが発生していた問題を修正しました。#105403 (Nihal Z. Miaji).
  • Parquet files の読み取り時に read_bytes (および system.query_log、progress bar などに表示される派生 bytes/s) が過大計上される問題を修正しました。従来の実装では、chunk ごとに行グループ全体の圧縮サイズを報告していたため、N 個のカラムのうち K 個を読むと N / K 倍に過大計上されていました。現在は、選択されたカラムについてのみ合計されます。あわせて Iceberg tables のファイル単位の進捗追跡も修正しており、従来はデータファイルサイズがまったく報告されていませんでした。#105413 (Groene AI).
  • planner が recursive_with フラグ付きで WITH expression のない SELECT を生成した場合に、cluster table functions (s3Cluster, urlCluster, fileCluster, …) で発生しうるサーバー segfault を修正しました。#105370 をクローズしました。#105433 (Groene AI).
  • count_distinct_optimization = 1 のとき、Nullable カラムに対する countDistinct / uniqExact の結果が誤っていた問題を修正しました (NULL グループが誤ってカウントされていました) 。#105439 (Raúl Marín).
  • バイナリまたは文字列のカラムで、中間 offsets が破損した Arrow または ArrowStream ファイルの読み取り時に発生する heap-buffer-overflow と、geo タグ付き Arrow カラムの読み取り時に発生する null ポインタ逆参照を修正しました。#105449 (Raúl Marín).
  • window PARTITION BY における Dynamic/Variant 型の検証漏れを修正しました。これまでは allow_suspicious_types_in_group_by が無効な場合、この検証が行われていませんでした。#105028 をクローズします。#105450 (Pavel Kruglov).
  • JSONStrings* フォーマットで input_format_json_empty_as_default が機能しない問題を修正しました。#104913 をクローズします。#105453 (Pavel Kruglov).
  • 式のパース中に VALUES フォーマット経由で Variant カラムに NULL を insert できない問題を修正しました。#104909 をクローズします。#105455 (Pavel Kruglov).
  • デフォルト引数が Nullable 式で、見つかる辞書キーと見つからない辞書キーが混在しており、かつ short_circuit_function_evaluation が有効な場合に、dictGetOrDefaultCANNOT_INSERT_NULL_IN_ORDINARY_COLUMN を投げる問題を修正しました。#105461 (Raúl Marín).
  • Quoted (Values) テキスト reader が Map(Array(Nothing), ...) のような不完全に推論された型に対して String に fallback した際、Dynamic カラムで値が黙って切り詰められる問題を修正しました。従来の fallback では、生のフィールドを単純に '...' で連結して囲んでいたため、内側のシングルクォート (この種の fallback では常に含まれる) がクォート文字列を途中で終端し、残りの値が失われていました。#105463 (Groene AI).
  • ALTER 後、圧縮された Memory table から Dynamic subcolumns を読み取る際に発生する SIGSEGV を修正しました。#104901 をクローズします。#105464 (Pavel Kruglov).
  • Dynamic に対する toFloat64/toUInt32/toString などで cast_keep_nullable が無視される問題を修正しました。#104789 をクローズします。#105467 (Pavel Kruglov).
  • WithNames フォーマット用のスキーマ cache キーに skip_first_lines を含めるようにしました。#104527 をクローズします。#105469 (Pavel Kruglov).
  • GROUP BY ... WITH ROLLUPWITH CUBE、または WITH TOTALS と Nullable 引数を組み合わせて使用した際に、uniqStateOrNull / uniqStateOrDefault / uniqOrNullState (および uniq に対する類似の combinator chain) で発生する server segfault を修正しました。#105470 (Groene AI).
  • アナライザ有効時に ORDER BY ... WITH FILL INTERPOLATELIMIT N BY を組み合わせると NOT_FOUND_COLUMN_IN_BLOCK Exception が発生する問題を修正しました。#103474 をクローズします。#105481 (Yakov Olkhovskiy).
  • 負の (エポック以前の) DateTime64 値に対して toStartOfMillisecondtoStartOfMicrosecond がほぼ 1 秒ずれた結果を返していた問題を修正し、INT64_MIN 近傍の DateTime64 入力に対する toStartOfSecondtoStartOfMillisecondtoStartOfMicrosecond における UndefinedBehaviorSanitizer の signed-integer-overflow も修正しました。 #105482 (Groene AI).
  • 新しい互換性設定 analyzer_compatibility_prefer_alias_over_subcolumn を追加しました (デフォルトでは無効) 。有効にすると、新しいアナライザは複数要素の識別子に対して、Tuple-subcolumn / dotted-column の一致よりも alias-prefix としての解釈を優先し、以前の interpreter の動作を復元します。これにより、クエリが、join に対する SELECT * を使う CTE/サブクエリ内の内部テーブル名と同名の table を join した場合に、asterisk によって名前変更されたカラム (例: b.id) が内部テーブルの識別子を外側のスコープに漏らしてしまうことで発生する AMBIGUOUS_IDENTIFIER (および関連する) エラーを回避できます。 #105491 (Vladimir Cherkasov).
  • index only optimization を用いて実行されたベクトル検索クエリで、SELECT リストに L2Distance() が含まれている場合に正しい値を返すようになりました。これまでは、この関数が誤って L2-squared 距離の値を返していました。ベクトル検索クエリ自体は正しく順位付けされた結果を返しており、二乗された値の影響を受けたのは、L2Distance() の値を明示的に取得して解釈していたアプリケーションのみである点に注意してください。 #105495 (Shankar Iyer).
  • 新しい Kafka table engine で、トピックのパーティション再割り当て中にメッセージが誤って処理され、offset rollback 後にメッセージが欠落する可能性があるまれな問題を修正しました。 #105500 (János Benjamin Antal).
  • 本体が相関したサブクエリである MATERIALIZED CTE を IN の右辺として使用したときに発生する例外 (Trying to execute PLACEHOLDER action 論理エラー) を修正しました。このような CTE は、同じパターンが CTE を FROM で直接参照した場合にすでに拒否されているのと同様に、分析時点で拒否されるようになりました。 #105518 (Groene AI).
  • フォーマットが明示的に指定されている場合に、stdout/stdin の圧縮が適用されない問題を修正しました。 #104441 をクローズします。 #105528 (Pavel Kruglov).
  • JSON 型の singleValueOrNull のデシリアライゼーションにおける SEGFAULT を修正しました。 #103630 をクローズします。 #105535 (Pavel Kruglov).
  • clickhouse-format --backslashINSERT VALUES データを黙って削除してしまう問題を修正しました。 #103533 をクローズします。 #105536 (Pavel Kruglov).
  • variant_throw_on_type_mismatch/dynamic_throw_on_type_mismatch=false で、関数実行中の例外が捕捉されない問題を修正しました。 #103484 をクローズします。 #105543 (Pavel Kruglov).
  • JSON の共有データへの insertion 時に input_format_try_infer_datetimes が無視される問題を修正しました。 #103221 をクローズします。 #105544 (Pavel Kruglov).
  • 小さく未ソートな入力に対して histogram が誤った結果を返す問題を修正しました。#103109 をクローズします。#105548 (Pavel Kruglov).
  • JSONExtract およびテキストのデシリアライゼーションにおいて、範囲外の値で DateTime が折り返してしまう問題を修正しました。#103094 をクローズします。#105551 (Pavel Kruglov).
  • optimize_trivial_insert_select が有効な場合に、テーブル関数で insertion table の使用に問題があった不具合を修正しました。#103083 をクローズします。#105555 (Pavel Kruglov).
  • 式と WHEN の値の両方が NULL の場合に、CASE 式が一致した THEN ではなく ELSE 分岐を返していた問題を修正しました。#105556 (Raúl Marín).
  • selectFD_SETSIZE 制限に達したことで発生していた replxx のクラッシュを修正しました (現在は poll に置き換えられています) 。以前は、SSH またはウェブターミナルが有効な場合、この問題によりサーバーがクラッシュすることがありました。#105559 (Azat Khuzhin).
  • executePartitionByExpression で式を実行する前に、サブカラムをマテリアライズするようにしました。#103057 をクローズします。#105573 (Pavel Kruglov).
  • TTL 式がサブカラムを参照したときに発生する NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#105578 (Pavel Kruglov).
  • HTTP またはネイティブプロトコル経由で、ENGINE 句のない CREATE TABLE ... TO INNER UUID '...' を送信した場合に、CREATE TABLE 権限を持つ任意のユーザーが引き起こせたサーバークラッシュ (SIGSEGV) を修正しました。同じバグによりクライアントもクラッシュしていました。現在は、null ポインタを逆参照する代わりに、パーサーが適切な BAD_ARGUMENTS エラーを報告します。#105579 (Groene AI).
  • estimateCompressionRatio window function で、行をまたいで保持されるべき累積データが失われる問題を修正しました。#101738 をクローズします。#105581 (Pavel Kruglov).
  • 同じ VALUES 句内でサイズの異なる tuple を String カラムに挿入したときに発生するクラッシュを修正しました。#101727 をクローズします。#105582 (Pavel Kruglov).
  • Hive のパーティション値抽出で cast_string_to_date_time_mode 設定が反映されるようになり、デフォルトでパーティションキー内のタイムゾーン接尾辞付き ISO 8601 タイムスタンプ (例: +0000, +00:00, Z) を受け付けるようになりました。#105584 (Alexey Milovidov).
  • NULL 値を含む Timezone を持つ DateTime に対する toString で発生していた NOT_IMPLEMENTED エラーを修正しました。#103712 をクローズします。#105587 (Yarik Briukhovetskyi).
  • flattened された Dynamic カラムの Native デシリアライゼーションにおける OOB 読み取りを修正しました。#105666 (Pavel Kruglov).
  • 結果型が Variant で、第 2 または第 3 分岐が、Int64 に収まる UInt64 リテラルに対する定数条件の if になっている if 式について、クエリプランニング中に発生していた LOGICAL_ERROR (Unexpected return type from if) を修正しました。#105649 をクローズします。#105680 (Groene AI).
  • 別の writer (設定なしの icebergLocal/icebergS3 table function など) がテーブルを先に進めたあと、iceberg_use_version_hint = 1 を指定して Iceberg table を読み取ると誤った結果になる問題を修正しました。version-hint.text は、ファイルが存在する場合、以後はすべての writer によって同期された状態に保たれるようになったため、hint を使う後続の reader でも最新の snapshot を参照できます。#105682 (Groene AI).
  • use_query_condition_cache = 1 (既定値) のときに、SELECT クエリで件数が実際より少なく数えられてしまう不具合を修正しました。bloom-filter スキップ索引を持つカラムに対する PREWHERE pk_prefix = X WHERE non_pk IN (...) という形のクエリによって、pk_prefix = X predicate 用の QueryConditionCache が汚染され、その結果、後続の通常の SELECT count() ... WHERE pk_prefix = X が誤って少ない件数を返していました。26.x のすべての releases が影響を受けます。#104781. #105686 (Groene AI).
  • すでに複数の異なる値を観測していた state を merge した際に、singleValueOrNullMergeNULL ではなく具体的な値を返してしまう問題を修正しました。#105734 (Minh Vu).
  • 不正な行のあとにおける Template input format の error 復旧を修正しました。#105735 (Yue Ni).
  • コレクション名が空、または NUL バイトを含む場合に、mongodb table function、MongoDB storage、MongoDB Dictionary ソースでクラッシュする問題を修正しました。#105776 (Raúl Marín).
  • 失敗した writes 後の Keeper snapshots のクリーンアップを修正し、部分的な snapshots を安全にクリーンアップできるようにするとともに、失敗した writes を latest_snapshot_meta を進めることなく再試行できるようにしました。#105779 (Antonio Andelic).
  • 明示的な SummingMergeTree および CoalescingMergeTreecolumns_to_sum カラムに対して、ALTER TABLE ... CLEAR COLUMN が拒否される問題を修正しました。#105785 (Antonio Andelic).
  • データベース名をクエリパラメータ経由で与えるパラメーター化ビューを作成する際、たとえば CREATE VIEW {db:Identifier}.v AS SELECT {p:UInt64} のような場合に、DatabaseCatalog::tryGetDatabase で assertion が発生し (release ビルドでは UNKNOWN_DATABASE error の原因にもなる) ていた問題を修正しました。CREATE ステートメントの DDL 部分にある Parameters は作成時に置換されるようになり、一方で SELECT 本文中の Parameters は引き続きビュー呼び出し時に置換できます。#105799 (Groene AI).
  • aggregate state がシリアライズされる場合 (例: 並列レプリカ、バイナリ state フォーマッタ経由の sumMapState、external aggregation) に、Nested(... Nullable(Decimal(P, S))) カラムに対する sumMap および sumMapWithOverflowBad get: has Decimal32, requested Decimal128 が発生する問題を修正しました。#105816 (Groene AI).
  • ALTER MODIFY COLUMN ... LowCardinality(...) ミューテーションより前に、保留中のオンザフライ UPDATE/DELETE ミューテーションがキューに入っているテーブルで apply_mutations_on_fly = 1 を使用した際に発生する Expected ColumnLowCardinality, got String / Bad cast from type DB::ColumnString to DB::ColumnLowCardinality エラーを修正しました。#105847 (Raúl Marín).
  • Iceberg への書き込みで、Nullable(T) パーティションカラム内の NULL 値が保持されるようになりました。以前は、ClickHouse が書き込んだ NULL は、Spark や他の Iceberg reader で読み戻すと内部型のデフォルト値 (int の場合は 0) として扱われていました。#105852 をクローズしました。#105862 (Groene AI).
  • IN (subquery) predicates に対する Parquet および ORC の pushdown を修正し、fileurls3、およびオブジェクトストレージの読み取りで row-group/page/bloom-filter pruning が機能するようにしました。#105863 (Arsen Muk).
  • Merge テーブルの read-in-order を修正しました (新しいアナライザ使用時) 。#105867 (Nikolai Kochetov).
  • 単一の delete file が複数の data file を参照し、さらにそのような delete file が同じ data file に複数適用される場合に、Iceberg v2 merge-on-read position deletes が誤った行を返す問題を修正しました。streaming reader (use_roaring_bitmap_iceberg_positional_deletes = 0) は、Parquet の row-group pruning に依存するのではなく、C++ で file_path によって delete-file の行をフィルタするようになり、昇順 positions の invariant が復元されました。#105888 (Groene AI).
  • 新しいアナライザで、IN Array(...) filter を含む distributed queries における Cannot find column エラーを修正しました。#105894 (Nikolai Kochetov).
  • 別の ALTER によって STATISTICS を持つカラムが同時に削除された際に、MergeTree テーブルで ALTER TABLE ... MODIFY COLUMN ... Nullable(...) 実行時に発生する SIGSEGV を修正しました。#105912 をクローズしました。#105917 (Groene AI).
  • PostgreSQL から読み取るクエリ (postgresql table function、PostgreSQL table engine、または PostgreSQL ソースを持つ Dictionary 経由) がキャンセルされ (たとえば KILL QUERY) 、そのリモート PostgreSQL クエリのキャンセルに失敗した場合に発生しうるサーバークラッシュを修正しました。#105949 (Rory Shanks).
  • SYSTEM INSTRUMENT ADD のフォーマットを修正し、handler arguments が単一のスペースで区切られるようにしました。また、値が 3 つ以上ある無効な SLEEP インストルメンテーション引数リストや、最小値が最大値を上回る範囲を拒否するようにしました。#105984 (Pablo Marcos).
  • outer join と、その outer join の NULL を補う側を参照する後続の inner join を組み合わせたクエリで、誤った結果になる可能性がある問題を修正しました。join の並べ替えによって、inner join 条件が outer join の ON 句に引き込まれるプランが選ばれることがありました。#105992 (Vladimir Cherkasov).
  • クエリ内で送信された大きすぎる文字列リテラルによりクラッシュする可能性がある問題を修正しました。#105996 (Nikita Taranov).
  • ORDER BY でソートプレフィックスを使用し、use_with_fill_by_sorting_prefix が有効な場合に、空の INTERPOLATE () を使うと INVALID_WITH_FILL_EXPRESSION 例外が発生する問題を修正しました。これにより、ソートプレフィックスのカラムは暗黙的な補完対象から正しく除外され、明示的にカラム名を指定した INTERPOLATE (col) と同じ動作になります。 #106001 (Yakov Olkhovskiy).
  • Bool パーティションキーに対する ALTER TABLE のパーティション操作が、エラーを出さずに失敗する問題を修正しました。#101722 をクローズします。 #106004 (Pavel Kruglov).
  • デフォルト値を持つ型付き JSON パスに対する JSONExtractRawJSONHas の問題を修正しました。#101721 をクローズします。 #106005 (Pavel Kruglov).
  • データレイク設定で、空の basepath に誤って ’/’ プレフィックスが付与される問題を修正しました。#105989 をクローズします。 #106013 (thewisenerd).
  • IcebergLocal table engine が DETACH + ATTACH のサイクルや server の再起動後に read-only になり、その後のすべての INSERTLocal object storage Local is readonly. (READONLY) で失敗する問題を修正しました。 #106016 (Groene AI).
  • 新しい request dispatcher の response queue が response thread の開始前に埋まる可能性があり、その結果、follower の catch-up 中に Keeper が失敗する問題を修正しました。 #106049 (Antonio Andelic).
  • 旧アナライザとの互換性を改善しました。テーブルに x.a Array, x.b Array, x String のようなカラムがある場合、ARRAY JOIN x では Array を優先するようになりました。 #106069 (Nikolai Kochetov).
  • オブジェクトのメタデータにブロブ ETag が含まれていなかったため、Azure Blob Storage (たとえば Azure 上の Delta Lake テーブル) でファイルシステムキャッシュが気付かれないまま無効化されていた問題を修正しました。 #106091 (thewisenerd).
  • SHOW DICTIONARIES の部分的な revoke がある場合に、system.dictionaries が 0 行を返す問題を修正しました。 #106105 (Pavel Kruglov).
  • allow_experimental_delta_kernel_rs が有効な状態で Delta Lake テーブルをクエリし、無効なバイトを含む credential または option を使用した場合に、server がクラッシュする問題を修正しました (Rust FFI が extern "C" 境界をまたいで panic していました) 。 #106109 (Raúl Marín).
  • ORDER BY(c0 / -42)intDiv(c0, -42) のような単調減少関数を含むテーブルに対するクエリで、結果が誤る問題を修正しました。基になるカラムに対する predicates (たとえば c0 < 0) により、一致する行を含む granules が誤って刈り込まれ、結果が欠落することがありました。#106084 をクローズします。#106124 をクローズします。#106080 をクローズします。 #106136 (Nihal Z. Miaji).
  • MATERIALIZED VIEW 定義で WASM SQL UDF を使用できない問題を修正しました。 #106161 (Yue Ni).
  • Iceberg partition pruning で、アナライザが scalar subquery の結果を、ソース型と target 型が一致する内部的な _CAST(Const, 'TargetType') でラップする場合でも、WHERE partition_col = (SELECT ... FROM ...) フィルターを正しく処理するようになりました。従来は、このようなフィルターではパーティションプルーニングが無効になり、full table scan がトリガーされていました。#106204 (Groene AI).
  • clickhouse local の --query_id パラメータを修正し、カスタム query id を指定できるようにしました。#106205 (Yue Ni).
  • S3 ディスクおよび object storage で multipart upload によって書き込まれた object に対し、S3 storage class (s3_storage_class / s3_storage_class_name) が無視される問題を修正しました。この問題により、大きな object がデフォルトの STANDARD class で作成されていました。現在は、このオプション名をディスク、object storage、backups に対して s3_storage_classs3_storage_class_name の両方で受け付けます。#106214 (Alexey Milovidov).
  • nuraft_max_log_gap_in_stream setting が非 default 値に設定されている場合 (default は 0、つまり append_entries requests のパイプライン化を無効化) 、起動時に Keeper が停止することがあった問題を修正しました。#106220 (Michael Kolupaev).
  • 不正なデータを受け入れる代わりに、corrupted DDSketch aggregate-function state (bin keys) を INSERT 時に検証するようにしました。#106236 (Yarik Briukhovetskyi).
  • サブクエリが in-order settings を override した際に発生する、マージコーディネーターの mode 不一致を修正しました。#106243 (Nikita Taranov).
  • predicate が上位で適用されている場合に、Distributed table が Merge table または merge table function 経由でクエリされると、optimize_skip_unused_shards が適用されず (さらに force_optimize_skip_unused_shards が誤って失敗する) 問題を修正しました。#106250 (Nikolai Kochetov).
  • 旧アナライザで、SELECT list 内の ORDER BY カラムに alias が付けられている場合に、INTERPOLATE ()INVALID_WITH_FILL_EXPRESSION をスローする問題を修正しました。#106248 をクローズします。#106252 (Yakov Olkhovskiy).
  • RowBinary input またはクエリパラメータから不正な AggregateFunction(uniqTheta, ...) state を deserialising した際に abort する問題を修正しました。現在は、不正な input は std::exception として escaping して abortOnFailedAssertion 経由でプロセスを abort するのではなく、CORRUPTED_DATA として reject されます。#106260 (Groene AI).
  • RowBinaryWithNamesAndTypes の type decoding (input_format_binary_decode_types_in_binary_format = 1) 中に、範囲外の IntervalKind bytes を、後続で hash paths における undefined behavior を引き起こし得る無効な kind を持つ DataTypeInterval を構築するのではなく、明確な INCORRECT_DATA error で reject するようにしました。#106261 (Groene AI).
  • 26.1+ における SLRU downgrade failure rollback 問題を修正しました。また、keep_free_space_ratio feature における System/Data cache split priority を修正しました。#106286 (Kseniia Sumarokova).
  • Nullable(JSON) で、null マップではなく null サブカラムを JSON パスとして読み取るようにしました。 #106085 をクローズしました。#106295 (Pavel Kruglov).
  • Iceberg REST カタログにテーブルが含まれている場合に、RestCatalog::empty が誤った結果を返す問題を修正しました。#106301 (Lefteris).
  • enable_parallel_replicasquery_plan_use_new_logical_join_step、および query_plan_optimize_join_order_algorithm = 'greedy' が有効なときに、左側の MergeTree テーブルが空の INNER JOIN クエリで発生していた例外を修正しました。#106338 (Nikolai Kochetov).
  • 仮数部のシフトが 1 ビットずれていたことが原因で発生していた、非正規化 Float16 値から Float32 への誤変換 (たとえば Numpy の .npy ファイルから読み込む場合) を修正しました。#106343 (Joanna Hulboj).
  • 制約ベースの最適化 (optimize_using_constraints) を相関サブクエリと組み合わせて使用した際に発生するクラッシュと、発生する可能性のある NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。#106349 (Raúl Marín).
  • 配列がすべて空で、かつキーが定数でないカラムをハッシュ化する際に、sipHash64KeyedsipHash128KeyedsipHash128ReferenceKeyed で発生していた範囲外読み取りを修正しました。#106355 (Raúl Marín).
  • SYSTEM RELOAD CONFIG がエンドポイントごとの Azure Blob Storage 設定 (use_native_copy など) を破棄してしまい、その結果、サーバーを再起動するまで BACKUP/RESTORE でディスクに設定された内容が無視される問題を修正しました。#106357 (Julia Kartseva).
  • regexpExtract(haystack, pattern) を修正し、キャプチャグループを含まないパターンでは INDEX_OF_POSITIONAL_ARGUMENT_IS_OUT_OF_RANGE を投げるのではなく、マッチ全体を返すようにしました。#106374 (Groene AI).
  • リモート S3 オブジェクトが一覧取得から読み取りまでの間に、より短い内容で上書きされた場合に、cache の事前ダウンロード中に LOGICAL_ERROR 例外が発生する問題を修正しました。#106375 (Nikita Fomichev).
  • ファイルシステムキャッシュでメモリ使用量が増加する問題を修正しました。#106387 (Kseniia Sumarokova).
  • Arrow IPC フォーマットリーダー (ArrowColumnToCHColumn) における複数のヒープ境界外読み取りを修正しました。不正な Arrow ファイルでは、バッファに含まれる数より多い行数を宣言したり、list/struct/map の child の長さを親と不整合な状態で宣言したり、単調増加でない list offsets を指定したり、child の validity bitmap を途中で切り詰めたりできるため、ヒープ割り当て領域の末尾を越えて読み取る可能性がありました。これは SELECT 権限を持つ任意のユーザーが file()format()、テーブル関数、または ArrowFlight 入力を通じて到達可能です。現在は、生ポインタにアクセスする前にすべての data、offsets、view-struct、validity-bitmap バッファを検証し、list/struct/map の形状と offsets の整合性も確認するようになりました。#106395 (Raúl Marín).
  • リフレッシャブルmaterialized view の REPLACE ターゲットが、バックアップを開始したレプリカ上でその materialized view がまだ実体化されていない Replicated または Shared データベースで収集される場合に、バックアップが FILE_DOESNT_EXIST で失敗する問題を修正しました。#106411 (Julia Kartseva).
  • mutation (DELETE/UPDATE) の predicate に、別のサブクエリ内にネストされたデフォルトの table expression を参照する IN/EXISTS サブクエリが含まれている場合に発生する論理エラー Column identifier ... is already registered を修正しました。#106414 (Alexey Milovidov).
  • JOIN グラフ内の 2 つの relation が同じカラム名を持つ場合に、並列レプリカで実行される join で発生しうる join order optimizer の論理エラー (Left and right columns have same names) を修正しました。#106418 (Alexey Milovidov).
  • NaN または infinite な点座標を含むソースデータから Polygon 辞書を構築する際の論理エラーを修正しました。こうした座標は現在、明確なエラーを出して拒否されます。#106423 (Alexey Milovidov).
  • system.query_logused_privileges および missing_privileges カラムに、別の user、database、または session の無関係な過去のクエリから漏れた privilege 文字列が含まれる可能性があったバグを修正しました。#106425 (Alexey Milovidov).
  • 関数 base58Encodebase58DecodetryBase58Decode が、大きな入力に対して max_execution_time とクエリのキャンセルを尊重するようになり、非常に長時間実行される代わりに 10 KB を超える入力を拒否するようになりました。この制限は新しい設定 function_base58_max_input_size で設定できます (0 で無効化) 。#106428 (Alexey Milovidov).
  • read_in_order_use_virtual_row_per_block = 1 かつ max_block_size が小さい状態で wide parts を逆順に読み取る際、ORDER BY ... DESC クエリで散発的に誤った結果が返る問題を修正しました。#106429 (Vladimir Cherkasov).
  • Parquet V3 native reader を使用し、SELECT リストに含まれないカラムに対する IS NOT NULL を含む複合 WHERE で Iceberg または S3 table をクエリした際に発生する NOT_FOUND_COLUMN_IN_BLOCK exception を修正しました。#106443 (Shaohua Wang).
  • named collections を使用して HTTPDictionary のヘッダーを指定できるようになりました。#106459 (Jan Rada).
  • CurrentThread::attachToGroup が途中で失敗したあと、ワーカースレッドが古い thread group に attached のまま残り、その結果、同じ thread 上の後続タスクが Thread is already attached to a group で失敗するケースを修正しました。#106462 (Mikhail f. Shiryaev).
  • ベクトル検索クエリがベクトル索引を使用し、さらに minmax などの別のスキップ索引と use_skip_indexes_on_data_read = 1 を使用している場合に発生する exception を修正しました。#106473 (Shankar Iyer).
  • 不正な形式の Avro enum 値が検証されるようになり、破損した Avro データのデシリアライズ時に範囲外読み取りや abort を引き起こす代わりに、エラーとして拒否されるようになりました。#106476 (Miсhael Stetsyuk).
  • _file または _path filter を使って Iceberg tables から読み取る際に、進捗報告が過大になる問題を修正しました。従来は、total_bytes_to_read の Progress に、filter に関係なく manifest 内のすべてのファイルが含まれていました。#106491 (Pedro Ferreira).
  • STORAGE_TYPE 'simple'cache/direct レイアウトと単一の文字列から成る複合キーで使用する Redisディクショナリで発生していた Bad cast exception を修正しました。これにより、このようなディクショナリは正しく動作するようになり、simple ストレージ上の複合キーについては明確なエラーが報告されるようになりました。#106501 (Vladimir Cherkasov).
  • f(const) の評価結果が NaN になる場合、たとえば負の定数に対する ORDER BY sqrt(c0) のようなケースで、ORDER BY f(c0) を持つテーブルに対する WHERE c0 = const が行を返さなくなる不具合を修正しました。プライマリキー解析がすべてのグラニュールを誤って刈り込み、後続のクエリに対するクエリ条件キャッシュも汚染していました。#106507 (Groene AI).
  • 同順位の判定時に ORDER BY ... COLLATE の照合順序を考慮しない LIMIT WITH TIES および小数の LIMIT WITH TIES を修正しました。照合順序上で等しいと見なされる行 (たとえば numeric collation における '1''01') がバイト単位で比較されていたため、一部の同順位の行が結果から誤って除外されていました。#106539 (Nihal Z. Miaji).
  • 入力が照合順序付き (ORDER BY ... COLLATE) でソートされている場合に誤った結果を返していた、順序ベースの DISTINCT 最適化および順序ベースの LIMIT BY 最適化 (負の LIMIT BY を含む) を修正しました。照合順序上で等しいと見なされる行 (たとえば case-insensitive な collation における 'a''A') は collation key に従って並べられるため、値としては隣接しません。そのため、collator が使用されている場合はこの in order optimization をスキップするようになりました。#106564 (Nihal Z. Miaji).
  • 暗黙の _minmax_count_projection、明示的な aggregate projection、または通常の projection を持つテーブルに対する SELECT c, count() FROM t WHERE c GROUP BY c の誤った結果を修正しました。以前は、すべてのグループが定数キーと総行数を持つ 1 行に潰れていました。#106590 (Groene AI).
  • 第 2 引数が非定数タプルである IN で、第 1 引数に scalar subqueries を使用できなかった不具合を修正しました。#106610 (Yarik Briukhovetskyi).
  • Memory engine に対して、行ごとのデータには影響しない ALTER TABLE <memory_table> コマンド、すなわち APPLY PATCHESAPPLY DELETED MASKMATERIALIZE STATISTICSMATERIALIZE INDEXMATERIALIZE PROJECTIONREWRITE PARTS を実行した際に発生していた例外 Mutation of Memory table produced incomplete output を修正しました。Memory テーブルはこれらの構造を持たないため、このようなコマンドは no-op として扱われるようになりました。#106621 (Groene AI).
  • テキストフォーマット (CSV、TSV、JSONEachRow など) に LowCardinality(DateTime) カラムをシリアライズする際、session_timezone が無視される問題を修正しました。以前は、server 上で LowCardinality(DateTime) カラムが一度書き込まれると、その後そのようなカラムを書き出すすべてのクエリで、session_timezone に関係なく、最初に使われた timezone の時刻文字列が出力されていました。#106634 (Groene AI).
  • multiIf の中でアスタリスクを table function argument に渡すクエリ、たとえば numbers(multiIf(*, ...), 2) で発生していた LOGICAL_ERROR “Trying to get name of not a column: ExpressionList” を修正しました。現在は、このクエリは解決不能な matcher として UNSUPPORTED_METHOD を返して拒否されます。#106647 (Groene AI).
  • MergeTree テーブルに、granule が 0 のスキップインデックス part と、ディスク上に空でない marks ファイルがある場合、Too many marks in file ...skp_idx_idx.cmrk4, marks expected 0 (bytes size 0) によってサーバーの起動に失敗する問題を修正しました。 #106675 (Groene AI).
  • ディレクトリ一覧取得で無制限の再帰を引き起こすような病的な file glob パターンを拒否するようにしました。再帰の最大深さは 1000 に制限され、これを超えるクエリは、サーバーがスタックオーバーフローでクラッシュする代わりに TOO_DEEP_RECURSION エラーになります。 #106676 (Groene AI).
  • if/multiIf 条件が定数畳み込みにより Const(Nullable(Nothing)) になる場合 (たとえば、arraySort(x -> x, [])[toNullable(1)] のように空配列に対して範囲外の添字を指定した場合) に、FunctionIf::executeForConstAndNullableConditionBad cast from type DB::ColumnNothing to DB::ColumnVector<char8_t> が発生してサーバーが異常終了する問題を修正しました。 #106678 (Groene AI).
  • table function input が、クエリ内の複数箇所から参照される非 MATERIALIZED CTE でラップされているときに発生する例外 'Trying to read from input() twice.' を修正しました。現在は、クエリプランニング時に明確な INVALID_USAGE_OF_INPUT エラーでクエリが拒否されます。input は一度限りの client ストリームであり、クエリプラン内の単一のログソースからしか消費できません。 #106682 (Groene AI).
  • EXPLAIN ... INSERT ... SELECT ... FORMAT ...EXPLAIN 出力にも FORMAT が適用されるようにしました。SETTINGSFORMAT より前にある場合や、出力フォーマットが Values の場合でも適用されます。 #101772 のフォローアップです。 #106686 (Alexey Milovidov).
  • 実際には workload resource へのアクセスが許可されていたクエリに対して、まれに誤って RESOURCE_ACCESS_DENIED エラー (“Scheduler queue with resource request is about to be destructed”) が発生する問題を修正しました。原因は、再利用されたスレッドローカルの request object に前回のリクエスト失敗時の状態が残っていたことでした。 #106690 (Alexey Milovidov).
  • NATS ライブラリ内の callbacks 経由で INATSConsumer::onMsg が呼び出される処理と、INATSConsumer object の破棄との競合を修正しました。 #106692 (Miсhael Stetsyuk).
  • 16 進または 8 進エスケープを含む正規表現に対して、matchextractextractAllcountMatches が誤った結果を返す問題を修正しました。 #106709 (ofeliacode).
  • Keeper の内部 Raft TLS が openSSL.client.verificationMode 設定を反映するようになりました。以前は、この設定に関係なく Keeper 間の Raft 通信で常に peer certificate verification が有効だったため、none は暗黙的に無視されていました。現在は、none を指定すると Raft の peer-certificate verification が明示的に無効になり、設定が存在しない場合は従来どおりデフォルトで安全な動作が維持されます。none を明示的に設定している構成では、upgrade 後は設定どおり Raft peer certificates の検証が行われなくなります。 #106726 (Antonio Andelic).
  • SYSTEM RELOAD CONFIG における startup scripts の論理エラーを修正しました。さらに、SYSTEM RELOAD CONFIG で startup scripts を読み込むようにしました (現時点では private-only の機能です) 。 #106727 (Miсhael Stetsyuk).
  • sumMap / -Map combinator が、カスタム名の数値型 (SimpleAggregateFunction(sum, T)Bool など) を ILLEGAL_TYPE_OF_ARGUMENT: Values for -Map cannot be summed として拒否し、それまで動作していた集計を壊していた変更を元に戻しました。 #106729 (Nikita Fomichev).
  • 信頼できない入力から到達可能なフォーマットリーダーにおける、複数のメモリ安全性およびリソース枯渇の問題を修正しました。具体的には、ネイティブの Parquet リーダー の DataPageV2 の definition/repetition level-length 処理におけるヒープ境界外読み取り、深くネストしたスキーマを持つ Parquet ファイルでのスタックオーバーフロー、ならびに GeoParquet の WKB/WKT geometry と Avro の strings/bytes のパース時に max_memory_usage を無視していた割り当てです。 #106739 (Raúl Marín).
  • decodeHTMLComponent で、展開される HTML entity &nGt; または &nLt; を含む文字列をデコードする際の heap buffer overflow (server crash) を修正しました。この問題は、任意のユーザーが 1 回の SELECT で到達可能でした。 #106741 (Raúl Marín).
  • skipping indexes に対して GRANULARITY 0 を指定した CREATE TABLEALTER TABLE ADD INDEXCREATE INDEX を、明確な BAD_ARGUMENTS error で拒否するようにしました。以前は、これによりデバッグビルドで Inconsistent AST formatting exception が発生していました。 #106783 (Groene AI).
  • 旧形式の azure_blob_storage disk で、Azure BACKUP/RESTORE が endpoint 設定を無視していた問題を修正しました。 #106784 (Julia Kartseva).
  • キーカラムが LowCardinality で、predicate 定数が LowCardinality(Nullable(...)) の場合に、MinMax statistics による part の刈り込み中に発生していた Bad cast exception を修正しました。 #106793 (Groene AI).
  • パース中に exception (たとえば MEMORY_LIMIT_EXCEEDED) が発生した際、カラムの不整合 (後で LOGICAL_ERROR につながる) が起きる問題を修正しました。 #106802 (Azat Khuzhin).
  • keeper_server.http_control.secure_port を設定した後、HTTPS client からのリクエストに対して server が HTTP response を返していた問題を修正しました。 #106822 (linjiayu1025-collab).
  • 非 ASCII の入力 byte を含む parseDateTime の論理エラーを修正しました。 #106856 (Pavel Kruglov).
  • SHOW CREATE ROW POLICY が、他の keyword と一貫せず restrictive/permissive を大文字ではなく小文字で出力していた問題を修正しました。 #106865 (Valery Petrov).
  • UNION 内の空 table が原因で、UNION を含む view に並列レプリカが適用されていなかったケースを修正しました。 #106900 (Igor Nikonov).
  • input_format_allow_errors_num > 0 のときに、切り詰められた Protobuf data を読み込むと server crash (SIGSEGV) する問題を修正しました。 #106905 (Andrey Tsarevskiy | Андрей Царевский ).
  • 集計 function argument に Nullable 型への cast が必要な場合、optimize_rewrite_aggregate_function_with_if optimization を伴う distributed queries で発生していた THERE_IS_NO_COLUMN exception を修正しました。 #106908 (Yakov Olkhovskiy).
  • join キーに TupleArray、または Map 内にネストされた Variant または Dynamic 型が含まれ、join の右辺に異なる値が 1 つしかない場合に、join ランタイムフィルタで発生する例外 (LOGICAL_ERROR) を修正しました。#106931 (Groene AI).
  • 重み配列に大きな整数値が含まれる場合に、arrayLevenshteinDistanceWeighted および arraySimilarity で発生していた符号付き整数オーバーフロー (未定義動作) を修正しました。重み付き距離は、整数の重みに対してはより広い整数型で累積されるようになったため、大きな整数の重みでもオーバーフローせず、正確に保持されます。#106934 (Groene AI).
  • RocksDB ハンドルが解放された EmbeddedRocksDB テーブルに対して TRUNCATE または DROP を実行した際に発生するサーバークラッシュ (null ポインタ参照) を修正しました。たとえば、以前の TRUNCATE によってデータディレクトリが空になった read_only テーブルで発生していました。#106940 (Groene AI).
  • urlCluster などの *Cluster テーブル関数から読み取る際、max_streams_for_files_processing_in_cluster_functions 設定が非常に大きいと発生する例外 (LOGICAL_ERROR として報告される std::length_error) を修正しました。ストリーム数は妥当な値に制限されるようになりました。#106946 (Groene AI).
  • 分散クエリがシャードに送信される直前にキャンセルされた場合に、RemoteQueryExecutor で発生するサーバークラッシュ (DB::IConnections の null ポインタ参照) を修正しました。#106950 (Groene AI).
  • 非同期挿入のフラッシュ (AsyncInsertFlush) クエリについて、system.processors_profile_log および system.query_logelapsed_us が常にゼロになり、read_rows/read_bytes が過少計上されていた問題を修正しました。#106982 (Christoph Wurm).
  • Map バリアントを持つ Variant カラムを含むソート済みブロックのマージ時に、そのローカルな格納順序がグローバル順序と異なる場合に発生するクラッシュ (Source column is not Map / SIGSEGV) を修正しました。#107011 (Groene AI).
  • ReplicatedMergeTree テーブルへの同期 insert 中に、挿入ブロックが完全に重複排除され、競合する part の重複排除ノードがすでに削除されていた場合 (たとえば同時実行の DROP PARTITION による場合) に発生する論理エラー conflicted_part_name.has_value() を修正しました。#107026 (Groene AI).
  • 同じソーステーブル上の 2 つの materialized view が同じターゲットテーブルに書き込み、依存 view がそのターゲットテーブルを読み取る場合に、materialized_views_squash_parallel_inserts を有効にしていると INSERT で発生していた例外 (論理エラー this->visited_views == right->visited_views) を修正しました。#107027 (Groene AI).
  • UNION/INTERSECT/EXCEPT の一方のブランチが Sparse シリアライズされたカラムを読み取り、もう一方のブランチが同じカラムをフル形式として読み取った場合 (たとえば materialized view へのプッシュ時) に発生していた Block structure mismatch in UnionStep stream 論理エラー (debug/sanitizer ビルドではサーバー abort、リリースビルドでは Code: 49) を修正しました。#107041 (Groene AI).
  • 書き込みスキーマと一致しないカラムを持つ Delta Lake テーブルへの insert 時に LOGICAL_ERROR 例外が発生していた問題を修正しました (たとえば、subcolumns にフラット化される Nested カラムや、明示的にカラムの一部だけを指定した table function の場合) 。このような insert は、今後は代わりにユーザー向けの INCOMPATIBLE_COLUMNS エラーで失敗します。#87402 をクローズしました。#107058 (Groene AI).
  • 遅延マテリアライゼーションによってソート対象のカラムより前に別のカラムが配置された場合に、ORDER BY <numeric column> ... LIMIT n クエリで発生していた TYPE_MISMATCH エラー (“Cannot convert string … to type …”) を修正しました。top-K のしきい値は、今後は正しいソートカラムから読み取られます。#107060 (Groene AI).
  • SHOW ROW POLICIES または SHOW MASKING POLICIES の後に FORMATSETTINGS、または INTO OUTFILE 句が続く場合に発生していた構文エラーを修正しました (例: SHOW ROW POLICIES FORMAT TabSeparated) 。#107061 (Groene AI).
  • 異なる型のカラム間で、解放済みのカラム名 (いわゆる「入れ替え」) を再利用する複合 ALTER TABLE ... RENAME COLUMN a TO b, RENAME COLUMN c TO a の問題を修正しました。materialized part に誤った column type が記録されていたため、後続の SELECTConversion between numeric types and IPv6 is not supported で失敗していました (または debug builds では part の読み込み時に中断していました) 。#107064 (Groene AI).
  • 境界配列に NaN が含まれている場合の roundDown 関数の非決定論的な結果を修正しました。同じ入力値でも、バッチ内の周囲の行に応じて有限の境界または NaN が返ることがありました。今後は NaN の境界は無視されるため、結果は有限の境界だけに依存します。#107065 (Groene AI).
  • 補間された分位点が小数を含むものの範囲内である場合に、Date および DateTime 引数に対して quantileTDigestquantileTDigestWeightedDECIMAL_OVERFLOW を投げていた問題を修正しました (たとえば、すべての値がその型に収まる場合の quantileTDigestWeighted(date, weight)) 。小数を含む結果は、今後は quantilesTDigestWeighted と同様に結果型に切り捨てられます。実際に範囲外の値については、引き続きエラーが発生します。#106722 をクローズしました。#107066 (Groene AI).
  • カスタムのトリム用文字セットが 16 文字を超える場合に、trimLefttrimRighttrimBoth (および別名の ltrimrtrimtrim) が TOO_LARGE_STRING_SIZE を投げていた問題を修正しました。今後は長さに関係なくトリムセットが再びサポートされます。#107071 (Nikita Fomichev).
  • Enum8/Enum16 型定義において、範囲外の整数値が黙って切り詰められていた問題を修正しました。Enum8('a' = 200) は、黙って Enum8('a' = -56) を作成する代わりに、今後は ARGUMENT_OUT_OF_BOUND を投げます。#107081 (Groene AI).
  • 複数の行が先頭のカラムで同値になった場合に、Nullable カラムでソートする複数カラムの ORDER BY ... LIMIT クエリで誤った行順序になっていた問題 (および debug builds での LOGICAL_ERROR “Rows are not sorted with permutation”) を修正しました。#107094 (Groene AI).
  • Dynamic 上の JOIN によって構築された Dynamic カラムに対して関数を実行した際に発生する LOGICAL_ERROR (Expected the argument N to have X rows, but it has Y) を修正しました (たとえば、RIGHT/FULL JOIN の非結合行や、JOIN にデコリレートされた相関 EXISTS サブクエリの場合) 。 #107095 (Groene AI).
  • 設定の再読み込み時に ZooKeeper セッションが不必要に再作成される問題を修正しました。 #107096 (Azat Khuzhin).
  • アクセス エンティティ の更新時に、ZooKeeper の読み取り中に mutex を保持し続けないようにしました。 #107097 (Azat Khuzhin).
  • adaptive_write_buffer_initial_size が極端に大きい値に設定されている場合に、MergeTree テーブルへの INSERT で発生する Logical error: Too large size passed to allocator 例外を修正しました。adaptive write buffer の初期サイズは、現在では buffer の最大値に制限されます。 #107104 (Groene AI).
  • LowCardinality メンバーを含む Variant 定数を、非単調な決定論的関数である key expression を持つ key column と比較した際に発生する LOGICAL ERROR (Bad cast from type DB::ColumnString to DB::ColumnLowCardinality) を修正しました (たとえば、sipHash64(col) に対する minmax スキップ索引) 。 #107111 (Groene AI).
  • JOIN ... USING の key に対する修飾付き asterisk (t.*) が aggregate function に渡され、outer JOIN の反対側が Nullable key を持つ場合 (join_use_nulls = 0) に発生する、Bad cast from type DB::IColumn const* to DB::ColumnNullable const* という論理エラーを修正しました。 #107129 (Groene AI).
  • コメント変更を MODIFY SETTING/RESET SETTING と混在させた ALTER TABLE ... ON CLUSTER バッチ (たとえば MODIFY COMMENT 'x', MODIFY SETTING old_parts_lifetime = 123) が leader レプリカ にのみ適用され、他の レプリカ との不整合が生じる問題を修正しました。あわせて、位置指定またはカラムごとの SETTINGS を伴う MODIFY COLUMN ... COMMENT が、ローカルのコメントのみの メタデータ 変更として誤分類される問題も修正しました。これにより、カラムの並べ替えが replicated metadata に反映されず、レプリカ の再起動時に INCOMPATIBLE_COLUMNS を引き起こす可能性がありました。 #107142 (Groene AI).
  • 再帰項の内部で修飾付き asterisk matcher (たとえば x.*) が名前で recursive CTE を参照した場合に発生する LOGICAL_ERROR (“Table expression … data must be initialized”) を修正しました。こうした matcher は、その位置で修飾付きカラム (x.a) や無修飾 matcher (*) と同様に、再帰 table のカラムへ展開されるようになりました。 #107144 (Groene AI).
  • PREWHERE より前に on-fly mutations (apply_mutations_on_fly) または patch parts が行を filter した場合に、query condition cache によって誤った query results が返される問題を修正しました。apply_mutations_on_fly = 1 で読み取るクエリが cache を汚染し、その結果、後続の apply_mutations_on_fly = 0 かつ同じ predicate を使うクエリが、本来読み取るべき mark をスキップして、返される行数が少なすぎることがありました。同じ修正は、PREWHERE の前に filter として追加される row-level security policies にも適用されます。制限の厳しい row policy の下で実行されたクエリが、その policy なしで同じ predicate を使用する後続クエリ向けの cache を汚染する可能性がありました。 #107145 (Groene AI).
  • BACKUP から AzureBlobStorage への修正: バックアップ内でデータファイルをコピーすると、宛先オブジェクトがバックアップディレクトリの外に書き込まれていました。S3 宛先での Backup オブジェクトの存在確認は、プレフィックス一覧ではなく正確な HeadObject リクエストを使うようになり、類似したプレフィックスを持つキーの誤一致を防ぐようになりました。#107153 (Pablo Marcos).
  • quantileExactExclusivequantilesExactExclusivequantileExactInclusivequantilesExactInclusive における符号付き整数オーバーフローを修正しました。これにより、広い値域にまたがる Int64 入力で誤った結果が返される可能性がありました。#107154 (Groene AI).
  • リフレッシャブルmaterialized view に、修飾なしの名前が一時テーブルまたは CTE 名と一致する REFRESH ... DEPENDS ON <name> 依存関係がある場合、再起動時に server がクラッシュループに陥る可能性があった LOGICAL_ERROR (“Unexpected exception in refresh scheduling”) を修正しました。#107156 (Groene AI).
  • config の再読み込み時に起動スクリプトが実行されないようにしました。これは意味的に誤っており、ユーザーの想定にも反するうえ、エラーを起こしやすいことが分かっていたためです。#107187 (Miсhael Stetsyuk).
  • 事前予約における queue_size の最大値に上限を設定しました。#107205 (Elian Gidoni).
  • group_by_use_nulls 設定を有効にした状態で grouping 関数を使用するクエリで発生していた Argument ... of GROUPING function is not a part of GROUP BY clause エラーを修正しました。#107206 (Nikolai Kochetov).
  • max_streams_for_union_step 設定によってユニオンパイプラインが縮小された場合に、optimize_read_in_order を有効にした UNION ALL に対する ORDER BY で結果順序が不正になる問題を修正しました。プランがソート済みの UNION 出力ストリームに依存している場合は、この縮小をスキップするようになりました。#106880 をクローズしました。#107208 (Vladimir Cherkasov).
  • server の終了処理の後半でプロキシ設定を解決する際に、null ポインタ参照が発生する可能性があった問題を修正しました。#107231 (Pedro Ferreira).
  • non-replicated MergeTree テーブルで、従来の並列レプリカを有効にした lightweight UPDATE クエリの問題を修正しました。#107246 (Groene AI).
  • Iceberg テーブルへの insert 時に、書き込み block のカラム名が最新スキーマのフィールド ID と一致しない場合に発生していた server の異常終了 (std::out_of_range 論理エラー) を修正しました (たとえば、iceberg_metadata_staleness_ms のウィンドウ内で同時実行のライターがカラム名を変更した後など) 。これにより、insert は server をクラッシュさせる代わりに、通常のクエリエラーで失敗するようになりました。#107279 (Groene AI).
  • max_*_thread_pool_free_size > 0 の場合に、静的 thread pools が idle threads を無期限に保持し続けることで、server および local のシャットダウンが停止する不具合を修正しました。#107291 (Miсhael Stetsyuk).
  • s3 table function が、小文字の位置指定 partition_strategy (例: hive) を暗黙に無視していた問題を修正しました。#107297 (Julia Kartseva).
  • 並列 block マーシャリングにおける low_cardinality_allow_in_native_format=0 の処理を修正しました。#107319 (Azat Khuzhin).
  • use_skip_indexes_for_top_k 最適化が有効で、ソートカラムに minmax スキップ索引を持つパーツから論理削除 DELETE によって行が削除されている場合に、ORDER BY <col> LIMIT n が誤った結果 (しばしば空) を返す問題を修正しました。これにより、論理削除されたパーツの古い minmax が、実際の上位行を保持しているパーツより優先して評価されることはなくなりました。#107320 (Groene AI).
  • ClickHouse Keeper で、last_snapshot (および mntrzk_latest_snapshot_size) で報告されるスナップショットのメタデータが、古いスナップショットや重複したスナップショットをインストールした後に巻き戻ることがある不具合を修正しました。これにより、同じ index を持つローカルのスナップショットが、ピアにストリーミング中または S3 にアップロード中の登録済みスナップショットファイルをその場で上書きしてしまう可能性もありました。#107321 (Antonio Andelic).
  • MsgPackBSONORCParquetJSONDeltaLakeIcebergPaimon フォーマットで、深くネストしたスキーマまたは値を読み取る際に発生しうるサーバーのスタック overflow (crash) を修正しました。このような深くネストした入力は、現在では例外として拒否されます。#107341 (Raúl Marín).
  • SYSTEM SYNC DATABASE REPLICA ... STRICT における発生しうる論理エラーを修正し、データベースレプリカに対して STRICT modifier が実際に有効になるようにしました。#107344 (Pedro Ferreira).
  • DeltaLake table の読み取り時に、ClickHouse のスキーマで指定されたカラムが Delta の column mapping に存在しない場合 (たとえば Delta log でカラム名が変更または削除された後) に、debug/sanitizer builds でサーバーが abort する問題を修正しました。代わりに、query は捕捉可能な INCORRECT_DATA error で失敗するようになりました。#107347 (Groene AI).
  • 補完対象カラムより前の ORDER BY カラムで COLLATE 照合順序が使われている場合に、ORDER BY ... WITH FILL が余分な行を生成する問題を修正しました。現在は、その照合順序を用いたソートプレフィックスで行がグループ化され、sort order と一致するようになりました。#107365 (Groene AI).
  • metadata versions をまたいで既存の schema-id が別のスキーマに再割り当てされている Iceberg table を読み取る際に発生する crash (debug builds では LOGICAL_ERROR) と、誤った結果を黙って返す不具合 (release builds) を修正しました。このような metadata は現在 ICEBERG_SPECIFICATION_VIOLATION で拒否されます。#107370 (Groene AI).
  • Variant または Dynamic カラムに、空でない単一の variant と NULL が格納されており、かつ関数が入力カラムをそのまま返す場合に、toStringconcat などの関数を適用すると発生する LOGICAL_ERROR (Variant N (T) has size X, but expected Y) を修正しました。#107374 (Groene AI).
  • scalar subquery に同じ table を読み取るネストした subqueries が含まれている場合に、並列レプリカで発生しうる Logical error: 'Duplicate announcement received for replica number N' を修正しました。#107381 (Groene AI).
  • 実行時に変更可能な server settings (max_server_memory_usagemark_cache_sizemax_concurrent_queries、thread pool sizes など) について、getServerSettingsystem.server_settings の報告内容と一致する、現在有効な実際の値を返すように修正しました。#107388 (Alexey Milovidov).
  • Decimal のサイズ引数を持つ arrayResize を修正しました。サイズは、生の未スケーリング表現ではなく実際の値として解釈されるようになりました (例: arrayResize([1, 2, 3], 1.5::Decimal(2, 1)) は 1 要素を返します) 。 #107389 (Alexey Milovidov).
  • use_strict_insert_block_limits が有効な場合に、Alias テーブルへの非同期 INSERT で発生していた LOGICAL_ERROR (block.rows() == getRows()) を修正しました。 #107400 (Groene AI).
  • 論理エラー (Unexpected return type from equals. Expected Nullable(UInt8). Got UInt8) を修正しました。これは、論理和 (部分述語) のプッシュダウン最適化で、JOIN によって型が拡張された USING キーに条件がプッシュダウンされた場合に発生していました。あわせて、未知の識別子を参照する定数畳み込み可能な if/multiIf 分岐を含む JOIN ... USING クエリで識別子を解決する際に、analyzer で発生していたサーバークラッシュ (segmentation fault) も修正しました。 #107407 (Groene AI).
  • 範囲外のイベント型を持つ細工された集約関数の状態を finalize する際に windowFunnel で発生していた heap buffer overflow (サーバークラッシュ) を修正しました。この問題は、任意のユーザーが単一の SELECT で到達可能でした。 #107412 (uwezkhan).
  • 非有限の浮動小数点値 (naninf など) が prometheusQuery / prometheusQueryRange テーブル関数の timestamp/duration 引数として渡された場合の未定義動作を修正しました。このような引数は、無効な timestamp を生成する代わりに BAD_ARGUMENTS を返すようになりました。 #107417 (Groene AI).
  • PostgreSQL のデータベース名またはテーブル名に大文字が含まれている場合に、MaterializedPostgreSQL が変更のレプリケーションを黙って停止してしまう問題を修正しました (pgoutput コンシューマーが、大小文字を保持する publication と一致しない、引用符なしの小文字の publication 名を要求していました) 。 #107423 (Alexey Milovidov).
  • キー式 (ORDER BYPRIMARY KEYPARTITION BY、またはスキップ INDEX) に、右辺がテーブルの IN 演算子が含まれている場合 (例: ORDER BY (x IN some_table)) に発生していた例外 (Logical error: Not-ready Set is passed as the second argument for function 'in') を修正しました。このようなキー式は、今後はテーブル作成時に拒否されます。 #107424 (Groene AI).
  • NULL ペイロード値を保持する集約関数 (*_respect_nulls ファミリー: anyRespectNulls, first_value_respect_nulls, anyLast_respect_nulls, last_value_respect_nulls) に対する optimize_rewrite_aggregate_function_with_if 最適化で誤った結果になる問題を修正しました。この最適化では、そのような関数に対して f(if(cond, x, NULL))-If 形式に rewrite しないようになりました。 #107430 (Groene AI).
  • ローカルディスク上のオブジェクトストレージのディレクトリ (例: local ディスク上の Iceberg table) を一覧表示している間にファイルが同時に置き換えられると、誤って filesystem error: in last_write_time: No such file or directory 例外が発生する問題を修正しました。同時に削除されたエントリは、一覧表示を中断する代わりに省略されるようになりました。 #107432 (Groene AI).
  • optimize_if_transform_strings_to_enum = 1 のとき、最適化された文字列リテラル上の if/transform 式が、分散テーブルまたは並列レプリカ上の GROUP BY または ORDER BY キーである場合に発生していた THERE_IS_NO_COLUMN エラーを修正しました。 #107455 (Groene AI).
  • distinct キーの集合を初期化している最中に割り当てが失敗した場合 (たとえばメモリ制限に達した場合) に発生し得た、DISTINCT 処理中のまれなサーバークラッシュを修正しました。#107467 (Groene AI).
  • 保留中の on-fly UPDATE があるテーブルで apply_mutations_on_fly = 1 を使用し、その対象カラムが、ALTER MODIFY COLUMN ... LowCardinality(...) mutation より前の on-fly UPDATE で関数入力としても参照されている場合に発生していた LOGICAL_ERROR: Unexpected return type from materialize (および同様の型不一致エラー) を修正しました。#107475 (Groene AI).
  • S3 経由で DeltaLake テーブルを読み取る際に、AWS STS credentials が古いままになる問題を修正しました。エンジンはスナップショットの refresh 時に、更新済み credentials を持つ S3 クライアントを保持するようになり、長時間実行される読み取りが STS トークンの TTL 失効後に失敗しなくなりました。また、STS assume-role credentials provider は、STS を使用するあらゆる S3 アクセスでの credential refresh にも対応するようになりました。#107480 (Elmi Ahmadov).
  • CREATE TABLE ... CLONE ASATTACH PARTITION ... FROM、または MOVE PARTITION ... TO TABLE によって通常の MergeTree から ReplacingMergeTreeSummingMergeTreeAggregatingMergeTree に part を取り込んだあと、SELECT ... FINAL および OPTIMIZE TABLE ... FINAL が重複行を返していた問題を修正しました。ソースと宛先の engine が異なる場合、取り込まれた part の merge level は 0 にリセットされるようになり、宛先側で次回の merge 時に重複排除されます。#107481 (Groene AI).
  • PostgreSQL ワイヤプロトコルのパーサーにおける整数 underflow を修正しました。長さフィールドが 4 未満のメッセージにより size - 4 のラップアラウンドが発生し、過大な resize/ignore につながっていました。#107485 (uwezkhan).
  • ReplicatedMergeTree で quorum を待機している間のクエリキャンセルが、より適切に追跡されるようになりました。#107513 (Nikita Taranov).
  • PARTITION BY キーを持つテーブルに対して、より大きな expression 内に含まれた IN/NOT IN サブクエリ (たとえば WHERE (c0 IN (SELECT ...)) != 0) を含むクエリを実行した際に発生していた Not-ready Set is passed as the second argument for function 'in' (LOGICAL_ERROR) を修正しました。#107515 (Groene AI).
  • 非同期挿入の flush 経路 (async_insert = 1 の場合) で、currentUser(), user(), SESSION_USER, authenticatedUser() が空文字列に評価されていた問題を修正しました。これにより、これらの関数を参照する DEFAULT/MATERIALIZED カラム expression や materialized view で、挿入ユーザーではなく空文字列が警告なしに保存されていました。#107541 (Groene AI).
  • enable_analyzer = 1 (デフォルト) では、別のデータベースにしか存在しないテーブルを修飾なしの名前でクエリした場合に、右テーブルが提案されるようになりました。たとえば SELECT * FROM functionsMaybe you meant system.functions? と表示します。以前は新しいアナライザはヒントのない Unknown table expression identifier エラーを返していましたが、古いアナライザはすでにこの有用な提案を出していました。#107550 (Groene AI).
  • rapidjson ライブラリ (prettyPrintJSONJSONMergePatch、および rapidjson JSON パーサー) が使用するメモリを memory tracker に計上するようにし、病的な入力が無制限に割り当てを行う代わりに MEMORY_LIMIT_EXCEEDED で拒否されるようにしました。#107555 (Raúl Marín).
  • optimize_prewhere_after_pushdown が有効な状態で、明示的な PREWHEREWHERE の両方を指定して file()url()、またはオブジェクトストレージソースをクエリした際に発生していた LOGICAL_ERROR (updateFormatPrewhereInfo called more than once) を修正しました。#107568 (Groene AI).
  • 分散クエリプランをローカルで実行した場合 (make_distributed_plan + distributed_plan_execute_locally) に、log_formatted_queries = 1 で発生し得たクラッシュ (null pointer dereference) を修正しました。#107570 (Groene AI).
  • 分散プランクエリ (make_distributed_plan = 1) の終了処理中に、ワーカーのステータスチェックが次回のチェックを再スケジュールできなかった場合 (たとえば、シャットダウン時の CANNOT_SCHEDULE_TASKMEMORY_LIMIT_EXCEEDED) に発生していたサーバー異常終了 (std::terminate, signal 6) を修正しました。これにより、クエリは正常に失敗し、サーバーはそのまま稼働し続けます。#107575 (Groene AI).
  • Elf および DWARF のパースに、不足していた bounds チェックを追加しました。#107579 (Michael Kolupaev).
  • ORC リーダーに不足していた bounds チェックを追加しました。#107580 (Michael Kolupaev).
  • Replicated database 内の TimeSeries table を含む RENAME TABLERENAME DATABASE、または CREATE OR REPLACE TABLE で発生し得た例外 (Digest does not match 論理エラー) を修正しました。TimeSeries table のリネームがサポートされるようになりました。#107583 (Groene AI).
  • MySQL プロトコルのポートにおける、未認証でメモリ枯渇を引き起こせるサービス拒否攻撃を修正しました。#107599 (Shaohua Wang).
  • Replicated database 内の TimeSeries table に対する DROP TABLE を修正しました。従来は内部 table が残存し、バックグラウンドの drop task が無期限に再試行され続けていました (DROP TABLE ... SYNC はハングしていました) 。#107604 (Groene AI).
  • replicated part fetch プロトコルにおける 2 件のパストラバーサル問題を修正しました。これにより、悪意のあるレプリカが part directory の外にファイルを書き込める可能性がありました。#107606 (Antonio Andelic).
  • Azure 経由で Delta Lake table を読み取る際の ‘Account must be specified error’ を修正しました。#107620 (Smita Kulkarni).
  • プレーンな MergeTree table に対する ALTER TABLE ... REPLACE PARTITION で、サーバー再起動後に置き換え済みの part が復活し、table が置換後の行と古い置換済みの行の両方を返してしまっていた問題を修正しました。#107623 (Groene AI).
  • クエリを enable_analyzer = 0 で実行している際に、ターゲットが Distributed table の materialized view を読み取るとサーバーがクラッシュする問題を修正しました。#107653 (Groene AI).
  • 複数の quotas が同じ user または role に割り当てられている場合、これまでは 1 つの quota のみが適用され、しかも非決定論的に選ばれていましたが、今後はそれらすべてが同時に適用されます (いずれか 1 つでも超過するとクエリは拒否されます) 。SHOW QUOTAsystem.quota_usage には、current user に対して適用されているすべての quotas が表示されるようになりました。#107664 (Alexey Milovidov).
  • s3 およびその他のオブジェクトストレージのテーブル関数で、キー・バリュー引数が重複した場合に BAD_ARGUMENTS ではなく LOGICAL_ERROR が送出される問題を修正しました。例: s3('http://...', format = 'CSV', format = 'TSV')#107670 (Groene AI).
  • MySQL Connector/J 8.2.0 以降 (9.x を含む) で MySQL インターフェイスを使用できなかった問題を修正しました。OK パケットの info フィールドは、MySQL server と同様に長さエンコードされるようになり、JDBC driver が接続できるようになりました。 #107693 (Alexey Milovidov).
  • make_distributed_plan = 1 を指定したクエリで、関数でラップしたキー同士を結合する際、両辺に共通の型がない場合 (たとえば右側のキーが UInt64ON intDiv(-1, t1.key) = t2.key) に LOGICAL_ERROR (“Input nodes size mismatch in dag”) が発生する問題を修正しました。 #107701 (Groene AI).
  • Apache Arrow Java < 19.0.0 (Apache Spark を含む) が生成した、空の String/Binary カラムを含む Arrow/ArrowStream データの読み取り時に、INCORRECT_DATA が送出される問題を修正しました。 #107764 (Raúl Marín).
  • クエリが、事前に型変換されていない別型のリテラルとカラムを比較した場合 (例: numeric_col IN (SELECT '5') または string_col IN (SELECT 5)) に、countmin カラム STATISTICS の推定で BAD_GET 例外 (“Bad get: has String, requested UInt64”) が発生する問題を修正しました。 #107793 (Groene AI).
  • リモートのテーブル構造を推定している間にブリッジが応答しなくなると、odbc および jdbc テーブル関数が数分間ハングし、クエリのキャンセル (KILL QUERY, max_execution_time) を無視する問題を修正しました。 #107809 (Alexey Milovidov).
  • s3/gcs テーブル関数の secret 引数で、位置指定形式と名前付き形式を混在させた不正なクエリ (例: s3('url', 'a', 'b', secret_access_key = 'c')) をフォーマットする際に、例外 (Logical error: 'index >= result.start') が発生する問題を修正しました。 #107818 (Groene AI).
  • LowCardinality カラムに対して set スキップ索引 が granule をプルーニングしない問題を修正しました。 #107868 (Konstantin Bogdanov).
  • サーバー設定 insert_deduplication_version = new_unified_hash 使用時に、挿入の重複排除が String および Array カラムに対して誤ったハッシュを計算する問題を修正しました。重複排除ハッシュが挿入された block 内での行の位置に依存していたため、同一の insert でも重複排除に失敗することがありました。 #107915 (Sema Checherinda).
  • JIT-compiled なソートコンパレータで符号拡張が欠けていたことにより、macOS (Apple Silicon) で複数のソートキーを持つ Nullable カラムに対する ORDER BY の結果が不正になる問題を修正しました。 #107973 (Raúl Marín).
  • 複数スレッドで Dynamic カラムを読み取る際の性能低下を修正しました。原因は #100730 です。#107942 をクローズします。 #107997 (Pavel Kruglov).
  • 非推奨のデータレイク設定 storage_catalog_url が、catalog guard によって正しく拒否されるようになりました (従来は storage_catalog_typestorage_aws_access_key_id のみがチェック対象でした) 。また、エラーメッセージにすべての非推奨設定が表示されるようになりました。#108040 (Alexey Milovidov).
  • LIKE クエリが、スパースに格納されたカラムに対して direct-read fallback path 経由で text 索引を読み取る際に発生していた Bad cast from type DB::ColumnSparse to DB::ColumnVector<char8_t> 論理エラーを修正しました。#108068 (Groene AI).
  • 空の batch であっても、アクセスキャッシュの batch-finished handlers が常に実行されるようにしました。#108124 (Azat Khuzhin).
  • UNION ALL を含む一部のクエリで発生していた LOGICAL_ERROR (Column identifier is already registered) を修正しました。#100770 (Shaohua Wang).
  • server のシャットダウン中に workload storage mutex で発生していた use-after-free を修正しました。#101447 (Tuan Pham Anh).
  • Shared カタログでの ALTER DATABASE MODIFY COMMENT におけるデッドロックを修正しました。#103683 (Nikolay Degterinsky).
  • 空の Unicode 引用識別子では、CANNOT_PARSE_QUOTED_STRING ではなく SYNTAX_ERROR が発生するようになりました。#104173 (leonard9893).
  • timeSeries* aggregate functions の元の parameter 型を保持することで、AggregateFunction type がテーブルの再 Attach や 並列レプリカをまたいでも正しく往復変換されるようにしました。#104812 (Vitaly Baranov).
  • 並列レプリカ使用時に serialize_query_plan 下のマテリアライズド CTE で発生していた LOGICAL_ERROR を修正しました。#104896 (Igor Nikonov).
  • staleness (window) parameter が INT64_MAX に近い場合に timeSeries*ToGrid functions で発生していた、符号付き整数の overflow を修正しました。#105319 (Groene AI).
  • compatibility setting の値によって apply_row_policy_after_finalfalse に戻されることがなくなり、row policies が FINAL とともに常に正しく適用されるようになりました。#105637 (Yarik Briukhovetskyi).
  • posix_spawn stub で SETPGROUP/RESETIDS/SETSIGDEF を尊重するようにし、clickhouse chdig client を修正しました。#105858 (Azat Khuzhin).
  • merge/mutate executor が初期化されていない場合に、projections に対する merge-tree の整合性チェック中に発生していた例外を修正しました。#105919 (Mikhail Artemenko).
  • projections に対する索引解析中、minmax 索引が親 part ではなく projection 自体から読み込まれるようになり、正しい結果が得られるようになりました。#105940 (Mikhail Artemenko).
  • materialize(monotonic_chain(...)) に対する addMonotonicChain で発生していた例外を修正しました。#106050 (Nikolai Kochetov).
  • MASKING POLICY の依存オブジェクトを含むバックアップで RESTORE が失敗する問題を修正しました。#106086 (Julia Kartseva).
  • prefer_column_name_to_alias が有効な場合に、SQL user-defined functions の展開中に発生する可能性があるメモリ破損を修正しました。#106121 (Nikolai Kochetov).
  • bridge connection を使用する Dictionary は、server の再起動後に接続を再確立して再ロードされるようになりました。#106151 をクローズしました。#106152 (Pedro Ferreira).
  • LocalObjectStorage のファイルシステムキャッシュを修正しました。#106239 (Kseniia Sumarokova).
  • use_delayed_remote_source を使用する table function の遅延リモートログソースを修正しました。#106470 (Nikolay Degterinsky).
  • グリッド開始前の timestamp および window 外の timestamp に対する timeSeriesLastToGrid を修正しました。#106504 (Vitaly Baranov). #106577 (Vitaly Baranov).
  • クエリパラメータを含む関数名で発生する LOGICAL_ERROR (Inconsistent AST formatting) を修正しました。#106635 (Vitaly Baranov).
  • distributed plan task の deserialization 前に table が削除された場合に発生する論理エラーを修正しました。#106944 (Alexander Gololobov).
  • NullableGROUP BY キーで厳密比較を使用するようにしました。#107050 (Nikolai Kochetov).
  • table function の argument がカラム expression ではない場合 (たとえば multiIf/CASE の未解決の * matcher) に発生する LOGICAL_ERROR (Trying to get name of not a column) を修正しました。#107411 (Alexey Milovidov).
  • 多数の異なる無効な time-zone 名が処理された際に、time-zone cache (DateLUT) が無制限に増大する問題を修正しました。#107464 (Alexey Milovidov).
  • 通常の MergeTree mutation を完了として報告する前に、part_log エントリを書き込むようにしました。#107741 (Azat Khuzhin).
  • arrayFold が、不正な入力に対して array argument の妥当性をチェックするようになりました。#107932 (Michael Kolupaev).
  • MergeTree part の cached skip-index archive reader における、まれに発生する data race と use-after-free の可能性を修正しました。これは、part の移動またはリネーム中にクエリが skip indices を読み取った場合に発生することがありました。#107995 (Raúl Marín).
  • PREWHERE 使用時の Map subcolumns のパフォーマンス低下を修正しました。#107988 (Pavel Kruglov).
  • タイムゾーン付きの parseDateTimeBestEffort が、toString(Nullable(DateTime64)) の NULL 行で CANNOT_PARSE_DATETIME を投げる問題を修正しました。#108310 (Yarik Briukhovetskyi).
  • ArrowFlight の table function と engine で、オプションの dataset キーを省略した named collection が No such key 'dataset' エラーで拒否される問題を修正しました。#108041 (Alexey Milovidov).
  • CODEC または engine 宣言内で、引数を取らない window function に対して発生する Inconsistent AST formatting 論理エラー (例: CODEC(cume_dist() OVER (...))) を修正しました。これにより、この種の関数は括弧を保持するようになり、クエリがフォーマット/parse の往復変換を通過できるようになりました。#107806 (Alexey Milovidov).
  • 区切り文字を含む needle を指定した hasToken が、BAD_ARGUMENTS を返さずにテキスト索引経由で結果を黙って返してしまう問題を修正しました。#108189 (Jimmy Aguilar Mena).
  • 設定 use_skip_indexes_on_data_read は、compatibility 設定を通じて 26.1 より前の既定値 (false) に戻せるようになりました。これにより、on-data-read パスによって minmax/set/bloom_filter のスキップ索引における mark-range pruning が機能しなくなる性能劣化への回避策が提供されます。#108330 (egor romanov).
  • remote/remoteSecure に渡した named collection の database/db 上書きが定数の database 名でない場合 (例: remote(nc, database = (SELECT 1))) に発生しうるクラッシュ (null pointer dereference) を修正しました。これにより、クエリはクラッシュするのではなく、明確なエラーで失敗するようになりました。#108271 (Groene AI).
  • ZooKeeper connection が不適切なタイミングで失われた場合に、リフレッシャブルmaterialized view が停止したままになる問題を修正しました。#108234 (Michael Kolupaev).
  • 既定値で埋められた Array(Tuple(...)) カラムの読み取り時に発生する Bad cast from type DB::ColumnVector<...> to DB::ColumnTuple を修正しました。これは、たとえば ALTER TABLE ... ADD COLUMN の後や、その場で適用された未完了の ALTER TABLE ... CLEAR COLUMN mutation の後に起こることがありました。#107232 (Groene AI).
  • 共通スーパータイプが DynamicJOIN ... USING キーへの明示的な参照を aggregate function に渡したときに発生する Bad cast from type DB::ColumnDynamic to DB::ColumnNullable 論理エラーを修正しました。たとえば count(t.key) IGNORE NULLS のようなケースです。#107289 (Groene AI).
  • 未適用の論理更新 UPDATE パッチが残っているパーティションに対して REPLACE PARTITIONMOVE PARTITIONDETACH PARTITION、または DETACH PART を実行した際、通常の (non-replicated) MergeTree でデータが黙って失われる問題を修正しました。これらの操作は、ReplicatedMergeTree と同様にコマンドを拒否するようになりました。#107386 (Groene AI).
  • Dynamic な key を持つ Map に対する has で、lookup 引数が LowCardinality の場合に発生するクラッシュ (リリース build では SIGSEGV、デバッグ build では型不一致 assertion) を修正しました。例: has(map('a'::Dynamic, ...), toLowCardinality('b'))#107956 (Groene AI).
  • TO ターゲットテーブルで、ビューの SELECT が生成するものよりも広い Enum を持つカラムが宣言されている materialized view への insert 時に発生していた LOGICAL_ERROR (“Block structure mismatch … between ConvertingTransform and RemovingReplicatedColumnsTransform”) を修正しました。これにより、有効な Enum の拡張が正しく適用されるようになりました。#107648 (Groene AI).
  • 同じ式に展開される複数の ALIAS カラムを持つ Distributed テーブルにクエリする場合 (または並列レプリカを使用する場合) に、それらを ORDER BY/GROUP BY/HAVING とあわせて参照すると発生していた NUMBER_OF_COLUMNS_DOESNT_MATCH エラーを修正しました。#107913 (Yakov Olkhovskiy).
  • 入力文字列が 32768 バイトを超え、文字セットを検出できない場合に、detectCharset および detectLanguageUnknown 関数で発生していた未定義動作 (null ポインタが memcpy に渡される) を修正しました。#108250 (Groene AI).
  • Int64 の範囲限界に近い極端な DateTime64 値に対して、hour および minute 単位で dateDiff を使用した際に発生していた signed integer overflow (未定義動作) を修正しました。#108229 (Groene AI).
  • 空のマージ済みパーツに対するテキスト索引で発生していた Too many marks を修正しました。#106867 (Azat Khuzhin).
  • ALTER UPDATE col = ... WHERE <cond> で条件が非定数または false で、その後に ALTER MODIFY COLUMN col <new type> を実行した場合に、apply_mutations_on_fly = 1 のもとでカラムを読み取る際に発生していた LOGICAL_ERROR (“Unexpected return type from if”) を修正しました。#108128 (Groene AI).
  • Array(Dynamic) または Array(Variant)accurateCastOrNullQBit に CAST した際に発生していたサーバー abort (IColumn::insertFrom における Logical error) を修正しました。例: accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')#108288 (Groene AI).
  • DESCRIBE TABLE (...) AS ... でサブクエリの後にエイリアスが続く場合に発生していた構文エラーを修正しました。#100205 (Yarik Briukhovetskyi).
  • getClientHTTPHeader は非決定論的として正しく扱われるようになり、その結果がクエリ結果キャッシュで誤って再利用されなくなりました。#108029 (Alexey Milovidov).

ビルド/テスト/パッケージングの改善

  • delta-kernel-rsdefault-engine-native-tls feature 付きでビルドし、その HTTP client (reqwest) が ClickHouse にすでにリンクされている OpenSSL を再利用できるようにしました。これは native-tls の有効化としては一部にとどまります。object_store は引き続き reqwest/rustls-tls-native-roots を強制するため、reqwest は結果として native-tlsrustls の両方の backend を持つことになります。さらに、ring は依然として object_store 経由でコンパイルされるため (rustls 経由の推移的依存関係と、AWS リクエストの HMAC 署名向けの直接利用の両方) 、delta-kernel-rs は現時点では MSan では無効のままです。また、ring の手書きアセンブリは MSan が必要とするシンボルを生成しません (arrow-rs-object-store#585 でアップストリーム追跡中) 。 #96856 (Austin Bonander).
  • clickhouse binary に対し、PGO (Profile-Guided Optimization) と BOLT (Binary Optimization and Layout Tool) によるリンク後最適化を追加しました。profiles は CI workloads から収集され、release ビルド時にベストエフォートで適用されます。どちらの stage でも、profile が stale であるか互換性がない場合は、非最適化の出力に fall back します。現時点では、PGO による効果は確認されていません。 #100938 (Alexey Milovidov).
  • clickhouse keeper-bench--storage mode を追加し、KeeperStorage を in-process (network、raft、ステートマシンなし) で benchmark できるようにしました。設定には、network mode と同じ setup/generator config セクションを使用します。 #103081 (Michael Kolupaev).
  • ENABLE_AWS_S3=OFF でのビルドを修正しました。 #105390 (Yue Ni).
  • mongo-cxx-driver を r4.3.0 に更新しました。 #105522 (Konstantin Bogdanov).
  • RapidJSON に対するビルドを修正しました。 #105674 (Ilya Golshtein).
  • 広く使われている base/ ヘッダーから推移的 include を削除し、vendor 提供の Poco/Logger.h から未使用コードを除去することで、ビルドを高速化しました。 #105702 (Raúl Marín).
  • libxml2 を 2.15.1 から 2.15.3 に更新しました。 #105985 (Konstantin Bogdanov).
  • Poco 内で expat 2.8.1 を使用するようにしました。 #105988 (Konstantin Bogdanov).
  • thriftv0.23.0 に更新しました。 #105993 (Konstantin Bogdanov).
  • postgres tag REL_18_4 を使用するようにしました。 #105994 (Konstantin Bogdanov).
  • krb5 を 1.22.2 にアップグレードしました。 #106076 (Konstantin Bogdanov).
  • 同梱の curl を 8.20.0 に更新しました。 #106077 (Konstantin Bogdanov).
  • mariadb-connector-c を 3.1.29 に更新しました。ClickHouse 関連のすべてのパッチは維持されています。#106287 (Nikita Mikhaylov).
  • libssl3t64 の CVE 修正のため、distroless ベースイメージのダイジェストを更新しました。#106360 (Rahul Nair).
  • wasmtime v45.0.1 を使用するようにしました。#106836 (Konstantin Bogdanov).
  • openssl を 3.5.7 に更新しました。#106844 (Konstantin Bogdanov).
  • Distroless Docker build で、完全なバージョンタグだけでなく、:X.Y-distroless および :X.Y.Z-distroless のフローティングタグも更新されるようになりました。#106932 (Rahul Nair).
  • NTLM 認証、cookies、alt-svc、HSTS、DNS-over-HTTPS、netrc、MIME、AWS SigV4 など、未使用の curl 機能を無効化しました。#107226 (Konstantin Bogdanov).
  • snapshot の I/O がバックグラウンドスレッド上で実行された際に発生していた snapshot-install の livelock を修正した NuRaft を反映しました。nuraft_use_bg_thread_for_snapshot_io Keeper 設定は引き続きデフォルトで無効です。CI では現在、両方のモードをカバーするため、この設定をランダム化しています。#107338 (Antonio Andelic).
  • ClickHouse の checkout path にヘッダ拡張子に一致する substring が含まれている場合に、abseil を build できない問題を修正しました。#107349 (zhiqiang).
  • x86_64 では、musl libc で利用できない glibc 固有の sysconf(_SC_LEVEL2_CACHE_SIZE) ではなく、CPUID から L2 キャッシュサイズを判定するようにしました。#107469 (Konstantin Bogdanov).
  • 深くネストしたクエリをサポートするため、musl build の stack サイズを 8 MiB に増やしました。#107470 (Konstantin Bogdanov).
  • Rust の静的ライブラリ内でローカライズされる C ライブラリシンボルの集合を、手動管理の allowlist ではなく実際の reference libraries から導出するようにし、これによりすべての compiler-rt builtins とプラットフォームの libm 関数をカバーできるようにしました。#107571 (Raúl Marín).
  • distroless の server および Keeper イメージを gcr.io/distroless/base-nossl-debian13 に切り替え、ClickHouse が実際にリンクしているライブラリだけを含め、自前で静的リンクしているライブラリを取り込まないようにしました。#107837 (Rahul Nair).
  • stale-skipped されていた macOS (arm_darwin) 上の stateless tests 50 件を再び有効化し、macOS での directory 同期には F_FULLFSYNC ではなく fsync を使うようにしました。#107887 (Raúl Marín).

ClickHouseリリース 26.5、2026-05-21。プレゼンテーションビデオ

後方互換性を持たない変更

  • date_time_input_formatcast_string_to_date_time_mode のデフォルトを basic から best_effort に変更しました。これまで basic 以外の datetime 文字列 (例: 2024 April 4, Apr 15, 2020 10:30:00) をパースできず失敗していたクエリも、今後はデフォルトで成功する可能性があります。従来の厳格なパース動作を維持するには、これらの設定を basic に設定してください (または compatibility を使用してください) 。 #89334 (Alexey Milovidov).
  • Nullable の null map で使われるサブカラム名と競合し、サブカラムの解決が曖昧になるため、Tuple 要素名 null は使用禁止になりました。 #98377 (Alexey Milovidov).
  • 動的ディスクで from_envfrom_zkinclude を使用できないようにするため、設定 dynamic_disk_allow_from_envdynamic_disk_allow_from_zkdynamic_disk_allow_include を追加しました。以前はデフォルトで許可されていた動作が、今後はデフォルトで禁止されるため、後方互換性を持たない変更です。 #99138 (Kseniia Sumarokova).
  • 廃止された Arrow ベースの Parquet リーダーおよびライターは、今後使用できなくなりました。代わりにネイティブ実装が使用されます。 #100949 (Alexey Milovidov).
  • SHOW CREATE TABLE t は、永続 table と一時テーブルの両方に t という名前が存在し、database が指定されていない場合、DESCRIBE TABLE の既存の動作に合わせて一時テーブルを優先するようになりました。さらに、DESCRIBE TEMPORARY TABLE 構文もサポートされました。 #100966 (Alexey Milovidov).
  • HTTP connections による認証前の memory usage を制限するため、デフォルトの http_max_fields を 1,000,000 から 1,000 に、http_max_field_name_size を 128 KB から 4 KB に引き下げました。また、http_max_request_header_sizehttp_headers_read_timeout 設定を追加しました。以前のより高い上限に依存している Users は、設定でそれらを復元できます。 #103285 (Sema Checherinda).
  • system.metric_log に、登録されているすべての histogram metric を行ごとにスナップショットする histograms nested カラムを追加しました。あわせて、ゼロ値を出力するかどうかを制御する新しい設定 system_metric_log_show_zero_values_in_histograms も追加しました。これにより system.histogram_metric_log table は非推奨になります。 #103770 (Miсhael Stetsyuk).
  • 明示的な time zone を指定しない DateTime または DateTime64 への CAST は、ソース argument の time zone (ソースが明示的な time zone を持つ DateTime/DateTime64 の場合) を保持するようになり、toDateTime/toDateTime64 関数の動作と一致するようになりました。#55072 をクローズします。 #104433 (Alexey Milovidov).
  • kql table function を削除しました。KQL ダイアレクトで queries を実行するには、SET dialect = 'kusto' を使用してください。 #105101 (Alexey Milovidov).
  • window functions の RANKDENSE_RANK は、SQL 標準に従い、arguments を受け付けず、指定すると NUMBER_OF_ARGUMENTS_DOESNT_MATCH を throw するようになりました。以前は、RANK(x) OVER (ORDER BY id) のようなクエリも、argument を無視したまま暗黙に受け入れられていました。以前の緩やかな動作に戻すには、allow_rank_dense_rank_arguments = 1 を設定してください。 #49526 をクローズします。 #104324 (Groene AI).

新機能

  • max_bytes_ratio_before_external_group_by および max_bytes_ratio_before_external_sort に対応する新しい設定 max_bytes_ratio_before_external_join を追加しました。これは、ハッシュ結合におけるディスクへの spill のしきい値を、利用可能なメモリに対する比率で表すものです。絶対値の max_bytes_before_external_join と組み合わせた場合は、より小さい方のしきい値が適用されます。#103862 (Alexey Milovidov). 新しい max_bytes_ratio_before_external_join 設定は、max_bytes_ratio_before_external_group_by および max_bytes_ratio_before_external_sort と同様に、デフォルトで 0.5 に設定され有効になります。右側のデータが利用可能なシステムメモリの半分を超えると (メモリ制限が設定されている場合) 、ハッシュ結合は自動的に Grace Hash Join に spill します。#104285 (Alexey Milovidov).
  • table function filesystem を追加しました。これにより、ディレクトリ構造をテーブルとして表現し、ファイルのメタデータや内容を SQL でクエリできるようになります。元の実装は #42039 の @perst20 によるものです。#42039 を参照してください。#50208 を参照してください。#53610 (Alexey Milovidov).
  • arrayMaparrayFilter などの高階関数に、関数名だけをそのまま渡せるようにしました。たとえば、arrayMap(negate, [1, 2, 3])arrayMap(x -> negate(x), [1, 2, 3]) と等価になりました。#101033 (Alexey Milovidov).
  • 設定 send_table_structure_on_insert_with_inline_data と client オプション --inline-insert-data を追加し、ネイティブプロトコル経由で server 自身がインライン INSERT データをパースできるようにしました。これにより、テーブル構造を受け取るためのラウンドトリップを回避し、多数の小さな insert のパフォーマンスを向上させます。#101034 (Alexey Milovidov).
  • SQL クエリのトークン化と構文ハイライトのための関数 tokenizeQueryhighlightQuery を追加しました。tokenizeQuery は、lexer の token をバイト offset および token type とともに返します。highlightQuery は、ハイライトカテゴリ (keyword、identifier、function、number、string など) 付きの、パーサーに基づく構文ハイライト範囲を返します。#101054 (Alexey Milovidov).
  • RFC 3986 のセマンティクスに従って、url table function および URL table engine で relative URL を解決するための設定 url_base を追加しました。#101113 (Alexey Milovidov).
  • LIMIT BY clause で負の値をサポートし、各グループの先頭ではなく 末尾 から行を選択できるようにしました。たとえば、LIMIT -2 BY idid ごとの最後の 2 行を返します。負の OFFSET (LIMIT -1 OFFSET -1 BY id) および符号が混在する指定 (LIMIT -2 OFFSET 1 BY id) もサポートされます。#103222 (Nihal Z. Miaji).
  • 複数の json クエリのパフォーマンス向上のため、json_value 関数で tuple および array への出力をサポートしました。#78362 (kevinyhzou). @KevinyhZou により、JSON_VALUEJSON_EXISTSJSON_QUERY で複数パスの Tuple/Array JSONPath argument をサポートしました。#101102 (Alexey Milovidov).
  • 新しい kafka_autodetect_client_rack パラメータが導入されました。設定すると、クラウド環境の機能を利用して Availability Zone を検出し、それを librdkafkaclient.rack パラメータとして伝播することで、ゾーン間通信を回避します。#81323 (Ilya Golshtein).
  • オブジェクトストレージの読み取り操作を追跡するため、system.blob_storage_logRead イベントタイプを追加しました。これは新しい設定 enable_blob_storage_log_for_read_operations で制御されます。#96867 (Alexey Milovidov).
  • ユーザーは、新しい system.zookeeper_watches テーブルを使用して、clickhouse-server が発行した ZooKeeper のウォッチを確認できるようになりました。#99277 (Den Kalantaevskii).
  • すべてのテーブルをまたいで合算した、分散クエリに関与する分片数をカウントする Shards プロファイルイベントを追加しました。#99470 (Alexey Milovidov).
  • WASM UDF を DETERMINISTIC として宣言できるようになり、定数畳み込みの対象になります。#100005 (Vasily Chekalkin).
  • parallel_replicas_prefer_local_replica 設定を追加しました。無効にすると、並列レプリカはロードバランシングアルゴリズムのみに基づいて選択されるため、max_parallel_replicas = 1 のクエリであっても別のホストに送られる可能性があります。#100139 (Alexey Milovidov).
  • 送信 HTTP 接続の TCP ソケットバッファサイズを制御するための {disk,storage,http}_connections_rcvbuf および {disk,storage,http}_connections_sndbuf サーバー設定を追加しました。これにより、運用者はカーネルの自動調整を上書きし、接続ごとのメモリ使用量に上限を設定できます。#100478 (Sema Checherinda).
  • CREATE OR REPLACE TABLE と同じアトミックスワップのセマンティクスで CREATE OR REPLACE MATERIALIZED VIEW をサポートしました。内部テーブル、TO テーブル、POPULATEREFRESHON CLUSTER で動作します。#100539 (DQ).
  • S3 GET リクエストの接続ライフタイムと消費バイト数を観測するため、s3_read_request_duration_microseconds および s3_read_request_bytes ヒストグラムメトリクスを追加しました。これらは system.histogram_metrics と Prometheus エンドポイントで確認できます。#102058 (Sema Checherinda).
  • Keeper の snapshot 進捗追跡を基盤として、インクリメンタル読み取りをサポートする PaimonPaimonS3PaimonAzurePaimonHDFSPaimonLocal の table engine を追加しました。インクリメンタルモードでは、最後に commit 済みの snapshot 以降の新しい行のみを返します。特定 snapshot の delta 読み取りは paimon_target_snapshot_id で利用でき、クエリごとの snapshot 上限は max_consume_snapshots で設定できます。バックグラウンドのメタデータのリフレッシュは paimon_metadata_refresh_interval_sec で構成可能です。allow_experimental_paimon_storage_engine で制御されます。#102343 (XiaoBinMu).
  • 新しい Kafka table 設定 kafka_map_virtual_columns_on_write を追加しました。有効にすると、Kafka table スキーマ内の _key_timestamp_headers.name_headers.value という名前のカラムは、INSERT 時に対応する Kafka メッセージの key、timestamp、headers として生成され、メッセージペイロードからは除外されます。#103243 (Alexey Milovidov).
  • リフレッシュ可能なマテリアライズドビュー向けに、SYSTEM PAUSE VIEW [db.]name および SYSTEM PAUSE VIEWS クエリを追加しました。SYSTEM STOP VIEW とは異なり、SYSTEM PAUSE VIEW は現在実行中のリフレッシュを中断しません。進行中のリフレッシュは完了まで継続され、以降のリフレッシュのみが抑止されます。解除には SYSTEM START VIEW または SYSTEM START VIEWS を使用し、これらは停止状態と一時停止状態の両方を一律にクリアするようになりました。#103252 (Nikita Mikhaylov).
  • 文字列内で N 番目に一致した正規表現のバイト位置を返す関数 regexpPosition (PostgreSQL 互換の別名 regexpInstr および regexp_instr を含む) を追加しました。開始オフセット、一致後の位置を返すモード、正規表現フラグ、キャプチャグループの選択をサポートします。#104172 (Abhinav Agarwal).
  • 素数判定のための新しい関数 isPrimeisProbablePrime を追加しました。isPrimeUInt64 までの符号なし整数に対して正確な結果を返します。isProbablePrimeUInt128UInt256 にも対応しており、これらのより広い型では、0 は確実に合成数、1 はおそらく素数であることを意味します。isProbablePrime の省略可能な第 2 引数 rounds は信頼度を制御し (上限は 256) 、デフォルトの 25 ラウンドでは、ランダムな合成数に対する偽陽性率は 10^-15 未満に抑えられます。また、isProbablePrime はキャンセル可能です。#104234 (Nihal Z. Miaji). #104639 (Alexey Milovidov). #104806 (Nihal Z. Miaji).
  • clear/clear は、誤ってクエリとして実行されるのではなく、clickhouse のコマンドラインツールでターミナルをクリアするようになりました。#104318 (Tyler Hannan).
  • SELECT クエリで、file テーブル関数が Array(String) のパスを受け取れるようになりました。#104442 (Yue).
  • system.functions テーブルに deterministic および higher_order カラムを追加しました。#104479 (Pedro Ferreira).
  • 非 SegWit アドレスのエンコード (例: Cosmos SDK、Injective、Osmosis) 向けに、bech32Encode に省略可能なエンコーディングのバリアントパラメーター (bech32 / bech32m) を、bech32Decode に生デコードモードを追加しました。#98986 (Yash ).
  • これまで入力専用だった AvroConfluent フォーマットで、データを書き込めるようになりました。これにより、たとえば Kafka への書き込み時に、Confluent スキーマレジストリ形式の Avro メッセージを ClickHouse から直接生成できます。スキーマは自動的にスキーマレジストリへ登録されます。subject 名を指定するには、新しい output_format_avro_confluent_subject 設定を使用してください。#101935 (János Benjamin Antal).
  • JSON 文字列を人が読みやすい形式に整形する prettyPrintJSON 関数を追加しました。これまで整形にクライアント側で追加の手順が必要だったダッシュボードやレポートで便利です。#62523 をクローズします。#102594 (Dmitry Prokofyev).
  • PostgreSQL / SQL 標準との互換性のため、groupConcat の大文字と小文字を区別しないエイリアスとして STRING_AGG を追加しました。#105125 (Alexey Milovidov).
  • 特定のサブクエリに SETTINGS use_query_cache = true を指定することで、外側のクエリ全体をキャッシュせずに、各サブクエリの結果を個別にキャッシュできるようになりました。新しい設定 query_cache_for_subqueries = true を使用すると、use_query_cache をすべてのサブクエリに一括で伝播できます。注: 外側のクエリに指定した use_query_cache は、サブクエリに自動伝播されなくなりました。#99804 (Vincent Voyer).
  • Web UI (play.html) のクエリエディタに、clickhouse-client の配色を参考にしたレキサーベースのシンタックスハイライトを追加しました。#105105 (Alexey Milovidov).

実験的機能

  • WebSocket 経由でブラウザ内に対話型の clickhouse-client セッションを提供する、実験的なウェブターミナル インターフェイスを /webterminal に追加しました。デフォルトでは無効で、allow_experimental_webterminal サーバー設定で有効にできます。 こちら で確認できます。 #100277 (Alexey Milovidov). #105191 (Alexey Milovidov). #105059 (Alexey Milovidov).
  • Kafka2 エンジン (実験的機能で、Keeper ベースのオフセット保存を使用) が、直接 SELECT クエリと kafka_commit_on_select 設定をサポートするようになりました。 #100276 (Alexey Milovidov).
  • WASM UDFs は、より多くの数値型の型強制に対応しました。たとえば、より小さい整数型からより広い整数型へ (Int8 から UInt64 など) 、および任意の整数型から浮動小数点型へ (Int32 から Float32 など) 変換できます。 #100435 (Vasily Chekalkin).
  • DELETE FROM system.webassembly_modules クエリで LIKE 関数をサポートしました。 #104397 (Vladimir Cherkasov).
  • Iceberg で Geo 型をサポートしました。 #103113 (Konstantin Vedernikov).
  • ArrowFlight SQL server にプリペアドステートメント機能を追加しました。 #103047 (Yakov Olkhovskiy).
  • KQL パーサー (Kusto 言語サポート用) の堅牢性を改善しました。KQL パーサーの各段階でパーサーの深さとバックトラックのカウンターを維持することで、複雑な KQL クエリでもパーサーの制限を一貫して追跡できるようになりました。 #103528 (Yakov Olkhovskiy).

パフォーマンス改善

  • file table function または File table engine 経由でローカルの Parquet files を読み込む際に、Parquet フッターのメタデータキャッシュを再利用するようにしました。従来は、このメタデータキャッシュは object storage の backend でしか参照されていませんでした。#104260 (Alexey Milovidov).
  • ソートキーが join によって保持される側のカラムのみを参照している場合、LEFT/RIGHT joins に対して ORDER BY ... LIMIT n を push down し、join 前に保持側の入力が生成する必要のある行数を制限します。これは新しい設定 query_plan_top_k_through_join (デフォルトで有効) で制御されます。#104268 (Alexey Milovidov).
  • ORDER BY ... LIMIT N クエリのパフォーマンスを向上させるため、use_top_k_dynamic_filtering および use_skip_indexes_for_top_k 設定をデフォルトで有効にしました。#99537 (Alexey Milovidov). また、use_top_k_dynamic_filtering はデフォルトで固定長のソートカラムに限定されるようになり、行ごとのしきい値比較コストが I/O 削減の効果を上回る ORDER BY <var-length-column> LIMIT N クエリでの性能低下を回避します。従来の動作は、新しい use_top_k_dynamic_filtering_for_variable_length_types 設定で利用できます。#104216 (Alexey Milovidov).
  • jemalloc の oversize-arena 機能を使用してページフォールトを削減します。#103958 (Nikita Taranov).
  • Peak memory usage を抑えるため、UNION ALL で同時にアクティブになる streams を制限します。#100176 (Alexey Milovidov).
  • ユーザー空間 page cache をわずかに最適化しました。#100300 (Alexey Milovidov). これにより、ユーザー空間 page cache は常に OS page cache より優れたものになりました。
  • ユーザー空間 page cache (use_page_cache_for_object_storage = 1) 経由で object storage をコールド read する場合の速度が大幅に向上しました。これは、連続する cache miss が page_cache_block_size block ごとに 1 件の HTTP request になるのではなく、1 件の HTTP request にまとめられるようになったためです。#104230 (Alexey Milovidov).
  • 型変換や function の適用を伴う索引解析を高速化しました。#55653 をクローズします。#100366 (Alexey Milovidov).
  • 非常に多くの基になるテーブルを持つ Merge tables に対する大規模クエリを高速化しました。#32465 をクローズします。#100369 (Alexey Milovidov).
  • 設定のフィールド型から vtable を削除し、Settings のコピーサイズを約 28 分の 1 に削減するとともに、すべての設定型で typed-array layout による cache locality の改善を実現しました。#102269 (Raúl Marín).
  • サーバーの空きメモリが少ない場合にクエリの並列度を自動的に下げるため、max_threads_min_free_memory_per_thread および max_insert_threads_min_free_memory_per_thread 設定を追加しました。#100383 (Alexey Milovidov).
  • 低メモリシステム (< 4 GiB) での memory usage を削減しました。#100389 (Alexey Milovidov).
  • OptimizeTrivialGroupByLimitPass を追加しました。単純な SELECT ... FROM t GROUP BY k LIMIT n クエリ (HAVINGORDER BY、window functions なし) では、アナライザが max_rows_to_group_by = n + offsetgroup_by_overflow_mode = 'any' を設定するようになり、入力全体をグループ化する代わりに、n 個の異なるキーが生成された時点で aggregation を停止します。これは新しい設定 optimize_trivial_group_by_limit_query で制御されます (デフォルトで有効) 。#104473 (Amos Bird) (Alexey Milovidov).
  • _part_offset および _block_number の仮想カラムに対して、granule レベルの暗黙的な min-max 索引を追加しました。projections にも対応しています。これにより、仮想カラムの predicates に基づく granules の高速な pruning が可能になります。#103952 (Mikhail Artemenko). #104746 (Mikhail Artemenko). #105137 (Mikhail Artemenko).
  • aggregation methods の prealloc_serialized ファミリーについて、batch-serialization パス中に各行の hash を事前計算し、それを使って (a) emplaceKey/findKey での再ハッシュを省き、(b) 次の行の bucket を software-prefetch するようにしました。これにより、ハッシュテーブルの cache-miss latency を隠蔽し、複数キーの string/serialized aggregation を高速化します。#104475 (Amos Bird) (Alexey Milovidov).
  • Iceberg table 向けの query condition cache。#102115 (Konstantin Vedernikov).
  • cramersVcramersVBiasCorrectedtheilsUcontingency を window functions とともに使用する場合を最適化しました。#83521 をクローズします。#93384 (Nihal Z. Miaji).
  • tupleElement(dictGet('dict', ('a', 'b', 'c'), key), N)dictGet('dict', 'a', key) に書き換えるクエリ最適化を追加し、不要な Dictionary 属性の fetch を回避します。これは optimize_dictget_tuple_element 設定で制御されます (デフォルトで有効) 。#100186 (Alexey Milovidov).
  • ソートを伴う distributed queries について、イニシエーター上のソート処理で buffering を有効にしました。#100661 (Nikita Taranov).
  • partial_merge JOIN のパフォーマンス改善。#100945 (Artem Zuikov).
  • partial_merge JOIN における memory の過剰割り当てをわずかに削減しました。#100963 (Artem Zuikov).
  • memory-tracker 階層全体を走査する代わりに sampling 設定を cache することで、割り当て/deallocations を最適化しました。#101267 (Azat Khuzhin).
  • 内部追跡用コンテナーを事前割り当てすることで、S3 multipart upload 時のメモリ割り当て overhead を削減しました。#101799 (Gagan Dhakrey).
  • 大規模な hash table に対するメモリアクセス latency を低減するため、hash join の probe phase に software prefetch を追加しました。設定 enable_software_prefetch_in_join で制御されます。#102444 (Xiaozhe Yu).
  • MemoryTracker のレイアウトを最適化し、パフォーマンスを約 25% 向上させました。#103464 (Azat Khuzhin).
  • coalesce(a, b, ...) <op> const および ifNull(a, b) <op> const の predicate を索引解析の前に Rewrite し、各 argument に対するカラムごとの主キーおよびスキップ索引で granule を刈り込めるようにしました。これは新しい設定 allow_key_condition_coalesce_rewrite で制御されます (既定で有効) 。#103468 (Manuel).
  • エスケープされたスラッシュの処理を最適化することで、大きな JSON メタデータファイルを持つ Iceberg カタログの読み取り時のクエリパフォーマンスを大幅に改善しました。#103998 (Mohaidoss).
  • cache が無効な場合の非圧縮キャッシュのオーバーヘッドを回避するようにしました (server setting index_uncompressed_cache_size = 0。これは既定値です) 。#104063 (Michael Kolupaev).
  • 非選択的な WHERE filter と組み合わせたときに、小さな limit を持つ ORDER BY ... LIMIT クエリで過剰な granule を読み込んでしまう問題を修正しました。従来は、順序付き読み取りの上に filter があると、マーク範囲ごとのタスク分割が無効になり、その結果 pipeline が granule 間でキャンセルできず、各 stream ごとに part 全体を読み込んでいました。#104112 (Vladimir Cherkasov).
  • JOIN の左右を並べ替えた後に、hash table サイズの cache 再利用が行われていなかった問題を修正しました。#104131 (Nikita Taranov).
  • fsync_after_insert が有効な場合、part file の fsync が I/O スレッドプールを使って並列に実行されるようになり、列数の多いテーブルでの insert 完了処理が高速化されました。ClickBench の hits のフルロードは約 22% 高速化されています。#104137 (Alexey Milovidov).
  • AArch64 で NEON を使って find_first_symbolsfind_first_not_symbolsfind_last_symbols_or_nullfind_last_not_symbols_or_nullsplitInto をベクトル化しました。従来、これらの helpers は x86 (SSE2 / SSE4.2) でのみ SIMD パスを持ち、ARM では scalar ループにフォールバックしていました。これにより、ClickBench の hits dataset では TSV のパースが約 2 倍、URL 関数と splitByChar が約 1.3 倍高速化されます。一方、非常に高密度な JSON のパース (16 バイト未満間隔の field cadence) は、既存の SSE2 のトレードオフと同様にわずかに低下します。#104228 (Alexey Milovidov).
  • 単純な ALIAS カラム (例: some_alias ALIAS msome_alias['key']) を介したデータ読み取りが、基になるカラムを直接参照する場合と同じ subcolumn ごとの読み取りパスを通るようになり、MapArrayTupleNullable のエイリアス化されたカラムで大きな I/O 削減効果が復元されました。#104245 (Raúl Marín).
  • クエリごとの AsyncReadCounters を lockless にすることで、非同期 remote-FS 読み取りパスでのロック競合を軽減しました。#104374 (Nikita Mikhaylov).
  • projections の順序付きスキャンに対するクエリプランをわずかに改善しました。#103723 (Mikhail Artemenko).
  • optimizeUseNormalProjections を拡張し、何も filter されていない場合でも、projection の sorting key によってクエリプランからソート処理を除去できる特定のケースに対応しました。#104680 (Mikhail Artemenko).
  • 型付き JSON パスで、json.path[] のシンタックスシュガーと明示的な型ヒントが正しく機能するようにしました。#99179 (Pavel Kruglov).
  • json.path[N].nested.path (tupleElement(tupleElement(json.path[N], 'nested'), 'path') に展開される) を json.path[].nested.path[N] に最適化し、読み取るデータ量を大幅に削減しました。#99802 (Pavel Kruglov).
  • system.parts における SHOW TABLES のアクセスチェックを最適化し、データベースレベルの grant チェックをテーブルごとのループの外に移しました。#100860 (Shaohua Wang).
  • system.tablesSELECT name / SELECT database, name 高速パスにある、テーブルごとの冗長な SHOW TABLES アクセスチェックを削除しました。#100881 (Shaohua Wang).
  • macOS で JIT コンパイルを有効にしました。#100947 (Alexey Milovidov).
  • 行ポリシーがソートキーのキーカラムのみに依存し、かつ決定論的である場合は、FINAL 後に行ポリシーを遅延させないようにしました。また、その場合に行ポリシーによって強制されていた対応する PREWHERE の遅延も省略するようにしました。#102884 (Yarik Briukhovetskyi).
  • テキスト索引のフィルタ述語として hasAnyhasAll のサポートを追加しました。#103266 (Anton Popov).
  • 長寿命の MergeTree ヒープ状態 (パーツごとおよびテーブルごとのメタデータ) を専用の jemalloc アリーナに割り当て、jemalloc.mergetree_arena.* 非同期メトリクスとして公開するようにしました。これにより、定常状態でのデフォルトアリーナの断片化を減らし、パーツ単位で残存するオブジェクトが本来減衰可能なページを保持し続けるのを防ぎます。#104136 (Raúl Marín).
  • 多数のリクエストを単一セッションでパイプライン化した高負荷時に、ZooKeeper クライアントのタイムアウト処理を改善しました。ZooKeeper クライアントは進捗ベースのタイムアウトを使用するようになり、session_timeout_ms 以内にサーバーから何らかのデータを受信している限り、待機時間が延長されます。各リクエストには引き続き 3 * session_timeout_ms の上限が適用され、呼び出し側のレイテンシを抑えます。#100466 をクローズしました。#104351 (Antonio Andelic).
  • イベントごとのトレースフラグを別配列に移し、必要になるまで割り当てないようにすることで、ProfileEvents トレーシングのオーバーヘッドを削減しました。#105030 (Azat Khuzhin).
  • ColumnDecimalcompareTrackAt を追加し、Decimal カラムの比較性能を改善しました。#105110 (Artem Zuikov).
  • 複数の入力を並列にハッシュ化する MD5 (AVX2 / AVX512) の SIMD 実装を追加し、スループットを改善しました。#105161 (Joanna Hulboj).

改善

  • すべての ClickHouse アプリケーションでヘルプ出力を改善しました。--help は常に終了コード 0 を返し、stdout に出力されるようになり、最上位の clickhouse --help ではすべてのサブコマンドが一覧表示されます。さらに、clickhouse start / restart--no-sudo オプション (Docker で便利) を追加し、clickhouse help サブコマンドも追加しました。@qoega による #58244 の続きです。#98148 (Alexey Milovidov)。
  • input_format_column_name_matching_mode の既定値が match_case から auto に変更されました。入力カラム名をテーブルのスキーマと照合する入力フォーマット (JSONEachRow, CSVWithNames, JSONColumns, BSONEachRow, RowBinaryWithNames など) は、まず大文字小文字を区別して照合し、一致しない場合は大文字小文字を区別しない照合にフォールバックするようになりました。従来の厳密な動作は compatibility で維持されます。#104320 (Alexey Milovidov)。
  • PostgreSQL/SQL 標準との互換性のため、STDDEVstddevSamp の大文字小文字を区別しない別名として追加しました。#105120 (Alexey Milovidov)。
  • PostgreSQL 互換性のため、array_to_stringarrayStringConcat の大文字小文字を区別しない別名として追加しました。#105121 (Alexey Milovidov)。
  • PostgreSQL 互換性のため、unnestarrayJoin の大文字小文字を区別しない別名として追加しました (関数呼び出し形式) 。#105124 (Alexey Milovidov)。
  • clickhouse-client のプログレスバーに、RAM の横へ一時データのディスク使用量 (たとえば外部ソート、aggregation、または JOIN 用) が表示されるようになり、distributed queries ではホストごとの内訳も確認できるようになりました。#105190 (Alexey Milovidov)。
  • system.predicate_statistics_log を追加しました。これは、predicate filter の selectivity と、クエリごとの MergeTree の index-granule pruning を記録する新しいサンプリングログです。既定では無効で、predicate_statistics_sample_rate server setting で有効化できます。自動的な索引および projection の推奨に必要です。#98727 (Yarik Briukhovetskyi)。
  • skip_unavailable_shards が有効な場合、テーブルが存在しないローカル分片をスキップできるようにしました。#100141 (Alexey Milovidov)。
  • Linux の mdraid アレイが再同期中、または劣化状態にある場合に、起動時警告 (system.warnings に表示) を出すようにしました。いずれもディスク I/O 性能に影響する可能性があり、ディスク障害の兆候でもあるためです。#100941 (Alexey Milovidov)。
  • WASM UDFs が system.functions に正しい origin (WasmUserDefined) で表示され、syntaxargumentsreturned_value カラムに ClickHouse の型メタデータから値が設定されるようになりました。従来は表示されないか、誤った origin の重複項目として表示されていました。#101053 (Vasily Chekalkin)。
  • generate_series table function が負の step 値をサポートし、降順の数列を生成できるようになりました。たとえば SELECT * FROM generate_series(99, 0, -1) です。#101056 (Alexey Milovidov)。
  • 必要に応じてこれらの関数が強い Context を保持するようにし、DEFAULT/MATERIALIZED 式や table engine の設定などの遅延実行パスで使用した際に、一部の関数 (dotProductformatRowstructureToCapnProtoSchema/structureToProtobufSchema、user-defined functions) で発生していた Context has expired 例外を修正しました。#101109 (Alexey Milovidov).
  • ゼロ制限で作成された優先度において、誤って Cache limits violated 論理エラーが発生する問題を修正しました (たとえば、enable_filesystem_query_cache_limit が有効な場合に使用されるクエリ単位のファイルシステムキャッシュ優先度) 。#101428 (Alexey Milovidov).
  • s3express endpoints の Region を自動検出するようにしました。#101520 (Pradeep Chhetri).
  • Iceberg への書き込みで、data files のフィールド ID をサポートしました。#102322 をクローズしました。#102362 (Konstantin Vedernikov).
  • web UI (play.html) の左パネルが独立してスクロールするようになり、ページをスクロールしても表示されたままになり、table をクリックするとクエリ領域までスクロールするようになりました。#102498 (Alexey Milovidov).
  • 左パネルの ClickHouse ロゴを Ctrl/Cmd/Shift+クリックまたは中クリックすると、Play UI を新しい tab で開けるようにしました。#102501 (Alexey Milovidov).
  • すべての table を対象に、projection 主キーおよび projection index granularity が使用するメモリを追跡するための新しいメトリクスを追加しました。#102587 (Narasimha Pakeer).
  • max_network_bandwidth_for_usermax_network_bandwidth_for_all_users を、リモートファイルシステムの reads/writes にも適用するようにしました。#103080 (Azat Khuzhin).
  • グローバルな状態ではなく、スナップショットされた table の状態に基づいて判断するようにすることで、リフレッシュ可能なマテリアライズドビュー が継続的に refresh される場合の backups の耐障害性を向上させました。#103384 (Nikita Mikhaylov).
  • SELECT * FROM system.databases は、show_data_lake_catalogs_in_system_tables setting にかかわらず、data lake catalog database を常に一覧表示するようになりました。以前はデフォルトで非表示でしたが、常に表示していた SHOW DATABASES と整合していませんでした。#103444 (Alsu Giliazova).
  • code 内の server setting concurrent_threads_soft_limit_ratio_to_cores のデフォルト値を、同梱の config.xml の値 (2) に合わせました。これにより、同梱の config.xml を使用しない場合でも、デフォルトの max_min_fair concurrent threads scheduler は、初期状態で query processing threads をコア数の 2 倍までに制限します。#103446 (Alexey Milovidov).
  • getURLScheme で空入力を処理し、Lexer::nextTokenmax_query_size チェックで null ポインタ演算を回避し、空の haystack に対する UTF-8 subsequence evaluation をデコード前に短絡評価することで、パーサーおよび文字列関数のエッジケースにおける sanitizer の堅牢性を向上させました。#103489 (Yakov Olkhovskiy).
  • divide(0, x)intDiv(0, x) の単調性推論の正確性を改善しました。従来、これらの関数は無条件に単調と判定されていましたが、0 / x は 0 を含む任意の範囲では非単調です。これは 0 / 0 が未定義であるためです (divide では NaN/InfintDiv ではゼロ除算例外) 。この誤判定により、KeyCondition::applyMonotonicFunctionsChainToRangeleft > right となる範囲を生成し、主キーに対する IN / NOT IN 式でキーが divide(0, key) または intDiv(0, key) で包まれている場合、デバッグビルドで LOGICAL_ERROR Invalid binary search result in MergeTreeSetIndex が発生していました。リリースビルドには影響ありません。これは、このアサーションが #ifndef NDEBUG によって有効化されるためです。#103621 (Groene AI).
  • HTTPConnectionPool*TCP{Rcv,Snd}BufBytes_{p50,p75,p90,p95} 非同期メトリクスを、system.histogram_metrics 内のバケットベースのヒストグラム http_pool_tcp_buf_bytes (ラベルは groupdirection) に置き換えました。グループごとの合計非同期メトリクスは引き続き維持されます。#103704 (Sema Checherinda).
  • サーバー設定 {disk,storage,http}_connections_{rcvbuf,sndbuf} が、system.server_settings で再起動なしで変更可能として表示されるようになりました。これらの値は SYSTEM RELOAD CONFIG で更新できます。実行時に適用する仕組み自体は、すでに #100478 の時点で実装されていました。#103772 (Sema Checherinda).
  • flameGraph で解決済みシンボル (Array(String)) をサポートしました。#103816 (Azat Khuzhin).
  • CLI クライアントで、端末の色表示が括弧と干渉する環境向けに、設定で <rainbow_parentheses>false</rainbow_parentheses> を指定できるようになりました (同様に、clickhouse format でも --no_rainbow_parentheses が使えるようになりました) 。#103851 (Larry Snizek).
  • 失敗時に部分的な putNGram の挿入をロールバックし、失敗した検索パターンをフォールバック検索に切り替えることで、不整合な状態を回避し、MultiVolnitsky の UTF-8 大文字小文字を区別しない検索を修正しました。#103864 (Yakov Olkhovskiy).
  • glibc 互換 musl で、rseq TLS を介した sched_getcpu を実装しました。#104016 (Azat Khuzhin).
  • APPEND モードの Replicated なリフレッシャブルmaterialized view は、refresh 中に ZooKeeper への接続が一時的に失われても、2 回 refresh されなくなりました。#104051 (Michael Kolupaev).
  • 明示的なカラム一覧のない分散テーブルで、推論されたリモートテーブル構造に対して sharding key を検証できるようにしました。#104111 (Yue).
  • Azureabfss path での REST カタログの不具合を修正しました。#104120 (Konstantin Vedernikov).
  • Keeper S3 snapshot client で role_arn および role_session_name の認証設定が尊重されるようになり、snapshot のアップロードで STS AssumeRole ベースの認証を使用できるようになりました。#104140 (Alexey Milovidov).
  • MATERIALIZED CTE を使用するクエリ実行時に発生するメモリリークを修正しました。#104153 (Alexey Milovidov).
  • 大規模な非 ASCII データセットの処理時 (たとえばテキスト索引のビルド中) に、累積した出力バッファが 2 GiB を超える場合に発生していた lowerUTF8 / upperUTF8 の例外を修正しました。また、過度に長い単一の行は、明確なエラーを返して拒否するようにしました。#104229 (Shaohua Wang).
  • 一時的な I/O 障害が発生しても MergeTree のカラム統計情報の読み込みが堅牢に動作するようにし、影響を受けたパーツで統計ベースの最適化が恒久的に無効化されるのを防ぐようにしました。#104372 (zoomxi).
  • INSERT INTO ... SELECT FROM input(...) で、CREATE TEMPORARY TABLE の grant が不要になりました。#104470 (Alexey Milovidov).
  • 新しい MergeTree setting concurrent_part_removal_threshold_for_remote_disk (デフォルト 16) を追加しました。削除対象のパーツのうち少なくとも 1 つがリモートディスク上に保存されている場合は、concurrent_part_removal_threshold の代わりにこの設定が使用されます。従来のしきい値 100 では、各削除が個別のネットワーク往復を伴うにもかかわらず逐次実行されていたため、object storage バックエンド上の DROP TABLE やその他のパーツ削除操作が数十秒にわたって停止することがありました。この新しい設定により、リモートストレージでは並列削除パスにより早く入るようになり、ローカルディスクでの動作は変わりません。#104676 (Groene AI).
  • 新しい設定 defer_partition_pruning_after_final (デフォルト 1) により、26.3 で導入された、FINAL の下ではパーティション pruning をスキップする動作をオプトアウトできるようになりました。これを 0 に設定すると、26.3 より前のパーティション pruning が復元されます。これは、同一 PK の行がパーティションをまたがない event-log workload で大幅な高速化につながります。compatibility = '26.2' を指定すると、自動的に 0 になります。#104705 (Nikita Fomichev).
  • 範囲外の入力に対して intExp2 が誤った結果を返す問題を修正しました (JIT では shifts >= 64、両方のコードパスでは絶対値が INT_MAX を超える整数) 。#105054 (Raúl Marín).
  • clickhouse install および clickhouse git-import で、CLI オプションとパース済みの入力から構築されるシェル引数をクォートするようにし、空白やシェルのメタ文字を含む path、user/group 名、commit hash も正しく扱えるようにしました。#105232 (Raúl Marín).
  • Alias table engine は Experimental ではなくなり、allow_experimental_alias_table_engine 設定なしで利用できるようになりました。#103488 (Alexey Milovidov).
  • clickhouse-benchmark--queries-format オプションを追加し、デフォルトのタブエスケープ済み・1 行 1 クエリ形式の入力 (tsv) と、; で区切られた複数クエリのスクリプトとして標準入力をパースする形式 (script) を選べるようにしました。#99972 (Aleksandr Musorin).
  • 要素ごとの tuple 演算子 tuplePlustupleMinustupleMultiplytupleDividetupleModulotupleIntDivtupleIntDivOrZero が可変長引数に対応し、同じサイズの 2 つ以上の tuple を受け取れるようになりました。要素ごとに左畳み込みとして適用されます。以前は引数をちょうど 2 つしか受け付けませんでした。#104659 (Aruj Bansal).
  • /processors-profile に、system.query_logsystem.processors_profile_log をもとに、過去の任意の SELECT クエリのパイプラインをヒートマップとして可視化する新しい組み込み web UI を追加しました。各プロセッサは elapsed_us に応じて色分けされ、ホバーするとプロセッサごとの統計情報 (行数、バイト数、待機時間) が表示されます。#104614 (Nikita Mikhaylov).
  • Setting query_plan_use_logical_join_step (およびそのエイリアス query_plan_use_new_logical_join_step) は廃止され、現在は効果がありません。logical join step は常に使用されます。#104017 (Vladimir Cherkasov).
  • play.html と他の組み込み web ページ (dashboard.html, jemalloc.html, merges.html, binary.html, webterminal.html) の user 入力欄は、文字列 default が事前入力されなくなりました。代わりに user のプレースホルダーが表示され、デフォルトで空になります。空のままにすると、ページは user= URL パラメータを送信せず (WebTerminal の認証 JSON でも user フィールドは省略されます) 、server は通常どおり default ユーザーへのフォールバックを適用します。これにより、他の経路 (X-ClickHouse-User、HTTP Basic、ハンドラー単位の <handler><user> 設定) で指定された HTTP 認証情報が上書きされることもなくなりました。#105254 (Alexey Milovidov).
  • ORC reader: オフセットベースの読み取り (readBigAt) を use_prefetch から切り離し、HDFS 上の EC エンコードされたデータを use_prefetch = false の場合でも (たとえば Gluten によって) 正しく読み取れるようにしました。#103348 (zhanglistar).
  • play.html から CSVWithNames フォーマットでダウンロードしたファイルで、.csv ファイル拡張子が使われるようになりました。#103737 (JackFielding).
  • BigLake カタログの入力検証を強化しました。#105117 (Konstantin Vedernikov).

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • 式が括弧で囲まれていたかどうかを保持することで、フォーマットの不整合を修正しました。#92340 (Alexey Milovidov).
  • Decimal 型と Float 型の比較が正しく行われない問題を修正しました。#94293 (zoomxi).
  • 分散クエリで位置引数を使用できるようにしました。#94359 (simonmichal).
  • 同名の materialized view を削除して再作成した際に DatabaseCatalog::updateDependencies で発生していたアサーション失敗を修正しました。また、参照依存関係が空の場合に RENAME TABLE または EXCHANGE TABLES の実行中に view の依存関係が黙って失われる問題も修正しました。#98779 (Alexey Milovidov).
  • 既存の database と同じ UUID を使って ON CLUSTER 経由で table を作成した際に発生していた server の abort (DatabaseCatalog::getTableImpl でのアサーション失敗) を修正しました。#98861 (xiaohuanlin).
  • データ読み取り時 (setting use_skip_indexes_on_data_read が有効な場合) のスキップ索引の使用と、論理更新で作成された既存の patch parts の扱いを修正しました。#99543 (Alexey Milovidov).
  • クエリオプティマイザーによって IN (subquery) を含む filter が PREWHERE に移動されたときに発生する “Not-ready Set” 例外を修正しました。#100375 (Alexey Milovidov).
  • 1 つの ALTER TABLE ステートメント内で ADD COLUMNRENAME COLUMN を組み合わせた際に発生する “Cannot find column” エラーを修正しました。#100387 (Alexey Milovidov).
  • DETACH/ATTACH または server の再起動後に、UNIONINTERSECT/EXCEPT 演算子が混在する view が誤った結果を返す問題を修正しました。#100390 (Alexey Milovidov).
  • IN clause に correlated subquery が現れた場合に、AST fuzzer によるストレステスト中に発生しうる “Trying to execute PLACEHOLDER action” 例外を修正しました。#100398 (Alexey Milovidov).
  • yearmonthday 変換でパーティション分割された Date カラムを持つ Iceberg table への insert 時に発生する論理エラー例外を修正しました。#100404 (Alexey Milovidov).
  • ALTER TABLE MODIFY COLUMN でカラム型が変更された後に、互換性のないデータに対してスキップ索引が使用される問題を修正しました。この問題により、sanitizer builds での server クラッシュや誤ったクエリ結果が発生する可能性がありました。#100526 (Alexey Milovidov).
  • paimonClusterpaimonS3ClusterpaimonAzureCluster、および deltaLakeS3 table functions で、query_log に認証情報が漏えいする問題を修正しました。#100529 (JIaQi Tang).
  • Kafka エンジン table に対する DROP TABLE が、rd_kafka_consumer_close でのデッドロックにより無期限にハングする可能性がある問題を修正しました。#100604 (Alexey Milovidov).
  • ハードコードされていた source_table_engines リストを、StorageFactoryDatabaseFactory を使った runtime ルックアップに置き換えました。あわせて、ソースエンジン (PostgreSQL、MySQL、S3 など) を使用する CREATE DATABASE で、CREATE TABLE と同じ source grants が必要になるよう、source_access_typeDatabaseFactory::EngineFeatures に追加しました。これにより、table_engines_require_grant=false のときに GRANT TABLE ENGINE ON * が失敗する問題を修正しました。#71544 をクローズしました。#100746 (pufit).
  • ALIAS カラムに、関数呼び出し内にネストされた相関サブクエリ (例: ALIAS toString(intDivOrZero(x, (SELECT ...)))) を含むテーブルの読み取り時に発生する server crash を修正しました。CREATE TABLEALTER TABLE は現在、DEFAULT / ALIAS / MATERIALIZED カラム式内の任意の深さにあるサブクエリを、THERE_IS_NO_DEFAULT_VALUE で拒否します。以前は浅い検証のためネストされたサブクエリが通ってしまい、相関ありのケースでは読み取り時に crash が発生し、相関なしのネストされたケースでは一見動作しているように見えても、予期しない挙動につながる可能性がありました。現在はどちらも DDL 時に拒否されます。#100753 (Groene AI).
  • optimize_substitute_columnsconvert_query_to_cnf settings が有効な場合に、CONSTRAINT ... ASSUME 定義を持つテーブルに対して相関サブクエリを含むクエリを使用すると発生し得た server crash (Logical error: Bad cast from type DB::FunctionNode to DB::ColumnNode) を修正しました。#100756 (Groene AI).
  • JSON column に行を insert した際、その行によって互換性のない値を持つ型付きフィールドと並んで新しい動的フィールドが導入され、その後そのカラムが GROUP BY キーとして使用されると発生し得た例外を修正しました。#100758 (Jimmy Aguilar Mena).
  • DiskObjectStorageTransaction パス (s3_with_keeper disks で使われ、use_fake_transaction=false の場合には明示的にも使用) を経由する S3 / object storage への書き込みで、workload I/O scheduling が暗黙のうちにバイパスされていた問題を修正しました。以前は、そのようなディスク上の MergeTree テーブルへの INSERT 書き込みで、トランザクション書き込みパスの WriteSettings に resource link が注入されていなかったため、CREATE RESOURCE / CREATE WORKLOAD による throttling が無視されていました。#100777 (JIaQi Tang).
  • ProtobufProtobufList の間で共有される schema-cache の競合を修正しました。最初に FORMAT Protobuf としてメッセージを読み取り、その後 FORMAT ProtobufList として読み取ると、ProtobufList が cache 済みスキーマを envelope 形式に強制していたため、失敗することがありました。現在は、envelope スキーマが利用できない場合、ProtobufList は cache 済みのメッセージ型にフォールバックします。#100849 (Callum Cooper).
  • std::exception ABI の不一致による Rust CXX bridge の heap-buffer-overflow を修正しました。#100931 (Azat Khuzhin).
  • FunctionVariantAdaptor は、すべての Variant の代替型が関数と非互換な場合、黙って Nullable(Nothing) を返すのではなく、ILLEGAL_TYPE_OF_ARGUMENT を throw するようになりました。以前は、どの代替型も互換性がない WHERE function(variant_col) predicate は、エラーなしで 0 行を返していましたが、同等の SELECT コンテキストではすでに正しく throw されていました。#100939 (Vasily Chekalkin).
  • データベースにビューが含まれていても、TRUNCATE ALL TABLES は失敗しなくなりました。#100943 (Alexey Milovidov).
  • optimize_rewrite_array_exists_to_has の最適化を修正し、型互換性のないケース (例: Date と String) を正しく処理できるようにしたうえで、デフォルトで再有効化しました。 #100944 (Alexey Milovidov).
  • S3 設定の優先順位を修正し、storage_configuration のディスク設定がグローバルな <s3> セクションより優先され、さらにユーザー/プロファイル/クエリレベルの設定がその両方より優先されるようにしました。 #100975 (Alexey Milovidov).
  • BFloat16、Float32、Float64 のカラムで、スパースなシリアライゼーションにより負のゼロ (-0.0) の符号が失われる問題を修正しました。 #100983 (Takumi Hara).
  • WKT エンコードされた GeoParquet および Arrow ファイルの読み取り時に使用される WKT ジオメトリパーサーの 2 つのバグを修正しました。MULTILINESTRING ジオメトリが誤って Polygon として解析されていた問題 (型付きカラムでは例外を引き起こし、混在した Geometry カラムではデータ破損が黙って発生していました) と、型キーワードのない不正な WKT 文字列が、明確なエラーではなく未定義動作をトリガーしていた問題です。 #100997 (Vasily Chekalkin).
  • 単一の分片を持つ分散テーブル上の grouping/GROUPING SETS クエリで、“Method executeImpl is not supported for ‘grouping’ function” というエラーにより失敗していた問題を修正しました。 #101030 (Alexey Milovidov).
  • 同じテーブル式が複数回処理された際に planner で発生することがあった LOGICAL_ERROR “Column identifier is already registered” を修正しました。 #101048 (Alexey Milovidov).
  • additional_result_filter 設定を UNION または EXCEPT クエリと併用した際に発生していた、LOGICAL_ERROR 例外 “Column identifier is already registered” を修正しました。 #101051 (Alexey Milovidov).
  • GROUPING SETS、ROLLUP、または CUBE とともに group_by_use_nulls=1 を使用し、さらに集約関数と * APPLY を併用した際に発生していたサーバークラッシュ (Logical error: Bad cast from ColumnVector to ColumnNullable) を修正しました。 #101062 (Groene AI).
  • input_format_csv_skip_first_lines または input_format_tsv_skip_first_lines がファイル内の行数を超えた場合に発生する無限ループを修正しました。 #101111 (Alexey Milovidov).
  • 遅延マテリアライゼーションの最適化における範囲外アクセスを修正しました。これにより、デバッグビルドで例外が発生する可能性がありました。 #101144 (Alexey Milovidov).
  • 再帰 CTE における型推論を修正しました。非再帰側と再帰側の UNION ALL 全体で、カラム型は収束するまで getLeastSupertype によって反復的に拡張されるようになり、x + 1 のような式で整数オーバーフローが発生するのを防ぎます。 #101155 (Alexey Milovidov).
  • MergeTree の圧縮ブロックサイズ設定 (max_compress_block_size、min_compress_block_size、marks_compress_block_size、primary_key_compress_block_size) の上限を 256 MiB に制限し、極端な値が CREATE TABLE SETTINGS で設定された際のサーバークラッシュを防ぐようにしました。 #101159 (Groene AI).
  • ROW POLICY が USING 句でスカラサブクエリ (例: USING (SELECT 1)) を使用している場合に、QueryAnalyzer::resolve() で発生する LOGICAL_ERROR によるクラッシュを修正しました。#100695 をクローズしました。#101263 (Groene AI).
  • ストリームの割り当てに失敗した際に MergeTreeDataPartWriterCompact::cancel で発生する未定義動作を修正しました。#101292 (Alexey Milovidov).
  • ALTER ステートメントでの代入時にタイムゾーンが含まれないことがある問題を修正しました。#101328 をクローズしました。関連: https://github.com/ClickHouse/ClickHouse/pull/100647. #101403 (Yarik Briukhovetskyi).
  • SELECT パイプラインが複数のストリームを生成する場合に、ORDER BY ALL を含む INSERT SELECT クエリで発生するサーバークラッシュ (LOGICAL_ERROR) を修正しました。#101443 (Groene AI).
  • join の並べ替えによって、INNER JOIN フィルター (outer join の保持側のみを参照するもの) が outer join の ON 句に押し込まれ、誤ったクエリ結果になる問題を修正しました。#101504 (Vladimir Cherkasov).
  • arrayJoin を含む実行プランでは遅延マテリアライゼーションを適用しないようにし、limit が守られなくなる可能性がある問題を修正しました。#101608 をクローズしました。#101644 (Vladimir Cherkasov).
  • mergeFilterIntoJoinCondition 最適化によって、型が一致しない WHERE の等価条件が暗黙に破棄され、不正な JOIN クエリ結果になる問題を修正しました。#101652 (Xiaozhe Yu).
  • 構文エラー/パースエラーに対して error テストヒントが機能しない問題を修正しました。従来は、不正なクエリに対する -- { error SYNTAX_ERROR } がクライアント側のパースエラーに一致せず、“Expected server error” で失敗していました。#101675 (Groene AI).
  • INTO OUTFILE ... TRUNCATE が実際には atomic なリネームを使用していなかった問題を修正しました。書き込みは一時ファイルではなく元のファイルに直接行われていたため、クエリ失敗時に元の内容が失われていました。現在は一時ファイルにデータを書き込み、成功時にのみリネームするようになりました。#101884 (Pablo Marcos).
  • スキーマに varchar(n) または char(n) のカラム型が含まれる Delta Lake テーブルの読み取り時に発生していた例外 Unsupported DeltaLake type: varchar(n) を修正しました。これらの型は、Delta Lake プロトコルが Parquet では単なるバイト配列として保存する仕様に合わせて、String にマッピングされるようになりました。#101973 (Flavio Malavazi).
  • schema_inference_mode=union と異種の Parquet スキーマを使用して S3 から tar アーカイブを読み取る際に、データが静かに失われる問題を修正しました。Parquet メタデータキャッシュが、アーカイブ内の後続ファイルすべてに対して最初のファイルのメタデータを誤って再利用していました。#101990 (Ahaan Limaye).
  • 同じサーバー lifetime 内でそのテーブルに対する SELECT または INSERT がそれまで一度も実行されていない場合に、Iceberg テーブルで ALTER TABLE UPDATE/DELETE を実行すると発生するサーバークラッシュ (LOGICAL_ERROR) を修正しました。#102113 (Alexey Milovidov).
  • インメモリデータベース上のテーブル (例: 一時テーブル) に対して ALTER クエリを実行した際に発生する可能性があるクラッシュを修正しました。 #102360 (Den Kalantaevskii).
  • 同じログソースに対する後方互換の READ/WRITE grants をフォーマットする際に、formatQueryGRANT FILE ON *.*, FILE ON *.* TO x のような重複した grants を生成し、本来の GRANT FILE ON *.* TO x にならない問題を修正しました。 #102411 (Groene AI).
  • max_streams_to_max_threads_ratio が 1 より大きい場合に、read-in-order クエリ後の aggregation で並列度が失われる問題を修正しました。 #102467 (Alexey Milovidov).
  • Buffer テーブルエンジンからサブカラム (Nullable の .null、Array の .size0、Tuple の要素、map の keys/values など) を選択した際に発生するクラッシュ (LOGICAL_ERROR: Unknown virtual column) を修正しました。 #102470 (Groene AI).
  • join_use_nulls を伴う LEFT/RIGHT JOIN が、3 テーブル以上を含む他の joins と組み合わされた場合に、join reorder optimization で発生する “Cannot fold actions for projection” 例外を修正しました。 #102516 (Alexey Milovidov).
  • スカラーが範囲外の場合に、numericIndexedVector 上の要素ごとのスカラー演算 (例: numericIndexedVectorPointwiseAdd) で発生していた検出されない overflow を修正しました。今後は、このような入力に対して破損した値を返す代わりに INCORRECT_DATA を返します。 #102546 (FriendLey).
  • SAMPLE とクエリレベルの OFFSET を伴う INSERT で、AST のフォーマットが一貫しない問題を修正しました。 Closes #102523. #102547 (zoomxi).
  • 不正な aggregate function state のデシリアライズ時に groupConcat で発生する LOGICAL_ERROR 例外を修正しました。 #102558 (Christoph Wurm).
  • input_format_csv_use_default_on_bad_values=0 の場合、Time64 の CSV 値の末尾にある不正な文字列を受け付けないようにしました。 Closes #102490. #102596 (Yarik Briukhovetskyi).
  • Enum 型のパスを持つ JSON column にデフォルト値を insert する際に発生する UNKNOWN_ELEMENT_OF_ENUM 例外を修正しました。 Closes #102359. #102687 (Pavel Kruglov).
  • 一部のケースで、カラムのリネーム時に columns&#95;substreams.txt が破損する問題を修正しました。 Closes #102259. #102689 (Pavel Kruglov).
  • JSON のパース中に Time data type への insert に失敗する問題を修正しました。 Closes #102016. #102690 (Pavel Kruglov).
  • キャッシュされたスキーマのファイル名に含まれる content サンプルの 16 進エンコードを修正しました。 Closes #101904. #102703 (Pavel Kruglov).
  • Float32 カラムに signaling NaN 値が含まれている場合に、ORDER BY キーがハッシュ式になっている SummingMergeTree のマージ中に発生するソート順序違反 (debug ではクラッシュ、release ではサイレントなデータ破損) を修正しました。 #102791 (Groene AI).
  • waitDetachedTableNotInUse を呼び出す DETACH DATABASE ... SYNC などの操作を、KILL QUERY でキャンセルできるようにし、サーバーのシャットダウンにも応答するようにしました。これにより、同時実行中のクエリがテーブル参照を保持している場合に無期限にハングするのを防ぎます。 #102804 (Antonio Andelic).
  • ANY RIGHT JOIN が誤った結果を返す可能性がある不具合を修正しました。 #102893 (Nikita Taranov).
  • socket 層からの short write を Poco の BufferedStreamBuf::flushBuffer が処理できないことが原因で、S3 リクエストがリトライされず、ios_base::clear: unspecified iostream_category error で失敗する不具合を修正しました。 #102894 (Sema Checherinda).
  • INSERT SELECT クエリで、input('auto') テーブル関数が HTTP interface 経由で失敗する不具合を修正しました。 #102902 (Miсhael Stetsyuk).
  • row policies/additional_table_filters 使用時の trivial LIMIT 最適化を無効化しました (並列な索引解析を可能にするため) 。 #102921 (Azat Khuzhin).
  • HMAC SQL function でシークレットキーを隠すようにしました。#102927 を修正しました。 #102997 (Mikhail f. Shiryaev).
  • optimize_syntax_fuse_functions が有効な場合に、同じ quantile 呼び出しを複数回参照する分散クエリ (たとえば SELECTHAVINGORDER BY 内) で発生する MULTIPLE_EXPRESSIONS_FOR_ALIAS 例外を修正しました。 #103014 (tanner-bruce).
  • フィルターが左側のカラムに依存しているときに、未準備の set が渡されるケースを CI で発見し、これを修正しました。#102966 をクローズしました。 #103029 (Yarik Briukhovetskyi).
  • 一部のケースで JSON への castOrNull を修正しました。#101818 をクローズしました。 #103036 (Pavel Kruglov).
  • aggregate projection がクエリに一致し、かつテーブルの一部のパーツに projection データが存在しない場合 (たとえば、すでにデータが入っているテーブルに projection を追加し、MATERIALIZE PROJECTION を実行していない場合) に、SELECT DISTINCT が不完全な結果をサイレントに返す不具合を修正しました。#102951 をクローズしました。 #103052 (Nihal Z. Miaji).
  • アナライザでの共通式抽出中に、AND(OR(A, A), A) のような WHERE 条件式が単一の最上位引数に畳み込まれた際に発生する TOO_FEW_ARGUMENTS_FOR_FUNCTION 例外を修正しました。 #103072 (Peng).
  • タプル、マップ、または QBit 要素を含む配列に対して if/ifNull を評価する際に発生していた論理エラー Function writeSlice expects same column types for GenericArraySlice and GenericArraySink を修正しました。ColumnQBit::structureEquals が、一方の QBit カラムの内部タプルを他方の外側ラッパーと誤って比較していたため、構造的に同一の QBit カラムが異なるものとして扱われていました。#103084 (Groene AI).
  • テーブル参照が保持されている場合に無期限にハングするのではなく、database_atomic_wait_for_drop_and_detach_synchronously を指定した DETACH DATABASEKILL QUERY に従うよう修正しました。#103095 (Alexey Milovidov).
  • 非識別子の predicate (例: WHERE 1=1) を使って WASM モジュールを削除した際に発生する segfault を修正しました。#103101 (Joe Redfern).
  • processInsertQuery の末尾で sendProgress を無条件に呼び出していたことが原因で、古いクライアントが remote() または分散テーブル経由で新しいサーバーに insert した際に UNEXPECTED_PACKET_FROM_SERVER で失敗していた後方互換性の問題を修正しました。#103148 (Sema Checherinda).
  • 定数でないタプルを第 2 引数に取る IN では、タプル要素を左辺の型に CAST で縮小してはなりません。これはオーバーフローを引き起こす可能性があります。#103055 をクローズしました。#103169 (Yarik Briukhovetskyi).
  • プロトコル関数での未初期化値の使用を修正しました。#103187 (Pavel Kruglov).
  • WHERE clause が LowCardinality のキー column を、ネストされた LowCardinality を含む型 (たとえば Variant(LowCardinality(Date), String)) にキャストした定数と比較する場合に、MergeTree の索引解析中に発生する LOGICAL_ERROR (Bad cast … to ColumnLowCardinality) を修正しました。#103211 (Groene AI).
  • timeSeries*ToGrid aggregate function ファミリー (例: timeSeriesResampleToGridWithStalenesstimeSeriesChangesToGridtimeSeriesResetsToGridtimeSeriesRateToGrid) を、bucket 数の計算で符号付き 64 ビット整数演算がオーバーフローするような極端な timestamp パラメータで呼び出した際に発生する Logical error: 'index < bucket_count' を修正しました。あわせて、悪意ある入力による意図しない大規模メモリ割り当てを防ぐため、グリッド bucket の総数を 1,600 万に制限しました。#103223 (Groene AI).
  • ReplacingMergeTree の遅延 FINAL パスでのパイプライン展開中に発生する Logical error: 'Port is already connected' 例外を修正しました。この不具合は、ReadFromMergeTree::initializePipeline が内部変換 (例: Resize) を挿入してサブパイプラインのプロセッサ同士を接続した結果、LazyUnorderedReadFromMergeTreeSource::expandPipeline がすでに接続済みの出力ポートを再接続しようとしていたため、query_plan_optimize_lazy_final = 1 のクエリに影響していました。#103230 (Groene AI).
  • 入力がソート済みの subqueries からなる UNION ALL の場合に、LIMIT BYDISTINCT が誤った結果を返す問題を修正しました。クエリプラン オプティマイザーがそのようなユニオン全体をグローバルにソート済みと誤って扱い、余分な行を返していました。#103231 (Nihal Z. Miaji).
  • 遅延レプリケーションを伴う Map type での統計計算中に発生しうるクラッシュを修正しました。#102390 をクローズしました。#103273 (Pavel Kruglov).
  • clone() constinvalidate_query_response 文字列を読み取り、isModified() const が同じ文字列に書き込むことで発生していた、ClickHouse、MySQL、PostgreSQL、XDBC の Dictionary ソースにおける data race を修正しました。#103277 (Miсhael Stetsyuk).
  • Date32 の単調性検出の誤りを修正しました。#101265 をクローズします。#103283 (Yarik Briukhovetskyi).
  • 認証前の TCP Hello パケット内の文字列を 64 KB に制限し、ハンドシェイク全体の時間を制限する handshake_timeout_milliseconds server setting を追加しました。これにより、未認証の client が過剰なメモリを消費したり、threads を無期限に占有したりすることを防ぎます。#103284 (Sema Checherinda).
  • String カラムにおける Parquet ColumnIndex stats の min_value > max_value を修正しました。#103334 (Saurabh Kumar Ojha).
  • flattenTuple および tupleToNameValuePairs において、Nullable(Tuple(...)) 入力の NULL 行が誤って処理される問題を修正しました。flattenTuple は外側の null map を保持するようになり、NULL 行が NULL のまま維持されます。tupleToNameValuePairs は、入力が Nullable(Tuple(...)) の場合、可能であれば結果の値の型を Nullable(T) に変更するようになり、NULL 行は [('a', 0), ('b', 0)] ではなく [('a', NULL), ('b', NULL)] を生成します。要素型を Nullable でラップできない場合 (例: Array) は、NULL の代わりにデフォルト値が使用されます。#103312 をクローズします。#103383 (Nihal Z. Miaji).
  • Native format 内の不正な flattened Dynamic data を検出するようにしました。#103392 (Pavel Kruglov).
  • snapshot 同期後に stale RPC が原因でレプリケーションが停止する問題を修正しました。#103406 (Seva Potapov).
  • BSON 型が Nullable(T) または Array(Nullable(T)) カラム内の対象カラム型と互換性のない値を含む不正な BSON document を読み取る際に、LOGICAL_ERROR “Cannot pop N rows from X” によって server が異常終了していた問題 (debug / sanitizer builds で発生) を修正しました。今後は、不正な行に対して意図どおり ILLEGAL_COLUMN exception が正常に生成されます。#103418 (Groene AI).
  • 先頭の行が空で、かつ常に false を返すラムダとともに適用された Array(String) カラムに対する arrayFill および arrayReverseFill での server 異常終了を修正しました。aggregate / sub-array ループで size_t 索引 が underflow して SIZE_MAX となり、その結果 ColumnString::doInsertManyFrom 内で範囲外読み取りが発生していました。同じ bug family の事例として #12263 があります。#103424 (Groene AI).
  • 上流の REPLACE RMV の EXCHANGE によって解決途中で対象ストレージの identity が切り替わる際、SQL SECURITY DEFINER を使用する下流の APPEND RMV で発生していた ACCESS_DENIED / UNKNOWN_TABLE を修正しました。#103427 (Alexander Gololobov).
  • url table function から _time カラムを設定するようにしました。#103437 (Nikita Taranov).
  • 無効なビット幅を持つ不正な入力の処理時に、ALP コーデックの伸長処理経路で発生しうる範囲外読み取りを修正しました。#103457 (Raufs Dunamalijevs).
  • SYSTEM SYNC FILESYSTEM CACHE '<name>' ON CLUSTER ... で、クエリのフォーマット時に cache 名が失われ、指定した cache のみではなくリモートノード上のすべてのファイルシステムキャッシュが同期されてしまう不具合を修正しました。#103469 (Asish Kumar).
  • deltaLakeAzure における URL エンコードされたパスの処理を修正しました。#103509 をクローズしました。#103525 (Smita Kulkarni).
  • AggregateFunction の state に整数を掛ける処理 (例: quantilesExactState(...) * N) で発生する heap-use-after-free を修正しました。二乗法によるべき乗ループで state を自身と merge しており、集約関数の merge が内部ストレージを再割り当てする場合、これは未定義動作になります。STID 0988-40af をクローズしました。#103536 (Groene AI).
  • ディスク上にある 2 つの空の unexpected パーツのブロック範囲が重複しているものの、一方が他方を包含していない場合に、ReplicatedMergeTree テーブルの起動時にまれに発生していた LOGICAL_ERROR “Part X intersects previous part Y” を修正しました。この例外により table-attach スレッドが中断され、テーブルを起動できなくなっていました。#103537 (Groene AI).
  • 非アダプティブインデックス粒度 (index_granularity_bytes = 0) を使用する MergeTree テーブルで、最後の data mark が不完全な場合に mutation によって引き起こされていた Logical error: Incorrect mark rows for part ... (デバッグ時のみのアサーション) を修正しました (DETACH/ATTACH の後に論理削除を行うと最も確実に再現できます) 。#103538 (Groene AI).
  • file() テーブル関数経由で /proc および /sys の疑似ファイルを読み取る際に、clickhouse-local が 0 行を何も警告せず返してしまう不具合を修正しました (例: SELECT * FROM file('/proc/cpuinfo', 'RawBLOB')) 。#103548 (Ashrith Bandla).
  • GenerateRandom table engine における max_string_length 引数の処理を修正しました。#103550 (Alex Kuleshov).
  • ログ内でネストされた認証情報のマスキングを修正しました。#103552 (Vitaly Baranov).
  • 利用できない場合でも SVE 命令を使用してしまう SVE 検出を修正しました。#103568 (Raúl Marín).
  • GenerateRandom のストレージ引数のパースを修正しました。#103574 (Konstantin Bogdanov).
  • ±inf で始まるデータに対して WITH FILL で無限ループが発生する問題を修正しました。#103580 (Konstantin Bogdanov).
  • Variant 型への JSONExtract で JSON の小数が暗黙に切り捨てられていた問題を修正しました。以前は、JSONExtract('{"x": 3.14}', 'x', 'Variant(Int64, Float64)')Int64=3 を返し、JSONExtract('{"x": 3.14}', 'x', 'Variant(String, Int64)')Int64=3 を返して、小数部分が失われていました。現在は小数値が損失なく保持されます。Float64/Decimal のメンバーが存在する場合はそれが値を保持し、存在しない場合は String のメンバーが元の JSON をそのまま取り込みます。整数メンバーのみを含む Variant 型 (例: Variant(Int64, Int32)) および整数への直接抽出 (JSONExtract(json, 'Int64')JSONExtractInt など) の挙動は変わりません。 #103620 (Groene AI).
  • 引数なしの SYSTEM INSTRUMENT REMOVE が、SYNTAX_ERROR (エラーコード 62) ではなく std::bad_optional_access (エラーコード 1001) を発生させる問題を修正しました。 #103622 (Pablo Marcos).
  • 3 番目の argument に timezone 文字列を指定して呼び出した際の、windowID および tumble window view における論理エラー / 未定義動作を修正しました。 #103641 (Alexey Milovidov).
  • S3 client のログで、空でない x-amz-bucket-region header を含む HTTP 400 レスポンス (SigV4 の署名 Region が誤っている場合) を、汎用的なエラー扱いではなく、より明確なログ行を伴う wrong-region の情報メッセージとして扱うようになりました。また、STS web identity credentials provider は、web identity が設定されている場合にのみ S3 credentials chain に追加されるようになり、これを使わないデプロイメントで不要な警告が減ります。 #99140 をクローズします。 #103673 (MeltonSmith).
  • SYSTEM SYNC REPLICA <db>.<tbl> IF EXISTS を、database が存在しない場合でも黙って成功するよう修正しました。これにより、存在しない table に対する既存の挙動と DROP TABLE IF EXISTS の先例に一致します。以前は、IF EXISTS があるにもかかわらず、このクエリは UNKNOWN_DATABASE を返していました。 #103629 をクローズします。 #103689 (Groene AI).
  • MergeTree table のソートキーに Array(LowCardinality(...)) があり、WHERE clause でそのカラムと element type が異なる Array 定数との間で plus / minus を使用した場合に、FunctionBinaryArithmetic::executeImpl2 が論理エラー Arguments of 'plus' have incorrect data types を投げる問題を修正しました。KeyCondition::getMonotonicityForRange は、内部の数値ディスパッチを呼び出す前に LowCardinality を再帰的に取り除くようになりました。 #103701 (Groene AI).
  • 26.1+ における動的な cache リサイズ競合を修正しました。 #103702 (Kseniia Sumarokova).
  • 式にキャプチャされた定数を持つラムダ (例: arrayMap((k, v) -> concat(k, '=', v), mapKeys(m), mapValues(m)))) が含まれる ALIAS カラムで、text および bloom_filter のスキップインデックスが暗黙に無視されていた問題を修正しました。 #103708 (Anton Popov).
  • start_posUINT64_MAX に近い場合の position および positionCaseInsensitive で、ポインタ演算のオーバーフローにより処理が停止したり segmentation fault を引き起こしたりする問題を修正しました。 #103766 (Raúl Marín).
  • 小数部が二重になった dateTime のパース中に発生する未定義動作を修正しました。 #103773 (Yarik Briukhovetskyi).
  • 26.x で、JIT コンパイルされた if および multiIf において、結果型が Decimal で、いずれかの分岐に非 Decimal (整数または浮動小数点) のリテラルがある場合、実際より 10^scale 倍小さい値がそのまま返されるデータ正確性のリグレッションを修正しました。低速な (非 JIT の) 経路は影響を受けていませんでした。影響を受けるバージョンでの回避策: SET compile_expressions = 0#103809 (Groene AI).
  • テキスト索引から対応する関数へトークナイザーが正しく受け渡されない問題を修正しました。#103826 (Elmi Ahmadov).
  • WHERE 句で、要素が単一のキーカラムに重複排除されるタプルに対して IN または NOT IN を使用したとき、numbersgenerate_series、および同様の範囲対応ソースが誤った結果を返す問題を修正しました (例: WHERE tuple(number, number) NOT IN (tuple(1, 2))) 。#103660 をクローズします。#103835 (Groene AI).
  • 自動スピリングを行うハッシュ結合の実際のメモリ使用量ピークが max_bytes_before_external_join を超えないようにしました。従来は、統計に基づく事前割り当て、インプレースでのハッシュテーブルの倍増、制限のない GraceHashJoin のインメモリバケットのいずれでも、クエリが設定された上限を超えて MEMORY_LIMIT_EXCEEDED が発生する可能性がありました。#103838 (Alexey Milovidov).
  • clickhouse-local の終了時に、system logs (text_logfilesystem_cache_log など) が設定されているとハングする問題を修正しました。SystemLogs::flushImplBaseDaemon::instance().flushTextLogs() を呼び出していましたが、これは clickhouse-server の外では std::bad_cast を送出するため、保存スレッドが動作し続け、最終的に pthread_cond_destroy が system log queue の破棄をブロックしていました。#103874 (Alexey Milovidov).
  • MATERIALIZED CTE クエリで、ボディが参照ごとに異なる推論カラム型に解決される場合、サーバーを Bad cast LOGICAL_ERROR でクラッシュさせるのではなく、明確な TYPE_MISMATCH error を返して拒否するようにしました。これは以前、CTE のボディが外側のスコープの識別子 (たとえば呼び出し元のサブクエリの projection 内の alias) を参照し、それらが参照ごとに異なる定数としてインライン展開される場合に発生していました。#103879 (Groene AI).
  • ANY OUTER JOIN の上にある filter に randnowrowNumberInAllBlocks などの非決定論的関数が含まれる場合、JOIN 変換クエリプラン optimizer (tryConvertAnyOuterJoinToInnerJoin, tryConvertAnyJoinToSemiOrAntiJoin) で未初期化値が使用される問題を修正しました。optimizer はこのような filter を定数畳み込みしなくなり、JOIN を変更しないままにします。これにより、行が気付かないうちに欠落するおそれのある INNER/SEMI/ANTI JOIN への誤変換も防止されます。#103880 (Groene AI).
  • consumer が一時的な topic-partition lock を保持している間に Keeper session が置き換えられた場合、サーバーがクラッシュする可能性のあった StorageKafka2 の use-after-free を修正しました。#103890 (Groene AI).
  • EmbeddedRocksDB テーブルを JOIN ... USING (key) で、キーカラムの型がストレージの主キーと異なるサブクエリ (例: Nullable(UInt64)Int64Decimal) と JOIN した際に、LOGICAL_ERROR “Primary key type mismatch” が送出される問題を修正しました。planner は型不一致時に DirectKeyValueJoin を選択せず、型変換を処理できる HashJoin にフォールバックするようになりました。#103928 (Groene AI).
  • SET max_threads = DEFAULT (max_final_threadsmax_parsing_threads も同様) を実行しても、auto 状態が失われなくなりました。以前は、これらの設定のいずれかをリセットすると、system.settings には 'auto(32)' ではなく解決後のコア数 (例: 32) が表示され、サーバーもその値が明示的に固定されたかのように動作していました。#103991 (Groene AI).
  • 永続化された alpha_size が 25.12 より前の deserialize+serialize サイクルで拡張されていた AggregateFunction(topK(N), String) カラムの読み取り時に発生する SIZES_OF_ARRAYS_DONT_MATCH を修正しました。#104002 (Raúl Marín).
  • PostgreSQL、Cassandra、XDBC の Dictionary ソースにおける SQL インジェクション脆弱性を修正しました。単一引用符を含む文字列キーが \' (バックスラッシュ) でエスケープされていましたが、これらのバックエンドではこれがエスケープシーケンスではなくリテラルのバックスラッシュとして扱われるため、Dictionary ルックアップクエリに任意の SQL を注入できていました。ExternalQueryBuilder は、これらのバックエンド向けに SQL 標準の '' エスケープを出力するようになりました。ClickHouse と MySQL の Dictionary ソースは、引き続きバックスラッシュエスケープを使用します。#104009 (Shaohua Wang).
  • カラム型を LowCardinality に変更、または LowCardinality から変更した際に、min-max projection が再構築されていなかった場合に発生しうる集約時の型不一致を修正しました。#104013 (Nikita Taranov).
  • 式のマージ時に未使用カラム削除の抑止が伝播されないことで発生していた、クエリ最適化の無限ループを修正しました。#104083 (János Benjamin Antal).
  • 名前ベースではなく UUID ベースの追跡を使用することで、ストリーミングテーブル (S3Queue、Kafka、RabbitMQ) の一括リネーム時に StreamingStorageRegistry::renameTable で発生する LOGICAL_ERROR を修正しました。#104101 (Nikita Taranov).
  • UNION ALL で構築された CTE に SELECT DISTINCT の分岐が含まれ、外側のクエリが CTE のカラムの一部だけを射影している場合に、誤った結果が返る問題を修正しました。新しいアナライザの RemoveUnusedProjectionColumnsPass が、内側の DISTINCT 射影から未参照カラムを誤って削除していたため、本来は DISTINCT のままであるべき行 (射影されたカラムの値は同じでも、削除されたカラムの値が異なる行) が 1 行に潰れていました。#104114 (Groene AI).
  • 設定 optimize_inverse_dictionary_lookup における複数のエッジケースでの正しさの問題を修正しました。この最適化により、行が気付かないうちに欠落したり、例外が抑制されたりする可能性がありました。Closes #103270. Close #103085. #104133 (Nihal Z. Miaji).
  • quantileTiming state のデシリアライズ中に境界外書き込みが発生する問題を修正しました。#104141 (Alexey Milovidov).
  • 範囲外の Float64 値を広い整数型 (UInt64Int64Int128UInt128Int256UInt256) に変換した際の未定義動作を修正しました。以前は、Float64(numeric_limits<T>::max()) と等しい値 (実際の最大値を上回る値に丸められる) が境界チェックをすり抜け、その後の cast で UB を引き起こしていました。これは、集約関数パラメータのパース (topKhistogramuniqUpTogroupArrayInsertAt など) や、SET <setting> = <Float64> による整数型設定に影響していました。Closes #103817. #104154 (Groene AI).
  • ネストした Tuple(Tuple(Nullable(...))) (またはそれ以上に深くネストしたもの) を String リテラルと比較した際に発生していた LOGICAL_ERROR 例外 “Unexpected return type from comparison. Expected UInt8. Got Const(Nullable(UInt8))” を修正しました。比較の戻り値型は、実行時の挙動に一致する Nullable(UInt8) として正しく推論されるようになりました。#104171 (Groene AI).
  • query_plan_optimize_lazy_final = 1 のとき、SELECT ... FROM <ReplacingMergeTree(version, is_deleted)> FINAL PREWHERE is_deleted = <expr> AND <other column expr> で発生していた server abort (UndefinedBehaviorSanitizer: reference binding to null pointer、release build での segfault) を修正しました。lazy-FINAL の非交差読み取り step では、prewhere が is_deleted カラムを入力として消費したにもかかわらず、それを出力として再公開していなかったため、出力 header から is_deleted カラムが失われていました。その結果、下流の addIsDeletedFilter step で null の ActionsDAG::Node pointer が逆参照されていました。#104177 (Groene AI).
  • system.failpoints table の呼び出し時に failpoint が使われ、その結果無効化される可能性があった問題を修正しました。#104237 (Pedro Ferreira).
  • 入力に UTF-8 文字がちょうど buffer 境界で終わる場合に、detectLanguage* 関数で発生していた MemorySanitizer: use-of-uninitialized-value を修正しました。#104257 (Raúl Marín).
  • 基盤の object storage がファイルシステムキャッシュのような decorator でラップされたディスクに対して SETTINGS disk = '...' を指定して呼び出した際に、data-lake の table function やエンジン (icebergS3deltaLakeS3 など) で argument のパースが中断されていた論理エラー (Bad cast from type DB::CachedObjectStorage to DB::S3ObjectStorage) を修正しました。#89300 をクローズします。#104258 (Groene AI).
  • values という名前のカラムに対する括弧付き添字式 (例: (values['a'])) のパースを修正し、SQL 標準の VALUES table 式として解釈されないようにしました。#104312 (Desel72).
  • ファイルシステムキャッシュの background エビクション thread (SLRUFileCachePriority::collectEvictionInfo) で発生しうる server abort/LOGICAL_ERROR を修正しました。これは、keep_free_space_size_ratio または keep_free_space_elements_ratio が、すべての cache entries がすでに SLRU protected queue に昇格済み (probationary は空) である状況でもエビクションがトリガーされるほど高い場合に発生する可能性がありました。#104313 (Groene AI).
  • UNION ALL views、window functions、または alias-column 名の衝突と組み合わせて projections を使用した際に発生する例外 (NOT_FOUND_COLUMN_IN_BLOCKLOGICAL_ERRORAMBIGUOUS_COLUMN_NAME) を修正しました。#88798 からのリグレッションです。#104317 (Amos Bird).
  • postgres arrays のパースにおける underflow の可能性を修正しました。#104322 (Grant Holly).
  • Nullable型 (ArrayTupleMap など) を返す関数で、Nullableな引数を受け付けるようになりました。対象の関数は extractAllextractAllGroupsextractAllGroupsHorizontalextractAllGroupsVerticalextractGroupssplitByCharsplitByStringsplitByRegexpsplitByWhitespacesplitByNonAlphaalphaTokens です。NULL 入力行では、“Nested type is not allowed inside Nullable type” を発生させる代わりに、結果型のデフォルト値 (たとえば空の配列) を返すようになりました。#104326 (Alexey Milovidov).
  • パーティション化されたテーブルにおける Iceberg の統計情報の不具合を修正しました。これにより #104321 はクローズされます。#104329 (Konstantin Vedernikov).
  • macOS (および同様の jemalloc ビルド) で、オプションの background_thread / max_background_threads mallctl が存在しないにもかかわらず、Jemalloc::verifySetupjemalloc_enable_background_threads の不一致を誤って報告していたことにより、server 起動時に発生していた致命的な論理エラーを修正しました。これらの mallctl が利用できない場合は検証をスキップし、getValue も失敗時に出力を未初期化のまま残さなくなりました。#102183 をクローズします。#104330 (SAYON DEEP).
  • max_rows_to_read_leafread_overflow_mode_leaf = 'throw' を指定した SELECT クエリで、スキップ索引によって読み取り行数が leaf 上限未満まで減る場合でも、誤って TOO_MANY_ROWS をthrowしてしまうことがあった不具合を修正しました。対になる非 leaf 側の設定 (max_rows_to_read / read_overflow_mode) については、すでに処理済みでした。#104331 (Groene AI).
  • toUUIDtoUUIDOrNulltoUUIDOrZerotoUUIDOrDefaultUUID および Nullable(UUID) への CASTUUID への accurateCastOrNull、さらにテキストから UUID を解析する入力フォーマット (AvroMsgPackJSONExtract、…) で、長さは正しくても 16 進数以外の文字を含む文字列を拒否するようになりました。従来はこのような入力は、16 進数字のルックアップテーブルの末尾を越えて参照することで、黙って捏造された UUID に変換されていました。現在は toUUIDCANNOT_PARSE_UUID をthrowし、Or* 系のバリアントは NULL / ゼロ UUID / 指定されたデフォルト値を返します。#104370 (Groene AI).
  • THEN のみの supertype と、(THEN 群 + ELSE) の supertype が異なる ColumnDecimal ストレージに配置される場合に、caseWithExpression (および SQL の CASE expr WHEN ... THEN ... ELSE ...) で発生する Bad cast LOGICAL_ERROR を修正しました。たとえば、THEN の値が (UInt16, Int8) で、ELSE が Decimal(9, 2) の場合です。#104335 をクローズします。#104378 (Groene AI).
  • logExceptionBeforeStart (非同期挿入の flushes、マテリアライズドビューの refreshes、内部クエリ中に発生した parse エラー) 経由で報告される内部障害で、ユーザー可視の FailedQueryFailedSelectQueryFailedInsertQuery の counters に加えて、FailedInternalQueryFailedInternalSelectQueryFailedInternalInsertQuery の ProfileEvents も正しく増加するようになりました。従来は、クエリ実行開始前に発生した障害ではこれらの内部カウンターが 0 のままで、主要な種類の内部障害が過少計上されていました。#104399 (Groene AI).
  • BACKUP または RESTORE ステートメントの base_backup 設定内でクエリパラメータを使用した際に発生する Code: 36. BAD_ARGUMENTS Expected literal, got {name:Type} を修正しました (例: BACKUP ... SETTINGS base_backup = S3({backup_name:String}, ...)) 。このリグレッションは PR #99205 により 26.1.5 で導入されたものです。#103324 をクローズしました。#104413 (Groene AI).
  • ALTER TABLE ... DROP COLUMN の後、iceberg_metadata_staleness_ms が 0 より大きい状態で INSERT を実行すると発生していた、IcebergLocal/IcebergS3 への書き込み時の server abort を修正しました。ALTER 実行時にローカルの Iceberg metadata files cache が無効化されるようになり、以後の読み取りと書き込みで新しいスキーマが参照されます。#104419 (Groene AI).
  • DROP ROLEDROP USERDROP SETTINGS PROFILEDROP ROW POLICYDROP QUOTADROP MASKING POLICY について、削除された entity を参照していた他の access entity からその参照 (例: ユーザーの DEFAULT ROLE リスト、settings profile の TO リスト、row policy の grantee) を削除し、そのクリーンアップ結果をディスクに永続化するよう修正しました。従来は、SHOW CREATE が不明な UUID を filter するため in-memory state は正しく見えていましたが、ディスク上の .sql ファイルには不正な ID('<dropped-uuid>') エントリが残っており、次回 server を再起動すると参照が復活し、distributed query execution 中に ACCESS_ENTITY_NOT_FOUND error として表面化していました。#104427 (Groene AI).
  • BlobEndpoint URL に空、非数値、または範囲外のポートを含む接続文字列 (例: BlobEndpoint=http://host:abc/) を使った azureBlobStorageAzureBlobStorage-engine、および Azure 上の Delta Lake で発生する server abort を修正しました。debug/sanitizer builds でも server が abort する代わりに、適切な BAD_ARGUMENTS error を返すようになりました。#104460 (Groene AI).
  • remote および remoteSecure table functions で、ユーザー名としてクォートなしの識別子を使えるようにしました。これは database 引数や table 引数がクォートなし識別子を受け付ける動作に合わせたものです。従来、このようなクエリは default ユーザーを参照する誤解を招く authentication error で失敗していました。#104465 (Alexey Milovidov).
  • SQL user-defined function の本体に、括弧で囲まれた内側の UNION ALL が含まれている場合に発生する Logical error: Incorrect ASTSelectWithUnionQuery (modes: M, selects: N) を修正しました (例: CREATE FUNCTION f AS x -> (SELECT 1 UNION ALL (SELECT 1 UNION ALL SELECT 1))) 。#104477 (Groene AI).
  • 第 2 引数が空の uniqTheta state である場合に、uniqThetaIntersect0 ではなく第 1 引数のカーディナリティを返していた不具合を修正しました。たとえば、predicate によってすべての行が除外された場合の uniqThetaMergeStateIf(s, predicate) の結果で発生していました。#104529 (Groene AI).
  • Iceberg REST カタログ (iceberg-restonelakebiglake) をバックエンドとする DataLakeCatalog database で、SHOW TABLESsystem.tables の一覧が途中で黙って切り捨てられる問題を修正しました。カタログ server が list-tables または list-namespaces のレスポンスをページ分割している場合 (たとえば Microsoft Fabric / OneLake で 1 ネームスペースあたり約 50 テーブルを超える場合) 、後続ページの table は直接 SELECT ではクエリできるにもかかわらず、SHOW TABLESsystem.tables では表示されなくなっていました。RestCatalog は現在、Iceberg REST OpenAPI spec で定義された継続トークン next-page-token をたどるようになり、既存の PaimonRestCatalog および UnityCatalog の動作と一致します。#104531 (Groene AI).
  • input table function は、固定スキーマを持つフォーマット (LineAsStringRawBLOBJSONAsString など) の場合、周囲の INSERT クエリの FORMAT clause から structure を推論するようになりました。これにより、これらのフォーマットで input('line String') のように structure を繰り返し指定する必要がなくなります。#104532. #104533 (Groene AI).
  • Iceberg history 内のフィールドの datatype を Int32 から Int64 に更新しました。#94176 をクローズします。#104579 (Smita Kulkarni).
  • カンマの後に lambda が続く関数呼び出しをパースする際に発生していた Inconsistent AST formatting LOGICAL_ERROR を修正しました。例: SELECT substring(x, `x` -> `x`)。従来、パーサーは直前の argument を lambda の左辺に黙ってマージしてしまい、その結果、同じ AST に再パースできない単一 argument の呼び出しを生成していました。現在は関数本来の arity を保持します。#104626 (Groene AI).
  • CHECK TABLE t は、database 修飾子が指定されていない場合、同名の永続 table よりも TEMPORARY table を優先するようになりました。これは SHOW CREATE TABLEDESCRIBE TABLEOPTIMIZE TABLEALTER TABLE ですでに使われている優先順位と一致します。従来の CHECK TABLE t は一時 table を完全に無視していたため、これらのエンジンが CHECK をサポートしているにもかかわらず、一時 Log または File table に対して UNKNOWN_TABLE で失敗していました。#100966 のフォローアップです。#104637 (Groene AI).
  • <placement> が設定されていない Keeper に対して quorum_reads=true を付けて get /keeper/availability_zone を送信したときに、Keeper の終了と再起動のループが発生する問題を修正しました。#104663 (myeongjun).
  • 論理エラーを引き起こす FutureSetFromTuple::buildOrderedSetInplace の TOCTOU data race を修正しました。#104673 (Miсhael Stetsyuk).
  • arguments がカラムとして渡されたか定数として渡されたかによって、同じ入力でも異なる結果を返していた複数の関数を修正しました: bitRotateLeft / bitRotateRight (境界 shift カウント) 、length(FixedString) / concatWithSeparator における LowCardinality(Nullable) 入力、NaN に対する roundDown、および不正な UTF-8 に対する rightUTF8#104710 (Raúl Marín).
  • 最頻値がカラムのデフォルト値で、かつ data が複数の MergeTree パーツにまたがって存在する場合 (スパースカラム読み取りパス) に、anyHeavy が heavy ではない値を返していた問題を修正しました。#104712 (Raúl Marín).
  • 設定制約の処理に関する複数の不具合を修正しました。設定の正規名に対して宣言された MergeTreeSettings の制約が、その設定の alias への書き込みによって回避できてしまう問題と、disallowed_values 制約のチェックが clamp パス (secondary queries、ON CLUSTER workers、SQL SECURITY DEFINER views) で変更を黙って破棄すべきところで例外を投げていた問題を修正しました。 #104737 (Raúl Marín).
  • まだメタデータが読み込まれていない遅延 attached 状態の Iceberg / IcebergLocal / Delta Lake / Hudi テーブルに対して、OPTIMIZE TABLEALTER TABLE ... DELETEALTER TABLE ... ADD COLUMN、およびその他の ALTER バリアントで発生していた LOGICAL_ERROR 例外 (Metadata is not initialized) を修正しました (典型的には、server の再起動後や、以前のメタデータ書き込み失敗によってディスク上に corrupted なメタデータファイルが残った後に発生します) 。これにより、メタデータの読み込みに成功した場合は操作が通常どおり続行され、失敗した場合でも debug / sanitizer builds で server を abort する代わりに、根本原因である読み込み失敗が通常のユーザー向け例外として表示されるようになりました。 #104738 (Groene AI).
  • AvroConfluentRowInputFormat の use-after-free バグによる segfault を修正しました。 #104751 (Miсhael Stetsyuk).
  • numericIndexedVectorPointwiseMultiplynumericIndexedVectorPointwiseDividenumericIndexedVectorPointwiseEqualnumericIndexedVectorPointwiseNotEqual の scalar バリアントは、Int64::max を超える UInt64 scalar を指定して呼び出された場合に INCORRECT_DATA を返すようになりました。 #104784 (FriendLey).
  • compatibility 設定の適用後に、その alias 名で設定を手動で上書きした場合 (例: SET allow_experimental_analyzer = 1 ではなく SET enable_analyzer = 1) 、その後の compatibility 設定の変更によってその上書きが取り消されてしまうことがある不具合を修正しました。 #104829 (Raúl Marín).
  • https://github.com/ClickHouse/ClickHouse/commit/0e8ad4355c9d 以降、AWS ロガーが無効になっていた問題を修正しました。 #104837 (Konstantin Bogdanov).
  • 引数がカラムとして渡されたか定数として渡されたかによって、同じ入力でも異なる結果を返していたさらに 3 つの関数を修正しました。対象は、定数 Date/Date32/Enum/FixedString のデフォルト値を持つ transform (およびそれを介した caseWithExpression) 、String と定数 FixedString の比較演算子、そして定数条件下で FixedString 分岐を持つ if/ifNull/nullIf です。 #104858 (Raúl Marín).
  • パーティション式に、単一の定数値へ畳み込まれる関数 chain (floor(NULL, toRelativeYearNum(...)) など) が含まれている場合に、MergeTree テーブルの partition pruning 中に発生していた Bad cast from type DB::ColumnConst to DB::ColumnNullable による server abort を修正しました。 #104861 (Groene AI).
  • ContextData の copy constructor における ThreadSanitizer data race を修正しました。table_function_resultstable_function_results_mutex を取得せずにコピー元オブジェクトから複製されていたため、同時実行中の Context::executeTableFunction writer と、copy constructor 内の非同期化 read が競合する可能性がありました。 #104879 (Groene AI).
  • 動的 structure を持つ型に対する data part の整合性チェックを修正し、corrupted な columns_substreams.txt を検出できるようにしました。追加の変更を含む https://github.com/ClickHouse/ClickHouse/pull/103858 の再提出です。 #104888 (Pavel Kruglov).
  • DatabaseCatalog における DROP と UNDROP の競合を修正しました。#104915 (Azat Khuzhin).
  • 部分的にダウンロードされた segments を含む場合のファイルシステムキャッシュの動的リサイズを修正し、Failed なエビクション後の restore accounting も修正しました。#104921 (Antonio Andelic).
  • 一時テーブルに対する DETACH TABLE (TEMPORARY keyword なし) で、DETACH TEMPORARY TABLE と同様に SYNTAX_ERROR が正しく発生するようになりました。これまでは内部の is_detached フラグを暗黙に設定し、エラーなしで終了していました。一時テーブルを削除するには、DROP TEMPORARY TABLE または DROP TABLE を使用してください (後者は Context::ResolveExternal を介して一時テーブルを解決します) 。#103475 をクローズしました。#104943 (Groene AI).
  • filesystem table function が、ファイル内容の loading 時に max_memory_usage / max_server_memory_usage を尊重するよう修正しました。これまでは、大きなファイル内容や多数の並列読み取りにより、MEMORY_LIMIT_EXCEEDED を発生させないまま制限を超過し、最終的に OOM によって強制終了されることがありました。#104956 (Alexey Milovidov).
  • uuidsystem.detached_tables を filter した際に発生していた LOGICAL_ERROR を修正しました (例: SELECT count() FROM system.detached_tables WHERE uuid = '...') 。これにより、クエリは server を異常終了させることなく、期待どおりの結果を返すようになりました。#104979 (Groene AI).
  • ネストされた structure に空の Tuple() リーフしか含まれない tuple (例: Tuple(c0 Array(Tuple())) または Tuple(c0 Tuple())) に対して flattenTuple を呼び出した場合でも、LOGICAL_ERROR は発生しなくなりました。こうした入力では、flatten の結果が空の tuple になることを説明する、ユーザー向けの ILLEGAL_TYPE_OF_ARGUMENT 例外が返されるようになりました。#104989 (Groene AI).
  • GROUP BY を伴う loop(remote(...)) (または aggregation を遅延できるストレージを loop() でラップしたもの) へのクエリで発生していた、server の異常終了と誤った結果を黙って返す不具合を修正しました。これまでは、外側の planner が内側のストレージから報告された processing stage に基づいて MergingAggregatedStep を追加していましたが、LoopSource は常に内側の select を QueryProcessingStage::Complete で materialize し、通常の column chunks を出力するため、enable_parallel_replicas = 1 の場合に MergingAggregatedTransformLOGICAL_ERROR (Chunk info was not set for chunk in MergingAggregatedTransform) を引き起こし、それ以外では外側の aggregation を黙って欠落させていました。#105001 (Groene AI).
  • clickhouse-benchmark --reconnect (値なしの単独指定) は、--reconnect を値必須の整数オプションに変更した影響で、25.4 で意図せず壊れていました。値なしの形式が再び使えるようになり、--reconnect=1 (すべてのクエリで再接続) と同等になりました。#105006 (Groene AI).
  • 不完全な UTF-8 シーケンスで終わるカラム名に対して、不正な JSON が出力される問題を修正しました。#105012 (Pablo Marcos).
  • materialized view の source table に対する EXCHANGE TABLES または CREATE OR REPLACE TABLE の後に、データが黙って失われる問題を修正しました。MV の source-view dependency edge は元の名前に保持されるようになり、INSERT 時にも引き続き動作します。#98779 で導入されたリグレッションで、今回の修正によりリグレッション前の動作が復元されます。#105029 (Sema Checherinda).
  • toUInt128(<Float64 expression>) のように FloatUInt128 に変換する式を JIT コンパイルする際に発生していた CANNOT_COMPILE_CODE Could not find symbol __fixunsdfti を修正しました。符号なし 128 ビットの float-to-int compiler-rt 組み込み関数が JIT シンボルリゾルバに不足していました。#105031 をクローズしました。#105048 (Raúl Marín)。
  • send_logs_level が設定されているときに、失敗したクエリのログメッセージを clickhouse-local が出力しない問題を修正しました。#105067 (Alexey Milovidov)。
  • 同じクエリ内で、同じパラメーター化ビューを異なる引数値で複数回参照した場合に、結果が不正になる問題を修正しました。以前は、アナライザがそれらの呼び出しを 1 つにまとめ、最初の filter 以外をすべて暗黙に破棄していました。#105170 (Alexey Milovidov)。
  • play.html の web UI で、TOTALS 行が結果テーブルの下部に 2 回表示される問題を修正しました。#103803 (Alexey Milovidov)。
  • vector search 中に有限でないベクトル (NaN±Inf) を拒否するようにしました (検索対象ベクトルと参照ベクトルの両方) 。これらは以前、usearch で未定義動作を引き起こしていました。#104079 (Groene AI)。
  • PromQL: 空のベクトルに対する aggregation operator を修正しました。#104425 (Vitaly Baranov)。
  • PromQL: Prometheus query API のエラー処理を修正しました。#104741 (Vitaly Baranov)。
  • MergeTreeTransaction::afterCommit における競合状態を修正しました。これは、commit CSN を ZooKeeper に書き込んだ後、トランザクションを完了する前に connection が失われると、system.parts で新しい creation_csn / removal_csn が見えるようになる前に、COMMIT の応答が client に届く可能性があるという問題でした。#104708 (Tuan Pham Anh)。
  • ネストした配列の索引付け (arr[arr[arr[...]]]) を変換する際に、KQL パーサーでメモリ使用量が指数的に増加する問題を修正しました。#105142 (Alexey Milovidov)。
  • 右側の table で 1 つの key に対して複数の行があり、サイズ制限によって出力 block が分割される場合に、RIGHT ANY JOIN の結果が不正になる問題を修正しました。#99431 をクローズしました。#102064 (Vladimir Cherkasov)。
  • ネスト型のデシリアライゼーション中に、Avro リーダーでスタックオーバーフローをチェックするようにしました。#102417 (Pavel Kruglov)。
  • MergeTree settings に対する system.completions 内の重複行を修正しました。各設定名が 2 回ずつ表示されていたのは、設定名が同一であるにもかかわらず、getMergeTreeSettingsgetReplicatedMergeTreeSettings の両方が dump されていたためです。#102013 をクローズしました。#102015 (Groene AI)。
  • StorageObjectStorageQueue (S3QueueAzureQueue) で、部分的に処理されたファイルを object storage から最後まで読み切るまでシャットダウンがブロックされる問題を修正しました。これにより、シャットダウン時にはソースが読み取りを即座に中断するようになりました。deduplication により、シャットダウン前に宛先テーブルへすでにストリーミングされた行は、次回起動時にファイルが再試行されても重複しません。#103126 (Tuan Pham Anh).
  • insert_deduplication_token を指定した Alias table engine への複数 block の insert で、すべての block が保持されるよう修正しました。#103246 (Enric Calabuig).
  • native JSON カラムに対する JSONHas および JSONExtractBool が、0/1 ではなく抽出された値 (UInt8 に cast されたもの) を返してしまう問題を修正しました。#103313 (zxuhan7).
  • format_custom_row_after_delimiter を省略した不正または悪意あるデータに対して、CustomSeparated input format を保護するようにしました。header 検出、schema inference、可変カラムの行では、以前はフィールドが際限なく蓄積され、失敗するまでに数 GB のメモリが確保される可能性がありました。現在は、1 つの行に 1,000,000 個を超えるフィールドが含まれていると、読み取りは INCORRECT_DATA で失敗します。#103404 (Groene AI).
  • replicated MergeTree table の RESTORE を修正し、復元した part の Attach に通常の insert 用 Keeper 再試行回数ではなく backup_restore_keeper_max_retries が使われるようにしました。#104610 (Pablo Marcos).
  • MergeTree table における WHERE p AND <LowCardinality(Nullable(int)) constant> の誤った結果を修正しました。以前は、この種のクエリは 0 行を返していました。これは、パーツ剪枝が LowCardinality(Nullable(...)) 型からデフォルトの NULL を導出し、notEquals(x, NULL) ガードを生成して、すべての part を剪枝していたためです。#104767 (Groene AI).
  • カラムの非単射関数で group 化し、そのカラムが同時に partition key でもある場合の誤った aggregation 結果を修正しました (例: PARTITION BY aGROUP BY intDiv(a, 2) または a % 2) 。以前は、異なるパーティションにあっても同じグループに対応する値が merge されず、allow_aggregate_partitions_independently = 1 の場合に重複したグループ行が生成されていました。#104869 (Nihal Z. Miaji).
  • 復旧中の follower へ送信中の snapshot が削除または移動される可能性があった Keeper の snapshot 転送における race を修正しました。#104941 (Antonio Andelic).
  • hilbertEncodemortonEncode において、非定数の Tuple の第 1 引数 (range mask) が、すべての行の bit shift に行 0 の値を使っていたため、誤った結果を静かに返していたバグを修正しました。これらの関数は現在、行ごとの mask 値を計算するため、結果が入力の定数性や block サイズに依存しなくなりました。#104992 (Groene AI).
  • clickhouse-local./clickhouse-local.xml~/.clickhouse-local/config.xml、または /etc/clickhouse-local/config.xml から configuration file を自動検出した際に、ユーザーレベルの設定 (profilesusersquotas、access-control settings) を黙って無視していた問題を修正しました。以前は、これらの設定は --config-file が指定された場合、または現在のディレクトリに ./config.xml が存在する場合にのみ適用されていましたが、現在はすべての discovery path で一貫した動作になります。#105008 (Groene AI).
  • 文字列リテラルと比較した際に BFloat16 カラムが一致件数 0 を何もエラーを出さずに返していた問題を修正しました (例: WHERE bf16_col = '49.9') 。 #105042 (Raúl Marín).
  • SummingMergeTreeAggregatingMergeTreeCoalescingMergeTree で、マージ時に必要なカラムが存在しない、または期限切れの場合の CLEAR COLUMN および TTL 処理を修正しました。 #101953 をクローズします。 #105203 (Antonio Andelic).
  • shared->clusters_config を参照外しする前に明示的な null ガードを追加し、DNSCacheUpdater::runContext::reloadClusterConfig の競合状態を修正しました。 #105220 (Mikhail f. Shiryaev).
  • ms および ns の精度を使用する toDateTime64 に対する best_effort の日付時刻パースを修正しました。 #105233 (Kaviraj Kanagaraj).
  • OSIOWaitMicroseconds がクエリ単位の I/O 待機時間ではなく、スレッドの生存期間全体にわたる I/O 待機時間を報告していた問題を修正しました。 #105246 (Mikhail f. Shiryaev).
  • Hudi table engine で、table directory 内の Parquet file が Hudi の [FileId]_[FileWriteToken]_[Timestamp].[extension] 命名規則に一致しない場合、LOGICAL_ERROR ではなく INCORRECT_DATA (通常のクエリレベルの例外) を発生させるようになりました。従来は、このようなファイル名が debug builds で例外の原因になっていました。 #105266 (Groene AI).
  • ParallelFormattingOutputFormat で、スケジュール失敗時に発生するデッドロックを修正しました。scheduleFormatterThreadForUnitWithNumber が例外をスローすると (例: CANNOT_SCHEDULE_TASK) 、そのユニットが READY_TO_FORMAT のまま残り、処理する formatter thread も存在しないため、ハングしていました。現在はスケジュール呼び出しを try/catch でラップし、失敗時は onBackgroundException 経由で処理されるため、collector は正常に終了します。 #105275 (Azat Khuzhin).
  • 異常終了からの復旧時に Distributed 非同期 INSERT でデータが気付かれないまま失われる問題を修正しました。保存された Batch 内で最後の .bin ファイルが正常でも途中のファイルが破損していた場合、DistributedAsyncInsertBatch::recoverBatch は最後のファイルのヘッダーしか検証せず、その後 sendBatch が正常なファイルも含めて Batch 全体を破損扱いにしていたため、そこに含まれる行が失われていました。現在は各ファイルのヘッダーを個別に検証するため、実際に破損したファイルだけが broken/ に移動され、残った行はリモート分片に届きます。 #105281 (Groene AI).
  • clickhouse extract-from-config --try のリグレッションを修正しました。config で from_env 属性を使用し、include_from 要素が存在しない場合 (または存在していても見つからないファイルを指している場合) 、すべての from_env substitution が何もエラーを出さずに無視され、空文字列が返されていました。これにより 26.2.5 では Docker entrypoint のポート discovery が壊れていました。 #101704 をクローズします。 #105283 (Groene AI).
  • 挿入する値が EnumJSONAggregateFunction のいずれかで、そのテキスト表現にシングルクォートが含まれている場合に、SQLite table への INSERT INTO が SQLite の構文エラーで失敗する問題を修正しました。対応するシリアライゼーションでも output_format_values_escape_quote_with_quote 設定が反映されるようになりました (従来これが反映されていたのは StringFixedString のみでした) 。 #105285 (Groene AI).
  • allow_push_predicate_ast_for_distributed_subqueries = 1 (デフォルト) を指定した分散クエリで、GLOBAL IN のタプルが、射影に重複したカラム名を含むサブクエリと照合される際に発生していた Code: 44. ILLEGAL_COLUMN: Cannot add column ...: column with this name already exists を修正しました。例: (x, y) GLOBAL IN (SELECT number, number FROM numbers(5))#105290 (Groene AI).
  • Array(LowCardinality(...)) への reinterpret が、実行時にわかりにくい NOT_IMPLEMENTED エラーを返していた問題を修正しました。現在は型チェック時に ILLEGAL_TYPE_OF_ARGUMENT を返します。 #105301 (Raúl Marín).
  • minMap/maxMap (配列形式) および minMappedArrays/maxMappedArrays が、NaNORDER BY と一貫した形で扱うようになりました。NaN は末尾として扱われ (すべての値が NaN の場合にのみ返されます) 、従来は IEEE 754 の順序なし比較の意味論により、結果がデータ中の NaN の位置に依存していました。また、#100448 で修正された minMap/maxMapMap 引数形式とも一致していませんでした。 #105331 (Raúl Marín).
  • Nested カラムを持つ MergeTree 系テーブル向けの、テーブル単位の ColumnsDescription cache におけるメモリリークを修正しました。share_nested_offsets = 1 (デフォルト) の場合、ALTER ADD COLUMN/DROP COLUMN のサイクルをまたいでもエントリが追い出されることはありませんでした。 #105376 (Groene AI).
  • TYPE set(N) スキップ索引を持つ SELECT で、WHERE 句のアトムの結果型が FloatBFloat16、またはその他の非整数型 (たとえば WHERE c0 + 0.1WHERE log(c0)) である場合に発生していた BAD_ARGUMENTS 例外 “It’s a bug! Only integer types are supported by __bitWrapperFunc” を修正しました。この場合、スキップ索引は通常のフィルターパスにフォールバックするようになりました。 #105384 (Groene AI).

ビルド/テスト/パッケージングの改善

  • システムの compiler-rt ライブラリおよびヘッダーの使用を停止しました。#91475 をクローズします。#102857 (Konstantin Bogdanov).
  • libssl3t64 の OpenSSL CVE を修正するため、distroless Docker ベースイメージを更新しました。#103583 (Rahul Nair).
  • keyserver.ubuntu.com でタイムアウトする代わりに複数の Ubuntu keyserver を連鎖的に利用することで、リリース時に GPG 鍵を確実に取得できるようにしました。#103834 (Mikhail f. Shiryaev).
  • ビルド時の CMake チェック (check_*, try_compile, try_run) を削除し、使用を禁止しました。コンパイラとツールチェーンは固定されているため、設定時の feature 検出は不要であり、現在はプロジェクト全体で無効化されています。バージョン固有の動作は、明示的に CMAKE_CXX_COMPILER_VERSION に基づいて切り替える必要があります。#103980 (Alexey Milovidov).
  • libarchive を 3.8.6 から 3.8.7 に更新しました。#104047 (Robert Schulze).
  • mongo-c-driver を 2.3.0 に更新しました。#104300 (Raúl Marín).
  • 22.x 向けに LLVM の dependencies を更新しました。#104381 (Joshua Carp).
  • Linux 専用の #if ガードを削除し、移植性のある POSIX の posix_openpt / grantpt / unlockpt を使用することで、埋め込み client と PTY ディスクリプタ class が macOS および FreeBSD でもビルドできるようにしました。#104436 (Alexey Milovidov).
  • librdkafka をバージョン 2.14.1 にアップグレードしました。#105222 (János Benjamin Antal).

ClickHouse リリース 26.4、2026-04-30。プレゼンテーションビデオ

後方互換性を持たない変更

  • IN 演算子は、Bool 型に対して厳密な値セマンティクスを使用するようになりました。セット内の 01 の値のみが Bool 値に一致します。以前は、IN セット内の 255 を超える数値が Bool との比較時に誤って true に丸め込まれていたため、SELECT CAST(1, 'Bool') IN (256) は 1 を返していました。現在は正しく 0 を返します。#92980 をクローズしました。#93115 (Ashrith Bandla).
  • H3 ライブラリが v4 に更新され、長さ、面積、その他の計算の精度が向上しました。新しい結果は以前の結果と異なるため、この変更には後方互換性がありません。#100348 (Alexey Milovidov).
  • WITH 式リストの要素で、SELECT をクォートなしの識別子として使用することを禁止しました。#101059 (Aruj Bansal).
  • このパッチでは、merge テーブルの仮想カラムの扱いが変更されます。基になるテーブルに _table または _database が含まれている場合、これらのカラムはストレージから読み取られます。含まれていない場合は、読み取りステップの後に expression ステップを使って補完されます。#101742 (Mikhail Artemenko).
  • IN 演算子は、複合型 (TupleArrayMap) 内での情報損失を伴う Decimal 変換も拒否するようになり、トップレベルの scalar 比較と一貫した動作になりました。以前は、精度チェックはトップレベルの scalar 値に対してのみ適用されていました。たとえば、CAST('33.3', 'Decimal64(1)') IN (33.33) は正しく 0 を返していましたが、CAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33]) は、情報損失を伴う変換が Array 内で発生していたため、誤って 1 を返していました。現在はどちらの場合も正しく 0 を返します。#101812 (Nihal Z. Miaji).
  • HTTP 接続による認証前のメモリ使用量を制限するため、デフォルトの http_max_fields を 1,000,000 から 1,000 に、http_max_field_name_size を 128 KB から 4 KB に引き下げました。http_max_request_header_size および http_headers_read_timeout 設定を追加しました。以前のより高い上限を利用しているユーザーは、設定で元に戻すことができます。#103285 (Sema Checherinda).

新機能

  • メモリ制限に達した際、ハッシュ結合および並列ハッシュ結合を Grace Hash Join に変換することで、自動的にディスクへ書き出すようにしました。この動作は max_bytes_before_external_join で制御されます。 #97813 (János Benjamin Antal).
  • Arrow Flight SQLのサポートを追加しました。 #91170 (Yakov Olkhovskiy).
  • Keeper を利用したスナップショット進捗の追跡機能を備えた Paimon テーブルエンジンの増分読み取りサポートを追加し、paimon_target_snapshot_id による特定スナップショットの差分読み取りに対応するとともに、型マッピング、パーティションプルーニング、増分読み取りシナリオのテストカバレッジを拡充しました。 #93655 (XiaoBinMu).
  • stem 関数は実験的機能ではなくなりました (以前は、設定 allow_experimental_nlp_functions を有効にする必要がありました) 。 #102399 (Jimmy Aguilar Mena) 。stem 関数を使うと、StringFixedStringArray([Fixed]String)NullableLowCardinalityConst 型のカラム内にあるすべての単語/トークンを簡単に語幹化できるようになりました。 #99137 (Jimmy Aguilar Mena) 。
  • 互換性設定 use_strict_insert_block_limits において、まとめる処理での max_insert_block_size_rowsmax_insert_block_size_bytesmin_insert_block_size_rowsmin_insert_block_size_bytes の新しい動作を実装しました。#94207 (Kirill Kopnev) 。
  • 各ラグに対する数値 Array の正規化自己相関を計算する関数 arrayAutocorrelation(arr [, max_lag]) を追加しました。整数、浮動小数点数、Decimal の Array 型をサポートします。 #94776 (Wenyu Chen) 。
  • SQL関数 obfuscateQuery を追加しました。#98010 をクローズしました。#98305 (Xuewei Wang)。
  • Dictionary の属性として、Map および JSON/Object 型をサポートしました。これにより、FLAT レイアウトと HASHED レイアウトの両方で、Dictionary に Map(String, String)、Map(String, Array(String))、JSON、Nullable(JSON) などの複雑な型を保存し、取得できるようになりました。#98627 (yanglongwei).
  • 新たに2つのMergeTree設定 — replicated_fetches_min_part_levelreplicated_fetches_min_part_level_timeout_seconds — が追加され、レプリカは新規に挿入されたばかりの (未マージの) パーツをピアから取得せずに済むようになり、大量インジェスト時のレプリケーション負荷を軽減できます。 #98625 (tanner-bruce).
  • JSONAllPaths と bloom_filter、tokenbf_v1、ngrambf_v1、および text (転置) 索引タイプを使用した、JSON カラム向けの MergeTree スキップ索引のサポートを追加しました。これにより、各グラニュールに含まれる JSON パスの集合に基づいてグラニュールをスキップできるようになりました。#98886 (Pavel Kruglov) 。
  • printf 関数が非定数のフォーマット文字列をサポートするようになり、カラムの値に基づいて、行ごとに異なるフォーマットパターンを使用できるようになりました。#98991 (Yash ).
  • データを挿入順に再編成する新しいプロジェクション索引 commit_order が追加されました。#99004 (Mikhail Artemenko) 。
  • 検索語がテキスト文字列内に出現した箇所を HTML タグ (デフォルトは <em>/</em>) で囲む highlight 関数を追加しました。ASCII の大文字・小文字を区別しない照合、重複する一致箇所の自動マージ、開始タグ/終了タグのカスタマイズに対応しています。#99131 (Peng).
  • 正規化クエリハッシュ単位のクォータを実装し、公開 ClickHouse サービスを濫用から保護します。1. クォータキーの型として NORMALIZED_QUERY_HASH をサポート - 一意の正規化済みクエリごとに個別のクォータバケットを設けることで、CREATE QUOTA q KEYED BY normalized_query_hash はそれぞれの異なるクエリを独立して追跡します。2. クォータリソース型として QUERIES_PER_NORMALIZED_HASH をサポート — これにより、一定期間内における単一の正規化済みクエリの最大実行回数を制限できるため、MAX queries_per_normalized_hash = 100 によって、どのクエリパターンも 100 回を超えて実行できなくなります。 #99586 (Alexey Milovidov).
  • ユーザーは NATURAL JOIN 構文を使って JOIN クエリを記述できるようになりました。これにより、同じ名前のカラム同士が自動的に対応付けられ、結果ではそれらのカラムの重複が排除されます。#99840 (Peter Nguyen).
  • SET TIME ZONE 'tz'SET session_timezone の別名としてサポートしました。#99883 (phulv94).
  • Web UI (play.html) でパラメータ化クエリがサポートされるようになりました。{name:Type} のようなクエリパラメータが検出されると、その値を入力するための入力フィールドが表示されます。#100041 (Alexey Milovidov).
  • FROM 内のテーブル式として、SQL 標準の VALUES 句をサポートしました。たとえば、SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val) のように使用できます。#100143 (Desel72).
  • EXTRACT 演算子に、PostgreSQL 互換の単位 EPOCHDOWDOYISODOWISOYEARWEEKCENTURYDECADEMILLENNIUM を追加しました。あわせて、従来はエラーになっていた EXTRACT(WEEK FROM date) も修正しました。#100274 (Alexey Milovidov) 。
  • TO 範囲修飾子付きの SQL 標準複合インターバルリテラル (例: INTERVAL '1:30' HOUR TO MINUTE) のサポートが追加されました。内部的には、インターバルの和に分解されます。#100453 (Desel72).
  • HTTP 接続プールソケットのカーネル TCP の受信・送信バッファメモリ (sk_rmem_alloc, sk_wmem_alloc) について、接続グループごとの p50/p75/p90/p95 パーセンタイルおよび totals として報告される非同期メトリクスを追加しました。#100575 (Sema Checherinda) 。
  • ClickHouse Keeper 向けの jemalloc profiling Web UI を追加しました。HTTP 制御ポートの /jemalloc で利用できます。#100606 (murphy-4o) 。
  • 順序付きモードおよび順不同モード向けのコマンド SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x' を実装しました。#100709 (Bharat Nallan) 。
  • JSON カラム内のすべての値を Array(String) として返す関数 JSONAllValues を追加しました。値はテキスト表現にシリアライズされ、パス名順に並べられます。JSON カラム上の JSONAllValues 式に対するテキスト索引のサポートも追加しました。JSONAllValues(json_column) にテキスト索引を作成すると、JSON サブカラムに対するクエリのフィルタ条件 (例: json_column.key1 = 'value') に自動的に使用されます。#100730 (Anton Popov).
  • 入力フォーマットで大文字・小文字の区別を異なる方式で扱えるようにする新しい設定 input_format_column_name_matching_mode を追加しました。#99346 (manerone) 。
  • clickhouse-keeper-clientwatch コマンドを追加し、getexistsls コマンドでの watch をサポートしました。#100834 (Den Kalantaevskii) 。
  • ClickHouse Keeper に getChildrenRecursive (ListRecursive) リクエストを、clickhouse-keeper-clientlsr コマンドを追加しました。これにより #99916 が解決されます。#100998 (Konstantin Vedernikov) 。
  • 二次元配列 (行列) を受け取り、転置を行う新しい関数 arrayTranspose を追加しました: SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov).
  • auto_statistics_types mergetree 設定のデフォルト値は 'minmax, uniq' です — 新しいテーブルでは、適切なすべてのカラムに対して minmax および uniq の統計情報が自動的に作成されます - materialize_statistics_on_insert のデフォルトは false です — 統計情報は insert 時ではなくマージ時に構築されるようになり、insert のオーバーヘッドが削減されます。以前の動作に戻すには、SET materialize_statistics_on_insert = 1 を使用してください。 #101275 (Han Fei).
  • レプリカ間のレプリケーションラグによるデータ欠落を減らすため、materialized view の依存チェーン向けに prefer_dependency_replica refresh 設定を追加しました。#101591 (Seva Potapov).
  • フレーズ検索 (連続したトークン列) 向けの hasPhrase (別名 matchPhrase) 関数を追加しました。検索は総当たりで行われるため、現時点ではテキスト索引にはまだ対応していません。#101997 (Elmi Ahmadov) 。
  • S3 GET リクエスト接続の存続時間と消費バイト数を観測するための s3_read_request_duration_microseconds および s3_read_request_bytes ヒストグラムメトリクスを追加しました。これらは system.histogram_metrics と Prometheus エンドポイントで確認できます。#102058 (Sema Checherinda).
  • Date および Date32 の値に TimeTime64 の値を + 演算子で加算し、DateTime または DateTime64 の結果を得られるようになりました。たとえば、SELECT toDate('2024-01-15') + toTime('14:30:25')2024-01-15 14:30:25 を返します。結果はセッションのタイムゾーンで計算され、範囲外の結果は date_time_overflow_behavior 設定に従って処理されます。#95914 をクローズしました。#102421 (Nihal Z. Miaji).
  • テキスト索引は GA となり、compatibility 設定にかかわらず常に有効のままとなったため、バックアップの復元時や互換性モードでの実行時に予期せず無効化されるのを防ぎます。#101518 (Nikita Fomichev).

実験的機能

  • Icebergテーブル向けに ALTER TABLE ... EXECUTE remove_orphan_files を追加し、オブジェクトストレージ内の未参照ファイルを特定して削除できるようにしました。#99127 (murphy-4o).
  • join の並べ替えに使用される統計情報をランダム化する query_plan_optimize_join_order_randomize 設定を追加しました。テスト用途に有用です。#100643 (Vladimir Cherkasov).
  • ClickHouse に AI 関数のサポートを追加し、ユーザーが SQL を使って OpenAI および Anthropic のエンドポイントを呼び出せるようにしました。aiGenerate はその最初の関数です。#100831 (George Larionov).
  • ClickHouse で LLM API を利用するための AI 関数 aiClassifyaiExtractaiTranslate を追加しました。#100832 (George Larionov).
  • 新しいシステムテーブル system.histogram_metric_log を追加しました。これはすべてのヒストグラムメトリクス (例: S3/Azure のレイテンシー、Keeper リクエスト処理段階の所要時間) のスナップショットを定期的に取得します。あわせて、system.histogram_metricsvalue カラムは、より柔軟で Prometheus のデータモデルとの互換性が高いため、Float64 に変更されます。#103046 (Miсhael Stetsyuk). このテーブルの構造は、今後のリリースで変更される可能性があります。

パフォーマンス改善

  • ClickHouse は、min/max 統計に基づいて、SELECT クエリでデータパーツ全体をスキップできるようになりました。#94140 (zoomxi) 。
  • 完了済みの mutation がある ReplicatedMergeTree テーブルに対する readonly 操作時のロック競合を軽減しました。#95771 (Eduard Karacharov) 。
  • プロジェクションの読み取り時に optimize_read_in_order を考慮するようにしました。#89453 をクローズしました。#95885 (Andrey Zvonov) 。
  • ハッシュ結合および同時実行ハッシュ結合にいくつかの改善を加えました。 #96663 (Yarik Briukhovetskyi).
  • 入力データの重複がほとんどない場合は、LowCardinality カラムの最適化を無効にすることで、DISTINCT 変換を最適化しました。 #97113 (Nihal Z. Miaji) 。
  • #97723 による LIKE クエリのパフォーマンス最適化。これらのクエリでテキストインデックスを使用できるようになりました。#98149 (Elmi Ahmadov) 。
  • ベクトル化された数学関数 (explogsigmoidtanh) が、AArch64 (NEON/SVE を使用) および FreeBSD/Darwin で高速化されました。これらの環境では、以前は低速な scalar のフォールバック実装が使用されていました。#98230 (Raúl Marín) 。
  • MergeTree の主キーカラムを対象に、^(abc-1|abc-2) のようなリテラル文字列の正規表現オルタネーションでフィルタするクエリでは、選択肢が共通のプレフィックスを持つ場合に、主キーのプルーニングを利用できるようになりました。#98988 (Yash ).
  • ORDER BY ... LIMIT の top-k 動的フィルタリングを、NullableStringCOLLATE 型にも対応できるよう一般化しました。#99033 (murphy-4o).
  • 値の範囲が小さいInt32およびInt64キーでのハッシュ結合を、直接索引型ハッシュテーブルを使用することで高速化しました。#99275 (Hechem Selmi).
  • 単一の辞書を使用する LowCardinality カラムに対する非連続クエリを高速化しました。 #99285 (Ivan Babrou).
  • 内部ループをデバーチャライズすることで、Float64 カラムに対する var*Stable および stddev*Stable 関数を高速化しました。注: これにより、浮動小数点演算の結果が ULP レベルで変化するコンパイラ最適化 (FMA/レジスタ) が有効になります。#99460 (Riyane El Qoqui).
  • 32/64 バイトの入力に対して、最適化された Firedancer の base58 エンコードを使用するようになりました (base58Encode では自動) 。デコード結果が 32/64 バイトの場合は、最適化された base58 デコードも使用できるようになりました (base58Decode('...', 32) などで明示的に指定) 。#99461 (Joanna Hulboj).
  • リンカーのセクション単位の最適化 (-ffunction-sections, -fdata-sections, --icf=all) を有効にし、バイナリサイズを削減するとともに、命令キャッシュの利用効率を向上させます。#99474 (Alexey Milovidov) 。
  • 多数のコアを搭載したマシンで、集約を伴う短時間のクエリにおける負のスケーリングを修正しました。クエリが少数のマークしか読み取らない場合、集約後にパイプラインが max_threads まで拡張されなくなり、ほぼ空のストリームが大量に生じることによるオーバーヘッドを回避します。 #99493 (Alexey Milovidov).
  • 読み取りタスクサイズを適切に選択することで、並列レプリカ使用時のクエリのパフォーマンスを改善しました。 #99801 (Nikita Taranov).
  • ユーザー空間ページキャッシュ経由でリモートファイルを読み込む際に、先読みを有効にしました。 #99919 (Alexey Milovidov).
  • サブカラムの列挙時に、String .size サブカラムの不要な計算を回避。#99941 (Pavel Kruglov) 。
  • ホテルから、非常に多数のレプリカを持つクラスターに接続して作業する際でも、clickhouse-client のプログレスバーが過度に揺れないようにしました。#100145 (Alexey Milovidov).
  • ページキャッシュが有効な場合に clickhouse-localMemoryWorker を起動し、ユーザー空間のページキャッシュを実際に利用できるようにしました。 #100306 (Alexey Milovidov).
  • LIMIT句をUNION ALLにプッシュダウンすることで、クエリを最適化します。#100364 (Alexey Milovidov) 。
  • ORDER BY における String および FixedString カラム比較の JIT コンパイル対応を追加し、文字列を多く含むソートキーでのマージフェーズのソート性能を 6〜17% 向上させました。@lgbo-ustc との共著です。#100577 (Raúl Marín) 。
  • 新しい read_in_order_use_virtual_row_per_block 設定とあわせて read_in_order_use_virtual_row を有効にすると、MergeTree から読み取った各 block の後に仮想行の境界情報が出力されるようになり、WHERE/PREWHERE/JOIN によってデータが完全に除外されるパーツについて、マージ処理がストリームの途中でソースの優先順位を付け替えられるようになりました。#99945 をクローズしました。#100603 (Vladimir Cherkasov).
  • itoa の高速パスを dragonbox 互換の丸め処理で拡張し、大きな整数値の Float-to-String 変換を高速化しました。#100649 (Raúl Marín) 。
  • dragonboxzmij に置き換え、Float-to-String 変換を 1.5~3 倍高速化。#100650 (Raúl Marín) 。
  • ソフトウェア除算をBarrett還元に置き換え、変換ループをアンロールすることで、Int128/UInt128 から文字列への変換を高速化しました。#100671 (Raúl Marín) 。
  • uniqExact の並列マージで余分なスレッドが生成されるのを防ぎました。#100686 (Jiebin Sun) 。
  • uniqExact のバッチ並列マージに対応しました。#100687 (Jiebin Sun).
  • 基になる MergeTree テーブルを持つシンプルなビューに対するクエリで、並列レプリカ実行時の並列化が向上しました。 #100815 (Igor Nikonov).
  • parallel_replicas_allow_view_over_mergetree=1 の場合、単純なビュー (MergeTree テーブル上の対象となる UNION ALL ビューを含む) に対する並列レプリカのサポートを追加しました。これにより、ビューの内側のクエリではなく外側のクエリを並列化できるようになり、ノード間でのクエリの並列実行が向上します。#100958 (Igor Nikonov)。
  • IN を含むフィルターがクエリプランに存在する場合の、full_sorting_merge における主キー順での読み取りを最適化。 #101261 (Nikita Taranov).
  • サンプリング設定をキャッシュし、メモリトラッカー階層全体をたどらないようにすることで、割り当て/解放を最適化しました。 #101267 (Azat Khuzhin).
  • deduplicate_insert = 'enable' (26.2以降のデフォルト設定) で発生していた INSERT の重大な性能低下を修正しました。データハッシュの計算をまとめる処理から sink へ遅らせ、updateHashWithValueRange を使ったバッチ単位のカラムハッシュ計算を行うことで、22カラム・500万行におけるオーバーヘッドを約2.5秒から約0.5秒に削減しています。#101494 (Sema Checherinda) 。
  • try_lock を使用して競合のないロック取得の計測を回避し、保持時間の計測を削除することで、プロファイル対象ロックのオーバーヘッドを削減しました。#101502 (Antonio Andelic) 。
  • arrayDotProduct の手書きの AVX-512 intrinsic を、プラットフォーム非依存で自動ベクトル化可能なループに置き換え、AVX2 と ARM NEON のサポートを追加しました。#101571 (Peng) 。
  • エスケープされた文字列 (例: '{\'key\':1}') として値が渡された場合のMapArrayTupleカラムに対するINSERT VALUESのパフォーマンスを改善し、SQL式パーサーへの不要なフォールバックを回避しました。#102119 (Joanna Hulboj).
  • RabbitMQ テーブルエンジンで CPU 使用率が過剰になる問題を修正しました。#102711 (Jaap Elst) 。
  • JOIN 順序オプティマイザは、既存の JOIN 条件から推移的な等値 JOIN 述語を推論できるようになりました。たとえば、A.x = B.x AND B.x = C.x が与えられた場合、A.x = C.x という等価関係も認識されるため、オプティマイザは推移的に接続されたテーブル間の直接 JOIN も検討できます。これにより、ディメンションテーブルが共通のファクトテーブルを介して接続されるスター型およびスノーフレーク型のスキーマでは、実行計画の品質が向上する可能性があります。この機能は、新しい enable_join_transitive_predicates 設定で制御されます (デフォルトではオフ) 。 #98479 (Alexander Gololobov).
  • マージを並列に事前キャンセルすることで、TRUNCATE DATABASE TABLES LIKE を最適化しました。#98597 (Shaohua Wang) 。
  • multiply が単調性に対応し、key * constant 式で主キーの絞り込みが可能になりました。#98983 (Amos Bird) 。
  • cacheディクショナリでは、hasKeys で排他ロックを取得しなくなりました。cache の読み取りに共有ロックを使用することで、ロック競合が軽減されます。 #100796 (liuguangliang).
  • VIEW により多くの最適化を適用できるようにするため、クエリツリー内で VIEW サブクエリをインライン化。 #100830 (Dmitry Novik).
  • サーバー起動時のcacheの読み込みを最適化しました。 #101500 (Kseniia Sumarokova).
  • 述語の選択性が十分に高い場合に、FINAL を伴う ReplacingMergeTree で遅延カラム実体化を実装しました。#101647 (Nikolai Kochetov).
  • optimize_rewrite_array_exists_to_has 最適化を再度有効化しました (23.10 以降、デフォルトでは無効) 。これにより、arrayExists(x -> x = elem, arr) は大幅に高速な has(arr, elem) に書き換えられます。また、配列の要素型と elemhas に対して互換性がない場合 (例: DateString) は、この書き換えを正しくスキップするようになったため、以前は失敗していたクエリも引き続き動作します。#71431 をクローズしました。#100944 (Alexey Milovidov) 。

改善

  • EXPLAIN PLAN pretty=1 の出力を改善: 最上位クエリの出力カラムを表示し、推定結果行数とローカリティ付きで JOIN の関係を表すラベル/シンボルを表示するほか、JOIN/ソースの各ステップについてステップごとの出力カラムも含めるようになりました。この変更は #98117 の Information Deficit の部分に対応しています。#99462 (Kirill Kopnev).
  • MergeTree テーブル設定 share_nested_offsets (デフォルトは true) を追加しました。false に設定すると、ドット付きの名前 (例: n.an.b) を持つ Array カラムは、従来の Nested セマンティクスの一部としてオフセットファイルを共有し、配列サイズが同一であることを検証するのではなく、独立したカラムとして扱われます。#98416 (Amos Bird).
  • users.xml/yaml の設定で複数の認証方法を指定できるようになりました (SQL では以前から可能でした) 。#91998 (Flip-Liquid).
  • TLS を使用している Raft のノード間接続を自動的に再読み込みするようにしました。 #93455 (Evgeny).
  • cast_keep_nullable を拡張し、Dynamic/JSON 型でも動作するようにしました。これを設定すると、Nullable にできる型から NULL をキャストした場合は NULL が返され、それ以外では NULL に対して CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN エラーが発生します。#96504 (Seva Potapov) 。
  • オブジェクトプールの導入により、内部データ構造 (ISerialization オブジェクト) のメモリ使用量を削減しました。#96563 (Nikita Mikhaylov) 。
  • keeper-client の XML 設定で password および identity フィールドがサポートされました。#96800 (Grigorii Sokolik).
  • Unity Catalog 向けの Iceberg への書き込みを改善しました。#98162 (Konstantin Vedernikov) 。
  • INSERT 時にプロジェクションパーツを同期的にファイナライズできるようにする設定 finalize_projection_parts_synchronously を追加しました。これにより、デフォルトでは既存の非同期動作を維持したまま、多数のプロジェクションを持つテーブルでピークメモリ使用量を削減できます。 #98228 (Amos Bird).
  • 各プロジェクションのマージ/再構築にかかった時間をミリ秒単位で記録する projections_duration_ms カラムを system.part_log に追加しました。#98292 (Amos Bird) 。
  • KILL QUERY および clickhouse-client でのクエリキャンセル (Ctrl+C) によって、ExpressionTransform と NumbersRangedSource を使用するクエリのキャンセルを改善しました。#98908 (Roman Vasin) 。
  • ハードコードされた source_table_engines のリストを、StorageFactory::getAllStorages() による実行時ルックアップに置き換えました。これにより、これまで漏れていた一部のテーブルエンジンに対するアクセスチェックが追加され、#71544 を解消しました。#98984 (pufit).
  • Variant と Dynamic で型不一致が発生した際の動作 (throw または NULL を返す) を制御する設定を追加しました。 #99085 (Bharat Nallan).
  • Iceberg と Spark の互換性を改善しました。ストレージパスとメタデータパスの混在使用によって生じていた一貫性のないパス処理を修正し、Iceberg テーブルが記録するテーブルロケーションは URL または絶対パスのいずれかでなければならないようにしました。また、一部の ClickHouse リーダーが走査後のバイト数カウントをサポートしていないため、Azure でファイルサイズをカウントするためのフォールバックを追加し、Spark と互換性のある形で version-hint.txt を処理するようにしました。さらに、今後パスの型を取り違えにくくする型レベルの抽象化を導入し、中間的なアップロード/ダウンロードなしでエンジン間の相互運用性を検証する Azure および Local 向けのテストを追加しました。加えて、position deletes の扱いを修正しました。これは以前、不適切な場面でパス推論ヒューリスティクスに依存していました。 #99163 (Daniil Ivanik). #100420 (Daniil Ivanik).
  • https://github.com/ClickHouse/ClickHouse/pull/92844 で導入された IPartitionStrategy::cached_result におけるレースコンディションの可能性を修正しました。#99400 (Arthur Passos).
  • ユーザーは、ArrowフォーマットでClickHouseのIntervalデータ型を書き出せるようになりました。#99519 (Peter Nguyen).
  • Arrow および Parquet フォーマットでの UUID データ型のインポートとエクスポートがネイティブにサポートされました。これにより、ユーザーは手動で文字列に変換したり回避策を講じたりすることなく、ClickHouse と他のデータツールの間で UUID データを直接クエリおよび転送できるようになりました。トップレベルの UUID に対する自動的な論理推論と、ネストされた UUID に対する明示的なスキーマヒントもサポートされています。 #99521 (Ivan).
  • オブジェクトストレージ上の7zアーカイブをサポート。#70968 をクローズ。#99600 (Alexey Milovidov) 。
  • オブジェクトストレージ (S3Azure など) のファイル一覧取得・読み取りパイプラインを内部的に把握できるよう、ObjectStorageListedObjectsObjectStorageGlobFilteredObjectsObjectStoragePredicateFilteredObjectsObjectStorageReadObjects の ProfileEvents を追加しました。#99778 (Sema Checherinda) 。
  • 基になるすべての distributed/remote テーブルに存在しないカラムをクエリした際に、merge テーブル関数が UNKNOWN_IDENTIFIER エラーで失敗する問題を修正しました。#99833 (Alexey Milovidov).
  • ReplicatedMergeTree のミューテーションの総実行時間メトリックに、commit time が再び含まれるようになりました。#96376 以降は除外されていました。#99936 (alesapin).
  • MetadataStorageFromDisk に、削除待ちのブロブオブジェクト向けの先行書き込みログを追加し、オブジェクト削除時のメタデータとリモートオブジェクトストレージの間の耐久性と整合性を向上させました。#100019 (Maksim Kita).
  • サーバーの環境変数にアクセスできないようにするため、組み込みクライアント (SSH および WebSocket プロトコル) で AI SQL 生成 (?? コマンド) を無効化しました。#100290 (Alexey Milovidov) 。
  • カタログを使った Iceberg への insert のインターフェイスを変更しました。設定 storage_catalog_typestorage_aws_access_key_id などは非推奨になりました。#100334 (Konstantin Vedernikov).
  • clickhouse-client に貼り付ける際、タブを 4 つのスペースとして扱うようにしました。#100405 をクローズしました。#100416 (Raúl Marín).
  • show_data_lake_catalogs_in_system_tables が無効な場合、「もしかして …」というテーブル候補のヒントを表示するために、リモートのデータレイク カタログ全体をスキャンしないようにしました。#100452 (Alsu Giliazova) 。
  • パーティションプルーニング後に distributed_index_analysis_min_indexes_bytes_to_activate を適用します。#100477 (Azat Khuzhin) 。
  • 空の IN/NOT IN 句の使用時に、Parquet の bloom filter プッシュダウンで発生するアサーション失敗を修正しました。#100543 (zoomxi) 。
  • MinMaxカラム STATISTICS は、最小値と最大値を Float64 ではなく Field (型付き) として格納するようになりました。シリアライズされたフォーマットには、値に加えてカラムの型名も含まれます。STATISTICS ファイルのバージョンは V2 に更新され、以前のバージョンで書き込まれたファイルは再マテリアライズ (ALTER TABLE … MATERIALIZE STATISTICS ALL) が必要です。修正 #53140#100605 (Han Fei).
  • Consumer のクローズ時に発生するデッドロックの修正を含むよう、cppkafka を更新しました。#100612 (Azat Khuzhin) 。
  • Iceberg でデータファイルをパースする際に使用されるオブジェクト情報に、マニフェストファイルからパースしたファイルの行数とバイト単位のファイルサイズが含まれるようになりました。 #100645 (Daniil Ivanik).
  • cache メモリアリーナの分離を制御できるようにするため、use_separate_cache_arena 設定パラメータが追加されました。#100664 (Seva Potapov) 。
  • Apache Arrow の StringView および BinaryView データ型を ClickHouse の String カラムにインポートするネイティブサポートが追加され、Arrow ベースのインジェストとの互換性が向上しました。#100762 (Ivan).
  • いくつかの Keeper サーバー設定が、実行時に設定ファイルが変更された場合にホットリロードされるようになりました: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads。 #100773 (Michael Kolupaev).
  • リリースビルドで、プロファイルイベント MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytes を増加させました。 #100899 (Pavel Kruglov).
  • Cgroupv2 のメモリ追跡で、カーネルメモリから slab_reclaimable が除外されるようになり、回収不能なメモリ使用量をより正確に把握できるようになりました。#100901 (Antonio Andelic) 。
  • use_partition_pruning = 0 は、パーティションキーに基づくプルーニングの無効化に加え、MinMax 索引のプルーニングとパーティションキーのカラムに対する count 最適化も無効にするようになりました。#100904 (Nihal Z. Miaji).
  • EXPLAIN [PLAN]pretty=1 で、式が人間にとって読みやすい形式で表示されるようになりました。 #100927 (Kirill Kopnev).
  • accurateCastOrNullaccurateCastOrDefault が、Nullable 要素を含むネストした Tuples を含め、変換先の Tuple 型をサポートするようになりました。これまでは TupleNullable の内部に置けなかったため、これらの関数では変換先に Tuple を指定できませんでした。#100820 をクローズしました。#100942 (Nihal Z. Miaji).
  • ライトテーマとダークテーマを切り替えた際に、Play UIでチャートが重複表示される問題を修正しました。 #101058 (Alexey Milovidov).
  • chdig を v26.3.1 に更新 (perfetto UI、CPU/メモリ/マージ処理/クエリのサマリーへのスパークライン追加、system.warnings、ログ内の正規表現検索) 。#101092 (Azat Khuzhin) 。chdig を v26.4.3 に更新 (perfetto の改善、pastila.nl 経由の共有に関する修正、フレームグラフの差分、リアルタイムでの設定変更) 。#103145 (Azat Khuzhin) 。
  • これで、SELECT クエリの前にある WITH 句で末尾カンマを使えるようになりました。#101093 (Aruj Bansal) 。
  • compact パーツ内で圧縮ブロックをどのように編成するかを制御する compress_per_column_in_compact_parts MergeTree setting を追加しました。true の場合 (デフォルトで、現在の動作を維持) 、各カラムが新しい圧縮ブロックの先頭となるため、必要なものだけを選択的に展開できます。false の場合は、granule 内のすべてのカラムが同じ圧縮ブロックにまとめられるため、常にすべてのカラムを読み取るワークロードでは圧縮率と読み取り性能が向上します。#101114 (Amos Bird).
  • Play UIで、テーブル情報のバルーンを行全体ではなく、テーブル名にホバーしたときのみ表示するようにしました。#101118 (Alexey Milovidov).
  • Play UI のサイドバーに engine ごとのアイコンを追加し、table 一覧の UX を改善しました。#101134 (Alexey Milovidov) 。
  • ArrowArrowStreamORC、および従来のParquetフォーマットでNullable(Tuple)をサポート。#101272 (Nihal Z. Miaji).
  • web UI (play.html) で、TOTALS 行をテーブルのフッターに表示。#101286 (Alexey Milovidov).
  • Web UI (play.html) でマルチクエリモードに対応:複数のクエリを一度に実行でき、SELECT系クエリは並列で実行され、各クエリの結果が個別に表示されます。#101290 (Alexey Milovidov).
  • 結果テーブルの Web Component 化に伴って発生していた、play.html の Web UI におけるカラムのリサイズ不具合を修正しました。#101295 (Alexey Milovidov) 。
  • 一定の時間間隔ごとに、MEMORY_LIMIT_EXCEEDED 発生時の jemalloc プロファイルの flush 回数を制限できるようになりました。#101396 (Azat Khuzhin).
  • Keeper 設定 nuraft_streaming_mode (デフォルトは false) 、nuraft_max_log_gap_in_streamnuraft_max_bytes_in_flight_in_stream を追加しました。#90743 をクローズしました。#101427 (Kseniia Sumarokova) 。
  • カーネル OS のページキャッシュと ClickHouse のユーザー空間ページキャッシュの両方を除いた cgroup のメモリ使用量を報告する非同期メトリクス CGroupMemoryUsedWithoutPageCache を追加し、MemoryResidentWithoutPageCache と同様の扱いにしました。あわせて、CGroupMemoryUsed メトリクスの説明も明確にしました。#101513 (Francesco Ciocchetti).
  • SQL 標準の OVERLAY 関数構文向けに、パーサーレベルのシンタックスシュガーを追加しました。overlay 関数自体はすでに存在しており、今回の変更で PLACINGFROMFOR を区切りとして使うキーワードベースの形式もサポートされます。#101681 (Desel72).
  • information_schema.tables システムテーブルに、このテーブルの既存の大文字の別名と同様のカラム別名 INDEX_LENGTH を追加しました。#101705 (Robert Schulze).
  • システムテーブル information_schema.tables が、非アクティブなテーブルパーツを無視するようになりました。これにより、表示されるテーブルサイズの値がより実態に即したものになります。#101706 (Robert Schulze) 。
  • ngrams 関数は、無効な N-gram 長を受け付けなくなりました。例: SELECT ngrams('abc', 0) はエラーを返すようになりました。 #101922 (Robert Schulze).
  • #91820 および #90837 のフォローアップ: エラーメッセージから未対応のアルゴリズムを除外し、FIPS builds で FIPS 固有のテストを実行するようにしました。#102067 (Mikhail f. Shiryaev).
  • Web UI (play.html) でセルの高さを3行までに制限し、クリックで展開できるようにしました。 #102154 (Alexey Milovidov).
  • S3 エンドポイントで (virtual/path) スタイルを強制できる新しいオプションを追加しました。#82019#76007 を解決します。https://github.com/ClickHouse/ClickHouse/pull/83168 の続きです。#102378 (Konstantin Vedernikov).
  • restore_replace_external_engines_to_null 設定により、失敗したり外部接続を開始したりする代わりに、外部エンジン (例: DataLakeCatalogMySQLPostgreSQLS3) を使用するデータベースの復元もスキップするようになりました。#102400 (Nikita Fomichev) 。
  • hasPhrase 関数で、HINT モードによるテキスト索引解析をサポートしました。#102438 (Elmi Ahmadov) 。
  • MATERIALIZE STATISTICS ALL 実行時の LOGICAL_ERROR を修正するため、ColumnDependency で STATISTICS を読み取り専用として扱うようにした。 #102627 (Konstantin Bogdanov).
  • keeper-as-serverモードで system.asynchronous_metric_log を作成し、データを格納します。 #102664 (Miсhael Stetsyuk).
  • default_system_log_flush_policy.skip_alias_columns 設定オプションを追加し、システムログテーブルで ALIAS カラムを省略できるようにしました。これにより、ALIAS カラムを受け付けない S3 バックエンドのシステムログの問題を修正しました。#102669 (Miсhael Stetsyuk).
  • システムテーブルでは自動統計を有効にしないでください。利用されることはほとんどありません。 #102862 (Han Fei).
  • LIKE 最適化で array トークナイザーをサポート。#102880 (Elmi Ahmadov) 。
  • リリースビルドでも MemoryAllocatedWithoutCheck を送信するようにしました。 #103064 (Azat Khuzhin).
  • system.stack_trace でスレッドごとの untracked_memory を表示。 #103065 (Azat Khuzhin).

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • 遅延マテリアライゼーションで返される不要なカラムが原因で発生する Block structure mismatch in stream エラーを修正しました。#95191 を修正。#96682 (Nikolai Kochetov)。
  • データマスキングポリシーに対する ON CLUSTER クエリの論理エラーを修正しました。#97594 (Bharat Nallan).
  • GCS上で Unity Catalog を使用する際のバグを修正しました。#98456 (Melvyn Peignon) 。
  • DataLakeCatalog は、auth_header 設定を検証する際に、サーバーの http_forbid_headers 設定を考慮するようになりました。#98827 (Michael Anastasakis).
  • S3 のブレース展開グロブにおける N+1 件の HeadObject 呼び出しを修正しました。#99219 (Konstantin Bogdanov) 。
  • エンジン自体も設定をサポートしている場合、CREATEクエリ内の設定変更を検証する。 #99279 (János Benjamin Antal).
  • ALTER TABLE UPDATE/DELETE が、式が EPHEMERAL カラムに依存する MATERIALIZED カラムを持つテーブルで Missing columns エラーにより失敗する問題を修正しました。#99281 (Yash ).
  • JDBC、ODBC、NATS の接続文字列に含まれる認証情報は、クエリログと SHOW CREATE の出力でマスクされるようになり、機密情報の意図しない露出を防げるようになりました。URI 形式の接続文字列 (例: {scheme}://{user}:{password}@{host}) では、パスワード部分のみがマスクされ、それ以外はデバッグしやすいよう引き続き表示されます。nats_token 設定もマスクされるようになりました。#99344 (János Benjamin Antal) 。
  • DD-month-YYYY フォーマットで、月名のプレフィックスで始まる単語を parseDateTimeBestEffort が誤ってパースしてしまう問題を修正しました。#99345 をクローズしました。#99350 (Pavel Kruglov).
  • アナライザ非使用時に TABLE_UUID_MISMATCH が無視されていた問題を修正しました。#99380 (Azat Khuzhin) 。
  • 同じリクエスト内で compatibility と一緒に送信された明示的な設定が、その値がサーバーのデフォルト値と一致している場合に、気付かれないまま無視されることがある不具合を修正しました。#99402 (Raufs Dunamalijevs).
  • Hive パーティションパス内で先頭にゼロが付いた数値が原因でエラーが発生していたケースを修正しました。 #98801#99458 (Yarik Briukhovetskyi).
  • 実行中の読み取りクエリと同時にテーブルが削除された際に発生する heap-use-after-free を修正 (過去90日間のCIで19件発生) 。 #99483 (Alexey Milovidov).
  • Keeper で、同じサーバー上の別の無関係なセッションがちょうど悪いタイミングで閉じられると、read request がハングし (その結果セッションがタイムアウトする) 得る不具合を修正しました。 #99484 (Michael Kolupaev).
  • パッチを適用する前に、カラム構造を検証するようにしました。 #99531 (Seva Potapov).
  • Dynamic カラムを持つテーブルのマージ中に、SYSTEM STOP/START MERGES を短時間で繰り返し切り替えた際に発生する、vertical merge の rows_sources アサーション失敗を修正しました。#99532 (Alexey Milovidov).
  • toWeek() における誤ったパーティションプルーニングを修正し、toYYYYMM(date) でパーティション化されたテーブルで WHERE toWeek(date, mode) = N を含むクエリが第49〜52週で空の結果を返していた問題を解消しました。#99542 (Takumi Hara).
  • JOIN によって生成された未参照の行がある ColumnReplicated を扱う関数で発生する例外を修正しました。#99564 (Hechem Selmi).
  • CLEAR COLUMN 実行時にプロジェクションが再構築されず、またクリアしたカラムに依存するマテリアライズドカラムが再評価されない問題を修正しました。この問題により、その後のマージで例外やデータ破損が発生する可能性がありました。 #99565 (Desel72).
  • ConditionSelectivityEstimator において、クエリが単一のスカラー クエリパラメータを指定した IN を使用し (例: WHERE col IN ({p:String})) 、対象のテーブルにカラム STATISTICS があり、use_statistics が有効になっている場合に発生していた例外 (Bad get: has Tuple, actual type String) を修正しました。#99614 (Ilya Yatsishin) 。
  • 不明なプロジェクションを含むパートは、永久に失われたものとしてマークすべきではありません。 #99623 (Sema Checherinda).
  • SYSTEM STOP MERGESSYSTEM START MERGES が同時実行された際に、vertical merge 中にまれに発生していた論理エラー例外を修正しました。 #99628 (Desel72).
  • マージ時にクラッシュを引き起こしていた injectRequiredColumns のダングリング参照を修正しました。 #99679 (Tuan Pham Anh).
  • 対象カラム型の範囲を超える数値を読み取る際に発生していた、Avro フォーマットリーダーの未定義動作を修正しました。これにより、オーバーフロー時には誤った値を黙って生成するのではなく、クエリが失敗するようになりました。#99697 (asyablue22).
  • executable テーブル関数の引数内にあるシェル形式のクォートのパースを修正しました。#99794 (Nikita Semenov) 。
  • NativeReader で、行数が一致しない Native format ストリームをデシリアライズする際に、abort が誤って発生する問題を修正しました。LOGICAL_ERRORINCORRECT_DATA に変更し、sanitizer/debug builds で abort() がトリガーされるのではなく、エラーがデータエラーとして処理されるようにしました。#99822 (Rahul Nair).
  • Tuple カラムのデシリアライゼーション中に、バイナリストリーム内のシリアライゼーション種別が DETACHED の場合に発生するプロセスの異常終了を修正しました。#99823 (Rahul Nair).
  • SLRU sub-queue promotion における競合状態が原因で、ファイルシステムキャッシュの動的リサイズ中に LOGICAL_ERROR 例外が誤って発生する問題を修正しました。 #99850 (Alexey Milovidov).
  • query_log とクライアント出力で、非同期 INSERT クエリの written_rowsread_rowsresult_rows が 0 と表示される問題を修正しました。#99879 (Sema Checherinda).
  • システムテーブルに対する内部クエリが ColumnConst でラップされたカラムを返す場合に、KILL QUERY で発生する例外 “Bad cast from type X to Y” を修正しました。#99881 (Alexey Milovidov) 。
  • untuple 引数内の相関サブクエリにおける論理エラーを修正しました。#99917 (Vladimir Cherkasov) 。
  • rightrightUTF8、またはその他の substring 関数を長さ INT64_MIN (-9223372036854775808) で呼び出した際に発生していた例外を修正しました。従来は整数オーバーフローにより未定義の動作を引き起こしていましたが、現在はこれらの関数が ARGUMENT_OUT_OF_BOUND error を正しく返すようになりました。#99934 (Jimmy Aguilar Mena).
  • これで ClickHouse は、Spark スタイルのテーブル (各ファイルが完全な絶対パスを持つ、または共通のテーブルパスからの相対パスを持つ場合) を適切に処理できるようになりました。 #92348 を修正しました。 #99935 (alesapin).
  • ALTER TABLE ... MODIFY QUERY で、ネストされたサブクエリに SETTINGS が含まれ、かつ ALTER 自体にも SETTINGS がある場合に発生する “Inconsistent AST formatting” 例外を修正しました。#99938 (Nikita Mikhaylov) 。
  • パフォーマンス退行が疑われるため、#97114 “子が 1 つの場合のチェックより前に join step の行数推定を移動” を元に戻しました。#99957 (Alexander Gololobov).
  • HEAD リクエストのレスポンスに Content-Length ヘッダーがない場合 (たとえば、GCS の展開的トランスコーディングが原因の場合) に、ClickHouse がファイルをスキップしてしまうことがある不具合を修正しました。#99971 (Yarik Briukhovetskyi).
  • NumericIndexedVector の aggregate states に偶数の整数定数を掛けた際に発生していたアサーション失敗 (デバッグビルドでは例外、リリースビルドでは誤った結果) を修正しました。原因は、pointwiseAddInplace 内でエイリアスされた Roaring bitmap に対して自己 XOR が行われていたことです。#99976 (Desel72).
  • join 変換後にキーの型が変わる場合でも、連鎖した JOIN USING を介する従来の filter pushdown で Unexpected return type 例外が発生しないようにしました。#99999 (Alexey Milovidov).
  • スカラー サブクエリが未解決のテーブル関数引数内で使用された際に発生する LOGICAL_ERROR 例外 “Unexpected node type for table expression … Actual IDENTIFIER” を修正しました。例: SELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1)))#100014 (Alexey Milovidov).
  • VALUES を伴う INSERT で、データの次の行に末尾SQLコメント (-- または /* */) があると失敗する問題を修正しました。コメントは別の行として解析されず、スキップされるようになりました。#100016 (Pratima Patel).
  • NULL の部分を含むタプルの比較時に arrayRemove で発生する例外を修正しました。#100017 (Alexey Milovidov) 。
  • system.asynchronous_inserts におけるユーザー間のデータ漏えいを修正しました。これまでは、テーブルに対する SELECT 権限を持つユーザーであれば、他のユーザーに属する保留中の非同期 INSERT エントリも閲覧できていました。現在は、SHOW_USERS 権限を持つユーザーを除き、エントリは現在のユーザーに基づいて絞り込まれます。#100024 (Shaohua Wang).
  • Time64 から UInt64 への CAST で、値が 24 時間に丸め込まれてしまうことがある問題を修正しました。#100025 (Yarik Briukhovetskyi) 。
  • CREATE DICTIONARY の定義に、存在しない関数を含むリスト値がある場合にローカルサーバーがクラッシュする問題を修正しました。#100036 (Yakov Olkhovskiy) 。
  • CSVMsgPack フォーマットで Nullable(Tuple) を正しく解析できない問題を修正しました。#99753 をクローズ。#100038 (Nihal Z. Miaji).
  • IN の右辺に WITH の関数式エイリアス (例: tuple(...)) を使用した際に、UNKNOWN_IDENTIFIER により CREATE VIEW が失敗する不具合を修正しました。#100042 (Peng).
  • 並列レプリカ使用時に、initializeAggregation または AggregatingMergeTree と併用すると時系列集約関数 (例: timeSeriesResampleToGridWithStaleness) が ILLEGAL_TYPE_OF_ARGUMENT で失敗する問題を修正しました。#100053 (Alexey Milovidov) 。
  • NumericIndexedVectorDataBSI 内部での負の値の処理を正しく行うようにしました。 #100086 (Daniil Ivanik).
  • accurateCastOrDefault および to*OrDefault 関数で、定数入力時に Const カラム型が保持されない問題を修正しました。#100132 (Alexey Milovidov) 。
  • 省略されたLowCardinality(Nullable(T))型のクエリパラメータは、Nullable(T)と同様に、正しくNULLがデフォルト値として扱われるようになりました。#100144 (Denys Melnyk).
  • StringSearcher.h での未初期化値の使用を修正しました。#100225 (Konstantin Bogdanov) 。
  • Ctrl+C で、スカラー サブクエリやその他の解析時パイプラインをキャンセルできるようにしました。以前は、長時間実行されるスカラー サブクエリの実行中に Ctrl+C を押しても、サブクエリが完了するまで中断できませんでした。また、clickhouse-clientclickhouse-local の両方で、スカラー サブクエリの実行中に読み取られた行数が、進行状況バーと JSON 統計に正しく表示されるよう修正しました。@YjyJeff との共同作業です。#100230 (Raúl Marín) 。
  • クロス結合およびランタイムフィルタを含む Dynamic カラム関連のクエリで発生していた LOGICAL_ERROR 例外を修正しました。原因は、hasOnlyNulls 最適化パスで ColumnVariant::filter が Variant カラムのポインタをクローンせずに共有していたことにありました。Closes https://github.com/ClickHouse/ClickHouse/pull/100147. #100234 (Pavel Kruglov).
  • arrayFirst/arrayLast 関数の呼び出し時にデータ型が誤って再解釈されることがある、Variant を含む Array の不具合を修正しました。たとえば以前は、実際の Variant 型が Date である場合でも、Array(Variant(Date, Bool))Bool に変換されていました。#100255 (timothygk).
  • 関数に関する軽微な変更がいくつかあります。h3 関数は境界の検証がより適切になりました。readWKB はサイズ制限 (新しい設定 max_wkb_geometry_elements) を確認します。乱数生成関数では、計算時の最大反復回数が制限されます。#93543 のフォローアップです。#100270 (Alexey Milovidov).
  • cutURLParameter が、他のパラメータ名の部分文字列として含まれているパラメータを誤ってスキップしてしまうことがある問題を修正しました。 #100280 (Nikita Semenov).
  • Iceberg のメタデータファイルパス設定に null byte が含まれている場合に発生する例外を修正しました。 #100283 (Alexey Milovidov).
  • distributed_index_analysisIN サブクエリを含む条件とともに使用した際に、実行されるクエリ数が二乗オーダーで増えてしまう問題を修正しました。#100287 (Anton Popov).
  • GROUP BY ... WITH TOTALS HAVINGUNION DISTINCT を Nullable式と組み合わせて使用した際に発生する “Block structure mismatch” 例外を修正しました。 #100293 (Alexey Milovidov).
  • block_size_bytes パラメータが極端に大きい場合に estimateCompressionRatio で発生する LOGICAL_ERROR 例外を修正。 #100298 (Alexey Milovidov).
  • GROUP BY CUBE(...) WITH ROLLUP や同様の組み合わせを使用した場合に、デバッグビルドで発生する “Inconsistent AST formatting” 例外を修正しました。#100376 (Alexey Milovidov) 。
  • カラムの別名を使用した、SELECT * または EXCEPT/INTERSECT クエリを含むビューの作成時に発生していた例外を修正しました。#100386 (Alexey Milovidov) 。
  • ハートビートエラー後のリバランスでコンシューマーがスタックした際、Kafkaエンジンのテーブルで DROP TABLE がいつまでも完了しない問題を修正しました。#100388 (Alexey Milovidov) 。
  • zipアーカイブを使ったバックアップ/リストア操作で発生していた ReadBuffer is canceled. Can't read from it. 例外を修正しました。#100400 (Alexey Milovidov).
  • granule 境界が揃っていない複数のパーツにデータが分割されている場合に、max_rows_to_read / force_primary_key 使用時の SELECT count() クエリで発生する TOO_MANY_ROWS 例外を修正しました。#100408 (Alexey Milovidov).
  • system.completions が、テーブル単位、DB単位、およびカラム単位の権限取り消しを含む、あらゆる権限付与の組み合わせで、データベース、テーブル、カラムをアクセス権に応じて正しくフィルタリングするよう修正しました。 #100432 (Shaohua Wang).
  • race condition に起因する NuRaft の SEGFAULT を修正しました。#100444 (Pablo Marcos) 。
  • min/max/argMin/argMax での NaN の扱いが ORDER BY と一貫するようになりました。NaN は常にスキップされ、返されるのはすべての値が NaN の場合のみです。従来は、IEEE 754 の順序なし比較セマンティクスにより、結果がデータ内の NaN の位置に依存していました。#100448 (Raúl Marín).
  • delta_lake_snapshot_start_version を設定せずに delta_lake_snapshot_end_version を設定した場合、本来は BAD_ARGUMENTS error が発生すべきところ、黙って無視されていたコピーペースト由来のバグを修正しました。#100454 (Mohammad Lareb Zafar).
  • StorageRabbitMQ::shutdown は冪等ではありませんでした (weak pointer に無条件にアクセスしたうえで、対応する shared pointer を破棄していました) が、現在は StreamingStorageRegistry で1回、その後 DatabaseCatalog でさらに1回、計2回呼び出されるようになっています。この修正により、このメソッドは冪等になり、予防的な null チェックも追加されました。#100455 (Miсhael Stetsyuk) 。
  • QBit をターゲット型として accurateCastOrNull を使用した際に発生する LOGICAL_ERROR 例外を修正しました。#100470 (Raufs Dunamalijevs).
  • optimize_on_insert=0 の wide パーツで、ネストされた Array(JSON) カラムを持つテーブルへの insert 時に発生する LOGICAL_ERROR 例外 “Stream … not found” を修正しました。#100475 (Pavel Kruglov) 。
  • バックアップメタデータ内のファイルエントリのパスを検証し、RESTORE 時にパストラバーサル、絶対パス、および空の名前を拒否するようにしました。#100483 (Pablo Marcos) 。
  • 動作しなかった LIMIT m OFFSET n WITH TIES 構文を修正しました。この構文は、すでに動作していた LIMIT n, m WITH TIES と等価です。#100491 (Nihal Z. Miaji).
  • 名前付きフィールドとLowCardinality要素を持つNullable(Tuple)カラムでINを使用した際に発生する例外 “No set is registered for key” を修正しました。 #100523 (Alexey Milovidov).
  • ベクトル類似度検索時にクラッシュや検知されないメモリ破損を引き起こすおそれがあった、usearch の sorted_buffer_gt::insert() における heap-buffer-overflow を修正しました。#100537 (Dustin Healy) 。
  • クエリで指定した FORMAT 句および INTO OUTFILE 句が EXECUTE AS で無視される問題を修正しました。#100538 (pufit).
  • クエリレベルの OFFSET を伴う SAMPLE で発生していた AST のフォーマットの不整合を修正しました。#100576 をクローズしました。#100579 (Pavel Kruglov) 。
  • Azure の polaris カタログを修正しました。25.12 以降、このカタログでは Azure 使用時に path の先頭へ bucket が追加されるようになっていました。たとえば、abfss://polaris-polaris@<some_url>.windows.net/<other-path> ではなく、abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path> となっていました。この PR では、path から bucket を取り除きます。#100583 (Konstantin Vedernikov) 。
  • 一部のブロックでデフォルトカラムが const の場合に、transform で発生していた型不一致の例外を修正しました。#100574 をクローズします。#100616 (Pavel Kruglov).
  • クエリの元の SELECT 部分に存在しないカラムが projection の SELECT 部分に含まれている場合に発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。#100194 をクローズしました。#100623 (Yarik Briukhovetskyi).
  • 過大な次元を持つように細工された .npy ファイルによるサービス拒否攻撃を防ぐため、Npy フォーマットの shape をファイルサイズとオーバーフロー制限に照らして検証します。また、空の shape を拒否し、1行あたりのメモリ使用量を 2 GiB に制限します。#100625 (Raúl Marín).
  • 非同期 INSERT (TCP) 時および HTTP 経由のすべての INSERT で DateTime 値をパースする際に、session_timezone が無視される問題を修正しました。 #100647 (Sema Checherinda).
  • ソースとしてテーブル関数を使用する場合に、cluster() および clusterAllReplicas() テーブル関数へ分片キーを渡せるようになりました (例: cluster('name', view(...), sharding_key)) 。#100665 (Sergey Veletskiy) 。
  • quantileIfArrayArray(0.5)([[NULL]], [[1]]) のように、Array コンビネータと NULL 引数を伴うパラメトリック集計関数の使用時に発生していたサーバークラッシュ (アサーション失敗) を修正しました。#100679 (nerve-bot) 。
  • use_variant_as_common_type が有効な場合に、空のタプルと空でないタプルの共通スーパータイプの計算中に発生していた例外を修正しました。#100699 (Antonio Andelic) 。
  • Azure blob storage ディスクが設定されている場合でも、エンドポイントに一時的に到達できないとき (例: DNS 障害) にサーバーの起動が失敗しなくなりました。#100701 (Raúl Marín) 。
  • 符号なしの除数が符号付きの結果型に収まらない場合に発生する、positiveModulo の未定義動作を修正しました。#100705 (Raúl Marín) 。
  • use_top_k_dynamic_filtering が有効で、ORDER BY カラムの型が Dynamic または Variant の場合に発生していた、サーバーのクラッシュ (論理エラー “Unexpected return type from __topKFilter”) を修正しました。 #100742 (Groene AI) 。
  • LowCardinality 要素を含む Tuple キーに対して PREWHERE/WHERE で has() 関数を使用した際に、server がクラッシュする問題を修正しました。#100760 (Groene AI).
  • S3オブジェクトストレージ上の Log または StripeLog テーブルで、同時書き込み中に読み取る際に発生していた file_offset_of_buffer_end <= getFileSize() アサーション失敗 (デバッグビルドでは例外) を修正しました。 #100763 (Alexey Milovidov).
  • 統計が有効なテーブルで、WHERE句に関数式 (例: toDecimal64(col, 3)) が含まれている場合に、統計の選択率推定器で発生していた例外を修正しました。これにより、推定器は無効な型変換を試みる代わりに、そのような述語をスキップするようになりました。#100764 (Han Fei) 。
  • 並べ替えを伴う join が誤った結果になることがあるまれなケースを修正しました。#100790 (Yarik Briukhovetskyi) 。
  • 最適化された単純な count で AggregateFunction の引数型が誤っていた問題を修正しました。この問題により、分散テーブルで count(v0 + v1) のような式をクエリすると、NUMBER_OF_ARGUMENTS_DOESNT_MATCH 例外が発生していました。 #100794 (YjyJeff).
  • 一部のカタログでは、select * from system.databases クエリの結果の SETTINGS セクションに、一部のシークレットが表示されることがあります。このPRでは、そのような挙動を防止します。#100800 (Konstantin Vedernikov).
  • toStartOfInterval で、origin 引数を指定し、かつ Week、Quarter、または Year のインターバルに極端な値を使用した場合に発生する未定義動作 (符号付き整数オーバーフロー) を修正しました。#100817 (Raúl Marín) 。
  • Tuple 戻り値型と、1 つ以上の Nullable な引数を持つ IfDistinctDistinctIfIfState 集約関数コンビネータで、Nullable(Tuple) の導入後に古いシリアライズ済み状態を読み取れなくなっていた問題を修正しました。#98917 をクローズします。#100826 (Nihal Z. Miaji).
  • s3Cluster と分散クエリにおいて、接続プールの use-after-free が原因で発生していたセグメンテーションフォールトを修正しました。 #100837 (Konstantin Bogdanov) 。
  • サーバーのシャットダウン中に Dictionary を読み込む際、null ポインタのデリファレンスによるセグメンテーション違反が発生する不具合を修正しました。Context::getUserDefinedSQLObjectsStorage (user_defined_sql_objects_storage をデリファレンスする) は、メインスレッドが Context::shutdown (user_defined_sql_objects_storage を null に設定する) を呼び出すのと同時に、Dictionary のスレッドからも呼び出されます。Context::shutdown を実行する前に、Dictionary ローダーで今後の更新を無効にし、現在実行中の Dictionary クエリを停止し、Dictionary の読み込みスレッドを join しておく必要があります。これは通常のクエリに対して行っている処理と同様です。#100839 (Miсhael Stetsyuk).
  • 入力に非ASCIIバイトが含まれている場合にULIDStringToDateTimeで発生するバッファオーバーフローを修正しました。#100843 (Konstantin Bogdanov) 。
  • 複数のテーブル (Distributed テーブルを含む) を束ねる Merge テーブル (または merge() テーブル関数) に対して、distributed_group_by_no_merge=1 が有効な状態でクエリを実行すると発生していたクラッシュ (LOGICAL_ERROR) を修正しました。#100859 (Groene AI).
  • Cast_keep_nullable が有効な場合、dynamic null を Variant にキャストしても例外が発生しなくなりました。 #100864 (Seva Potapov).
  • clickhouse-keeper-clientgetexistsls コマンドで、重複した watch_id エラーメッセージが stderr ではなく stdout に出力される問題を修正しました。#100893 (Mohammad Lareb Zafar).
  • intDiv/intDivOrZero で、Nullable なタプルの配列に対して発生していた例外を修正しました。例: SELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín).
  • 定義を保存する前に StorageAlias のエンジン引数を評価し、currentDatabase() のような式がデータベースに保存される前にリテラル値に解決されるようにしました。#100902 (Nikolay Degterinsky) 。
  • query_plan_merge_expressions = 0 のときに、ExpressionStepReadFromMergeTree の直上にある場合の processAndOptimizeTextIndexFunctions を修正しました。#100879 の修正です。#100909 (Jimmy Aguilar Mena).
  • do_complete_line の範囲外アクセスを修正した replxx に更新しました。 #100925 (Azat Khuzhin).
  • shard-by-PK 最適化を使用する JOIN でクエリ条件キャッシュが使われ、一部のパーツがキャッシュされた条件によって除外される場合に、誤った結果が返される問題を修正しました。 #100926 (Groene AI).
  • 一部のケースで、索引解析中にフィルタ式で divideintDiv を使用すると ILLEGAL_DIVISION が返されていた問題を修正しました。#100928 (Nihal Z. Miaji) 。
  • 非同期起動時に、起動時の依存関係の順序が誤っていたため、内部テーブルを持つmaterialized viewで発生していた”ターゲットテーブルが存在しない”エラーを修正しました。 #100946 (Nikolay Degterinsky).
  • parseDateTimeBestEffortで、小数点以下が19桁以上ある日時文字列をパースする際に発生する未定義動作 (符号付き整数オーバーフロー) を修正しました。 #100948 (Vasily Chekalkin).
  • IN 句にタプルのサブクエリを含む場合 (例: WHERE (id, str) IN (SELECT (id, str) FROM ...)) にテキスト検索索引を使用すると発生していたクラッシュ、またはサブクエリ内のカラム数が IN の左辺のタプルと一致しない場合に発生していたクラッシュを修正しました。#100959 (Anton Popov).
  • スパースカラムのシリアライゼーションを使用するMergeTreeテーブルからポリゴン Dictionary を構築する際に発生していたクラッシュを修正しました。#100964 (Anton Popov) 。
  • 定数畳み込みされた式に対して INTERSECT ALL / UNION ALL を使用した際に発生する論理エラー “Invalid action query tree node” を修正しました。#100977 (Alexey Milovidov).
  • Nullable(Tuple) の導入後、1 つ以上の Nullable 引数を持つ sumCountOrDefault aggregate function が、古いシリアライズ済みの状態を読み取れなくなっていた問題を修正しました。#100882 をクローズしました。#101021 (Nihal Z. Miaji) 。
  • 遅延カラムレプリケーション (enable_lazy_columns_replication) によって生成された ColumnReplicated カラムが、入力の到着が遅れるマージソートパイプラインに流れ込む場合に、マージアルゴリズムで発生するクラッシュ (Logical error: isConst/isSparse/isReplicated assertTypeEquality) を修正しました。#101036 (Groene AI).
  • SELECT で同じエイリアスが複数の式に使われている場合に、誤った UNKNOWN_IDENTIFIER エラーではなく、正しい MULTIPLE_EXPRESSIONS_FOR_ALIAS エラーが報告されるよう修正しました。#101040 (Alexey Milovidov) 。
  • 宣言されたタイムゾーンが式のタイムゾーンと異なる場合に、DateTime/DateTime64 型の ALIAS カラムでタイムゾーン変換が適用されない不具合を修正しました。 #101043 (Alexey Milovidov).
  • ビュー、サブクエリ、および INSERT ... SELECT で、query_log に行ポリシーが記録されない問題を修正しました。クエリプランニング中には行ポリシーが適用されていたものの、ログ記録のためにサブプランナーから親プランナーへ引き継がれていませんでした。行ポリシー (ログ記録専用) は、プランナーとサブプランナーの双方が設定できるよう、QueryAccessInfo に保持されるようになりました。#101044 (Narasimha Pakeer).
  • パイプラインブロックに通常のカラムとマージされる ColumnConst カラムが含まれている場合に DirectJoinMergeTreeEntity で発生する例外を修正しました。 #101046 (Alexey Milovidov).
  • CTE のカラム別名のフォーマットにおける不要なスペースを修正しました (WITH t (a, b)WITH t(a, b)) 。#101049 (Alexey Milovidov).
  • アナライザが有効な場合に、merge のようなネストされたテーブル関数を使用すると remote/cluster テーブル関数が失敗する問題を修正しました。#101055 (Alexey Milovidov).
  • prefer_localhost_replica=1 の場合に分散クエリで OFFSET が二重に適用され、想定より少ない行が返される不具合を修正しました。#101071 (Nihal Z. Miaji) 。
  • format_regexp 設定に無効な正規表現を指定して Regexp フォーマットを使用した際に発生するクラッシュを修正。 #101074 (Nihal Z. Miaji).
  • 並列レプリカで serialize_query_plan=1 を使用した際に、時系列集約関数で発生していた “Illegal type Decimal64 of start parameter” エラーを修正しました。#101083 (Groene AI).
  • PREWHERE を含むプロジェクションを ORDER BY ... LIMIT と併用した際に optimizeLazyMaterialization で発生する例外を修正しました。 #101115 (Anton Popov).
  • 内部専用の Null combinator (例: sumNull, avgNull) を使用する aggregate functions で、aggregate_functions_null_for_empty = 1 設定が有効な場合に発生していた server のクラッシュ (SIGABRT) を修正しました。#101147 (Groene AI) 。
  • 完了したファイルセグメントのログ記録時に解放済みメモリを読み取ってしまう可能性があった、ファイルシステムキャッシュの書き込みパスでの use-after-free を修正しました (BuzzHouse の MemorySanitizer により検出) 。#101161 (Groene AI).
  • 分散索引解析で、明示的な要素なしに構築された set を持つ GLOBAL IN 述語に遭遇した際、“明示的な要素なしで外部テーブルを準備済みの set にアタッチしようとしています” というエラーでサーバーがクラッシュする不具合を修正しました。#101178 (Groene AI).
  • JIT コンパイルが有効な場合 (コンパイル閾値に達した後) 、Decimal カラムに対する MAX/MIN 集約関数が誤った結果を返す不具合を修正しました。 #101203 (Raúl Marín).
  • 論理削除後、論理削除のマスクが付いたすべてのパーツがマージで解消された後も、minmax_count_projection と単純な COUNT(*) の最適化が恒久的に無効のままになる問題を修正しました。#101212 (Anton Popov).
  • listread の間にリモート object が上書きされると、以前は stale な object メタデータが生成され、その結果 cache から Having zero bytes, ... という論理 error が発生し得たケースを修正しました。#101219 (Kseniia Sumarokova).
  • LowCardinality 型の lc_column を持つ MergeTree テーブルに対して ORDER BY CAST(lc_column, 'Type') でクエリを実行した際に発生していたサーバークラッシュ (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) を修正しました。 #101220 (Groene AI).
  • S3Queue における期限切れの処理中ノードのクリーンアップを修正しました。#101230 (Kseniia Sumarokova) 。
  • 無効な optimizations 引数が指定された場合の mergeTreeAnalyzeIndexes() における UB を修正しました。#101253 (Azat Khuzhin).
  • パーティション化された Iceberg テーブルで ALTER TABLE UPDATE を連続実行した際に発生する Logical error: 'partitions_count > 0' 例外を修正しました。#101278 (Desel72).
  • 大きな整数定数 (例: 256、2147483648) を、MergeTreeテーブルに対する AND を含む WHERE 句でブール述語として使用した場合に、クエリ結果が誤っていた問題を修正しました。たとえば、SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648 は、本来はすべての行に一致するべきところ、誤って 0 を返していました。#101287 (Groene AI).
  • Replicated MergeTree を使用する Delta Lake クラスターからの insert-select を修正しました。 #101299 (Konstantin Vedernikov).
  • スカラー サブクエリが、依存関係にあるマテリアライズド CTE の連鎖を参照したときに、“Logical error: Reading from materialized CTE before materialization” でクラッシュする問題を修正しました。 #101305 (Groene AI).
  • IStorage::getDependentViewsByColumn における storage_id のデータ競合を修正しました。#101385 (Nikolay Degterinsky) 。
  • BACKUP FROM SNAPSHOT AST のフォーマット処理とクローン作成を修正しました。#101405 (Pablo Marcos) 。
  • enforce_keeper_component_tracking 有効時に system.part_moves_between_shards をクエリすると発生していた、LOGICAL_ERROR クラッシュ “Current component is empty” を修正しました。#101462 (Groene AI).
  • fuzzer が不正な Dynamic 型の AST を生成した際に発生する DataTypeDynamic::create() のセグメンテーションフォールトを修正しました。 #101464 (Groene AI) 。
  • DeltaKernel が有効でない状態で delta_lake_snapshot_version または CDF version の設定を使用した場合、誤ったデータを黙って返すのではなく、エラーを返すようにしました。#101489 (Desel72).
  • ARRAY JOIN を JOIN USING とともに使用し、analyzer_compatibility_join_using_top_level_identifier 設定が有効な場合に発生していた NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#101240 をクローズしました。#101507 (Vladimir Cherkasov).
  • テーブルが iceberg_metadata_file_path を使用して作成され、対象のメタデータバージョンがすでに存在する場合に、Iceberg INSERT の再試行ループが失敗する問題を修正しました。#101548 (Groene AI).
  • シリアライゼーション/デシリアライゼーションの不整合を避けるため、arrayIntersect および関連関数の結果カラムから Nullable を削除しました。 #101569 (George Larionov).
  • IcebergLocal table engine を使用する materialized view に対して SELECT を実行した際に発生するサーバークラッシュ (LOGICAL_ERROR) を修正しました。 #101577 (Groene AI).
  • NaN 引数で intExp10 を呼び出した際の誤ったエラーメッセージを修正しました。intExp10 ではなく intExp2 と表示されていました。#101582 (Krishna Chaitanya).
  • #100288 のリファクタリング後、allow_statistics=0ALTER TABLE ADD STATISTICS および ALTER TABLE DROP STATISTICS がブロックされなくなっていた問題を修正しました。#101585 (Krishna Chaitanya) 。
  • 25.1 より前の不完全な drop によって残った ZooKeeper ノードに drop_lock_version ノードがない場合に、KeeperMapCREATE TABLE が “Cannot create metadata for table” で失敗する問題を修正しました。#101623 (Antonio Andelic).
  • Map のサブカラム読み取り時に発生する可能性がある論理エラーを修正しました。#100769 をクローズ。#101336 をクローズ。#101641 (Pavel Kruglov).
  • getSubcolumnData で、プレフィックス一致よりもサブカラムの完全一致を優先するよう修正し、クラッシュの可能性を防止しました。#101271 をクローズしました。#101645 (Pavel Kruglov).
  • use_variant_default_implementation_for_comparisons が無効な場合に、LowCardinality カラムを Variant の NULL 定数と比較するとクラッシュする問題 (LOGICAL_ERROR: “ColumnUnique can’t contain null values”) を修正しました。#101690 (Groene AI).
  • 内容: Bzip2ReadBuffer に空ストリーム用のガードを追加し、内部ストリームが空の場合に UNEXPECTED_END_OF_FILE を送出する代わりに EOF を返すようにしました。#101691 (ClickGap AI Bot) 。
  • 内容: system.s3_queue_settings および system.azure_queue_settingsalterable カラムで、説明文の内容が逆になっていた問題を修正しました。実際のコードの動作に合わせて、01 の意味を入れ替えました。 #101703 (ClickGap AI Bot).
  • positiveModulo(tuple, number) が、剰余ではなく誤って除算にディスパッチされていた問題を修正しました。#101709 (ClickGap AI Bot) 。
  • cache でラップされたディスクで thread_pool_size が設定されている場合に発生していたクラッシュを修正しました。従来は、FileCacheSettings::loadFromConfig()thread_pool_size を不明な設定として拒否していたため、server が起動できませんでした。この設定は有効な IDisk パラメータであり、バックグラウンドのパート移動中に行われるディスク間コピー処理で使用するスレッド数を制御します。#101712 (Francisco).
  • RANGE_HASHED Dictionary の作成時に、存在しない MAX 範囲属性を警告なしで受け入れてしまい、最小範囲属性と最大範囲属性の型が異なる場合に誤った型設定を使用していた不具合を修正しました。このバグは buildRangeConfiguration 内のコピー&ペーストミスが原因で、最大属性に対して max_attr_name ではなく min_attr_name を参照していたことによるものです。#101732 (Yakov Olkhovskiy).
  • 待機タイマーが、参照先の ProfileEvents::Counters を持つワーカースレッドより長く生存する場合に CPU lease scheduler で発生する use-after-free クラッシュを修正しました。 #101761 (Antonio Andelic) 。
  • arrayLevenshteinDistanceWeighted 関数および arraySimilarity 関数の不具合を修正しました。#101725 をクローズしました。#101767 (Mikhail f. Shiryaev).
  • POSTフォームボディを無視していた Prometheus Query API の問題を修正しました。 #101794 (James Cunningham).
  • S3 Client::~Client デストラクタから例外が伝播し、server が終了してしまう問題を修正しました。#101798 (Gagan Dhakrey).
  • Object 型の動的パスの並列デシリアライゼーションにおける use-after-scope の問題を修正しました。これは、動的パスが多数あるテーブルの読み取り時にクラッシュを引き起こす可能性がありました。#101823 (Antonio Andelic).
  • 特定の (デフォルト以外の) フォーマット設定で、関数 formatDateTime のフォーマッタ%W が誤った出力を返す問題を修正しました。 #101847 (Robert Schulze).
  • デマングルされたシンボル名のテンプレート引数内に検索文字列が最初に現れる場合に、SYSTEM INSTRUMENT ADDshouldPatchFunction の偽陰性が発生する問題を修正しました。#101885 (Pablo Marcos).
  • 定期的なリフレッシュ中に ZooKeeper のセッションが期限切れになると UDF レジストリが失われる不具合を修正しました。この不具合により、完全なリフレッシュが成功するまで、すべてのユーザー定義関数が利用できなくなる可能性がありました。 #101891 (Nikita Fomichev).
  • AES_256_GCM_SIVsystem.codecs の説明を修正し、AES-128 ではなく AES-256 と表示されるようにしました。#101917 (Jimmy Aguilar Mena) 。
  • JSON column 上に作成された min-max 索引で誤った極値が使われ、誤ったクエリ結果を引き起こす問題を修正しました。#101700 をクローズします。#101918 (Pavel Kruglov) 。
  • splitByString トークナイザーは、空の区切り文字列を受け入れなくなりました。#101928 (Robert Schulze).
  • materialize_skip_indexes_on_merge=false で、マージ時にテキスト (全文) 索引が抑止されない不具合を修正しました。これまでは、テキスト以外のスキップ索引 (minmax、set、bloom_filter) のみが抑止され、テキスト索引は引き続き構築されていたため、CPU と I/O を無駄に消費していました。#101932 (Groene AI) 。
  • sparseGrams トークナイザーが、指定された最大長を超えるトークンを生成していました (これは実装内で +2 がハードコードされていたためです) 。 #101934 (Elmi Ahmadov).
  • addStreams 中にストリームのコンストラクタが例外をスローし、column_streams に null エントリが残ることで発生する MergeTreeDataPartWriterWide::cancel の SIGSEGV を修正しました。 #101936 (Antonio Andelic).
  • query_plan_direct_read_from_text_index が有効な場合に、フルテキスト索引を持つ Merge または分散テーブルに対し、has*Tokens と LIKE が混在するフィルタ条件を含むクエリを実行すると例外が発生する問題を修正しました。 #101939 (Jimmy Aguilar Mena).
  • 無効な QueryProcessingStage 値を含むネイティブプロトコルのクエリパケットのパース時に発生する未定義動作を修正しました。 #101972 (Raúl Marín).
  • 初期クエリのパース中に例外が発生した場合、同期ずれしたストリームから不正なデータを読み取るのを防ぐため、TCP接続を閉じるようにしました。#101989 (Raúl Marín).
  • 26.1+ のファイルシステムキャッシュにおける SLRU の競合バグを修正しました。この不具合により、領域予約に関する論理エラーが発生する可能性があります。デバッグビルドでは、アサーション失敗 'Previous state is Evicting, but expected state to be Active while setting Evicting flag for 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (state: Evicting)'. が発生することもあります。#101991 (Kseniia Sumarokova).
  • 末尾に余分なデータが付いた文字列を空の Tuple() 型にキャストする際に発生する例外を修正しました。#102011 (Alexey Milovidov).
  • ORDER BY と grace_hash join アルゴリズムを使用するクエリで、行の並び順が誤る問題を修正しました。影響を受けるクエリでは、結果が誤った順序で返されることで、気付かないうちに不正確な出力が生成される可能性がありました。 #102036 (János Benjamin Antal).
  • max_bytes_in_join 設定が構成されている場合に、RIGHT JOIN および FULL JOIN クエリで発生する可能性があった LOGICAL ERROR (Unexpected size of index type) を修正しました。#102042 (Jimmy Aguilar Mena) 。
  • 負の値を持つ Time を DateTime と比較した際に、誤った結果が返されるケースを修正しました。#101670 をクローズしました。#102056 (Yarik Briukhovetskyi)。
  • ZooKeeperRetriesControl が古い (期限切れの) ZooKeeperセッションを更新せずに再試行していたことが原因で発生していた、UDF refresh のクラッシュを修正しました。 #102059 (Nikita Fomichev).
  • unlock snapshot のフォーマット時に欠けていたスペースを修正。https://github.com/clickhouse/clickhouse/issues/101723 をクローズ。#102063 (Han Fei).
  • WHERE 句を含むビューに対するクエリで、内部クエリがビューのメタデータと異なる型のカラム (たとえば、join_use_nulls を指定した LEFT JOIN による Nullable) を生成した場合にクラッシュ (SIGSEGV) する問題を修正しました。#102085 (Miсhael Stetsyuk).
  • cache キーの不一致により、パート削除後も VectorSimilarityIndexCache のエントリが追い出されない不具合を修正しました。#102152 (Seva Potapov).
  • rabbitmq ストレージの使用時に、破損したメッセージを NACK するようにしました。 #102157 (Seva Potapov).
  • 不正な空のタプル文字列のパース時に発生する論理エラーを修正しました。#102289 (Nihal Z. Miaji) 。
  • GROUP BY のカラムの順序がテーブルのソートキーと異なる場合に optimize_aggregation_in_order=1 を使用すると、誤った集計結果 (行の重複) が生じる問題を修正しました。 #102299 (Groene AI).
  • Avro フォーマットの使用時に IcebergLocalALTER TABLE ... UPDATE で発生していたクラッシュを修正しました。原因は、LowCardinality/Nullable のラッパー型がシリアライゼーション前にアンラップされていなかったことです。 #102337 (Desel72).
  • 式が定義されていないマテリアライズドカラムに対するミューテーションで発生していたセグメンテーションフォルトを修正しました。#102185 をクローズします。#102342 (zoomxi).
  • Array型における Coalescing merge tree の修正です。これにより #89509 をクローズします。#102384 (Konstantin Vedernikov).
  • ブルームフィルタのプッシュダウンが有効で、WHERE句に等値/不等値条件がある Parquet ファイルの読み取り時に発生する segfault (またはデバッグビルドでの LOGICAL_ERROR) を修正しました。このクラッシュは、Parquet の prefetcher におけるブルームフィルタデータ取得処理で範囲外のメモリアクセスが発生することが原因で、非決定論的に誤ったクエリ結果を引き起こす可能性もありました。#102385 (Groene AI).
  • サブキュー間でエビクション統計が共有されていたことと、失敗した候補に対するリカバリパスが誤っていたことが原因で、SLRU ファイルシステムキャッシュの動的リサイズ中に LOGICAL_ERROR で中断する問題を修正しました。#102396 (Antonio Andelic).
  • Database Replicated の新しいレプリカ上で、ターゲットテーブルのない Alias tables の初期化に失敗する問題を修正しました。#101320 をクローズしました。#102397 (Nikolay Degterinsky).
  • ヌルバイトのみで構成された needle を検索する際に、文字列検索関数 (countSubstringsposition など) で範囲外読み取りが発生する問題を修正しました。#102401 (Raúl Marín) 。
  • 全文テキスト索引の設定 (enable_full_text_indexallow_experimental_full_text_indexuse_skip_indexes_on_data_read) は、compatibility 設定が 26.1 より前のバージョンを指している場合でも、無効化されなくなりました。以前は、そのため SharedDatabaseCatalog がテキスト索引付きのテーブルを作成できないことがありました。#102422 (Nikita Fomichev) 。
  • 末尾が %printf における境界外読み取りを修正しました。#102472 (Raúl Marín) 。
  • AsynchronousMetrics において、rewind でバッファのキャンセルフラグがリセットされないことが原因で、debug builds で発生していた ReadBuffer is canceled という chassert 例外を修正しました。 #102524 (Yuri Fedoseev) 。
  • 区切り文字だけからなる needle (例: '()''!!!') を指定した hasToken / hasTokenOrNull について、テキスト索引を持つカラムでの動作を修正しました。従来は、BAD_ARGUMENTS をスローすべき場合 (hasToken) や NULL を返すべき場合 (hasTokenOrNull) に、索引がすべてのグラニュールを黙ってスキップしていました。#102544 (Jimmy Aguilar Mena).
  • Keeper における巨大な multi リクエストでの OOM を修正しました。OpenTelemetry のトレーシングでは、ZooKeeperRequest オブジェクト内の OpenTelemetry spans 用に無条件で >1 KiB を割り当てていたため、非常に巨大な multi リクエストでは追加で >10 GiB のメモリを確保しようとしていました。これを修正するため、共有データを静的メモリに保持するようにし、ZooKeeperOpentelemetrySpans では std::optional ではなく std::unique_ptr を使うようにしました。 #102586 (Miсhael Stetsyuk) 。
  • 既存のコレクションに対して CREATE NAMED COLLECTION IF NOT EXISTS を実行すると NamedCollection の CurrentMetric が過大に計上される問題と、起動時に config または SQL ストレージから読み込まれたコレクションでこれが初期化されない問題を修正しました。#102507 をクローズします。#102598 (Pablo Marcos).
  • 同時実行DDLによりローカル分片が空のカラムを返す場合に、getStructureOfRemoteTable で発生する例外を修正しました。 #102604 (Alexey Milovidov).
  • 複数の同時実行 CREATE TABLE IF NOT EXISTS クエリが Shared データベース上の同じ S3Queue テーブルを対象とした際に発生する LOGICAL_ERROR 例外を修正しました。 #102610 (Nikita Taranov).
  • WHERE フィルタ使用時に Nullable カラムを読み込む際、ネイティブ Parquet V3 リーダーで発生する LOGICAL_ERROR クラッシュ “Unexpected number of rows in column subchunk” を修正しました。 #102628 (Groene AI).
  • AzureWriteMicroseconds profile event の説明が、“write” ではなく “read” になっていた問題を修正しました。#102639 (Miсhael Stetsyuk) 。
  • 一部の特殊なケースで、行ポリシーによって ‘Not found column in block’ 例外が発生する不具合。#102648 (Yarik Briukhovetskyi).
  • 設定で定義された静的クラスターで、一時的に稼働中のノードが1つもない場合に ClusterDiscovery で発生していたサーバー例外を修正しました。 #102661 (Kseniia Sumarokova).
  • タイムゾーン調整後にオーバーフローが発生した場合、誤った日付データ型が推論される問題を修正しました。#102601 をクローズしました。#102674 (Pavel Kruglov).
  • リフレッシャブルmaterialized view が待機中に削除された場合に、SYSTEM WAIT VIEW がいつまでもハングしたままになる問題を修正しました。#102681 (Nikolay Degterinsky) 。
  • すべての行で ELSE が返されてしまう Dynamic expression を含む CASE を修正。#102511 をクローズ。#102684 (Pavel Kruglov).
  • バイナリエンコードされたデータ型で発生していた、フラット化されたDynamic型のシリアライゼーションの不具合を修正しました。#101911 をクローズします。#102692 (Pavel Kruglov) 。
  • format_schema_source=‘query’ が複数行の結果を暗黙に無視してしまう問題を修正しました。#101905 をクローズしました。#102698 (Pavel Kruglov).
  • すべてのエラーを 1 にマッピングするのではなく、SSHクライアント経由で実際の終了コードを報告するようにしました。#101741 を修正しました。#102700 (Konstantin Bogdanov) 。
  • 動的/定義済みクエリハンドラーで HTTP ヘッダーが失われる問題を修正しました。#101846 をクローズします。#102706 (Konstantin Bogdanov) 。
  • 折りたたまれた jemalloc ヒーププロファイルにポアソン・サンプリング補正を適用し、jeprof の出力と一致するようにしました。以前は、collapsed フォーマットでサンプリング確率が考慮されていなかったため、実際の割り当てサイズが過小評価されていました。#102759 (Antonio Andelic).
  • 関数 hasPhraseNULL 引数を渡した場合のクラッシュを修正しました。#102802 (Nikita Taranov) 。
  • 循環するシンボリック型参照を含む再帰的なスキーマを持つ Avro ファイルの読み取り時に発生していたサーバーのクラッシュ (SIGSEGV) を修正しました。今後は、このようなスキーマはクラッシュを引き起こす代わりに検出され、明確なエラーメッセージとともに拒否されます。#102853 (Groene AI).
  • FunctionVariantAdaptor で結果をキャストする際、Variant カラムに対する関数がメモリ制限に達するか、型変換以外の例外が発生した場合に起きていたサーバークラッシュ (LOGICAL&#95;ERROR アサーション) を修正しました。この例外は、内部エラーとして誤分類されるのではなく、正しく伝播されるようになりました。#102855 (Groene AI).
  • スキーマ推論中に std::length_error がスローされた場合 (たとえば、input_format_msgpack_number_of_columns に極端な値が設定されている場合や、入力データが不正な場合) に、debug/sanitizer ビルドでサーバーがクラッシュする問題を修正しました。#102859 (Groene AI).
  • レプリケートされたカラムおよびスパースなカラムのシリアライゼーションにおける NULL 表現が、設定 (例: format&#95;tsv&#95;null&#95;representation) に従うようにしました。 #102888 (Hechem Selmi).
  • #103499 にバックポート: Poco の BufferedStreamBuf::flushBuffer がソケット層からの短い書き込みを適切に処理していなかったため、ios_base::clear: unspecified iostream_category error が発生した S3 リクエストが再試行されずに失敗していた問題を修正しました。#102894 (Sema Checherinda).
  • 論理削除の後、論理削除マスク付きのパーツがすべてマージされて消えた後も、minmax_count_projection と単純な COUNT(*) の最適化が恒久的に無効のままになる不具合を修正しました。#102900 (Anton Popov).
  • LTO に起因する jemalloc の散発的なクラッシュを修正しました。#102913 (Azat Khuzhin) 。
  • 新しいアナライザで、行ポリシーの OR チェーンを IN に最適化しました。#102915 (Azat Khuzhin) 。
  • 誤ったアラインメントで page cache を解放することで発生し、クラッシュにつながる可能性がある jemalloc のメタデータ破損を修正しました。 #102918 (Azat Khuzhin).
  • materialized view を伴わない通常の INSERT では、過剰な ConcurrencyControl のスロットやスレッド (max_insert_threads ではなく max_threads) を要求しなくなり、INSERT スループットが高いクラスターでの CC スロットの枯渇やスレッド数の急増を防げるようになりました。 #102961 (Sema Checherinda).
  • カーネル OOM を回避するため、MEMORY_LIMIT_EXCEEDED を発生させられるように ArrowMemoryPool を再導入しました。#102999 (Azat Khuzhin) 。
  • cast_string_to_date_time_modeNullable(DateTime) への CAST で無視されていた問題を修正しました。#101840 をクローズしました。#103035 (Pavel Kruglov).
  • テキスト索引の direct read 最適化で、ALIAS カラムがサポートされるようになりました。#103037 (Anton Popov).
  • #103454 にバックポート: 集約プロジェクションがクエリに一致し、かつテーブルの一部のパーツにプロジェクションデータが存在しない場合 (たとえば、すでにデータが入っているテーブルにプロジェクションを追加したものの、MATERIALIZE PROJECTION を実行していない場合) に、SELECT DISTINCT が不完全な結果を何も通知せず返してしまう問題を修正しました。#102951 をクローズしました。#103052 (Nihal Z. Miaji).
  • MergeTree テーブルで、NUInt8 より大きい整数型 (例: 256655352147483648、または任意の負の整数) の場合に、WHERE x AND toNullable(N) が誤った結果を返す問題を修正しました。これは、splitFilterNodeForAllowedInputs が、簡約された ANDNullable な残り部分を boolean に変換する際に NULL のゼロ値を使っていたため、三値論理のもとで比較結果が NULL となり、filter がすべての行を誤って除外していたためです。#103077 (Groene AI).
  • 文字列検索関数 (locateposition など) で、引数を逆順 (function_locate_has_mysql_compatible_argument_order = 1 の場合の locate(needle, haystack)) で渡した際に、エラーメッセージで誤った引数型が表示される不具合を修正しました。#103102 (Alex Kuleshov) 。
  • disableFailPoint が、フェイルポイントで一時停止しているスレッドがない状態で呼び出された際に、waitForPause が無限にハングし続ける問題を修正しました。#103119 (Shaohua Wang) 。
  • 事前認証時の TCP Hello パケット内の文字列長を 64 KB に制限し、ハンドシェイク全体の時間を制限する handshake_timeout_milliseconds サーバー設定を追加しました。これにより、未認証のクライアントが過剰なメモリを消費したり、スレッドを無期限に占有したりすることを防ぎます。 #103284 (Sema Checherinda).
  • Parquet ColumnIndex の統計情報で、String カラムにおいて min_value > max_value となる問題を修正しました。 #103334 (Saurabh Kumar Ojha).
  • Native format のフラット化された Dynamic データの不正な形式をチェックするようにしました。 #103392 (Pavel Kruglov).
  • url テーブル関数から _time カラムを設定するようにしました。#103437 (Nikita Taranov) 。
  • SVE 命令が利用できない環境でも SVE 命令を使ってしまっていた SVE 検出を修正しました。#103568 (Raúl Marín) 。

ビルド/テスト/パッケージングの改善

  • Libstemmer (Snowball) の依存関係で、より新しい v3.0.1 を使用するようになりました。#99256 (Jimmy Aguilar Mena) 。
  • clickhouse-test で use_skip_indexes_for_top_kuse_top_k_dynamic_filteringquery_plan_max_limit_for_top_k_optimization の設定をランダム化。 #91782 (Nikita Fomichev).
  • 関数向けのストレステストを実装し、そのさまざまな特性の妥当性を検証するようにしました。 #93543 (Michael Kolupaev).
  • llvm-project について、upstream の設定を取り込む代わりに、独自の CMake 構成を提供。 #97453 (Konstantin Bogdanov).
  • クエリ最適化パスのカバレッジを高めるため、テストインフラストラクチャ内で optimize_* 設定のランダム化対象を増やしました。#97547 (Alexey Milovidov) 。
  • Rust ツールチェーン nightly-2026-03-22 を使用。#98602 (Konstantin Bogdanov).
  • wasmtime v42.0.1 を使用しました。 #98603 (Konstantin Bogdanov).
  • llvm-project 22.1.1 を使用。 #98882 (Konstantin Bogdanov).
  • nightly のテスト単位カバレッジパイプラインで、SANITIZE_COVERAGE (カスタムサニタイザーコールバック、シンボル単位の粒度) を LLVM のソースベースカバレッジ (WITH_COVERAGE, -fprofile-instr-generate -fcoverage-mapping) に置き換えました。サーバーは起動時に ELF セクションから自身のカバレッジマッピングを読み込み、新しい SYSTEM SET COVERAGE TEST 'name' コマンドを通じて、テストごとに (file, line_start, line_end) タプルを収集するようになりました。対象を絞った CIチェックでのテスト選定では、新しい CIDB テーブル checks_coverage_lines に対する行範囲クエリを使用し、変更された差分行のうちどれだけをカバーしているかに基づいて候補テストをランク付けします。#99513 (Nikita Fomichev).
  • -O0 ビルドで発生する llvm-libc のリンクエラーを修正。 #100023 (Zheguang Zhao).
  • 設定に logger.loglogger.errorlog の設定が含まれていない場合 (たとえば、すべてのログメッセージを STDOUT/STDERR に出力する想定のとき) に、コンテナ起動時に発生していた 2 件のエラーメッセージを修正しました。 #100239 (Simon).
  • macOS ビルドでは、Apple の ld (cctools-port ld64) より ld64.lld を優先するようにしました。これにより、Darwin でのリンク時間が大幅に短縮されるはずです。cctools-port の ld64 は、-ffunction-sections-dead_strip を使用すると非常に遅いためです。ld64.lld が利用できない場合は、ld にフォールバックします。 #100275 (Alexey Milovidov).
  • ディレクトリに機密情報が一切登録されないことを確認するテスト (REST + Glue) 。#100307 (Konstantin Vedernikov) 。
  • 最近変更されたテストを、異なるランダム化設定で繰り返し実行するようにしました。#100385 (Alexey Milovidov).
  • CMake で #embed ファイルの依存関係を追跡し、正しく再ビルドできるように ccache の depend mode を有効にしました。#100411 (Alexey Milovidov) 。
  • TPC-Hクエリの正しさを検証するテストを追加しました。#100580 (Raufs Dunamalijevs) 。
  • aws-sdk-cpp 1.11.771 を使用するようになりました。 #100582 (Konstantin Bogdanov).
  • 性能テスト用XMLから、file 属性を使って外部のSQLクエリファイルや設定を参照できるようになりました。#100747 (Raufs Dunamalijevs).
  • LowerUpperImpl.h に不足していた TargetSpecific.h の include を追加し、-march=x86-64-v4 でのコンパイルが通るようにしました。#100932 (Alexey Milovidov).
  • cxxflags に —no-default-config を追加し、Gentoo でのビルドを修正しました。#100973 (Isak Ellmer).
  • utils/auto-bisect/ を追加しました。これはシェルベースの二分探索フレームワークで、ローカルでビルドしなくても、事前ビルド済みの CI バイナリをダウンロードし、ユーザー指定のテストスクリプトを実行して、リグレッションを引き起こした最初のコミットを特定できます。#100989 (Nikita Fomichev) 。
  • CMake では ThinLTO をデフォルトで無効化し、ローカルの開発者向けビルドで暗黙的に有効にならないようにしました。CI のリリースビルドは -DENABLE_THINLTO=1 を明示的に指定しているため、影響を受けません。#101041 (Alexey Milovidov).
  • 性能テストにTPC-DS SF1ベンチマークを追加。#101209 (Raufs Dunamalijevs) 。
  • 以下を対象とする、MergeTree の論理削除向けステートレステストが追加されました: has_lightweight_delete フラグのライフサイクル、optimize_trivial_count_query における COUNT(*) の正確性、MATERIALIZED/DEFAULT カラムの整合性、ReplicatedMergeTree フラグの復元、削除済みの行に対する read_in_order、複数回の delete/merge サイクル、_row_exists カラムの隠蔽、さまざまな predicate、ALTER DELETE に対する RBAC の適用。#101792 (Nikita Fomichev).
  • タグ付きリリース向けに、ubuntu および alpine バリアントの Distroless Dockerイメージが公開されるようになりました。#101941 (Rahul Nair).
  • スタックトレースには、ビルドディレクトリを含む煩雑なパス (例: ./ci/tmp/fast_build/./src/Common/Exception.cpp) ではなく、クリーンな相対パス (例: src/Common/Exception.cpp) が表示されるようになりました。 #102000 (Raúl Marín).
  • リポジトリにコミットされた 5 MB 超のファイルを拒否する CI の Style check を追加し、既存の正規のテストデータについてはホワイトリストで許可するようにしました。未使用の 14 MB の zookeeper_log.parquet を削除しました。 #102080 (Raúl Marín) 。
  • コンパイル時間を短縮するため、ヘッダファイルから未使用の #include ディレクティブを約400件削除しました。#102585 (Raúl Marín) 。
  • wasmtime v43.0.1 を使用するようにしました。 #102603 (Konstantin Bogdanov).
  • openssl 3.5.6 を使用するようにしました。 #102606 (Konstantin Bogdanov).
  • xz 5.8.3 を使用。 #102607 (Konstantin Bogdanov).
  • distroless Docker image のベースを Debian 12 (glibc 2.36、OpenSSL 3.0) から Debian 13 (glibc 2.41、OpenSSL 3.5) へアップグレードし、CVE の影響範囲を縮小して、到達可能な脆弱性をゼロにしました。#101678 (Rahul Nair) 。

ClickHouse 26.3 LTS リリース、2026-03-26。 プレゼンテーション, ビデオ

後方互換性を持たない変更

  • アップグレード後にダウングレードすると、データが失われる可能性があります。データ型のシリアル化バージョンが、ネストされたデータ型にも伝播されるようになりました。たとえば、これまで String のシリアル化バージョン with_size_stream は、最上位レベルの String カラムと Tuple の要素にのみ適用されていました。現在は、Array/Map/Variant/JSON/etc. など、任意のネストされた型の中にあるあらゆる String 型に適用されます。この動作は、現在デフォルトで有効になっている MergeTree setting propagate_types_serialization_versions_to_nested_types によって制御されます。この変更により、新しく作成されたデータパーツは古いバージョンでは読み取れなくなりますが、古いパーツは新しいバージョンでも問題なく読み取れます。アップグレードは安全ですが、ダウングレードは安全ではありません。26.3 へのアップグレード後にロールバックが必要になった場合、ネストされた型を持つカラムに 26.3 が書き込んだデータは読み取れなくなります! 詳細については #101429 を参照してください。#94859 (Pavel Kruglov).
  • hypothesis スキップ索引タイプを削除しました。これは実用性が低く、実験的でわかりにくい機能でした。INDEX ... TYPE hypothesis を指定してテーブルを作成すると、今後はエラーになります。#96874 (Alexey Milovidov).
  • 実験的なdetectProgrammingLanguage関数を削除。#99567 (Alexey Milovidov) 。
  • SQL 標準に合わせて NOT 演算子の優先順位を修正しました。これにより、NOTIS NULLBETWEENLIKE、および算術演算子よりも低い優先順位で結合されるようになりました。たとえば、NOT (x) IS NULL は、従来の (NOT x) IS NULL ではなく、NOT (x IS NULL) として解析されるようになりました。これにより、従来の (標準に準拠していない) 動作に依存していたクエリの結果が変わる可能性があります。#97680 (Alexey Milovidov).
  • 通常のプロジェクションのメタデータを修正し、複数カラムのソートキーを持つプロジェクションが正しく認識されるようにしました。#90429 を踏まえた修正です。#91352 (Amos Bird).
  • replace_long_file_name_to_hash 設定がスキップ索引ファイルで考慮されておらず、“File name too long” エラーが発生したり、長い名前の索引で索引の読み取りができなくなったりする問題を修正しました。スキップ索引のファイル名は、カラムファイルと同様に、max_file_name_length を超える場合にハッシュ化されるようになりました。この変更には後方互換性があります (新しいサーバーは古いパーツを読み取れます) が、ダウングレード時 (またはローリングアップグレード中の古いサーバー) には、長い名前の索引が無視される可能性があります。#97128 (Raúl Marín).
  • デフォルトで非同期 INSERT が有効になりました。ClickHouse では今後、すべての小さな insert がデフォルトでバッチ処理されます。この設定は compatibility で指定します。compatibility=<version less than 26.2> を設定した場合、デフォルト値は以前と同じ false になります。非同期 INSERT は、users profiles の設定、session、query、または MergeTree table について、複数のレベルでオン/オフを切り替えられます。 #97590 (Sema Checherinda).
  • mysql_datatypes_support_level のデフォルト値が空から decimal,datetime64,date2Date32 に変更され、MySQL の DATEDate32DECIMAL/NUMERICDecimal、精度付きの DATETIME/TIMESTAMPDateTime64 に、デフォルトで適切にマッピングされるようになりました。従来、MySQL の DATE カラムは Date にマッピングされていましたが、Date は 1970-01-01 より前の日付を表現できないため、データ破損を引き起こしていました。#97716 (Alexey Milovidov).
  • mergeTreeAnalyzeIndexes{,UUID} では、低速な regexp の代わりに、part 名の配列を受け付けるようになりました (実験的機能) 。#98474 (Azat Khuzhin) 。
  • 実行可能 UDF のデフォルトの stderr_reactionthrow から log_last に変更しました。stderr に警告を出力する UDF は、終了コードが 0 の場合は失敗しなくなりました。終了コードに関する例外には、stderr の内容が含まれるようになりました。#99232 (Xu Jia) 。

新機能

  • MergeTree の Map カラム向けに、バケット化シリアライゼーションが追加されました (map_serialization_version = 'with_buckets') 。キーはハッシュベースのバケットに分割されるため、単一のキー (m['key']) を読み取る際には、カラム全体ではなく 1 つのバケットだけを読めばよくなり、Map のサイズに応じて単一キーのルックアップが 2〜49 倍高速化されます。バケット数とバケット化の戦略は、新しい MergeTree 設定 map_serialization_versionmax_buckets_in_mapmap_buckets_strategymap_buckets_coefficientmap_buckets_min_avg_size で制御できます。#99200 (Pavel Kruglov) 。
  • マテリアライズド CTE をサポートしました。クエリ実行中に CTE を一度だけ評価し、その結果を一時テーブルに格納できるようになりました。#53449 をクローズしました。 #94849 (Dmitry Novik).
  • 互換性のため、NOW などの一部の SQL 標準関数を括弧なしで使えるようにしました。#52102 をクローズしました。#95949 (Aly Kafoury).
  • 自然順ソートキー関数は naturalSortKey(s) として使えるようになりました。#90322 (Nazarii Piontko) 。
  • JSONExtract関数で、ネイティブのJSON/Object入力を使用できるようになりました。#88370 をクローズ。#96711 (Fisnik Kastrati) 。
  • クエリパラメータの型が Nullable で、かつ指定されていない場合は、その値を NULL とみなします。 #93869 (Vikash Kumar).
  • Replicated database で補助的な ZooKeeper をサポート。 #95590 (RinChanNOW).
  • Map と同様に、JSON type でパスの存在を確認する has 関数をサポートしました。#96927 (DQ).
  • mergeTreeTextIndex(database, table, index) テーブル関数が追加され、テキスト索引からデータを直接読み取れるようになりました。この関数は、内部情報の確認や、テキスト索引データに対する集計の実行に使用できます。#97003 (Anton Popov).
  • table_readonly MergeTree setting を追加し、テーブルを読み取り専用としてマークすることで、insert や変更を防止できるようにしました。#97652 (Alexey Milovidov) 。
  • 新しい設定 use_partition_pruning と、そのエイリアスである use_partition_key を追加しました。これを false に設定すると、パーティションキーに基づくパーティションプルーニングが無効になります。 #97888 (Nihal Z. Miaji).
  • IcebergテーブルでALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')を実装しました。#97904 (murphy-4o) 。#99130
  • <protocols> 内の各 type=http エントリで、別個の <http_handlers_*> 設定セクションを参照するカスタム <handlers> キーを指定できるようになり、ポートごとに異なる HTTP ルーティングルールを設定できるようになりました。#98414 (Amos Bird) 。
  • EXPLAINpretty=1 オプションを追加し、ツリー形式のインデント付き出力を可能にするとともに、compact=1Expression ステップを折りたたんで、クエリプランをより読みやすくしました。#98500 (Kirill Kopnev) 。
  • restore_access_entities_with_current_grants サーバー設定を追加しました。有効にすると、バックアップから復元されたユーザー/ロールの権限は、復元を実行するユーザーが付与できる範囲に制限されるため、ACCESS_DENIED で失敗せずに済みます (GRANT CURRENT GRANTS と同じセマンティクス) 。#98795 (pufit).
  • Unicodeのケースフォールディングおよび発音区別符号の削除のためのcaseFoldUTF8関数とremoveDiacriticsUTF8関数を追加しました。#98973 (George Larionov) 。
  • NFKC 正規化とケースフォールディングを組み合わせた NFKC_Casefold Unicode 正規化用の文字列関数 normalizeUTF8NFKCCasefold を追加しました。#99276 (George Larionov) 。
  • 全文検索用索引および tokens 関数向けに、unicode_word トークナイザーを追加しました。これは Unicode の単語境界規則に基づいてテキストを分割します。ASCII の単語は接続文字 (アンダースコア、コロン、ドット、シングルクォート) を含めて構成され、非 ASCII の Unicode 文字はそれぞれ 1 文字のトークンになります。注: 26.3 ではこのトークナイザーは unicode_word という名前でのみ受け付けられます。26.4 では asciiCJK にリネームされました。#99357 (Amos Bird) 。
  • skip_unavailable_shards が有効な場合に、通知なしでスキップできる利用不能な分片の数を制限するため、max_skip_unavailable_shards_num および max_skip_unavailable_shards_ratio 設定が追加されました。利用不能な分片の数または比率が設定したしきい値を超えた場合、不完全な結果をそのまま返す代わりに例外が発生します。#99369 (Alexey Milovidov).
  • ユーザーはサブクエリ式で SOME キーワードを使えるようになりました。動作は ANY と同一です。#99842 (Artem Kytkin).
  • テキスト出力フォーマットで FixedString 値の末尾にあるヌルバイトを取り除くための output_format_trim_fixed_string 設定を追加しました。#97558 (NeedmeFordev).
  • FROM句で、括弧で囲まれたテーブルJOIN式 (例: SELECT * FROM (t1 CROSS JOIN t2)) をサポートしました。#97650 (Alexey Milovidov) 。
  • 関数 toDaysInMonth を実装しました。指定した日付が属する月の日数を返します。#99227 (Vitaly Baranov) 。

実験的機能

  • WebAssembly ベースのユーザー定義関数 (UDFs) の実験的サポートを追加し、カスタム関数ロジックを WebAssembly で実装して ClickHouse 内で実行できるようになりました。Wasmtime バックエンドサポートへの貢献に対し、Alexey Smirnov に特別な謝意を表します。#88747 (Vladimir Cherkasov)。あわせて、WASM UDF サポートも段階的に改善されました。#99373 (Vasily Chekalkin)。
  • polyglot ライブラリを使用した外部 SQL ダイアレクト のサポートを追加しました。#99496 (Alexey Milovidov)。
  • ALP 浮動小数点圧縮コーデックを追加しました (圧縮できない double に対する ALP_rd fallback はありません) 。#91362 (Nazarii Piontko)。
  • JSON カラム向けの実験的な lazy 型ヒントを追加しました。allow_experimental_json_lazy_type_hints で有効にすると、型ヒントの追加または変更のみを行う ALTER TABLE ... MODIFY COLUMN json JSON(path TypeName) は、過去のデータを書き換えることなく、メタデータのみの操作として即座に完了します。型ヒントは古いパーツにはクエリ時に適用され、INSERT 時およびバックグラウンドマージ中に実体化されます。#97412 (tanner-bruce)。
  • YTsaurus テーブルエンジンからの並列読み取りを有効化しました。#97343 (MikhailBurdukov)。

パフォーマンス改善

  • データレイクのパフォーマンスを改善しました。以前のバージョンでは、オブジェクトストレージからの読み取り時に、処理スレッド数に応じてパイプラインのサイズが調整されていませんでした。これにより、マルチコアマシンで大幅な性能向上 (約40倍) が得られます。#99548 (Alexey Milovidov).
  • 現在、enable_parallel_replicasautomatic_parallel_replicas_mode の関係は次のとおりです。クエリで並列レプリカを使用できるのは、enable_parallel_replicas > 0 の場合に限られます。さらに、automatic_parallel_replicas_mode=1 の場合、並列レプリカを使用するかどうかは、あらかじめ収集された統計情報に基づいてプランニング時に決定されます。automatic_parallel_replicas_mode=0 の場合は、統計情報に関係なく、サポートされているすべてのクエリで並列レプリカが使用されます。特筆すべき例外として、並列レプリカを使う分散 insert-select があります。この場合、クエリは常に automatic_parallel_replicas_mode=0 であるかのように実行されます。#97517 (Nikita Taranov).
  • 述語に任意の比較演算子 (=, <, >, !=) が含まれ、かつパーティションキーが決定論的な関数チェーンで包まれている場合に、パーティションプルーニングを行えるようにしました (たとえば、PARTITION BY xcityHash64(x) % 5 > 2toYYYYMM(x) < 2026toYYYYMM(x) = 2026toYYYYMM(x) != 2026 のような述語はいずれも、プルーニングにパーティションキーを使用します) 。#28800 をクローズしました。#98432 (Nihal Z. Miaji) 。
  • CAST の変換先の型が Nullable で、かつ変換が単調である場合に、read-in-order 最適化と主キーのプルーニングを利用できるようになりました。たとえば、PRIMARY KEY x の場合、ClickHouse は ORDER BY x::Nullable(UInt64) に対して read-in-order 最適化を使用でき、WHERE x::Nullable(UInt64) > 500000 のような条件に対して主キーのプルーニングを適用できます。#98482 (Nihal Z. Miaji).
  • 整数型カラムが浮動小数点リテラルと比較される場合に、索引のプルーニングとフィルタのプッシュダウンが可能になりました。たとえば、WHERE x < 10.5 のような条件では主キーを使ったプルーニングが可能になり、prime < 1e9number < 1e5 のようなフィルタも、無制限に実行される代わりに、primes() および numbers() テーブル関数にプッシュダウンされるようになりました。#85167 をクローズしました。 #98516 (Nihal Z. Miaji).
  • メタデータの読み取りだけのためにファイルを再ダウンロードする必要をなくし、読み取り性能を向上させるため、Parquet メタデータ用の新しい SLRU cache が追加されました。#98140 (Grant Holly).
  • オプティマイザの統計情報に基づき、ANTI、SEMI、FULL JOIN の左右を入れ替えられるようになりました。#97498 (Hechem Selmi) 。
  • 大きな Polygon に対する pointInPolygon の granule スキップを最適化し、主キーのプルーニング中に pointInPolygon の索引解析で例外が発生する問題を修正しました。#91633 (Nihal Z. Miaji) 。
  • levenshteinDistance 関数の性能を改善。 #94543 (Joanna Hulboj).
  • 要素ごとの関数呼び出しを避けることで、バッチの Decimal 型変換を最適化しました。 #95923 (Konstantin Bogdanov).
  • Icebergテーブルで、iceberg_metadata_async_prefetch_period_ms テーブル設定による非同期のメタデータプリフェッチがサポートされ、メタデータキャッシュを定期的に事前拡充できるようになりました。さらに、iceberg_metadata_staleness_ms クエリ設定により、指定した古さのしきい値より新しい場合は、SELECTクエリでキャッシュ済みのメタデータを使用できるため、リクエスト処理中に Iceberg カタログを呼び出す必要がなくなります。#96191 (Arsen Muk).
  • S3Queue の ordered mode では、プレフィックス全体の履歴を再度一覧取得するのを避けるために S3 ListObjectsV2 StartAfter を使用し、ListObjects の呼び出し回数を削減します。 #96370 (Venkata Vineel ).
  • insert の deduplication におけるメモリ使用量を削減。通常、deduplication には元の block が必要ですが、同期 insert ではこれを省略できるため、メモリを大幅に節約できます。 #96661 (Sema Checherinda).
  • ハードコードされた 64 ではなく、cache line size にはアーキテクチャ固有の値を使用するようにしました。#97357 (Nikita Taranov).
  • テキスト索引のDictionaryからの読み取りをわずかに最適化し、テキスト索引解析全体のパフォーマンスを改善しました。 #97519 (Anton Popov).
  • ARM での 16 バイトブロックの LZ4 解凍を高速化しました。#97774 (Raúl Marín) 。
  • SIMD と状態保持型トークナイザーをサポートするため、従来のイテレータースタイルの API を新しい高性能なインターフェイスに置き換え、トークン化処理をリファクタリングしました。#90268 の一部です。#97871 (Amos Bird)。
  • 索引付きカラムと非索引カラムの両方を含む複合条件を持つクエリにおける、テキスト索引の索引解析のパフォーマンスを改善しました。従来、このようなケースでは、索引解析中の早期終了最適化が誤って無効になっていました。#98096 (Anton Popov).
  • 非常に長い Array や map を生成する定数式を含むクエリのパフォーマンスを改善しました。 #98287 (Alexey Milovidov).
  • 整数定数との比較時における DateTime64 主キーのキー条件解析を修正し、これまでグラニュールのプルーニングが行われなかった問題を解消しました。#98410 (Amos Bird).
  • 設定 optimize_syntax_fuse_functions はデフォルトで有効になっています。#98424 (Alexey Milovidov) 。
  • 集約状態を介した行ごとのストアフォワーディングではなくローカルアキュムレータを使用するように avgWeighted aggregate function を最適化し、Nullable 入力で最大 27% の性能向上を実現しました。 #98793 (Antonio Andelic) 。
  • 特定の状況における並列ウィンドウ関数や、大きな配列を扱うarrayFoldワークロードで、性能を向上させ、メモリ使用量を削減します。これにより、影響を受けるクエリにおけるページフォールトの負荷が軽減され、厳しいメモリ制限下での安定性も向上する場合があります。#98892 (filimonov) 。
  • ソート済みのマージ処理のパフォーマンスを改善しました。#99013 (Artem Zuikov) 。
  • INTERSECT ALLEXCEPT ALL を最適化。#99097 (Raufs Dunamalijevs) 。
  • 逆順読み取りでの read_in_order_use_virtual_row 最適化をサポートしました。#99198 (Vladimir Cherkasov) 。
  • 書き込み前に JoinUsedFlags が設定されているかどうかを確認することで、RIGHT および FULL JOIN における cache の競合を低減しました。 #99274 (Hechem Selmi).
  • 浮動小数点演算を純粋な整数演算に置き換えることで PrefetchingHelper::calcPrefetchLookAhead を最適化し、命令 cache のレイアウトを改善するとともに、集計ループ中のサイクルオーバーヘッドを削減しました。#99327 (Riyane El Qoqui).
  • ノードの子の保存に使用する absl::flat_hash_setCompactChildrenSet に置き換えることで、Keeper のメモリ消費量を削減しました。新しいコンテナーは、ヒープ割り当てなしで 0~1 個の子をインラインに格納でき、Keeper ノードの大半をこれでカバーできます。これにより、KeeperMemNode のサイズは 144 バイトから 128 バイトに削減されます。 #99860 (Antonio Andelic).
  • 集約プロジェクションがビューでも正しくサポートされるようになりました。#32753 を修正しました。#88798 (Amos Bird) 。
  • join_use_nulls による OUTER から INNER への join 変換の最適化をサポートしました。#90978 をクローズしました。#95968 (Vladimir Cherkasov) 。
  • 読み取り前にサイズを正しく計算することで、サブカラムの読み取りを改善しました。これにより、メモリ使用量が削減され、サブカラムの読み取りが高速化されます。#96251 (Pavel Kruglov).
  • 短命な割り当て、つまりクエリやリクエスト向けの割り当てと、cache 向けのより長寿命な割り当てが混在した際のメモリ断片化を防ぐため、mark cache、非圧縮 cache、ページキャッシュがそれぞれ別個の jemalloc アリーナを使用するようにしました。#96812 (Seva Potapov). #98812. #99021
  • DELETE TTL ルールが設定されたテーブルで、Vertical merge アルゴリズムを使用できるようになりました。#97332 (murphy-4o) 。
  • 分散索引解析時にデータスキッピングインデックスを適用します。 #97767 (Azat Khuzhin).
  • セカンダリ索引のマークは、prewarm_mark_cache 設定が有効な場合にプリウォームされるようになりました (data part のフェッチ時およびテーブル起動時に、index mark cache に読み込まれます) 。#97772 (Anton Popov).
  • アクセス制御におけるロックを削減しました。 #97894 (Nikita Taranov).
  • apply_row_policy_after_final または apply_prewhere_after_final が有効な場合、行ポリシーおよび PREWHERE の複合 AND 条件が分解され、主キーの索引解析のためにソートキーの各要素を抽出できるようになりました。以前は、遅延されたフィルタにソートキーに関する条件とソートキーに関係しない条件が混在している場合 (たとえば x > 1 AND y != ‘foo’) 、式全体が索引解析の対象外となっていました。現在は、ネストした AND 式であっても、ソートキーの条件 (x > 1 など) を抽出して Granule pruning に利用できるようになりました。#98513 (Yarik Briukhovetskyi).
  • ロックを取得せずにタスクのリソースを解放できるようにし、MergeTreeBackgroundExecutor におけるロック競合を軽減しました。#93620 をクローズ。#98604 (Dmitry Novik).
  • ArrowStream リーダーが先頭のバイト列を非常に大きなメタデータ長と誤認していたことにより、Arrow 以外のデータ (例: フォーマットを明示せずに url または file から読み込む JSON) の読み込み時に、フォーマット自動検出で過剰なメモリ (約 514 MiB) を消費していた問題を修正しました。#98893 (Konstantin Bogdanov) 。

改善

  • 同じカラム内に異なるGeo型が含まれているGeoParquetファイルを解析できるようになりました。 #97851 (Mark Needham).
  • ワイルドカードの意味を考慮しつつ LIKE パターンをトークン化する tokensForLikePattern SQL 関数を導入しました。%_ はワイルドカードとして扱い、エスケープされたワイルドカード (\%\_) はリテラルとして扱い、エスケープされていないワイルドカードに隣接する token は破棄します。#97872 (Amos Bird).
  • S3 テーブルエンジンに {_schema_hash} プレースホルダーを追加し、table のカラム定義のハッシュを S3 の path に挿入できるようにしました。 #98265 (Miсhael Stetsyuk).
  • SymbolIndexaddressToSymbolsystem.symbols、および buildId は、Mach-O のシンボルテーブルをパースすることで、macOS でも利用できるようになりました。#99014 (Alexey Milovidov) 。
  • system.stack_trace テーブルが macOS でも利用可能になり、サーバーのすべてのスレッドのスタックトレースを調査できるようになりました。#98982 (Alexey Milovidov).
  • LDAP クライアントがリファラルをたどるかどうかを制御する、サーバーごとの LDAP 設定オプション <follow_referrals> (デフォルトは false) を追加しました。リファラル追跡を無効にすると、Active Directory のドメインルートのベース DN から検索する際に発生するタイムアウトやハングを回避できます。リファラル関連のログメッセージは warn から trace に変更されました。#96765 (paf91).
  • クエリ実行時に使用されたデータスキッピングインデックスを、query_log テーブルの skip_indices という新しいカラムで追跡するようになりました。#78676 を修正しました。元の著者は @pheepa です。#87862 (Grant Holly).
  • ACCESS_DENIED のヒントでは、ユーザーに必要なすべてのカラムを表示する権限がある場合を除き、カラム名は表示されなくなりました。データベース名とテーブル名は引き続きヒントに表示されます。 #91067 (filimonov).
  • マージ負荷が高い場合のクリーンアップ遅延を防ぐため、MergeTree に専用のクリーンアップスレッドを追加しました。これにより #86181 が解決されます。#91574 (Amos Bird) 。
  • いずれかのホストのIPではなく、ローカルサーバーのホスト名に対応するIPが変更された場合にクラスター設定を再読み込みするようにしました。これにより、#81215#70156、および#65268を修正します。#93726 (Zhigao Hong) 。
  • optimize_aggregators_of_group_by_keys により、GROUPING SETS クエリ内の集約関数を正しく最適化できるようになりました。#93935 (Xiaozhe Yu) 。
  • Keeper-bench: メトリクスでエラーを報告し、—input-request-log モード用の JSON メトリクスファイルを生成します。#95748 (Mohammad Lareb Zafar).
  • CREATE USER に新しい ROLE 句を追加しました。#97074 (Vitaly Baranov) 。
  • Replicated database で作成されたクラスターに対して、internal_replication 設定を行えるようになりました。#97228 (Pervakov Grigorii) 。
  • 新しい設定 allow_nullable_tuple_in_extracted_subcolumns は、TupleVariantDynamicJSON から抽出された Tuple(...) サブカラムを Nullable(Tuple(...)) (欠落した行では NULL) として返すか、Tuple(...) (欠落した行ではデフォルトのタプル値) として返すかを制御します。デフォルトでは無効で、この設定を変更するにはサーバーの再起動が必要です。 #97299 (Nihal Z. Miaji).
  • 遅延フィルターに関する情報を、EXPLAINクエリの出力に別項目として追加 (Row Policies/PREWHERE とともに FINAL を使用する場合) 。関連: #91065#97374 (Yarik Briukhovetskyi) 。
  • type_json_allow_duplicated_key_with_literal_and_nested_object をデフォルトで有効にしました。これにより、元の JSON データ {"a" : 42, "a.b" : 42} を ClickHouse が {"a" : 42, "a" : {"b" : 42}} のような JSON に整形する場合でも、その JSON のパース時に重複キーに関するエラーを回避できます。#97423 (Pavel Kruglov).
  • Keeper の改善: find_super_nodes は、Keeper でノード数が想定外に増加した際のデバッグに非常に役立つコマンドです。残念ながら、スーパーノードが複数ある場合、最初に見つかったスーパーノードの子ノードをたどるところでコマンドが無限に停止してしまうため、2 つ目以降を見つけるのはほぼ不可能でした。この PR では、スーパーノードの子ノードをたどれないようにしました。#97819 (pufit).
  • clickhouse-keeper-client の補完機能のサポートを開始。 #97828 (Konstantin Bogdanov).
  • クラッシュ時に、非同期ログバッファをフラッシュするようにしました。 #97836 (Azat Khuzhin).
  • impersonate 機能がデフォルトで有効になりました (EXECUTE AS target_userを参照) 。#97870 (Vitaly Baranov) 。
  • SQLite table engine におけるクエリのキャンセルについて、KILL QUERY および clickhouse-client でのクエリキャンセル (Ctrl+C) を改善しました。#97944 (Roman Vasin).
  • サーバー設定 jemalloc_profiler_sampling_rate を追加し、jemalloc の lg_prof_sample を制御できるようにするとともに、非同期メトリクス jemalloc.prof.lg_sample として公開しました。#97945 (Antonio Andelic).
  • 同時実行の有界キュー実装で、重みのサポートを追加しました。#97962 (Daniil Ivanik).
  • PostgreSQL の Dictionary ソースで、許可されるキーに sslmode を追加しました。これまで sslmode は PostgreSQLDictionarySource.cpp の dictionary&#95;allowed&#95;keys 許可リストに含まれていなかったため、PostgreSQL の Dictionary 接続で SSL モードを設定できませんでした。その結果、SSL を必須とする PostgreSQL サーバー (たとえば、デフォルトで SSL を強制する AWS RDS) に Dictionary から接続できず、接続時の TLS ネゴシエーションが失敗し、サーバーは暗号化されていないフォールバック接続を拒否していました。#98014 (mcalfin).
  • 紛らわしい一般的なメッセージではなく、存在しないファイルパスを clickhouse または clickhouse-local に渡したときに、明確な「そのようなファイルはありません」エラーを表示するようにしました。#98048 (Raúl Marín).
  • テキスト索引を Nullable([Fixed]String) および Array(Nullable([Fixed]String)) カラムに対して構築できるようになりました。#98118 (Jimmy Aguilar Mena).
  • Dictionary ソースの依存先である named collections が削除されないようにしました。#98127 (Pablo Marcos) 。
  • totals を伴うクエリで grace_hash join アルゴリズムを有効にしました。#98144 (János Benjamin Antal) 。
  • 通常の shared merge tree における DROP DATABASE で、バックグラウンドマージを早い段階でキャンセルするようにしました。 #98161 (Shaohua Wang).
  • MongoDB と MySQL のクエリのキャンセルが、clickhouse-client での KILL QUERY とクエリのキャンセル (Ctrl+C) によって改善されました。#98187 (Roman Vasin) 。
  • NetlinkMetricsProvider を削除し、スレッドごとの taskstats メトリクス収集には procfs のみを使用するようにしました。Netlink ベースの収集はコンテナー化環境では問題があり、競合時のテールレイテンシも悪化します。#98229 (Amos Bird).
  • マニフェストファイルのキャッシュに関する問題を修正するため、Iceberg マニフェストファイルの処理をリファクタリングしました。 #98231 (Daniil Ivanik) 。
  • これにより、テーブルのソートキーが toDate(time) のような式である場合も考慮されるようになり、そのような式がフィルタの一部であれば、評価を遅延させないように判断できるようになりました。 #98237 (Yarik Briukhovetskyi).
  • ZooKeeper の ephemeral lock znode に割り当てられた sequential 番号の最大値を示す、新しい MaxAllocatedEphemeralLockSequentialNumber メトリクスを追加しました。#98243 (Miсhael Stetsyuk).
  • ClickStackをバージョン 2.20.0 に更新。 #98252 (Aaron Knudtson).
  • マルチリクエスト内の各サブリクエストを個別にカウントする新しいプロファイルイベント KeeperRequestTotalWithSubrequests が追加され、実際の Keeper ワークロードの可視性が向上しました。既存の KeeperRequestTotal イベントは、引き続き各マルチリクエストを1件のリクエストとしてカウントします。#98348 (Antonio Andelic) 。
  • SYSTEM RELOAD DICTIONARIES は、ほかのディクショナリをソースとするディクショナリが、再読み込み後に最新のデータを参照できるよう、ディクショナリをトポロジカル順序で再読み込みするようになりました。 #98356 (Alexey Milovidov) 。
  • MergeTree setting の変更後に、統計 cache を再起動するようにしました。#98520 (Han Fei) 。
  • 接続可能な”alive”レプリカのみが分散索引解析に参加します。 #98521 (Azat Khuzhin) 。
  • SQL で定義されたユーザーに対して、config で定義された設定プロファイル (default プロファイルを除く) の使用を禁止する設定 access_control_improvements.disallow_config_defined_profiles_for_sql_defined_users を追加しました (デフォルトでは無効) 。 #98662 (Alexander Tokmakov).
  • 自動並列レプリカのヒューリスティックで使用するノード数の上限を、max_parallel_replicas 設定だけでなく、クラスター内の実際のノード数にも合わせるようにしました。 #98668 (Nikita Taranov).
  • 分散索引解析向けに、ヘッジリクエストと非同期読み取りを実装。 #98724 (Azat Khuzhin).
  • バイナリのAggregateFunction状態のデシリアライゼーションでは、入力全体を最後まで消費することが必要になりました。余分な不要バイトが末尾に存在する場合、ClickHouse は不正な状態データを受け入れるのではなく、例外をスローするようになりました。#98786 (Nihal Z. Miaji).
  • TRUNCATE DATABASE がクエリのキャンセルに対応するようになりました。#98828 (Shaohua Wang) 。
  • keeper-bench に、リクエストのパイプライン化、ウォームアップ期間、操作ごとの統計、再現性のあるシード、より適切なエラー処理を追加して改善しました。#98906 (Antonio Andelic).
  • 分散索引解析でのSAMPLE句をサポート。 #98931 (Azat Khuzhin).
  • クエリが空の結果を返した場合やエラーが発生した場合でも、ダッシュボードにチャートのタイトルを表示するようにしました。 #98975 (Yash ).
  • アナライザのエラーメッセージで、テーブルのすべてのカラムを出力しないようになりました (これにより 150KB 超の例外が発生する可能性がありました) 。カラム一覧は現在 10 エントリまでに制限されています。#99002 (Yash ).
  • JOIN を含むサブクエリからカラム統計を適切に返すようにし、親クエリがそれを JOIN の並べ替えに利用できるようにしました。 #99096 (Alexander Gololobov).
  • 終了処理の開始時に、送信スレッドの終了を待たず、ZooKeeper セッションを即座に期限切れとしてマークするようにしました。これにより、ほかのスレッドは遅滞なく新しいセッションを確立できます。 #99102 (Raúl Marín).
  • LLVM-libc の数学関数の利用範囲を拡大しました: exp, exp2, expm1, fabs, fabsl, floor, fmodl, log, log2, logf, pow, scalbn, scalbnl, copysignl, nan, nanf, nanl、および explogxf の共有定数。 #99118 (Konstantin Bogdanov).
  • system.jemalloc_profile_text の collapsed フォーマットにおけるメモリ使用量を削減し、出力が重複する可能性がある問題を修正しました。 #99121 (Antonio Andelic).
  • system.aggregated_zookeeper_logis_subrequest カラムを追加し、スタンドアロンのリクエストと Multi/MultiRead リクエスト内のサブリクエストを区別できるようにしました。これまでは、サブリクエストはスタンドアロンのリクエストと同じバケットに集計されており、各サブ操作が multi-request 全体の所要時間で記録されていたため、平均レイテンシが実態を反映しないものになっていました。現在、サブリクエストのレイテンシは 0 になります。#99169 (Miсhael Stetsyuk).
  • カラムの型を指定しなくても ALTER TABLE MODIFY COLUMN x TTL ... コマンドを実行できるようになりました。#99208 (Nikolay Degterinsky).
  • すでに切断されたセッションに対する古い Keeper リクエストをスキップし、不要な Raft のラウンドトリップを回避します。追跡する完了済みセッション数の上限は、協調設定 max_finished_sessions_cache_size で定められます。#99246 (Antonio Andelic) 。
  • IN 演算子で、mapValues(map) に基づくテキスト索引をサポート。 #99286 (Anton Popov).
  • clickhouse keeper-client でシェル風補完をサポート (引用符付き引数、つまり 'foo ba' の補完や、エスケープされた引数、つまり foo\ ba の処理に対応し、空白を含むノードは ls で引用符付きで出力するようにしました) 。 #99312 (Azat Khuzhin).
  • ロック競合により Keeper の mntr コマンドがハングするのを防ぐようにしました。#99472 (Antonio Andelic) 。
  • mutex のスコープ外でコールバックの呼び出しと読み取りリクエストのディスパッチを行うことで、Keeper ディスパッチャのロック競合を低減し、オブザーバビリティ向けにプロファイル対応のロックガードを追加しました。#99751 (Antonio Andelic).
  • Parquetファイルの最後のblockの末尾でパディングが欠けていても許容する。 #99857 (Seva Potapov).

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • 完全修飾されていない場合に、Alias table のターゲットが DDL 依存関係として保存される際の扱いを修正しました。これにより、session database ではなく Alias table の database に保存されるようになりました。 #95175 (Enric Calabuig).
  • ALIASカラムのサブカラムの読み取り時に発生する誤った結果や例外を修正しました。#95408 (Pavel Kruglov) 。
  • 旧アナライザで、JOIN に非標準の識別子エイリアスを使用した場合にカラムが見つからない問題を修正。 #25594#47288、および #53263 を修正。 #95679 (Zhigao Hong).
  • 空の引数が渡された際に、Kusto dialect の関数 bin(), bin_at(), extract(), indexof() で発生するクラッシュを修正しました。#95736 (NeedmeFordev) 。
  • clickhouse-client で、local filesystem 上のデータレイクや LocalDisk で使用される可能性がある local_object_storage を、user_files_path 以外の場所にマウントすることを禁止しました。 #96201 (Daniil Ivanik).
  • DeltaLake テーブルエンジンで、snapshot version の変更時に発生する論理的なレースコンディションを修正し、冗長で負荷の高い snapshot の再読み込みを削除しました。#96226 (Kseniia Sumarokova) 。
  • Detach と Attach の間に複数回のリネームが連鎖的に行われた場合に、MergeTree でパートを Attach する際に発生する論理エラーを修正しました。 #96351 (Alexey Milovidov).
  • 同一のリクエストで compatibility とともに送信された明示的な設定が、その値が server のデフォルト値と一致している場合に、黙って無視されることがあった不具合を修正しました。#97078 (Raufs Dunamalijevs).
  • 並列パースを伴う INSERT で無効なデータに遭遇した際、実際のパースエラー (正しい行番号付き) ではなく NETWORK_ERROR を報告してしまうクライアントの問題を修正しました。 #97339 (Alexey Milovidov).
  • Nullable(Tuple) の導入後、sumCount 集約関数が古いシリアライズ済み状態を読み取れなくなっていた問題を修正しました。#97370 をクローズします。#97502 (Nihal Z. Miaji).
  • Nothing 型の要素 (例: NULL のタプル要素との比較) を含むタプル比較を GROUPING SETS および ORDER BY と併用した際に発生する例外を修正しました。 #97509 (Alexey Milovidov).
  • 複数の圧縮コーデック使用時に Compact MergeTree パーツで uncompressed_hash が非決定論的に計算される問題を修正しました。これにより、重複排除が誤動作する可能性がありました。 #97522 (Alexey Milovidov).
  • shared data 内で JSON と buckets を使用した INSERT SELECT の際に stream が欠落する論理エラーを修正しました。#97331 をクローズしました。 #97523 (Pavel Kruglov).
  • SummingMergeTree および CoalescingMergeTree のマージ時に、MEMORY_LIMIT_EXCEEDED 例外が誤って CORRUPTED_DATA として報告される不具合を修正しました。#97537 (János Benjamin Antal) 。
  • url() のようなテーブル関数を含む相関サブクエリで発生する “Context has expired” 例外を修正しました。#97544 (Alexey Milovidov).
  • 集約プロジェクション、Date型、およびカラム名の保持に関する optimize_syntax_fuse_functions の例外と誤動作を修正しました。#97545 (Alexey Milovidov).
  • regexp が一致しない場合に誤った結果を返していた、replaceRegexpOne から extract への誤ったクエリの書き換えを削除しました。あわせて、replaceRegexpOneGROUP BY ... WITH CUBE および group_by_use_nulls=1 と併用した場合に発生する例外も修正しました。#97546 (Alexey Milovidov).
  • クエリが強制終了された際に、database_atomic_wait_for_drop_and_detach_synchronously を指定した DROP DATABASE が無期限にハングする問題を修正しました。#97586 (Alexey Milovidov).
  • KILL QUERY で、WITH FILL の生成処理、dictGet による Dictionary の読み込み、または ReplicatedMergeTreemutations_sync=1 を指定した ALTER DELETE で処理が止まったクエリを終了できない問題を修正しました。#97589 (Alexey Milovidov).
  • loop テーブル関数は inner_storage->read() を直接呼び出していたため、行ポリシー、カラムレベルの権限、その他のセキュリティチェックが適用されるインタープリタ層をバイパスしていました。その結果、行ポリシーで制限されているユーザーでも、直接 SELECT を実行すると 0 行しか返らない場合であっても、loop(table) 経由ですべての行を読み取ることができていました。#97682 (pufit).
  • toDate() 関数の使用時に、epoch以前の DateTime64 に対するパーティションプルーニングが正しく行われない問題を修正しました。#97746 (Yarik Briukhovetskyi) 。
  • このパッチ適用後は、data part set 内により大きいパーティション ID を持つ別のパーティションが存在する場合、hasPartitionId は false を返すようになります。#97748 (Mikhail Artemenko).
  • JSON の高度な共有データにおいて、空のグラニュールの読み取り時に発生し得るクラッシュを修正しました。#97563 をクローズします。#97778 (Pavel Kruglov).
  • DROPINSERT の競合によって、Distributed への INSERT 時に発生する Cannot schedule a file LOGICAL_ERROR を修正しました。#97822 (Azat Khuzhin).
  • tokenbf_v1 スキップ索引を使用した mapContainsKey/mapContainsKeyLike の呼び出し時に発生する ClickHouse server のクラッシュやアサートを修正しました。#97826 (Shankar Iyer) 。
  • concatWithSeparatorformatIN サブクエリ、GLOBAL IN、およびランタイムフィルタを使用する JOIN において、複合型 (VariantDynamicTuple) 内の LowCardinality が原因で発生する LOGICAL_ERROR 例外を修正。 #97831 (Raúl Marín).
  • GROUP BY と組み合わせて、複数の分散テーブルに対する merge() テーブル関数で ARRAY JOIN を使用した際に発生する LOGICAL_ERROR 例外 Chunk info was not set for chunk in MergingAggregatedTransform を修正しました。#97838 (Raúl Marín).
  • 高い並行性で接続グループのハード上限に達した際に、HTTP 接続プールのデストラクタ内で未捕捉例外が発生し、サーバーがクラッシュ (std::terminate) する問題を修正しました。接続を接続プールに戻す際に、例外 HTTP_CONNECTION_LIMIT_REACHED~PooledConnection から外に漏れ、SIGABRT を引き起こす可能性がありました。 #97850 (Antonio Andelic).
  • grace_hash アルゴリズムを非等値 JOIN で使用し、JOIN 結果のサイズ制約により左側の block を最後まで処理できない場合に、誤った結果が返される不具合を修正しました。 #97866 (János Benjamin Antal).
  • #96686 で導入された Delta Lake メタデータのスキャンにおけるパフォーマンス上の非効率を修正しました。#97880 (Kseniia Sumarokova).
  • ZooKeeperクライアントの sendThread と receiveThread 間のデータ競合を修正しました。#97887 (Pablo Marcos) 。
  • distributed insert select で CTE を使用できない不具合を修正しました。https://github.com/ClickHouse/ClickHouse/pull/87789 の続きです。#95837 をクローズしました。#97889 (Yarik Briukhovetskyi).
  • CachedOnDiskReadBufferFromFile::readBigAt で発生する例外を修正しました。#97325 をクローズしました。#97890 (Kseniia Sumarokova).
  • カラムの不一致により、Alias エンジンでマテリアライズドカラムを使用した際に発生する LOGICAL_ERROR 例外を修正しました。#97907 をクローズしました。#97921 (Kai Zhu).
  • ログストレージに s3_plain メタデータを使用して Azure Blob Storage を利用する際、再起動後に Keeper のデータが失われる問題を修正しました。#97987 (Antonio Andelic).
  • sign 関数で、Int8 よりビット幅の大きい整数型に対する JIT の誤コンパイルを修正しました。これにより、-128..127 の範囲外の値で誤った符号を返す可能性がありました。#98012 (Alexey Milovidov).
  • 列名にドットを含む struct フィールド (例: STRUCT<`a.foo`: STRING, `b.foo`: STRING>) を持つ Delta Lake テーブルを、カラムマッピング “name” モードで読み取る際に発生していた DUPLICATE_COLUMN 例外と、NULL が黙って返される問題を修正しました。 #98013 (Caio Ishizaka Costa).
  • 論理更新およびセカンダリ索引の後に実行される mutation の不具合を修正しました。 #98044 (Raúl Marín).
  • 主キーと非主キーのスキップ索引を混在させた場合に、FINALクエリで誤った結果が返される問題を修正しました。 #98097 (Raúl Marín).
  • scalar file() および DESCRIBE TABLE file() に対して、READ ON FILE チェックを適用。 #98115 (Nikolay Degterinsky).
  • glob パターンを使ってファイルをクエリした際 (例: file('dir/**', 'LineAsString')) 、ディレクトリにダングリングシンボリックリンクが含まれていると、未処理のファイルシステム例外 (STD_EXCEPTION) が発生してクラッシュしていた問題を修正しました。現在はダングリングシンボリックリンクを黙ってスキップし、有効なすべてのファイルから結果を返すようになりました。#98143 (Mark Andreev).
  • フィルタ式で arrayJoin を使用して outer join を inner join に変換する際に、クエリプランの最適化で発生するセグメンテーションフォルトを修正しました。#98147 (Alexey Milovidov) 。
  • メッセージ間で読み取り状態がリセットされないことにより、ProtobufList フォーマットが Kafka エンジンで動作しない問題を修正しました。 #98151 (Alexey Milovidov).
  • analyzer_compatibility_join_using_top_level_identifier および ARRAY JOIN に関する論理エラーを修正し、#98164 をクローズしました。#98179 (Vladimir Cherkasov) 。
  • aggregated_zookeeper_log で、空のままになっていた watch レスポンス用の Watch 部分を設定しました。#98202 (Antonio Andelic).
  • パーティションキーのキーカラムがソートキーに含まれていない場合、パーティションプルーニングによって、FINAL での重複排除時に本来”勝つ”べき行を含むパーティションが誤ってスキップされる可能性がありました。 #98242 (Yarik Briukhovetskyi).
  • 定数 Array 引数を指定して kql_array_sort_asc/kql_array_sort_desc を呼び出した際に発生していた論理エラー “Bad cast from type DB::ColumnConst to DB::ColumnArray” を修正しました。#98251 (Alexey Milovidov).
  • extremes = 1 が有効な場合にクラッシュを引き起こす可能性があった ColumnConst::getExtremes の範囲外アクセスを修正しました。 #98263 (Alexey Milovidov).
  • 同じ一対のテーブル間で逆方向に実行される 2 つの同時実行 MOVE PARTITION 操作で発生する可能性があるデッドロックを修正しました。 #98264 (Alexey Milovidov).
  • HTTPサーバーは、不正なヘッダーが原因で発生する 400 Bad Request レスポンスに対して、空のボディではなくレスポンスボディにエラーメッセージを返すようになりました。#98268 (Alexey Milovidov).
  • 分散索引解析 (実験的機能) およびクエリ条件キャッシュで誤った結果が返される問題を修正しました。#98269 (Azat Khuzhin).
  • 65535 の境界をまたぐデータを含むキーカラムに対する toDate 変換で発生していた LOGICAL_ERROR 例外 “Invalid binary search result in MergeTreeSetIndex” を修正しました。#98276 (Alexey Milovidov) 。
  • query_plan_join_swap_table 最適化により、CROSS JOIN で囲まれた RIGHT JOIN がレガシー join step のコードパスで入れ替えられた際に発生する LOGICAL_ERROR 例外を修正しました。#98279 (Alexey Milovidov)。
  • 破損したquantilesDD集約関数の状態の読み取り時に、セグメンテーション違反、例外、無限ループ、OOMを防ぐため、DDSketchのデシリアライズ時に破損データを検証するようにしました。 #98284 (Alexey Milovidov).
  • 外側のクエリの相関カラムが arrayMap などのラムダ関数内で参照された際に発生する LOGICAL_ERROR “Trying to execute PLACEHOLDER action” を修正しました。 #98285 (Alexey Milovidov).
  • CASE 式に materialize(NULL) またはその他の Nullable(Nothing) 型の引数が含まれる場合に、caseWithExpression で発生していた論理エラー例外を修正しました。#98290 (Alexey Milovidov) 。
  • merge テーブル関数で _table 仮想カラムをフィルタリングする際に発生する bad cast 例外を修正しました。#98291 (Alexey Milovidov) 。
  • blocks/deduplication_hashes/ の ZooKeeper ディレクトリ間でクリーンアップ順序に不整合があったため、再挿入が誤って重複排除されてしまう散発的な重複排除の不具合を修正しました。 #98293 (Alexey Milovidov).
  • ORDER BY ... WITH FILLLIMIT BY と併用した場合に発生する例外を修正しました。#98361 (Alexey Milovidov) 。
  • Parquet/Arrow の Date カラムを Enum カラムに挿入した際に発生していた、検知しにくいデータ破損を修正しました。これにより、不正な enum 値を保存する代わりに、互換性のない型変換を適切に拒否するようになりました。#98364 (Alexey Milovidov).
  • Array カラムを含む Arrow ファイルを、Nested カラムを持つテーブルに読み込む際に発生する例外を修正しました。#98365 (Alexey Milovidov).
  • 索引またはプロジェクションがミューテーションの完了前に削除された場合に、MATERIALIZE INDEX および MATERIALIZE PROJECTION のミューテーションが停止したままになる問題を修正しました。#98369 (Alexey Milovidov).
  • Tuple 要素名が Nullable の null サブカラムと衝突する場合に、Nullable(Tuple(...)) の読み取り時に発生する例外を修正しました。#98372 (Alexey Milovidov).
  • Merge テーブル (Distributed テーブルをラップしたもの) を別のテーブルと結合する際に発生する例外 “Column … query tree node does not have valid source node” を修正しました。#98376 (Alexey Milovidov) 。
  • 文字列表現ではなく生のバイト列を生成していた、native V3 リーダーでの Parquet Bool から FixedString への誤った変換を修正しました。#98378 (Alexey Milovidov) 。
  • tryGetColumnDescription を修正し、他のカラムのルックアップメソッドとの整合性が取れるよう、親カラムの種類に基づいてサブカラムを絞り込むようにしました。#98391 (Alexey Milovidov).
  • HTTP Basic認証で、パディングなしのBase64認証情報を受け入れるようにしました。一部のHTTPクライアントは Authorization: Basic ヘッダーの末尾の = パディングを省略するため、これまでは認証に失敗していました。#98392 (Amos Bird).
  • 誤った min-max 索引の境界値が原因で、Nullable なパーティションキーカラムを含むパーツのマージ後にパーティションプルーニング結果が誤る問題を修正しました。#98405 (Amos Bird).
  • パイプラインエグゼキュータでまれに発生する例外を修正しました。この例外は、パイプラインの拡張とクエリのキャンセルが競合した際に、Received signal 6 として現れることがありました (デバッグビルド時のみ) 。#98428 (Alexey Milovidov) 。
  • count_distinct_optimizationQUALIFY 句とともに使用した際に発生する例外 “Column identifier is already registered” を修正しました。 #98433 (Alexey Milovidov).
  • IN/NOT INLowCardinality カラム引数を使用した際に発生する例外 “cannot be inside Nullable type” を修正しました (例: aLowCardinality(String) の場合の a NOT IN (b)) 。#98443 (Alexey Milovidov).
  • FilterBySetOnTheFly 最適化によって MergeJoinTransform との循環依存が生じた際、PingPongProcessor でデッドロックが発生し、full_sorting_merge JOIN で “Pipeline stuck” 例外が発生する不具合を修正しました。 #98454 (Alexey Milovidov).
  • 有効期限 (TTL) によってすべての行が削除されるパーツのマージ時に、定数の GROUP BY キーを持つ集計プロジェクションで発生する LOGICAL_ERROR 例外 “Projection cannot increase the number of rows in a block” を修正しました。#98458 (Alexey Milovidov).
  • CROSS JOININNER JOIN USING と併用した際に発生する logical error 例外を修正しました。#98459 (Alexey Milovidov).
  • キー引数が Nullable の場合に dictGetOrDefault で発生するヌルポインタ逆参照を修正しました。 #98460 (Alexey Milovidov).
  • 集約プロジェクション使用時に、materialize によりクエリとプロジェクションで LowCardinality 型の違いが生じる場合に発生していた DISTINCT クエリの例外を修正しました。#98462 (Alexey Milovidov) 。
  • OUTER JOIN と join_use_nulls が有効な場合に、arrayJoin をフィルタ式内で使用すると発生する LOGICAL_ERROR 例外を修正しました。#98464 (Alexey Milovidov) 。
  • optimize_aggregation_in_order と並列レプリカを併用した際に発生する論理エラー例外 “Replica decided to read in WithOrder mode, not in ReverseOrder” を修正しました。#98467 (Alexey Milovidov) 。
  • addWatch リクエスト後に ClickHouse Keeper が Java ZooKeeper クライアントを切断してしまう問題を修正しました。Java クライアントは addWatch レスポンスに 4 バイトの ErrorResponse ボディが含まれることを想定していますが、Keeper は空のボディを返していたため、EOFException とセッション切断が発生していました。これにより、Apache Curator の CuratorCache や永続ウォッチを使用するあらゆる Java アプリケーションが正常に動作しなくなっていました。#98079 を修正しました。 #98499 (Antonio Andelic).
  • フォロワーがダウンした際に、zk_followers および zk_synced_followers の Keeper メトリクスが減少しない問題を修正しました。mntr four-letter-word コマンドに、新たに zk_learners および zk_synced_non_voting_followers メトリクスを追加しました。#54173 を修正。#98504 (Antonio Andelic) 。
  • MergeTreeトランザクション利用時に、TRUNCATE TABLEOPTIMIZE TABLE が同時実行された際に発生する可能性があった renameAndCommitEmptyParts の LOGICAL_ERROR 例外を修正しました。 #98508 (Alexey Milovidov).
  • Keeper のセキュアな raft ポートが openSSL 設定の cipherListdhParamsFile を無視し、ユーザー指定の値ではなく常にデフォルト値を使用していた問題を修正しました。#51188 をクローズしました。#98509 (Antonio Andelic).
  • 「Receiving request for session X took 9963 ms」のような誤解を招く Keeper のログメッセージを修正しました。ここで報告されていた時間は、実際に処理にかかった時間ではなく、ハートビートの合間に poll() 内で idle のまま待機していた時間でした。#79026 を修正しました。#98510 (Antonio Andelic).
  • read_in_order_use_virtual_row と単調関数で予期しない結果を返す問題を修正し、#97837 をクローズしました。#98514 (Vladimir Cherkasov).
  • MergeTree テーブルで IN サブクエリとともに PREWHERE を使用した際に発生していた LOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in' を修正しました。#98522 (Alexey Milovidov).
  • シャットダウンシグナルに応答せず、サーバーの正常なシャットダウンを妨げていた Keeper の TCP 接続を修正しました。 #98525 (Alexey Milovidov).
  • query_plan_merge_expressions = 0query_plan_convert_join_to_in が有効な場合に発生する例外 “Sorting column wasn’t found in the ActionsDAG’s outputs” を修正しました。#98526 (Alexey Milovidov) 。
  • named collections 使用時に失敗する MongoDB Dictionary ソースを修正しました。#97840 をクローズしました。#98528 (Pablo Marcos) 。
  • パラメータ置換後に Identifier が空になった場合に発生していた LOGICAL_ERROR を修正しました。#98530 (Pervakov Grigorii).
  • ウィンドウ関数と組み合わせて sort_overflow_mode = 'break' を使用した際に発生するパイプラインのデッドロックを修正しました。#98543 (Alexey Milovidov) 。
  • 新しいブロックの追加中に例外が発生した際の、Bufferエンジンにおけるカラムのロールバック処理を修正しました。従来のロジックでは、カラムのインメモリ状態が破損するおそれがありました。#98551 (Pavel Kruglov).
  • const の Dynamic または Variant カラムと NULL を用いた null-safe 比較 (<=> / IS NOT DISTINCT FROM) で発生していた例外 Bad cast from type ColumnConst to ColumnDynamic を修正しました。あわせて、Dynamic/VariantNULL の比較で IS DISTINCT FROM が常に誤って 0 を返していた問題も修正しました。#98553 (Alexey Milovidov).
  • テキスト索引を他のスキップ索引と併用した場合の不具合を修正しました。以前は、クエリのフィルターでテキスト索引と通常のスキップ索引を同時に使用すると、“Trying to get non-existing mark” のような論理エラーが発生することがありました。#98555 (Anton Popov).
  • 同じクエリスコープ内でエイリアス付きの table function が複数回出現する場合 (たとえば PREWHERE 句と QUALIFY 句の両方) に発生する論理エラー “TABLE_FUNCTION is not allowed in expression context” を修正しました。 #98557 (Alexey Milovidov).
  • PK 内の式 (カラムだけでなく) に対する分散索引解析を修正 (これにより、リモートレプリカ上の冗長なグラニュールがまったくフィルタリングされない状態になっていた) 。 #98561 (Azat Khuzhin).
  • サブカラムが他のカラムの default/alias 式で使用されている場合、そのカラムの削除を禁止し、ALTER DROP COLUMN のデフォルト式でアナライザを使用するようにしました。#98569 (Nikita Mikhaylov).
  • HTTP クライアントで、再試行できないエラー (HTTP_CONNECTION_LIMIT_REACHED を含む) でも S3 リクエストが誤って再試行されていた問題を修正しました。#98598 (Sema Checherinda) 。
  • DateTime64 でパーティションプルーニングを行う際に発生する decimal のオーバーフローを修正しました。#98628 (Yarik Briukhovetskyi).
  • JIT 式コンパイルにおける 2 件の不具合を修正しました。1 件目は、nativeCast の型チェックにあったコピー&ペーストミスにより、整数から整数、および浮動小数点数から浮動小数点数への cast の分岐が到達不能になっていた問題です。2 件目は、LLVM PassBuilder に誤って nullptr の TargetMachine が渡されていたため、ターゲット固有の最適化パスが登録されなかった問題です。#98660 (Alexey Milovidov).
  • SHOW_COLUMNS 権限がなくても、localhost を指す remote()remoteSecure()cluster()、または clusterAllReplicas() を介して任意のテーブルに対して DESCRIBE を実行できてしまう RBAC バイパスを修正しました。#98669 (pufit).
  • フィルタープッシュダウン最適化によって共有 DAG ノードが破損し、非ブール式 (例: sin(col)) を JOIN を伴う WHERE と SELECT の両方で使用した際に BAD_GET 例外や誤ったクエリ結果が発生する問題を修正しました。#98681 (Alexey Milovidov) 。
  • 並列レプリカ使用時に read_in_order_through_join を使うと発生する LOGICAL_ERROR “Replica decided to read in Default mode, not in WithOrder” を修正しました。#98685 (Alexey Milovidov) 。
  • remote の引数として input テーブル関数を使用したときに発生する例外 “Bad cast from type DB::TableFunctionNode to DB::QueryNode” を修正しました。#98694 (Alexey Milovidov) 。
  • 空の covering parts を誤ってクリーンアップしたことが原因で発生していた、古い data parts の復活を修正しました。 #98698 (Shaohua Wang).
  • equals 比較でブール関数が Variant 型を返す場合に、LogicalExpressionOptimizerPass で例外が発生する不具合を修正しました。#98712 (Alexey Milovidov).
  • parseDateTimeBestEffort が、月名/曜日のプレフィックスで始まる単語を誤ってパースする不具合を修正しました。#97965 をクローズします。#98742 (Pavel Kruglov).
  • 新しいアナライザを有効にした状態で、異なるパラメータ (例: 異なる SKIP フィールド) を持ち、JSON のサブパスを参照する ALIAS カラムを含む JSON カラムを持つテーブルに対して、merge() テーブル関数または Merge エンジンでクエリを実行した際に発生する UNKNOWN_IDENTIFIER 例外を修正しました。#97812 をクローズします。#98753 (Pavel Kruglov).
  • View 内で Distributed ストレージが使用されている場合の、アナライザでの optimize_skip_unused_shards 最適化を修正しました。#98754 (Nikolai Kochetov) 。
  • clickhouse-client--external で渡される外部テーブルについて、名前指定によるタプルのサブカラムアクセス (例: Tuple(a UUID, b Int32) に対する SELECT x.a) を修正しました。#96925 をクローズしました。#98755 (Pavel Kruglov) 。
  • 不正な (途中で切れた) UTF-8入力に対して reverseUTF8 が例外を発生させる問題を修正しました。 #98770 (Alexey Milovidov).
  • 偽値との OR (すなわち or(x, 0)) 述語がある場合に、set スキップ索引の有用性を正しく検出できない問題を修正しました。#98776 (Azat Khuzhin) 。
  • FINAL + PREWHERE + 定数の WHERE 式 + count() のようなカラムに依存しない集約関数の組み合わせで発生しうる LOGICAL_ERROR 例外 (removeUnusedColumns での Block structure mismatch) を修正しました。#98778 (Alexey Milovidov) 。
  • ClickHouse辞書の自動再読み込みに関する system.trace_log エントリで、クエリIDが空にならないようにしました。#98784 (Miсhael Stetsyuk).
  • IDatabaseTablesIterator::table() 呼び出しでテーブルのスナップショットを取得してから、その後の反復処理中に別スレッドでテーブルが変更されるまでの間に作成されたシステムテーブルで、null ポインタを逆参照してクラッシュする問題を修正しました。#98792 (Grant Holly).
  • SYSTEM START REPLICATED VIEW でリフレッシュタスクが起動しない問題を修正しました。#98797 (Pablo Marcos) 。
  • 別の JOIN 内で JOIN を含む view() テーブル関数を使用した際に発生する例外 “Inconsistent table names” を修正 (旧アナライザ使用時のみ) 。 #98809 (Alexey Milovidov).
  • pending_signals 経由での RLIMIT_SIGPENDING の調整に関する不具合を修正しました。 #98829 (Azat Khuzhin).
  • loop をクラスターテーブル関数と組み合わせた際に発生する例外を修正しました。#98860 (Konstantin Bogdanov) 。
  • 複数の結合キーカラムを使用する LEFT ANTI JOIN で、enable_join_runtime_filters=1 (デフォルト) の場合に誤った結果が返されていました。#98871 (Alexander Gololobov).
  • データが複数のchunkに分けて読み込まれる場合 (たとえば index_granularity が小さい場合) に、WITH FILL STALENESS が余分な補完行を生成する不具合を修正しました。#98895 (Alexey Milovidov).
  • “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B” という LOGICAL_ERROR を修正しました。#98900 (Azat Khuzhin) 。
  • 失敗した割り当てがロールバックされないこと、nallocx(0) の未定義動作、ならびにグローバルピーク追跡におけるオフバイワンによって生じるメモリ追跡のずれを修正。追跡対象を io_uring のリングバッファにも拡張。 #98915 (Antonio Andelic).
  • ユーザーパス外にあるローカルのデータレイクテーブルについて、作成だけでなくアタッチも禁止しました。#98936 (Daniil Ivanik) 。
  • urlCluster または同様のクラスターテーブル関数を使用するクエリで、“ReadBuffer is canceled” 例外を引き起こす可能性があったレースコンディションを修正しました。 #98955 (Alexey Milovidov).
  • BFloat16 型の引数を渡した際に金融関数 (financialNetPresentValuefinancialInternalRateOfReturn など) で発生していた LOGICAL_ERROR 例外を修正しました。#98958 (Alexey Milovidov) 。
  • クエリプランの式マージが無効な場合 (query_plan_merge_expressions = 0 または query_plan_enable_optimizations = 0) に、ALIAS カラムに対してスキップ索引 (および主キー条件) が適用されない問題を修正しました。#98960 (Peng).
  • 非同期 INSERT で InsertQuery ProfileEvent が増加するようにしました。#98626 をクローズしました。#98962 (Narasimha Pakeer)。
  • 主キーに NaN の浮動小数点値が含まれる場合にデバッグビルドで発生する例外 “Inconsistent KeyCondition behavior” を、accurateLessaccurateEquals が ClickHouse のソート順に従って NaN を一貫して処理するようにすることで修正しました。#98075 をクローズします。#98964 (Alexey Milovidov).
  • SummingMergeTree では、Bool (およびその他の domain 型) のカラムは合計されなくなりました。Bool の値は算術的に合計されず、そのまま保持されます。#98976 (Yash ).
  • optimize_const_name_size が有効で、enable_scalar_subquery_optimization = 0 の状態でリモート分片にクエリを実行した際に発生していた Scalar doesn&#39;t exist 例外を修正しました。リモートクエリ内で大きな定数が __getScalar 参照に置き換えられていたにもかかわらず、それらが分片に送信されていなかったため、クエリが失敗していました。#98979 (andriibeee).
  • GROUP BY と、Dictionary の逆引きルックアップ、Date/DateTime 変換の比較、タプル比較を含む式を使用する一部のクエリで発生していた NOT_FOUND_COLUMN_IN_BLOCK を修正しました。#98888 をクローズします。#98980 (Nihal Z. Miaji).
  • MergeTreeエンジンで、version/sign/is_deletedカラムをEPHEMERALまたはALIASに変更した際に発生する未定義動作 (nullポインタの逆参照) を修正しました。こうした変更は、現在は適切に拒否されるようになりました。#98985 (Alexey Milovidov).
  • system.grantsaccess_object カラムで、URL および S3 の権限に対する正規表現パラメータが省略されていた問題を修正しました。 #98987 (DQ).
  • Iceberg BigLake の読み取りを修正しました。ADC 認証情報が GCS S3 クライアントに転送されるようになり (403 エラーを解消) 、OAuth2 認証情報は送信前に URL エンコードされるようになったため (特殊文字を含むトークンでの認証失敗を解消) 、ネームスペースの走査処理も BigLake の HTTP 400 レスポンスで中断しなくなりました。#98998 (Nikita Fomichev) 。
  • TZ 環境変数で POSIX のファイルパス構文 (例: TZ=:/etc/localtime) を使用している場合に、clickhouse-client がタイムゾーンを切り替えられない問題を修正しました。#99000 (Yash ).
  • startsWithLIKENOT LIKEFixedString カラムに対して使用した際に、プルーニングが誤って行われる、または十分に行われない問題を修正しました。さらに、キー・カラムを FixedString から String にキャストした場合に、グラニュールのプルーニングができるようになりました。#98940#99001 (Nihal Z. Miaji).
  • 重複イベントが検出された際に strict_deduplication で誤ったレベルが返されることがあった windowFunnel を修正しました。#99003 (Yash ).
  • サブクエリ内の LIMIT 句と OFFSET 句が EXISTS によって無視され、オフセットまたは LIMIT が 0 のためにサブクエリが行を返さない場合に誤った結果となっていた不具合を修正しました。#88722 をクローズします。#99005 (andriibeee).
  • GROUPING SETS 使用時に、フィルターのプッシュダウン最適化で、定数に短絡評価される AND 式に遭遇した際に発生する “Block structure mismatch” 例外を修正しました。#99010 (Alexey Milovidov) 。
  • クエリプランに_part_offsetカラムがない場合に、パッチパート (論理更新) の読み取り時に発生する例外を修正しました。 #99023 (Alexey Milovidov).
  • pk_id が主キーで String 型の場合、SELECT * FROM table WHERE pk_id = '' のようなクエリでも、グラニュールの絞り込みに主キー索引が正しく使われるようになりました。#99027 (Shankar Iyer).
  • バックグラウンドスレッドがデータをストリーミング中に materialized view がデタッチされた場合に発生する、KafkaエンジンのDEPENDENCIES_NOT_FOUND例外を修正しました。#99028 (Alexey Milovidov).
  • 仮想カラム (例: _part_offset) と同じ名前のEPHEMERALカラムを持つテーブルの作成時に発生する例外を修正しました。#99031 (Alexey Milovidov).
  • 存在しない圧縮ファイルを glob パターン付きの url() テーブル関数で読み込む際に、誤解を招く “inflate failed: buffer error” が表示される問題を修正しました。http_skip_not_found_url_for_globs が有効な場合は、想定どおり空の結果を返すようになりました。#99034 (Alexey Milovidov).
  • スキーマ変更 (例: ADD COLUMN) 後、パッチパートに対して ALTER TABLE ... DROP PART を実行するとサーバーがクラッシュ (std::terminate) する問題を修正しました。原因は、空のカバレッジパートのメタデータにシステムカラム (_part) が欠けていたことで、NOEXCEPT_SCOPE 内で例外が捕捉されずに発生していたことです。#99036 (Peng).
  • ClickHouse server process は、cached disk read 中にメモリ制限超過例外が発生した場合、クラッシュする可能性がありました。これは修正されました。#99042 (Shankar Iyer) 。
  • dictGet を使用して ROW POLICY と ALIAS カラムの両方を持つテーブルにクエリを実行した際に発生する LOGICAL_ERROR を修正しました。この問題は、新しいアナライザで ALIAS カラムを解決する際、テーブル式に早い段階でアクセスしていたことが原因でした。#99065 (Peng).
  • データ形式に Avro フォーマットを使用する Iceberg テーブルで、仮想カラムのみをクエリしようとした際に発生する範囲外エラーを修正しました。非常にまれなケースのため、クリティカルとはしていません。#88238 を修正しました。 #99080 (alesapin).
  • remote() + view() を使用する再帰CTEで発生するセグメンテーションフォルトを修正しました。#99081 (Konstantin Bogdanov) 。
  • read-in-order 最適化が適用されている場合、不要な追加の索引解析をスキップします。#99084 (Vladimir Cherkasov) 。
  • パッチパートの適用中にメモリ制限例外が発生した際に引き起こされるクラッシュを修正しました。 #99086 (Anton Popov).
  • 再初期化リカバリ中に ZooKeeper のエントリが削除された際、古くなった first_failed_task_name が残ることで発生していた DDLWorker のデバッグアサーションを修正しました。#99099 (Antonio Andelic) 。
  • 有効期限 (TTL) を伴うマージ時のテキスト索引の再構築を修正しました。#99107 (Anton Popov).
  • Iceberg テーブルエンジンの ALTER TABLE ... REMOVE SETTINGS クエリで発生するクラッシュを修正しました。#86330 を修正しました。#99108 (alesapin).
  • query_plan_convert_any_join_to_semi_or_anti_join 最適化のバグを修正し、一致しない行に対して誤った結果が返される問題を解消しました。関連: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi).
  • ASTColumnsExceptTransformer::transform で発生する LOGICAL_ERROR 例外を修正しました。#99119 (Pablo Marcos) 。
  • 必要なソースアクセス権限がないユーザーでも、テーブル関数 (mysql(), postgresql(), sqlite(), arrowFlight(), jdbc(), odbc(), など) に対して DESCRIBE TABLE または CREATE TABLE AS を実行することでテーブル構造を取得できてしまう RBAC のバイパスを修正しました。リモートサーバーからスキーマを推論する関数では、これにより認可なしで外向き接続 (SSRF) をトリガーできる状態にもなっていました。#99122 (pufit).
  • 動的再構成およびリーダー移譲中に発生する Keeper のクラッシュ (NuRaft でのセグメンテーションフォルト) を修正。 #99133 (JIaQi Tang).
  • 宛先が SAMPLE に対応していない場合に Buffer table を使用するとクラッシュする問題を修正しました。 #99141 (Kseniia Sumarokova).
  • パッチパートのカラム順の不一致による LOGICAL_ERROR を修正。 #99164 (Pablo Marcos).
  • Icebergテーブルに異なるフォーマット (ORC と Parquet) のファイルが混在している場合に、ごくまれに発生するクラッシュを修正しました。#88126#99168 (alesapin).
  • backup/restore で max_execution_time が適用されない問題を修正しました。 #99205 (Kseniia Sumarokova).
  • ORDER BY ALL のない INSERT SELECT クエリで、insert_deduplication_token が黙って無視される問題を修正しました。従来は、明示的にユーザーのトークンを指定していても、ソートされていない INSERT SELECT では重複排除が完全に無効になっていました。現在は、insert_deduplication_token を指定するだけで、ORDER BY ALL の有無にかかわらず重複排除が有効になります。#99206 (Desel72).
  • InverseDictionaryLookupPass の最適化中に発生していた過剰なアクセスチェックを修正しました。各訪問ノードごとではなく、パスの実行前に CREATE_TEMPORARY_TABLE 権限を一度だけチェックするようにしました。#99210 (Mikhail Artemenko).
  • clickhouse format --obfuscate が、スキップ索引の型、圧縮コーデック名、データベースエンジン名、Dictionary のレイアウト/ソース定義を難読化することで無効な SQL を生成していた問題を修正しました。 #99260 (Raúl Marín).
  • 一部のケースで Time[64] 型と DateTime[64] 型の比較がわかりにくくなっていた不具合を修正しました。現在は、このような場合、日付部分として 1970-01-01 を追加して Time[64] の値を DateTime[64] に昇格させます。 #99267 (Yarik Briukhovetskyi).
  • distributed DDLクエリに対して、DDL workerで設定の制約内に収めるようにしました。 #99317 (Pablo Marcos).
  • TOTP認証に関する軽微な問題を修正: パスワードが空の場合の --one-time-password CLIオプション、および <digits><period> の設定値の検証。 #99322 (Vladimir Cherkasov).
  • Avroの出力フォーマットで、enumの定義に含まれない値を持つEnum8/Enum16カラムのシリアライズ時に発生するロジックエラーunordered_map::at: key not foundを修正しました。#99332 (Desel72).
  • Dynamic を含む Tuple 内でスパース シリアライゼーションを使用した CHECK TABLE の不具合を修正しました。#96588 をクローズしました。#99351 (Pavel Kruglov).
  • テキスト索引のプリプロセッサに対する厳しすぎるバリデーションを修正した。#99359 (Anton Popov).
  • 25.10 からそれ以降のバージョンへ、暗黙的な minmax インデックスを持つレプリケートテーブルをアップグレードする際の互換性を修正しました。#99392 (Raúl Marín) 。
  • テキスト索引解析における否定形の関数 (notEqualsnotLikenotIn) のサポートを削除しました。これらの関数ではグラニュールをまったくスキップできなかったため、それらに対して索引解析を行っても、利点はなくオーバーヘッドが増えるだけでした。#99393 (Anton Popov) 。
  • INサブクエリ内でDistributedテーブルが使用された場合に、新しいアナライザでoptimize_skip_unused_shardsを修正しました。#99436 (Nikolai Kochetov) 。
  • クエリの結果でカラム名が重複した場合にINTERSECT/EXCEPTで発生する heap-use-after-free を修正しました。#99471 (Alexey Milovidov).
  • part名に型付きのクエリパラメータを使用した場合に発生する ALTER TABLE ... DROP PART の論理エラーを修正しました。#99489 (Alexey Milovidov) 。
  • テキスト索引の述語 (例: hasAllTokens) がエイリアス経由で SELECT 句と WHERE 句の両方から参照されている場合に発生していた NOT_FOUND_COLUMN_IN_BLOCK 例外を修正しました。#99504 (Anton Popov) 。
  • 個別のテキスト索引を持つ複数のカラムにまたがって OR 条件で hasAllTokens を使用した際に、誤った結果が返される問題を修正しました。#99505 (Anton Popov).
  • clickhouse-local でページキャッシュを初期化し、page_cache_max_size 設定が反映されるようにしました。#99510 (Alexey Milovidov) 。
  • まれに、DETACH/ATTACH TABLEクエリの後に data part が誤って破損扱いとされ、デタッチされる不具合を修正しました。#99529 (Anton Popov).
  • HTTPインターフェイス経由でPrettyフォーマットを使って空のシステムテーブルにクエリを実行した際の std::length_error 例外を修正しました。#99541 (Alexey Milovidov) 。
  • ALTER TABLE ADD COLUMN を使用して、仮想カラムと同名の EPHEMERAL カラム (例: _part_offset) を作成する際に発生していた LOGICAL_ERROR を修正しました。#99549 (Alexey Milovidov) 。
  • キャッシュキーの不一致が原因で、part の削除後も VectorSimilarityIndexCache のエントリが追い出されない問題を修正しました。 #99575 (Seva Potapov).
  • ローカルファイルから Google の認証情報を読み取ることを禁止しました。ファイルパスが判明しているとほかの認証情報まで読み取れてしまうため、この設定は安全ではありません。 #99584 (Konstantin Vedernikov).
  • アナライザで発生していた性能低下を修正しました。ARRAY JOINから未使用のカラムを除外するようにしました。#99587 (Dmitry Novik) 。
  • 既存の論理削除と行ポリシーが設定されたテーブルにおける、テキスト索引の読み取りを修正しました。 #99661 (Anton Popov).
  • filter-in-decoder パスでフィルタリング除外されたページに遭遇した際に、Parquet リーダーで発生する nullptr のデリファレンスを修正。 #99676 をクローズ。 #99677 (Alexey Milovidov).
  • O_DIRECT 使用時の AsynchronousReadBufferFromFileDescriptor における誤ったシークを修正しました。#99358 をクローズします。#99678 (Pavel Kruglov) 。
  • 不正な圧縮データの展開時に CompressionCodecT64 で発生するヒープバッファオーバーフローと、CompressionCodecMultiple で発生するプロセスの異常終了を修正しました。いずれの問題も、新しい libFuzzer ターゲットによって発見されました。これらのコーデックは、クラッシュする代わりに例外を送出するようになりました。#99680 (Rahul).
  • サーバーがすべてのテーブルの読み込みを完了するまで、処理を遅らせる。#99700 (Seva Potapov) 。
  • インライン DDL パラメータで RemoteHostFilter をバイパスしていた MySQL Dictionary ソースの問題を修正しました。#99720 (Shaohua Wang) 。
  • system.tables 内のデータレイクテーブルの反復処理時に発生する論理エラーを修正しました。#99739 (Konstantin Vedernikov) 。
  • プリプロセッサ付きのテキスト索引における、IN関数を含む述語の解析を修正しました。あわせて、テキスト索引で検索対象のトークンが衝突し、不正確な結果を招く可能性がある問題を修正しました。 #99755 (Anton Popov).
  • 負の次元を持つ Npy フォーマットのファイルを読み込む際に発生する無限ループを修正しました。#99812 (Desel72).
  • クエリプランのヘッダー計算時に、FixedString 引数に対する CRC32 関数を行数ゼロで評価すると発生する global-buffer-overflow を修正しました。#99835 (Alexey Milovidov).
  • Iceberg テーブルに対して ALTER TABLE ... MODIFY COLUMN ... COMMENT を実行した際に発生するクラッシュ (ヌルポインタ逆参照) を修正しました。#99838 (Desel72) 。
  • aggregate_functions_null_for_empty 設定を修正し、ArrayMap などの非Nullable型を返す集約関数 (例: groupArraysumMap) でも正しく動作するようにしました。#99839 (Alexey Milovidov) 。
  • 符号付き/符号なし整数型が混在する引数で呼び出した際に midpoint 関数で発生する LOGICAL_ERROR 例外を修正しました。#99867 (Alexey Milovidov).
  • フィルタ式に、NULL を生成する関数でラップされた集計と materialize(0) の両方が含まれる HAVING 句を持つクエリで発生していた「Block structure mismatch」例外を修正しました。#99915 (Alexey Milovidov).
  • データ引数が、キーが配列である Map やその他のネストされた配列型である場合に、sipHash128Keyed (および同様のキー付きハッシュ関数) で発生するアサーション失敗を修正しました。#99921 (Alexey Milovidov) 。
  • convertAnyJoinToSemiOrAntiJoin によるクエリプラン最適化中に IN 関数で発生する LOGICAL_ERROR 例外 “Not-ready Set” を修正しました。 #99939 (Alexey Milovidov).

ビルド/テスト/パッケージングの改善

  • 重いヘッダーのインクルードを削減し、高コストなテンプレートのインスタンス化をヘッダーから切り出すことで、コンパイル時間を短縮しました。 #97893 (Raúl Marín).
  • テンプレートのディスパッチマトリクスを縮小し、重いインクルードを削減することで、算術関数と関連ヘッダーのコンパイル時間を短縮しました。 #98204 (Raúl Marín).
  • mongo-c-driver 2.2.2 を採用しました。 #98304 (Konstantin Bogdanov).
  • postgres REL_18_3 を採用しました。 #98306 (Konstantin Bogdanov).
  • glibc malloc のメモリ回収効率の低さによる RSS の蓄積を避けるため、UBSan ビルドで jemalloc アロケータを有効化しました。 #98444 (Alexey Milovidov).
  • パーサーコンビネータライブラリによるシンボル名の肥大化を抑えるため、Rust v0 のシンボルマングリングを採用し、PRQL ライブラリから内部シンボルを削除しました。 #98446 (Alexey Milovidov).
  • tests/benchmarks に TPC-H ベンチマークスイートと TPC-DS README を追加しました。 #98495 (Raufs Dunamalijevs).
  • TPC-DS の 99 個すべてのクエリに対する正当性テストを追加しました。 #99204 (Raufs Dunamalijevs).
  • オフラインレプリカで発生する DDL CREATE TABLE + ALTER のバグ (#44070) を再現するインテグレーションテストを追加し、想定される失敗としてマークしました。 #99259 (Raufs Dunamalijevs).
  • jemalloc を je_ プレフィックス付きで統合し、リンカーの —wrap の使用を廃止しました。 #99342 (Azat Khuzhin).

ClickHouse リリース 26.2、2026-02-26。 プレゼンテーション, ビデオ

後方互換性を持たない変更

  • デフォルトで、すべての insert に対して重複排除が ON になりました。以前は、非同期 INSERT と MV では OFF でしたが、同期 insert では ON でした。これは、どちらの insert 方法でもデフォルト設定を統一するためです。クラスターで重複排除を明示的に無効化している場合、従来の動作を維持するには deduplicate_insert='backward_compatible_choice' を明示的に設定する必要があります。deduplicate_blocks_in_dependent_materialized_views についても同様です。#95970 (Sema Checherinda).
  • 統計情報の保存フォーマットが改善され、すべての統計情報が1つのファイルに保存されるようになりました。#93414 (Anton Popov)。table statistics を明示的に有効にしていない場合は、この項目は無視して構いません。
  • S3(Azure)Queue のインメモリメタデータに制限を導入。システムテーブルの名称が azure_queue から azure_queue_metadata_cache に、system.s3queue から s3queue_metadata_cache に変更されました。#95809 (Kseniia Sumarokova) 。
  • 以前は、Variant カラムに関数を適用した際、バリアントのサブタイプがその関数に適合しない場合でも暗黙的に NULL が返されていましたが、現在は例外がスローされるようになったため、この暗黙的な NULL の挙動に依存していたクエリが動作しなくなる可能性があります。 #95811 (Bharat Nallan).
  • PostgreSQL の DATE カラムは、ClickHouse で Date32 と推論されるようになりました (以前のバージョンでは Date と推論されていましたが、その結果、狭い範囲を超える値でオーバーフローが発生していました) 。Date32 の値を PostgreSQL に再度挿入できるようになりました。#73084 をクローズしました。#95999 (Alexey Milovidov).
  • do_not_merge_across_partitions_select_final 設定の意味が、より明確になりました。以前は、構成ファイルでこの設定を明示的に指定していない場合でも、この機能が自動的に有効になることがありました。そのためたびたび混乱を招き、残念ながら本番環境でいくつかの問題も引き起こしていました。現在はルールがよりシンプルになっています。do_not_merge_across_partitions_select_final=1 を指定すると、この機能は無条件で有効になります。do_not_merge_across_partitions_select_final=0 の場合、自動判定が使われるのは、新しい設定 enable_automatic_decision_for_merging_across_partitions_for_final=1 のときだけで、それ以外では使われません。従来の動作をできるだけ維持するため、デフォルト値は do_not_merge_across_partitions_select_final=0 および enable_automatic_decision_for_merging_across_partitions_for_final=1 に設定されました。#96110 (Nikita Taranov).
  • 明示的にカラムを指定して S3テーブルを作成する際、ClickHouse はそれらのカラム名が実際にリモートファイルのスキーマに存在するかを検証するようになりました。以前はカラム名が一致していなくても動作していたクエリは、今後はテーブル作成時に失敗します。これにより #96089 が修正されます。 #96194 (Konstantin Vedernikov).
  • ORDER BY およびその他のテーブルのキー式でサブクエリを使用することを禁止しました。#96847 (Alexey Milovidov) 。
  • デフォルトで apply_row_policy_after_final を有効化しました。もともと optimize_move_to_prewhere_if_final=0 の場合、ROW POLICY と PREWHERE はどちらも FINAL を考慮し、FINAL の後に適用されていました。#87303 によりこの挙動が壊れ、ROW POLICY フィルターでは optimize_move_to_prewhere_if_final が無視されるようになっていました。これを修正するため、この PR では #91065 で導入された設定 apply_row_policy_after_final を有効にしています。apply_row_policy_after_final を有効にすると、従来どおり、ROW POLICY はデフォルトで引き続き FINAL を考慮します。この PR は optimize_move_to_prewhere_if_final=1 の場合の挙動を変更するため、後方互換性のない変更です。今後、ROW POLICY を FINAL の前に適用するには、optimize_move_to_prewhere_if_final ではなく apply_row_policy_after_final を使用する必要があります。#97279 (Nikolai Kochetov).
  • Date 型は、Arrow/ArrowStream フォーマットで uint16 ではなく、Arrow ネイティブの date32 型としてシリアライズされるようになりました。これにより、PyArrow などのツールでこのカラムが日付型として正しく認識されるようになります。従来の動作は、output_format_arrow_date_as_uint16 設定で復元できます。Date カラムに uint16 を使用していた古い Arrow ファイルの読み取りも引き続きサポートされます。#96860 (Alexey Milovidov).

新機能

  • ユーザーは ClickHouse から直接 ClickStack (オブザーバビリティ UI) を使えるようになり、デバッグやローカル開発に便利になりました。#96597 (Aaron Knudtson).
  • 認証方式として、時間ベースのワンタイムパスワード (TOTP) をサポート。 #71273 (Vladimir Cherkasov).
  • lazy_load_tables データベース設定を追加しました。有効にすると、データベースの起動時にテーブルは読み込まれず、代わりに軽量な StorageTableProxy が作成され、実際のテーブルエンジンは初回アクセス時に実体化されます。#96283 (xiaohuanlin).
  • input_format_max_block_wait_ms 設定を追加し、タイムアウト時にデータブロックを出力できるようにするとともに、HTTP connection が予期せず閉じられた場合でも残りのデータを処理できるようにしました。#94509 (Mostafa Mohamed Salah).
  • Google BigLake カタログのインテグレーション。#95339 をクローズします。#97104 (Konstantin Vedernikov)。
  • 利用可能なすべてのトークナイザーを表示する system table system.tokenizers を追加しました。 #96753 (Robert Schulze) 。
  • UDF のロード状況と設定を監視できるように、新しいシステムテーブル system.user_defined_functions を追加しました。#90340 (Xu Jia).
  • jemalloc でビルドされたサーバーのメモリ使用量を診断するため、jemalloc メモリアロケータの統計情報 (malloc_stats_print 経由) を公開する system.jemalloc_stats テーブルを追加しました。あわせて、これらの統計情報をインタラクティブに可視化するための /jemalloc.html HTTP エンドポイントを ClickHouse HTTP インターフェイスに追加しました。#97077 (Antonio Andelic).
  • jemalloc のヒーププロファイルを読み取って分析するための system.jemalloc_profile_text テーブルを追加しました。出力フォーマットは jemalloc_profile_text_output_format 設定で制御されます (raw、symbolized、collapsed。デフォルトは collapsed) 。インラインフレームの解決は jemalloc_profile_text_symbolize_with_inline で制御されます (有効な場合、シンボル化は遅くなりますがインラインフレームが含まれます。無効な場合、より高速に出力するためインラインフレームはスキップされます) 。collapsed フォーマットでは、jemalloc_profile_text_collapsed_use_count によって、スタックの重み付けに live allocation count (true) を使うか、live bytes (false、デフォルト) を使うかを制御します。これにより、jemalloc ヒーププロファイルのメモリプロファイリングや flame graph による可視化が容易になります。#93248 を修正しました。#97218 (Antonio Andelic).
  • default_dictionary_database 設定を追加しました。これにより、ClickHouse は、database 修飾子を付けずに参照された external dictionaries を、指定したデフォルトの database 内で解決できるようになります。これにより、XML で定義されたグローバル Dictionary から、SQL で定義された database 単位の Dictionary への移行が容易になり、既存の dictionary クエリ (例: dictGet(‘name’, …)) も変更せずにそのまま動作させることができます。#91412 (Dmitrii Plotnikov).
  • DatabaseReplicated で補助 ZooKeeper のサポートを追加しました。#91683 (RinChanNOW).
  • 昇順の素数を提供する新しいテーブル関数 primes と、新しいシステムテーブル system.primes を実装しました。#90839 をクローズしました。#92776 (Nihal Z. Miaji).
  • 非同期 INSERT は並列クォーラムに対応しました。挿入されたデータはクォーラムまでレプリケートされます。重複が見つかった場合、クエリは先に挿入されたデータのレプリケーションも完了するまで待機します。#93356 (Sema Checherinda).
  • 色の値を sRGB から OKLAB へ、またその逆方向に変換する関数 colorOKLABToSRGBcolorSRGBToOKLAB を追加しました。#93361 (Pranav Tiwari) 。
  • 新たに、insert_deduplicate および async_insert_deduplicate をオーバーライドする deduplicate_insert 設定を追加しました。 #94413 (Sema Checherinda).
  • サーバー設定 insert_deduplication_version により、共通の重複排除ハッシュへの移行が可能になりました。 #95409 (Sema Checherinda).
  • xxh3_128 ハッシュ関数が追加されました。#96055 (Raúl Marín) 。
  • 結果パーツをコミットせずにマージをシミュレートできるOPTIMIZE <table> DRY RUN PARTS <part names>クエリを追加しました。これはテスト用途、つまり新しいバージョンでマージの正しさを検証したり、マージ関連の不具合を決定論的に再現したり、マージ性能を確実にベンチマークしたりするのに役立ちます。#96122 (Anton Popov).
  • テーブルで使用されている named collections が削除されるのを防ぐため、設定 check_named_collection_dependencies によってデフォルトで有効になる新しいチェックを追加しました。#96181 (Pablo Marcos).
  • サーバー内の既存のフェイルポイントと、それらが有効かどうかを確認するための system.fail_points が追加されました。これにより、テストの自動化がしやすくなります。#96762 (Pedro Ferreira).
  • Glue カタログへのロールベースアクセスを追加。設定 aws_role_arn と、必要に応じて aws_role_session_name を使用します。#90825 (Antonio Andelic).
  • 有効にすると、すべての DateDate32TimeTime64DateTimeDateTime64 カラムに対して minmax 索引を自動的に作成する設定 add_minmax_index_for_temporal_columns が追加されました。#93355 (Michael Jarrett) 。
  • JOINでの拡張テーブル別名をサポートしました (SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b のようなクエリ) 。#95131 をクローズしました。#95331 (Yarik Briukhovetskyi) 。
  • Icebergテーブルで ALTER TABLE RENAME COLUMN がサポートされました。これまでは ADD COLUMN, DROP COLUMN, and MODIFY COLUMN のみがサポートされていました。#97455 (murphy-4o).

実験的機能

  • テキスト索引が GA になりました。 #96794 (Robert Schulze).
  • 量子化されたビットパック形式のベクトル格納 (近似最近傍探索で使用) 向けの QBit データ型が一般提供となり、実験的な設定を有効にする必要がなくなりました。 #95358 (Raufs Dunamalijevs).
  • ClickHouse のベクトル検索で、クラスター内のレプリカを使ってベクトル索引パーツの検索負荷を_分散_できるようになりました。これにより、ClickHouse は単一の VM のメモリ容量を超える大規模なベクトル索引をサポートできます。 #95876 (Shankar Iyer).
  • ast_fuzzer_runs および ast_fuzzer_any_query 設定で制御されるサーバー側 AST fuzzer を追加しました。有効にすると、サーバーは各クエリの通常実行後に、そのランダム化した改変版を実行し、結果は破棄します。 #97568 (Alexey Milovidov).
  • 実験的な KQL ダイアレクトに iif 関数を追加しました。 #94790 (happyso).
  • スキーマ推論で allow_experimental_nullable_tuple_type が考慮されるようになりました。有効にすると、推論された Tuple 型で Nullable(Tuple(...)) を使えるようになるため、欠落したネストされたオブジェクトを NULL 要素の Tuple ではなく NULL として扱えます。 #95525 (Nihal Z. Miaji).
  • use_statistics_cache 設定がデフォルトで有効になり、カラム STATISTICS がメモリに cache されるようになりました。これにより、各パーツから毎回再読み込みしなくてもクエリ最適化を高速化できます。 #95950 (Han Fei).

パフォーマンス改善

  • 主キー内の任意の決定論的な式をデータスキップに使用できるようになりました (例: ORDER BY cityHash64(user_id)/ ORDER BY length(user_id)) 。決定論的な式については、ClickHouse はその式をクエリ定数に適用し、その結果を主キー索引で =, IN, has などの述語に利用できます。さらに、その式が単射でもある場合 (例: ORDER BY hex(p) または ORDER BY reverse(tuple(reverse(p), hex(p)))) 、否定形である !=, NOT IN, NOT has でも索引を効果的に利用できます。#10685 を解決。#82161 を解決。#92952 (Nihal Z. Miaji).
  • 統計情報の保存フォーマットが改善され、すべての統計情報が単一のファイルに保存されるようになりました。#93414 (Anton Popov).
  • ファイルシステムキャッシュで、リモートテーブルエンジン/関数の並列読み込みに対応しました。#71781 (Kseniia Sumarokova).
  • ローカルファイルおよびオブジェクトストレージのテーブル関数で、ユーザー空間ページキャッシュを使用できるようになりました。#77874 (Michael Kolupaev).
  • ユーザー空間のページキャッシュで不要な memcpy を回避。#77884 (Michael Kolupaev).
  • concurrent_threads_scheduler のデフォルトが、fair_round_robin から max_min_fair に変更されました。これにより、高負荷時には割り当てスロット数の少ないクエリが優先されるようになり、公平性が向上します。その結果、短時間で終わるクエリが長時間実行されるクエリのせいで不利になることがなくなります。#95300 (Sergei Trifonov).
  • FINAL クエリで、フィルタリングに主キーの条件を使用し、ほかの条件にはスキップ索引を使用した場合、PrimaryKeyExpand の処理ステップでは、最初に絞り込まれた主キー範囲についてのみ交差を確認するようになりました。#94903 (Shankar Iyer).
  • s3(...) のようなテーブル関数で並列レプリカを使用する場合、テーブル関数を単一のサブクエリでラップしたクエリも、以前はテーブル関数への直接参照のみが並列化の対象だったのに対し、現在ではレプリカ間で自動的に並列化されるようになりました。#92264 をクローズしました。#96332 (phulv94)。
  • cache内のデータファイルとシステムファイルを、それぞれ別のセグメントに分割できるようにしました。 #87834 (MikhailBurdukov).
  • ColumnVector::replicate の動的ディスパッチを実装し、一部のハッシュ結合処理を高速化しました。#79573 (Raúl Marín) 。
  • 複雑な述語条件がある場合の並列ハッシュ結合の性能を改善しました。従来は結合されなかった行を1つのスレッドで処理していましたが、これは最適ではなかったため、この最適化ではそれらの行の処理を複数のスレッドに並列化します。parallel_non_joined_rows_processing 設定で切り替えできます。デフォルトで有効です。#92068 (Yarik Briukhovetskyi).
  • JSON型のパースを若干最適化しました。#93614 (Pavel Kruglov).
  • AST のメモリ使用量を削減。ハイライト表示が使われず、VALUES のパースも行われない場合はフィールドが使用されないため、この最適化は有効です。#93974 (Ilya Yatsishin).
  • named Tuple ASTオブジェクトのメモリ消費を最適化しました。カラム名を汎用的なASTリテラルノードに保持するのではなく、tupleオブジェクト内に文字列として格納するようにしました。#94704 (Ilya Yatsishin).
  • 追加のリンカオプションにより、デバーチャライゼーションが向上しました。 #94737 (Nikita Taranov).
  • ZooKeeper リクエストをバッチ化することで、多数のパーツを持つ ReplicatedMergeTree テーブルのレプリカのクローン作成時の性能を改善。 #94847 (c-end).
  • read step にすでに PREWHERE フィルタがある場合、新しいフィルタは追加できませんでした。この変更により、PREWHERE の最適化は JOIN ランタイムフィルタ最適化の後まで延期され、ランタイムフィルタも PREWHERE にプッシュできるようになりました。 #95838 (Alexander Gololobov).
  • x86で動的ディスパッチを用いることで、T64 codecの圧縮を高速化。#95881 (Raúl Marín).
  • 可能な場合 (NULL不可、-If ではない、GROUP BY なし、IPv6 または String ではない) に、insert のバッチ化によって数値型に対する uniq を高速化しました。#95904 (Raúl Marín) 。
  • Keeper 向けの低レベル最適化: ZooKeeper::observeOperations が、ZooKeeper の受信スレッドにおける CPU 使用量の 20% 超を占めていることが判明しました。この変更では、次の点に対応しています。1. AggregatedZooKeeperLog::stats では、SipHash の代わりに 10 倍以上高速な CityHash64 を使用します。2. Coordination::ErrorCounter では、std::unordered_mapstd::mutex の代わりに std::array<std::atomic<UInt32>, N> を使用します。#95962 (Miсhael Stetsyuk) 。
  • メモリを節約するため、ProfileEvents::Counter の 64 バイト境界へのアラインメントを廃止しました。#96097 (Azat Khuzhin) 。
  • メモリ最適化: CachedOnDiskReadBufferFromFile 構造体のサイズを50分の1に削減しました。#96098 (Azat Khuzhin).
  • 空のハッシュテーブルをリサイズする際に、古いデータをコピーしないようにしました。#96180 (Raúl Marín) 。
  • RIGHT OUTER JOIN での JOIN ランタイムフィルタをサポート。 #96183 (Hechem Selmi).
  • 最適化設定 enable_join_runtime_filters がデフォルトで有効になりました。#89314 (Alexey Milovidov) 。
  • 従来、テキスト索引の direct read 最適化は、すべてのパーツにマテリアライズ済みのテキスト索引がある場合にのみ適用されていました。この PR では部分的なサポートが追加され、一部のパーツにマテリアライズ済みのテキスト索引がある場合はそれらのパーツでそれが使用され、マテリアライズ済みのテキスト索引がないパーツでは元のフィルタ式を実行する形にフォールバックします。#96411 (Anton Popov).
  • フィルタリングを高速化するため、systemログテーブルの時間カラムに minmax セカンダリ索引を、query_id/initial_query_id カラムに bloom_filter 索引を追加しました。 #96712 (Alexey Milovidov).
  • 遅延マテリアライゼーションの最適化が、UNION ALL クエリの最初の分岐だけでなく、すべての分岐に適用されるようになりました。これにより、異なる MergeTree テーブルからの複数のソート済み・件数制限付きの読み取りを UNION ALL で組み合わせるクエリでは、すべての分岐で必要になるまでカラムの読み取りが遅延され、I/O が削減されます。#96832 (Federico Ginosa).
  • 不要なデータコピーをなくし、数値カラムでベクトル化された最小値/最大値計算を有効にすることで、INSERT 時の minmax スキップ索引の計算を最適化しました。 #97392 (Raúl Marín).
  • ストレージ DeltaLake は、Delta Lake のメタデータから count() の結果を取得するようになり、system.tables に正しいテーブル統計情報 (合計バイト数/行数) が表示されるようになりました。 #96190 (Kseniia Sumarokova).
  • 未使用のカラムは、MergeTree から読み取る場合、読み取りステップからも除外されます。特に、フィルタが PREWHERE にプッシュダウンされる場合に有効です。#89982 (János Benjamin Antal).
  • テーブル名のみを取得することでSHOW TABLESクエリの処理を改善し、getLightweightTablesIteratorがテーブル名のみを含む構造を返すようにしました。#93835 を解決しました。#94467 (Smita Kulkarni).
  • キーカラムがこれらの関数でラップされている場合でも、範囲述語に対して主キーおよびスキップ索引のプルーニングを有効にできるよう、assumeNotNullcoalesceifNull を改善しました。#94689 をクローズしました。#94754 (Nihal Z. Miaji).
  • getChildren Keeper リクエストに with_data と with_stat を追加しました。これにより、子の一覧だけでなく、その statdata も 1 回の操作でまとめて取得できるようになります。#94826 (Nikolay Degterinsky) 。
  • 最終的にローカルプランを実行する場合でも、並列レプリカを使用するプランを実行する場合でも、索引解析は (ほとんどの場合) 一度しか行われません。 #94854 (Nikita Taranov).
  • パーツ数 (distributed_index_analysis_min_parts_to_activate) と索引のサイズ (distributed_index_analysis_min_indexes_size_to_activate) に応じて、分散索引解析を有効化できるようにしました。#95216 (Azat Khuzhin) 。
  • IcebergテーブルでのPREWHERE最適化を有効化。 #95476 (Konstantin Vedernikov).
  • 一部のASTクラスのメモリ消費量を削減しました。#95514 (Raúl Marín) 。
  • split_intersecting_parts_ranges_into_layers を有効にした際に生成されるパイプラインストリームの数を制限します。これにより、メモリの過剰な消費を防ぐことができます。#96478 (Nikita Taranov).
  • 複数の JOIN に対する等価集合最適化を実装しました。複数の INNER JOIN を連続して含むクエリで、filter pushdown 最適化が強化されました。テーブルが等価なカラム同士で結合されている場合 (例: t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10) 、この chain 内のいずれかのテーブルに適用されたフィルタは、自動的にすべてのテーブルにプッシュダウンされます。#96550 をクローズしました。#96596 (Vladimir Cherkasov) 。
  • Delta Lake のメタデータスキャンを最適化しました。delta-kernel の PR https://github.com/delta-io/delta-kernel-rs/pull/1827 の変更を利用しています。 #96686 (Kseniia Sumarokova).
  • Replicated database では、ダミークエリのたびにキャッシュされたクラスターを更新しないようにしました。#96897 (Tuan Pham Anh) 。
  • プレフィックスが ASCII 文字のみで構成されている場合、startsWithUTF8 によるフィルタリングで主キー索引を使用します。#97055 (vkcku).

改善

  • Keeper へのリクエストに対する OpenTelemetry トレーシングを追加しました。 #91332 (Miсhael Stetsyuk).
  • 新しい設定オプション: logger.startup_console_levellogger.shutdown_console_level が追加され、それぞれ ClickHouse の起動時および停止時のコンソールログレベルを上書きできるようになりました。#95919 (Garrett Thomas).
  • 設定の再読み込み時に、コマンドラインで指定したオーバーライドを尊重するようにしました。#80294 をクローズ。#80295 (Alexey Milovidov) 。
  • mongodb テーブル関数で、名前付きコレクションのパラメーターに対するキー・バリューによる上書きを許可しました。#89616 (vanchaklar).
  • Iceberg テーブル向けの read-in-order 最適化で、単純なカラム参照だけでなく、icebergBucketicebergTruncate のような複雑なソート関数も利用できるようになりました。#90256 (Konstantin Vedernikov) 。
  • 診断機能を向上させるため、system.mutations に parts_postpone_reasons という新しいカラムを追加しました。これにより、パーツが延期された理由を確認できます。#92206 (Shaohua Wang).
  • DataflowStatisticsCache で、読み取る行数の変化 (insert/delete や query condition cache の使用によるもの) を追跡できるようになりました。 #93636 (Nikita Taranov).
  • SYSTEM RESET DDL WORKER [ON CLUSTER] クエリに対応しました。このクエリは、メインスレッド内の DDLWorker の状態をリセットします。ホスト ID が更新された際に、レプリカの active 状態を更新するのに役立ちます。#93780 (Tuan Pham Anh) 。
  • イベントタイプ MUTATE_PART および MUTATE_PART_START について、system.part_logmutation_ids をサポートしました。#93811 (Shaohua Wang).
  • バックグラウンド操作 (Mutate、Merge) を ‘background’ プロファイルで個別に設定できるようになりました。従来、これらの操作は ‘default’ プロファイルを介して通常のクエリと同じ設定を共有していました。#93905 (Arsen Muk).
  • system.crash_log に、さらに多くの情報を追加しました。#94112 #95857 (Miсhael Stetsyuk) 。
  • 実行中の非内部クエリ数を追跡するため、新しいQueryNonInternalメトリクスを追加しました。このメトリクスはClickHouseMetrics_QueryNonInternalとして公開され、非内部クエリにのみ適用されるmax_concurrent_queries制限に対して、運用担当者がクエリの同時実行数を監視するのに役立ちます。#94284 (Ashwath Singh).
  • RuntimeDataflowStatisticsCacheUpdater で、compact パーツ内のカラムに対する入力バイトの統計情報収集をサポートしました。#94626 (Nikita Taranov).
  • Keeper の設定不備によってクラスターの構築に失敗するケースを検出するチェックを追加しました。#60932 をクローズします。#94682 (Konstantin Bogdanov)。
  • partの読み込み時におけるJSONプレフィックスのデシリアライゼーションを改善しました。#94848 (Pavel Kruglov) 。
  • 書き込み処理を完全なINSERTパイプラインを使用するようにリファクタリングし、ターゲットテーブル上のmaterialized viewがトリガーされるようにしました。 #94890 (Kai Zhu) 。
  • 検索対象のカラムに索引がある場合にのみ、ベクトル類似度検索のプラン最適化を適用するようにしました。 #94998 (Eduard Karacharov).
  • ユーザー認証の前に合計メモリ制限を確認し、合計制限が許容値を超えている場合は (total) memory limit exceeded をスローします。#95003 (Nikolai Kochetov).
  • throw_on_unmatched_row_policies 設定オプションが追加されました。このオプションを有効にすると、ユーザーが行ポリシーの設定されたテーブルにクエリを実行した際、そのユーザーに適用される行ポリシーが1つもない場合に例外がスローされます。これにより、アクセス制御の設定ミスによって全行が返されるという曖昧な挙動を防げます。#95014 (Vitaly Baranov).
  • Unity Catalog を使用する長時間実行されるクエリで、S3 アクセストークンを動的に更新できるようになりました。これにより #93981 がクローズされました。#95069 (Konstantin Vedernikov).
  • ClickHouse が memory_worker_decay_adjustment_period_ms ミリ秒の間、継続的にメモリ逼迫状態にある場合、jemalloc のダーティページ減衰を無効にします。ClickHouse が同じ時間だけ通常状態で動作している場合は、jemalloc のダーティページ減衰を再度有効にします。#95145 (Antonio Andelic).
  • S3Queue で、s3Queue の keeper_path 設定を使用する補助的な Zookeeper サポートを追加。#95203 (Diego Nieto) 。
  • TTL の drop パーツマージで max_parts_to_merge_at_once を適用するようにしました。 #95315 (Kseniia Sumarokova)。
  • 物理的な接続を反映するため、query_log に connection_addressconnection_port を追加しました (proxy 経由で接続され、auth_use_forwarded_address=1 の場合、addressport は置き換えられます) 。#95471 (Yakov Olkhovskiy) 。
  • クエリ条件cacheにおける誤ったメモリ使用量の計上を修正しました。主な問題は、複数の文字列 (part_name、テーブルID、SQL条件全体など) で構成されるcacheキーが考慮されていなかったことです。 #95478 (Nikita Mikhaylov).
  • 埋め込み configuration で起動したサーバーでは、通常の設定と同様に、Users と grants を操作し、それらを access directory に保存できるようになりました。これにより、テストがしやすくなります。さらに、埋め込み configuration と clickhouse-local で access_control_improvements がすべて有効になりました。 #95481 (Alexey Milovidov).
  • S3 認証のエラーメッセージを改善し、アクセス拒否時に credentials を確認するよう促すヒントを含めました。#95648 (Gerald Latkovic).
  • 統計キャッシュを有効にし、キャッシュの更新間隔を300秒に設定しました。#95841 (Han Fei) 。
  • system.aggregated_zookeeper_log にコンポーネント名を追加しました。#95882 (Antonio Andelic) 。
  • system.tables から DeltaLake テーブルをクエリする際、オブジェクトストレージの読み取りをスキップするようにしました。 #95899 (Antonio Andelic).
  • compatibility 設定が 26.2 以上の場合、デフォルトで enable_max_bytes_limit_for_min_age_to_force_merge を有効化しました。#95917 (Christoph Wurm).
  • Delta Lake が macOS で利用可能になりました。#95979 を解決しました。#95985 (Alexey Milovidov) 。
  • 以前のバージョンでは、UPDATE および RENAME COLUMN を含む競合する ALTER 式を組み合わせると、適切な例外ではなく論理エラーがスローされていました。#70678 を修正しました。#96022 (Alexey Milovidov).
  • すべての ClickHouse アプリケーションのヘルプ出力を改善し、いくつかの修正を加えるとともに --no-sudo オプションを追加しました。これは、Ilya Yatsishin による #58244 の続きです。#96025 (Alexey Milovidov) 。
  • 他のすべての距離関数にはすでにこの形式のエイリアスがあるため、cosineDistance のエイリアスとして distanceCosine を追加しました。#96065 (Raufs Dunamalijevs) 。
  • with_data Keeper 拡張機能のサポートを追加し、Database Replicated におけるテーブルのフェッチを改善しました。#96090 (Nikolay Degterinsky) 。
  • chdig を v26.2.1 に更新 (新機能の追加および MacOS 対応) 。#96113 (Azat Khuzhin) 。
  • numbersprimes の filter pushdown を改善しました。ClickHouse は、正確な境界を導き出せない場合でも WHERE 条件から保守的な値の範囲を導き出し、それに応じてシーケンス生成を制限できるようになりました (たとえば WHERE number % 5 < 2 AND number > 100 AND number < 300 の場合、ClickHouse は 100 から 300 までの数値だけを生成してから predicate を適用します) 。これにより、範囲が限定されないスキャンを回避できます。#84853 をクローズ。#93913 をクローズ。#96115 (Nihal Z. Miaji) 。
  • 以前は、パース時の曖昧さを避けるため、COMMENT 句がある場合、フォーマッタは SELECT を括弧で囲んでいました。代わりに、COMMENTAS SELECT の前に出力することで、括弧を使わずに曖昧さを解消するようになりました。 #96293 (Alexey Milovidov).
  • allow_impersonate_user 設定は、単独のサーバー設定ではなく、access_control_improvements セクション内に配置されるようになりました。#96451 (Vitaly Baranov) 。
  • core_dump.size_limit 設定をホットリロード可能にし、設定変更を反映するためにサーバーを再起動しなくても済むようにしました。#96524 (Miсhael Stetsyuk) 。
  • ソケットタイムアウト時の CPU およびリアルタイムプロファイラの相互運用性を改善しました。#96601 (Sergei Trifonov).
  • DROP COLUMN mutation の直後に ADD COLUMN を短時間で実行した場合に、削除済みデータが復活するのを防ぎます。 #96713 (Alexey Milovidov).
  • system.instrumentationfunction_id の型を LowCardinality(Int32) から Int32 に変更。#96726 (Copilot)。
  • ミューテーションの同期的な待機で、クエリのキャンセルや時間制限が反映されるようになりました。#96756 (Alexey Milovidov).
  • delta-kernel のログを変更できるようにするシステムコマンド SYSTEM RELOAD DELTA KERNEL TRACING <level> を追加しました。これはデバッグ時に役立つ場合があります。#96763 (Kseniia Sumarokova).
  • IP アドレスファミリーに基づくフィルタリング、つまり dns_allow_resolve_names_to_ipv4/ipv6 設定は、DNS cache が無効になっている場合でも適用されます。 #96810 (c-end).
  • jemalloc のイントロスペクションを改善。 #96840 (Azat Khuzhin).
  • システムテーブルにクエリを実行した際に、/play Web UI で QUERY_CACHE_USED_WITH_SYSTEM_TABLE がスローされる問題を修正しました。#96869 (Alexey Milovidov).
  • Web UI を改善: 実行中のクエリであることがわかるように favicon を変更し、補助クエリ (database と table の読み込み) で発生した error を黙って無視せず表示するようにしました。Closes #85055. #96883 (Alexey Milovidov).
  • /play UI の左パネルをクリックして、データベース一覧の表示/非表示を切り替えられるようにしました。#96884 (Alexey Milovidov) 。
  • DROP DATABASE は、データベースにロード時の依存関係を持つテーブル (例: joinGet を使用する Distributed テーブル) が含まれている場合に、依存関係の逆順でテーブルを削除するようになり、クラッシュ安全性が向上しました。#97057 (Alexey Milovidov).
  • 無効な YAML がスキップされないよう、yaml-cpp を更新しました。#97333 (Azat Khuzhin) 。
  • play.html のサイドバーでテーブルの取得中に読み込みインジケーターを表示するようにしました。#97531 (Alexey Milovidov) 。
  • 組み込みの Web UI (play.html) に、生のクエリ結果をクリップボードにコピーするボタンを追加しました。 #97532 (Alexey Milovidov).
  • クエリ難読化ツール (clickhouse-format --obfuscate) を修正し、より多くのケースで解析可能な SQL を生成できるようにしました。#97584 (Alexey Milovidov) 。

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • Enum の要素を拡張するなどのメタデータのみの ALTER の後、プロジェクションを用いた集約の最適化で例外が発生する場合があります。#84143 (Alexey Milovidov) 。
  • materialized view は、作成されたデータベースを実行コンテキストとして使用するようになりました。これは次のことを意味します。 - view の SELECT クエリで参照される名前については、明示的なデータベース修飾を省略できます - 明示的なデータベース修飾が指定されていない場合は、materialized view が作成されたのと同じデータベースが使用されます。 #88193 (Dmitry Kovalev).
  • ON CLUSTER 使用時の CREATE USER の認証方法におけるクエリパラメータの置換を修正しました。認証方法内のクエリパラメータ (例: password) が置換されず、リモートノードで UNKNOWN_QUERY_PARAMETER エラーが発生していました。#92777 (xiaohuanlin).
  • hasmapContainsKeymapContainsValue 関数におけるテキスト索引解析の不整合を修正しました。これまでは、これらの関数を使用するクエリで、式がテキスト索引を使って評価されるかどうかによって、結果が異なることがありました。 #93578 (Anton Popov).
  • スタックのアンワインド中に dropReplicationSlot が例外を送出した場合、MaterializedPostgreSQL データベースにテーブルをアタッチするとクラッシュする問題を修正しました。#96871 (Alexey Milovidov).
  • 同じファイルを巡って競合するバックアップを多数同時実行すると、サーバーがクラッシュする可能性がありました。#93659 (Alexey Milovidov).
  • 並列レプリカを使用するクエリおよび non-MT テーブルとの JOIN に関する問題を修正しました。#92056 をクローズします。#93902 (Igor Nikonov).
  • 名前にドットを含む Iceberg のカラムで、値が NULL として返される問題を修正しました。#94335 (Mikhail Koviazin) 。
  • stringJaccardIndexUTF8 における UTF8 文字列の処理を修正し、パフォーマンスを改善しました。#94613 (Joanna Hulboj) 。
  • WITH FILL STALENESS で発生しうるオーバーフロー (UB や無限ループの原因となるもの) を修正しました。大きな値の飛びによって発生しうる無限ループを修正しました。旧アナライザのサポートを追加しました (主にストレステスト向け) 。#94663 (Azat Khuzhin).
  • ホスト名が複数のアドレスに解決され、リモートのレプリカがフリーズした際に、分散クエリがハングする可能性がある問題を修正しました。 #94726 (c-end).
  • 複数のテーブル式を結合する際に、左端のテーブル式が-Clusterテーブル関数である場合に不正な結果が返される問題を修正しました。#89996 を解決しました。#94748 (Konstantin Bogdanov) 。
  • toWeektoYearWeektoStartOfWeektoLastDayOfWeektoDayOfWeek を含む述語における主キーおよびスキップ索引のプルーニングの不具合を修正し、LowCardinality(String) を使用した有効なクエリでこれらの関数の一部が例外を発生させる問題も修正しました。#94816 (Nihal Z. Miaji).
  • SQL Security を持つビューに対する ATTACH クエリで、不要に権限チェックをスキップしていた処理を削除しました。これにより、必要なアクセス権を検証せずに definer 付きのビューをアタッチした場合に起こり得る権限昇格を防止します。#94865 (pufit).
  • ReplicatedMergeTree の起動時に、delete_tmp_* ディレクトリが並行して削除されることで発生していたクラッシュを修正しました。#94892 (myeongjun).
  • materialized view を持つ Iceberg table への INSERT で deduplication 情報が失われて例外が発生していた問題を修正しました。#94938 (Daniil Ivanik) 。
  • SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME> を実行すると、クラスター上のcache全体が削除されてしまう不具合を修正しました。#94978 (Rory Crispin).
  • Vertical merges 後も一定の索引粒度 (use_const_adaptive_granularity) を維持するようにしました (Nested の修正を含む v2 および一般的なケース) 。 #95013 (Azat Khuzhin).
  • [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764) の後、バージョン26.1におけるファイルシステムキャッシュの競合状態を修正しました。#95042 (Kseniia Sumarokova).
  • clickhouse-client での KILL QUERY およびクエリのキャンセル (Ctrl+C) による postgresql() テーブル関数のキャンセル処理を修正しました。 #95136 (Roman Vasin).
  • 複数の JOIN で USING 句を使用した場合の、ソーステーブル由来の修飾付きカラムに対する型推論を修正しました。以前は、そのカラムが後続の JOIN に関与していない場合でも、基になるソースカラムの型が誤って共通スーパータイプに更新されていました (たとえば SELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a) では、t2.a カラムが使われるのは最初の JOIN のみなので、その型は t1.at2.a のスーパータイプであるべきであり、t3.a は含まれません) 。この問題により、関数が実際の実行プランに現れるカラム型とは異なる型を想定した場合、論理エラーやクラッシュが発生する可能性がありました。#95157 (Vladimir Cherkasov).
  • manifest の .avro リストおよびファイルの内容を取得する際、カラム変換が 1 回だけ行われるようにしました。#95164 (Daniil Ivanik).
  • 過剰なメモリ使用量や誤ったカラム STATISTICS を招く可能性があった、JSONカラムサイズの誤計算を修正しました。 #95207 (Azat Khuzhin).
  • 論理更新後に大きなパッチパートを適用する際、メモリ使用量の計上が不正確になる問題を修正しました。従来は、大きなパッチパートを適用するとメモリ使用量が過大になり、OOMキラーによってサーバープロセスが強制終了されることがありました。 #95231 (Anton Popov).
  • max_parallel_replicas を使用する分散クエリが、索引解析中にローカルレプリカへフォールバックした際に、誤った結果を返したり例外が発生したりする可能性のある未定義動作を修正しました。#95263 (Azat Khuzhin).
  • group_by_overflow_modeany に設定されている場合の、sum および時系列におけるスパースなカラムの集約を修正しました。 #95301 (Mikhail Koviazin).
  • plain_rewritable ディスクポリシーで、メタデータファイルの unlink の途中にネットワークエラーが発生するとストレージが不整合な状態に陥る可能性があった、信頼性の問題を修正しました。#95302 (Mikhail Artemenko).
  • Iceberg では Date を Date32 に置き換えました。 #95322 (Konstantin Vedernikov).
  • redis テーブル関数の password 引数は、今後、logs およびシステムテーブル (例: query_log) でマスクされるようになりました。#95325 (János Benjamin Antal) 。
  • テーブルに対する分散クエリの実行中に、そのテーブルが削除または変更され、例外や誤った結果を引き起こす可能性があった不具合を修正しました。 #95356 (Azat Khuzhin) 。
  • 分散クエリで負の LIMIT/OFFSET を使用した一部のケースで発生していた論理エラーを修正しました。#95357 (Nihal Z. Miaji) 。
  • ssh を使用して接続する際に、clickhouse-client がパスワードを 2 回求める不具合を修正しました。#95372 (Isak Ellmer) 。
  • ストレージ S3(Azure)Queue におけるデータ競合を修正。#95385 (Kseniia Sumarokova).
  • prewhere 内のラムダ式が原因で発生していた prewhere フィルタのエラーを修正しました。#95395 (Xiaozhe Yu) 。
  • optimize_syntax_fuse_functions を修正し、集約引数が Nullable の場合は sum/count/avgsumCount() に書き換えないようにしました。#95390 を修正。#95441 (Nihal Z. Miaji).
  • キャンセル時に分散クエリでクラッシュする可能性を回避しました。#95466 (Aleksandr Musorin) 。
  • S3(Azure)Queue engine からのストリーミングにおける重複排除の問題を修正しました。#95467 (Kseniia Sumarokova).
  • 分散クエリにおいて、初期ユーザーに割り当てられた行ポリシーの更新に関する不具合を修正しました。#95469 (Vitaly Baranov) 。
  • plain_rewritable 上の暗号化ディスクに対する判定を修正 (It is not possible to register multiple plain-rewritable disks with the same object storage prefix が発生する可能性がある問題を修正) 。 #95470 (Azat Khuzhin).
  • mergeTreeProjection テーブル関数ではアクセスチェックが抜けていたため、テーブルに対する SELECT 権限を持たないユーザーでも (テーブル関数に対する権限があれば) 、そのプロジェクションからデータを読み取れていました。この修正では、mergeTreeIndexmergeTreeAnalyzeIndexes にすでに実装されているものと同じアクセスチェックが追加されます。#95480 (Alexey Milovidov) 。
  • Dynamic/JSON 型の動的サブカラムから size サブカラムを読み取る際に発生する可能性のある論理エラーを修正しました。 #95573 (Pavel Kruglov) 。
  • #94262で導入された (実験的な) ゼロコピー・レプリケーションの回帰不具合を修正しました。この不具合では、他のレプリカが共有パーツの取得を完了する前に、そのパーツが削除される可能性がありました。#95597 (filimonov) 。
  • JSON 配列に tupleElement を適用した際に発生するクラッシュを修正しました。#95581 をクローズ。#95647 (Pavel Kruglov).
  • USING を伴う JOIN の VALUES 句内で、ラムダ関数の中でマッチャー (*) を使用した際に発生する論理エラー例外を修正しました。#93675 をクローズしました。#95661 (Vladimir Cherkasov) 。
  • 分散 DDL の完了待機中に Replicated database を同時に削除した場合に発生していた、There was an error: Cannot obtain error message という論理エラーを修正しました。#95539#95664 (Alexander Tokmakov).
  • transform_null_in が有効な場合に、IN 関数が NULL 値に対して誤った結果を返す不具合を修正しました。#65776 をクローズしました。#95674 (Nihal Z. Miaji).
  • 設定 cast_keep_nullable が有効な場合、CAST で LowCardinality Nullable 型が正しく処理されるようにしました。#95670 を修正しました。#95747 (Alexey Milovidov).
  • パーティション化された Delta Lake データのまとめ処理を修正。 #95773 (Kseniia Sumarokova).
  • ランタイムフィルタにおけるNullableなJOINカラムのレースコンディションを修正しました。 #95775 (Hechem Selmi).
  • USING カラムの型がテーブルと SELECT リストで異なる場合に、matcher (*table.*) および analyzer_compatibility_join_using_top_level_identifier を含むクエリで発生する可能性のある論理エラーを修正しました。#90477 をクローズしました。#95808 (Vladimir Cherkasov).
  • タスクのスケジューリング中にエラーが発生した際に例外を引き起こす可能性があった、並列スレッドプール処理 (バックアップ、集約、分散クエリ) におけるメモリ安全性の不具合を修正しました。 #95818 (Raúl Marín).
  • 削除対象のワークロードを使用するクエリと同時実行中に DROP WORKLOAD を実行した際に発生するクラッシュを修正しました。#95856 (Alexey Milovidov) 。
  • 多数のデータベースに対して限られた権限しか持たないユーザーがシステムテーブルにクエリを実行した際の性能低下を修正しました。#89371 をクローズしました。#95874 (pufit).
  • ネストしたパスを持つ JSON に対する tupleElement の実行を修正しました。これまでは誤ったクエリ結果につながる可能性がありました。 #95907 (Pavel Kruglov).
  • 空のMergeTreeテーブルに対してdirect JOINアルゴリズムを使用した際に発生する可能性のあったNOT_SUPPORTEDエラーを修正しました。 #95935 (Vladimir Cherkasov).
  • クライアントが設定の別名を候補表示したり自動補完したりしない問題を修正し、#92190 をクローズしました。#95945 (phulv94).
  • system.asynchronous_metric_log の event_date を修正。#95947 (Raúl Marín) 。
  • JSON data type における skipping path を修正しました。従来は JSON(SKIP path) を使用すると、path をプレフィックスに持つすべての JSON キーがスキップされ、"pathpath" のようなキーまで対象になっていたため、insert 時にそれらのパスでデータが失われる可能性がありました。現在は修正され、"path" キーのみがスキップされます。 #95948 (Pavel Kruglov).
  • 不明なプロジェクションを含むパートは、永久に失われたものとしてマークされるべきではありません。 #95952 (Mikhail Artemenko).
  • Nullable(String) キーを持つ Join table で、空文字列が NULL になってしまう問題を修正。#71414 をクローズ。#96002 (Alexey Milovidov).
  • これで、PostgreSQLエンジンが BOOLEAN[] を正しく読み取れるようになりました。#72754 を修正しました。#96006 (Alexey Milovidov) 。
  • 空のファイルを読み取る際のProtobufListフォーマットを修正しました。#70059 をクローズしました。#96007 (Alexey Milovidov).
  • 空のテーブルで ProtobufList フォーマットがゴーストレコードを生成してしまう問題を修正。#72596 をクローズ。#96010 (Alexey Milovidov).
  • 型推論を伴う、分散クエリおよび PREWHERE の特殊なケースで発生する、UInt64Int32 間の if 関数の型不一致を修正しました。#70017 をクローズします。#96012 (Alexey Milovidov).
  • Bool 型を含む JIT コンパイル済みクエリを修正しました。 #96013 (Alexey Milovidov).
  • SQLite の TEXT カラムから UUID カラムを読み取る際の論理エラーを修正しました。#71263 をクローズしました。#96016 (Alexey Milovidov).
  • SQLite engineにおける DateTimeDateUUID、およびその他の型の変換を修正しました。#73481 をクローズします。#96017 (Alexey Milovidov).
  • 外部データベース (SQLite および PostgreSQL) へのクエリで、FixedString の値が誤ってエスケープされていました。#73519 をクローズします。@jh0x と共同で作成。#96019 (Alexey Milovidov).
  • PRECEDING オフセットが大きい場合に WindowTransform で発生するアサーション失敗を修正しました。#75852 をクローズしました。#96026 (Alexey Milovidov).
  • 同じパラメータ名を使用していても異なる値を含む同時実行の非同期 INSERT で、データ破損が発生する可能性がある不具合を修正しました。 #96035 (Seva Potapov) 。
  • global profiler の周期 (global_profiler_real_time_period_ns および global_profiler_cpu_time_period_ns で制御) を修正しました。設定した値ではなく切り捨てられた値が使用されていたため、profiler が意図した以上に頻繁に起動していました。#96048 (Antonio Andelic) 。
  • 以前は、position delete 用の Iceberg マニフェストファイル内で、reference data file がエントリとして存在していても NULL の場合、対応する data files の正しい境界値を取得できませんでした。この PR でこのバグを修正しました。#96061 (Daniil Ivanik) 。
  • デフォルトロールの取り消しに関する不具合を修正しました。#96103 (Vitaly Baranov) 。
  • use_primary_key が無効で、かつ索引を利用する条件の論理和が非常に多いというまれな条件の組み合わせで発生する、索引解析における use-after-free を修正しました。#96112 (Alexey Milovidov) 。
  • Gorilla コーデックで、明示的に指定されたサイズがデータ型のサイズと一致せず、かつバッファサイズが小さすぎる場合に発生するリグレッションを修正しました。以前のバージョンでは、伸長時に例外が発生していました。#78253 をクローズします。#96118 (Alexey Milovidov).
  • あるDictionaryが、それを再帰的に参照するMergeテーブルを参照している場合に、そのDictionaryの読み込み時に発生するデッドロックを回避しました。Closes #78360. #96120 (Alexey Milovidov).
  • MySQL や JODA スタイルなどの非固定幅フォーマッタを使用した formatDateTime での未初期化の値の使用を修正しました。#96133 (Alexey Milovidov) 。
  • use_const_adaptive_granularityindex_granularity_bytes の設定の組み合わせ (つまり「非適応粒度」) により、読み取る行数の計算が誤り、例外が発生していました。#96143 (Alexey Milovidov) 。
  • S3 や Azure などのオブジェクトストレージ上のファイルライクなテーブルに対して無効な ALTER UPDATE mutation を実行すると、nullptr のデリファレンスが発生する可能性がありました。#92994 をクローズしました。#96162 (Alexey Milovidov).
  • 部分的な権限取り消し時に AccessRights::contains が誤った結果を返す問題を修正しました。 #96170 (pufit).
  • 誤ったクエリ結果を引き起こす可能性があった、CTE の folded constants におけるクエリ条件 cache のハッシュ衝突を修正しました。#96060 をクローズしました。#96172 (Alexey Milovidov).
  • ProcessList で発生する可能性のあるデッドロックを修正しました。これは、キャンセルチェッカーにタスクを追加しているタイミングでメモリオーバーコミットトラッカーが作動すると、ロック順序の逆転が起こり得るためです。 #96182 (Antonio Andelic) 。
  • 複数の INNER JOIN と組み合わせた外部結合 (LEFT、RIGHT、または FULL) を含むクエリで、無効な JOIN の並べ替えにより誤った結果が返される不具合を修正しました。外部結合の ON 条件が、先に結合された複数のテーブルのカラムを参照している場合、オプティマイザがすべてのテーブル依存関係を考慮できず、JOIN を誤った順序に並べ替えてしまい、その結果、一部の行が欠落することがありました。Close #95972. #96193 (Vladimir Cherkasov).
  • テーブルに統計情報が定義されていない場合、ClickHouse はそれらを読み込もうとしないようにしました。これにより、統計情報ファイルが存在するかどうかを確認するためのオーバーヘッド (100ms 超) を回避できます。 (issue #96068) 。#96233 (Han Fei) 。
  • optimize_syntax_fuse_functions を修正し、集約引数が LowCardinality(Nullable) の場合は sum/count/avgsumCount() に書き換えないようにしました。#95390 をクローズ。#96239 (Nihal Z. Miaji) 。
  • 一部のケースで、not IN および not has 関数で発生していた誤ったパーティションプルーニングを修正しました。#96241 (Nihal Z. Miaji) 。
  • ベクトル類似度索引での stack-use-after-scope を修正しました。 #96259 (Alexey Milovidov).
  • クエリの前にSQLコメントがある場合に、テストランナーが error hint comments を認識しない問題を修正しました。#96336 (Yakov Olkhovskiy).
  • テーブルの主キーが Nullable で、クエリで第1引数が定数の coalesce 関数を使用している場合に発生する KeyCondition の論理エラーを修正しました。 #96340 (Alexey Milovidov).
  • GROUPING SETSgroup_by_use_nulls、および内部に LowCardinality を含む Tuple データ型の組み合わせにより、クエリパイプライン内で予期しないブロック構造が生じ、論理エラーにつながる可能性がありました。これは Nullable Tuple の導入後に発生したものです。#96358 (Alexey Milovidov).
  • 空の式 () を索引とするテーブルを作成できてしまい、無効なメモリアクセスが発生していました。#96363 (Alexey Milovidov).
  • 古いアナライザで、JOIN と重複する別名がある場合に発生していたクラッシュを修正しました。 #96405 (Ilya Golshtein) 。
  • Variant カラムに対する誤ったインプレースフィルタリング最適化により発生していたNested columns sizes are inconsistent with local_discriminatorsエラーを修正。 #96410 (Alexey Milovidov).
  • CREATE TABLE ... CLONE AS ... がソーステーブルの完全修飾名を無視する問題を修正しました。#96415 (Hasyimi Bahrudin).
  • mysql テーブル関数が、KILL QUERY や clickhouse-client でのクエリキャンセル (Ctrl+C) で正しくキャンセルされない問題を修正しました。#96437 (Roman Vasin).
  • max_execution_time の値が大きいクエリで発生する、キャンセル確認スレッドのライブロックを修正しました。#96450 (Sergei Trifonov).
  • 分散クエリで小数の LIMIT/OFFSET を使用した際に、一部のケースで発生していた論理エラーを修正しました。#96475 (Nihal Z. Miaji).
  • ラムダ関数を含む特定の式におけるヌルポインタの逆参照を修正しました。 #96479 (Alexey Milovidov).
  • LowCardinality カラムが Nullable に変換された際に、誤った結果が返される不具合を修正しました。#96483 (Nihal Z. Miaji).
  • 存在しないカラムを参照する、または位置引数を使用する ORDER BY 句を含む Iceberg テーブルの作成時に発生するクラッシュを修正しました。#93280 をクローズします。#96484 (Konstantin Vedernikov).
  • Nullable のサブフィールドを持つ Tuple カラムで発生するランタイムフィルタの例外を修正しました。 #96509 (Alexey Milovidov).
  • PREWHERE フィルターカラムにブール値ではない UInt8 値が含まれている場合に、Parquet V3 ネイティブリーダーで発生する LOGICAL_ERROR 例外を修正しました。#96594 (Alexey Milovidov) 。
  • メタデータの変更時にレプリケートテーブルで暗黙的に索引が再生成される問題を修正。 #96600 (Raúl Marín).
  • DROP WORKLOAD のデータレースを修正しました。#96614 (Sergei Trifonov).
  • パーティション化された insert により、パーティションファイル間でデータが不正に分散されることがある Iceberg table への書き込みのバグを修正しました。 #96620 (Konstantin Vedernikov) 。
  • 制約付きのCREATE TABLEにおけるheap-use-after-freeを修正しました。#96669 (Nikita Taranov).
  • バッファオーバーフローを防ぐため、bech32 の witness バージョンを検証するようにしました。 #96671 (Raúl Marín).
  • 無効な auth_header 設定でデータレイク REST カタログを作成した場合に、system.tables がエラーを返す問題を修正しました。#96680 (Han Fei) 。
  • TTL マージ後、ブロック内のすべての行がフィルタで除外されると、_minmax_count_projection 経由で min(timestamp) が epoch (1970-01-01) を返してしまう問題を修正しました。 #96703 (Raquel Barbadillo).
  • パストラバーサルを防ぎ、指定されたメタデータファイルがテーブルディレクトリ内にあることを確実にするため、iceberg_metadata_file_path 設定の検証を改善しました。#96754 (Daniil Ivanik) 。
  • GROUP BY で使われる Variant 引数を取る ifNull のクラッシュを修正しました。#96790 (Alexey Milovidov) 。
  • table_disk=1 設定が有効なテーブル間で発生していたキャッシュキーの衝突を修正しました。#96818 (Raufs Dunamalijevs) 。
  • 競合状態により MemoryWorker のパージ用スレッドが停止したままになる不具合を修正しました。#96819 (Antonio Andelic) 。
  • Iceberg カタログで認証情報を含むデータをログ出力しないようにしました。 #96831 (Konstantin Vedernikov).
  • サーバーエラー発生後の clickhouse-client の終了ステータスを修正しました。#96841 (Vitaly Baranov) 。
  • CROSS JOIN を含み、並列レプリカが有効なクエリで、誤った結果が返される可能性がありました。#74337 を修正しました。#96848 (Igor Nikonov).
  • 以前に同じカラムに対して論理更新が行われていた場合、ALTER TABLE DROP COLUMN クエリが失敗する問題を修正しました。#96861 (Anton Popov).
  • plain_rewritable オブジェクトストレージディスクへのアーカイブベースのバックアップ (.zip.tzst) 作成時に発生するスタックオーバーフロー (クラッシュ) を修正しました。 #96872 (Alexey Milovidov).
  • 宛先のファイルシステムでディスクフルやその他のI/Oエラーが原因でバックアップに失敗した際に、サーバーがクラッシュする問題を修正しました。 #96873 (Alexey Milovidov).
  • EXCEPT ALLINTERSECT ALL が行の重複回数を無視し、それぞれの DISTINCT 版と同様に動作してしまう問題を修正しました。#96876 (Alexey Milovidov).
  • 互換性のない型で indexOfAssumeSorted を呼び出したときに発生する std::terminate 例外を修正しました (例: IPv4 配列に対して整数の検索値を指定した場合) 。#96877 (Alexey Milovidov).
  • group_by_use_nulls = 1 と CUBE/ROLLUP/GROUPING SETS を使用したウィンドウ関数で発生する例外 Bad cast from type DB::ColumnNullable to DB::ColumnString を修正しました。#96878 (Alexey Milovidov) 。
  • JIT コンパイルされた式で DateTime から DateTime64 への変換時に誤った結果になる問題を修正しました (たとえば、CASE/if/multiIfDateTime 型が混在する場合) 。値が適切にスケーリングされずに再解釈されていたため、式のコンパイルが有効になると誤ったタイムスタンプが生成されていました。#96879 (Alexey Milovidov).
  • CoalescingMergeTree で、スキップ索引の式が定数カラムを生成する場合 (例: 整数カラムに対する ifNotFinite(1, c0)bloom_filter) に発生する論理エラー例外を修正しました。 #96880 (Alexey Milovidov).
  • 誤って HTTP で TLS 対応のネイティブプロトコルポートに接続した場合に表示されるエラーメッセージ内の誤ったポート番号を修正しました。#96881 (Alexey Milovidov).
  • CTEやサブクエリで、サブクエリごとのSETTINGSfileのようなテーブル関数に適用されない不具合を修正しました。#96882 (Alexey Milovidov).
  • X509 証明書の読み取り時に発生する BIO オブジェクトのメモリリークを修正しました。 #96885 (Alexey Milovidov).
  • 具体的な値が必要な箇所 (たとえば arrayFold のアキュムレータ引数) にラムダ式が渡された場合に、クエリアナライザで LOGICAL_ERROR 例外が発生する問題を修正しました。 #96892 (Alexey Milovidov).
  • 複雑にネストされた型 (Nullable Enum 値を持つ Map を含む Nullable Tuple の Array) をキャストする際に発生する ColumnNullable is not compatible with original 例外を修正しました。#96924 (Alexey Milovidov).
  • 分片化された HASHED Dictionary の並列ロードにおける race condition を修正し、まれに一部の行が読み込まれないことがある問題を解消しました。 #96953 (Alexey Milovidov).
  • REPLACE PARTITION とバックグラウンドミューテーションの間で発生する競合状態を修正し、置換後に古いデータと新しいデータの両方が見えてしまうことがある問題を解消しました。 #96955 (Alexey Milovidov).
  • INNER JOIN および WHERE 句と組み合わせて使用した際に arrayJoin 関数が重複した行を生成する問題を修正しました。これは、部分的な述語プッシュダウン最適化によって、arrayJoin を含むフィルタが誤って JOIN の下にプッシュダウンされていたことが原因です。#96989 (Alexey Milovidov).
  • BlockIO::operator=query_metadata_cache を move しないことが原因で発生していた clearCaches のクラッシュ (SEGFAULT) を修正しました。これにより、cache されたストレージスナップショットが早期に破棄され、MergeTreeData ストレージで use-after-free が発生していました。#96995 (Alexey Milovidov).
  • if または transform 関数が Nullable(String) を返す場合 (例: GROUP BY ... WITH CUBEgroup_by_use_nulls = true のとき) に、IfTransformStringsToEnumPass で発生するアサーション失敗を修正しました。#97002 (Alexey Milovidov).
  • INSERT ... SELECTUNION ALL および JOIN を使用した際に、block をまとめる処理の後で定数文字列カラムに誤った値が入ることがあり、その結果不正なデータが書き込まれる問題を修正しました。#97019 (Hasyimi Bahrudin) 。
  • ALTER TABLE MODIFY COLUMN によってカラムの型が変更された後、カラム STATISTICS の構築時に発生する assert_cast 例外 (またはリリースビルドでのサイレントなデータ破損) を修正しました。 #97027 (Alexey Milovidov).
  • Azure Blob Storage、SSHプロトコル、およびArrow Flightインターフェイスでの未初期化メモリの読み取りを修正しました。 #97053 (Alexey Milovidov).
  • 索引が、ROW POLICY/PREWHERE および FINAL を含むクエリの結果に影響していたケースを修正しました。#97076 (Yarik Briukhovetskyi).
  • MergeTree テーブルにおける REPLACE PARTITION とバックグラウンドミューテーションの間に残っていた race condition を修正し、古いデータが再び現れる可能性を解消しました。#97105 (Alexey Milovidov).
  • エイリアスカラムを含む暗黙的インデックスを修正し、作成前に完全な検証を行うようにしました。 #97115 (Raúl Marín).
  • arrayROCAUC のように const 引数が必要な関数における FunctionVariantAdaptor の論理エラーを修正しました。#97116 (Bharat Nallan).
  • PartCheckThread が、すでにミューテーション適用済みのパーツに対する GET_PART を再度キューに追加し、parts_to_do に実体のないエントリが残ることでミューテーションが停滞する問題を修正しました。#97162 (Alexey Milovidov).
  • ORDER BY ... LIMIT を含むサブクエリのクエリプランにおける行数推定を修正しました。これにより、オプティマイザが最適でない JOIN 順序を選択する可能性がありました。 #97193 (Alexander Gololobov).
  • Variant カラムを扱う関数が Nothing 型を返した際に FunctionVariantAdaptor で発生する LOGICAL_ERROR 例外を修正しました。これは、UNION ALL クエリ内の空の配列で発生することがあります。#97213 (Alexey Milovidov).
  • 同時アクセス時に例外を引き起こす可能性があった、S3 のマルチパートコピー処理 (例: S3 への BACKUP/RESTORE) 中のデータ競合を修正しました。#97227 (Azat Khuzhin).
  • WHERE 句内の arrayJoinJOIN の両側のカラムを参照している場合に発生する LOGICAL_ERROR 例外を修正しました。#97239 (Alexey Milovidov).
  • PREWHERE を伴う Tuple 内のスパースな Nullable(String) で、.size サブカラムの読み取り時に発生する LOGICAL_ERROR 例外を修正しました。 #97264 (Alexey Milovidov).
  • LazyMaterializingTransform で、非アダプティブインデックス粒度 (index_granularity_bytes = 0) のテーブルを ORDER BY ... LIMIT で読み取る際に発生する例外 “lazy chunk の行数が offsets の数と一致しない” を修正しました。#97270 (Alexey Milovidov) 。
  • SYSTEM RESTART REPLICA で、テーブルの再作成が ZooKeeper 以外の例外 (たとえばメモリ制限) で失敗した場合に、データベースからテーブルが消失し、DatabaseReplicated でメタデータダイジェストの不一致が発生する問題を修正しました。 #97276 (Alexey Milovidov).
  • system.merge_tree_settings のフィールド readonly が、特定の MergeTree 設定 (例: index_granularity) が無条件で readonly であることを正しく反映するようになりました。 #97277 (Robert Schulze).
  • データなしでストレージのスナップショットが作成された場合に、MergeTree テーブルでの count() 最適化中にクラッシュする問題を修正しました。#97281 (Pablo Marcos).
  • スタックトレースのデバッグ情報から関数名を解決する際に発生する可能性のあるクラッシュを修正しました。 #97294 (Azat Khuzhin).
  • analyzer_compatibility_join_using_top_level_identifier と ALIAS カラムに関する論理エラーを修正しました。#96228 をクローズしました。#97297 (Vladimir Cherkasov).
  • QUALIFY 句でテキスト索引付きのカラムを使用した際に applyOrder で発生する LOGICAL_ERROR 例外を修正しました。#97313 (Alexey Milovidov).
  • システムテーブル system.functions で、内部関数の categories'' ではなく 'Internal' と表示されるようになりました。#97315 (Robert Schulze).
  • RIGHT JOIN の連鎖と有効化された並列レプリカを使用するクエリで、誤った結果が返される可能性がありました。この問題を修正しました。#74341#97316 (Igor Nikonov).
  • テーブル名が変更された場合に、リフレッシャブルmaterialized viewやその他のシナリオで発生することがあった、誤った TABLE_UUID_MISMATCH エラーを修正しました。 #97323 (Azat Khuzhin).
  • 遅延バックアップのバッチ処理で、ダングリングしたストレージポインタに対するuse-after-freeが原因で発生していたStorageKeeperMapバックアップのセグメンテーションフォルトを修正しました。 #97336 (Alexey Milovidov).
  • mutations_execute_subqueries_on_initiator が有効な場合の、ALTER UPDATE/DELETE 内でスカラー サブクエリを含む exists 関数を修正しました。スカラー サブクエリが誤って評価されていたため、エラーが発生したり、次回のサーバー再起動時にテーブルを読み込めなくなる破損した mutation コマンドが生成されたりする可能性がありました。#97347 (Kirill Kopnev) 。
  • LowCardinality 型を含む Variant カラムと NULL を比較した際に発生する論理例外 Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8))) を修正しました。#97379 (Alexey Milovidov).
  • 分片クエリキャッシュが有効な状態で EXCHANGE TABLES を並行実行した際に発生し得る競合状態を修正しました。 #97411 (Konstantin Vedernikov).
  • 外側のTupleラッパーのnullable_sourceによって、変換後の配列カラムが不一致なカラム型に置き換えられた場合に発生する、ArrayからQBitへの変換時のLOGICAL_ERROR例外を修正しました。#97389 をクローズします。#97413 (Alexey Milovidov).
  • 括弧内のエイリアス付きタプルリテラルにおける AST フォーマットのラウンドトリップの不整合を修正しました。たとえば、(('a', 'b') AS x) が誤って tuple(('a', 'b') AS x) に再フォーマットされていました。#97418 (Alexey Milovidov).
  • パースの失敗により 0 行の空ブロックが生成された場合に、重複排除を伴う非同期挿入中に発生していた例外を修正しました。#97460 (Sema Checherinda) 。
  • 非アダプティブインデックス粒度 (index_granularity_bytes = 0) のテーブルを ORDER BY ... LIMIT で読み取る際に、LazyMaterializingTransform で発生する例外 “lazy chunk の行数が offsets の数と一致しない” を修正しました。#97482 (Alexey Milovidov) 。
  • Iceberg への insert に関する設定を修正。allow_experimental_insert_into_iceberg 設定の別名を追加。#97483 (Konstantin Vedernikov).
  • optimize_inverse_dictionary_lookup 最適化が dictGet(...) の述語を書き換える際、CREATE TEMPORARY TABLE 権限を持たないユーザーで ACCESS_DENIED が発生する問題を修正しました。ClickHouse はこの書き換えをスキップし、元の式を実行するようになりました。#97269 をクローズしました。#97484 (Nihal Z. Miaji).
  • 内部にスパースなサブカラムを持つカラム (例: スパースなシリアライゼーションプロファイルが異なる MergeTree パーツの Tuple カラム) の処理時に、SetMergeTreeIndexSet で発生するアサーション失敗 (デバッグ/サニタイザービルドでは例外) を修正しました。 #97493 (Alexey Milovidov).
  • StorageKafka2 における、use-after-free が発生する可能性のある不具合を修正しました。 #97520 (Bharat Nallan).
  • 出力パスにディレクトリが含まれる場合の、TRUNCATE および into_outfile_create_parent_directories 設定を使用した INTO OUTFILE の不具合を修正しました。#97549 (Alexey Milovidov) 。
  • アナライザが有効な状態で、merge() テーブル関数を介して ALIAS カラム内にラムダ式を含むテーブルをクエリした際に発生する BAD_ARGUMENTS エラーを修正しました。#97551 (Alexey Milovidov).
  • Keeper の zxid が 0 のときに system.zookeeper_info で発生する例外を修正しました。#97553 (Alexey Milovidov) 。
  • キーの型が String でない場合に ip_trie Dictionary で発生する可能性がある論理エラーを修正しました。 #97555 (Bharat Nallan).
  • ベースの RestCatalog で REST カタログの OAuth 認証が機能しない問題を修正しました (それまでは OneLakeCatalog のような派生カタログでしか機能していませんでした) 。この不具合により、BigLake カタログの導入後、デフォルトの REST カタログが使えない状態になっていました。#97561 (Konstantin Vedernikov).
  • Geometry 関数 (perimeterSphericalareaSpherical など) は、Geometry Variant 型に加えて、個別のジオメトリサブタイプ (PolygonRingPoint など) も受け付けるようになりました。#97571 (Alexey Milovidov).
  • Nullable(Tuple(... Nullable(T) ...)) 型のサブカラムに対して isNull/isNotNull を使用した際に発生する LOGICAL_ERROR 例外を修正しました。#97224 をクローズしました。#97582 (Alexey Milovidov).
  • 論理更新時にパッチパートを適用する際のヌルポインタの逆参照を修正しました。 #97583 (Alexey Milovidov).
  • BaseSettings::readBinary は、accessor.find が返したインデックスを、未検出を示す番兵値 (つまり -1) かどうか確認せずに field_infos[] に渡しており、その結果 std::vector の範囲外アクセスを引き起こす可能性があります。この問題は libcxx hardening によって発見されました。これはおそらく、新しいサーバーが古いサーバーに未知の設定を送信した際のクエリプランのデシリアライズ中に発生していました。文字列ベースの読み取りメソッドではすでにこれを正しく処理していましたが、readBinary には同じチェックが欠けていました。#97585 (Miсhael Stetsyuk) 。
  • 一方のブランチに常に偽となる条件がある UNION ALL クエリで、本来は何も返さないはずのブランチが誤ってデータを読み込んでしまい、不正なクエリ結果を返していた問題を修正しました。 #97620 (Bharat Nallan).
  • 単一カラム参照を含むIN (col)UNSUPPORTED_METHODエラーで失敗する不具合を修正しました。#97646 (Alexey Milovidov) 。
  • GROUP BY ... WITH ROLLUP/CUBE 実行時に、キーに Nullable(Tuple(...)) 内の LowCardinality(Nullable(...)) が含まれる場合に発生していた logical error 例外を修正しました。#97647 (Alexey Milovidov) 。
  • NOT (1, 1, 1) に対する AST のフォーマットの不整合を修正し、デバッグビルドで LOGICAL_ERROR が発生する可能性がある問題を解消しました。 #97653 (Alexey Milovidov).
  • 空の ZooKeeper トランザクションログファイルを検出した際に発生する keeper-converter の例外を修正しました。 #97673 (Alexey Milovidov) 。

ビルド/テスト/パッケージングの改善

  • ClickHouse を clang-23 (master) でビルドできるようになりました。#95578 (Alexey Milovidov) 。
  • 修正: bind_host が設定されている場合は is_local を強制的に false にし、これをインテグレーションテストに置き換えました。#74741 のフォローアップです。#93109 #96018 (Zhigao Hong).
  • ストレステスト: CI におけるストレステストとアップグレードテストを修正し、no-{build} タグを無視するようにしました。互換性のランダム化を追加しました。#94693 (Nikita Fomichev).
  • ビルドから parser_memory_profiler バイナリを公開しました。AST のメモリ使用量を分析するために利用できるツールです。#95826 (Ilya Yatsishin).
  • 結果内のシンボルを解決した .heap.sym ファイルを生成する parser_memory_profiler ツールに、--symbolize フラグを追加しました。#96477 (Ilya Yatsishin).
  • 結合テストでサードパーティ製のDockerイメージを特定のバージョンに固定。 #96500 (Alexey Milovidov).
  • OpenSSL を動的にリンクできるようにするオプションを復活させました。これは推奨されておらず、どの本番ビルドでも使われていませんが、インターネット上の愛好家向けにこの選択肢は引き続き残されています。#96506 (Govind R Nair).
  • Coordination::OpNum 向けの型別特殊化を用いることで、magic_enum の範囲を [-100, 1000] からデフォルトの [-128, 127] に縮小し、ビルド時間を短縮しました。#96632 (Alexey Milovidov) 。
  • ビルド時間を削減するため、Function クラスから不要な C++ テンプレートを削除しました。#96646 (Alexey Milovidov) 。
  • ビルドの並列性を向上させるため、StorageSystemLicenses の生成を configure 時ではなく構成時に行うようにしました。#96697 (Alexey Milovidov).
  • ライセンススキャンの並列化。 #96727 (Raúl Marín).
  • SSH プロトコル対応のためのステートレスな機能テストを追加しました。 #96996 (Alexey Milovidov).
  • Kafka 3.9.0 をステートレス機能テスト用のインフラストラクチャに追加し、ClickHouse Keeper を ZooKeeper として使って Kafka および Kafka2 テーブルエンジンを直接テストできるようにしました。新たに追加された 6 件のステートレステストでは、基本的な produce/consume、仮想カラム、INSERT、複数のフォーマット、破損メッセージの処理、Keeper ベースのオフセット保存をカバーしています。#96997 (Alexey Milovidov).
  • PGO+BOLT で最適化した clang ツールチェーンをビルドする CI ワークフローを追加しました。 #96991 (Alexey Milovidov).
  • CI では PGO 最適化済みの LLVM/Clang ビルドを使用し、ビルド速度が 20..30% 向上する見込みです。#97031 (Alexey Milovidov) 。
  • glibc の数学関数を llvm-libc の実装へ置き換えました。#90151 (Konstantin Bogdanov) 。
  • Boostを1.83から1.90に更新し、デバッグビルドで発生していたdevectorのアサーション失敗を修正しました。#97037 (Alexey Milovidov) 。
  • postgres を REL_18_1 に更新しました。#95189 (Konstantin Bogdanov) 。
  • libexpat 2.7.3 を使用するようになりました。 #95218 (Konstantin Bogdanov).
  • OpenSSL 3.5.5 を使用します。 #95345 (Konstantin Bogdanov).
  • simdjson v4.2.4 を使用する。 #97129 (Konstantin Bogdanov).
  • libarchive 3.8.5 を使用。 #97131 (Konstantin Bogdanov).
  • fast_float v8.2.3 を採用。#97133 (Konstantin Bogdanov) 。
  • abseil-cpp 20260107.1 と s2geometry v0.13.1 を使用。#97134 (Konstantin Bogdanov) 。
  • libxml2 を 2.15.1 にアップデート。 #95574 (Robert Schulze).
  • EOL に達した、または削除されたベースイメージを使用していた 7 個の Tier-3 統合テスト用 Docker イメージを、現在サポートされているバージョンに更新しました。#97314 (Rahul).
  • TPC-DSベンチマーククエリを追加しました。#97349 (Raufs Dunamalijevs) 。
  • 個別の x86 命令セット向けの cmake オプション (ENABLE_SSSE3ENABLE_AVX2NO_SSE3_OR_HIGHERARCH_NATIVE など) を、実行時ディスパッチシステムですでに使用されている標準的な x86-64 マイクロアーキテクチャレベルに合わせて、単一の数値オプション X86_ARCH_LEVEL (1/2/3/4) に置き換えました。#97354 (Raúl Marín) 。
  • FunctionBinaryArithmetic で、除算以外の演算については division_by_nullable=true のテンプレートバリアントをインスタンス化しないようにし、コンパイル時間とバイナリサイズを削減しました。#97496 (Raúl Marín).
  • typeid_cast.hassert_cast.hContext_fwd.hIDataType.h、および各種 Column ヘッダーなどの広く参照されるヘッダーから Exception.h を हटし、include の影響範囲を縮小しました。#97497 (Raúl Marín) 。
  • ホストコンパイラのヘッダーではなく、常にバンドル版のcompiler-rtヘッダー (sanitizer および XRay インターフェイス) を使用し、デフォルトでcompiler-rtライブラリをソースコードからビルドするようにしました。#97499 (Raúl Marín) 。
  • long double を十分に利用できるプラットフォームでは、wide_integer_impl.hboost/multiprecision のヘッダーを含めないようにし、ビルド時間を短縮しました。#96633 (Alexey Milovidov).
  • LLVM コードカバレッジジョブを実装し、まずは master ブランチでのみ有効化しました。#90952 (Alexey Bakharew) 。
  • リリースビルドで libcxx の高速ハードニングを有効にしました。これは主に範囲外アクセスのチェックに必要です。Performance tests の結果から、性能への目立った影響はないと見込まれます。#94757 (Miсhael Stetsyuk).

ClickHouse リリース 26.1、2026-01-29。プレゼンテーション, ビデオ

後方互換性を持たない変更

  • フォーマッタ内での別名の誤った置換によって生じていたフォーマットの不整合を修正しました。これにより #82833 をクローズします。これにより #82832 をクローズします。これにより #68296 をクローズします。この変更は後方互換性に影響する可能性があります: アナライザが無効な場合、別名を参照する IN を含む一部の CREATE VIEW クエリは処理できません。この非互換性を回避するには、アナライザを有効にしてください (24.3 以降はデフォルトで有効です) 。#82838 (Alexey Milovidov).
  • コーデック DEFLATE_QPL および ZSTD_QAT は削除されました。既存の DEFLATE_QPL または ZSTD_QAT で圧縮されたデータは、アップグレード前に別のコーデックへ変換しておくことを推奨します。なお、これらのコーデックを使用するには、設定 enable_deflate_qpl_codec および enable_zstd_qat_codec を有効にしておく必要がありました。 #92150 (Robert Schulze).
  • system.query_log.exception で stderr のキャプチャを有効にし、UDF のデバッグを改善しました。これまで UDF の stderr はファイルにしか記録されず、クエリログには出力されなかったため、デバッグは事実上不可能でした。現在は stderr がデフォルトで例外をトリガーし、送出前に最大 1MB まで完全に蓄積されるようになったため、完全な Python トレースバックとエラーメッセージが system.query_log.exception に記録され、より効果的にトラブルシューティングできるようになりました。#92209 (Xu Jia).
  • JOIN USING () 句の空のカラムリストは、現在では構文エラーと見なされます。以前は、クエリ実行時に INVALID_JOIN_ON_EXPRESSION として扱われる想定でした。Join ストレージとの結合など一部のケースでは、LOGICAL_ERROR を引き起こしていました。これにより #82502 をクローズします。#92371 (Vladimir Cherkasov).
  • JSON型では、デフォルトで SKIP REGEXP に部分一致を使用するようになりました。#79250 をクローズ。#92847 (Pavel Kruglov).
  • “Allow INSERT into simple ALIAS columns” を元に戻しました (ClickHouse/ClickHouse#84154 を差し戻し) 。カスタムフォーマットでは動作せず、設定でも制御されていません。#92849 (Azat Khuzhin).
  • データレイクのカタログがオブジェクトストレージにアクセスできない場合に、エラーを発生させる設定。 #93606 (Konstantin Vedernikov).
  • Lazy データベースエンジンは削除され、現在は利用できません。#91231 をクローズ。#93627 (Alexey Milovidov).
  • metric_logtransposed_with_wide_view モードは、バグのため使用できないことから削除されました。今後、このモードで system.metric_log を定義することはできなくなります。これは #78412 を部分的に差し戻すものです。#93867 (Alexey Milovidov) 。
  • ワークロード向けのCPUスケジューリングは、デフォルトでプリエンプティブ方式になりました。cpu_slot_preemption サーバー設定を参照してください。#94060 (Sergei Trifonov) 。
  • 破損したパーツを防ぐため、索引ファイル名をエスケープするようにしました。この変更により、以前のバージョンで作成され、名前に非 ASCII 文字を含む索引は ClickHouse で読み込めなくなります。これに対処するには、MergeTree の設定 escape_index_filenames を使用できます。#94079 (Raúl Marín).
  • フォーマット設定 exact_rows_before_limitrows_before_aggregationcross_to_inner_join_rewriteregexp_dict_allow_hyperscanregexp_dict_flag_case_insensitiveregexp_dict_flag_dotalldictionary_use_async_executor は、通常の (フォーマット設定ではない) 設定に変更されました。これは完全に内部的な変更であり、Iceberg、Delta Lake、Kafka、S3、S3Queue、Azure、Hive、RabbitMQ、Set、FileLog、または NATS のテーブルエンジン定義でこれらの設定のいずれかを指定していた (可能性は低い) 場合を除き、ユーザーに見える副作用はありません。こうした場合、これらの設定は以前は無視されていましたが、現在はそのような定義でエラーになります。#94106 (Robert Schulze).
  • joinGet/joinGetOrNull 関数では、基になる Join table に対して SELECT 権限が必要になりました。この変更により、joinGet('db.table', 'column', key) を実行するには、ユーザーに Join table で定義されたキーカラムと、取得する attribute カラムの両方に対する SELECT 権限が必要です。これらの権限がない queries は、ACCESS_DENIED で失敗します。移行するには、テーブル全体へのアクセスには GRANT SELECT ON db.join_table TO user を、カラム単位のアクセスには GRANT SELECT(key_col, attr_col) ON db.join_table TO user を使用して、必要な permissions を付与してください。この変更は、これまで明示的な SELECT grants を設定していなかった、joinGet/joinGetOrNull に依存するすべての users および applications に影響します。#94307 (Vladimir Cherkasov).
  • CREATE TABLE ... AS ... クエリでは SHOW COLUMNS をチェックするようになりました。以前は SHOW TABLES をチェックしていましたが、この種の権限チェックに必要な権限としては不適切でした。#94556 (pufit).
  • Hash 出力フォーマットがブロックサイズに依存しないようになりました。#94503 (Alexey Milovidov) 。この変更により、従来のバージョンと比べて出力されるハッシュ値が変わる点に注意してください。

新機能

  • ClickHouse Keeper 向けの HTTP API と内蔵 Web UI。#78181 (pufitspeeedmaster) 。
  • 非同期 INSERT の重複排除が、依存する materialized view でも機能するようになりました。block_id の衝突が発生すると、元の block は block_id に関連付けられた行を除外するようにフィルタリングされ、残りの行には関連するすべての materialized view の SELECT クエリが適用されて変換されます。これにより、競合する行を含まない元の block が再構築されます。#89140 (Sema Checherinda)。materialized view が関係する場合でも、非同期 INSERT で重複排除を使用できるようになりました。#93957 (Sema Checherinda)。
  • projection索引機能を簡素化し、拡張するための新しい構文とフレームワークが導入されました。これは https://github.com/ClickHouse/ClickHouse/pull/81021 のフォローアップです。#91844 (Amos Bird).
  • Array カラムでのテキスト索引のサポートを追加しました。#89895 (Jimmy Aguilar Mena).
  • デフォルトで use_variant_as_common_type が有効になり、Array 内、UNION クエリ内、および if/multiIf/case の分岐で互換性のない型を使用できるようになりました。#90677 (Alexey Milovidov).
  • 新しいシステムテーブル zookeeper_info#88014 を実装しました。 #90809 (Smita Kulkarni) 。
  • すべての関数が Variant 型をサポート。 #90900 (Bharat Nallan).
  • Prometheus の /metrics エンドポイントに、主にバージョン情報を含む ClickHouse_Info メトリクスを追加し、詳細なバージョン情報を時系列で追跡するチャートを作成できるようにしました。 #91125 (Christoph Wurm).
  • Keeper に、クラスター構成を変更できる新しい4文字コマンド rcfg を追加しました。このコマンドでは、標準の reconfigure リクエストよりも柔軟に構成を変更できます。引数には json 文字列を取ります。TCP インターフェイスに送信するバイト列全体は、rcfg{json_string_length_big_endian}{json_string} のようになります。コマンドの例: {"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}#91354 (alesapin).
  • 指定した区切り文字で区切られた文字列内の部分文字列の順序を反転する関数 reverseBySeparator を追加しました。#91463 をクローズしました。#91780 (Xuewei Wang).
  • 挿入時のブロック生成をより細かく制御できる新しい設定 max_insert_block_size_bytes を追加しました。 #92833 (Kirill Kopnev).
  • ignore_on_cluster_for_replicated_database 設定が有効な場合、Replicatedデータベースに対して ON CLUSTER 句を付けた DDLクエリを実行できます。この場合、クラスター名は無視されます。#92872 (Kirill).
  • 関数 mergeTreeAnalyzeIndexes を実装。 #92954 (Azat Khuzhin).
  • 新しい設定 use_primary_key を追加しました。false に設定すると、主キーに基づくグラニュールのプルーニングを無効にできます。#93319 (Nihal Z. Miaji).
  • icebergLocalCluster テーブル関数が追加されました。#93323 (Anton Ivashkin) 。
  • 2点間の余弦距離を近似的に計算するcosineDistanceTransposed関数が追加されました。#93621 (Raufs Dunamalijevs) 。
  • 各データパートに含まれるファイル数を表示する files カラムを system.parts テーブルに追加しました。#94337 (Match) 。
  • 同時実行制御向けに、max-min fair スケジューラが追加されました。これは、多数のクエリが限られた CPU スロットをめぐって競合する高オーバーサブスクリプション環境で、より高い公平性を実現します。長時間実行クエリが時間の経過とともにより多くのスロットを蓄積していても、短時間実行クエリが不利になることはありません。concurrent_threads_scheduler サーバー設定を max_min_fair に設定することで有効になります。#94732 (Sergei Trifonov) 。
  • ClickHouse client で、サーバーへの接続時に TLS SNI を上書きできるようになりました。#89761 (Matt Klein) 。
  • joinGet 関数の呼び出しで一時テーブルをサポート。 #92973 (Eduard Karacharov).
  • DeltaLake table engine で削除ベクターをサポートするようになりました。 #93852 (Kseniia Sumarokova).
  • deltaLakeCluster が deletion vectors に対応しました。#94365 (Kseniia Sumarokova) 。
  • データレイク向けの Google Cloud Storage のサポート。#93866 (Konstantin Vedernikov) 。

実験的機能

パフォーマンス改善

  • 設定 use_skip_indexes_on_data_read は、デフォルトで有効になりました。この設定により、読み込みと同時にストリーミング方式でフィルタリングできるようになり、クエリのパフォーマンスと起動時間が向上します。#93407 (Shankar Iyer).
  • LowCardinality カラムに対する DISTINCT のパフォーマンスを改善しました。#5917 をクローズしました。#91639 (Nihal Z. Miaji) 。
  • distinctJSONPaths 集約関数を最適化し、JSONカラム全体ではなく、データパーツから JSON パスのみを読み取るようにしました。#92196 (Pavel Kruglov) 。
  • JOIN へのプッシュダウンに対応するフィルタが増えました。#85556 (Nikita Taranov).
  • filter が片側の入力のみを使う場合に、join の ON 条件からの push down に対応するケースをさらに拡大しました。ANYSEMIANTI join のサポートを追加しました。#92584 (Dmitry Novik).
  • SEMI JOIN のフィルタをプッシュダウンするために、同等の集合を使用できるようにしました。#85239 をクローズしました。#92837 (Dmitry Novik) 。
  • 右側が空の場合、ハッシュ結合の左側の読み取りをスキップするようになりました。以前は、最初の空でないブロックに到達するまで左側を読み取っていたため、フィルタリングや集約の負荷が高い場合には多くの処理が発生する可能性がありました。#94062 (Alexander Gololobov).
  • クエリパイプライン内でデータをパーティション化するために、“fastrange” (Daniel Lemire) 方式を採用しました。これにより、並列ソートやJOINが改善される可能性があります。#93080 (Alexey Milovidov).
  • PARTITION BY がソートキーと一致する場合、またはそのプレフィックスである場合のウィンドウ関数の性能を向上させました。 #87299 (Nikita Taranov).
  • 外側のフィルタがビューにプッシュダウンされるようになり、ローカルノードとリモートノードの両方でPREWHEREを適用できるようになりました。#88189 を解決しました。#88316 (Igor Nikonov) 。
  • より多くの関数でJITコンパイルを実装しました。#73509 をクローズしました。#88770 (Alexey MilovidovTaiyang Li と共同) 。
  • FINAL クエリで使用されるスキップ索引が主キーの一部であるカラム上にある場合、他のパーツで主キーの積集合を確認する追加ステップは不要となり、現在は実行されなくなりました。#85897 を解消しました。#93899 (Shankar Iyer) 。
  • 小数値の LIMIT および OFFSET に対するパフォーマンスとメモリ使用量を最適化しました。#91167 (Ahmed Gouda) 。
  • Parquet リーダー V3 のプリフェッチャーで、より高速なランダム読み取りロジックを使用するように修正しました。#90890 をクローズしました。#91435 (Arsen Muk) 。
  • icebergCluster のパフォーマンスを改善。#91462 をクローズ。#91537 (Yang Jiang).
  • 定数フィルターでは仮想カラムで絞り込まない。#91588 (c-end).
  • adaptive write buffers を有効にすることで、非常に列数の多いテーブルにおける wide パーツでの INSERT/merges のメモリ使用量を削減します。暗号化ディスクに対する adaptive write buffers のサポートを追加しました。 #92250 (Azat Khuzhin).
  • 索引内で検索するトークン数を削減し、テキスト索引とsparseGramsトークナイザーを用いた全文検索の性能を向上させました。#93078 (Anton Popov).
  • Function isValidASCII は、すべてASCIIの入力値で有効になるケース向けに最適化されました。#93347 (Robert Schulze) 。
  • read-in-order 最適化は、WHERE 条件によって ORDER BY カラムが定数になるケースを認識し、逆順での読み取りを効率的に実行できるようになりました。これにより、WHERE tenant='42' ORDER BY tenant, event_time DESC のようなマルチテナントクエリでは、フルソートを行わずに InReverseOrder を利用できるようになります。”. #94103 (matanper).
  • メモリ使用量を最適化するため、値パラメータを ASTLiteral の子ノードではなく (string, integer) のペアとして格納する Enum AST 専用クラスを導入しました。 #94178 (Ilya Yatsishin).
  • 複数のレプリカでの分散索引解析。共有ストレージや、クラスター内の大量のデータで効果を発揮します。これは SharedMergeTree (ClickHouse Cloud) に適用でき、共有ストレージ上の他の種類の MergeTree テーブルにも適用可能になる場合があります。#86786 (Azat Khuzhin) 。
  • 以下の場合は joinランタイムフィルタを無効化してオーバーヘッドを削減: - bloom filter でセットされるビットが多すぎる場合 - 実行時に除外される行が少なすぎる場合。 #91578 (Alexander Gololobov).
  • 相関サブクエリの入力にインメモリバッファを使用し、複数回評価するのを防ぎます。#79890 の一部。#91205 (Dmitry Novik).
  • すべてのレプリカが、並列レプリカ読み取り時に孤立した範囲を並行して引き取れるようになりました。これにより、負荷分散が改善され、ロングテールレイテンシが低減されます。#91374 (zoomxi).
  • 外部集約/ソート/結合で、あらゆるコンテキストでクエリ設定 temporary_files_codec が適用されるようになりました。Grace Hash Join のプロファイルイベントが欠落していた問題を修正しました。#92388 (Vladimir Cherkasov).
  • 集約/ソート時にディスクへスピルする際のクエリのメモリ使用量検出を、より堅牢にしました。#92500 (Azat Khuzhin) 。
  • 集約キーカラムについて、総行数と NDV (異なる値の数) の統計を推定します。 #92812 (Alexander Gololobov) 。
  • simdcomp によりポスティングリストの圧縮を最適化しました。#92871 (Peng Jian) 。
  • バケットを用いて S3Queue Ordered モードの処理をリファクタリングしました。これにより、Keeper へのリクエスト数が減り、パフォーマンスの向上も見込まれます。#92889 (Kseniia Sumarokova) 。
  • 関数 mapContainsKeyLikemapContainsValueLike は、それぞれ mapKeys() または mapValues() に対するテキスト索引を利用できるようになりました。#93049 (Michael Jarrett) 。
  • Linux 以外のシステムでのメモリ使用量を削減しました (jemalloc のダーティページの即時パージを有効にしました) 。#93360 (Eduard Karacharov) 。
  • ダーティページサイズとmax_server_memory_usageの比率がmemory_worker_purge_dirty_pages_threshold_ratioを超えた場合、jemallocアリーナを強制的にパージするようになりました。 #93500 (Eduard Karacharov).
  • AST のメモリ使用量を削減。 #93601 (Nikolai Kochetov).
  • 一部のケースで、ClickHouse がテーブルの読み取り時にメモリ制限を守らないことが確認されていました。この動作は修正されました。#93715 (Nikita Mikhaylov).
  • Keeper 拡張機能 CHECK_STAT および TRY_REMOVE をデフォルトで有効にしました。#93886 (Mikhail Artemenko).
  • 対応するデータファイルをより適切に選択できるよう、Iceberg マニフェストファイルのエントリから position delete に対応するファイル名の下限・上限を解析するようにしました。 #93980 (Daniil Ivanik).
  • JSON カラム内の動的サブカラムの最大数を制御するための設定が、さらに 2 つ追加されました。1 つ目は MergeTree 設定 merge_max_dynamic_subcolumns_in_compact_part で (すでに追加されている merge_max_dynamic_subcolumns_in_wide_part と同様) 、compact パーツへのマージ時に作成される動的サブカラム数を制限します。2 つ目はクエリレベルの設定 max_dynamic_subcolumns_in_json_type_parsing で、JSON データのパース時に作成される動的サブカラム数を制限します。これにより、INSERT 時の上限を指定できるようになります。#94184 (Pavel Kruglov).
  • 一部のケースでJSONカラムをまとめる処理をわずかに最適化しました。#94247 (Pavel Kruglov) 。
  • 本番運用の経験に基づき、スレッドプールのキューサイズを引き下げました。MergeTreeからデータを読み込む前に、明示的なメモリ使用量チェックを追加しました。#94692 (Nikita Mikhaylov).
  • CPU 枯渇時にスケジューラが MemoryWorker スレッドを優先するようにし、ClickHouse プロセスを致命的な脅威から保護します。 #94864 (Nikita Mikhaylov).
  • jemalloc の dirty page のパージを、MemoryWorker のメインスレッドとは別のスレッドで実行するようにしました。パージに時間がかかると RSS 使用量の更新が遅れ、その結果、プロセスが OOM キルされる可能性があります。総メモリ使用量の割合に基づいて dirty page のパージを開始するための新しい設定 memory_worker_purge_total_memory_threshold_ratio を導入しました。 #94902 (Antonio Andelic).

改善

  • Azure Blob Storage で system.blob_storage_log を利用できるようになりました。#93105 (Alexey Milovidov) 。
  • Local と HDFS 向けに blob_storage_log を実装しました。S3Queueblob_storage_log へのログ出力でディスク名以外を使用していた場合に発生するエラーを修正しました。blob_storage_logerror_code カラムを追加しました。ローカルでのテストを簡単にするため、テスト用の設定ファイルを分割しました。 #93106 (Alexey Milovidov) 。
  • clickhouse-clientclickhouse-local で、入力中の数値リテラル内の桁区切り (千、百万など) が強調表示されるようになりました。これにより #93100 が解決されました。#93108 (Alexey Milovidov).
  • clickhouse-client で、等号の前後にスペースを含むコマンドライン引数をサポートしました。#93077 をクローズしました。#93174 (Cole Smith) 。
  • <interactive_history_legacy_keymap>true</interactive_history_legacy_keymap> を使用すると、CLI クライアントで従来どおり Ctrl-R による通常検索に戻せるようになり、Ctrl-T ではあいまい検索を行えます。#87785 (Larry Snizek) 。
  • cache をクリアするためのステートメント SYSTEM DROP [...] CACHE は、そのステートメントが cache を無効にするかのような誤解を招いていました。ClickHouse は現在、より意味が明確なステートメント SYSTEM CLEAR [...] CACHE をサポートしています。古い構文も引き続き利用できます。#93727 (Pranav Tiwari).
  • EmbeddedRocksDB で、複数カラムの主キーをサポートしました。#32819 をクローズ。#33917 (usurai).
  • スカラー値に対して非定数の IN を使用できるようになりました (val1 NOT IN if(cond, val2, val3) のようなクエリ) 。#93495 (Yarik Briukhovetskyi) 。
  • 未サポートのため、x-amz-server-side-encryption ヘッダーが HeadObjectUploadPartCompleteMultipartUpload の S3 リクエストに伝播されないようにしました。#64577 (Francisco J. Jurado Moreno) 。
  • S3Queue の ordered モードで Hive パーティション化の追跡に対応しました。#71161 を解決しました。#81040 (Anton Ivashkin).
  • ファイルシステムキャッシュの領域予約を最適化しました。FileCache::collectCandidatesForEviction は、unique lock を使用せずに実行されるようになりました。#82764 (Kseniia Sumarokova).
  • サーバーログで複合ローテーション戦略 (サイズ + 時間) をサポートしました。 #87620 (Jianmei Zhang).
  • CLI クライアントで、コマンドラインの --no-warnings の代わりに <warnings>false</warnings> を指定できるようになりました。#87783 (Larry Snizek) 。
  • avg 集約関数で、DateDateTimeTime 型の値を引数としてサポートしました。#82267 をクローズしました。#87845 (Yarik Briukhovetskyi).
  • 最適化 use_join_disjunctions_push_down は、デフォルトで有効になっています。#89313 (Alexey Milovidov) 。
  • 相関サブクエリで、より多くのテーブルエンジンとデータソースの種類をサポートしました。#80775 をクローズしました。#90175 (Dmitry Novik).
  • パラメーター化ビューのスキーマが明示的に指定されている場合は、それが表示されます。#88875#81385 をクローズしました。#90220 (Grigorii Sokolik) 。
  • ログが最後にコミットされた索引より前にある場合に、Keeper のログエントリの欠落を正しく処理します。 #90403 (Antonio Andelic).
  • JBODボリュームでも正しく動作するよう、min_free_disk_bytes_to_perform_insert 設定を改善しました。#90878 (Aleksandr Musorin) 。
  • S3 table engine と s3 table function の named collections で storage_class_name 設定を指定できるようになりました。#91926 (János Benjamin Antal) 。
  • system.zookeeper 経由で補助 ZooKeeper への insert をサポートしました。#92092 (RinChanNOW).
  • Keeper向けに、新たに KeeperChangelogWrittenBytesKeeperChangelogFileSyncMicrosecondsKeeperSnapshotWrittenBytesKeeperSnapshotFileSyncMicroseconds のプロファイルイベントと、KeeperBatchSizeElements および KeeperBatchSizeBytes のヒストグラムメトリクスを追加しました。 #92149 (Miсhael Stetsyuk).
  • 新しい設定 trace_profile_events_list を追加し、trace_profile_event によるトレースを指定したイベント名のリストに限定できるようにしました。これにより、大規模なワークロードでも、より精密なデータ収集が可能になります。#92298 (Alexey Milovidov).
  • 一時停止可能な failpoint に対する SYSTEM NOTIFY FAILPOINT のサポートを追加しました。 - SYSTEM WAIT FAILPOINT fp PAUSE/RESUME のサポートを追加しました。 #92368 (Shaohua Wang).
  • system.data_skipping_indicescreation (暗黙/明示) カラムを追加しました。#92378 (Raúl Marín) 。
  • YTsaurus dyn tables のカラムの説明を Dictionary ソースに渡せるようになりました。#92391 (MikhailBurdukov).
  • #63985 では、TLS 設定に必要なすべてのパラメータをポート単位で指定できるようにし (コンポーザブルプロトコル を参照) 、グローバルな TLS 設定に依存しなくて済むようにしました。ところが、この実装では依然としてグローバルな openSSL.server 設定セクションが存在することを暗黙的に前提としており、ポートごとに異なる TLS 設定が必要な構成とは相性がよくありません。たとえば keeper-in-server デプロイメントでは、keeper 間の通信と clickhouse client 接続向けに、それぞれ別個の TLS 設定が必要です。 #92457 (Miсhael Stetsyuk) 。
  • 悪意のあるペイロードへの対策として、バイナリフォーマットでデコードできる型ノードの総数を制限する新しい設定 input_format_binary_max_type_complexity を導入しました。 #92519 (Raufs Dunamalijevs) 。
  • system.background_schedule_pool{,_log} に実行中のタスクが反映されるようにしました。ドキュメントを追加。#92587 (Azat Khuzhin).
  • 履歴に一致する項目が見つからない場合、クライアントの Ctrl+R 検索で現在のクエリを実行するようになりました。 #92749 (Azat Khuzhin).
  • EXPLAIN indices = 1EXPLAIN indexes = 1 の alias としてサポートしました。#92483 をクローズしました。#92774 (Pranav Tiwari).
  • Parquet リーダーで、Tuple または Map カラムを JSON として読み取れるようになりました。select x from file(f.parquet, auto, 'x JSON') は、f.parquet 内のカラム x の型が tuple または map であっても動作します。#92864 (Michael Kolupaev)。
  • Parquet リーダーで空のタプルをサポートしました。 #92868 (Michael Kolupaev).
  • Azure Blob Storage で native copy が BadRequest (例:無効な block list) で失敗した場合、read-write copy にフォールバックするようにしました。これまでは、異なるストレージアカウント間でブロブをコピーする際に発生していた Unauthorized エラーに対してのみ、この処理を行っていました。しかし、“The specified block list is invalid” エラーが発生することもあります。そのため、すべての native copy の失敗で read & write にフォールバックするよう、条件を更新しました。#92888 (Smita Kulkarni).
  • EC2 インスタンスプロファイルの認証情報を使用して多数の同時実行 S3 クエリを実行する際に発生する、EC2 メタデータエンドポイントのスロットリングを修正しました。以前は各クエリがそれぞれ独自の AWSInstanceProfileCredentialsProvider を作成していたため、EC2 メタデータサービスへの同時リクエストが発生し、その結果、タイムアウトや HTTP response code: 403 エラーを引き起こすことがありました。現在は、認証情報プロバイダーがキャッシュされ、すべてのクエリで共有されます。 #92891 (Sav).
  • 後方互換性を維持できるよう、insert_select_deduplicate 設定を見直しました。#92951 (Sema Checherinda) 。
  • タスクのログが過剰に出力されるのを防ぐため、平均より遅いバックグラウンドタスクのみをログに記録するようにしました (background_schedule_pool_log.duration_threshold_milliseconds=30) 。#92965 (Azat Khuzhin).
  • 以前のバージョンでは、一部の C++ 関数名が system.trace_log および system.symbols で誤って (「mangled」のまま) 表示され、demangle 関数でもそれらをうまく処理できませんでした。#93074 をクローズします。#93075 (Alexey Milovidov).
  • リフレッシャブルmaterialized view のバックアップをスキップするためのバックアップ設定 backup_data_from_refreshable_materialized_view_targets が導入されました。APPEND リフレッシュ戦略の RMV は常にバックアップされます。 #93076 (Julia Kartseva). #93658 (Julia Kartseva)
  • 関数のような負荷の高い翻訳単位では、デバッグ情報をなくすのではなく、最小限のデバッグ情報を使用するようにしました。#93079 (Alexey Milovidov).
  • MinIO 固有のエラーに対応するエラーコードマッピングを実装し、AWS S3 C++ SDK に MinIO 互換性のサポートを追加しました。この変更により、AWS S3 ではなく MinIO デプロイメントを使用する場合でも、ClickHouse が MinIO サーバーのエラーを適切に処理して再試行できるようになり、セルフホストの MinIO クラスター上でオブジェクトストレージを運用するユーザーの信頼性が向上します。 #93082 (XiaoBinMu).
  • シンボル化済みの jemalloc プロファイルを出力できるようになり、heap profile の生成時にバイナリが不要になりました。#93099 (Azat Khuzhin) 。
  • clickhouse git-import ツールを復活させました。大きなコミットや不正なコミットで正常に動作しなくなっていたためです。https://presentations.clickhouse.com/2020-matemarketing/ を参照してください。 #93202 (Alexey Milovidov).
  • クエリログに、URLストレージのパスワードを表示しないようにしました。 #93245 (Konstantin Vedernikov).
  • flipCoordinatesGeometry 型をサポートしました。#93303 (Bharat Nallan) 。
  • SYSTEM INSTRUMENT ADD/REMOVE の UX を改善: 関数名に String リテラルを使用し、一致するすべての関数にパッチを適用できるようにし、REMOVE で function_name を使えるようにしました。#93345 (Pablo Marcos).
  • マージ時の統計情報のマテリアライズを有効/無効にする新しい設定 materialize_statistics_on_merge を追加しました。デフォルト値は 1 です。#93379 (Han Fei) 。
  • ClickHouse で、DESCRIBE SELECT クエリにおいて SELECT を括弧で囲まなくても解析できるようになりました。#58382 を修正しました。#93429 (Yarik Briukhovetskyi).
  • 一定の確率で cache の正確性チェックをランダムに行うようにしました。#93439 (Kseniia Sumarokova) 。
  • JSON において、一方がリテラルでもう一方がネストされたオブジェクトである場合に、重複したパスを許可する設定 type_json_allow_duplicated_key_with_literal_and_nested_object を追加しました。例: {"a" : 42, "a" : {"b" : 42}}https://github.com/ClickHouse/ClickHouse/pull/79317 で重複パスに対するこの制限が追加される前に作成されたデータが存在する可能性があり、現在ではそのようなデータをさらに操作するとエラーが発生することがあります。この設定を使用すると、そのような古いデータも引き続きエラーなく使用できます。#93604 (Pavel Kruglov).
  • Pretty JSON では、単純型の値を個別の行に出力しないようにしました。#93836 (Pavel Kruglov) 。
  • alter table ... modify setting ... ステートメントが多数ある場合、5秒間ロックを取得できないことがあります。logical error ではなく timeout を返すようにしたほうが適切です。 #93856 (Han Fei).
  • 構文エラー時の過剰な出力を防止しました。この変更以前は SQL スクリプト全体が出力されており、多数のクエリが含まれている可能性がありました。#93876 (Alexey Milovidov).
  • Keeper において、統計情報付きの check リクエストのバイトサイズを正しく計算するようにしました。#93907 (Mikhail Artemenko).
  • join の並べ替えで実行時のハッシュテーブルサイズの統計を使用するかどうかを制御するため、use_hash_table_stats_for_join_reordering 設定が追加されました。この設定はデフォルトで有効になっており、collect_hash_table_stats_during_joins の既存の動作は維持されます。#93912 (Vladimir Cherkasov).
  • ユーザーは、system.server_settings テーブルでネストされたグローバルなサーバー設定 (例: logger.level) を部分的に確認できるようになりました。これは、固定された構造を持つ設定 (リスト、列挙、繰り返しなどがないもの) のみを対象としています。#94001 (Hechem Selmi).
  • QBit が等価比較できるようになりました。#94078 (Raufs Dunamalijevs) 。
  • Keeper が破損したスナップショットや不整合な変更ログを検出した場合は、手動で中断したりファイルを自動的にクリーンアップしたりする代わりに、例外をスローするようになりました。これにより、手動での介入を前提とした、より安全な Keeper の動作が実現されます。#94168 (Antonio Andelic).
  • CREATE TABLE の失敗時に不要な残骸が残る可能性がある問題を修正しました。 #94174 (Azat Khuzhin).
  • パスワードで保護された TLS 秘密鍵の使用時に発生する、未初期化メモリへのアクセス (OpenSSL のバグ) を修正しました。#94182 (Konstantin Bogdanov).
  • chdig を v26.1.1 に更新しました。#94290 (Azat Khuzhin) 。
  • S3Queue ordered mode で、より汎用的なパーティション化をサポートしました。 #94321 (Bharat Nallan).
  • 設定 allow_statistics_optimize のエイリアスとして use_statistics を追加しました。これにより、既存の設定 use_primary_key および use_skip_indexes との整合性が高まります。#94366 (Robert Schulze).
  • Numbers から Enums への変換時に要素が存在するかどうかを確認するための設定 input_format_numbers_enum_on_conversion_error を有効にしました。#94384 (Elmi Ahmadov) 。
  • S3(Azure)Queue の ordered mode で、追跡制限に基づいて失敗したノードをクリーンアップするようになりました (以前は、失敗済みノードと処理済みノードの両方について Unordered mode でのみ行われていましたが、今後は Ordered mode でも失敗したノードに限って行われます) 。 #94412 (Kseniia Sumarokova).
  • clickhouse-local の default ユーザーでアクセス管理を有効にしました。clickhouse-local のデフォルトユーザーには access_management 権限がなかったため、本来は無制限であるべきにもかかわらず、DROP ROW POLICY IF EXISTS のような操作が ACCESS_DENIED エラーで失敗していました。#94501 (Alexey Milovidov).
  • YTsaurus の辞書およびテーブルで named collection を有効にしました。#94582 (MikhailBurdukov).
  • S3 および Azure Blob Storage 向けの BACKUP/RESTORE で、SQL で定義した named collection をサポートしました。#94604 をクローズします。#94605 (Pablo Marcos) 。
  • ordered モードの S3Queue で、パーティションキーに基づくバケット分けをサポートしました。#94698 (Bharat Nallan) 。
  • 最も長時間実行されているマージの経過時間を示す非同期メトリクスが追加されました。#94825 (Raúl Marín) 。
  • IcebergBitmapPositionDeleteTransform を使用して位置削除を適用する前に、対象ファイルの確認を追加しました。 #94897 (Yang Jiang).
  • これで view_duration_ms は、グループ内の各スレッドの継続時間の合計ではなく、グループがアクティブだった時間を示すようになりました。 #94966 (Sema Checherinda).
  • 64 個に制限されていた hasAnyTokens および hasAllTokens 関数の検索トークン数上限を削除しました。例: SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]); 検索トークンが 65 個あるため、このクエリは BAD_ARGUMENTS エラーになっていました。この PR により、この上限は完全に撤廃され、同じクエリもエラーなしで実行できるようになりました。#95152 (Elmi Ahmadov).
  • 要素が存在するかどうかを確認するため、Numbers から Enums への変換に対する設定 input_format_numbers_enum_on_conversion_error を追加しました。Closes: #56144#56240 (Nikolay Degterinsky) 。
  • Icebergテーブルでデータファイルと position delete file を読み込む際にフォーマットパーサーのリソースを共有することで、メモリ割り当てを削減しました。 #94701 (Yang Jiang).

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • 事前定義されたクエリハンドラーで、insert時に末尾の空白がデータとして扱われてしまう不具合を修正しました。 #83604 (Fabian Ponce).
  • Joinストレージに対し、outer join から inner join への最適化が適用された場合に発生する INCOMPATIBLE_TYPE_OF_JOIN エラーを修正しました。#80794 を解決します。#84292 (Vladimir Cherkasov) 。
  • allow_experimental_join_right_table_sorting が有効な状態でハッシュ結合を使用した際に発生する例外 “Invalid number of rows in Chunk” を修正しました。 #86440 (yanglongwei).
  • ファイルシステムが大文字・小文字を区別しない場合、MergeTree では常にファイル名をハッシュに置き換えるようにしました。従来は、大文字・小文字を区別しないファイルシステム (MacOS など) を使用している環境で、複数のカラム名/サブカラム名が大文字・小文字だけ異なる場合に、データ破損につながる可能性がありました。 #86559 (Pavel Kruglov).
  • materialized view 内の元となるクエリに対し、作成時に完全な権限チェックを行うようにしました。#89180 (pufit).
  • 定数引数で icebergHash 関数がクラッシュする問題を修正しました。 #90335 (Michael Kolupaev).
  • トランザクションを伴わない mutation がアクティブなトランザクション内のパーツを変更し、そのトランザクションが最終的にロールバックされる場合に発生する論理エラーを修正しました。#90469 (Shaohua Wang) 。
  • 通常のデータベースを atomic データベースに変換した後、system.warnings が正しく更新されるよう修正しました。 #90473 (sdk2).
  • Parquet ファイルの読み取り時に、prewhere 式の一部がクエリ内の別の箇所でも使われている場合に発生していたアサーションを修正しました。#90635 (Max Kainov).
  • Iceberg を split-by-buckets モードで読み取る際に、単一ノード構成のクラスターでクラッシュする問題を修正しました。これにより、#90913 をクローズしました。#91553 (Konstantin Vedernikov).
  • サブカラムの読み取り中に Log エンジンで発生する可能性がある論理エラーを修正しました。 #91710 をクローズします。 #91711 (Pavel Kruglov).
  • ATTACH AS REPLICATED 実行時に発生する論理エラー: ‘Storage が transaction をサポートしていません’ を修正しました。 #91772 (Shaohua Wang).
  • LEFT ANTI JOIN に追加の条件がある場合に、ランタイムフィルタが正しく機能しない問題を修正しました。#91824 (Alexander Gololobov).
  • Nothing 型を含む null-safe な比較で発生するエラーを修正しました。#91834 をクローズしました。#84870 をクローズしました。#91821 をクローズしました。#91884 (Yarik Briukhovetskyi).
  • 同じ文字列が大量に繰り返されるデータに影響する、ネイティブの Parquet リーダーにおける DELTA_BYTE_ARRAY のデコードの不具合を修正しました。 #91929 (Daniel Muino).
  • スキーマ推論時に、globs 内のすべてのファイルではなく、推論元のファイルに対してのみスキーマを cache するようにしました。#91745 をクローズしました。#92006 (Pavel Kruglov).
  • 不正なアーカイブエントリサイズのヘッダーが原因で発生していた Couldn't pack tar archive: Failed to write all bytes エラーを修正しました。#89075 の修正です。#92122 (Julia Kartseva).
  • HTTP接続が閉じられないようにするため、INSERT SELECT 内でリクエストストリームを解放しました。#92175 (Sema Checherinda).
  • USING 句と join_use_nulls を使用する複数の JOIN を含むクエリで発生する論理エラーを修正しました。#92251 (Vladimir Cherkasov).
  • join_use_nulls を使用した join の並べ替え時に発生する論理エラーを修正し、https://github.com/clickhouse/clickhouse/issues/90795 をクローズしました。#92289 (Vladimir Cherkasov) 。
  • negate リテラルを含む arrayElement の AST フォーマットの不整合を修正しました。#92288 をクローズ。#92212 をクローズ。#91832 をクローズ。#91789 をクローズ。#91735 をクローズ。#88495 をクローズ。#92386 をクローズ。#92293 (Pavel Kruglov).
  • join_on_disk_max_files_to_merge 設定で発生する可能性があるクラッシュを修正しました。#92335 (Bharat Nallan) 。
  • 関連 issue #https://github.com/ClickHouse/support-escalation/issues/6365。 #92339 (Tuan Pham Anh) 。
  • SYSTEM SYNC FILE CACHE で不足していたアクセスチェックを修正しました。#92101 をクローズします。#92372 (Kseniia Sumarokova).
  • ウィンドウ関数および複数引数に対する count_distinct_optimization パスの不具合を修正しました。#92376 (Raúl Marín) 。
  • ウィンドウ関数で特定の集約関数を使用した際に発生する “Cannot write to finalized buffer” エラーを修正しました。#91415 をクローズ。#92395 (Jimmy Aguilar Mena).
  • CREATE TABLE ... AS urlCluster() とデータベースエンジン Replicated に関する論理エラーを修正しました。#92216 をクローズ。#92418 (Kseniia Sumarokova) 。
  • MergeTree での mutation 中に、元のパートのシリアライゼーション情報設定を継承するようにしました。これにより、データ型のシリアライゼーションを変更した後に、mutation 済みパートに対するクエリで誤った結果が返る可能性がある問題を修正しました。 #92419 (Pavel Kruglov).
  • 同名のカラムとサブカラムの競合により、誤ったシリアライゼーションが使われてクエリが失敗する可能性があった問題を修正しました。Closes #90219。Closes #85161#92453 (Pavel Kruglov).
  • outer join を inner join に変換する際、クエリプランが意図せず変更されることで LOGICAL_ERROR が発生していた問題を修正しました。あわせて、JOIN 時に集約キーへ単射関数が適用される場合にもこの最適化を適用できるよう、要件を緩和しました。#92503 (János Benjamin Antal) 。
  • 空のタプルカラムのソート中に発生する可能性があるエラー SIZES_OF_COLUMNS_DOESNT_MATCH を修正しました。#92422 をクローズしました。#92520 (Pavel Kruglov).
  • JSON type 内の互換性のない型付き path をチェック。 #91577 をクローズ。 #92539 (Pavel Kruglov).
  • Backup データベースでの SHOW CREATE DATABASE のデッドロックを修正しました。#92541 (Azat Khuzhin).
  • hypothesis 索引の検証時に、適切なエラーコードを使用するようにしました。#92559 (Raúl Marín).
  • アナライザで、カラムの別名内にある動的サブカラムの解決を修正しました。以前は、カラムの別名内の動的サブカラムが getSubcolumn でラップされていたため、場合によってはまったく解決できないことがありました。#91434 をクローズします。#92583 (Pavel Kruglov).
  • 第2引数が NULL の場合に tokens() でクラッシュする問題を防止しました。#92586 (Raúl Marín) 。
  • 基盤となる const PREWHERE カラムへのインプレース mutation が原因で発生し得るクラッシュを修正しました。これは、カラムの縮小時 (IColumn::shrinkToFit) またはフィルタリング時 (IColumn::filter) に、複数のスレッドから同時にトリガーされることで発生する可能性がありました。#92588 (Arsen Muk).
  • 大きなパーツ (4,294,967,295行超) を含むテーブルでは、テキスト索引の作成およびマテリアライズが一時的に無効化されています。現在の索引実装はこのような大きなパーツをまだサポートしていないため、この制限により誤ったクエリ結果が生じるのを防ぎます。 #92644 (Anton Popov).
  • JOIN の実行中に発生する論理エラー Too large size (A) passed to allocator を修正しました。#92043 をクローズしました。#92667 (Yarik Briukhovetskyi).
  • ngrambf_v1 索引で、ngram の長さ (第1パラメーター) が 8 を超えると例外が発生していた不具合を修正しました。#92672 (Robert Schulze) 。
  • ZooKeeperストレージの使用時に、バックグラウンドで named collections を再読み込みすると発生する未捕捉例外を修正しました。https://github.com/ClickHouse/clickhouse-private/issues/44180 をクローズしました。#92717 (Kseniia Sumarokova).
  • ワイルドカード付きの grant に対するアクセス権チェックの誤ったロジックを修正しました。以前の修正 https://github.com/ClickHouse/ClickHouse/pull/90928 では重大な脆弱性に対処したものの、制限が厳しすぎたため、無関係な権限の取り消しによって一部のワイルドカード GRANT 文が失敗していました。#92725 (pufit).
  • WHEREnot match(...) を使用した場合に誤った結果を招いていた、データスキップロジックのバグを修正しました。#92492 をクローズしました。#92726 (Nihal Z. Miaji).
  • MergeTree テーブルが読み取り専用ディスク上に作成されている場合、起動時に一時ディレクトリの削除を試行しないようにしました。 #92748 (Alexey Milovidov).
  • ALTER TABLE REWRITE PARTS (v2) での “Cannot add action to empty ExpressionActionsChain” エラーを修正しました。 #92754 (Azat Khuzhin).
  • 切断された Connection の読み取り時にクラッシュする問題を回避しました。#92807 (Raufs Dunamalijevs) 。
  • Ordered モードの S3Queue ストレージにおける論理エラー Failed to set file processing within 100 retries を修正し、このエラーは警告に置き換えられました。このエラーは、Keeper セッションの有効期限が切れた場合に 25.10 より前のバージョンで発生することがありましたが、Ordered モードで処理の並行度が高い場合には理論上このエラーが発生する可能性が依然としてあるため、25.10 以降のバージョンでも警告のままとなります。#92814 (Kseniia Sumarokova).
  • 以前は、偽の条件で PK 分片を使用する一部のクエリが失敗していましたが、現在は失敗しなくなりました。https://github.com/ClickHouse/ClickHouse/pull/89313 に必要です。#92815 (Yarik Briukhovetskyi).
  • system.parts テーブルにおけるテキスト索引の非圧縮サイズの計算を修正しました。 #92832 (Anton Popov).
  • WHERE句の述語にサブクエリを含むIN句がある論理更新における、プライマリインデックスの使用を修正しました。#92838 (Anton Popov).
  • JSON の path ‘skip’ に対する型ヒント生成を修正しました。#92731 をクローズします。#92842 (Pavel Kruglov).
  • S3テーブルエンジンでは、非決定論的関数が含まれる場合、パーティションキーをキャッシュしないようにしました。#92844 (Miсhael Stetsyuk) 。
  • ratio_of_defaults_for_sparse_serialization=0.0 を指定したスパースカラムのミューテーション後に発生する可能性のあるエラー FILE_DOESNT_EXIST を修正しました。#92633 をクローズしました。#92860 (Pavel Kruglov).
  • JSON カラムが Tuple カラムの後に来る場合に、古い Parquet リーダー (デフォルトでは使用されません) での Parquet スキーマ推論を修正。空のタプルで失敗していた古い Parquet リーダー (デフォルトでは使用されません) を修正。 #92867 (Michael Kolupaev).
  • 定数条件での複数の join と join_use_nulls に関する論理エラーを修正し、#92640 をクローズしました。#92892 (Vladimir Cherkasov) 。
  • パーティション式にサブカラムを含むテーブルへの insert 時に発生する可能性がある NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。#93210 をクローズ。#83406 をクローズ。#92905 (Pavel Kruglov).
  • 別名を持つテーブルに対する Merge エンジンで発生するエラー NO_SUCH_COLUMN_IN_TABLE を修正しました。#88665 をクローズします。#92910 (Pavel Kruglov).
  • LowCardinality(Nullable(T)) カラムに対する full_sorting_join で、NULL != NULL となるケースを修正しました。 #92924 (Vladimir Cherkasov).
  • MergeTree テーブルのテキスト索引のマージ処理中に発生していた複数のクラッシュを修正しました。#92925 (Anton Popov) 。
  • 必要に応じて、TTL 集約時に SET 式の結果の LowCardinality ラッパーを復元し、テーブル最適化中の例外発生を防ぐようにしました。 #92971 (Seva Potapov).
  • 空の配列を has 関数で使用した際に、索引解析中に発生する論理エラーを修正しました。#92906 をクローズしました。#92995 (Nihal Z. Miaji).
  • 終了処理中のバックグラウンドスケジュールプールでハングする可能性がある問題を修正しました (シャットダウン時にサーバーがハングする原因となる場合があります) 。 #93008 (Azat Khuzhin).
  • alter で設定 ratio_of_defaults_for_sparse_serialization1.0 に変更した後、スパースカラムの mutation 後に発生する可能性がある FILE_DOESNT_EXIST エラーを修正しました。#93016 (Pavel Kruglov) 。
  • WHERE 句で not materialize(...) または not CAST(...) を使用した際に、誤った結果を引き起こしていたデータスキップロジックの不具合を修正しました。#88536 をクローズします。#93017 (Nihal Z. Miaji).
  • 共有パーツでの TOCTOU 競合により、古いパーツが使用される可能性があった問題を修正しました。 #93022 (Azat Khuzhin).
  • 範囲外のオフセットを含む不正な groupConcat 集約状態のデシリアライズ時に発生するクラッシュを修正しました。#93028 (Raufs Dunamalijevs).
  • 分散クエリの事前キャンセル後に、接続が壊れた状態のまま残る問題を修正しました。#93029 (Azat Khuzhin) 。
  • 右側の join キーがスパースなカラムである場合の join 結果を修正しました。これにより #92920 をクローズします。バグを再現できるのは set compatibility='23.3' の場合のみです。バックポートすべきかどうかは不明です。#93038 (Amos Bird).
  • estimateCompressionRatio()Cannot finalize buffer after cancellation が発生する可能性がある問題を修正しました。修正: #87380#93068 (Azat Khuzhin).
  • 複雑な式 (concat(col1, col2) など) に基づいて構築されたテキスト索引のマージ不具合を修正しました。#93073 (Anton Popov).
  • フィルターにサブカラムが含まれている場合のプロジェクションの適用を修正しました。#92882 をクローズしました。#93141 (Pavel Kruglov).
  • クエリプランに join ランタイムフィルタが追加されたときに一部のケースで発生していた論理エラーを修正しました。原因は、join の片側から重複した const カラムを誤って返していたことでした。#93144 (Alexander Gololobov) 。
  • JOIN ランタイムフィルタで使用される特別な関数 __applyFilter が、有効な一部のケースで ILLEGAL_TYPE_OF_ARGUMENT を返していました。#93187 (Alexander Gololobov) 。
  • 補間されたカラムが実質的に同じカラムの別名である場合に、ブロック内で異なる補間済みカラムが同一カラムに集約されてしまうのを防止しました。#93197 (Yakov Olkhovskiy) 。
  • すでに補完済みの右側テーブルとの結合時には、ランタイムフィルタを追加しないようにしました。#93211 (Alexander Gololobov) 。
  • 切断されたセッションの後に Keeper の永続ウォッチが適切にクリーンアップされない問題を修正しました。これにより #92480 を解決します。#93213 (Konstantin Vedernikov) 。
  • Iceberg の ORDER BY tuple を修正しました。これにより #92977 をクローズしました。#93225 (Konstantin Vedernikov).
  • S3Queue 設定 s3queue_migrate_old_metadata_to_buckets のバグを修正しました。#93392#93196#81739 をクローズしました。#93232 (Kseniia Sumarokova).
  • マージ時にプロジェクションが再構築される際、未使用のカラムを削除するようにしました。これにより、メモリ使用量が減り、作成される一時パーツも少なくなります。 #93233 (Nikolai Kochetov).
  • スカラー相関サブクエリがある場合に、サブクエリから未使用のカラムが削除されてしまう問題を修正しました。修正前は、カラムが相関サブクエリ内でのみ使用されていると削除されることがあり、その結果クエリは NOT_FOUND_COLUMN_IN_BLOCK エラーで失敗していました。#93273 (Dmitry Novik).
  • ソーステーブルのALTER中に、MVでサブカラムが欠落する可能性がある不具合を修正しました。#93231 をクローズしました。#93276 (Pavel Kruglov) 。
  • ローカルおよびリモート/Distributed テーブルのマージ時に、hostName() に対して ILLEGAL&#95;COLUMN がスローされることがあった、アナライザによる Merge テーブルエンジンのクエリプランニングを修正しました。#92059 をクローズしました。#93286 (Jinlin).
  • 非定数の配列引数を伴う NOT IN が誤った値を返す場合がある問題を修正し、非定数の Array 関数をサポートしました。#14980 をクローズします。#93314 (Yarik Briukhovetskyi).
  • use_top_k_dynamic_filtering 最適化で発生する Not found column を修正。 #93186 を修正。 #93316 (Nikolai Kochetov).
  • サブカラム上に作成されたテキスト索引の再構築に関する不具合を修正しました。 #93326 (Anton Popov).
  • hasAllTokens および hasAnyTokens 関数で、第2引数に空の配列を指定した場合の処理を修正しました。#93328 (Anton Popov).
  • 右側テーブルに対する totals 付きクエリでランタイムフィルタ使用時に発生する論理エラーを修正しました。 #93330 (Alexander Gololobov).
  • 関数 tokens が非 const のトークナイザーパラメータ (第 2、第 3、第 4 パラメータ) で呼び出された場合でも、server がクラッシュしなくなりました。たとえば、SELECT tokens(NULL, 1, materialize(1))#93383 (Robert Schulze) 。
  • groupConcat 状態のデシリアライズにおける整数オーバーフローの脆弱性を修正しました。この脆弱性により、細工された集約状態によってメモリ安全性の問題が発生する可能性がありました。#93426 (Raufs Dunamalijevs) 。
  • 索引にトークンが含まれない場合 (すべての配列が空であるか、すべてのトークンがトークナイザーによってスキップされる場合) に、配列カラムに対するテキスト索引の索引解析が正しく行われない問題を修正しました。 #93457 (Anton Popov).
  • 接続文字列にユーザー名/パスワードが含まれている場合に、ClickHouse Client で OAuth ログインを回避するようにしました。 #93459 (Krishna Mannem).
  • DataLakeCatalog における Azure ADLS Gen2 の払い出し認証情報のサポートを修正 - Iceberg REST カタログから adls.sas-token.* キーをパースし、ABFSS URL のパースを修正しました。 #93477 (Karun Anantharaman).
  • アナライザにおける GLOBAL IN のサポートを修正しました (以前は Set がリモートノードで再度作成されていました) 。#93507 (Azat Khuzhin) 。
  • デシリアライゼーション時に、サブカラムを直接スパースカラムに抽出する際の不具合を修正しました。 #93512 (Pavel Kruglov).
  • 重複する検索クエリがある場合の、テキスト索引からの直接読み取りを修正しました。 #93516 (Anton Popov).
  • ランタイムフィルタが有効な場合に、結合されたテーブルで同じカラムが複数回返されると発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました (例: SELECT a, a, a FROM t) 。 #93526 (Alexander Gololobov).
  • ssh を使用して接続する際に、clickhouse-client がパスワードを 2 回要求する不具合を修正しました。 #93547 (Isak Ellmer).
  • シャットダウン時に zookeeper の終了処理が確実に完了するようにしました (ごくまれにシャットダウン時にハングする可能性がある問題を修正) 。 #93602 (Azat Khuzhin).
  • deduplication の競合により ReplicatedMergeTree の復元時に LOGICAL_ERROR が発生する問題を修正しました。#93612 (Pablo Marcos) 。
  • 一部の入力フォーマットで、Sparse カラムに直接デシリアライズする際の有効期限 (TTL) 更新で Sparse カラムを使用する処理を修正しました。これにより、論理エラー Unexpected type of result TTL column が発生する可能性を解消しました。 #93619 (Pavel Kruglov).
  • 無効な入力で呼び出された際に、クラッシュしたりハングしたりすることがあった h3 index 関数の問題を修正しました。#93657 (Michael Kolupaev) 。
  • 非UTF-8データに対してngram_bf索引を使用すると、未初期化メモリの読み取りが発生し、その値が結果として生成される索引構造に含まれる可能性がありました。#92576 をクローズしました。#93663 (Alexey Milovidov).
  • 展開後のバッファサイズが想定どおりであることを確認します。#93690 (Raúl Marín) 。
  • merge table engine の使用時に、SHOW COLUMNS 権限を確認せずにユーザーがテーブルのカラム一覧を取得できないようにしました。#93695 (János Benjamin Antal).
  • サブカラム上に作成されたスキップ索引のマテリアライズ処理を修正しました。#93708 (Anton Popov).
  • PipelineExecutor の存続中に IStorage オブジェクトが破棄されないよう、storage の共有ポインタを QueryPipeline::resources::storage_holders に保持します。 #93746 (Miсhael Stetsyuk).
  • 再起動後に interserver host が変更された場合の Replicated DB のアタッチを修正しました。#93779 (Tuan Pham Anh) 。
  • cache が有効な際に発生していた ReadBufferFromS3 の assert !read_until_position を修正しました。#93809 (Kseniia Sumarokova) 。
  • Map カラムで空のタプルが使われるまれなケースで発生する論理エラーを修正しました。#93784 をクローズしました。#93814 (Nihal Z. Miaji) 。
  • マージ中にプロジェクションが再構築される際に発生する_part_offsetの破損を修正し、_part_offsetカラムの不要な読み取りを避け、プロジェクション計算で不要なカラムをスキップすることで、プロジェクション処理を最適化しました。これは、#93233で導入された最適化をさらに発展させたものです。#93827 (Amos Bird) 。
  • ‘Bad version’ の処理を削除しました。#93843 (Anton Ivashkin).
  • キーが符号付き整数型の場合に、分散クエリで optimize_inverse_dictionary_lookup が機能しない問題を修正しました。#93259 をクローズしました。#93848 (Nihal Z. Miaji).
  • 分散 remote() クエリで lag/lead が動作しない不具合を修正しました。#90014 をクローズしました。#93858 (Nihal Z. Miaji).
  • system instrument のディスパッチに関するバグを修正。 #93937 (Pablo Marcos).
  • https://github.com/ClickHouse/ClickHouse/pull/89173 では、TraceSender が内部パイプ経由で送信する構造にフィールドを 1 つ追加しました。しかし、バッファサイズが更新されていなかったため (こちら) 、buffer_size を超えるデータをバッファに書き込むことになり、その結果、フラッシュが複数回発生します。さらに、TraceSender::send は異なるスレッドから呼び出されるため、それぞれのスレッドによるフラッシュが途中で入り交じる可能性があり、受信側 (TraceCollector) が前提としている不変条件が崩れてしまいます。#93966 (Miсhael Stetsyuk) 。
  • USING句を使用したストレージ Join のJOIN演算における、上位型への型変換を修正しました。#91672 を修正しました。#78572 を修正しました。#94000 (Dmitry Novik).
  • JOIN ランタイムフィルタが Merge テーブルに適用された際に、FilterStep が適切に追加されない不具合を修正しました。#94021 (Alexander Gololobov).
  • 複数のカラムに対する述語を含み、bloom filter スキップ索引が設定され、かつ OR 条件と NOT 条件の両方を含む SELECT クエリでは、結果が不整合になることがありました。現在は修正されています。#94026 (Shankar Iyer).
  • 依存インデックスのあるカラムに対する CLEAR の不具合を修正しました。#94057 (Raúl Marín) 。
  • ReadWriteBufferFromHTTP における未初期化の値の使用を修正しました。#94058 (Alexey Milovidov).
  • JSON 内の型付きパスに対する不適切なチェックを修正しました。このチェックは https://github.com/ClickHouse/ClickHouse/pull/92842 で導入されたもので、既存のテーブルの起動時にエラーを引き起こす可能性がありました。#94070 (Pavel Kruglov).
  • OUTER JOIN がある場合に、filter の解析中にクラッシュする問題を修正しました。#90979#94080 (Dmitry Novik).
  • 並列実行時 (max_threads > 1、デフォルト) に UInt8 集約キーを使用した場合の uniqTheta の正確性を修正しました。#94095 (Azat Khuzhin) 。
  • SCOPE_EXIT 内の socket.setBlocking(true) 呼び出しで例外が送出されてクラッシュしていた問題を修正しました。 #94100 (Miсhael Stetsyuk).
  • ReplicatedMergeTree で、DROP PARTITION によって後続のログエントリで作成されたパーツまで削除されてしまうことで発生するデータ損失を修正。 #94123 (Tuan Pham Anh).
  • ページ境界をまたぐ Array を Parquet リーダー v3 が誤って処理する問題を修正しました。これは、たとえばページ統計やページ索引を有効にせずに Arrow で書き込まれたファイルで発生します。影響を受けるのは Array データ型のカラムのみです。症状としては、約 1 MB ごとに 1 つの配列が途中で切り詰められる可能性があります。この修正前は、回避策として次の設定を使用してください: input_format_parquet_use_native_reader_v3 = 0#94125 (Michael Kolupaev).
  • ログエントリ待機中の ReplicatedMergeTree におけるウォッチ過多の問題を修正しました。 #94133 (Azat Khuzhin).
  • 関数 arrayShufflearrayPartialShufflearrayRandomSample が const カラムを実体化するようになり、異なる行で異なる結果が返るようになりました。#94134 (Joanna Hulboj).
  • materialized view で table function を評価する際のデータ競合を修正。 #94171 (Alexey Milovidov).
  • (クエリが不正な場合に発生する) PostgreSQL データベースエンジンでの nullptr の逆参照を修正しました。#92887 をクローズしました。#94180 (Alexey Milovidov).
  • 複数のサブクエリを含む SELECT クエリを使うリフレッシュ可能なマテリアライズドビューにおけるメモリリークを修正しました。 #94200 (Antonio Andelic).
  • DataPartStorageOnDiskBase::removesystem.parts 間のデータ競合を修正しました。#49076 をクローズしました。#94262 (Alexey Milovidov).
  • メモリ例外発生時にクラッシュ (std::terminate) を引き起こす可能性がある、HashTable のコピー代入における誤った noexcept 指定を削除しました。 #94275 (Nikita Taranov) 。
  • 以前は、GROUP BY に重複したカラムを含む PROJECTION (例: GROUP BY c0, c0) を作成してデータを挿入すると、optimize_row_order が有効な場合に std::length_error が発生していました。#94065 を修正しました。#94277 (Alexey Milovidov) 。
  • 接続時にZooKeeperクライアントで発生し、ハングやクラッシュを引き起こすわかりにくいバグを修正しました。#94320 (Azat Khuzhin).
  • サブカラムに適用されていなかった function to subcolumns 最適化の問題を修正しました。#94323 (Pavel Kruglov).
  • enable_lazy_columns_replication が有効な場合に、ネストされた RIGHT JOIN で誤った結果が返される可能性がある問題を修正しました。この不具合により、レプリケートされたカラム内のすべての行で、本来はそれぞれ異なる値が返されるべきところ、誤って同じ値が返されていました。#93891 をクローズしました。#94339 (Vladimir Cherkasov).
  • 等価集合を用いた SEMI JOIN の filter pushdown を修正しました。引数の型が変更されている場合は、filter pushdown を行わないようにしました。#93264 を修正しました。#94340 (Dmitry Novik) 。
  • database DataLake データベースエンジン使用時の DeltaLake CDF の利用を修正しました (Delta Lake カタログのインテグレーション) 。#94122 を修正しました。#94342 (Kseniia Sumarokova).
  • SLRU cacheポリシー使用時に、メトリクス FilesystemCacheSizeLimit の現在の値が誤っていた問題を修正しました。#94363 (Kseniia Sumarokova) 。
  • 2 つ未満の引数で Backup データベースエンジンを作成した場合、返されるエラーメッセージがより分かりやすくなりました (std::out_of_range: InlinedVector::at(size_type) const failed bounds check. ではなく、Wrong number of arguments が返されます) 。#94374 (Robert Schulze) 。
  • grant option を持つ権限について、データベースレベルでグローバル権限を取り消そうとする無効な操作を無視するようになりました。 #94386 (pufit).
  • compact パーツからスパース オフセットを読み取る際の不具合を修正しました。#94385 をクローズしました。#94399 (Pavel Kruglov).
  • alter_column_secondary_index_modethrow モードを使用している場合でも、暗黙的な索引を使用するカラムに対する ALTER を妨げないようにしました。#94425 (Raúl Marín).
  • Protocol::Client::IgnoredPartUUIDs を複数の receivePacketsExpectQuery 呼び出しで読み取る際に発生する TCPHandler のクラッシュを修正しました。 #94434 (Miсhael Stetsyuk).
  • system.functions における機密データのマスキングの不具合を修正しました。#94436 (Vitaly Baranov) 。
  • send_profile_events が無効な場合に発生する nullptr の逆参照を修正しました。この機能は最近、ClickHouse Python ドライバーに導入されました。#92488 を解決します。#94466 (Alexey Milovidov).
  • マージ中のテキスト索引 .mrk の非互換性を修正。 #94494 (Peng Jian).
  • read_in_order_use_virtual_row が有効な場合、索引が切り詰められているかどうかを確認せずに、主キー全体のサイズに基づいて索引カラムにアクセスしていたため、use-after-free / 未初期化メモリの使用が発生していました。#85596 をクローズしました。#94500 (Alexey Milovidov).
  • 型がNullableの場合に、GLOBAL IN を含むサブクエリ用の外部テーブル送信時に、型不一致によって発生するerrorを修正しました。 #94097 をクローズしました。 #94511 (Alexey Milovidov).
  • 以前のバージョンでは、同じ式に対する複数の索引条件を持つクエリで、誤って Not found column 例外がスローされることがありました。#60660 を修正しました。#94515 (Alexey Milovidov).
  • ランタイムフィルタにおける Nullable の JOIN カラムの誤った処理を修正しました。 #94555 (Alexander Gololobov).
  • 現在使用中の workload 内に別の workload を作成しても、クラッシュしなくなりました。#94599 (Sergei Trifonov) 。
  • 存在しないカラムに対してisNotNullが評価された際に、ANY LEFT JOIN の最適化中に発生するクラッシュを修正しました。#94600 (Molly).
  • 計算済みデフォルトを持つ他のカラムを参照する場合の、デフォルト式の評価を修正しました。#94615 (Alexey Milovidov).
  • BACKUP/RESTORE 操作における権限の問題を修正しました。 #94617 (Pablo Marcos) 。
  • データ型が Nullable(DateTime64) の場合に、不正な型変換が原因で発生するクラッシュを修正しました。#94627 (Miсhael Stetsyuk) 。
  • 特定の分散クエリで、ORDER BY 使用時に ALIAS カラムの値が入れ替わって返されることがある不具合を修正しました (つまり、カラム a にカラム b のデータが表示され、逆にカラム b にはカラム a のデータが表示される問題です) 。#94644 (filimonov) 。
  • keeper-bench の結果をファイルに保存する際の不具合を修正しました。#94654 (Antonio Andelic) 。
  • 負の浮動小数点値を含むカラムで、MinMax 型統計による推定が誤る問題を修正しました。 #94665 (zoomxi).
  • map のキーが struct の場合に発生していた Parquet ファイル読み取りの問題を修正しました。#94670 (Konstantin Vedernikov) 。
  • 複雑な ON 条件を使用した場合に、RIGHT JOIN の結果が誤る可能性がある問題を修正しました。#92913 をクローズしました。#94680 (Vladimir Cherkasov) 。
  • Vertical merge後も、一定の索引粒度 (use_const_adaptive_granularity) を維持する。 #94725 (Azat Khuzhin).
  • スカラーサブクエリとテーブルの依存関係に関する mutation のバグを修正しました。テーブルのカラムに対して依存関係 (索引またはプロジェクション) がある場合、スカラーサブクエリがデータなしで評価・キャッシュされ、その結果、誤った変更が行われる可能性がありました。#94731 (Raúl Marín).
  • エラー発生時の AsynchronousMetrics cpu_pressure フォールバックを修正しました。 #94827 (Raúl Marín).
  • getURLHostRFC 関数では、ポインタをデリファレンスする前の境界チェックが不足していました。空文字列が domainRFC に渡されると、未初期化メモリを読み取り、MSan error がトリガーされていました。#94851 (Alexey Milovidov) 。
  • 暗号化ディスクが読み取り専用になる問題を修正しました。 #94852 (Azat Khuzhin).
  • 分散テーブルで古いアナライザを使用した際に、小数の LIMIT/OFFSET で発生する論理エラーを修正しました。#94712 をクローズしました。#94999 (Ahmed Gouda).
  • JOIN ランタイムフィルタがデフォルトで有効な場合に、一部の条件下で発生するクラッシュを修正しました。 #95000 (Alexander Gololobov).
  • テーブルエンジン URL() およびテーブル関数 url() で使用される URL 内のパスワードのマスキングを改善しました。#95006 (Vitaly Baranov) 。
  • 関数 toStartOfInterval は、enable_extended_results_for_datetime_functions が有効な場合、XDay, Week, Month, Quarter, YeartoStartOfX と同様に動作するようになりました。#95011 (Kirill Kopnev) 。
  • 定数文字列の比較で、設定 cast_string_to_date_time_modebool_true_representationbool_false_representation、および input_format_null_as_default が正しく反映されない問題を修正しました。#91681 をクローズしました。#95040 (Nihal Z. Miaji).
  • ファイルシステムキャッシュで発生するデータ競合を修正しました。 #95064 (Alexey Milovidov).
  • Parquet リーダーでまれに発生するレースコンディションを修正しました。 #95068 (Alexey Milovidov).
  • LIMIT がゼロのときに top K 最適化で発生するクラッシュを修正しました。#93893 を解決します。#95072 (Alexey Milovidov).
  • DateTime/整数から Time64 への変換では、単調ではない toTime を使用して時刻部分を抽出しますが、ToDateTimeMonotonicity テンプレートがこの変換を誤って単調と見なしていました。その結果、デバッグビルドで “MergeTreeSetIndex における無効な二分探索結果” 例外が発生していました。#95125 (Alexey Milovidov).
  • 必要な場合にのみマニフェストファイルのエントリ一覧を再作成するようにしました (以前は各イテレーションで行われていました) 。 #95162 (Daniil Ivanik).

ビルド/テスト/パッケージングの改善

  • jemalloc のヒーププロファイリング機能を利用して、ClickHouse SQL パーサーにおけるメモリ割り当てをプロファイリングするためのツール群を追加しました。#94072 (Ilya Yatsishin).
  • パーサーでのメモリ割り当てのデバッグを簡単にするツールを追加しました。このツールは、クエリを AST 表現にパースする前後で jemalloc の stats.allocated メトリックを使い、何が割り当てられたかを表示します。さらに、前後でプロファイルをダンプして、どこで割り当てが発生したかを示すレポートを作成できるメモリプロファイリングモードにも対応しています。#93523 (Ilya Yatsishin).
  • 推移的な libc++ インクルードを削除しました。#92523 (Raúl Marín).
  • 一部の sequential テストを並列化しました: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
  • 一部のビルドフラグを整理しました。#93679 (Raúl Marín).
  • c-ares を v1.34.5 から v1.34.6 に更新しました。これにより、ClickHouse には影響しない c-ares の CVE-2025-62408 に対応しています。#94129 (Govind R Nair).
  • curl 8.18.0 を使用するようにしました。#94742 (Konstantin Bogdanov).
最終更新日 2026年8月27日