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

Cloud 向け v25.8 の変更履歴

後方互換性を損なう変更

JSON およびデータ形式の変更

  • JSON フォーマットで、64 ビット整数をデフォルトでクォートしないようにしました。 #74079 (Pavel Kruglov).
  • JSON 内で異なる型の値を要素に持つ配列について、名前なしの Tuple ではなく Array(Dynamic) を推論するようにしました。以前の動作を使用するには、input_format_json_infer_array_of_dynamic_from_array_of_different_types 設定を無効にしてください。 #80859 (Pavel Kruglov).
  • Parquet 出力フォーマットでは、Enum 型の値をデフォルトで、論理型 ENUM を持つ BYTE_ARRAY として書き出すようにしました。 #84169 (Pavel Kruglov).

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

  • 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)。

関数の拡張

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

データ型の改善

  • Decimal から Float32 への変換精度を改善し、Decimal から BFloat16 への変換を実装しました。#82660 をクローズします。#82823Alexey Milovidov)。

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

  • これまで、BACKUP クエリ、マージ、ミューテーションはローカルトラフィック(max_local_read_bandwidth_for_servermax_local_write_bandwidth_for_server)およびリモートトラフィック(max_remote_read_network_bandwidth_for_servermax_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 のスキーマ進化で複合型をサポート。#73714scanhex12)。
  • insert クエリ向けの Iceberg 書き込みを導入。#82692scanhex12)。
  • Iceberg テーブルエンジンで位置指定削除(positional deletes)をサポート。#83094Daniil Ivanik)。
  • フィールド ID による Iceberg データファイルの読み取りをサポート。#83065 をクローズ。#83653scanhex12)。
  • CREATE に対する Iceberg 書き込みをサポート。#83927 をクローズ。#83983scanhex12)。
  • Glue カタログ向けの書き込みをサポート。#84136scanhex12)。
  • Iceberg REST カタログ向けの書き込みをサポート。#84684scanhex12)。
  • すべての Iceberg の positional delete ファイルをデータファイルにマージ。これにより Iceberg ストレージ内の Parquet ファイルの数とサイズが削減される。構文: OPTIMIZE TABLE table_name#85250scanhex12)。
  • Iceberg に対する DROP TABLE をサポート(REST/Glue カタログからの削除 + テーブルに関するメタデータの削除)。#85395scanhex12)。
  • merge-on-read 形式の Iceberg に対する ALTER DELETE ミューテーションをサポート。#85549scanhex12)。
  • DeltaLake への書き込みをサポート。#79603 をクローズ。#85564Kseniia Sumarokova)。
  • min-max プルーニング向けに、メタデータ(manifest entries)により多くの Iceberg 統計情報(カラムサイズ、下限値および上限値)を書き込む。#85746scanhex12)。
  • Iceberg において単純な型に対するカラムの追加/削除/変更をサポート。#85769scanhex12)。

MergeTree とストレージ

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

プロトコルおよびクライアントサポート

  • arrowflight テーブルエンジンを追加し、ArrowFlight RPC プロトコルをサポートします。 #74184 (zakr600).
  • PostgreSQL プロトコルの COPY コマンドをサポートします。 #74344 (scanhex12).
  • MySQL プロトコル向けの C# クライアントをサポートします。これにより #83992 が解決されます。 #84397 (scanhex12).
  • mysql_port および postgresql_port で安全な接続を必須とします。 #82962 (Shaohua 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#80879 (Sergei Trifonov)。
  • ワークロード設定 max_waiting_queries がサポートされました。待機クエリキューのサイズを制限するために使用できます。上限に達した場合、それ以降のすべてのクエリは SERVER_OVERLOADED エラーで終了します。#81250 (Oleg Doronin)。
  • 設定されたクエリ数または時間のしきい値に達したら TCP 接続を切断します。#68000 を解決しました。#81472 (Kenny Sun)。

Cloud ストレージ

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

Keeper

実験的機能

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

  • Ytsaurus テーブルエンジンおよびテーブル関数を追加しました。 #77606 (MikhailBurdukov)

テキスト索引の改善

  • テキスト索引を検索するための汎用ツールである searchAnysearchAll 関数を追加しました。 #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 のバケットをマージできるようにすることでパフォーマンスが向上します。欠点としては、メモリ使用量が増加する可能性があります(顕著ではないはずです)。#80179Nikita Taranov)。
  • TOTALS ステップ以降のパイプラインをマルチスレッド化しました。#80331UnamedRus)。
  • 集約クエリが NOT NULL カラムに対する単一の COUNT() 関数のみを含む場合、ハッシュテーブル探索中に集約ロジックを完全にインライン展開します。これにより、いかなる集約状態の確保や維持も不要になり、メモリ使用量と CPU オーバーヘッドを大幅に削減します。これは #81982 を部分的に解決します。#82104Amos Bird)。
  • 複数の文字列または数値カラムで GROUP BY を行う場合に、シリアライズされたキーを列指向で計算します。#83884李扬)。
  • -If コンビネータ向けに addManyDefaults を実装しました。#83870Raúl Marín)。

JOIN の最適化

  • JOIN の入力および出力ブロック(結合アルゴリズムが対応している場合)の最小ブロックサイズ(行数)を制御するため、新しい設定 min_joined_block_size_rowsmin_joined_block_size_bytes に類似、デフォルトは 65409)を追加しました。小さいブロックはまとめられます。#81886Nikita Taranov)。
  • 典型的な「キーカラムが 1 つだけ」のケースにおいてハッシュマップに対する追加ループを削除し、さらに null_mapjoin_mask が常に true / false になる場合にはそれらのチェックを省略することで、HashJoin のパフォーマンスを最適化しました。#82308Nikita Taranov)。
  • #82308null_map および JoinMask に対する最適化を、複数の OR 条件を含む JOIN のケースにも適用しました。また、KnownRowsHolder データ構造も最適化しました。#83041Nikita Taranov)。
  • 各フラグへのアクセスごとにハッシュ計算を行うことを避けるため、JOIN フラグには単純な std::vector<std::atomic_bool> を使用するようにしました。#83043Nikita Taranov)。
  • max_joined_block_rows の処理をハッシュ JOIN のメインループ外で行うようにしました。ALL JOIN においてわずかにパフォーマンスが向上します。#83216Nikolai Kochetov)。
  • HashJoinlazy 出力モードを使用する場合、結果カラム用のメモリを事前に確保しないようにしました。特にマッチ数が少ない場合には非効率的であるためです。さらに、結合完了後にはマッチ数が正確に分かるため、より正確に事前確保できるようになります。#83304Nikita Taranov)。
  • 右側が結合キーとなるカラムによって関数的に決定される(すべての行が一意な結合キー値を持つ)場合、すべての 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).
  • Bloom filter 索引が、columnArray 型ではない場合の has([c1, c2, ...], column) のような条件に対しても使用されるようになりました。これにより、そのようなクエリのパフォーマンスが向上し、IN 演算子と同等の効率になります。 #83945 (Doron David).
  • 索引をファイルサイズが小さいものから順に処理するようにしました。最終的な索引の処理順序では、(それぞれ単純さと選択性により)min-max 索引とベクター索引を優先し、その後に小さな索引を処理します。min-max / ベクター索引の中でも、より小さい索引が優先されます。 #84094 (Maruth Goyal).
  • 以前は、テキスト索引データは複数のセグメントに分割されていました(各セグメントサイズはデフォルトで 256 MiB)。これはテキスト索引の構築時のメモリ消費を削減できる可能性がある一方で、ディスク上の必要容量を増加させ、クエリ応答時間も長くしていました。 #84590 (Elmi Ahmadov).

サブクエリの最適化

  • 相関サブクエリに対して、同値クラスを用いて冗長な JOIN 操作を削除することで、生成されるクエリプランを最適化しました。すべての相関カラムに対して同値な式が存在する場合、query_plan_correlated_subqueries_use_substitution SETTING が有効であれば CROSS JOIN は生成されません。#82435Dmitry Novik)。
  • 関数 EXISTS の引数として用いられる場合、相関サブクエリで必要なカラムのみを読み取るようにしました。#82443Dmitry Novik)。

Azure Blob Storage の改善

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

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

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

フォーマットの改善

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

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

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

パイプラインと実行の改善

  • パイプライン構築時のポートヘッダーにおけるメモリコピーを最小化しました。元のPRheymindによるものです。#83381Raúl Marín)。
  • パイプライン構築のパフォーマンスを改善しました。#83631Raúl Marín)。
  • MergeTreeReadersChain::getSampleBlock を最適化しました。#83875Raúl Marín)。
  • 単一の行を返すためだけに定数のマテリアライゼーションを行う場合、そのマテリアライゼーションを最適化しました。#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)

改善点

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

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

バックアップとリストア

データ整合性と検証

  • コミット直前に、パーツに含まれる checksum.txt ファイルの整合性を検証します。#76625 (Sema Checherinda).
  • 不完全なデータミューテーションの影響を現在受けているカラムがリネーム対象となる場合は、RENAME COLUMN の alter mutation を開始できないようにします。#81823 (Mikhail Artemenko).
  • 現在はミューテーションのスナップショットは、可視なパーツのスナップショットから構築されます。スナップショットで使用されるミューテーションカウンターも、含まれるミューテーションに基づいて再計算されます。#82945 (Mikhail Artemenko).
  • パーツのプレフィックスおよびサフィックスを解析する機能を追加し、さらに定数ではないカラムに対するカバレッジも検証します。#83377 (Mikhail Artemenko).

Iceberg テーブルエンジン

  • Iceberg テーブルエンジン向けに position delete をサポートしました。#80237 (YanghongZhong).
  • ClickHouse で Iceberg 用の圧縮された metadata.json ファイルをサポートしました。#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 はシリアライズされ、データパスとともにイニシエータから送信されます。これはプルーニングに必要な情報であり、データファイル一覧のメタ情報としてのみ利用可能で、その処理はイニシエータのみが行いますが、読み取りを行う各サーバ上のデータに適用される必要があります)。#81136 (Kseniia Sumarokova).
  • データレイククラスタ関数でのパーティションプルーニングを修正。#82131 (Kseniia Sumarokova).
  • DeltaLakeCluster テーブル関数におけるパーティション化されたデータの読み取りを修正。この PR ではクラスタ関数のプロトコルバージョンを引き上げ、イニシエータからレプリカへ追加情報を送信できるようにしています。この追加情報には、パーティションカラムをパースするために必要な delta-kernel の変換式(および将来的には生成カラムなどのその他の情報)が含まれます。#82132 (Kseniia Sumarokova).
  • Datalake データベースが、よりわかりやすい例外をスローするようになりました。#81211 を修正。#82304 (alesapin).
  • ストレージ DeltaLake において、内部的な delta-kernel-rs によるフィルタリング(統計情報およびパーティションプルーニング)を実装。#84006 (Kseniia Sumarokova).
  • 設定 delta_lake_enable_expression_visitor_logging を追加し、式ビジターのログを無効化できるようにしました。これは、デバッグ時にテスト用ログレベルであっても冗長になりすぎる可能性があるためです。#84315 (Kseniia Sumarokova).
  • 設定 delta_lake_snapshot_version を追加し、DeltaLake テーブルエンジンで特定のスナップショットバージョンを読み取れるようにしました。#85295 (Kseniia Sumarokova).

データレイク統合

  • 非同期リクエストにより、データカタログでのテーブル一覧処理を高速化。#81084 (alesapin).
  • Glue カタログで TimestampTZ をサポート。この変更により #81654 をクローズ。#83132 (scanhex12).
  • FormatParserGroup を 2 つの独立した構造体に分割。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_rewritable にメソッド moveFilereplaceFile を実装し、データベースディスクとして利用できるようにしました。 #79424 (Tuan Pham Anh).
  • max_remote_read_network_bandwidth_for_server および max_remote_write_network_bandwidth_for_server のスロットリングに起因する問題を回避するため、S3 の読み取りおよび書き込みリクエストを、S3 リクエスト全体ではなく HTTP ソケットレベルでスロットリングするようにしました。 #81837 (Sergei Trifonov).
  • この変更では、s3_slow_all_threads_after_network_error 設定が有効な場合に、S3 のリトライメカニズムにジッターを導入しました。 #81849 (zoomxi).
  • 明示的に指定された IAM ロールを用いた AWS S3 認証を実装しました。GCS 向けに OAuth を実装しました。これらの機能は最近まで ClickHouse Cloud でのみ利用可能でしたが、今回オープンソース化されました。オブジェクトストレージの接続パラメータのシリアル化など、一部のインターフェースを統一しました。 #84011 (Alexey Milovidov).
  • 外部での集約/ソート処理に対して、任意のストレージポリシー(S3 のようなオブジェクトストレージなど)を使用できるようにしました。 #84734 (Azat Khuzhin).
  • 削除対象のすべてのオブジェクトを収集し、1 回のオブジェクトストレージ削除操作としてまとめて実行するようにしました。 #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/etc)Queue のストリーミングを停止するようにしました。 #83530 (Kseniia Sumarokova).
  • S3Queue テーブルレベルでのマテリアライズドビュー挿入設定(mv insert 設定)の変更をサポートしました。新たに S3Queue レベルの設定 min_insert_block_size_rows_for_materialized_views および min_insert_block_size_bytes_for_materialized_views を追加しました。デフォルトではプロファイルレベルの設定が使用され、S3Queue レベルの設定がそれらを上書きします。 #83971 (Kseniia Sumarokova).
  • S3Queue の ordered モードを修正し、shutdown が呼び出された場合には早期に終了するようにしました。 #84463 (Kseniia Sumarokova).

Kafka 統合

ClickHouse Keeper の改良

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

JSON と Dynamic 型

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

Parquet と ORC フォーマット

  • ORC 圧縮ブロックサイズを設定するための設定を導入し、そのデフォルト値を 64KB から 256KB に更新して、Spark や Hive と一貫性を持たせるようにしました。 #80602 (李扬). spark
  • Parquet の enum を、仕様どおりバイト配列として書き込めるようにしました。詳しい情報は後ほど追記します。 #81090 (Arthur Passos). spec
  • Geoparquet を出力フォーマットとして書き込めるようにしました。 #81784 (scanhex12).

分散クエリと並列レプリカ

  • 新しい設定 enable_add_distinct_to_in_subqueries が追加されました。有効化すると、分散クエリにおいて ClickHouse は IN 句内のサブクエリに自動的に DISTINCT を追加します。これにより、分片間で転送される一時テーブルのサイズを大幅に削減し、ネットワーク効率を向上させることができます。注意: これはトレードオフであり、ネットワーク転送量は削減されますが、各ノードで追加のマージ(重複排除)処理が必要になります。ネットワーク転送がボトルネックとなっており、マージコストが許容できる場合にこの設定を有効化してください。 #81908 (fhw12345).
  • address_expression 引数でクラスタが指定されている場合、並列レプリカと併用した remote-() テーブル関数のサポートが追加されました。また、#73295 も修正しています。 #82904 (Igor Nikonov).
  • 並列レプリカを用いた Join は、join logical step を使用するようになりました。並列レプリカを使用した 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_usersmax_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_servermax_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).
  • DatabaseReplicatedSettings のデフォルト値を定義する database_replicated 設定を追加しました。Replicated DB の CREATE クエリ内に設定が存在しない場合、この設定の値が使用されます。 #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).

システムテーブルとオブザーバビリティ

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

データベースエンジン

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

  • テーブル UUID を手動で DatabaseCatalog に追加することで、read-only なリモートディスク上のデータベースのアタッチ処理の問題を修正しました。#82670 (Tuan Pham Anh)。
  • distributed_ddl_output_mode='*_only_active' の場合の DDL タスク処理を改善し、max_replication_lag_to_enqueue を超えるレプリケーションラグを持つ新規または復旧済みのレプリカを待機しないようにしました。これにより、新しいレプリカが初期化または復旧後にアクティブになったものの、大きなレプリケーションログが蓄積されている場合に発生する 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)。
  • Replicated データベース用の設定としてサーバー設定 logs_to_keep を追加し、Replicated データベースに対するデフォルトの logs_to_keep パラメータを構成できるようにしました。値を小さくすると ZooKeeper ノードの数が減少します(特にデータベースが多数ある場合に有益)一方、値を大きくすると、長時間のダウンタイム後でも欠落しているレプリカが追いつけるようになります。#84183 (Alexey Khatskevich)。
  • Replicated データベース設定 max_retries_before_automatic_recovery のデフォルト値を 10 に変更し、一部のケースでより高速なリカバリを可能にしました。#84369 (Alexander Tokmakov)。
  • Replicated データベースにおける非追記型のリフレッシャブルmaterialized view の DDL 操作を最適化し、古い一時テーブルの作成およびリネーム処理をスキップするようにしました。#84858 (Tuan Pham Anh)。

レプリケーションと同期

SystemAndInternalImprovements

  • ZooKeeper 接続に問題が発生した場合にテーブル作成を再試行するように SYSTEM RESTART REPLICA を改善し、テーブルが取りこぼされることを防ぎます。#82616 (Nikolay Degterinsky).
  • ReplicatedMergeTree::executeMetadataAlter に UUID 検証を追加し、StorageID の取得と IDatabase::alterTable の呼び出しの間にテーブルが入れ替えられた場合でも、不正なテーブル定義が発生するのを防ぎます。#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 の改善

  • オンザフライで更新されるカラムやパッチパーツに依存するスキップ索引の無効化を、より細かい粒度で行うようにしました。これにより、スキップ索引はオンザフライで行われる mutation やパッチパーツの影響を受けたパーツでのみ使用されなくなり、以前のようにすべてのパーツで無効化されることはなくなりました。#84241 (Anton Popov).
  • パーツを探索する範囲を制限するために、たとえばローカルメタデータを持つディスク単位でパーツを探索できるようにする MergeTree の設定 search_orphaned_parts_drives を追加しました。#84710 (Ilya Golshtein).
  • WHERE に対する、これまで不足していた read_in_order_use_virtual_row のサポートを追加しました。これにより、PREWHERE に完全にはプッシュダウンされなかったフィルタを持つクエリで、より多くのパーツの読み取りをスキップできるようになりました。#84835 (Nikolai Kochetov).
  • MergeTree における「compact」Variant discriminator のシリアライゼーションの利用を修正しました。以前は、利用可能であるにもかかわらず、一部のケースで使用されていませんでした。#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).
  • 暗号化された名前付きコレクション用の 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 は、接続を維持すべきかどうかが判明したタイミングで、ヘッダーの末尾に送信されるようになりました。#81951Sema Checherinda)。
  • 以前のバージョンでは、集約関数状態を IPv4 で乗算した際に、適切なエラーコードではなく論理エラーが発生していました。#82817 をクローズ。#82818Alexey Milovidov)。
  • AsynchronousMetrics におけるエラー処理を改善しました。/sys/block ディレクトリが存在するがアクセスできない場合、サーバーはブロックデバイスを監視せずに起動するようになります。#79229 をクローズ。#83115Alexey Milovidov)。
  • materialized view に不正な SELECT 文が含まれる場合の INSERT に対して、依存関係チェックが誤っており、明確な説明を伴う有用なエラーではなく、不明瞭な std::exception を受け取る可能性がありました。現在はこれが修正されています。この修正は #82889 に対応します。#83190Nikita Mikhaylov)。
  • 例外メッセージ内に、式アクションの非常に長い説明を出力しないようにしました。#83164 をクローズ。#83350Alexey Milovidov)。
  • ストレージのシャットダウン時に、getStatusErrorCodes::ABORTED 例外をスローします。以前はこれにより SELECT クエリが失敗していましたが、現在は ErrorCodes::ABORTED 例外を捕捉し、意図的に無視するようになりました。#83435Miсhael Stetsyuk)。
  • PROJECTION の読み込みおよび追加に関する特定の状況での例外メッセージを、より読みやすくしました。#83728Robert Schulze)。
  • 閉じた接続から読み込むことを防ぐため、EOF をチェックする前に接続がキャンセルされているかどうかを確認するようにしました。#83893 を修正。#84227Raufs Dunamalijevs)。
  • 内部チェックを簡素化することで、クライアント接続に対するサーバーのシャットダウン処理を改善しました。#84312Raufs Dunamalijevs)。
  • UDF 実行中の低レベルエラーは、これまではさまざまなエラーコードが返される可能性がありましたが、現在はエラーコード UDF_EXECUTION_FAILED で失敗するようになりました。#84547Xu 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)。
  • パラメータ付きのカラム(例: Decimal(8))の後に続くカラム定義で末尾にカンマが付いている場合の、CREATE DICTIONARY クエリ内でのパース処理を修正しました。 #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)について、1 つ目の引数が定数配列(Set)で 2 つ目が索引付きカラム(部分集合)の場合に活用できるようサポートを改善し、より効率的なクエリ実行を可能にした。#84700 (Doron David).
  • KeyValue ストレージのプライマリキー(例: EmbeddedRocksDB, KeeperMap)に対して IN / GLOBAL IN フィルタをプッシュダウンする際に、set の値の型変換を許可した。#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 におけるパフォーマンス低下を修正しました。#82130 (Pavel Kruglov).
  • analyzer が有効な場合に、セカンダリクエリが常に VIEW からすべてのカラムを読み取ってしまうことで発生していたパフォーマンス低下を修正しました。#81718 を修正します。#83036 (Dmitry Novik).
  • 依存関係を持たないテーブル作成時には循環依存関係をチェックしないようにしました。これにより、https://github.com/ClickHouse/ClickHouse/pull/65405 で導入された、数千個のテーブルを作成するユースケースでのパフォーマンス低下が改善されます。#83077 (Pavel Kruglov).
  • DISTINCT ウィンドウ集計が線形時間で実行されるようにし、sumDistinct のバグを修正しました。#79792 をクローズします。#52253 をクローズします。#79859 (Nihal 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 スナップショットをキャッシュしようとする挙動は、time travel 機能を用いた Iceberg テーブルの利用で問題を引き起こしていました。 #85038 (Daniil Ivanik).
  • REST カタログ経由で Iceberg テーブルをクエリした際のメタデータの解決処理を修正しました。... #85531 (Saurabh Kumar Ojha).
  • icebergS3Cluster および icebergAzureCluster テーブル関数でのシークレットマスキングを修正しました。 #85658 (MikhailBurdukov).

DeltaLake の修正

有効期限 (TTL) と MergeTree の修正

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

Projection の修正

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

Parallel replicas の修正

  • 一部の parallel replicas を用いたクエリにおいて、順序どおりに読み取るための最適化がイニシエータでは適用されるものの、リモートノードでは適用されない場合がありました。その結果、parallel replicas のコーディネータ(イニシエータ上)とリモートノードで異なる読み取りモードが使用されており、論理エラーが発生していました。#80652Igor Nikonov)。
  • サブクエリに FINAL が含まれている場合は parallel replicas を無効化します。#81401 による対応。#83455zoomxi)。
  • parallel replicas と、複数の INNER join に続く RIGHT join を含むクエリで発生していた LOGICAL_ERROR を修正しました。このようなクエリでは parallel replicas を使用しないようにしました。#84299Vladimir Cherkasov)。
  • 読み取りの逆順最適化を使用する parallel replicas のクエリで、誤った結果が生成される可能性がありました。#85406Igor 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 で導入されたバグを修正しました。definer を持つ materialized view に対して INSERT する場合、権限チェックは定義者に付与された権限を使用する必要があります。これにより #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 key IN (...) であるかのように WHERE function(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 を修正。 #82950 (Dmitry Novik).
  • キーが型変換されたキー・バリュー型ストレージを JOIN した場合にクラッシュする問題を修正しました。 #82497 (Pervakov Grigorii).
  • 複数の JOIN を含むクエリで matcher を解決する際に発生していた論理エラーを修正しました。#81969 をクローズ。 #82421 (Vladimir Cherkasov).
  • 等値比較のオペランドの型が異なる、または定数を参照している場合に、JOIN 条件へのフィルタのマージ処理を修正しました。#83432 を修正。 #84145 (Dmitry Novik).
  • 一方のカラムが LowCardinality で、もう一方が定数である不等号条件で JOIN を行う際に、Expected single dictionary argument for function という論理エラーが発生していた問題を修正しました。#81779 をクローズ。 #84019 (Alexey Milovidov).

Replicated データベースの修正

  • 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).
  • メタデータファイルの移動に長時間かかる場合の Replicated データベースの復旧処理を修正しました。 #85177 (Tuan Pham Anh).
  • Keeper 内でデータベースメタデータをリストアした後、Replicated データベースを強制的に復旧するようにしました。 #85960 (Tuan Pham Anh).
  • Replicated データベースの復旧におけるバグを修正しました。テーブル名に % 記号が含まれている場合、復旧処理中に別の名前でテーブルが再作成されてしまう可能性がありました。 #85987 (Alexander Tokmakov).
  • DDL ワーカーがレプリカセットから古くなったホストをクリーンアップするようになりました。これにより 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() から Replicated MergeTree への INSERT SELECT 中に、利用不能なノードをスキップするようにしました。#83676Igor Nikonov)。
  • S3 リクエストレートのスローダウンに対する早期リターンの条件を修正しました。リトライ可能なエラーにより全スレッドが一時停止している際にスローダウン動作を有効化するために、s3_slow_all_threads_after_network_errorbackup_slow_all_threads_after_retryable_s3_error のいずれかが true であればよいようにし、両方が必要にならないようにしました。#85505Julia Kartseva)。
  • 分散テーブルまたはリモートテーブル関数経由でオブジェクトストレージ関数から読み取る際の論理エラーを修正しました。次の issue を修正しています: #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 の修正: セッション終了時に ephemeral node が削除された場合に、合計 watch 数が正しく更新されるように修正。#83583 (Antonio Andelic)。
  • Keeper の changelog への順序不正な書き込みを修正。以前は、changelog への書き込みが進行中の状態で、ロールバックによって出力先ファイルが同時に変更される可能性がありました。この問題はログの不整合およびデータ損失につながる可能性がありました。#84434 (Antonio Andelic)。
  • rocksdb ストレージを使用する Keeper におけるリーク (iterator が解放されていなかった) を修正。#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)。

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

  • 交互指定(オルタネーション)を含み、かつ先頭の選択肢がリテラルでない正規表現を用いた token/ngram 索引でのフィルタリングにおいて、過度にグラニュールをスキップしてしまう問題を修正しました。 #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 索引がフィルタを通過したグラニュールかどうかを判定する際に、Nullable カラムを考慮していませんでした(issue #75485)。 #84305 (Elmi Ahmadov).
  • NaN 値との比較において、MinMax 索引評価時に正しいレンジが使用されていませんでした。 #84386 (Elmi Ahmadov).
  • ngram および no_op トークナイザーが、空の入力トークンに対して(実験的な)テキスト索引をクラッシュさせなくなりました。 #84849 (Robert Schulze).

materialized view の修正

  • テーブルの依存関係に起因して Materialized Views が INSERT クエリを取り逃していたバグを修正しました。#82222 (Nikolay Degterinsky).
  • https://github.com/ClickHouse/ClickHouse/pull/79963 以降、Materialized Views でサブカラムを使用すると動作しなくなり、ユーザーが Not found column X in block エラーを受け取る可能性がありました。この挙動を修正しました。修正対象: #82784#83221 (Nikita Mikhaylov).
  • 型が異なる場合に materialized view 内で発生していた illegal_type_of_argument の問題を修正しました。#85135 (Sema Checherinda).

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

  • AzureBlobStorage においてネイティブコピーを行う際、認証方式を比較している途中で例外が発生した場合には、読み取りとコピー(非ネイティブコピー)にフォールバックするようコードを更新しました。 #82693 (Smita Kulkarni)。
  • AzureIteratorAsync における二重解放(double-free)を修正しました。 #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 をハードウェアエラーとして扱うようにし、それ以外の場合には論理エラーをスローするようにしました。詳細は https://github.com/clickhouse/clickhouse-core-incidents/issues/877 を参照してください。#84420 (Han Fei).
  • BackgroundSchedulePool のシャットダウン時に、タスクからスレッドを join することに起因する可能性のある abort および(ユニットテストにおける)ハングを修正しました。#83769 (Azat Khuzhin).
  • バックグラウンドのキャンセルチェック用スレッドにより発生していたデッドロックを修正しました。#84203 (Antonio Andelic).
  • ライブラリブリッジのクリーンアップ中の再帰的なコンテキストロックに起因する、シャットダウン時のデッドロックを修正しました。#83824 (Azat Khuzhin).
  • 不正な INSERT 実行後に接続が切断状態のまま残ることで発生していたクライアントのクラッシュを修正しました。#83842 (Azat Khuzhin).
  • 文字列のデシリアライズ中に MEMORY_LIMIT_EXCEEDED が発生した場合に起こり得る未定義動作(UB、クラッシュ)を修正しました。#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 カタログからテーブルを読み取れるようになりました。 #84316alesapin)。
  • Unity カタログは、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 関数で、共有 Dictionary の無関係なパーツを使用しないようにしました。#83118 (Alexey Milovidov).
  • const 引数と非 const 引数が混在する場合の colorSRGBToOKLCH/colorOKLCHToSRGB を修正しました。#83906 (Azat Khuzhin).
  • array() 関数で空のタプルが不正に構築される問題を修正しました。この修正により #84202 が解決されます。#84297 (Amos Bird).
  • Bech32 のエンコードおよびデコードが誤って行われる原因となっていたバグを修正しました。このバグは、テストで使用していたオンライン実装も同じ問題を抱えていたため、当初は検出されませんでした。#84257 (George Larionov).

Distributed query fixes

  • LIMIT を伴う並列分散 INSERT SELECT が許可されていましたが、これは正しくなく、ターゲットテーブルのデータが重複する原因になります。#84477 (Igor Nikonov).
  • JOIN またはサブクエリが存在する場合は、テーブル関数をクラスタ版の代替関数に置き換えようとしないようにしました。#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_sasynchronous_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).
  • バックグラウンドスケジュールプールおよび executor におけるメモリトラッキングのずれを修正。#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 経由で settings を渡す場合、最後に指定された値が使用されます。#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 のようなパラメータが、HTTP の multipart リクエスト使用時に無視されていた問題を修正しました。#85570 (Sema Checherinda).

MongoDB の修正

  • 以前は、MongoDB テーブルエンジン定義で host:port 引数にパス要素を含めることができましたが、そのパス要素は暗黙的に無視されていました。MongoDB 連携機能では、そのようなテーブルの読み込みを拒否します。この修正では、MongoDB エンジンに 5 つの引数が指定されている場合に、そのようなテーブルの読み込みを許可し、引数から取得したデータベース名を使用してパス要素を無視します。注意: この修正は、新しく作成されたテーブルや mongo テーブル関数を使用したクエリ、さらに Dictionary のソースおよび名前付きコレクションには適用されません。#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)。