メインコンテンツへスキップ
メインコンテンツへスキップ

v25.8 クラウド版変更履歴

後方互換性を損なう変更

JSON とデータ形式の変更

ストレージとパーティション分割

  • hive パーティション方式での書き込みをサポートし、読み取り実装をリファクタリングしました(hive パーティション列は仮想列ではなくなりました)。#76802Arthur Passos)。
  • MergeTree の設定 write_marks_for_substreams_in_compact_parts をデフォルトで有効化しました。これにより、新しく作成された Compact パーツからのサブカラム読み取り性能が大幅に向上します。バージョン 25.5 未満のサーバーでは、新しい Compact パーツを読み取ることはできません。#84171Pavel Kruglov)。
  • SummingMergeTree において、合計対象として明示的に指定されたカラムを含む RENAME COLUMN および DROP COLUMN を禁止しました。#81836 をクローズします。#82821Alexey Milovidov)。

関数の機能拡張

  • quoting_character が想定外に検出された場合の動作を制御する新しい引数 unexpected_quoting_character_strategy を、関数 extractKeyValuePairs に追加しました。詳細については extractKeyValuePairs のドキュメントを参照してください。#80657Arthur Passos)。
  • 以前は、関数 countMatches は、パターンが空のマッチを許可している場合でも、最初の空のマッチが発生した時点でカウントを停止していました。この問題を解消するため、countMatches は空のマッチが発生した場合に 1 文字だけ進めて処理を継続するようになりました。従来の動作を維持したいユーザーは、設定 count_matches_stop_at_empty_match を有効にできます。#81676Elmi Ahmadov)。

データ型の改善

  • Decimal から Float32 への変換精度を向上しました。Decimal から BFloat16 への変換を実装しました。これにより #82660 がクローズされました。#82823Alexey Milovidov)。

パフォーマンスとリソース管理

  • 以前は、BACKUP クエリ、マージ、およびミューテーションは、ローカルトラフィック(max_local_read_bandwidth_for_server および max_local_write_bandwidth_for_server)とリモートトラフィック(max_remote_read_network_bandwidth_for_server および max_remote_write_network_bandwidth_for_server)向けのサーバー全体スロットラーを使用せず、専用のサーバー設定(max_backup_bandwidth_for_servermax_mutations_bandwidth_for_servermax_merges_bandwidth_for_server)によってのみスロットリングされていました。現在では、両方の種類のスロットラーを同時に使用します。 #81753 (Sergei Trifonov).
  • 新しい設定 cluster_function_process_archive_on_multiple_nodes を追加しました。これは、true(デフォルト)に設定すると、クラスター関数でアーカイブを処理する際のパフォーマンスを向上させます。以前のバージョンでアーカイブ付きのクラスター関数を使用している場合、25.7+ へのアップグレード時の互換性を確保し、エラーを回避するためには false に設定しておく必要があります。 #82355 (Kseniia Sumarokova).
  • 以前の concurrent_threads_scheduler のデフォルト値は round_robin でしたが、多数のシングルスレッドクエリ(例:INSERT)が存在する場合に不公平であることが判明しました。この変更により、より安全な代替である fair_round_robin スケジューラがデフォルトになります。 #84747 (Sergei Trifonov).
  • 遅延マテリアライゼーションは、アナライザーなしで運用する場合にメンテナンスが必要となり、いくつかの問題が発生し得る(例えば、条件で indexHint() を使用する場合)ことを避けるため、アナライザー使用時にのみ有効化されます。 #83791 (Igor Nikonov).

スキーマと SQL 構文

  • 挿入可能なカラムを持たないテーブルの作成を禁止しました。#81835 (Pervakov Grigorii).
  • デフォルト式内でドットを含む識別子について、それらが複合識別子として解析されるのを防ぐため、識別子をバッククォートで囲むことを必須としました。#83162 (Pervakov Grigorii).
  • PostgreSQL 形式の heredoc 構文 $tag$ string contents... $tag$(ドル引用文字列リテラルとも呼ばれます)をサポートしました。以前のバージョンではタグに対する制約がより緩く、句読点や空白を含む任意の文字を使用できました。これは、先頭をドル記号にできる識別子との間に構文解析上のあいまいさを生じさせます。一方で、PostgreSQL ではタグに使用できるのは単語文字のみです。この問題を解決するため、heredoc のタグとして使用できる文字を単語文字のみに制限しました。#84731 をクローズしました。#84846 (Alexey Milovidov).

セキュリティと権限

  • SYSTEM RESTART REPLICAS は、SHOW TABLES 権限を持つデータベース内のレプリカのみを再起動します。以前は、このクエリは、そのデータベースへのアクセス権がない場合でも、Lazy データベース内のテーブルが同時に削除されている間に、それらのテーブルを起動していました。#83321 (Alexey Milovidov).
  • 関数 azureBlobStoragedeltaLakeAzureicebergAzure は、AZURE 権限を正しく検証するように更新されました。すべてのクラスタ変種関数(-Cluster 関数)は、それぞれに対応する非クラスタ版の関数に対して権限を検証するようになりました。権限エラーを防ぐために、-Cluster 関数を実行するユーザーに、適切な権限(例: GRANT S3 ON *.* TO user)が付与されていることを確認してください。さらに、icebergLocal および deltaLakeLocal 関数は、FILE 権限チェックを行うようになりました。#84938 ([Nikita Mikhaylov](https://github.com/nikitamikhaylov

新機能

データ型

  • 新しいデータ型 Time ([H]HH:MM:SS)Time64 ([H]HH:MM:SS[.fractional]) を追加し、いくつかの基本的なキャスト関数と他のデータ型との相互変換のための関数を追加しました。レガシー関数 ToTime との互換性を保つための設定も追加しました。 #81217 (Yarik Briukhovetskyi).

関数

システムテーブル

Iceberg と DeltaLake

  • Iceberg のスキーマ進化で複合型をサポート。#73714 (scanhex12).
  • INSERT クエリ向けの Iceberg 書き込みを導入。#82692 (scanhex12).
  • Iceberg テーブルエンジンでの positional deletes をサポート。#83094 (Daniil Ivanik).
  • フィールド ID に基づいて Iceberg のデータファイルを読み取り。#83065 をクローズ。#83653 (scanhex12).
  • CREATE クエリ向けの Iceberg 書き込みをサポート。#83927 をクローズ。#83983 (scanhex12).
  • Glue catalog への書き込みをサポート。#84136 (scanhex12).
  • Iceberg REST catalog への書き込みをサポート。#84684 (scanhex12).
  • すべての Iceberg positional delete ファイルをデータファイルにマージ。これにより、Iceberg ストレージ内の Parquet ファイルの数とサイズが削減される。構文: OPTIMIZE TABLE table_name#85250 (scanhex12).
  • Iceberg に対する DROP TABLE をサポート (REST/Glue catalog からの削除 + テーブルに関するメタデータの削除)。#85395 (scanhex12).
  • merge-on-read フォーマットの Iceberg に対する ALTER DELETE mutation をサポート。#85549 (scanhex12).
  • DeltaLake への書き込みをサポート。#79603 をクローズ。#85564 (Kseniia Sumarokova).
  • min-max プルーニングのため、Iceberg のメタデータ (manifest entries) に、より多くの統計情報 (カラムサイズ、下限値および上限値) を書き込み。#85746 (scanhex12).
  • Iceberg において、単純型に対する add/drop/modify column をサポート。#85769 (scanhex12).

MergeTree とストレージ

  • すべてのテーブルで、Merge 型テーブルだけでなく _table 仮想列がサポートされるようになりました。#63665 (Xiaozhe Yu)。
  • Float32 および Float64 型のカラム向けに、非可逆だが誤差範囲が保証された圧縮コーデックとして SZ3 を追加しました。#67161 (scanhex12)。
  • MergeTree 系テーブルに対して lightweight update のサポートを追加しました。lightweight update は新しい構文 UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition> で使用できます。さらに、lightweight_delete_mode = 'lightweight_update' を設定することで有効化できる、lightweight update を用いた lightweight delete の実装を追加しました。#82004 (Anton Popov)。
  • MergeTree 系テーブルで _part_granule_offset 仮想列をサポートしました。この列は、各行が属するデータパート内でのグラニュール/マークの 0 始まりのインデックスを示します。これは #79572 に対応するものです。#82341 (Amos Bird)。

プロトコルとクライアントのサポート

  • arrowflight テーブルエンジンを追加し、ArrowFlight RPC プロトコルをサポートしました。#74184zakr600)。
  • PostgreSQL プロトコルの COPY コマンドをサポートしました。#74344scanhex12)。
  • MySQL プロトコルを利用する C# クライアントに対応しました。これにより #83992 がクローズされます。#84397scanhex12)。
  • mysql_port および postgresql_port に対して安全な接続を必須にしました。#82962Shaohua Wang)。

SQL とクエリの機能

  • DESCRIBE (SELECT …) に加えて DESCRIBE SELECT がサポートされました。 #82947 (Yarik Briukhovetskyi).
  • USE DATABASE {name} 構文がサポートされました。 #81307 (Yarik Briukhovetskyi).
  • 並列レプリカでプロジェクションから読み取れるようになりました。プロジェクションのサポートを有効にするかどうかを制御する新しい設定 parallel_replicas_support_projection が追加されました。実装を簡素化するため、プロジェクションのサポートは parallel_replicas_local_plan が有効な場合にのみ有効になります。 #82807 (zoomxi).

フォーマット

  • format_schema の参照元を定義する format_schema_source 設定を追加しました。 #80874 (Tuan Pham Anh)。
  • 新しい出力フォーマットとして Hash を追加しました。結果のすべてのカラムおよび行を対象に単一のハッシュ値を計算します。これは、たとえばデータ転送がボトルネックとなるユースケースにおいて、結果の「フィンガープリント」を計算するのに有用です。例: SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashe5f9e676db098fdb9530d2059d8c23ef を返します。 #84607 (Robert Schulze)。

サーバー構成とワークロード管理

  • サーバー設定 cpu_slot_preemption は、ワークロードに対して先取り型の CPU スケジューリングを有効化し、ワークロード間での CPU 時間の max-min フェアな割り当てを保証します。CPU スロットリング用の新しいワークロード設定が追加されました: max_cpusmax_cpu_sharemax_burst_cpu_seconds#80879Sergei Trifonov)。
  • ワークロード設定 max_waiting_queries がサポートされるようになりました。クエリキューのサイズを制限するために使用できます。制限に達した場合、それ以降のすべてのクエリは SERVER_OVERLOADED エラーで終了します。#81250Oleg Doronin)。
  • 設定されたクエリ数または時間しきい値に達した後に TCP 接続を切断します。#68000 を解決します。#81472Kenny Sun)。

クラウドストレージ

  • client_idtenant_id を用いて認証するために、AzureBlobStorageextra_credentials を追加。 #84235 (Pablo Marcos)

Keeper

実験的機能

テーブルエンジンとテーブル関数

テキストインデックスの改善

  • テキストインデックスを検索するための汎用ツールとして、関数 searchAny および searchAll を追加しました。 #80641 (Elmi Ahmadov).
  • テキストインデックスで string トークナイザーをサポートしました。 #81752 (Elmi Ahmadov).
  • text インデックスのデフォルトのインデックス粒度の値を 64 に変更しました。これにより、社内ベンチマークにおける平均的なテストクエリの想定パフォーマンスが向上します。 #82162 (Jimmy Aguilar Mena).
  • 256 ビットのビットマップは、ある状態からの遷移ラベルを順序付きで保持しますが、遷移先の状態はハッシュテーブルに現れる順序でディスク上に保存されます。そのため、ディスクから読み取る際に、あるラベルが誤った次の状態を指してしまう可能性がありました。 #82783 (Elmi Ahmadov).
  • 現在、FST ツリーは非圧縮のままディスクに保存されています。これにより、ディスクへの書き込みおよびディスクからの読み取りの両方で、パフォーマンスの低下や I/O 帯域幅の増加につながる可能性があります。 #83093 (Elmi Ahmadov).

機能成熟度の更新

パフォーマンスの向上

クエリ実行と集約

  • -If 集約関数コンビネータに対する単純な最適化を行いました。#78454 (李扬).
  • メモリ効率の高い集約中に、一部のバケットを元の順序とは異なる順序で送信できるようにする新しいロジックを追加しました(設定 enable_producing_buckets_out_of_order_in_aggregation によって制御され、デフォルトで有効)。一部の集約バケットのマージに他よりも大幅に時間がかかる場合に、イニシエーターがその間により高いバケット ID のバケットをマージできるようにすることで、パフォーマンスを向上させます。デメリットは、メモリ使用量が増加する可能性があることですが(大きくはならないはずです)。#80179 (Nikita Taranov).
  • TOTALS ステップ以降のパイプラインをマルチスレッド化しました。#80331 (UnamedRus).
  • 集約クエリに、NOT NULL 列に対する単一の COUNT() 関数のみが含まれる場合、ハッシュテーブル探索中に集約ロジックを完全にインライン展開します。これにより、集約状態の割り当ておよび維持が不要となり、メモリ使用量と CPU オーバーヘッドを大幅に削減します。これは #81982 を部分的に解決します。#82104 (Amos Bird).
  • 複数の文字列または数値列で GROUP BY を行う場合に、シリアライズされたキーを列指向で計算するようにしました。#83884 (李扬).
  • -If コンビネータ向けに addManyDefaults を実装しました。#83870 (Raúl Marín).

JOIN の最適化

  • 新しい設定 min_joined_block_size_rowsmin_joined_block_size_bytes に対応、デフォルトは 65409)を追加し、JOIN の入力および出力ブロックに対する最小ブロックサイズ(行数)を制御できるようにしました(JOIN アルゴリズムが対応している場合)。小さなブロックはまとめられます。#81886Nikita Taranov)。
  • HashJoin の性能を、キー列が 1 列のみという典型的なケースにおいてハッシュマップに対する余分なループを削除することで最適化しました。また、null_map および join_mask が常に true/false となる場合には、それらのチェックも除去しました。#82308Nikita Taranov)。
  • #82308null_mapJoinMask の最適化を、複数の論理和条件(disjunct)を含む JOIN のケースにも適用しました。あわせて、KnownRowsHolder データ構造も最適化しました。#83041Nikita Taranov)。
  • フラグへのアクセスごとにハッシュ計算を行うことを避けるため、JOIN フラグには単純な std::vector<std::atomic_bool> を使用するようにしました。#83043Nikita Taranov)。
  • max_joined_block_rows をハッシュ JOIN のメインループの外で処理するようにしました。ALL JOIN においてわずかに性能が向上します。#83216Nikolai Kochetov)。
  • HashJoinlazy 出力モードを使用している場合、結果列のメモリを事前に確保しないようにしました。これは特にマッチ件数が少ない場合に非効率でした。さらに、JOIN 完了後にはマッチ件数を正確に把握できるため、より正確に事前確保できます。#83304Nikita Taranov)。
  • 右側が JOIN キー列によって関数的に決定される(すべての行が一意な JOIN キー値を持つ)場合、すべての LEFT/INNER JOIN は自動的に RightAny に変換されます。#84010Nikita Taranov)。
  • Join モードでのパッチパーツ適用処理のパフォーマンスを改善しました。#85040Anton Popov)。

分散クエリの改善

  • ブロックの圧縮/伸張およびシリアル化/逆シリアル化を、ネットワーク接続に結びついた単一スレッドではなく、パイプラインスレッドにオフロードできるオプションを追加しました。enable_parallel_blocks_marshalling 設定で制御します。これにより、イニシエーターとリモートノード間で大量のデータを転送する分散クエリが高速化されます。#78694Nikita Taranov)。
  • 各シャード上で INSERT SELECT を独立して実行するモードで、分散並列 INSERT SELECT をデフォルトで有効化しました。parallel_distributed_insert_select 設定を参照してください。#80425Igor Nikonov)。
  • ネイティブプロトコルでログとプロファイルイベントを圧縮するようにしました。100 以上のレプリカを持つクラスタでは、非圧縮のプロファイルイベントが 1〜10 MB/秒に達し、低速なインターネット接続ではプログレスバーの更新が遅くなります。これにより #82533 が解決されます。#82535Alexey Milovidov)。
  • 各シャード上で INSERT SELECT を独立して実行するモードで、分散並列 INSERT SELECT をデフォルトで有効化しました。parallel_distributed_insert_select 設定を参照してください。#83040Igor Nikonov)。
  • 並列レプリカに対する最小タスクサイズの計算を修正しました。#84752Nikita Taranov)。

インデックスの改善

  • ベクター類似性インデックスを利用したベクター検索クエリが、ストレージ読み取りの削減と CPU 使用率の低減により、より低いレイテンシで完了するようになりました。 #79103 (Shankar Iyer).
  • 他のインデックスによるフィルタリング手法と整合させるため、filterPartsByQueryConditionCachemerge_tree_min_{rows,bytes}_for_seek の設定値を考慮するようにしました。 #80312 (李扬).
  • より細かい粒度の min-max インデックスを優先して処理するようにしました。 #75381 をクローズ。 #83798 (Maruth Goyal).
  • columnArray 型ではない場合の has([c1, c2, ...], column) のような条件でも、Bloom フィルターインデックスが使用されるようになりました。これにより、そのようなクエリのパフォーマンスが向上し、IN 演算子と同等の効率で実行できるようになります。 #83945 (Doron David).
  • インデックスをファイルサイズの昇順で処理するようにしました。最終的なインデックスの処理順では、(それぞれ単純さと選択性により)minmax インデックスとベクターインデックスを優先し、その後にサイズの小さいインデックスを処理します。minmax/ベクターインデックス内でも、より小さいインデックスが優先されます。 #84094 (Maruth Goyal).
  • これまで、テキストインデックスのデータは複数のセグメントに分割されていました(各セグメントサイズはデフォルトで 256 MiB)。これはテキストインデックス構築時のメモリ消費を抑える可能性がありますが、その一方で必要なディスク容量を増やし、クエリ応答時間を長くする原因となっていました。 #84590 (Elmi Ahmadov).

サブクエリの最適化

  • 等価クラスを使用して冗長な JOIN 操作を削除することで、相関サブクエリの生成されるプランを最適化します。すべての相関列に対して等価な式が存在する場合、query_plan_correlated_subqueries_use_substitution 設定が有効であれば CROSS JOIN は生成されません。 #82435 (Dmitry Novik)。
  • 関数 EXISTS の引数として相関サブクエリが使われている場合に、その相関サブクエリで必要な列のみを読み取ります。 #82443 (Dmitry Novik)。

Azure Blob Storage の改善

  • azureBlobStorage テーブルエンジンは、スロットリングを回避するために、可能な場合はマネージド ID 認証トークンをキャッシュして再利用するようになりました。#79860 (Nick Blakely).
  • Azure Blob Storage 向けの HTTP クライアントとして、curl クライアントを poco クライアントに置き換えました。これらのクライアントには、S3 の設定を反映した複数の設定を導入しました。Azure と S3 の両方に対して、より厳しめの接続タイムアウトを導入しました。Azure プロファイルのイベントおよびメトリクスの観測性を改善しました。新しいクライアントはデフォルトで有効になっており、Azure Blob Storage 上でのコールドクエリに対して大幅に優れたレイテンシを提供します。従来の Curl クライアントは、azure_sdk_use_native_client=false を設定することで再び使用することができます。#83294 (alesapin).

ストレージエンジンの改善

  • Redis および KeeperMap ストレージでのキーによるフィルタ処理を修正しました。 #81833 (Pervakov Grigorii).
  • ATTACH PARTITION によってすべてのキャッシュが削除されることがないようにしました。 #82377 (Alexey Milovidov).
  • 高い同時実行負荷時のロック競合を減らすため、ストレージスナップショットデータの作成中はロックを保持しないようにしました。 #83510 (Duc Canh Le).
  • 一時パーツの削除には時間がかかる場合があり(特に S3 使用時)、現在は MergeTreeBackgroundExecutor でグローバルロックを保持している間に実行しています。接続喪失によりすべてのテーブルを再起動する必要があり、バックグラウンドタスクの完了を待っていると、テーブルが 1 時間近く readonly モードのまま固まってしまうことがあります。しかし、cancel を呼び出すためにこのロックは不要であると考えられます。 #84311 (Alexander Tokmakov).

フォーマットの改善

  • 新しい Parquet リーダー実装。全体的に高速で、ページレベルのフィルタープッシュダウンおよび PREWHERE をサポートします。現在は実験的機能です。設定 input_format_parquet_use_native_reader_v3 を有効にすると利用できます。 #82789 (Michael Kolupaev).
  • 解析エラーが発生しない場合にシリアライザーを再利用することで、ProtobufSingle 入力フォーマットのパフォーマンスを改善しました。 #83613 (Eduard Karacharov).

データ型とシリアライゼーションの最適化

  • MergeTree の共有データに対する JSON 用の新しいシリアライゼーションを実装し、共有データからの JSON サブカラム読み取りのパフォーマンスを大幅に向上。#83777 (Pavel Kruglov)。
  • コードを簡素化することで文字列デシリアライゼーションを最適化し、#38564 をクローズ。#84561 (Alexey Milovidov)。

パイプラインおよび実行の改善

  • パイプライン構築中のポートヘッダーでのメモリコピーを最小化しました。元のPRheymindによるものです。#83381Raúl Marín)。
  • パイプライン構築のパフォーマンスを改善しました。#83631Raúl Marín)。
  • MergeTreeReadersChain::getSampleBlock を最適化しました。#83875Raúl Marín)。
  • 1 行だけを返す目的で定数をマテリアライズするケースにおいて、そのマテリアライズ処理を最適化しました。#85071Alexey Milovidov)。

メモリおよびリソースの最適化

  • パフォーマンスを向上させるために、いくつかの jemalloc 設定を調整しました。 #81807 (Antonio Andelic).
  • フォールスシェアリングを低減するため、ProfileEvents の Counter にアライメントを追加しました。 #82697 (Jiebin Sun).
  • CompressedReadBufferBase::readCompressedData における不要な memcpy 呼び出しを削減しました。 #83986 (Raúl Marín).

クエリのプランニングと分析

ロギングの改善

関数の最適化

  • 一時データを削除することで largestTriangleThreeBuckets を最適化しました。 #84479 (Alexey Milovidov)。
  • 多くの文字列処理関数の実装を最適化および簡素化しました。複数の関数について誤っていたドキュメントを修正しました。注意:String カラムおよび String カラムを含む複合型の byteSize の出力は、空文字列1つあたり 9 バイトから 8 バイトに変更されましたが、これは想定された動作です。 #85063 (Alexey Milovidov)。

Keeper の改善

データレイクの改善

  • delta-kernel-rs バックエンドによるファイルの並列処理性能を向上。 #85642 (Azat Khuzhin).

改善点

アクセス制御とセキュリティ

  • ソース用に新しいアクセス種別 READWRITE を 2 つ導入し、ソースに関連するそれまでのすべてのアクセス種別は非推奨となりました。以前は GRANT S3 ON *.* TO user でしたが、現在は GRANT READ, WRITE ON S3 TO user となります。これによりソースに対する READWRITE 権限を分離できるようになり、例えば GRANT READ ON * TO userGRANT WRITE ON S3 TO user のように付与できます。この機能は設定項目 access_control_improvements.enable_read_write_grants により制御され、デフォルトでは無効になっています。#73659pufit)。
  • CREATE USER クエリで、ユーザー名にパラメータを使用できるようにしました。#81387Diskein)。
  • コアダンプから機微なデータを除外します。AWS ライブラリ互換の AwsNodumpMemoryManager と、STL 互換の JemallocNodumpSTLAllocator の 2 つのアロケータを追加しました。どちらも Jemalloc アロケータのラッパーです。Jemalloc の extent hook と madvise を使用してメモリページを「ダンプしない」としてマークします。S3 資格情報、ユーザー資格情報、および一部のクエリデータに使用されます。#82441Miсhael Stetsyuk)。
  • 一時ユーザーによって作成されたビューは、実際のユーザー情報のコピーを保持するようになり、一時ユーザーが削除されても無効にならなくなりました。#84763pufit)。
  • 外部認証の forward_headers を、大文字・小文字を区別せずに照合するようにしました。#84737ingodwerust)。
  • system.grantsparameter カラムを追加し、GRANT READ/WRITE におけるソースタイプおよび GRANT TABLE ENGINE におけるテーブルエンジンを判別できるようにしました。#85643MikhailBurdukov)。

バックアップとリストア

データ整合性と検証

  • コミット直前に、パートに矛盾のない checksum.txt ファイルが存在することを検証します。 #76625 (Sema Checherinda).
  • 未完了のデータミューテーションの影響を現在受けているカラムを RENAME COLUMN でリネームしようとする ALTER ミューテーションの開始を禁止します。 #81823 (Mikhail Artemenko).
  • 今後はミューテーションのスナップショットは、可視なパートのスナップショットから構築されます。スナップショットで使用されるミューテーションカウンターも、含まれているミューテーションから再計算されます。 #82945 (Mikhail Artemenko).
  • パートのプレフィックスおよびサフィックスをパースし、さらに非定数カラムに対してカバー範囲を検証できるようにします。 #83377 (Mikhail Artemenko).

Iceberg テーブルエンジン

  • Iceberg テーブルエンジンで position delete をサポートしました。#80237 (YanghongZhong).
  • Iceberg 用の圧縮された metadata.json ファイルを ClickHouse がサポートするようになりました。#70874 を修正。#81451 (alesapin).
  • 複合型に対するフィールド ID 単位での Iceberg の読み取りを修正しました。#84821 (scanhex12).
  • pyiceberg で読み取ることができる Iceberg への書き込みをサポートしました。#84466 (scanhex12).
  • データレイクテーブルエンジンにスナップショットバージョンを追加しました。#84659 (Pete Hampton).
  • Iceberg で version-hint ファイルの書き込みをサポートしました。これにより #85097 が解決されました。#85130 (scanhex12).
  • iceberg_metadata_compression_method 設定を通じて、圧縮された .metadata.json ファイルをサポートしました。すべての ClickHouse の圧縮方式をサポートします。これにより #84895 が解決されました。#85196 (scanhex12).
  • Iceberg の positional delete ファイルに対してメモリ使用量を最適化しました。すべての delete ファイルデータをメモリにロードする代わりに、Parquet delete ファイルから現在の row-group のみを RAM に保持するようにしました。これにより、大きな positional delete ファイルを扱う際のメモリ消費が大幅に削減されます。#85329 (scanhex12).
  • 各データファイルごとにオブジェクトを明示的に保持することなく、Iceberg テーブルからオブジェクトを非同期にイテレートできるようにしました。#85369 (Daniil Ivanik).
  • Iceberg の equality delete をサポートしました。#85843 (Han Fei).

DeltaLake テーブルエンジン

  • DeltaLake テーブルエンジンを改善しました。delta-kernel-rs には ExpressionVisitor API があり、この PR で実装され、パーティション列の式変換に適用されています(これは、当プロジェクトのコードで以前使用していた、delta-kernel-rs 内の古く非推奨となった方法を置き換えるものです)。将来的には、この ExpressionVisitor により、統計情報に基づくプルーニングや、いくつかの Delta Lake 独自機能も実装できるようになります。さらに、この変更の目的は、DeltaLakeCluster テーブルエンジンでのパーティションプルーニングをサポートすることです(パースされた式の結果である ActionsDAG はシリアライズされ、データパスとともにイニシエータから送信されます。プルーニングに必要なこの種の情報は、データファイル一覧のメタ情報としてのみ利用可能であり、これはイニシエータだけが実行しますが、各読み取りサーバー上のデータに適用する必要があります)。#81136Kseniia Sumarokova)。
  • データレイククラスタ関数でのパーティションプルーニングを修正しました。#82131Kseniia Sumarokova)。
  • DeltaLakeCluster テーブル関数でのパーティション化されたデータの読み取りを修正しました。この PR ではクラスタ関数のプロトコルバージョンが増加しており、イニシエータからレプリカへ追加情報を送信できるようになっています。この追加情報には、パーティション列をパースするために必要な delta-kernel の変換式(および将来、生成列などのその他の要素)が含まれます。#82132Kseniia Sumarokova)。
  • Datalake データベースが、より分かりやすい例外をスローするようになりました。#81211 を修正。#82304alesapin)。
  • ストレージ DeltaLake において、内部の delta-kernel-rs フィルタリング(統計およびパーティションプルーニング)を実装しました。#84006Kseniia Sumarokova)。
  • 設定 delta_lake_enable_expression_visitor_logging を追加しました。これは、何かをデバッグする際に、テストログレベルであっても冗長になりすぎる可能性がある ExpressionVisitor のログを無効化するためのものです。#84315Kseniia Sumarokova)。
  • テーブルエンジン DeltaLake で特定のスナップショットバージョンを読み取れるようにするため、設定 delta_lake_snapshot_version を追加しました。#85295Kseniia Sumarokova)。

データレイク統合

  • 非同期リクエストにより、データカタログでのテーブル一覧取得を高速化。#81084 (alesapin).
  • Glue カタログで TimestampTZ をサポート。これにより #81654 が解決されます。#83132 (scanhex12).
  • FormatParserGroup を 2 つの独立した struct に分割。1 つ目は共有の計算および I/O リソースを担当し、2 つ目は共有フィルタリソース(filter ActionDagKeyCondition)を担当します。これは、これらの構造体を異なるスレッドからより柔軟に共有利用できるようにするための変更です。#83997 (Daniil Ivanik).
  • Azure 設定に不足していた partition_columns_in_data_file を追加。#85373 (Arthur Passos).
  • system.tables にデータレイクテーブルを追加するかどうかを管理するための show_data_lake_catalogs_in_system_tables フラグを追加し、#85384 を解決。#85411 (Smita Kulkarni).

S3 とオブジェクトストレージ

  • データベースディスクとしてサポートするために、s3_plain_rewritablemoveFile および replaceFile メソッドを実装しました。 #79424 (Tuan Pham Anh).
  • max_remote_read_network_bandwidth_for_server および max_remote_write_network_bandwidth_for_server によるスロットリングで発生する問題を回避するため、S3 の読み書きリクエストは、S3 リクエスト全体ではなく HTTP ソケットレベルでスロットリングされるようになりました。 #81837 (Sergei Trifonov).
  • この PR は、s3_slow_all_threads_after_network_error 設定が有効な場合に、S3 のリトライメカニズムにジッターを導入します。 #81849 (zoomxi).
  • 明示的に指定した IAM ロールを用いた AWS S3 認証を実装しました。GCS 向けには OAuth を実装しました。これらの機能は最近まで ClickHouse Cloud でのみ利用可能でしたが、今回オープンソース化されました。オブジェクトストレージ向けの接続パラメータのシリアライズなど、いくつかのインターフェースを統一しました。 #84011 (Alexey Milovidov).
  • 外部集約およびソート処理に対して、任意のストレージポリシー(すなわち S3 などのオブジェクトストレージ)を使用できるようにしました。 #84734 (Azat Khuzhin).
  • 削除対象のすべてのオブジェクトを集約し、オブジェクトストレージに対する単一の削除操作として実行するようにしました。 #85316 (Mikhail Artemenko).

S3Queue テーブルエンジン

  • {uuid} のようなマクロが、S3Queue テーブルエンジンの keeper_path 設定で使用できるようになりました。 #82463 (Nikolay Degterinsky)。
  • S3Queue テーブルエンジンを使用するテーブルでストリーミングを無効化する新しいサーバー設定 s3queue_disable_streaming を追加しました。この設定はサーバーの再起動なしに変更できます。 #82515 (Kseniia Sumarokova)。
  • system.s3queue_logcommit_timecommit_id カラムを追加しました。 #83016 (Kseniia Sumarokova)。
  • S3Queue のシャットダウン処理用ログを追加しました。 #83163 (Kseniia Sumarokova)。
  • サーバーのシャットダウン時に、任意のテーブルをシャットダウンする前に S3/Azure などの Queue のストリーミングを先に停止するようにしました。 #83530 (Kseniia Sumarokova)。
  • S3Queue テーブルレベルでのマテリアライズドビュー挿入設定の変更をサポートしました。新しい S3Queue レベルの設定 min_insert_block_size_rows_for_materialized_viewsmin_insert_block_size_bytes_for_materialized_views を追加しました。デフォルトではプロファイルレベルの設定が使用され、S3Queue レベルの設定がそれらを上書きします。 #83971 (Kseniia Sumarokova)。
  • S3Queue の順序モードを修正しました。シャットダウンが呼び出された場合に、より早く終了するようにしました。 #84463 (Kseniia Sumarokova)。

Kafka 連携

ClickHouse Keeper の改善

  • Keeper の改善: バックグラウンドスレッドでディスク間の changelog ファイルの移動を行うようにしました。以前は、changelog を別のディスクに移動する際、移動が完了するまで Keeper 全体がブロックされていました。これは、移動に長時間を要する操作(例: S3 ディスクへの移動)の場合にパフォーマンスの低下を引き起こしていました。#82485Antonio Andelic)。
  • Keeper の改善: 新しい設定 keeper_server.cleanup_old_and_ignore_new_acl を追加しました。有効にすると、すべてのノードの ACL がクリアされ、新しいリクエストに対する ACL は無視されます。ノードから ACL を完全に削除することが目的の場合は、新しいスナップショットが作成されるまでこの設定を有効のままにしておくことが重要です。#82496Antonio Andelic)。
  • Keeper の改善: world:anyone ACL に対して特定の権限をサポートしました。#82755Antonio Andelic)。
  • 設定ファイル内でパスに対して追加の Keeper ACL を指定できるようにしました。特定のパスに追加の ACL を付与したい場合は、設定ファイルの zookeeper.path_acls で定義します。#82898Antonio Andelic)。
  • Keeper がソフトメモリ制限により書き込みを拒否した際に、ProfileEvent を追加するようにしました。#82963Xander Garbett)。
  • Keeper で create_if_not_existscheck_not_existsremove_recursive の各 feature flag をデフォルトで有効化し、新しい種類のリクエストを利用できるようにしました。#83488Antonio Andelic)。
  • apply_to_children 設定を使用して、特定の Keeper ノードに対して追加の ACL を適用するサポートを追加しました。#84137Antonio Andelic)。
  • KeeperClient に get_acl コマンドを追加しました。#84641Antonio Andelic)。
  • Keeper に 4LW コマンド lgrq を追加し、受信したリクエストのリクエストログの有効化・無効化を切り替えられるようにしました。#84719Antonio Andelic)。
  • Keeper におけるストレージロックの競合を削減しました。#84732Antonio Andelic)。
  • encrypt_decrypt ツールが暗号化された ZooKeeper 接続をサポートするようになりました。#84764Roman Vasin)。
  • Keeper のログエントリキャッシュサイズを、keeper_server.coordination_settings.latest_logs_cache_entry_count_threshold および keeper_server.coordination_settings.commit_logs_cache_entry_count_threshold を使用してエントリ数で制限できるようにしました。#84877Antonio Andelic)。

JSON および Dynamic 型

  • パート内に保存されているすべてのサブストリームを追跡するため、Wide パートに columns_substreams.txt ファイルが追加されました。これにより、JSON 型および Dynamic 型における動的ストリームを追跡できるようになり、動的ストリームの一覧を取得するためにこれらのカラムのサンプルを読み取る必要がなくなります(たとえばカラムサイズの計算時など)。また、すべての動的ストリームが system.parts_columns に反映されるようになりました。#81091Pavel Kruglov)。
  • JSON 型および Dynamic 型のカラムで ALTER UPDATE が許可されました。#82419Pavel Kruglov)。
  • ユーザーは JSON 型の中で Time および Time64 型を利用できるようになりました。#83784Yarik Briukhovetskyi)。
  • JSON 型のパース時に JSON キー内のドットをエスケープするための設定 json_type_escape_dots_in_keys が追加されました。この設定はデフォルトでは無効です。#84207Pavel Kruglov)。

Parquet および ORC フォーマット

  • ORC の圧縮ブロックサイズを設定するための設定項目を追加し、Spark や Hive と整合性を保つためにデフォルト値を 64KB から 256KB に更新しました。 #80602 (李扬)。
  • Parquet の enum を、仕様 で規定されているとおりバイト配列として書き込むことをサポートしました。詳細は後日追記される予定です。 #81090 (Arthur Passos)。
  • 出力フォーマットとして GeoParquet の書き込みをサポートしました。 #81784 (scanhex12)。

分散クエリとパラレルレプリカ

  • 新しい設定 enable_add_distinct_to_in_subqueries が導入されました。有効化すると、分散クエリにおいて ClickHouse は IN 句内のサブクエリに自動的に DISTINCT を追加します。これにより、シャード間で転送される一時テーブルのサイズを大幅に削減し、ネットワーク効率を向上させることができます。注意: これはトレードオフであり、ネットワーク転送は削減されますが、各ノードで追加のマージ(重複排除)処理が必要になります。ネットワーク転送がボトルネックとなっており、マージ処理のコストが許容できる場合にこの設定を有効化してください。 #81908 (fhw12345).
  • address_expression 引数にクラスターが指定されている場合、パラレルレプリカでの remote-() テーブル関数のサポートを追加しました。また、#73295 も修正しました。 #82904 (Igor Nikonov).
  • パラレルレプリカを用いた JOIN は現在、join の論理ステップを使用します。パラレルレプリカを利用する JOIN クエリで問題が発生した場合は、SET query_plan_use_new_logical_join_step=0 を試し、Issue を報告してください。 #83801 (Vladimir Cherkasov).

設定と構成

  • 設定 allow_experimental_join_condition を廃止予定としてマークしました。 #80566 (Vladimir Cherkasov).
  • 全体およびユーザーごとのネットワークスロットラはリセットされなくなり、max_network_bandwidth_for_all_users および max_network_bandwidth_for_all_users の制限を超過しないことが保証されます。 #81729 (Sergei Trifonov).
  • 設定 optimize_rewrite_regexp_functions(デフォルトで有効)を導入しました。特定の正規表現パターンが検出された場合に、一部の replaceRegexpAllreplaceRegexpOneextract 呼び出しを、より単純で効率的な形式に書き換えることをオプティマイザに許可します。 (issue #81981). #81992 (Amos Bird).
  • listen_backlog(デフォルト 4096)に基づいて、TCP サーバーのキュー(デフォルト 64)をチューニングしました。 #82045 (Azat Khuzhin).
  • サーバーを再起動せずに、その場で max_local_read_bandwidth_for_server および max_local_write_bandwidth_for_server をリロードできるようにしました。 #82083 (Kai Zhu).
  • ベクター類似度インデックスを使用するために有効化が必須となる設定 enable_vector_similarity_index を導入しました。既存の設定 allow_experimental_vector_similarity_index は廃止予定となりましたが、必要な場合のために引き続き動作します。 #83459 (Robert Schulze).
  • max_joined_block_size_rows に加えて、重いカラムを持つ JOIN のメモリ使用量を制限するために max_joined_block_size_bytes を追加しました。 #83869 (Nikolai Kochetov).
  • cluster_function_process_archive_on_multiple_nodes の互換性を修正しました。 #83968 (Kseniia Sumarokova).
  • 相関サブクエリのサポートをデフォルトで有効化しました。 #85107 (Dmitry Novik).
  • database_replicated 設定を追加し、DatabaseReplicatedSettings のデフォルト値を定義できるようにしました。Replicated DB の作成クエリ内にこの設定が指定されていない場合、この設定の値が使用されます。 #85127 (Tuan Pham Anh).
  • s3 または s3Cluster テーブルエンジン/テーブル関数でキー・バリュー形式の引数を許可しました。例えば s3('url', CSV, structure = 'a Int32', compression_method = 'gzip') のように指定できます。 #85134 (Kseniia Sumarokova).
  • 非相関な EXISTS をスカラーサブクエリとして実行するようにしました。これによりスカラーサブクエリのキャッシュを利用し、結果を定数畳み込みできるため、インデックスにとって有用です。互換性維持のため、新しい設定 execute_exists_as_scalar_subquery=1 を追加しました。 #85481 (Nikolai Kochetov).
  • 複合識別子の解決を、より多くのケースでサポートしました。特に、ARRAY JOIN の旧アナライザとの互換性が向上します。従来の動作を維持するために、新しい設定 analyzer_compatibility_allow_compound_identifiers_in_unflatten_nested を導入しました。 #85492 (Nikolai Kochetov).

System tables and observability

  • ClickHouse の async metrics に負荷関連のメトリクスを追加しました。 #80779 (Xander Garbett).
  • マークキャッシュからのエビクションを追跡するためのメトリクス MarkCacheEvictedBytesMarkCacheEvictedMarksMarkCacheEvictedFiles を追加しました(issue #60989)。 #80799 (Shivji Kumar Jha).
  • system.formats テーブルに、HTTP コンテンツタイプやスキーマ推論の機能など、フォーマットに関する拡張情報が含まれるようになりました。 #81505 (Alexey Milovidov).
  • TRUNCATE TABLE system.warnings を使用して、system.warnings テーブルからすべての警告をクリアできるようにしました。 #82087 (Vladimir Cherkasov).
  • system.licenses で Rust クレートのライセンス一覧を表示するようにしました。 #82440 (Raúl Marín).
  • 統計情報を用いて、(a < 1 and a > 0) or b = 3 のような複雑な CNF/DNF を推定できるようにしました。 #82663 (Han Fei).
  • 場合によっては、メトリクスに複数のディメンションが必要となります。例えば、単一のカウンタではなく、エラーコードごとに失敗したマージやミューテーションをカウントするようなケースです。 #83030 (Miсhael Stetsyuk).
  • MergeParts エントリに対して、part_log の profile events にプロセスリソースメトリクス(UserTimeMicrosecondsSystemTimeMicrosecondsRealTimeMicroseconds など)を追加しました。 #83460 (Vladimir Cherkasov).
  • Cgroup レベルとシステム全体のメトリクスが、まとめて報告されるようになりました。Cgroup レベルのメトリクスは CGroup<Metric> という名前で、OS レベルのメトリクス(procfs から収集)は OS<Metric> という名前になります。 #84317 (Nikita Taranov).
  • 併行実行される有界キューのサイズを監視するためのディメンション付きメトリクスを追加しました。キュー種別とインスタンス ID でラベル付けされ、オブザーバビリティが向上します。 #84675 (Miсhael Stetsyuk).
  • system.columns テーブルで、既存の name 列に対するエイリアスとして column を提供するようになりました。 #84695 (Yunchi Pang).
  • system.errors にフォーマット文字列のカラムを追加しました。このカラムは、アラートルールで同一のエラータイプをグループ化するために必要です。 #84776 (Miсhael Stetsyuk).
  • Async Log の制限値を調整可能にし、イントロスペクション機能を追加しました。 #85105 (Raúl Marín).
  • system.columns でテーブルのカラムサイズを取得する際に、UNKNOWN_DATABASE を無視するようにしました。 #85632 (Azat Khuzhin).

データベースエンジン

システムおよび内部の改善

  • 読み取り専用のリモートディスクを持つデータベースのアタッチ時に、テーブルの UUID を DatabaseCatalog に手動で追加することで不具合を修正。#82670 (Tuan Pham Anh)。
  • distributed_ddl_output_mode='*_only_active' の場合に、max_replication_lag_to_enqueue を超えるレプリケーションラグを持つ新規または復旧済みレプリカを待機しないようにすることで DDL タスク処理を改善。これにより、初期化または復旧後に新しいレプリカがアクティブになったものの、大量のレプリケーションログを蓄積している場合に発生する DDL task is not finished on some hosts エラーを回避できる。また、レプリケーションログが max_replication_lag_to_enqueue 未満になるまで待機する SYSTEM SYNC DATABASE REPLICA STRICT クエリも実装。#83302 (Alexander Tokmakov)。
  • SystemLogs のシャットダウン順序を、通常テーブルの後(かつシステムテーブルの前)に行うように変更(従来は通常テーブルの前)。#83134 (Kseniia Sumarokova)。
  • レプリケートされたデータベース設定向けにサーバー設定 logs_to_keep を追加し、レプリケートされたデータベースのデフォルトの logs_to_keep パラメータを構成可能に。値を小さくすると ZooKeeper ノード数が減少(データベースが多い場合に特に有効)し、値を大きくすると長時間のダウンタイム後でも欠落レプリカが追いつけるようになる。#84183 (Alexey Khatskevich)。
  • Replicated データベースの設定 max_retries_before_automatic_recovery のデフォルト値を 10 に変更し、状況によってはより高速なリカバリを可能に。#84369 (Alexander Tokmakov)。
  • Replicated データベースにおける append 以外の Refreshable マテリアライズドビューの DDL 操作を最適化し、古い一時テーブルの作成とリネームをスキップ。#84858 (Tuan Pham Anh)。

レプリケーションと同期

SystemAndInternalImprovements

  • ZooKeeper 接続の問題が発生した場合にテーブル作成を再試行し、テーブルが忘れ去られてしまうことを防ぐように SYSTEM RESTART REPLICA を改善しました。#82616 (Nikolay Degterinsky).
  • テーブルが StorageID の取得と IDatabase::alterTable の呼び出しの間で入れ替えられた場合に誤ったテーブル定義になってしまうのを防ぐため、ReplicatedMergeTree::executeMetadataAlter において UUID の検証を追加しました。#82666 (Nikolay Degterinsky).
  • 実験的なゼロコピー複製に関連する実験的な send_metadata ロジックを削除しました。このコードは一度も使用されておらず、サポートもされておらず、おそらく壊れており、その機能を検証するテストもありませんでした。#82508 (alesapin).
  • remote_fs_zero_copy_zookeeper_path でのマクロ展開をサポートしました。#85437 (Mikhail Koviazin).

関数と式

  • 関数 addressToSymbol および system.symbols テーブルでは、仮想メモリアドレスではなくファイルオフセットが使用されるようになりました。#81896Alexey Milovidov)。
  • 名前付きタプルのスーパータイプを導出する際、要素名を可能な限り保持するようにしました。 #81345 (lgbo).
  • 同じ列に対しても、ウィンドウごとに異なる照合順序を使用できるようにしました。 #82877 (Yakov Olkhovskiy).
  • 型を WKB 形式で出力する関数を追加。 #82935 (scanhex12).
  • Time および Time64 を MM:SS、M:SS、SS、または S としてパースできる機能を追加しました。 #83299 (Yarik Briukhovetskyi)。
  • 関数 reinterpret() は、T が固定長データ型である場合の Array(T) への変換をサポートするようになりました(issue #82621)。#83399Shankar Iyer)。
  • structureToProtobufSchemastructureToCapnProtoSchema 関数を修正し、改行文字ではなくゼロ終端バイトを正しく追加するようにして、出力から改行が抜けてしまう問題と、ゼロバイトに依存する関数(logTracedemangleextractURLParametertoStringCutToZeroencrypt/decrypt など)で発生しうるバッファオーバーフローを防止しました。#85062 をクローズ。#85063Alexey Milovidov)。
  • regexp_tree 辞書レイアウトを修正し、ゼロバイトを含む文字列を処理できるようにしました。 #85063 (Alexey Milovidov)。
  • Values フォーマット、または行末に改行を含まないフォーマットで呼び出された場合に、出力の末尾の 1 文字を誤って切り落としていた formatRowNoNewline 関数を修正しました。 #85063 (Alexey Milovidov).
  • まれな状況でメモリリークにつながる可能性があった stem 関数の例外安全性に関する不具合を修正しました。 #85063 (Alexey Milovidov)。
  • FixedString 引数に対する initcap 関数を修正し、ブロック内で直前の文字列が単語文字で終わっている場合でも、文字列の先頭を単語の開始として正しく認識できるようにしました。 #85063 (Alexey Milovidov).
  • 初期化されていないメモリが露出するおそれのある Apache ORC 形式のセキュリティ脆弱性を修正しました。 #85063 (Alexey Milovidov).
  • replaceRegexpAll とそのエイリアスである REGEXP_REPLACE の動作を変更し、直前のマッチで文字列全体が処理されていた場合でも、文字列末尾での空マッチを許可するようにしました(例: ^a*|a*$^|.*)。これにより、JavaScript、Perl、Python、PHP、Ruby の仕様と整合しますが、PostgreSQL とは異なります。 #85063 (Alexey Milovidov).
  • 多くの文字列処理関数の実装を最適化および簡素化しました。いくつかの関数について、誤っていたドキュメント内容を修正しました。注記: String カラムおよび String カラムを含む複合型に対する byteSize の出力は、空文字列 1 つあたり 9 バイトから 8 バイトへと変更されました。これは期待される挙動です。 #85063 (Alexey Milovidov)。
  • 関数 timeSeries*ToGrid() でステップ値 0 を許可します。これは https://github.com/ClickHouse/ClickHouse/pull/75036 のパート #3 です。#85390Vitaly Baranov)。
  • 関数 nested が内部配列をサポートするようになりました。 #85719 (Nikolai Kochetov)。

MergeTree の改善

  • 実行時に更新される列やパッチパーツによって更新される列に依存するスキッピングインデックスを、より細かい粒度で無効化するようにしました。これにより、スキッピングインデックスは実行時ミューテーションやパッチパーツの影響を受けたパーツでのみ使用されなくなります。以前は、これらのインデックスはすべてのパーツに対して無効化されていました。 #84241 (Anton Popov).
  • パーツを探索する対象範囲を制限するための MergeTree 設定 search_orphaned_parts_drives を追加しました。たとえばローカルメタデータを持つディスク単位で範囲を制限できます。 #84710 (Ilya Golshtein).
  • WHERE 句に対する read_in_order_use_virtual_row の不足していたサポートを追加しました。これにより、PREWHERE に完全にはプッシュダウンされなかったフィルタ条件を持つクエリで、より多くのパーツの読み取りをスキップできるようになります。 #84835 (Nikolai Kochetov).
  • MergeTree における「コンパクト」な Variant 判別子シリアライゼーションの利用を修正しました。以前は、利用可能であるにもかかわらず、一部のケースで使用されていませんでした。 #84141 (Pavel Kruglov).
  • パッチパーツ内の非圧縮バイト数の合計に対する上限(テーブル設定 max_uncompressed_bytes_in_patches)を追加しました。これにより、軽量更新後の SELECT クエリが大幅に低速化することを防ぎ、軽量更新の不適切な使用も防止します。 #85641 (Anton Popov).

キャッシュとメモリ管理

  • ファイルシステムキャッシュにおける論理エラー「Having zero bytes but range is not finished」を修正。 #81868 (Kseniia Sumarokova).
  • キャッシュの局所性を改善するためにレンデブーハッシュを追加。 #82511 (Anton Ivashkin).
  • ファイルシステムキャッシュの動的リサイズ機能をリファクタリングし、内部解析用のログを追加。 #82556 (Kseniia Sumarokova).
  • 実行可能なユーザー定義関数に対するクエリのメモリトラッキングのオーバーヘッドを削減。 #83929 (Eduard Karacharov).
  • 外部ライブラリによるすべてのメモリアロケーションが、ClickHouseのメモリトラッカーで把握され、正しく計上されるようになりました。この変更により、特定のクエリで報告されるメモリ使用量が「増加」したり、MEMORY_LIMIT_EXCEEDED により失敗する場合があります。 #84082 (Nikita Mikhaylov).
  • 暗号化された named collection 向けの encrypted_buffer に対して、必要最小限のメモリのみを確保するように変更。 #84432 (Pablo Marcos).

ベクトル類似性インデックス

  • NumericIndexedVectornan および inf を使用できないようにしました。これにより #82239 と、いくつかの関連問題が修正されています。#82681 (Raufs Dunamalijevs).
  • ベクトル類似性インデックスがバイナリ量子化をサポートするようになりました。バイナリ量子化により、メモリ消費量が大幅に削減されると同時に、(距離計算が高速になることで)ベクトルインデックスの構築処理も高速化されます。また、既存の設定 vector_search_postfilter_multiplier は廃止され、より汎用的な設定 vector_search_index_fetch_multiplier に置き換えられました。#85024 (Shankar Iyer).
  • ベクトル類似性インデックスによる近似ベクトル検索が一般提供 (GA) になりました。#85888 (Robert Schulze).

エラー処理とメッセージ

  • 接続を維持すべきかが分かってから、ヘッダー送信の最後に Connection ヘッダーを送信するようにしました。#81951 (Sema Checherinda).
  • 以前のバージョンでは、集約関数の状態と IPv4 の乗算で、適切なエラーコードではなく論理エラーが発生していました。#82817 をクローズ。#82818 (Alexey Milovidov).
  • AsynchronousMetrics のエラー処理を改善しました。/sys/block ディレクトリが存在するがアクセスできない場合でも、サーバーはブロックデバイスの監視なしで起動します。#79229 をクローズ。#83115 (Alexey Milovidov).
  • 不正な SELECT 文を含むマテリアライズドビューへの INSERT において、依存関係チェックが正しく行われておらず、わかりやすい説明付きの有意義なエラーではなく、分かりにくい std::exception を受け取る可能性がありました。これは修正済みです。次の問題を修正します: #82889#83190 (Nikita Mikhaylov).
  • 例外メッセージ内で、式アクションの非常に長い説明を出力しないようにしました。#83164 をクローズ。#83350 (Alexey Milovidov).
  • ストレージのシャットダウン時に、getStatusErrorCodes::ABORTED 例外を投げるようにしました。以前は、これにより SELECT クエリが失敗していました。現在は ErrorCodes::ABORTED 例外を捕捉し、意図的に無視します。#83435 (Miсhael Stetsyuk).
  • プロジェクションの読み込みおよび追加に関する特定の状況での例外メッセージを、より読みやすくしました。#83728 (Robert Schulze).
  • 接続がキャンセルされているかどうかを EOF のチェック前に確認することで、クローズされた接続から読み込むことを防止しました。#83893 を修正。#84227 (Raufs Dunamalijevs).
  • 内部チェックを単純化することで、クライアント接続に対するサーバーシャットダウン時の処理を改善しました。#84312 (Raufs Dunamalijevs).
  • UDF 実行中の低レベルエラーは、これまではさまざまなエラーコードが返される可能性がありましたが、現在は UDF_EXECUTION_FAILED エラーコードで失敗するようになりました。#84547 (Xu Jia).

SQL フォーマットの改善

  • CREATE DICTIONARY のフォーマットの不整合を修正しました。 #82105 をクローズしました。 #82829Alexey Milovidov)。
  • materialize 関数を含む場合の TTL のフォーマットの不整合を修正しました。 #82828 をクローズしました。 #82831Alexey Milovidov)。
  • INTO OUTFILE などの出力オプションを含む場合の、サブクエリ内の EXPLAIN AST のフォーマットの不整合を修正しました。 #82826 をクローズしました。 #82840Alexey Milovidov)。
  • エイリアスが許可されていないコンテキストにおける、エイリアス付きの括弧付き式のフォーマットの不整合を修正しました。 #82836 をクローズしました。 #82837 をクローズしました。 #82867Alexey Milovidov)。
  • クエリパラメータ付きの CREATE USER(例: CREATE USER {username:Identifier} IDENTIFIED WITH no_password)のフォーマットを修正しました。 #84376Azat Khuzhin)。
  • CREATE DICTIONARY クエリのカラムで、パラメータを持つカラム(例: Decimal(8))の後に続く末尾のカンマのパース処理を修正しました。 #85586 をクローズしました。 #85653Nikolay Degterinsky)。

外部連携

  • 名前付きコレクションを使用する場合、ODBC と JDBC のパラメータ名を統一しました。 #83410 (Andrey Zvonov).
  • MongoDB: 文字列から数値型への暗黙的な変換を行うようにしました。以前は、ClickHouse テーブルの数値カラムに対して MongoDB ソースから文字列値が受信されると、例外がスローされていました。現在は、エンジンが文字列から数値を自動的にパースしようと試みます。 #81167 をクローズ。 #84069 (Kirill Nikiforov).
  • サポートされていないアーキテクチャ上でも simdjson を許可しました(以前は CANNOT_ALLOCATE_MEMORY エラーにつながっていました)。 #84966 (Azat Khuzhin).

その他の改善点

  • Ytsaurus テーブルエンジンおよびテーブル関数を追加した。#77606 (MikhailBurdukov).
  • HashJoin::needUsedFlagsForPerRightTableRow を改良し、クロス JOIN では false を返すようにした。#82379 (lgbo).
  • map カラムをタプルの配列として書き込み/読み取りできるようにした。#82408 (MikhailBurdukov).
  • この PR は取り消された。#82884 (Mithun p).
  • 非同期ログ: キュー内に保持されるエントリ数の最大値を制限した。#83214 (Raúl Marín).
  • JSON 入力フォーマットで Date/Date32 を整数として扱えるようにした。#83597 (MikhailBurdukov).
  • bloom filter インデックス(通常、ngram、および token)が、第一引数が定数配列(集合)、第二引数がインデックス付きカラム(部分集合)の場合にも活用されるようサポートを改善し、より効率的なクエリ実行を可能にした。#84700 (Doron David).
  • KeyValue ストレージのプライマリキー(例: EmbeddedRocksDB、KeeperMap)上に IN / GLOBAL IN フィルタをプッシュダウンする際に、集合値の型キャストを許可した。#84515 (Eduard Karacharov).
  • 並列レプリカ読み取りにおいて、インデックス解析の結果が空の範囲となるケースでの全スキャンを排除した。#84971 (Eduard Karacharov).
  • ローカルホストで統合テストを実行しようとした際に発生しうる問題の一覧を修正した。#82135 (Oleg Doronin).
  • 古いデプロイメントで trace_log.symbolize をデフォルトで有効化した。#85456 (Azat Khuzhin).

バグ修正(公式安定版リリースでユーザーから確認できる不具合)

パフォーマンス最適化

  • バージョン 25.5 で https://github.com/ClickHouse/ClickHouse/pull/79051 によって発生した SummingMergeTree におけるパフォーマンス低下を修正しました。#82130Pavel Kruglov)。
  • analyzer が有効な場合に、セカンダリクエリが常に VIEW からすべてのカラムを読み取っていたことによるパフォーマンス低下を修正しました。#81718 を修正します。#83036Dmitry Novik)。
  • 依存関係を持たないテーブル作成時には循環依存関係のチェックを行わないようにしました。これにより、https://github.com/ClickHouse/ClickHouse/pull/65405 で導入された、数千のテーブルを作成するユースケースでのパフォーマンス低下を修正します。#83077Pavel Kruglov)。
  • DISTINCT ウィンドウ集約関数が線形時間で動作するようにし、sumDistinct のバグを修正しました。#79792 をクローズします。#52253 をクローズします。#79859Nihal Z. Miaji)。

クエリ実行に関する修正

  • ORDER BY ... LIMIT BY ... LIMIT N を組み合わせたクエリにおいて、ORDER BY が PartialSorting として実行される場合、カウンタ rows_before_limit_at_least は、ソート変換で消費された行数ではなく、LIMIT 句で消費された行数を反映するようになりました。 #78999 (Eduard Karacharov)。
  • <=> 演算子とJoinストレージにおける論理エラーを修正し、クエリが適切なエラーコードを返すようになりました。 #80165 (Vladimir Cherkasov).
  • remote 関数ファミリーと併用した場合に loop 関数がクラッシュする問題を修正しました。loop(remote(...)) で LIMIT 句が正しく適用されるようにしました。 #80299 (Julia Kartseva).
  • Unix エポック (1970-01-01) より前および最大日時 (2106-02-07 06:28:15) より後の日付を扱う際の to_utc_timestamp 関数と from_utc_timestamp 関数の不正な動作を修正しました。これらの関数は、値をそれぞれエポック開始時刻と最大日時に正しく切り詰める(クランプする)ようになりました。 #80498 (Surya Kant Ranjan).
  • 左辺引数に NULL が含まれ、サブクエリ結果が非 NULL の場合における、transform_null_in=1 設定時の IN 実行を修正。 #81584 (Pavel Kruglov).
  • スカラー相関サブクエリの処理中に必要な列が読み取られない問題を修正しました。#81716 を修正。#81805Dmitry Novik)。
  • クエリで定数エイリアス列のみが使用されている場合のフィルタ解析を修正しました。これにより #79448 が修正されます。#82037Dmitry Novik)。
  • WHERE 句および IndexSet を含むクエリで arrayJoin を使用した際に発生していた Not found column エラーを修正しました。 #82113 (Nikolai Kochetov).
  • CTE 定義が同名の別のテーブル式を参照している場合に発生する TOO_DEEP_SUBQUERIES 例外を修正。 #83413 (Dmitry Novik).
  • WHERE ... IN (<subquery>) 句を含むクエリで、use_query_condition_cache 設定によるクエリ条件キャッシュを有効化している場合に誤った結果が返される問題を修正しました。 #83445 (LB7666).
  • UNION ALL を伴う INSERT SELECT が、特定のレアケースにおいてヌルポインタ参照を引き起こす可能性がありました。この修正により #83618 がクローズされました。#83643Alexey Milovidov)。
  • 相関付けられた列に対する行ポリシー式の解析中に発生する LOGICAL_ERROR を修正しました。 #82618 (Dmitry Novik).
  • クエリ条件キャッシュを再帰CTEと併用した場合に誤った結果が返される不具合を修正しました(issue #81506)。#84026zhongyuankai)。
  • 不正な WINDOW 定義に対する無限再帰的な解析を修正します。 #83131 を解決します。 #84242Dmitry Novik)。
  • additional_table_filters expression 設定内で IN (subquery) を使用した場合の Not-ready Set の問題を修正しました。 #85210 (Nikolai Kochetov).
  • optimize_syntax_fuse_functions が有効な場合に発生する重複サブクエリに関する論理エラーを修正し、#75511 をクローズしました。#83300Vladimir Cherkasov)。

Iceberg と DataLake の修正

  • REST カタログ経由で Iceberg テーブルをクエリする際のメタデータ解決処理を修正。... #80562 (Saurabh Kumar Ojha).
  • Iceberg におけるデータレースを修正。#82088 (Azat Khuzhin).
  • Iceberg における "Context has expired" エラーを修正。#82146 (Azat Khuzhin).
  • ClickHouse が、スキーマ変更後に Glue カタログから Iceberg テーブルを読み取れるようになりました。#81272 を修正。#82301 (alesapin).
  • Iceberg におけるデータレースを修正。#82841 (Azat Khuzhin).
  • Iceberg の配列要素および Iceberg の map 値(そのすべてのネストしたサブフィールドを含む)に対する、境界値ベースのファイルプルーニングを無効化。#83520 (Daniil Ivanik).
  • 複合型に対する Iceberg への書き込みを修正。#85330 (scanhex12).
  • 複合型に対しては、下限値および上限値の書き込みはサポートされません。#85332 (scanhex12).
  • Iceberg におけるフィールドの NULL 許容性を修正。#85977 (scanhex12).
  • 空の Iceberg の delete ファイルを作成しないように変更。#86061 (scanhex12).
  • Iceberg への書き込み時にメタデータのタイムスタンプを更新。#85711 (scanhex12).
  • Spark が position delete ファイルを読み取れない問題を修正。#85762 (scanhex12).
  • マニフェストファイルからスキーマを取得するのをやめ、各スナップショットごとに該当するスキーマを独立して保存するように変更。各データファイルに対しては、そのファイルに対応するスナップショットから該当するスキーマを推論します。以前の動作では、既存ステータスを持つマニフェストファイルエントリに関して Iceberg の仕様に違反していました。#84588 (Daniil Ivanik).
  • Iceberg は SELECT クエリ間で関連するスナップショットバージョンをキャッシュしようとせず、常にスナップショットを正しく解決しようとするようになりました。以前の Iceberg スナップショットのキャッシュ試行は、タイムトラベルを用いた Iceberg テーブルの利用時に問題を引き起こしていました。#85038 (Daniil Ivanik).
  • REST カタログ経由で Iceberg テーブルをクエリする際のメタデータ解決処理を修正。... #85531 (Saurabh Kumar Ojha).
  • icebergS3Cluster および icebergAzureCluster テーブル関数でのシークレットマスキングを修正。#85658 (MikhailBurdukov).

DeltaLake の修正

TTL と MergeTree の修正

  • TTL によって行が削除された際に、minmax_count_projection のような、それに依存するアルゴリズムの正しさを保証するために、min-max インデックスを再計算するようになりました。これにより #77091 が解決されます。#77166Amos Bird)。
  • TTL を更新する際、TTL GROUP BY での TTL の再計算が誤っていた問題を修正しました。#81222Evgeniy Ulasik)。
  • TTL 式で辞書を使用している場合に、マージ中に発生していた "Context has expired" エラーを修正しました。#81690Azat Khuzhin)。
  • GROUP BY および SET の TTL で同じカラムを使用した場合に発生していた LOGICAL_ERROR とそれに続くクラッシュを修正しました。#82054Pablo Marcos)。
  • テーブルからすべての TTL が削除された場合、MergeTree は TTL に関連する処理を一切行わないようになりました。#84441alesapin)。
  • ALTER MODIFY ORDER BY がソートキー内の TTL カラムを検証していなかった問題を修正しました。TTL カラムは、ALTER 操作中に ORDER BY 句で使用された場合に正しく拒否されるようになり、テーブル破損の可能性を防ぎます。#84536xiaohuanlin)。

Projection の修正

  • カラム型が Nullable に変更された場合に、projection をマテリアライズする際の論理エラーを修正しました。#80741 (Pavel Kruglov).
  • enable_shared_storage_snapshot_in_query = 1 のときに、mergeTreeProjection テーブル関数内で親メタデータを誤って使用していた問題を修正しました。これは #82634 の修正です。#82638 (Amos Bird).
  • テーブルに projection があり、lightweight_mutation_projection_mode = 'rebuild' の設定時に、テーブル内の任意のブロックからすべての行を削除する lightweight delete をユーザーが実行した場合に、まれに発生する ClickHouse のクラッシュを修正しました。#84158 (alesapin).
  • 壊れた projection を含むパーツのバックアップ処理を修正しました。#85362 (Antonio Andelic).
  • 安定化するまでの間、リリース版では projection 内で _part_offset カラムを使用できないようにしました。#85372 (Sema Checherinda).

Parallel replicas の修正

  • 一部の parallel replicas を用いたクエリで、イニシエータ側では順序付き読み取り最適化が適用されるものの、リモートノードでは適用されないことがありました。これにより、parallel replicas のコーディネータ(イニシエータ上)とリモートノードで異なる読み取りモードが使用され、論理エラーが発生していました。 #80652 (Igor Nikonov).
  • サブクエリに FINAL が含まれている場合は parallel replicas を無効化します。 #81401, #83455 (zoomxi).
  • parallel replicas と、複数の INNER JOIN に続く RIGHT JOIN を含むクエリで発生していた LOGICAL_ERROR を修正しました。このようなクエリでは parallel replicas を使用しないようにしました。 #84299 (Vladimir Cherkasov).
  • parallel replicas を用いたクエリで、逆順読み取りの最適化を使用している場合、不正な結果が返されることがありました。 #85406 (Igor Nikonov).

認証とセキュリティ

  • logs および query_log 内での名前付きコレクション値の非表示処理を修正しました。#82405 をクローズ。#82510Kseniia Sumarokova)。
  • 型が SCRAM_SHA256_PASSWORD の AST から解析する際に、認証データに salt を設定するようにしました。#82888Tuan Pham Anh)。
  • ユーザーやログからは見えないように、Avro schema registry の認証情報をマスクしました。#83713János Benjamin Antal)。
  • REVOKE S3 ON system.* の実行時に *.* の S3 権限まで取り消してしまう誤った動作を修正しました。この修正は #83417 に対応します。#83420pufit)。
  • no_password で作成されたユーザーが、サーバー設定 allow_no_password を 0 に変更した後にログインしようとした際のサーバークラッシュを修正しました。#84426Shankar Iyer)。
  • JWT で識別されるユーザーを作成しようとした際のエラーメッセージを改善しました。#85072Konstantin Bogdanov)。
  • deltaLakeAzuredeltaLakeClustericebergS3ClustericebergAzureCluster の認証情報をマスクしました。#85889Julian Maicher)。
  • #79963 で導入されたバグを修正しました。定義者付きマテリアライズドビューに挿入する際、権限チェックは定義者に付与された権限を使用する必要があります。#79951 を修正します。#83502pufit)。

バックアップとリストアの修正

  • 空の Memory テーブルのバックアップで発生していた不具合を修正。この不具合により、バックアップのリストアが BACKUP_ENTRY_NOT_FOUND エラーで失敗していました。 #82791 (Julia Kartseva).
  • 読み取り専用ディスク上でバックアップをリストアする際に表示される、誤解を招くエラーメッセージを修正。 #83051 (Julia Kartseva).
  • 接続問題の後に不要な内部バックアップが開始されてしまう不具合を修正。 #84755 (Vitaly Baranov).

ウィンドウ関数と集約関数

  • マージ中に例外が発生した場合に Aggregator がクラッシュする可能性があった問題を修正しました。 #81450 (Nikita Taranov).
  • マージ中に例外が発生した場合に Aggregator がクラッシュする可能性があった問題を修正しました。 #82022 (Nikita Taranov).
  • arraySimilarity におけるコピーペーストの誤りを修正し、UInt32 および Int32 の重みの使用を禁止しました。テストおよびドキュメントを更新しました。 #82103 (Mikhail f. Shiryaev).
  • numericIndexedVectorPointwiseAddnumericIndexedVectorPointwiseSubtractnumericIndexedVectorPointwiseMultiplynumericIndexedVectorPointwiseDivide 関数を大きな数値に適用した際に発生していたオーバーフローを修正しました。 #82165 (Raufs Dunamalijevs).

Parquet とファイルフォーマットの修正

  • Parquet のブルームフィルタが、WHERE function(key) IN (...) のような条件を WHERE key IN (...) であるかのように誤って適用していた問題を修正。#81255 (Michael Kolupaev).
  • Parquet writer が Decimal 型に対して不正な統計情報 (min/max) を出力していた問題を修正。#83754 (Michael Kolupaev).
  • 空要素がある場合の groupArraySample / groupArrayLast のデシリアライズを修正(入力が空の場合にバイナリの一部をスキップしてしまう可能性があり、これによりデータ読み取り時の破損や TCP プロトコルにおける UNKNOWN_PACKET_FROM_SERVER が発生する可能性があった)。数値型および日時型には影響しない。#82763 (Pedro Ferreira).
  • RowBinary フォーマットで NULL 値を含む JSON パスを書き込む際の問題を修正。#83923 (Pavel Kruglov).

JOIN の修正

  • ストレージ Merge を持つテーブルとの JOIN 式を含むクエリに対するフィルタ書き換え処理を修正しました。#82092 を修正。#82950Dmitry Novik)。
  • キーバリューストレージが型変換されたキーと JOIN される場合にクラッシュする問題を修正しました。#82497Pervakov Grigorii)。
  • 複数の JOIN を含むクエリで matcher を解決する際に発生する論理エラーを修正しました。#81969 をクローズ。#82421Vladimir Cherkasov)。
  • 等価演算子のオペランドの型が異なる場合や、定数を参照している場合に、フィルタを JOIN 条件へマージする処理を修正しました。#83432 を修正。#84145Dmitry Novik)。
  • 片方のカラムが LowCardinality で、もう一方が定数である非等価条件で JOIN を行う際に、論理エラー Expected single dictionary argument for function が発生していた問題を修正しました。#81779 をクローズ。#84019Alexey Milovidov)。

レプリケーテッドデータベースの修正

  • DDLWorker と DatabaseReplicatedDDLWorker における markReplicasActive を修正。#81395 (Tuan Pham Anh)。
  • DatabaseReplicated::getClusterImpl を修正。hosts の先頭要素(または複数の要素)が id == DROPPED_MARK であり、同じシャードに他の要素が存在しない場合、shards の先頭要素が空のベクタとなり、std::out_of_range が発生する問題を修正。#82093 (Miсhael Stetsyuk)。
  • 非同期テーブルロードジョブの数を追跡するように変更。実行中のジョブがある場合は、TransactionLog::removeOldEntries において tail_ptr を更新しないようにする。#82824 (Tuan Pham Anh)。
  • MergeTree テーブルを add_minmax_index_for_numeric_columns=1 または add_minmax_index_for_string_columns=1 を指定して作成した場合に、後の ALTER 操作時にインデックスがマテリアライズされ、それが原因で新しいレプリカ上で Replicated データベースが正しく初期化されない問題を修正。#83751 (Nikolay Degterinsky)。
  • DEFINER が削除された場合に、Replicated データベースの新しいレプリカ上で RMV を作成する処理を修正。#85327 (Nikolay Degterinsky)。
  • メタデータファイルの移動に長時間かかる場合の、レプリケーテッドデータベースの復旧処理を修正。#85177 (Tuan Pham Anh)。
  • Keeper 上でデータベースメタデータを復元した後に、Replicated データベースを強制的に復旧するように変更。#85960 (Tuan Pham Anh)。
  • Replicated データベースの復旧におけるバグを修正。テーブル名に % 記号が含まれている場合、復旧中に別の名前でテーブルが再作成される可能性があった。#85987 (Alexander Tokmakov)。
  • DDL worker がレプリカセットから古いホストをクリーンアップするようになった。これにより ZooKeeper に保存されるメタデータの量が削減される。#88154 (alesapin)。

軽量アップデートの修正

  • ReplacingMergeTree および CollapsingMergeTree エンジンを持つテーブルの軽量アップデートを修正。 #84851 (Anton Popov).
  • テーブル内のすべてのカラムを更新する軽量アップデートにおける論理エラーを修正。 #84380 (Anton Popov).
  • バージョン 25.7 未満のサーバー上で作成された ReplicatedMergeTree エンジンを持つテーブルの軽量アップデートを修正。 #84933 (Anton Popov).
  • ALTER TABLE ... REPLACE PARTITION クエリ実行後の、非レプリケートな MergeTree エンジンを持つテーブルの軽量アップデートを修正。 #84941 (Anton Popov).
  • ReplicatedMergeTree におけるパッチパーツのクリーンアップを修正。これまで、パッチパーツを反映したマージ済みまたはミューテーション済みパーツが別のレプリカからダウンロードされるまで、軽量アップデートの結果が一時的にそのレプリカ上で見えない場合がありました。 #85121 (Anton Popov).

S3 とオブジェクトストレージの修正

  • シークレットマスキングにおける S3 テーブル関数の引数検証を修正し、起こりうる LOGICAL_ERROR を防止。#80620 をクローズ。#82056Vladimir Cherkasov)。
  • サーバーにメモリプレッシャーがかかっているときのリモートクエリにおけるデッドロックの可能性を修正。#82160Kirill)。
  • AWS ECS トークンに有効期限を追加し、再読み込みできるようにした。#82422Konstantin Bogdanov)。
  • 外部テーブルエンジンでキャッシュされたバッファに対する境界アラインメントの無効化を修正。これは https://github.com/ClickHouse/ClickHouse/pull/81868 で壊れていた。#82493Kseniia Sumarokova)。
  • S3 クライアントの no_sign_request を修正。これは S3 リクエストへの署名を明示的に回避するために使用できる。また、エンドポイントベースの設定を使うことで特定のエンドポイントに対して定義することもできる。#83379Antonio Andelic)。
  • s3Cluster() から複製 MergeTree への INSERT SELECT 中に、利用できないノードをスキップするようにした。#83676Igor Nikonov)。
  • S3 リクエストレート低下のための早期リターン条件を修正:再試行可能なエラーにより全スレッドが一時停止している場合にスローダウン動作を有効にするには、s3_slow_all_threads_after_network_error か backup_slow_all_threads_after_retryable_s3_error のいずれかが true であればよく、両方が必要という条件を改めた。#85505Julia Kartseva)。
  • Distributed テーブルまたはリモートテーブル関数経由でオブジェクトストレージ関数から読み取る際の論理エラーを修正。次を修正: #84658#85173#52022#85359alesapin)。
  • S3Queue における "Table is already registered" の論理エラーを修正。#84433 をクローズ。https://github.com/ClickHouse/ClickHouse/pull/83530 以降で発生していた。#84677Kseniia Sumarokova)。
  • 大きな設定値によって S3Queue テーブルおよびレプリカの再起動が失敗する問題を修正。#86074Nikolay Degterinsky)。

DynamicAndVariantTypeFixes

  • パース失敗時の Dynamic 列のロールバック処理を修正。#82169 (Pavel Kruglov).
  • UNION 内の Variant 型で発生しうるクラッシュを修正。#83295 (Pavel Kruglov).
  • 遅延マテリアライズ時の Variant 列の読み取りを修正。#84400 (Pavel Kruglov).
  • 既存テーブルの読み取り時に実行される default/materialize 式において、experimental/suspicious な型を検証しないように修正。#81618 (Pavel Kruglov).

Keeper の修正

  • Keeper の修正: セッション終了時に一時ノードが削除された場合、合計 watch 数が正しく更新されるようにしました。#83583 (Antonio Andelic)。
  • Keeper の changelog への書き込み順序が乱れる問題を修正しました。以前は、changelog への書き込みが処理中の状態でロールバックが発生すると、出力先ファイルが同時に変更される可能性がありました。これによりログの不整合やデータ損失が発生する可能性がありました。#84434 (Antonio Andelic)。
  • RocksDB ストレージを使用する Keeper において、イテレータが破棄されずリークしていた問題を修正しました。#84523 (Azat Khuzhin)。
  • Keeper の設定 rotate_log_storage_interval = 0 により ClickHouse がクラッシュする問題を修正しました(issue #83975)。#84637 (George Larionov)。
  • Keeper が返す合計 watch 数が正しくない問題を修正しました。#84890 (Antonio Andelic)。
  • RefreshTask で 'view' から ZooKeeper を取得するときに 'mutex' をロックするようにしました。#84699 (Tuan Pham Anh)。

インデックスに関する修正

  • オルタネーションを含み、先頭のオルタナティブがリテラルでない正規表現(regexp)を使用した token/ngram インデックスでのフィルタリング時に、granule を過剰にスキップしてしまう問題を修正しました。#79373 (Eduard Karacharov)。
  • use_skip_indexes_if_final_exact_mode 設定の実装(25.6 で導入)が、MergeTree エンジンの設定やデータ分布によっては、適切な候補範囲を選択できない場合がありました。この問題は解決されました。#82667 (Shankar Iyer)。
  • use_skip_indexes_if_final_exact_mode 設定の最適化(25.6 で導入)が、MergeTree エンジンの設定やデータ分布によっては、適切な候補範囲を選択できない場合がありました。この問題は解決されました。#82879 (Shankar Iyer)。
  • 以前は、set インデックスが、granule がフィルタ条件を満たしているかどうかを確認する際に、Nullable カラムを考慮していませんでした(issue #75485)。#84305 (Elmi Ahmadov)。
  • MinMax インデックスの評価中に、NaN 値との比較で正しい範囲が使用されていませんでした。#84386 (Elmi Ahmadov)。
  • ngram および no_op トークナイザを使用した場合に、空の入力トークンによって(実験的な)テキストインデックスがクラッシュしなくなりました。#84849 (Robert Schulze)。

マテリアライズドビューの修正

  • テーブルの依存関係に起因してマテリアライズドビューが INSERT クエリを取りこぼすバグを修正。#82222 (Nikolay Degterinsky)。
  • https://github.com/ClickHouse/ClickHouse/pull/79963 以降、マテリアライズドビューでサブカラムを使用すると正しく動作せず、ユーザーが Not found column X in block エラーを受け取る可能性がありました。この挙動を修正しました。この変更により、次の Issue が修正されます: #82784#83221 (Nikita Mikhaylov)。
  • 型が異なる場合に mv で発生していた illegal_type_of_argument エラーを修正。#85135 (Sema Checherinda)。

Azure およびクラウドストレージの修正

  • AzureBlobStorage において、ネイティブコピー時に認証方法を比較する際に例外が発生した場合、読み取りとコピー(非ネイティブコピー)にフォールバックするようコードを更新しました。#82693 (Smita Kulkarni).
  • AzureIteratorAsync におけるメモリの二重解放を修正しました。#85064 (Nikita Taranov).

クラッシュおよび安定性に関する修正

  • user_id が空になる場合があるため、セッション終了時のロギング中に発生しうるクラッシュを修正しました。 #82513 (Bharat Nallan).
  • 不正な INSERT 実行後に接続が切断状態のまま残ることによって発生するクライアントのクラッシュを修正しました。 #83253 (Azat Khuzhin).
  • 空のカラムを持つブロックのサイズ計算時に発生するクラッシュを修正しました。 #83271 (Raúl Marín).
  • CPU スケジューリング有効時に、負荷下で実行される max_threads=1 設定付きクエリで発生しうるクラッシュを修正しました。 #83387 (Fan Ziqi).
  • zoutofmemory をハードウェアエラーとして扱うようにし、それ以外の場合には logical error をスローするようにしました。詳細は https://github.com/clickhouse/clickhouse-core-incidents/issues/877 を参照してください。 #84420 (Han Fei).
  • BackgroundSchedulePool のシャットダウン時に、タスクからのスレッド join に起因する可能性のあるアボートや、(ユニットテストにおける)ハングを修正しました。 #83769 (Azat Khuzhin).
  • バックグラウンドのキャンセルチェック用スレッドによって引き起こされるデッドロックを修正しました。 #84203 (Antonio Andelic).
  • ライブラリブリッジのクリーンアップ時に、コンテキストの再帰的ロックによってシャットダウン時に発生するデッドロックを修正しました。 #83824 (Azat Khuzhin).
  • 不正な INSERT 実行後に接続が切断状態のまま残ることによって発生するクライアントのクラッシュを修正しました。 #83842 (Azat Khuzhin).
  • String のデシリアライズ中に MEMORY_LIMIT_EXCEEDED が発生した場合に未定義動作(クラッシュ)となりうる問題を修正しました。 #85440 (Azat Khuzhin).
  • log_comment または insert_deduplication_token の設定を変更する非同期 INSERT で、まれに発生するクラッシュを修正しました。 #85540 (Anton Popov).

Glue およびカタログの修正

  • Glue カタログ統合におけるバグを修正しました。これにより、ClickHouse はサブカラムの一部に Decimal 型を含むネストされたデータ型のテーブルを読み取れるようになりました(例: map<string, decimal(9, 2)>)。#81301 を修正。#82114alesapin)。
  • ClickHouse は、テーブルタイプが小文字で指定されている Glue Catalog からもテーブルを読み取るようになりました。#84316alesapin)。
  • Unity Catalog は、Delta 以外のテーブルの場合に、不正なデータ型を持つスキーマを無視するようになりました。#85699 を修正。#85950alesapin)。

関数の修正

  • 関数 trim{Left,Right,Both} は、型 FixedString(N) の入力文字列をサポートするようになりました。たとえば、SELECT trimBoth(toFixedString('abc', 3), 'ac') が動作するようになりました。 #82691 (Robert Schulze).
  • 関数 trim がすべて定数の入力で呼び出された場合、定数の出力文字列を生成するようになりました(バグ #78796)。 #82900 (Robert Schulze).
  • フォーマッタ %f が可変サイズのフォーマッタ(例: %M)と併用されたときの、関数 formatDateTime の不正な出力を修正しました。 #83020 (Robert Schulze).
  • CASE 関数における NULL 引数のバグを修正しました。 #82436 (Yarik Briukhovetskyi).
  • lowCardinalityKeys 関数で、共有ディクショナリの無関係な部分を使用しないようにしました。 #83118 (Alexey Milovidov).
  • 定数引数と非定数引数が混在する場合の colorSRGBToOKLCH/colorOKLCHToSRGB を修正しました。 #83906 (Azat Khuzhin).
  • array() 関数における空のタプルの不正な構築を修正しました。これにより #84202 が修正されました。 #84297 (Amos Bird).
  • Bech32 のエンコードおよびデコードが誤った結果になる原因となっていたバグを修正しました。このバグは、テストに使用していたアルゴリズムのオンライン実装にも同じ問題があったため、当初は検出されませんでした。 #84257 (George Larionov).

分散クエリの修正

  • LIMIT を伴う並列分散 INSERT SELECT が許可されていましたが、これは不正であり、ターゲットテーブルでデータの重複を引き起こします。 #84477 (Igor Nikonov).
  • JOIN またはサブクエリが存在する場合には、テーブル関数をそのクラスタ用の代替(*Cluster 版など)に置き換えようとしないようにしました。 #84335 (Konstantin Bogdanov).
  • クラッシュを避けるため、分散コンテキストで相関サブクエリが使用されているかどうかをチェックする処理を追加しました。 #82205 を修正します。 #85030 (Dmitry Novik).
  • *Cluster 関数であることの判定指標として distributed_depth を使用するのは不正確であり、データ重複を引き起こす可能性がありました。その代わりに client_info.collaborate_with_initiator を使用します。 #85734 (Konstantin Bogdanov).
  • Distributed 宛先テーブルに対する並列分散 INSERT SELECT で、WITH ステートメントからのグローバル定数をサポートしました。これまで、このクエリは Unknown expression identifier エラーをスローすることがありました。 #85811 (Nikolai Kochetov).
  • DatabaseReplicated を用いた CREATE ... AS (SELECT * FROM s3Cluster(...)) の試行時に論理エラーが発生する問題を修正しました。 #85904 (Konstantin Bogdanov).
  • Distributed テーブルの ALTER 時に sharding_key を検証するチェックを追加しました。以前は不正な ALTER によりテーブル定義が壊れ、サーバーの再起動時に問題が発生していました。 #86015 (Nikolay Degterinsky).

メトリクスおよびモニタリングの修正

  • 非同期メトリクス設定 asynchronous_metrics_update_period_s および asynchronous_heavy_metrics_update_period_s の検証ロジックを修正。#82310 (Bharat Nallan)。
  • メトリクス IndexUncompressedCacheBytes / IndexUncompressedCacheCells / IndexMarkCacheBytes / IndexMarkCacheFiles を修正(以前は Cache プレフィックスのないメトリクスとしてカウントされていた)。#83730 (Azat Khuzhin)。
  • QueryMetricLog で発生していた LOGICAL_ERROR を修正(Mutex が NULL になり得ない問題)。#82979 (Pablo Marcos)。
  • 不正確だったメトリクス KafkaAssignedPartitions および KafkaConsumersWithAssignment を修正。#85494 (Ilya Golshtein)。
  • PREWHERE(明示的または自動)が使用される場合に、処理バイト数の統計が過小評価される問題を修正。#85495 (Michael Kolupaev)。
  • バックグラウンドスケジュールプールおよびエグゼキュータからのメモリトラッキングのずれを修正。#84946 (Azat Khuzhin)。

データ型および変換の修正

  • Time のパースによって msan の問題が発生する可能性があったケースを修正しました。これにより次の問題が修正されました: #82477#82514Yarik Briukhovetskyi)。
  • LowCardinality(Float32|Float64|BFloat16) 型における NaN 値のソートを修正しました。#83786Pervakov Grigorii)。
  • Date から DateTime64 へのキャスト時に大きな値(>2106-02-07)がオーバーフローする問題を修正しました。#83982Yarik Briukhovetskyi)。
  • 負の Time 値がテーブルに暗黙的に読み込まれる問題を修正し、ドキュメントの記述も分かりやすくしました。#83091Yarik Briukhovetskyi)。
  • コーデック DoubleDelta は、数値型のカラムにのみ適用できるようになりました。特に、FixedString カラムは DoubleDelta を使用して圧縮できなくなりました(#80220 の修正)。#84383Jimmy Aguilar Mena)。
  • JSON 数値を Decimal 型に変換する際の JSONExtract における精度低下を修正しました。これにより、数値の JSON 値は浮動小数点の丸め誤差を回避し、元の 10 進表現を正確に保持します。#85665ssive7b)。

メモリおよびリソース管理

  • max_untracked_memory 周りの誤ったメモリ管理を修正。 #83607 (Azat Khuzhin).
  • クエリ間で async_read_counters を共有しないように変更。 #83423 (Azat Khuzhin).
  • 一時データストレージとして使用される場合に、ファイルキャッシュが初期化されていない可能性によるエラーを修正。 #83539 (Bharat Nallan).
  • filesystem_prefetches_limit を常に適用するように変更(MergeTreePrefetchedReadPool の場合に限らず)。 #83999 (Azat Khuzhin).

コンフィグレーションおよび設定の修正

  • URI 経由で設定を渡す場合、最後の値が採用されるようにしました。#82137 (Sema Checherinda).
  • クライアント内のデータレース(グローバルコンテキストを使用しないようにすることで)および session_timezone の上書きの問題を修正しました(以前は、session_timezoneusers.xml / クライアントオプションで空でない値に設定され、クエリコンテキストでは空に設定されていた場合、本来はクエリコンテキストが優先されるべきところで users.xml の値が使用されていましたが、現在は常にクエリコンテキストがグローバルコンテキストより優先されます)。#82444 (Azat Khuzhin).
  • サーバーの動作がスタックしないようにするため、threadpool_writer_pool_size を 0 に設定することを禁止しました。#82532 (Bharat Nallan).
  • 設定項目 role_cache_expiration_time_seconds の構成における軽微な整数オーバーフローを解消しました(issue #83374)。#83461 (wushap).
  • 論理エラーを引き起こす可能性があるため、max_insert_block_size に 0 を指定することを禁止しました。#83688 (Bharat Nallan).
  • estimateCompressionRatio() において block_size_bytes = 0 の場合に発生する無限ループを修正しました。#83704 (Azat Khuzhin).
  • date_time_input_format などのパラメータが、multipart HTTP リクエスト使用時に無視されていた問題を修正しました。#85570 (Sema Checherinda).

MongoDB の修正

  • 以前は、MongoDB テーブルエンジンの定義で host:port 引数にパスコンポーネントを含めることができましたが、これは暗黙的に無視されていました。MongoDB 連携機能では、そのようなテーブルの読み込みは拒否されます。この修正により、MongoDB エンジンが 5 つの引数を取る場合には、そのようなテーブルの読み込みを許可し、引数で指定されたデータベース名を使用してパスコンポーネントを無視します。 注: この修正は、新しく作成されたテーブルや mongo テーブル関数を用いたクエリ、辞書ソースおよび名前付きコレクションには適用されません。 #81942 (Vladimir Cherkasov).

その他の修正

  • 以前のバージョンでは、/js へのリクエストに対してサーバーが過剰な内容を返していました。これにより #61890 が解決されました。#81895Alexey Milovidov)。
  • InterpreterInsertQuery::extendQueryLogElemImpl を修正し、(名前に - のような特殊文字が含まれている場合など)必要に応じてデータベース名およびテーブル名にバッククォートを追加するよう修正しました。 #81528 (Ilia Shvyrialkin).
  • suggestion スレッドとメインクライアントスレッドの間で発生し得るデータレースを修正。 #82233 (Azat Khuzhin).
  • union/intersect/except_default_mode の書き換えにおける例外安全性の問題を修正。 #82664 をクローズ。 #82820 (Alexey Milovidov).
  • キャッシュを行わない Database 実装を使用している場合、対応するテーブルのメタデータは、カラムが返されて参照が無効になった後に削除されます。 #82939 (buyval01).
  • JSONEachRowWithProgress における Onprogress 呼び出しが終了処理と同期されるように変更されました。 #83879 (Sema Checherinda).
  • MATERIALIZE COLUMN クエリの実行時に checksums.txt に予期しないファイルが含まれ、最終的にデータパートが detached 状態になる可能性があった、まれに発生するバグを修正しました。 #84007 (alesapin).
  • パーツの定期的なリフレッシュ時に例外を適切に処理するようにしました。 #84083 (Azat Khuzhin).
  • クエリ内のブール値リテラルに対するカラム名の生成を、1/0 ではなく true/false を使用するように修正し、ブール値リテラルと整数リテラルのあいだでカラム名が衝突しないようにします。 #84945 (xiaohuanlin).
  • Merge テーブルエンジンにおいて不正確なソートが発生する可能性のある問題を修正します。 #85025 (Xiaozhe Yu).
  • DiskEncrypted 向けの不足していた API を実装。 #85028 (Azat Khuzhin).
  • 名前の競合が発生する場合に、新しいアナライザーが WITH 句内で外側のエイリアスを参照できるようにする後方互換性用の設定を導入しました。これにより #82700 が修正されます。 #83797 (Dmitry Novik)。
  • analyzer を有効にしている場合、remote テーブル関数の view(...) 引数内で任意のテーブルを参照できるようにしました。#78717 を修正。#79377 を修正。#83844Dmitry Novik)。
  • plain_rewritable/plain メタデータタイプに対して、(実験的トランザクションで使用される MergeTree での)追記型書き込みが適切に処理されるように修正しました。以前はこれらのタイプは単純に無視されていました。 #83695 (Tuan Pham Anh).
  • IAccessStorage におけるロガーの使用を修正。 #84365 (Konstantin Bogdanov)。
  • データレイクでの仮想カラムを用いたファイルのプルーニングを修正。 #84520 (Kseniia Sumarokova).
  • 遅延しているリモートソースをクエリした際に、ベクターの範囲外アクセスが発生する可能性があった問題を修正しました。 #84820 (George Larionov).
  • オブジェクトキューエンジンのテーブルメタデータに、すべての設定が正しく保存されるようにしました。 #84860 (Antonio Andelic).
  • lazyカラムを外部ソートと併用した場合に発生する CORRUPTED_DATA エラーを修正しました。 #84738 (János Benjamin Antal).
  • SYSTEM DROP REPLICA クエリ中の不要な getStatus() 呼び出しを削除しました。バックグラウンドでテーブルが削除されている場合に、Shutdown for storage is called 例外がスローされてしまう問題を修正しました。 #85220 (Nikolay Degterinsky).
  • CREATE OR REPLACE および RENAME クエリに、不足していたテーブル名の長さチェックを追加しました。 #85326 (Michael Kolupaev).
  • JSON に対する ALTER UPDATE の実行中に発生するクラッシュとデータ破損を修正。 #85383 (Pavel Kruglov).
  • 長い文字列に対する CoalescingMergeTree のセグメンテーションフォルトを修正しました。これにより #84582 がクローズされます。#85709scanhex12)。
  • send_logs_source_regexp を修正(#85105 における非同期ログ処理のリファクタリング後)。 #85797Azat Khuzhin)。
  • MEMORY_LIMIT_EXCEEDED エラー時に update_field を持つ辞書で起こりうる不整合を修正。#85807Azat Khuzhin)。
  • url() テーブル関数による HTTP リクエストを修正し、標準以外のポートへアクセスする際に Host ヘッダーにポート番号が正しく含まれるようにしました。これにより、開発環境で一般的な、カスタムポートで動作する MinIO などの S3 互換サービスに対して事前署名付き URL を使用する場合に発生していた認証エラーが解消されます。(#85898 を修正)。#85921Tom Quist)。