> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Cloud 向け v26.8 変更履歴

> v26.8 の変更履歴

<h2 id="backward-incompatible-changes">
  後方互換性を持たない変更
</h2>

<h3 id="query-function-and-syntax-changes">
  クエリ、関数、構文の変更
</h3>

* 本体が単一の `Distributed` テーブルに対する単純な `SELECT` であるビューについて、外側のクエリ全体が分片にプッシュダウンされるようになりました (新しい設定 `optimize_trivial_view_pushdown_to_distributed`、デフォルトで有効) 。これにより、このようなビューで観測される動作が変わります。ビュー参照に記述された `FINAL` および `SAMPLE` は、無視されずに分片ローカルのテーブルへ伝播されるようになり、単一分片のクラスターでは `extremes` が報告されなくなります。以前の動作に戻すには、`optimize_trivial_view_pushdown_to_distributed = 0` を設定してください。[#101791](https://github.com/ClickHouse/ClickHouse/pull/101791) ([simonmichal](https://github.com/simonmichal))。
* 軽量 `UPDATE` のパッチパートは、(`sorting_key..., _block_number, _block_offset`) でソートされた新しい v2 オンディスクフォーマットを使用し、新しいマージアルゴリズムで適用されるようになりました。ピークメモリ使用量の上限は、パッチ全体ではなく、ソートキーが等しい最大の連続範囲によって決まります。また、マージ境界をまたぐ更新が、メモリ上での Join による適用にフォールバックすることもなくなりました。旧フォーマットのパッチパートも引き続き読み取れます。26.8 より前のバージョンからローリングアップグレードを行う場合は、すべてのレプリカのアップグレードが完了するまで `patch_parts_version = 'v1'` のままにするか、`compatibility` 設定を使用してください。[#103182](https://github.com/ClickHouse/ClickHouse/pull/103182) ([CurtizJ](https://github.com/CurtizJ))。
* `AggregatingMergeTree` は、ソートキーの一部でも集約状態のメジャー (`AggregateFunction`/`SimpleAggregateFunction`) でもないカラムを含むスキーマを、テーブル作成時に拒否するようになりました。このようなカラムはバックグラウンドマージ中に任意の値へと暗黙的に集約されてしまうため、そのカラムで `GROUP BY` やフィルタリングを行うクエリが誤った結果を返します。以前の動作に戻すには、`allow_dimensions_outside_sorting_key = 1` を設定してください。[#108087](https://github.com/ClickHouse/ClickHouse/pull/108087) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 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](https://github.com/ClickHouse/ClickHouse/pull/108361) ([CheSema](https://github.com/CheSema))。
* 設定 `use_legacy_to_time` のデフォルトが `0` になったため、`toTime` は日時を固定日付の値に変換するのではなく、値を `Time` データ型に変換するようになりました。レガシーな動作は、`toTimeWithFixedDate` 関数を使用するか、`use_legacy_to_time = 1` を設定することで引き続き利用できます。[#108729](https://github.com/ClickHouse/ClickHouse/pull/108729) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* Naive Bayes モデル (`naiveBayesClassifier` で使用) は、従来のサーバー側の設定 (シリアル化された `.bin` モデルファイルを参照する XML 設定ファイル) ではなく、`NAIVE_BAYES` レイアウトを持つ Dictionary として設定するようになりました。この Dictionary は、クラスごとに事前集計された n-gram 出現回数のテーブルから、ロード時に構築されます。従来の方式はサポートされなくなったため、既存のモデルは Dictionary として再作成する必要があります。また、`naiveBayesClassifier` に加えて 3 つの新しい関数が追加されました。`naiveBayesClassifierWithProb` は予測されたクラスとその確率を返し、`naiveBayesClassifierWithAllProbs` はすべてのクラスとそれぞれの確率を返します。`naiveBayesNgrams` は Dictionary と同じ方法でテキストを n-gram にトークン化する関数で、ラベル付きの生テキストから学習データを構築する際に使用します。さらに、複数のパフォーマンス最適化も行われました。9.7 MiB のコードポイント trigram 言語モデルでは、メモリ使用量が約 49 分の 1 (1.84 GiB から 38 MiB) に削減され、ロードと分類はいずれも約 11 倍高速になっています。[#108773](https://github.com/ClickHouse/ClickHouse/pull/108773) ([nihalzp](https://github.com/nihalzp))。
* `max_insert_threads` 設定のデフォルト値が `1` (並列化なし) から `auto` に変更されました。`auto` は、サーバーで利用可能な CPU コア数に解決されます (メモリ逼迫時には `max_insert_threads_min_free_memory_per_thread` に基づいて減らされます) 。これにより、`INSERT SELECT` はデフォルトで並列実行されます。また、挿入先の書き込みパスを安全に分岐できる場合は、条件を満たす通常の `INSERT` でも書き込み側が並列化されることがあります。この変更により、作成されるパーツの数や挿入される行の順序が変わる可能性があります。以前の動作に戻すには、`max_insert_threads` を `1` に設定するか、`compatibility` を `26.8` より前のバージョンに設定してください。[#109000](https://github.com/ClickHouse/ClickHouse/pull/109000) ([alexey-milovidov](https://github.com/alexey-milovidov))。[#109006](https://github.com/ClickHouse/ClickHouse/pull/109006) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* CSV で単体の `Tuple` を読み込む際、すべての位置で要素ごとに 1 つのフィールドを読み取るようになりました。そのため、トップレベル要素のフィールドにある `\N` はその要素の値として扱われ、`input_format_null_as_default` もその要素に適用されます。以前は、先頭の `\N` がカラム全体の null とみなされていたため、その行はカラムのデフォルト値に置き換えられ、残りの要素のセルはパースに失敗していました。この変更は、単体の `Tuple` 全体に対して 1 つのフィールドしか指定していない行については後方互換性がありません。そのような行は残りの要素分のフィールドが不足するため拒否されます。また、要素が 1 つの `Tuple` ではどちらの場合もフィールド数が変わらないため、カラムの `DEFAULT` ではなく要素のデフォルト値が警告なしに返されます。このようなフィールドを従来どおりカラム全体として読み込むには、`input_format_csv_deserialize_separate_columns_into_tuple = 0` を設定してください。[#109744](https://github.com/ClickHouse/ClickHouse/pull/109744) ([groeneai](https://github.com/groeneai))。
* `CREATE USER` および `ALTER USER` に、`VALID UNTIL` の省略形として `VALID FOR <interval>` 句が追加されました。有効期限のデッドラインは、クエリ実行時点の現在時刻に指定したインターバルを加えて算出され、`VALID UNTIL` の形式で保存されます。2106 年以降のデッドラインも正確に表現できるよう、`system.users` テーブルの `valid_until` カラムの型は `Array(DateTime)` から `Array(DateTime64(0))` に変更されました。このカラムを読み取るツールは、新しい型に対応する必要があります。[#110171](https://github.com/ClickHouse/ClickHouse/pull/110171) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `EXPLAIN SYNTAX` は、1 行ごとに 1 レコードを返す代わりに、整形済みのクエリを (改行を含む) 単一の `String` レコードとして返すようになりました。これにより、出力は元のクエリを復元可能な単一の行となり、そのまま利用できます (たとえば、`SELECT count() FROM (EXPLAIN SYNTAX ...)` は `1` を返します) 。この動作は新しい `single_record` オプションで制御され、デフォルトは `1` です。従来の 1 行 1 レコードの出力に戻すには、`single_record = 0` を設定してください。その他の種類の `EXPLAIN` (`PLAN`/`PIPELINE`/`AST`) は、引き続き行ごとのツリー形式で出力します。[#110479](https://github.com/ClickHouse/ClickHouse/pull/110479) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `hasColumnInTable` 関数は、任意のリモートサーバー上のカラムを確認するためのオプション引数 `hostname`、`username`、`password` を受け付けなくなりました。今後は `hasColumnInTable(database, table, column)` の形式のみ使用できます。削除されたリモートモードにはセキュリティ上の問題がありました。任意のユーザーが任意のホストへの外向き接続を発生させることができ、認証情報がクエリログに漏洩するうえ、いかなる権限による制限も受けていなかったためです。[#110881](https://github.com/ClickHouse/ClickHouse/pull/110881) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `PostgreSQL` および `MaterializedPostgreSQL` データベースエンジンは、`PostgreSQL` テーブルエンジン、`postgresql` テーブル関数、DDL で作成されたディクショナリと同様に、サーバーの `remote_url_allow_hosts` 設定に従うようになりました。このポリシーは `CREATE DATABASE` およびユーザーが発行する `ATTACH DATABASE` に適用されます。サーバーで `remote_url_allow_hosts` が設定されている場合、ホワイトリスト外のホストを指す `PostgreSQL` または `MaterializedPostgreSQL` データベースを作成またはアタッチしようとすると、`UNACCEPTABLE_URL` エラーで拒否されます。既存のデータベースはサーバー起動時に引き続き読み込まれるため、アップグレードによってサーバーが起動できなくなることはありません。[#111135](https://github.com/ClickHouse/ClickHouse/pull/111135) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Arrow` および `ArrowStream` フォーマット向けの、Apache Arrow ライブラリベースのリーダーとライターを削除しました。今後は、26.7 以降デフォルトとなっていた ClickHouse のネイティブ実装のみが使用されます。設定 `input_format_arrow_use_native_reader` および `output_format_arrow_use_native_writer` は廃止されました。これらの設定は引き続き指定できますが効果はなく、Apache Arrow 実装を強制するために `0` に設定していたクエリでも、ネイティブ実装が使用されます。[#111996](https://github.com/ClickHouse/ClickHouse/pull/111996) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* MySQL ソースの TLS 認証情報 (`ssl_ca`、`ssl_cert`、`ssl_key`) は、SQL からファイルパスとして指定できなくなりました。対象は、`CREATE NAMED COLLECTION` で作成した名前付きコレクション、クエリ引数、`CREATE DICTIONARY` クエリです。これは、サーバーがこれらのファイルを自身の権限で開いてしまうためです。サーバー設定ファイルでは引き続きパスを指定できます。それ以外の場所では、証明書または秘密鍵の内容を新しいパラメータ `ssl_ca_pem`、`ssl_cert_pem`、`ssl_key_pem` で渡してください。これらのパラメータは、パスワードと同様にログおよび `SHOW` クエリでマスクされます。[#112070](https://github.com/ClickHouse/ClickHouse/pull/112070) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `disable_insertion_and_mutation` は、外部ストレージへの直接書き込みは許可したまま、`Kafka`、`RabbitMQ`、`NATS` テーブルによるバックグラウンドでのメッセージ消費を停止するようになりました。制限対象の `Kafka2`、`NATS`、`RabbitMQ` テーブルは、直接の `SELECT` に対してコンシューマーを初期化しません。また、最近導入された `message_queue_disable_insertion` 設定の変更にはサーバーの再起動が必要になりました。[#113660](https://github.com/ClickHouse/ClickHouse/pull/113660) ([cwurm](https://github.com/cwurm)).
* `AggregateFunction` カラムに対するウィンドウの `PARTITION BY` または `ORDER BY` は、トップレベルの `ORDER BY` と同様に、`ILLEGAL_COLUMN` エラーで拒否されるようになりました。以前は、少なくとも一方のアナライザーでこのようなクエリが受け付けられており、ウィンドウの `PARTITION BY` によるパーティション分割の結果が `max_threads` によって異なっていました。この制限は、`Array`、`Tuple`、`Map`、`Variant`、`SimpleAggregateFunction` にネストされたステートにも適用されます。通常の型に対する `SimpleAggregateFunction`、`QBit`、およびステートに対する `GROUP BY` と `DISTINCT` は影響を受けません。[#113878](https://github.com/ClickHouse/ClickHouse/pull/113878) ([groeneai](https://github.com/groeneai)).
* `SYSTEM ... CACHE ON CLUSTER` コマンドのアクセスチェックを修正しました。これらのコマンドは個々のコマンドに対応する権限ではなく `SYSTEM DROP CACHE` 権限グループを要求していました。そのため、個別のキャッシュ権限のみを持つユーザーは実行を拒否される一方、グループ権限を持つユーザーは `SYSTEM SYNC FILESYSTEM CACHE` 権限がなくても `SYSTEM SYNC FILESYSTEM CACHE ON CLUSTER` を実行できていました。[#114042](https://github.com/ClickHouse/ClickHouse/pull/114042) ([groeneai](https://github.com/groeneai)).
* `NATS` テーブルエンジンは、新しい `nats_credentials` 設定で認証情報をインラインで指定できるようになりました (ペイロードは `.creds` ファイルと同じです) 。また、SQL から `nats_credential_file` を指定することはできなくなりました。このパスはサーバーのファイルシステム上のファイルを参照し、サーバーが自身の権限でそのファイルを開くため、サーバー設定ファイルで定義された名前付きコレクション内、またはサーバー設定自体の `nats.credential_file` でのみ指定できます。このように設定されたパスは、クエリ側でインラインの `nats_credentials` に置き換えることができます。ただし、管理者が `<nats_credential_file overridable="false">` で固定している場合は置き換えられません。この制限が導入される前に作成されたテーブルは、アップグレード後も引き続き動作します。[#114644](https://github.com/ClickHouse/ClickHouse/pull/114644) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="data-type-and-format-changes">
  データ型とフォーマットの変更
</h3>

* オブジェクトストレージ上に保存されるバックアップ (`S3(...)`/`AzureBlobStorage(...)` を直接指定する宛先、および S3 または Azure をバックエンドとする `Disk(...)` の宛先) では、`BACKUP` と `RESTORE` のいずれにおいても `zip`/`zipx` バックアップアーカイブフォーマットを拒否するようにしました。Zip はセントラルディレクトリの読み取りにシークを必要とするため、オブジェクトストレージ上では非常に低速になります。代わりに `tar.gz` などの tar ベースのフォーマットを使用してください。[#101770](https://github.com/ClickHouse/ClickHouse/pull/101770) ([Onyx2406](https://github.com/Onyx2406)).
* `DateTime64` のサポート範囲を `[1900-01-01, 2299-12-31]` から `[0000-01-01, 9999-12-31]` に拡張しました。従来の範囲外の値は、境界値に丸め込まれることなく (cctz により) 正しく計算されるようになりました。精度が 8 または 9 の場合は、ティックが `Int64` として保存されるため、範囲は引き続き狭くなります (ナノ秒精度での最大値は従来どおり `2262-04-11` です)。後方互換性: これまで範囲外の日時を使用し、旧範囲内での非常に特殊な飽和ルールに依存していた場合は、結果がより正確な値に変わる点に注意してください。[#107907](https://github.com/ClickHouse/ClickHouse/pull/107907) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `JSONEachRow` などのフォーマットで、`DateTime64`/`DateTime` カラムに対する引用符なしの JSON 数値は、`Values` フォーマット、`CAST`、`toDateTime64` と同様に、Unixタイムスタンプ (エポックからの秒数、サブ秒精度も指定可能) として解釈されるようになりました。これまでは、小数部を含む数値 (例: `1703363853.035`) は `CANNOT_PARSE_INPUT_ASSERTION_FAILED` で拒否され、小数部のない整数 (例: `1703363853`) は `DateTime64` のスケーリング済みの生の値として読み込まれるため、`1970-...` のタイムスタンプになっていました。これは `DateTime64` カラムに引用符なしの整数を入力する場合における後方互換性を持たない変更です。引用符付きの文字列や、ClickHouse 自身が出力する (常に引用符付きの) JSON には影響しません。[#108091](https://github.com/ClickHouse/ClickHouse/pull/108091) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 実験的な `ALP` コーデックで、`Float32` のスケーリング演算を `Float64` で実行するようになりました。これにより、小数データで発生していた例外が解消され、圧縮率も大幅に向上します。[#111627](https://github.com/ClickHouse/ClickHouse/pull/111627) ([rienath](https://github.com/rienath)).
* Int64 のマイクロ秒に換算するとオーバーフローする時間間隔設定 (ミリ秒/秒) の値を拒否するようにしました [#112757](https://github.com/ClickHouse/ClickHouse/pull/112757) ([azat](https://github.com/azat)).
* 非同期メトリクスで `Map` データ型を使用できるようになり、CPU コアごとおよびデバイスごとのメトリクスは単一のキー・バリューのメトリクスに統合されました。たとえば `OSUserTimeCPU0`、`OSUserTimeCPU1`、... は、CPU コア番号と値の Map を持つ単一の `OSUserTimeCPU` メトリクスになりました (他の `OS*TimeCPU*` メトリクス、`CPUFrequencyMHz_*`、`Temperature*`、`EDAC*`、`Block*_*`、`Network(Receive|Send)*_*`、`Disk*_*`、`*BlobsQueueEstimate`、`AsyncLogging*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>` として送信します。監視で旧メトリクス名を参照している場合は、`asynchronous_metrics_key_values_mode` を `legacy_names` に設定して旧名を維持するか、移行期間中は `both` に設定してください。このサーバー設定は、再起動せずに `SYSTEM RELOAD CONFIG` で反映できます。[#115333](https://github.com/ClickHouse/ClickHouse/pull/115333) ([alexey-milovidov](https://github.com/alexey-milovidov)). [#116791](https://github.com/ClickHouse/ClickHouse/pull/116791) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* オブジェクトストレージディスクがデフォルトでネイティブのメタデータストレージトランザクションを使用するようになり、メタデータ更新の整合性が向上しました。[#89658](https://github.com/ClickHouse/ClickHouse/pull/89658) ([Michicosun](https://github.com/Michicosun))。

<h3 id="settings-and-configuration-changes">
  設定および構成の変更
</h3>

* 長らく非推奨となっていた関数 `snowflakeToDateTime`、`snowflakeToDateTime64`、`dateTimeToSnowflake`、`dateTime64ToSnowflake` を削除しました。これらは v24.6 の時点で非推奨となっており、代わりに `snowflakeIDToDateTime`、`snowflakeIDToDateTime64`、`dateTimeToSnowflakeID`、`dateTime64ToSnowflakeID` を使用してください。これらの関数を再び有効化するための設定 `allow_deprecated_snowflake_conversion_functions` は廃止され、指定しても効果はありません。[#108711](https://github.com/ClickHouse/ClickHouse/pull/108711) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Date32` のサポート範囲を `[1900-01-01, 2299-12-31]` から `[0000-01-01, 9999-12-31]` に拡張し、`DateTime64` と揃えました。パースおよび変換では、従来の境界値に暗黙的に丸め込むことなく、拡張後の範囲を受け付けるようになりました。後方互換性に関する注記: 数値変換 `toDate32(N)` では、`[120530, 2932896]` の範囲の値が、1970年初頭のUnixタイムスタンプではなく日数 (`2300-01-01` から `9999-12-31` までの日付) として解釈されるようになりました。これは、日数の範囲に収まる数値は日数として扱うというルールに沿ったものです。また、`0000-01-01` の日数を下回る数値や `9999-12-31` より後のタイムスタンプは、新しい境界値に飽和されます。[#111534](https://github.com/ClickHouse/ClickHouse/pull/111534) ([alexey-milovidov](https://github.com/alexey-milovidov)).

<h3 id="other-backward-incompatible-changes">
  その他の後方互換性を持たない変更
</h3>

* `arrayIntersect` と `arraySymmetricDifference` は、1 つの引数内で繰り返し出現する値を、複数の引数に出現したものとして扱わなくなりました。このため、以前の動作に依存しているクエリは異なる結果を返す場合があります。たとえば、`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](https://github.com/ClickHouse/ClickHouse/pull/113021) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `minmax` カラム STATISTICS タイプを非推奨にしました。[#108680](https://github.com/ClickHouse/ClickHouse/pull/108680) ([hanfei1991](https://github.com/hanfei1991))。
* `SYSTEM PREWARM PRIMARY INDEX CACHE ... ON CLUSTER` のアクセスチェックを修正しました。これまでは、`SYSTEM PREWARM PRIMARY INDEX CACHE` 権限ではなく `SYSTEM PREWARM MARK CACHE` 権限が誤って要求されていました。[#109198](https://github.com/ClickHouse/ClickHouse/pull/109198) ([Algunenano](https://github.com/Algunenano))。
* `SYSTEM STOP/START CLEANUP` および `SYSTEM STOP/START VIRTUAL PARTS UPDATE ON CLUSTER` の実行時に、`SYSTEM CLEANUP` / `SYSTEM VIRTUAL PARTS UPDATE` ではなく `SYSTEM PULLING REPLICATION LOG` が要求されていた問題を修正しました。[#110289](https://github.com/ClickHouse/ClickHouse/pull/110289) ([groeneai](https://github.com/groeneai))。
* `/` glob (任意の数のディレクトリ) が、同じディレクトリにも一致するようになりました。これまでは glob パターン内の `/` が特別扱いされていなかったため、`data/**/file.txt` は `data/file.txt` (ディレクトリ階層ゼロ) に一致しませんでした。[#97676](https://github.com/ClickHouse/ClickHouse/pull/97676) ([alexey-milovidov](https://github.com/alexey-milovidov))。

<h2 id="new-features">
  新機能
</h2>

<h3 id="functions-and-data-types">
  関数とデータ型
</h3>

* AST を JSON としてシリアル化およびデシリアル化するための `parseQueryToJSON` 関数と `formatQueryFromJSON` 関数、ならびに `enable_json_ast_dialect` で有効化される実験的な `clickhouse_json` ダイアレクトを追加しました。[#100412](https://github.com/ClickHouse/ClickHouse/pull/100412) ([alexey-milovidov](https://github.com/alexey-milovidov))。[#113480](https://github.com/ClickHouse/ClickHouse/pull/113480) ([fm4v](https://github.com/fm4v))。
* `stem` 関数に指定可能なすべてのステマー言語を表示するシステムテーブル `system.stemmers` を追加しました。[#100611](https://github.com/ClickHouse/ClickHouse/pull/100611) ([Ergus](https://github.com/Ergus))。
* `toTimeZone` のシンタックスシュガーとして、Standard SQL の後置演算子 `AT TIME ZONE` および `AT LOCAL` のサポートを追加しました。式 `expr AT TIME ZONE zone` は `toTimeZone(expr, zone)` と同等になり、`expr AT LOCAL` は `toTimeZone(expr, timeZone())` と同等になります。[#106092](https://github.com/ClickHouse/ClickHouse/pull/106092) ([lvzhipin03](https://github.com/lvzhipin03))。
* `URL` テーブルエンジンおよび `url` テーブル関数は、URL スキームに応じて適切なバックエンドへ処理を振り分けるようになりました。`file://` は `File` エンジン、`s3://`/`gs://`/`gcs://`/`oss://` は `S3`、`az://`/`azure://`/`abfss://`/`abfs://` は `AzureBlobStorage`、`hdfs://` は `HDFS` が処理し、`http(s)://` は従来どおり `URL` エンジンが処理します。`url_base` 設定はスキームによる振り分けの前に適用されます。振り分けの対象となるのは、デフォルトの `url_scheme_mappers` で解決される S3 スキームのみです。その他の S3 互換ベンダーのスキーム (`cos`、`obs` など) は対象外のため、`s3` エンジン／関数を直接使用する必要があります。[#106093](https://github.com/ClickHouse/ClickHouse/pull/106093) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `QBit` カラムと参照ベクトルの近似内積を計算する `dotProductTransposed` 関数 (エイリアス `scalarProductTransposed`) を追加しました。既存の `L2DistanceTransposed` 関数および `cosineDistanceTransposed` 関数を補完するものです。[#108100](https://github.com/ClickHouse/ClickHouse/pull/108100) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `QBit` データ型に任意の stride パラメータ (`QBit(T, dimension, stride)`) を追加しました。次元をグループ単位で個別のストリームに格納するため、ベクトル検索で先頭の次元だけを効率的に読み取れます (例: Matryoshka embeddings) 。また、転置距離関数では、読み取る次元数を減らすための任意の第 4 引数 `used_dims` を指定できます。[#108103](https://github.com/ClickHouse/ClickHouse/pull/108103) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `QBit` データ型で `Int8` 要素型をサポートし、量子化された 8 ビット整数ベクトルの格納と、転置距離によるベクトル検索 (`L2DistanceTransposed`、`cosineDistanceTransposed`) が可能になりました。[#108105](https://github.com/ClickHouse/ClickHouse/pull/108105) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 新しい関数 `randomHadamardTransform(vector[, seed[, output_dims]])` を追加しました。浮動小数点ベクトルに対する決定論的なランダム化アダマール変換で、ノルムを保存する直交回転として量子化前の埋め込みの前処理に役立ちます。また、切り詰めて使用すれば、Johnson–Lindenstrauss／サブサンプリング・ランダム化アダマールによるランダム射影としても利用できます。[#108227](https://github.com/ClickHouse/ClickHouse/pull/108227) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* JSON 値に対して RFC 7396 形式の merge-patch 集約を行う集約関数 `mergedJSONPatch` を実装しました。ステートのマージや AggregatingMergeTree での利用にも対応しています。タイムスタンプなどの順序付けカラムをソートキーとして JSON カラムを集約することで、最新のステートを算出できます。[#108349](https://github.com/ClickHouse/ClickHouse/pull/108349) ([larryluogit](https://github.com/larryluogit))。
* 関数 `xxHash64Spark` を追加しました。この関数は、`String` および `NULL` の入力に対して、シード `42` を用いて Spark 互換の `xxHash64` 値を計算し、`Int64` を返します。[#108436](https://github.com/ClickHouse/ClickHouse/pull/108436) ([lalitium](https://github.com/lalitium))。
* `digits(n, offset[, length])` 関数を追加しました。この関数は、`n` の数値のうち、インデックス `offset(1-indexed)` から始まる `length` 桁分の数値を返します。`length` を省略した場合は、offset から末尾までの数値を返します。[#109012](https://github.com/ClickHouse/ClickHouse/pull/109012) ([1000ms](https://github.com/1000ms))。
* 数値の二乗を計算する算術関数 `sqr` を追加しました。[#109061](https://github.com/ClickHouse/ClickHouse/pull/109061) ([lalitium](https://github.com/lalitium))。
* 量子化された転置距離関数 `cosineDistanceTransposedQuantized`、`L2DistanceTransposedQuantized`、`dotProductTransposedQuantized` を追加しました。これらは `quantizeBFloat16ToInt8` の Lloyd-Max コードからなる `QBit(Int8)` を対象とし、格納されたコードをその場で逆量子化します。浮動小数点の参照ベクトルはフル精度のクエリとして扱われ、`Float32` の精度で比較されます (`Float64` のクエリは精度が縮小されます)。`Array(Int8)` の参照ベクトルはそれ自体も逆量子化され、量子化されたベクトル同士の対称的な距離が計算されます。[#109405](https://github.com/ClickHouse/ClickHouse/pull/109405) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 階層型ディクショナリにおいて、キーの最上位の祖先 (ルート) を返す新しい関数 `dictGetRoot` を追加しました。これは `dictGetHierarchy(dict_name, key)[-1]` と同等の処理を簡潔に記述できる関数です。[#109459](https://github.com/ClickHouse/ClickHouse/pull/109459) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `MergeTree` テーブルの (パーツ、カラム、サブストリーム) ごとに、各コーデックを使用している圧縮ブロックの数を報告するテーブル関数 `mergeTreeCodecBlockCounts(database, table)` を追加しました。[#109623](https://github.com/ClickHouse/ClickHouse/pull/109623) ([rienath](https://github.com/rienath))。
* Array、Map、JSON に対する `has` の否定である関数 `notHas` を追加しました。検索対象が定数の Array の場合、`notHas(constant_array, x)` は `optimize_rewrite_has_to_in` (デフォルトで有効) によって `x NOT IN constant_array` に書き換えられます。そのため Set による検索で実行され、`NOT IN` と同様に主キー索引による枝刈りが可能です。[#109926](https://github.com/ClickHouse/ClickHouse/pull/109926) ([nihalzp](https://github.com/nihalzp))。
* `Array(Point)` として格納される Geo データ型 `MultiPoint` を追加し、`Geometry` 型に含めました。[#109951](https://github.com/ClickHouse/ClickHouse/pull/109951) ([davidmenggx](https://github.com/davidmenggx))。
* 関数 `arrayElement` (`vec[n]` 演算子) と `arraySlice` が `QBit` データ型に対応しました。`qbit[n]` は n 番目のベクトル要素を元の精度で返し、`arraySlice(qbit, offset, length)` は次元の部分集合への射影を返します。いずれも必要なストライドグループのビットプレーンのみを読み取り、ストライドグループの境界に揃ったスライスでは格納済みのストリームをコピーせずに再利用します。[#109953](https://github.com/ClickHouse/ClickHouse/pull/109953) ([Utkal059](https://github.com/Utkal059))。
* テキスト索引および `tokens` 関数向けに `splitByRegexp` トークナイザーを追加しました。正規表現を区切り文字として入力をトークンに分割します。例えば `tokenizer = splitByRegexp('[^\p{L}\p{N}#+]+')` と指定すると、他のトークナイザーでは分割されてしまう `C++` や `C#` のような特殊文字を含むトークンをそのまま保持できます。[#110002](https://github.com/ClickHouse/ClickHouse/pull/110002) ([Ergus](https://github.com/Ergus))。
* 2つのジオメトリが交差するかどうかを返す関数 `geometryIntersectCartesian` および `geometryIntersectSpherical` を追加しました。`polygonsIntersectCartesian`/`polygonsIntersectSpherical` とは異なり、汎用的な `Geometry` 型を含むあらゆるジオメトリデータ型 (`Point`、`LineString`、`MultiLineString`、`Ring`、`Polygon`、`MultiPolygon`) を受け付け、2つの引数の型が異なっていても構いません。[#110062](https://github.com/ClickHouse/ClickHouse/pull/110062) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* ネイティブ ORC リーダーが ORC の `uniontype` をサポートし、ClickHouse の `Variant` 型にマッピングするようになりました (以前は、このようなカラムは `Unsupported ORC type` エラーで拒否されていました) 。[#110078](https://github.com/ClickHouse/ClickHouse/pull/110078) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* ネイティブ ORC 出力フォーマットで ClickHouse の `Variant` 型を ORC の `uniontype` にマッピングして書き出せるようになりました (以前は `ILLEGAL_COLUMN` エラーで失敗していました) 。[#110085](https://github.com/ClickHouse/ClickHouse/pull/110085) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 新しい設定 `framing_output_format` で選択できるフレーミングフォーマットを追加しました。これは、クエリのレスポンスを構成するさまざまな要素 (データのチャンク、totals と extremes、進捗パケット、プロファイルイベント、サーバーログ、例外) を単一の HTTP レスポンスストリームに多重化するものです。実装済みのフレーミングフォーマットは、`None` (デフォルト。従来どおりの動作) 、`EventStream` (HTTP Server-Sent Events) 、`JSONEachPacketBase64`、`JSONEachPacketString` (パケットごとに1つの JSON オブジェクトを出力し、データは base64 エンコードまたは文字列) です。[#110127](https://github.com/ClickHouse/ClickHouse/pull/110127) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 公開データセットを含む Google BigQuery テーブルの読み書きを行うための `bigquery` テーブル関数および `BigQuery` テーブルエンジンを追加しました。テーブル構造は BigQuery テーブルのスキーマから推論されます。認証には、OAuth アクセストークン、JSON フォーマットのサービスアカウントキー、リフレッシュトークン付きの OAuth クライアントを利用できます。[#110166](https://github.com/ClickHouse/ClickHouse/pull/110166) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* LLM プロバイダーを使用して、テキスト内の個人を特定できる情報 (PII) を検出・秘匿化する新しい関数 `aiRedact` を追加しました。秘匿化するカテゴリ (例: `['email', 'name']`) を指定するか、空の配列を渡してデフォルトの PII カテゴリ一式を使用します。一致した値はトークン (デフォルトは `[REDACTED]`) に置き換えられます。[#110464](https://github.com/ClickHouse/ClickHouse/pull/110464) ([davidmenggx](https://github.com/davidmenggx)).
* LLM を用いてテキストが自然言語で記述した条件を満たすかを評価し、`WHERE`、`PREWHERE`、`JOIN ... ON` で使用できる `UInt8` を返す `aiFilter` 関数を追加しました。[#110594](https://github.com/ClickHouse/ClickHouse/pull/110594) ([ylw510](https://github.com/ylw510)).
* `PostgreSQL` テーブルエンジン、`postgresql` テーブル関数、`PostgreSQL` および `MaterializedPostgreSQL` データベースエンジン、`PostgreSQL` ディクショナリで、PostgreSQL への TLS/SSL 接続をサポートしました。`sslmode` に加えて、証明書と秘密鍵を、内容を直接記述する形式 (`sslrootcert_pem`、`sslcert_pem`、`sslkey_pem`。パスワードと同様にマスクされます) またはパス (`sslrootcert`、`sslcert`、`sslkey`。サーバー設定ファイルで定義された名前付きコレクションからのみ指定可能) で指定できます。[#110615](https://github.com/ClickHouse/ClickHouse/pull/110615) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `postgresql` テーブル関数および `PostgreSQL` テーブルエンジンを使用して、PostgreSQL プロトコル経由で別の ClickHouse サーバーに接続できるようになりました (テーブル名を指定する場合に限ります。`query(...)` バリアントは現時点では未サポートです) 。また、PostgreSQL 互換性関数 `format_type` と `current_setting` を追加しました。[#110760](https://github.com/ClickHouse/ClickHouse/pull/110760) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 埋め込みモデルを使用して 2 つのテキスト間の意味的類似度を計算する新しい関数 `aiSimilarity` を追加しました。`[-1, 1]` の範囲の `Nullable(Float32)` を返し、`1` はテキストが同一であることを表します。オペランドが `NULL` または空の場合、あるいは埋め込みの生成に失敗した場合は `NULL` を返します。[#110777](https://github.com/ClickHouse/ClickHouse/pull/110777) ([davidmenggx](https://github.com/davidmenggx))。
* リモートの ClickHouseサーバー上にあるデータベースのテーブルへリアルタイムにアクセスし、`SELECT` および `INSERT` クエリを転送する `Remote` および `RemoteSecure` データベースエンジンを追加しました。これらは、`MySQL` および `PostgreSQL` データベースエンジンの ClickHouse 版に相当し、ClickHouse 同士の接続に使用します。[#110975](https://github.com/ClickHouse/ClickHouse/pull/110975) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* GoogleSQL のパイプ構文と同様に、SQL クエリでパイプ演算子をサポートしました (例: `FROM t |> WHERE x > 1 |> AGGREGATE count() AS c GROUP BY y |> ORDER BY c DESC |> LIMIT 10`)。任意の `SELECT` クエリの後に `|>` 演算子を連ねて記述でき、各演算子は直前のクエリをサブクエリとしてラップするため、生成される AST はサブクエリをネストした等価なクエリと同一になります。また、`FROM` 句で始まるクエリでは `SELECT` 句を省略できるようになり、省略時は `SELECT *` として扱われます。[#111151](https://github.com/ClickHouse/ClickHouse/pull/111151) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 有限かつ非負の数値のジニ係数を計算する集約関数 `gini` を追加しました。グループ化された集計および分散集計にも対応しています。[#112280](https://github.com/ClickHouse/ClickHouse/pull/112280) ([amirreza1307](https://github.com/amirreza1307))。[#114643](https://github.com/ClickHouse/ClickHouse/pull/114643) ([groeneai](https://github.com/groeneai))。
* `PNG` 出力フォーマットでアニメーション PNG をサポートしました。`t` カラムを含めるとクエリ結果がアニメーションになり、`t` の時間スケールは `output_format_image_time_multiplier_seconds` と `output_format_image_time_divisor_seconds` で設定します。また、`output_format_image_streaming_animation` を有効にすると、フレームをメモリにバッファリングせず、クエリが生成した時点で順次書き出します。[#112846](https://github.com/ClickHouse/ClickHouse/pull/112846) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* ミューテーションの完了時刻を記録する `finish_time` カラムを `system.mutations` に追加しました。未完了のミューテーションや完了時刻が不明なミューテーションでは、値はゼロになります。[#113474](https://github.com/ClickHouse/ClickHouse/pull/113474) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* `system.metric_log` 用の新しいスキーマタイプ `bucketed` を追加しました。このタイプでは、128 バケットのバケット化 `Map` シリアライゼーションを用いて、すべてのメトリクスを単一の `Map(Enum16(...), Int64)` カラムに格納し、互換性のためにメトリクスごとの `ALIAS` カラムも提供します。これにより、テーブルは数千ではなく数個のカラムで構成され、ゼロ値は格納されず、単一のメトリクスを読み取る際には 128 バケットのうち 1 つだけを読み取ります。さらに、`Enum` キーを持つ `Map` を、enum 値の文字列名でインデックス参照できるようになりました (例: `map['name']`)。[#115380](https://github.com/ClickHouse/ClickHouse/pull/115380) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `tokens` 関数および `MergeTree` のテキスト索引向けに `chinese` トークナイザーを追加しました。辞書と隠れマルコフモデル (アルゴリズムは [jieba](https://github.com/fxsjy/jieba) に準拠) を用いて中国語テキストを単語に分割します。粒度は `coarse_grained` (デフォルト) と `fine_grained` から選択できます。[#89945](https://github.com/ClickHouse/ClickHouse/pull/89945) ([amosbird](https://github.com/amosbird))。
* 各グループ内の行を指定した出力フォーマットで整形し、その結果を文字列として返す集約関数 `groupFormat` を追加しました。[#93201](https://github.com/ClickHouse/ClickHouse/pull/93201) ([wandersofb](https://github.com/wandersofb))。
* 集約関数コンビネータ `-Tuple` を追加しました。基となる集約関数を `Tuple` カラムの各要素に個別に適用し、要素名を保持したまま結果を `Tuple` として返します。たとえば `t = (a, b)` の場合、`sumTuple(t)` は `(sum(a), sum(b))` を返します。複数の引数を取る集約関数では、引数ごとに 1 つのタプルを受け取り、位置ごとに対応付けて処理します。たとえば `corrTuple((a1, a2), (b1, b2))` は `(corr(a1, b1), corr(a2, b2))` を返します。Array に対する `-ForEach` とは異なり、各要素の型が異なっていてもよく、要素ごとの結果の型と名前も保持されます。[#98190](https://github.com/ClickHouse/ClickHouse/pull/98190) ([RinChanNOWWW](https://github.com/RinChanNOWWW))。

<h3 id="sql-and-query-features">
  SQL およびクエリ機能
</h3>

* プロジェクション定義で WHERE 句をサポートしました。WHERE を持つプロジェクションは述語に一致する行のみをマテリアライズします。クエリの WHERE 条件からプロジェクションの WHERE 条件が導かれる場合、オプティマイザは (コストベースで) そのプロジェクションを使用できます。[#102347](https://github.com/ClickHouse/ClickHouse/pull/102347) ([SBALAVIGNESH123](https://github.com/SBALAVIGNESH123))。
* HTTP インターフェイスで、URL パスを介してテーブルやデータベースにアクセスできるようにしました (例: \`/database/table.format.gz?filter=a>0\`) 。あわせて新しい設定 (\`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\`) を追加しました。これらは相互に組み合わせられるほか、既存の \`query\` URL パラメータとも併用できます。[#105249](https://github.com/ClickHouse/ClickHouse/pull/105249) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `remote` および `remoteSecure` テーブル関数の永続版である `Remote` および `RemoteSecure` テーブルエンジンを追加しました。`CREATE TABLE ... AS remote(...)` に加えて、`CREATE TABLE ... ENGINE = Remote('addresses', db, table, ...)` も使用できるようになりました。[#106189](https://github.com/ClickHouse/ClickHouse/pull/106189) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* クエリパフォーマンスを調査するための `EXPLAIN ANALYZE` を追加しました。クエリを実際に実行し、その実行メトリクスを見慣れたクエリプラン形式で表示します。[#106586](https://github.com/ClickHouse/ClickHouse/pull/106586) ([Fgrtue](https://github.com/Fgrtue))。[#110668](https://github.com/ClickHouse/ClickHouse/pull/110668) ([Fgrtue](https://github.com/Fgrtue))。
* エンジンに依存しない `SYSTEM STOP`、`SYSTEM START`、`SYSTEM PAUSE`、`SYSTEM CANCEL`、`SYSTEM REFRESH` コマンドと、サーバー全体を対象とするその `... ALL BACKGROUND` 形式を追加しました。これにより、`Kafka`、`RabbitMQ`、`NATS`、`S3Queue`/`AzureQueue` テーブルおよびリフレッシャブルmaterialized view のバックグラウンド処理を、単一の統一されたインターフェイスで制御できます。リフレッシャブルmaterialized view に対しては、既存の `SYSTEM ... VIEW` コマンドのエイリアスとして動作します。NATS でこれらの制御をサポートする一環として、JetStream テーブルは挿入が成功した後にのみメッセージを確認応答するようになりました (at-least-once。以前は配信時にメッセージが自動的に確認応答されていたため、挿入に失敗するとメッセージが失われる可能性がありました) 。新しい設定 `nats_wait_for_flush_interval` (デフォルトは `false` で、従来の低レイテンシな動作を維持) を有効にすると、キューが空になった時点ですぐに flush するのではなく、flush インターバルの間ずっと消費サイクルを維持できます。新しい設定 `nats_commit_on_select` を有効にすると、JetStream テーブルに対して直接 `SELECT` を実行した際に、読み取ったメッセージが消費 (確認応答) されます。[#107476](https://github.com/ClickHouse/ClickHouse/pull/107476) ([NIKTONIKTO717](https://github.com/NIKTONIKTO717))。
* `mysql`、`postgresql`、`sqlite` のテーブル関数およびテーブルエンジンで、テーブル名の代わりにユーザー定義のクエリを受け取り、それをそのまま外部データベースに渡せるようになりました。クエリはサブクエリ `(SELECT ...)` または `query('SELECT ...')` のいずれかの形式で記述できます。生成されるテーブルの構造はクエリ結果から推論され、このテーブルは読み取り専用となります。[#107740](https://github.com/ClickHouse/ClickHouse/pull/107740) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `QueryRunner` テーブルエンジンを導入しました。`QueryRunner` テーブルに挿入されたレコードは、エンジンが実行するクエリを表します。このエンジンは、非同期クエリ実行、生成したクエリのバッチ実行、リモートクラスターへのクエリの振り分け、ベンチマーク、ファジング、シャドートラフィックを用いたテストなどに利用できます。[#107888](https://github.com/ClickHouse/ClickHouse/pull/107888) ([mstetsyuk](https://github.com/mstetsyuk))。
* ウィンドウ関数で `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](https://github.com/ClickHouse/ClickHouse/pull/108653) ([nihalzp](https://github.com/nihalzp))。
* 通常の `CREATE MATERIALIZED VIEW ... POPULATE` がローカルでアトミックに動作するようになりました。ソーステーブルに短時間の排他ロックをかけた状態で、ビューによるソーステーブルへの新規挿入の購読と既存データのスナップショット取得をまとめて行うため、データ投入中に同じサーバー経由で並行して挿入された行が欠落したり重複したりすることがなくなりました (新しい設定 `materialized_views_populate_atomically`、デフォルトで有効)。この保証の対象はローカルの挿入経路のみで、別のレプリカに到着した挿入や分散書き込み経路を経由する挿入は対象外です。また、固定されたスナップショットを提供できるソース (`MergeTree` ファミリーおよび `Memory`) が必要です。それ以外のソースや、`CREATE OR REPLACE` / `REPLACE`、`Replicated` データベースで作成されたビューでは、引き続き従来の非アトミックなデータ投入が行われます。さらに、`POPULATE` を `TO` と組み合わせて使用し、ターゲットテーブルをバックフィルできるようになりました。[#108715](https://github.com/ClickHouse/ClickHouse/pull/108715) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `ALTER USER`、`ALTER ROLE`、`ALTER SETTINGS PROFILE` で、`MODIFY SETTING name = value` のエイリアスとして `SET name = value` を使用できるようになりました。設定リスト全体を置き換える素の `SETTINGS` 句とは異なり、他の設定はそのままに、個々の設定のみを変更します。これにより、ユーザーの他の設定を誤って消してしまうリスクが低減されます。[#108722](https://github.com/ClickHouse/ClickHouse/pull/108722) ([groeneai](https://github.com/groeneai))。
* 既存の制約の式をその場で変更できる `ALTER TABLE ... MODIFY CONSTRAINT [IF EXISTS] name CHECK expr` をサポートしました。[#108768](https://github.com/ClickHouse/ClickHouse/pull/108768) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `ON` 句に結合対象テーブル間の不等号比較 (`<`、`<=`、`>`、`>=`) を 2 つ含む結合向けに、ソートベースの IEJoin アルゴリズムを追加しました。`join_algorithm` 設定に `ie_join` を追加すると有効になります。サポートされる種類は `ALL INNER/LEFT/RIGHT/FULL JOIN` および `SEMI`/`ANTILEFT/RIGHT JOIN` です。従来、このようなクエリはフィルター付きの `CROSS JOIN` として実行されており (`INNER` のみ対応)、大規模なテーブルでは大幅に低速でした。[#109920](https://github.com/ClickHouse/ClickHouse/pull/109920) ([vdimir](https://github.com/vdimir))。
* 新しいシステムテーブル `system.user_query_log` を追加しました。各ユーザーは、クエリログテーブルへのアクセス権がなくても、自分自身のクエリログレコードを参照できます。元の実装とアイデアは Yue Ni (@niyue) によるものです。[#110156](https://github.com/ClickHouse/ClickHouse/pull/110156) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 新しい設定 `run_query_in_background` を追加しました。サーバーはクエリを受け付けると即座に空の結果を返し、接続がどうなってもクエリを最後まで実行します。結果は破棄されます。クエリは `query_id` を使って `system.processes` および `system.query_log` で追跡できます。`INSERT ... SELECT`、`CREATE TABLE … AS SELECT`、`CREATE MATERIALIZED VIEW … POPULATE` など、接続が切断されても中断させたくない長時間実行クエリでの使用を想定しています。[#112816](https://github.com/ClickHouse/ClickHouse/pull/112816) ([mstetsyuk](https://github.com/mstetsyuk))。
* ALTER TABLE ... MODIFY PROJECTION をサポートし、既存のプロジェクションを再構築せずに、プロジェクションレベルの設定 (例: index\_granularity) を変更できるようになりました。新しい設定はマージ時に遅延適用されます。[#113343](https://github.com/ClickHouse/ClickHouse/pull/113343) ([diegomestre2](https://github.com/diegomestre2)).
* データレイク向けの S3 テーブルエンジンのカタログで、既存テーブルへのクエリに加えて `INSERT` もサポートされるようになりました。[#113505](https://github.com/ClickHouse/ClickHouse/pull/113505) ([scanhex12](https://github.com/scanhex12)).
* `Iceberg` カタログが `catalog_type = 'horizon'` により Snowflake Horizon Catalog をサポートするようになり、Snowflake が管理する `Iceberg` テーブルの読み取りと書き込みが可能になりました。[#114547](https://github.com/ClickHouse/ClickHouse/pull/114547) ([melvynator](https://github.com/melvynator)).
* `skip_unavailable_shards_mode` 設定 (`Distributed` エンジンの設定としても利用可能) を追加しました。`skip_unavailable_shards` が有効な場合に、リモート分片から返されるどの例外をエラーとせずに無視するかを制御できます。これにより、分散環境におけるクエリの挙動をより細かく制御できるようになります。[#79091](https://github.com/ClickHouse/ClickHouse/pull/79091) ([byte-sourcerer](https://github.com/byte-sourcerer)).

<h3 id="storage-data-lakes-and-object-storage">
  ストレージ、データレイク、オブジェクトストレージ
</h3>

* Puffin ファイルフォーマット ([https://iceberg.apache.org/puffin-spec/](https://iceberg.apache.org/puffin-spec/)) のサポートを追加しました。これにより、`file`、`url`、`s3` などのテーブル関数でこのフォーマットを使用できるようになりました。 [#103936](https://github.com/ClickHouse/ClickHouse/pull/103936) ([scanhex12](https://github.com/scanhex12))。
* `MergeTree` テーブル向けに「packed」データパーツストレージを追加しました。ストリームごとに個別のファイルを作成するのではなく、パーツのすべてのファイルを単一のアーカイブ (`data.packed`) にまとめて格納します。この機能は `min_bytes_for_full_part_storage`、`min_rows_for_full_part_storage`、`min_level_for_full_part_storage` の各設定で制御され、デフォルトでは無効です。互換性に関する注意: テーブルで一度 packed パーツが書き込まれると、それより古いバージョンのサーバーでは読み取れなくなるため、このフォーマットを有効にするとサーバーをダウングレードできなくなります。 [#108118](https://github.com/ClickHouse/ClickHouse/pull/108118) ([Algunenano](https://github.com/Algunenano))。
* NATS テーブルエンジンに `nats_credentials` 設定を追加しました。これにより、NATS の認証情報を文字列 (`.creds` ファイルのペイロードと同じ内容) として設定内に直接指定できるようになりました。 [#110733](https://github.com/ClickHouse/ClickHouse/pull/110733) ([addshore](https://github.com/addshore))。

<h3 id="data-formats-and-ingestion">
  データフォーマットとインジェスト
</h3>

* Apache Hive の `LazySimpleSerDe` テキスト形式でデータを書き出す `HiveText` 出力フォーマットを追加しました。フィールドは `\x01` で区切られ、行は新しい `format_hive_text_rows_delimiter` 設定 (デフォルトは `\n`) で区切られます。ネストされた `Array`、`Map`、`Tuple` の値には、Hive の区切り文字リストが使用されます。この出力は Hive のデフォルトの `LazySimpleSerDe` を対象としているため、ネストされた値やカスタムの行区切り文字については、ClickHouse の `HiveText` 入力との対称性はありません。[#107582](https://github.com/ClickHouse/ClickHouse/pull/107582) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 1 行を 1 つの Feature として GeoJSON の `FeatureCollection` ドキュメントを書き出す `GeoJSON` 出力フォーマットを追加しました。新しい `format_geojson_validate_geometry` 設定 (デフォルトで有効) により、読み取り時と書き込み時に GeoJSON の形状が検証されます。また、`GeoJSON` 入力フォーマットは `id` を `Nullable(String)` として推論するようになりました。これにより、ID が存在しない場合や `null` の場合を空文字列と区別できます。[#108065](https://github.com/ClickHouse/ClickHouse/pull/108065) ([nihalzp](https://github.com/nihalzp))。

<h3 id="settings-access-and-observability">
  設定、アクセス、オブザーバビリティ
</h3>

* HTTP インターフェイスの `/docs` パスで利用できる組み込みのドキュメント検索ページを追加しました。`system.documentation` テーブルを対象としたインスタント検索が可能で、リファレンスドキュメントをシンタックスハイライト、数式、相互リンク付きでレンダリングします。[#108345](https://github.com/ClickHouse/ClickHouse/pull/108345) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* テキスト索引および tokens/hasAnyTokens/hasAllTokens 関数で使用できる、MeCab 形態素解析器ベースの日本語トークナイザーを追加しました。辞書はサーバー設定で指定された場所から実行時に読み込まれ、使用前に SHA-256 チェックサムで検証されます。[#111420](https://github.com/ClickHouse/ClickHouse/pull/111420) ([Ergus](https://github.com/Ergus))。
* 新しいファイルシステムキャッシュ設定 `system_cache_extensions` を追加しました。`use_split_cache` が有効な場合に、どのファイルをシステムキャッシュに格納するかを制御します。[#111575](https://github.com/ClickHouse/ClickHouse/pull/111575) ([kirillgarbar](https://github.com/kirillgarbar))。
* `always_fetch_mutated_part` 設定を追加しました。この設定により、レプリカはミューテーションをローカルで実行せずに、ミューテーション適用済みのパーツを他のレプリカからダウンロードできるようになります。[#113020](https://github.com/ClickHouse/ClickHouse/pull/113020) ([rorylshanks](https://github.com/rorylshanks))。

<h3 id="other-new-features">
  その他の新機能
</h3>

* 負の `LIMIT` に対する `WITH TIES` のサポートを追加しました。[#100930](https://github.com/ClickHouse/ClickHouse/pull/100930) ([nihalzp](https://github.com/nihalzp)).
* 復元対象をきめ細かく制御するための復元設定 `restore_table_data`、`restore_access_entities`、`restore_functions` を追加しました。これらを使用すると、カテゴリごとに `structure_only` を上書きできます。たとえば `structure_only=true, restore_access_entities=true` と指定すると、テーブルデータは復元せず、テーブル定義とアクセスエンティティのみを復元します。[#102402](https://github.com/ClickHouse/ClickHouse/pull/102402) ([fm4v](https://github.com/fm4v)).
* Dictionary 定義内で `dictionary_lazy_load` を指定することで、Dictionary ごとに遅延ロードを個別に設定できるようになりました。この設定はグローバルなサーバー設定 `dictionaries_lazy_load` よりも優先されます。これにより、一部の Dictionary は遅延ロードし、その他の Dictionary は即時ロードするといった使い分けが可能になります。[#108314](https://github.com/ClickHouse/ClickHouse/pull/108314) ([mstetsyuk](https://github.com/mstetsyuk)).
* 配列の添字演算子で、整数の配列をインデックスとして指定できるようになりました。`arr[indexes]` は指定されたすべての位置の要素を返します。これは `arrayMap(i -> arr[i], indexes)` と同等です。[#108371](https://github.com/ClickHouse/ClickHouse/pull/108371) ([ucasfl](https://github.com/ucasfl)).
* WGS84 地理座標と UTM 座標系および MGRS 座標系との相互変換を行う関数 `geoToUTM`、`UTMToGeo`、`geoToMGRS`、`MGRSToGeo` を追加しました。[#108939](https://github.com/ClickHouse/ClickHouse/pull/108939) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Dictionary 定義を削除せずに Dictionary のメモリを解放する `SYSTEM UNLOAD DICTIONARY` および `SYSTEM UNLOAD DICTIONARIES` コマンドを追加しました。解放された Dictionary は、次回アクセス時に遅延ロードで再ロードされます。[#109639](https://github.com/ClickHouse/ClickHouse/pull/109639) ([Manerone](https://github.com/Manerone)).
* テキスト索引および `tokens`、`hasAnyTokens`、`hasAllTokens` 関数向けに、新しい `icu` トークナイザーを追加しました。ロケールに応じた Unicode の単語分割 (中国語、日本語、タイ語などの言語に対する辞書ベースの分割を含む) を行えます。[#109940](https://github.com/ClickHouse/ClickHouse/pull/109940) ([Ergus](https://github.com/Ergus)).
* 新しいコーデック `ZXC` を追加しました。圧縮は低速ながら伸長は非常に高速な非対称 LZ コーデックで、圧縮率は `LZ4` と `ZSTD` の中間です。[#110620](https://github.com/ClickHouse/ClickHouse/pull/110620) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `s3_base` 設定を追加しました。これにより、`s3`、`s3Cluster`、`gcs`、`oss` テーブル関数および `S3` テーブルエンジンで、相対 URL を S3 のベース URL を基準に解決できるようになります。また、`URL` データベースエンジンを追加しました。このエンジンは、テーブル名を任意のベースを基準とした URL として解決し、適切なバックエンドに振り分けます。[#111512](https://github.com/ClickHouse/ClickHouse/pull/111512) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* HTTP のインデックスページ (HTML またはプレーンテキスト形式のディレクトリ一覧) を取得し、一致する URL を抽出することで、`url()` および `URL` エンジンでワイルドカード展開を利用できるようにしました。ワイルドカードは URL のパス部分に対して照合されます。また、インデックスページのサイズと読み取るディレクトリ数には上限が設けられています。[#95181](https://github.com/ClickHouse/ClickHouse/pull/95181) ([niyue](https://github.com/niyue)).
* `kafka_sasl_mechanism` でサポートされる値として `AWS_MSK_IAM` を追加しました。これにより、ClickHouse は SASL/SCRAM の認証情報を管理することなく、IAM ロールを使用して Amazon MSK の認証を行えるようになります。[#96100](https://github.com/ClickHouse/ClickHouse/pull/96100) ([kalavt](https://github.com/kalavt)).
* トークン化後のトークンを変換するポストプロセッサをテキスト索引に追加しました。[#98939](https://github.com/ClickHouse/ClickHouse/pull/98939) ([Ergus](https://github.com/Ergus)).

<h2 id="experimental-features">
  実験的機能
</h2>

<h3 id="experimental-query-planning-and-execution">
  クエリプランニングと実行
</h3>

* 実行可能なユーザー定義関数向けに「ドライバー」を追加しました。`<user_defined_executable_function_drivers_config>` で宣言されたドライバーは、`CREATE FUNCTION name ARGUMENTS (...) RETURNS T ENGINE = DriverName(...) AS '...code...'` で使用でき、関数作成時にユーザーのコードスニペットをコンパイルするなどの処理を行い、実行可能な実行可能 UDF を生成します。生成された設定は `<dynamic_user_defined_executable_functions_path>` に保存され、元のクエリは `ATTACH FUNCTION` として永続化されるため、サーバーを再起動しても関数は保持されます。概念実証として提供される `c_function_body` ドライバーは、`executable_pool` モードで、サンドボックス化された Docker コンテナ内で C の関数本体をコンパイルして実行します。[#105131](https://github.com/ClickHouse/ClickHouse/pull/105131) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `/api/v1/query` および `/api/v1/query_range` への Prometheus Query API リクエストが、`read_rows` および `read_bytes` メトリクスとともに `system.query_log` に記録されるようになりました。[#106611](https://github.com/ClickHouse/ClickHouse/pull/106611) ([JTCunning](https://github.com/JTCunning))。
* `make_distributed_plan` が有効な場合、MergeTree ファミリーのテーブルに対する `SELECT ... FINAL` で、分散クエリプランによる読み取りをサポートしました。[#108148](https://github.com/ClickHouse/ClickHouse/pull/108148) ([davenger](https://github.com/davenger))。
* MergeTree に対するクエリ向けに、実験的なプランベースの並列レプリカ実行を追加しました。[#108504](https://github.com/ClickHouse/ClickHouse/pull/108504) ([devcrafter](https://github.com/devcrafter))。
* 実験的なテーブル関数 `eval` を追加しました。定数式を評価してクエリ文字列を生成し、得られた単一の `SELECT` クエリを実行します。この機能はデフォルトで無効になっており、設定 `allow_experimental_eval_table_function` で有効化できます。作成者: Yue Ni [#110132](https://github.com/ClickHouse/ClickHouse/pull/110132) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* プランベースの並列レプリカ (`parallel_replicas_plan_based`): ローカル/リモートの境界を、通常のクエリプランに対するプランレベルの最適化で決定するようになりました。また、`UNION` を含むビューに対するクエリは、`parallel_replicas_allow_view_over_mergetree` を指定しなくても並列化されるようになりました。`IN (subquery)` を使用するクエリは、エラーにならずローカルプランにフォールバックするようになりました。[#111063](https://github.com/ClickHouse/ClickHouse/pull/111063) ([devcrafter](https://github.com/devcrafter))。[#112443](https://github.com/ClickHouse/ClickHouse/pull/112443) ([devcrafter](https://github.com/devcrafter))。
* 実験的な AI 関数のセキュリティを強化しました。リモートホストへの安全でない (`http`) エンドポイントをデフォルトで拒否するようにし (新しい設定 `ai_function_allow_insecure_endpoint`)、クエリごとの外部 API 呼び出し回数にデフォルトで上限を設け (`ai_function_max_api_calls_per_query` のデフォルト値が `1000` になりました)、ログに書き込まれるプロバイダーのエラーレスポンスをサニタイズするようにしました。[#111286](https://github.com/ClickHouse/ClickHouse/pull/111286) ([george-larionov](https://github.com/george-larionov))。
* プランベースの並列レプリカ (`parallel_replicas_plan_based`) で、対象となる JOIN (`INNER`、`LEFT`、`RIGHT`。`SEMI`/`ANTI` を含む) を分散実行できるようになりました。結合全体が分散プランのフラグメント内で実行され、一方の側はレプリカ間で協調して処理され、もう一方の側はブロードキャストされます。[#112268](https://github.com/ClickHouse/ClickHouse/pull/112268) ([davenger](https://github.com/davenger))。
* 分散クエリ (`make_distributed_plan = 1`) がキャンセルされた際、単に `QUERY_WAS_CANCELLED` を返すのではなく、キャンセルの原因となったエラーを報告するようになりました。これまでは、失敗した worker タスクの実際のエラーはサーバーログでしか確認できませんでした。[#112590](https://github.com/ClickHouse/ClickHouse/pull/112590) ([davenger](https://github.com/davenger))。
* `IN (subquery)` を含むクエリプランを、`JOIN` に書き換えずに分散実行できるようにしました。Set はイニシエーター上で一度だけ構築され、その値は worker タスクとともに送信されます。`rewrite_in_to_join` を強制的に上書きする処理は削除されましたが、この書き換えは明示的な設定として引き続き利用できます。[#113826](https://github.com/ClickHouse/ClickHouse/pull/113826) ([davenger](https://github.com/davenger))。
* 分散プランのクエリ (`make_distributed_plan`) は、`LIMIT` が満たされた時点で上流のステージを停止するようになりました。これまでのように結果全体を計算したうえで破棄することはなくなります。[#114806](https://github.com/ClickHouse/ClickHouse/pull/114806) ([davenger](https://github.com/davenger)).
* PromQL クエリでレンジセレクター内に `offset` を使用した場合 (例: `rate(m[2m] offset 5m)`) に、エラー `Illegal type Decimal(18, 0) of argument of function toIntervalNanosecond` が発生する問題を修正しました。[#114997](https://github.com/ClickHouse/ClickHouse/pull/114997) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* Cascades オプティマイザが構築する分散プラン (`make_distributed_plan = 1, enable_cascades_optimizer = 1`) で、`GROUPING SETS` による集約をサポートしました。[#115426](https://github.com/ClickHouse/ClickHouse/pull/115426) ([davenger](https://github.com/davenger)).
* `TimeSeries` テーブルで「recent samples」テーブルを保持できるようになりました。新しいエンジン設定 `recent_samples_ttl_seconds` に 0 以外の値を指定すると、エンジンは samples テーブルの有効期限 (TTL) 付きコピー (`recent_samples_partition_by` でパーティション分割され、デフォルトは日単位) を作成し、挿入のたびにそこへ書き込みます。時間範囲が TTL ウィンドウ内に収まる PromQL クエリは自動的にこのテーブルから読み取るため、大規模なテーブルではアラートルールやレコーディングルール、短期間を対象とするダッシュボードが数倍高速になります。この優先動作は、新しいクエリレベルの設定 `time_series_prefer_recent_samples_table` で無効にできます。[#115441](https://github.com/ClickHouse/ClickHouse/pull/115441) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).
* 分散クエリプラン (`make_distributed_plan`) は、`LIMIT` が満たされた後、アイドル状態の上流ステージを速やかに停止するようになりました。アイドル状態の exchange シンクは `NoMoreDataNeeded` が届くとすぐにそれを読み取り、アイドル状態の exchange ソースは自身の出力が閉じられたことを検知して停止を上流へ伝播します。従来は、こうしたステージが誰も消費しないデータの読み取りと計算を続けていました。[#115690](https://github.com/ClickHouse/ClickHouse/pull/115690) ([davenger](https://github.com/davenger)).
* `parallel_replicas_plan_based` が有効な場合、自動並列レプリカ機能が実行時統計を収集し、対応するクエリで並列レプリカを有効化できるようになりました。[#115788](https://github.com/ClickHouse/ClickHouse/pull/115788) ([devcrafter](https://github.com/devcrafter)).
* 分散クエリプラン向けに、実験的な Cascades コストベースオプティマイザを追加しました。`make_distributed_plan = 1` とあわせて `enable_cascades_optimizer = 1` を指定すると有効になります。このオプティマイザは推定コストに基づき、結合戦略 (shuffle、broadcast、replicated、local) 、集約方式 (2 フェーズ、shuffle、local) 、2 段階の分散 top-N、読み取り方式 (並列読み取り、レプリケート読み取り) を選択し、必要に応じて exchange 演算子を挿入します。[#86353](https://github.com/ClickHouse/ClickHouse/pull/86353) ([davenger](https://github.com/davenger)).

<h3 id="experimental-storage-data-lakes-and-indexes">
  ストレージ、データレイク、索引
</h3>

* デシリアライズ済みの Paimon メタデータファイル (マニフェストリストおよびマニフェスト) 用に、インメモリの SLRU キャッシュを追加しました。`use_paimon_metadata_files_cache` 設定で有効にすると、同じ Paimon テーブルに対してクエリを繰り返し実行する際に、オブジェクトストレージからメタデータを再ダウンロード・再パースする処理が省略されます。[#104657](https://github.com/ClickHouse/ClickHouse/pull/104657) ([Binnn-MX](https://github.com/Binnn-MX)).
* 実験的機能の `ReaderExecutor` (`use_reader_executor`、デフォルトでは無効) で、リモートのソース接続を開いたまま保持し、連続する読み取りで再利用できるようになりました。これにより、スキャン時のオブジェクトストレージへのリクエスト数が削減されます。[#107735](https://github.com/ClickHouse/ClickHouse/pull/107735) ([CheSema](https://github.com/CheSema)).
* 実験的機能の `ReaderExecutor` の読み取りパス (`use_reader_executor`、デフォルトでは無効) に、リードスルー方式のファイルシステムキャッシュを追加しました。[#110029](https://github.com/ClickHouse/ClickHouse/pull/110029) ([CheSema](https://github.com/CheSema)).
* 実験的な `MergeTree` 設定 `allow_experimental_adaptive_codec_selection` を追加しました。有効にすると、デフォルトのコーデックを使用するカラムに対し、マージとミューテーションの際にブロックごとに出力サイズが最小となるコーデックが選択されます。[#111834](https://github.com/ClickHouse/ClickHouse/pull/111834) ([rienath](https://github.com/rienath)).
* 実験的機能の `ReaderExecutor` の読み取りパス (`use_reader_executor`、デフォルトでは無効) に、ユーザー空間ページキャッシュの階層を追加しました。キャッシュミス時には executor がユーザー空間ページキャッシュにデータを格納し、以降の読み取りはそこからゼロコピーで処理されます。[#114890](https://github.com/ClickHouse/ClickHouse/pull/114890) ([CheSema](https://github.com/CheSema)).
* `OPTIMIZE TABLE ... MANIFEST` により `Iceberg` のマニフェストファイルのコンパクションを実行できるようになり、メタデータファイルの数を削減できます。この機能は `allow_experimental_iceberg_compaction` 設定で有効化できます。[#98178](https://github.com/ClickHouse/ClickHouse/pull/98178) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).

<h3 id="experimental-functions-formats-and-ai">
  関数、フォーマット、AI
</h3>

* 実験的機能: 述語によってカラムがデフォルト値と非デフォルト値に厳密に分割される場合、`SELECT count(*) FROM t WHERE col <op> default(col)` を `serialization.json` 内のカラムごとのスパース性統計情報から処理し、データスキャンを一切行わないようにしました。[#105890](https://github.com/ClickHouse/ClickHouse/pull/105890) ([Algunenano](https://github.com/Algunenano))。
* 実験的な `Quantize(...)` ベクトルコーデックファミリーを追加しました。また、量子化されたコンパニオンストリームを用いる、オプトイン方式の2段階近似ベクトル検索へのクエリ書き換えも追加しました。[#108565](https://github.com/ClickHouse/ClickHouse/pull/108565) ([shankar-iyer](https://github.com/shankar-iyer))。
* `Float32`/`Float64` カラム (およびそれらの配列) 向けの、誤差制限付き非可逆圧縮コーデックである実験的な `SZ3` を復活させました。使用するには `allow_experimental_codecs` が必要です。[#108788](https://github.com/ClickHouse/ClickHouse/pull/108788) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 実験的な `SZ3('ALGO_LORENZO_REG', ...)` コーデックで圧縮されたデータの読み取りが `CORRUPTED_DATA` で失敗していた問題を修正しました。また、実験的な `SZ3` コーデックで非有限の浮動小数点値 (`NaN` および無限大) を圧縮する際に未定義動作が発生しないようにしました。[#110762](https://github.com/ClickHouse/ClickHouse/pull/110762) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* PromQL: 日付/時刻関数 (`hour()`、`minute()`、`month()`、`year()`、`day_of_week()`、`day_of_month()`、`day_of_year()`、`days_in_month()`) を引数なしで呼び出せるようになりました。この場合、Prometheus と同様に `vector(time())` がデフォルトとして使用されます。[#111869](https://github.com/ClickHouse/ClickHouse/pull/111869) ([valerypetrov](https://github.com/valerypetrov))。
* PromQL: `vector(1) + vector(2)`、`topk(1, vector(1))`、`label_replace(vector(1), ...)`、`on()` を伴う二項演算子など、タグを持たないインスタントベクトルに対する操作が型エラーで失敗していた問題を修正しました。[#111872](https://github.com/ClickHouse/ClickHouse/pull/111872) ([valerypetrov](https://github.com/valerypetrov))。
* PromQL: 関数 `deriv` を実装しました。あわせて、その内部で使用される集約関数が、ミリ秒精度のタイムスタンプに対して本来の1000分の1の値を返していたバグを修正しました。[#112360](https://github.com/ClickHouse/ClickHouse/pull/112360) ([valerypetrov](https://github.com/valerypetrov))。
* `parallel_replicas_plan_based` が有効な場合に、`ORDER BY` クエリへ read-in-order 最適化を適用するようにしました。ソート処理がレプリカに送られ、イニシエーター上でマージされるため、各レプリカは sorting key の順序でデータを読み取ります。また、この設定を有効にした状態で主キー以外のカラムに `ORDER BY` を実行すると `Unknown function __topKFilter` が発生する問題も修正しました。[#114315](https://github.com/ClickHouse/ClickHouse/pull/114315) ([devcrafter](https://github.com/devcrafter))。
* データパーツの再読み込み後 (`ATTACH` の実行後やサーバー再起動後など) のベクトル検索における読み取りを修正しました。パーツから `Quantized` コーデックのサブカラムが失われなくなったため、検索時にフル精度のカラムへフォールバックせず、量子化されたサブカラムを読み取るようになりました。[#114763](https://github.com/ClickHouse/ClickHouse/pull/114763) ([shankar-iyer](https://github.com/shankar-iyer))。
* 実験的な `TimeSeries` テーブルエンジンで、samples 内部テーブルに自動作成される `value` カラムに `Gorilla` コーデックを適用しないようにしました。今後はデフォルトで `CODEC(ZSTD(1))` が使用されます。明示的に宣言されたカラムでは、ユーザーが指定したコーデックがそのまま維持されます。`timestamp` カラムのデフォルト (`CODEC(DoubleDelta, ZSTD(1))`) に変更はありません。[#112110](https://github.com/ClickHouse/ClickHouse/pull/112110) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。[#114790](https://github.com/ClickHouse/ClickHouse/pull/114790) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* `make_distributed_plan = 1` で実行されるクエリにおいて、`ROLLUP`、`CUBE`、`GROUPING SETS` および `grouping` 関数をサポートしました。[#114950](https://github.com/ClickHouse/ClickHouse/pull/114950) ([davenger](https://github.com/davenger))。
* 実験的機能である ALP コーデックに、Real Doubles (RD) バリアントと任意の `ALP(AUTO|STD|RD)` 引数を追加しました。引数を指定しない ALP は、常に STD を使用するのではなく、既存の STD 認証スキームと RD のいずれかを自動的に選択するようになりました。[#99654](https://github.com/ClickHouse/ClickHouse/pull/99654) ([nazarii-piontko](https://github.com/nazarii-piontko))。

<h3 id="other-experimental-features">
  その他の実験的機能
</h3>

* kafka\_partition\_shard\_num および kafka\_shard\_count 設定により、StorageKafka2 にパーティションと分片の静的なアフィニティを追加しました。これにより、複数の ClickHouse 分片が、Kafka パーティションのうち互いに重複しないサブセットを決定論的に消費できるようになります。[#108886](https://github.com/ClickHouse/ClickHouse/pull/108886) ([JingYanchao](https://github.com/JingYanchao))。
* `onelake_client_id` と `onelake_client_secret` の代わりに、`onelake_bearer_token` 設定で事前に取得した Bearer トークンを指定して OneLake に認証できるようになりました。これにより、長期間有効なクライアントシークレットを共有せずに済みます。トークンは更新されないため、有効期限が切れた場合はデータベースを再作成する必要があります。[#109104](https://github.com/ClickHouse/ClickHouse/pull/109104) ([asya-ch](https://github.com/asya-ch))。
* (`packed_skip_index_max_bytes` により) `skp_idx.packed` にパックされたスキップ索引の `data_uncompressed_bytes` を修正しました。非圧縮サイズとして圧縮サイズが報告されており、その影響で `distributed_index_analysis` が有効にならない場合もありました。[#109272](https://github.com/ClickHouse/ClickHouse/pull/109272) ([Algunenano](https://github.com/Algunenano))。
* 実験的な Prometheus remote-write v1 HTTP ハンドラーで Zstandard 圧縮をサポートしました。[#110907](https://github.com/ClickHouse/ClickHouse/pull/110907) ([JTCunning](https://github.com/JTCunning))。
* PromQL: 関数 `clamp`、`clamp_min`、`clamp_max`、`round` を実装しました。[#111870](https://github.com/ClickHouse/ClickHouse/pull/111870) ([valerypetrov](https://github.com/valerypetrov))。
* PromQL: 分位レベルが \[0, 1] の範囲外の場合、`quantile` はエラーをスローせず、Prometheus と同様に -Inf/+Inf/NaN を返すようになりました。また、`histogram_quantile` も Prometheus と同様に、`le` ラベルが存在しないか解析できない入力系列を無視するようになりました。[#111871](https://github.com/ClickHouse/ClickHouse/pull/111871) ([valerypetrov](https://github.com/valerypetrov))。
* PromQL: 関数 `changes()` と `resets()` を実装しました。[#112352](https://github.com/ClickHouse/ClickHouse/pull/112352) ([valerypetrov](https://github.com/valerypetrov))。
* Prometheus remote-write エンドポイント経由の挿入について、統計とクエリが正しく収集されるようにしました。[#112825](https://github.com/ClickHouse/ClickHouse/pull/112825) ([JTCunning](https://github.com/JTCunning))。
* PromQL: 除数が無限大の剰余演算で、有限値がそのまま保持されるようにしました。[#113746](https://github.com/ClickHouse/ClickHouse/pull/113746) ([fallintoplace](https://github.com/fallintoplace))。
* 通常の引用符付き PromQL 文字列内にリテラルの改行が含まれている場合は拒否するようにしました。[#114381](https://github.com/ClickHouse/ClickHouse/pull/114381) ([fallintoplace](https://github.com/fallintoplace))。
* 実験的な `make_distributed_plan` と `enable_cascades_optimizer` が有効な場合に、非常に大きな `distributed_plan_workers_num` を指定するとサーバーが `std::length_error` で異常終了する問題を修正しました。このようなノード数は `INVALID_SETTING_VALUE` として拒否されるようになりました。[#115398](https://github.com/ClickHouse/ClickHouse/pull/115398) ([groeneai](https://github.com/groeneai))。
* `TimeSeries` テーブル向けに、Prometheus HTTP API の `/api/v1/series` エンドポイントを実装しました。`match[]` 系列セレクタ (複数指定した値は和集合として扱われます) 、任意の `start`/`end` 時間範囲、任意の `limit` パラメータをサポートします。[#115676](https://github.com/ClickHouse/ClickHouse/pull/115676) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。

<h2 id="performance-improvements">
  パフォーマンス改善
</h2>

<h3 id="join-and-aggregation-performance">
  JOIN と集約のパフォーマンス
</h3>

* TopK の動的フィルタリング (`ORDER BY ... LIMIT n`) を経由するクエリでも、クエリ条件キャッシュを有効にしました。QCC のエントリは TopK プランのパラメータごとに分けて管理されるため、同一のクエリではキャッシュ済みの WHERE フィルタ結果が再利用され、`LIMIT`、ソート列、ソート方向のいずれかが異なる場合は新しいエントリが作成されます。[#104478](https://github.com/ClickHouse/ClickHouse/pull/104478) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* GROUP BY キーが ORDER BY キーおよびテーブルの sorting key と一致する場合、LIMIT を順序付き集約 (aggregation-in-order) にプッシュダウンして早期終了できるようにしました。これにより、読み取る行数が大幅に削減されます。[#104859](https://github.com/ClickHouse/ClickHouse/pull/104859) ([thevar1able](https://github.com/thevar1able)).
* `allow_aggregate_partitions_independently` をデフォルトで有効にしました。`GROUP BY` キーがパーティションキーに適合する場合、ClickHouse は各パーティションを独立して集約し、グローバルなマージ処理を省略できます。パーティション構成上この最適化が不利になる場合 (パーティション数が少なすぎる・多すぎる、またはパーティションサイズに大きな偏りがある場合) は、実行時のヒューリスティクスによって自動的にスキップされます。[#105128](https://github.com/ClickHouse/ClickHouse/pull/105128) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `read_in_order_use_virtual_row` をデフォルトで有効にしました。多数のパーツを持つテーブルを主キーの順序で読み取る場合 (例: `ORDER BY primary_key LIMIT n`) 、実際に結果に寄与し得るパーツのみを読み取るようになりました (これに加え、読み取りの並列性を保つため、最大 `max_threads` パーツ分の read-ahead ウィンドウも読み取ります) 。これにより、ピークメモリ使用量が大幅に削減されます。[#106215](https://github.com/ClickHouse/ClickHouse/pull/106215) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `JOIN` のメモリ使用量を削減し、パフォーマンスを向上させました。ハッシュ結合の右側で 8 バイトのインデックスベースのコンパクトな行参照を使用するようになったため、すべてのキー型において、`ALL` 結合のハッシュテーブルエントリが `ANY` 結合と同等のサイズになりました。大規模な `parallel_hash` 結合クエリ (`UInt64` および `String` キーを用い、一意キーと重複キーの両方を含む 1 億〜3 億行のテーブルに対する `INNER` 結合と `ANY` 結合) でベンチマークを実施したところ、クエリの中央値で約 12% 高速化し、ピークメモリ使用量は約 15% 減少しました。遅くなったクエリはありませんでした。最も効果が大きかったのは `UInt64` キーでの `INNER` 結合です (中央値で約 21% 高速化、メモリ使用量は 38% 減少) 。[#107189](https://github.com/ClickHouse/ClickHouse/pull/107189) ([harikrishnan94](https://github.com/harikrishnan94)).
* 結合順序を列挙するアルゴリズム dpsub を追加しました。dpsize より少ない最適化オーバーヘッドで最適な結合プランを得られ、内部結合以外の結合にも対応しています。[#107351](https://github.com/ClickHouse/ClickHouse/pull/107351) ([fkastrati](https://github.com/fkastrati)).
* クエリ全体のメモリではなく、集約状態専用のメモリトラッカーを用いるようにしました。これにより、メモリ使用量の小さい単一レベル集約が二段階集約に変換されることを防ぎます。[#107490](https://github.com/ClickHouse/ClickHouse/pull/107490) ([m-selmi](https://github.com/m-selmi)).
* 集約ハッシュテーブルのサイズ統計 cache のキーを AST ではなくクエリプランから算出するようにし、集約クエリの解析時に完全なクエリ AST を構築しなくて済むようにしました。[#107643](https://github.com/ClickHouse/ClickHouse/pull/107643) ([novikd](https://github.com/novikd)).
* 初回実行時に収集したランタイム統計に基づき、初回は `hash` 結合で実行されたクエリを、2 回目以降の実行で `parallel_hash` に切り替えられるようにしました。[#108125](https://github.com/ClickHouse/ClickHouse/pull/108125) ([m-selmi](https://github.com/m-selmi)).
* ランタイム結合統計から得たハッシュテーブルサイズを用いて、以降のクエリ実行における結合ランタイムフィルタのサイズを最適化するようにしました。新しい設定 `join_runtime_filter_size_from_hash_table_stats` で制御できます。[#108313](https://github.com/ClickHouse/ClickHouse/pull/108313) ([m-selmi](https://github.com/m-selmi)).
* パーティション化された `MergeTree` テーブルに対する `DISTINCT` クエリについて、各パーティションの行を単一のストリーム内に保持することで、高速化とメモリ使用量の削減を実現しました。これにより、同じキーの集合が複数の preliminary `DISTINCT` に重複して現れることがなくなり、各ストリームの preliminary `DISTINCT` は互いに重複しないキーの集合を処理するようになります。この最適化は、パーティション expression が `DISTINCT` カラムの決定的な関数である場合に適用され、パーティション数と偏りに基づくコストヒューリスティックによって適用可否が判断されます (設定 `force_distinct_partitions_independently` で切り替え可能で、デフォルトでは無効です)。パーティション単位で重複しないというこの性質は、`Expression`、`Filter`、`ARRAY JOIN` の各ステップを経由して、最終段の `DISTINCT`、`LIMIT BY`、`GROUP BY` にも伝播されるため、これらの処理でもマージを省略できます。この機能は、新しい設定 `allow_distinct_partitions_independently` (デフォルトで有効) で制御でき、ヒューリスティックは `max_number_of_partitions_for_independent_distinct` で調整できます。[#108326](https://github.com/ClickHouse/ClickHouse/pull/108326) ([nihalzp](https://github.com/nihalzp))。
* `ON` 句に非等値述語が含まれる場合でも、等値比較のキーに対してランタイムフィルタが構築されるようになりました。これにより、等値結合と非等値結合が混在する場合に、ハッシュ結合に入力される行数が削減されます。`LEFT ANTI JOIN` は影響を受けません。[#108579](https://github.com/ClickHouse/ClickHouse/pull/108579) ([29antonioac](https://github.com/29antonioac))。
* 集約および結合のハッシュテーブルに対するソフトウェアプリフェッチのしきい値を `4 * L2 cache size` から `L2 cache size` に引き下げ、ハッシュテーブルが L2 に収まらなくなった時点でプリフェッチが有効になるようにしました。これにより、報告される L2 サイズが大きいプラットフォーム (例: 2 MiB の L2 を持つ aarch64) で発生していた、中規模のハッシュテーブル (約 1～8 MiB) に対する `GROUP BY` および `JOIN` の性能低下が解消されます。[#108655](https://github.com/ClickHouse/ClickHouse/pull/108655) ([groeneai](https://github.com/groeneai))。
* ウィンドウ関数の性能を改善しました。カラム数の多いテーブルに対する `SELECT *` を含むウィンドウクエリは、メモリ使用量が大幅に減少し、より高速に実行されるようになりました。`quantile*`、`uniq*`、`groupArray` などのウィンドウ集約は、`OVER ()` および `OVER (ORDER BY ... RANGE ...)` で高速化されています。`cume_dist` 関数も高速化され、`PARTITION BY` または `ORDER BY` を使用するウィンドウは、重複値の多いカラムでの性能が向上しました。[#108688](https://github.com/ClickHouse/ClickHouse/pull/108688) ([nihalzp](https://github.com/nihalzp))。
* 集約関数を含まない集約クエリでは、(サポートされるキーの型に限り) `HashMap` ではなく `HashSet` ベースの方式を使用するようになりました。最大 1.8 倍の高速化が確認されています。[#108862](https://github.com/ClickHouse/ClickHouse/pull/108862) ([nickitat](https://github.com/nickitat))。
* `parallel_hash` 結合アルゴリズムにおけるロック競合によるオーバーヘッドを削減しました。[#108938](https://github.com/ClickHouse/ClickHouse/pull/108938) ([m-selmi](https://github.com/m-selmi))。
* `join_algorithm` に新しい値 `parallel_full_sorting_merge` を追加しました。ハッシュ互換の等値結合において、full sorting merge join を結合キーのハッシュに基づいて分片し、すべてのスレッド上で並行して動作する、分片ごとの独立したマージ結合として実行します。マージ結合の特長である、ストリーミング処理による低いメモリ使用量を維持したまま並列化できます (ベンチマークでは、`parallel_hash` と比べて約 2.4 倍高速で、メモリ使用量は約 3.3 分の 1)。`ASOF` 結合は単一の `full_sorting_merge` にフォールバックします。ハッシュ非互換のキー型 (浮動小数点、`JSON`、`Object`、`Dynamic`) では、ハッシュによる分散への書き換えのみがスキップされ、`query_plan_join_shard_by_pk_ranges` が有効な場合は、引き続き主キーの範囲に基づいてソース側で分片できます。結果の順序は保証されません。[#109005](https://github.com/ClickHouse/ClickHouse/pull/109005) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* カラム統計は、テーブルの現在のアクティブサイズに書き込まれるブロックのサイズを加えた値が新しい設定 `materialize_statistics_on_insert_max_table_size` (デフォルト 25 GiB) 以下である場合、デフォルトで `INSERT` 時にマテリアライズされるようになりました。このチェックは書き込まれるブロックごとに行われるため、空のテーブルへの最初の一括ロードでも、書き込まれる各ブロックについて統計がマテリアライズされる場合があります。これにより、コストベースの結合オプティマイザがロード直後のディメンションテーブルについて正確な推定値を得られるようになり、極端に非効率な結合順序を回避できます (例えば、TPC-H の Q5 と Q8 はスケール係数 40 でタイムアウトしなくなりました) 。一方、既存の大規模なファクトテーブルでは、引き続きマージ時に統計がマテリアライズされます。[#109454](https://github.com/ClickHouse/ClickHouse/pull/109454) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* キーなしの集約における集約関数 `uniqCombined` を最適化しました。[#109794](https://github.com/ClickHouse/ClickHouse/pull/109794) ([CurtizJ](https://github.com/CurtizJ))。
* 集約関数 `uniqHLL12` および `uniqCombined` を最適化しました。[#109831](https://github.com/ClickHouse/ClickHouse/pull/109831) ([CurtizJ](https://github.com/CurtizJ))。
* `parallel_hash` 結合アルゴリズムにおける結合されなかった行の処理を、新たに 2 つのケース (残余フィルタがある場合と、結合キーが小さい場合 (シングルレベルのハッシュマップ) ) でも並列化しました。[#110008](https://github.com/ClickHouse/ClickHouse/pull/110008) ([m-selmi](https://github.com/m-selmi))。
* 述語がウィンドウの `PARTITION BY` カラムのみを参照している場合、フィルタをウィンドウ関数より下にプッシュダウンするようにしました。ウィンドウの後に記述されたこのような述語 (ウィンドウ処理を行うサブクエリを囲む外側の `WHERE`、または `QUALIFY` 内の連言項) がストレージまで到達するようになり、主キー／パーティションによるプルーニング、スキップ索引、プロジェクションが有効に機能します。例えば `SELECT ... row_number() OVER (PARTITION BY key ORDER BY ts) AS rn ... QUALIFY rn = 1 AND key = 'x'` は、テーブル全体を読み込んでウィンドウ処理することがなくなりました。[#110114](https://github.com/ClickHouse/ClickHouse/pull/110114) ([groeneai](https://github.com/groeneai))。
* `join_use_nulls = 1` の場合でも、外部結合の両側のカラムを参照する NULL 拒否の `WHERE` (例: `WHERE l.k = 42 AND r.k = 42`) によって、`join_use_nulls = 0` の場合と同様に結合が `INNER` (または `LEFT`/`RIGHT`) に変換され、主キーによるプルーニングが行われるようになりました。以前はこのケースでは変換が行われず、両方のテーブルが全件読み込まれていました。[#110121](https://github.com/ClickHouse/ClickHouse/pull/110121) ([groeneai](https://github.com/groeneai))。
* キーなしの集約における関数 `uniq`、`uniqExact`、`uniqHLL12` を最適化しました。[#110150](https://github.com/ClickHouse/ClickHouse/pull/110150) ([CurtizJ](https://github.com/CurtizJ))。
* `ON` 条件が定数 false となる `JOIN` (例: `ON 1 = 2`、`ON NULL`、または `a.t = 'A' AND a.t = 'B'` のように false に畳み込まれる条件) は、結果に寄与しない側を読み込まなくなりました。新しいクエリプランの最適化により、行を生成し得ない入力側が空のソースに置き換えられます。この動作は設定 `query_plan_short_circuit_constant_false_join` (デフォルトで有効) で制御されます。[#110234](https://github.com/ClickHouse/ClickHouse/pull/110234) ([groeneai](https://github.com/groeneai))。
* シングルレベルの集約ハッシュテーブルの最終マージを並列化しました。キー空間を互いに素なハッシュパーティションに分割し、各スレッドがそれぞれ独立してマージします (設定 `enable_parallel_single_level_merge`、デフォルトで有効) 。これにより、スレッドごとのハッシュテーブルが 2 レベル化のしきい値を下回る一方で、マージが実行時間の大半を占めていた `GROUP BY` クエリが高速化されます。[#110395](https://github.com/ClickHouse/ClickHouse/pull/110395) ([nihalzp](https://github.com/nihalzp))。
* 単一の `String` 集約キーで、よりコンパクトなハッシュテーブル表現が使用されるようになり、文字列を多用する `GROUP BY` ワークロードのパフォーマンスが向上しました。新しい `enable_packed_string_keys_in_aggregation` 設定はデフォルトで有効です。この設定を無効にするか、`compatibility` を `26.8` 未満に設定すると、従来の `StringHashTable` パスに戻ります。このパスは、11 バイトを超える非常に低カーディナリティのキーでは高速になる場合があります。[#110573](https://github.com/ClickHouse/ClickHouse/pull/110573) ([harikrishnan94](https://github.com/harikrishnan94)). [#112089](https://github.com/ClickHouse/ClickHouse/pull/112089) ([harikrishnan94](https://github.com/harikrishnan94)).
* データが疎なシナリオにおいて、full sorting merge join のパフォーマンスを最大 1.5〜3 倍向上させました。[#111200](https://github.com/ClickHouse/ClickHouse/pull/111200) ([vdimir](https://github.com/vdimir)).
* プローブ側とビルド側の結合キーの型が異なる場合 (例: Nullable のプローブキーと非 Nullable のビルドキー) でも、`join_runtime_filter_from_fixed_hash_table` が有効になるようにしました。[#111244](https://github.com/ClickHouse/ClickHouse/pull/111244) ([m-selmi](https://github.com/m-selmi)).
* 右側に `NULL` の結合キー、または `ON` expression によってフィルタされた行が含まれる場合に、null マップの再構築を回避することで、`parallel_hash` アルゴリズムを使用した `RIGHT` および `FULL` 結合のパフォーマンスを向上させました。[#111258](https://github.com/ClickHouse/ClickHouse/pull/111258) ([m-selmi](https://github.com/m-selmi)).
* 並列 `GROUP BY` 向けの新しいアダプティブアルゴリズムを追加しました (設定 `enable_adaptive_aggregator` で制御され、デフォルトで有効) 。各スレッドは、自身のハッシュテーブルが `adaptive_aggregator_freeze_threshold` 個のキーを保持するまでそのテーブルに集約し、その後テーブルを凍結します。これにより、頻出キーは協調なしでキャッシュに収まる小さなテーブルを更新し続ける一方、出現頻度の低いキーはハッシュに基づいてバケットごとのバックログに振り分けられ、バケット並列のマージ内で 1 回だけ集約されます。[#111459](https://github.com/ClickHouse/ClickHouse/pull/111459) ([nihalzp](https://github.com/nihalzp)).
* 値ごとの `ColumnDynamic` の再構築を回避することで、shared data に格納された JSON/`Object` カラム値の行単位のハッシュ計算を高速化しました (JSON カラムに対する `uniq`/`uniqExact` や、ハッシュ化された `GROUP BY`/`DISTINCT` キーなどで使用されます) 。ハッシュ値に変更はありません。[#111501](https://github.com/ClickHouse/ClickHouse/pull/111501) ([valerypetrov](https://github.com/valerypetrov)).
* ON 句に複数の `OR` 選言を含む RIGHT および FULL ハッシュ結合、ならびに残余 (不等価) 条件を持つ RIGHT/FULL JOIN のパフォーマンスを向上させました。[#111590](https://github.com/ClickHouse/ClickHouse/pull/111590) ([m-selmi](https://github.com/m-selmi)).
* ハッシュ結合に自動ディスクスピルのしきい値が設定されている場合 (26.5 以降のデフォルト) でも、JOIN を経由した順序どおりの読み取り (read in order) が機能するようになりました。この最適化が適用されると、結合は左側の順序を維持するためにメモリ上に留まります。以前の動作 (このような結合は read-in-order に使用されず、自由にスピルできる) に戻すには、`query_plan_read_in_order_through_spilling_join = 0` を設定してください。あわせて、順序どおりに読み取られる `LEFT JOIN` に対する `ORDER BY ... LIMIT` が、読み取り予定の行数としてテーブル全体の行数を報告しなくなりました。これにより、`read_overflow_mode = 'throw'` の場合でも、早期に停止する読み取りが `max_rows_to_read` に抵触することはなくなりました。[#111973](https://github.com/ClickHouse/ClickHouse/pull/111973) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* マージ中の `TTL ... GROUP BY` 集約に対して、連続キー最適化を再び有効にしました。アグリゲータの構築時に、`min_hit_rate_to_use_consecutive_keys_optimization` (`[0, 1]` のヒット率、デフォルト 0.5) を受け取るべき引数位置に `min_chunk_bytes_for_parallel_parsing` (バイト単位のしきい値、デフォルト 10 MiB) が渡されていたため、このパスでは最適化が常に無効になっていました。結果には影響しません。[#112314](https://github.com/ClickHouse/ClickHouse/pull/112314) ([groeneai](https://github.com/groeneai)).
* クエリプランをシリアル化した際に、`ARRAY JOIN` のカラムの遅延レプリケーションが失われなくなりました。`serialize_query_plan = 1` の場合、リモートのプランフラグメントを実行するノードは、`enable_lazy_columns_replication` 設定がデフォルトで有効であるにもかかわらずこれを無視し、複製されたすべてのコピーを常にマテリアライズしていました。[#112330](https://github.com/ClickHouse/ClickHouse/pull/112330) ([groeneai](https://github.com/groeneai))。
* `WHERE` の等価条件のオペランドの型が異なっていても、`Int32` と `Nullable(Int32)` のように共通のスーパータイプを持つ場合は、その条件が `JOIN` 条件にマージされるようになりました。これにより、CROSS 結合を INNER 結合に変換できるようになります。[#112630](https://github.com/ClickHouse/ClickHouse/pull/112630) ([m-selmi](https://github.com/m-selmi))。
* 共有データ内に `JSON` 値を保持する要素を持つ `Array`(例: 集約関数に渡される定数の `Array(JSON)`)を複製する際に、再割り当てが二次的に発生する問題を修正しました。このようなクエリでは、コピーされるバイト数が行数の二乗に比例して増加していました。[#112897](https://github.com/ClickHouse/ClickHouse/pull/112897) ([groeneai](https://github.com/groeneai))。
* MergeTree のプライマリキーまたはパーティションキーに対する範囲述語の境界値が、単一行の定数側との `JOIN ON` 句を通じて与えられる場合に、パーツおよびグラニュールの枝刈りが再び行われるようになりました。例: `SELECT count() FROM t JOIN bounds ON t.d >= bounds.lo AND t.d <= bounds.hi`。このようなクエリは 25.2 以降すべてのパーツを読み取っていました。また、以前は枝刈りを復元する手段だった `query_plan_use_logical_join_step` 設定が 26.5 で廃止されたため、枝刈りを有効にする方法がありませんでした。[#112957](https://github.com/ClickHouse/ClickHouse/pull/112957) ([groeneai](https://github.com/groeneai))。
* 構造の異なる多数のテーブルを対象とする `Merge` テーブルとの JOIN において、クエリプランニングの計算量が三次になる問題を修正しました。このようなクエリは、これまで `max_execution_time` や `KILL QUERY` に応答しないまま、クエリプランニングに数分を要することがありました。[#113140](https://github.com/ClickHouse/ClickHouse/pull/113140) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `GROUP BY` キーのない集約が、実際には使用されることのないハッシュテーブルサイズのキャッシュキーを計算するために、定数畳み込みされたリテラルの全内容を含む入力プランのサブツリー全体を実行のたびにシリアル化していた性能劣化を修正しました。`SELECT quantileMerge(arrayJoin(arrayMap(x -> state, range(5000000))))` のようなクエリでは、クエリプランの最適化に 1 回の実行あたり約 63 ms かかっていましたが、0.15 ms に短縮されました。[#113333](https://github.com/ClickHouse/ClickHouse/pull/113333) ([groeneai](https://github.com/groeneai))。
* PromQL の集約演算子 `topk`、`bottomk`、`limitk` の評価方式を変更しました。すべての系列を単一の行に集めて `O(time_steps * series^2)` の中間メモリを使用する代わりに、選択ステートが `O(time_steps * k)` に収まるストリーミングプランで評価します。これまで `MEMORY_LIMIT_EXCEEDED` で失敗していた高カーディナリティなメトリクスに対するクエリも、限られたメモリ内で実行できるようになり、評価もシングルスレッドではなく並列で行われます。[#113656](https://github.com/ClickHouse/ClickHouse/pull/113656) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* `timeSeries*ToGrid` 集約関数内のバケットごとのハッシュマップを、サンプルのフラットなソート済み配列に置き換えました。これにより、入力が順序どおりの場合(大半のケースが該当)はサンプルの取り込みが O(1) の追記で済み、最終化時のバケットごとのコピーとソートも不要になりました。[#113681](https://github.com/ClickHouse/ClickHouse/pull/113681) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* 複数のプランステップで共有される PromQL の部分式(`topk`/`bottomk`/`limitk` のオペランドや `or` の左辺)を、2 回ではなく 1 回だけ評価するようにしました。PromQL から生成される SQL で、共有サブクエリをマテリアライズするようになったためです。これにより Samples テーブルの重複スキャンが解消され、`rate` に対する `topk` はコールド状態で約 2 倍高速化し、kubernetes-mixin のルールクエリは 10〜29% 改善します。[#113772](https://github.com/ClickHouse/ClickHouse/pull/113772) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* `ORDER BY <column> LIMIT n` (TopK) 最適化を使用するクエリで、[クエリ条件キャッシュ](/ja/operations/query-condition-cache)がデフォルトで有効になりました。無効にするには `use_query_condition_cache_for_top_k = 0` を設定してください。[#111492](https://github.com/ClickHouse/ClickHouse/pull/111492) [#114539](https://github.com/ClickHouse/ClickHouse/pull/114539) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* マージ前に行う、スレッドごとの集約状態のシングルレベルから2レベルへの変換を並列化しました。これにより、非常に多くのコアを搭載したマシンにおいて、重い集約状態 (例: `COUNT(DISTINCT ...)`、ClickBench Q10/Q11) を伴う短い `GROUP BY` クエリで発生していた2〜3倍の性能低下が解消されます。この性能低下は、26.7 の開発ビルドで集約のメモリ計上を正確にした際に生じたものです。[#114691](https://github.com/ClickHouse/ClickHouse/pull/114691) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* パーティション化された `MergeTree` テーブルに対するウィンドウ関数を高速化しました。各パーティションを個別のストリームで読み取り、パーティションごとにウィンドウを評価することで、通常はウィンドウのソート前にすべての行をスレッド間で再分配するハッシュ分散処理を省略します。この最適化は、テーブルのパーティション式がウィンドウの `PARTITION BY` カラムの決定論的関数である場合に適用され、パーティション単位の `GROUP BY` / `DISTINCT` と同じコストヒューリスティック (`max_threads` に対して十分な数のパーティションがあり、突出して大きいパーティションがないこと) に基づいて適用可否が判断されます。新しい設定 `allow_window_partitions_independently` (デフォルトで有効) 、`force_window_partitions_independently`、`max_number_of_partitions_for_independent_window` で制御できます。[#114783](https://github.com/ClickHouse/ClickHouse/pull/114783) ([nihalzp](https://github.com/nihalzp))。
* `timeSeries*ToGrid` 集約関数を高速化しました。サンプルごとのバケット計算で Int128 の除算を回避するようになり、同じバケットに属する連続したサンプルではハッシュマップの検索を省略します。[#114889](https://github.com/ClickHouse/ClickHouse/pull/114889) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* `timeSeries*ToGrid` 集約関数で、同じグリッドバケットに含まれる連続したサンプルをまとめて処理するようにしました。これにより、ソート済みの時系列データでは、`timeSeriesRateToGrid` および関連関数のサンプル取り込み処理が1.2〜2倍高速になります。[#115041](https://github.com/ClickHouse/ClickHouse/pull/115041) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* `GROUP BY` キーを持たない集約が、単一行の出力を `max_threads` 個のストリームに展開しなくなりました。これにより、そのような集約の後にも処理が続くクエリでは、並列性を損なうことなく、はるかに小さなパイプライン (作成・スケジューリング・プロファイリングの対象となるプロセッサが少ない) で実行されます。[#115170](https://github.com/ClickHouse/ClickHouse/pull/115170) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* PromQL のインスタントクエリの評価を高速化しました。`timeSeries*ToGrid` 集約関数は単一ポイントのグリッドに対してベクトル化されたサンプル分類処理を使用し、`timeSeriesIdToGroup` は結果カラムに直接値を書き込むようになりました。[#115267](https://github.com/ClickHouse/ClickHouse/pull/115267) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* `ON` 句に `OR` でつながれた複数の等価条件を持つ `JOIN` で、クエリで選択されない右側のキーカラムをマテリアライズしなくなりました。[#115465](https://github.com/ClickHouse/ClickHouse/pull/115465) ([nickitat](https://github.com/nickitat))。
* 右側で同じ結合キーが何度も繰り返される場合の、`ANY`、`SEMI`、`ANTI` 結合におけるハッシュテーブルの構築を高速化しました。右側の行ごとに `join_any_take_last_row` 設定をメモリから読み直すことがなくなりました。[#115820](https://github.com/ClickHouse/ClickHouse/pull/115820) ([nickitat](https://github.com/nickitat))。
* `String`、`FixedString`、`LowCardinality` キーに対する集約関数なしの `GROUP BY` を高速化しました。未使用のプレースホルダーを行ごとにハッシュテーブルへ書き直すことをやめ、新しいキーを追加する行に対してのみ書き込むようになりました。[#115834](https://github.com/ClickHouse/ClickHouse/pull/115834) ([nickitat](https://github.com/nickitat))。
* 大きな定数畳み込み済みリテラルに対するキー付き集約で、メモリ使用量とクエリプランの最適化時間を削減しました。集約のハッシュテーブル統計キャッシュのキーを、いったんメモリ上に蓄積してからハッシュ化するのではなく、シリアル化と同時にハッシュ化するよう変更しました。これにより、大きなリテラルを含むプランが最適化中にそのコピーを保持しなくなりました。80 MB のリテラルの場合、ピークメモリは約 250 MB 減少し、最適化時間は約 2.5 倍高速化します。算出されるキー自体に変更はありません。[#115847](https://github.com/ClickHouse/ClickHouse/pull/115847) ([groeneai](https://github.com/groeneai))。
* `GROUP BY ... ORDER BY ... LIMIT` および `GROUP BY ... LIMIT` クエリを最適化しました。集約中にサイズ上限付きのヒープを保持し、結果に含まれ得ないグループを除外することで、高カーディナリティのグループ化におけるメモリ使用量と実行時間を大幅に削減します。この最適化は `enable_group_by_top_k_optimization` 設定で制御できます。Dmitriy Terenichev による初期実装をベースにしています [#96630](https://github.com/ClickHouse/ClickHouse/pull/96630) ([thevar1able](https://github.com/thevar1able))。

<h3 id="query-optimization-and-execution">
  クエリ最適化と実行
</h3>

* Parallel Replicas を用いた順序どおりの読み取りで、ローカル読み取りと同じくテーブルを `max_threads` 個のパーツに分割するロジックを使用するようになり、並列性が向上しました。[#101434](https://github.com/ClickHouse/ClickHouse/pull/101434) ([nickitat](https://github.com/nickitat)).
* Parquet リーダーに、行グループレベルおよびページレベルでの GeoParquet 空間枝刈りを追加しました。行グループの枝刈りでは、バウンディングボックスがクエリのジオメトリと重ならない行グループを丸ごとスキップします。ページレベルの枝刈りでは、`covering.bbox` 列索引を使用して行グループ内の無関係なページをスキップします。また、`IFunctionBase::isSpatialPredicate()` を介して空間述語のプッシュダウンを汎用化し、Parquet の行読み取り時に空間述語を評価する `GeoFilter` を追加しました。[#104435](https://github.com/ClickHouse/ClickHouse/pull/104435) ([bacek](https://github.com/bacek)).
* `use_constant_folding_in_index_analysis` 設定を追加しました (デフォルトでは無効) 。有効にすると、`MergeTree` のプライマリキー、`MinMax`、およびスキップ索引の解析において、パーティションレベルの定数をパーツごとにフィルタ述語へ畳み込むようになります。これにより、分岐がパーティション値に依存するフィルタ (例: `PARTITION BY a` における `(a = 1 AND b >= 1) OR (a = 2 AND b > 10)`) の枝刈りが改善されます。[#104582](https://github.com/ClickHouse/ClickHouse/pull/104582) ([Michicosun](https://github.com/Michicosun)).
* `vector_search_with_rescoring` を使用するベクトル検索クエリで、クエリパイプライン内の厳密な距離評価の前に、厳密な行位置決めを適用するようにしました。[#105591](https://github.com/ClickHouse/ClickHouse/pull/105591) ([skuznetsov](https://github.com/skuznetsov)).
* データ量を削減する関数 (`length`、`lengthUTF8`、`empty`、`notEmpty`) を `Sorting` ステップおよび `Filter` ステップの下へプッシュダウンするクエリプランの最適化を追加しました。これにより、サイズの大きい `String` / `FixedString` 引数が固定サイズの結果に置き換えられ、ソート時のバッファリングやフィルタ時のコピーが不要になります。新しい設定 `query_plan_push_down_volume_reducing_functions` で制御でき、デフォルトで有効です。[#106199](https://github.com/ClickHouse/ClickHouse/pull/106199) ([fastio](https://github.com/fastio)).
* 各キャッシュファイルのサイズをファイル名に埋め込む (`<offset>_<size>`) ことでファイルごとの `stat` 呼び出しを不要にし、起動時のファイルシステムキャッシュの読み込みを高速化しました。旧バージョンで書き込まれたキャッシュファイルも引き続き読み込めます。[#107415](https://github.com/ClickHouse/ClickHouse/pull/107415) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* プライマリキーのフィルタと組み合わせたテキスト検索クエリのパフォーマンスを改善しました。[#108114](https://github.com/ClickHouse/ClickHouse/pull/108114) ([CurtizJ](https://github.com/CurtizJ)).
* 定数ポリゴンを使用する `pointInPolygon` 関数のパフォーマンスを改善しました。前処理済みポリゴンのキャッシュが生の定数引数をキーとするようになったため、定数ポリゴンは入力ブロックごとに再パースされることなく、 (キャッシュミス時に) 一度だけパースされます。[#108184](https://github.com/ClickHouse/ClickHouse/pull/108184) ([groeneai](https://github.com/groeneai)).
* 機能が無効な場合 (デフォルトの `predicate_statistics_sample_rate = 0`) は、MergeTree の読み取りパスで `system.predicate_statistics_log` の選択率カウンタを更新しないようにしました。これにより、すべての読み取りからグラニュールごとのアトミック更新と `O(rows)` のフィルタ popcount がなくなり、aarch64 で特に顕著だったパフォーマンス低下が解消されます。[#108190](https://github.com/ClickHouse/ClickHouse/pull/108190) ([groeneai](https://github.com/groeneai)).
* 通常の `MergeTree` のマージでバッチソートキューを使用できるようにする `merge_use_batch_sorting_queueMergeTree` 設定を追加しました。ソート済みマージのコストが大きいマージ処理で、CPU 時間と実時間を削減できます。[#108468](https://github.com/ClickHouse/ClickHouse/pull/108468) ([rorylshanks](https://github.com/rorylshanks)).
* 同じ `WITH` エイリアスを参照する式や、同じ部分式を何度も繰り返す式 (例: 深くネストした `if`/`multiIf` チェーン) について、アクション DAG の構築時に共有部分式を再構築しないようにし、アナライザー使用時のクエリプランニングを高速化しました。[#108523](https://github.com/ClickHouse/ClickHouse/pull/108523) ([novikd](https://github.com/novikd)).
* 比較からなる `AND` チェーンを多数含む、または非常に大きな `AND` チェーンを含むクエリについて、クエリ解析を高速化しました。`optimize_and_compare_chain` 最適化は、クエリツリーの大部分をハッシュ化するのではなく、作業量の上限 (新しい設定 `optimize_and_compare_chain_max_hash_work`) の範囲内で実行されるようになりました。また、lambda の解決時に、再帰ガードのために lambda 本体のハッシュを再計算しないようになりました。[#108757](https://github.com/ClickHouse/ClickHouse/pull/108757) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* フィルタのみを行うポストプロセッサ (`if(..., '', token)`) では、生のトークンからグラニュールをビルドし、空のトークンをビルド時に除外するようになりました。これにより、汎用パスで発生する出現ごとのマテリアライズや `ActionsDAG` の実行が不要になります。[#109049](https://github.com/ClickHouse/ClickHouse/pull/109049) ([ahmadov](https://github.com/ahmadov)).
* 分散クエリプランの `ShuffleSendStep` におけるシングルスレッドのボトルネックを解消しました。フラグメント全体を 1 つの `ScatterByPartitionTransform` に集約するのではなく、各上流ストリームがそれぞれ独立して行を宛先バケットごとに振り分けるようになりました。[#109206](https://github.com/ClickHouse/ClickHouse/pull/109206) ([davenger](https://github.com/davenger)).
* 多数のカラムを含むクエリにおける式評価の CPU オーバーヘッドを削減しました (例：ストライドの小さい `QBit` カラムに対するベクトル検索。この場合、各ベクトルが数百のビットプレーンのサブカラムに展開され、そのすべてが単一の `*DistanceTransposed` 呼び出しに渡されます) 。[#109380](https://github.com/ClickHouse/ClickHouse/pull/109380) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 述語が `LIMIT BY` のキーカラムのみを参照し、かつ句が空でない各グループにつき少なくとも 1 行を保持する場合 (`n >= 1` かつ `OFFSET 0` の `LIMIT n BY`) 、フィルタを `LIMIT BY` の下にプッシュダウンするようにしました。これにより、こうした述語 (`LIMIT BY` サブクエリを外側から囲む `WHERE` として記述されたもの) がストレージまで到達し、主キーによる枝刈り、スキップ索引、プロジェクションを活用できるようになります。テーブル全体を読み込んでからグループごとの上位 N 件を適用する必要はありません。なお、`OFFSET`、`LIMIT 0 BY`、負の値を用いた `LIMIT BY` 形式における例外のセマンティクスは変わりません。[#110116](https://github.com/ClickHouse/ClickHouse/pull/110116) ([groeneai](https://github.com/groeneai)).
* 主キー索引の解析において、超矩形チェックのたびに発生していたヒープ割り当てを回避しました。これにより、クエリの形状に応じてマークのフィルタリングが 5～26% 高速化されます。[#110153](https://github.com/ClickHouse/ClickHouse/pull/110153) ([raimannma](https://github.com/raimannma)).
* Parquet のフィルタプッシュダウン (行グループの枝刈りおよびカラム索引) が、`DateTime64` のバリアント間、`Decimal` のバリアント間、および `Float32`/`Float64` 間の変換に対応しました。[#110457](https://github.com/ClickHouse/ClickHouse/pull/110457) ([al13n321](https://github.com/al13n321)).
* sparseGrams トークナイザーを使用するテキスト索引およびブルームフィルタベースのスキップ索引のビルドを最適化しました。[#110541](https://github.com/ClickHouse/ClickHouse/pull/110541) ([UnamedRus](https://github.com/UnamedRus)).
* PREWHERE 条件の順序付けにおいて、I/O コストと選択度を組み合わせて考慮するようにしました。これにより、[https://github.com/ClickHouse/ClickHouse/pull/101275](https://github.com/ClickHouse/ClickHouse/pull/101275) 以降に一部のケースで発生していた PREWHERE 実行のパフォーマンス低下が解消されます。[https://github.com/ClickHouse/ClickHouse/issues/110462](https://github.com/ClickHouse/ClickHouse/issues/110462) の対応の一部です。[#110695](https://github.com/ClickHouse/ClickHouse/pull/110695) ([Avogar](https://github.com/Avogar)).
* ポストプロセッサの `IN`/`NOT IN` フィルタで定義されたトークンのハッシュ計算を削減しました。[#111690](https://github.com/ClickHouse/ClickHouse/pull/111690) ([ahmadov](https://github.com/ahmadov)).
* 関数 mapContainsKeyLike、mapContainsValueLike、mapExtractKeyLike、mapExtractValueLike で非定数のパターンを使用する場合、enable\_lazy\_columns\_replication が有効であれば、メモリ使用量と処理時間が削減されるようになりました。キャプチャ時にパターンを Map のエントリごとに即座にコピーすることはなくなり、コピーは内部 lambda の実行時まで遅延され、より早く解放されます。その結果、ピーク時に存在するパターンの展開済みコピーが 1 つ減ります。[#111749](https://github.com/ClickHouse/ClickHouse/pull/111749) ([diegomestre2](https://github.com/diegomestre2)).
* 2つのオンディスク機能をデフォルトで有効化しました (あわせてベータに昇格しました) 。1) `packed_skip_index_max_bytes = '1M'`: 1 MiB 以下のスキップ索引サブストリームが、パーツごとに単一の `skp_idx.packed` アーカイブへ書き込まれるようになり、オブジェクトストレージ上のオブジェクト数と書き込みリクエストが削減されます。互換性: 影響を受けるのは新たに書き込まれたパーツのみで、それらは旧バージョンでも完全に読み取り可能です。26.6 より前のバージョンでは、パック済みの索引がプルーニングに使用されないだけです (マテリアライズされていないものとして扱われます) 。ファイルごとに独立した従来のレイアウトを維持するには、`packed_skip_index_max_bytes = 0` を設定してください。2) `compute_exact_num_defaults_for_sparse_columns` と `optimize_trivial_count_with_sparsity_filter`: カラムごとの正確な `num_defaults` カウンターが永続化され、述語によって行がデフォルト値と非デフォルト値に分かれる場合に、データをスキャンせずに `SELECT count() FROM t WHERE <pred>` に応答できるようになりました。互換性: `serialization.json` 内の `exact_num_defaults` フラグは旧バージョンでは無視されるため、ダウングレード後もパーツは完全に読み取り可能です。count の書き換えは正確なカウンターを持つパーツにのみ適用されるため、新旧のパーツが混在するテーブルでも正しい結果が得られます。[#111816](https://github.com/ClickHouse/ClickHouse/pull/111816) ([Algunenano](https://github.com/Algunenano))。
* 推移的条件の最適化において、フィルタ全体を適用できない場合は、追加フィルタを索引解析にのみ使用するようになりました。詳細は `optimize_and_compare_chain` 設定を参照してください。[#112076](https://github.com/ClickHouse/ClickHouse/pull/112076) ([yariks5s](https://github.com/yariks5s))。
* 実験的な TimeSeries エンジンの Prometheus クエリ API (`/api/v1/query`、`/api/v1/query_range`) が、クエリをシングルスレッドではなく並列に実行するようになりました。[#112108](https://github.com/ClickHouse/ClickHouse/pull/112108) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* 定数ベクトルに対する `randomHadamardTransform` が、行ごとではなく1回だけ評価されるようになりました。これにより、`QBit` カラムと比較する前に `randomHadamardTransform` でクエリベクトルを回転させるベクトル検索クエリが高速化されます。[#112921](https://github.com/ClickHouse/ClickHouse/pull/112921) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 主キーカラムに対する `IN (subquery)` でフィルタリングを行うミューテーションにおいて、同一ミューテーション内のパーツタスク間でセットが再び共有されるようになりました。`enable_sharing_sets_for_mutations` はデフォルトで有効ですが、主キー解析用に構築されたセットが共有キャッシュの対象外になっていたため、N 個のパーツを持つテーブルでは同じセットが N 回マテリアライズされていました。[#112941](https://github.com/ClickHouse/ClickHouse/pull/112941) ([groeneai](https://github.com/groeneai))。
* 分散クエリプラン (`make_distributed_plan`) において、`ORDER BY ... LIMIT k` が各レプリカで遅延マテリアライゼーションを使用するようになりました。サイズの大きいカラムは、すべての候補行ではなく、そのレプリカのローカルな上位 k 行についてのみ読み取られます。[#113111](https://github.com/ClickHouse/ClickHouse/pull/113111) ([shankar-iyer](https://github.com/shankar-iyer))。
* `uniq_v2` カラム STATISTICS を使用する場合のクエリプランニングを高速化しました。ユニーク値数の推定値は、リクエストのたびに再計算せずキャッシュされるようになりました。このリクエストはクエリプランニング中に1クエリあたり何度も発行されます。[#113357](https://github.com/ClickHouse/ClickHouse/pull/113357) ([groeneai](https://github.com/groeneai))。
* Parquet および ORC ファイル内の `Tuple` サブカラムに対してフィルタプッシュダウンが機能するようになりました。`file()`、`s3()`、`url()` に対する `WHERE tup.1 = 555555` のような述語は、ファイル全体を読み取るのではなく、タプル要素自体の統計情報を使用して行グループおよび行索引ストライドをプルーニングするようになりました。[#113383](https://github.com/ClickHouse/ClickHouse/pull/113383) ([groeneai](https://github.com/groeneai))。
* TimeSeries エンジン上の PromQL のクエリパフォーマンスを改善しました。内部のセレクター SQL が、サンプルテーブルの主キーカラムを (無意味なキャストを挟まずに) 直接読み取り、系列 ID のセットよりも先にタイムスタンプの範囲をチェックするようになったため、セレクターを多用するコールドクエリが 30〜44% 高速化されます。[#113768](https://github.com/ClickHouse/ClickHouse/pull/113768) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* 1つのメトリクスのすべての系列にマッチする PromQL セレクタは、id レイアウトが標準の id ジェネレーターを用いた2要素のタプルである場合、索引解析時に大規模な `id IN <set>` 条件ではなく、`id` 上の連続した主キー範囲を使って `TimeSeries` テーブルのサンプルテーブルをフィルタするようになりました。これにより、セレクタを多用する PromQL クエリで大半を占めていた、シングルスレッドによる索引解析のコストが解消されます。620億サンプルのテーブルにおいて、ダッシュボードおよびルールのクエリパターンでコールドレイテンシが最大 45% 短縮され、スイート全体のコールド幾何平均でも 11% 短縮されました。[#114131](https://github.com/ClickHouse/ClickHouse/pull/114131) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* Prometheus HTTP API のエンドポイント `/api/v1/query` および `/api/v1/query_range` は、複数のプランステップで共有される PromQL サブクエリを、`prometheusQuery` および `prometheusQueryRange` テーブル関数と同様に1回だけ評価するようになりました。これまでは、`enable_analyzer = 0` を指定したリクエストや、プロファイルでこの設定が有効になっているユーザーのリクエストでは、共有サブクエリを参照するステップごとに再スキャンが発生していました。[#114261](https://github.com/ClickHouse/ClickHouse/pull/114261) ([groeneai](https://github.com/groeneai))。
* 26.7 で発生した回帰を修正しました。`DateTime64` カラムに `toUnixTimestamp`(またはその他の整数変換)を適用した式で並べ替えられた `MergeTree` テーブルにおいて、そのカラムに対する単純な範囲フィルタで主キーが使用されず、マッチしたパーツのすべてのグラニュールが読み取られていました。さらに、生の `DateTime64` カラムで並べ替えられたテーブルに対する `toInt64(ts) >= c` のようなフィルタでも、主キーが使用されるようになりました。[#114413](https://github.com/ClickHouse/ClickHouse/pull/114413) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* クラスタ化された(例: 主キーでソートされた)カラムに対する `IN` の実行を高速化しました。値の等しい行が連続する場合、直前の行の結果を再利用します。[#114853](https://github.com/ClickHouse/ClickHouse/pull/114853) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* 関数 `h3kRing`、`h3ToChildren`、`h3PolygonToCells`、`h3PolygonToCellsWithContainment` が多数の行にわたって結果を構築する際、処理時間が二次関数的に増加する問題を修正しました。CI のストレステストでは、196 000 行に対するクエリがメモリコピーだけで 838 秒を費やしていましたが、現在は約 5 秒で完了します。[#115773](https://github.com/ClickHouse/ClickHouse/pull/115773) ([groeneai](https://github.com/groeneai))。
* Dictionary の逆引きルックアップを最適化しました。`WHERE dictGet(dict, attr, key_expr) = value` のような定数との等値述語は、`IN (SELECT ... FROM dictionary(...))` サブクエリに書き換えられる代わりに、キーフィルタ(`key_expr = const`、`key_expr IN [...]`、または `WHERE 0`)へ直接定数畳み込みされるようになりました。また、`dictGetKeys` の定数パスが並列実行されるようになりました。[#91164](https://github.com/ClickHouse/ClickHouse/pull/91164) ([nihalzp](https://github.com/nihalzp))。
* 汎用排除検索アルゴリズムが各データパーツの主キー索引の解析に費やすステップ数を制限する新しい設定 `merge_tree_generic_exclusion_search_max_steps` を追加しました。このステップ数の上限は、残りのキー範囲のうち大きいものから順に消費されるため、上限が小さくてもデータの大部分を枝刈りできます。解析しきれなかった範囲は丸ごと読み取られるため、クエリ結果の正しさは保たれますが、読み取るグラニュールが増える場合があります。この制限は厳密には適用されず、最大で `merge_tree_coarse_index_granularity` ステップに加え、パーツがすでに分割されている範囲(例: クエリ条件キャッシュによる分割)1つにつき1ステップまで超過することがあります。デフォルト値の 0 はステップ数無制限を意味します。[#92779](https://github.com/ClickHouse/ClickHouse/pull/92779) ([EmeraldShift](https://github.com/EmeraldShift))。
* 分散テーブル上の `VIEW` に対して `ORDER BY` と `LIMIT` を指定したクエリで、ソート済みストリームのマージ最適化が使用されるようになりました。外側の `ORDER BY`/`LIMIT` が単純なビューの内側のクエリにプッシュダウンされるため、マージコーディネーター上で完全なソートを行うのではなく、各シャードがローカルでデータをソートし、マージコーディネーターはソート済みのストリームをマージするだけで済みます。[#94102](https://github.com/ClickHouse/ClickHouse/pull/94102) ([matanper](https://github.com/matanper))。

<h3 id="storage-io-and-data-lake-performance">
  ストレージ、I/O、データレイクのパフォーマンス
</h3>

* 主キーのカラムがパーティションキーの入力カラムでもある場合、`MergeTree` テーブルの主キー解析時にパーティションの minmax 索引の境界値を利用して、より多くのグラニュールを枝刈りするようになりました。たとえば、`ORDER BY (id, event_time)` および `PARTITION BY toYYYYMM(event_time)` を指定した `MergeTree` テーブルでは、ClickHouse は主キー索引解析時に `event_time` のパーティション minmax 索引を使用し、グラニュールの枝刈りをより的確に判断します。この動作は新しい設定 `use_partition_minmax_for_primary_key_pruning`(デフォルトで有効)で制御されます。[#103480](https://github.com/ClickHouse/ClickHouse/pull/103480) ([UnamedRus](https://github.com/UnamedRus))。
* ソート済みストリームを走査して同一キー値の連続を検出する演算子(順序付き `DISTINCT`、順序付き `LIMIT BY`、順序付きの負の `LIMIT BY`、`full_sorting_merge` および `partial_merge` 結合)を高速化しました。[#106502](https://github.com/ClickHouse/ClickHouse/pull/106502) ([nihalzp](https://github.com/nihalzp))。
* Parquet v3 リーダーは、カラムチャンクが完全に辞書エンコードされている場合、等価条件および `IN` 条件に対して(min/max 統計情報とブルームフィルタに加えて)辞書ページを使って行グループ全体をスキップできるようになりました。この動作は新しい設定 `input_format_parquet_dictionary_filter_push_down` で制御されます。[#106952](https://github.com/ClickHouse/ClickHouse/pull/106952) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* gzip/zlib/deflate の圧縮および伸長に libdeflate を使用するようにし、`.gz`/HTTP/`url`/`s3` データおよび Parquet の GZIP コーデックの処理を高速化しました(圧縮は約 1.15 倍かつ圧縮率も向上、伸長は約 1.4〜1.5 倍)。[#108074](https://github.com/ClickHouse/ClickHouse/pull/108074) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* デフォルトの空白文字を対象とする `trimLeft`/`trimRight`/`trimBoth` 関数(およびそのエイリアス `ltrim`/`rtrim`/`trim`)を高速化しました。トリムが不要な行が連続する場合はまとめて一括コピーし、行ごとの空白走査は先頭または末尾に実際に空白がある行に対してのみ実行します。[#108177](https://github.com/ClickHouse/ClickHouse/pull/108177) ([groeneai](https://github.com/groeneai))。
* 現在のマニフェストをパースしている間に次のマニフェストファイルをプリフェッチし、I/O と CPU 処理をオーバーラップさせることで、Iceberg テーブルの読み取りを高速化しました。[#108543](https://github.com/ClickHouse/ClickHouse/pull/108543) ([asya-ch](https://github.com/asya-ch))。
* 再スコアリングを使用するベクトル検索クエリで、同じ `MergeTree` グラニュール内の隣接行を総当たりで再スコアリングするのではなく、正確な距離計算をベクトル索引の候補行のみに限定するようになりました。[#108846](https://github.com/ClickHouse/ClickHouse/pull/108846) ([skuznetsov](https://github.com/skuznetsov))。
* コア数の多いサーバーで、通常のローカルかつ順序なしの narrow カラム `MergeTree` スキャンにおける過剰な読み取りストリームとパイプラインのオーバーヘッドを削減するため、`merge_tree_min_bytes_per_read_stream` 設定を追加しました。[#109035](https://github.com/ClickHouse/ClickHouse/pull/109035) ([jiebinn](https://github.com/jiebinn))。
* 共有データに疎なパスを多数含む `JSON` カラムのシリアライゼーションとマージを高速化しました。共有データをパスごとのカラムに展開する際、`flattenAndBucketSharedDataPaths` が行ごとに蓄積済みの全パスカラムを走査したり、デフォルト値を 1 セルずつ挿入したりすることはなくなりました。全パスに対する行ごとの走査を廃止し、欠損部分は一括で埋めるようになっています。[#109341](https://github.com/ClickHouse/ClickHouse/pull/109341) ([groeneai](https://github.com/groeneai))。
* ネイティブプロトコルでは、双方のピアがプロトコルリビジョン 54489 以降の場合、`String` カラムを値ごとの varint 長プレフィックスではなく、累積バイトオフセットの独立したストリーム (`Array` がオフセットに使用するのと同じレイアウト) に続けて連結データを送信する形式に変更されました。これによりクライアントは、バッファを正確に事前割り当てし、1 回の一括コピーで `String` カラムを読み取れるようになり、値ごとのレイアウトと比べて約 4 倍高速になります。レイアウトはプロトコルリビジョンを通じてネゴシエートされるため、古いクライアントやサーバーには影響しません。同じレイアウトは、新しい設定 `output_format_native_write_string_with_size_stream` / `input_format_native_read_string_with_size_stream` により `Native` および `Buffers` フォーマットでも利用できます (フォーマットの可搬性を保つため、デフォルトでは無効です) 。[#110320](https://github.com/ClickHouse/ClickHouse/pull/110320) ([vahid-sohrabloo](https://github.com/vahid-sohrabloo))。
* 主キーの順序で読み取り (sorting key のプレフィックスによる `ORDER BY`) 、かつ小さな `LIMIT` を指定した `FINAL` 付きクエリでは、`split_intersecting_parts_ranges_into_layers_final` が使用されなくなりました。[#110431](https://github.com/ClickHouse/ClickHouse/pull/110431) ([KochetovNicolai](https://github.com/KochetovNicolai))。
* Iceberg テーブルを含む、オブジェクトストレージ上の Parquet ファイルの読み取りで遅延マテリアライゼーション (late materialization) に対応しました。`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](https://github.com/ClickHouse/ClickHouse/pull/110970) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 削除ファイルが多数ある Iceberg テーブルに対するクエリの開始が高速になりました。ClickHouse は削除マニフェストファイルを 1 つずつではなく並行して読み取り・デコードするため、ストレージからの読み取りが並行して行われます。同時にデコードする数は、新しい設定 `iceberg_delete_manifest_decode_concurrency` (デフォルト `4`) で制御します。[#112679](https://github.com/ClickHouse/ClickHouse/pull/112679) ([asya-ch](https://github.com/asya-ch))。
* 行グループおよびページのプルーニングを可能にするため、UInt128/UInt256/Int128/Int256 を DECIMAL として Parquet にシリアライズするオプトイン機能を追加しました。[#113347](https://github.com/ClickHouse/ClickHouse/pull/113347) ([bobrik](https://github.com/bobrik))。
* リーダーチェーンのステップが断片化したマーク範囲 (例：主キーやスキップインデックスでフィルタされた範囲) を読み取る際に、リモートディスクへの読み取りリクエストが何倍にも増える問題を修正しました。[#113584](https://github.com/ClickHouse/ClickHouse/pull/113584) ([CurtizJ](https://github.com/CurtizJ))。
* sorting key がすべて定数である `MergeTree` パーツの書き込み時に、不要なソート済み判定スキャンを省略するようにしました。[#113899](https://github.com/ClickHouse/ClickHouse/pull/113899) ([perfloop-agent](https://github.com/perfloop-agent))。
* `ORDER BY ... LIMIT n` クエリに対する遅延マテリアライゼーションが、`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](https://github.com/ClickHouse/ClickHouse/pull/114262) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* パーティション化された `MergeTree` テーブルに対する `IN (subquery)` のセット構築を高速化しました。各パーティションの行を単一ストリーム内にまとめ、ストリームごとに独立して重複排除を行うことで、これまですべての行を逐次ハッシュしていた単一のセット充填変換処理が、一意な行のみを処理するようになります。この最適化は、パーティション式がサブクエリの出力カラムに対する決定論的関数である場合に適用されます。ただし、最大のパーティションの行数が平均的なパーティションの 2 倍を超える場合は適用されません。新しい設定 `force_creating_set_partitions_independently` (デフォルトでは無効) を使用すると、このチェックを回避できます。この機能は新しい設定 `allow_creating_set_partitions_independently` (デフォルトで有効) で制御されます。[#114645](https://github.com/ClickHouse/ClickHouse/pull/114645) ([nihalzp](https://github.com/nihalzp)).
* 有効期限 (TTL) が設定されていない、ローテーション済みの非レプリケート `MergeTree` システムログテーブルを `table_readonly` としてマークし、不要なバックグラウンド処理が発生しないようにしました。`table_readonlyMergeTree` 設定は、通常の `MergeTree` テーブルにおけるすべてのバックグラウンド処理 (通常のマージ、TTL (`DELETE`/`MOVE`/再圧縮) マージおよび再圧縮マージ、バックグラウンドミューテーション、バックグラウンドでのパーツ移動) も抑止するようになりました。また、従来から拒否していた挿入処理、ミューテーション、`OPTIMIZE` に加えて、データを変更するパーティションコマンド (`ATTACH`/`MOVE`/`DROP`/`DROP DETACHED`/`FETCH`/`REPLACE PARTITION`、および当該テーブルへの `MOVE PARTITION ... TO TABLE`) も拒否するようになりました。そのため、有効期限 (TTL) が設定された `table_readonly` テーブルでは、この設定が有効な間、期限切れのデータが削除されなくなります。[#95079](https://github.com/ClickHouse/ClickHouse/pull/95079) ([matt-metivier](https://github.com/matt-metivier)).

<h3 id="memory-and-resource-efficiency">
  メモリおよびリソース効率
</h3>

* `UNLOCK SNAPSHOT` のメモリ使用量を削減しました。ロック解除処理で使用されないデータパーツごとのメタデータを読み込まないようにしたことで、パーツ数が非常に多いスナップショットでもメモリ不足が発生しなくなります。[#111849](https://github.com/ClickHouse/ClickHouse/pull/111849) ([jkartseva](https://github.com/jkartseva))。
* バックアップのメタデータ読み込み時のメモリ割り当てを削減しました。各ファイルエントリをインメモリの Map にコピーせず、ムーブするようにしました。[#111718](https://github.com/ClickHouse/ClickHouse/pull/111718) ([jkartseva](https://github.com/jkartseva))。

<h3 id="function-type-and-format-performance">
  関数、型、フォーマットのパフォーマンス
</h3>

* `Decimal` 値のテキストへのフォーマットが大幅に高速化されました。スケールの大きい `Decimal256` では最大 190 倍、`Decimal64` では約 1.6 倍高速です。AVX-512 IFMA を備えたプロセッサでは、64 ビット整数のテキストへの変換が約 1.4 倍高速になりました。また、`toDecimalString` の丸め処理で小数部からの繰り上がりが失われていた問題を修正しました。`toDecimalString(toDecimal64('9.995', 3), 2)` はこれまで `9.00` を返していましたが、現在は `10.00` を返します。[#112457](https://github.com/ClickHouse/ClickHouse/pull/112457) ([thevar1able](https://github.com/thevar1able))。
* `FixedString` キーに対する `partial_merge` 結合アルゴリズムのパフォーマンスを改善しました。値ごとに比較関数を呼び出すのではなく、連続する値をまとめて比較するようになっています。[#105737](https://github.com/ClickHouse/ClickHouse/pull/105737) ([4ertus2](https://github.com/4ertus2))。
* 単一カラムの非 Nullable な文字列型 LowCardinality キーが、`HashJoin` でネイティブにサポートされるようになりました。[#107264](https://github.com/ClickHouse/ClickHouse/pull/107264) ([nickitat](https://github.com/nickitat))。
* パターンと置換文字列がいずれも 1 文字の場合 (例: `replaceRegexpAll(s, ' ', '_')`) の `replaceAll` および `replaceRegexpAll` のパフォーマンスを改善しました。このような置換では文字列のレイアウトが変化しないため、マッチごとに検索ループを実行するのではなく、カラムを一度だけコピーし、一致したバイトをその場で書き換えるようになりました。[#108178](https://github.com/ClickHouse/ClickHouse/pull/108178) ([groeneai](https://github.com/groeneai))。
* デフォルトである 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](https://github.com/ClickHouse/ClickHouse/pull/108187) ([groeneai](https://github.com/groeneai))。
* 深くネストされた配列およびタプルのリテラルを、二次時間ではなく線形時間でパースするようにしました。[#108892](https://github.com/ClickHouse/ClickHouse/pull/108892) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `SECOND`、`MINUTE`、`HOUR` インターバルにおける関数 `toStartOfInterval` (エイリアス: `time_bucket`、`date_bin`) を最大 5 倍高速化しました。[#109729](https://github.com/ClickHouse/ClickHouse/pull/109729) ([raimannma](https://github.com/raimannma))。
* 関数 `arraySort` および `arrayReverseSort` をラムダなしで呼び出した場合、数値型の Array (`Decimal` および `DateTime64` を含む) に対する処理が数倍高速になりました。[#109832](https://github.com/ClickHouse/ClickHouse/pull/109832) ([raimannma](https://github.com/raimannma))。
* 固定オフセットのタイムゾーン (UTC など) の `DateTime` および `DateTime64` 値に対する `addDays`、`addWeeks`、`subtractDays`、`subtractWeeks` について、算術演算による高速パスを導入して高速化しました。[#109836](https://github.com/ClickHouse/ClickHouse/pull/109836) ([raimannma](https://github.com/raimannma))。
* `Delta` コーデックの伸長処理をベクトル化しました。8/16/32 ビットのデータ型ではデコードが 1.5〜5 倍高速になり、`Delta` で圧縮されたカラムのスキャンが最大 20% 高速化されます。[#110189](https://github.com/ClickHouse/ClickHouse/pull/110189) ([raimannma](https://github.com/raimannma))。
* 検索文字列が定数の場合の、`Enum` カラムに対する文字列検索関数 (`like`、`position`、`match`、`countSubstrings`、`hasToken` など) を高速化しました。全行を検索するのではなく、重複を除いた enum 名のみを検索し、その結果を各行に対応付けるようになっています。[#110325](https://github.com/ClickHouse/ClickHouse/pull/110325) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* needle が定数でない場合の部分文字列検索関数 (`position`、`countSubstrings`、`multiSearch*`、`replaceAll`/`replaceOne`、およびそれらの大文字と小文字を区別しないバリアントと UTF-8 バリアント) の性能を最大 1.5 倍向上させました。行ごとの処理パスで、単純なフォールバックではなく SIMD ベースの文字列検索器を使用するようにしています。[#110580](https://github.com/ClickHouse/ClickHouse/pull/110580) ([Algunenano](https://github.com/Algunenano))。
* 多数の動的バリアントまたは JSON パスを持つ `Dynamic` カラムおよび `Object` カラムについて、ブロックをまとめる処理とマージ処理の性能を向上させました。[#110583](https://github.com/ClickHouse/ClickHouse/pull/110583) ([cv4g](https://github.com/cv4g))。
* `NONE` コーデック使用時の `estimateCompressionRatio` を高速化しました。[#111107](https://github.com/ClickHouse/ClickHouse/pull/111107) ([rienath](https://github.com/rienath))。
* パスが共有データに格納されている `JSON` カラムに対するソートなど、比較ベースの操作を高速化しました。従来は値を比較するたびに一時的な `Dynamic` カラムをマテリアライズし、比較する両方の値に対して完全なバイナリデシリアライゼーションを実行していたため、このようなカラムに対する `ORDER BY` が極端に遅くなっていました。[#111894](https://github.com/ClickHouse/ClickHouse/pull/111894) ([groeneai](https://github.com/groeneai))。
* 256 ビット整数 (`Int256`、`UInt256`、`Decimal256`) の除算で、シフトと減算による筆算方式で 1 ビットずつ商を求める代わりに、64 ビットのリム単位で商を計算するようになりました。除数が 64 ビットに収まる場合は 128 / 64 除算のループを、それ以外の場合は Knuth の Algorithm D を使用します。この変更は `intDiv`、`modulo`、`Decimal256` の算術演算、およびこれらの型からテキストへの変換に影響します。[#112477](https://github.com/ClickHouse/ClickHouse/pull/112477) ([thevar1able](https://github.com/thevar1able))。
* バイナリエンコードされた型 (`Native`、`input_format_binary_decode_types_in_binary_format` を指定した `RowBinary`) から `Nested` カラムを読み取る際に、型をいったん型名に戻して再度パースする処理を行わなくなりました。また、不正なネストされた `Tuple` 型名は、ネストの深さに対して指数関数的な時間を費やした末に `TOO_SLOW_PARSING` で失敗するのではなく、構文エラーとして報告されるようになりました。[#112560](https://github.com/ClickHouse/ClickHouse/pull/112560) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* TimeSeries テーブルに対する PromQL クエリを高速化しました。`timeSeriesIdToGroup` は、連続する行が同じ系列 ID を持つ場合に前の行のグループを再利用するようになり、行ごとの ID のシリアライゼーションとハッシュ検索が不要になりました。[#113580](https://github.com/ClickHouse/ClickHouse/pull/113580) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。

<h3 id="other-performance-improvements">
  その他のパフォーマンス改善
</h3>

* Apache Arrow ライブラリを使用しない、`Arrow` および `ArrowStream` フォーマット向けのネイティブなリーダーとライターを実装し、余分なデータコピーや変換を不要にしました。現在はこれがデフォルト (設定 `input_format_arrow_use_native_reader` および `output_format_arrow_use_native_writer`) となっており、読み込みと書き込みのいずれも高速化されています。[#106522](https://github.com/ClickHouse/ClickHouse/pull/106522) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `nullIf(key, sentinel) = const` 述語を最適化し、キー範囲を構築することで、主キー、パーティション、スキップ索引による枝刈りが行えるようにしました。[#107308](https://github.com/ClickHouse/ClickHouse/pull/107308) ([adityaksolves](https://github.com/adityaksolves)).
* 各行を SipHash でハッシュする代わりに、行の値をキーとしてマルチセットを構築することで、\`INTERSECT ALL\` および \`EXCEPT ALL\` (\`INTERSECT\` と \`EXCEPT\` のデフォルトモード) のパフォーマンスを数倍向上させました。[#107649](https://github.com/ClickHouse/ClickHouse/pull/107649) ([Algunenano](https://github.com/Algunenano)).
* 単純な正規表現を LLVM でネイティブコードにコンパイルすることで、`match`、`extract`、`extractAll`、`replaceRegexpOne`、`replaceRegexpAll` 関数を高速化しました。この機能は新しい設定 `compile_regular_expressions` (デフォルトで有効) で制御されます。サポート対象外のパターンは、透過的に RE2 エンジンへフォールバックします。[#108004](https://github.com/ClickHouse/ClickHouse/pull/108004) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 短いオフセットの重複コピーを NEON でベクトル化することで、AArch64 (ARM) 上で、固定幅の整数カラムなどマッチオフセットが小さいカラムの ZSTD 伸長を高速化しました。たとえば AWS Graviton 4 では、`UInt64` カラムの伸長が最大で約 2.3 倍高速になります。[#108049](https://github.com/ClickHouse/ClickHouse/pull/108049) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 固定サイズかつ低カーディナリティのカラムにおける LZ4 の伸長速度を改善しました。[#108175](https://github.com/ClickHouse/ClickHouse/pull/108175) ([nickitat](https://github.com/nickitat)).
* blocked Myers のコードパスで行ごとのヒープ割り当てをなくすことで、ARM 上での中程度の長さの文字列に対する `levenshteinDistance` (および `editDistance`) のパフォーマンスを改善しました。[#108185](https://github.com/ClickHouse/ClickHouse/pull/108185) ([groeneai](https://github.com/groeneai)).
* `precise_float_parsing = 1` 使用時のテキストからの浮動小数点数のパースを高速化し、ほぼすべての入力でデフォルトのパーサーと同等以上の速度を実現しました。あわせて、同梱の `fast_float` ライブラリを v8.2.10 に更新しました。[#108205](https://github.com/ClickHouse/ClickHouse/pull/108205) ([Algunenano](https://github.com/Algunenano)).
* Base64 のエンコード／デコード関数が `simdutf` を使用するようになり、パフォーマンスが向上しました。[#108333](https://github.com/ClickHouse/ClickHouse/pull/108333) ([thevar1able](https://github.com/thevar1able)).
* 処理コストの高い高カーディナリティキーに対する `DISTINCT` を最適化しました。[#108366](https://github.com/ClickHouse/ClickHouse/pull/108366) ([nihalzp](https://github.com/nihalzp)).
* `errno` を保持しないコンパイラ最適化を有効にすることで、数学関数のパフォーマンスを改善しました。[#108628](https://github.com/ClickHouse/ClickHouse/pull/108628) ([nickitat](https://github.com/nickitat)).
* 実際に圧縮するのではなく圧縮サイズを解析的に算出することで、`T64` エンコードされたカラムに対する `estimateCompressionRatio` を高速化しました。[#109054](https://github.com/ClickHouse/ClickHouse/pull/109054) ([rienath](https://github.com/rienath)).
* JOIN で、左側テーブルの主キー索引またはスキップ索引を使用してグラニュールを枝刈りできるようになりました。[#109085](https://github.com/ClickHouse/ClickHouse/pull/109085) ([shankar-iyer](https://github.com/shankar-iyer)).
* H3 の Geo 関数 (`h3ToGeoBoundary`、`h3ToGeo`、`h3CellAreaM2`/`h3CellAreaRads2`、`geoToH3`) のパフォーマンスを改善しました。対になる正弦/余弦をまとめて計算し、座標変換における冗長な三角関数呼び出しを排除しています。結果は変わりません (ビット単位で同一) 。[#109399](https://github.com/ClickHouse/ClickHouse/pull/109399) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 比較処理と符号拡張のコードをブランチレス化することで、ワイド整数型 (`Int128`、`UInt128`、`Int256`、`UInt256`、および `Decimal128` などそれらをベースとする型) の比較 (`<`、`>`、`<=`、`>=`) を最大 7 倍、符号付き整数から `Int256` への変換を最大 7 倍 (符号が混在するデータの場合) 高速化しました。[#109474](https://github.com/ClickHouse/ClickHouse/pull/109474) ([raimannma](https://github.com/raimannma)).
* 非定数の `Nullable` 引数を 1 つだけ持つ関数では、新しい null マップを割り当ててマージするのではなく、引数の null マップを結果と共有するようになりました。[#110151](https://github.com/ClickHouse/ClickHouse/pull/110151) ([raimannma](https://github.com/raimannma)).
* 要素ごとの比較ループではなくベクトル化されたリダクションを使用することで、数値配列に対する関数 `arrayMin` および `arrayMax` のパフォーマンスを約 1.3〜1.5 倍改善しました。[#110163](https://github.com/ClickHouse/ClickHouse/pull/110163) ([raimannma](https://github.com/raimannma)).
* 入力ストリームが DISTINCT 対象カラムのプレフィックスでソートされている場合 (例: `SELECT DISTINCT a, b FROM table ORDER BY a`) の `DISTINCT` のパフォーマンスを改善しました。このようなクエリは最大 2.4 倍高速になります。[#110170](https://github.com/ClickHouse/ClickHouse/pull/110170) ([nihalzp](https://github.com/nihalzp)).
* `groupBitOr`/`groupBitAnd`/`groupBitXor` および分散系関数 (`varPop`、`varSamp`、`stddevPop`、`stddevSamp`、`skewPop`、`skewSamp`、`kurtPop`、`kurtSamp`、`covarPop`、`covarSamp`、`corr`) にベクトル化されたバッチ処理パスを追加しました。予測困難な条件で `-If` コンビネータを使用した場合は最大 4 倍、コンビネータなしの分散系関数では最大 3 倍高速化されます。[#110461](https://github.com/ClickHouse/ClickHouse/pull/110461) ([raimannma](https://github.com/raimannma)).
* テキスト索引の解析を最適化しました。[#110530](https://github.com/ClickHouse/ClickHouse/pull/110530) ([CurtizJ](https://github.com/CurtizJ)).
* 16 進数の検証と変換を 2 パスではなく 1 パスで行うことで、テキストからの `UUID` 値のパース (例: `LowCardinality(UUID)` への `JSONExtract`、`toUUID`、`CAST AS UUID`) を高速化しました。[#110625](https://github.com/ClickHouse/ClickHouse/pull/110625) ([groeneai](https://github.com/groeneai)).
* 固定幅整数カラムなど、マッチオフセットが小さいカラムを対象に、短いオフセットの重複コピーを SSSE3 `pshufb` でベクトル化することで、x86\_64 上での ZSTD の伸長を高速化しました ([#108049](https://github.com/ClickHouse/ClickHouse/pull/108049) で導入された AArch64 NEON 最適化の x86\_64 版です) 。[#110909](https://github.com/ClickHouse/ClickHouse/pull/110909) ([thevar1able](https://github.com/thevar1able)).
* CRC32 ハッシュ (`uniqExact` と同様) を使用し、行ごとの挿入処理をインライン化することで、数値型に対する `groupUniqArray` を最大 3 倍高速化しました。[#110917](https://github.com/ClickHouse/ClickHouse/pull/110917) ([raimannma](https://github.com/raimannma)).
* 浮動小数点カラムに対する minmax および基本的なカラム STATISTICS の効率を改善しました。[#111221](https://github.com/ClickHouse/ClickHouse/pull/111221) ([cv4g](https://github.com/cv4g)).
* `COUNT()` クエリの結果を、テキスト索引のカーディナリティのメタデータから直接返すようにしました。[#111494](https://github.com/ClickHouse/ClickHouse/pull/111494) ([ahmadov](https://github.com/ahmadov))。
* 128 ビットおよび 256 ビット型 (`Int128`、`UInt128`、`Int256`、`UInt256`、`Decimal128`、`Decimal256`) に対する `min` と `max` を高速化しました。多倍長整数型では最大 1.8 倍、多倍長 10 進数型では最大 3.4 倍高速になります。[#111965](https://github.com/ClickHouse/ClickHouse/pull/111965) ([raimannma](https://github.com/raimannma))。
* `system.query_log` への取り込みにおける性能低下を修正しました。`Settings` および `asynchronous_read_counters` の Map カラムの構築が以前より約 6 倍遅くなっていたため、多数の設定を変更したクエリを大量にログ記録するサーバーでは、`SYSTEM FLUSH LOGS query_log` が 180 秒のタイムアウトを超過する可能性がありました。[#112210](https://github.com/ClickHouse/ClickHouse/pull/112210) ([groeneai](https://github.com/groeneai))。
* テキスト索引に存在しないトークンをキャッシュするオプションを追加しました。[#112742](https://github.com/ClickHouse/ClickHouse/pull/112742) ([rorylshanks](https://github.com/rorylshanks))。
* 非同期ロギングで、上限付きのロックフリーキューを使用するようになりました。ログメッセージを書き込むスレッドが、ミューテックスでブロックされたり、ロギングスレッドを起床させたりすることはなくなります。[#112803](https://github.com/ClickHouse/ClickHouse/pull/112803) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* point 引数が `Point` 型 (または 2 つの数値要素からなる他の `Tuple`) のキーカラム全体である場合に、`pointInPolygon` で主キー索引を使用するようになりました。例えば、`coord` でソートされたテーブルに対する `pointInPolygon(coord, [...])` などが該当します。これまでは、2 つのスカラーのキーカラムを用いる `pointInPolygon((x, y), [...])` 形式のみが解析対象でした。[#112956](https://github.com/ClickHouse/ClickHouse/pull/112956) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `text_index_posting_list_apply_mode` のデフォルトが `lazy` になりました。これにより、`posting_list_codec` が設定されたテキスト索引では、テキスト索引クエリがポスティングリストをビットマップへ事前にマテリアライズせず、カーソルを用いてパック済みブロック単位でオンデマンドにデコードするようになります。[#113521](https://github.com/ClickHouse/ClickHouse/pull/113521) ([CurtizJ](https://github.com/CurtizJ))。
* タググループ ID が狭い範囲に収まる場合に、ハッシュベースの再マッピングを直接インデックス参照に置き換えることで、ベクトル化された TimeSeries のタグ変換を高速化しました。[#114244](https://github.com/ClickHouse/ClickHouse/pull/114244) ([fallintoplace](https://github.com/fallintoplace))。
* テキスト索引のマージ性能を改善しました。[#114525](https://github.com/ClickHouse/ClickHouse/pull/114525) ([CurtizJ](https://github.com/CurtizJ))。
* PromQL の集合演算子でコンパクトな存在マスクを使用するようにしました。[#115224](https://github.com/ClickHouse/ClickHouse/pull/115224) ([fallintoplace](https://github.com/fallintoplace))。
* システムテーブルのアタッチ時に、テーブルコメントを設定するためだけに各テーブルのメタデータ (フルカラム定義を含む) を 2 回コピーすることがなくなりました。[#115490](https://github.com/ClickHouse/ClickHouse/pull/115490) ([thevar1able](https://github.com/thevar1able))。
* すべての要素がゼロの PromQL 条件ベクトルに対する重複系列チェックを高速化しました。[#115822](https://github.com/ClickHouse/ClickHouse/pull/115822) ([fallintoplace](https://github.com/fallintoplace))。
* `DateTime64` 引数に対する `toUTCTimestamp`/`to_utc_timestamp` および `fromUTCTimestamp`/`from_utc_timestamp` を高速化し、以前のオーバーフロー修正によって低下していたスループットを回復しました。結果に変更はありません。[#115838](https://github.com/ClickHouse/ClickHouse/pull/115838) ([groeneai](https://github.com/groeneai))。
* x86-64 環境におけるランダムデータ生成 (`rand`、`rand64`、`randomString`、`randomFixedString`、`generateUUIDv4`、`generateUUIDv7`) の固定的なセットアップコストを削減しました。ブロックが小さい場合に特に効果があります。生成される値に変更はありません。[#116158](https://github.com/ClickHouse/ClickHouse/pull/116158) ([Algunenano](https://github.com/Algunenano)).
* `enable_function_early_short_circuit` 設定を使用すると、解析時に組み込みの `and` および `or` に対する早期の short-circuit 畳み込みを有効化できるようになりました。これにより、通常の型推論とセマンティック検証を維持したまま、実行する必要のない単一行の `count()` スカラーサブクエリをスキップできます。[#83505](https://github.com/ClickHouse/ClickHouse/pull/83505) ([fhw12345](https://github.com/fhw12345)).
* 自明にシリアライズ可能なベクトルに対して、バッファ I/O 呼び出しを 1 回で済ませるようにしました [#89842](https://github.com/ClickHouse/ClickHouse/pull/89842) ([Ergus](https://github.com/Ergus)).
* `optimize_or_like_chain` をデフォルトで有効化しました。[#94517](https://github.com/ClickHouse/ClickHouse/pull/94517) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* サーバーに多数のユーザーが存在する場合に、system.users から単一のユーザーレコードを取得する処理のパフォーマンスを改善しました。[#96699](https://github.com/ClickHouse/ClickHouse/pull/96699) ([alistairjevans](https://github.com/alistairjevans)).

<h2 id="improvements">
  改善
</h2>

<h3 id="query-and-sql-improvements">
  クエリおよび SQL の改善
</h3>

* `UNION` クエリの複数の分岐から参照されるマテリアライズド CTE は、一度だけマテリアライズされ、すべての分岐で共有されるようになりました。以前は各分岐がそれぞれ CTE のコピーを持ち、個別にインライン展開・評価されていました。[#102107](https://github.com/ClickHouse/ClickHouse/pull/102107) ([novikd](https://github.com/novikd))。
* プローブ側が小さいと推定される場合は JOIN ランタイムフィルタをスキップするようにしました。しきい値は新しい設定 `join_runtime_filter_min_probe_rows` (デフォルト `1000`) で制御します [#104860](https://github.com/ClickHouse/ClickHouse/pull/104860) ([vdimir](https://github.com/vdimir))。
* `EXPLAIN [PLAN] actions=1, compact=1, pretty=1` をデフォルトにしました。[#105036](https://github.com/ClickHouse/ClickHouse/pull/105036) ([Fgrtue](https://github.com/Fgrtue))。
* LIMIT BY の肯定形 (LimitByTransform、LimitBySortedStreamTransform) におけるキャンセルの遅延を短縮しました。KILL QUERY や Ctrl+C を実行すると、ステップ全体の完了を待たずに、1 チャンク以内で処理が中断されるようになりました。[#106070](https://github.com/ClickHouse/ClickHouse/pull/106070) ([rvasin](https://github.com/rvasin))。
* 自動並列レプリカで JOIN クエリがサポートされるようになりました。[#106073](https://github.com/ClickHouse/ClickHouse/pull/106073) ([nickitat](https://github.com/nickitat))。
* 新しい非同期メトリクス UntrackedMemory (`system.asynchronous_metrics` で確認可能) を追加しました。このメトリクスは、スレッドがすでに割り当て済みであるものの、グローバルなメモリ追跡カウンタにはまだ計上されていないメモリ量を示します。各スレッドは小さな割り当てをローカルに蓄積し、まとめて報告します。これにより、`MemoryTracking` とプロセスの実際のメモリ使用量との差異を説明しやすくなります。また、`MEMORY_LIMIT_EXCEEDED` エラーメッセージに未追跡メモリの量も含まれるようになり、クエリやサーバーがメモリ制限に達した原因を把握しやすくなりました。[#106386](https://github.com/ClickHouse/ClickHouse/pull/106386) ([mstetsyuk](https://github.com/mstetsyuk))。
* 挿入パイプラインの構築中に materialized view の `TO` ターゲットテーブルが書き込みを拒否して `INSERT` が失敗した場合 (たとえばターゲットが `View` である場合や、トランザクションをサポートしていない場合)、エラーメッセージにストレージエラーだけでなく、該当する materialized view とそのターゲットテーブルの名前も表示されるようになりました。[#107234](https://github.com/ClickHouse/ClickHouse/pull/107234) ([groeneai](https://github.com/groeneai))。
* 名前付き `Tuple` に対する `ALTER TABLE ... MODIFY COLUMN <col> Tuple(...)` は、サブフィールドを追加するだけの場合はメタデータのみの操作となり、トップレベルの `ADD COLUMN` と同等の速度で実行されるようになりました。この機能は `SET allow_metadata_only_named_tuple_alter = 1` で有効化できます。[#107305](https://github.com/ClickHouse/ClickHouse/pull/107305) ([amosbird](https://github.com/amosbird))。
* `MaterializedPostgreSQL` データベースエンジンに、作成時に指定する設定 `materialized_postgresql_use_extended_date_and_time_types` を追加しました。デフォルト (有効) では、PostgreSQL の `date`/`timestamp` カラムは `Date32`/`DateTime64` として推論されます。`CREATE DATABASE` 時にこの設定を `0` にすると、より範囲の狭い `Date`/`DateTime` 型として推論されます。この設定は `MaterializedPostgreSQL` テーブルエンジンには適用されません。[#107428](https://github.com/ClickHouse/ClickHouse/pull/107428) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `EXPLAIN PLAN` で、結合の推定結果行数がテーブル統計ではなくヒントやランダム化されたフォールバックに基づく場合、近似値 (`~~...`) として表示されるようになりました。これにより、結合順序の最適化に必要な信頼できる統計が不足しているプランを特定しやすくなります。[#107666](https://github.com/ClickHouse/ClickHouse/pull/107666) ([vdimir](https://github.com/vdimir))。
* `MergeTree` テーブルへの `INSERT` が、多数のパーツの書き込み中もクエリのキャンセルや `max_execution_time` に従うようになりました。これにより、強制終了後も長時間実行され続けることがなくなりました。[#107929](https://github.com/ClickHouse/ClickHouse/pull/107929) ([al13n321](https://github.com/al13n321))。
* `arrayFold` がクエリのキャンセルと `max_execution_time` を考慮するようになりました。以前は、非常に長い配列に対する fold (例: `arrayFold(acc, x -> arrayPushFront(acc, x), range(number), emptyArrayUInt64())`) は fold 全体を単一の関数呼び出し内で実行していたため中断できず、fold が完了するまで `KILL QUERY` や時間制限が無視されていました。[#108192](https://github.com/ClickHouse/ClickHouse/pull/108192) ([groeneai](https://github.com/groeneai)).
* クエリ実行前のフェーズごとの `ProfileEvents` として、`QueryParseMicroseconds`、`QueryAnalysisMicroseconds`、`QueryPlanBuildMicroseconds`、`QueryPipelineBuildMicroseconds` を追加しました。これらにより、クエリ実行前のどの段階 (パース、解析、クエリプランのビルド、パイプラインのビルド) で時間がかかっているかを把握できます。`system.query_log` および `system.events` で参照できます。[#108282](https://github.com/ClickHouse/ClickHouse/pull/108282) ([jrdi](https://github.com/jrdi)).
* `max_query_size` を超えるテーブルメタデータを生成する `ALTER TABLE` 操作を事前に拒否するようになりました。これにより、DDL の分散やレプリカの復旧などのコンポーネントがテーブルを読み込めなくなる事態を防ぎます。[#108283](https://github.com/ClickHouse/ClickHouse/pull/108283) ([lockie](https://github.com/lockie)).
* デカルト結合およびアナライザが計画する定数述語の結合向けに `ConstantJoin` を追加しました。これにより、アナライザ使用時に `join_algorithm` 設定との非互換が原因でこれらのクエリが失敗することがなくなりました。[#108289](https://github.com/ClickHouse/ClickHouse/pull/108289) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* `system.documentation` に、各エンティティのドキュメントが定義されているソースファイルのパスを格納する `source` カラムを追加しました。また、このテーブルには圧縮コーデック、プロファイルイベント、現在のメトリクス、非同期メトリクス、およびシステムテーブル自体 (カラムを含む) のドキュメントも含まれるようになり、設定のドキュメントには型とデフォルト値が記載されるようになりました。[#108346](https://github.com/ClickHouse/ClickHouse/pull/108346) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* WHERE で `table` および `database` のフィルタを指定すると、`system.iceberg_history` は一致したデータベースのみを列挙するようになりました。サーバー上に無関係なリモートデータベースが多数ある場合に、処理時間を短縮できます。[#108492](https://github.com/ClickHouse/ClickHouse/pull/108492) ([Diskein](https://github.com/Diskein)).
* クエリパラメータ (`{name:Type}` による置換) を設定値として使用できるようになりました。クエリ (`SELECT` や `INSERT` など) の `SETTINGS` 句と、単独の `SET` クエリの両方で使用できます。例: `SELECT ... SETTINGS max_threads = {threads:UInt64}`、`SET max_threads = {threads:UInt64}`。[#108760](https://github.com/ClickHouse/ClickHouse/pull/108760) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* EXPLAIN WHATIF でスキップインデックスを組み合わせた場合の効果を計算できるようになりました。適用可能なすべての既存の仮想インデックスの効果の共通部分として、データ比率を表示します。[#108934](https://github.com/ClickHouse/ClickHouse/pull/108934) ([yariks5s](https://github.com/yariks5s)).
* CTE が 1 つだけのクエリも、複数の CTE を持つクエリと同じ改行とインデントでフォーマットされるようになりました。以前は `WITH a AS (...)` では CTE が `WITH` と同じ行に置かれていましたが、CTE が 2 つ以上の場合は `WITH` が独立した行に置かれ、各 CTE がインデントされていました。[#109092](https://github.com/ClickHouse/ClickHouse/pull/109092) ([groeneai](https://github.com/groeneai)).
* `File` テーブルエンジン経由で読み込むローカルの Parquet ファイルで Query Condition Cache をサポートしました (以前はオブジェクトストレージとデータレイクのみ対応) 。[#109247](https://github.com/ClickHouse/ClickHouse/pull/109247) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* リモート (オブジェクトストレージ) の Parquet ファイルに対する Query Condition Cache のキーとして、パスに加えて ETag も使用するようにしました。これにより、オブジェクトを同じ場所で上書きした場合に、古いキャッシュ結果が返されることがなくなりました。[#109310](https://github.com/ClickHouse/ClickHouse/pull/109310) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `ON` 条件で等値比較されている `INNER JOIN` キーを修飾なしで参照した場合 (例: `SELECT id FROM a INNER JOIN b ON a.id = b.id`) 、両側が同じ値を持つことが保証されているため、あいまいな識別子として報告されなくなりました。[#109366](https://github.com/ClickHouse/ClickHouse/pull/109366) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `QBit` に対する転置版の距離関数 (`L2DistanceTransposed`、`cosineDistanceTransposed`、`dotProductTransposed`、およびそれらの量子化版である `L2DistanceTransposedQuantized`、`cosineDistanceTransposedQuantized`、`dotProductTransposedQuantized`) が、検索対象の次元数より長い参照ベクトルを受け付けるようになりました。余分な末尾の要素は無視されます。これにより、フルサイズのクエリベクトルを事前にスライスすることなく、次元削減 (Matryoshka) 検索にそのまま再利用できます。[#109388](https://github.com/ClickHouse/ClickHouse/pull/109388) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 分散クエリが常に既知のクライアントバージョンを保持していることを確認するサニティチェックを追加しました。バージョン 0 をリモートシャードに暗黙的に転送するのではなく、論理エラーをスローします。サーバー起点のクエリ (バックグラウンド flush、ストリーミングコンシューマー、Dictionary の再読み込み、非同期挿入の flush) は、イニシエーターのバージョンとしてサーバー自身のバージョンを報告するようになりました。[#109408](https://github.com/ClickHouse/ClickHouse/pull/109408) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* MergeTree 系テーブルエンジンに対するミューテーション操作の WHERE 句で、修飾付きカラム名を使用した場合の問題を修正しました。[#109491](https://github.com/ClickHouse/ClickHouse/pull/109491) ([Michicosun](https://github.com/Michicosun)).
* 分散クエリプラン (`make_distributed_plan`) で、パーティション指定のないウィンドウ関数 (`OVER (ORDER BY ...)`) をサポートしました。これまでは `WindowStep` をリモート実行用にシリアライズできなかったため、ウィンドウ関数を含むクエリはすべて失敗していました。なお、`PARTITION BY` を含むウィンドウは現時点では引き続き拒否されます。[#109802](https://github.com/ClickHouse/ClickHouse/pull/109802) ([VighneshPath](https://github.com/VighneshPath)).
* `ALTER DATABASE ... MODIFY SETTING = 'xxx'` を使用して、one-lake カタログの一部の認証設定を変更できるようになりました。[#110019](https://github.com/ClickHouse/ClickHouse/pull/110019) ([alesapin](https://github.com/alesapin)).
* `IN` の右辺にあるサブクエリの単一カラムが、左辺の引数より 1 次元深い配列である場合、わかりにくい型不一致エラーで失敗するのではなく、 (配列リテラルや配列を返す関数と同様に) その配列の要素の集合として解釈されるようになりました。例えば、`x IN (SELECT groupArray(x) FROM ...)` が動作するようになりました。[#110169](https://github.com/ClickHouse/ClickHouse/pull/110169) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* TopK 動的フィルタリング (`ORDER BY ... LIMIT k`) で高速化されたクエリが、クエリ条件キャッシュをより有効に活用できるようになりました。遅延マテリアライゼーションが適用される場合でもキャッシュにエントリが格納されるほか、同じ `WHERE` 述語を持つ通常のクエリが以前に書き込んだエントリも再利用できます。[#110507](https://github.com/ClickHouse/ClickHouse/pull/110507) ([shankar-iyer](https://github.com/shankar-iyer)).
* `SHOW CREATE TABLE` (および `SHOW CREATE VIEW` / `SHOW CREATE DICTIONARY`) で、要求されたテーブルが存在しない場合に、`SELECT` クエリと同様にエラーメッセージで似た名前のテーブルを提案するようになりました。[#110633](https://github.com/ClickHouse/ClickHouse/pull/110633) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* STREAM BOUNDED 修飾子を追加しました。この修飾子を指定すると、ストリーミングクエリは最初のスナップショットのみを読み取り、更新を購読せずに終了します。[#110653](https://github.com/ClickHouse/ClickHouse/pull/110653) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* PromQL クエリにおけるクエリ結果キャッシュを修正しました。`promql` 方言では非決定論的関数のチェックが行われず、`now()` を基準とした古い結果が返される可能性がありました。また、Prometheus HTTP API (`/api/v1/query`、`/api/v1/query_range`) ではキャッシュエントリがまったく保存されていませんでした。[#110887](https://github.com/ClickHouse/ClickHouse/pull/110887) ([nikitamikhaylov](https://github.com/nikitamikhaylov))。
* `EXPLAIN ANALYZE` が、結合の左右それぞれの行数、一致率、ファンアウトに加え、ハッシュテーブルのメモリ使用量やスピルなどのアルゴリズム固有の状態を報告するようになりました。追加の記録処理が必要な一致メトリクスを収集するには、`matches = 1` を指定してください。[#110892](https://github.com/ClickHouse/ClickHouse/pull/110892) ([Fgrtue](https://github.com/Fgrtue))。
* クエリが実行時にプロセッサを削除する場合 (遅延読み取りを伴う `FINAL` や外部ソートなど) に、サーバーがクラッシュする可能性があったパイプラインエグゼキューターの heap-use-after-free を修正しました。この問題は AST fuzzer によって発見されました。[#111017](https://github.com/ClickHouse/ClickHouse/pull/111017) ([groeneai](https://github.com/groeneai))。
* 共有ストレージスナップショット (設定 `enable_shared_storage_snapshot_in_query`) を使用するクエリがスナップショットからデータパーツを除去した際に発生する use-after-free (セグメンテーションフォールト) を修正しました。たとえば、クエリ内の別の箇所が同時に読み取っている `MergeTree` テーブルを、ストリーミングサブクエリも読み取るケースが該当します。[#111192](https://github.com/ClickHouse/ClickHouse/pull/111192) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 空の `MergeTree` テーブルからの読み取りなど、プランニング時点でソースが行を生成しないことが確定しているクエリについて、分散クエリプラン (`make_distributed_plan`) をサポートしました。従来、このようなクエリは `SUPPORT_IS_DISABLED` で失敗していました。[#111941](https://github.com/ClickHouse/ClickHouse/pull/111941) ([groeneai](https://github.com/groeneai))。
* 複数の `AND` 条件を持つ `WHERE` 句で、最後の連言以外によって除外されたグラニュールが *クエリ条件キャッシュ* に登録されない問題を修正しました。[#112083](https://github.com/ClickHouse/ClickHouse/pull/112083) ([shankar-iyer](https://github.com/shankar-iyer))。
* バケット化された共有データシリアル化 (map\_with\_buckets および advanced) で JSON カラムを書き込む際、すべてのバケットを同時にマテリアライズするのではなく、書き込み時に共有データを 1 バケットずつ分割するようにし、ピークメモリを削減しました。この改善が特に効果を発揮するのは Array(JSON) カラムです。スカラー JSON では共有データがグラニュール単位 (上限は index\_granularity\_bytes) で分割されるため削減効果は小さいものの、Array(JSON) では単一のグラニュールに多数のネストされた行、つまり大量の共有データが含まれ得るため、1 バケットずつ分割することでピークメモリが大幅に低減されます [#112172](https://github.com/ClickHouse/ClickHouse/pull/112172) ([Avogar](https://github.com/Avogar))。
* メモリ予約スケジューリング (experimental) で、上限を超える予約増加に必要な領域が保留中のメモリ解放によって確保される場合は、割り当てを退避しないようになりました。退避の判断は進行中の減少が反映されるまで待つようになったため、メモリ逼迫時に不要なクエリの強制終了が発生しなくなります。[#112299](https://github.com/ClickHouse/ClickHouse/pull/112299) ([serxa](https://github.com/serxa))。
* `SYSTEM DROP FILESYSTEM CACHE` がキャッシュメタデータキーを並列に削除するようになり、大規模なファイルシステムキャッシュのクリアが高速化されました。新たに追加されたファイルキャッシュ設定 `drop_cache_threads` で削除ワーカー数を指定できます (デフォルトは 16) 。値を 1 にすると、削除はクエリスレッド内で実行されます。[#112532](https://github.com/ClickHouse/ClickHouse/pull/112532) ([kssenii](https://github.com/kssenii))。
* カラム宣言の修飾子 (`COMMENT`、`CODEC`、`STATISTICS`、`TTL`、`COLLATE`、`PRIMARY KEY`、およびカラムごとの `SETTINGS`) を、`CREATE TABLE` において任意の順序で記述できるようになりました (各修飾子は最大 1 回まで) 。以前は決められた 1 つの順序しか受け付けられず、たとえば `x UInt64 CODEC(ZSTD) COMMENT 'text'` は構文エラーになっていました。`ALTER TABLE ... ADD COLUMN` / `MODIFY COLUMN` においても、サポートされている修飾子 (`COMMENT`、`CODEC`、`STATISTICS`、`TTL`、およびカラムごとの `SETTINGS`) を任意の順序で記述できます。また、`ADD COLUMN` 内のカラムごとの `SETTINGS` や、`ADD COLUMN` / `MODIFY COLUMN` 内で宣言された `STATISTICS` は、これまで警告なしに破棄されていましたが、正しく適用されるようになりました。さらに、これらの `ALTER` コマンド内の `COLLATE` と `PRIMARY KEY` は、これまで警告なしに無視されていましたが、例外をスローするようになりました。[#112788](https://github.com/ClickHouse/ClickHouse/pull/112788) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 多数のテーブルにマッチする `Merge` テーブル (または `merge` テーブル関数) に対するクエリが、テーブルごとのクエリプランの構築中にも `KILL QUERY` および `max_execution_time` に反応するようになりました。これまでは、すべての子テーブルのプランニングが完了するまで反応しませんでした。[#113415](https://github.com/ClickHouse/ClickHouse/pull/113415) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `timeout_overflow_mode = 'break'` の設定で `max_execution_time` を超過した `Merge` テーブルからの `SELECT` は、残りのマッチしたテーブルに対するクエリプランの構築を停止するようになりました。これまでは、停止する前にマッチしたすべてのテーブルに対して完全なクエリ解析を実行していました。クエリは、このモードのドキュメントに記載されているとおり、エラーなしで終了します。[#113642](https://github.com/ClickHouse/ClickHouse/pull/113642) ([groeneai](https://github.com/groeneai)).
* `MergeTree` の読み取り中にカラムの宣言された型と実際のデータが食い違う場合 (型の由来が混在している場合。たとえばミューテーションが完了していない `ALTER TABLE ... MODIFY COLUMN` の後など) 、サーバーは未検査のキャストを行う代わりに、カラム名と両方の構造を示す明確な例外を報告するようになりました。以前は、デバッグビルドやサニタイザービルドではカラム名を含まない `Bad cast from type A to B` だけを出力して異常終了し、リリースビルドでは不整合なメモリを何の通知もなく走査していました。[#114087](https://github.com/ClickHouse/ClickHouse/pull/114087) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `ie_join` をデフォルトで有効化しました。`join_algorithm` のデフォルト値は `direct,parallel_hash,hash,ie_join` になります。`ON` 句が不等価条件のみ (結合対象テーブルの式同士の `<`、`<=`、`>`、`>=` による 2 つの比較) で構成される `JOIN` は、フィルター付きの `CROSS JOIN` ではなく、ソートベースの IEJoin アルゴリズムで実行されるようになりました。また、このような条件を持つ `LEFT`/`RIGHT`/`FULL`/`SEMI`/`ANTI` 結合もサポートされます。`ie_join` はリストの最後にあるため、他のアルゴリズムが適用できない場合にのみ使用されます。[#114327](https://github.com/ClickHouse/ClickHouse/pull/114327) ([vdimir](https://github.com/vdimir)).
* 非同期の接続確立およびリモートクエリ実行に使用されるファイバー (ヘッジリクエスト、`async_socket_for_remote`、`async_query_sending_for_remote`) に OpenTelemetry のトレースコンテキストを伝播するようにしました。分散クエリにおけるリモートクエリのスパンは、クライアントから渡されたトレースコンテキストに直接紐付けられるのではなく、イニシエーターの `Connection::sendQuery` スパンの子として正しく配置されるようになりました。また、非同期タスクの実行ごとに個別のスパンが生成されるようになりました。[#114813](https://github.com/ClickHouse/ClickHouse/pull/114813) ([diegomestre2](https://github.com/diegomestre2)).
* `DROP DATABASE` は、ロード依存関係と参照依存関係の両方 (以前はロード依存関係のみ) に基づき、トポロジカル順序の逆順でテーブルを削除するようになりました。これにより、`DROP DATABASE` の途中でクラッシュしても、依存先がすでに削除されたテーブルが残ることはありません。[#114952](https://github.com/ClickHouse/ClickHouse/pull/114952) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* PostgreSQL 形式の正規表現マッチ演算子をサポートしました: `~`(`match` 関数のエイリアス)、`~*`(大文字と小文字を区別しない照合によるマッチ)、`!~` および `!~*`(否定)。PostgreSQL 互換プロトコル経由で ClickHouse に接続した場合に `psql` の `\d`、`\dt`、`\dv` コマンドが動作するようになったほか、クエリが失敗しても接続が切断されなくなりました。[#115066](https://github.com/ClickHouse/ClickHouse/pull/115066) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `EXPLAIN WHATIF` で、経験的推定がスキップされた理由が表示されるようになりました。理由は、`empirical_status` が `unsupported` の場合に表示される新しい `empirical_reason` 行に示されます。[#115140](https://github.com/ClickHouse/ClickHouse/pull/115140) ([yariks5s](https://github.com/yariks5s))。
* `join_algorithm` 設定で有効化されたどの結合アルゴリズムでも `JOIN` を実行できない場合、エラーメッセージでは、いずれも動作しなかったことだけでなく、試行されたアルゴリズムと、失敗した JOIN の厳密性および種類が示されるようになりました。[#115226](https://github.com/ClickHouse/ClickHouse/pull/115226) ([elkinal](https://github.com/elkinal))。
* 参照ベクトルが整数配列リテラルの場合(例: `ORDER BY L2Distance(vec, [1, 2])`)でも、ベクトル検索クエリでベクトル類似度索引を使用できるようになりました。以前は、このようなクエリは警告なく総当たりスキャンにフォールバックしていました。[#115255](https://github.com/ClickHouse/ClickHouse/pull/115255) ([rschu1ze](https://github.com/rschu1ze))。
* ロックファイルを作成した `BACKUP` の試行が、何も書き込まないうちに失敗した場合(宛先の確保中・アーカイブのオープン中のいずれであっても)、宛先にロックファイルが残らなくなりました。従来は、このようなロックに一致するバックアップは以降存在し得ないため、ファイルを手動で削除するまで同じ宛先へのリトライはすべて失敗していました。また、`S3` および `Azure` の宛先へのバックアップでもロックが排他的に作成されるようになり、別のバックアップに属するロックは、ストレージが返したエラーそのままではなく、同時実行中のバックアップとして報告されるようになりました。[#115387](https://github.com/ClickHouse/ClickHouse/pull/115387) ([jkartseva](https://github.com/jkartseva))。
* サンプリング(`opentelemetry_start_trace_probability`)によって開始されたトレースがクエリのクライアント情報に書き戻されるようになりました。これにより、リモートおよび分散のセカンダリクエリや DDL エントリが、別々のトレースを開始せずに同じトレースに参加するようになりました。[#115619](https://github.com/ClickHouse/ClickHouse/pull/115619) ([diegomestre2](https://github.com/diegomestre2))。
* テーブルの格納場所を自ら管理する Amazon S3 Tables をバックエンドとする Iceberg テーブルに対する `CREATE TABLE` を修正しました。[#115652](https://github.com/ClickHouse/ClickHouse/pull/115652) ([scanhex12](https://github.com/scanhex12))。
* アダプティブな `GROUP BY` 集約(`enable_adaptive_aggregator`)は、出現頻度の低いキーの処理を後回しにすることが有効かどうかを計測し、そのキーや集約関数の引数が大きすぎてコピーのコストに見合わない場合は通常のアルゴリズムに戻るようになりました。これにより、サイズの大きい文字列カラムに対する集計(例: ユーザーごとの `min(URL)`)が、通常のアルゴリズムと同等の速度とメモリ使用量で実行されます。また、各スレッドの凍結テーブルをバイト数で制限する `adaptive_aggregator_freeze_threshold_bytes` を追加しました(これとキー数のしきい値のうち、先に到達した方でテーブルが凍結されます)。[#115755](https://github.com/ClickHouse/ClickHouse/pull/115755) ([nihalzp](https://github.com/nihalzp))。
* 最終集約の出力に `LIMIT n` 付きの `ORDER BY` が続く場合に、2 レベルの各バケットの上位 `n` グループのみをマテリアライズする実行計画の最適化について、その有効・無効を切り替える設定 `query_plan_aggregation_bucket_top_k`(デフォルトで有効)を追加しました。この最適化は `EXPLAIN` の出力にも表示されるようになりました。[#116124](https://github.com/ClickHouse/ClickHouse/pull/116124) ([nihalzp](https://github.com/nihalzp))。
* パラメーター化ビューに対する `DESCRIBE` クエリのサポートを改善しました。また、新しいアナライザーで、スカラー式内でのパラメーター化ビューの使用をサポートしました。[#68978](https://github.com/ClickHouse/ClickHouse/pull/68978) ([novikd](https://github.com/novikd))。
* `SELECT * FROM t WHERE id` のようなクエリで、`id` カラムに対するスキップ索引が使用されるようになりました。[#89603](https://github.com/ClickHouse/ClickHouse/pull/89603) ([adityachopra29](https://github.com/adityachopra29))。
* `query_plan_merge_expression_into_join` 設定を追加しました。これにより、結合順序の最適化時に Expression ステップを JOIN ステップにマージできるようになります。結合をラップするサブクエリをまたいで結合順序を入れ替えられるようになるため (例: 計算カラムを含むサブクエリ内に JOIN がある場合) 、複雑な結合ツリーをより効果的に最適化できます。[#98533](https://github.com/ClickHouse/ClickHouse/pull/98533) ([vdimir](https://github.com/vdimir))。
* `system.grants` テーブルに `is_wildcard` カラムを追加しました。このカラムは、権限がワイルドカードによるプレフィックス一致 (例: `GRANT SELECT ON db*.*`) を使用しているかどうかを示します。これまでは、同じ名前に対するワイルドカード権限と完全一致の権限を `system.grants` 上で区別できませんでした。[#98577](https://github.com/ClickHouse/ClickHouse/pull/98577) ([il9ue](https://github.com/il9ue))。

<h3 id="functions-and-data-types-improvements">
  関数とデータ型
</h3>

* 新しい設定 `allow_lossy_numeric_supertype` を追加しました (デフォルトでは無効) 。有効にすると、損失なく変換できる共通型が存在しない数値引数 (例えば `Decimal` と `Float64`、あるいは `Int64` と `Float64`) に対して `if`、`multiIf`、`coalesce`、`ifNull`、`array`、`map` を使用した場合、結果の型が `Variant` ではなく数値の上位型 `Float64` に解決されます。これにより、結果を `sum`、`avg`、`min`、`max` などの集約関数で使用できるようになります。また、関連する集約関数のエラーメッセージにこの設定名が表示されるようになりました。[#107236](https://github.com/ClickHouse/ClickHouse/pull/107236) ([groeneai](https://github.com/groeneai))。
* `SOME` / `ALL` 配列量化子 (`expr OP SOME(array)` / `expr OP ALL(array)`) が、キーワード比較述語 `IS DISTINCT FROM` および `IS NOT DISTINCT FROM`、ならびに文字列検索述語 `LIKE`、`ILIKE`、`NOT LIKE`、`NOT ILIKE`、`REGEXP` にも対応しました。これらは `arrayExists` / `arrayAll` に書き換えられます。[#107454](https://github.com/ClickHouse/ClickHouse/pull/107454) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* パース時の JSON オブジェクトのサイズを制限する `input_format_json_max_object_size` 設定を追加しました。[#107669](https://github.com/ClickHouse/ClickHouse/pull/107669) ([Avogar](https://github.com/Avogar))。
* SQLite データベースのオープンに失敗した場合 (例えば、`sqlite` テーブル関数や `SQLite` データベースエンジンに開けないパスが指定された場合) に発生していたメモリリークを修正しました。[#107807](https://github.com/ClickHouse/ClickHouse/pull/107807) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `QBit` データ型で `length` 関数が使用できるようになりました。ベクトルの次元を定数として返します。[#108071](https://github.com/ClickHouse/ClickHouse/pull/108071) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `QBit` から `Array` への `CAST` をサポートし、元のベクトルを復元できるようにしました。これは既存の `Array` から `QBit` への変換の逆操作です。[#108072](https://github.com/ClickHouse/ClickHouse/pull/108072) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `MySQL` データベースエンジン、テーブルエンジン、およびテーブル関数で、MySQL の空間カラム型 (`LINESTRING`、`POLYGON`、`MULTILINESTRING`、`MULTIPOLYGON`、および汎用の `GEOMETRY`) が、`String` ではなく対応する ClickHouse の幾何型にマッピングされるようになりました。この動作は `mysql_datatypes_support_level` 設定の新しい `geometry` フラグで制御され、デフォルトで有効です。`POINT` は従来どおり常に `Point` に変換されます。汎用の `GEOMETRY` カラムは、各幾何型を包括する `Geometry` 型にマッピングされます。ClickHouse に対応する型がないサブタイプ (`MULTIPOINT`、`GEOMETRYCOLLECTION`) の値は、読み取り時に例外がスローされます。[#108944](https://github.com/ClickHouse/ClickHouse/pull/108944) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 浮動小数点数のパースで、精密な (最も近い表現可能な値を求める) アルゴリズムをデフォルトで使用するようにし、`precise_float_parsing` 設定を `toFloat*`/`CAST` だけでなく、入力フォーマット (CSV、TSV、JSON、VALUES など) や数値リテラルにも適用するようにしました。従来の動作 (精度は劣るものの、場合によっては高速) に戻すには、`precise_float_parsing = 0` を設定してください。[#109086](https://github.com/ClickHouse/ClickHouse/pull/109086) ([Algunenano](https://github.com/Algunenano))。
* 固定サイズ要素の `Array` を `String` として `reinterpret` できるようになりました。これは既存の、`String`/`FixedString` を `Array` として `reinterpret` する操作の逆操作です。[#109383](https://github.com/ClickHouse/ClickHouse/pull/109383) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 次元が同じであれば、要素型やストライドが異なる `QBit` 型間でも `CAST` できるようになりました (例: `QBit(Float32, N)` からの `CAST(x AS QBit(Float64, N))`) 。ストライドのみの変更は可逆です。要素型の変更は対応する `Array` の変換セマンティクスに従います (例: `Float32` から `BFloat16` への変換では精度が失われる可能性があり、`accurateCast` / `accurateCastOrNull` は正確に表現できない行を拒否します) 。[#109387](https://github.com/ClickHouse/ClickHouse/pull/109387) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 関数 `quantizeBFloat16ToInt8` および `dequantizeInt8ToBFloat16` は、既存のスカラー用オーバーロードに加えて、`Array` および `QBit` の引数も受け付けるようになりました。この場合、Lloyd-Max コーデックをベクトル全体に適用し、対応する要素型の `Array`/`QBit` を返します。[#109398](https://github.com/ClickHouse/ClickHouse/pull/109398) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `parseDateTime` / `parseDateTime64` (およびその `OrZero` / `OrNull` 版) の MySQL 形式の書式指定子 `%f` は、これまでのようにちょうど 6 桁を必須とせず、小数点以下 1〜6 桁を受け付けるようになりました。値は MySQL の `STR_TO_DATE` と同様に、左詰めのマイクロ秒として解釈されます。また、組み込み関数ドキュメントの例で `PrettyCompact` テーブルの表示が崩れていた問題も修正しました。[#109421](https://github.com/ClickHouse/ClickHouse/pull/109421) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `basic` 統計のサブ統計 `NullCount` の名称を `DefaultCount` に変更しました。`build` は `Nullable` カラムの `NULL` 行を数えるのではなく、`IColumn::getNumberOfDefaultRows` を用いて、カラム型固有のデフォルト値に等しい行を数えるようになりました。[#109977](https://github.com/ClickHouse/ClickHouse/pull/109977) ([hanfei1991](https://github.com/hanfei1991)).
* あまり使用されない混合型の組み合わせ (`Decimal` とビット幅の異なる整数、および `Int128`/`UInt128`/`Int256`/`UInt256` を含む組み合わせ) に対する比較演算と算術演算を、型の組み合わせごとに専用のコンパイル済みカーネルを用意するのではなく、共通型に変換してから実行するようにし、バイナリサイズを約 10.5 MB 削減しました。同一型の組み合わせ、よく使われる組み合わせ、およびメモリ律速の `plus`/`minus`/`multiply` については、引き続き専用カーネルを使用します。結果、結果の型、例外的なケースの挙動に変更はありません。[#110131](https://github.com/ClickHouse/ClickHouse/pull/110131) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `SQLite` テーブルエンジンまたは `sqlite` テーブル関数からの読み取り時に、SQLite データベースが別の接続によってロックされていても、ビジースピンで CPU コアを 1 つ丸ごと占有することがなくなりました。読み取りはロックの待機中アイドル状態となり、引き続きキャンセルも可能です。[#110248](https://github.com/ClickHouse/ClickHouse/pull/110248) ([groeneai](https://github.com/groeneai)).
* ログおよび例外メッセージ内の経過時間、レート、比率の値を 3 桁に丸め、`1.345844286 sec.` のような数値が元の精度のまま出力されないようにしました。[#110277](https://github.com/ClickHouse/ClickHouse/pull/110277) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* サイズストリームが分離された `String` カラムを `MergeTree` から読み取る際、先頭の行をスキップした後に、誤ったデータが返されたり、サブストリームキャッシュの境界外が読み取られたりする可能性があった問題を修正しました。また、map 形式の shared-data シリアライゼーションで格納された `JSON` サブオブジェクトに同時実行または繰り返しの読み取りでアクセスした際、誤ったデータが返される可能性があった問題も修正しました。[#110471](https://github.com/ClickHouse/ClickHouse/pull/110471) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `PostgreSQL` テーブルエンジンおよび `postgresql` テーブル関数で `SETTINGS` 句をサポートし (例: `SETTINGS postgresql_connection_pool_size = 50`) 、`MySQL` エンジンと同等の機能を備えました。[#110614](https://github.com/ClickHouse/ClickHouse/pull/110614) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 関数 `bitmaskToArray` と `bitmaskToList` が `(U)Int128` および `(U)Int256` の引数をサポートするようになりました。また、関数 `bitPositionsToArray` は、大きな整数の引数に対して、最上位のセットビットの位置ではなく、セットビットの数に比例した時間で実行されるようになりました。[#110743](https://github.com/ClickHouse/ClickHouse/pull/110743) ([raimannma](https://github.com/raimannma))。
* 負の数を含む符号付き固定幅値に対する GCD コーデックの処理を修正しました。従来は符号付きの値から直接除数を計算していたため、共通の除数を検出できず、符号付き整数カラムおよび decimal カラムの圧縮効率が大幅に低下する場合がありました。現在は、符号付き型では絶対値から除数を計算し、符号なし型および伸長処理については従来の動作を維持します。[#113798](https://github.com/ClickHouse/ClickHouse/pull/113798) ([kshcherbatov](https://github.com/kshcherbatov))。
* `PARTITION BY` を含むウィンドウ関数が `make_distributed_plan` 有効時にも動作するようになりました。プランの構成が許す場合、ウィンドウは、各バケットが完全なパーティションを受け取る形で複数のバケットにわたって並列に実行されます。[#114111](https://github.com/ClickHouse/ClickHouse/pull/114111) ([VighneshPath](https://github.com/VighneshPath))。
* external な nullable 固定幅集約メソッドで 64 ビットハッシュ関数を使用するようになりました (カーディナリティが非常に高い集約で深刻なハッシュ衝突が発生するのを防ぎます) 。[#114210](https://github.com/ClickHouse/ClickHouse/pull/114210) ([nickitat](https://github.com/nickitat))。
* `LowCardinality` カラムに対する `x IN (subquery)` が、`x IN (literal list)` と同じ型である `LowCardinality(UInt8)` を返すようになりました。従来はこの 2 つの形式が異なる型を返していたため、このような `IN` を含む分散プランでは、プランの型チェックに特別な処理が必要でした。[#114229](https://github.com/ClickHouse/ClickHouse/pull/114229) ([davenger](https://github.com/davenger))。
* `JSON` データ型、`JSONExtract`、`isValidJSON` で、64 ビットの範囲を超える整数のパースをサポートしました。このような値によってドキュメント全体が拒否されることはなくなり、`Int128`/`UInt256` などのワイド整数型として読み込まれます。[#114379](https://github.com/ClickHouse/ClickHouse/pull/114379) ([Avogar](https://github.com/Avogar))。
* OpenSearch、Elasticsearch、SolR、Lucene との互換性を高めるため、テキスト索引のトークナイザー `array` のエイリアスとして `keyword` を追加しました。[#115507](https://github.com/ClickHouse/ClickHouse/pull/115507) ([rschu1ze](https://github.com/rschu1ze))。
* 関数 `toDateOrNull`、`toDateTimeOrNull`、`toDateTime64OrNull` が、すべてのネイティブ整数型の引数を受け付けるようになりました (`toDate`、`toDateTime`、`toDateTime64` と同様に解釈され、任意でタイムゾーン引数を指定できます) 。結果の型の範囲外の値に対しては `NULL` を返します。例えば、`toDateTimeOrNull(1583851242, 'Asia/Shanghai')` は `2020-03-10 22:40:42` を返し、`toDateTimeOrNull(4294967296)` は `NULL` を返します。[#79791](https://github.com/ClickHouse/ClickHouse/pull/79791) ([jitendra1411](https://github.com/jitendra1411))。

<h3 id="storage-data-lakes-and-object-storage-improvements">
  ストレージ、データレイク、オブジェクトストレージ
</h3>

* ファイルシステムキャッシュのエビクション動作に関するオプトイン方式の Prometheus メトリクス (`filesystem_cache_evictions_total`、`filesystem_cache_evicted_bytes_total`、`filesystem_cache_evicted_segment_hits`、`filesystem_cache_evicted_segment_size_bytes`、および `user_id` ラベル付きのユーザーごとのバリアント) を追加しました。これらはキャッシュごとに `system.dimensional_metrics`、`system.histogram_metrics`、および Prometheus エンドポイントを通じて公開されます。有効化はキャッシュのディスク設定 `expose_prometheus_eviction_metrics` および `expose_prometheus_eviction_metrics_per_user` (いずれもデフォルトで無効) で制御でき、`SYSTEM RELOAD CONFIG` により実行時に切り替えられます。[#105020](https://github.com/ClickHouse/ClickHouse/pull/105020) ([sacheendra](https://github.com/sacheendra))。
* 対象テーブルが `MergeTree` ファミリーのエンジンである場合、`Alias` エンジンで並列レプリカによる読み取りがサポートされるようになりました。[#107830](https://github.com/ClickHouse/ClickHouse/pull/107830) ([nauu](https://github.com/nauu))。
* Azure Blob Storage の読み取り後書き込み方式のコピー (ネイティブコピーが利用できない場合にバックアップで使用) において、同時にステージングされるパーツ数を max\_inflight\_parts\_for\_one\_file までに制限しました。これにより、多数の大きなファイルを並列コピーする際にメモリ使用量が過剰に増加するのを防ぎます。[#108232](https://github.com/ClickHouse/ClickHouse/pull/108232) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni))。
* HDFS ストレージで `_etag` 仮想カラムをサポートしました。[#108255](https://github.com/ClickHouse/ClickHouse/pull/108255) ([zhangyifan27](https://github.com/zhangyifan27))。
* `system.backups` および `system.backup_log` に `settings` カラムと `engine_settings` カラムを追加しました。`settings` には操作時に指定されたバックアップ／リストア固有の設定 (例: `allow_s3_native_copy`、`deduplicate_files`、`structure_only`) が、`engine_settings` にはバックアップエンジンのリーダー／ライターで実際に適用された設定 (例: `allow_native_copy` などの S3 リクエスト設定。エンドポイント設定とのマージにより、指定内容と異なる場合があります) が表示されます。これにより、`BACKUP`/`RESTORE` 操作が実際にどの設定で実行されたかを確認できます。[#108334](https://github.com/ClickHouse/ClickHouse/pull/108334) ([jkartseva](https://github.com/jkartseva))。
* 登録済みの `S3Queue` テーブルおよび `AzureQueue` テーブルの Keeper 上の状態 (処理済み・処理中・失敗したファイル数など) を確認できる `system.s3_queue_metadata` と `system.azure_queue_metadata` を追加しました。[#108522](https://github.com/ClickHouse/ClickHouse/pull/108522) ([kssenii](https://github.com/kssenii))。
* テキスト索引ヘッダーキャッシュのメモリ使用量を 2～2.5 分の 1 に削減しました。キャッシュ (設定 `text_index_header_cache_size`) により多くのデータパーツのヘッダーを格納できるようになり、テキスト検索クエリでのディスク読み取りが減少します。[#109332](https://github.com/ClickHouse/ClickHouse/pull/109332) ([CurtizJ](https://github.com/CurtizJ))。
* `INFORMATION_SCHEMA` ビューに MySQL 互換のカラムを追加しました。対象は `SCHEMATA.DEFAULT_COLLATION_NAME` および `DEFAULT_ENCRYPTION`、`TABLES.ENGINE` と関連する MySQL カラム、そして `COLUMNS.COLUMN_KEY`、`PRIVILEGES`、`GENERATION_EXPRESSION`、`SRS_ID` です。これにより、MySQL 対応クライアントが `UNKNOWN_IDENTIFIER` エラーを起こすことなくカタログのイントロスペクションクエリを実行できるようになります。[#109351](https://github.com/ClickHouse/ClickHouse/pull/109351) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 多数のデータパーツを持つ `MergeTree` テーブルのメモリ使用量を削減しました。スキーマから導出されるパーツごとのメタデータ (カラムリスト、カラム定義、シリアライゼーション、カラムのサブストリーム) を、各パーツにコピーする代わりにテーブル内のパーツ間で共有するようにしました。特に、小さなパーツを多数持つワイドテーブルで大きな効果があります。[#109816](https://github.com/ClickHouse/ClickHouse/pull/109816) ([Algunenano](https://github.com/Algunenano))。
* 新しい設定 `use_projection_index_in_read_pools` を追加しました (デフォルトでは無効) 。有効にすると、プロジェクション索引によって完全に除外されるマーク範囲は、読み取り時にグラニュール単位でスキップされるのではなく、読み取りタスクが作成される前に `MergeTree` の読み取りプール内で破棄されます。これにより、読み取られないデータに対して読み取りタスクを作成したりリーダーをセットアップしたりする必要がなくなり、読み取りタスクのサイズも残ったマーク数を基準に測られるようになります。[#110291](https://github.com/ClickHouse/ClickHouse/pull/110291) ([KochetovNicolai](https://github.com/KochetovNicolai))。
* `MergeTree` におけるパーツごとのプライマリキー二分探索の診断ログについて、ログレベルを trace から test に下げ、出力量を抑えました。[#110324](https://github.com/ClickHouse/ClickHouse/pull/110324) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* TLS (HTTPS、S3) 経由でプールされた HTTP keep-alive 接続が不必要に再接続される問題を修正しました。古い接続の検出には socket に対する `poll` を使用していましたが、未読の TLS ハンドシェイク後レコード (セッションチケットや `KeyUpdate`) を含む生存中のセキュア接続を、切断済みと誤判定していました。現在は、通常の socket ではノンブロッキングの `MSG_PEEK` を、TLS socket では `SSL_peek`/`SSL_has_pending` を使用しており、TLS の正常なシャットダウンや部分的にしか到着していない TLS レコードも正しく検出できます。[#110402](https://github.com/ClickHouse/ClickHouse/pull/110402) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* OneLake カタログで、OAuth リフレッシュトークンを使用してアクセストークンを更新できるようになりました。[#110413](https://github.com/ClickHouse/ClickHouse/pull/110413) ([alesapin](https://github.com/alesapin))。
* `DuplicationDataHashComputations` ProfileEvent を追加しました。`*MergeTree` テーブルへ INSERT されたブロックの重複排除時に実行される、カラム単位のデータハッシュ計算の回数をカウントします。[#111173](https://github.com/ClickHouse/ClickHouse/pull/111173) ([valerypetrov](https://github.com/valerypetrov))。
* UNIQUE KEY 索引の SST を、ローカルの一時ファイルを経由せず、ストレージ抽象化を通じてパーツに直接書き込むようにしました。[#111189](https://github.com/ClickHouse/ClickHouse/pull/111189) ([JingYanchao](https://github.com/JingYanchao))。
* ローカルディスク上の Iceberg テーブルへの同時実行書き込みをサポートしました。`LocalObjectStorage` が条件付き書き込みを実装したことで、`version-hint.text` を通じて新しいスナップショットを公開する compare-and-swap がローカルディスクでも機能するようになり、同時に書き込む複数のライター間で互いの更新が失われることがなくなりました。[#112556](https://github.com/ClickHouse/ClickHouse/pull/112556) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `S3` クライアントのバケットリージョンキャッシュがデータレイクカタログでも機能するようになりました。これまでは、データレイクカタログへのリクエストのたびにリージョンを再解決していました。[#113330](https://github.com/ClickHouse/ClickHouse/pull/113330) ([scanhex12](https://github.com/scanhex12))。
* Azure のクライアント側ネットワーク障害 (接続のリセット/拒否、DNS および TLS エラー) は、擬似的な `500` エラーとして返されるのではなく、S3 クライアントと同様にトランスポートエラーとして再試行されるようになりました。[#115269](https://github.com/ClickHouse/ClickHouse/pull/115269) ([arsenmuk](https://github.com/arsenmuk))。

<h3 id="formats-and-ingestion-improvements">
  フォーマットとインジェスト
</h3>

* HTTP インターフェイスで snappy 圧縮 (`Accept-Encoding: snappy`) をサポートしました。また、汎用の `file`/`url` における snappy I/O で、Hadoop snappy ブロックフォーマットと snappy フレーミングフォーマットのどちらを使用するかを選択できる `snappy_mode` 設定を追加しました。[#100752](https://github.com/ClickHouse/ClickHouse/pull/100752) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 設定 `input_format_csv_missing_nullable_as_empty_string` (デフォルトでは無効) を追加しました。有効にすると、CSV 入力における `Nullable(String)` の欠損値は、`input_format_csv_empty_as_default` の値にかかわらず、`NULL` ではなく空の `String` として読み込まれます。[#107577](https://github.com/ClickHouse/ClickHouse/pull/107577) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `input_format_protobuf_oneof_presence` を使用して protobuf メッセージを処理する際、スキーマ変更に対応できるよう、タグの完全一致を必須としないようにしました。[#109174](https://github.com/ClickHouse/ClickHouse/pull/109174) ([ilejn](https://github.com/ilejn))。
* Apache Arrow ベースのレガシー ORC リーダーを削除しました。ORC 入力フォーマットでは、常に ClickHouse のネイティブデコーダ (従来のデフォルト) が使用されるようになりました。`input_format_orc_use_fast_decoder` 設定は廃止されました (指定は引き続き可能ですが、効果はありません) 。[#110074](https://github.com/ClickHouse/ClickHouse/pull/110074) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* Hive エンジンでは、ORC ファイルのメタデータ (min/max 索引、行数) の読み込みに、Apache Arrow ORC アダプターではなく ClickHouse のネイティブ ORC リーダーを使用するようになりました。[#110086](https://github.com/ClickHouse/ClickHouse/pull/110086) ([alexey-milovidov](https://github.com/alexey-milovidov))。

<h3 id="security-access-and-observability-improvements">
  セキュリティ、アクセス、オブザーバビリティ
</h3>

* `system.tables` テーブルに新しいカラム `skipping_indices_types` を追加しました。このカラムには、各テーブルに定義されているデータスキッピングインデックスの種類が重複なく格納されます。[#106388](https://github.com/ClickHouse/ClickHouse/pull/106388) ([CurtizJ](https://github.com/CurtizJ))。
* `max_threads` などの設定の自動値が、`system.settings` で `'auto(8)'` ではなく `auto(8)` と表示されるようになりました。値を囲むシングルクォートは、長年にわたって値に埋め込まれていた不要な名残です。バージョン間の互換性は維持されており、古いサーバーから受信した設定をパースする際は、従来のクォート付き形式も引き続き受け付けます。[#108657](https://github.com/ClickHouse/ClickHouse/pull/108657) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `system.documentation` で、設定のデフォルト値が空の場合に、空のバッククォートではなく *empty string* と表示するようにしました。[#108708](https://github.com/ClickHouse/ClickHouse/pull/108708) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `system.documentation` に含まれる設定のドキュメント (組み込みの `/docs` ページや `help` コマンドで表示されるもの) に、デフォルト値の変更履歴が記載されるようになりました。設定が導入されたバージョンに加え、それ以降のデフォルト値の各変更について、変更前の値、変更後の値、変更理由が示されます。[#112177](https://github.com/ClickHouse/ClickHouse/pull/112177) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* すべての SQL ステートメントのドキュメント (名前、構文、説明、例など) を、システムテーブル `system.statements` から取得できるようになりました。[#115341](https://github.com/ClickHouse/ClickHouse/pull/115341) ([rschu1ze](https://github.com/rschu1ze))。

<h3 id="settings-and-configuration-improvements">
  設定と構成
</h3>

* 新しいサーバー設定 `memory_worker_rss_speculative_reserve_ratio`(デフォルト `1.0`、sanitizer ビルドでは `0`)を追加しました。この設定により、グローバルな memory tracker は `MemoryWorker` のティックごとに、観測された RSS に加えて `ratio * min(resident - previous_resident, resident - tracked)` を投機的に予約します。サンプル間で RSS の増加が tracker の記録に追いついていない場合に tracker の値を上方向に補正するため、メモリ割り当てがより早い段階で `MEMORY_LIMIT_EXCEEDED` となり、カーネルの OOM-killer が先に発動しにくくなります。投機的予約を無効にするには、ratio を `0` に設定してください。sanitizer ビルドでは `resident - tracked` の差の大部分を sanitizer のシャドウメモリが占めるため、デフォルト値は `0` です。[#104976](https://github.com/ClickHouse/ClickHouse/pull/104976) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* テキスト索引の遅延実行型ポスティングリスト適用モードが実験的機能ではなくなり、`allow_experimental_text_index_lazy_apply` を指定しなくても `text_index_posting_list_apply_mode = 'lazy'` で選択できるようになりました。また、密度しきい値の設定名が `text_index_density_threshold` から `text_index_lazy_intersection_density_threshold` に変更されました。[#108814](https://github.com/ClickHouse/ClickHouse/pull/108814) ([CurtizJ](https://github.com/CurtizJ)).
* `merge_selector_enable_heuristic_to_lower_max_parts_to_merge_at_once` 設定がデフォルトで有効になりました。merge selector は、パーティションの充填状況に応じて、一度にマージするパーツの最大数を自動的に引き下げます。[#110726](https://github.com/ClickHouse/ClickHouse/pull/110726) ([Michicosun](https://github.com/Michicosun)).
* PostgreSQL ワイヤプロトコルで、PostgreSQL のクリーンアップコマンド `RESET`、`UNLISTEN`、`DISCARD` を構文エラーとして失敗させず、何もしない操作(no-op)として受け付けるようにしました。これにより、接続の確立時やクリーンアップ時に `RESET ALL` や `UNLISTEN *` を送信する Skunk などのドライバーとの互換性が向上します。[#110780](https://github.com/ClickHouse/ClickHouse/pull/110780) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* AI テキスト関数(`aiGenerate`、`aiClassify`、`aiExtract`、`aiTranslate`)は、プロバイダーからの応答が途中で切れているなど不完全な場合(例: モデルが `max_tokens` の上限に達した場合)、部分的な出力を黙って返すのではなく、その応答を拒否するようになりました。この動作は `ai_function_throw_on_error` 設定に従います。[#111830](https://github.com/ClickHouse/ClickHouse/pull/111830) ([george-larionov](https://github.com/george-larionov)).
* `p < 8QBit(Int8)` のコードをガウス条件付き平均に基づくプレフィックスセントロイドで再構成することで、低精度時の `L2DistanceTransposedQuantized`、`cosineDistanceTransposedQuantized`、`dotProductTransposedQuantized` を改善しました。元の精度(`p = 8`)では、引き続きビット単位で完全に一致する結果が得られます。低精度時の近似距離は変わる可能性があり、再現率やレイテンシの改善効果はワークロードによって異なります。[#111867](https://github.com/ClickHouse/ClickHouse/pull/111867) ([skuznetsov](https://github.com/skuznetsov)).
* `write_snapshot_version` 設定をホットリロードできるようにしました。[#112150](https://github.com/ClickHouse/ClickHouse/pull/112150) ([alesapin](https://github.com/alesapin)).
* リモートレプリカとの非同期通信に使用されるファイバーのスタックのオブザーバビリティを利用できるようにしました。プロファイルイベント `FiberStackAllocs`、`FiberStackAllocBytes`、`FiberStackAllocNanoseconds`、`FiberStackFreeNanoseconds`、およびメトリクス `FiberStacks`、`FiberStackBytes` を利用できます。[#114541](https://github.com/ClickHouse/ClickHouse/pull/114541) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Prometheus remote-write プロトコルが非同期挿入に対応しました。`async_insert` 設定に従い、同時に送信された複数の remote-write リクエストのデータは、パーツが作成される前にバッチにまとめられます(デフォルトで有効。従来の同期動作を維持するには、ハンドラー URL に `async_insert=0` を追加してください)。リクエストへの確認応答は、対象の `TimeSeries` テーブルのすべての内部テーブルにデータがフラッシュされた後に返されます。[#115688](https://github.com/ClickHouse/ClickHouse/pull/115688) ([nikitamikhaylov](https://github.com/nikitamikhaylov)).

<h3 id="other-improvements">
  その他の改善
</h3>

* `shrink_over_allocated_columns_min_waste_ratio` と `shrink_over_allocated_columns_min_waste_bytes` の 2 つの設定を追加しました。これらを有効にすると、INSERT 時に過剰割り当てされたカラム (可変長カラムが 2 のべき乗で拡張されるために、予約メモリが使用メモリを上回っているカラム) が、マテリアライズおよびパーツの書き込み前に適切なサイズまで縮小され、ピークメモリ使用量が削減されます。デフォルトでは無効です。 [#112161](https://github.com/ClickHouse/ClickHouse/pull/112161) ([Avogar](https://github.com/Avogar)).
* `TTLDrop` マージではデータ読み取りステップを完全にスキップするようにし、特に読み取り／プリフェッチバッファの割り当てによる過剰なメモリ使用を回避しました。 [#105859](https://github.com/ClickHouse/ClickHouse/pull/105859) ([Avogar](https://github.com/Avogar)).
* `dotProduct` で `BFloat16` をサポートし、SIMD パスをバッチ化することで内積の性能を向上させました。 [#106569](https://github.com/ClickHouse/ClickHouse/pull/106569) ([nickitat](https://github.com/nickitat)).
* `max_named_collection_num_to_throw`、`max_table_num_to_throw`、`max_replicated_table_num_to_throw`、`max_view_num_to_throw`、`max_dictionary_num_to_throw`、`max_database_num_to_throw` をサーバーを再起動せずに変更できるようにしました。 [#106821](https://github.com/ClickHouse/ClickHouse/pull/106821) ([UberDever](https://github.com/UberDever)).
* `allow_experimental_delta_lake_writes` で制御される `DeltaLake` テーブルへの書き込みを Beta に昇格しました。 [#107034](https://github.com/ClickHouse/ClickHouse/pull/107034) ([kssenii](https://github.com/kssenii)).
* `uniqCombined64` スケッチをベースとした、`uniq` の軽量な代替となるカラム STATISTICS タイプ `uniq_v2` を追加しました。 [#107863](https://github.com/ClickHouse/ClickHouse/pull/107863) ([hanfei1991](https://github.com/hanfei1991)).
* make\_distributed\_plan の実行状況を監視するための ProfileEvents `DistributedPlanRemoteTasks`、`DistributedPlanLocalExecution`、`DistributedPlanHostsUsed` を追加しました。 [#107985](https://github.com/ClickHouse/ClickHouse/pull/107985) ([shankar-iyer](https://github.com/shankar-iyer)).
* OneLake などの REST データレイクカタログへのリクエストに、ClickHouse の `User-Agent` ヘッダーが含まれるようになりました。 [#108117](https://github.com/ClickHouse/ClickHouse/pull/108117) ([scanhex12](https://github.com/scanhex12)).
* `MVTEncodeGeom` は、クリッピング前にジオメトリを整数ピクセルグリッドにスナップし、`wagyu` を使ってポリゴンをクリッピングするようになりました。これにより、クリッピング結果は有効 (自己交差するリングは修復されます) かつエッジに揃ったものとなり、PostGIS の `ST_AsMVTGeom` と同じ結果になります。 [#108248](https://github.com/ClickHouse/ClickHouse/pull/108248) ([saarthak2002](https://github.com/saarthak2002)).
* 3 つのテキスト索引キャッシュすべてをグローバルに有効化しました (以前はクエリ内でのみ有効でした) 。なお、ポスティングリストのキャッシュサイズは 0 になりました (つまり実質的には再び無効化されています) 。ポスティングリストはサイズが大きく、キャッシュするコストが高すぎるためです。 [#108274](https://github.com/ClickHouse/ClickHouse/pull/108274) ([rschu1ze](https://github.com/rschu1ze)).
* Prometheus エンドポイント (メトリクスのみの設定の場合) と非同期メトリクスの収集をテーブルのロード前に開始するようにしました。これにより、長時間かかる場合があるメタデータのロード中もメトリクスを監視できます。 [#108402](https://github.com/ClickHouse/ClickHouse/pull/108402) ([cwurm](https://github.com/cwurm)).
* 二項数学関数で BFloat16 をサポートしました [#108442](https://github.com/ClickHouse/ClickHouse/pull/108442) ([zhangyifan27](https://github.com/zhangyifan27)).
* 転置ベクトル距離関数 `L2DistanceTransposed`、`cosineDistanceTransposed`、`dotProductTransposed` で、`Nullable(QBit)` カラムにも部分的なビットプレーン読み取りの最適化が適用されるようになり、カラム全体ではなく要求されたビットプレーンのみを読み取るようになりました。 [#109358](https://github.com/ClickHouse/ClickHouse/pull/109358) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `BFloat16` の Array で `arraySum`、`arrayAvg`、`arrayProduct` を使用できるようになりました。[#109420](https://github.com/ClickHouse/ClickHouse/pull/109420) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 関数 `L1Normalize`、`L2Normalize`、`LinfNormalize`、`LpNormalize` (およびそれらの別名) が、`L2Norm` や距離関数と同様に、タプルだけでなく Array でも動作するようになりました。[#110052](https://github.com/ClickHouse/ClickHouse/pull/110052) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* プールされた接続に対して、使用のたびに ping を送信しないようにしました。これにより、再利用される接続ごとに発生していた `Ping`-`Pong` の往復通信がなくなり、分散クエリおよび `clickhouse-benchmark` のレイテンシが低減されます。古くなったプールされた接続は、タイムアウトをゼロにした poll (往復通信を伴わないノンブロッキングなチェック) で検出し、再接続によって復旧します。[#110068](https://github.com/ClickHouse/ClickHouse/pull/110068) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 分散索引解析において、大きなパーツのリストをスカラーとして送信するようにしました (max\_ast\_elements/max\_query\_size による失敗の可能性を回避し、AST のパースによるオーバーヘッドを解消します) [#110419](https://github.com/ClickHouse/ClickHouse/pull/110419) ([azat](https://github.com/azat)).
* Playground でクラウドのロゴをクリックすると、Clickhouse の Web サイトが新しいタブで開くようになりました。これにより、クエリの実行中に作業内容が失われなくなります。[#110422](https://github.com/ClickHouse/ClickHouse/pull/110422) ([williamhatcher](https://github.com/williamhatcher)).
* `auto_statistics_types` のデフォルトを `basic, uniq` から `basic, uniq_v2` に変更しました。[#110878](https://github.com/ClickHouse/ClickHouse/pull/110878) ([hanfei1991](https://github.com/hanfei1991)).
* `RWLockImpl::getLock()` の再入アサーション (`RWLock is already locked in exclusive mode` / `Cannot acquire exclusive lock while RWLock is already locked`) が発生した場合、現在そのロックを保持している他の `query_id` と、要求元の `query_id` がすでに保持しているロック数をエラーメッセージに表示するようにしました。これにより、ロック順序に起因するこの種のエラーを診断しやすくなります。[#110971](https://github.com/ClickHouse/ClickHouse/pull/110971) ([groeneai](https://github.com/groeneai)).
* `randomHadamardTransform` は、最大の奇数因数が 64 以下である任意のベクトル長 (例：埋め込みモデルでよく使われる `3584 = 512 * 7`) に対して、長さを保存する厳密な変換を計算できるようになりました。これにより、従来の `2^N`、`2^k * {12, 20}`、`2^k * 9` の系列に加えて対応範囲が広がります。厳密に表現できない長さで完全な変換を行おうとした場合、より長いベクトルへ暗黙的にゼロ埋めするのではなく、例外を発生させるようになりました。任意の長さで切り詰められた射影を計算するには、`output_dims` を指定してください。[#111006](https://github.com/ClickHouse/ClickHouse/pull/111006) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* HTTP インターフェイス経由の `ACCESS_DENIED` 例外に対して、`500 Internal Server Error` ではなく HTTP コード `403 Forbidden` を返すようにしました。[#111043](https://github.com/ClickHouse/ClickHouse/pull/111043) ([Schum-io](https://github.com/Schum-io)).
* `UTMToGeo` の第 4 引数として、整数の半球フラグに加え、`geoToUTM` が返す MGRS の緯度帯文字も受け付けるようになりました。これにより、`geoToUTM` の結果をそのまま `UTMToGeo` に渡して往復変換できます。[#111521](https://github.com/ClickHouse/ClickHouse/pull/111521) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `MaterializedPostgreSQL` で、更新時に変更されていない PostgreSQL の `TOAST` 値がデフォルト値に置き換えられず、そのまま保持されるようになりました。[#111552](https://github.com/ClickHouse/ClickHouse/pull/111552) ([OrpheusAgent](https://github.com/OrpheusAgent)).
* テキスト索引ビルダーが一時セグメントを flush するタイミングを制御する設定 `text_index_max_processed_tokens_before_flush` および `text_index_max_memory_usage_before_flush` を追加しました。[#111573](https://github.com/ClickHouse/ClickHouse/pull/111573) ([rorylshanks](https://github.com/rorylshanks)).
* STREAM UNORDERED 修飾子を追加しました。この修飾子を指定すると、スナップショットごとのコミット順ソートが省略されます。[#111794](https://github.com/ClickHouse/ClickHouse/pull/111794) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
* `make_distributed_plan=1` の場合、まだサポートされていない機能が無効化されるようになりました。[#112463](https://github.com/ClickHouse/ClickHouse/pull/112463) ([alesapin](https://github.com/alesapin)).
* stdout が tty の場合に、INTO OUTFILE の出力先へ ANSI エスケープシーケンスを書き込まないようにしました。[#113252](https://github.com/ClickHouse/ClickHouse/pull/113252) ([azat](https://github.com/azat)).
* `allow_experimental_delta_kernel_rs` を `allow_delta_kernel_rs` にリネームしました。旧名称もエイリアスとして引き続き利用できます。[#113476](https://github.com/ClickHouse/ClickHouse/pull/113476) ([kssenii](https://github.com/kssenii)).
* 実験的な圧縮コーデックを個別に有効化するための設定 `enable_alp_codec`、`enable_sz3_codec`、`enable_zxc_codec`、`enable_quantized_codec` を追加しました。[#113824](https://github.com/ClickHouse/ClickHouse/pull/113824) ([rienath](https://github.com/rienath)).
* スタックオーバーフロー発生時に、何も出力せずに終了するのではなく報告するようにしました。致命的シグナルのハンドラーが代替シグナルスタック上で実行されるようになったため、障害が発生したスレッドがスタックを使い果たしていても、`SIGSEGV`、`SIGABRT`、`SIGILL`、`SIGBUS`、`SIGSYS`、`SIGFPE`、`SIGTRAP` の発生時にスタックトレースが出力されます。[#113927](https://github.com/ClickHouse/ClickHouse/pull/113927) ([groeneai](https://github.com/groeneai)).
* インスタントクエリおよびレンジクエリで、Prometheus HTTP API の lookback\_delta パラメータをサポートしました。[#113971](https://github.com/ClickHouse/ClickHouse/pull/113971) ([fallintoplace](https://github.com/fallintoplace)).
* QueryRunner テーブルは、テーブルのライフタイム全体にわたってスレッドを占有するのではなく、必要に応じてワーカースレッドを起動し、アイドル状態になると解放するようになりました。[#114522](https://github.com/ClickHouse/ClickHouse/pull/114522) ([mstetsyuk](https://github.com/mstetsyuk)).
* この変更により、WHATIF 索引の使用時に、プロジェクションで処理されるベースラインがステートメントを失敗させるのではなく、候補ごとに `not_applicable` を報告するようになりました。[#114846](https://github.com/ClickHouse/ClickHouse/pull/114846) ([yariks5s](https://github.com/yariks5s)).
* 同一の expression に対する複数の比較条件を含む AND チェーンを最適化しました。矛盾を検出し (例: `a < 3 AND a > 5` → `false`) 、冗長な条件を除去します (例: `a = 3 AND a < 5` → `a = 3`) 。[#99736](https://github.com/ClickHouse/ClickHouse/pull/99736) ([wudidapaopao](https://github.com/wudidapaopao)).

<h2 id="bug-fixes">
  バグ修正
</h2>

<h3 id="mergetree-replication-and-storage-fixes">
  MergeTree、レプリケーション、ストレージに関する修正
</h3>

* `MergeTree` において、`ALTER TABLE ... RENAME COLUMN` と、同時に実行される `OPTIMIZE TABLE ... FINAL`(または任意のバックグラウンドマージ)との間で競合状態が発生し、リネームされたカラムのデータが警告なくデフォルト値に置き換えられる可能性があった問題を修正しました。新しいインメモリメタデータの公開から、`current_mutations_by_version` へのリネームミューテーションの登録までの間に存在した競合ウィンドウは、両方の操作の間 `currently_processing_in_background_mutex` を保持し続けることで解消されました。[#104822](https://github.com/ClickHouse/ClickHouse/pull/104822) ([groeneai](https://github.com/groeneai)).
* GROUP BY と ORDER BY を使用し、かつプロジェクションに `arrayJoin` が含まれる場合に、誤ったクエリ結果が返される問題を修正しました。[#101775](https://github.com/ClickHouse/ClickHouse/pull/101775) ([Onyx2406](https://github.com/Onyx2406)).
* 無効な Azure アップロードサイズ設定(例: `azure_min_upload_part_size = 0` や `azure_max_blocks_in_multipart_upload = 0`)は、書き込みパスの深い箇所で内部例外(`second_size > 0`)を引き起こすことなく、早い段階でわかりやすいエラーとして拒否されるようになりました。これはクエリ設定と Azure のディスク設定の両方に適用されます。[#103394](https://github.com/ClickHouse/ClickHouse/pull/103394) ([statxc](https://github.com/statxc)).
* 粒度設定に互換性のない(一方がアダプティブ、もう一方が非アダプティブ)2 つの `MergeTree` テーブル間で `ALTER TABLE ... MOVE/REPLACE/ATTACH PARTITION` を実行した場合に、`LOGICAL_ERROR` ではなく `BAD_ARGUMENTS` 例外をスローするようにしました。[#103881](https://github.com/ClickHouse/ClickHouse/pull/103881) ([groeneai](https://github.com/groeneai)).
* `KILL QUERY` / `KILL MUTATION` / `KILL PART_MOVE_TO_SHARD` / `KILL TRANSACTION` において、`WHERE` 句に行ごとのサブクエリが含まれる場合や、`max_block_size` が小さいために関連する `system.*` テーブルに対する内部 `SELECT` が複数のブロックを出力する場合に、`LOGICAL_ERROR` "Expected one block from input stream" がスローされる問題を修正しました。[#104927](https://github.com/ClickHouse/ClickHouse/pull/104927) ([groeneai](https://github.com/groeneai)).
* リフレッシュ可能なマテリアライズドビュー(`MATERIALIZED VIEW ... REFRESH ...`)において、リフレッシュタスクが `EXCHANGE TABLES` によって入れ替えた一時内部テーブルのサイズがサーバーの `max_table_size_to_drop` を超えていると削除できず、リークが発生する問題を修正しました。この問題により、リフレッシュのたびに新たな一時内部テーブルが作成される一方で以前のテーブルはクリーンアップされず、ディスク容量が尽きるまでビューのデータディレクトリが増大し続けていました。リフレッシュタスクによる内部的な削除処理は、`max_table_size_to_drop` および `max_partition_size_to_drop` の制限を受けなくなりました。なお、ユーザーがビュー自体に対して発行する `DROP TABLE` には、これらの安全策が引き続き適用されます。[#105106](https://github.com/ClickHouse/ClickHouse/pull/105106) ([groeneai](https://github.com/groeneai)).
* sorting key に `SimpleAggregateFunction`(または `allow_suspicious_primary_key = 1` の場合にのみ許可されるその他の型)を含む `MergeTree` テーブルで、sorting key を変更しない `ALTER` クエリ(設定、コメント、コーデックの変更や、キー以外のカラムの追加など)を実行すると、予期しない `DATA_TYPE_CANNOT_BE_USED_IN_KEY` エラーが発生する問題を修正しました。[#105111](https://github.com/ClickHouse/ClickHouse/pull/105111) ([groeneai](https://github.com/groeneai)).
* クエリのタイムアウト(`timeout_overflow_mode = 'break'` を指定した `max_execution_time`)によって `OPTIMIZE ... DRY RUN` が中断された場合、`rows_sources` に関する論理エラー(デバッグビルドおよびサニタイザービルドではサーバーが異常終了していました)ではなく、`TIMEOUT_EXCEEDED` が返されるようになりました。[#107114](https://github.com/ClickHouse/ClickHouse/pull/107114) ([groeneai](https://github.com/groeneai)).
* `use_hive_partitioning=1` を指定して Hive パーティション形式のファイルを読み取る際に、Hive パーティションカラムを選択しつつ、実カラム(仮想カラム以外)をフィルタリングする `WHERE`/`PREWHERE` 句を使用すると `NOT_FOUND_COLUMN_IN_BLOCK` が発生する問題を修正しました。[#107505](https://github.com/ClickHouse/ClickHouse/pull/107505) ([groeneai](https://github.com/groeneai)).
* `toStartOfDay`、`toStartOfISOYear`、`toDaysSinceYearZero`、`toRelativeSecondNum`、`toRelativeMinuteNum`、`toRelativeHourNum`、`toRelativeWeekNum`、`toRelativeDayNum`、`toMonthNumSinceEpoch`、`toYearNumSinceEpoch` を、関数が表現できる範囲外の日付 (特に `1970-01-01` より前の日付) を含む `Date32` キーカラムに適用した場合に、主キーおよびパーティションの枝刈りが誤って行われ、誤ったクエリ結果が返される問題を修正しました。これらの関数は主索引に対して単調であると報告しますが、従来はこのような引数に対して値がラップアラウンドしていたため、実際には一致する行を含むグラニュールが索引によって枝刈りされることがありました。現在は結果型の境界値で飽和し、`Date32` の全範囲で単調性が保たれるため、枝刈りが正しく行われます。[#108018](https://github.com/ClickHouse/ClickHouse/pull/108018) ([nihalzp](https://github.com/nihalzp)).
* `CREATE TABLE dst AS src SETTINGS ...` (および `ENGINE` を明示せずに `ORDER BY`/`PARTITION BY` を指定する類似の形式) で、ソーステーブルのエンジン、ストレージ句 (テーブルの `TTL` やキーなど) および設定が警告なしに失われる問題を修正しました。現在は、エンジンと上書きされていないストレージ句がソーステーブルから継承され、指定した設定はソーステーブルの設定に上乗せする形でマージされます。[#108085](https://github.com/ClickHouse/ClickHouse/pull/108085) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Windows をバックエンドとするファイルシステム (WSL、CIFS/SMB、Docker Desktop のバインドマウント) 上で、`MergeTree` テーブルへの `INSERT` が `filesystem error: in rename: Permission denied` で失敗する問題を修正しました。原因は、パーツライターがパーツディレクトリのリネーム時にファイルディスクリプタを開いたままにしていたことでした。[#108089](https://github.com/ClickHouse/ClickHouse/pull/108089) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* レガシーな `hypothesis` スキップ索引 (`ATTACH` との互換性のためだけに残されている、削除済みの索引種別) を持つ状態でアタッチされた MergeTree テーブルが操作不能になる問題を修正しました。従来、このようなテーブルに対する軽量 `DELETE`、`OPTIMIZE`、通常の `INSERT`、またはフィルタ付きの `SELECT` は `ILLEGAL_INDEX` ("Index of type 'hypothesis' is no longer supported") で失敗し、`DELETE` ミューテーションは無限に再試行されていました。現在、この無効な索引は何も作用しないものとして扱われます。マージ/ミューテーション時にはそのまま引き継がれ、挿入時およびクエリプランニング時にはスキップされます。また、引き続き `ALTER TABLE ... DROP INDEX` で削除できます。[#108217](https://github.com/ClickHouse/ClickHouse/pull/108217) ([groeneai](https://github.com/groeneai)).
* 並列レプリカ使用時に `MergeTree` テーブルから仮想カラムを選択すると (`asterisk_include_virtual_columns = 1` を指定した `SELECT *` による場合を含む) 、`NOT_FOUND_COLUMN_IN_BLOCK` エラー (例: `Column _part not found`) が発生する問題を修正しました。[#108451](https://github.com/ClickHouse/ClickHouse/pull/108451) ([groeneai](https://github.com/groeneai)).
* 主キーが等価であるにもかかわらず宣言方法が異なる (一方は明示的な `PRIMARY KEY`、もう一方は `ORDER BY` による暗黙的な指定) テーブルを、`ATTACH PARTITION ... FROM` が拒否する問題を修正しました。[#108590](https://github.com/ClickHouse/ClickHouse/pull/108590) ([jordiori](https://github.com/jordiori)).
* `join_any_take_last_row` が、ディスクへの自動スピルを使用する結合も含め、サポートされているすべてのハッシュベースの結合パスで反映されるようになりました。[#108936](https://github.com/ClickHouse/ClickHouse/pull/108936) ([antaljanosbenjamin](https://github.com/antaljanosbenjamin)).
* `query_plan_optimize_lazy_final` が有効で、かつ `WHERE` フィルタの一部が (`optimize_move_to_prewhere_if_final` により) `PREWHERE` にプッシュダウンされている場合に、`NOT_FOUND_COLUMN_IN_BLOCK` エラーが発生する問題を修正しました。遅延実行 FINAL 最適化は、PREWHERE で計算される述語カラムをストレージに要求しなくなりました。[#109073](https://github.com/ClickHouse/ClickHouse/pull/109073) ([groeneai](https://github.com/groeneai)).
* セッションで `optimize_respect_aliases = 0` が設定されている場合に、テーブルレベルの `ALIAS` カラムに対して `ALTER TABLE ... ADD PROJECTION` を実行するとテーブルが使用不能になる問題 (以降の `INSERT` が `UNKNOWN_IDENTIFIER`、"Missing columns" で失敗する) を修正しました。[#109091](https://github.com/ClickHouse/ClickHouse/pull/109091) ([groeneai](https://github.com/groeneai))。
* 旧アナライザ (`allow_experimental_analyzer = 0`) で、別のテーブルと結合した `Merge` エンジンのテーブルに対して `ORDER BY ALL` (または `GROUP BY ALL`) を実行すると、ヌルポインタのアサーション (`TreeRewriter::analyzeSelect` 内の `px != 0`。デバッグビルドおよびサニタイザビルドではサーバーが異常終了する) が発生する問題を修正しました。[#109139](https://github.com/ClickHouse/ClickHouse/pull/109139) ([groeneai](https://github.com/groeneai))。
* 相関がサブクエリのプロジェクション内にのみ存在し、かつ非相関の `WHERE` 句を伴う場合に、相関 `EXISTS` サブクエリおよびスカラーサブクエリが誤った結果を返す問題 (サブクエリがすべての行で false / `NULL` と評価されることがある) を修正しました。[https://github.com/ClickHouse/ClickHouse/issues/105760](https://github.com/ClickHouse/ClickHouse/issues/105760) を解決します。[#109186](https://github.com/ClickHouse/ClickHouse/pull/109186) ([novikd](https://github.com/novikd))。
* `enable_block_number_column` または `enable_block_offset_column` 設定が有効な状態で、プロジェクションを持つ `MergeTree` テーブルをマージすると、不要な `_block_number`/`_block_offset` カラムを含むプロジェクションパーツが生成されるバグを修正しました。この場合、マージ後のプロジェクションパーツがプロジェクション定義や挿入時に生成されたプロジェクションパーツと一致しなくなるため、`CHECK TABLE` と `OPTIMIZE ... DRY RUN` がこれを破損 (`CORRUPTED_DATA`) として報告していました。[#109284](https://github.com/ClickHouse/ClickHouse/pull/109284) ([groeneai](https://github.com/groeneai))。
* 永続仮想カラム `_block_number` または `_block_offset` に対する暗黙的な min-max 索引 (`add_minmax_index_for_block_number_column` / `add_minmax_index_for_block_offset_column` で有効化) を持つ MergeTree テーブルで `ALTER TABLE ... RENAME/ADD/MODIFY COLUMN` を実行すると、`UNKNOWN_IDENTIFIER` エラーが発生する問題を修正しました。[#109428](https://github.com/ClickHouse/ClickHouse/pull/109428) ([groeneai](https://github.com/groeneai))。
* `Wide` パーツに対して、`MATERIALIZED` カラムの `ALTER TABLE ... DROP COLUMN` など、パーツ全体を書き換えるミューテーションを実行した後に、データパーツからスキップ索引が削除される問題 (または `CHECK TABLE` が `UNEXPECTED_FILE_IN_DATA_PART` で失敗する問題) を修正しました。[#109616](https://github.com/ClickHouse/ClickHouse/pull/109616) ([groeneai](https://github.com/groeneai))。
* `ALTER TABLE ... APPLY PATCHES` で軽量更新をマテリアライズした後も、スキップ索引 (`text`、`bloom_filter` など) やプロジェクションが古い状態のまま残る問題を修正しました。従来は、パッチで更新されたカラムに依存する索引ファイルやプロジェクションファイルが更新されなかったため、それらを使用するクエリが誤った結果を返すことがありました (例: `hasToken` が更新された行を見落とす、使用済みのパッチパーツが削除された後にプロジェクションが古い集約結果を返す、など) 。[#109709](https://github.com/ClickHouse/ClickHouse/pull/109709) ([groeneai](https://github.com/groeneai))。
* `_sample_factor` 仮想カラムを参照するミューテーションが実行途中に `Unexpected const virtual column: _sample_factor` で失敗し、停止したままになる問題を修正しました。ミューテーションでは、この値が `SAMPLE` を指定しないクエリと同じく `1` として読み取られるようになりました。[#109813](https://github.com/ClickHouse/ClickHouse/pull/109813) ([groeneai](https://github.com/groeneai))。
* `GROUP BY GROUPING SETS` を含むクエリ (またはそれを含むスカラーサブクエリやミューテーションのサブクエリ) を `force_aggregation_in_order = 1` で実行した際に発生する 2 つのエラーを修正しました。1 つは旧アナライザ (`enable_analyzer = 0`) で発生する `Trying to get name of not a column: ExpressionList`、もう 1 つはアナライザ使用時に `enable_memory_bound_merging_of_aggregation_results = 1` を指定した分散クエリで発生する `Memory bound merging of aggregated results is not supported for grouping sets.` です。[#109862](https://github.com/ClickHouse/ClickHouse/pull/109862) ([groeneai](https://github.com/groeneai))。
* `use_constant_folding_in_index_analysis` に関する 3 つの問題を修正しました。1 つ目は、テーブルで `part_minmax_index_columns = 'with_block_number_offset'` が設定されている場合に、通常のプロジェクションを使用する `SELECT` が論理エラー `Invalid partition key size` で中断されることがある問題です。2 つ目は、`PARTITION BY id % 200` のような剰余演算によるパーティションキーに対するフィルタで、誤った結果が返される(行が警告なしに欠落する)問題です。3 つ目は、`sparseGrams` トークナイザーを使用する `text` 索引に対し、`max_threads > 1` の状態で多数のパーティションにまたがる `LIKE` 述語のクエリを実行するとクラッシュ(データ競合)が発生する問題です。[#109896](https://github.com/ClickHouse/ClickHouse/pull/109896) ([groeneai](https://github.com/groeneai))。
* `LowCardinality(Nullable(...))` カラムに `minmax` スキップ索引を構築した場合に誤った結果が返される問題を修正しました。従来は、ストレージにプッシュダウンされた `WHERE`/`PREWHERE`/`HAVING ... IS NULL` 述語によってすべてのグラニュールがプルーニングされ、カラムに NULL が含まれているにもかかわらず 0 行が返されていました。[#110061](https://github.com/ClickHouse/ClickHouse/pull/110061) ([groeneai](https://github.com/groeneai))。
* `prefer_localhost_replica` によってローカルレプリカが選択される場合に、`Distributed` テーブルに対する `ORDER BY ... LIMIT` クエリが遅くなる問題を修正しました。[#110136](https://github.com/ClickHouse/ClickHouse/pull/110136) ([EmeraldShift](https://github.com/EmeraldShift))。
* `DELETE` または `ALTER UPDATE` ミューテーションの `WHERE` 条件内、あるいは `UPDATE` の代入式内のサブクエリで集合演算(`UNION`/`UNION ALL`/`UNION DISTINCT`/`EXCEPT`/`INTERSECT`)を使用すると、例外(`UNION mode UNION_DEFAULT must be normalized`)が発生する問題を修正しました。[#110196](https://github.com/ClickHouse/ClickHouse/pull/110196) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `x IN (subquery)` を含むミューテーションがプライマリキー解析中にサブクエリのセットを構築している間、サーバーのシャットダウンに時間がかかり、`KILL MUTATION` も応答しなくなる問題を修正しました。セットの構築は速やかにキャンセルされるようになりました。[#110198](https://github.com/ClickHouse/ClickHouse/pull/110198) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `KILL TRANSACTION` と、トランザクション内で実行される `ALTER TABLE ... UPDATE/DELETE` との間の競合を修正しました。ミューテーションがトランザクションに登録されてからテーブルに登録されるまでの間にロールバックが発生すると、孤立したミューテーションエントリが残っていました。その結果、バックグラウンドジョブで論理エラー(`Cannot find transaction ... that has started mutation ...`)が発生し、サーバーを再起動するまで、影響を受けたパーツに対する以降のミューテーションがすべてブロックされていました。[#110226](https://github.com/ClickHouse/ClickHouse/pull/110226) ([tiandiwonder](https://github.com/tiandiwonder))。
* `DataLakeCatalog`(Iceberg/Glue)データベースに対して `system.tables` を参照した際、1 つのテーブルのメタデータを解決できないだけでクエリ全体が中断される、またはテーブルが警告なしに一覧から欠落する問題を修正しました。このようなテーブルは、`database_datalake_require_metadata_access` の設定にかかわらず名前が一覧に表示されたままとなり、開かれたストレージオブジェクトを必要とするカラム(`engine`、`total_rows` など)にはデフォルト値/NULL が設定されるようになりました。破損したテーブルに直接アクセスした場合は、引き続きエラーが報告されます。[#110242](https://github.com/ClickHouse/ClickHouse/pull/110242) ([groeneai](https://github.com/groeneai))。
* 結合順序のカーディナリティ推定において、すべてのアクティブなパーツではなく、パーティション/PK によるプルーニング後に残ったパーツを対象に列統計を合成するようになりました。従来は、小さなパーティションに絞り込まれたクエリでもテーブル全体の統計に基づいて実行計画が立てられていたため(行数を 2500 倍過大に推定し、ハッシュ結合のビルド側が入れ替わる事例が確認されています)、統計を無効にした方がかえって良い実行計画になるという逆転現象が起きていました。あわせて、結合順序オプティマイザがメモ化した索引解析結果が適用済みのプロジェクションと誤認され、JOIN 配下の MergeTree リレーションで lazy FINAL が警告なしに無効化されていた問題も修正しました。[#110283](https://github.com/ClickHouse/ClickHouse/pull/110283) ([skuznetsov-clickhouse](https://github.com/skuznetsov-clickhouse))。
* グラニュラリティに互換性のない(一方がアダプティブ、もう一方が非アダプティブ)2 つの MergeTree テーブル間で `ALTER TABLE ... MOVE/REPLACE PARTITION` を実行した場合、`LOGICAL_ERROR` ではなく `BAD_ARGUMENTS` をスローするようになりました。この状況はユーザー操作によって起こりうるものであり、内部エラー(デバッグ/サニタイザービルドではサーバーが中断される)として扱うべきではないためです。[#110535](https://github.com/ClickHouse/ClickHouse/pull/110535) ([groeneai](https://github.com/groeneai))。
* `WHERE` で参照されているカラムに対する `ALTER TABLE ... UPDATE` によって `<cond>` に一致するようになった行が、`TTL ... DELETE WHERE <cond>` で削除されない問題を修正しました。ミューテーション時に行の有効期限 (TTL) が再計算されるようになったため、新たに条件に一致した期限切れの行は、気付かれないまま残り続けることなく削除されます。[#110648](https://github.com/ClickHouse/ClickHouse/pull/110648) ([groeneai](https://github.com/groeneai)).
* `non_replicated_deduplication_window` を有効にしたパーティション化された `MergeTree` テーブルへの `INSERT` において、非同期 INSERT のバッチが部分的にのみ重複排除された場合 (一部の `insert_deduplication_token` が重複し、一部が新規であった場合) に、`LOGICAL_ERROR` "Invalid partition key size: 0" が発生して処理が中断されることがある問題を修正しました。[#110651](https://github.com/ClickHouse/ClickHouse/pull/110651) ([groeneai](https://github.com/groeneai)).
* 新しいアナライザーでの定数畳み込みにより、定数の `Geometry` 値の型が暗黙的に変わってしまう問題を修正しました。`Geometry` は名前付きの `Variant` であり、その候補型の中には同じストレージレイアウトを共有するものがあります (`LineString`/`Ring`、`MultiLineString`/`Polygon`、および空の値) 。そのため、候補型だけが異なる 2 つの畳み込み済み定数が 1 つにまとめられてしまい、たとえば定数 `MULTIPOLYGON EMPTY` が `LINESTRING()` として出力されていました。[#110709](https://github.com/ClickHouse/ClickHouse/pull/110709) ([groeneai](https://github.com/groeneai)).
* read-in-order クエリにおいて、`distinct-in-order` または `aggregation-in-order` によって読み取り範囲が、`ORDER BY` が read-in-order の仮想行を設定した際のソートキーのプレフィックスよりも長く拡張される場合に、誤った結果 (マージ順序の誤り) が返される問題を修正しました。仮想行の追加のソートカラムがデフォルト値で埋められていたため、`MergingSortedTransform` の順序が狂うことがありました (debug/sanitizer ビルドでは `LOGICAL_ERROR` で異常終了) 。[#110725](https://github.com/ClickHouse/ClickHouse/pull/110725) ([groeneai](https://github.com/groeneai)).
* interserver secret を使用するクラスター上での並列レプリカ読み取りおよび Distributed 読み取りにおいて、クエリの有効なロール (SET ROLE / role=) をリモートノードへ伝播するようにしました。これまではユーザーのデフォルトロールにフォールバックしていたため、行ポリシーがイニシエーターとは異なる形で評価されていました。[#110867](https://github.com/ClickHouse/ClickHouse/pull/110867) ([evillique](https://github.com/evillique)).
* `ReplicatedMergeTree` テーブルに対するコメントのみまたは設定のみの `ALTER` が、同時実行された `ALTER ... ADD COLUMN` で追加されたカラムを暗黙的に削除してしまい、レプリカが古いテーブル構造のまま取り残されることがある、まれな競合状態を修正しました。[#111029](https://github.com/ClickHouse/ClickHouse/pull/111029) ([tiandiwonder](https://github.com/tiandiwonder)).
* `Distributed` テーブルをラップする `Merge` テーブルに対して集約を伴う `GROUP BY` を実行する際、グループ化キーがカラムの関数であり、かつ集約が同じカラムを読み取る場合 (例: `SELECT toString(g), min(g) FROM merge_over_distributed GROUP BY toString(g)`) に発生する `NUMBER_OF_COLUMNS_DOESNT_MATCH` エラーを修正しました。[#111334](https://github.com/ClickHouse/ClickHouse/pull/111334) ([groeneai](https://github.com/groeneai)).
* 左側のキーが `Nullable` で、ストレージのキーが `Nullable` でない場合に、`USING` を伴う `Join` エンジンテーブル (`StorageJoin`) に対する `FULL JOIN` が誤った結果を返す問題を修正しました。キーが `NULL` で一致しなかった左側の行に対して、`NULL` ではなく `0` が返されていました。[#111371](https://github.com/ClickHouse/ClickHouse/pull/111371) ([groeneai](https://github.com/groeneai)).
* テーブルの `fsync_part_directory` 設定が有効な場合、`ALTER TABLE ... DETACH PARTITION/PART` が `detached/` 配下に作成するクローン(パーツのサブツリーと、ディスクルートまでのディレクトリチェーン)を fsync するようになりました。これは Full(ディレクトリ)形式と Packed 形式の両方のパーツストレージに適用されます。以前は、アクティブセットから行を除外する空のカバーパーツは fsync される一方で、クローンは一切 fsync されていませんでした。そのため、確認応答の直後に電源が失われると、btrfs 上でデタッチされたデータが消失する可能性がありました(同期されていないクローンのディレクトリエントリがロールバックされ、`detached/` が空になり、`ATTACH` できるものが何も残らなくなります)。この動作は既存の `fsync_part_directory` 設定で制御され、デフォルトの動作に変更はありません。[#111426](https://github.com/ClickHouse/ClickHouse/pull/111426) ([groeneai](https://github.com/groeneai))。
* スキーマがストレージから推論される場合(例:`SELECT NULL` を実行するビューを参照する、カラム定義のない `remote()`/`Remote`/`Distributed` テーブル)、`Nullable(Nothing)`(またはテーブルで許可されていないその他の型)のカラムを `CREATE TABLE` の時点で拒否するようになりました。以前はメタデータがそのまま永続化され、次回のサーバー再起動時に読み込みに失敗するうえ、無関係なテーブルの読み込みまで妨げていました。[#111487](https://github.com/ClickHouse/ClickHouse/pull/111487) ([groeneai](https://github.com/groeneai))。
* 並列レプリカで読み取りを行う際、イニシエーター上でクエリがプロジェクション最適化(exact-count、minmax-count、またはレンジを選択しない保存済みの集約/通常プロジェクション)だけで完全に応答される場合に、サーバーが異常終了する可能性があった `LOGICAL_ERROR`(`Got read request from replica N for unknown stream ...`)を修正しました。[#111689](https://github.com/ClickHouse/ClickHouse/pull/111689) ([groeneai](https://github.com/groeneai))。
* DeltaLake へのパーティション分割された `INSERT`(`allow_experimental_delta_lake_writes=1`)で、パス文字を含むパーティション値が破損し、`NULL` が拒否される問題を修正しました。これまでは、`a/b` のような値が何の警告もなく `a` としてコミットされ、`%` を含む値では読み戻せないデータファイルが生成され、`NULL` のパーティション値は `NOT_IMPLEMENTED` で失敗していました。今後は、パーティション値はパーセントエンコードされて単一のパスセグメントとなり、実際の値はパスから解析し直すのではなく `partitionValues` に保存されます。また、`NULL`(または空文字列)のパーティション値は、`partitionValues` エントリを null として `__HIVE_DEFAULT_PARTITION__` という名前で書き込まれます。[#111793](https://github.com/ClickHouse/ClickHouse/pull/111793) ([groeneai](https://github.com/groeneai))。
* `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](https://github.com/ClickHouse/ClickHouse/pull/111997) ([groeneai](https://github.com/groeneai))。
* 統計情報を持つカラムの型を、メタデータのみを変更する `ALTER MODIFY COLUMN`(例:`Enum8` から `Int8`、`DateTime` から `UInt32`)で変更したテーブルに対して `MergeTree` のミューテーションを実行すると、`LOGICAL_ERROR`(`Type mismatch when building statistics for column`)が発生する問題を修正しました。ミューテーションは実際に書き換えるカラムの統計情報のみを再計算し、それ以外はそのまま引き継ぐようになりました。また、`MATERIALIZE COLUMN`、`MATERIALIZED` カラムの依存元カラムに対する `UPDATE`、または `CLEAR COLUMN` によって書き換えられたカラムについては、古い統計情報を保持し続けるのではなく、再計算するようになりました。[#112009](https://github.com/ClickHouse/ClickHouse/pull/112009) ([groeneai](https://github.com/groeneai))。
* `intDiv(constant, key)` または `divide(constant, key)` でフィルタリングするクエリにおいて、行が警告なく欠落する問題を修正しました。定数をキーカラムで除算する場合に、主キーおよびパーティションの解析が単調性の向きを誤って報告していたため、条件に一致するグラニュールが除外され、クエリはエラーを出さずに本来より少ない行を返していました。あわせて、最上位ビットが立った符号なし定数を被除数とする `intDiv` の問題を修正し、`Decimal` オペランドによって除算が decimal 本来のビット幅で計算される場合には単調性を主張しないようにしました。また、`IPv4`/`IPv6` 定数をキーカラムで除算する正当なクエリに対して、キー解析が `Cannot compare DB::IPv4 with long` を発生させないようにしました。[#112156](https://github.com/ClickHouse/ClickHouse/pull/112156) ([groeneai](https://github.com/groeneai))。
* `SELECT` 本体で `INTERSECT`/`EXCEPT` を使用する、または `UNION DISTINCT` と `UNION ALL` を混在させた `UNION` チェーンを使用するパラメーター化ビューが、通常のビューとして分類されてしまう問題を修正しました。このようなビューは作成自体には成功するものの、メタデータを読み戻すことができず、ロード時に `Invalid storage definition in metadata file` がスローされていました。その結果、ビューが恒久的にロード不能となり、デバッグビルドやサニタイザービルドのサーバーは起動時に異常終了していました。また、これらのビューについて `system.tables.parameterized_view_parameters` がパラメータを報告していませんでした。[#112211](https://github.com/ClickHouse/ClickHouse/pull/112211) ([groeneai](https://github.com/groeneai))。
* クエリが `geohashesInBox` を評価している間、`max_execution_time` および `KILL QUERY` が無視される問題を修正しました。このようなクエリは中断可能になる前にブロックの全行を展開していたため、キャンセルが反映されるまで数分かかっていました。現在は、この関数が行を処理しながらクエリの制限時間を確認します。ソートキー、スキップ索引、`PARTITION BY` など、永続化されたテーブル expression 内での評価は対象外であり、別途対応が進められています。[#112273](https://github.com/ClickHouse/ClickHouse/pull/112273) ([groeneai](https://github.com/groeneai))。
* 別の Merge テーブル、またはカラム型が異なる materialized view を対象とする Merge テーブルで PREWHERE を使用した際に発生する論理エラーを修正しました。あわせて、リモートサーバーから読み取るテーブル (Distributed テーブル、またはそれをラップするテーブル) において行ポリシーが警告なく無視され、ポリシーで隠すべき行が露出する可能性があった問題も修正しました。このようなクエリは現在 ILLEGAL\_PREWHERE エラーで拒否されます。代わりに、各リモートサーバー上の基盤となるローカルテーブルにこれらのポリシーを定義してください。なお、`serialize_query_plan = 1` で送信される読み取りには依然としてこのポリシーが適用されませんが、これは以前から存在する別のバグです。[#112326](https://github.com/ClickHouse/ClickHouse/pull/112326) ([PedroTadim](https://github.com/PedroTadim))。
* 型を変更する `ALTER TABLE ... MODIFY COLUMN` のミューテーションが、たとえば `KILL MUTATION` によって削除されるなどして実行されなかった場合に、古いセカンダリ (スキップ) 索引が読み取られる問題を修正しました。ディスク上のグラニュールは古い型で書き込まれているにもかかわらず新しい型でデコードされるため、`LOGICAL_ERROR` が発生したり、エクサバイト規模のメモリ割り当てが要求されたり、誤った結果が警告なく返されたりしていました。また、格納されているバイト列がまったく変わらないまま意味だけが変わるため、ミューテーションが一切作成されない expression に対する索引が誤った結果を返す問題も修正しました。たとえば、`DateTime` のタイムゾーンのみを変更する `MODIFY COLUMN` や、`UInt8` から `Bool` のようにカスタム型名のみを変更する場合が該当します。このような索引は、影響を受けるパーツではスキップされるようになりました。[#112484](https://github.com/ClickHouse/ClickHouse/pull/112484) ([groeneai](https://github.com/groeneai))。
* クラスター全体で集約を行うクエリを `serialize_query_plan = 1` と計画ベースの並列レプリカで実行した際に、マージステップがパイプラインをストリーム数ゼロにリサイズすることで `LOGICAL_ERROR` (`Cannot add transform Resize to Pipes because it has no outputs`) が発生する問題を修正しました。[#112506](https://github.com/ClickHouse/ClickHouse/pull/112506) ([groeneai](https://github.com/groeneai))。
* `ReplicatedMergeTree` のレプリカが、自身の保留中の `ALTER ... ADD COLUMN` を適用する前に、別のレプリカから取得したパーツに対してミューテーションを実行した場合に、`LOGICAL_ERROR` ("Part ... contains column ... that is absent in table ...") が発生する問題を修正しました。このようなミューテーションは、メタデータの変更が適用されるまで延期されるようになりました。[#112510](https://github.com/ClickHouse/ClickHouse/pull/112510) ([groeneai](https://github.com/groeneai))。
* `ORDER BY` がディスクへスピルするクエリにおいて、読み取りカウンター (`read_rows`、`read_bytes`、`ProfileEvents['SelectedRows']`、`ProfileEvents['SelectedBytes']`) および `READ_ROWS` と `READ_BYTES` のクォータが過剰に計上される問題を修正しました。外部ソートの一時ファイルから再読み込みされた行がソース読み取りとして二重にカウントされていたため、スピルするクエリでは読み取り量が実際より多く報告され、クォータの範囲内であっても `QUOTA_EXCEEDED` で拒否される可能性がありました。[#112645](https://github.com/ClickHouse/ClickHouse/pull/112645) ([groeneai](https://github.com/groeneai)).
* ディスクへスピルする `JOIN` の結果サイズが `ProfileEvents['JoinResultRowCount']` で過少に報告される問題を修正しました。遅延バケットから出力された行は `JoinDelayedJoinedTransformRowCount` にのみカウントされ、合計に含まれていませんでした。クエリ結果は常に正しく、誤っていたのはプロファイルイベントのみです。[#112673](https://github.com/ClickHouse/ClickHouse/pull/112673) ([groeneai](https://github.com/groeneai)).
* レプリカへの接続を確立中の分散クエリに対して、`max_execution_time` および `KILL QUERY` がエラーも出さずに機能しない問題を修正しました。このようなクエリは、残りのすべてのレプリカとリトライを順に試行し続けるのではなく、次の接続試行時に停止するようになりました。[#112689](https://github.com/ClickHouse/ClickHouse/pull/112689) ([groeneai](https://github.com/groeneai)).
* 未完了の `RENAME COLUMN` の ALTER ミューテーションが進行中であるにもかかわらず、`MergeTree` テーブルに対する `ALTER` が適用されてしまう問題を修正しました。これにより、ストレージのメタデータが互換性のない形で更新され、以降のミューテーションが完全にブロックされる可能性がありました。[#112783](https://github.com/ClickHouse/ClickHouse/pull/112783) ([Michicosun](https://github.com/Michicosun)).
* `Distributed` テーブルを対象とする `Merge` テーブルから読み取る際に、`ORDER BY` が誤った結果を返す問題を修正しました。行が順序どおりに返されないことがあり、`LIMIT` を使用した場合には結果に含まれるべき行が欠落することがありました。[#112931](https://github.com/ClickHouse/ClickHouse/pull/112931) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `share_nested_offsets` が有効 (デフォルト) なテーブルにおいて、ファイルシステムの読み取りプリフェッチが有効な状態で、削除後に再追加されたサブカラムと一緒に `Nested` カラムを読み取ると誤った結果が返される問題を修正しました。このようなクエリは、`ALTER` の影響を一切受けていない、物理的に存在するカラムに対してデフォルト値を返す可能性がありました。オブジェクトストレージでは `remote_filesystem_read_prefetch` のデフォルトが `1` であるため、デフォルト以外の設定をしなくても発生します。ローカルディスクでは `local_filesystem_read_prefetch = 1` の場合に発生します。なお、範囲が複数のブロックにまたがる場合にこのような読み取り結果が破損する、プリフェッチとは無関係の別の不具合は依然として残っており、本修正の対象外です。[#112997](https://github.com/ClickHouse/ClickHouse/pull/112997) ([groeneai](https://github.com/groeneai)).
* `PARTITION BY` を使用するウィンドウ関数や `join_algorithm = 'parallel_full_sorting_merge'` を使用する結合など、パーティションごとにデータを分散するクエリにおいて、ブロックの分配が途中の状態で1つのシャードの下流が終了した場合に発生する `Pipeline stuck` 論理エラーを修正しました。[#113190](https://github.com/ClickHouse/ClickHouse/pull/113190) ([groeneai](https://github.com/groeneai)).
* `ReplicatedMergeTree` で `alter_sync = 2` を指定した `ALTER`、`OPTIMIZE`、`TRUNCATE` およびパーティション操作のステートメントが別のレプリカを待機している間に、 (たとえば同時実行された `DROP DATABASE ... SYNC` によって) テーブルのシャットダウンが開始されるとハングする問題を修正しました。このようなステートメントは `UNFINISHED` で失敗するようになり、`max_execution_time` および `KILL QUERY` にも従うようになりました。[#113228](https://github.com/ClickHouse/ClickHouse/pull/113228) ([groeneai](https://github.com/groeneai)).
* `read_in_order_use_virtual_row` が有効な状態で、`MergeTree` の read-in-order クエリにおいて `WITH FILL ... INTERPOLATE` と `IN` または `has` フィルターを組み合わせた場合に発生する `Cannot insert element into Set` (`NOT_IMPLEMENTED`) エラーを修正しました。[#113264](https://github.com/ClickHouse/ClickHouse/pull/113264) ([groeneai](https://github.com/groeneai)).
* 設定 `inject_random_order_for_select_without_order_by` が有効で、集計クエリが `Distributed` の子テーブルを含む `Merge` テーブルから読み取る場合に発生する論理エラー (例外) `Chunk info was not set for chunk in MergingAggregatedTransform` を修正しました。中間ステージまでしかプランニングされないクエリには、ランダムな `ORDER BY rand()` ラッパーを注入しないようになりました。[#113266](https://github.com/ClickHouse/ClickHouse/pull/113266) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `MergeTree` テーブルに、時間式が同一で `WHERE` 条件のみが異なる `TTL ... DELETE WHERE` ルールが 2 つ以上ある場合に、行がまったく削除されない問題を修正しました。TTL による削除マージの後、パーツの `rows_where_ttl_info` がゼロにリセットされていたため、そのパーツに対して以降の TTL マージがスケジュールされず、期限切れの行がエラーもログメッセージも出ないまま無期限に保持されていました。[#113384](https://github.com/ClickHouse/ClickHouse/pull/113384) ([groeneai](https://github.com/groeneai)).
* sorting key、スキップ索引、`PARTITION BY` キーなど、テーブルメタデータに格納された式の中で `geohashesInBox`、`arrayFold`、`sleep`、`base58Decode`、`h3PolygonToCells`、`h3PolygonToCellsWithContainment` を評価している間、`max_execution_time` と `KILL QUERY` が無視される問題を修正しました。[#113456](https://github.com/ClickHouse/ClickHouse/pull/113456) ([groeneai](https://github.com/groeneai)).
* 複数の子テーブルを持つ `Merge` テーブルが、外側のクエリで参照されるマテリアライズド CTE を読み取る際に発生する `LOGICAL_ERROR` (`Reading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan`) を修正しました。[#113558](https://github.com/ClickHouse/ClickHouse/pull/113558) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 複数の子テーブルを持つ `Merge` テーブルに対し、カラム単体の `PREWHERE` と別途 `WHERE` を指定した `EXPLAIN ANALYZE` で発生する `Logical error: 'Required output position N is out of range for pass-through inputs'` を修正しました。[#113725](https://github.com/ClickHouse/ClickHouse/pull/113725) ([groeneai](https://github.com/groeneai)).
* カラム型が基盤ストレージと異なるビュー (例: `engine` が `String` である `system.tables` 上に定義され、`engine` が `Nullable(String)` となっている `information_schema.tables`) に対するフィルタがストレージへプッシュダウンされた際に発生する論理エラー (`Unexpected return type`) を修正しました。[#113984](https://github.com/ClickHouse/ClickHouse/pull/113984) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 述語に `IN (subquery)` を含むミューテーションが、サブクエリのセットを構築している最中に `KILL MUTATION` や `DETACH DATABASE` などによってキャンセルされた場合に発生する `Not-ready Set is passed as the second argument for function 'in'` エラーを修正しました。[#114463](https://github.com/ClickHouse/ClickHouse/pull/114463) ([groeneai](https://github.com/groeneai)).
* sorting key、プライマリキー、またはパーティションキーで使用されているカラムに対する `ALTER TABLE ... DROP COLUMN` は、`ALTER TABLE ... CLEAR COLUMN` と同様に、説明付きの `ALTER_OF_COLUMN_IS_FORBIDDEN` で失敗するようになりました。以前は、キー式の再計算に起因するわかりにくい `UNKNOWN_IDENTIFIER: Missing columns` エラーで失敗していました。グループ内のカラムがキーで使用されている場合に、共通プレフィックスを指定して `Nested` グループ全体を削除またはクリアするときも同様です。以前は、グループのデータが何の通知もなく破壊されたり、いつまでも完了しないミューテーションが残ったりする可能性がありました。また、`TTL` 式でのみ使用されているカラムを削除する場合も、どの TTL 式が壊れるかを報告するようになりました [#114468](https://github.com/ClickHouse/ClickHouse/pull/114468) ([m7kss1](https://github.com/m7kss1)).
* 1 つの `ALTER` でリネーム、削除、再追加されたカラムが、ミューテーションの保留中に自身のデフォルト値ではなく削除前のカラムの値を返す問題を修正しました。[#114601](https://github.com/ClickHouse/ClickHouse/pull/114601) ([tiandiwonder](https://github.com/tiandiwonder)).
* 基になるテーブルが親カラムを `ALIAS` として宣言している場合に、`Merge` テーブル経由でサブカラム (`.size0`、`.null`、タプル要素、`String.size`) を読み取る際の問題を修正しました。このような読み取りでは型のデフォルト値が返され、同じクエリで親カラムも選択されていると、無関係なカラムの値が返されることがありました。[#114673](https://github.com/ClickHouse/ClickHouse/pull/114673) ([groeneai](https://github.com/groeneai)).
* polygon 引数が無効な定数リテラルで、かつ `validate_polygons = 0` の場合に、MergeTree の主キーに対する `pointInPolygon` でフィルタした `SELECT` の結果から行が欠落する問題を修正しました。主キー解析が未検証のポリゴンを基にグラニュールのプルーニングを行っていたため、一致する行を含むグラニュールが除外されていました。[#114710](https://github.com/ClickHouse/ClickHouse/pull/114710) ([groeneai](https://github.com/groeneai)).
* `ALTER TABLE ... MATERIALIZE INDEX`、`MATERIALIZE STATISTICS`、`MATERIALIZE PROJECTION` のフォーマット処理で `IF EXISTS` 句が欠落し、フォーマットされたクエリがパースされたクエリと一致しなくなる問題を修正しました。また、SQL パーサーでは生成されず、フォーマットすると別のコマンドになってしまう 4 種類の `ALTER ... STATISTICS` の AST JSON ペイロードを拒否するようにしました。[#115099](https://github.com/ClickHouse/ClickHouse/pull/115099) ([groeneai](https://github.com/groeneai)).
* 集約中に Dictionary が拡張される `LowCardinality(String)` キーで集約または結合を行う際に、キャッシュされた Dictionary のハッシュに対して範囲外読み取りが発生する問題を修正しました (`TTL ... GROUP BY` 経由で発生し得ます) 。これにより誤ったハッシュが生成されることがあり、サニタイザービルドでは heap-buffer-overflow が報告されていました。[#115604](https://github.com/ClickHouse/ClickHouse/pull/115604) ([groeneai](https://github.com/groeneai)).
* `CREATE TABLE` および `ALTER TABLE` で、パーティションキーに使用されるカラムに `SZ3` などの非可逆コーデックを指定すると拒否されるようになりました。[#115626](https://github.com/ClickHouse/ClickHouse/pull/115626) ([groeneai](https://github.com/groeneai)).
* ターゲットがパラメーター化ビューである `Alias` テーブルにマッチする `Merge` テーブル経由で読み取りを行っても、`LOGICAL_ERROR: Table has no columns.` (デバッグビルドおよびサニタイザービルドではサーバーが異常終了する) が発生しなくなりました。このようなテーブルでは、パラメーター化ビュー自体と同じエラーである `STORAGE_REQUIRES_PARAMETER` が報告されるようになりました。また、カラムを提供できないその他のマッチしたテーブルについては、内部エラーではなく `UNSUPPORTED_METHOD` が報告されるようになりました。[#115896](https://github.com/ClickHouse/ClickHouse/pull/115896) ([groeneai](https://github.com/groeneai)).
* expression が `_sample_factor` を参照する保留中のミューテーションのオンザフライプレビューを修正しました。`apply_mutations_on_fly = 1` で `SAMPLE` 句を使用した場合、expression はバックグラウンドのマテリアライゼーションで永続化される値ではなく、読み取りクエリのサンプル係数で評価されていました。そのため、プレビューされた行が最終的なマテリアライズ結果と一致せず、保留中の `ALTER TABLE t DELETE WHERE _sample_factor > 1` によって `SAMPLE` 読み取りが 1 行も返さなくなることがありました。クエリ自体の `_sample_factor` カラムに変更はありません。[#115906](https://github.com/ClickHouse/ClickHouse/pull/115906) ([groeneai](https://github.com/groeneai)).
* フォーマットバージョン `V3` の統計ファイルが、`ILLEGAL_STATISTICS` で拒否されずに読み取られるようになりました。このようなファイルはごく限られた期間の `master` のビルドでのみ生成されたものですが、これを含むパーツはまったく読み取れず、読み取り専用ディスク上では `ALTER TABLE ... MATERIALIZE STATISTICS` で再生成することもできませんでした。[#116030](https://github.com/ClickHouse/ClickHouse/pull/116030) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `SELECT ... FROM t STREAM ... ORDER BY ... LIMIT n` クエリが `PROJECTION` を持つテーブルを読み取る際に発生する `Invalid number of columns in chunk pushed to OutputPort` (`LOGICAL_ERROR`) を修正しました。`STREAM` 読み取りには遅延マテリアライゼーションが適用されなくなりました。[#116187](https://github.com/ClickHouse/ClickHouse/pull/116187) ([groeneai](https://github.com/groeneai)).
* Replicated データベースでは `ALTER TABLE ATTACH PARTITION FROM` をレプリケートしないようにしました。[#94835](https://github.com/ClickHouse/ClickHouse/pull/94835) ([MikhailBurdukov](https://github.com/MikhailBurdukov)).
* ロールバックされたトランザクションの MergeTree パーツがコミット済みパーツと交差している場合に、テーブル起動時にサーバーがアボートする問題 (sanitizer ビルドの場合) と、データがサイレントに失われる問題を修正しました。`PartLoadingTree::add` は、交差する 2 つのパーツのうちどちらがロールバックされたものかを正しく判別して除外し、孤立した子パーツを正しい順序でコミット済みパーツの配下に付け替えるようになりました。[#100992](https://github.com/ClickHouse/ClickHouse/pull/100992) ([tuanpach](https://github.com/tuanpach))。
* MergeTree テーブルの `Array(LowCardinality(String))` カラムに対して `indexOfAssumeSorted` が誤った結果を返す問題を修正しました。[#101771](https://github.com/ClickHouse/ClickHouse/pull/101771) ([Onyx2406](https://github.com/Onyx2406))。
* `Iceberg` メタデータの同時更新や `DeltaLake` テーブルに対する `merge` 読み取りなど、`datalake_table_state` が固定されないまま読み取りパイプラインに到達し得る経路で `Iceberg` または `DeltaLake` のデータレイクテーブルを読み取ると、`LOGICAL_ERROR` 例外が発生する問題を修正しました。[#102033](https://github.com/ClickHouse/ClickHouse/pull/102033) ([groeneai](https://github.com/groeneai))。
* `Time` 型のパーティションキーを持つテーブルで、`OPTIMIZE TABLE ... PARTITION ...` (および `convertFieldToTypeImpl` を介してパーティション値を解決するその他のクエリ) が `Logical error: Parsed partition value: ... doesn't match partition value for an existing part with the same partition ID: ...` をスローする問題を修正しました。[#106202](https://github.com/ClickHouse/ClickHouse/pull/106202) ([groeneai](https://github.com/groeneai))。
* 論理削除の結果としてプロジェクションパーツが残らない場合 (プロジェクションが出力行 0 件で再構築された場合、または削除された場合。`lightweight_mutation_projection_mode = 'rebuild'`/`'drop'`) に、データパーツのプロジェクションが破損していると誤ってマークされる問題を修正しました。これまでは、この破損ステートにより、そのパーツに対するクエリでプロジェクション最適化が無効になっていました。[#106273](https://github.com/ClickHouse/ClickHouse/pull/106273) ([tiandiwonder](https://github.com/tiandiwonder))。
* `system.warnings` のメモリ/CPU/ミューテーション過負荷警告が、非同期メトリクスのサイクル 1 回分遅れて反映される (さらに最初のサイクルでは表示されない) 問題を修正しました。[#108035](https://github.com/ClickHouse/ClickHouse/pull/108035) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 実験的設定 `make_distributed_plan = 1` を有効にした状態で、`Distributed` テーブルまたはビューを対象とする `Merge` テーブルにクエリを実行すると、`LOGICAL_ERROR` 例外 (`ScatterExchangeStep should have one source shard, got 8`) が発生し、行が重複する問題を修正しました。[#108401](https://github.com/ClickHouse/ClickHouse/pull/108401) ([groeneai](https://github.com/groeneai))。
* `Nullable(Tuple(...))` カラムの非 Nullable な `LowCardinality` 要素をサブカラムとして (例えばソートキーとして) 使用すると、マージ中にサーバーがアボートする問題 (`Sort order of blocks violated`) と、誤った読み取りが発生する問題を修正しました。[#108679](https://github.com/ClickHouse/ClickHouse/pull/108679) ([groeneai](https://github.com/groeneai))。
* アカウントキーが有効な Base64 でない場合に、`azureBlobStorage()` (および関連する Azure テーブル関数/ストレージ) 経由で到達し得る、同梱の Azure SDK の `Base64Decode` でクラッシュする問題を修正しました。`>= 0x80` のバイトによってデコードテーブルの範囲外読み取りが発生し、また無効なバイト全般によって負の値に対する未定義の左シフトが発生していました (sanitizer 環境ではアボート) 。無効なキーは適切に拒否されるようになりました。[#108716](https://github.com/ClickHouse/ClickHouse/pull/108716) ([groeneai](https://github.com/groeneai))。
* 以前の同種の操作が中断され (例えばトランザクションのロールバックやクラッシュなど) 、古い `tmp_empty_<part>` ディレクトリが残った状態で MergeTree テーブルに対して `DROP`/`DETACH`/`MOVE`/`REPLACE PARTITION` を実行すると、debug ビルドおよび sanitizer ビルドでサーバーがアボートする可能性がある `LOGICAL_ERROR` ("New empty part is about to materialize but the directory already exist") を修正しました。古いディレクトリは、エラーにせず再利用されるようになりました。[#108879](https://github.com/ClickHouse/ClickHouse/pull/108879) ([groeneai](https://github.com/groeneai))。
* ワイドパーツでカラムの `TTL` が期限切れになった後、プロジェクションがカラムの DDL `DEFAULT` (例: `-1`) ではなく型のデフォルト値 (例: `0`) を返す問題を修正しました。[#109013](https://github.com/ClickHouse/ClickHouse/pull/109013) ([tiandiwonder](https://github.com/tiandiwonder))。
* カスタムの `disk` 設定 (`SETTINGS disk = disk(...)`) で作成された `MergeTree` テーブルに対する `ALTER` クエリが失敗する問題を修正しました。[#109199](https://github.com/ClickHouse/ClickHouse/pull/109199) ([Michicosun](https://github.com/Michicosun))。
* `MaterializedPostgreSQL` データベースのテーブルを `Merge` テーブル経由で読み取る際に、古い行や削除済みの行が表示される問題を修正しました。[#109339](https://github.com/ClickHouse/ClickHouse/pull/109339) ([vdimir](https://github.com/vdimir))。
* 値が `Int32` に収まらない `BIGINT` カラムでパーティション化された Paimon テーブルを読み取れない問題を修正しました。このようなパーティション値が切り詰められ (例: `9223372036854775807` が `-1` になる) 、誤ったパーティションパスが生成された結果、ファイルシステムエラーで失敗していました。[#109510](https://github.com/ClickHouse/ClickHouse/pull/109510) ([groeneai](https://github.com/groeneai))。
* 子テーブルに、既存カラムそのものをフィルタとする行ポリシー (例: `CREATE ROW POLICY ... USING flag`) が設定されている `Merge` テーブルから読み取る際に発生する論理エラー ("Cannot determine row level filter; 0 columns deleted, 0 columns added") を修正しました。[#109843](https://github.com/ClickHouse/ClickHouse/pull/109843) ([groeneai](https://github.com/groeneai))。
* IcebergLocal がストレージタイプとして Azure を報告していた問題を修正しました。[#109872](https://github.com/ClickHouse/ClickHouse/pull/109872) ([PedroTadim](https://github.com/PedroTadim))。
* `CHECK TABLE` で、メタデータの読み込みに失敗したプロジェクションパーツについて、誤解を招く `Columns doesn't match ... Expected: 0 columns` エラーではなく、実際の破損内容が報告されるようになりました。[#110262](https://github.com/ClickHouse/ClickHouse/pull/110262) ([Algunenano](https://github.com/Algunenano))。
* 残存している `txn_version.txt.tmp` ファイルのディスクレベルのメタデータが壊れている場合に、オブジェクトストレージディスク上の `MergeTree` テーブルが原因でサーバーの起動に失敗する問題を修正しました。[#110519](https://github.com/ClickHouse/ClickHouse/pull/110519) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `allow_part_offset_column_in_projections` または `allow_commit_order_projection` を無効化した後にテーブルをデタッチするかサーバーを再起動すると、`_part_offset` プロジェクションまたはコミット順序プロジェクションを持つ MergeTree テーブルが恒久的にアタッチできなくなる問題を修正しました。これら 2 つの設定は CREATE 時にのみ適用されるチェックであるため、ATTACH 時には再チェックされなくなりました。[#110570](https://github.com/ClickHouse/ClickHouse/pull/110570) ([groeneai](https://github.com/groeneai))。
* `ReplicatedMergeTree` において、2 つのパーティション操作 (例: 2 つの `MOVE PARTITION` / `REPLACE PARTITION` クエリ、またはそのうち 1 つとバックグラウンドの `DROP_RANGE` との競合) が、重複する範囲に対するバックグラウンドのパーツチェックを同時にキャンセルした際に、サーバーを異常終了させる可能性があったまれな `LOGICAL_ERROR` ("Unexpected number of parts to remove from parts\_queue") を修正しました。[#110738](https://github.com/ClickHouse/ClickHouse/pull/110738) ([groeneai](https://github.com/groeneai))。
* `Quantized(...)` コーデックを持つカラムがプール可能なシリアライゼーション内にネストされている場合 (例: ソースごとに同名カラムの型が異なり、`Variant` にマージされる `Merge` テーブル) に発生する可能性があった `Hash is not set for serialization` 論理エラーを修正しました。[#110776](https://github.com/ClickHouse/ClickHouse/pull/110776) ([groeneai](https://github.com/groeneai))。
* 極端な `max_streams_for_merge_tree_reading` 値 (`UInt64` の最大値付近) を `allow_asynchronous_read_from_io_pool_for_merge_tree = 1` と併用して MergeTree テーブルを読み取る際に発生する `std::length_error` (`LOGICAL_ERROR`) を修正しました。この設定値は `max_threads` と同じ上限に制限されるようになりました。[#110936](https://github.com/ClickHouse/ClickHouse/pull/110936) ([groeneai](https://github.com/groeneai))。
* 唯一のカラムに完全に期限切れとなるカラム `TTL` が設定された単一カラムの `MergeTree` テーブル (`min_bytes_for_wide_part = 1` の場合) のマージ中に、論理エラー `Cannot calculate columns sizes when columns or checksums are not initialized` が発生する問題を修正しました。[#111169](https://github.com/ClickHouse/ClickHouse/pull/111169) ([groeneai](https://github.com/groeneai))。
* `min_rows_to_fsync_after_merge` / `min_compressed_bytes_to_fsync_after_merge` / `fsync_part_directory` が設定されている場合、マージまたはマテリアライズされたパーツのテキスト索引ファイルも fsync するようにしました。従来はパーツ内でこれらのファイルだけが同期されないままだったため、マージ直後に電源断が発生すると、コミット済みにもかかわらず破損したパーツが残り、データ損失につながる可能性がありました。[#111335](https://github.com/ClickHouse/ClickHouse/pull/111335) ([groeneai](https://github.com/groeneai))。
* マニフェストのパーティションタプルがパーティション仕様と一致しない場合に、`Iceberg` テーブルに対する `OPTIMIZE TABLE ... MANIFEST` が正しく動作しない問題を修正しました [#111368](https://github.com/ClickHouse/ClickHouse/pull/111368) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni))。
* 複数の `text` 索引を持つ `MergeTree` テーブルで、テキスト索引からの直接読み取り最適化により未使用の索引仮想カラムが読み取りヘッダーに残った場合に、遅延マテリアライゼーションの最適化で発生する範囲外読み取り (リリースビルド) / 論理エラー (debug ビルド) 、および `Merge` テーブルに対する `Pipe::unitePipes` での論理エラーを修正しました。[#111467](https://github.com/ClickHouse/ClickHouse/pull/111467) ([groeneai](https://github.com/groeneai))。
* `part_minmax_index_columns` の設定を引き下げた後 (例：`with_block_number_offset` から `partition_key_only` に戻した場合) 、debug/sanitizer ビルドでバックグラウンドマージが中断されることがあった `LOGICAL_ERROR` ("Part level Min-Max index was constructed from unexpected columns set") を修正しました。[#111511](https://github.com/ClickHouse/ClickHouse/pull/111511) ([groeneai](https://github.com/groeneai))。
* 複数のパーティションを持ち、ROW POLICY が定義されたテーブルに対して `STREAM` 読み取り (`enable_streaming_queries = 1`) を実行するとクラッシュする問題を修正しました。debug および sanitizer ビルドでは論理エラー `Filter column ... not found in DAG outputs` で失敗し、リリースビルドではセグメンテーション違反が発生する可能性がありました。[#111572](https://github.com/ClickHouse/ClickHouse/pull/111572) ([groeneai](https://github.com/groeneai))。
* 現在の設定でポリモーフィックパーツが無効 (非アダプティブ granularity) になっている `MergeTree` テーブルが、既存の `Compact` パーツをロードする際に発生する `LOGICAL_ERROR` (`Cannot create part with type Compact and storage type Full because table does not support polymorphic parts`) を修正しました。この問題は、例えば読み取り専用テーブルが別のテーブルとディスク上のパスを共有しており、`SYSTEM RESTART DISK` の実行時やサーバー起動時にパーツを再ロードする場合に発生する可能性がありました。debug および sanitizer ビルドでは、この例外によってサーバーが異常終了します。[#111626](https://github.com/ClickHouse/ClickHouse/pull/111626) ([groeneai](https://github.com/groeneai))。
* `fsync_part_directory = 1` の場合、パーツディレクトリを一時名から最終名へリネームする操作自体も、親ディレクトリ (異なる親ディレクトリ間での移動の場合は移動元の親ディレクトリも) を fsync することで永続化されるようになりました。従来は移動したディレクトリのみが fsync されていたため、パーツのコミット直後に電源断が発生すると、ファイル自体は書き込み済みであってもパーツがディスク上から消失し、この設定を有効にしていても行が失われる可能性がありました。[#111861](https://github.com/ClickHouse/ClickHouse/pull/111861) ([groeneai](https://github.com/groeneai))。
* `MergeTree` テーブルから `Nullable(Tuple(...))` カラムを、NULL を保持する要素サブカラム (`Variant`、`Dynamic`、または `LowCardinality`) のいずれかと一緒に選択した場合に、誤った結果が返されたり `LOGICAL_ERROR` が発生したりする問題を修正しました。サブカラムの読み取り時に、親タプルで `NULL` である行が、サブストリームキャッシュ経由ですでに共有されていたカラム内で `NULL` としてマークされてしまい、その結果、カラム全体の読み取りでずれた値が参照されていました。[#111949](https://github.com/ClickHouse/ClickHouse/pull/111949) ([groeneai](https://github.com/groeneai))。
* 自動ディスクスピルのしきい値が設定されている場合 (26.5 以降はデフォルトで設定) 、ハッシュ結合でビルド後の最適化 (固定ハッシュテーブルへの変換、共有ランタイムフィルタ、右テーブルの範囲再設定) が失われる問題を修正しました。[#111972](https://github.com/ClickHouse/ClickHouse/pull/111972) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `simdcomp` を使用しないビルド (x86\_64 Linux 以外のすべてのターゲット。例: aarch64) で `text_index_posting_list_apply_mode = 'lazy'` の場合に、`hasAllTokens` などの複数トークンを用いる `text` 索引検索が誤った結果を返す (行がエラーなく欠落する) 問題を修正しました。ポータブルなビットパッキングデコーダーが、ビット幅が 0 のブロックに対してデコード済みのゼロを書き込んでいなかったため、単一ポスティングのセグメントに含まれるポスティングが失われていました。ディスク上のフォーマットに変更はなく、修正後は既存データも正しく読み取られます。[#112178](https://github.com/ClickHouse/ClickHouse/pull/112178) ([groeneai](https://github.com/groeneai)).
* 破損した MergeTree の統計情報を読み込んだ場合、エラーを無視せず操作が失敗するようになりました。[#112201](https://github.com/ClickHouse/ClickHouse/pull/112201) ([skuznetsov-clickhouse](https://github.com/skuznetsov-clickhouse)).
* HDFS 上で確認応答済みの Iceberg 書き込みがエラーなく失われる問題を修正しました。Iceberg のコミットは新しいメタデータファイルを条件付き書き込みで公開しますが、`HDFSObjectStorage` がその条件を無視して単純な上書きを行っていたため、同時実行された書き込みがすべて確認応答される一方で、いずれかの書き込み側のスナップショットに到達できなくなっていました。今後 HDFS は条件付き書き込みを拒否するため、HDFS 上でストレージ管理される Iceberg 書き込み (明示的なカラムリストを指定した `CREATE TABLE ... ENGINE = IcebergHDFS(...)` を含む) は失敗するようになります。読み取りには影響しません。[#112437](https://github.com/ClickHouse/ClickHouse/pull/112437) ([groeneai](https://github.com/groeneai)).
* `KeeperMap` テーブルに対する `DELETE` が、一致した行のうち先頭の `max_block_size` 行しか削除しないにもかかわらず、ミューテーションを正常完了として報告する問題を修正しました。また、`keeper_map_strict_mode = 1` での `DELETE` がアトミックでない問題も修正しました。従来は、バージョンなしの削除にフォールバックして同時に更新された行を削除してしまう可能性があったほか、一致した行をブロック単位で適用していたため、競合が発生すると削除が部分的にしか適用されない状態になる可能性がありました。[#112777](https://github.com/ClickHouse/ClickHouse/pull/112777) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 読み取りまたはマージの処理中に発生する一時的な Azure Blob Storage のエラー (RBAC 権限の伝播待ちによる `403 Forbidden`、認証情報による認証の失敗、`408` として報告される接続タイムアウト) が再試行不可能と誤って分類され、`POTENTIALLY_BROKEN_DATA_PART` (Code 740) として報告されることで、正常なパーツに対して誤った重大アラートが発生する問題を修正しました。これらの一時的な障害は再試行可能として扱われるようになり、本当に永続的な障害の場合は、実在しない破損データパーツとしてではなく、通常の Azure エラーとして報告されるようになりました。[#112871](https://github.com/ClickHouse/ClickHouse/pull/112871) ([arsenmuk](https://github.com/arsenmuk)).
* プレフィックス付きエンドポイントを使用する Azure Blob Storage ディスクで、`listObjects` が 2 ページ目以降のすべてのページで誤ったブロブ名を返す問題を修正しました。原因は、ページネーションがエンドポイントのプレフィックスを除去するクライアントラッパーを経由していなかったことです。ページネーションが継続トークンを介してラッパーを再度経由するようになり、すべてのページで正しいブロブ名が返されるようになりました。[#112872](https://github.com/ClickHouse/ClickHouse/pull/112872) ([arsenmuk](https://github.com/arsenmuk)).
* パーツ全体を書き換えないミューテーションによって生成されたパーツで、テーブルの再読み込み後に `_block_number` および `_block_offset` に対するパーツ単位の minmax 索引が失われる問題を修正しました。[#112878](https://github.com/ClickHouse/ClickHouse/pull/112878) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* ミューテーションの述語で、データベース名を明示せずに `merge` テーブル関数を使用すると例外 (リリースビルドではサーバーが起動できなくなるエラー) が発生する問題を修正しました。テーブル名の場合と同様に、ミューテーション対象テーブルのデータベースが使用されるようになりました。[#113185](https://github.com/ClickHouse/ClickHouse/pull/113185) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `share_nested_offsets = 1` を設定した `MergeTree` テーブルで、削除後に再追加された `Nested` メンバーのサブカラムを同じグループ内の既存メンバーと一緒に読み取ると、誤った結果が返されたり `LOGICAL_ERROR` が発生したりする問題を修正しました。読み取りが複数の block にまたがる場合、既存メンバーが後続の block の値を返していました。[#113225](https://github.com/ClickHouse/ClickHouse/pull/113225) ([groeneai](https://github.com/groeneai))。
* 非常に大きな `max_streams_to_max_threads_ratio` を指定して `Merge` テーブルから読み取ると、デバッグビルドおよびサニタイザービルドで算術例外が発生する問題を修正しました。ストリーム数が 32 ビットに切り詰められていたため、`2^32` の倍数が 0 になっていました。あわせて、`Merge` テーブルのストリーム数の乗算結果が `size_t` を超える場合は未定義動作を引き起こさずに `PARAMETER_OUT_OF_BOUND` をスローするようにし、`MergeTree` のストリーム数をデータ量に応じて制限する際のオーバーフローを回避し、合計ソース数が 65536 を超える `Merge` テーブルの読み取りを拒否するようにしました。[#113382](https://github.com/ClickHouse/ClickHouse/pull/113382) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `hdfs` ディスクへの書き込みが `Parent directory doesn't exist` で失敗する問題を修正しました。生成されるオブジェクトキーにはネストされたディレクトリのプレフィックスが含まれますが、blob ストレージとは異なり HDFS には実際のディレクトリが存在し、ファイル作成時に存在しない親ディレクトリを自動作成しないことが原因でした。[#113396](https://github.com/ClickHouse/ClickHouse/pull/113396) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `remote`/`remoteSecure` テーブル関数または `Remote`/`RemoteSecure` テーブルエンジンに、存在しない名前付きコレクションと `key = value` 形式のオーバーライドを同時に指定した場合のエラー報告を修正しました。このような呼び出しは警告なしに位置引数による呼び出しとして再解析されていたため、オーバーライドがデータの expression として解析され、無関係なエラーが報告されていました(例: `remote(collection, database = merge(...))` に対して Function with name `merge` does not exist)。現在は、名前付きコレクションが存在しないことが正しく報告されます。[#113510](https://github.com/ClickHouse/ClickHouse/pull/113510) ([groeneai](https://github.com/groeneai))。
* `merge_max_block_size_bytes` が空のカラムの `byteSize()` より小さく設定されている場合に、バックグラウンドマージおよび `OPTIMIZE` が無限ループに陥る問題を修正しました。空の `LowCardinality` カラムも辞書を保持しているため、1 行もマージしないうちにバイト制限に達することがあり、その結果マージが空の block を延々と生成し続け、CPU コアを 100% 消費したまま background pool のスロットを解放しませんでした。[#113585](https://github.com/ClickHouse/ClickHouse/pull/113585) ([groeneai](https://github.com/groeneai))。
* テーブルで `serialization_info_version = 'basic'` を使用している場合に、Compact パーツのミューテーション結果が、パーツのシリアライゼーション情報がメモリ上に残っているか `serialization.json` から再読み込みされたかによって異なってしまう問題を修正しました。`ReplicatedMergeTree` では、バイト単位で同一のソースパーツを持つ 2 つのレプリカが異なるミューテーション後のパーツを書き込み、ミューテーションが `CHECKSUM_DOESNT_MATCH` で失敗していました。[#113588](https://github.com/ClickHouse/ClickHouse/pull/113588) ([groeneai](https://github.com/groeneai))。
* 宛先ストレージが .lock ファイルを読み取れない場合に、バックアップが同時実行中のバックアップがあると誤って報告するのではなく、根本原因であるロックファイルへのアクセスエラーを報告するようになりました。[#113637](https://github.com/ClickHouse/ClickHouse/pull/113637) ([kirillshokhin](https://github.com/kirillshokhin))。
* `MergeTree` テーブルのバックグラウンドタスク(統計のリフレッシュ、パーツのリフレッシュ、古いパーツ/予期しないパーツの読み込み)とテーブルの破棄との間で発生するデータ競合を修正しました。[#113722](https://github.com/ClickHouse/ClickHouse/pull/113722) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 更新対象テーブルのデータベースが session のデータベースと異なる場合に、`UPDATE` および論理削除(lightweight `DELETE`)が誤ったテーブルを読み取る問題を修正しました。カレントデータベースを暗黙的に使用する `merge` テーブル関数と、修飾されていないテーブル識別子のいずれについても、ミューテーションの expression が更新対象テーブルのデータベースを基準に正規化されるようになりました。以前はこれらの名前が session のデータベースを基準に解決されていたため、ステートメントが別のテーブルから選択した行を、警告なしに更新または削除していました。[#113748](https://github.com/ClickHouse/ClickHouse/pull/113748) ([groeneai](https://github.com/groeneai))。
* 主キー範囲のレイヤー単位で `MergeTree` テーブルを読み取る際に、いずれかのレイヤーが空のパイプを生成すると例外が発生する問題を修正しました。[#114177](https://github.com/ClickHouse/ClickHouse/pull/114177) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `BACKUP`、`RESTORE`、および `ENGINE = Backup` は、`s3()`、`file()`、`azureBlobStorage()` と同様に、ユーザーの `SOURCES` 権限に基づいてバックアップの保存先を認可するようになりました。これまでは、`BACKUP` 権限を持ちながら `SOURCES` 権限を持たないユーザーでも、サーバーから到達可能な任意の場所にバックアップを書き込んだり、任意の場所からバックアップを読み取ったりできました。今後は、バックアップの書き込みには宛先のソースに対する `WRITE` 方向の権限 (`WRITE ON S3`、`WRITE ON AZURE`、`WRITE ON FILE`) が、読み取りには `READ` が必要です。なお、`Disk(...)` の宛先は引き続き `backups.allowed_disk` によってのみ制限されます。[#114405](https://github.com/ClickHouse/ClickHouse/pull/114405) ([groeneai](https://github.com/groeneai)).
* ミューテーション実行中のテーブル読み取りに関する問題を修正しました。`MATERIALIZED` カラムが古い値を返す場合があったほか、更新済みのカラムと一緒に選択するとエラーで失敗する場合がありました。[#114561](https://github.com/ClickHouse/ClickHouse/pull/114561) ([tiandiwonder](https://github.com/tiandiwonder)).
* 内部に集合演算を含む子テーブルを持つ `Merge` テーブルを、`make_distributed_plan` を有効にした状態で読み取ると論理エラー (`Block structure mismatch`) が発生する問題を修正しました。[#114753](https://github.com/ClickHouse/ClickHouse/pull/114753) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* コンパクションを実装していないエンジンを使用するオブジェクトストレージテーブルに対して `OPTIMIZE TABLE` を実行すると、実際には何も処理していないにもかかわらず成功が返されていました。今後は、このステートメントをサポートしない他のすべてのエンジンと同様にエラーを返します。この変更は `DeltaLake`、`Paimon`、`Hudi`、および通常のオブジェクトストレージエンジン (`S3`、`GCS`、`COSN`、`OSS`、`AzureBlobStorage`、`HDFS`、オブジェクトストレージをバックエンドとする `URL`) が対象です。コンパクションを実装している `Iceberg` には変更はありません。[#114805](https://github.com/ClickHouse/ClickHouse/pull/114805) ([groeneai](https://github.com/groeneai)).
* `allow_deprecated_syntax_for_merge_tree` を有効にし、非推奨の位置指定構文で作成した `ReplicatedMergeTree` で `BAD_DATA_PART_NAME` ("Trying to get part name in new format for old format version") が発生する問題を修正しました。この問題により、ミューテーションを適用していないレプリカでそのミューテーションが完了済みとして報告されたり、再起動後にテーブルが読み取り専用のままになったりすることがありました。[#114980](https://github.com/ClickHouse/ClickHouse/pull/114980) ([groeneai](https://github.com/groeneai)).
* 論理更新を使用するテーブルで `Found patch part ... that intersects mutation with version ...` (`LOGICAL_ERROR`) が発生する問題を修正しました。パッチパートのマージによって、データバージョンの範囲が既存パーツのデータバージョンをまたぐパッチが生成されることがありました。このようなパッチは適用もスキップもできないため、そのパーティションに対する以降の操作がすべて失敗し、レプリケーションキューが停止していました。今後、このようなマージは割り当てられません。[#115064](https://github.com/ClickHouse/ClickHouse/pull/115064) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Backup` データベースエンジンが利用できなくなったバックアップ (ファイルが削除された場合や、基盤となるストレージにアクセスできない場合など) を参照していると、サーバーの起動に失敗する問題を修正しました。今後は、サーバー全体の起動が妨げられることはなく、該当するデータベースはテーブルなしの状態でロードされます。[#83188](https://github.com/ClickHouse/ClickHouse/pull/83188) ([orloffv](https://github.com/orloffv)).
* ディスクフルエラー発生後にログが復旧しない問題を修正しました。これまでは、ログ用ディスクが満杯になると ClickHouse が失敗状態に陥り、syslog にエラーメッセージを大量に出力し続け (1 時間あたり 100 GB 以上に達する可能性がありました)、ディスク容量が解放された後も復旧しませんでした。今後は、ディスク容量が確保されると、サーバーを再起動しなくてもロギングシステムが自動的に復旧します。[#93127](https://github.com/ClickHouse/ClickHouse/pull/93127) ([jaehanbyun](https://github.com/jaehanbyun)).
* DeltaLake ストレージのスキーマビジターで発生するクラッシュを修正しました。[#97112](https://github.com/ClickHouse/ClickHouse/pull/97112) ([kssenii](https://github.com/kssenii)).

<h3 id="data-lake-and-external-storage-fixes">
  データレイクおよび外部ストレージ関連の修正
</h3>

* S3 のマルチパートアップロード (例: `INSERT INTO ... hits_s3`) で一時的に発生する `Code: 499 ... InvalidPart` (`S3_ERROR`) エラーを修正しました。MinIO は `CompleteMultipartUpload` の実行時に、アップロード直後のパーツを一時的に存在しないものとして報告することがあります。このエラーは、従来から処理されていた `NoSuchKey` と同様に、`s3_max_unexpected_write_error_retries` を上限として再試行されるようになりました。[#109364](https://github.com/ClickHouse/ClickHouse/pull/109364) ([groeneai](https://github.com/groeneai))。
* データファイル形式が `Parquet` 以外の Iceberg テーブルに対する `ALTER TABLE ... DELETE` および `ALTER TABLE ... UPDATE` は、サーバーをクラッシュさせたりテーブルを気付かないうちに破損させたりせず、明確な `NOT_IMPLEMENTED` エラーで拒否されるようになりました。[#105893](https://github.com/ClickHouse/ClickHouse/pull/105893) ([groeneai](https://github.com/groeneai))。
* `file`、`s3`、`input` などのテーブル関数からの `INSERT SELECT` で、同じソースカラムを複数回選択した場合に発生するエラー `Cannot add column ...: column with this name already exists` を修正しました。[#105982](https://github.com/ClickHouse/ClickHouse/pull/105982) ([crakjie](https://github.com/crakjie))。
* HTTP クエリ文字列のパラメータとして渡される機密値 (例: `param_secret_key`/`param_aws_secret_access_key` などの `param_*` クエリパラメータバインディング、`password` パラメータ、S3 形式の `signature` パラメータなど) が、`system.text_log` や OpenTelemetry のスパンにそのまま書き込まれなくなりました。`Request URI` のログ行では、機密情報と思われる名前を持つパラメータの値が `[HIDDEN]` に置き換えられてマスクされます。[#108475](https://github.com/ClickHouse/ClickHouse/pull/108475) ([groeneai](https://github.com/groeneai))。
* `S3Queue` および `AzureQueue` テーブルエンジンの `_etag` 仮想カラムを修正しました。このカラムは宣言されているものの値が設定されていなかったため、`SELECT _etag` は常に空文字列を返していました。現在は `S3` エンジンや `s3()` テーブル関数と同様に、オブジェクトの ETag を返します。[#108625](https://github.com/ClickHouse/ClickHouse/pull/108625) ([groeneai](https://github.com/groeneai))。
* S3 への読み書きを行うクエリが、S3 リクエストの処理中に (例: `KILL QUERY` によって) キャンセルされた場合、誤解を招くネットワークエラーや S3 エラーではなく、キャンセルとして報告されるようになりました。特に、S3 へのバックアップまたはリストアがキャンセルされた場合は、`system.backups` に `BACKUP_CANCELLED`/`RESTORE_CANCELLED` と記録されるようになりました。[#108673](https://github.com/ClickHouse/ClickHouse/pull/108673) ([jkartseva](https://github.com/jkartseva))。
* `S3Queue` テーブルエンジンの `_tags` 仮想カラムを修正しました。このカラムは宣言されているものの値が設定されていなかったため、`SELECT _tags` は常に空のマップを返していました。現在は `S3` エンジンや `s3()` テーブル関数と同様に、オブジェクトのタグを返します。[#108676](https://github.com/ClickHouse/ClickHouse/pull/108676) ([groeneai](https://github.com/groeneai))。
* データレイクカタログのデータベースで、SHOW TABLES と SELECT ... FROM system.tables が異なる結果を返す問題を修正しました。ClickHouse が読み取れないテーブルは、どちらでも一貫して非表示になります。[#109273](https://github.com/ClickHouse/ClickHouse/pull/109273) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni))。
* Delta Lake テーブル (`DeltaLakeLocal` / `deltaLake`) への `INSERT` が、シンクによる書き込み開始後に失敗した場合 (例: ソースクエリが挿入途中で例外をスローした場合やクエリがキャンセルされた場合) に、サーバーがアボートする (リリースビルドではデータファイルが未完了のまま気付かれずに残る) 問題を修正しました。[#109328](https://github.com/ClickHouse/ClickHouse/pull/109328) ([groeneai](https://github.com/groeneai))。
* `optimize_functions_to_subcolumns=1` (デフォルト) の状態で、古いデータファイルの書き込み後にスキーマ進化によって追加された Iceberg カラムに対して `WHERE col IS NULL` / `IS NOT NULL` を実行すると、`Not found column or subcolumn c.null in block` (debug/sanitizer ビルドでは `Bad cast from ColumnConst to ColumnNullable`) が発生する問題を修正しました。[#109515](https://github.com/ClickHouse/ClickHouse/pull/109515) ([groeneai](https://github.com/groeneai))。
* `CREATE TABLE ... AS SELECT` クエリにおいて、`s3` テーブル関数の URL 引数として (または他の任意のテーブル関数の引数として) スカラーサブクエリを使用すると `Host is empty in S3 URI` エラーが発生する問題を修正しました。テーブル関数の引数に含まれるスカラーサブクエリは、クエリ解析の段階で評価されるようになりました。[#110254](https://github.com/ClickHouse/ClickHouse/pull/110254) ([CheSema](https://github.com/CheSema)).
* Iceberg テーブルに対して `UPDATE ..., DELETE ...` のような複数コマンドを含む `ALTER` を発行すると、論理エラー (debug/sanitizer ビルドではサーバーが異常終了) が発生する問題を修正しました。このようなミューテーションは、明確な `NOT_IMPLEMENTED` エラーで拒否されるようになりました。[#110347](https://github.com/ClickHouse/ClickHouse/pull/110347) ([groeneai](https://github.com/groeneai)).
* 初期スキーマにネストされたフィールド (`Tuple`/`Array`/`Map`) が含まれる場合、`ALTER TABLE ... ADD COLUMN` の実行後に Iceberg テーブルでフィールド ID が重複する問題を修正しました。`last-column-id` には、ネストされた子要素も含めて割り当て済みの最大フィールド ID が記録されるようになりました。これにより、後から追加したカラムがネストされたフィールドの ID を再利用することはなくなり、読み取りが `ICEBERG_SPECIFICATION_VIOLATION` (`Duplicate field id`) で失敗することもなくなりました。[#110884](https://github.com/ClickHouse/ClickHouse/pull/110884) ([groeneai](https://github.com/groeneai)).
* `ALTER TABLE ... ADD COLUMN` の実行前と実行後の両方で書き込まれたデータファイルがテーブルに含まれ、かつ `optimize_move_to_prewhere` が有効な場合に、Iceberg テーブルに対する `DELETE`/`UPDATE` が誤った行を警告なしに削除する (または `NOT_FOUND_COLUMN_IN_BLOCK` をスローする) 問題を修正しました。[#111693](https://github.com/ClickHouse/ClickHouse/pull/111693) ([groeneai](https://github.com/groeneai)).
* Iceberg テーブルに対して `ALTER TABLE ... EXECUTE expire_snapshots` を実行すると、保持されたスナップショットの `system.iceberg_history` における `made_current_at` が `1970-01-01` になる問題を修正しました。また、メタデータに `snapshot-log` がないテーブルについて `system.iceberg_history` が行を返さない問題も修正しました。[#111781](https://github.com/ClickHouse/ClickHouse/pull/111781) ([groeneai](https://github.com/groeneai)).
* `MATERIALIZED VIEW` 経由で Iceberg テーブルに挿入する際に発生するデータ破損を修正しました。データファイルがターゲットの現在の Iceberg スキーマではなく `CREATE` 時点のカラム型に基づいて書き込まれていたため、`DateTime` 値が素の Avro `int` として格納されてマイクロ秒として読み出され、`DateTime64(0)` や `DateTime64(9)` の場合にはファイル自体を読み出せませんでした。この修正に伴い、Iceberg スキーマがビューで宣言されたカラムよりも多いターゲットに対して `INSERT INTO <materialized view>` を実行すると、破損した行を書き込むのではなく `TYPE_MISMATCH` が発生するようになりました。[#112359](https://github.com/ClickHouse/ClickHouse/pull/112359) ([groeneai](https://github.com/groeneai)).
* タプル内にネストされたタプルをスキーマに含む Iceberg テーブルへの書き込みを修正しました。公開されるテーブルメタデータで内側のタプルのフィールド名が位置ベースの名前 `1`、`2`、... に置き換えられていたため、デフォルトの `Parquet` フォーマットでは `INSERT` が `INCORRECT_DATA` で失敗し、`Avro` ではカラムを読み出せませんでした。[#112480](https://github.com/ClickHouse/ClickHouse/pull/112480) ([groeneai](https://github.com/groeneai)).
* 2 つのクエリが同じテーブル名を同時に解決すると、`Filesystem` または `HDFS` データベースが永続的に停止してしまうデッドロックを修正しました。この状態になると、以降そのデータベースに対するすべてのクエリが無期限にブロックされて中断もできず、復旧にはサーバーの再起動が必要でした。[#112495](https://github.com/ClickHouse/ClickHouse/pull/112495) ([groeneai](https://github.com/groeneai)).
* `WHERE` 述語の `NOT` 配下に delta-kernel の述語変換器が処理できない部分式が含まれている場合に、`DeltaLake` テーブルが本来より少ない行を返す問題を修正しました。このような部分式は、子イテレータの終端としてではなく、明示的な不明述語として delta-kernel に通知されるようになりました。従来は、これにより外側の論理積が警告なしに切り詰められていました。[#112652](https://github.com/ClickHouse/ClickHouse/pull/112652) ([groeneai](https://github.com/groeneai)).
* `ALTER TABLE ... EXECUTE remove_orphan_files` が Iceberg テーブルの使用中の `metadata/version-hint.text` を削除してしまう問題を修正しました。到達可能セットのエントリは、末尾にスラッシュが付くことのない値に末尾スラッシュがあると仮定して文字列を連結することで構築されていました。そのため、実際のヒントファイルが到達可能と認識されず、`older_than` のしきい値より古くなった時点で削除されていました。その結果、`iceberg_use_version_hint = 1` の場合はテーブルをまったく読み取れなくなっていました。[#113548](https://github.com/ClickHouse/ClickHouse/pull/113548) ([groeneai](https://github.com/groeneai))。
* `ALTER TABLE ... MODIFY COLUMN` によって `Nullable` に変更された Iceberg のカラムでフィルタリングすると `LOGICAL_ERROR` が発生する問題を修正しました。[#114521](https://github.com/ClickHouse/ClickHouse/pull/114521) ([groeneai](https://github.com/groeneai))。
* `ENGINE = URL(...)` 定義を含む `ATTACH TABLE` が、URL スキームに応じた振り分け先エンジンの `TABLE ENGINE` 権限をチェックしていなかった問題を修正しました。これにより、`TABLE ENGINE ON URL` のみを持つユーザーが、`File`、`S3`、`AzureBlobStorage`、`HDFS` をバックエンドとするテーブルをアタッチして読み取れてしまっていました (`CREATE TABLE` では正しく拒否されます) 。[#115914](https://github.com/ClickHouse/ClickHouse/pull/115914) ([groeneai](https://github.com/groeneai))。
* IPv4 と IPv6 の両方を公開しているホストで、一方のアドレスファミリーしかルーティングできない場合に、外部への HTTP リクエスト (例: \`aiGenerate\`、\`url\` テーブル関数、S3) が \`No route to host\` で失敗する問題を修正しました。HTTP 接続プールは、最初のアドレスがネットワークエラーで失敗した場合、最初のリクエストの時点でエラーを伝播させるのではなく、名前解決された次のアドレスにフォールバックするようになりました。[#103786](https://github.com/ClickHouse/ClickHouse/pull/103786) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 2 つのフィールドからなる `{key, value}` レコードの Avro `array` を、ClickHouse の `Map` カラムに読み込めるようにしました。これは、Iceberg や Spark が文字列以外のキーを持つ `MAP<K, V>` に対して生成するエンコーディングです (Avro のネイティブ Map は文字列キーのみをサポートします) 。従来、このようなファイルは `Array(Tuple(key, value))` としては読み込めましたが、`Map(K, V)` としては読み込めず、`Type Map(...) is not compatible with Avro array` で失敗していました。[#109289](https://github.com/ClickHouse/ClickHouse/pull/109289) ([groeneai](https://github.com/groeneai))。
* バージョン番号がすべて数字でありながら 32 ビット整数の範囲を超えるメタデータファイル (例: `v99999999999999999999.metadata.json`) を持つ Iceberg テーブルを読み取る際の問題を修正しました。従来、このような名前に対しては、明確な `BAD_ARGUMENTS` エラーではなく、原因のわかりにくい `std::out_of_range` (`STD_EXCEPTION`) が発生していました。[#109619](https://github.com/ClickHouse/ClickHouse/pull/109619) ([groeneai](https://github.com/groeneai))。
* 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](https://github.com/ClickHouse/ClickHouse/pull/109812) ([groeneai](https://github.com/groeneai))。
* 書き込みフォーマットが `Avro` の Iceberg テーブルで、型が `list`、`map`、`struct` のいずれかで `"required": false` と宣言されたフィールドが、`["null", T]` ユニオンを伴わない必須フィールドとしてシリアライズされていた問題を修正しました。これにより、データファイル自体のスキーマがテーブルのメタデータと食い違い、他の Iceberg リーダーからは必須フィールドとして扱われていました。今後このようなフィールドは、Iceberg の仕様でオプションフィールドに用いられる `["null", T]` ユニオンとして書き込まれます。[#112648](https://github.com/ClickHouse/ClickHouse/pull/112648) ([groeneai](https://github.com/groeneai))。
* Iceberg の `snapshot-log` に同じ `snapshot-id` が複数回出現する場合 (ロールバック後に発生) に、`system.iceberg_history` の `made_current_at` が、スナップショットが current になった最後の時刻ではなく最初の時刻を報告していた問題を修正しました。[#113598](https://github.com/ClickHouse/ClickHouse/pull/113598) ([groeneai](https://github.com/groeneai))。
* 名前付きコレクションで `http_client = 'gcp_oauth'` が設定されており、Google OAuth2 トークンエンドポイントが接続を受け付けたまま応答を返さない場合に、`BACKUP`/`RESTORE ... TO S3`、GCS ディスク、および `s3` テーブル関数が最大 1 時間ハングする問題を修正しました。Bearer トークンのリクエストは呼び出し元のデータ転送リクエストのタイムアウトを継承しなくなり、応答の待機時間は STS `AssumeRole` リクエストの上限に合わせて 10 秒に制限されます。[#115531](https://github.com/ClickHouse/ClickHouse/pull/115531) ([groeneai](https://github.com/groeneai))。
* バックグラウンドでのキャッシュのダウンロードが `ErrnoException` 以外の例外で失敗した場合 (例えば Iceberg テーブルに対する `OPTIMIZE` の実行中) に、空の孤立したキャッシュファイルが残り、ファイルシステムキャッシュで論理エラー (`Expected file ... not to exist`) が発生する可能性があった問題を修正しました。[#110549](https://github.com/ClickHouse/ClickHouse/pull/110549) ([groeneai](https://github.com/groeneai))。
* 最大エントリ数で設定されたキャッシュ (`SLRU` ポリシー) において、その上限数のエントリがそれぞれ 2 回以上アクセスされると、新しいエントリを受け入れなくなり、しかもそれが通知されなかった問題を修正しました。影響を受けるキャッシュは、Iceberg および Paimon のメタデータファイルキャッシュ、Parquet メタデータキャッシュ、テキスト索引キャッシュ、ベクトル類似度索引キャッシュ、コンパイル済み式キャッシュ、ObjectStorageQueue のファイルステータスキャッシュです。[#115517](https://github.com/ClickHouse/ClickHouse/pull/115517) ([groeneai](https://github.com/groeneai))。
* 可変の `snapshot/LATEST` ヒントが同時に置き換えられている最中に、Paimon テーブルの読み取りが失敗する可能性があった問題を修正しました。ヒントが無効または古い場合は、安全にスナップショットの一覧取得へフォールバックするようになりました。[#112010](https://github.com/ClickHouse/ClickHouse/pull/112010) ([JiaQiTang98](https://github.com/JiaQiTang98))。
* 入力バッファ (例えば `restricted_seek = true` の S3 読み取りバッファ) が minizip から要求された seek や読み取りを拒否したために zip アーカイブを展開できない場合に、根本原因となった実際の例外を表示するようにしました。これまでは、実際のエラーが汎用的な `Couldn't unpack zip archive: Code = -100` / `Couldn't open zip archive` メッセージに隠れていました。[#105103](https://github.com/ClickHouse/ClickHouse/pull/105103) ([groeneai](https://github.com/groeneai))。
* refs を持たないメタデータに対する Iceberg への書き込みを修正しました [#106896](https://github.com/ClickHouse/ClickHouse/pull/106896) ([AVMusorin](https://github.com/AVMusorin))。
* 外部エンジンによって作成され、省略可能な `snapshots`、`metadata-log`、`snapshot-log` 配列を含まないメタデータを持つ Iceberg テーブルへの挿入時に例外が発生する問題を修正しました。このような挿入も失敗せず正常に完了するようになりました。[#107473](https://github.com/ClickHouse/ClickHouse/pull/107473) ([tiandiwonder](https://github.com/tiandiwonder))。
* 一時的な読み取りエラーの後に S3 へのアップロード (例えばバックアップ) が再試行された際に、`ReadBuffer is canceled. Can't read from it.` エラーが発生する可能性があった問題を修正しました。[#108573](https://github.com/ClickHouse/ClickHouse/pull/108573) ([groeneai](https://github.com/groeneai))。
* 非同期 S3/Azure マルチパートアップロードの最終的な完了タスクのスケジューリングに失敗した場合 (例えばスレッドプールの枯渇時) に、`std::future_error` ("The associated promise has been destructed prior to the associated state becoming ready") が発生し、debug/sanitizer ビルドではサーバーが異常終了する可能性があった問題を修正しました。現在は実際のスケジューリングエラーが報告されます。[#108730](https://github.com/ClickHouse/ClickHouse/pull/108730) ([groeneai](https://github.com/groeneai))。
* 西暦約2262年以降の ORC のタイムスタンプを、スケールが 9 より粗い `DateTime64` カラムに読み込めない問題を修正しました。従来、ネイティブ ORC リーダーはすべてのタイムスタンプを固定の `DateTime64(9)` を中間形式として変換していたため、ナノ秒スケールで `Int64` がオーバーフローしていました。その結果、要求された `DateTime64` のスケール (例えば Iceberg が生成する `DateTime64(6)`) で値を表現できる場合でも、`VALUE_IS_OUT_OF_RANGE_OF_DATA_TYPE` でそのような値が拒否されていました。現在はタイムスタンプが要求されたスケールで直接読み込まれ、対象のスケールでも値を保持できない場合には `date_time_overflow_behavior` が適用されます。[#109302](https://github.com/ClickHouse/ClickHouse/pull/109302) ([groeneai](https://github.com/groeneai))。
* スキーマにサポートされていないネスト型 (例えば `ROW` フィールド) を含む Paimon テーブルを読み込む際、エラーコード 0 でメッセージもない `DB::Exception. (OK)` ではなく、サポートされていない型を明示した `BAD_ARGUMENTS` エラーが報告されるようになりました。[#109762](https://github.com/ClickHouse/ClickHouse/pull/109762) ([groeneai](https://github.com/groeneai))。
* 同じソースカラムで複数回パーティション化された Iceberg テーブル (例えば `PARTITIONED BY (hours(ts), ts)`) を読み込めない問題を修正しました。このようなテーブルは、以前は `Cannot add column ...: column with this name already exists (ILLEGAL_COLUMN)` で失敗していました。[#109895](https://github.com/ClickHouse/ClickHouse/pull/109895) ([groeneai](https://github.com/groeneai))。
* ClickHouse が Iceberg テーブルに書き込むデータファイルに、Avro (`field-id`) および ORC (`iceberg.id`/`iceberg.required` 型属性) フォーマットでも Iceberg のフィールド ID が埋め込まれるようになりました。また、ORC の `String` カラムはバイナリではなく ORC の `string` として書き込まれるようになりました。以前はフィールド ID を埋め込むのは Parquet のみだったため、仕様に準拠したリーダー (例: Spark/iceberg-java) では、カラム名の変更後に ClickHouse が書き込んだ Avro の行から警告なく NULL が返され、ClickHouse が書き込んだ ORC ファイルはまったく読み込めませんでした。[#109994](https://github.com/ClickHouse/ClickHouse/pull/109994) ([groeneai](https://github.com/groeneai))。
* すべての position delete ファイルより新しい非 Parquet フォーマット (例: `ORC`) のデータファイルを含む Iceberg テーブルに対して `OPTIMIZE TABLE` を実行すると、論理エラー `ChunkInfoRowNumbers does not exist` が発生する問題を修正しました。[#110107](https://github.com/ClickHouse/ClickHouse/pull/110107) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `s3` および `file` を介して、非圧縮の `STORED` zip エントリから大きな `Parquet` ファイルを読み込む際の問題を修正しました。[#110495](https://github.com/ClickHouse/ClickHouse/pull/110495) ([Gudauu](https://github.com/Gudauu))。
* バックグラウンドスケジュールプール (例えばグローバルスレッドプールが枯渇した状態での `iceberg` プール) の起動に失敗しても、サーバーが異常終了しなくなりました。このエラーは回復可能な例外として扱われます。また、`system.background_schedule_pool` を読み込んだ際に、副作用としてこれらのプールが作成されることもなくなりました。[#111209](https://github.com/ClickHouse/ClickHouse/pull/111209) ([groeneai](https://github.com/groeneai))。
* Paimon REST カタログにおける DLF 認証を修正しました。リクエストの署名が一度だけ計算されて使い回されていたため、2 回目以降のカタログリクエストがすべて HTTP 401 で失敗し、SHOW TABLES が空のリストを返していました。あわせて、テーブルの存在チェックにおける HTTP 404 の検出も修正しました。[#112015](https://github.com/ClickHouse/ClickHouse/pull/112015) ([JiaQiTang98](https://github.com/JiaQiTang98))。
* position delete によって空になった `Iceberg` データの chunk をパーティション化する際 (例えば、完全に削除されたデータファイルを含むパーティション化された `Iceberg` テーブルのコンパクション中) に発生する `LOGICAL_ERROR` (`partitions_count > 0`) を修正しました。[#112432](https://github.com/ClickHouse/ClickHouse/pull/112432) ([PedroTadim](https://github.com/PedroTadim))。
* Azure のバッチによるオブジェクト削除において、バッチリクエスト自体が失敗した場合に `system.blob_storage_log` の Delete イベントが記録されず、バッチ全体がログに残らない問題を修正しました。バッチ単位で失敗した場合でも、各オブジェクトについて Delete イベントが記録されるようになりました。[#112873](https://github.com/ClickHouse/ClickHouse/pull/112873) ([arsenmuk](https://github.com/arsenmuk))。
* ミリ秒より高い精度の `TIMESTAMP` カラムでパーティション分割された `Paimon` テーブルを読み取ると、`scale 6 is not supported, only support scale <= 3` で失敗する問題を修正しました。[#113401](https://github.com/ClickHouse/ClickHouse/pull/113401) ([JiaQiTang98](https://github.com/JiaQiTang98)).
* スキーマで空の名前のカラムが宣言されているデータレイクテーブルを読み取るとクラッシュする問題を修正しました。不正な Iceberg メタデータは `ICEBERG_SPECIFICATION_VIOLATION` で拒否され、カタログ、Delta Lake、または Paimon から提供されたスキーマは `AMBIGUOUS_COLUMN_NAME` で拒否されます。このチェックは無条件に行われるため、空のフィールド名を持つ未使用の過去のスキーマを保持しているだけの Iceberg テーブルも読み取り不可となります (従来は、そのスキーマが読み込まれた時点で異常終了していました) 。[#114394](https://github.com/ClickHouse/ClickHouse/pull/114394) ([groeneai](https://github.com/groeneai)).
* Iceberg 仕様で禁止されているスキーマ進化がメタデータに記述された Iceberg テーブルを読み取っても、サーバーが異常終了しなくなりました。`IcebergSchemaProcessor` における 4 種類の仕様違反は、これまでアサーション失敗として扱われる `LOGICAL_ERROR` として報告されるか、チェックされないまま致命的なアサーションに到達していましたが、現在は `ICEBERG_SPECIFICATION_VIOLATION` を発生させるようになりました。[#114518](https://github.com/ClickHouse/ClickHouse/pull/114518) ([groeneai](https://github.com/groeneai)).
* musl ベースのビルドで、HTTP `Last-Modified` ヘッダーの移植性のない解析処理が原因で、`url`/`urlCluster` テーブル関数の `_time` 仮想カラムが常に `NULL` になる問題を修正しました。[#111619](https://github.com/ClickHouse/ClickHouse/pull/111619) ([thevar1able](https://github.com/thevar1able)).
* `allow_experimental_url_wildcard_from_index_pages` を有効にした状態で `CREATE TABLE ... AS url('http://host/**/', ...)` によりテーブルを作成すると、その後サーバーが起動しなくなる問題を修正しました。このようなテーブルのメタデータを読み込む際に実験的機能のチェックが再評価され、`SUPPORT_IS_DISABLED` で失敗して起動が中断されていました。[#115095](https://github.com/ClickHouse/ClickHouse/pull/115095) ([groeneai](https://github.com/groeneai)).
* `URL` データベースエンジンのテーブルが、読み取りソース権限を持たないユーザーに対してローカルファイルの存在有無を開示しないようになりました。`SHOW TABLES` 権限のみで実行できる `EXISTS TABLE` およびテーブルの解決処理において、権限の確認前にファイルシステムを参照しなくなりました。[#113029](https://github.com/ClickHouse/ClickHouse/pull/113029) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Exception::addMessage` で追加されたメッセージにも `query_masking_rules` を適用するようにしました。これにより、マスキングルールが設定されている場合に、`jdbc()`/`odbc()` のエラーに含まれる `(in file/uri ...)` 接尾辞内の URL エンコードされた認証情報が漏洩しなくなります。[#106916](https://github.com/ClickHouse/ClickHouse/pull/106916) ([gaurav0107](https://github.com/gaurav0107)).

<h3 id="formats-and-ingestion-fixes">
  フォーマットとインジェストの修正
</h3>

* Arrow の `time32`/`time64` をスキーマ指定なしで読み取る場合 (例: `SELECT * FROM file(..., 'Arrow')`) 、`DateTime64` ではなく `Time64` が推論されるようになりました。以前は `DateTime64` が推論されていました。従来の推論型を前提としている下流の処理は、アップグレード後に動作しなくなります。また、`Time`/`Time64` を Arrow へエクスポートする機能も追加され、精度に応じて適切な Apache Arrow の時刻型が選択されます。[#104316](https://github.com/ClickHouse/ClickHouse/pull/104316) ([Maoyao233](https://github.com/Maoyao233)).
* 遅延カラムレプリケーション (`enable_lazy_columns_replication`) が有効な状態で、バッチ処理の途中でエラーが発生して `INSERT` がロールバックされた場合 (例: `Buffer` テーブル、非同期挿入、`Kafka`/`RabbitMQ`/`FileLog` エンジン) に、誤った結果が返されたり範囲外読み取りが発生したりする可能性があった問題を修正しました。[#108935](https://github.com/ClickHouse/ClickHouse/pull/108935) ([groeneai](https://github.com/groeneai)).
* `INSERT` のカラムリストで、`t.* LIKE '<pattern>'` / `t.* ILIKE '<pattern>'` と記述した修飾付きカラムマッチャーは受け付けられる一方、その正規形である `t.COLUMNS('<regexp>')` は拒否されるというパーサーの不整合を修正しました。この不整合により、クエリフォーマットのラウンドトリップが成立しなくなっていました (debug/sanitizer ビルドではサーバーが異常終了していました) 。[#109176](https://github.com/ClickHouse/ClickHouse/pull/109176) ([groeneai](https://github.com/groeneai)).
* Microsoft Fabric / OneLake の `DataLakeCatalog` テーブルへの `INSERT` が `IncorrectEndpointError` (HTTP 400) で失敗する問題を修正しました。ADLS Gen2 (DFS) への書き込みを、`.blob` ホストではなく `.dfs` エンドポイントのホストへルーティングするようにしています。注: `remote_url_allow_hosts` を使用している場合、`INSERT` を実行するには Fabric の `.blob` (読み取り用) と `.dfs` (書き込み用) の両方のホストを許可リストに登録する必要があります。[#110290](https://github.com/ClickHouse/ClickHouse/pull/110290) ([zlareb1](https://github.com/zlareb1)).
* データレイク用テーブル関数 (例: `INSERT INTO FUNCTION icebergS3(...)`) 経由で書き込むと、生成される Parquet ファイルで文字列カラムの `String` 型アノテーションが失われ、書き込まれたデータを Spark などの外部リーダーで読み取れなくなる問題を修正しました。今後は、このような書き込みでもテーブルエンジン経由の書き込みと同じフォーマット設定が使用されます。[#110465](https://github.com/ClickHouse/ClickHouse/pull/110465) ([tiandiwonder](https://github.com/tiandiwonder)).
* Arrow Flight でログインした後に `system.session_log` が読み取れなくなる問題を修正しました。`interface` カラムは `Enum8` ですが、その列挙値に `ArrowFlight` が含まれていなかったため、Arrow Flight プロトコル経由のログインで生の値 `10` が書き込まれ、そのような行を読み取る `SELECT` はいずれも `Unexpected value 10 in enum` という例外をスローしていました。[#110758](https://github.com/ClickHouse/ClickHouse/pull/110758) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `TSV` 系フォーマットのスキーマ推論で、`0.0` や `0.5` のように先頭にゼロが付いた小数値に対して `String` が推論されていた問題を修正しました (`CSV` では正しく `Float64` が推論されます) 。加えて、こうした値からなる先頭行が `TSV` のヘッダー自動検出によってヘッダーとして扱われ、結果から欠落していました。また、`x=1\x2E5` のようにエスケープシーケンスを用いて記述された値に対して `TSKV` が数値型を推論し、その後パースに失敗する問題も修正しました。なお、`007` のように先頭のゼロが整数のパディングである値は、`TSV` の値パーサーで読み戻せないため、引き続き `String` と推論されます。[#112226](https://github.com/ClickHouse/ClickHouse/pull/112226) ([groeneai](https://github.com/groeneai)).
* 値のパーサーが読み戻せないテキスト値に対して、スキーマ推論が数値型を提案してしまう問題を修正しました。推論では末尾が欠けた指数 (`1e+`) 、仮数部の欠落 (`.`) 、符号の重複 (`++inf`) が受け入れられていましたが、推定したスキーマで読み取る際に `readFloatTextPrecise` がこれらを `CANNOT_PARSE_NUMBER` で拒否していました。`Dynamic` カラムでは、これが INSERT 時のエラーとなっていました。今後は、リーダーが実際に使用するパーサーで推論時に数値を検証します。これにより、推論される型が `max_read_buffer_size` に依存するケースも解消されたほか、`0e5` のような先頭ゼロを含む有効な指数形式が、CSV と同様に TSV でも `Float64` と推論されるようになりました。不正な指数形式の扱いも修正されています。[#112453](https://github.com/ClickHouse/ClickHouse/pull/112453) ([groeneai](https://github.com/groeneai))。
* 行ベースの入力フォーマットが1つのブロックをパースしている間、`KILL QUERY` や `max_execution_time` が数分間にわたって無視される問題を修正しました。行ベースの入力フォーマットは 8192 行ごとにクエリのキャンセルを確認するようになりました。これにより、kill された挿入 (特に、ブロックあたり最大 `max_insert_block_size` 行をパースするバックグラウンドの非同期挿入のフラッシュ) は、ブロックの最後まで処理を続けることなく速やかに停止します。[#112646](https://github.com/ClickHouse/ClickHouse/pull/112646) ([groeneai](https://github.com/groeneai))。
* スキーマがキャッシュされているソースにおいて、推論されるカラム型がそれまでのクエリの実行順序に左右される問題を修正しました。推論される型に影響する設定がスキーマ推論キャッシュのキーに含まれていなかったため、最初のクエリでの設定値によって、以降のすべてのクエリで得られる型が決まっていました。対象の設定は `input_format_try_infer_exponent_floats`、`max_parser_depth`、`input_format_json_infer_array_of_dynamic_from_array_of_different_types`、および `Parquet` の場合は `input_format_parquet_local_time_as_utc`、`input_format_parquet_allow_geoparquet_parser`、`input_format_parquet_skip_columns_with_unsupported_types_in_schema_inference`、`schema_inference_make_json_columns_nullable` です。あわせて、`Form` に欠けていたキャッシュキーのゲッターを登録し、`Template` のゲッターが自身の行フォーマットのエスケープルールを使用するようにしました。[#113533](https://github.com/ClickHouse/ClickHouse/pull/113533) ([groeneai](https://github.com/groeneai))。
* 外側のクエリの末尾に `SETTINGS` 句がある場合に、`view` および `viewIfPermitted` テーブル関数のサブクエリ引数が正しくフォーマットされない問題を修正しました。このようなクエリは `view((SELECT ...))` とフォーマットされて再パースできなくなるため、内部の format-parse-format チェックに失敗し、`Inconsistent AST formatting` が発生していました。[#114658](https://github.com/ClickHouse/ClickHouse/pull/114658) ([groeneai](https://github.com/groeneai))。
* フォーマットの自動検出時に、JSON データが TSKV と誤検出される問題を修正しました。[#106009](https://github.com/ClickHouse/ClickHouse/pull/106009) ([Avogar](https://github.com/Avogar))。
* 有効な時刻の範囲外 (負の値または `>= 24h`) の `Time`/`Time64` 値を `Arrow` フォーマットにエクスポートしようとした場合、不正な Arrow の `time32`/`time64` データを書き込む代わりに、明確なエラーを返すようになりました。[#107179](https://github.com/ClickHouse/ClickHouse/pull/107179) ([tiandiwonder](https://github.com/tiandiwonder))。
* タイムスタンプカラムのタイムゾーンとして、固定の数値 UTC オフセット (例: `+05:30`、`-08:00`、`00:00`) または IANA 以外のマーカー `fixed` が指定された `Arrow`、`ArrowStream`、および Arrow ベースの `ORC` ファイルを読み取れない問題を修正しました。これまでは `Cannot load time zone ...` (`BAD_ARGUMENTS`) で失敗していました。[#108633](https://github.com/ClickHouse/ClickHouse/pull/108633) ([groeneai](https://github.com/groeneai))。
* `Nullable(Tuple(...))` カラムを、個別のカラムに展開せず、単一の CSV フィールドとしてシリアライズするようにしました。これまでは、非 null 値が複数の CSV フィールドとして書き込まれる一方で `NULL` は単一の `\N` となっていたため、行によってカラム数が変わり、`CSVWithNames`/`CSVWithNamesAndTypes` のヘッダーやラウンドトリップが正しく機能しませんでした。[#108959](https://github.com/ClickHouse/ClickHouse/pull/108959) ([groeneai](https://github.com/groeneai))。
* `MsgPack` フォーマットのスキーマ推論時に過剰なメモリ割り当てが発生する問題を修正しました。配列/Map/文字列/バイナリのヘッダーで膨大な要素数が宣言された破損入力やファジング入力によって、数ギガバイト規模の割り当てが一度に行われることはなくなりました (このような入力は不正な入力として拒否されるようになりました) 。これにより、サニタイザー環境での `allocation-size-too-big` によるアボートと、リリースビルドでのメモリ不足が解消されます。[#109019](https://github.com/ClickHouse/ClickHouse/pull/109019) ([groeneai](https://github.com/groeneai))。
* `output_format_arrow_low_cardinality_as_dictionary = 1` を指定して `LowCardinality(Time)` カラムを `Arrow` フォーマットで書き込む際に `LOGICAL_ERROR` が発生する問題を修正しました。[#109730](https://github.com/ClickHouse/ClickHouse/pull/109730) ([groeneai](https://github.com/groeneai))。
* `Dynamic` 型の型数、または `JSON`/`Object` のパス数が `SIZE_MAX` に近い値となっている破損した `Native` フォーマットのストリームを読み込む際の問題を修正しました。このような不正な入力は、捕捉されない `std::length_error` ではなく、明確な `INCORRECT_DATA` エラーで拒否されるようになりました。[#110590](https://github.com/ClickHouse/ClickHouse/pull/110590) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 旧形式 (バージョン 0) のステートフォーマットでシリアライズされた `Bool` 値を持つ `sumMap`/`sumMapWithOverflow`/`sumMapFiltered` の集約状態をマージする際に、`LOGICAL_ERROR: Cannot sum Bools` (debug/サニタイザービルドではサーバーがアボート) が発生する問題を修正しました。この修正により、バージョン 0 の `Bool` ステートでエラーなく誤った結果が返される 2 つのケースも解消されています。具体的には、`Bool` 型の Map キーがステート間で重複排除されない問題と、ゼロ値の圧縮処理で誤ったエントリが削除される問題です。[#110922](https://github.com/ClickHouse/ClickHouse/pull/110922) ([groeneai](https://github.com/groeneai))。
* 入力データのパース結果が 0 行となる場合 (例えば空の JSON や、フィーチャーを含まない GeoJSON の `FeatureCollection`) に、`format` テーブル関数が `NOT_FOUND_COLUMN_IN_BLOCK` をスローする問題を修正しました。現在は正しいカラムを持つ空の結果を返します。[#111428](https://github.com/ClickHouse/ClickHouse/pull/111428) ([groeneai](https://github.com/groeneai))。
* WKT エンコードされたジオメトリカラムで、大文字以外の型キーワード (`point(1 2)`) や空のコンテナ (`LINESTRING EMPTY`、`POLYGON()`、`POLYGON(())`) を使用している GeoParquet、Arrow、ArrowStream ファイルを読み込めるようになりました。これまでは、同じ文字列が `readWKT` 関数ではパースできるにもかかわらず、このようなファイルのインポートは `BAD_ARGUMENTS` または `CANNOT_PARSE_NUMBER` で失敗していました。また、空のジオメトリに対する `wkt` の出力 (`LINESTRING()` と表記される) を格納したファイルを読み戻せない問題も修正されています。[#112020](https://github.com/ClickHouse/ClickHouse/pull/112020) ([groeneai](https://github.com/groeneai))。
* 圧縮ヒント `auto` および `none` をすべて小文字以外の表記で指定した場合 (例：`file('data.csv.gz', 'CSV', 'x String', 'AUTO')`) に、`Unknown compression method` がスローされる問題を修正しました。`GZIP` などのコーデック名は以前から大文字と小文字を区別せずに受け付けられていましたが、この 2 つの特殊なヒントも同様に動作するようになりました。[#113631](https://github.com/ClickHouse/ClickHouse/pull/113631) ([groeneai](https://github.com/groeneai))。
* `CSV` エスケープルールを使用する `CustomSeparated`、`Regexp`、`Template` フォーマットにおいて、最初の要素が `NULL` である `Tuple` カラムを正しく読み込めない問題を修正しました。これらのフォーマットでは、単独の `Tuple` は要素ごとに 1 つのフィールドを占めるため、先頭の `\N` フィールドはカラム全体ではなくその要素を表します。これまではカラム全体として消費されていたため、残りの要素フィールドが後続のカラムにずれ込み、`CustomSeparated` が自身の出力を読み戻せませんでした。[#114471](https://github.com/ClickHouse/ClickHouse/pull/114471) ([groeneai](https://github.com/groeneai))。
* `Regexp` 入力フォーマットが、マッチしたフィールドのうちパースされなかった残りの部分を警告なしに破棄し、エラーを報告せずに切り詰められた値や不正な値を格納していた問題を修正しました。たとえば `JSON` ルールのもとでは、`UInt64` に対する `v=-1` は `0` として、`Date` に対する `v=2020-01-01junk` は `1975-07-14` として読み取られていました。不正な形式のフィールドは、`Escaped`、`CSV`、`JSON` の各ルールのもとで拒否されるようになり、各ルールの挙動がドキュメントに記載されている対応フォーマットと一致するようになりました。`Raw` ルールでは、タブを含むマッチしたフィールドが、タブの位置で切り詰められることなく全体として読み取られるようになりました。[#114520](https://github.com/ClickHouse/ClickHouse/pull/114520) ([groeneai](https://github.com/groeneai))。
* フォーマット→パース→フォーマットの往復変換で同一の結果にならない `CREATE INDEX` / `CREATE HYPOTHETICAL INDEX` の式 (例: `CREATE HYPOTHETICAL INDEX i0 ON t0 ((a())) TYPE a` や `CREATE INDEX i0 ON t0 ((a, b).1) TYPE minmax`) で、`Inconsistent AST formatting` 論理エラー (debug ビルドおよび sanitizer ビルドではサーバーが異常終了) が発生する問題を修正しました。[#109175](https://github.com/ClickHouse/ClickHouse/pull/109175) ([groeneai](https://github.com/groeneai))。
* フォーマットレベルのキー条件が、Parquet ファイルから読み取られないカラムを参照している場合に、Parquet v3 リーダーで論理エラー (`Logical error: 'KeyCondition uses PREWHERE output'`) が発生する問題を修正しました。[#109267](https://github.com/ClickHouse/ClickHouse/pull/109267) ([groeneai](https://github.com/groeneai))。
* ヘッダーが存在しない場合に、事前定義された HTTP ハンドラーで例外が発生する問題を修正しました [#108324](https://github.com/ClickHouse/ClickHouse/pull/108324) ([vitlibar](https://github.com/vitlibar))。
* 行ベースの入力フォーマット (例: `TSV`/`CSV`) で入力のパースに失敗した際、下位の読み取り処理がすでにキャンセルされていると (たとえば不正な HTTP チャンクや途中で切れたボディなど) 、`Logical error: 'ReadBuffer is canceled. Can't read from it.'` が発生する可能性があった問題を修正しました。詳細なパース診断情報を生成する際に、キャンセル済みのバッファから読み取らないようになりました。[#109708](https://github.com/ClickHouse/ClickHouse/pull/109708) ([groeneai](https://github.com/groeneai))。
* `Values` フォーマットで、ストリーミングパースから SQL 式のパースへのフォールバックが成功した場合には、`system.errors` および `system.error_log` にパースエラーが記録されなくなりました。[#111141](https://github.com/ClickHouse/ClickHouse/pull/111141) ([pamarcos](https://github.com/pamarcos))。
* 停止中の `RabbitMQ` テーブルに対する `SYSTEM REFRESH` で、キューに溜まったバックログを消費できないことがある問題を修正しました。REFRESH は順序外のストリーミングサイクルを 1 回だけ許可しますが、AMQP 配信ループが非同期に開始された直後だと、そのサイクルが 0 行のまま即座に終了してしまうことがありました。その結果、1 回限りの許可が無駄になり、次の `SYSTEM START` までメッセージが消費されないままになっていました。[#111480](https://github.com/ClickHouse/ClickHouse/pull/111480) ([groeneai](https://github.com/groeneai))。
* `nats_stream` を設定した `NATS` テーブルが、NATS サーバーの再起動後、エラーを出さないまま何も消費しなくなる問題を修正しました。`DETACH TABLE` と `ATTACH TABLE` を実行しなくても、`JetStream` のサブスクリプションが自動的に再確立されるようになりました。[#112828](https://github.com/ClickHouse/ClickHouse/pull/112828) ([groeneai](https://github.com/groeneai))。
* 極端に大きな `kafka_num_consumers` が指定された場合、`Kafka` テーブルエンジン内でメモリ割り当てに失敗するのではなく、明確なエラーで拒否するようにしました。これまでは、`kafka_disable_num_consumers_limit` が有効な状態でこのような値を指定すると、`std::length_error` 例外が発生していました。[#114764](https://github.com/ClickHouse/ClickHouse/pull/114764) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* Arrow Flight サーバー: ADBC Flight SQL ドライバーなどの Go ベースの Flight クライアントが送信する、パディングなしの Base64 でエンコードされた `Basic` 認証の認証情報を受け付けるようになりました。また、`authorization` ヘッダーの形式が不正な場合に、汎用的な `Unexpected error in RPC handling` ではなく、適切な認証エラーを返すようになりました。[#115085](https://github.com/ClickHouse/ClickHouse/pull/115085) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* Arrow Flight サーバー: ユーザー名とパスワードの区切り文字が含まれていない不正な Basic 認証の認証情報を拒否するようにしました。[#115347](https://github.com/ClickHouse/ClickHouse/pull/115347) ([alexey-milovidov](https://github.com/alexey-milovidov))。

<h3 id="data-type-function-and-serialization-fixes">
  データ型、関数、シリアライゼーションに関する修正
</h3>

* Wide パーツを持つテーブルで `ALTER TABLE ... MODIFY COLUMN` によりカラムを動的サブカラムを持つ型 (例: `Variant` から `Dynamic`) に変更した後、そのパーツを読み取るかマージすると発生する論理エラー `Stream <col>.variant_discr ... is not found` (debug ビルドおよび sanitizer ビルドではサーバーが異常終了) を修正しました。[#110204](https://github.com/ClickHouse/ClickHouse/pull/110204) ([groeneai](https://github.com/groeneai)).
* 要素が非 Nullable の `LowCardinality(T)` である `Nullable(Tuple(...))` カラムについて、同じクエリで親サブカラムも読み取る場合に、そのサブカラムを正しく読み取れない問題を修正しました。抽出されたサブカラムが `LowCardinality(Nullable(T))` バッファにデシリアライズされ、そのサブストリームが親の読み取りと共有されていたため、compact パーツでは、親が誤った値を返す、クエリが `Unexpected return type from assumeNotNull` で失敗する、あるいはサーバーが `string_view` のハードニングアサーションによって強制終了される、といった問題が発生していました。[#112232](https://github.com/ClickHouse/ClickHouse/pull/112232) ([groeneai](https://github.com/groeneai)).
* 統計情報によるパーツ剪枝が索引解析中に `IN`/`GLOBAL IN` サブクエリを投機的に実行し、そのサブクエリが失敗した場合に、`LOGICAL_ERROR` "Not-ready Set is passed as the second argument for function `globalNullIn`" が発生し、クエリ本来のエラーメッセージが失われる問題を修正しました。[#114121](https://github.com/ClickHouse/ClickHouse/pull/114121) ([groeneai](https://github.com/groeneai)).
* `Quantized('product', ...)` コーデックを持つカラムの `product_quantization_codebook` サブカラムを読み取る際に `Cannot read all data of type FixedString` が発生する問題を修正しました。パーツごとのコードブックはすべてのグラニュールのデータの後に書き込まれるためマークで区切られておらず、マーク範囲がパーツの最終マークより前で終わる読み取りでは、コードブックを途中までしか読み取れないことがありました。[#112818](https://github.com/ClickHouse/ClickHouse/pull/112818) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Dynamic` カラム内の `Map` 値について、`Map` のレイアウトが自身のメタデータと矛盾するパーツが書き込まれないようにしました。`map_serialization_version` のみが異なるテーブル間でキャッシュされた 1 つのシリアライゼーションオブジェクトが共有されていたため、メタデータでは `with_buckets` と宣言されているにもかかわらずパーツが `basic` の Map レイアウトで書き込まれることがあり、後でそのパーツを読み取ると `LOGICAL_ERROR: Stream ...buckets_info ... is not found` で失敗していました。以前のバージョンですでにこの状態で書き込まれたパーツは引き続き読み取れないため、削除する必要があります。[#113514](https://github.com/ClickHouse/ClickHouse/pull/113514) ([groeneai](https://github.com/groeneai)).
* `ALP`、`FPC`、`GCD` が、型から導出されるパラメータをコーデックのハッシュに含めていなかった問題を修正しました。compact パーツでは、ライターはコーデックハッシュの値ごとに 1 つの圧縮ストリームを共有するため、同じコーデックを使用する値幅の異なる 2 つのカラムが衝突し、誤った幅を持つ 1 つのコーデックオブジェクトを共有していました。その結果、幅が一致しない場合は有効な挿入が `CANNOT_COMPRESS` で拒否され、そうでない場合もいずれかのカラムの圧縮率が本来より低くなっていました。[#114189](https://github.com/ClickHouse/ClickHouse/pull/114189) ([groeneai](https://github.com/groeneai)).
* テーブルの sorting key が `Date` カラムを `toDateTime` でラップしており (例: `ORDER BY toDateTime(date_column)`) 、クエリが `WHERE date_column >= '...'` のような比較で元のカラムをフィルタリングする場合に、索引の枝刈りが誤って行われる問題を修正しました。`toDateTime(Date)` は `DateTime` の範囲を超える (`2106-02-07` より後の) `Date` 値でオーバーフローするため、格納されたキーは単調になりません。一致する行を含むグラニュールが除外されるおそれがあるため、ClickHouse はこのキーと述語の組み合わせでは主キーによる枝刈りを行わなくなりました。[#101814](https://github.com/ClickHouse/ClickHouse/pull/101814) ([nihalzp](https://github.com/nihalzp)).
* `DEFAULT` を持つ `Nullable` カラムを別の型 (例: `Nullable(UInt8)` → `String`、`LowCardinality(String)`、`Array(UInt8)`) に変換する際に `ALTER MODIFY COLUMN` が失敗する問題を修正しました。[#102156](https://github.com/ClickHouse/ClickHouse/pull/102156) ([il9ue](https://github.com/il9ue)).
* `StorageSQLite` および `sqlite()` テーブル関数で `WHERE` 述語を SQLite にプッシュダウンする際の、SQL リテラルのエスケープ処理の誤りを修正しました。シングルクォートおよび制御文字 (`\n`、`\r`、`\t`、`\`) がバックスラッシュでエスケープされていましたが、SQLite はこれを解釈しないため、構文エラーや誤ったクエリ結果が発生していました。また、PostgreSQL にプッシュダウンされる文字列リテラルのエスケープも修正しました。`IN` リスト内にネストされた文字列に ClickHouse のエスケープが残っていたほか、制御文字がバックスラッシュシーケンスとして送信され、PostgreSQL 側で別のバイトとして解釈されていました。[#104217](https://github.com/ClickHouse/ClickHouse/pull/104217) ([tiandiwonder](https://github.com/tiandiwonder))。
* `query_plan_convert_join_to_in` が有効で、SELECT がソース配列カラムを参照している場合に、`INNER JOIN ... ON arrayJoin(...) = ...` クエリで `NOT_FOUND_COLUMN_IN_BLOCK` 例外が発生する問題を修正しました。[#104809](https://github.com/ClickHouse/ClickHouse/pull/104809) ([tiandiwonder](https://github.com/tiandiwonder))。
* 右辺オペランドが非定数で、現在の行のカラムを参照する IN および NOT IN 式の問題を修正し、新しいアナライザにおけるタプル右辺の扱いを既存の ClickHouse の IN セマンティクスに合わせました。なお旧アナライザでは、右辺にソースカラムを単独で指定した場合 (`x IN (arr)`) 、引き続きテーブル名として解決され、スコープ外のままとなります。[#104993](https://github.com/ClickHouse/ClickHouse/pull/104993) ([niyue](https://github.com/niyue))。
* `String` または `Nullable(String)` キーで `DirectKeyValueJoin` を使用した場合に、`EmbeddedRocksDB`、`Redis`、`KeeperMap` テーブルに対する `JOIN` がエラーを出さずに 0 行を返すことがある問題を修正しました。[#105253](https://github.com/ClickHouse/ClickHouse/pull/105253) ([vdimir](https://github.com/vdimir))。
* 非等価の `JOIN ... ON` 述語が、`ARRAY JOIN []` によって生成されるような `Nothing` 型のカラムを参照した場合に発生する `LOGICAL_ERROR` ("Unexpected expression in JOIN ON section. Expected boolean (UInt8), got 'Nothing'") を修正しました。[#106981](https://github.com/ClickHouse/ClickHouse/pull/106981) ([groeneai](https://github.com/groeneai))。
* エイリアス付きのラムダが、式リストの先頭以外の位置でアクセス演算子 (`.N` によるタプル要素、または `[]` による配列要素) のオペランドとして使用された場合 (例: `SELECT 1, ((p0, p1) -> p0 AS a7).4[3] FROM t`) に、デバッグビルドおよびサニタイザービルドでサーバーが異常終了する可能性のある `Inconsistent AST formatting` 論理エラーを修正しました。[#107092](https://github.com/ClickHouse/ClickHouse/pull/107092) ([groeneai](https://github.com/groeneai))。
* `clusterAllReplicas(..., urlCluster(...))` のように、別の分散クエリ内にネストされたクラスターテーブル関数 (`urlCluster`、`fileCluster`、`s3Cluster` など) は、論理エラー (`Distributed task iterator is not initialized`) で失敗するのではなく、`BAD_ARGUMENTS` エラーとして拒否されるようになりました。[#107107](https://github.com/ClickHouse/ClickHouse/pull/107107) ([groeneai](https://github.com/groeneai))。
* 精度の低い浮動小数点カラムで正確に表現できない小数リテラル (`Float32` カラムに対する `0.1` など) を使用した場合 (例: `SELECT * FROM values('x Float32', 0.1)`) に、`values` テーブル関数が `ARGUMENT_OUT_OF_BOUND` で失敗する問題を修正しました。このような値も受け入れられるようになり、`CAST` や `INSERT ... VALUES` と同様に、表現可能な最も近い値に変換されます。[#108055](https://github.com/ClickHouse/ClickHouse/pull/108055) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `mapFilter`、`mapSort` (およびそのバリエーション) 、`mapConcat` が、`Map` のキー型および値型から `LowCardinality` を除去してしまう問題を修正しました。以前は、`Map(LowCardinality(String), String)` カラムに対する `mapFilter` が `Map(String, String)` を返していたため、`CREATE TABLE ... AS SELECT` で作成されたテーブルのメタデータが破損し、`CHECK TABLE` が失敗する可能性がありました。[#108057](https://github.com/ClickHouse/ClickHouse/pull/108057) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* キャンセルされた、または `KILL` された `INSERT` が、スキップ索引 (例えば高カーディナリティのカラムに対する無制限の `set(0)` 索引) のビルド中に長時間実行され続ける問題を修正しました。クエリがキャンセルされると、索引のビルドが速やかに停止するようになりました。[#108351](https://github.com/ClickHouse/ClickHouse/pull/108351) ([tiandiwonder](https://github.com/tiandiwonder))。
* `primes` テーブル関数からの `SELECT` がキャンセルに応答しない問題を修正しました。大きな `step` (または `limit`) を指定した場合、`KILL QUERY` の実行後やタイムアウト後もクエリが長時間実行され続けることがありました。現在は速やかに停止します。[#108353](https://github.com/ClickHouse/ClickHouse/pull/108353) ([tiandiwonder](https://github.com/tiandiwonder))。
* 名前に部分文字列 `INT` を含むデータ型名 (例えばデータ型の位置で使用された `quantileInterpolatedWeighted` のような関数風の名前) のパースを修正しました。このような名前は MySQL の整数型と誤認され、最初の `(...)` 引数グループが表示幅修飾子として暗黙的に消費されていたため、クエリのフォーマットのラウンドトリップが成立しなくなる可能性がありました。[#108354](https://github.com/ClickHouse/ClickHouse/pull/108354) ([groeneai](https://github.com/groeneai))。
* 不正な形式の `ARRAY JOIN` の後にカンマと括弧で囲まれたテーブルリストが続く場合に、エラーとして拒否されず、クロス結合として誤ってパースされる不整合を修正しました。[#108365](https://github.com/ClickHouse/ClickHouse/pull/108365) ([Algunenano](https://github.com/Algunenano))。
* 分散クエリにおいて、構造的に同一な重複 `ALIAS` カラムの重複排除が行われ、かつ `key = value` 形式の名前付きコレクション引数を持つテーブル関数 (例えば `oss(s3_conn, filename = '...')`) が参照された場合に発生する `LOGICAL_ERROR` ("Invalid action query tree node ...") 例外を修正しました。[#108435](https://github.com/ClickHouse/ClickHouse/pull/108435) ([groeneai](https://github.com/groeneai))。
* 分散テーブルに対して複数の `LowCardinality` 引数を持つ関数を呼び出した場合 (例えば `remote()` と組み合わせて `concatAssumeInjective((SELECT toLowCardinality('p')), s)` を `GROUP BY` キーとして使用した場合) に発生し得る論理エラー (リリースビルドでは例外、デバッグビルドおよびサニタイザービルドではサーバーのアボート) を修正しました。エラーメッセージは `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](https://github.com/ClickHouse/ClickHouse/pull/108871) ([groeneai](https://github.com/groeneai))。
* サーバー側で解釈される `DateTime`/`DateTime64` の文字列リテラル (非同期 `INSERT`、`SELECT` のリテラル) に対して `use_client_time_zone` が無視される問題を修正しました。`use_client_time_zone` が有効な場合、クライアントはローカルのタイムゾーンを `session_timezone` として伝播するようになり、サーバー側のパース結果が同期 `INSERT` の場合と一致するようになりました。[#109051](https://github.com/ClickHouse/ClickHouse/pull/109051) ([groeneai](https://github.com/groeneai))。
* `max_execution_time` (`timeout_overflow_mode = 'throw'` 指定時) によってクエリがキャンセルされない場合がある問題を修正しました。内部のタイムアウト監視機構が、より遅いデッドラインを持つクエリをすでに待機している状態で、より早いデッドラインを持つクエリが後から登録されると、そのクエリが完全に見逃され、制限時間を大幅に超えて実行され続けることがありました。[#109792](https://github.com/ClickHouse/ClickHouse/pull/109792) ([tiandiwonder](https://github.com/tiandiwonder))。
* アナライザーが有効な状態で、`Distributed` テーブルに対するクエリにおいて `Nullable` となる `_shard_num` (または `shardNum()`)  (例えば `join_use_nulls = 1` を指定した `FULL JOIN` の場合) を `ORDER BY` と組み合わせて使用すると `NOT_FOUND_COLUMN_IN_BLOCK` が発生する問題を修正しました。[#109798](https://github.com/ClickHouse/ClickHouse/pull/109798) ([groeneai](https://github.com/groeneai))。
* `enable_join_runtime_filters = 1` (26.2 以降デフォルトで有効) を指定した結合において、ビルド側の結合キーが NULL を含む `LowCardinality(Nullable(...))` で、かつランタイムフィルタがブルームフィルタにフォールバックした場合に、`NOT_IMPLEMENTED` エラー ("Method getDataAt is not supported for Nullable(String)") がスローされることがある問題を修正しました。[#109824](https://github.com/ClickHouse/ClickHouse/pull/109824) ([groeneai](https://github.com/groeneai))。
* 高階関数が具体的な値を期待する箇所 (例えば `arrayFold(lambda, arr, another_lambda)` における `arrayFold` のアキュムレータ) にラムダ式が渡されると、サーバーがクラッシュする問題を修正しました。`enable_analyzer = 0` の場合でも、このようなクエリはクラッシュせず、`ILLEGAL_TYPE_OF_ARGUMENT` で拒否されるようになりました。[#109840](https://github.com/ClickHouse/ClickHouse/pull/109840) ([groeneai](https://github.com/groeneai))。
* ROW POLICY のフィルタで `arrayJoin` のエイリアスである `unnest` を拒否するようにしました。これにより、そのようなポリシーが読み取り時に `column->size() == num_rows` の論理エラーを引き起こしうる抜け穴を塞ぎました。[#109973](https://github.com/ClickHouse/ClickHouse/pull/109973) ([Algunenano](https://github.com/Algunenano))。
* 同一クエリ内でタプル全体も読み取られる場合 (例: `SELECT *`) に、`tupleElement(t, 'name')`、`tupleElement(t, N)`、または `t.N` でフィールドにアクセスすると、`Tuple` のサブカラムに定義されたスキップ索引が使用されない問題を修正しました。これらの形式はいずれも、名前付きサブカラムアクセス `t.name` と同様にグラニュールを枝刈りするようになりました。[#110056](https://github.com/ClickHouse/ClickHouse/pull/110056) ([groeneai](https://github.com/groeneai))。
* `text`、`tokenbf_v1`、または `ngrambf_v1` のスキップ索引を持つ `Array(String)` カラムを配列リテラルと比較した場合 (`arr = ['x']`) に発生する `BAD_GET` エラーを修正しました。このような比較では、クエリ全体を失敗させる代わりに、索引側でフルスキャンとして扱うようになりました。[#110057](https://github.com/ClickHouse/ClickHouse/pull/110057) ([groeneai](https://github.com/groeneai))。
* 適用時点でカラムが既に存在する場合に、`ALTER TABLE ... ADD COLUMN IF NOT EXISTS` で誤って `ILLEGAL_COLUMN` エラーが発生する問題を修正しました。この問題は、1 つのステートメント内で同じカラムを `IF NOT EXISTS` 付きで 2 回追加した場合や、準備フェーズと適用フェーズの間に同時実行の `ALTER` がカラムを追加した場合に発生していました。[#110080](https://github.com/ClickHouse/ClickHouse/pull/110080) ([groeneai](https://github.com/groeneai))。
* `identity()` (またはスカラーサブクエリの結果) がネストされた `LowCardinality` を含む値をラップし、かつクエリで `WITH TOTALS`/`WITH ROLLUP` を使用している場合に発生する `LOGICAL_ERROR` (`Bad cast from type ColumnLowCardinality to ColumnString`) を修正しました。[#110138](https://github.com/ClickHouse/ClickHouse/pull/110138) ([groeneai](https://github.com/groeneai))。
* タプル式に対する `GROUP BY ALL` を `ORDER BY` と併用した場合に発生する `NOT_FOUND_COLUMN_IN_BLOCK` エラーを修正しました。[#110206](https://github.com/ClickHouse/ClickHouse/pull/110206) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* サブカラム (`Nullable` カラムの `x.null` や `Array` の `arr.size0` など) を参照する `CHECK` 制約を持つテーブルに `INSERT` すると `NOT_FOUND_COLUMN_IN_BLOCK` エラーが発生する問題を修正しました。[#110208](https://github.com/ClickHouse/ClickHouse/pull/110208) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* optimize\_and\_compare\_chain 最適化 (デフォルトで有効) によって誤ったクエリ結果が返される問題を修正しました。チェーン内にペアごとに固有の変換規則を持つ型が混在している場合 (例: Enum と String、Decimal と Float64、幅の異なる FixedString) 、a \< b AND b \< c から推移律によって導出された条件が、元の条件とは異なる比較セマンティクスを用いる可能性がありました。今後、推移的な条件は、単一の比較順序を共有する型のグループ内でのみ導出されます。[#110621](https://github.com/ClickHouse/ClickHouse/pull/110621) ([yariks5s](https://github.com/yariks5s))。
* `optimize_injective_functions_in_group_by` が `GROUP BY GROUPING SETS` および `GROUP BY ... WITH TOTALS` のクエリ結果を変えてしまう問題を修正しました。この設定は結果を変えないものとしてドキュメントに記載されていますが、グルーピングキーに対する単射関数を除去すると、そのキーが集約対象のセットに含まれない行 (`GROUPING SETS` の非メンバーセット) や `WITH TOTALS` 行で誤った値が生成される (または行が欠落する) ことがありました。この誤った値が実在するキー値と偶然一致すると、同じ結果セット内でスーパー集約行と実際のグループを区別できなくなっていました。[#110721](https://github.com/ClickHouse/ClickHouse/pull/110721) ([groeneai](https://github.com/groeneai))。
* `median`/`quantile` (ReservoirSampler ベース) の集約関数ステートに巨大な整数定数を掛けた場合 (例: `medianState(x) * 18446744073709551615`) にサーバーがハングする問題を修正しました。このクエリはキャンセルを受け付けなくなり、無期限に実行され続けるおそれがありました。[#110779](https://github.com/ClickHouse/ClickHouse/pull/110779) ([groeneai](https://github.com/groeneai))。
* `JSON` 引数に対して、内部の型ヒント用サブカラム名 (バッククォートの型マーカーで始まる名前) を指定して `getSubcolumn` を呼び出すとクラッシュ (クエリ解析中のヌルポインタ参照) が発生する問題を修正しました。[#110940](https://github.com/ClickHouse/ClickHouse/pull/110940) ([groeneai](https://github.com/groeneai))。
* `map[key]` が最初のキーではなく、後に出現する重複キーの値を返してしまう問題を修正しました。`Map` カラムに重複キーが含まれる場合、`map[key]` の結果が同じブロック内の先行する行や `optimize_functions_to_subcolumns` 設定によって変わることがあり、同じ行に対する `SELECT` と `WHERE` の結果が食い違う可能性がありました。[#111246](https://github.com/ClickHouse/ClickHouse/pull/111246) ([groeneai](https://github.com/groeneai))。
* `use_variant_default_implementation_for_comparisons = 0` の場合に、`AND` チェーンでカラムを非 `Nullable` 型の NULL 値定数 (例えば NULL 値の `Variant`) と比較すると、論理式オプティマイザで論理エラー `!rhs_literal->getValue().isNull()` が発生する問題を修正しました。[#111292](https://github.com/ClickHouse/ClickHouse/pull/111292) ([groeneai](https://github.com/groeneai))。
* クエリに `set` スキップ索引があり、`(x AND <null-value>) OR y` という形の述語の NULL が関数によって生成される場合 (例: `toInt64OrNull('x')`、`nullIf(1, 1)`、`CAST(NULL AS Nullable(Int64))`) に誤った結果が返される問題を修正しました。このような値は `__bitWrapperFunc` でラップされ、「不明」マスクではなく `NULL` を伝播していたため、set 索引が実際には条件に一致するグラニュールまで除外してしまい、クエリが本来より少ない行を返していました。[#111604](https://github.com/ClickHouse/ClickHouse/pull/111604) ([groeneai](https://github.com/groeneai))。
* アナライザ有効時の `CREATE TABLE`/`ALTER TABLE` で、`_table` や `_database` などの仮想カラムを参照するカラムの `DEFAULT`/`MATERIALIZED` expression が受け入れられてしまう問題を修正しました。このようなテーブルへの挿入は `NOT_FOUND_COLUMN_IN_BLOCK` で失敗し、`MATERIALIZED` カラム (値を明示的に指定できない) の場合はテーブルへの挿入が恒久的に不可能になっていました。これらの expression は定義時に拒否されるようになり、アナライザ無効時と同じ動作になりました。仮想カラムを参照する `ALIAS` カラム (読み取り時に評価) および `EPHEMERAL` カラム (保存されない挿入用入力) は引き続き使用できます。[#111776](https://github.com/ClickHouse/ClickHouse/pull/111776) ([groeneai](https://github.com/groeneai))。
* 型が `Array`、`Tuple`、`LowCardinality` のいずれかであるサブクエリ値を引数としてパラメーター化ビューを呼び出すと (例: `SELECT * FROM v(param = (SELECT groupArray(x) FROM t))`) 、`UNKNOWN_QUERY_PARAMETER` が発生する問題を修正しました。[#111790](https://github.com/ClickHouse/ClickHouse/pull/111790) ([groeneai](https://github.com/groeneai))。
* 比較の連鎖を `IN`/`NOT IN` に変換するアナライザの書き換え(`x = c1 OR x = c2 OR ...`、`x != c1 AND x != c2 AND ...`、および `has(const_array, x)`)における 3 つのバグを修正しました。`use_variant_default_implementation_for_comparisons = 0` が指定された `Variant` 型の expression では、書き換えによって expression の結果の型が `UInt8` から `Nullable(UInt8)` に変わり、debug ビルドおよび sanitizer ビルドでクエリツリーの検証チェックにより `LOGICAL_ERROR` が発生していました。動的な構造を持つ expression(`Dynamic`、`Array(Dynamic)`、`JSON`)では、`IN` がそのような引数を受け付けないため、本来正常に動作するクエリが書き換えによって `Illegal type ... of argument of function in` で失敗していました。また、時刻を含む `DateTime` 定数を `Date` カラムと比較する場合のように、定数を expression の型へ損失なく変換できない場合には、どちらの方向の書き換えでも誤った結果が返されていました。[#111924](https://github.com/ClickHouse/ClickHouse/pull/111924) ([groeneai](https://github.com/groeneai))。
* クエリで並列レプリカ、分散テーブル、または external aggregation を使用する場合や、ステートがテーブルに格納されている場合(`Dynamic` の値内を含む)に、`quantileDeterministic`、`quantilesDeterministic`、`medianDeterministic` が同じデータに対して実行のたびに異なる結果を返す問題を修正しました。このバージョンより前にバージョン指定のない型表記で書き込まれたステートは、レイアウトを変更できないため、従来の動作が維持されます。[#112052](https://github.com/ClickHouse/ClickHouse/pull/112052) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* ベクトル検索クエリがクエリ条件キャッシュを汚染し、誤った結果が返される問題を修正しました。`vector_similarity` インデックスを持つテーブルに対する `SELECT ... WHERE <condition> ORDER BY <distance function> LIMIT n` クエリが、グラニュールを `<condition>` に一致しないものとして記録してしまうことがあり、その結果、同じテーブルに対して後から実行した通常の `SELECT ... WHERE <condition>` が、エラーを出すことなく本来より少ない行を返していました。今後、ベクトル検索の読み取りではクエリ条件キャッシュへの書き込みを行いません。[#112086](https://github.com/ClickHouse/ClickHouse/pull/112086) ([groeneai](https://github.com/groeneai))。
* シリアル化されたクエリプランから `serialize_string_in_memory_with_zero_byte` が欠落する問題を修正しました。`serialize_query_plan = 1` の場合、この設定を無効にして稼働しているクラスタでは、イニシエーターとデシリアライズされたプランを実行するノードとの間で、メモリ上の文字列表現が食い違う可能性がありました。これは、この設定がデシリアライズ時には読み取られるものの、シリアル化時には書き込まれていなかったため、実行側のノードでは常にデフォルト値になっていたことが原因です。[#112131](https://github.com/ClickHouse/ClickHouse/pull/112131) ([groeneai](https://github.com/groeneai))。
* `ON` expression に定数の連言を含む `JOIN`(例: `ON l.id = r.id AND CAST(NULL AS Nullable(UInt8))`)が誤った結果を返す問題を修正しました。クエリプランの最適化によってこの定数が暗黙的に削除され、結合はその条件が存在しないものとして実行されていました。そのため、決して真にならない条件であれば行を返さないはずのところ、`INNER`、`LEFT SEMI`、`RIGHT SEMI` 結合が一致した行を返し、`RIGHT ANTI` はすべての行を返すべきところで 1 行も返していませんでした。[#112155](https://github.com/ClickHouse/ClickHouse/pull/112155) ([vdimir](https://github.com/vdimir))。
* パラメーター化ビューが `parameter = value` 形式の代入ではない引数で呼び出された場合に、誤った結果が返される問題を修正しました。`enable_analyzer = 0` の場合、およびデフォルト設定での `EXPLAIN SYNTAX` において、`pv(concat(name, '!'))`、`pv(name, 'a')`、`pv(name != 'a')`、`pv(tuple(name = 'a'))` のような呼び出しは、アナライザのように `UNKNOWN_QUERY_PARAMETER` を報告せず、ビューのパラメータを無関係な expression に暗黙的に束縛していました。現在は、このような呼び出しはどちらの実行パスでも同じように拒否されます。[#112194](https://github.com/ClickHouse/ClickHouse/pull/112194) ([groeneai](https://github.com/groeneai))。
* `substring` の文法で再パースできない形式で `substr`、`mid`、`byteSlice` を呼び出す定義を持つ `CREATE VIEW` または `CREATE FUNCTION` が受け付けられてしまい、ClickHouse が書き込むメタデータが有効な SQL にならないバグを修正しました。この定義を後から読み込むと `SYNTAX_ERROR` で失敗し、サーバー起動時にはメタデータの読み込みが中断されるため、サーバーがまったく起動できなくなっていました。このような定義は正しく往復変換されるようになり、`substring(x, a, b, c)` 形式の既存のメタデータファイルも再び読み込めるようになったため、影響を受けたサーバーも手動で対応することなく起動できます。[#112195](https://github.com/ClickHouse/ClickHouse/pull/112195) ([groeneai](https://github.com/groeneai))。
* 主キーが `Array` または `Tuple` で、クエリがそれに `plus`、`minus`、`multiply`、`divide`、`intDiv` を適用する場合に、誤った結果、`ORDER BY` の出力順序の誤り、および `BAD_TYPE_OF_FIELD` 例外が発生する問題を修正しました。複合値に対する算術演算は要素ごとに評価される一方、複合値の比較は辞書順で行われるため、主キー解析ではこのような式を単調とみなさないようになりました。[#112339](https://github.com/ClickHouse/ClickHouse/pull/112339) ([groeneai](https://github.com/groeneai))。
* 左テーブルが `Distributed` テーブルまたは `*Cluster` テーブル関数である場合など、`PASTE JOIN` を含むクエリが別のサーバーに送信される際に、リモートサーバーで `Code: 62 ... You must not specify ANY or ALL for PASTE JOIN. (SYNTAX_ERROR)` が発生する問題を修正しました。フォーマッタがパーサーで受け付けられない表記 `ALL PASTE JOIN` を出力していたため、受信側のサーバーが送られてきたクエリをパースできませんでした。[#112404](https://github.com/ClickHouse/ClickHouse/pull/112404) ([groeneai](https://github.com/groeneai))。
* `(SELECT 1) AS t(x)` や `WITH t(x) AS (SELECT 1)` のようなカラムエイリアスリストが `view` テーブル関数内で参照できず、`view` の外では同じ構文が動作するにもかかわらず、`t.x` への参照が `UNKNOWN_IDENTIFIER` で失敗する問題を修正しました。[#112690](https://github.com/ClickHouse/ClickHouse/pull/112690) ([groeneai](https://github.com/groeneai))。
* `ARRAY JOIN` 句に式が含まれない場合に、クエリのフォーマット処理で論理エラーが発生する問題を修正しました。このような句は、受け付けられた後にパースし直せないテキストへフォーマットされるのではなく、空の `USING` と同様にパース時点で `SYNTAX_ERROR` として拒否されるようになりました。[#112699](https://github.com/ClickHouse/ClickHouse/pull/112699) ([groeneai](https://github.com/groeneai))。
* サブクエリ用に準備された式アクションが、ビルド時のコンテキストが解放された後に実行されると、`connectionId` が `Context has expired` をスローする問題を修正しました。[#112870](https://github.com/ClickHouse/ClickHouse/pull/112870) ([clickgapai](https://github.com/clickgapai))。
* 結合中に評価される非等価の `JOIN ON` 条件に `arrayJoin` が含まれる場合に、論理エラーや誤った結果が発生する問題を修正しました。`hash`、`parallel_hash`、`grace_hash` の結合では、このような条件を `INVALID_JOIN_ON_EXPRESSION` で拒否するようになりました。展開が片側のみに依存する場合は、結合前のサブクエリ内で `ARRAY JOIN` に置き換えてください。`arrayJoin` の引数が両側のカラムを参照する条件については、クエリの構造を見直す必要があります。[#112889](https://github.com/ClickHouse/ClickHouse/pull/112889) ([groeneai](https://github.com/groeneai))。
* `geohashesInBox(0., 0., 180., 0., 12)` のような面積ゼロのボックスに対して、`geohashesInBox` の処理時間が際限なく長くなる問題を修正しました。このようなクエリは正しい geohash を 1 つ返すものの、1 行あたり約 5e8 回の空ループを実行し、`max_execution_time` と `KILL QUERY` のいずれも効きませんでした。[#112976](https://github.com/ClickHouse/ClickHouse/pull/112976) ([groeneai](https://github.com/groeneai))。
* 値なしで記述されたものとしてマークされた `SETTINGS` の変更が `true` 以外の値を持つ場合は拒否し、またクエリのフォーマット時にそのような変更の値を省略しないようにしました。以前は、細工された AST JSON ペイロードによって、`system.query_log` や `formatQueryFromJSON` には値なしの形式が表示される一方で、`Bool` 設定が実際には `false` として実行される可能性がありました。[#113025](https://github.com/ClickHouse/ClickHouse/pull/113025) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 宣言されたカラム型が内部クエリの生成する型と異なる `VIEW` から SELECT する際に発生する `UNKNOWN_IDENTIFIER` を修正しました。例えば、`v` が `String` カラムに対して `arr Array(UInt8)` を宣言している場合の `SELECT sum(length(arr)) FROM v` などが該当します。デフォルトの `optimize_functions_to_subcolumns = 1` では、オプティマイザが `length(arr)` を `arr.size0` サブカラムの読み取りに書き換え、その名前を内部クエリに渡していましたが、内部クエリにはそのようなサブカラムが存在しませんでした。[#113057](https://github.com/ClickHouse/ClickHouse/pull/113057) ([groeneai](https://github.com/groeneai))。
* `postgresql` テーブル関数および PostgreSQL エンジンによる読み取りのキャンセルを修正しました。読み取りの開始処理中にキャンセルするとトランザクションポインタで競合が発生する可能性があり、さらにキャンセル自体が失われて、PostgreSQL が処理を終えるまでクエリが実行され続けることがありました。なお、`COPY` ステートメントの実行開始前に PostgreSQL に届いたキャンセルは、引き続き破棄される場合があります。[#113150](https://github.com/ClickHouse/ClickHouse/pull/113150) ([groeneai](https://github.com/groeneai))。
* クラスターテーブル関数 (`s3Cluster`、`urlCluster`、`fileCluster`) を参照する `SQL SECURITY DEFINER` または `SQL SECURITY NONE` ビューが、`remote` や `clusterAllReplicas` などを経由してセカンダリクエリとして読み取られた際に発生する `LOGICAL_ERROR` (`Next task callback is not set for query`) を修正しました。サポートされていないこのネストは、debug ビルドや sanitizer ビルドでサーバーを異常終了させるのではなく、通常のクエリエラーとして拒否されるようになりました。[#113371](https://github.com/ClickHouse/ClickHouse/pull/113371) ([groeneai](https://github.com/groeneai))。
* `analyzer_compatibility_join_using_top_level_identifier = 1` の設定下で、`view(...)` 引数を持つ remote 系テーブル関数を、キーが `SELECT` リストの別名である `JOIN ... USING` の左側で使用した場合に発生する論理エラー `IDENTIFIER is not a table expression` を修正しました。[#113400](https://github.com/ClickHouse/ClickHouse/pull/113400) ([groeneai](https://github.com/groeneai))。
* `indexHint` 内のサブクエリを用いて `system.databases` を `name` カラムでフィルタリングするクエリ (例：`SELECT count() FROM system.databases WHERE indexHint(name IN (SELECT 'foo'))`) で発生する `Not-ready Set is passed as the second argument for function 'in'` を修正しました。このようなクエリは、リリースビルドでは `LOGICAL_ERROR` で拒否され、debug ビルドや sanitizer ビルドではサーバーが異常終了していました。[#113556](https://github.com/ClickHouse/ClickHouse/pull/113556) ([groeneai](https://github.com/groeneai))。
* `Variant` カラムに対するクエリが `max_execution_time` および `KILL QUERY` を無視する問題を修正しました。複数の `Variant` 引数を持つ関数を呼び出すと、各引数のすべての候補型ごとに関数の解決が行われますが、この処理を行う 2 つのループのいずれもキャンセルを確認していなかったため、そのようなクエリは完了するまで停止できませんでした。[#113612](https://github.com/ClickHouse/ClickHouse/pull/113612) ([groeneai](https://github.com/groeneai))。
* 1 つのステートメントで `ALIAS` カラムを物理カラム (`DEFAULT` または `MATERIALIZED`) に変換すると同時に `CODEC` を指定した場合に、`ALTER TABLE ... MODIFY COLUMN` が `Cannot specify codec for column type ALIAS` で失敗する問題を修正しました。[#113853](https://github.com/ClickHouse/ClickHouse/pull/113853) ([groeneai](https://github.com/groeneai))。
* `ARRAY JOIN` を含む右側に対して定数の `ON` 式で結合した際に発生するサーバークラッシュを修正しました。遅延レプリケートされた右側カラムの読み取り時に、解放済みの `ColumnReplicated` を使用していました。[#113901](https://github.com/ClickHouse/ClickHouse/pull/113901) ([groeneai](https://github.com/groeneai))。
* テーブルの sorting key が `GROUP BY` キーの真のプレフィックスであり、かつ `quantileDD` のように状態がヒープメモリを保持する集約関数を使用している場合に、`optimize_aggregation_in_order = 1` でメモリリークが発生する問題を修正しました。このようなクエリを実行するたびに、再起動するまでサーバーのメモリ使用量が増え続けていました。[#114010](https://github.com/ClickHouse/ClickHouse/pull/114010) ([groeneai](https://github.com/groeneai))。
* `UInt128`/`UInt256` に対する `isProbablePrime` が `max_execution_time` および `KILL QUERY` を無視する問題を修正しました。幅の広い値のブロックが、キャンセルポイントのない単一の関数呼び出し内で最後まで処理されるため、クエリが期限を過ぎても数分間実行され続けることがありました。[#114032](https://github.com/ClickHouse/ClickHouse/pull/114032) ([groeneai](https://github.com/groeneai))。
* `PREWHERE` 句に `IN (subquery)` 述語が含まれ、かつ `rewrite_in_to_join = 1` (またはこれを強制的に有効化する `make_distributed_plan = 1`) が設定されている場合に、`Code: 46. DB::Exception: Unknown function exists. (UNKNOWN_FUNCTION)` がスローされる問題を修正しました。同じクエリを `WHERE` で記述した場合は正しく動作していました。[#114067](https://github.com/ClickHouse/ClickHouse/pull/114067) ([RohithPariki](https://github.com/RohithPariki))。
* 引数が要素型 `Nothing` の空でない配列である場合 (例: `SELECT arrayAutocorrelation([arrayMax([])])`) に、`arrayAutocorrelation` で `LOGICAL_ERROR` が発生する問題を修正しました。このような引数は `ILLEGAL_COLUMN` で拒否されるようになりました。空の配列リテラル `[]` は引き続き `[]` を返します。[#114249](https://github.com/ClickHouse/ClickHouse/pull/114249) ([groeneai](https://github.com/groeneai))。
* `CREATE TABLE` および `ALTER TABLE` で、sorting key に使用されるカラムに `SZ3` などの非可逆コーデックを指定すると拒否されるようになりました。[#114531](https://github.com/ClickHouse/ClickHouse/pull/114531) ([groeneai](https://github.com/groeneai))。
* インターバル引数の秒単位の長さが 2^32 の倍数である場合 (例: `toIntervalDay(2147483648)`) に、関数 `hop` および `windowID` でキャンセル不可能な無限ループが発生する問題を修正しました。減算がラップアラウンドすることで時間のオーバーフローチェックをすり抜けており、引数が定数の場合はループが解析時に実行されるため、クエリを kill することすらできませんでした。また、同じインターバルによって `WINDOW VIEW` のバックグラウンドスレッドが永久に空回りすることもありました。このような window view は作成時に拒否されるようになりました。[#114607](https://github.com/ClickHouse/ClickHouse/pull/114607) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* リモートクラスタから読み取る `IN` サブクエリを含むクエリで、論理エラー `Not-ready Set is passed as the second argument for function 'in'` が発生する問題を修正しました。今後は、接続失敗など、サブクエリで実際に発生したエラーでクエリが失敗するようになります。[#114983](https://github.com/ClickHouse/ClickHouse/pull/114983) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `Log`、`TinyLog`、または `StripeLog` テーブルへの `INSERT` が、記録済みファイルサイズのコミット中に失敗した場合の問題を修正しました。このような挿入では、エラーが報告されたにもかかわらず行がテーブルに残ったり、Array カラムのデータファイル間で不整合が生じたりすることがありました。また、Array カラムに要素がないにもかかわらずオフセットが要素の存在を示している `Log` または `TinyLog` テーブルを読み取ると、要素の末尾を越えて読み取るのではなく、該当カラム名を含むエラーが発生するようになりました。部分的に書き込まれた要素カラムについては、以前から拒否されていました。[#115027](https://github.com/ClickHouse/ClickHouse/pull/115027) ([groeneai](https://github.com/groeneai))。
* `has([map('k', 'v')], m)` のように `Array(Map(...))` 型の定数を含むクエリを、`Distributed` テーブルに対して、または並列レプリカを使用して実行した場合に、`TYPE_MISMATCH` ("CAST AS Array can only be performed between same-dimensional array types") が発生する問題を修正しました。[#115883](https://github.com/ClickHouse/ClickHouse/pull/115883) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* ビューまたは `view()` との結合時に、射影されたカラムがその内部リレーションのいずれかのカラムと同名である場合 (例: `SELECT expr(x.c0) AS c0 FROM a AS x, b AS y`) 、誤った結果が返される問題を修正しました。join order optimizer がこのような expression をフラット化された結合グラフにマージしたうえで二重に適用していたため、クエリはエラーを出さないまま偏った値を返していました。expression がカラムの型も変更する場合は、同じ原因によりプラン作成時に `AMBIGUOUS_COLUMN_NAME` が発生していました。[#116152](https://github.com/ClickHouse/ClickHouse/pull/116152) ([groeneai](https://github.com/groeneai)).
* ROLLUP/CUBE と `group_by_use_nulls` を併用した際に外部カラムが `Nullable` になると、相関サブクエリで例外が発生する問題を修正しました。[#100365](https://github.com/ClickHouse/ClickHouse/pull/100365) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Replicated` データベースで `max_replication_lag_to_enqueue = 0` を拒否するようにしました。この値を指定すると、リカバリ後の未同期チェックが常に真となり、デバッグビルドおよびサニタイザービルドでサーバーが `LOGICAL_ERROR` により異常終了していました。現在は、あらゆる指定元 (`CREATE DATABASE ... SETTINGS`、サーバー設定の `<database_replicated>` ブロック、`ATTACH` のリプレイ、アップグレード時の既存メタデータのリプレイ) で指定された `0` が、パース時に `BAD_ARGUMENTS` として拒否されます。有効な最小値は `1` です。[#106006](https://github.com/ClickHouse/ClickHouse/pull/106006) ([groeneai](https://github.com/groeneai)).
* 型が混在した配列の挿入時に NO\_COMMON\_TYPE 例外が発生するのを防ぐため、JSON (Object) カラムに対する minmax スキップ索引の作成を禁止しました。代わりに型付きサブカラムを使用してください (例: `INDEX idx json.field TYPE minmax`) 。[#106094](https://github.com/ClickHouse/ClickHouse/pull/106094) ([linhaojie](https://github.com/linhaojie)).
* Dynamic 型の引数を渡した場合に、`JSON_QUERY`/`JSON_VALUE`/`JSON_EXISTS` が String/UInt8 ではなく Dynamic を返す問題を修正しました。[#106877](https://github.com/ClickHouse/ClickHouse/pull/106877) ([Avogar](https://github.com/Avogar)).
* `interactive_delay` などの待機タイムアウト設定に極端に大きな値を指定した場合に発生する符号付き整数オーバーフローを修正しました。この問題により、待機せずに即座にタイムアウトしたり、Undefined Behavior Sanitizer 環境下でサーバーが異常終了したりすることがありました。[#106961](https://github.com/ClickHouse/ClickHouse/pull/106961) ([groeneai](https://github.com/groeneai)).
* `geohashesInBox` 関数で、座標引数に定数値と非定数値が混在している場合、または座標が `BFloat16` の場合に `LOGICAL_ERROR` ("Unsupported argument types") が発生する問題を修正しました。定数と非定数が混在した `Float32` 引数が正しく動作するようになり、`BFloat16` 引数は明確なエラーメッセージとともに拒否されるようになりました。[#107063](https://github.com/ClickHouse/ClickHouse/pull/107063) ([groeneai](https://github.com/groeneai)).
* `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](https://github.com/ClickHouse/ClickHouse/pull/107371) ([groeneai](https://github.com/groeneai)).
* 同梱の `mongo-c-driver` で、MongoDB からの読み取り時 (例: MongoDB ディクショナリや `mongodb` テーブル関数の使用時) に、再試行可能な読み取りエラーの後、再試行用のサーバー選択に失敗した場合に発生し得るメモリリークを修正しました。[#107448](https://github.com/ClickHouse/ClickHouse/pull/107448) ([groeneai](https://github.com/groeneai)).
* `pointInPolygon` が `Variant` や `Dynamic` などのラッパー型の定数ポリゴン引数で呼び出された場合 (例: `pointInPolygon((x, y), if(c, [(0, 0), ...], NULL))`) に、プライマリキー解析中に論理エラー (`WhichDataType(const_type).isArray()`) が発生してサーバーが異常終了する問題を修正しました。[#107589](https://github.com/ClickHouse/ClickHouse/pull/107589) ([groeneai](https://github.com/groeneai))。
* `Variant` および `Dynamic` カラム内にネストされた `LowCardinality` の除去処理に一貫性がなかったため、`concat`、`format`、プライマリキー解析などで論理エラー (`Bad cast`) が発生する問題を修正しました。[#107773](https://github.com/ClickHouse/ClickHouse/pull/107773) ([Avogar](https://github.com/Avogar))。
* 実行可能なユーザー定義関数のコマンドパラメータのパース処理を修正し、名前が空または無効なプレースホルダーをパラメータとして受け付けないようにしました。[#107983](https://github.com/ClickHouse/ClickHouse/pull/107983) ([goutamadwant](https://github.com/goutamadwant))。
* 要素が `Dynamic`/`Variant` である `Tuple` に対する `accurateCastOrNull` で、ソース側の本来の `NULL` が変換失敗として扱われていた問題を修正しました。ターゲット要素が `Nullable` の場合、ソースの `NULL` は要素の `NULL` としてそのまま維持されるようになりました (通常の `Tuple(Nullable(...))` ソースと同じ動作) 。ターゲット要素が `Nullable` でない場合、ソースの `NULL` は要素のデフォルト値を生成するのではなく、タプル全体を NULL にするようになりました (`Dynamic` を含まない場合の基準動作と同じ) 。パースやオーバーフローに失敗した場合は、従来どおりタプル全体が NULL になります。[#108023](https://github.com/ClickHouse/ClickHouse/pull/108023) ([groeneai](https://github.com/groeneai))。
* `mongodb` テーブル関数で、名前付き引数として渡された `oid_columns` (例: `oid_columns='_id'`) が `BAD_ARGUMENTS` で拒否されず、正しく受け付けられるようになりました。[#108039](https://github.com/ClickHouse/ClickHouse/pull/108039) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `DateTime64`、`Decimal`、または浮動小数点の範囲を使用する `range_hashed` または `complex_key_range_hashed` Dictionary に対して、対応する型の引数を `dictGet`/`dictHas` に渡してクエリできるようになりました。以前はこのようなクエリが `must be convertible to Int64` で失敗していたほか、`Decimal`/`DateTime64` の範囲で上限または下限のない区間に対して誤ってデフォルト値が返されていました。[#108052](https://github.com/ClickHouse/ClickHouse/pull/108052) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `accurateCastOrNull` で `Array(Dynamic)` または `Array(Variant)` を `QBit` にキャストする際 (例: `accurateCastOrNull(CAST(range(114), 'Array(Dynamic)'), 'QBit(Float32, 114)')`) に、サーバーが異常終了する問題 (`IColumn::insertFrom` における `Logical error`) を修正しました。[#108288](https://github.com/ClickHouse/ClickHouse/pull/108288) ([groeneai](https://github.com/groeneai))。
* 不正な形式または同期のずれたネイティブ TCP プロトコルストリームによって発生する可能性のあるサーバークラッシュ (`Received signal 4`、不正命令) を修正しました。`ClientInfo` の `initial_address` フィールドは、パース前に数値形式の `host:port` であるかを検証するようになり、数値でないポートがトラップ対象の libc 関数 `getservbyname` に渡されることはなくなりました。[#108410](https://github.com/ClickHouse/ClickHouse/pull/108410) ([groeneai](https://github.com/groeneai))。
* `mannWhitneyUTest`、`rankCorr`、`largestTriangleThreeBuckets`、`quantileGK`、`sequenceMatch`/`sequenceCount`、`groupArrayIntersect` の細工された集約関数ステートをデシリアライズする際に、過剰なメモリ割り当てが発生する問題を修正しました。不正なステートが巨大な要素数を宣言すると、わずか数バイトの入力からサーバーが数十ギガバイトものメモリを割り当てようとする可能性がありました。現在、このようなステートは `TOO_LARGE_ARRAY_SIZE` で拒否されます。[#108465](https://github.com/ClickHouse/ClickHouse/pull/108465) ([groeneai](https://github.com/groeneai))。
* `GROUPING SETS`/`ROLLUP`/`CUBE` で `LowCardinality` の定数グルーピングキーと `group_by_use_nulls` を併用した場合に発生する論理エラー (`Bad cast from type DB::ColumnNullable to DB::ColumnString`) と、誤った結果が返される可能性がある問題を修正しました。[#108771](https://github.com/ClickHouse/ClickHouse/pull/108771) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Map` の値に `LowCardinality` を含むネストされた `Map` がある場合 (例: `mapFilter((k, v) -> 1, map('a'::LowCardinality(String), map('x'::LowCardinality(String), 'y')))`) に、`mapFilter`、`mapSort`、`mapReverseSort`、`mapPartialSort`、`mapConcat` で `TYPE_MISMATCH` が発生する問題を修正しました。[#108798](https://github.com/ClickHouse/ClickHouse/pull/108798) ([groeneai](https://github.com/groeneai)).
* 名前付き要素と名前なし要素が混在する `Tuple` データ型 (例: `Tuple(a UInt8, UInt16)`) をフォーマットする際に `LOGICAL_ERROR` ("Inconsistent AST formatting") が発生し、debug ビルドおよび sanitizer ビルドでサーバーが異常終了する問題を修正しました。[#108915](https://github.com/ClickHouse/ClickHouse/pull/108915) ([groeneai](https://github.com/groeneai)).
* `JSONExtract` で文字列の JSON 値を `DateTime`/`DateTime64` に変換する際、`CAST` と同様に `cast_string_to_date_time_mode` が適用されるようになりました。[#109252](https://github.com/ClickHouse/ClickHouse/pull/109252) ([Utkal059](https://github.com/Utkal059)).
* 右側の引数に配列カラムを直接指定した `IN` が、誤った結果 (常に false) を警告なく返す、または例外をスローする問題を修正しました。これにより、`x IN arr` は `has(arr, x)` と同様に動作します。[#109416](https://github.com/ClickHouse/ClickHouse/pull/109416) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 非定数の `Array(LowCardinality(T))` 引数に対して `arrayFold` を使用した場合 (例: `arrayFold((acc, x) -> acc + x, materialize([1, 2, 3]::Array(LowCardinality(Int64))), toInt64(0))`) に、"Arguments of 'plus' have incorrect data types" で失敗する `LOGICAL_ERROR` (debug ビルドおよび sanitizer ビルドではサーバーが異常終了) を修正しました。[#109462](https://github.com/ClickHouse/ClickHouse/pull/109462) ([groeneai](https://github.com/groeneai)).
* `FixedString` 引数を `String` に正しくキャストするようにし、`conv` で発生する `ILLEGAL_COLUMN` 例外を修正しました。[#109771](https://github.com/ClickHouse/ClickHouse/pull/109771) ([hp77-creator](https://github.com/hp77-creator)).
* `serialize_query_plan = 1` の場合に、`FINAL` / `SAMPLE` を指定したテーブル関数の読み取りが誤った結果を返す問題を修正しました。また、テーブル関数に対する集約ハッシュテーブル統計キャッシュのキーも修正しました (以前はすべてのテーブル関数が 1 つの事前割り当てエントリを共有していました) 。[#109847](https://github.com/ClickHouse/ClickHouse/pull/109847) ([azat](https://github.com/azat)).
* コンテナ型 (例: `Array(Bool)`、`Tuple(Bool, ...)`) 内で数値の `1`/`0` を `Bool` 値としてパースできるよう修正しました。以前は `[true,false]` は動作する一方、`[1,0]` は `CANNOT_READ_ARRAY_FROM_TEXT` で失敗していました。[#109976](https://github.com/ClickHouse/ClickHouse/pull/109976) ([groeneai](https://github.com/groeneai)).
* `Array(LowCardinality(Nullable(String)))` (この形式で格納された `Nested` フィールドを含む) に `text` 索引を構築し、索引対象の配列に `NULL` 要素が含まれる場合に発生する `NOT_IMPLEMENTED` エラー (`Method getDataAt is not supported for Nullable(String) in case if value is NULL`) を修正しました。`Array(Nullable(String))` と同様に、索引構築時には `NULL` の配列要素がスキップされるようになりました。[#110055](https://github.com/ClickHouse/ClickHouse/pull/110055) ([groeneai](https://github.com/groeneai)).
* 小さい表現のまま保持されている bitmap に対して、`subBitmap`、`bitmapSubsetInRange`、`bitmapSubsetLimit` が誤った結果を返す問題を修正しました。`2^32` を超える `UInt64` および `Int64` の要素値が 32 ビットに切り詰められていたケースも含まれます。符号付き要素型に対する bitmap 関数での比較では、要素型の符号なし値が一貫して使用されるようになりました。そのため、`Int8` の bitmap では、要素 `-1` は符号拡張された `4294967295` ではなく `255` として比較されます。この変更により、小さい表現を超えて拡張された bitmap に対する `bitmapMin`、`bitmapMax`、`bitmapContains`、`bitmapTransform` の問題も解消されます。符号拡張されたしきい値を渡していたクエリは修正が必要です。たとえば `Int8` の bitmap では、`bitmapSubsetInRange(bm, 4294967168, 4294967296)` を `bitmapSubsetInRange(bm, 128, 256)` に変更してください。また、`groupNumericIndexedVector` が `Int8` および `Int16` の索引カラムに対して、より幅の広い索引タイプとは異なる結果を返す問題と、`numericIndexedVectorGetValue` が負の索引に対して `0` を返す問題も修正しました。あわせて bitmap 関数のドキュメントも修正し、1 始まりのインデックスを使用すると誤って記載されていた subset 関数の説明や、符号付き型に対する `bitmapBuild` / `bitmapToArray` のサポートに関する記述を訂正しました。[#110072](https://github.com/ClickHouse/ClickHouse/pull/110072) ([RamiDarwiche](https://github.com/RamiDarwiche))。
* インターバル種別の `WITH FILL STEP`、および極端な差分を指定した `add*` / `subtract*` 日付・時刻インターバル関数において、インターバル演算で未定義の符号付きオーバーフローが発生し得る箇所を修正しました。これにより、極端なインターバル値でも符号付きオーバーフローに依存せず、決定論的な結果が得られるようになりました。また、巨大な `YEAR` ステップを指定したインターバル種別の `WITH FILL` で、カレンダーが逆方向に進んで処理が停止する問題も修正しました。[#110158](https://github.com/ClickHouse/ClickHouse/pull/110158) ([groeneai](https://github.com/groeneai))。
* 複数のキーでグループ化し、ソート順がグループ化キーのプレフィックスにすぎない場合に、順序付き集約の処理時間が二次関数的に増大する (さらに `max_execution_time` が効かなくなる) 問題を修正しました。[#110159](https://github.com/ClickHouse/ClickHouse/pull/110159) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* オペランドに最小共通スーパータイプが存在しない場合に、比較で `ILLEGAL_TYPE_OF_ARGUMENT` がスローされていた問題を修正しました。`Array(Int64)` と `Array(UInt64)`、`Array(Int256)` と `Array(UInt256)` などの Array を、`=`、`!=`、`<`、`<=`、`>`、`>=`、`IS DISTINCT FROM`、`IS NOT DISTINCT FROM` を使って辞書式順序で比較できるようになりました。`isDistinctFrom` / `isNotDistinctFrom` などの NULL セーフな比較でも、サポート対象の配列以外の数値型または decimal 型の組み合わせについて、例外をスローせずに値で比較するようになりました。さらに、ネストされた `Tuple(Nullable(...))` 要素を持つ Array でも等価比較が可能になりました。[#110245](https://github.com/ClickHouse/ClickHouse/pull/110245) ([diegomestre2](https://github.com/diegomestre2))。
* 負のオフセットを持つタイムゾーンで、極端な `DateTime64` 値 (例: `INT64_MIN`) を `Time`/`Time64` に変換する際に発生する符号付き整数オーバーフロー (UBSan) を修正しました。[#110451](https://github.com/ClickHouse/ClickHouse/pull/110451) ([groeneai](https://github.com/groeneai))。
* 範囲外の浮動小数点値 (`BFloat16`、`Float32`、`Float64`) および `Int64::max()` を超える `UInt64` 値を `DateTime` や `Time` に変換した場合、すべてのアーキテクチャで確実に範囲の境界値へ飽和するようになりました (以前は範囲外の変換結果がアーキテクチャに依存しており、x86-64 ではラップアラウンドすることがありました) 。また、非有限値 (`NaN`、`inf`) は不定の結果を返すのではなく、例外をスローするようになりました。同様の修正は、`toDate` における浮動小数点から `Date` への変換経路、および `UInt64` やワイド整数 (`(U)Int128`、`(U)Int256`) から `Date` および `Date32` への変換にも適用されています。これらの変換では、飽和せずにエポック以前の日付が返される場合がありました。数値から `Time` への変換は、すべての数値ソース型で型の範囲内に飽和するようになりました (以前は、幅の狭い符号なし整数やワイド整数からの値はクランプされないまま格納され、出力時にのみクランプされていました) 。さらに、`Time` への厳密なキャストでは、`Time` がサポートする負の値が拒否されなくなり、収まらない値が暗黙的に飽和されることもなくなりました。数値から `Date32` への厳密なキャスト (`accurateCast`、`accurateCastOrNull`) では、範囲外または非有限の値が暗黙的に飽和されなくなり、`Date` や `DateTime` と同様に例外をスローするか `NULL` を返すようになりました。また、`OrDefault` 系の関数は、そのような入力に対して `Date32` のデフォルト値を返します。整数でない浮動小数点数から `Date`、`Date32`、`DateTime`、`Time` への厳密なキャストは、暗黙的に切り捨てられるのではなく、拒否されるようになりました。あわせて、`toDateTime32` 関数のドキュメントで、誤って `toDateTime64` の例が掲載され、`DateTime64` の値の範囲が説明されていた問題も修正しました。[#110459](https://github.com/ClickHouse/ClickHouse/pull/110459) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Map のキーが Dictionary エンコードされた ORC ファイル (Spark が書き出した ORC ファイルや、`output_format_orc_dictionary_key_size_threshold` を有効にして ClickHouse 自身が書き出したファイルを含む) を読み込む際に、スキーマ推論が `Map cannot have a key of type LowCardinality(Nullable(String))` というエラーで失敗する問題を修正しました。[#110492](https://github.com/ClickHouse/ClickHouse/pull/110492) ([tiandiwonder](https://github.com/tiandiwonder)).
* `optimize_or_like_chain` が有効な状態で、`OR` チェーン内の `LIKE`/`ILIKE`/`match` の左辺に集約関数またはウィンドウ関数が含まれている場合に発生することがあった論理エラー (`Function node with name '...' is not resolved as ordinary function`) を修正しました。[#110641](https://github.com/ClickHouse/ClickHouse/pull/110641) ([groeneai](https://github.com/groeneai)).
* `Date`/`Date32`/`DateTime64` 値に対して極端な `MONTH`、`WEEK`、`DAY` のインターバル数を指定すると、`toStartOfInterval` で符号付き整数オーバーフローが発生する問題を修正しました。[#110688](https://github.com/ClickHouse/ClickHouse/pull/110688) ([groeneai](https://github.com/groeneai)).
* `readWKT` および `readWKTPoint` が `POINT EMPTY` に対して、未初期化の座標 (スカラー版) または前の行の古い座標 (ベクトル化版) を返す問題を修正しました。ClickHouse の `Point` は空の表現を持たない固定の `Tuple(Float64, Float64)` であるため、`POINT EMPTY` は `CANNOT_PARSE_TEXT` エラーで拒否されるようになりました。[#110692](https://github.com/ClickHouse/ClickHouse/pull/110692) ([groeneai](https://github.com/groeneai)).
* `flipCoordinates` で `Geometry` 型が失われる問題を修正しました。`Geometry` 型の引数を渡した場合、結果は内部の `Variant(...)` ではなく再び `Geometry` 型になるため、`areaCartesian` などの関数に直接渡せるようになりました。[#110694](https://github.com/ClickHouse/ClickHouse/pull/110694) ([groeneai](https://github.com/groeneai)).
* 空のポリゴンの WKB シリアライゼーションが標準形式になっていなかった問題を修正しました。`wkb(POLYGON EMPTY)` は、余分な点数ゼロのリングを 1 つ出力する代わりに `numRings = 0` を出力するようになったため、標準的な空ポリゴンを WKB で往復変換しても同一性が保たれるようになりました。[#110796](https://github.com/ClickHouse/ClickHouse/pull/110796) ([groeneai](https://github.com/groeneai)).
* JSON の `Bool` パースにおける数値の `1`/`0` が、`allow_special_bool_values` 設定に従うようになりました。従来は JSON の `Bool` パーサーがこの設定を無視しており、さらに `Bool` は整数型よりも `Variant` のデシリアライズ優先度が高いため、`allow_special_bool_values_inside_variant = 0` であっても、`Variant(Bool, UInt32)` に対する `{"v":1}` のような JSON 入力が `Bool` として読み込まれていました。[#110835](https://github.com/ClickHouse/ClickHouse/pull/110835) ([groeneai](https://github.com/groeneai)).
* `col` が `LowCardinality` の場合に、`throwIf(notLike(col, pattern))`(および関数を引数に取るその他の `throwIf`)が無条件に例外をスローする問題を修正しました。デフォルトの `LowCardinality` 実装では辞書全体に対して `throwIf` を実行していましたが、辞書にはそれを参照する行がなくても予約済みのデフォルト値が常に含まれています。そのため、この未使用スロットに 0 以外の値があると、条件を満たさないデータに対しても `throwIf` が例外をスローしていました。[#110864](https://github.com/ClickHouse/ClickHouse/pull/110864) ([groeneai](https://github.com/groeneai)).
* `-Tuple` コンビネータ付きの集約関数を `RESPECT NULLS` とともに使用し、中間ステート(`-State`、分散集約、`WITH ROLLUP`/`WITH CUBE`)を生成した場合に発生するクラッシュを修正しました。結合後の関数名が誤ったステートのバリアントに基づいて付けられていたため、シリアル化された `AggregateFunction` 型がラウンドトリップ時に互換性のないメモリ内レイアウトとして再解決されていました。[#110930](https://github.com/ClickHouse/ClickHouse/pull/110930) ([groeneai](https://github.com/groeneai)).
* `mysql` テーブル関数、または `MySQL` テーブル/データベースエンジンを介して Nullable な MySQL 空間カラム(`LINESTRING`、`POLYGON`、`MULTILINESTRING`、`MULTIPOLYGON`、`MULTIPOINT`、または汎用の `GEOMETRY`)を読み込む際に発生する `Nested type LineString cannot be inside Nullable type (ILLEGAL_TYPE_OF_ARGUMENT)` エラーを修正しました。このようなカラムは、MySQL が返す値(4 バイトの SRID プレフィックスと、それに続く WKB ペイロード)をそのまま保持する `Nullable(String)` にフォールバックするようになりました。`POINT` は引き続き `Nullable(Point)` にマッピングされます。[#110943](https://github.com/ClickHouse/ClickHouse/pull/110943) ([groeneai](https://github.com/groeneai)).
* 旧バージョンのピア向けに、バージョン付き集約状態を含む `SimpleAggregateFunction` ラッパーを `Native` 形式でシリアライズする処理を修正しました。[#110997](https://github.com/ClickHouse/ClickHouse/pull/110997) ([groeneai](https://github.com/groeneai)).
* 分散クエリおよび並列レプリカを使用するクエリにおいて、`Variant` 型(`Geometry` を含む)の定数で発生する `CANNOT_CONVERT_TYPE` エラーを修正しました。[#111136](https://github.com/ClickHouse/ClickHouse/pull/111136) ([fm4v](https://github.com/fm4v)).
* 高階関数のラムダ本体が、`Bool` リテラルの分岐と `UInt8` 比較の分岐が混在する定数条件の `if`/`multiIf` である場合(例: `arrayFilter(p -> multiIf(false, true, p = 'ALL'), ['ALL'])`)に発生する `LOGICAL_ERROR`("Lambda resolved type ... is not equal to type from actions DAG ...")を修正しました。[#111245](https://github.com/ClickHouse/ClickHouse/pull/111245) ([groeneai](https://github.com/groeneai)).
* サブ秒単位のインターバルを指定した `toStartOfInterval` における符号付き整数オーバーフローを修正しました。`Int64` の下限から 1 インターバル以内にある `DateTime64` 値では、丸め結果が何の警告もなくラップアラウンドし、無意味な正の値になっていました。現在は `DECIMAL_OVERFLOW` 例外をスローします。[#111370](https://github.com/ClickHouse/ClickHouse/pull/111370) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* ネストされたコンビネータ内で `-Tuple` コンビネータを `RESPECT NULLS` / `IGNORE NULLS` 修飾子とともに使用する分散クエリ(例: `anyRespectNullsStateTuple(...) IGNORE NULLS`)で発生する例外(`CANNOT_CONVERT_TYPE` または論理エラー)を修正しました。[#111570](https://github.com/ClickHouse/ClickHouse/pull/111570) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* パースに失敗した際に、部分的に追加されたバイトがカラムに残ってしまう `FixedString` のテキスト try-parse の問題を修正しました。この問題により、`Variant`/`Array`/`Nullable` カラムのシリアライゼーション中に `Sizes of nested column and null map of Nullable column are not equal` という論理エラーが発生したり、結果のバイトが気付かないうちにずれたりする可能性がありました。[#111908](https://github.com/ClickHouse/ClickHouse/pull/111908) ([groeneai](https://github.com/groeneai))。
* `Buffer` テーブル経由で動的サブカラム (`JSON` カラムまたは `Dynamic` カラム内のパス) を読み取る際に、例外が発生したり、データが警告なしにスキップされたりする問題を修正しました。[#111948](https://github.com/ClickHouse/ClickHouse/pull/111948) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `countSubstringsCaseInsensitiveUTF8` の計算量が二次関数的に増加する問題を修正しました。これにより、数メガバイトの haystack に多数のマッチがある場合、関数の実行に数分かかっていました。各マッチの文字オフセットは、行の先頭から数え直すのではなく、インクリメンタルに保持されるようになりました。[#112003](https://github.com/ClickHouse/ClickHouse/pull/112003) ([groeneai](https://github.com/groeneai))。
* `toStartOfInterval` の 3 引数オーバーロードにおける符号付き整数オーバーフローを修正しました。`origin` 引数が `Int64` の下限付近の値である場合、関数はエラーを報告せず、ラップアラウンドした値を返していました。[#112045](https://github.com/ClickHouse/ClickHouse/pull/112045) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* テーブル関数のパラメータでの集約状態の使用を禁止しました。この用途は一切サポートされていないためです。[#112087](https://github.com/ClickHouse/ClickHouse/pull/112087) ([PedroTadim](https://github.com/PedroTadim))。
* `values` テーブル関数で、`String`/テキスト系カラムに挿入された非リテラルの `Bool` 定数 (例: `CAST(true, 'Nullable(Bool)')`) が `true`/`false` ではなく `1`/`0` として出力される問題を修正しました。[#112308](https://github.com/ClickHouse/ClickHouse/pull/112308) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy))。
* ステート表現は共通でも確定後の型が異なる別々の関数に由来する集約状態を含むカラムに対して `finalizeAggregation` を適用すると、論理エラー (debug ビルドおよび sanitizer ビルドではアボート) が発生する問題を修正しました。たとえば、`UNION` でまとめられた、あるいは `arrayReduce` で生成された `quantileState` と `quantilesState(0.9)` が該当します。このようなクエリは、クラッシュせずに通常のエラーを返すようになりました。[#112662](https://github.com/ClickHouse/ClickHouse/pull/112662) ([zainulabidin302](https://github.com/zainulabidin302))。
* JSON の数値の読み取りに使用される `Poco::NumberParser` で、変換先の型に収まらない整数のパースを修正しました。このような数値は拒否されずに、警告なしで誤った値としてパースされていました (例: `18446744073709551617` が `1` になる) 。また、`Int64` の最大値を超える `UInt64` の数値が、AST の JSON ラウンドトリップで正しく保持されていませんでした。[#112904](https://github.com/ClickHouse/ClickHouse/pull/112904) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `IN` の右辺にある `Bool` 定数が `String` 型の左辺に合わせて変換される際、正規の `'true'`/`'false'` ではなく `'1'`/`'0'` に変換される問題を修正しました (`CAST` および `values` テーブル関数と一貫した動作になりました) 。[#113051](https://github.com/ClickHouse/ClickHouse/pull/113051) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy))。
* `viewIfPermitted` の AST フォーマットにおける不整合を修正しました。具体的には、テーブル関数形式の `ELSE` 分岐内にある、通常は演算子として記述される関数 (例: `not`) に関する問題と、expression 形式の `viewIfPermitted(...)` が誤って `ELSE` 付きでフォーマットされる問題です。[#113652](https://github.com/ClickHouse/ClickHouse/pull/113652) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `Date`/`DateTime`/`DateTime64`/`Time`/`Time64` に対する `avg` で発生していた未定義動作と誤った結果を修正しました。平均値は整数空間で正確に計算されるようになり、`Int64` の境界でのオーバーフロー (UB、x86 上で誤った結果になる) と、2^53 を超える値での `Float64` の精度低下 (ナノ秒スケールで顕在化) の両方が解消されました。[#113912](https://github.com/ClickHouse/ClickHouse/pull/113912) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 実験的な `SZ3` 圧縮コーデックにおけるメモリリークを修正しました。圧縮しにくいデータや破損したデータの圧縮が例外で失敗した場合に、一時的なスクラッチバッファが解放されずに残っていました。[#113916](https://github.com/ClickHouse/ClickHouse/pull/113916) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `bloom_filter` 索引に対して `FixedString` 定数でクエリを実行した場合に、`hasAny`、`hasAll`、`has`、`indexOf`、`mapContainsKey`、`mapContainsValue`、`mapContains` が本来より少ない行しか返さない、または `TOO_LARGE_STRING_SIZE` で失敗する問題を修正しました。索引ではパディング済みの定数をハッシュ化していた一方、関数はパディングされていない定数で比較していたため、一致するグラニュールがスキップされていました。[#114089](https://github.com/ClickHouse/ClickHouse/pull/114089) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 集約が JIT コンパイルされ、かつデータに 1970 年より前のタイムスタンプが含まれる場合に、`DateTime64` カラムに対する `min` と `max` が誤った結果を返す問題を修正しました。`Decimal64` から派生する `DateTime64` と `Time64` に対して `is_signed` が特殊化されていなかったため、生成されたコードがティック数を符号なし整数として比較してしまい、1970 年より前のタイムスタンプが `max` では選ばれ、`min` では選ばれないという状態になっていました。[#114168](https://github.com/ClickHouse/ClickHouse/pull/114168) ([groeneai](https://github.com/groeneai)).
* 配列要素と検索文字列の文字列型が異なる場合 (例: `Array(FixedString(N))` の要素に対して `String` の検索文字列を使用する場合) に、`arrayExists(x -> x = needle, arr)` が誤った結果を返す、または `TOO_LARGE_STRING_SIZE` で失敗する問題を修正しました。デフォルトで有効な `optimize_rewrite_array_exists_to_has` 最適化によってこのような呼び出しが `has` に書き換えられていましたが、`has` は `=` とは異なり、ゼロパディングを考慮した比較を行いません。[#114496](https://github.com/ClickHouse/ClickHouse/pull/114496) ([groeneai](https://github.com/groeneai)).
* Map または JSON コンテナーに対して使用される `LIKE/ILIKE` オペレーターのテキスト索引評価を修正しました。[#114544](https://github.com/ClickHouse/ClickHouse/pull/114544) ([ahmadov](https://github.com/ahmadov)).
* `DateTime64` および幅の広い `Decimal` 値に対する `quantile` と `quantiles` で発生していた未定義動作と、境界値での誤った結果を修正しました。[#114919](https://github.com/ClickHouse/ClickHouse/pull/114919) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Time` の分岐が `Time64`、`DateTime`、または `DateTime64` と組み合わされ、かつ expression が JIT コンパイルされた場合に、`if` と `multiIf` が負の値ではなく大きな正の値を返す問題を修正しました。[#115146](https://github.com/ClickHouse/ClickHouse/pull/115146) ([groeneai](https://github.com/groeneai)).
* 国際日付変更線をまたいだ後の `Pacific/Kiritimati` や `Pacific/Apia` のように、UTC オフセットが 1970-01-01 時点のオフセットとちょうど 1 日分異なるタイムゾーン、および 1970 年より前のほとんどのタイムゾーンにおいて、`timezoneOffset` (エイリアス `timeZoneOffset`) がちょうど 1 日ずれたオフセットを返す問題を修正しました。この修正により、このオフセットを使用する `parseDateTime`、`parseDateTimeOrNull`、`parseDateTime64`、`parseDateTimeInJodaSyntax`、`EXTRACT(TIMEZONE_HOUR / TIMEZONE_MINUTE ...)`、`formatDateTime` の `%z`、`toUTCTimestamp`、`fromUTCTimestamp` の問題も解消されます。[#115332](https://github.com/ClickHouse/ClickHouse/pull/115332) ([groeneai](https://github.com/groeneai)).
* 主キーが `String`、`Array(String)`、または `Map(String, String)` で、`has` または `notHas` の述語に NULL の配列要素が含まれている場合に `Code: 349. Cannot convert NULL value to non-Nullable type` が発生する問題を修正しました。また、その要素が NULL を保持する `Dynamic` または `Variant` である場合に誤った結果が返される問題も修正しました。キー解析時には、他のキー型と同様に NULL が Set から除外されるようになりました。[#115647](https://github.com/ClickHouse/ClickHouse/pull/115647) ([groeneai](https://github.com/groeneai))。
* 変換先の型が `LowCardinality` の場合に、`cast_keep_nullable` が Nullable 性を保持しない問題を修正しました。これまでは、NULL を取り得る値を `LowCardinality(T)` に CAST すると、`LowCardinality(Nullable(T))` が生成されずに `CANNOT_INSERT_NULL_IN_ORDINARY_COLUMN` がスローされていました。[#115851](https://github.com/ClickHouse/ClickHouse/pull/115851) ([groeneai](https://github.com/groeneai))。

<h3 id="index-and-query-cache-fixes">
  索引およびクエリキャッシュの修正
</h3>

* `DEFAULT` expression を持ち、パーツ内でマテリアライズされていないカラム (例: `ALTER TABLE ADD COLUMN` の実行後や `ALTER TABLE MATERIALIZE COLUMN` の実行中) のサブカラムの読み取りを修正しました。これまでは、サブカラムが評価済みの `DEFAULT` expression ではなく型のデフォルト値で埋められていたほか、そのような `QBit` カラムに対する転置ベクトル距離関数 (`cosineDistanceTransposed` など) が `SIZES_OF_ARRAYS_DONT_MATCH` エラーで失敗していました。[#110636](https://github.com/ClickHouse/ClickHouse/pull/110636) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 主キー解析中に `IN` サブクエリのセット構築が通知なく失敗した場合 (例: `overflow_mode = 'break'` 指定時のサブクエリのタイムアウト) 、クエリパイプライン用のセットが未構築のまま残り、`Not-ready Set is passed as the second argument` 例外が発生することがある問題を修正しました。[#107924](https://github.com/ClickHouse/ClickHouse/pull/107924) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `set` データスキップ索引を持つテーブルに対し、常に真となる条件と索引のないカラムに対するチェックを組み合わせた行ポリシーでフィルタすると、`SELECT` が `NOT_FOUND_COLUMN_IN_BLOCK` で失敗する問題を修正しました。[#107971](https://github.com/ClickHouse/ClickHouse/pull/107971) ([tiandiwonder](https://github.com/tiandiwonder)).
* `getClientHTTPHeader` が正しく非決定的関数として扱われるようになり、その結果がクエリ結果キャッシュによって誤って再利用されなくなりました。[#108029](https://github.com/ClickHouse/ClickHouse/pull/108029) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* クエリ条件キャッシュ (`use_query_condition_cache = 1`) が、スキップ索引由来のマーク除外を、異なるスキップ索引の組み合わせを実行したクエリ (例: `use_skip_indexes = 0`、`ignore_data_skipping_indices`、または異なる `use_skip_indexes_for_disjunctions` モードの使用時) に再利用し、誤った結果が返される問題を修正しました。スキップ索引由来の cache エントリは、実際に実行されたスキップ索引の組み合わせをキーとするようになりました。一方、行レベルのクエリ条件キャッシュのエントリは、これらいずれの場合でも引き続き再利用できます。[#108548](https://github.com/ClickHouse/ClickHouse/pull/108548) ([groeneai](https://github.com/groeneai)).
* ファイルシステムキャッシュ経由で読み取るクエリが、`KILL QUERY` でキャンセルされた後も進行中のダウンロードを待ち続けてハングすることがある問題と、リフレッシュがそのような待機で停止しているリフレッシャブルmaterialized view を削除または `SYSTEM STOP VIEW` しようとするとブロックされる問題を修正しました。[#109116](https://github.com/ClickHouse/ClickHouse/pull/109116) ([murphy-4o](https://github.com/murphy-4o)).
* パーツに最終マークがない場合 (非適応型グラニュラリティ、`index_granularity_bytes = 0`) に、降順 (`DESC`) のキーカラムを持つテーブルで主キー索引がグラニュールを誤って除外し、誤ったクエリ結果が返される問題を修正しました。[#109901](https://github.com/ClickHouse/ClickHouse/pull/109901) ([nihalzp](https://github.com/nihalzp)).
* サブクエリに相関サブクエリが含まれ、かつ索引解析中にセットが構築される `IN (subquery)` で発生する、論理エラー `Expected CommonSubplanReferenceStep to reference CommonSubplanStep`、エラー `Subplan cannot be used to build pipeline`、および論理エラー `Trying to extract chunk from ChunkBuffer before all inputs are finished` を修正しました。[#110491](https://github.com/ClickHouse/ClickHouse/pull/110491) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 並列レプリカが有効な場合に、`QBit` カラムに対する転置距離関数 (`cosineDistanceTransposed` など) をスカラーサブクエリまたは定数の参照ベクトルを指定して呼び出すと発生する `NOT_FOUND_COLUMN_IN_BLOCK` エラーを修正しました。[#110729](https://github.com/ClickHouse/ClickHouse/pull/110729) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* テキスト索引の expression に `arrayFilter(s -> s != '', ...)` のような空文字列との比較が含まれる場合に、その索引が使用されない問題を修正しました。原因は、設定 `optimize_empty_string_comparisons` がクエリ側でのみ比較を `notEmpty` に書き換えていたことです。[#112115](https://github.com/ClickHouse/ClickHouse/pull/112115) ([Ergus](https://github.com/Ergus)).
* カラムが `PREWHERE` と `WHERE` の両方のフィルタ条件で参照されている場合、テキスト索引の仮想カラムに書き換えられていても、そのカラムを削除しないようにしました。[#114460](https://github.com/ClickHouse/ClickHouse/pull/114460) ([ahmadov](https://github.com/ahmadov)).
* lazy posting-list 適用モードでテキスト索引を持つテーブルに対してクエリを実行した際、読み取り中にクエリがキャンセルされると論理エラー `Multi-block postings must be compressed` が発生する問題を修正しました。[#114636](https://github.com/ClickHouse/ClickHouse/pull/114636) ([CurtizJ](https://github.com/CurtizJ)).
* `WHERE` 句で `NOT` の内側に `NULL` 式が含まれる場合 (例: `SELECT count() FROM t WHERE NOT (id >= 20 AND NULL)`) に誤った結果が返される問題を修正しました。索引解析がこのような条件を範囲全体で常に真になると判定していたため、フィルタがスキップされていました。その結果、`count()` がクエリで除外されるはずの行まで返し、この条件を指定した `ALTER TABLE ... DELETE` が本来残すべき行を削除していました。[#115152](https://github.com/ClickHouse/ClickHouse/pull/115152) ([groeneai](https://github.com/groeneai)).
* `query_plan_join_shard_by_pk_ranges` を有効にした `full_sorting_merge` JOIN で、片側の入力が主キーやカラム統計によるプルーニング、またはテーブルが空であることによってパーツが 1 つも残らなくなった場合に発生する `LOGICAL_ERROR` (`Join is supported only for pipelines with one output port`) を修正しました。[#115352](https://github.com/ClickHouse/ClickHouse/pull/115352) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* \_part\_starting\_offset に対するフィルタではクエリ条件キャッシュを無効にしました。[#115358](https://github.com/ClickHouse/ClickHouse/pull/115358) ([azat](https://github.com/azat)).
* 暗黙的な minmax 索引 (`add_minmax_index_for_numeric_columns` など) を持つテーブルで、1 つの `ALTER TABLE` ステートメント内に `RENAME COLUMN` と `MODIFY SETTING` などの別のコマンドを組み合わせた場合に発生する `LOGICAL_ERROR: Index with name auto_minmax_index_<column> already exists` を修正しました。あわせて、通常のカラムの名前を変更した後、続く `DROP COLUMN` が `UNKNOWN_IDENTIFIER` で失敗したり、続く `ADD COLUMN` で暗黙的な索引が作成されなかったりする問題も解消しました。[#116063](https://github.com/ClickHouse/ClickHouse/pull/116063) ([groeneai](https://github.com/groeneai)).
* ワイルドカード (`%`、`_`) を含まない `LIKE`/`NOT LIKE` パターンで、正確な主キー範囲を使用するようにしました。これにより、より広いプレフィックス範囲を読み取ることなく、同等の `=`/`!=` 述語と同じ数のグラニュールだけを読み取るようになりました。[#107077](https://github.com/ClickHouse/ClickHouse/pull/107077) ([groeneai](https://github.com/groeneai)).
* 主キーに対する `IN`/`NOT IN` 条件でキーが定数による `intDiv` でラップされており、かつキーが符号なし整数で、その値が `intDiv` の結果型の符号付き境界をまたぐ場合 (例: `intDiv(uint64_column, -9223372036854775807)`) に、`LOGICAL_ERROR` (`Invalid binary search result in MergeTreeSetIndex`) が発生する問題と、リリースビルドで索引プルーニングが行われない問題を修正しました。[#107586](https://github.com/ClickHouse/ClickHouse/pull/107586) ([groeneai](https://github.com/groeneai)).
* BSI ビット構成が異なる、全要素が 1 のベクトルとの乗算時に `numericIndexedVectorPointwiseMultiply` が空の結果を返す問題を修正しました。[#108027](https://github.com/ClickHouse/ClickHouse/pull/108027) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 多数の異なる短いトークンに対して `positions = 1` でテキスト索引をビルドする際に発生する heap-buffer-overflow を修正しました。[#108659](https://github.com/ClickHouse/ClickHouse/pull/108659) ([groeneai](https://github.com/groeneai)).
* テキスト索引の `preprocessor` および `postprocessor` 式から `ALIAS` カラムを参照できるようにしました。[#110014](https://github.com/ClickHouse/ClickHouse/pull/110014) ([Ergus](https://github.com/Ergus)).
* `LIMIT ... WITH TIES` が使用されている場合は、vector search の最適化をスキップするようにしました。この最適化は ANN 検索の対象を厳密に n 個の候補に絞り込むため、n 番目の行と同順位の行が欠落していました。[#110453](https://github.com/ClickHouse/ClickHouse/pull/110453) ([tamish560](https://github.com/tamish560))。
* 索引が単純なカラムではなく expression に対して定義されている場合 (例: `lower(...)` プリプロセッサを伴う `assumeNotNull(col)`) に、`ILIKE` でテキスト索引が使用されない問題を修正しました。このようなクエリでは、すべてのグラニュールを読み込むのではなく索引が使用されるようになりました。[#110595](https://github.com/ClickHouse/ClickHouse/pull/110595) ([ahmadov](https://github.com/ahmadov))。
* `vector_search_with_rescoring = 1` と遅延マテリアライゼーションを組み合わせた vector search クエリで、複数の距離が同値になると発生することがあった `LOGICAL_ERROR` (`LazyMaterializingTransform: Number of rows in lazy chunk N does not match number of offsets M`) を修正しました。[#111003](https://github.com/ClickHouse/ClickHouse/pull/111003) ([groeneai](https://github.com/groeneai))。
* `i8` 量子化を用いた `vector_similarity` 索引の使用時に、二乗ノルムがオーバーフローして無限大になるベクトルを拒否するようにしました (従来はこのようなベクトルが usearch で未定義動作を引き起こし、エラーを出さずに不正なデータを生成していました) 。[#111085](https://github.com/ClickHouse/ClickHouse/pull/111085) ([groeneai](https://github.com/groeneai))。
* ページキャッシュが有効な `plain_rewritable` ディスクで古いデータが読み込まれる問題を修正しました。[#111105](https://github.com/ClickHouse/ClickHouse/pull/111105) ([Michicosun](https://github.com/Michicosun))。
* `String` (またはより幅の狭い `FixedString`) のキーまたは minmax スキップ索引に対して、より幅の広い `FixedString` 定数との比較 (例: `toFixedString('abc', 257) = string_col`) でフィルタすると、`count()` の結果が誤ったり行が欠落したりする問題を修正しました。プライマリキーおよび minmax による枝刈りが NUL パディングされた定数から範囲を構築していたため、条件に一致するグラニュールが誤ってスキップされていました。[#111106](https://github.com/ClickHouse/ClickHouse/pull/111106) ([groeneai](https://github.com/groeneai))。
* オフセット索引が行 0 から始まっていない Parquet ファイルを正しく読み込めない問題を修正しました。このようなファイルでは、ネイティブ Parquet リーダーが誤った行を返したり、`INCORRECT_DATA` ではなく `LOGICAL_ERROR` を報告したりすることがありました。現在は、オフセット索引を読み込む際に検証するようになっています。[#114530](https://github.com/ClickHouse/ClickHouse/pull/114530) ([groeneai](https://github.com/groeneai))。

<h3 id="security-access-backup-and-restore-fixes">
  セキュリティ、アクセス、バックアップ、復元に関する修正
</h3>

* 宛先テーブルで `fsync_after_insert` が有効になっている場合、`RESTORE` はリストアしたパーツファイルを fsync するようになりました。これにより、リストアされたパーツも挿入されたパーツと同等の電源断耐性を持つようになります。以前は、リストアされたファイルは書き込みとクローズのみが行われ (fsync は一切行われず) 、`RESTORE` が `RESTORED` を返した直後に電源断が発生すると、パーツが破損してテーブルが空になる可能性がありました。[#111378](https://github.com/ClickHouse/ClickHouse/pull/111378) ([groeneai](https://github.com/groeneai)).
* 認証されていない TCP クライアントが interserver ポート経由でテーブルの存在やレプリケーションの状態を探れてしまうセキュリティ上の問題を修正しました。[#99854](https://github.com/ClickHouse/ClickHouse/pull/99854) ([tiandiwonder](https://github.com/tiandiwonder)).
* `DELETE FROM` (論理削除) の実行に `ALTER DELETE` に加えて `ALTER UPDATE` 権限が必要になっていた問題を修正しました。ドキュメントに記載されているとおり、`ALTER DELETE` のみが付与されたユーザーでも `DELETE FROM` を実行できるようになりました。[#107491](https://github.com/ClickHouse/ClickHouse/pull/107491) ([tiandiwonder](https://github.com/tiandiwonder)).
* Atomic データベース上で `CREATE TABLE ... AS SELECT` のクエリが失敗した場合 (たとえば、サブクエリから参照されるテーブルへのアクセス権がユーザーにない場合など) に、空のテーブルが残ってしまう問題を修正しました。以前は、再試行すると元のエラーではなく、テーブルが既に存在するというエラーが報告されていました。現在は、テーブルは一時テーブルを介して作成され、データの投入が完了した後にはじめて参照可能になります。[#108048](https://github.com/ClickHouse/ClickHouse/pull/108048) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* ユーザーに `ALIAS` カラムに対する `SELECT` アクセスのみが付与されているテーブルで `SELECT count()` (またはその他の単純なクエリ) を実行すると、`LOGICAL_ERROR` (`No available columns`) が発生する問題を修正しました。[#108056](https://github.com/ClickHouse/ClickHouse/pull/108056) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 認証されていないリクエストによって、転送元クライアントアドレスを示すヘッダーで指定されたホスト名を ClickHouse に名前解決させることができてしまう問題を修正しました。ClickHouse は今後、これらのヘッダーから数値形式の IP アドレスのみを受け付けます。無効な値は、転送アドレスに基づくクォータの割り当てでは DNS による名前解決を行わずに無視されます。`auth_use_forwarded_address` が有効な場合、無効な転送アドレスは認証時に拒否されます。拒否はデバッグレベルでログに記録されます。[#111060](https://github.com/ClickHouse/ClickHouse/pull/111060) ([otselnik](https://github.com/otselnik)).
* アナライザが無効 (`enable_analyzer = 0`) の場合に、パラメーター化ビューで `SQL SECURITY DEFINER` (および `SQL SECURITY NONE`) が適用されない問題を修正しました。以前は、基になるテーブルに対する権限を持たないユーザーがこのようなビューから SELECT すると、アナライザが有効な場合は同じビューが正常に動作するにもかかわらず、`ACCESS_DENIED` で失敗していました。[#111458](https://github.com/ClickHouse/ClickHouse/pull/111458) ([groeneai](https://github.com/groeneai)).
* `MySQL` インテグレーションにおいて、名前付きコレクションが認証情報をコンテンツ形式で保持している場合に、その TLS 認証情報を空の `ssl_ca_pem`/`ssl_cert_pem`/`ssl_key_pem` 値で上書きすると、上書きが拒否されずに受け入れられ、設定済みの CA またはクライアント証明書が警告なく破棄されてしまう不具合を修正しました。[#113947](https://github.com/ClickHouse/ClickHouse/pull/113947) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 本体に JOIN を含み、`SQL SECURITY DEFINER` または `SQL SECURITY NONE` として宣言されたビューで、`EXPLAIN ANALYZE` が結合の統計情報を失ってしまう問題を修正しました。デバッグビルドおよびサニタイザービルドでは、クエリが論理エラー `JoinStep analyzed without the analyze mode` で異常終了していました。[#115156](https://github.com/ClickHouse/ClickHouse/pull/115156) ([groeneai](https://github.com/groeneai)).
* `RESTORE ... AS <new name>` を実行すると、リフレッシャブルmaterialized view の `REFRESH ... DEPENDS ON` リストが元のデータベースを指したままになる問題を修正しました。これにより、リストアされたビューは、すでに読み取り対象ではないテーブルに反応してリフレッシュされる一方で自身の親のリフレッシュは無視し、元のデータベースが削除されるとリフレッシュが完全に停止していました。[#115689](https://github.com/ClickHouse/ClickHouse/pull/115689) ([groeneai](https://github.com/groeneai)).
* ドロップと再作成が同時に行われている `Replicated` データベースをバックアップする際に、`LOGICAL_ERROR` 例外が発生する問題を修正しました。このようなバックアップは、`CANNOT_GET_REPLICATED_DATABASE_SNAPSHOT` エラーで適切に失敗するようになりました。[#100651](https://github.com/ClickHouse/ClickHouse/pull/100651) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 同一ロールに対する `GRANT role TO role` は、`system.role_grants` に自己参照エントリを暗黙的に作成するのではなく、`BAD_ARGUMENTS` エラーで拒否されるようになりました。[#103315](https://github.com/ClickHouse/ClickHouse/pull/103315) ([zxuhan](https://github.com/zxuhan)).
* `MaterializedPostgreSQL` データベースの `BACKUP` が「Table ... were created or changed its definition during scanning」というメッセージを出したまま無期限にハングしなくなり、テーブルデータが実際にバックアップされるようになりました (処理は基盤となる `ReplacingMergeTree` に委譲されます) 。このバックアップは、単独の `ReplacingMergeTree` として復元できます。[#107433](https://github.com/ClickHouse/ClickHouse/pull/107433) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Dictionary に対する `SHOW DICTIONARIES` 権限のみを持つユーザーでも、`EXISTS <dictionary>` を実行できるようにしました (従来は `SHOW TABLES` 権限が必要でした) 。[#108084](https://github.com/ClickHouse/ClickHouse/pull/108084) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* ファイナライズ前に失敗した `BACKUP ... TO Memory(...)` のクリーンアップ処理を修正しました。これまでは失敗したバックアップが登録されたまま残り、同じ名前を再利用できませんでした。[#109947](https://github.com/ClickHouse/ClickHouse/pull/109947) ([jkartseva](https://github.com/jkartseva)).
* 同じアーカイブからの読み取りがストリームの途中で失敗した後、そのzip アーカイブを再度読み取る際 (例: zip バックアップからの `RESTORE` 中) に、`ReadBuffer is canceled. Can't read from it.` という論理エラー (debug/sanitizer ビルドではサーバーが異常終了) が発生する可能性があった問題を修正しました。[#110197](https://github.com/ClickHouse/ClickHouse/pull/110197) ([groeneai](https://github.com/groeneai)).
* `const` メソッドである `AccessRights::getFilters` が、同時実行クエリ間で共有されるアクセス権ツリーを変更していたことによるヒープ破損を修正しました。この問題により、シャットダウン時にサーバーがクラッシュする可能性がありました。[#112692](https://github.com/ClickHouse/ClickHouse/pull/112692) ([groeneai](https://github.com/groeneai)).

<h3 id="distributed-execution-tables-views-and-dictionaries">
  分散実行、テーブル、ビュー、Dictionary
</h3>

* `ALTER TABLE ... MOVE PART ... TO SHARD '<path>'` に対して誤って `Inconsistent AST formatting` エラーが発生する問題を修正しました。クエリフォーマッタが `SHARD` キーワードを落としていたため、再フォーマットしたクエリを再びパースできず、`LOGICAL_ERROR` が発生していました (リリースビルドではハンドリングされる例外、デバッグビルドおよびサニタイザービルドではアボート) 。[#109060](https://github.com/ClickHouse/ClickHouse/pull/109060) ([groeneai](https://github.com/groeneai))。
* リモートデータベース名を空にして定義された `Distributed` テーブルを、`distributed_product_mode = 'local'` の状態で JOIN に使用すると論理エラー (`!part.empty()`) が発生する問題を修正しました。[#110677](https://github.com/ClickHouse/ClickHouse/pull/110677) ([groeneai](https://github.com/groeneai))。
* DISTINCT の早期停止用 limit ヒントで結果の先頭を制限できない場合に、順序付きの `LIMIT`/`OFFSET` を伴う `DISTINCT` が誤った行を返す問題を修正しました。対象となるのは、負の `LIMIT` (末尾ではなく先頭を返していた) 、小数の `LIMIT`/`OFFSET` (小数は全件読み取り後にしか確定しない) 、および `LIMIT` を伴わない単独の `OFFSET` (オフセット以降の末尾が欠落していた) です。たとえば、複数パーツから成るテーブルに対して `SELECT DISTINCT intDiv(x, 100) FROM t ORDER BY intDiv(x, 100) LIMIT -1` を実行すると、最大の distinct 値ではなく最小の値が返されていました。[#111326](https://github.com/ClickHouse/ClickHouse/pull/111326) ([groeneai](https://github.com/groeneai))。
* DESCRIBE TABLE でサブクエリの後に指定した別名をパーサーが受け付けず、構文エラーになる問題を修正しました。[https://github.com/ClickHouse/ClickHouse/issues/100031](https://github.com/ClickHouse/ClickHouse/issues/100031) を修正します。[#100205](https://github.com/ClickHouse/ClickHouse/pull/100205) ([yariks5s](https://github.com/yariks5s))。
* `DETACH DATABASE` / `ATTACH DATABASE` 後の `lazy_load_tables = 1` が設定された `Atomic` データベースにおいて、`ALTER RENAME COLUMN` の実行中に `INSERT` が並行して行われると、サーバーがアボート (`Logical error: 'Block structure mismatch'`) することがある問題を修正しました。[#104852](https://github.com/ClickHouse/ClickHouse/pull/104852) ([groeneai](https://github.com/groeneai))。
* 設定 `inject_random_order_for_select_without_order_by` に起因するカラム名の破損および `BAD_ARGUMENTS` 例外を修正しました。この設定を有効にしても複数カラムの SELECT が失敗しなくなり、出力カラム名 (例: `CREATE TABLE AS SELECT`、`CREATE VIEW AS SELECT`、`JSONEachRow`) が内部の `__subquery_column_<UUID>` 別名に置き換えられず、そのまま保持されるようになりました。[#105896](https://github.com/ClickHouse/ClickHouse/pull/105896) ([groeneai](https://github.com/groeneai))。
* サーバー再起動後 (または `DETACH/ATTACH DATABASE` 後) に削除済みのテーブルを再度削除しようとすると、削除したばかりの名前を候補として提示する紛らわしい "Maybe you meant X?" ヒントが表示される問題を修正しました。デタッチ時に、非同期ロードタスクが `DatabaseOrdinary::startup_table` および `load_table` からクリアされるようになりました。[#106238](https://github.com/ClickHouse/ClickHouse/pull/106238) ([groeneai](https://github.com/groeneai))。
* `MaterializedPostgreSQL` テーブルエンジンおよびデータベースエンジンを修正し、単一のテーブルまたはデータベースをデフォルト以外の PostgreSQL スキーマ (`materialized_postgresql_schema`) からレプリケーションできるようにしました。同一データベース内の複数のスキーマに同名のテーブルが存在する場合にも対応しています (従来はこれらが publication と replication slot を共有してしまい、相互に干渉していました) 。[#107425](https://github.com/ClickHouse/ClickHouse/pull/107425) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 並列レプリカを使用するクエリが `GLOBAL JOIN` の一時テーブルとして送信されたテーブルの `ALIAS` カラムを選択した場合の `NO_SUCH_COLUMN_IN_TABLE`、分散 `JOIN` の両側で同名の `ALIAS` カラムが宣言されている場合の `MULTIPLE_EXPRESSIONS_FOR_ALIAS`、および `Distributed` テーブルで別の `ALIAS` カラムを参照する `ALIAS` カラムが宣言されている場合 (`JOIN USING` のキーとして使用する場合を含む) の `UNKNOWN_IDENTIFIER` を修正しました。[#107700](https://github.com/ClickHouse/ClickHouse/pull/107700) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy))。
* `refresh_retries` に非常に大きな値 (`Int64` の最大値付近) が設定されている場合に、リフレッシャブルmaterialized view が失敗したリフレッシュを再試行する際、符号付き整数のオーバーフローが発生する問題を修正しました。このオーバーフローにより、未定義動作サニタイザーを有効にしたビルドではサーバーが異常終了する可能性がありました。[#108005](https://github.com/ClickHouse/ClickHouse/pull/108005) ([groeneai](https://github.com/groeneai)).
* 明示的なクエリを使用するローカルの `ClickHouse` ソースを持ち、キーカラムが Dictionary 定義の先頭カラムではない複合キーの Dictionary を読み込む際に、例外 (`CANNOT_PARSE_TEXT`) が発生する問題を修正しました。ソースカラムは、位置ではなく名前で Dictionary の構造と対応付けられるようになりました。[#108053](https://github.com/ClickHouse/ClickHouse/pull/108053) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `WHERE` 句なしで `Hive` テーブルにクエリを実行した場合 (例: `SELECT * FROM hive_table`) に、クラッシュ (ヌルポインタ参照) が発生する問題を修正しました。[#108094](https://github.com/ClickHouse/ClickHouse/pull/108094) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 分散クエリがまだマテリアライズされていない `MATERIALIZED` CTE を外部テーブルとして参照し、かつリモートソースが遅延生成 (delayed source) された場合に、サーバーがクラッシュ (セグメンテーション違反) する可能性があった問題を修正しました。このクラッシュは、`RemoteQueryExecutor::sendExternalTables()` 内でヌルの `Logger` を参照していたことが原因でした。[#108547](https://github.com/ClickHouse/ClickHouse/pull/108547) ([groeneai](https://github.com/groeneai)).
* `STREAM` 読み取り (`SELECT DISTINCT ... FROM table STREAM`) に対して `DISTINCT` を実行した際に、論理エラー (`Equal values are not contiguous within the range assumed to be sorted`) が発生する問題を修正しました。`STREAM` 読み取りはソートキー順ではなくコミット順で行を出力するため、読み取り順序の最適化を適用しないようにしました。[#108568](https://github.com/ClickHouse/ClickHouse/pull/108568) ([groeneai](https://github.com/groeneai)).
* `optimize_skip_unused_shards = 1` の設定下で、`Distributed` テーブルのシャーディングキーがアナライザーによって定数畳み込みされる expression (例: `if(1, toInt32(id), toInt32(id) + 1)`) である場合に、例外 (`Cannot find sharding key column`。debug/サニタイザービルドではサーバーが異常終了) が発生する問題を修正しました。[#108737](https://github.com/ClickHouse/ClickHouse/pull/108737) ([groeneai](https://github.com/groeneai)).
* `Alias` テーブルを介した `INSERT ... SELECT` が例外なしでキャンセルされた場合 (例: `timeout_overflow_mode = 'break'`) に、サーバーが異常終了する問題 (debug およびサニタイザービルドでの `LOGICAL_ERROR` / アサーション) を修正しました。[#108783](https://github.com/ClickHouse/ClickHouse/pull/108783) ([groeneai](https://github.com/groeneai)).
* `TimeSeries` テーブルへの `INSERT ... SELECT` が例外なしでキャンセルされた場合 (例: `timeout_overflow_mode = 'break'`) に、サーバーが異常終了する問題 (debug およびサニタイザービルドでの `LOGICAL_ERROR` / アサーション) を修正しました。[#108796](https://github.com/ClickHouse/ClickHouse/pull/108796) ([tiandiwonder](https://github.com/tiandiwonder)).
* 以前にキャンセルされたクエリによって同期が崩れた接続がプールから再利用された際に、分散クエリが `UNEXPECTED_PACKET_FROM_SERVER` ("expected TablesStatusResponse, got ProfileInfo") でまれに失敗する問題を修正しました。[#108854](https://github.com/ClickHouse/ClickHouse/pull/108854) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `Distributed` テーブルに対するクエリで、`MATERIALIZED` CTE が結合ツリー内の複数の位置 (例: 結合された 2 つのサブクエリ、または結合されたサブクエリと `WHERE` 内のスカラーサブクエリ) から参照された場合に、`LOGICAL_ERROR` (`CTE '...' does not have query tree, but was not planned yet`) が発生する問題を修正しました。このようなクエリは、例外を発生させずに実行されるようになりました (以前は debug/サニタイザービルドでサーバーが異常終了していました) 。[#108924](https://github.com/ClickHouse/ClickHouse/pull/108924) ([groeneai](https://github.com/groeneai)).
* materialized view の処理からスケジュールされた非同期処理が、クエリの終了後もクエリレベルのアカウンティングを使い続ける可能性があったメモリ安全性の問題を修正しました。[#108988](https://github.com/ClickHouse/ClickHouse/pull/108988) ([filimonov](https://github.com/filimonov)).
* アナライザーを使用しない場合に、一方のブランチで並列レプリカとともに `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](https://github.com/ClickHouse/ClickHouse/pull/109003) ([groeneai](https://github.com/groeneai)).
* `Replicated` データベース内で `CREATE TABLE ... AS SELECT FROM s3Cluster(...)` (および `fileCluster`/`urlCluster` などの他のクラスターテーブル関数) が `NOT_FOUND_COLUMN_IN_BLOCK` で失敗する問題を修正しました。[#109266](https://github.com/ClickHouse/ClickHouse/pull/109266) ([groeneai](https://github.com/groeneai)).
* 2 つ以上のシャードを持つクラスター上で、`Distributed` テーブルを読み取る `CREATE TABLE ... ON CLUSTER ... AS SELECT` を実行した際に発生するエラー (`NOT_FOUND_COLUMN_IN_BLOCK`、旧バージョンでは `std::bad_function_call`) を修正しました。[#109407](https://github.com/ClickHouse/ClickHouse/pull/109407) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* テーブル式を `IN` 演算子の左引数として使用した場合に発生する、わかりにくい内部エラー (`Method getResultType is not supported for TABLE query tree node`) を修正しました。このようなクエリでは、わかりやすいエラーメッセージが表示されるようになりました。[#109412](https://github.com/ClickHouse/ClickHouse/pull/109412) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `optimize_const_name_size` が小さい値に設定された状態で `Distributed` テーブルに対して `SELECT ... ORDER BY ... WITH FILL` を実行した際に発生する `Bad cast from type DB::FunctionNode to DB::ConstantNode` という論理エラー (debug/sanitizer ビルドではサーバーが異常終了) を修正しました。[#109938](https://github.com/ClickHouse/ClickHouse/pull/109938) ([groeneai](https://github.com/groeneai)).
* `query_plan_merge_expression_into_join` が有効な場合に、複数テーブルからなるビューに対するカンマ結合によって join order optimizer で発生する可能性があった `LOGICAL_ERROR` (`Left and right columns have same names`) を修正しました。[#110227](https://github.com/ClickHouse/ClickHouse/pull/110227) ([groeneai](https://github.com/groeneai)).
* `LIMIT` を含む正当な分散クエリでまれに `Logical error: 'No more packets are available.'` が発生し、debug および sanitizer ビルドでサーバーが異常終了する問題を修正しました。[#110334](https://github.com/ClickHouse/ClickHouse/pull/110334) ([groeneai](https://github.com/groeneai)).
* SELECT クエリが修飾なしのテーブル識別子の直後で終わる場合 (例: `... FROM t COMMENT 'x'`)、COMMENT が暗黙のエイリアスとして誤って解釈され、コメントがビュー/テーブルに適用されずに誤解を招く構文エラーが発生するパーサーのバグを修正しました。[#110372](https://github.com/ClickHouse/ClickHouse/pull/110372) ([adityaksolves](https://github.com/adityaksolves)).
* 選択性の高いフィルターを含むクエリを並列レプリカで実行した場合に、`FixedString` カラムに対する `length()` (および QBit の次元) が固定長 `N` ではなく `0` を返すという、誤った結果になる問題を修正しました。[#110427](https://github.com/ClickHouse/ClickHouse/pull/110427) ([groeneai](https://github.com/groeneai)).
* 並列レプリカが `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](https://github.com/ClickHouse/ClickHouse/pull/110690) ([groeneai](https://github.com/groeneai)).
* ストリーミング (`FROM ... STREAM`) 読み取りが単純なトップレベルのテーブル式ではない場合、つまりサブクエリ内にネストされている場合 (例: `WHERE ... IN (...)` や CTE の内部) や、通常のビューまたはパラメーター化ビューの背後に隠れている場合に、そのクエリに対して `EXPLAIN ANALYZE` を実行すると `Logical error: 'clock'` が発生する問題を修正しました (debug/sanitizer ビルドではサーバーがクラッシュし、リリースビルドでは無限にハングします) 。`EXPLAIN ANALYZE` は、トップレベルのストリーミング読み取りと同様に、このようなクエリも `NOT_IMPLEMENTED` で拒否するようになりました。[#110935](https://github.com/ClickHouse/ClickHouse/pull/110935) ([groeneai](https://github.com/groeneai))。
* データベースと同じ名前のテーブルについて、アナライザで `db.table.column` のような完全修飾カラム名が正しく解決されない問題を修正しました。[#110976](https://github.com/ClickHouse/ClickHouse/pull/110976) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `parallel_replicas_min_number_of_rows_per_replica` が設定され、左テーブルのカラムが射影されている場合に、`RIGHT JOIN` で `NOT_FOUND_COLUMN_IN_BLOCK` / `THERE_IS_NO_COLUMN` エラーが発生する問題 (一部のリリースではエラーにならずに誤った結果が返される問題) を修正しました。[#111332](https://github.com/ClickHouse/ClickHouse/pull/111332) ([groeneai](https://github.com/groeneai))。
* 実行可能 UDF、`executable` テーブルエンジン、および実行可能ディクショナリにおける競合状態を修正しました。既にクローズされたファイルディスクリプタに対する `fcntl` が、並行実行中の別クエリの無関係なディスクリプタを破損させ (`O_NONBLOCK` が外れる) 、クエリが無期限にハングする可能性がありました。[#111779](https://github.com/ClickHouse/ClickHouse/pull/111779) ([Algunenano](https://github.com/Algunenano))。
* 2 つ以上の分片を持つ `Distributed` テーブル、`clusterAllReplicas`、またはカスタムキーによる並列レプリカに対して `ORDER BY ... WITH FILL ... INTERPOLATE` を実行した場合 (結果が空の場合を含む) に発生する `LOGICAL_ERROR` ("Invalid number of rows in Chunk") と、hardened ビルドで発生する関連の範囲外アクセスによるアボートを修正しました。`WITH FILL` は最終結果を生成するノードでのみ適用されるようになり、分片/レプリカ間で補完行が重複して生成される問題も解消されました。[#111919](https://github.com/ClickHouse/ClickHouse/pull/111919) ([yakov-olkhovskiy](https://github.com/yakov-olkhovskiy))。
* `system.replicas` に対するクエリがステータスリクエストの処理前に kill されていた場合に、`DROP TABLE ... SYNC` が永久にハングする問題を修正しました。[#112164](https://github.com/ClickHouse/ClickHouse/pull/112164) ([evillique](https://github.com/evillique))。
* 2 つのサブ結合がいずれも出力カラムを生成しない複数テーブルの結合で、`LOGICAL_ERROR` 例外 (`Block structure mismatch in joined block stream`) が発生する問題を修正しました。例えば、`query_plan_optimize_join_order_limit` を `0` または `1` に設定した状態で `SELECT count() FROM t1, t2, t3, t4 WHERE (t1.b = t2.b) AND (t3.a = t4.a)` を実行した場合が該当します。[#112205](https://github.com/ClickHouse/ClickHouse/pull/112205) ([groeneai](https://github.com/groeneai))。
* `FINAL`、`PREWHERE` フィルター、小さな `LIMIT`、`make_distributed_plan = 1` を含むクエリで、SELECT するカラムがテーブルのカラム順序と異なる順序で指定されている場合に、論理エラー `Cannot add step Expression to QueryPlan because it has incompatible header with root step JoinLazyColumnsStep` が発生する問題を修正しました。遅延マテリアライゼーションがプランノードを置き換える際にそのノードの出力ヘッダーを保持していなかったため、クエリプランに不整合が生じていました。[#112303](https://github.com/ClickHouse/ClickHouse/pull/112303) ([groeneai](https://github.com/groeneai))。
* 旧アナライザの使用時に、`toDecimal32` のスケールや `toDateTime` のタイムゾーンなど定数でなければならない引数がスカラーサブクエリから渡されると、誤った結果や論理エラーが発生する問題を修正しました。このような引数は値がゼロまたは空であるものとして解析されていたため、宣言された結果の型と実際に計算された値が食い違い、`CREATE VIEW` や `CREATE MATERIALIZED VIEW` で誤ったカラム型が永続化されていました。[#112492](https://github.com/ClickHouse/ClickHouse/pull/112492) ([groeneai](https://github.com/groeneai))。
* 通常の `VIEW` の本体が `CREATE VIEW v AS SELECT x FROM {db:Identifier}.t` のようにクエリパラメータを介してテーブルまたはディクショナリを参照している場合に、論理エラーが発生し、誤った依存関係が記録される問題を修正しました。このようなビューは、現在のデータベース内にある同名テーブルへの参照依存関係を記録しなくなったため、無関係なテーブルを再び削除できるようになりました。[#112704](https://github.com/ClickHouse/ClickHouse/pull/112704) ([groeneai](https://github.com/groeneai))。
* `ON` セクションに両方のテーブルのカラムを参照する条件 (例: `ON (t.key = j.key) AND (t.a < j.a)`) を含む JOIN の右側で `Join` テーブルエンジンを使用した場合に、論理エラーが発生する問題を修正しました。このようなクエリは、`required columns: ... but not found any in left table` や `std::bad_variant_access` を発生させるのではなく、明確な例外を返して拒否されるようになりました。[#112815](https://github.com/ClickHouse/ClickHouse/pull/112815) ([groeneai](https://github.com/groeneai))。
* 非常に大きな遅延を指定してバックグラウンドタスクがスケジュールされた場合 (例: 巨大な `REFRESH AFTER` 期間を持つリフレッシャブルmaterialized view) に発生する未定義動作と、エラーとして検知されないスケジューリングの不具合を修正しました。遅延はオーバーフローせず、表現可能な最大値に制限されるようになりました。[#113041](https://github.com/ClickHouse/ClickHouse/pull/113041) ([groeneai](https://github.com/groeneai))。
* `Distributed` テーブルへの非同期 `INSERT` において、名前がファイルシステムの 255 バイト制限を超えるキューディレクトリが必要になった場合 (`use_compact_format_in_distributed_parts_names = 0` で発生し得る) に報告されるエラーを修正しました。従来は、`internal_replication` が設定されたシャードでは `LOGICAL_ERROR`、それ以外では発生元が不明な `Code: 1001. std::exception` となっていましたが、いずれの場合もテーブル、クラスター、制限値を示す `ARGUMENT_OUT_OF_BOUND` を報告するようになりました。[#113083](https://github.com/ClickHouse/ClickHouse/pull/113083) ([groeneai](https://github.com/groeneai))。
* `UNDROP TABLE` が、実行中のクエリによる削除済みテーブルの解放を待機している間でも、`KILL QUERY` で中断できるようになりました。[#113263](https://github.com/ClickHouse/ClickHouse/pull/113263) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* マテリアライズド CTE を使用するクエリが失敗した後、`DROP TABLE` が永続的にハングし、メモリリークが発生する問題を修正しました。該当テーブルは、サーバーを再起動するまで削除キューに残り続けていました。[#113397](https://github.com/ClickHouse/ClickHouse/pull/113397) ([tiandiwonder](https://github.com/tiandiwonder))。
* `make_distributed_plan` の使用時に、サブクエリが自身の `SETTINGS` 句で `distributed_plan_execute_locally` を設定すると、セグメンテーション違反および `LOGICAL_ERROR` (`No host found for exchange stream final_result__0_0`) が発生する問題を修正しました。分散プランとそれを実行するコードがそれぞれ異なるコンテキストから設定を読み取っていたため値が食い違うことがあり、イニシエーターが自己矛盾したパイプラインを構築していました。[#113422](https://github.com/ClickHouse/ClickHouse/pull/113422) ([groeneai](https://github.com/groeneai))。
* `database_atomic_wait_for_drop_and_detach_synchronously` が有効な場合に、データ投入用の `SELECT` が失敗した `CREATE TABLE ... AS SELECT` を強制終了できなくなる問題を修正しました。一時テーブルをクリーンアップするための内部的な `DROP` がバックグラウンドの削除キューを待機し、`KILL QUERY` と `max_execution_time` の両方を無視していました。[#113504](https://github.com/ClickHouse/ClickHouse/pull/113504) ([groeneai](https://github.com/groeneai))。
* `join_use_nulls` が有効な場合に、`ON (t.key = d.key) AND (t.a * 10 < d.a)` のように `ON` 句に両方のテーブルにまたがる非等価条件を含む、ディクショナリへの `JOIN` で誤った結果が返され、アサーションを有効にしたビルドではアサーション失敗により異常終了する問題を修正しました。条件が、誤った型で読み取られたカラムに対して評価されていたため、行が無作為にマッチする可能性がありました。[#113534](https://github.com/ClickHouse/ClickHouse/pull/113534) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* パラメーター化ビューを非修飾名で参照するクエリが分片に送信されると、ビューのデータベース情報が失われ、分片側で自身のデフォルトデータベースに対して名前解決が行われてしまう問題を修正しました。そのデータベースの内容によっては、クエリが `UNKNOWN_FUNCTION` で失敗するか、別のビューの行を何の警告もなく返していました。`Distributed` テーブルを介した `IN`、`JOIN`、`remote()` が影響を受けます。[#113550](https://github.com/ClickHouse/ClickHouse/pull/113550) ([groeneai](https://github.com/groeneai))。
* キーが複合キー (複数カラム) であるか、`UUID`、`Int256`、`FixedString(4)` などの 16/32 バイトの単一値である `Join` エンジンテーブルを読み取る際に発生する `Unsupported JOIN keys of type keys256 in StorageJoin` エラーを修正しました。このようなテーブルは作成、書き込み、結合はできても、`SELECT` で読み出すことはできませんでした。[#113578](https://github.com/ClickHouse/ClickHouse/pull/113578) ([groeneai](https://github.com/groeneai))。
* リモート分片を対象とする構造定義なしの `Distributed` テーブルを、古いバージョンのサーバーで書き込まれたメタデータからアタッチまたはロードした際に発生する論理エラー `Sending a distributed query with unknown (zero) client version` を修正しました。[#113675](https://github.com/ClickHouse/ClickHouse/pull/113675) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 名前付きテーブルに `STREAM` 修飾子を使用した `SELECT` を read-tasks モードの並列レプリカと組み合わせると `LOGICAL_ERROR` が発生する問題を修正しました。`PREWHERE` 内の `IN` の集合としてマテリアライズド CTE を使用すると、サーバーが `Reading from materialized CTE ... DelayedPortsProcessor gate is missing in the query plan` エラーを送出していました (debug ビルドおよび sanitizer ビルドではサーバーが異常終了) 。今後は、並列レプリカが要求された場合、`STREAM` が指定されたテーブルは拒否されます。`enable_parallel_replicas = 2` ではクエリが `SUPPORT_IS_DISABLED` で失敗し、`1` では並列レプリカを使用せずに実行されます。これは `FINAL` の既存の挙動と同じです。[#113754](https://github.com/ClickHouse/ClickHouse/pull/113754) ([groeneai](https://github.com/groeneai))。
* `remote`、`mysql` などのテーブル関数でアドレス引数の解析に二次の計算量がかかっていた問題を修正しました。非常に長いアドレス (例: メガバイト規模のゼロ埋め `FixedString`) を指定すると、解析中にクエリがハングし、キャンセルもできない状態になっていました。[#113918](https://github.com/ClickHouse/ClickHouse/pull/113918) ([alexey-milovidov](https://github.com/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](https://github.com/ClickHouse/ClickHouse/pull/113957) ([groeneai](https://github.com/groeneai))。
* `materialized_views_ignore_errors` が有効な状態で、依存関係の収集中に失敗した materialized view について `system.query_views_log` の行が記録されない問題を修正しました。debug ビルドおよび sanitizer ビルドでは、ビューがログに記録されずに `std::out_of_range` でサーバーが異常終了していました。[#114064](https://github.com/ClickHouse/ClickHouse/pull/114064) ([groeneai](https://github.com/groeneai))。
* 右テーブルの非キーカラムに対するフィルタが ANY INNER JOIN の下にプッシュダウンされた場合に、結果が一貫しない問題を修正しました。[#114313](https://github.com/ClickHouse/ClickHouse/pull/114313) ([kirillshokhin](https://github.com/kirillshokhin))。
* `ignore_drop_queries_probability` が設定されている場合に、`CREATE OR REPLACE` が内部の `_tmp_replace_*` テーブルを残してしまう問題、および `CREATE OR REPLACE VIEW` が `NOT_IMPLEMENTED` で失敗する問題を修正しました。内部で発行される DROP は 1 つのユーザーステートメントを構成するステップであるため、DROP のフォールトインジェクションは適用されなくなりました。[#114420](https://github.com/ClickHouse/ClickHouse/pull/114420) ([groeneai](https://github.com/groeneai))。
* `metaData.partitionColumns` に、`metaData.schemaString` で宣言されていないカラムが指定されている Delta Lake テーブルを読み取る際に `LOGICAL_ERROR` が発生する問題を修正しました。このようなメタデータは、クエリに述語が含まれる場合に限らず、テーブルまたはそのスキーマをスナップショットから読み取る際には常に拒否されるようになりました (delta-kernel リーダーでは `BAD_ARGUMENTS`、従来のリーダーでは `INCORRECT_DATA`) 。[#114538](https://github.com/ClickHouse/ClickHouse/pull/114538) ([groeneai](https://github.com/groeneai))。
* 遅延 `FINAL` 最適化 (`query_plan_optimize_lazy_final`) を使用するクエリが、サーバー起動後に最初に実行される集約であった場合に、ハッシュテーブル統計 (およびそれに依存する集約用ハッシュテーブルの事前割り当て) がサーバー全体で警告なく恒久的に無効化される問題を修正しました。[#114597](https://github.com/ClickHouse/ClickHouse/pull/114597) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `ignore_drop_queries_probability` が有効な場合に、リフレッシャブルmaterialized view がローテーションで不要になった旧ターゲットテーブルをリークする問題を修正しました。リフレッシュが旧ターゲットのクリーンアップのために発行する `DROP` は、ユーザーが要求した `DROP` ではなくリフレッシュ処理の一部であるため、フォールトインジェクションの対象外となりました。[#114622](https://github.com/ClickHouse/ClickHouse/pull/114622) ([groeneai](https://github.com/groeneai))。
* `ON` 句に `OR` で結合された複数の条件を含む `ANY RIGHT JOIN` および `SEMI RIGHT JOIN` で、右テーブルの一部の行が重複して返され、別の行のマッチが失われる問題を修正しました。プランナーがテーブルを入れ替えて `ANY RIGHT JOIN` として実行する場合があるため、`ANY LEFT JOIN` として記述したクエリも影響を受けていました。[#114676](https://github.com/ClickHouse/ClickHouse/pull/114676) ([vdimir](https://github.com/vdimir))。
* テキストインデックス付きカラムが `PREWHERE` と `WHERE` の両方でテキスト検索述語に使用されているテーブルに対し、その上位に `JOIN` を含むクエリを実行すると、`LOGICAL_ERROR` (`Cannot find input column ... on its position in inputs of expression actions DAG`) が発生する問題を修正しました。[#114771](https://github.com/ClickHouse/ClickHouse/pull/114771) ([groeneai](https://github.com/groeneai))。
* `ALIAS` または `EPHEMERAL` カラムに `STATISTICS(...)` を宣言したテーブルへの `INSERT` がすべて `NOT_FOUND_COLUMN_IN_BLOCK` で失敗し、そのようなテーブルが事実上読み取り専用になっていた問題を修正しました。[#115231](https://github.com/ClickHouse/ClickHouse/pull/115231) ([groeneai](https://github.com/groeneai))。
* 分散クエリにおける `dictGet` およびその派生関数の問題を修正しました。修飾されていない Dictionary 名は、各シャードのカレントデータベースではなく、イニシエーターのカレントデータベースに基づいて解決されるようになりました。従来は各シャードで解決されていたため、Dictionary が見つからないか、同名の別の Dictionary が参照されていました。[#115541](https://github.com/ClickHouse/ClickHouse/pull/115541) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* データベースまたはテーブルを新しい名前で復元すると、保存済みビューの定義本体からテーブル別名が失われ、復元したビューの読み取りが `UNKNOWN_IDENTIFIER` で失敗するバグを修正しました。[#115645](https://github.com/ClickHouse/ClickHouse/pull/115645) ([groeneai](https://github.com/groeneai))。
* `Distributed` テーブルに対する `IN` サブクエリ内から `MATERIALIZED` CTE を読み取る際に、`LOGICAL_ERROR` "Reading from materialized CTE 'X' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan" が発生する問題を修正しました。[#115740](https://github.com/ClickHouse/ClickHouse/pull/115740) ([groeneai](https://github.com/groeneai))。
* DETACH DICTIONARY ... PERMANENTLY が依存関係チェック (HAVE\_DEPENDENT\_OBJECTS) によって拒否された後に、dictGet で BAD\_ARGUMENTS "Dictionary not found" が発生する問題を修正しました。デタッチが拒否された場合、Dictionary はこれまでどおり問題なく使用できます。[#105259](https://github.com/ClickHouse/ClickHouse/pull/105259) ([groeneai](https://github.com/groeneai))。
* バックグラウンドのテーブル削除キューで発生する `Logical error: 'removed'` (デバッグビルドではサーバーが異常終了) を修正しました。この問題は、同じ明示的な UUID が複数の `CREATE OR REPLACE TABLE` クエリで再利用され、その UUID を共有する削除済みテーブルが複数キューに登録された場合に発生する可能性がありました。[#107031](https://github.com/ClickHouse/ClickHouse/pull/107031) ([groeneai](https://github.com/groeneai)).
* サーバー停止中に単一のレプリケートテーブルの構造が変更された場合に、`MaterializedPostgreSQL` がデータベース全体のレプリケーションを停止してしまう問題 (`LOGICAL_ERROR: Columns number mismatch` が発生) を修正しました。今後は影響を受けたテーブルのみがスキップされ、`DETACH`/`ATTACH` で復旧できます。[#107427](https://github.com/ClickHouse/ClickHouse/pull/107427) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* クラスターに非アクティブなレプリカ (例: オートスケーリング後に残った古いエントリ) が含まれている場合に、並列レプリカで処理の分散が大きく偏る問題を修正しました。このようなレプリカは読み取りコーディネーターのカウント対象外となったため、処理が単一のレプリカに集中することなく、オンラインのレプリカ間で均等に分散されるようになりました。[#107805](https://github.com/ClickHouse/ClickHouse/pull/107805) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* XML で定義された多数の MySQL Dictionary が `share_connection` によって単一の接続プールを共有している場合に、`SYSTEM RELOAD DICTIONARIES` (および `RELOAD DICTIONARY`) がフリーズする問題を修正しました。このような pool も、名前付きコレクションで定義された Dictionary と同様に、設定の `connection_pool_size` と `connection_wait_timeout` (デフォルト 5 秒) に従うようになりました。[#108083](https://github.com/ClickHouse/ClickHouse/pull/108083) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* リーダーが実行するレプリケートされた分散 DDL のリトライが上限に達した場合でも、後続の `ON CLUSTER` DDL クエリが恒久的にブロックされないようにしました。[#108505](https://github.com/ClickHouse/ClickHouse/pull/108505) ([ahaanlimaye](https://github.com/ahaanlimaye)).
* 同じ `Distributed` テーブルに対して `SYSTEM FLUSH DISTRIBUTED` と `DROP TABLE` が同時実行された場合に発生する可能性のあったクラッシュ (use-after-free) を修正しました。[#108684](https://github.com/ClickHouse/ClickHouse/pull/108684) ([groeneai](https://github.com/groeneai)).
* `automatic_parallel_replicas_mode` が有効で、かつ `parallel_replicas_min_number_of_rows_per_replica` が 0 より大きい場合に、自動並列レプリカプランナーで発生する可能性のあった `LOGICAL_ERROR` (`local_replica_plan_reading_step->getAnalyzedResult() == nullptr`) を修正しました。[#109011](https://github.com/ClickHouse/ClickHouse/pull/109011) ([groeneai](https://github.com/groeneai)).
* 非トランザクションの `TRUNCATE` が、同じテーブルに挿入を行った未コミットのトランザクションと同時実行された場合にスローされる可能性のあった `LOGICAL_ERROR` (`creation_csn is not set while removal_csn is set to 1`) を修正しました。今後、このような `TRUNCATE` は未コミットのトランザクションによって作成されたパーツを削除しません。[#109598](https://github.com/ClickHouse/ClickHouse/pull/109598) ([tuanpach](https://github.com/tuanpach)).
* 外部データベースエンジン (例: `PostgreSQL`) は、`UUID` カラムに対する範囲比較 (`>=`、`>`、`<=`、`<`) をプッシュダウンしなくなりました。ClickHouse と外部データベースでは UUID の順序付けが異なるため、これらをプッシュダウンすると、結果から行が警告なく欠落していました。今後、このような述語は ClickHouse 側で評価されます。[#109833](https://github.com/ClickHouse/ClickHouse/pull/109833) ([vismaytiwari](https://github.com/vismaytiwari)).
* `MaterializedPostgreSQL` データベースエンジンで、同期待ちのキューに入っている間にテーブルがデタッチされた (または構造が変更された) 場合に発生する可能性のあったサーバークラッシュを修正しました。[#110596](https://github.com/ClickHouse/ClickHouse/pull/110596) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `EPHEMERAL` カラムの型がサーバーの `query_masking_rules` によって書き換えられてしまう問題を修正しました。型の内部にマッチするルールがあると、`CREATE TABLE` で誤った型が保存されるか、処理が失敗していました。[#112048](https://github.com/ClickHouse/ClickHouse/pull/112048) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* テーブル名の長さチェックにおける符号なし整数のアンダーフローを修正しました。この問題により、削除できないテーブルが作成できてしまうことがありました。エスケープ後のデータベース名が 214 バイトに達すると、`metadata_dropped` のファイル名に対して計算される上限値がラップアラウンドするため、`CREATE TABLE` は受け付けられる一方で、その後の `DROP TABLE` や `DROP DATABASE` は `File name too long` で失敗していました。このような名前は、境界のすぐ下の長さで既に返されていたのと同じエラー `ARGUMENT_OUT_OF_BOUND` で拒否されるようになりました。[#112527](https://github.com/ClickHouse/ClickHouse/pull/112527) ([groeneai](https://github.com/groeneai))。
* `RENAME TABLE` が、テーブル名の最大長を宛先データベースではなくソースデータベースを基準にチェックしていた問題を修正しました。長い名前のデータベースへテーブルをリネームすると、`DROP TABLE` で削除できないテーブルができてしまう可能性があり、逆にそのようなデータベースから別のデータベースへのリネームは誤って拒否されていました。[#113019](https://github.com/ClickHouse/ClickHouse/pull/113019) ([groeneai](https://github.com/groeneai))。
* ターゲットが materialized view をトリガーする `Alias` テーブルへの挿入処理において、`query_log` の `views` カラムが常に空になっていた問題を修正しました。[#113076](https://github.com/ClickHouse/ClickHouse/pull/113076) ([eclbg](https://github.com/eclbg))。
* `tuple()` や `(x, y)` のような無効な `parallel_replicas_custom_key` の式は、カスタムキーの型リストの範囲外を読み取ることなく、`ILLEGAL_TYPE_OF_COLUMN_FOR_FILTER` で拒否されるようになりました。[#113359](https://github.com/ClickHouse/ClickHouse/pull/113359) ([nickitat](https://github.com/nickitat))。
* `RENAME DATABASE` が、データベース内のテーブルを削除できなくなるほど長いターゲット名を受け付けていた問題を修正しました。テーブル名の長さチェックは `check_table_dependencies` の値にかかわらず実行されるようになり、デタッチされたテーブルも対象に含まれるようになりました。デタッチされたテーブルはこれまでチェックの対象外だったため、デフォルト設定でも影響を受けていました。[#113557](https://github.com/ClickHouse/ClickHouse/pull/113557) ([groeneai](https://github.com/groeneai))。
* `Distributed` エンジンのテーブルへのバックグラウンド挿入を使用している場合、リモートシャードへのデータ送信時のエラーの繰り返しによって生じた遅延が、エラー解消後に短縮されるようになりました。これまでは、遅延が増加する一方でリセットされることはありませんでした。[#87378](https://github.com/ClickHouse/ClickHouse/pull/87378) ([Blackmorse](https://github.com/Blackmorse))。
* 未知のクラスター、または `<secret>` が設定されていないクラスターを指定して `USER_INTERSERVER_MARKER` を使用するネイティブプロトコルのハンドシェイクを拒否するようにしました。これまでは、このようなハンドシェイクによって、認証されていないクライアントがサーバー間通信モードに入り、`fake_interserver_context` に基づく認証前のプロトコルパケット(例: `TablesStatusRequest`)を実行できてしまうため、クラスターシークレットを知っていることを証明しないままローカルテーブルに関する情報を取得できていました。[#99675](https://github.com/ClickHouse/ClickHouse/pull/99675) ([MillaFleurs](https://github.com/MillaFleurs))。

<h3 id="sql-analyzer-and-join-fixes">
  SQL、アナライザ、JOIN 関連の修正
</h3>

* 名前付き `WINDOW` 句の定義内におけるクエリパラメータの置換を修正しました。以前は、この箇所のパラメータが警告なしに置換されないまま残されており、未設定の `Identifier` パラメータによって `EXPLAIN SYNTAX` の実行中に例外 `Logical error: '!part.empty()'` が発生する可能性がありました。[#110506](https://github.com/ClickHouse/ClickHouse/pull/110506) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* リフレッシャブルmaterialized view が同時に削除または置換された際に、まれにサーバーがクラッシュする問題を修正しました。スケジューリング処理のコードが一時的にミューテックスを解放している間に、別のスレッドがタスクの `view` を `nullptr` に設定すると、`RefreshTask::doScheduling` 内でヌルポインタの参照外しが発生していました。[#105588](https://github.com/ClickHouse/ClickHouse/pull/105588) ([groeneai](https://github.com/groeneai)).
* `EXCEPT` または `INTERSECT` を用いて定義され、そのオペランドが `UNION` チェーンであるビューが、`DETACH`/`ATTACH` またはサーバー再起動後に誤った結果を返す問題を修正しました。フォーマッタが `INTERSECT`/`EXCEPT` の子である `UNION` を括弧で囲んでいなかったため、保存された SQL が逆の優先順位で再パースされていました。[#105935](https://github.com/ClickHouse/ClickHouse/pull/105935) ([groeneai](https://github.com/groeneai)).
* 同じキーに対して `WITH CUBE`、`WITH ROLLUP`、または `GROUPING SETS` を伴う `GROUP BY` の結果に `SELECT DISTINCT` を適用した際に、誤った結果 (重複行) が返される問題を修正しました。これらのグループ化修飾子はキーカラムをデフォルト値にした追加の行を出力し、それが実際のグループの値と衝突する可能性があるため、`query_plan_remove_redundant_distinct` 最適化はこのようなケースでは `DISTINCT` を削除しなくなりました。[#107072](https://github.com/ClickHouse/ClickHouse/pull/107072) ([groeneai](https://github.com/groeneai)).
* `WHERE` フィルタが定数項を含む論理積である場合 (例: `p AND 1`、または `QUALIFY NULL` が `WHERE` にマージされる `WHERE p QUALIFY NULL`) に、OUTER JOIN が誤った結果を返す問題を修正しました。定数の論理積項が結合の非保持側にプッシュダウンされ、結合後のフィルタから削除されることがあったため、その側のカラムがデフォルト値となった非一致行が結合によって生成され、それらの行が誤ってフィルタを通過していました。[#107084](https://github.com/ClickHouse/ClickHouse/pull/107084) ([groeneai](https://github.com/groeneai)).
* `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](https://github.com/ClickHouse/ClickHouse/pull/107112) ([groeneai](https://github.com/groeneai)).
* 旧アナライザ (`enable_analyzer = 0`) において、`JOIN` が null 安全な比較演算子 (`<=>` / `IS NOT DISTINCT FROM`) を使用し、かつキーの 1 つがスカラーサブクエリである場合 (例: `... JOIN t2 ON (SELECT x FROM t1) <=> t2.k`) に発生する `LOGICAL_ERROR` (debug/sanitizer ビルドではサーバーが異常終了) を修正しました。このようなクエリは、論理エラーではなく通常の `NOT_FOUND_COLUMN_IN_BLOCK` エラーを返すようになりました。[#108123](https://github.com/ClickHouse/ClickHouse/pull/108123) ([groeneai](https://github.com/groeneai)).
* `EXISTS` 相関サブクエリの非相関化によって生成される結合を含め、`SEMI`/`ANTI` 結合に `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`) の例外を修正しました。`full_sorting_merge` は実行できない strictness/kind の組み合わせを受け付けなくなったため、プランナーは有効な別のアルゴリズムにフォールバックするか、結合を実行できないことを報告するようになりました。[#108658](https://github.com/ClickHouse/ClickHouse/pull/108658) ([groeneai](https://github.com/groeneai)).
* `JOIN` の `WITH TOTALS` 行に、結合の一方の側にある定数サブクエリから得られる定数値ではなく、デフォルト値 (`0` など) が含まれることがあるバグを修正しました。この誤った結果は、特定の結合順序の場合、または `query_plan_join_swap_table` 設定を使用した場合にのみ発生していました。[#108807](https://github.com/ClickHouse/ClickHouse/pull/108807) ([vdimir](https://github.com/vdimir))。
* シグナルスタックサイズが大きい CPU (例: AMX 対応カーネル上の Intel Sapphire Rapids / Granite Rapids) で動作する glibc ビルドにおいて、起動時に異常終了する問題 (`Cannot allocate ThreadStack`、`EINVAL`) を修正しました。原因は、`aligned_alloc` の呼び出し前にシグナル代替スタックのサイズがページサイズの倍数に切り上げられていなかったことです。[#108813](https://github.com/ClickHouse/ClickHouse/pull/108813) ([groeneai](https://github.com/groeneai))。
* 相関サブクエリが結合に非相関化され、かつソースリレーションに同じカラム名が複数回含まれる場合に発生する `Block structure mismatch in JoinStep` 論理エラー (debug/sanitizer ビルドではサーバーが異常終了) を修正しました。例: `correlated_subqueries_default_join_kind = 'right'` を指定した `WITH t AS (SELECT number, * FROM numbers(3)) SELECT *, (SELECT t.number WHERE t.number >= 0) FROM t`。[#109114](https://github.com/ClickHouse/ClickHouse/pull/109114) ([groeneai](https://github.com/groeneai))。
* `CREATE USER ... HOST LIKE 'a', 'b'` (および同等の `ALTER USER`) で、最初のパターンのみが警告なく保持されていた問題を修正しました。指定したすべての `HOST LIKE` パターンが、ユーザーのホスト許可リストに保存されるようになりました。[#109187](https://github.com/ClickHouse/ClickHouse/pull/109187) ([groeneai](https://github.com/groeneai))。
* 定数の `ON` 条件を持つ `ANY JOIN` (例: `t1 ANY INNER JOIN t2 ON 1`) で予期しない結果が返される問題を修正しました。クエリが ANY 結合の結果ではなく、完全なデカルト積を返していました [#109207](https://github.com/ClickHouse/ClickHouse/pull/109207) ([vdimir](https://github.com/vdimir))。
* parallel\_hash 結合アルゴリズムでグローバルな `max_rows_in_join` / `max_bytes_in_join` 制限が適用されず、`join_overflow_mode = 'throw'` を指定したクエリが `SET_SIZE_LIMIT_EXCEEDED` を発生させずに成功してしまうことがある問題を修正しました。[#109488](https://github.com/ClickHouse/ClickHouse/pull/109488) ([m-selmi](https://github.com/m-selmi))。
* サーバー側のインライン挿入パース処理 (`send_table_structure_on_insert_with_inline_data = 0`) において、マルチクエリストリーム内の `INSERT ... VALUES` の後に末尾の SQL コメント (例: `VALUES (1) -- comment`) が続くと、データが警告なく失われる問題を修正しました。末尾のコメントが終端の `;` を越えて行データとして読み取られ、ストリーム内の後続クエリが警告なくスキップされていました。[#109643](https://github.com/ClickHouse/ClickHouse/pull/109643) ([groeneai](https://github.com/groeneai))。
* `PREWHERE` が `FINAL` の後に実行される場合における、`optimize_move_to_prewhere = 1` 指定時の遅延 `PREWHERE` の問題を修正しました。クエリ結果が変わる原因となっていた、`WHERE` 条件が遅延された行ポリシーより前に移動される動作が行われなくなりました。[#109703](https://github.com/ClickHouse/ClickHouse/pull/109703) ([yariks5s](https://github.com/yariks5s))。
* 再帰 CTE が外側のスコープの識別子を相関カラムとして解決した場合 (`allow_experimental_correlated_subqueries = 1` 指定時) に発生する `LOGICAL_ERROR` (`query tree node does not have valid source node`) を修正しました。このようなクエリは、明確な `UNSUPPORTED_METHOD` エラーを返すようになりました。[#109863](https://github.com/ClickHouse/ClickHouse/pull/109863) ([groeneai](https://github.com/groeneai))。
* `ORDER BY ... WITH FILL` が `Int64`/`UInt64` カラム上の非常に大きなギャップをスキップする場合 (例: 2^63 付近のギャップをステップ 2 で埋める場合) に発生する符号付き整数オーバーフローを修正しました。このオーバーフローは sanitizer 下では未定義動作となり、リリースビルドでは値が警告なくラップアラウンドしていました。[#109937](https://github.com/ClickHouse/ClickHouse/pull/109937) ([groeneai](https://github.com/groeneai))。
* 旧アナライザ (`enable_analyzer = 0`) 使用時に、`INTERPOLATE` の対象が `WITH FILL` カラムの別名である場合に発生する `Invalid number of rows in Chunk` 論理エラーを修正しました。このようなクエリは、明確な `INVALID_WITH_FILL_EXPRESSION` エラーで拒否されるようになりました。[#110103](https://github.com/ClickHouse/ClickHouse/pull/110103) ([groeneai](https://github.com/groeneai))。
* 相関サブクエリ (例: `exists((SELECT ...))`) を含むフィルタが `convert_query_to_cnf` または `optimize_and_compare_chain` によって最適化される際に発生する論理エラー (`Unexpected number of columns in result sample block`) を修正しました。[#110187](https://github.com/ClickHouse/ClickHouse/pull/110187) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* ネストされた相関 `EXISTS` サブクエリが、直近の外側クエリよりさらに外側のスコープ (中間スコープを飛び越えたスコープ) のカラムを参照する場合、内部エラー `NOT_FOUND_COLUMN_IN_BLOCK` ではなく、明確な `NOT_IMPLEMENTED` エラーで失敗するようになりました。[#110310](https://github.com/ClickHouse/ClickHouse/pull/110310) ([groeneai](https://github.com/groeneai))。
* 外側のクエリの相関カラムに重複値があり、かつサブクエリが CROSS JOIN 経路で非相関化される場合に、相関スカラーサブクエリが誤った結果を返す問題を修正しました。以前は `count()` や `sum()` などの集約関数の結果が重複数の倍数になっていました。この問題は実験的機能 `allow_experimental_correlated_subqueries` に影響します。[#110311](https://github.com/ClickHouse/ClickHouse/pull/110311) ([groeneai](https://github.com/groeneai))。
* 大きな補完範囲を生成する際 (特に `INTERPOLATE` 使用時) に、`ORDER BY ... WITH FILL` が `max_execution_time` に従わず、キャンセルにも時間がかかる問題を修正しました。[#110332](https://github.com/ClickHouse/ClickHouse/pull/110332) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 遅延実行による `FINAL` 最適化 (`query_plan_optimize_lazy_final`、デフォルトでは無効) は、クエリが sorting key の順序で読み取る場合には適用されなくなりました。この最適化の置換プランは sorting key 順に行を生成しない一方、上位のプランは read-in-order 最適化によってその順序を前提としている可能性があり、結果の順序が正しくなくなるおそれがあったためです。また、読み取る行数より小さい `LIMIT` が読み取りステップに直接適用される場合にも適用されなくなりました。この場合、必須のセット構築処理によって早期終了の効果が失われるためです。[#110576](https://github.com/ClickHouse/ClickHouse/pull/110576) ([KochetovNicolai](https://github.com/KochetovNicolai))。
* バックグラウンドで実行される非同期挿入の flush が、`KILL QUERY` で強制終了された際に速やかに停止するようになりました。以前は、バッファされた大きなペイロードの flush が最後までパースを続け、キャンセルが無視されていました。[#110652](https://github.com/ClickHouse/ClickHouse/pull/110652) ([tiandiwonder](https://github.com/tiandiwonder))。
* `partial_merge` JOIN の上に配置された `GROUP BY ... optimize_aggregation_in_order` および `DISTINCT ... optimize_distinct_in_order` が誤った結果を返す問題を修正しました。read-in-order 最適化が `PartialMergeJoin` を越えて伝播されていましたが、`PartialMergeJoin` は左側の入力を結合キーで再ソートするため左側ストリームの元の順序が保持されず、行が誤ってグループ化されていました。[#110671](https://github.com/ClickHouse/ClickHouse/pull/110671) ([groeneai](https://github.com/groeneai))。
* `INTERSECT` または `EXCEPT` クエリで CTE のカラム別名を使用した場合 (例: `WITH t (a, b) AS (SELECT 1, 2 INTERSECT SELECT 1, 2) SELECT a, b FROM t`) に、クエリが UNKNOWN\_IDENTIFIER エラーで失敗する問題を修正しました。[#110885](https://github.com/ClickHouse/ClickHouse/pull/110885) ([yariks5s](https://github.com/yariks5s))。
* 複数のスレッドがリーダーを共有している状態でスピルされたブロックの読み取りが途中で失敗した際に、`grace_hash` 結合で発生する可能性があった `LOGICAL_ERROR: ReadBuffer is canceled. Can't read from it.` を修正しました。[#111056](https://github.com/ClickHouse/ClickHouse/pull/111056) ([groeneai](https://github.com/groeneai))。
* \*\_hash JOIN 実行時に右側のカラムをマテリアライズする際、誤ったタイムゾーンが使用されていたバグを修正しました。[#111074](https://github.com/ClickHouse/ClickHouse/pull/111074) ([yariks5s](https://github.com/yariks5s))。
* `COMMENT` 句を含む `CREATE` 文でコメントの文字列リテラルが欠落している場合、誤ってパースされたクエリを警告なしに受け入れるのではなく、構文エラーを発生させるよう修正しました (例：`CREATE VIEW v COMMENT AS SELECT 1` でコメントのないビューが作成されることはなくなりました) 。[#111159](https://github.com/ClickHouse/ClickHouse/pull/111159) ([tiandiwonder](https://github.com/tiandiwonder))。
* 再利用されるマテリアライズド CTE (`enable_materialized_cte`) が、`WITH TOTALS` または `extremes` の出力が破棄されるブランチ (外側の集約、`INSERT ... SELECT`、集合演算、`EXPLAIN ANALYZE` を含む) で読み取られた際に発生する `LOGICAL_ERROR` (`Reading from materialized CTE '...' before its materialization completed - DelayedPortsProcessor gate is missing in the query plan`) を修正しました。[#111194](https://github.com/ClickHouse/ClickHouse/pull/111194) ([groeneai](https://github.com/groeneai))。
* `join_algorithm = 'full_sorting_merge'` において、`LEFT`/`RIGHT`/`FULL`/`ASOFJOIN` の結合されなかった行が、カラム型のデフォルト値ではなく生のゼロで埋められていた問題を修正しました。`Enum` カラム (デフォルト値は `0` ではなく最初の要素) では、これにより誤った結果が返され (埋められた値に対するフィルタで一致しない行が除外され、外部結合が警告なしに内部結合のように動作していました) 、さらにそのカラムを選択すると `UNKNOWN_ELEMENT_OF_ENUM` エラーが発生していました。[#111197](https://github.com/ClickHouse/ClickHouse/pull/111197) ([groeneai](https://github.com/groeneai))。
* `optimize_move_to_prewhere_if_final = 1` で、かつ `WHERE` 句がソートキーのカラムに対する暗黙的なブール条件 (例：`WHERE k`) である場合に、`FINAL` を指定した `SummingMergeTree` (および `CoalescingMergeTree`) が誤った結果を返す問題を修正しました。キーカラムの値が保持されず、マージされていないパーツ間で合計された値が返されていました。[#111342](https://github.com/ClickHouse/ClickHouse/pull/111342) ([groeneai](https://github.com/groeneai))。
* 左側に `UNION ALL` を経由しても残る同名の重複カラム (例：`1 AS b, 1 AS b`) が含まれる場合に、`RIGHT`/`FULL JOIN` で発生する可能性があった論理エラー (`Unexpected number of columns in result sample block`) を修正しました。[#111554](https://github.com/ClickHouse/ClickHouse/pull/111554) ([groeneai](https://github.com/groeneai))。
* AST の子ノードが置き換えられた (AST fuzzer が行うような) `EXECUTE AS` クエリをフォーマットする際に、クライアントがクラッシュする問題を修正しました。`ASTExecuteAsQuery` は、`children` を指す所有権のないポインタを保持するのではなく、子ノードである `target_user` と `subquery` を自身で所有するようになりました。[#111725](https://github.com/ClickHouse/ClickHouse/pull/111725) ([groeneai](https://github.com/groeneai))。
* `join_any_take_last_row = 1` の状態で `query_plan_join_swap_table` が `ANY JOIN` を入れ替えた場合に誤った結果が返される問題を修正しました。ClickHouse は元の結合側の順序を維持するようになったため、`ANY JOIN` は引き続き最後に一致した行を返します。[#112458](https://github.com/ClickHouse/ClickHouse/pull/112458) ([vdimir](https://github.com/vdimir))。
* サブクエリ内で `getClientHTTPHeader` を使用した際に発生する `Context has expired` 例外を修正しました。[#112533](https://github.com/ClickHouse/ClickHouse/pull/112533) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `ON` 句に混合条件、すなわち `ON (t1.key = t2.key) AND (t1.a * 10 < t2.a)` のような両側にまたがる非等価の残余条件を含む `JOIN` が誤った結果を返す問題を修正しました。このような条件を評価できるのはハッシュ系アルゴリズムのみですが、`full_sorting_merge`、`partial_merge`、およびダイレクトキー・バリュー結合は、これらの結合を実行可能と判定したうえで残余条件を警告なしに無視し、余分な行を返していました。現在はこれらのアルゴリズムが実行を辞退し、代わりにハッシュアルゴリズムが使用されます。[#112831](https://github.com/ClickHouse/ClickHouse/pull/112831) ([groeneai](https://github.com/groeneai))。
* `WHERE` で `rand` などの非決定論的な expression を介して 2 つのテーブルのカラムを比較するカンマ結合または `CROSS` 結合で、誤った結果が返される問題を修正しました。結合を `INNER` 結合に書き換える際に expression が結合キーへ移動され、両側の行ごとに再評価されていたため、このようなクエリは自身の `WHERE` 句と矛盾する行を返す可能性がありました。[#112938](https://github.com/ClickHouse/ClickHouse/pull/112938) ([groeneai](https://github.com/groeneai))。
* 認識できない文字が末尾に長く続く PromQL クエリ (例: NUL バイトでパディングされた `FixedString` 値) をパースする際に、処理時間が二次関数的に増大する問題を修正しました。メガバイト規模の不正な入力をパースすると、スレッドが数十分間占有され続けていました。また、パースはクエリ解析中に行われるため、キャンセルもできませんでした。現在は、パーサーは最初のエラーで停止します。[#112944](https://github.com/ClickHouse/ClickHouse/pull/112944) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* 非定数カラムに対して定数の除数 -1 で `intDiv` を実行した場合、符号付き整数の最小値の除算 (例: `intDiv(-9223372036854775808, -1)`) が、他の実行パスのように `ILLEGAL_DIVISION` 例外をスローせず、暗黙的にラップアラウンドしていた問題を修正しました。このラップアラウンドにより、`ORDER BY`/`DISTINCT` の結果が誤る可能性もありました。read-in-order 最適化は負の定数による `intDiv` を正しく単調関数として扱いますが、ラップアラウンドした値がその前提となるソート順に違反していたためです。[#113048](https://github.com/ClickHouse/ClickHouse/pull/113048) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `enable_analyzer = 0` の場合に、`WHERE` がサブクエリ内の `untuple` によって生成されたカラムを参照すると `UNKNOWN_IDENTIFIER` が発生する問題を修正しました (例: `SELECT t.keys FROM (SELECT untuple(arrayJoin(m)) AS t FROM ...) WHERE t.values > 0`) 。`enable_optimize_predicate_expression` による書き換えにより、このような述語が、その名前がまだ存在しない段階のサブクエリ内へ `HAVING` としてプッシュダウンされていました。[#113760](https://github.com/ClickHouse/ClickHouse/pull/113760) ([groeneai](https://github.com/groeneai))。
* 右側が totals を持つ場合に、`join_algorithm = 'partial_merge'` を指定した `JOIN` で誤った結果が返される問題を修正しました。右側がマージされないまま残ることがあり、その結果 `LEFT` 結合では実際に一致する行の代わりにデフォルト値が使われ、`INNER`/`RIGHT` 結合では行がまったく返されませんでした。また、`RIGHT`/`FULL` の非結合パスでは、同じステートが原因でヌルポインタが参照され、サーバーがクラッシュしていました。[#113936](https://github.com/ClickHouse/ClickHouse/pull/113936) ([groeneai](https://github.com/groeneai))。
* 入力全体を読み取る必要がある `LIMIT` を伴う `SELECT DISTINCT` で、誤った結果が返される問題を修正しました。`LIMIT n WITH TIES` では同順位の行が欠落し、`exact_rows_before_limit = 1` では切り詰められた `rows_before_limit_at_least` が報告され、`GROUP BY ... WITH TOTALS` ではストリームの先頭部分だけから totals 行が計算されていました。[#114025](https://github.com/ClickHouse/ClickHouse/pull/114025) ([groeneai](https://github.com/groeneai))。
* `FINAL` がマージに必要とするカラム (`ver`、`is_deleted`、`sign`) を `PREWHERE` で使用しながら、そのカラムを選択しない `SELECT ... FINAL` で、`LOGICAL_ERROR` ("Unexpected number of kept output positions after removing unused columns from `ReadFromMergeTree`") が発生する問題を修正しました。[#114746](https://github.com/ClickHouse/ClickHouse/pull/114746) ([groeneai](https://github.com/groeneai))。
* 非同期 INSERT のフラッシュ、マテリアライズドビューの処理、および `EXPLAIN ANALYZE` において、期限切れのクエリ追跡ステートにアクセスする可能性があったライフタイムの問題を修正しました。[#114940](https://github.com/ClickHouse/ClickHouse/pull/114940) ([azat](https://github.com/azat))。
* インターバル間を区切るカンマが省略された場合に、`CREATE QUOTA` および `ALTER QUOTA` が最後の `FOR INTERVAL` ブロック以外をすべて暗黙的に破棄していた問題を修正しました。このようなステートメントは成功するものの、それより前の制限は一切設定されていませんでした。現在は、2020 年以前と同様に、インターバルが再び累積されるようになりました。[#115320](https://github.com/ClickHouse/ClickHouse/pull/115320) ([groeneai](https://github.com/groeneai))。
* 呼び出しごとに異なる別名が付与されている場合に、`randConstant` が 1 つのクエリ内で 2 つの異なる値を返す問題を修正しました。`randConstant` はクエリ全体で単一の値を保持すると説明されており、`SELECT randConstant() = randConstant()` はすでに `1` を返していましたが、`SELECT randConstant() AS a, randConstant() AS b` のように別名を付けると、互いに無関係な 2 つの値が返されていました。[#115384](https://github.com/ClickHouse/ClickHouse/pull/115384) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 破損した `MsgPack` または `ProtobufList` ファイルに対して `SELECT count()` が終了しない、あるいは実在しない行数を返す問題を修正しました。`optimize_count_from_files` の高速パスでは、読み取り位置が進むことを確認せずに行をカウントしていたため、2 バイトの `ProtobufList` ファイルから数十億行がカウントされ、結果が返りませんでした。このような入力は、通常の読み取りパスと同じエラーで拒否されるようになりました。[#115884](https://github.com/ClickHouse/ClickHouse/pull/115884) ([groeneai](https://github.com/groeneai)).
* `system.distribution_queue` の `broken_data_files` および `BrokenDistributedFilesToInsert` メトリクスが常に `0` を示す問題を修正しました。起動時に非同期挿入キューをスキャンする際、`DistributedAsyncInsertDirectoryQueue::initializeFilesFromDisk` は破損バイト数をカウントしていた一方で、破損ファイルのカウンターをインクリメントしていませんでした。[#92124](https://github.com/ClickHouse/ClickHouse/pull/92124) ([squalfof](https://github.com/squalfof)).

<h3 id="other-bug-fixes">
  その他のバグ修正
</h3>

* 内部クエリの一部として実行されるセカンダリクエリが、内部クエリとしてログに記録されるようになりました。[#108506](https://github.com/ClickHouse/ClickHouse/pull/108506) ([mstetsyuk](https://github.com/mstetsyuk))。
* PREWHERE 条件が複数の読み取りステップに分割された場合に、パーツ内に存在しない DEFAULT カラムが DEFAULT expression ではなく型のデフォルト値で埋められてしまう問題を修正しました。[#111795](https://github.com/ClickHouse/ClickHouse/pull/111795) ([yariks5s](https://github.com/yariks5s))。
* `normalized_query_hash` をキーとするクォータが、すべてのリソース (`read_rows`、`read_bytes`、`result_rows`、`result_bytes`、`execution_time`、`written_bytes`、`errors`) を、ユーザーごとに共有される単一のバケットではなく、クエリ数カウンターと同様にクエリパターンごとに計上するようになりました。[#107681](https://github.com/ClickHouse/ClickHouse/pull/107681) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* MySQL の `connect_timeout` および読み取り・書き込みタイムアウトが有効にならない問題を修正しました。サンプリングクエリプロファイラの定期的なシグナルによって MySQL クライアント内部のポーリング期限がリセットされ続けていたため、`connect_timeout = 1` を指定していても、応答しない MySQL サーバーへの接続試行が 2 分以上ハングすることがありました。[#109592](https://github.com/ClickHouse/ClickHouse/pull/109592) ([tiandiwonder](https://github.com/tiandiwonder))。
* クエリプロファイラが有効な間、ストリーミング挿入のブロック待機タイムアウト (`input_format_max_block_wait_ms`) が期限切れにならないことがある問題を修正しました。プロファイラのシグナルを受けるたびにファイルディスクリプタのポーリングがタイムアウト値を最初からやり直して再開されていたため、入力ソースが停滞すると、本来は待機上限に達した時点で行われるはずの部分ブロックの flush が無期限に遅延する可能性がありました。[#109602](https://github.com/ClickHouse/ClickHouse/pull/109602) ([tiandiwonder](https://github.com/tiandiwonder))。
* 実験的な設定 `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](https://github.com/ClickHouse/ClickHouse/pull/109770) ([groeneai](https://github.com/groeneai))。
* `distinct_overflow_mode = 'break'` の動作を修正しました。DISTINCT は、ドキュメントに記載されているとおり、上限に達するまでに蓄積された部分的な結果を返し、ソースの読み取りを停止するようになりました。以前は、`max_rows_in_distinct` / `max_bytes_in_distinct` を超えた chunk が破棄され (結果が切り詰められるか空になる)、クエリは入力の最後まで読み取りとハッシュセットへの挿入を続けていたため、`MEMORY_LIMIT_EXCEEDED` で終了することがありました。[#110075](https://github.com/ClickHouse/ClickHouse/pull/110075) ([skuznetsov-clickhouse](https://github.com/skuznetsov-clickhouse))。
* `optimize_aggregation_in_order` がクエリのキャンセルを無視する問題を修正しました。`AggregatingInOrderTransform` が chunk の集約中にキャンセルを確認するようになったため、`KILL QUERY` や `max_execution_time` (デフォルトの `timeout_overflow_mode = 'throw'` の場合) によって停止されたクエリは、chunk 全体の処理を待たずに速やかに停止します。[#110104](https://github.com/ClickHouse/ClickHouse/pull/110104) ([groeneai](https://github.com/groeneai))。
* `mysql`/`postgresql`/`sqlite` 系の PostgreSQL ソースの値を、パースできない宣言型 (例: `Int32` として宣言された `text` カラム) に読み込む際に、サーバーが異常終了する問題 (debug ビルドおよび sanitizer ビルド) を修正しました。このような型の不一致は、サーバーを異常終了させずにクエリエラーとして報告されるようになりました。[#110264](https://github.com/ClickHouse/ClickHouse/pull/110264) ([groeneai](https://github.com/groeneai))。
* 特定の PRQL クエリ (`SET dialect = 'prql'`) のパース時にサーバーが異常終了する問題を修正しました。`prqlc` コンパイラ内部で発生した panic が、クエリエラーとして報告されずにプロセスを異常終了させていました。[#110316](https://github.com/ClickHouse/ClickHouse/pull/110316) ([groeneai](https://github.com/groeneai))。
* row policy と `additional_table_filters` が、クエリ内で他に選択されていない同一のカラムを参照している場合に `NOT_FOUND_COLUMN_IN_BLOCK` が発生する問題を修正しました。[#111099](https://github.com/ClickHouse/ClickHouse/pull/111099) ([groeneai](https://github.com/groeneai))。
* 極端なパラメータを指定した場合に `randChiSquared`、`randStudentT`、`randFisherF`、`randBinomial` がハングする問題を修正しました。この場合、クエリを `max_execution_time` や `KILL QUERY` で中断できませんでした。現在は、`max_rand_distribution_parameter` または `max_rand_distribution_trials` が 0 に設定されている場合でも、このようなパラメータは拒否されます。また、`randBinomial` では `max_rand_distribution_trials` をデフォルト値の 10^9 より大きく設定できなくなりました。[#111909](https://github.com/ClickHouse/ClickHouse/pull/111909) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `connection_pool_max_wait_ms` を修正し、ドキュメントに記載されたデフォルト値 `0` が無限のタイムアウトを意味するようにしました。以前は、接続プールが満杯であることを検出したクエリがタイトループで再試行を繰り返し、CPU を消費しながら反復ごとに `No free connections in pool. Waiting 0 ms.` をログに出力していました。現在は、接続がプールに返却されるまで待機します。[#112380](https://github.com/ClickHouse/ClickHouse/pull/112380) ([groeneai](https://github.com/groeneai)).
* `replaceOne`、`replaceAll`、`replaceRegexpOne`、`replaceRegexpAll` が `max_execution_time` と `KILL QUERY` を無視する問題を修正しました。1 回の呼び出しの処理中にもキャンセルを確認するようになったため、大きな値や大量の行に対する長時間の置換処理は、完了までサーバースレッドを占有し続けることなく停止します。このような呼び出しには返せる部分的な結果がないため、`timeout_overflow_mode = 'break'` の場合は期限超過をエラーとして発生させます。これは、定数畳み込みされた場合は常に、またパイプラインでは executor のブロック間チェック (こちらは引き続きクエリをエラーなしで停止します) より前にこのチェックポイントに到達した場合に発生します。[#112483](https://github.com/ClickHouse/ClickHouse/pull/112483) ([groeneai](https://github.com/groeneai)).
* `countSubstrings`、`countSubstringsCaseInsensitive`、`countSubstringsCaseInsensitiveUTF8` が `KILL QUERY` と `max_execution_time` を無視する問題を修正しました。多数の行や多数の一致を対象とする呼び出しが、クエリのキャンセル後も数分間実行され続けることがありました。[#113369](https://github.com/ClickHouse/ClickHouse/pull/113369) ([groeneai](https://github.com/groeneai)).
* イニシエーター上でクエリが非常に短時間で完了した場合に、クエリが (`receive_timeout` 秒間) ハングする可能性がある問題を修正しました。[#113551](https://github.com/ClickHouse/ClickHouse/pull/113551) ([nickitat](https://github.com/nickitat)).
* 1 つの大きな値に含まれる一致数をカウントする際に、`countMatches` と `countMatchesCaseInsensitive` が `max_execution_time` と `KILL QUERY` を無視し、キャンセルされたクエリが数分間実行され続ける問題を修正しました。引数が定数の場合、呼び出しはクエリ解析中に行われるため、それをキャンセルできるパイプラインが存在しません。[#113886](https://github.com/ClickHouse/ClickHouse/pull/113886) ([groeneai](https://github.com/groeneai)).
* クエリが `max_execution_time` に達する最大 1 ms 前にキャンセルされ、`Timeout exceeded: elapsed 999.672 ms, maximum: 1000 ms` という矛盾したエラーで失敗することがある問題を修正しました。[#114559](https://github.com/ClickHouse/ClickHouse/pull/114559) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* バウンディングボックスが有界でない定数ポリゴン (例: 座標が `+-DBL_MAX` に達する場合) を指定したときに、`pointInPolygon` で範囲外読み取りが発生する問題を修正しました。このようなポリゴンは `BAD_ARGUMENTS` で拒否されるようになり、空のリングを持つポリゴンは内部を持たないものとして扱われます。以前は、クエリが誤った結果を返したり、ハードニングやサニタイザを有効にしたビルドではサーバーが異常終了したりする可能性がありました。[#115035](https://github.com/ClickHouse/ClickHouse/pull/115035) ([groeneai](https://github.com/groeneai)).
* `STREAM BOUNDED` クエリが、開始前にコミットされた行よりも少ない行 (通常は 0 行) を返す可能性がある競合状態を修正しました。[#115543](https://github.com/ClickHouse/ClickHouse/pull/115543) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `make_distributed_plan = 1` の場合に、ウィンドウクエリのソート列がその列を参照しない `Expression` ステップを通過すると、クエリプランの最適化中に `Unknown identifier` が発生する問題を修正しました。[#115890](https://github.com/ClickHouse/ClickHouse/pull/115890) ([groeneai](https://github.com/groeneai)).
* `h3kRing`、`h3HexRing`、`h3Line`、`h3ToChildren` が行のブロックを展開する際に `max_execution_time` および `KILL QUERY` を無視する問題を修正しました。[#115893](https://github.com/ClickHouse/ClickHouse/pull/115893) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* ネイティブ Parquet V3 リーダーにおいて、`PREWHERE` の連言が共通の中間 expression を共有している場合に `NOT_FOUND_COLUMN_IN_BLOCK` が発生する問題 (以前のリグレッションに起因) を修正しました。[#107059](https://github.com/ClickHouse/ClickHouse/pull/107059) ([groeneai](https://github.com/groeneai)).
* `output_format_parquet_parallel_encoding` が有効 (デフォルト) かつ `max_threads` が 1 より大きい状態で Parquet を書き込む際にハングする問題を修正しました。エンコーダーが追加スレッドのスケジュールに失敗すると、稼働中スレッドのカウンターがアンダーフローし、書き込みが完了もエラー報告もしないまま恒久的に停止する可能性がありました。[#112959](https://github.com/ClickHouse/ClickHouse/pull/112959) ([groeneai](https://github.com/groeneai)).
* Thrift メタデータが、メタデータ自体のサイズを超えるコンテナーまたは文字列の長さを宣言している Parquet ファイルを読み込む際に、メモリが無制限に割り当てられる問題を修正しました。このような長さは、メモリを割り当てずに拒否されるようになりました。[#113212](https://github.com/ClickHouse/ClickHouse/pull/113212) ([groeneai](https://github.com/groeneai)).
* Parquet v3 リーダーにおいて、フィルター評価にのみ必要なカラムが、その出力スロットが既に破棄された後にデコード対象としてスケジュールされた場合に `std::out_of_range` 例外 (`Logical error: 'std::exception. Code: 1001, type: std::out_of_range'`。debug ビルドおよび sanitizer ビルドではサーバーも異常終了します) が発生する問題を修正しました。[#113956](https://github.com/ClickHouse/ClickHouse/pull/113956) ([groeneai](https://github.com/groeneai)).
* profile events および memory tracker におけるデータ競合を修正しました。[#112466](https://github.com/ClickHouse/ClickHouse/pull/112466) ([mstetsyuk](https://github.com/mstetsyuk)).
* `trace_profile_events_list` 設定を使用して特定の profile events のスタックトレースを `system.trace_log` に書き込む際に、profile events で理論上発生し得るデータ競合を修正しました。[#113553](https://github.com/ClickHouse/ClickHouse/pull/113553) ([mstetsyuk](https://github.com/mstetsyuk)).
* 除算が浮動小数点例外 (ゼロ除算または `INT_MIN / -1`) を引き起こす場合に、`intDivOrNull`、`moduloOrNull`、`positiveModuloOrNull` が `NULL` ではなく `0` を返す問題、および `intDivOrNull` と `intDivOrZero` が `NULL` / `0` を返さずに例外を送出する問題を修正しました。符号付きと符号なしが混在した引数の場合も対象です。[#101976](https://github.com/ClickHouse/ClickHouse/pull/101976) ([yariks5s](https://github.com/yariks5s)).
* `Array` および `Map` の値を `NULL` と比較する場合の `IS DISTINCT FROM` の問題を修正しました。[#103162](https://github.com/ClickHouse/ClickHouse/pull/103162) ([ylw510](https://github.com/ylw510)).
* パラメトリック形式と 2 引数形式が混在する場合 (例: `groupConcat(',', 2)(x, '/')`) の `groupConcat` の問題を修正しました。行数制限のパラメータが警告なく破棄され、要求した行数ではなくすべての行が返されていました。現在は、2 番目の引数で指定した区切り文字がパラメータを正しくオーバーライドします。[#104882](https://github.com/ClickHouse/ClickHouse/pull/104882) ([yariks5s](https://github.com/yariks5s)).
* 小さいインターバル単位から大きいインターバル単位へ CAST する際のバグを修正しました。[#105058](https://github.com/ClickHouse/ClickHouse/pull/105058) ([yariks5s](https://github.com/yariks5s)).
* read-in-order パイプライン (`optimize_read_in_order = 1` および `read_in_order_use_virtual_row_per_block = 1`) で実行される `LIMIT ... WITH TIES` クエリで発生する論理エラー (`Assertion 'row < chunk.getNumRows()' failed`) を修正しました。[#105102](https://github.com/ClickHouse/ClickHouse/pull/105102) ([groeneai](https://github.com/groeneai)).
* `enable_sharding_aggregator = 1` を `UNION ALL` と併用し、かつ `max_streams_for_union_step` がパイプライン幅より小さいクエリで `Logical error: 'Pipeline stuck'` が発生する問題を修正しました。`BufferedShardByHashTransform` は、入力が尽きた時点で、キューが空の出力ポートを直ちに終了するようになりました。また、要求された空のポートに排出可能なデータがない場合は、兄弟キューがバックプレッシャーの上限に達していても入力の取得を続けるようになりました。[#106251](https://github.com/ClickHouse/ClickHouse/pull/106251) ([groeneai](https://github.com/groeneai)).
* `plain` オブジェクトストレージディスク (`s3_plain` など) で `removeDirectory` を実行すると、空でないディレクトリであっても再帰的な削除と同様に内部のファイルがすべて削除されてしまう問題を修正しました。空でないディレクトリの削除は `CANNOT_RMDIR` で失敗するようになり、再帰的な削除では内容を明示的に処理するようになりました。[#106281](https://github.com/ClickHouse/ClickHouse/pull/106281) ([RinChanNOWWW](https://github.com/RinChanNOWWW)).
* `<lifetime>` を設定した `executable_pool` ユーザー定義関数で、基となるスクリプトの変更が反映されない問題を修正しました。これまでは、編集後のスクリプトを再読み込みできるのは `SYSTEM RELOAD FUNCTIONS` のみで、`<lifetime>` による定期的な再読み込みでは古いバージョンが実行され続けていました。[#107087](https://github.com/ClickHouse/ClickHouse/pull/107087) ([groeneai](https://github.com/groeneai)).
* ワーカースレッドによるプロファイラーの開始とサーバーのシャットダウンが競合した際に、サーバー全体で共有されるトレースコレクターでデータ競合が発生する問題を修正しました。[#107307](https://github.com/ClickHouse/ClickHouse/pull/107307) ([groeneai](https://github.com/groeneai)).
* `threadPoolCallbackRunnerUnsafe` 経由でスケジュールされたタスクが実行前にスレッドプールのキューから破棄されることで、シャットダウン時にまれにサーバーが異常終了する問題 (`std::future_error`、"The associated promise has been destructed prior to the associated state becoming ready") を修正しました。[#107383](https://github.com/ClickHouse/ClickHouse/pull/107383) ([groeneai](https://github.com/groeneai)).
* 監視対象のファイルが削除され、同じ inode を再利用して再作成された場合に発生することがあった `FileLog` の論理エラー (`Last stored last_written_position in meta file ... is bigger than current last_written_pos`) を修正しました。[#107617](https://github.com/ClickHouse/ClickHouse/pull/107617) ([groeneai](https://github.com/groeneai)).
* `saturate` および `ignore` オーバーフローモードで、`toTime64` と `CAST(... AS Time64)` が範囲外の値を `Time64` の範囲内に収めない問題を修正しました。この問題により、表示は同じでも比較すると異なる値が生成されることがありました。[#108028](https://github.com/ClickHouse/ClickHouse/pull/108028) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 正規表現の「全一致」関数 `extractAll`、`extractAllGroupsVertical`、`extractAllGroupsHorizontal`、`countMatches`、`splitByRegexp` で、ゼロ幅アサーション (`\b`、`^`、`$`) が正しく処理されない問題を修正しました。たとえば、`extractAll('new york is the greatest', '\b(\w)')` は、すべての文字ではなく各単語の先頭文字を正しく返すようになりました。[#108047](https://github.com/ClickHouse/ClickHouse/pull/108047) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* `splitByNonAlpha` 以外のトークナイザーを使用するテキスト索引に対して `hasToken` を使用すると、誤った結果が返される問題を修正しました。[#108066](https://github.com/ClickHouse/ClickHouse/pull/108066) ([rschu1ze](https://github.com/rschu1ze)).
* 入力の精度がインターバルの単位より細かい場合に、`toStartOfInterval` と `dateTrunc` が、その値を含むインターバルの開始時点ではなく丸められた値を返す問題を修正しました。たとえば、`toStartOfInterval(toDateTime64('2023-10-09 10:11:12.000999', 6), INTERVAL 1 millisecond)` は `10:11:12.000` ではなく `10:11:12.001` を返していました。明示的な起点を指定するオーバーロードも同様の影響を受けていました。[#108186](https://github.com/ClickHouse/ClickHouse/pull/108186) ([yariks5s](https://github.com/yariks5s)).
* `replaceRegexpOne` および `replaceRegexpAll` において、他の正規表現関数と同様に、`.` がデフォルトで改行文字にマッチするよう修正しました。[#108265](https://github.com/ClickHouse/ClickHouse/pull/108265) ([linjiayu1025-collab](https://github.com/linjiayu1025-collab))。
* 論理更新 (lightweight UPDATE) /DELETE の条件が 2 回評価される問題を修正しました。[#108323](https://github.com/ClickHouse/ClickHouse/pull/108323) ([ofeliacode](https://github.com/ofeliacode))。
* 定数でない limit 引数を指定した場合の `arrayPartialSort()` の不具合を修正しました。[#108327](https://github.com/ClickHouse/ClickHouse/pull/108327) ([vitlibar](https://github.com/vitlibar))。
* パターンに NUL (`\0`) バイトが含まれている場合に、正規表現関数 (`match`、`extract`、`extractAll`、`replaceRegexpOne`、`replaceRegexpAll` など) がエラーを出さずに誤った結果を返す問題を修正しました。NUL は RE2 と同様に、通常のリテラルバイトとして扱われるようになりました。[#108427](https://github.com/ClickHouse/ClickHouse/pull/108427) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `DateTime64(N)` 型の引数に対して `changeYear`/`changeMonth`/`changeDay`/`changeHour`/`changeMinute`/`changeSecond` を実行すると、結果カラムが `N` ではなくハードコードされたデフォルトのスケール (3) で作成される問題を修正しました。値はスケール `N` で計算されていた一方、カラムオブジェクトはスケール 3 として宣言されていたため、型と構造的に整合しない状態になっていました。[#108551](https://github.com/ClickHouse/ClickHouse/pull/108551) ([groeneai](https://github.com/groeneai))。
* 集合演算 (`INTERSECT` / `UNION ALL` / `EXCEPT`) で相関サブクエリを使用する分岐を結合し、かつ `correlated_subqueries_default_join_kind = 'left'` が設定されている場合に発生する `LOGICAL_ERROR` ("Trying to extract chunk from ChunkBuffer before all inputs are finished") を修正しました。[#108554](https://github.com/ClickHouse/ClickHouse/pull/108554) ([groeneai](https://github.com/groeneai))。
* `changeYear`、`changeMonth`、`changeDay`、`changeHour`、`changeMinute`、`changeSecond` における `DateTime64` の不具合を修正しました。ナノ秒精度 (スケール 9) の入力で `DECIMAL_OVERFLOW` がスローされなくなり、エポック以前の 1 秒未満の端数を含む入力に対しても正しい暦上の秒が返されるようになりました。[#108681](https://github.com/ClickHouse/ClickHouse/pull/108681) ([takumihara](https://github.com/takumihara))。
* 非常に大きな正規表現 (例えば数十万個のワイルドカードを含む `LIKE` や `match` のパターン) をコンパイルする際に、サーバーログが過剰に出力されたり、エラーメッセージが過度に長くなったりしないようにしました。このようなパターンは、明確な `CANNOT_COMPILE_REGEXP` エラーで失敗するようになりました。[#108821](https://github.com/ClickHouse/ClickHouse/pull/108821) ([Algunenano](https://github.com/Algunenano))。
* ソースとターゲットの物理型が同じ場合に、`reinterpret(x, 'Decimal128(scale)')` (および `Decimal32`/`Decimal64`/`Decimal256`/`DateTime64` をターゲットとする場合) が、要求されたターゲットのスケールではなくソースのスケールを内部スケールとして持つ結果カラムを生成する問題を修正しました。値自体は正しかったものの、カラムオブジェクトが宣言された型と構造的に整合しない状態になっていました。[#108878](https://github.com/ClickHouse/ClickHouse/pull/108878) ([groeneai](https://github.com/groeneai))。
* 同期ずれやファジングが発生した接続において、範囲外のプロトコルパケットタイプを文字列化する際 (例: "Unexpected packet from server" / "Received ... packet" エラーメッセージ内) に発生する未定義動作を修正しました。[#108885](https://github.com/ClickHouse/ClickHouse/pull/108885) ([groeneai](https://github.com/groeneai))。
* `DateTime64(N)` に対する `changeYear`/`changeMonth`/`changeDay`/`changeHour`/`changeMinute`/`changeSecond` が、結果カラムを `N` ではなくハードコードされたデフォルトのスケール 3 で構築していた問題と、`DateTime64` に対する `timeSlots` が、宣言された戻り値の型においてオプションの `Size` 引数のスケールを無視していた問題を修正しました。いずれも物理的なスケールが宣言された型と一致しないカラムを生成していたため、その結果を `arrayPushBack`/`arrayPushFront`/`arrayConcat` に渡すと `LOGICAL_ERROR` (`writeSlice expects same column types`) が発生していました。また、`Size` に最大のスケールを指定した `timeSlots` は誤ったタイムスタンプを返していました。[#108994](https://github.com/ClickHouse/ClickHouse/pull/108994) ([groeneai](https://github.com/groeneai))。
* ProfileEvents のインクリメントが単調増加にならない問題を修正しました。[#109180](https://github.com/ClickHouse/ClickHouse/pull/109180) ([azat](https://github.com/azat))。
* 指数の絶対値が `Int32` をオーバーフローする `SAMPLE` 比率 (例: `SAMPLE 1e-3000000000`) が、警告なしに `SAMPLE 1` として扱われていた問題を修正しました。[#109197](https://github.com/ClickHouse/ClickHouse/pull/109197) ([Algunenano](https://github.com/Algunenano))。
* `toUTCTimestamp`/`fromUTCTimestamp` (およびそのエイリアスである `to_utc_timestamp`/`from_utc_timestamp`) と `toTime64` の `DateTime64` 処理パスにおける 2 つのバグを修正しました。1 つ目は、`Int64` の境界付近で発生する符号付き整数オーバーフローです (現在は `Int128` で計算し、表現可能な範囲にクランプします)。2 つ目は、タイムゾーンオフセットの境界付近で負の小数値に対して誤った結果が返される問題です。秒への分割がゼロ方向に切り捨てられていたため、`timezoneOffset()` が次の秒を参照してしまい、DST/オフセット変更の前後を取り違える可能性がありました。[#109738](https://github.com/ClickHouse/ClickHouse/pull/109738) ([groeneai](https://github.com/groeneai))。
* row policy のフィルタ式で `arrayJoin` を使用した場合に発生する論理エラー (`column->size() == num_rows`) を修正しました。今後、このようなフィルタは拒否されます。[#109753](https://github.com/ClickHouse/ClickHouse/pull/109753) ([Algunenano](https://github.com/Algunenano))。
* 型のネストが内部の深さ制限を超えた場合に、`generateRandomStructure()` が 2 つのデータ型が連結された無効な構造文字列 (例: `Decimal32(7)IPv4`) を生成することがあり、結果を解析できなくなっていた問題を修正しました。[#109928](https://github.com/ClickHouse/ClickHouse/pull/109928) ([groeneai](https://github.com/groeneai))。
* `accurateCastOrDefault` におけるクエリ設定の伝播と、`Dynamic` および `Variant` でエンコードされた元の `NULL` の保持に関する問題を修正しました。[#109946](https://github.com/ClickHouse/ClickHouse/pull/109946) ([Avogar](https://github.com/Avogar))。[#114912](https://github.com/ClickHouse/ClickHouse/pull/114912) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `max_bytes_in_distinct` と `max_bytes_in_set` を修正しました。文字列キーは制限チェックの対象外であるアリーナに格納されていたため、文字列キーに対する DISTINCT / IN が、キーのペイロード全体の分だけ (キー長に応じて際限なく) バイト制限を超えてメモリを保持する可能性がありました。現在はドキュメントの記載どおり、アリーナも制限の計算に含まれます。そのため、バイト制限に近い文字列キーを扱うクエリは、以前より早く制限に達する場合があります (これは正しい動作です)。[#110120](https://github.com/ClickHouse/ClickHouse/pull/110120) ([skuznetsov-clickhouse](https://github.com/skuznetsov-clickhouse))。
* 内部次元のサイズがゼロの Npy ファイルを読み取る際に、マテリアライズされた行と、最適化の有無にかかわらず `count()` の結果が一致するよう修正しました。[#110146](https://github.com/ClickHouse/ClickHouse/pull/110146) ([qiuyanjun888](https://github.com/qiuyanjun888))。
* `indexHint`/`ignore`/`isZeroOrNull` 関数に、型が `Nothing` に解決される引数が渡された場合 (例: `indexHint(assumeNotNull(materialize(NULL)))` のような式の内部) に発生する論理エラー (debug/sanitizer ビルドではサーバーがアボートする) を修正しました。[#110192](https://github.com/ClickHouse/ClickHouse/pull/110192) ([groeneai](https://github.com/groeneai))。
* `plain_rewritable` ディスク上で、既存のパスが異なるサイズの内容で書き換えられた後にファイルを読み取ると失敗する問題を修正しました。インメモリのメタデータが古いファイルサイズを保持し続けるため、読み取りが `UNEXPECTED_END_OF_FILE` で失敗する可能性がありました。[#110304](https://github.com/ClickHouse/ClickHouse/pull/110304) ([thevar1able](https://github.com/thevar1able)).
* 計算されたフェッチ件数が切り捨てによりゼロになり、ANN 検索結果が空になるのを防ぐため、1.0 未満の `vector_search_index_fetch_multiplier` の値を拒否するようにしました。[#110452](https://github.com/ClickHouse/ClickHouse/pull/110452) ([tamish560](https://github.com/tamish560)).
* `initializeAggregation('sumState', 0::UInt64)` のような数値キャストを含む式を持つ値を挿入する際に、`Cannot parse string ... as UInt64 ... While executing ValuesBlockInputFormat` エラーが散発的に発生することがある問題を修正しました。[#110637](https://github.com/ClickHouse/ClickHouse/pull/110637) ([groeneai](https://github.com/groeneai)).
* `readWKT` が先頭に空白文字を含む WKT 文字列 (例: `readWKT(' POINT(1 2)')`) を拒否していた問題を修正しました。こうした文字列は、型付きの `readWKTPoint`/`readWKTPolygon`/... リーダーや WKT の文法では受け入れられます。[#110706](https://github.com/ClickHouse/ClickHouse/pull/110706) ([groeneai](https://github.com/groeneai)).
* 長さゼロのインターバルを持つクォータ (例: CREATE QUOTA q FOR INTERVAL 0 SECOND MAX queries = 1000) が消費された際に、サーバーがクラッシュする (整数のゼロ除算) 問題を修正しました。クォータのインターバル期間が正の値でない場合は、クォータ作成時に拒否されるようになりました。[#110846](https://github.com/ClickHouse/ClickHouse/pull/110846) ([PedroTadim](https://github.com/PedroTadim)).
* FIPS ビルドで Ed25519 SSH 鍵 (`CREATE USER ... IDENTIFIED WITH ssh_key ... TYPE 'ssh-ed25519'`、または `users.xml` 内の同種の鍵) を使用するとクラッシュする問題を修正しました。Ed25519 は FIPS 承認済みではないため、このような鍵はわかりやすい `LIBSSH_ERROR` エラーで拒否されるようになりました。[#110891](https://github.com/ClickHouse/ClickHouse/pull/110891) ([thevar1able](https://github.com/thevar1able)).
* `QBit` に対する転置距離関数 (`cosineDistanceTransposed`、`L2DistanceTransposed`、`dotProductTransposed`) は、`precision` 個のビットプレーンに切り詰められた値を、粗いセルの下端 (切り捨てたビットをゼロで埋めたもの) に復元する代わりに、有界な低精度の復元を用いるようになりました。ゼロ埋めでは復元されたすべての値がゼロ寄りに偏り、低精度では退化していました。たとえば `QBit(BFloat16)` の精度 1 では符号ビットしか残らないため、すべての値が `±0.0` に復元され、距離はどの行でも同じ定数となり、順位付けに使える情報が一切ありませんでした。現在は、どのビットが切り捨てられるかに応じて復元方法が決まります。生の `Int8` コードはセルの中心に復元されます (`...TransposedQuantized` パスですでに使われていた `Lloyd-Max` の復元と同じです) 。精度 1 の浮動小数点値は適切な符号量子化となります。指数部をすべて保持し、仮数部のビットのみを切り捨てる浮動小数点値は、自身のバイネード内の有界な中点に復元されます (ただし、真のゼロや `±0.0` は厳密なゼロのまま維持され、非有限のセルは除外されるため、`±inf` も厳密に無限大のままです。曖昧な `NaN` セルについては後述の注記を参照してください) 。さらに、指数部のビットが切り詰められている段階では有界な下端が維持されるため、`precision` を小さくしても値の大きさが桁違いに膨れ上がることはなく、精度と引き換えに速度を得られます。フル精度の結果は変わりません。[#110911](https://github.com/ClickHouse/ClickHouse/pull/110911) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* 型ツリーで宣言されたカラム数がストライプフッターのカラムエンコーディング数を上回る破損した ORC ファイルに対してスキーマ推論を行うと、ネイティブ ORC リーダーで範囲外読み取りが発生する問題を修正しました。debug/sanitizer ビルドでサーバーが異常終了する代わりに、`CANNOT_EXTRACT_TABLE_STRUCTURE` で拒否されるようになりました。[#110967](https://github.com/ClickHouse/ClickHouse/pull/110967) ([groeneai](https://github.com/groeneai)).
* 各 SSH 鍵が `max_authentication_methods_per_user` の上限に個別にカウントされるようになり、構文に関係なく上限が一貫して適用されるようになりました。以前は、単一の `ssh_key` メソッド内の複数の鍵は 1 つとしてカウントされていました。[#111181](https://github.com/ClickHouse/ClickHouse/pull/111181) ([TheMC47](https://github.com/TheMC47))。
* Iceberg REST カタログで認証情報が古くなっている場合、`UNKNOWN_TABLE` を暗黙的に報告するのではなく、根本原因となったエラーとともに報告するようになりました。[#111379](https://github.com/ClickHouse/ClickHouse/pull/111379) ([alesapin](https://github.com/alesapin))。
* `POINT M EMPTY` のような次元タグ付きの空のポイントに対して、`readWKTPoint`/`readWKT` が未初期化の座標 (スカラー) または前の行の座標 (ベクトル化) を返す問題を修正しました。このような入力は、`POINT EMPTY` と同様に `CANNOT_PARSE_TEXT` で拒否されるようになりました。[#111517](https://github.com/ClickHouse/ClickHouse/pull/111517) ([groeneai](https://github.com/groeneai))。
* `minmax` 統計の作成時に、例外をスローするのではなく警告を出すようになりました。[#111785](https://github.com/ClickHouse/ClickHouse/pull/111785) ([hanfei1991](https://github.com/hanfei1991))。
* 退化した確率 `0` および `1` の場合でも、試行回数に関係なく `randBinomial` を使用できるようにしました。[#112021](https://github.com/ClickHouse/ClickHouse/pull/112021) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* `system.s3_queue_settings` が `bucketing_mode`、`partitioning_mode`、`partition_regex`、`partition_component` に誤った値を表示する問題を修正しました。[#112300](https://github.com/ClickHouse/ClickHouse/pull/112300) ([bharatnc](https://github.com/bharatnc))。
* PromQL クエリのエラー発生位置を正しく報告するようにしました。[#112494](https://github.com/ClickHouse/ClickHouse/pull/112494) ([fallintoplace](https://github.com/fallintoplace))。
* `SYSTEM DISABLE FAILPOINT` で存在しないフェイルポイント名を指定した場合、`SYSTEM ENABLE FAILPOINT` と同様に `BAD_ARGUMENTS` を発生させて拒否するようになりました。以前は、名前を誤入力しても成功と報告され、意図したフェイルポイントは有効なままで、何も無効化されていないことに気付く手段がありませんでした。[#112680](https://github.com/ClickHouse/ClickHouse/pull/112680) ([groeneai](https://github.com/groeneai))。
* 削除後に再追加されたカラムの `Nested` 要素サブカラムを、誤った型で読み取る問題を修正しました。このようなサブカラムをその親カラムと一緒に SELECT すると、ブロック上は要素の型が宣言されたまま、サブカラムの位置に要素全体が返されていました。その結果、リリースビルドでは不定な値が返され、デバッグビルドおよびサニタイザービルドでは論理エラーが発生していました。[#112769](https://github.com/ClickHouse/ClickHouse/pull/112769) ([groeneai](https://github.com/groeneai))。
* 単位が重複している、または大きい単位から順に並んでいない PromQL の期間指定を拒否するようにしました。[#112954](https://github.com/ClickHouse/ClickHouse/pull/112954) ([fallintoplace](https://github.com/fallintoplace))。
* `replaceRegexpOne`/`replaceRegexpAll` で、置換文字列がマッチに関与しなかったキャプチャグループを参照する場合 (例: `replaceRegexpAll('abc', '(a)|(b)', '\\2')`) に発生する未定義動作 (`memcpy` への null ポインタの受け渡し) を修正しました。[#113012](https://github.com/ClickHouse/ClickHouse/pull/113012) ([alexey-milovidov](https://github.com/alexey-milovidov))。
* ClickHouse 26.3 で `unicode_word` トークナイザーを使用して作成したテキスト索引を、それ以降のバージョンで読み込めない非互換性を修正しました [#113061](https://github.com/ClickHouse/ClickHouse/pull/113061) ([rschu1ze](https://github.com/rschu1ze))。
* PromQL の文字列エスケープで、無効な Unicode サロゲートコードポイントを拒否するようにしました。[#113203](https://github.com/ClickHouse/ClickHouse/pull/113203) ([fallintoplace](https://github.com/fallintoplace))。
* PromQL 文字列で、区切り文字をまたぐ無効なエスケープを拒否するようにしました。[#113587](https://github.com/ClickHouse/ClickHouse/pull/113587) ([fallintoplace](https://github.com/fallintoplace))。
* ウィンドウフレーム上で `theilsU` を使用した際、最初の引数がフレーム内で定数の場合に 0 ではなく不定の値が返される問題を修正しました。[#113691](https://github.com/ClickHouse/ClickHouse/pull/113691) ([alexey-milovidov](https://github.com/alexey-milovidov)).
* Native プロトコル経由で受信した、`Replicated` 方式でシリアル化された不正な形式のカラムの一部について、報告されるエラーコードを修正しました。これらは `LOGICAL_ERROR` (デバッグビルドおよびサニタイザービルドではサーバーが異常終了していました) ではなく、`INCORRECT_DATA` として拒否されるようになりました。[#114186](https://github.com/ClickHouse/ClickHouse/pull/114186) ([Avogar](https://github.com/Avogar)).
* スケールの小さい `Decimal64` をリスケールする際に `Int64` がオーバーフローすると、誤った (多くの場合は符号が反転した) `Time64` リテラルや `IN` リスト定数が生成される問題を修正しました。このような変換では、`DateTime64` の分岐や明示的な `CAST` と同様に `DECIMAL_OVERFLOW` が報告されるようになりました。[#114546](https://github.com/ClickHouse/ClickHouse/pull/114546) ([groeneai](https://github.com/groeneai)).
* PromQL セレクターで引用符付きのメトリクス名およびラベル名をサポートしました。[#114551](https://github.com/ClickHouse/ClickHouse/pull/114551) ([fallintoplace](https://github.com/fallintoplace)).
* attach スレッド経由で実行された起動処理が失敗した後、`ReplicatedMergeTree` テーブルがいつまでも読み取り専用のままになる問題を修正しました。再起動のリトライが正しくスケジュールされるようになり、自動復旧とそれに伴うセッションチェックが再び機能するようになりました。[#114802](https://github.com/ClickHouse/ClickHouse/pull/114802) ([azat](https://github.com/azat)).
* `timeSeriesRange` および `timeSeriesFromGrid` では、開始/終了タイムスタンプが符号なしの値として読み取られていたため、1970 年より前のタイムスタンプに対して誤って `DECIMAL_OVERFLOW` がスローされていました。また、`DateTime`/`UInt32` のタイムスタンプでは、ステップが警告なく下位 32 ビットに切り詰められていました。現在はすべての計算が `Int64` で行われます。[#114815](https://github.com/ClickHouse/ClickHouse/pull/114815) ([vitlibar](https://github.com/vitlibar)).
* クエリが `MEMORY_LIMIT_EXCEEDED` で失敗した後に非同期挿入で例外が発生する可能性がある問題を修正しました。また、`async_insert_queue_flush_on_shutdown` を修正し、サーバーのシャットダウン時にキュー内の挿入処理が flush されるようにしました。[#114839](https://github.com/ClickHouse/ClickHouse/pull/114839) ([azat](https://github.com/azat)).
* `sequenceMatch`、`sequenceCount`、`sequenceMatchEvents` のパターンにイベント番号 `0` が含まれる場合 (例: `sequenceMatch('(?0)')`) に、`out_of_range` 例外が内部エラー `Code: 1001` として発生する問題を修正しました。このようなパターンは `BAD_ARGUMENTS` で拒否されるようになりました。また、`sequenceMatch('(?1)(?t>+)(?2)')` のように符号のみを含む時間条件は、これまで警告なく `(?t>0)` として扱われていましたが、`SYNTAX_ERROR` で拒否されるようになりました。[#115056](https://github.com/ClickHouse/ClickHouse/pull/115056) ([groeneai](https://github.com/groeneai)).
* 座標が `Float64` でない場合に、`geoToH3` のエラーメッセージで示される引数の位置と型が誤っていた問題を修正しました。デフォルトの `geotoh3_argument_order = 'lat_lon'` では、メッセージがもう一方の引数を指し、その引数の型を表示していました。[#115503](https://github.com/ClickHouse/ClickHouse/pull/115503) ([groeneai](https://github.com/groeneai)).
* text、tokenbf\_v1、ngrambf\_v1 インデックスにおける不正なバックスラッシュのエスケープ文字を修正しました。[#115634](https://github.com/ClickHouse/ClickHouse/pull/115634) ([ahmadov](https://github.com/ahmadov)).
* `TZ` 環境変数が空の場合にサーバーが起動できない問題を修正しました。[#68921](https://github.com/ClickHouse/ClickHouse/pull/68921) ([ardenwick](https://github.com/ardenwick)).
