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

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

JSON とデータフォーマットの変更

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

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

関数の機能強化

  • extractKeyValuePairs 関数に、新しい引数 unexpected_quoting_character_strategy が追加されました。これは、quoting_character が予期せず見つかった場合の動作を制御します。詳細については、extractKeyValuePairs のドキュメントを参照してください。#80657 (Arthur Passos).
  • これまでは、countMatches 関数は、pattern が空文字列との一致を許可する場合でも、最初の空一致でカウントを停止していました。この問題に対処するため、countMatches は空一致が発生した際に 1 文字進めて処理を継続するようになりました。従来の動作を維持したい場合は、設定 count_matches_stop_at_empty_match を有効にできます。#81676 (Elmi Ahmadov).

データ型の改善

  • Decimal から Float32 への変換精度を改善し、Decimal から BFloat16 への変換を実装しました。#82660 をクローズしました。#82823 (Alexey 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).
  • ドットを含む識別子が複合識別子としてパースされるのを防ぐため、デフォルト式内ではそのような識別子を backticks で囲むことを必須化。 #83162 (Pervakov Grigorii).
  • PostgreSQL スタイルのヒアドキュメント構文 $tag$ string contents... $tag$ (dollar-quoted 文字列リテラルとも呼ばれる) をサポート。以前のバージョンではタグに対する制約がより緩く、句読点や空白を含む任意の文字を含めることができました。このため、ドル記号で始まる識別子との間でパース上の曖昧さが生じていました。一方、PostgreSQL ではタグに単語文字しか使用できません。この問題を解決するため、ヒアドキュメントのタグに使用できる文字を単語文字のみに制限しました。 #84731 をクローズ。 #84846 (Alexey Milovidov).

セキュリティと権限

  • SYSTEM RESTART REPLICAS は、SHOW TABLES 権限のあるデータベース内のレプリカのみを再起動するようになりました。以前は、このクエリにより、Lazy データベースへのアクセス権がなくても、そのデータベース内のテーブルが同時に drop されている最中に、それらのテーブルが起動されていました。#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 と Delta Lake

  • Iceberg のスキーマ進化で複雑な型をサポートしました。 #73714 (scanhex12).
  • insert クエリでの Iceberg への書き込みを導入しました。 #82692 (scanhex12).
  • Iceberg テーブルエンジンで位置削除をサポートしました。 #83094 (Daniil Ivanik).
  • フィールド ID に基づいて Iceberg のデータファイルを読み取れるようになりました。 #83065 を解決しました。 #83653 (scanhex12).
  • CREATE 時の Iceberg への書き込み。 #83927 を解決しました。 #83983 (scanhex12).
  • Glue カタログへの書き込み。 #84136 (scanhex12).
  • Iceberg REST カタログへの書き込み。 #84684 (scanhex12).
  • Iceberg のすべての position delete files をデータファイルにマージします。これにより、Iceberg ストレージ内の Parquet ファイルの数とサイズが削減されます。Syntax: OPTIMIZE TABLE table_name. #85250 (scanhex12).
  • Iceberg で DROP TABLE をサポートしました (REST/Glue カタログからの削除と、テーブルに関するメタデータの削除) 。 #85395 (scanhex12).
  • merge-on-read フォーマットの Iceberg で ALTER DELETE mutation をサポートしました。 #85549 (scanhex12).
  • Delta Lake への書き込みをサポートしました。 #79603 を解決しました。 #85564 (Kseniia Sumarokova).
  • min-max プルーニングのため、メタデータ (manifest エントリ) に、より多くの Iceberg 統計情報 (カラムサイズ、下限値、上限値) を書き込むようになりました。 #85746 (scanhex12).
  • Iceberg で単純な型のカラムの追加/削除/変更をサポートしました。 #85769 (scanhex12).

MergeTree とストレージ

  • すべてのテーブルで _table 仮想カラムがサポートされるようになり、Merge 型テーブルに限られなくなりました。#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 仮想カラムをサポートしました。このカラムは、各行が属する granule/mark の、その data part 内における 0 始まりの索引を示します。これにより #79572 に対応しています。#82341 (Amos Bird)。

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

  • arrowflight テーブルエンジンを追加し、ArrowFlight RPC プロトコルをサポートしました。#74184 (zakr600).
  • PostgreSQL プロトコルの COPY コマンドのサポートを追加しました。#74344 (scanhex12).
  • mysql プロトコルで C# クライアントをサポートしました。これにより #83992 をクローズします。#84397 (scanhex12).
  • mysql_port および postgresql_port でセキュアな connection を必須にしました。#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-bit bitmap は state の outgoing label を順序付きで保持しますが、outgoing state は hash table に現れる順でディスクに保存されます。そのため、ディスクから読み込む際に label が誤った次の state を指してしまうことがありました。 #82783 (Elmi Ahmadov).
  • 現在、FST tree は非圧縮のままディスクに保存されます。これにより、ディスクへの書き込み時とディスクからの読み取り時の両方で、性能低下や I/O 帯域の増加を招く可能性があります。 #83093 (Elmi Ahmadov).

機能の成熟度に関する更新

パフォーマンス改善

クエリ実行と集計

  • -If 集約関数コンビネーターに対する軽微な最適化。 #78454 (李扬).
  • メモリ効率の高い集計時に、一部のバケットを順不同で送信できるようにする新しいロジック (設定 enable_producing_buckets_out_of_order_in_aggregation で制御され、デフォルトで有効) を追加しました。一部の集計バケットのマージに他より大幅に時間がかかる場合でも、その間にイニシエーターがより大きい bucket id のバケットをマージできるため、パフォーマンスが向上します。欠点として、メモリ使用量が増える可能性があります (増加は大きくない想定です) 。 #80179 (Nikita Taranov).
  • TOTALS ステップ後のパイプラインをマルチスレッド化。 #80331 (UnamedRus).
  • 集計クエリに NOT NULL カラムに対する単一の COUNT() 関数しか含まれない場合、ハッシュテーブルのプロービング中に集計ロジック全体が完全にインライン化されます。これにより、集計状態の割り当てや維持が不要になり、メモリ使用量と CPU オーバーヘッドを大幅に削減できます。これは #81982 に部分的に対応するものです。 #82104 (Amos Bird).
  • 複数の文字列カラムまたは数値カラムで group by する際、シリアライズされた key を列指向で計算するようにしました。 #83884 (李扬).
  • -If コンビネーター向けに addManyDefaults を実装。 #83870 (Raúl Marín).

JOIN の最適化

  • JOIN の入力 block と出力 block の最小サイズ (行数) を制御する新しい設定 min_joined_block_size_rows を追加しました (min_joined_block_size_bytes と同様。デフォルトは 65409) 。join algorithm が対応している場合に有効で、小さな block はまとめられます。#81886 (Nikita Taranov).
  • キーカラムが 1 つだけの典型的なケースで hash map への追加ループを削除し、HashJoin の性能を最適化しました。また、常に true/false となる場合の null_mapjoin_mask のチェックも省略しました。#82308 (Nikita Taranov).
  • #82308null_mapJoinMask の最適化を、複数の論理和条件を持つ JOIN のケースにも適用しました。あわせて、KnownRowsHolder data structure も最適化しました。#83041 (Nikita Taranov).
  • フラグにアクセスするたびに hash を計算しないよう、join フラグには単純な std::vector<std::atomic_bool> を使用します。#83043 (Nikita Taranov).
  • hash JOIN のメインループの外で max_joined_block_rows を処理するようにしました。ALL JOIN の性能がわずかに向上します。#83216 (Nikolai Kochetov).
  • HashJoinlazy 出力モードを使用する場合、結果カラム用メモリを事前確保しないようにしました。これは特に一致数が少ない場合に非効率です。さらに、JOIN 完了後には一致数を正確に把握できるため、より適切に事前確保できます。#83304 (Nikita Taranov).
  • 右側が join キーカラムによって関数的に決定される場合 (すべての行の join key 値が一意な場合) 、すべての LEFT/INNER JOIN は自動的に RightAny に変換されます。#84010 (Nikita Taranov).
  • Join モードでのパッチパート適用の性能を改善しました。#85040 (Anton Popov).

分散クエリの改善

  • ブロックの圧縮・展開およびシリアライゼーション・デシリアライゼーションを、ネットワーク接続に関連付けられた単一スレッドではなく、パイプラインスレッドにオフロードするオプションを追加しました。これは設定 enable_parallel_blocks_marshalling で制御されます。イニシエーターとリモートノードの間で大量のデータを転送する分散クエリの高速化が期待されます。 #78694 (Nikita Taranov).
  • 各分片で INSERT SELECT が独立して実行されるモードでは、並列分散 INSERT SELECT がデフォルトで有効になりました。詳細は設定 parallel_distributed_insert_select を参照してください。 #80425 (Igor Nikonov).
  • ネイティブプロトコルで logs とプロファイルイベントを圧縮するようにしました。100 台以上のレプリカを持つクラスターでは、非圧縮のプロファイルイベントが 1..10 MB/秒 に達し、低速なインターネット接続では進行状況バーの動作が鈍くなります。これにより #82533 を解決します。 #82535 (Alexey Milovidov).
  • 各分片で INSERT SELECT が独立して実行されるモードでは、並列分散 INSERT SELECT がデフォルトで有効になりました。詳細は設定 parallel_distributed_insert_select を参照してください。 #83040 (Igor Nikonov).
  • 並列レプリカの最小タスクサイズの計算を修正しました。 #84752 (Nikita 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 filter 索引が使われるようになりました。これにより、この種のクエリの性能が向上し、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 の認証トークンを cache して再利用するようになり、スロットリングを回避できるようになりました。 #79860 (Nick Blakely).
  • Azure Blob Storage 向けの curl HTTP client を poco HTTP client に置き換えました。これらのクライアント向けに、S3 の設定に対応する複数の設定が追加されました。Azure と S3 の両方で、短めの接続 timeout が導入されました。Azure の プロファイルイベント とメトリクスの introspection も改善されました。新しい client はデフォルトで有効になっており、Azure Blob Storage 上のコールドクエリのレイテンシを大幅に改善します。古い Curl client に戻すには、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 リーダーの実装。通常は従来より高速で、ページレベルのフィルタ pushdown と 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 によるものです。#83381 (Raúl Marín)。
  • パイプライン構築のパフォーマンスを改善しました。#83631 (Raúl Marín)。
  • MergeTreeReadersChain::getSampleBlock を最適化しました。#83875 (Raúl Marín)。
  • 1行だけを返すために定数を実体化する場合の最適化を行いました。#85071 (Alexey Milovidov)。

メモリとリソースの最適化

  • パフォーマンス向上のため、jemalloc の設定を一部調整しました。#81807 (Antonio Andelic).
  • 偽共有を減らすため、ProfileEvents のカウンターにアラインメントを追加しました。#82697 (Jiebin Sun).
  • CompressedReadBufferBase::readCompressedData で不要な memcpy 呼び出しを削減しました。#83986 (Raúl Marín).

クエリ計画と分析

ロギングの改善

関数の最適化

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

Keeper の改善

データレイクの改善

  • delta-kernel-rsバックエンドでの並列ファイル処理を改善。 #85642 (Azat Khuzhin).

改善

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

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

バックアップとリストア

データ整合性と検証

  • コミット直前に、パーツの 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).
  • 各 data file の object を明示的に保持しなくても、Iceberg テーブルから object を非同期に反復処理できるようにしました。 #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 ではクラスター関数のプロトコルバージョンを引き上げ、イニシエーターからレプリカへ追加情報を送信できるようにしました。この追加情報には、パーティションカラム (および今後は generated columns など) をパースするために必要な delta-kernel の変換式が含まれます。 #82132 (Kseniia Sumarokova).
  • database Datalake が、よりわかりやすい例外を返すようになりました。#81211 を修正。 #82304 (alesapin).
  • storage DeltaLake に、内部 delta-kernel-rs フィルタリング (統計およびパーティションプルーニング) を実装。 #84006 (Kseniia Sumarokova).
  • デバッグ時には test log level であっても expression visitor のログが冗長になりすぎる場合があるため、それを無効化する設定 delta_lake_enable_expression_visitor_logging を追加。 #84315 (Kseniia Sumarokova).
  • テーブルエンジン DeltaLake で特定の スナップショットバージョン を読み取れるようにする設定 delta_lake_snapshot_version を追加。 #85295 (Kseniia Sumarokova).

データレイク インテグレーション

  • 非同期リクエストにより、データカタログでのテーブル一覧表示を高速化。 #81084 (alesapin).
  • Glue カタログで TimestampTZ をサポート。これにより #81654 をクローズ。 #83132 (scanhex12).
  • FormatParserGroup を 2 つの独立した構造体に分割。1 つ目は共有のコンピュートおよび I/O リソース、2 つ目は共有のフィルターリソース (filter ActionDag、KeyCondition) を担当します。これにより、異なるスレッド間でこれらの構造体をより柔軟に共有できるようになりました。 #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 role を使用する 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 settings を変更できるようにしました。新しい S3Queue レベル設定 min_insert_block_size_rows_for_materialized_viewsmin_insert_block_size_bytes_for_materialized_views を追加しました。デフォルトでは profile レベル設定が使用され、S3Queue レベル設定でそれらを上書きできます。#83971 (Kseniia Sumarokova).
  • S3Queue の ordered mode を修正しました。シャットダウンが呼び出された場合は、より早く終了します。#84463 (Kseniia Sumarokova).

Kafka インテグレーション

ClickHouse Keeper の改善

  • Keeper の改善: バックグラウンドスレッドで変更ログファイルをディスク間で移動できるようにしました。従来は、変更ログを別のディスクに移動すると、移動が完了するまで Keeper 全体がブロックされていました。そのため、移動に長時間かかる場合 (たとえば S3 ディスクへの移動) には、パフォーマンスが低下していました。 #82485 (Antonio Andelic).
  • Keeper の改善: 新しい config keeper_server.cleanup_old_and_ignore_new_acl を追加しました。これを有効にすると、すべてのノードの ACL がクリアされ、新しいリクエストの ACL は無視されます。ノードから ACL を完全に削除することが目的であれば、新しい snapshot が作成されるまで、この config を有効のままにしておくことが重要です。 #82496 (Antonio Andelic).
  • Keeper の改善: world:anyone ACL に対する個別の権限をサポートしました。 #82755 (Antonio Andelic).
  • config で、パスごとに追加の Keeper ACL を指定できるようにしました。特定のパスに追加 ACL を設定する場合は、config の zookeeper.path_acls で定義します。 #82898 (Antonio Andelic).
  • ソフトメモリ制限により Keeper が書き込みを拒否したときの ProfileEvent を追加しました。 #82963 (Xander Garbett).
  • 新しい種類のリクエストを有効にする create_if_not_existscheck_not_existsremove_recursive の feature flags を、Keeper でデフォルトで有効にしました。 #83488 (Antonio Andelic).
  • apply_to_children config を使用して、特定の 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 のログエントリ cache サイズをエントリ数で制限できるようにしました。 #84877 (Antonio Andelic).

JSON 型と Dynamic 型

  • パーツ内に格納されているすべてのサブストリームを追跡するため、wide パーツに columns_substreams.txt ファイルを追加しました。これにより、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 の圧縮ブロックサイズを設定するための設定を導入し、Spark や Hive との整合性を保つため、デフォルト値を 64KB から 256KB に変更しました。 #80602 (李扬).
  • spec の規定に従い、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_usersmax_network_bandwidth_for_all_users の制限を超えないことが保証されます。#81729 (Sergei Trifonov).
  • optimize_rewrite_regexp_functions 設定 (デフォルトで有効) を導入しました。これにより、特定の正規表現パターンが検出された場合、オプティマイザが一部の replaceRegexpAllreplaceRegexpOneextract の呼び出しを、より単純で効率的な形式に書き換えられるようになります。 (issue #81981) 。#81992 (Amos Bird).
  • TCP サーバーのキュー (デフォルトは 64) を、listen_backlog (デフォルトは 4096) に基づいて調整しました。#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).
  • サイズの大きいカラムを含む JOIN のメモリ使用量を制限するため、max_joined_block_size_rows に加えて 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 の非同期メトリクスに pressure メトリクスを追加しました。 #80779 (Xander Garbett).
  • mark cache からのエビクションを追跡するためのメトリクス MarkCacheEvictedBytesMarkCacheEvictedMarksMarkCacheEvictedFiles を追加しました。 (issue #60989). #80799 (Shivji Kumar Jha).
  • system.formats テーブルに、HTTP の content type や schema inference の機能など、フォーマットに関する拡張情報が含まれるようになりました。 #81505 (Alexey Milovidov).
  • TRUNCATE TABLE system.warnings を使って system.warnings テーブル内のすべての警告を消去できるようになりました。 #82087 (Vladimir Cherkasov).
  • system.licenses に Rust crate のライセンス一覧を追加しました。 #82440 (Raúl Marín).
  • たとえば (a < 1 and a > 0) or b = 3 のような複雑な CNF/DNF を、統計に基づいて推定するようにしました。 #82663 (Han Fei).
  • 場合によっては、メトリクスに複数の次元が必要です。たとえば、単一のカウンターにするのではなく、失敗した merge や mutation をエラーコードごとにカウントするケースです。 #83030 (Miсhael Stetsyuk).
  • MergeParts エントリ向けの part_log profile events に、プロセス resource メトリクス (UserTimeMicrosecondsSystemTimeMicrosecondsRealTimeMicroseconds など) を追加しました。 #83460 (Vladimir Cherkasov).
  • Cgroup レベルのメトリクスとシステム全体のメトリクスが、まとめて報告されるようになりました。Cgroup レベルのメトリクスは CGroup<Metric>、OS レベルのメトリクス (procfs から収集) は OS<Metric> という名前になります。 #84317 (Nikita Taranov).
  • 同時実行の bounded queue のサイズを監視するための次元メトリクスを追加しました。オブザーバビリティ向上のため、queue type と instance ID のラベルが付与されます。 #84675 (Miсhael Stetsyuk).
  • system.columns テーブルで、既存の name カラムの alias として column が利用できるようになりました。 #84695 (Yunchi Pang).
  • system.errors に format string カラムを追加しました。このカラムは、アラートルールで同じ error type ごとにグループ化するために必要です。 #84776 (Miсhael Stetsyuk).
  • Async Log の制限を調整可能にし、イントロスペクションを追加しました。 #85105 (Raúl Marín).
  • system.columns のテーブルカラムサイズを取得する際に UNKNOWN_DATABASE を無視するようにしました。 #85632 (Azat Khuzhin).

データベース エンジン

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

  • DatabaseCatalog にテーブル UUID を手動で追加することで、読み取り専用のリモートディスクを持つデータベースをアタッチできない問題を修正しました。 #82670 (Tuan Pham Anh).
  • distributed_ddl_output_mode='*_only_active' における DDL task の処理を改善し、レプリケーションラグが 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 database の設定向けに server setting logs_to_keep を追加し、Replicated databases に対するデフォルトの logs_to_keep parameter を設定できるようにしました。小さい値にすると ZooKeeper ノード数を削減でき (特にデータベース数が多い場合に有効) 、大きい値にすると長時間停止していたレプリカでも追いつけるようになります。 #84183 (Alexey Khatskevich).
  • Replicated database setting max_retries_before_automatic_recovery のデフォルト値を 10 に変更し、一部のケースでより高速に復旧できるようにしました。 #84369 (Alexander Tokmakov).
  • 古い一時テーブルの作成とリネームをスキップすることで、Replicated databases における追記型ではないリフレッシャブルmaterialized view の DDL 操作を最適化しました。 #84858 (Tuan Pham Anh).

レプリケーションと同期

SystemAndInternalImprovements

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

関数と式

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

MergeTree の改善

  • オンザフライで更新されたカラムやパッチパートに依存するスキッピング索引を、より細かい粒度で無効化できるようにしました。これにより、スキッピング索引はオンザフライミューテーションまたはパッチパートの影響を受けたパーツでのみ無効化され、従来のようにすべてのパーツで無効化されることはなくなりました。#84241 (Anton Popov).
  • MergeTree setting search_orphaned_parts_drives を追加し、たとえばローカルメタデータを持つディスクごとに、パーツを探索する範囲を制限できるようにしました。#84710 (Ilya Golshtein).
  • WHERE に対する read_in_order_use_virtual_row の不足していたサポートを追加しました。これにより、フィルターが PREWHERE に完全にプッシュダウンされていないクエリで、追加のパーツの読み取りをスキップできるようになります。#84835 (Nikolai Kochetov).
  • MergeTree における「compact」な Variant 判別子のシリアライゼーションの使用を修正しました。以前は、使用可能なケースでも一部で使われていませんでした。#84141 (Pavel Kruglov).
  • パッチパート内の非圧縮バイト総量に対する制限 (テーブル設定 max_uncompressed_bytes_in_patches) を追加しました。これにより、論理更新後の SELECT クエリの大幅な遅延を防ぎ、論理更新の不適切な使用も抑制します。#85641 (Anton Popov).

キャッシュとメモリ管理

  • ファイルシステムキャッシュの論理エラー「0 バイトなのに、範囲が完了していない」を修正しました。#81868 (Kseniia Sumarokova).
  • キャッシュの局所性を改善するため、rendezvous hashing を追加しました。#82511 (Anton Ivashkin).
  • ファイルシステムキャッシュの動的リサイズ機能をリファクタリングしました。introspection 用のログも追加しました。#82556 (Kseniia Sumarokova).
  • 実行可能なユーザー定義関数におけるクエリのメモリ追跡オーバーヘッドを削減しました。#83929 (Eduard Karacharov).
  • 外部ライブラリによるすべての割り当てが ClickHouse の memory tracker から見えるようになり、適切に計上されるようになりました。その結果、一部のクエリでは報告されるメモリ使用量が「増加」したり、MEMORY_LIMIT_EXCEEDED で失敗したりする可能性があります。#84082 (Nikita Mikhaylov).
  • 暗号化された named collections 向けの encrypted_buffer で、必要最小限のメモリだけを割り当てるようにしました。#84432 (Pablo Marcos).

ベクトル類似度索引

  • NumericIndexedVector でユーザーが naninf を使用できないようにしました。#82239 の修正に加え、関連する追加修正も含まれています。#82681 (Raufs Dunamalijevs).
  • ベクトル類似度索引が二値量子化をサポートするようになりました。二値量子化により、メモリ消費量が大幅に削減され、ベクトル索引の構築も高速化されます (距離計算が高速になるため) 。また、既存の設定 vector_search_postfilter_multiplier は廃止され、より汎用的な設定 vector_search_index_fetch_multiplier に置き換えられました。#85024 (Shankar Iyer).
  • ベクトル類似度索引を使用した近似ベクトル検索が GA になりました。#85888 (Robert Schulze).

エラー処理とメッセージ

  • Connection ヘッダーは、ヘッダーの最後に送信されるようになりました。接続を維持すべきかどうかが判明した時点で送信されます。 #81951 (Sema Checherinda).
  • 以前のバージョンでは、aggregate function の state と IPv4 の乗算で、適切なエラーコードではなく論理エラーが発生していました。 #82817 をクローズします。 #82818 (Alexey Milovidov).
  • AsynchronousMetrics のエラー処理を改善しました。 /sys/block ディレクトリが存在していてもアクセスできない場合、サーバーはブロックデバイスの監視を行わずに起動します。 #79229 をクローズします。 #83115 (Alexey Milovidov).
  • 不正な SELECT を含む materialized view に対する INSERT で、依存関係のチェックが誤っていました。そのため、ユーザーには明確な説明を伴う意味のあるエラーではなく、分かりにくい std::exception が返されることがありました。現在は修正されています。修正対象: #82889#83190 (Nikita Mikhaylov).
  • 例外メッセージに、式 actions の非常に長い説明を出力しないようにしました。 #83164 をクローズします。 #83350 (Alexey Milovidov).
  • Storage のシャットダウン時には、getStatusErrorCodes::ABORTED 例外を throw します。以前はこれにより SELECT クエリが失敗していました。現在は ErrorCodes::ABORTED 例外を捕捉し、意図的に無視するようになりました。 #83435 (Miсhael Stetsyuk).
  • projections の読み込みおよび追加に関する特定の状況で、例外メッセージが読みやすくなりました。 #83728 (Robert Schulze).
  • クローズされた接続から読み取らないよう、EOF を確認する前に接続がキャンセルされているかどうかを確認するようにしました。 #83893 を修正します。 #84227 (Raufs Dunamalijevs).
  • 内部チェックを簡素化し、クライアント接続に対するサーバーのシャットダウン処理を改善しました。 #84312 (Raufs Dunamalijevs).
  • UDF 実行中の低レベルエラーでは、以前のように異なるエラーコードが返されるのではなく、UDF_EXECUTION_FAILED エラーコードで失敗するようになりました。 #84547 (Xu Jia).

SQL フォーマットの改善

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

External integrations

  • named collections を使用する際の ODBC と JDBC のパラメータ名を統一しました。#83410 (Andrey Zvonov).
  • MongoDB: String から数値型への暗黙的なパース。従来は、ClickHouseテーブルの数値カラムに対して MongoDB ソースから String 値を受け取ると、例外がスローされていました。現在は、エンジンがその String から数値を自動的にパースするようになりました。#81167 をクローズしました。#84069 (Kirill Nikiforov).
  • サポート対象外のアーキテクチャでも simdjson を使用できるようにしました (従来は CANNOT_ALLOCATE_MEMORY エラーの原因となっていました) 。#84966 (Azat Khuzhin).

その他の改善

  • Ytsaurus テーブルエンジンおよびテーブル関数を追加しました。#77606 (MikhailBurdukov).
  • HashJoin::needUsedFlagsForPerRightTableRow を改善し、cross join では false を返すようにしました。#82379 (lgbo).
  • Mapカラムを Tuple の配列として読み書きできるようにしました。#82408 (MikhailBurdukov).
  • この PR はリバートされました。#82884 (Mithun p).
  • 非同期ログ: キュー内に保持できるエントリの最大数を制限しました。#83214 (Raúl Marín).
  • JSON input formats で Date/Date32 を整数として扱えるようにしました。#83597 (MikhailBurdukov).
  • 1 つ目の引数が定数配列 (set) で、2 つ目が索引対象のカラム (subset) の場合に、Bloom filter索引 (regular、ngram、token) を利用できるようサポートを改善し、より効率的なクエリ実行を可能にしました。#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).

バグ修正 (正式な安定版リリースでユーザーに明らかに見える不具合)

パフォーマンス最適化

クエリ実行に関する修正

  • 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 epoch (1970-01-01) 以前の日付および最大日付 (2106-02-07 06:28:15) 以後の日付を処理する際の to_utc_timestamp 関数と from_utc_timestamp 関数の誤った動作を修正しました。これらの関数は、それぞれの値を epoch の開始時刻および最大日付に正しくクランプするようになりました。#80498 (Surya Kant Ranjan).
  • 左辺引数が null で、サブクエリの結果が Nullable ではない場合の、transform_null_in=1 における IN の実行を修正しました。#81584 (Pavel Kruglov).
  • スカラー相関サブクエリの処理中に必要なカラムが読み込まれない問題を修正しました。この修正は #81716 に対応します。#81805 (Dmitry Novik) 。
  • クエリで定数のエイリアスカラムのみが使用される場合のフィルタ解析を修正しました。#79448#82037 (Dmitry Novik) 。
  • WHERE 条件下で arrayJoinIndexSet を使用するクエリにおける Not found column エラーを修正しました。#82113 (Nikolai Kochetov) 。
  • CTE の定義が、同じ名前の別のテーブル式を参照している場合に TOO_DEEP_SUBQUERIES 例外が発生する問題を修正しました。#83413 (Dmitry Novik) 。
  • WHERE ... IN (<subquery>) 句を使用し、クエリ条件キャッシュ (設定 use_query_condition_cache) が有効な場合に、クエリが誤った結果を返す問題を修正しました。#83445 (LB7666).
  • INSERT SELECTUNION ALL を使用すると、まれなケースでヌルポインタ逆参照が発生する可能性がありました。これにより #83618 をクローズしました。#83643 (Alexey Milovidov).
  • 相関カラムに対する行ポリシー式の解析中に発生する LOGICAL_ERROR を修正しました。#82618 (Dmitry Novik) 。
  • recursive CTE と併用した際に query condition cache を使用すると誤った結果が返される問題を修正しました (issue #81506) 。#84026 (zhongyuankai) 。
  • 無効な WINDOW 定義の解析で無限再帰が発生する問題を修正しました。#83131#84242 (Dmitry Novik) 。
  • additional_table_filters expression 設定内の IN (subquery) で発生する Not-ready Set を修正しました。 #85210 (Nikolai Kochetov).
  • optimize_syntax_fuse_functions が有効な場合に、重複するサブクエリによって発生する論理エラーを修正し、#75511 をクローズしました。 #83300 (Vladimir 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 の Array 要素および Iceberg の map の値 (それらの配下にあるすべてのネストされたサブフィールドを含む) に対する、境界ベースのファイル pruning を無効化。 #83520 (Daniil Ivanik).
  • 複合型に対する Iceberg への書き込みを修正。 #85330 (scanhex12).
  • 複合型では下限値および上限値の書き込みはサポートされなくなりました。 #85332 (scanhex12).
  • Iceberg におけるフィールドの nullability を修正。 #85977 (scanhex12).
  • 空の Iceberg delete file を作成しないようにしました。 #86061 (scanhex12).
  • Iceberg への書き込み時にメタデータの timestamp を更新。 #85711 (scanhex12).
  • Spark が position delete files を読み取れない問題を修正。 #85762 (scanhex12).
  • マニフェストファイルからスキーマを取得するのをやめ、代わりに各スナップショットごとに関連するスキーマを個別に保存するようにしました。各データファイルについて、対応するスナップショットから関連するスキーマを推論します。以前の動作は、existing status を持つマニフェストファイルのエントリに関する Iceberg 仕様に違反していました。 #84588 (Daniil Ivanik).
  • Iceberg は、select クエリ間で関連するスナップショットバージョンを cache しようとせず、常に正しくスナップショットを解決するようになりました。以前の Iceberg スナップショットの cache の試みは、タイムトラベルを伴う Iceberg テーブルの利用時に問題を引き起こしていました。 #85038 (Daniil Ivanik).
  • REST カタログ経由で Iceberg テーブルをクエリする際のメタデータ解決を修正。… #85531 (Saurabh Kumar Ojha).
  • icebergS3Cluster および icebergAzureCluster table function における secrets のマスキングを修正。 #85658 (MikhailBurdukov).

Delta Lake の修正

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

  • 有効期限 (TTL) によって行数が減った際に min-max 索引を再計算し、minmax_count_projection など、これに依存するアルゴリズムの正しさを確保するようにしました。これにより #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)。

プロジェクションの修正

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

並列レプリカの修正

  • 並列レプリカで実行される一部のクエリでは、順序どおりに読み取る最適化がイニシエーターには適用されても、リモートノードには適用されないことがありました。その結果、並列レプリカのコーディネーター (イニシエーター上) とリモートノードで異なる読み取りモードが使われるという論理的な誤りが発生していました。 #80652 (Igor Nikonov).
  • サブクエリに FINAL が含まれる場合は、並列レプリカを無効化します #81401 by . #83455 (zoomxi).
  • 並列レプリカを使用するクエリで、複数の INNER JOIN の後に RIGHT JOIN が続く場合の LOGICAL_ERROR を修正しました。このようなクエリでは並列レプリカを使用しません。 #84299 (Vladimir Cherkasov).
  • 逆順で順序どおりに読み取る最適化を使用する並列レプリカのクエリでは、誤った結果が生成される可能性があります。 #85406 (Igor Nikonov).

認証とセキュリティ

  • ログ/query_log で named collection の値が隠されない問題を修正しました。#82405 をクローズしました。#82510 (Kseniia Sumarokova).
  • SCRAM_SHA256_PASSWORD で AST からパースする際に、認証データの salt を設定するようにしました。#82888 (Tuan Pham Anh).
  • Avro スキーマレジストリの認証情報をマスクし、ユーザーやログから見えないようにしました。#83713 (János Benjamin Antal).
  • REVOKE S3 ON system.* の実行時に、*.* に対する S3 権限まで取り消されてしまう誤った動作を修正しました。これにより #83417 を修正しました。#83420 (pufit).
  • no_password で作成されたユーザーが、サーバー設定 allow_no_password を 0 に変更した後にログインを試みるとサーバーがクラッシュする問題を修正しました。#84426 (Shankar Iyer).
  • JWT で識別されるユーザーを作成しようとした際のエラーメッセージを改善しました。#85072 (Konstantin Bogdanov).
  • deltaLakeAzuredeltaLakeClustericebergS3ClustericebergAzureCluster の認証情報をマスクするようにしました。#85889 (Julian Maicher).
  • #79963 で導入されたバグを修正しました。definer を持つ materialized view への insert では、権限チェックに definer の grants を使用するよう修正しました。これにより #79951 を修正しました。#83502 (pufit).

バックアップと復元に関する修正

  • 空の 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 とファイルフォーマットの修正

  • WHERE function(key) IN (...) のような条件を、WHERE key IN (...) であるかのように誤って適用していた Parquet bloom filter の問題を修正しました。#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 を含むクエリでマッチャーを解決する際に発生する論理エラーを修正し、#81969 をクローズしました。#82421 (Vladimir Cherkasov)。
  • 等価比較のオペランドの型が異なる場合、または定数を参照している場合に、フィルタが JOIN 条件にマージされる問題を修正しました。#83432 を修正しました。#84145 (Dmitry Novik)。
  • 一方のカラムが LowCardinality で、もう一方が定数である場合に、不等式条件で JOIN を実行すると Expected single dictionary argument for function という論理エラーが発生する問題を修正しました。#81779 をクローズしました。#84019 (Alexey Milovidov)。

Replicated database の修正

  • DDLWorker と DatabaseReplicatedDDLWorker の markReplicasActive を修正しました。#81395 (Tuan Pham Anh)。
  • DatabaseReplicated::getClusterImpl を修正しました。hosts の先頭要素 (または先頭の複数要素) が id == DROPPED_MARK を持ち、かつ同じ分片に属する他の要素が存在しない場合、shards の先頭要素が空のベクターとなり、std::out_of_range につながる問題がありました。#82093 (Miсhael Stetsyuk)。
  • 非同期テーブル loading ジョブの数を追跡するようにしました。実行中のジョブがある場合、TransactionLog::removeOldEntriestail_ptr を更新しません。#82824 (Tuan Pham Anh)。
  • MergeTree table を add_minmax_index_for_numeric_columns=1 または add_minmax_index_for_string_columns=1 を指定して作成した場合、その後の ALTER 操作で索引が materialized され、新しいレプリカ上で Replicated database を正しく初期化できなくなる問題を修正しました。#83751 (Nikolay Degterinsky)。
  • DEFINER が削除されている場合に、Replicated database の新しいレプリカ上で RMV を作成できない問題を修正しました。#85327 (Nikolay Degterinsky)。
  • メタデータファイルの移動に時間がかかる場合に、replicated databases を復旧できない問題を修正しました。#85177 (Tuan Pham Anh)。
  • Keeper 内の database メタデータを復元した後、Replicated Database を強制的に復旧するようにしました。#85960 (Tuan Pham Anh)。
  • Replicated database の復旧に関するバグを修正しました。テーブル名に % 記号が含まれている場合、復旧中に別名でテーブルが再作成される可能性がありました。#85987 (Alexander Tokmakov)。
  • DDL worker がレプリカ集合から outdated なホストをクリーンアップするようになりました。これにより、ZooKeeper に保存されるメタデータ量が削減されます。#88154 (alesapin)。

論理更新の修正

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

S3 およびオブジェクトストレージの修正

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

DynamicAndVariantTypeFixes

  • パース失敗時の Dynamic カラムのロールバック処理を修正しました。#82169 (Pavel Kruglov).
  • UNION における Variant 型で発生する可能性があるクラッシュを修正しました。#83295 (Pavel Kruglov).
  • 遅延マテリアライゼーション時の Variant カラムの読み取りを修正しました。#84400 (Pavel Kruglov).
  • 既存テーブルの読み取り時に、default/materialize expression の実行中は experimental/suspicious な型を検証しないようにしました。#81618 (Pavel Kruglov).

Keeper の修正

  • Keeper の修正: セッション終了時にエフェメラルノードが削除された際、ウォッチ総数が正しく更新されるようにしました。#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 が返すウォッチ総数を修正しました。#84890 (Antonio Andelic).
  • RefreshTask で ‘view’ から zookeeper を取得する際に ‘mutex’ をロックするようにしました。#84699 (Tuan Pham Anh).

索引関連の修正

  • alternation を含み、かつ最初の選択肢がリテラルでない regexp による 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 索引でグラニュールが filter を通過するかどうかを判定する際に、Nullable カラムが考慮されていませんでした (issue #75485) 。#84305 (Elmi Ahmadov).
  • MinMax 索引の評価時に、nan 値との比較で正しい範囲が使われていませんでした。#84386 (Elmi Ahmadov).
  • ngram および no_op トークナイザーで、空の入力トークンに対して (Experimental な) テキスト索引がクラッシュしなくなりました。#84849 (Robert Schulze).

materialized view の修正

Azure とクラウドストレージ関連の修正

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

クラッシュおよび安定性の修正

  • user_id が空になることがあるため、セッション終了時のログ処理で発生する可能性があるクラッシュを修正しました。 #82513 (Bharat Nallan).
  • 不正な INSERT の後に接続が切断状態のままになることで、クライアントで発生するクラッシュを修正しました。 #83253 (Azat Khuzhin).
  • 空のカラムを含む block のサイズ計算時に発生するクラッシュを修正しました。 #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 のシャットダウン中に発生する可能性がある abort (task からスレッドを join することによるもの) と、ハングの可能性 (単体テスト内) を修正しました。 #83769 (Azat Khuzhin).
  • バックグラウンドのキャンセルチェッカースレッドが原因で発生するデッドロックを修正しました。 #84203 (Antonio Andelic).
  • library bridge のクリーンアップ中に再帰的なコンテキストロックが発生することで、シャットダウン時に起きるデッドロックを修正しました。 #83824 (Azat Khuzhin).
  • 不正な INSERT の後に接続が切断状態のままになることで、クライアントで発生するクラッシュを修正しました。 #83842 (Azat Khuzhin).
  • String のデシリアライズ中に MEMORY_LIMIT_EXCEEDED が発生した場合に起こりうる UB (クラッシュ) を修正しました。 #85440 (Azat Khuzhin).
  • log_comment または insert_deduplication_token の設定を変更する非同期挿入で発生するまれなクラッシュを修正しました。 #85540 (Anton Popov).

Glue とカタログの修正

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

関数の修正

  • 関数 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)。
  • 定数引数と非定数引数が混在する場合の colorSRGBToOKLCH/colorOKLCHToSRGB を修正しました。 #83906 (Azat Khuzhin)。
  • array() 関数で空のタプルが誤って構築される問題を修正しました。これにより #84202 も修正されます。 #84297 (Amos Bird)。
  • Bech32 のエンコードおよびデコードが不正になるバグを修正しました。テストに使用していたアルゴリズムのオンライン実装にも同じ問題があったため、このバグは当初見逃されていました。 #84257 (George Larionov)。

分散クエリの修正

  • 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).
  • DatabaseReplicatedCREATE ... 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).
  • background schedule pool と executor に起因するメモリ追跡のずれを修正しました。 #84946 (Azat Khuzhin).

データ型と変換の修正

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

メモリとリソース管理

  • max_untracked_memory 周りの誤ったメモリ管理を修正しました。#83607 (Azat Khuzhin).
  • async_read_counters をクエリ間で共有しないようにしました。#83423 (Azat Khuzhin).
  • 一時データストレージとして使用する際に発生する可能性がある、file cache の未初期化エラーを修正しました。#83539 (Bharat Nallan).
  • filesystem_prefetches_limit を常に適用するようにしました (MergeTreePrefetchedReadPool 経由だけでなく) 。#83999 (Azat Khuzhin).

構成と設定の修正

  • URI 経由で設定を渡した場合は、最後の値が使用されるようになりました。#82137 (Sema Checherinda).
  • クライアントでのデータ競合 (グローバルコンテキストを使わないことで回避) と session_timezone の override を修正しました (従来は、たとえば session_timezoneusers.xml / クライアントオプションでは空でない値に設定され、クエリコンテキストでは空に設定されている場合、誤って users.xml の値が使用されていました。現在は、クエリコンテキストが常にグローバルコンテキストより優先されます) 。#82444 (Azat Khuzhin).
  • サーバー処理が停止しないよう、threadpool_writer_pool_size を 0 に設定できないようにしました。#82532 (Bharat Nallan).
  • 設定 role_cache_expiration_time_seconds の構成における軽微な整数 overflow を解消しました (issue #83374) 。#83461 (wushap).
  • 論理 error を引き起こす可能性があるため、max_insert_block_size に 0 を設定できないようにしました。#83688 (Bharat Nallan).
  • block_size_bytes=0 の場合に estimateCompressionRatio() で発生する無限ループを修正しました。#83704 (Azat Khuzhin).
  • date_time_input_format のような parameter は、multipart を使用する HTTP では無視されていました。#85570 (Sema Checherinda).

MongoDB の修正

  • これまで、MongoDB テーブルエンジンの定義では、host:port argument に path 部分を含めることができましたが、その部分は暗黙的に無視されていました。mongodb integration はこのようなテーブルを読み込めませんでした。今回の修正により、MongoDB engine の引数が 5 つある場合は、そのようなテーブルも読み込めるようになり、arguments の database 名を使用して path 部分を無視します。注: この修正は、新規に作成されるテーブルや mongo table function を使用する queries、ならびに Dictionary ソースおよび named collections には適用されません。#81942 (Vladimir Cherkasov).

その他の修正

  • 以前のバージョンでは、/js へのリクエストに対してサーバーが必要以上の内容を返していました。これにより #61890 が解決されます。#81895 (Alexey Milovidov).
  • 必要に応じて (たとえば、名前に - のような特殊文字が含まれる場合に) データベース名とテーブル名をバッククォートで囲むよう、InterpreterInsertQuery::extendQueryLogElemImpl を修正しました。#81528 (Ilia Shvyrialkin) 。
  • 候補提示スレッドとメインのクライアントスレッドの間で発生する可能性があるデータレースを修正しました。 #82233 (Azat Khuzhin).
  • union/積集合/except_default_mode の書き換えにおける例外安全性を修正。#82664 をクローズしました。 #82820 (Alexey Milovidov).
  • キャッシュを行わない Database 実装を使用している場合、対応するテーブルのメタデータは、カラムが返された後に削除され、参照は無効化されます。#82939 (buyval01) 。
  • JSONEachRowWithProgress の Onprogress 呼び出しが、終了処理と同期されるようになりました。 #83879 (Sema Checherinda) 。
  • まれに MATERIALIZE COLUMN クエリによって checksums.txt に想定外のファイルが生成され、最終的にデタッチされたデータパーツにつながる不具合を修正しました。 #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) 。
  • アナライザが有効な場合、remote テーブル関数の view(...) 引数で任意のテーブルを参照できるようになりました。#78717 を修正。#79377 を修正。#83844 (Dmitry Novik) 。
  • plain_rewritable/plain メタデータタイプでの append を伴う書き込みについて、これまでは単に無視されていた、実験的な transaction で使用される MergeTree における不具合を修正しました。 #83695 (Tuan Pham Anh).
  • IAccessStorage におけるロガーの使用を修正しました。 #84365 (Konstantin Bogdanov).
  • データレイクにおける、仮想カラムを使用したファイルプルーニングを修正しました。#84520 (Kseniia Sumarokova).
  • 応答の遅いリモートソースへのクエリで vector out of bounds が発生する可能性がある問題を修正しました。#84820 (George Larionov).
  • object queue engine のテーブルメタデータに、すべての設定が正しく保存されるようにしました。 #84860 (Antonio Andelic).
  • 遅延カラムを外部ソートと併用した場合に発生する 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) 。
  • 大きな文字列で発生する coalescing merge tree の segfault を修正しました。これにより #84582 がクローズされます。#85709 (scanhex12).
  • send_logs_source_regexp を修正 (#85105 の非同期ロギングのリファクタリング後) 。 #85797 (Azat Khuzhin).
  • MEMORY_LIMIT_EXCEEDED エラー時に、update_field を持つ辞書で不整合が発生する可能性がある問題を修正しました。#85807 (Azat Khuzhin).
  • 非標準ポートへのアクセス時に、url()テーブル関数が発行する HTTP リクエストの Host ヘッダーにポート番号が正しく含まれるよう修正しました。これにより、開発環境でよくある、カスタムポートで稼働する MinIO などの S3互換サービスで事前署名付き URL を使用した際の認証エラーが解消されます。 (#85898 を修正) 。#85921 (Tom Quist).
最終更新日 2026年6月10日