2025年の変更履歴
目次
ClickHouse リリース v25.12, 2025-12-18
ClickHouse リリース v25.11, 2025-11-27
ClickHouse リリース v25.10, 2025-10-30
ClickHouse リリース v25.9, 2025-09-25
ClickHouse リリース v25.8 LTS, 2025-08-28
ClickHouse リリース v25.7, 2025-07-24
ClickHouse リリース v25.6, 2025-06-26
ClickHouse リリース v25.5, 2025-05-22
ClickHouse リリース v25.4, 2025-04-22
ClickHouse リリース v25.3 LTS, 2025-03-20
ClickHouse リリース v25.2, 2025-02-27
ClickHouse リリース v25.1, 2025-01-28
2024 年の変更履歴
2023 年の変更履歴
2022 年の変更履歴
2021 年の変更履歴
2020 年の変更履歴
2019 年の変更履歴
2018 年の変更履歴
2017 年の変更履歴
ClickHouse リリース 25.12, 2025-12-18
後方互換性を損なう変更
- ALTER MODIFY COLUMN は、Nullable カラムを非 Nullable 型に変換する際に、明示的な DEFAULT の指定が必須になりました。以前はこのような ALTER 文は
cannot convert null to not nullエラーによって行き詰まることがありましたが、現在では NULL がカラムのデフォルト式で置き換えられます。#5985 を解決します。 #84770 (Vladimir Cherkasov)。 - Ngram tokenizer は、設定された長さ N 未満の ngram を返さなくなります。Text Search は、検索トークンが空の場合、行を返さなくなります。#89757 (George Larionov).
StringからNullable(String)へのカラムのALTERを行う場合、データに対するミューテーションは行いません。しかしuniq集約関数については、異なるデータ構造を使用します。Nullable カラムに対しては、ネストされた uniq アグリゲータを伴うAggregateFunctionNullを使用します。AggregateFunctionNullは追加の bool フラグをシリアライズします。このため、statistics ファイルとの互換性がなくなります。この問題の修正として、シリアライズ時に対象が Nullable カラムであるかどうかを記録するフラグを追加しました。statistics のフォーマットは変更されており、古いフォーマットの statistics が存在する場合、サーバーがクラッシュする可能性があります。この PR #90904 はクラッシュを修正し、既存の statistics がレガシーフォーマットを使用している場合に例外をスローします。例外を回避するには、ALTER TABLE table MATERIALIZE STATISTICS ALLを実行して statistics を再生成し、この問題を修正する必要があります。 #90311 (Han Fei)。allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functionsの設定を削除しました。ORDER BY 句や比較関数で比較不能な型を許可すると、論理エラーや予期しない結果を招く可能性があります。これにより、#90028 が解決されます。#90527(Pavel Kruglov)。check_query_single_value_resultSETTING のデフォルト値をtrueからfalseに変更しました。これにより、CHECK TABLEは集約結果(1 = 正常、0 = エラー検出)ではなく、各パーツごとの詳細な結果を返すようになります。以前の動作と比較して、この方がユーザーの期待により沿った挙動と考えられます。 #91009 (Robert Schulze)。- 暗黙的な索引に関する複数の修正を行いました。表示されたり Keeper のメタデータとして保存されたりするスキーマには、
add_minmax_index_for_numeric_columnsやadd_minmax_index_for_string_columnsのような設定によって作成される暗黙的な索引は含まれません。このため、新しいバージョンで ReplicatedMergeTree テーブルを作成または更新する際、古いリリースにレプリカが存在しているとメタデータエラーが発生する可能性があります。そのような場合は、クラスタ全体のアップグレードが完了するまで、古いレプリカに DDL 文を送信してください。 #91429 (Raúl Marín). receive_timeoutによってクエリがタイムアウトした場合に、clickhouse-client が非ゼロの終了コード (159 - TIMEOUT_EXCEEDED) を返すように変更しました。これまでは、タイムアウト時にも終了コード 0 (成功) を返していたため、スクリプトや自動化ツールがタイムアウトによる失敗を検知しづらい状態でした。 #91432 (Sav)。- これらのテーブルでのマージ動作が未定義であるため、空の
ORDER BYキーを持つ特殊なMergeTreeテーブル(ReplacingMergeTree、CollapsingMergeTreeなど)を作成することは、現在は禁止されています。それでもそのようなテーブルを作成する必要がある場合は、allow_suspicious_primary_keySETTING を有効にしてください。 #91569 (Anton Popov)。 bitShiftLeftとbitShiftRight関数を修正し、型のサイズとちょうど同じだけシフトした場合は 0 または空の値を返すようにしました。 #91943 (Pablo Marcos)。- #88380 のフォローアップです。この PR では、プロジェクションにおける位置指定引数の無効化を後方互換性のない変更として扱います。加えて、プロジェクション内に位置指定引数が存在する場合でも ClickHouse クラスターを安全にアップグレードできるようにするための
enable_positional_arguments_for_projections設定を導入しています。 #92007(Dmitry Novik)。
新機能
- ユーザーは、従来のファイルを保持または削除するオプションに加えて、処理済みファイルを移動またはタグ付けするように S3/Azure Queue テーブルを構成できるようになりました。#72944 を解決しました。#86907(Murat Khairulin)。
- ストレージ S3/Azure Queue に
commit_on_select設定を追加しました(処理済みデータをコミットするかどうか、およびafter_processingアクションを適用するかどうかを制御します)。デフォルト値はfalseで、SELECT 実行時のアタッチされたマテリアライズドビューのチェック処理を修正しました。 #91450 (Kseniia Sumarokova). - 本番環境での問題をデバッグし、決定論的にプロファイルするために、XRay を使用して実行時にインストルメンテーションを追加できるようにしました。#74249 を解決しました。#89173(Pablo Marcos)。
INの第 2 引数に非定数も指定できるようになりました。また、第 2 引数としてタプルもサポートします。#77906(Yarik Briukhovetskyi)。- geometry 型に対する面積と周長を計算する関数。 #89047 (Konstantin Vedernikov).
dictGetKeys関数を実装しました。この関数は、属性値が指定した値と等しい Dictionary のキー(複数可)を返します。クエリ単位のリバースルックアップキャッシュを使用し、繰り返し行われるルックアップの高速化のために、そのサイズをmax_reverse_dictionary_lookup_cache_size_bytesSETTING で調整できます。 #89197 (Nihal Z. Miaji)。- 入力 JSON が JSON 型内の明示的な型付きパスにキャストできない場合でも、JSON 型への INSERT/型キャストで例外を発生させないようにする
type_json_skip_invalid_typed_pathsSETTING を追加しました。その場合は、型付きパスの null/ゼロ値を使用します。 #89886 (Max Justus Spransy). - MergeTree テーブルで
direct(ネストループ方式)結合をサポートしました。使用するには、設定で唯一のオプションとしてjoin_algorithm = 'direct'を指定します。 #89920(Vladimir Cherkasov)。 - iceberg に対する
CREATE操作でのORDER BYのサポートと、INSERT時のソートに対応。 #89916 を解決。 #90141 (Konstantin Vedernikov)。 ALTER TABLE ... ADD PROJECTIONに新たに追加されたWITH SETTINGS句を通じて利用できる、PROJECTION レベルの設定を追加しました。これらの設定により、各 PROJECTION ごとにindex_granularityやindex_granularity_bytesなどの一部の MergeTree ストレージパラメータを上書きできるようになります。#90158 (Amos Bird)。HMAC(algorithm, message, key)SQL 関数を、#73900 および #38775 の対応の一環として追加。#90837(Mikhail f. Shiryaev)。- 最初の引数が定数配列のときにプライマリキーとデータスキッピングインデックスを利用できるよう、
has関数のサポートを追加しました。#90980 をクローズ。#91023(Nihal Z. Miaji)。 - 新しい入出力フォーマット
Buffersを実装しました。このフォーマットはNativeに似ていますが、Nativeと異なり、カラム名やカラム型などのメタデータは保存しません。#84017 をクローズ。#91156(Nihal Z. Miaji による)。 - Cluster テーブル関数でのファイルの並列読み込みに使用するストリーム数を制御するための
max_streams_for_files_processing_in_cluster_functionsSETTING を追加しました。#90223 をクローズしました。#91323(Pavel Kruglov)。 - 行レベルセキュリティ用のデータマスキング機能(ClickHouse Cloud でのみ利用可能)。これを
clickhouse-clientでサポートするためのデータマスキングポリシー用パーサーを追加。 #90552 (pufit). windowFunnel集約関数にallow_reentryオプションを追加しました。strict_orderと併用すると、ファネル分析を停止する代わりに、順序違反となるイベントを無視します。これにより、リフレッシュを含むユーザージャーニー(A->A->B)や、戻る操作を含むナビゲーション(A->B->A->C)でも、コンバージョン率を過小に算出することなく処理できるようになります。 #86916 (Lee ChaeRok).- Keeper の ZooKeeper 互換機能: STATISTICS 付きで CREATE できるようになりました。 #88797 (Konstantin Vedernikov).
- ClickHouse Keeper における ZooKeeper 永続ウォッチのサポート。続き(パート 2): https://github.com/ClickHouse/ClickHouse/pull/78207。 #88813(Konstantin Vedernikov)。
- MergeTree の設定
alter_column_secondary_index_modeを追加し、ミューテーション実行中にセカンダリ索引をどのように処理するかを制御できるようにしました。指定可能な値は throw、drop、rebuild、compatibility です。 #77797 をクローズしました。 #89335(Raúl Marín)。 TimeとTime64データ型が本番利用に十分な品質となったため、enable_time_time64_typeSETTING はデフォルトで有効化されました。#89345 (Yarik Briukhovetskyi)。delta_lake_snapshot_start_version、delta_lake_snapshot_end_versionの設定を使用したdeltaLakeテーブル関数経由で、DeltaLake CDF の読み取りをサポートします。CDF(Change Data Feed。Delta テーブルのバージョン間で、挿入・更新・削除などの行レベルのデータ変更を自動的に取得してクエリできるようにする機能)は、DeltaLake ではdelta.enableChangeDataFeedによって有効化されます。データとともに提供されるカラムは_change_type、_commit_version、_commit_timestampです。#90431(Kseniia Sumarokova)。- タプル要素へのアクセスで負のインデックスをサポートしました(例:
tuple.-1)。#91665(Amos Bird)。
実験的機能
- TODO: Text インデックスフォーマット v3 を導入し、Beta ステータスに昇格させます。
- 設定
automatic_parallel_replicas_modeによって制御される、並列レプリカを用いてクエリを自動実行するための新しいロジックが導入されました。通常の単一ノード実行時に、ClickHouse は後のプランニング段階で参照される統計情報を収集します。統計情報から並列レプリカが有益である可能性が高いと判断された場合、ClickHouse はそのクエリを並列レプリカで自動的に実行します。現在のところ、対応しているクエリの範囲はかなり限定的です。 #87541 (Nikita Taranov)。 --loginを使用して Cloud の認証情報により ClickHouse Cloud インスタンスへアクセスできます。 #89261 (Krishna Mannem)。- セッションレベルの設定
aggregate_function_input_formatを追加し、AggregateFunctionカラムを持つテーブルへのINSERTクエリを改善しました。これにより、シリアライズされた状態、生の値、もしくは配列としてデータを挿入できるようになります。 #88088 (Punith Nandyappa Subashchandra)。
パフォーマンスの向上
ORDER BY...LIMIT Nクエリに対して skip index と動的なしきい値フィルターを用いることで、処理される行数を大幅に削減して最適化しました。 #89835 (Shankar Iyer).- ClickHouse は、
ANDとORが混在したフィルター条件を含む WHERE 句に対して、skip index を用いた索引の解析を行うようになりました。以前は、skip index を利用するためには WHERE 句がフィルター条件の連言(AND)のみで構成されている必要がありました。新しい設定use_skip_indexes_for_disjunctions(デフォルト: on)でこの機能を制御できます。(issue #75228)。#87781(Shankar Iyer)。 - LEFT/INNER JOIN 操作において、左側のテーブルからの読み取り順序を保持し、その順序を後続のステップで利用できるようにしました。この挙動は設定
query_plan_read_in_order_through_joinで無効化できます。LEFT/INNER JOIN に対する読み取り最適化として virtual row のサポートも追加しました(設定read_in_order_use_virtual_rowを参照)。 #89815 (Vladimir Cherkasov). - 遅延マテリアライズカラムの上限値を引き上げてパフォーマンスを改善。 #90309 (Nikolai Kochetov).
- 大きな
minmax索引(granule が数百万単位)が存在する場合、ユーザーは索引解析のレイテンシが低減していることを確認できるはずです。 #90428 (Shankar Iyer). - INNER JOIN 向けに単純な DPsize 結合順序再配置アルゴリズムを実装。新しい実験的な設定で、どのアルゴリズムをどの順序で使用するかを制御できます。例えば、
query_plan_optimize_join_order_algorithm='dpsize,greedy'は、まず DPsize を試し、フォールバックとして greedy を使用することを意味します。 #91002 (Alexander Gololobov). - クエリが行数上限に達した時点で即座に失敗するようにしました。 #61872 を解決します。 #62804 (Sean Haynes)。
- #84477 により、
insert select from s3Cluster(...)クエリで並列分散実行を行う際に使用できるselectクエリに関する制約が追加されました。この変更により、以前は使用できなかったwhereの使用が可能になりました。#84611 (Igor Nikonov)。 - ハッシュテーブルを走査する際にキーをプリフェッチし、キャッシュミスを最小限に抑えるようにしました。 #84708 (lgbo).
histogram集約関数を最適化し、ポイント配列の末尾部分のみをソートし、単調な入力に対してはソートをスキップすることで、約 10% の高速化を実現しました。 #85760 (MakarDev)。like、equals、hasなどの関数を含む述語に対して、テキスト索引から構築された追加の予備フィルタを活用することでフィルタリング性能を向上させました。この最適化はquery_plan_text_index_add_hintSETTING で有効化できます。Mapデータ型のカラムに対するテキスト索引の利用も改善しました。#88550 (Anton Popov).- 事前計算された可能なキー値の Set に対してより高速にルックアップすることで、繰り返し発生する逆引き Dictionary ルックアップを最適化しました。#7968 をクローズ。#88971(Nihal Z. Miaji)。
topK集約関数のパフォーマンスと挙動を改善しました。 #90091 (Raúl Marín).Decimalの比較演算のパフォーマンスを改善しました。 #28192 を解決しました。 #90153(Konstantin Bogdanov)。- Apache Paimon 関数でパーティションプルーニングをサポートし、https://github.com/ClickHouse/ClickHouse/pull/84423 の対応を拡張しました。 #90253 (JIaQi).
- 動的ディスパッチを用いて、論理関数に高度な SIMD 演算を適用します。 #90432 (Raúl Marín).
- 結果カラムを不要にゼロで初期化しないことで、JIT 関数のパフォーマンスを改善しました。 #90449 (Raúl Marín).
- 動的ディスパッチを用いて
T64の伸長処理を高速化。 #90610 (Raúl Marín). - MergeTree リーダーでのインプレース フィルタリングを最適化。#87119 を解決。#90630 (Xiaozhe Yu)。
- 選択されるマージ候補の対象範囲をより狭めるための追加のヒューリスティックを導入しました。より小さな範囲でマージを行うことで書き込み増幅は増加しますが、その一方で
TOO_MANY_PARTSエラーの発生を防ぐのに役立ちます。 #91163 (Mikhail Artemenko)。 - グロブパターンで作成された S3 テーブルに対して
_pathフィルタ値をプッシュダウンすることでクエリのパフォーマンスを向上させ、S3 上でのリスト操作を回避できるようにしました。s3_path_filter_limit設定で制御されます。 #91165 (Eduard Karacharov)。 - 動的ディスパッチを用いて、WHERE 句内でのカラムから bool 型への変換を高速化しました。 #91203 (Raúl Marín).
- 動的ディスパッチを用いて単一の数値ブロックのソートを高速化。 #91213 (Raúl Marín).
- クエリプランから未使用カラムを削除する最適化を追加しました。この変更により #75152 が解決されました。#76487(János Benjamin Antal)。
query_plan_optimize_join_order_limitのデフォルト値が10に変更されました。 #89312 (Alexey Milovidov)。allow_statistics_optimize設定をデフォルトで有効にし、JOIN のオプティマイザがカラム統計情報を使用するようにしました。 #89332 (Alexey Milovidov)。ANTIJOIN に対する JOIN ランタイムフィルタのサポートを追加しました。また、ロック競合を減らすためにランタイムフィルタの実装をリファクタリングしました。 #89710 (Dmitry Novik)。system.metric_logテーブル(デフォルトで有効)のマージ処理時のメモリ使用量を削減するために、min_bytes_for_wide_partおよびvertical_merge_algorithm_min_bytes_to_activateを 128MB に設定します。 #89811 (filimonov).- PREWHERE で inverted index を使用できるようにしました。 #89975 を解決しました。 #89977(Peng Jian)。
- GCP OAuth を使用している場合には S3 プロバイダーを追加しないようにし、GCS 上でのパフォーマンスを改善しました。 #91706 (Antonio Andelic).
改良
FINALの後にのみ ROW POLICY を適用するようクエリを制御できる新しい設定apply_row_policy_after_finalを追加しました。これにより、ROW POLICY を伴う ReplacingMergeTree の動作がより正しくなります。 #90986 を修正しました。 #91065(Yarik Briukhovetskyi)。Prettyフォーマットでは、名前付きタプルが Pretty JSON として表示されるようになりました。これにより #65022 が解決されました。 #91779 (Mostafa Mohamed Salah)。system.error_logテーブルにlast_error_time、last_error_message、last_error_query_id、last_error_traceフィールドを新たに追加しました。 #89879 (Narasimha Pakeer).- CLI クライアントで、
--no-server-client-version-messageまたはfalseを指定することで、「ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded」というメッセージを表示しないようにできるようになりました。 #87784 (Larry Snizek)。 - パーツが重複排除されたことを示すエラーメッセージを追加。 #80264 (Aleksandr Musorin).
- Kafka テーブルに対する materialized view のターゲットテーブルを報告できるように、
system.kafka_consumersにdependenciesカラムとmissing_dependenciesカラムを追加しました。また、KafkaMVNotReadyカウンタを追加しました。#85346 (Ilya Golshtein)。 - これにより、
remoteおよびnativeプロトコル経由の挿入でもテーブルのデフォルト式が正しく動作するようになりました。 #87972 をクローズしました。 #88540(Pervakov Grigorii)。 PSI_*_*非同期メトリクスの収集を無効化できるようにしました。 #88557 (MikhailBurdukov)。Nullable型カラム向けにスパースシリアライゼーションのサポートを追加しました。これは #44539 の継続です。#88999 (Amos Bird)。plain-rewritableディスクは独自の実装とレイアウトを持つようにしました。通常のplainディスクをベースにしないようにしています。 #89807 (Mikhail Artemenko).- HTTP の例外応答には final zero chunk が含まれないようにしました。 #89998 (Kaviraj Kanagaraj).
- ハンドシェイク時に、
last_zxid_seen (クライアントから提供される値) > last_processed_zxidの場合にクライアントを拒否する keeper サーバー側のチェックを追加しました。これにより、ラグのあるレプリカにクライアントが再接続した際に、古い状態を読み取ってしまうことを防止します。 #90016 (Miсhael Stetsyuk)。 Kafkaテーブルエンジンの調整可能な設定としてkafka_consumer_reschedule_msを追加し、コンシューマーが新しいデータを待機する際のスリープ時間を調整できるようにしました。#89204 を解決しました。#90112(Jeremy Aguilon)。- 診断性を向上させるために、新しいカラム
parts_in_progress_namesをsystem.mutationsに追加しました。 #90155 (Shaohua Wang)。 - S3 ライブラリによる XML レスポンスの解析時にネットワークエラーが発生した場合にリトライするようにしました。 #90216 (Sema Checherinda).
- keeper を別のサーバープロセスとして実行し、大規模なリージョンで Prometheus に過度な負荷がかからないようにするため、引き続き keeper 関連のメトリクスのみを公開するようにしました。 #90244 (Miсhael Stetsyuk)。
- 従来の
~/.clickhouse-client/の場所に加えて、XDG Base Directory のパス(例:~/.config/clickhouse/config.xml)からも ClickHouse Client の設定を読み込めるようにしました。#89882 を解決。#90306(Wujun Jiang)。 - Keeper における append リクエストのバッチに対してバイトサイズの上限を追加しました。上限は
keeper_server.coordination_settings.max_requests_append_bytes_sizeで制御されます。 #90342 (Antonio Andelic). - Iceberg 向けに、パーティション数が過度に増加するのを防ぐための設定を追加。#90365 (Konstantin Vedernikov).
- ガードレールの制限に近づいたときの警告メッセージを更新し、現在値と例外をスローする値を表示するようにしました。 #90438 (Nikita Fomichev).
system.filesystem_cacheテーブル内で chunk をストリーミングし、キャッシュ状態のすべてを 1 つの chunk にまとめて作成しないようにしました。ファイルシステムキャッシュの状態を読み取る処理は、大きなキャッシュの場合には長時間かかり、多くのメモリを消費する可能性があるため、大規模なデプロイメントではストリーミングが不可欠です。#90508(Kseniia Sumarokova)。- Hive のパーティション処理における誤った例外メッセージを修正:スペースが 1 つ不足していました。 #90685 (Alexey Milovidov).
- ベクトル類似性索引キャッシュ内のエントリは、テーブルのパーツが削除されるか、より新しいパーツに置き換えられたときに削除されるようになりました。これ以前は、キャッシュのエビクションによって、怠惰な方式でのみクリアされていました。 #90750 (Shankar Iyer).
- chdig(コマンドライン ClickHouse 診断ツール)を v25.12.1 にバージョンアップ。 #91394(Azat Khuzhin)。
- 事前署名付きURLが S3 でも利用できるようになりました。これにより #65032 がクローズされました。#90827(Yarik Briukhovetskyi)。
- テキスト索引が
ReplacingMergeTreeテーブルでも利用できるようになりました。 #90908 (Elmi Ahmadov). - 認証前に返される HTTP エラー応答に ClickHouse サーバーのバージョンが含まれないようにしました。 #91003 (filimonov).
httpクライアント接続のhard_limitに到達した場合、HTTP_CONNECTION_LIMIT_REACHED例外がスローされるようになりました。ディスク接続では、この値は20000に設定されています。 #91016 (Sema Checherinda).- バックグラウンドジョブの状態をより詳細に把握できるようにするため、
system.background_schedule_pool{,_log}を導入しました。 #91157 (Azat Khuzhin). - Web UI のクエリエディタで、現在選択している行を
Ctrl+/(Mac ではCmd+/)で簡単にコメントアウト/コメント解除できるようになりました。これにより、テスト中にクエリの一部を一時的に無効化しやすくなります。 #91160 (Samuel K.). system.completionsを常にアクセス可能なテーブル一覧に追加しました。 #91166 (Yakov Olkhovskiy).- プロファイルイベント
FailedInitialQueryとFailedInitialSelectQueryを追加しました。 #91172 (RinChanNOW). merge_tree_use_prefixes_deserialization_thread_poolSETTING を尊重し、thread pool を常に使用するのではなく設定に従うようにすることで、多数のサブカラムを持つ JSON カラムのサンプルを読み取る際に発生する可能性があったスレッドプールの枯渇を修正しました。 #91208 (Raufs Dunamalijevs)。tupleElementでJSON型をサポートしました。#81630 をクローズしました。#91327(Pavel Kruglov)。- ユーザースペースページキャッシュが有効な場合に誤検知されていたメモリ制限エラーを修正しました。 #91361 (Michael Kolupaev).
- Ngrams tokenizer は
ngram_length = 1でビルドできるようになりました。#91529 (George Larionov). SELECTですでにサポートされているのと同様に、INSERT INTO FUNCTIONで使用する関数内でもストレージ設定をサポートするようにしました。#89386 をクローズします。#91707(Kseniia Sumarokova)。- データレイクに対する truncate クエリでは、何も行わず黙って無視するのではなく、"not implemented" をスローするようにしました。#86604 をクローズします。#91713(Kseniia Sumarokova)。
- parquet v3 リーダーで最大メッセージサイズを設定し、
DB::Exception: apache::thrift::transport::TTransportException: MaxMessageSize reachedが発生しないようにしました。 #91737 (Arthur Passos). insert_select_deduplicateという設定を追加しました。これにより、INSERT SELECT 時の挿入の重複排除をどのように扱うかが、より明確になります。一般的には、この種のクエリに対して重複排除を行うことはできませんが、テーブルが変更されておらず、かつ結果がソートされている場合には、リトライ時に重複排除を行うことが可能です。INSERT 元が同一であることは追跡できませんが、SELECT クエリの結果がソートされているかどうかは検査できます。もっとも、一般的なケースでそれを検査するのは非常に難しいことが分かりましたが、ORDER BY ALLを用いた単純なケースであれば容易です。現時点では、ここでのロジックは実際には正しく動作していません。重複排除を試みてはいるものの、ほとんどの場合、SELECT が異なるデータを返すため、ブロック間の重複を検出できていません。#91830(Sema Checherinda)。ArrayからQBit型へのキャスト時に暗黙の型変換を許可しました。整数および浮動小数点数の配列は、明示的な型キャストなしでQBitカラムに直接挿入できるようになりました。 #91846 (Raufs Dunamalijevs)。CapnProtoメッセージのサイズ上限を追加しました。format_capn_proto_max_message_sizeで変更できます。#91888 (Antonio Andelic)。- マークキャッシュのメトリクスを、クエリのみを対象として計測するように調整しました(#83415 で
MarkCacheHits/MarkCacheMissesがマージ処理でもカウントされるように更新されましたが、この PR でその挙動を元に戻します)。#91910(Azat Khuzhin)。 - ローカル接続時に
client_info.interfaceがTCPに設定されてしまう問題を修正。 #91933 (Konstantin Bogdanov) - ACME クライアント設定の
refresh_certificates_task_intervalパラメータは、値を秒単位で指定する必要があります。 #92211 (Konstantin Bogdanov). system.*_logのパーツに関するイベントをsystem.part_logに記録します。 #92217 (Azat Khuzhin).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
TimeおよびTime64データ型のスーパータイプに関連するPREWHEREの一部のバグを修正します。#84544 を解決します。#84715(Yarik Briukhovetskyi)。- カスタム設定を反映できるよう、使用前に
DNSResolverを初期化するようにしました。#76296 を修正。#81302(Zhigao Hong)。 - 一部のケースにおいて、名前にドットを含むカラムからサブカラムを読み取れない問題を修正しました。#81261、#82058、#88169 を解決します。#87205(Pavel Kruglov)。
GenerateRandomエンジンがリテラルでない引数でクラッシュする問題を修正。LOGICAL_ERRORの代わりに、より明確なメッセージとともにBAD_ARGUMENTSを返すようにしました。 #88157 (Shafi Ahmed).UNIONが含まれる場合に未使用の PROJECTION カラムが削除されない問題を修正しました。 #88180 を解決します。 #88350(Sema Checherinda)。JOINの最適化において、主キーが降順ソートされている場合に誤った分片が行われていた問題を修正しました。#88512 を解決します。#88794(Amos Bird)。- s3queue_keeper_fault_injection_probablility を再度有効化し、問題を修正しました。 #88800 (Kseniia Sumarokova).
- 有効期限 (TTL) でカラムが早期に削除されることに起因する複数の問題を修正しました。#88002 を解決します。#88860(Amos Bird)。
- temporary_files_buffer_size が 0 に設定された場合に例外をスローするようになりました。#88900 を修正します。 #88917(Vladimir Cherkasov)。
- 述語に
NULL定数が含まれている場合に、Set索引の解析中に発生していたBad getエラーを修正しました。これにより、#84856 および #82974 が解決されています。 #89429(Nikolai Kochetov)。 - エラー
Cannot add subcolumn X.Y: column with this name already existsを修正。#89599 を解決。#89602(Azat Khuzhin)。 theilsU関数およびcontingency関数で誤った結果が生じる原因となっていたバグを修正しました。 #89760 (Nihal Z. Miaji)。- エイリアスの安定性に関する問題を修正: SharedDatabaseCatalog 使用時の StrictnessLevel を修正し、ターゲットとして別のエイリアスを指定することを禁止し、さらに追加のインターフェース (getSerializationHints, supportsReplication, getStoragePolicy, totalBytesUncompressed, lifetimeRows, lifetimeBytes, storesDataOnDisk, tryLockForShare, lockForShare) を実装しました。 #89106 を解決。 #89812(Kai Zhu)。
IN内にARRAY JOINがあり、enable_lazy_columns_replication設定が有効な場合に、リモートクエリの実行中に発生する可能性のあるクラッシュを修正しました。#90361 を解決します。#89997 (Pavel Kruglov)。- 複数の JOIN を行う際に
analyzer_compatibility_join_using_top_level_identifierを使用した場合に発生する可能性のある論理エラーを修正。#90010(Vladimir Cherkasov)。 - 一部のケースでテキスト形式の文字列から誤った DateTime64 値が推論される問題を修正しました。#89368 を解決します。 #90013(Pavel Kruglov)。
- 集計状態やその他のソースからデータをデシリアライズする際にサイズを検査するようにしました。 #90031 (Raúl Marín).
- ボリュームの特性に基づいてパーツのレンジを分割し、コールドボリュームに対する有効期限 (TTL) に基づくドロップマージを有効化しました。このパッチ適用後は、最大 TTL が現在時刻より前のパーツはコールドストレージから削除されます。アルゴリズムは 単一パーツのドロップ のみをスケジュールします。 #90059 (Mikhail Artemenko)。
kafka_handle_error_mode = 'dead_letter_queue'という設定を指定して Kafka テーブルを作成した場合に、テーブルsystem.dead_letter_queueが構成されていないとサーバーがクラッシュすることがありました。この問題を修正しました。#87573 を解決します。#90064(Nikita Mikhaylov)。ARRAY JOINを使用した挿入時に、enable_lazy_columns_replication設定が有効な場合に発生する可能性があるColumn with Array type is not represented by ColumnArray column: Replicatedというエラーを修正しました。#90066 (Pavel Kruglov)。- 誤った破棄順序が原因で、サーバーの正常なシャットダウン時に発生していたクラッシュを修正しました。#82420 を解決します。 #90076 (Nikita Mikhaylov)。
- ステップサイズが大きい場合に
numbersシステムテーブルで発生する論理エラーと剰余演算のバグを修正しました。#83398 をクローズします。#90123(Nihal Z. Miaji)。 - ネイティブ writer を用いた単一スレッドでの書き込み時に、Parquet への書き込みで元の順序が保持されない問題を修正しました。 https://github.com/ClickHouse/ClickHouse/pull/64424/files の一部を取り消します。 #90126 (Arthur Passos)。
- LIMIT/OFFSET 式には定数ノードの最適化を適用しないようにしました。#89607 を修正しました。#90156(Yakov Olkhovskiy)。
- Hive パーティション分割の非互換性を修正し、25.8 への円滑なアップグレードを可能にしました(アップグレード時に発生していたエラー
All hive partitioning columns must be present in the schemaを解消)。 #90202 (Kseniia Sumarokova). - Glue カタログを使用している場合に、timestamp カラムを含む Iceberg テーブルで JSON 例外が発生する問題を修正。#90210 を解決。#90209(Alsu Giliazova)。
- part が持つ行数が index_granularity より少ない場合に、MergeTreeReaderIndex で行数の不整合が発生する問題を修正しました。#89691 を解決します。#90254(Peng Jian)。
nan/infの無限値を含むWITH FILLクエリの不具合を修正しました。#69261 を解決します。#90255(Konstantin Bogdanov)。- query_plan_use_logical_join_step=0 および JOIN の ON 句における残余条件で発生する「column not found」エラーを修正。 #88635 を解決。 #90279(Vladimir Cherkasov)。
- 集約 PROJECTION の最適化を使用する一部のクエリを修正しました。 #90288 (János Benjamin Antal).
- コンパクトパーツにおける JSON からのサブカラム読み取り処理のバグを修正しました。このバグにより
CANNOT_READ_ALL_DATAエラーが発生する可能性がありました。 #90264 を解決します。 #90302(Pavel Kruglov)。 - manifest ファイルでソート順が指定されていない(またはテーブルの default_sort_order と一致していない)場合、ClickHouse は Iceberg に対して read-in-order 最適化を使用しなくなりました。 #89178 を修正しました。 #90304(alesapin)。
- Time および Time64 が、DateTime および DateTime64 からの変換の際にタイムゾーンを正しく扱うようになりました(
DateTime[64]としてユーザーに表示される場合と同じタイムゾーンで時刻が表示されます)。#89896 を解決しました。 #90310(Yarik Briukhovetskyi)。 SELECT CAST(CAST(now(), 'Time'), 'Time64')が誤った結果を返していた不具合を修正しました。#88349 をクローズしました。#90324(Yarik Briukhovetskyi)。- randomStringUTF8 で整数オーバーフローが発生した際にクラッシュする問題を修正しました。 #90326 (Michael Kolupaev).
multicluster_root_pathを使用するマルチクラスタ構成で、クラスタディスカバリの更新が遅延したり ZooKeeper の更新が欠落したりしないように修正しました。 #90341 (RinChanNOW)。- 存在しない JSON パスに対する prewhere 句で、index_granularity_bytes=0 の場合に発生しうる潜在的な論理エラーを修正しました。#86924 を解決します。 #90375(Pavel Kruglov)。
L2DistanceTransposedにおいて、precision 引数が有効な範囲を超えた場合にクラッシュしていたバグを修正しました。 #90401 をクローズ。 #90405(Raufs Dunamalijevs)。Array(Dynamic)を引数に取るarrayUnionで発生する可能性のある論理エラーを修正しました。#90270 を解決します。#90409(Pavel Kruglov)。- 1つの ALTER 文内で同一の Nested カラムをリネームおよび変更する際に発生しうる論理エラーを修正しました。#90406 を解決します。#90412(Pavel Kruglov)。
- HTTP パラメータからの JSON/Dynamic/Variant 値のパース処理を修正。#88925 を解決。#90430(Pavel Kruglov)。
- Hive のパーティション処理において、静的な
KeyValuePairExtractorが原因でファイルの同時読み取り時にデータ破損やクラッシュを引き起こしていたレースコンディションを修正しました。 #90474 (Paresh Joshi). - 配列の参照ベクトル(デフォルトでは
Array(Float64))と、要素型がFloat64ではない(Float32、BFloat16)QBitカラムを組み合わせて使用した場合に、L2DistanceTransposedで誤った距離計算が行われていた問題を修正しました。この関数は現在、参照ベクトルをQBitの要素型に合わせて自動的にキャストするようになりました。#89976 を解決します。#90485(Raufs Dunamalijevs)。 - 負の引数を渡した場合に
toDateTimeOrNullが NULL を返してしまうバグを修正しました。 #90490 (Yarik Briukhovetskyi)。 ArrowフォーマットでのLowCardinality(Bool/Date32)の出力時に発生し得た論理エラーを修正しました。#83883 を解決します。#90505(Pavel Kruglov)。- 一部の不正な入力に対して不正な値を返していた IPv4 解析関数(例:
IPv4StringToNumOrDefault)を修正しました。#90544 を解決しました。#87583 を解決しました。#90545(Michael Kolupaev)。 - ローカルホストチェック中にアドレス解決に失敗した場合に markReplicasActive を再試行するよう変更: DDLTask における自己ホストチェック中に例外が発生した場合、警告ログを出力します。DDLWorker::markReplicasActive では、ローカルホストが見つからず、かつクラスタ内にホスト ID が存在する場合に、再試行のための例外をスローします。 #90556 (Tuan Pham Anh)。
equals関数のまれなケースが原因で発生していた論理エラーを修正。#88142 をクローズ。#90557(Nihal Z. Miaji)。- おそらく
test_ssh/test.py::test_paramiko_passwordにおける ThreadSanitizer のクラッシュを修正しました。 #90612 (Govind R Nair)。 concatWithSeparator関数で、非文字列の定数カラムを使用した場合に発生する論理エラーを修正。#90596 をクローズ。#90655(Nihal Z. Miaji)。INTO OUTFILEのフォーマットを修正し、#90207 を解決しました。#90656(Azat Khuzhin)。allow_statistics_optimize=1が有効な状態でサブクエリを含む mutation を実行した際に発生しうるクラッシュを修正しました。#90626 を解決します。#90664(Azat Khuzhin)。GROUP BYと併用したLIMIT BYに対するアナライザーの検証ロジックを修正し、LIMIT BYがGROUP BYに含まれないカラムを使用している場合に、NOT_FOUND_COLUMN_IN_BLOCKではなく正しいエラーNOT_AN_AGGREGATEを返すようにしました。#89713 をクローズ。#90665(xiaohuanlin)。LowCardinalityカラムをパーティションキーで使用する際に発生する型キャストエラーを修正しました。 #89412 をクローズしました。 #90666(xiaohuanlin)。shardNum()などの非決定論的関数から折り畳まれた定数を含むフィルタ述語を持つクエリが、誤ってクエリ条件キャッシュを使用してしまう問題を修正しました。 #90692 (Eduard Karacharov).- JOIN の ON 句で
EXISTS関数を使用するクエリで発生していたセグメンテーションフォルトを修正しました。クエリは単にINVALID_JOIN_ON_EXPRESSIONエラーを返すようになりました。#90698 をクローズしました。 #90719(Vladimir Cherkasov)。 - デフォルトデータベースをテーブルなしで使用した場合に AccessRightsElement で発生していた論理エラー 'Inconsistent AST formatting' を修正。#90742(Pablo Marcos)。
remoteテーブル関数でターゲットホストとしてlocalhostを使用した場合のALTER UPDATEクエリに対するアクセス権限の検証処理を修正しました。 #90761 (pufit).- named collections のシークレットの非表示動作が
display_secrets_in_show_and_selectとformat_display_secrets_in_show_and_selectに依存するよう修正しました。 #90765 (Pablo Marcos). enable_shared_storage_snapshot_in_queryを無効化(メモリリークを引き起こすため)。 #90770 (Azat Khuzhin)。- parallel replicas が有効な状態で RIGHT JOIN と分散テーブルを使用した際に発生する重複データの問題を修正。 #90806 (zoomxi).
- JSON 内の共有データおよび動的パスが不整合な状態となり、論理エラーや予期しない結果を引き起こす可能性があった問題を修正しました。 #90816 (Pavel Kruglov).
- SharedCatalog(Cloud 専用機能)の CSE における、dictGet() と辞書名を含む ALTER MODIFY QUERY の問題を修正。 #90860 (Azat Khuzhin).
- String 集約状態のインメモリシリアライズ処理の互換性を修正しました。シリアライズ形式が異なると、異なるバージョンのインスタンスで同じ集約クエリを実行した場合に、結果が重複する可能性がありました。新しいシリアライズ方式は
serialize_string_in_memory_with_zero_byteで有効化できます。 #90880 (Antonio Andelic)。 - 頻繁に INSERT が行われる場合の Buffer のバックグラウンドでのフラッシュ処理を修正。 #90892 (Azat Khuzhin).
- system.licenses に contrib/ の親フォルダを表示しないようにしました。 #90901 (Raúl Marín).
- JSON/Dynamic/Variant カラムの読み取り時にメモリ使用量が高くなる問題を修正。 #90907 (Pavel Kruglov).
- base58Decode 関数のバッファ割り当てを修正しました。 #90909 (Antonio Andelic)
finish=trueフラグ付きのレスポンス送信後に、レプリカから別の読み取りリクエストを受信した場合に発生する可能性のあった論理エラーを修正しました。これはMergeTreeReadPoolParallelReplicas内の論理的なレースコンディションが原因でしたが、実際に発生する可能性は非常に低いものでした。 #90921 (Nikita Taranov)。- 部分的な権限取り消し時のワイルドカード権限チェックを修正し、テストをさらに追加。 #90922 (pufit).
NestedLowCardinalityカラムに対するSummingMergeTree集約を修正しました。 #90927 (Ivan Babrou)。- ワイルドカードを用いた取り消し時のグローバル権限の扱いを修正。ワイルドカードで付与された権限を取り消した際に、
CREATE USERのようなグローバルレベルの権限まで誤って取り消されてしまう問題を修正。 #90928 (pufit). - Azure の Blob 一覧取得時に発生し得る無限ループを修正。 #90947 (Julia Kartseva).
- 過剰な Buffer フラッシュを修正しました(CPU を無駄に消費し、大量のログを出力していました)。 #91000 (Azat Khuzhin).
- ... adaptive_write_buffer_initial_size を 0 に設定することを禁止しました。 #91001 (Pedro Ferreira)。
- Compact パーツで
write_marks_for_substreams_in_compact_partsが無効になっている場合に、JSON のサブオブジェクト読み取り中、パスが共有データと動的パスの両方になり得るケースで発生していたバグを修正。 #91014 (Pavel Kruglov). - 引数なしの dictGet を含む CTE で発生する std::out_of_range 例外を修正。#91027 をクローズ。#91022(Pavel Kruglov)。
- ミューテーションでマテリアライズドカラムから動的サブカラムを読み取る処理を修正しました。#90653 をクローズしました。#91040(Pavel Kruglov)。
- 空配列と
isNull関数を併用した場合にarrayFilter関数が動作しない問題を修正しました。#73849 をクローズしました。#91105(Nihal Z. Miaji)。 - テーブルのカラムのいずれかが空のタプル型カラムである場合に
ARRAY JOINで発生していた論理エラーを修正。#90801 をクローズ。#91123(Nihal Z. Miaji)。 - 古いパーツに対して
alter add columnで追加されたカラムが遅延マテリアライズされる問題を修正。 #91142 (Pavel Kruglov)。 - Summing/Aggregating/Coalescing MergeTree における JSON カラムのマージ処理を修正しました。以前は、パーツへの書き込み時に予期しない動的なパスが発生する可能性がありました。 #91151 (Pavel Kruglov).
- コンパクトなパーツへの書き込み時に、セグメンテーションフォルトを引き起こす可能性のある動的構造の不整合を修正しました。 #91152 (Pavel Kruglov).
- 指数表記で表現されたサブノーマルな浮動小数点数の解析を修正しました。#78903 をクローズします。#91162(Nihal Z. Miaji)。
- 暗黙的スキーマを持つソースからのサブクエリを用いた
INSERT SELECTにおけるスキーマ推論の誤りを修正。 #91204 (Pervakov Grigorii)。 - https://github.com/clickhouse/clickhouse/issues/91206 を修正しました。統計情報付きでテーブルを作成し、データを書き込み、その後統計情報の一つを削除すると、再度読み込む際にクラッシュしていました。これは、シリアライズとデシリアライズで同じ型の統計情報が存在することを前提としていたためです。この修正では、現在のメタデータにシリアライズ済みの統計情報が含まれているかを確認し、含まれていない場合はダミーの統計情報を作成してデシリアライズのみを行い、その統計情報をスキップするようにしました。 #91227 (Han Fei)。
- CoalescingMergeTree のカラムへ JSON/Dynamic と LowCardinality から成る Tuple を挿入する際の不具合を修正しました。 #91215 をクローズしました。 #91270(Pavel Kruglov)。
SYSTEM DROP FILESYSTEM CACHE ON CLUSTERの不具合を修正。 #91304 (Anton Ivashkin).- 論理エラー「Bad cast from type DB::ColumnSparse to DB::ColumnNullable」が発生する可能性があった問題を修正しました。 #91284 をクローズしました。 #91309(Pavel Kruglov)。
- 悪意を持って細工されたバイトストリームが、本来は不可能なはずのネストした QBit 型としてデシリアライズされることでサーバーがクラッシュする問題を修正しました。これは悪用されるとサーバーをクラッシュさせることに利用される可能性がありました。 #91313 (Raufs Dunamalijevs).
- Replicated データベースにおいて引数が空の Alias テーブルの問題を修正。#91378 を解決。#91382(Kai Zhu)。
- この設定は現在 false に設定されているため、非同期挿入キューがリモートサーバーにフラッシュされる際には、挿入は常に同期的に実行されます。ユーザーごとにこの設定が True にされている場合でも同様です。 #91386 (Mikhail f. Shiryaev).
- マージアルゴリズムのヘッダーからスパースカラムを削除しました。 #91377 をクローズ。 #91396(Pavel Kruglov)。
- 25.8 における Hive パーティショニングのバグを修正しました。このバグにより、本来は発生すべきでない例外
A hive partitioned file can't contain only partition columnsが誤ってスローされてしまう可能性がありました。 #91403 (Kseniia Sumarokova). - Dictionary タイプが Hierarchy をサポートしているにもかかわらず、どのカラムも
HIERARCHICALではない場合に、NULLが原因でdictGetDescendantsがクラッシュする問題を修正しました。#92026 および #92121 をクローズ。#91420(Nihal Z. Miaji)。 IN関数でラムダ式と非定数タプル引数が使用された場合にクラッシュする問題を修正しました。#91379 をクローズしました。 #91446(Nihal Z. Miaji)。- MaterializedView への挿入によって、並列書き込みをサポートしないストレージで並列書き込みが開始されてしまう問題を修正しました。 #91449 (Pervakov Grigorii).
- Ytsaurus の XML 辞書における null 値の処理を修正しました。 #91465 (MikhailBurdukov).
SET param_q=[1,2,3,4]; SELECT {q:QBit(Float32,4)}のようなクエリパラメータを使用した場合にQBit型でエラーが発生する問題を修正しました。 #91488 (Raufs Dunamalijevs).- 定数式で untuple が使用された場合に LOGICAL_ERROR が発生する問題を修正。 #91507 (Pervakov Grigorii).
librdkafkaにおいてデータレースが発生する可能性のあった問題を修正しました。 #91521 (János Benjamin Antal)。remote関数のアスタリスク引数が原因で発生していた論理エラーを修正しました。#90568 をクローズ。#91524(Nihal Z. Miaji)。- Date 型および DateTime64 型に対して ORC フォーマットから読み込む際に発生していたオーバーフローを修正しました。#70976 をクローズ。#91572(Yarik Briukhovetskyi)。
- Object Storage テーブルエンジンに対する ALTER を禁止しました。たとえば、ALTER ADD PROJECTION を実行すると、Object Storage エンジンは PROJECTION をサポートしていないため、サーバーを再起動できなくなる可能性がありました。 #91573 (Nikolay Degterinsky).
- 非定数の参照ベクトル(例: テーブル由来のもの)を使用した場合に
L2DistanceTransposedが誤った結果を返す問題を修正しました。#91517。#91593(Raufs Dunamalijevs)。 - ディスパッチ段階で FALSE 条件の JOIN を行うと
LOGICAL_ERRORが返されるバグを修正しました。#91173 をクローズ。#91598(Yarik Briukhovetskyi)。 - "additional filter" を伴う join で発生していたメモリ使用量増加の問題を修正し、#91011 をクローズしました。#91664 (Vladimir Cherkasov).
- VIEW を使用し、並列レプリカを有効にした状態での JOIN クエリを修正しました。 #91813 (Igor Nikonov)。
- Delta Lake の設定
delta_lake_snapshot_versionを修正しました。この設定は、テーブルエンジン(テーブル関数ではない)で、以前にスナップショットバージョンを使用した後に値 -1(無効)を指定して使用すると、不正な結果を返す可能性がありました。 #87676 をクローズ。 #91818(Kseniia Sumarokova)。 - RecursiveCTEChunkGenerator で発生する LOGICAL_ERROR を修正。 #91827 (Pablo Marcos).
- FINAL と PREWHERE を使用するクエリで発生していたブロック構造の不整合を修正。 #91847 (Antonio Andelic).
join_use_nullsを複数の JOIN および CROSS JOIN と併用した際の論理エラーを修正。 #91853 (Vladimir Cherkasov).- 共有データおよび動的パスにおいてパスが重複した JSON を修復するための機構を追加しました。これは、https://github.com/ClickHouse/ClickHouse/pull/90816 で修正されたバグが原因で発生する可能性がありました。#91886 (Pavel Kruglov)。
- DICTIONARY_V2 でエンコードされ、NULL 値のみを含む文字列カラムを読み取る際の ORC リーダーのバグを修正しました。 #91889 (Peng Jian).
- Tuple カラムにおけるスパースおよび Nullable サブストリーム間のシリアライズの不整合を修正しました。この不整合により、読み取り中にパーツが破損したりクラッシュしたりする可能性がありました。この修正は https://github.com/ClickHouse/ClickHouse/pull/91851 に対応するものです。@Algunenano この変更でプライベートリポジトリ内のストレステストが解消されるか確認してもらえますか?@CurtizJ こちらも合わせてご確認いただけますか?ありがとうございます。 #91932 (Amos Bird)。
- plain-rewritable ディスク上でバックアップを作成する際に発生するエラー
Directory '{}' does not exist (LOGICAL_ERROR)を修正しました。 #91935 (Julia Kartseva). - 名前付きコレクションを使用して MongoDB に接続する際にクラッシュしないように修正。 #91959 (Antonio Andelic).
- コンパクトなパーツに対して一部の
ALTERクエリを実行した後に発生する可能性があった「TOO_MANY_MARKS」エラーを修正しました。 #91980 (alesapin). - https://github.com/clickhouse/clickhouse/issues/87417 をクローズ。v1 フォーマットの書き込みスキーマに誤りがありました。必須項目であるため、"added_snapshot_id" の型は "null, long" ではなく "long" であるべきです。これにより Spark など他のシステムとの互換性がなくなっていたため、バグとなっていました。マニフェストファイルを混在させると、このバグが発生します。#92078(Han Fei)。
- 以前のバージョンで命名スタイルが誤っていた
readWKTとreadWKBの名称を修正しました。 #92094 (Alexey Milovidov)。 midpoint関数における多数の論理エラー、オーバーフロー、および機能上の不具合を修正しました。#91816 をクローズしました。#92102(Nihal Z. Miaji)。- 特定のサブカラム(例: 文字列サイズ)をスパースエンコーディングを使用して読み取る際に誤った結果が返されることがあった問題を修正しました。 #92156 (Pavel Kruglov)。
system.view_refreshesがNo macro 'replica' in configエラーで失敗する不具合を修正しました。 #92203 (Michael Kolupaev).- フォーマット処理における UDF
replaceの問題を修正。 #92210 (Raúl Marín). ddlworker::markreplicasactiveでアクティブなホストが見つからず、かつremote_serversにいくつかの host_ids が存在する場合、例外を投げる代わりに警告ログを出力するようにしました。 #92223 (Tuan Pham Anh)。- 演算子
INおよびNOT INを丸括弧で囲むようにしました。#85075 を修正。#92225(Mikhail f. Shiryaev)。 - KeeperMap と Memory テーブルのバックアップ処理を修正しました。これら 2 つのエンジンのいずれかを使用するテーブルで
max_compress_block_sizeを0に設定してバックアップを作成すると、クラッシュする可能性がありました。 #92237 (Antonio Andelic)。 - Log エンジンから String 型データと .size サブカラムの両方を読み込む際にクラッシュする問題を修正しました。これにより #89909 が修正されます。これには #92290 の一部のコミットが含まれます。#92341(Amos Bird)。
caseWithExpression関数の引数でNothing型を使用したことにより発生していた論理エラーを修正しました。#85354 をクローズしました。#92351(Nihal Z. Miaji)。- MEMORY_LIMIT_EXCEEDED 発生後に集約関数がクラッシュする可能性があった問題を修正しました。 #92390 (Azat Khuzhin).
ビルド/テスト/パッケージングの改善
- CI で
clang-21を使用するように変更。#87074 (Konstantin Bogdanov). - クロスコンパイル時に CMake からのダウンロードを行わないように変更。#90506 (Raúl Marín).
ClickHouse リリース 25.11(2025-11-27)
後方互換性のない変更
- 非推奨となっていた
Object型を削除しました。#85718 (Pavel Kruglov)。 - 廃止予定だった
LIVE VIEW機能を削除しました。LIVE VIEWを使用している場合は、新しいバージョンへのアップグレードはできません。#88706 (Alexey Milovidov)。 - 以前のバージョンでは
Geometry型はStringへのエイリアスでしたが、現在は独立したフル機能の型になりました。#83344 (scanhex12)。 - MergeTree テーブルの Wide 形式のデータパートにおける
Variant型サブカラム向けに作成されるファイル名をエスケープするようにしました。この変更により、Variant/Dynamic/JSON データ型を持つ古いテーブルとの互換性が失われます。この変更は、Variant 内に特殊記号を含む型(\を含む特定のタイムゾーンを持つ DateTime など)の保存の問題を修正します。エスケープは、MergeTree の設定escape_variant_subcolumn_filenamesを変更することで無効化できます(互換性を維持するには、MergeTree 用の設定ファイルでこの設定を無効にするか、アップグレード前にcompatibility設定を以前のバージョンに設定してください)。#69590 を解決します。#87300 (Pavel Kruglov)。 - 既定で
Stringデータ型に対してwith_size_streamシリアル化形式を有効にしました。この変更は後方互換性がありますが、新しいシリアル化形式はバージョン 25.10 以降でのみサポートされているため、25.10 より前のバージョンへのダウングレードはできません。25.9 以前へのダウングレードの可能性を残したい場合は、サーバー設定のmerge_treeセクションでserialization_info_versionをbasicに、string_serialization_versionをsingle_streamに設定してください。#89329 (Alexey Milovidov)。 - クライアントが例外をより確実に解析できるように、HTTP レスポンス結果に対する例外タグ付けをサポートしました。#75175 を解決します。設定
http_write_exception_in_output_formatは、フォーマット間の一貫性のためデフォルトでは無効になっています。#88818 (Kaviraj Kanagaraj)。既存の動作を壊さない想定ではあります(最悪の場合でも例外メッセージに奇妙な文字列が追加されるだけです)が、注意喚起の意味から、変更ログのカテゴリとしては「Backward Incompatible Change」を使用するのが妥当です(例外メッセージをどのような「雑な」スクリプトがパースしているか分からないためです)。 - 共有オブジェクトストレージパス上に複数の
plain-rewritableディスクを作成することを禁止しました。これは、異なるメタデータストレージトランザクション間で衝突が発生した際に未定義の動作を引き起こす可能性があるためです。#89038 (Mikhail Artemenko)。 - Kafka ストレージの SASL 設定の優先順位を修正しました。CREATE TABLE クエリで指定されたテーブルレベルの SASL 設定が、設定ファイルにある consumer/producer 固有の設定を正しく上書きするようになりました。#89401 (János Benjamin Antal)。
- Parquet のタイムゾーンなしタイムスタンプ(isAdjustedToUTC=false)は、これまでの DateTime64(...) ではなく DateTime64(..., 'UTC') として読み込まれるようになりました。これは、UTC タイムスタンプを文字列に変換したときに正しいローカル時刻の表現が得られるという点で、従来よりも誤りが少ない動作です。以前の動作を再現するには
input_format_parquet_local_time_as_utc = 0を使用してください。#87469 を解決します。#87872 (Michael Kolupaev)。 T64コーデックに対する小さな改善として、圧縮要素サイズと整列していないデータ型を受け付けないようにしました。そうしないとバグが発生するためです。#89282 を解決します。#89432 (yanglongwei)。
新機能
Geometry型を導入しました。Geometry型に対してWKBおよびWKT形式での読み取りをサポートします。以前のバージョンではGeometry型はStringのエイリアスでしたが、現在はフル機能の独立した型になりました。#83344 (scanhex12).- ユーザーのなりすまし(impersonation)をサポートするために、新しい SQL ステートメント
EXECUTE ASを追加しました。#39048 を解決しました。#70775(Shankar)。 naiveBayesClassifier関数を追加し、n-gram に基づくナイーブベイズ法でテキストを分類できるようにしました。 #88677 (Nihal Z. Miaji)。- テーブルの一部を割合で抽出できるよう、小数の
LIMITおよびOFFSETをサポートしました。#81892 をクローズ。#88755(Ahmed Gouda)。 - Microsoft OneLake カタログ向け ClickHouse のサブシステム。 #89366 (scanhex12).
- 配列内の必要な数の次元をアンラップし、Tuple カラム内のポインタを入れ替える
flipCoordinates関数を追加しました。#79469 を解決しました。#79634(Sachin Kumar Singh)。 - Unicode 文字とそのプロパティの一覧を含む
system.unicodeテーブルを追加しました。#80055 をクローズしました。 #80857 (wxybear). - マージ後の Wide パートにおける動的サブカラム数を、データ型で指定されたパラメータに関係なく制限できるようにするため、新しい MergeTree 設定
merge_max_dynamic_subcolumns_in_wide_partを追加しました。 #87646 (Pavel Kruglov)。 cume_distウィンドウ関数のサポートを追加し、#86920 を修正しました。 #88102 (Manuel)。- テキスト索引の構築時に、新しい引数
preprocessorを追加できるようになりました。この引数には、トークン化の前に各ドキュメントを変換する任意の式を指定できます。 #88272 (Jimmy Aguilar Mena)。 X-ClickHouse-ProgressとX-ClickHouse-Summaryにmemory_usageフィールドを追加しました。これにより、クライアント側でクエリのメモリ使用量をリアルタイムに収集できます。 #88393 (Christoph Wurm)。INTO OUTFILEのために親ディレクトリを自動作成し、出力パスが存在しない場合のエラーを防ぐ settinginto_outfile_create_parent_directoriesを追加しました。これにより、クエリが結果を階層化されたディレクトリに書き込むワークフローが簡素化されます。#88610 を解決しました。#88795(Saksham)。- 一時テーブル向けの
CREATE OR REPLACE構文をサポートしました。#35888 をクローズ。#89450(Aleksandr Musorin)。 - 配列
arrからelemと等しいすべての要素を削除するためのarrayRemoveのサポートを追加しました。これは Postgres との互換性のためだけに必要なもので、ClickHouse にはすでにそれよりはるかに強力なarrayFilter関数があります。#52099 を解決しました。#89585(tiwarysaurav)。 - 平均値を計算するスカラー関数
midpointを追加。#89029 を解決。#89679(simonmichal)。 - Web UI にダウンロードボタンが追加されました。UI には結果の一部しか表示されていない場合でも、このボタンから結果全体をダウンロードできます。 #89768 (Alexey Milovidov)。
arrow_flight_request_descriptor_typeSETTING を追加し、コマンド形式の descriptor を要求する Dremio およびその他の Arrow Flight サーバーをサポート。#89523 を実装。#89826(Shreyas Ganesh)。- 引数と対応する極値を返す新しい集約関数
argAndMinとargAndMaxを追加しました。以前のバージョンでは、引数としてタプルを使用することで同様のことも実現できました。 #89884 (AbdAlRahman Gad)。 - Parquet チェックサムの書き込みおよび検証用の設定を追加。 #79012 (Michael Kolupaev).
- Kafka テーブルエンジンに
kafka_schema_registry_skip_bytes設定を追加し、メッセージペイロードをパースする前にエンベロープヘッダーのバイト列(例: AWS Glue Schema Registry の 19 バイトのプレフィックス)をスキップできるようにしました。これにより、メタデータヘッダーを追加するスキーマレジストリから ClickHouse がメッセージを消費できるようになります。 #89621 (Taras Polishchuk). h3PolygonToCells関数を追加しました。これにより、ジオメトリ領域を H3 の六角形セルで埋めることができます。 #33991 を解決しました。 #66262(Zacharias Knudsen)。- S3 内の BLOB に関連付けられているすべてのタグを含む新しい仮想カラム
_tags(Map(String, String)) を追加しました(なお、BLOB にタグがない場合は追加のリクエストは発生しません)。#72945 を解決。#77773(Zicong Qu)。
実験的機能
- Let's Encrypt などの ACME プロバイダから TLS 証明書を取得する機能をサポートしました(RFC 8555)。これにより、分散クラスタ上で TLS を自動的に設定できるようになります。 #66315 (Konstantin Bogdanov).
- Prometheus HTTP Query API の一部をサポートしました。有効化するには、設定ファイルの
<prometheus>セクションに型がquery_apiのルールを追加します。サポートされるハンドラは/api/v1/query_rangeと/api/v1/queryです。 #86132 (Nikita Mikhaylov). - フルテキスト検索が(従来の実験的段階から)ベータ版になりました。 #88928 (Robert Schulze).
Aliasを実験的機能に移行しました。allow_experimental_alias_table_engine = 1を設定することで有効化できます。 #89712 (Kai Zhu).
パフォーマンスの向上
- Parquet リーダー v3 がデフォルトで有効です。 #88827 (Michael Kolupaev).
- 分散実行: タスクをファイル単位ではなく行グループ ID 単位で分割するように改善。 #87508 (scanhex12).
RIGHTおよびFULLJOIN が ConcurrentHashJoin を使用するようになりました。これにより、これらの種類の JOIN はより高い並列度で実行されます。さまざまな RIGHT および FULL JOIN を含むケースで、性能が最大 2 倍向上します。#78027 を解決しました。 #78462(Yarik Briukhovetskyi)。- クエリ内の定数式で扱う大きな値の最適化。#72880 をクローズ。#81104(Yakov Olkhovskiy)。
- 1万以上のパーツを持つテーブルに対してパーティションプルーニングを多用する
SELECTクエリが最大8倍高速になりました。 #85535 (James Morrison)。 - クエリが集約状態に fixed hash map を使用する場合(小さな整数での GROUP BY)、ClickHouse はクエリを高速化するために集約状態のマージを並列化します。 #87366 (Jianfei Hu).
_part_offsetの SELECT と異なる ORDER BY を使用する PROJECTION をセカンダリインデックスとして利用できるようにしました。有効化すると、一部のクエリ述語に対しては、PROJECTION のパーツから読み取り、PREWHERE フェーズで行を効率的にフィルタリングするためのビットマップを生成できるようになります。これは、#80343 に続く、PROJECTION INDEX 実装の第 3 段階です。#81021(Amos Bird)。- まれな Aarch64 システムおよび、他のアーキテクチャ/カーネルの組み合わせでも発生し得る問題に対して、VDSO を修正しました。 #86096 (Tomas Hulata).
- コードの単純化と選択アルゴリズムの調整により、LZ4 伸張の速度を向上しました。 #88360 (Raúl Marín).
- S3 は内部的にキー名プレフィックスに基づいてオブジェクトをパーティション分割し、パーティションごとの高いリクエストレートに自動的にスケールします。この変更により、2 つの新しい BACKUP 設定
data_file_name_generatorとdata_file_name_prefix_lengthが追加されました。data_file_name_generator=checksumの場合、バックアップデータファイルはその内容のハッシュに基づいて命名されます。例: checksum がabcd1234ef567890abcd1234ef567890で、data_file_name_prefix_length = 3の場合、生成されるパスはabc/d1234ef567890abcd1234ef567890となります。このようなキーの分布により、S3 のパーティション間での負荷分散が強化され、スロットリングのリスクが低減します。 #88418 (Julia Kartseva)。 - Dictionary ブロックのキャッシュと、トークン検索に二分探索ではなくハッシュテーブルを使用することで、テキスト索引のパフォーマンスを向上しました。 #88786 (Elmi Ahmadov).
- クエリで
optimize_read_in_orderとquery_plan_optimize_lazy_materializationの両方を同時に利用できるようになりました。#88767 を解決しました。#88866(Manuel)。 DISTINCTを含むクエリに対して集約プロジェクションを使用するようにしました。 #86925 をクローズしました。 #88894(Nihal Z. Miaji)。- 連続した実行でのパフォーマンスを向上させるため、posting list をキャッシュするようにしました。 #88912 (Elmi Ahmadov).
- 入力のソート順が LIMIT BY キーと一致する場合に、ストリーミング LIMIT BY 変換を実行するようにしました。 #88969 (Eduard Karacharov).
- 特定の状況で、
ANY LEFT JOINまたはANY RIGHT JOINをALL INNER JOINに書き換えられるようになりました。 #89403 (Dmitry Novik). - ログ出力時のオーバーヘッドを削減し、エントリごとのアトミック操作数を減らしました。 #89651 (Sergei Trifonov).
- 複数の
JOINを含むクエリでランタイムフィルタが有効な場合に、複数のランタイムフィルタが追加されたとき、新しく追加されたフィルタステップが他のステップより前にプッシュダウンされるように実装しました。 #89725 (Alexander Gololobov). - ハッシュテーブルのマージ時のオーバーヘッドを削減することで、いくつかの
uniqExact操作をわずかに高速化しました。 #89727 (Raúl Marín). - 遅延マテリアライゼーションで処理される行数の上限を 10 から 100 に引き上げました。 #89772 (Alexey Milovidov)。
allow_special_serialization_kinds_in_output_formatsの設定をデフォルトで有効化しました。これにより、一部の行形式の出力フォーマットで Sparse/Replicated カラムを出力する際のメモリ使用量が減少し、クエリの処理速度が向上します。 #89402 (Pavel Kruglov).ALTER TABLE ... FREEZEクエリでの並列実行を追加しました。 #71743 (Kirill).- bcrypt 認証にキャッシュを追加。 #87115 (Nikolay Degterinsky).
FINALを指定したクエリで使用されるスキップ索引が、プライマリキーを構成するカラム上にある場合、他のパーツに対してプライマリキーの交差を確認する追加ステップは不要となり、現在は実行されなくなりました。 #85897 を解決しました。 #88368(Shankar Iyer)。- 最適化オプション
enable_lazy_columns_replicationがデフォルトになったため、JOIN 時のメモリ使用量を削減できます。#89316(Alexey Milovidov)。 - パーツ向けにテーブル単位の
ColumnsDescriptionキャッシュを導入し、多数のパーツと多数のカラムを含むテーブルでのメモリ使用量を削減します。 #89352 (Azat Khuzhin)。 - テキスト索引のデシリアライズされたヘッダー向けキャッシュを導入し、I/O を削減してクエリパフォーマンスを向上しました。キャッシュは次の新しいサーバー設定で構成できます: -
text_index_header_cache_policy-text_index_header_cache_size-text_index_header_cache_max_entries-text_index_header_cache_size_ratio。 #89513 (Elmi Ahmadov)。
改良
use_variant_as_common_typeが設定されている場合、必要に応じてUNIONはVariant型に型を統一するようになりました。#82772 を解決。#83246(Mithun p)。- SQL で定義されたロールを、
users.xmlで定義されたユーザーに付与できるようになりました。 #88139 (c-end). - 辞書やリフレッシャブルmaterialized view などが内部的に実行する内部クエリもログに記録し、新しい
is_internalカラムをsystem.query_logに追加しました。 #83277 (Miсhael Stetsyuk). IS NOT DISTINCT FROM(<=>)演算子を拡張しました。逆演算であるIS DISTINCT FROMをサポートし、Nullable(UInt32)とNullable(Int64)のような、型が異なる互換性のある数値オペランドにも対応しました。#86763 を解決。#87581(yanglongwei)。- インタラクティブモードの
clickhouse-clientおよびclickhouse-localで、カーソル位置にある識別子と同名のコマンドライン上の識別子がハイライトされるようになりました。 #89689 (Alexey Milovidov). - 出力フォーマットに関する設定は、クエリキャッシュには影響しなくなりました。また、クエリキャッシュでは
http_response_headers設定は無視されます。これは、Web UI からキャッシュ済み結果をダウンロードするなどの機能を実装できるようにするためです。#89756 (Alexey Milovidov)。 - HTTP インターフェイスは、クエリ結果キャッシュが使用されている場合に
AgeヘッダーとExpiresヘッダーを返します。Ageヘッダーの有無で結果がキャッシュ由来かどうかが分かり、Expiresも初回の書き込み時に設定されます。新しいプロファイルイベントを導入しました:QueryCacheAgeSeconds,QueryCacheReadRows,QueryCacheReadBytes,QueryCacheWrittenRows,QueryCacheWrittenBytes。 #89759 (Alexey Milovidov)。 disable_insertion_and_mutationが有効(つまり ClickHouse Cloud の読み取り専用ウェアハウス)な場合でも、remote テーブルおよびデータレイク テーブルへの挿入を許可しました。 #88549 (Alexander Tokmakov)。- クエリ
SYSTEM DROP TEXT INDEX CACHESを追加。 #90287 (Anton Popov). - 一貫性の保証を強化するため、デフォルトで
enable_shared_storage_snapshot_in_queryを有効化しました。悪影響はないはずです。 #82634 (Alexey Milovidov)。 send_profile_eventsSETTING を追加しました。これにより、クライアントはプロファイルイベントを利用していない場合のネットワークトラフィックを削減できます。 #89588 (Kaviraj Kanagaraj).- クエリ単位で近傍セグメントのバックグラウンドでのダウンロードを無効化できるようにしました。 #89524 を修正しました。 #89668 (tanner-bruce).
- ReplicatedMergeTree テーブルで故障したディスクが存在する場合でも、
FETCH PARTITIONを使用できるようになりました。 #58663 (Duc Canh Le). - MySQL データベースエンジンで MySQL テーブルスキーマを取得する際に発生していた未捕捉例外を修正。 #69358 (Duc Canh Le).
- すべての DDL
ON CLUSTERクエリは、アクセス権限の検証をより適切に行えるよう、元のクエリ発行ユーザーのコンテキストで実行されるようになりました。 #71334 (pufit)。 Parquetにおいて、論理型UUIDを持つFixedString(16)で表現されたUUIDのサポートを追加しました。 #74484 (alekseev-maksim).- サーバー以外のバイナリでは、デフォルトで ThreadFuzzer を無効化します。 #89115 (Raúl Marín).
- クエリプランの最適化が相関サブクエリの入力サブプランにも反映されるよう、そのマテリアライズを遅らせました。 #79890 の一部。 #85455(Dmitry Novik)。
- clickhouse-client で、
SELECTを含むCREATE OR REPLACE TABLEクエリのプログレスバー、ログ、およびパフォーマンス統計情報を表示できるようになりました。SELECTが非常に時間のかかる処理であっても、このクエリがタイムアウトすることはなくなりました。#38416 を解決しました。 #87247(Diskein)。 - ハッシュ関数で
JSON型およびDynamic型をサポートします。これにより #87734 を解決します。#87791(Pavel Kruglov)。 - ArrowFlight サーバーの未実装部分を実装しました。 #88013 (Vitaly Baranov).
- Keeper のリクエスト実行各ステージの所要時間を計測するために、サーバーおよび Keeper 向けに複数のヒストグラム型メトリクスを追加します。サーバーには次のメトリクスが追加されます:
keeper_client_queue_duration_milliseconds,keeper_client_send_duration_milliseconds,keeper_client_roundtrip_duration_milliseconds。Keeper には次のメトリクスが追加されます:keeper_server_preprocess_request_duration_milliseconds,keeper_server_process_request_duration_milliseconds,keeper_server_queue_duration_milliseconds,keeper_server_send_duration_milliseconds。 #88158 (Miсhael Stetsyuk)。 EXPLAINクエリにinput_headersオプションを追加し、各ステップに入力ヘッダーを含められるようにしました。 #88311 (János Benjamin Antal).- スロットラーによって遅延された S3 および AzureBlobStorage リクエストの数をカウントするための profile events を追加しました。ディスク関連およびディスク非関連の ThrottlerCount profile events の不整合を修正しました。これにより、AzureBlobStorage に対する HTTP DELETE リクエストはスロットルされなくなりました。 #88535 (Sergei Trifonov).
- テーブルレベルの統計情報のキャッシュ機能を追加し、2 つの設定を導入しました。MergeTree の設定
refresh_statistics_intervalは統計情報キャッシュを更新する間隔を指定し、0 の場合はキャッシュが作成されません。セッション設定use_statistics_cacheはクエリでテーブルレベルの統計情報キャッシュを使用するかどうかを指定します。より精度の高い統計情報が必要な場合には、キャッシュを無視することを選択できます。#88670 (Han Fei)。 ArrayおよびMapのバイナリデシリアライズ処理を修正し、サイズ制限を検証する際にmax_binary_string_sizeではなくmax_binary_array_size設定を使用するようにしました。これにより、RowBinary形式の読み取り時に適切な制限が適用されるようになります。 #88744 (Raufs Dunamalijevs)。- マージ処理を実行するバックグラウンドプールで使用するために
LockGuardWithStopWatchクラスを導入し、利用するようにしました。ミューテックスが 1 秒以上保持されている場合、またはスレッドが 1 秒以内にその取得ができずに待たされている場合には、警告メッセージが出力されます。MergeMutateSelectedEntryのデストラクタ内にあった重い処理をfinalizeメソッドへ移動し、MergeTreeBackgroundexecutor でロックを長時間保持しないようにしました。 #88898 (Nikita Mikhaylov)。 - エンドポイントでリージョンが指定されていない場合に、S3 向けのオプトインが必要な AWS リージョンを自動的に利用できるようにしました。参考: opt-in AWS regions。#88930(Andrey Zvonov)。
- clickhouse-client で pager 実行中に Ctrl-C を押すことでクエリをキャンセルできるようになりました。 #80778 を解決します。 #88935 (Grigorii)。
- Web UI は、値が負の場合でもテーブル内にバーを表示します。これにより、正と負の値で色分けされた、左右両方向に伸びる棒グラフを表示できます。 #89016 (Alexey Milovidov)。
- Keeper に保存される
SharedMergeTreeのメタデータ量を削減するため、shared_merge_tree_create_per_replica_metadata_nodesを無効にしました。 #89036 (Alexander Tokmakov)。 S3Queueがサーバー設定disable_insertion_and_mutationに従うようにしました。 #89048 (Raúl Marín).25.6では、S3 で再パーティショニングが発生し、10 分を超えて S3 からスローダウンエラーが返される場合でもバックアップが成功するよう、s3_retry_attemptsのデフォルト値を 500 に設定しました。 #89051 (Nikita Mikhaylov)。kafka_compression_codecおよびkafka_compression_level設定を使用して、両方の Kafka エンジンにおける Kafka producer の圧縮方式と圧縮レベルを指定できるようになりました。 #89073 (János Benjamin Antal).system.columnsに新しいカラムstatisticsを追加し、このテーブルに構築されている統計情報の種類を示します。ある種類の統計情報が自動的に作成される場合は、接尾辞として (auto) が表示されます。 #89086 (Han Fei)。*Clusterテーブル関数にクラスタ名ではなく汎用展開表現が渡された場合のエラーメッセージを改善。 #89093 (Konstantin Bogdanov).- YTsaurus: データソースとして replicated_table を使用可能にしました。 #89107 (MikhailBurdukov).
- CLI で、先頭が空白文字のクエリは履歴に保存されなくなりました。 #89116 (Konstantin Bogdanov).
hasAnyTokensまたはhasAllTokens関数の入力として String 型配列をサポートします。 #89124 (Elmi Ahmadov).- plain-rewritable ディスクにおけるメタデータのメモリ内保存方式を変更し、ディレクトリのネスト構造まわりの多数のバグを解消しました。 #89125 (Mikhail Artemenko).
- Iceberg テーブルへのクエリで
IN式内に含まれるサブクエリは、パーティションプルーニングの解析の前に適切に事前計算されるようになりました。 #89177 (Daniil Ivanik). create_table_empty_primary_key_by_defaultをデフォルトで有効化しました。これは使い勝手の面でより優れています。 #89333 (Alexey Milovidov).SHOW CREATE DATABASEで無効なクエリが生成される場合や、system.databasesからengine_fullをクエリする場合に発生するBackupデータベースエンジン内の誤ったコードを修正しました。#89477 をクローズしました。#89341(Alexey Milovidov)。- 以前のバージョンでは、
CREATE TABLEクエリでテーブルエンジンを指定しなかった場合、create_table_empty_primary_key_by_default設定は機能していませんでした。 #89342 (Alexey Milovidov). chdigを v25.11.1 に更新しました。ログの大幅な改善およびその他のさまざまな強化が含まれています(25.11 のリリースノート)。#89957(Azat Khuzhin)。(25.10 のリリースノート)。#89452(Azat Khuzhin)。- Web UI のクエリ用テキストエリアのリサイズハンドルを横幅いっぱいに広げ、少し使いやすくしました。なお、この変更以前は iPad の Safari ではブラウザ標準のリサイズ機能が利用できませんでしたが、変更後は、やり方をご存じであれば少なくともテキストエリア下端をドラッグしてサイズ変更できるようになりました。 #89457 (Alexey Milovidov).
- ハッシュ結合の結果生成におけるメモリ使用状況のトラッキングを改善しました。以前は、結合結果の生成中に行われる一時的なメモリ割り当てが正しく追跡されておらず、メモリ制限の超過につながる可能性がありました。 #89560 (Azat Khuzhin).
- 非同期サーバーログ: フラッシュを早め、デフォルトのキューサイズを拡大。 #89597 (Raúl Marín).
system.asynchronous_metrics内の誤ったFilesystemCacheBytesなどを修正。ファイルシステムキャッシュに対するSYSTEMクエリは 1 回だけ実行するように変更。同じパスを指すキャッシュについては、system.filesystem_caches内の同一パスを参照するアトミックなビューを追加。 #89640 (Azat Khuzhin).system.view_refreshes内の一部のカラムの説明をより明確にしました。 #89701 (Tuan Pham Anh)。- STS エンドポイントと連携して取得した S3 認証情報をキャッシュし、異なる関数呼び出し間で再利用できるようにしました。キャッシュされる認証情報の数は
s3_credentials_provider_max_cache_sizeで制御できます。 #89734 (Antonio Andelic)。 - その下に複数の式ステップが存在する場合に、runtime filter pushdown が正しく動作しない問題を修正しました。 #89741 (Alexander Gololobov).
- システムメモリが 5GB 未満の場合、デフォルトで実行ファイルを mlock しないようにしました。 #89751 (Alexey Milovidov).
- Web UI の型ヒントがテーブルヘッダーにはみ出さなくなりました。ツールチップの表示も修正され、テーブルヘッダーの背後に隠れなくなりました。 #89753 (Alexey Milovidov)。
- Web UI でテーブルのプロパティを表示できるようになりました。行数またはバイト数をクリックすると、
system.tablesに対するクエリが表示されます。テーブルエンジンをクリックすると、SHOW TABLESが表示されます。 #89771 (Alexey Milovidov)。 append方式の書き込みを実装していないディスクを使用するテーブルでnon_replicated_deduplication_windowをサポート。#87281 を解決。#89796(Tuan Pham Anh)。SYSTEM FLUSH ASYNC INSERT QUEUEコマンドでフラッシュするテーブルのリストを指定できるようになりました。 #89915 (Sema Checherinda).system.part_logに重複排除ブロックの ID を保存するようにしました。 #89928 (Sema Checherinda).- ファイルシステムキャッシュ設定
keep_free_space_remove_batchのデフォルト値を 10 から 100 に変更しました。より最適な値であるためです。 #90030 (Kseniia Sumarokova). - TTL DROP マージタイプを導入し、このタイプのマージ後には次回の delete TTL マージスケジュールを更新しないようにしました。 #90077 (Mikhail Artemenko).
- S3Queue のクリーンアップ中に実行される RemoveRecursive Keeper リクエストのノード数上限を、より低い値に設定しました。 #90201 (Antonio Andelic).
- ログが空の場合でもテーブルの作成を待つように
SYSTEM FLUSH LOGSクエリを変更しました。 #89408 (János Benjamin Antal). - 複数のリモート分片をまたぐ分散マージ型集約、または
IN述語内のサブクエリが存在する場合にrows_before_limit_at_leastが誤った値になる問題を修正しました。これにより #63280 を解決しました。 #63511 (Amos Bird)。 INSERT INTO ... SELECTクエリの後に0 rows in setが表示されてしまう問題を修正しました。 #47800 をクローズしました。 #79462(Engel Danila)。
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- 定数引数とショートサーキット評価を使用する
multiIfの不具合を修正。#72714 をクローズ。#84546(Yakov Olkhovskiy)。 - サブクエリ制約を持つテーブルからの SELECT 時に発生する論理エラーを修正しました。 #84190 を解決します。 #85575 (Pervakov Grigorii).
- 疑問符(?)を含む URI を使用する特定のクエリで発生していたバグを修正しました。 #85663 (Yarik Briukhovetskyi).
EXPLAIN indexes = 1の出力でカラムが一部欠落することがあった問題を修正しました。#86696 を解決します。 #87083(Michael Kolupaev)。- 並列レプリカ使用時に
Cannot add subcolumn with parallel replicasエラーが発生する可能性があった問題を修正しました。Closes #84888. #87514 (Pavel Kruglov). - parquet writer において、
created_by文字列を正しいフォーマットで出力するようにしました(例:ClickHouse version 25.10.1 (build 5b1dfb14925db8901a4e9202cd5d63c11ecfbb9f)、従来のClickHouse v25.9.1.1-testingではなく)。古い parquet-mr によって書き込まれた不正な形式のファイルとの互換性を確保するために、parquet reader を修正しました。 #87735 (Michael Kolupaev). cramersV、cramersVBiasCorrected、theilsU、contingencyにおいて誤った結果の原因となっていた φ 二乗の計算を修正。 #87831 (Nihal Z. Miaji)。- JSON 内で Float 型と Bool 型が混在する配列の読み取りを修正しました。以前はこのようなデータを挿入すると例外が発生していました。 #88008 (Pavel Kruglov).
- TCPHandler で QueryState に shared_ptr を使用し、setProgressCallback、setFileProgressCallback、setBlockMarshallingCallback 内で状態が無効になっているかどうかを検出できるようにしました。 #88201 (Tuan Pham Anh).
- query_plan_optimize_join_order_limit > 1 の場合の CROSS JOIN の再順序付け時に発生する論理エラーを修正。#89409 をクローズ。#88286(Vladimir Cherkasov)。
- Fix #88426 1. Alias テーブルでの明示的なカラム定義を禁止し、カラムをターゲットテーブルから自動的にロードするようにしました。これにより、エイリアステーブルが常にターゲットテーブルのスキーマと一致するようになります。 2. IStorage から委譲するメソッドを増やしました。 #88552 (Kai Zhu).
- 復旧後に Replicated データベースのレプリカが、
Failed to marked query-0004647339 as finished (finished=No node, synced=No node)のようなメッセージを長時間にわたって出力し続けてしまうことがありましたが、この問題は修正されました。 #88671 (Alexander Tokmakov). - サブクエリを含む新しいアナライザーで発生する可能性があった "Context has expired" エラーを修正。 #88694 (Azat Khuzhin).
- input_format_parquet_local_file_min_bytes_for_seek が 0 に設定されている場合に発生していた Parquet リーダーのセグメンテーションフォールトを修正しました。#78456 を解決しました。#88784(Animesh)。
- PK が降順の場合に
min(PK)/max(PK)の結果が誤っていた問題を修正しました。これにより #83619 が解決されます。 #88796 (Amos Bird). - 内部テーブルの DROP 時に、設定 max_table_size_to_drop および max_partition_size_to_drop によるサイズ制限が正しく伝播されるよう修正しました。 #88812 (Nikolay Degterinsky).
top_kが単一の引数で呼び出された場合でも threshold パラメータが正しく反映されるように修正しました。#88757 をクローズします。 #88867 (Manuel).- SSL 接続を必要とする ArrowFlight エンドポイントのソース(AWS ALB の背後にあるものなど)が、特定のデータセットを正しくリクエストできるようになりました。 #88868 (alex-shchetkov).
- 非マテリアライズされた Nested(Tuple(...))(ALTER によって追加されたもの)の処理を修正。#83133 を修正。#88879(Azat Khuzhin)。
- 関数
reverseUTF8のバグを修正しました。以前のバージョンでは、長さ 4 の UTF-8 コードポイントのバイト順を誤って反転していました。これにより #88913 がクローズされました。 #88914 (Alexey Milovidov)。 - icebergS3Cluster プロトコルを修正しました。Iceberg クラスタ関数でスキーマ進化、位置指定削除、および等価削除をサポートするようになりました。#88287 を解決しました。#88919(Yang Jiang)。
- 分散テーブルに対して parallel replicas を使用するクエリについて、parallel_replicas_support_projection を無効化しました。これにより #88899 がクローズされました。 #88922 (zoomxi)。
- 内部的な CAST でコンテキストを伝搬するようにしました。cast-settings が伝搬されていなかった複数の問題を修正しました。#88873 をクローズ。#78025 をクローズ。#88929(Manuel)。
- file() 関数で、glob パターンからファイルフォーマットを取得する処理を修正しました。#88920 を解決します。#88947(Vitaly Baranov)。
- SQL SECURITY DEFINER を使用して VIEW を作成する際に、アクセス権
SET DEFINER <current_user>:definerをチェックしないようにしました。 #88968 (pufit)。 L2DistanceTransposed(vec1, vec2, p)において、部分的なQBit読み取りの最適化により、pがNullableの場合に戻り値の型から誤ってNullableが削除されていたことが原因で発生していたLOGICAL_ERRORを修正しました。 #88974 (Raufs Dunamalijevs).- 未知のカタログタイプでクラッシュする不具合を修正しました。#88819 を解決します。 #88987 (scanhex12)。
- これにより、#88081 をクローズします。 #88988(scanhex12)。
- スキッピングインデックスの解析における性能劣化を修正しました。 #89004 (Anton Popov).
- 存在しないロールが割り当てられたユーザーから clusterAllReplicas を実行しようとした際に発生する ACCESS_ENTITY_NOT_FOUND エラーが発生していた問題を修正しました。#87670 を解決しました。 #89068(pufit)。
- CHECK 制約によるスパースカラムの処理を修正。 #88637 をクローズ。 #89076(Eduard Karacharov)。
- MergeTreeReaderTextIndex で仮想カラムを埋める処理において行数を誤ってカウントしていた問題を修正しました。この不具合により LOGICAL_ERROR が発生してクラッシュしていました。 #89095 (Peng Jian).
- マージの準備中に例外が発生した場合に、有効期限 (TTL) マージカウンターがリークするのを防止しました。 #89019 を解決しました。 #89127(save-my-heart)。
- base32/base58 のエンコード/デコード処理に必要なバッファサイズの計算を修正。 #89133 (Antonio Andelic).
- シャットダウン処理とバックグラウンドで実行される
INSERTの間のレースコンディションにより Distributed で発生していた use-after-free を修正しました。#88640 を解決します。#89136(Azat Khuzhin)。 - Parquet のパース中に、ミュータブルな例外オブジェクトに起因してデータレースが発生しうる問題を回避しました。 #88385 を修正。 #89174(Azat Khuzhin)。
- リフレッシャブルmaterialized view: refresh 中にソーステーブルが完全に削除された場合に、まれにサーバーがクラッシュする不具合を修正。 #89203 (Michael Kolupaev).
- HTTP インターフェイスで圧縮ストリーム送信中にエラーを返す際に、バッファをフラッシュするようにしました。 #89256 (Alexander Tokmakov).
- クエリマスキングルールが DDL 文に誤って適用されないようにしました。 #89272 (MikhailBurdukov).
- MergeTreeReaderTextIndex で仮想カラムを埋める際の行数カウントが誤っており、LOGICAL_ERROR によるクラッシュが発生する問題を修正しました。 #89095 を再オープンします。 #89303 (Jimmy Aguilar Mena)。
- Statistics countmin が LowCardinality(Nullable(String)) の estimate データ型をサポートしておらず、LOGICAL_ERROR が発生していた問題を修正。 #89343 (Han Fei).
- 主キーのカラム型が IN 関数の右辺のカラム型と異なる場合に、IN 関数でクラッシュ/未定義動作が発生する可能性がありました。例: SELECT string_column, int_column FROM test_table WHERE (string_column, int_column) IN (SELECT '5', 'not a number')。多くの行が選択され、その中に型の互換性のない値を含む行が存在する場合に発生します。 #89367 (Ilya Golshtein).
countIf(*)の引数が切り詰められる不具合を修正しました。#89372 をクローズ。#89373(Manuel)。- ミューテーションにおける統計用の非圧縮チェックサムが失われないようにしました。 #89381 (Azat Khuzhin).
- L2DistanceTransposed(vec1, vec2, p) において、部分的な QBit 読み取りの最適化により、p が LowCardinality(Nullable(T)) の場合に戻り値の型から Nullable が誤って削除され、LOGICAL_ERROR が発生していた問題を修正しました。#88362 を解決します。 #89397(Raufs Dunamalijevs)。
- タプル本体に対するスパースシリアライゼーションが誤っている(古いバージョンの ClickHouse によって書き込まれた)テーブルの読み込みを修正。 #89405 (Azat Khuzhin).
deduplicate_merge_projection_mode='ignore'使用時に、有効期限 (TTL) により本体が空になったものの、非空の PROJECTION を含むパーツのマージ処理が誤っていた問題を修正しました。#89430 を解決します。#89458(Amos Bird)。- 重複カラムを含む full_sorting_merge 結合における論理エラーを修正しました。#86957 を解決します。#89495(Vladimir Cherkasov)。
- ローテーション時に changelog が正しくリネームされなかった場合に、Keeper の起動時に changelog の読み込みが失敗する問題を修正しました。 #89496 (Antonio Andelic).
- 一意な右テーブルキーを持つテーブルに対して OR 条件を使用した場合に発生していた、誤った JOIN 結果が返される問題を修正しました。#89391 を解決します。#89512(Vladimir Cherkasov)。
- analyzer および PK IN (subquery) 使用時に発生する可能性のある「Context has expired」エラーを修正 (v2)。#89433 を修正。#89527(Azat Khuzhin)。
- 大文字のカラム名が設定されているテーブルに対する MaterializedPostgreSQL のレプリケーションの不具合を修正しました。#72363 を解決します。#89530(Danylo Osipchuk)。
- 集約関数の状態に LowCardinality(String) 型のカラムのシリアル化された値が含まれている場合にクラッシュする問題を修正しました。 #89550 (Pavel Kruglov).
enable_lazy_columns_replication設定を有効にした状態で、JOIN の右側でARRAY JOINを使用した場合にクラッシュする不具合を修正しました。 #89551 (Pavel Kruglov).- query_plan_convert_join_to_in での論理エラーを修正。#89066 を解決。#89554(Vladimir Cherkasov)。
- 変換できない型が一致しないカラムと定数を含む条件を推定しようとした際に、統計推定器で発生していた例外を修正しました。 #89596 (Han Fei).
- ランタイムフィルタは、サポートされている結合アルゴリズム、すなわちハッシュ結合に対してのみ追加されるようになりました。ランタイムフィルタは、結合アルゴリズムがまず右側を完全に読み込んでから左側を読む場合にのみ構築できますが、たとえば FullSortingMergeJoin は両側を同時に読み込みます。#89220 を修正しました。#89652(Alexander Gololobov)。
sparseGramsトークナイザー使用時におけるhasAnyTokens、hasAllTokens、tokens関数の並行実行時の不具合を修正。#89605 を解決。#89665(Elmi Ahmadov)。- 一部のケースで、join ランタイムフィルターにより発生していた論理エラーやクラッシュを修正しました。#89062 を修正します。 #89666 (Alexander Gololobov)。
enable_lazy_columns_replicationが有効な場合に、Map カラムに対する ARRAY JOIN の実行中に発生する可能性のある論理エラーを修正しました。 #89705 をクローズ。 #89717(Pavel Kruglov)。- キャンセル中のリモートクエリにおいて、切断後にリモートサーバーから読み取ろうとしてクラッシュする問題を回避しました。#89468 を解決します。#89740(Azat Khuzhin)。
- PROJECTION 索引の読み取りパスにおけるレースコンディションを修正しました。#89497 を解決します。#89762(Peng Jian)。
- projection 索引の読み取りで競合状態を引き起こす可能性のあったバグを修正しました。#89497 を解決しました。 #89775 (Amos Bird)。
- パーティションを持たないテーブルに対する Paimon テーブル関数の処理を修正しました。#89690 の問題を解決します。#89793(JIaQi)。
- 高度な JSON 共有データシリアライゼーションにおけるパスおよびそのサブカラムの読み取り時に発生する可能性があった論理エラーを修正しました。 #89805 をクローズします。 #89819(Pavel Kruglov)。
- データ型のバイナリ逆シリアル化で発生し得るスタックオーバーフローを修正しました。 #88710 をクローズしました。 #89822(Pavel Kruglov)。
IN関数内の空タプルに関する論理エラーを修正しました。 #88343 をクローズしました。 #89850(Nihal Z. Miaji)。- 互換性のため、旧アナライザーでは
optimize_injective_functions_in_group_byの設定に関係なく、GROUP BYから単射関数を削除するようにしました。#89854 を解決しました。#89870(Raufs Dunamalijevs)。 - たとえばメモリ上限によってマージが中断された場合、
merge mutate background executorはロックなしでマージタスクに対してcancelを呼び出しますが、この場合、部分的に作成された結果パートは削除されません(完了しておらず、この段階では可視状態ではなかったため)。その後、マージタスクが破棄され、それに伴い結果パートの破棄がトリガーされます。これによりディスクトランザクションがロールバックされ、S3 からデータが削除されます。最終的に、このガーベジクリーンアップ処理はmerge mutate background executorのロックの下で実行されるようになりました。#89875(Mikhail Artemenko)。 reverseおよびCAST関数における空タプルの論理エラーを修正。#89137 をクローズ。#89908(Nihal Z. Miaji)。- ClickHouse では、デフォルトで
SHOW DATABASESクエリの結果にデータレイクカタログ データベースが表示されるようになりました。 #89914 (alesapin). - バックアップで GCS のネイティブコピーを使用する処理を修正しました。誤ったクライアントのクローン処理により、GCS のネイティブコピーが常に失敗し、データを手動で読み書きするという最適でない方法が使用されていました。 #89923 (Antonio Andelic).
- base32Encode のバッファサイズ計算を修正しました。サイズが 5 未満の文字列カラムに対して base32Encode を実行するとクラッシュが発生する可能性がありました。#89911 を解消します。#89929(Antonio Andelic)。
SHOW COLUMNSおよびSHOW FUNCTIONSクエリの誤ったエスケープ処理を修正しました。 #89942 (alesapin).- MongoDB エンジンにおいて、ユーザー名に「@」文字が含まれる場合の URL 検証処理を修正しました。以前は、不適切なエンコードにより「@」を含むユーザー名でエラーが発生していました。 #89970 (Kai Zhu).
- #90592 にバックポート:
IN内でARRAY JOINを使用し、enable_lazy_columns_replication設定が有効な場合にリモートクエリで発生し得るクラッシュを修正。#90361 を解決。#89997(Pavel Kruglov)。 - #90448 でバックポート済み: 一部のケースにおいて、テキスト形式の
Stringから不正なDateTime64値が推論される問題を修正。 #89368 を解決。 #90013(Pavel Kruglov)。 BSONEachRowおよびMsgPackで、空のタプルカラムが原因で発生していた論理エラーを修正。#89814 および #71536 をクローズ。#90018(Nihal Z. Miaji)。- #90457 にバックポート: 集約状態やその他のソースからデータをデシリアライズする際にサイズチェックを行うようにしました。#90031(Raúl Marín)。
- 重複したカラムを含む JOIN で
Invalid number of rows in Chunkエラーが発生する可能性があった問題を修正しました。#89411 を解決しました。#90053(Vladimir Cherkasov)。 - #90588 でバックポート済み:
enable_lazy_columns_replication設定を有効にした状態でARRAY JOINを使用して挿入を行う際に、Column with Array type is not represented by ColumnArray column: Replicatedというエラーが発生する可能性がある不具合を修正しました。#90066(Pavel Kruglov)。 - user_files 内でドットで始まるファイルを許可するようにしました。#89662 をクローズ。#90079(Raúl Marín)。
- #90647 にバックポート: 大きなステップサイズを使用した場合に
numbersシステムテーブルで発生する論理エラーおよび剰余計算のバグを修正。#83398 をクローズ。#90123(Nihal Z. Miaji)。 - Dictionary 引数の解析で発生していた整数オーバーフローを修正しました。 #78506 をクローズ。 #90171(Raúl Marín)。
- #90468 でバックポート済み: 25.8 へのスムーズなアップグレードを妨げていた hive パーティショニングとの非互換性を修正(アップグレード時に発生していたエラー
All hive partitioning columns must be present in the schemaを修正)。#90202(Kseniia Sumarokova)。 SELECTクエリでクエリ条件キャッシュが有効になっている場合に、論理更新の後に誤ったクエリ結果が返される可能性がある問題を修正しました。#90176 を修正。#90054 を修正。 #90204(Anton Popov)。- 誤った形式の分片ディレクトリ名を解析する際に StorageDistributed がクラッシュする不具合を修正しました。 #90243 (Aleksandr Musorin).
LogicalExpressionOptimizerPassにおいて、文字列から整数または boolean への暗黙的な型変換を処理するようにしました。#89803 を解決します。#90245(Elmi Ahmadov)。- テーブル定義内の特定の skip index の不正なフォーマットを修正しました。この問題により
METADATA_MISMATCHが発生し、Replicated Database における新しいレプリカの作成が失敗していました。 #90251 (Nikolay Degterinsky). - #90381 でバックポート済み: part の行数が index_granularity より少ない場合に、MergeTreeReaderIndex で行数が一致しない問題を修正しました。#89691 を解決します。#90254(Peng Jian)。
- #90608 でバックポート済み: コンパクトパーツで JSON からサブカラムを読み取る際に
CANNOT_READ_ALL_DATAエラーにつながる可能性があったバグを修正しました。 #90264 を解決します。 #90302(Pavel Kruglov)。 - 2 つの引数を取る場合に動作しなかった
trim、ltrim、rtrim関数を修正しました。 #90170 をクローズしました。 #90305(Nihal Z. Miaji)。 - #90625 にバックポート:
index_granularity_bytes=0のときに、存在しない JSON path に対する prewhere で発生しうる論理エラーを修正。 #86924 を解決。 #90375 (Pavel Kruglov). - #90484 にバックポート:
L2DistanceTransposedにおいて、precision引数が有効な範囲を超えるとクラッシュする不具合を修正しました。#90401 をクローズ。#90405(Raufs Dunamalijevs)。 - #90577 にバックポート済み: 配列参照ベクトル(デフォルトは
Array(Float64))を、要素型がFloat64以外(Float32、BFloat16)のQBitカラムと併用した場合に、L2DistanceTransposedで距離計算が誤っていた問題を修正しました。この関数は、QBitの要素型に一致するように参照ベクトルを自動的にキャストするようになりました。#89976 を解決しました。#90485(Raufs Dunamalijevs)。 - #90601 でバックポート済み:
equals関数で発生するまれなケースが原因の論理エラーを修正。#88142 をクローズ。#90557(Nihal Z. Miaji)。 Tuple型に対するCoalescingMergeTreeの不具合を修正しました。 #88828 (scanhex12).
ビルド/テスト/パッケージングの改善
- initdb の SQL スクリプトとオーバーライドされた TCP ポートを使用して Docker 内で ClickHouse を実行する際に発生する
Connection refusedエラーを修正。#88042 (Grigorii). - ClickHouse の新しいプラットフォームとして e2k を実験的にサポート。#90159 (Ramil Sattarov).
- CMake から残っていた
FindPackageの使用を削除。ビルドがシステムパッケージに依存しないようにした。#89380 (Alexey Milovidov). - CMake 構成時のビルドでコンパイラキャッシュを使用(例:
protoc)。#89613 (Konstantin Bogdanov). - FreeBSD 13.4 の sysroot を使用。#89617 (Konstantin Bogdanov).
ClickHouse 25.10 リリース, 2025-10-31
後方互換性を損なう変更
- デフォルトの
schema_inference_make_columns_nullableSETTING を変更し、すべてを Nullable にするのではなく、Parquet/ORC/Arrow のメタデータに含まれるカラムのNullableかどうかの情報を反映するようにしました。テキストフォーマットについては変更ありません。 #71499 (Michael Kolupaev). - クエリ結果キャッシュは
log_comment設定を無視するようになり、クエリでlog_commentだけを変更しても、もはやキャッシュミスの要因にはなりません。ユーザーが意図的にlog_commentを変化させることでキャッシュを分割していた可能性がわずかにあります。この変更によりその挙動は変わるため、後方互換性のない変更となります。この目的にはquery_cache_tag設定を使用してください。 #79878 (filimonov). - 以前のバージョンでは、演算子の実装関数と同じ名前のテーブル関数を含むクエリのフォーマットに一貫性がありませんでした。#81601 をクローズ。#81977 をクローズ。#82834 をクローズ。#82835 をクローズ。EXPLAIN SYNTAX クエリは、今後は常に演算子をフォーマットするわけではありません。この新しい挙動は、構文を説明するという目的をより適切に反映します。
clickhouse-format、formatQueryなどは、クエリ内で関数呼び出しとして記述されている場合には、関数を演算子としてフォーマットしません。#82825(Alexey Milovidov)。 JOINキーでDynamic型を使用することを禁止しました。Dynamic型の値をDynamicではない型と比較すると、予期しない結果を招く可能性があるためです。Dynamicカラムは、必要な型に明示的にキャストすることを推奨します。 #86358 (Pavel Kruglov).storage_metadata_write_full_object_keyサーバーオプションはデフォルトで有効になっており、現時点では無効にできません。これは後方互換性のある変更です。注意喚起としてお知らせします。この変更は 25.x 系のリリースとしか前方互換性がありません。つまり、新しいリリースからロールバックする必要がある場合は、25.x 系のいずれかのリリースにのみダウングレードできます。 #87335 (Sema Checherinda).- 挿入レートが低い場合に ZooKeeper 上に保存される znode の数を減らすため、
replicated_deduplication_window_secondsの値を 1 週間から 1 時間に短縮しました。 #87414 (Sema Checherinda). - 設定
query_plan_use_new_logical_join_stepの名前をquery_plan_use_logical_join_stepに変更しました。 #87679 (Vladimir Cherkasov). - 新しい構文により、テキスト索引の tokenizer パラメータをより柔軟に指定できるようになりました。 #87997 (Elmi Ahmadov).
- 既存の関数
hasTokenとの一貫性を高めるため、関数searchAnyとsearchAllの名称をそれぞれhasAnyTokensとhasAllTokensに変更しました。 #88109 (Robert Schulze). - ファイルシステムキャッシュから
cache_hits_thresholdを削除しました。この機能は SLRU キャッシュポリシーを導入する前に外部コントリビューターによって追加されたものですが、現在は SLRU があるため、両方をサポートし続ける意味はありません。 #88344 (Kseniia Sumarokova). min_free_disk_ratio_to_perform_insertとmin_free_disk_bytes_to_perform_insert設定の動作を、次の 2 点でわずかに変更しました: - 挿入を拒否すべきかどうかを判定する際に、利用可能バイト数ではなく予約されていないバイト数を使用するようにしました。バックグラウンドマージやミューテーションの予約量が、設定されているしきい値と比べて小さい場合にはあまり重要ではないかもしれませんが、こちらの方がより正確です。 - これらの設定を system テーブルには適用しないようにしました。この理由は、query_logのようなテーブルを引き続き更新できるようにしたいためです。これはデバッグに大いに役立ちます。system テーブルに書き込まれるデータは通常、実データと比べて小さいため、妥当なmin_free_disk_ratio_to_perform_insertのしきい値を設定しておけば、より長い期間にわたって書き込みを継続できるはずです。#88468 (c-end).- Keeper の内部レプリケーションに対して非同期モードを有効にしました。これにより、Keeper は従来と同じ動作を維持しつつ、パフォーマンスが向上する可能性があります。23.9 より古いバージョンからアップデートする場合は、まず 23.9 以上にアップデートしてから、さらに 25.10 以上にアップデートする必要があります。アップデート前に
keeper_server.coordination_settings.async_replicationを 0 に設定しておき、アップデート完了後に再度有効化することもできます。 #88515 (Antonio Andelic)。
新機能
- 負の
LIMITおよび負のOFFSETのサポートを追加。 #28913 をクローズ。 #88411 (Nihal Z. Miaji)。 Aliasエンジンは、別のテーブルへのプロキシを作成します。すべての読み取りおよび書き込み操作は対象テーブルに転送され、エイリアス自体はデータを保持せず、対象テーブルへの参照のみを保持します。 #87965 (Kai Zhu)。- 演算子
IS NOT DISTINCT FROM(<=>)を完全にサポート。 #88155 (simonmichal). MergeTreeテーブル内の、適用可能なすべてのカラムに対して統計を自動作成する機能を追加しました。作成する統計の種類をカンマ区切りで指定するテーブルレベルの設定auto_statistics_typesを追加しました(例:auto_statistics_types = 'minmax, uniq, countmin')。#87241 (Anton Popov)。- テキスト向けの新しいブルームフィルター索引
sparse_gram。 #79985 (scanhex12)。 - 数値の基数変換を行うための新しい
conv関数が追加されました。現在は基数 2〜36 をサポートしています。 #83058 (hp). LIMIT BY ALL構文のサポートを追加しました。GROUP BY ALLやORDER BY ALLと同様に、LIMIT BY ALLは SELECT 句に含まれるすべての非集約式に自動的に展開され、それらを LIMIT BY のキーとして使用します。例えば、SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALLはSELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, nameと等価です。この機能により、SELECT で選択した非集約カラムすべてを LIMIT BY の対象にしたい場合に、それらを明示的に列挙することなくクエリを簡潔に記述できます。#59152 をクローズしました。#84079(Surya Kant Ranjan)。- ClickHouse で Apache Paimon をクエリできるようにしました。この統合により、ClickHouse ユーザーは Paimon のデータレイクストレージに直接アクセスできるようになります。 #84423 (JIaQi).
studentTTestOneSample集約関数を追加しました。 #85436 (Dylan)。- 集約関数
quantilePrometheusHistogramは、ヒストグラムバケットの上限値と累積値を引数として受け取り、分位点が属するバケットの上限値と下限値の間で線形補間を行います。クラシックなヒストグラムに対する PromQL の関数histogram_quantileと同様に動作します。 #86294 (Stephen Chi). - Delta Lake メタデータファイル向けの新しい system テーブルを追加しました。 #87263 (scanhex12)。
ALTER TABLE REWRITE PARTSを追加しました。これはテーブルのパーツを最初から再作成し、新しい設定をすべて使用して書き換えます(use_const_adaptive_granularityのように、一部の設定は新しいパーツに対してのみ適用されるため)。 #87774 (Azat Khuzhin)。SYSTEM RECONNECT ZOOKEEPERコマンドを追加し、ZooKeeper との接続の切断と再接続を強制的に行えるようにしました(https://github.com/ClickHouse/ClickHouse/issues/87317)。#87318(Pradeep Chhetri)。max_named_collection_num_to_warnおよびmax_named_collection_num_to_throwの設定によって、名前付きコレクションの数を制限できるようにしました。新しいメトリックNamedCollectionとエラーTOO_MANY_NAMED_COLLECTIONSを追加しました。 #87343 (Pablo Marcos)。startsWithおよびendsWith関数の大文字小文字を区別しない最適化版であるstartsWithCaseInsensitive、endsWithCaseInsensitive、startsWithCaseInsensitiveUTF8、endsWithCaseInsensitiveUTF8を追加しました。 #87374 (Guang Zhao)。- サーバー設定の "resources_and_workloads" セクションを使用して、SQL で
WORKLOADおよびRESOURCE定義を指定できるようにしました。 #87430 (Sergei Trifonov)。 - ワイドパーツとして作成するための最小レベルを指定できる新しいテーブル設定
min_level_for_wide_partを追加しました。 #88179 (Christoph Wurm). - Keeper クライアントに、
cpとmvコマンドの再帰版であるcprおよびmvrを追加しました。 #88570 (Mikhail Artemenko). - 挿入時のマテリアライズ対象から除外するスキップ索引のリストを指定するためのセッション設定(
exclude_materialize_skip_indexes_on_insert)を追加しました。マージ処理中のマテリアライズ対象から除外するスキップ索引のリストを指定するための MergeTree テーブル設定(exclude_materialize_skip_indexes_on_merge)を追加しました。 #87252 (George Larionov).
実験的機能
- ベクトルをビットスライス形式で格納する
QBitデータ型と、パラメータによって精度と速度のトレードオフを制御できる近似ベクトル検索を行えるL2DistanceTransposed関数を実装しました。 #87922 (Raufs Dunamalijevs). - 関数
searchAllおよびsearchAnyは、テキストカラムを含まないカラムに対しても動作するようになりました。その場合、デフォルトのトークナイザーを使用します。 #87722 (Jimmy Aguilar Mena).
パフォーマンスの向上
- JOIN および ARRAY JOIN において、遅延カラムレプリケーションを実装しました。Sparse や Replicated などの特殊なカラム表現を、一部の出力フォーマットで通常のカラムに変換しないようにしました。これにより、メモリ内での不要なデータコピーを回避します。 #88752 (Pavel Kruglov).
- MergeTree テーブルのトップレベル String カラムに、圧縮率の向上および効率的なサブカラムアクセスを可能にするためのオプションの
.sizeサブカラムシリアライゼーションを追加しました。シリアライゼーションのバージョン管理および空文字列を扱う式の最適化のための新しい MergeTree 設定を導入しました。 #82850 (Amos Bird)。 - Iceberg に対して
read in orderをサポートしました。 #88454 (scanhex12). - 実行時に右側のサブツリーから Bloom filter を構築し、それを左側のサブツリーのスキャンに渡すことで、一部の JOIN クエリを高速化できるようになりました。これは、
SELECT avg(o_totalprice) FROM orders, customer, nation WHERE c_custkey = o_custkey AND c_nationkey=n_nationkey AND n_name = 'FRANCE'のようなクエリで有効です。 #84772 (Alexander Gololobov)。 - Query Condition Cache (QCC) と索引解析の順序および統合方法をリファクタリングすることで、クエリパフォーマンスを改善しました。QCC によるフィルタリングは、プライマリキーおよびスキップ索引の解析より前に適用されるようになり、不要な索引計算を削減できます。索引解析は複数の範囲フィルタをサポートするよう拡張され、そのフィルタリング結果は QCC に再度保存されるようになりました。これにより、索引解析が実行時間の大半を占めるクエリ、特にスキップ索引(ベクトル索引や転置インデックスなど)に依存するクエリの速度が大幅に向上します。 #82380 (Amos Bird)。
- 小さなクエリを高速化するための細かな最適化を多数実施。 #83096 (Raúl Marín).
- ネイティブプロトコルでログおよびプロファイルイベントを圧縮します。100 個以上のレプリカを含むクラスターでは、非圧縮のプロファイルイベントだけで 1〜10 MB/秒の帯域を消費し、インターネット接続が遅い場合には進行状況バーの更新が遅くなります。これにより #82533 が解決されました。 #83586 (Alexey Milovidov)。
- 大文字小文字を区別する文字列検索(
WHERE URL LIKE '%google%'のようなフィルタ処理)のパフォーマンスを、StringZilla ライブラリを用い、利用可能な場合は SIMD CPU 命令を使用することで改善しました。#84161(Raúl Marín)。 - テーブルに型
SimpleAggregateFunction(anyLast)のカラムが存在する場合に、AggregatingMergeTree テーブルに対してFINAL付きでSELECTを実行する際のメモリ割り当ておよびメモリコピーを削減しました。 #84428 (Duc Canh Le). JOINの述語における論理和条件のプッシュダウンを行うロジックを追加します。例として、TPC-H Q7 において 2 つのテーブル n1 と n2 上の条件(n1.n_name = 'FRANCE' AND n2.n_name = 'GERMANY') OR (n1.n_name = 'GERMANY' AND n2.n_name = 'FRANCE')がある場合、各テーブルごとに個別の部分的なフィルタ条件を抽出します。すなわち、n1 に対してはn1.n_name = 'FRANCE' OR n1.n_name = 'GERMANY'、n2 に対してはn2.n_name = 'GERMANY' OR n2.n_name = 'FRANCE'を抽出します。 #84735 (Yarik Briukhovetskyi)。- 新しいデフォルト設定
optimize_rewrite_like_perfect_affixにより、前方一致または後方一致パターンを持つLIKEのパフォーマンスを向上しました。 #85920 (Guang Zhao)。 - 複数の文字列/数値カラムで GROUP BY を行う際に、サイズの大きなシリアライズ済みキーによって生じていたパフォーマンス低下を修正しました。これは #83884 のフォローアップです。#85924(李扬)。
- キーごとに多数の一致が発生するハッシュ結合におけるメモリ使用量を削減するために、新しい
joined_block_split_single_row設定を追加しました。これにより、左テーブルの単一行に対する一致であっても、ハッシュ結合結果を chunk 単位に分割できるようになります。これは、左テーブルの 1 行が右テーブルの数千または数百万行と一致する場合に特に有用です。以前は、すべての一致を一度にメモリ上に具体化する必要がありました。この変更によりピーク時のメモリ使用量は削減されますが、CPU 使用量が増加する可能性があります。 #87913 (Vladimir Cherkasov). - SharedMutex を改良し、多数のクエリが同時に実行される場合の性能を向上しました。 #87491 (Raúl Marín).
- ほとんどが頻度の低いトークンで構成されるドキュメントに対するテキスト索引の構築パフォーマンスを改善しました。 #87546 (Anton Popov).
- Field デストラクタの典型的なケースを高速化しました(多数の小さなクエリを処理する際のパフォーマンスを改善)。 #87631 (Raúl Marín).
- JOIN 最適化中に実行時ハッシュテーブル統計の再計算をスキップするようにし(JOIN を含むすべてのクエリのパフォーマンスが向上)、新しいプロファイルイベント
JoinOptimizeMicrosecondsとQueryPlanOptimizeMicrosecondsを追加しました。 #87683 (Vladimir Cherkasov). - MergeTreeLazy リーダーでマークをキャッシュに保存し、ダイレクト I/O を回避できるようにしました。これにより、ORDER BY と小さな LIMIT を含むクエリのパフォーマンスが向上します。 #87989 (Nikita Taranov)。
is_deletedカラムを持つReplacingMergeTreeテーブルに対するFINAL句付きの SELECT クエリの実行が、2 つの既存の最適化による並列化の改善により高速化されました。1. テーブル内で単一のpartしか持たないパーティションに対するdo_not_merge_across_partitions_select_final最適化。2. テーブル内のその他の選択された範囲をintersecting / non-intersectingに分割し、FINALマージ処理を通過する必要があるのは intersecting 範囲のみにしたこと。 #88090 (Shankar Iyer).- フェイルポイントを使用しない場合の影響を軽減しました(デバッグが有効でないときのデフォルトのコードパス)。 #88196 (Raúl Marín).
uuidでフィルタするsystem.tablesへのフルスキャンを行わないようにしました(ログや ZooKeeper のパスから UUID しか取得できない場合に便利です)。 #88379 (Azat Khuzhin).- 関数
tokens、hasAllTokens、hasAnyTokensのパフォーマンスが向上しました。 #88416 (Anton Popov)。 - 一部のケースで JOIN クエリのパフォーマンスをわずかに向上させるため、
AddedColumns::appendFromBlockをインライン化しました。 #88455 (Nikita Taranov). - クライアントの自動補完機能は、複数の system テーブルを問い合わせるのではなく
system.completionsを使用することで、より高速かつ一貫性のあるものになりました。 #84694 (|2ustam)。 - Dictionary の圧縮方式を制御するための新しいテキスト索引パラメータ
dictionary_block_frontcoding_compressionを追加しました。デフォルトで有効になっており、front-coding圧縮を使用します。 #87175 (Elmi Ahmadov). min_insert_block_size_rows_for_materialized_viewsおよびmin_insert_block_size_bytes_for_materialized_viewsの設定に応じて、materialized view に挿入する前に、すべてのスレッドからのデータを 1 つにまとめてから挿入するようになりました。以前は、parallel_view_processingが有効な場合、特定の materialized view への挿入を行う各スレッドがそれぞれ独立してデータをまとめて挿入していたため、生成されるパーツの数が多くなる可能性がありました。 #87280 (Antonio Andelic).- 一時ファイルへの書き込み用バッファのサイズを制御するための設定
temporary_files_buffer_sizeを追加。*LowCardinalityカラムに対して、scatter操作(たとえば Grace ハッシュ結合で使用)時のメモリ消費を最適化。 #88237 (Vladimir Cherkasov). - テキストインデックスの並列レプリカからの直接読み取りをサポートしました。オブジェクトストレージからのテキストインデックス読み取りのパフォーマンスを改善しました。 #88262 (Anton Popov)。
- データレイクカタログのテーブルを対象とするクエリでは、分散処理のためにパラレルレプリカが使用されるようになりました。 #88273 (scanhex12).
- "to_remove_small_parts_at_right" と名付けられたバックグラウンドマージアルゴリズムのチューニング用内部ヒューリスティクスが、マージ範囲スコアの計算より前に実行されるようになりました。これ以前は、マージセレクタは広いマージ範囲を選択し、その後でその末尾をフィルタリングしていました。修正: #85374。#88736 (Mikhail Artemenko)。
改良
- 関数
generateSerialIDが、系列名として非定数引数をサポートするようになりました。 #83750 をクローズしました。 #88270(Alexey Milovidov)。 - 新しいシーケンスの開始値をカスタマイズできるように、
generateSerialID関数にオプションのstart_valueパラメータを追加しました。 #88085 (Manuel). clickhouse-formatに--semicolons_inlineオプションを追加し、クエリをフォーマットする際にセミコロンが新しい行ではなく末尾行に付くようにしました。 #88018 (Jan Rada).- Keeper で設定が上書きされている場合でも、サーバーレベルのスロットリングを設定可能にしました。#73964 をクローズ。#74066 (JIaQi)。
mannWhitneyUTestは、両方のサンプルが同一の値のみを含む場合に、例外をスローしなくなりました。現在は SciPy と整合的な有効な結果を返します。これにより次の Issue がクローズされました: #79814。#80009(DeanNeaht)。- メタデータトランザクションがコミットされたとき、ディスクのオブジェクトストレージに対する書き換えトランザクションが既存のリモート BLOB を削除するようになりました。 #81787 (Sema Checherinda).
- 最適化の前後で結果型の
LowCardinalityが異なる場合における冗長な等価比較式の最適化パスを修正しました。 #82651 (Yakov Olkhovskiy). - HTTP クライアントが
Expect: 100-continueに加えてヘッダーX-ClickHouse-100-Continue: deferを設定した場合、ClickHouse は QUOTA 検証に通過するまでクライアントに100 Continueレスポンスを送信しないため、いずれ破棄されるリクエストボディの送信によるネットワーク帯域の無駄を防ぎます。これは、クエリを URL のクエリ文字列で送信し、データをリクエストボディで送信する INSERT クエリで特に有効です。リクエストボディを最後まで送信せずにリクエストを中止すると、HTTP/1.1 におけるコネクションを再利用できなくなりますが、新しいコネクションを確立することで追加されるレイテンシは、大量データの INSERT 全体の所要時間と比べると通常は無視できる程度です。 #84304 (c-end). - S3 ストレージを使用する
DATABASE ENGINE = Backup利用時に、ログ内の S3 認証情報がマスクされるようになりました。 #85336 (Kenny Sun). - クエリプラン最適化の効果が相関サブクエリの入力サブプランからも見えるようにするため、そのマテリアライズを遅延させました。 #79890 の一部。 #85455(Dmitry Novik)。
- SYSTEM DROP DATABASE REPLICA に対する変更: - データベースを指定してドロップする、あるいはレプリカ全体をドロップする場合: データベース内の各テーブルのレプリカもドロップされる - 'WITH TABLES' が指定されている場合は、各ストレージのレプリカもドロップされる - それ以外の場合はロジックは変わらず、データベースのレプリカのみがドロップされる - Keeper パス付きでデータベースレプリカをドロップする場合: - 'WITH TABLES' が指定されている場合: - データベースを Atomic データベースとして復元する - Keeper 内のステートメントから RMT テーブルを復元する - データベースをドロップする(復元されたテーブルもドロップされる) - それ以外の場合は、指定された Keeper パス上のレプリカのみをドロップする。 #85637 (Tuan Pham Anh).
materialize関数を含む場合の有効期限 (TTL) のフォーマットの不整合を修正しました。#82828 をクローズしました。#85749(Alexey Milovidov)。- Iceberg テーブルの状態はストレージオブジェクトには保存されなくなりました。これにより、ClickHouse における Iceberg を同時実行クエリでも利用できるようになります。 #86062 (Daniil Ivanik)。
use_persistent_processing_nodes = 1の場合の処理ノードと同様に、S3Queue の ordered モードにおける bucket lock を永続モードにしました。テストに Keeper のフォールトインジェクションを追加しました。 #86628 (Kseniia Sumarokova).- フォーマット名にタイプミスがある場合にヒントを表示するようにしました。#86761 をクローズしました。 #87092(flynn)。
- リモートレプリカは、PROJECTION が存在しない場合、索引の解析をスキップするようになりました。#87096 (zoomxi).
- ytsaurus テーブルで UTF-8 エンコーディングを無効にできるようにしました。 #87150 (MikhailBurdukov).
s3_slow_all_threads_after_retryable_errorをデフォルトで無効にしました。 #87198 (Nikita Mikhaylov).- テーブル関数
arrowflightをarrowFlightに名称変更。 #87249 (Vitaly Baranov). clickhouse-benchmarkを更新し、CLI フラグで_の代わりに-を使用できるようにしました。 #87251 (Ahmed Gouda)。- シグナルハンドラ内での
system.crash_logへのフラッシュを同期的に行うようにしました。 #87253 (Miсhael Stetsyuk). ORDER BY句を含まないトップレベルのSELECTクエリにORDER BY rand()を自動で挿入するinject_random_order_for_select_without_order_by設定を追加しました。 #87261 (Rui Zhang).joinGetのエラーメッセージを改善し、join_keysの数がright_table_keysの数と一致しない場合に、その旨を正しく示すようにしました。 #87279 (Isak Ellmer).- 書き込みトランザクション中に任意の Keeper ノードの stat を確認できるようにしました。これにより、ABA 問題の検出に役立ちます。 #87282 (Mikhail Artemenko).
- 高負荷な ytsaurus リクエストを heavy プロキシにリダイレクトするようにしました。 #87342 (MikhailBurdukov).
- ディスクトランザクション由来のメタデータに対して、unlink/rename/removeRecursive/removeDirectory などの操作のロールバック処理と、あらゆるワークロードでのハードリンク数を修正し、インターフェイスをより汎用的にして他のメタストアでも再利用できるよう簡素化しました。 #87358 (Mikhail Artemenko).
- Keeper に対する
TCP_NODELAYを無効化できるkeeper_server.tcp_nodelay構成パラメータを追加しました。 #87363 (Copilot)。 clickhouse-benchmarksで--connectionをサポートしました。これはclickhouse-clientでサポートされているものと同様で、クライアントのconfig.xml/config.yamlのconnections_credentialsパス以下に事前定義された接続を指定することで、コマンドライン引数で明示的にユーザー名/パスワードを指定する必要を避けられます。clickhouse-benchmarkに--accept-invalid-certificateのサポートを追加しました。#87370 (Azat Khuzhin)。max_insert_threadsの設定が Iceberg テーブルにも適用されるようになりました。 #87407 (alesapin)。PrometheusMetricsWriterにヒストグラムおよびディメンション付きメトリクスを追加しました。これにより、PrometheusRequestHandlerハンドラーは必要なメトリクスを一通り備えるようになり、Cloud 環境で信頼性が高く低オーバーヘッドなメトリクス収集に利用できるようになりました。 #87521 (Miсhael Stetsyuk)。- 関数
hasTokenは、空のトークンに対してはマッチ数ゼロを返すようになりました(以前は例外をスローしていました)。 #87564 (Jimmy Aguilar Mena). ArrayおよびMap(mapKeysとmapValues)の値に対するテキストインデックスのサポートを追加しました。サポートされる関数はmapContainsKeyとhasです。 #87602 (Elmi Ahmadov)。- 有効期限が切れたグローバル ZooKeeper セッション数を示す新しい
ZooKeeperSessionExpiredメトリクスを追加。 #87613 (Miсhael Stetsyuk). - バックアップ専用の設定(たとえば backup_slow_all_threads_after_retryable_s3_error)を持つ S3 ストレージクライアントを、バックアップ先へのサーバーサイド(ネイティブ)コピーに使用するようにしました。s3_slow_all_threads_after_retryable_error を廃止しました。 #87660 (Julia Kartseva).
- 実験的機能である
make_distributed_planを使用したクエリプランのシリアライズ時に、max_joined_block_size_rowsおよびmax_joined_block_size_bytesの設定が正しく処理されない問題を修正。 #87675 (Vladimir Cherkasov). enable_http_compression設定がデフォルトで有効になりました。これは、クライアントが HTTP 圧縮を受け入れる場合、サーバーがそれを使用することを意味します。ただし、この変更にはいくつかのデメリットがあります。クライアントはbzip2のような計算コストの高い圧縮方式を要求でき、これは現実的ではなく、サーバーのリソース消費を増加させます(ただし、これは大きな結果セットが転送される場合にのみ顕在化します)。クライアントはgzipを要求することもでき、これはそれほど悪くはありませんが、zstdと比較すると最適とは言えません。#71591 をクローズ。#87703(Alexey Milovidov)。system.server_settingsに新しいエントリkeeper_hostsを追加し、ClickHouse が接続可能な [Zoo]Keeper ホストの一覧を参照できるようにしました。 #87718 (Nikita Mikhaylov)。- 履歴調査を容易にするために、system ダッシュボードに
fromとtoの値を追加しました。 #87823 (Mikhail f. Shiryaev)。 - Iceberg の SELECT に対するパフォーマンス計測用の情報をさらに追加。 #87903 (Daniil Ivanik).
- Filesystem キャッシュの改善: キャッシュ領域を同時に予約しているスレッド間で、キャッシュ優先度イテレータを再利用するようにしました。 #87914 (Kseniia Sumarokova).
Keeperに対するリクエストサイズを制限できるようにしました(ZooKeeperのjute.maxbufferと同様のmax_request_sizeSETTING。後方互換性のためデフォルトは OFF で、今後のリリースで有効化される予定です)。 #87952 (Azat Khuzhin)。clickhouse-benchmarkはデフォルトでエラーメッセージにスタックトレースを含めないようにしました。 #87954 (Ahmed Gouda).- マークがキャッシュに存在する場合は、スレッドプールを利用した非同期マーク読み込み(
load_marks_asynchronously=1)は使用しないでください(プールが逼迫している可能性があり、マークがすでにキャッシュ内にあってもクエリの待ち時間が増えるなどのペナルティを受けるため)。 #87967 (Azat Khuzhin). - Ytsaurus: カラムの一部のみを指定して CREATE TABLE/テーブル関数/辞書を作成できるようにしました。 #87982 (MikhailBurdukov).
- 今後、
system.zookeeper_connection_logはデフォルトで有効になり、Keeper セッションに関する情報を取得するために利用できます。 #88011 (János Benjamin Antal). - 重複した外部テーブルが渡された場合の TCP と HTTP の挙動を一貫させました。HTTP では、一時テーブルを複数回渡すことが許可されています。 #88032 (Sema Checherinda).
- Arrow/ORC/Parquet の読み取り用に使用していたカスタム MemoryPools を削除しました。#84082 により、すべてのアロケーションを追跡するようになったため、このコンポーネントは不要になりました。#88035(Nikita Mikhaylov)。
- 引数を指定せずに
Replicatedデータベースを作成できるようにしました。 #88044 (Pervakov Grigorii). clickhouse-keeper-client: clickhouse-keeper の TLS ポートへの接続をサポートし、フラグ名は clickhouse-client と同じもののままとしました。 #88065 (Pradeep Chhetri).- メモリ制限を超過したためにバックグラウンドのマージが拒否された回数を追跡する新しいプロファイルイベントを追加しました。 #88084 (Grant Holly)。
- CREATE/ALTER TABLE のカラムのデフォルト式を検証するアナライザーを有効にしました。 #88087 (Max Justus Spransy).
- 内部のクエリプランニングを改善し、
CROSS JOINに JoinStepLogical を使用するようにしました。 #88151 (Vladimir Cherkasov). hasAnyTokens関数にhasAnyToken、hasAllTokens関数にhasAllTokenというエイリアスを追加しました。 #88162 (George Larionov).- グローバルサンプリングプロファイラをデフォルトで有効にしました(クエリに関連しないサーバースレッドも含まれます)。すべてのスレッドのスタックトレースを、CPU 時間および実時間の両方について 10 秒ごとに収集します。 #88209 (Alexander Tokmakov)。
- コピーおよびコンテナ作成機能で発生していた 'Content-Length' の問題を修正した Azure SDK へ更新。 #88278 (Smita Kulkarni).
- MySQL との互換性を高めるため、関数
lagを大文字小文字を区別しないようにしました。 #88322 (Lonny Kapelushnik). clickhouse-serverディレクトリからclickhouse-localを起動できるようにしました。以前のバージョンでは、Cannot parse UUID: .というエラーが発生していました。これにより、サーバーを起動せずにclickhouse-localを起動してサーバーのデータベースを操作できるようになりました。 #88383 (Alexey Milovidov)。keeper_server.coordination_settings.check_node_acl_on_remove設定を追加しました。有効な場合は、各ノードを削除する前に、そのノード自身および親ノードの両方の ACL が検証されます。無効な場合は、親ノードの ACL のみが検証されます。 #88513 (Antonio Andelic).Verticalフォーマットを使用する場合、JSONカラムが見やすく整形して表示されるようになりました。#81794 をクローズします。#88524(Frank Rosner)。clickhouse-clientのファイル(例: クエリ履歴)をホームディレクトリ直下ではなく、XDG Base Directories 仕様で定義された場所に保存するようになりました。すでに存在している場合は、引き続き~/.clickhouse-client-historyが使用されます。 #88538 (Konstantin Bogdanov)。GLOBAL INに起因するメモリリークを修正(https://github.com/ClickHouse/ClickHouse/issues/88615)。 #88617(pranavmehta94)。- 文字列引数を受け取れるように、hasAny/hasAllTokens にオーバーロードを追加しました。 #88679 (George Larionov).
clickhouse-keeperがブート時に起動できるようにするステップを postinstall スクリプトに追加しました。 #88746 (YenchangChan).- Web UI では、キー入力のたびではなく、貼り付け時にのみ認証情報をチェックするようにしました。これにより、設定が誤っている LDAP サーバーで発生していた問題を回避します。この変更により #85777 が解決されました。 #88769 (Alexey Milovidov)。
- CONSTRAINT 違反時の例外メッセージの長さを制限しました。以前のバージョンでは、非常に長い文字列が挿入された場合に、同様に非常に長い例外メッセージが出力され、それが
query_logに書き込まれてしまうことがありました。#87032 をクローズ。#88801(Alexey Milovidov)。 - テーブル作成時に ArrowFlight サーバーからデータセットの構造を取得する処理を修正。 #87542 (Vitaly Baranov).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- GeoParquet が原因でクライアントプロトコルエラーが発生していた問題を修正しました。 #84020 (Michael Kolupaev).
- イニシエーターノード上のサブクエリ内で、
shardNum()のようなホスト依存関数の解決処理を修正。 #84409 (Eduard Karacharov)。 parseDateTime64BestEffort、change{Year,Month,Day}、makeDateTime64など、いくつかの日時関連関数において、エポック以前の日付で小数秒を含む値の扱いが誤っていた問題を修正しました。これまでは、小数秒部分を秒に加算すべきところを減算していました。たとえばparseDateTime64BestEffort('1969-01-01 00:00:00.468')は、本来1969-01-01 00:00:00.468を返すべきところで1968-12-31 23:59:59.532を返していました。 #85396 (xiaohuanlin).- 同じ ALTER ステートメント内でカラムの状態が変化した場合に、ALTER COLUMN IF EXISTS コマンドが失敗する問題を修正しました。DROP COLUMN IF EXISTS、MODIFY COLUMN IF EXISTS、COMMENT COLUMN IF EXISTS、RENAME COLUMN IF EXISTS などのコマンドは、同一ステートメント内のそれ以前のコマンドによってカラムが削除されたケースを正しく処理するようになりました。 #86046 (xiaohuanlin).
- サポート対象範囲外の日付に対する Date/DateTime/DateTime64 型の推論を修正。 #86184 (Pavel Kruglov).
AggregateFunction(quantileDD)カラムに対してユーザーが送信した一部の有効なデータが、マージ処理中に無限再帰に陥ってクラッシュを引き起こす可能性があった問題を修正しました。 #86560 (Raphaël Thériault).clusterテーブル関数として作成されたテーブルで JSON/Dynamic 型をサポートしました。 #86821 (Pavel Kruglov)。- CTE 内で計算される関数の結果が、クエリ内で非決定的になっていた問題を修正。 #86967 (Yakov Olkhovskiy).
- 主キーのカラム上で pointInPolygon を使用した EXPLAIN で発生していた LOGICAL_ERROR を修正。 #86971 (Michael Kolupaev).
- 名前にパーセントエンコードされたシーケンスを含むデータレイクテーブルを修正しました。 #86626 をクローズしました。 #87020(Anton Ivashkin)。
optimize_functions_to_subcolumnsを使用したOUTER JOINにおいて、Nullable なカラムに対するIS NULLの誤った動作を修正しました。#78625 をクローズしました。#87058(Vladimir Cherkasov)。max_temporary_data_on_disk_size制限のトラッキングにおいて、一時データの解放を誤って計上していた問題を修正しました。#87118 をクローズ。#87140 (JIaQi)。- 関数 checkHeaders は、提供されたヘッダーを適切に検証し、禁止されているヘッダーを拒否するようになりました。原作者: Michael Anastasakis (@michael-anastasakis)。#87172(Raúl Marín)。
- すべての数値型に対して
toDateとtoDate32の動作を同一にしました。int16 からのキャスト時における Date32 のアンダーフロー検査を修正しました。 #87176 (Pervakov Grigorii). - 複数の
JOINを含むクエリで、特にLEFT/INNER JOINの後にRIGHT JOINが続く場合に、parallel replicas の利用時に発生していた論理エラーを修正しました。 #87178 (Igor Nikonov). - スキーマ推論キャッシュで
input_format_try_infer_variants設定が考慮されるようにしました。 #87180 (Pavel Kruglov). - pathStartsWith 関数が、指定したプレフィックス配下のパスにのみマッチするように修正しました。 #87181 (Raúl Marín).
_row_number仮想カラムおよび Iceberg の positioned delete 操作における論理エラーを修正しました。 #87220 (Michael Kolupaev).constブロックと非constブロックが混在していたことによりJOINで発生していた、LOGICAL_ERROR"Too large size passed to allocator" を修正しました。 #87231 (Azat Khuzhin).- 別の
MergeTreeテーブルを読み取るサブクエリを含む論理更新で発生していた不具合を修正しました。 #87285 (Anton Popov). - ROW POLICY が有効な場合に正しく動作しなかった move-to-prewhere 最適化を修正しました。#85118 の継続対応です。#69777 をクローズします。#83748 をクローズします。#87303 (Nikolai Kochetov)。
- データパーツ内に存在しないデフォルト式を持つカラムへのパッチ適用の問題を修正しました。 #87347 (Anton Popov).
- MergeTree テーブルで重複するパーティションフィールド名を使用した場合にセグメンテーションフォルトが発生していた問題を修正しました。 #87365 (xiaohuanlin).
- EmbeddedRocksDB のアップグレード処理を修正。 #87392 (Raúl Marín).
- オブジェクトストレージ上のテキスト索引からの直接読み込みの問題を修正しました。 #87399 (Anton Popov).
- 存在しないエンジンに対する権限が作成できないようにしました。 #87419 (Jitendra).
s3_plain_rewritableに対しては「not found」エラーのみを無視するようにしました(それ以外のエラーを無視するとあらゆる問題につながる可能性があります)。 #87426 (Azat Khuzhin)。- YTSaurus ソースおよび *range_hashed レイアウトを使用する辞書を修正しました。 #87490 (MikhailBurdukov)。
- 空のタプル配列の作成を修正。 #87520 (Pavel Kruglov).
- 一時テーブル作成時に不正なカラムをチェックするようにしました。 #87524 (Pavel Kruglov).
- Hive のパーティションカラムをフォーマットヘッダーに含めないようにしました。 #87515 を修正しました。 #87528(Arthur Passos)。
- テキストフォーマット使用時の DeltaLake におけるフォーマットからの読み取り準備処理を修正。 #87529 (Pavel Kruglov).
- Buffer テーブルに対する SELECT および INSERT のアクセス検証を修正しました。 #87545 (pufit).
- S3 テーブルに対してデータスキッピング索引を作成できないようにしました。 #87554 (Bharat Nallan).
- 非同期ロギングにおいてトラッキングされているメモリがリークし(10時間で約100GiBに達する大きなドリフトが発生しうる)、
text_logにおいてもほぼ同程度のドリフトが発生しうる問題を回避しました。 #87584 (Azat Khuzhin)。 - View または Materialized View の SELECT の設定によってグローバルなサーバー設定が上書きされてしまう可能性があったバグを修正しました。この問題は、当該 View が非同期に削除され、バックグラウンドのクリーンアップが完了する前にサーバーが再起動された場合に発生する可能性がありました。 #87603 (Alexander Tokmakov)。
- メモリ過負荷警告を計算する際、可能であればユーザースペースページキャッシュのバイト数を除外するように修正しました。 #87610 (Bharat Nallan).
- CSV デシリアライズ時の型の並びが誤っていると
LOGICAL_ERRORが発生していたバグを修正しました。 #87622 (Yarik Briukhovetskyi). - 実行可能ディクショナリに対する
command_read_timeoutの処理が誤っていた問題を修正。#87627 (Azat Khuzhin)。 - 新しい analyzer 使用時に、置換されたカラムでフィルタリングした場合、WHERE 句における SELECT * REPLACE の動作が誤っていた問題を修正しました。 #87630 (xiaohuanlin).
Distributedテーブル上でMergeを使用した場合の二段階集約処理を修正しました。 #87687 (c-end).- 右側の行リストが使用されていない場合の HashJoin アルゴリズムにおける出力ブロックの生成を修正。 #87401 を修正。 #87699 (Dmitry Novik)。
- 索引解析を適用した結果、読み取るデータが存在しない場合に、誤った並列レプリカ読み取りモードが選択されてしまう可能性がありました。 #87653 をクローズしました。 #87700 (zoomxi).
- Glue における
timestamp/timestamptzカラムの処理を修正。 #87733 (Andrey Zvonov). - この変更により、#86587 がクローズされました。 #87761(scanhex12)。
- PostgreSQL インターフェースでの boolean 値の書き込みを修正。 #87762 (Artem Yurov)。
- CTE を含む INSERT SELECT クエリで発生していた不明なテーブルに関するエラーを修正。#85368。#87789(Guang Zhao)。
- Nullable 内に含められない Variants から NULL な map サブカラムを読み取る処理を修正。 #87798 (Pavel Kruglov).
- セカンダリノードでクラスタ上のデータベースを完全に削除できなかった場合のエラー処理を修正。 #87802 (Tuan Pham Anh).
- 複数の skip index 関連のバグを修正。 #87817 (Raúl Marín)。
- AzureBlobStorage において、まずネイティブコピーを試行し、'Unauthroized' エラーが発生した場合に読み書きでのコピーに切り替えるように更新しました(AzureBlobStorage で、ソースとデスティネーションでストレージアカウントが異なる場合、'Unauthorized' エラーが発生します)。また、構成でエンドポイントが定義されている場合に "use_native_copy" が適用されない問題を修正しました。 #87826 (Smita Kulkarni).
- ArrowStream ファイルに一意でない Dictionary が含まれている場合、ClickHouse がクラッシュする問題がありました。 #87863 (Ilya Golshtein).
- approx_top_k および finalizeAggregation 使用時に発生する致命的な不具合を修正。 #87892 (Jitendra).
- 最後のブロックが空の場合に、プロジェクション付きマージが正しく行われない不具合を修正しました。 #87928 (Raúl Marín).
- 引数型が GROUP BY で許可されていない場合に、GROUP BY から単射関数を削除しないようにしました。 #87958 (Pavel Kruglov).
session_timezoneSETTING をクエリで使用した場合に、datetime ベースのキーに対する granule/パーティションの除外処理が正しく行われない問題を修正。 #87987 (Eduard Karacharov)。- PostgreSQL インターフェイスで、クエリ実行後に影響を受けた行数を返すようになりました。 #87990 (Artem Yurov).
- 誤った結果を引き起こす可能性があるため、PASTE JOIN に対するフィルタープッシュダウンの利用を制限しました。 #88078 (Yarik Briukhovetskyi).
- https://github.com/ClickHouse/ClickHouse/pull/84503 で導入された権限チェックに対し、評価を行う前に URI の正規化を適用します。#88089(pufit)。
- 新しいアナライザで ARRAY JOIN COLUMNS() がどのカラムにも一致しない場合に発生していた論理エラーを修正。 #88091 (xiaohuanlin).
- "High ClickHouse memory usage" 警告を、ページキャッシュを除外するように修正。 #88092 (Azat Khuzhin).
MergeTreeテーブルにカラム TTL が設定されている場合に発生しうるデータ破損を修正しました。 #88095 (Anton Popov)。- 外部データベース(
PostgreSQL/SQLite/...)に不正なテーブルが接続されている状態でsystem.tablesを読み込む際に発生しうる未処理例外を修正。 #88105 (Azat Khuzhin)。 - 空のタプルを引数として呼び出した場合に
mortonEncodeおよびhilbertEncode関数がクラッシュする不具合を修正しました。#88110 (xiaohuanlin). - クラスタ内に非アクティブなレプリカが存在する場合でも、
ON CLUSTERクエリがより短い時間で完了するようになりました。 #88153 (alesapin). - DDL worker がレプリカの Set から古くなったホストをクリーンアップするようになりました。これにより ZooKeeper に保存されるメタデータの量が削減されます。 #88154 (alesapin).
- cgroups を使用しない環境で ClickHouse を実行できない問題を修正しました(誤って cgroups が非同期メトリクスの必須要件になっていました)。 #88164 (Azat Khuzhin).
- エラー発生時にディレクトリ移動操作を正しくロールバックできるようにしました。ルートだけでなく、実行中に変更されたすべての
prefix.pathオブジェクトを書き換える必要があります。 #88198 (Mikhail Artemenko). ColumnLowCardinalityにおけるis_sharedフラグの伝播を修正しました。これは、ハッシュ値がすでに計算されてReverseIndexにキャッシュされた後で、新しい値がカラムに挿入された場合に、誤った GROUP BY の結果をもたらす可能性がありました。 #88213 (Nikita Taranov)。- ワークロード設定
max_cpu_shareを修正しました。これにより、ワークロード設定max_cpusが指定されていなくても使用できるようになりました。 #88217 (Neerav). - サブクエリを含む非常に重い mutation が prepare 段階でスタックしてしまう不具合を修正しました。これらの mutation は
SYSTEM STOP MERGESで停止できるようになりました。 #88241 (alesapin). - これで相関サブクエリがオブジェクトストレージでも動作するようになりました。 #88290 (alesapin).
system.projectionsおよびsystem.data_skipping_indicesにアクセス中は DataLake データベースの初期化を行わないようにしました。 #88330 (Azat Khuzhin)。show_data_lake_catalogs_in_system_tablesが明示的に有効化されている場合にのみ、データレイクのカタログが system のイントロスペクション用テーブルに表示されるようになりました。 #88341 (alesapin).- DatabaseReplicated が
interserver_http_host設定に正しく従うように修正しました。 #88378 (xiaohuanlin)。 - 位置引数は、内部クエリ段階では妥当ではないため、PROJECTION を定義するコンテキストでは明示的に無効になりました。これにより #48604 が修正されました。 #88380 (Amos Bird)。
countMatches関数が二乗時間の計算量になっていた問題を修正しました。 #88400 をクローズしました。 #88401(Alexey Milovidov)。- KeeperMap テーブルに対する
ALTER COLUMN ... COMMENTコマンドがレプリケートされ、Replicated データベースのメタデータにコミットされてすべてのレプリカに伝播されるようにしました。#88077 をクローズ。 #88408(Eduard Karacharov)。 - Database Replicated データベースにおける Materialized Views で、誤った循環依存が検出され、新しいレプリカをデータベースに追加できなくなっていた問題を修正しました。 #88423 (Nikolay Degterinsky).
group_by_overflow_modeがanyに設定されている場合のスパースなカラムの集計処理を修正しました。 #88440 (Eduard Karacharov)。- 複数の FULL JOIN USING 句と
query_plan_use_logical_join_step=0を併用した場合に「column not found」エラーが発生する問題を修正しました。#88103 をクローズしました。#88473(Vladimir Cherkasov)。 - ノード数が 10 を超える大規模クラスタでは、
[941] 67c45db4-4df4-4879-87c5-25b8d1e0d414 <Trace>: RestoreCoordinationOnCluster The version of node /clickhouse/backups/restore-7c551a77-bd76-404c-bad0-3213618ac58e/stage/num_hosts changed (attempt #9), will try againというエラーにより、復元が失敗する確率が高くなります。num_hostsノードが多数のホストによって同時に上書きされてしまいます。この修正により、試行回数を制御する設定が動的になりました。#87721 をクローズします。#88484(Mikhail f. Shiryaev)。 - この PR は 23.8 以前との互換性を確保するためだけのものです。互換性の問題はこの PR によって導入されました: https://github.com/ClickHouse/ClickHouse/pull/54240。この SQL は
enable_analyzer=0の場合に失敗します(23.8 より前では問題ありませんでした)。#88491 (JIaQi)。 - 大きな値を DateTime に変換する際の
accurateCastエラーメッセージで発生する UBSAN の整数オーバーフローを修正しました。 #88520 (xiaohuanlin). - タプル型に対する CoalescingMergeTree を修正しました。これにより #88469 がクローズされました。 #88526(scanhex12)。
iceberg_format_version=1に対する DELETE 操作を禁止しました。これにより #88444 がクローズされました。 #88532 (scanhex12).- このパッチでは、フォルダ階層の深さに依存せずに
plain-rewritableディスクを移動する操作の不具合を修正します。 #88586 (Mikhail Artemenko)。 *cluster関数における SQL SECURITY DEFINER の動作を修正しました。 #88588 (Julian Maicher).- 内部の const PREWHERE カラムが同時に変更されることで発生し得るクラッシュを修正しました。 #88605 (Azat Khuzhin).
- テキスト索引からの読み取りを修正し、
use_skip_indexes_on_data_readおよびuse_query_condition_cache設定が有効な場合にクエリ条件キャッシュを利用できるようにしました。 #88660 (Anton Popov). Poco::Net::HTTPChunkedStreamBuf::readFromDeviceからスローされるPoco::TimeoutException例外が原因で SIGABRT によるクラッシュが発生する問題を修正。 #88668 (Miсhael Stetsyuk)。- #88910 にバックポートされました: リカバリ後、Replicated データベースのレプリカが長時間にわたり
Failed to marked query-0004647339 as finished (finished=No node, synced=No node)のようなメッセージを出力し続けてスタックした状態になることがありましたが、この問題は修正されました。 #88671 (Alexander Tokmakov)。 - 設定を再読み込みした後に ClickHouse が初回接続を行う場合に、
system.zookeeper_connection_logへ追記できない問題を修正。 #88728 (Antonio Andelic)。 date_time_overflow_behavior = 'saturate'を使用して DateTime64 を Date に変換する際、タイムゾーンを扱う場合に範囲外の値に対して誤った結果となる可能性があった不具合を修正しました。 #88737 (Manuel).- キャッシュを有効にした S3 テーブルエンジンで発生する「having zero bytes」エラーを修正する N 回目の試み。 #88740 (Kseniia Sumarokova).
loopテーブル関数に対する SELECT 時のアクセス検証を修正しました。 #88802 (pufit).- 非同期ロギングが失敗した際に例外を捕捉して、プログラムが異常終了しないようにしました。 #88814 (Raúl Marín).
- #89060 にバックポート: 単一の引数で呼び出されたときに
top_kが threshold パラメータを正しく反映するように修正。#88757 をクローズ。#88867(Manuel)。 - #88944 にバックポートされました: 関数
reverseUTF8のバグを修正しました。以前のバージョンでは、長さ 4 の UTF-8 コードポイントのバイト列を誤って反転していました。これにより #88913 がクローズされます。 #88914(Alexey Milovidov)。 - #88980 にバックポート: SQL SECURITY DEFINER 付きでビューを作成する際に、
SET DEFINER <current_user>:definerへのアクセス権を検査しないようにしました。#88968(pufit)。 - #89058 にバックポート済み: 部分的な
QBit読み取りの最適化により、pがNullableの場合に戻り値の型から誤ってNullableが削除されてしまっていたL2DistanceTransposed(vec1, vec2, p)内のLOGICAL_ERRORを修正しました。#88974(Raufs Dunamalijevs)。 - #89167 にバックポート済み: 不明なカタログタイプにより発生するクラッシュを修正。 #88819 を解決。 #88987(scanhex12)。
- #89028 にバックポート済み: スキップインデックスの解析で発生していたパフォーマンス低下を修正しました。#89004 (Anton Popov)。
ビルド/テスト/パッケージングの改善
postgresライブラリのバージョン 18.0 を使用。 #87647 (Konstantin Bogdanov).- FreeBSD 向けに ICU を有効化。 #87891 (Raúl Marín).
- 動的ディスパッチを SSE 4 ではなく SSE 4.2 に対して行っている場合には、SSE 4.2 を使用。 #88029 (Raúl Marín).
Speculative Store Bypass Safeが利用できない場合にNO_ARMV81_OR_HIGHERフラグを必須にしない。 #88051 (Konstantin Bogdanov).- ClickHouse が
ENABLE_LIBFIU=OFFでビルドされている場合、failpoint 関連の関数は no-op(何もしない処理)となり、パフォーマンスに影響しなくなる。この場合、SYSTEM ENABLE/DISABLE FAILPOINTクエリはSUPPORT_IS_DISABLEDエラーを返す。 #88184 (c-end).
ClickHouse リリース 25.9、2025-09-25
非互換の変更
- IPv4/IPv6 に対する意味のない二項演算を無効化しました: IPv4/IPv6 と非整数型との加算 / 減算は無効になりました。以前は浮動小数点型との演算を許可し、一部の他の型(たとえば DateTime)では論理エラーを投げていました。 #86336 (Raúl Marín).
- 設定
allow_dynamic_metadata_for_data_lakesを非推奨化しました。現在では、すべての Iceberg テーブルが、各クエリを実行する前にストレージから最新のテーブルスキーマを取得しようとします。 #86366 (Daniil Ivanik). OUTER JOIN ... USING句からの coalesced カラムの解決方法を、より一貫性があるように変更しました: 以前は、OUTER JOIN で USING カラムと修飾付きカラム (a, t1.a, t2.a) の両方を選択した場合、USING カラムが誤ってt1.aに解決され、左側に一致がない右テーブルの行に対して 0/NULL を表示していました。現在では、USING 句内の識別子は常に coalesced カラムに解決され、修飾付き識別子は、クエリ内にどの識別子が存在しているかに関係なく、非 coalesced カラムに解決されます。たとえば: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 変更前: a=0, t1.a=0, t2.a=2 (誤り - 'a' が t1.a に解決されている) -- 変更後: a=2, t1.a=0, t2.a=2 (正しい - 'a' は coalesced)。 #80848 (Vladimir Cherkasov).- レプリケーテッドテーブルの重複排除ウィンドウを 10000 まで拡大しました。これは後方互換性は保たれていますが、多数のテーブルが存在する状況では、この変更によって高いリソース消費が発生しうるシナリオが想定されます。 #86820 (Sema Checherinda).
新機能
- NATS エンジンで新しい
nats_streamとnats_consumerの設定を指定することで、NATS JetStream を利用してメッセージを購読できるようになりました。 #84799 (Dmitry Novikov). arrowFlightテーブル関数に認証および SSL のサポートを追加しました。#87120 (Vitaly Baranov)。- AWS がサポートする Intelligent-Tiering を指定できる
storage_class_nameという名前の新しいパラメータをS3テーブルエンジンおよびs3テーブル関数に追加しました。キー・バリュー形式と位置指定形式(非推奨)の両方をサポートします。 #87122 (alesapin)。 - Iceberg テーブルエンジン用の
ALTER UPDATE。 #86059 (scanhex12)。 - SELECT 文で Iceberg メタデータファイルを取得できるように、system テーブル
iceberg_metadata_logを追加。#86152 (scanhex12). IcebergおよびDeltaLakeテーブルで、ストレージレベルの設定項目diskによるカスタムディスク構成がサポートされるようになりました。 #86778 (scanhex12).- データレイクディスクで Azure をサポートしました。 #87173 (scanhex12).
- Azure Blob Storage 上での
Unityカタログをサポート。#80013(Smita Kulkarni)。 Iceberg書き込みで追加のフォーマット(ORC、Avro)をサポートしました。これにより #86179 が解決されました。 #87277 (scanhex12)。- データベース レプリカに関する情報を保持する新しいシステムテーブル
database_replicasを追加。 #83408 (Konstantin Morozov). - 一方の配列から他方の配列を集合として差し引く関数
arrayExceptを追加しました。 #82368 (Joanna Hulboj)。 - 新しい
system.aggregated_zookeeper_logテーブルを追加しました。このテーブルには、セッション ID、親パス、オペレーション種別ごとにグループ化された ZooKeeper オペレーションの統計情報(例: オペレーション数、平均レイテンシ、エラー数)が記録されており、定期的にディスクにフラッシュされます。 #85102 #87208 (Miсhael Stetsyuk)。 - 新しい関数
isValidASCIIを追加しました。入力文字列または FixedString が ASCII バイト(0x00~0x7F)のみから成る場合は 1 を返し、それ以外の場合は 0 を返します。#85377 をクローズしました。... #85786(rajat mohan)。 - ブール型設定は引数なしで指定できます(例:
SET use_query_cache;)。これは値を true に設定することと同等です。#85800 (thraeka)。 - 新しい設定オプション
logger.startupLevelとlogger.shutdownLevelにより、それぞれ ClickHouse の起動時およびシャットダウン時のログレベルを上書き設定できるようになりました。 #85967 (Lennard Eijsackers). - 集約関数
timeSeriesChangesToGridおよびtimeSeriesResetsToGrid。timeSeriesRateToGridと同様に動作し、開始タイムスタンプ、終了タイムスタンプ、ステップ、ルックバックウィンドウのパラメータに加えて、タイムスタンプと値の 2 つの引数を受け取りますが、各ウィンドウごとに少なくとも 1 サンプル(従来の 2 サンプルではなく)を必要とします。PromQL のchanges/resetsを計算し、パラメータで定義されたタイムグリッドの各タイムスタンプについて、指定されたウィンドウ内でサンプル値が変化または減少した回数をカウントします。戻り値の型はArray(Nullable(Float64))です。 #86010 (Stephen Chi)。 - 一時テーブルと同様の構文(
CREATE TEMPORARY VIEW)を用いて一時ビューを作成できるようになりました。 #86432 (Aly Kafoury)。 - CPU およびメモリ使用量に関する警告を
system.warningsテーブルに追加。 #86838 (Bharat Nallan)。 Protobuf入力でoneofインジケータをサポートしました。oneof の一部の存在を示すための特別なカラムを使用できます。メッセージに oneof が含まれていて、input_format_protobuf_oneof_presenceが設定されている場合、ClickHouse はどの oneof フィールドが見つかったかを示すカラムを設定します。#82885(Ilya Golshtein)。- jemalloc の内部ツールに基づくアロケーションプロファイリングを改善しました。グローバル jemalloc プロファイラは、
jemalloc_enable_global_profiler設定で有効化できるようになりました。サンプリングされたグローバルなアロケーションおよびデアロケーションは、jemalloc_collect_global_profile_samples_in_trace_log設定を有効にすることで、JemallocSample型としてsystem.trace_logに保存できます。jemalloc プロファイリングは、jemalloc_enable_profilerSETTING を用いてクエリごとに有効化できるようになりました。system.trace_logへのサンプル保存は、jemalloc_collect_profile_samples_in_trace_logSETTING を用いてクエリ単位で制御できます。jemalloc をより新しいバージョンに更新しました。 #85438 (Antonio Andelic)。 - Iceberg テーブルを
DROPした際にファイルを削除するための新しい設定を追加しました。これにより #86211 がクローズされました。 #86501 (scanhex12)。
実験的機能
- 反転テキスト索引を、RAM に収まりきらない規模のデータセットにもスケールするよう、ゼロから再設計しました。 #86485 (Anton Popov).
- 結合の並べ替えで統計情報を使用するようになりました。この機能は
allow_statistics_optimize = 1とquery_plan_optimize_join_order_limit = 10を設定することで有効化できます。 #86822 (Han Fei). alter table ... materialize statistics all構文をサポートし、テーブルのすべての統計情報をマテリアライズできるようにしました。 #87197 (Han Fei).
パフォーマンスの向上
- 読み取り時にスキップ索引を用いてデータパーツをフィルタリングし、不要な索引読み取りを削減できるようにしました。新しい設定
use_skip_indexes_on_data_readによって制御されます(デフォルトでは無効)。この変更は #75774 に対応するものです。また、#81021 と共通の基盤となる実装も含まれています。 #81526 (Amos Bird)。 query_plan_optimize_join_order_limitセtting によって制御される、JOIN を自動で並べ替えてパフォーマンスを向上させる JOIN order optimization を追加しました。なお、現時点での JOIN order optimization は統計情報のサポートが限定的であり、主にストレージエンジンからの行数推定に依存しています。より高度な統計情報の収集およびカーディナリティ推定は、今後のリリースで追加される予定です。アップグレード後に JOIN クエリで問題が発生した場合 は、一時的な回避策としてSET query_plan_use_new_logical_join_step = 0を設定して新しい実装を無効化し、問題を報告して調査にご協力ください。USING 句からの識別子解決に関する注意:OUTER JOIN ... USING句における coalesced カラムの解決方法を、より一貫性のある動作に変更しました。以前は、OUTER JOIN において USING で指定したカラムと修飾付きカラム(a, t1.a, t2.a)の両方を選択した場合、USING カラムが誤ってt1.aに解決され、左テーブルに対応する行がない右テーブルの行について 0/NULL が表示されていました。現在は、USING 句からの識別子は常に coalesced カラムに解決され、修飾付き識別子は、クエリ内に他にどの識別子が存在していても、非 coalesced カラムに解決されます。例: ```sql SELECT a, t1.a, t2.a FROM (SELECT 1 as a WHERE 0) t1 FULL JOIN (SELECT 2 as a) t2 USING (a) -- 変更前: a=0, t1.a=0, t2.a=2 (誤り - 'a' が t1.a に解決されている) -- 変更後: a=2, t1.a=0, t2.a=2 (正しい - 'a' は coalesced)。 #80848 (Vladimir Cherkasov).- データレイク向けの分散
INSERT SELECT。 #86783 (scanhex12). func(primary_column) = 'xx'やcolumn in (xxx)といった条件に対する PREWHERE 最適化を改善しました。#85529 (李扬)。- JOIN の書き換えを実装しました。1. マッチした行またはマッチしなかった行に対してフィルタ条件が常に偽となる場合、
LEFT ANY JOINおよびRIGHT ANY JOINをSEMI/ANTIJOIN に変換します。この最適化は、新しい設定query_plan_convert_any_join_to_semi_or_anti_joinによって制御されます。2. 片側のマッチしなかった行に対してフィルタ条件が常に偽となる場合、FULL ALL JOINをLEFT ALLまたはRIGHT ALLJOIN に変換します。 #86028 (Dmitry Novik)。 - 論理削除の実行後における vertical merge の性能を改善しました。 #86169 (Anton Popov).
LEFT/RIGHTjoin において非マッチの行が多数ある場合のHashJoinのパフォーマンスをわずかに最適化しました。 #86312 (Nikita Taranov)。- Radix sort:コンパイラが SIMD を利用し、より効率的にプリフェッチできるようにしました。Intel CPU の場合にのみソフトウェアプリフェッチを使用するため、dynamic dispatch を用いています。https://github.com/ClickHouse/ClickHouse/pull/77029 における @taiyang-li の作業を継続したものです。#86378(Raúl Marín)。
- 多数のパーツを含むテーブルに対する短いクエリの実行性能を改善しました(
dequeの代わりにdevectorを使用してMarkRangesを最適化)。#86933(Azat Khuzhin)。 joinモードにおけるパッチパーツ適用処理のパフォーマンスを改善しました。#87094 (Anton Popov).query_condition_cache_selectivity_thresholdという設定(デフォルト値: 1.0)を追加しました。この設定は、選択度が低い述語のスキャン結果を query condition cache への格納対象から除外します。これにより、キャッシュのヒット率が低下する代わりに、query condition cache のメモリ消費量を削減できます。 #86076 (zhongyuankai).- Iceberg への書き込み時のメモリ使用量を削減しました。 #86544 (scanhex12).
改良
- 単一の挿入操作で Iceberg に複数のデータファイルを書き込めるようになりました。上限を制御するための新しい設定
iceberg_insert_max_rows_in_data_fileとiceberg_insert_max_bytes_in_data_fileを追加しました。 #86275 (scanhex12). - Delta Lake に挿入されるデータファイルに対して行数およびバイト数の上限を追加しました。
delta_lake_insert_max_rows_in_data_fileおよびdelta_lake_insert_max_bytes_in_data_fileの設定で制御できます。 #86357 (Kseniia Sumarokova)。 - Iceberg 書き込み時のパーティションで利用できる型をさらにサポートしました。これにより #86206 がクローズされました。 #86298(scanhex12)。
- S3 のリトライポリシーを設定可能にし、config XML ファイルを変更した際に S3 ディスクの設定をホットリロードできるようにしました。 #82642 (RinChanNOW).
- S3(Azure)Queue テーブルエンジンを改善し、ZooKeeper への接続が失われても重複を発生させることなく処理を継続できるようにしました。S3Queue の
use_persistent_processing_nodes設定を有効にする必要があります(ALTER TABLE MODIFY SETTINGにより変更可能)。#85995(Kseniia Sumarokova)。 - materialized view を作成する際に、
TO句の後ろでクエリパラメータを使用できるようになりました。例えば、CREATE MATERIALIZED VIEW mv TO {to_table:Identifier} AS SELECT * FROM src_tableのように指定します。#84899 (Diskein)。 Kafka2テーブルエンジンに誤った設定が指定された場合に表示されるユーザー向けの指示を、より明確になるよう改善しました。 #83701 (János Benjamin Antal).Time型に対してタイムゾーンを指定することはできなくなりました(そもそも意味がないためです)。 #84689 (Yarik Briukhovetskyi)。best_effortモードでの Time/Time64 型のパースに関連するロジックを簡素化し、一部のバグを回避しました。 #84730 (Yarik Briukhovetskyi).deltaLakeAzureと同様にクラスターモード対応の関数としてdeltaLakeAzureCluster関数を追加し、deltaLakeClusterのエイリアスとしてdeltaLakeS3Cluster関数を追加しました。 #85358 を解決しました。 #85547(Smita Kulkarni)。- 通常のコピー操作に対してもバックアップ時と同様に
azure_max_single_part_copy_size設定を適用するようにしました。 #85767 (Ilya Golshtein). - S3 オブジェクトストレージで再試行可能なエラーが発生した場合に、S3 クライアントスレッドを減速させるようにしました。これにより、既存の設定
backup_slow_all_threads_after_retryable_s3_errorが S3 ディスクにも適用され、より汎用的な名前s3_slow_all_threads_after_retryable_errorに変更されました。 #85918 (Julia Kartseva). - 設定項目 allow_experimental_variant/dynamic/json および enable_variant/dynamic/json を非推奨としてマークしました。現在は、これら 3 種類の型はすべて無条件に有効になっています。 #85934 (Pavel Kruglov).
http_handlersで、スキーマおよびホスト名:ポートを含む完全な URL 文字列(full_urlディレクティブ)によるフィルタリングをサポートしました。 #86155 (Azat Khuzhin).- 新しい設定
allow_experimental_delta_lake_writesを追加。#86180(Kseniia Sumarokova)。 - init.d スクリプトでの systemd の検出ロジックを修正し、「Install packages」チェックが失敗する問題を解消しました。 #86187 (Azat Khuzhin).
- 新しい
startup_scripts_failure_reason次元メトリクスを追加しました。このメトリクスは、起動スクリプトの失敗につながるさまざまなエラーの種類を区別するために必要です。特にアラート用途では、一時的なエラー(例:MEMORY_LIMIT_EXCEEDEDやKEEPER_EXCEPTION)と一時的ではないエラーを区別する必要があります。 #86202 (Miсhael Stetsyuk)。 - Iceberg テーブルのパーティションで
identity関数を省略できるようにしました。 #86314 (scanhex12). - 特定のチャンネルに対してのみ JSON 形式でのログ出力を有効にできるようになりました。これを行うには、
logger.formatting.channelをsyslog/console/errorlog/logのいずれかに設定します。 #86331 (Azat Khuzhin)。 WHERE句でネイティブな数値を使用できるようにしました。これらはすでに論理関数の引数としては使用可能でした。これにより、filter push-down や move-to-prewhere といった最適化が容易になります。#86390(Nikolai Kochetov)。- メタデータが破損している Catalog に対して
SYSTEM DROP REPLICAを実行した際に発生していたエラーを修正しました。 #86391 (Nikita Mikhaylov). - Azure ではアクセス権のプロビジョニングにかなり長い時間がかかる場合があるため、ディスクアクセスチェック(
skip_access_check = 0)のために追加のリトライを行うようにしました。 #86419 (Alexander Tokmakov). timeSeries*()関数における staleness window を、左開・右閉の区間としました。 #86588 (Vitaly Baranov)。FailedInternal*Queryプロファイルイベントを追加しました。#86627 (Shane Andrade).- 設定ファイルで追加した、名前にドットを含むユーザーの処理を修正しました。 #86633 (Mikhail Koviazin)。
- クエリのメモリ使用量用の非同期メトリクス(
QueriesMemoryUsageおよびQueriesPeakMemoryUsage)を追加。 #86669 (Azat Khuzhin)。 clickhouse-benchmark --preciseフラグを使用すると、QPS やその他のインターバルごとのメトリクスをより正確に計測・レポートできます。クエリの実行時間がレポート間隔--delay Dと同程度の場合でも、一貫した QPS を得るのに役立ちます。 #86684 (Sergei Trifonov)。- 一部のスレッド(merge/mutate、クエリ、materialized view、zookeeper クライアント)により高い/低い優先度を割り当てられるよう、Linux スレッドの nice 値を設定可能にしました。 #86703 (Miсhael Stetsyuk).
- 競合状態が原因でマルチパートアップロード中に元の例外が失われた場合に発生する、誤解を招きやすい「specified upload does not exist」エラーを修正しました。 #86725 (Julia Kartseva).
EXPLAINクエリにおけるクエリプランの説明文の長さを制限しました。EXPLAIN以外のクエリについてはこの説明文を生成しないようにしました。query_plan_max_step_description_lengthという設定を追加しました。 #86741 (Nikolai Kochetov).- クエリプロファイラ(
query_profiler_real_time_period_ns/query_profiler_cpu_time_period_ns)向けに、CANNOT_CREATE_TIMER を回避することを目的として、保留中のシグナルを調整できる機能を追加しました。さらに自己診断のために/proc/self/statusからSigQを収集するようにしました(ProcessSignalQueueSizeがProcessSignalQueueLimitに近づいている場合、CANNOT_CREATE_TIMER エラーが発生する可能性が高くなります)。 #86760 (Azat Khuzhin)。 - Keeper における
RemoveRecursiveリクエストのパフォーマンスを改善しました。 #86789 (Antonio Andelic). - JSON 型データの出力時に
PrettyJSONEachRowで生成される余分な空白を削除しました。 #86819 (Pavel Kruglov). - Plain 書き換え可能ディスクでディレクトリが削除される際に、
prefix.pathの blob サイズを記録するようにしました。 #86908 (alesapin). - リモートの ClickHouse インスタンス(ClickHouse Cloud を含む)に対するパフォーマンステストをサポートするようになりました。使用例:
tests/performance/scripts/perf.py tests/performance/math.xml --runs 10 --user <username> --password <password> --host <hostname> --port <port> --secure。 #86995(Raufs Dunamalijevs)。 - 大量(16MiB超)のメモリを割り当てることが分かっている一部の処理(ソート、非同期挿入、ファイルログ)で、メモリ制限が正しく守られるようにしました。 #87035 (Azat Khuzhin).
network_compression_methodに設定された値がサポートされている汎用コーデックでない場合に、例外をスローします。 #87097 (Robert Schulze).- システムテーブル
system.query_cacheは、以前は共有エントリ、または同一のユーザーおよびロールに属する非共有エントリのみを返していましたが、現在は すべての クエリ結果キャッシュエントリを返すようになりました。非共有エントリは本来 クエリ結果 を公開しない設計であり、一方でsystem.query_cacheは クエリ文字列 を返すだけなので問題ありません。これにより、このシステムテーブルの挙動はsystem.query_logにより近いものになります。#87104(Robert Schulze)。 parseDateTime関数で短絡評価を有効にしました。 #87184 (Pavel Kruglov)。system.parts_columnsに新しいカラムstatisticsを追加。 #87259 (Han Fei).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- レプリケートされたデータベースおよび内部でレプリケーションされるテーブルに対しては、
ALTERクエリの結果は発行元ノード上でのみ検証されます。これにより、すでにコミット済みのALTERクエリが他のノードで停止してしまう状況が修正されます。 #83849 (János Benjamin Antal)。 BackgroundSchedulePool内のタスクの種類ごとの数を制限しました。1 つの種類のタスクがすべてのスロットを占有し、他のタスクが飢餓状態になる状況を回避します。また、タスク同士が互いに待ち合うことによるデッドロックも防ぎます。これはサーバー設定background_schedule_pool_max_parallel_tasks_per_type_ratioによって制御されます。 #84008 (Alexander Tokmakov)。- データベースのレプリカをリカバリする際に、テーブルが適切にシャットダウンされるようにしました。不適切なシャットダウンにより、データベースレプリカのリカバリ中に一部のテーブルエンジンで LOGICAL_ERROR が発生する可能性がありました。 #84744 (Antonio Andelic).
- データベース名のタイプミス修正用ヒントを生成する際に権限を確認するようにしました。 #85371 (Dmitry Novik)。
-
- Hive カラムに対する LowCardinality のサポート 2. 仮想カラムより前に Hive カラムを埋める(https://github.com/ClickHouse/ClickHouse/pull/81040 に必要)3. Hive で空のフォーマットを指定した場合の LOGICAL_ERROR を修正 #85528 4. Hive のパーティションカラムのみが存在する場合のチェックを修正 5. すべての Hive カラムがスキーマで指定されていることを検証 6. Hive を用いた parallel_replicas_cluster の部分的な修正 7. Hive ユーティリティの extractKeyValuePairs で順序付きコンテナを使用(https://github.com/ClickHouse/ClickHouse/pull/81040 に必要)。#85538(Arthur Passos)。
IN関数の第 1 引数に対する不要な最適化が行われないようにし、配列マッピング使用時にエラーになることがあった問題を修正。#85546(Yakov Olkhovskiy)。- parquet ファイルを書き込む際に、iceberg の source id と parquet 名の対応付けがスキーマに従って調整されていませんでした。この PR では、現在のスキーマではなく、各 iceberg データファイルに対応するスキーマを処理するようにしました。 #85829 (Daniil Ivanik).
- ファイルオープンとは別にファイルサイズを読み取る処理を修正しました。これは、
5.10リリース以前の Linux カーネルに存在したバグへの対応として導入された https://github.com/ClickHouse/ClickHouse/pull/33372 に関連します。 #85837 (Konstantin Bogdanov)。 - ClickHouse Keeper は、カーネルレベルで IPv6 が無効化されているシステム(例: ipv6.disable=1 の RHEL)でも起動に失敗しなくなりました。最初の IPv6 リスナーの起動に失敗した場合は、IPv4 リスナーへのフォールバックを試みるようになりました。 #85901 (jskong1124).
- このPRは#77990をクローズします。globalJoin に TableFunctionRemote の並列レプリカ対応を追加しました。#85929(zoomxi)。
- orcschemareader::initializeifneeded() 内のヌルポインタ参照を修正。この PR は次の issue に対応します: #85292 ### ユーザー向け変更のドキュメント項目。#85951 (yanglongwei).
- FROM 句内の相関サブクエリについて、外側のクエリのカラムを使用している場合にのみ許可するチェックを追加しました。#85469 を修正。#85402 を修正。#85966(Dmitry Novik)。
- 他のカラムの
MATERIALIZED式でサブカラムが使用されているカラムに対するALTER UPDATEを修正しました。以前は、式内でサブカラムを使用しているMATERIALIZEDカラムが正しく更新されていませんでした。 #85985 (Pavel Kruglov). - PK またはパーティション式で使用されているサブカラムを含むカラムを変更できないようにしました。 #86005 (Pavel Kruglov).
- DeltaLake ストレージにおいて、デフォルト以外のカラムマッピングモード使用時のサブカラム読み取りの不具合を修正しました。 #86064 (Kseniia Sumarokova)
- Enum ヒントを含む JSON パスで誤ったデフォルト値が使用されていた問題を修正。 #86065 (Pavel Kruglov)。
- DataLake hive カタログ URL の解析時に入力をサニタイズするよう修正。#86018 をクローズ。#86092(rajat mohan)。
- ファイルシステムキャッシュの動的リサイズ中に発生する論理エラーを修正。 #86122 および https://github.com/ClickHouse/clickhouse-core-incidents/issues/473 をクローズ。 #86130(Kseniia Sumarokova)。
- DatabaseReplicatedSettings において
logs_to_keepにNonZeroUInt64を使用するようにしました。 #86142 (Tuan Pham Anh)。 - テーブル(例:
ReplacingMergeTree)をindex_granularity_bytes = 0という設定で作成していた場合、skip index を使用するFINALクエリで例外が発生していました。この例外はすでに修正されています。 #86147 (Shankar Iyer). - UB を排除し、Iceberg のパーティション式の解析に関する問題を修正します。 #86166 (Daniil Ivanik).
- 単一の INSERT ステートメント内で const ブロックと non-const ブロックが混在している場合にクラッシュが発生する不具合を修正。 #86230 (Azat Khuzhin)。
- SQL からディスクを作成する際、デフォルトで
/etc/metrika.xmlの include を処理するようになりました。 #86232 (alekar). - String から JSON への変換における accurateCastOrNull/accurateCastOrDefault を修正。 #86240 (Pavel Kruglov).
- iceberg エンジンで、'/' を含まないディレクトリを扱えるようにしました。 #86249 (scanhex12).
- replaceRegex で、FixedString 型の haystack と空の needle の組み合わせで発生していたクラッシュを修正しました。 #86270 (Raúl Marín).
- ALTER UPDATE Nullable(JSON) の実行時に発生していたクラッシュを修正。 #86281 (Pavel Kruglov).
- system.tables で欠落していたカラム定義を修正。 #86295 (Raúl Marín)。
- LowCardinality(Nullable(T)) から Dynamic への型キャストを修正。 #86365 (Pavel Kruglov).
- DeltaLake への書き込み時に発生していた論理エラーを修正。#86175 をクローズ。#86367(Kseniia Sumarokova)。
- plain_rewritable disk で Azure Blob Storage から空の blob を読み込む際に発生する
416 The range specified is invalid for the current size of the resource. The range specified is invalid for the current size of the resourceエラーを修正しました。 #86400 (Julia Kartseva). - GROUP BY Nullable(JSON) の不具合を修正。 #86410 (Pavel Kruglov).
- materialized view に関する不具合を修正しました。特定の MV を一度作成して削除した後、同じ名前で再作成すると正しく動作しない場合がありました。 #86413 (Alexander Tokmakov)。
- *cluster 関数から読み取る際、すべてのレプリカが利用不能な場合はエラーとするようになりました。 #86414 (Julian Maicher).
Bufferテーブルが原因で発生していたMergesMutationsMemoryTrackingのメモリリークを修正し、Kafkaなどからストリーミングする際のquery_views_logを修正しました。 #86422 (Azat Khuzhin).- エイリアスストレージで参照しているテーブルを削除した後の
SHOW TABLESの動作を修正。 #86433 (RinChanNOW)。 - send_chunk_header を有効にした状態で、HTTP プロトコル経由で UDF が呼び出された場合に chunk ヘッダーが欠落していた問題を修正。 #86469 (Vladimir Cherkasov)。
- jemalloc のプロファイルフラッシュが有効になっている場合に発生する可能性のあるデッドロックを修正。 #86473 (Azat Khuzhin).
- DeltaLake テーブルエンジンにおけるサブカラム読み取りの不具合を修正。Closes #86204. #86477 (Kseniia Sumarokova).
- DDL タスク処理時の衝突を回避するために、ループバックホスト ID を適切に処理するようにしました。. #86479 (Tuan Pham Anh).
- numeric/decimal 型のカラムを持つ Postgres データベースエンジンのテーブルにおける detach/attach の問題を修正しました。 #86480 (Julian Maicher)。
- getSubcolumnType における未初期化メモリの使用を修正。 #86498 (Raúl Marín)。
- 関数
searchAnyおよびsearchAllは、needle が空の状態で呼び出された場合、現在はtrue(いわゆる「すべてにマッチ」)を返すようになりました。以前はfalseを返していました。(issue #86300)。#86500(Elmi Ahmadov)。 - 最初のバケットに値がない場合に関数
timeSeriesResampleToGridWithStaleness()が正しく動作しない問題を修正しました。 #86507 (Vitaly Baranov)。 merge_tree_min_read_task_sizeを 0 に設定した場合に発生するクラッシュを修正。 #86527 (yanglongwei).- 読み取り時に各データファイルのフォーマットをテーブルの引数ではなく Iceberg メタデータから取得するように変更しました。 #86529 (Daniil Ivanik).
- シャットダウン時のログフラッシュ中に発生する例外を無視して SIGSEGV を回避し、シャットダウンをより安全にしました。 #86546 (Azat Khuzhin).
- サイズが 0 バイトのパートファイルを含むクエリで Backup データベースエンジンが例外をスローしていた問題を修正。 #86563 (Max Justus Spransy).
- send_chunk_header が有効にされていて、HTTP プロトコル経由で UDF が呼び出された場合に chunk ヘッダーが欠落していた問題を修正。 #86606 (Vladimir Cherkasov).
- keeper セッションの有効期限切れにより発生していた、S3Queue の論理エラー「Expected current processor to be equal to 」を修正。 #86615 (Kseniia Sumarokova).
- INSERT とプルーニングにおける Null 値の扱いに関するバグを修正しました。これにより #86407 がクローズされました。 #86630 (scanhex12).
- Iceberg メタデータキャッシュが無効な場合でも、ファイルシステムキャッシュを無効化しないようにしました。 #86635 (Daniil Ivanik).
- Parquet リーダー v3 において発生していた 'Deadlock in Parquet::ReadManager (single-threaded)' エラーを修正。 #86644 (Michael Kolupaev).
- ArrowFlight の
listen_hostでの IPv6 サポートを修正しました。 #86664 (Vitaly Baranov)。 ArrowFlightハンドラーのシャットダウン処理を修正。この PR は #86596 を修正します。#86665(Vitaly Baranov)。describe_compact_output=1を有効にした分散クエリの問題を修正しました。 #86676 (Azat Khuzhin).- ウィンドウ定義の解析およびクエリパラメータの適用処理を修正。 #86720 (Azat Khuzhin).
PARTITION BYを指定してテーブルを作成する際に、パーティションのワイルドカードを使用していないにもかかわらず、以前(25.8 より前)のバージョンでは問題なく動作していたケースで例外Partition strategy wildcard can not be used without a '_partition_id' wildcard.が発生していた問題を修正しました。 https://github.com/ClickHouse/clickhouse-private/issues/37567 をクローズしました。 #86748(Kseniia Sumarokova)。- 並列クエリが単一のロックを取得しようとした際に発生する LogicalError を修正。#86751 (Pervakov Grigorii)。
- RowBinary 入力フォーマットで JSON 共有データに NULL が書き込まれる問題を修正し、ColumnObject に追加の検証をいくつか導入。 #86812 (Pavel Kruglov).
- 空の Tuple と
LIMITの組み合わせ時の順列処理の不具合を修正。 #86828 (Pavel Kruglov). - 永続 processing ノード用に個別の keeper ノードを使用しないよう修正しました。修正内容: https://github.com/ClickHouse/ClickHouse/pull/85995。#86406 をクローズ。#86841(Kseniia Sumarokova)。
- Replicated データベースにおいて、TimeSeries エンジンテーブルが新しいレプリカの作成を妨げていた問題を修正。 #86845 (Nikolay Degterinsky).
- 特定の Keeper ノードが存在しないタスクがある場合の
system.distributed_ddl_queueに対するクエリ処理を修正しました。 #86848 (Antonio Andelic). - 解凍済みブロックの末尾でのシーク処理を修正。 #86906 (Pavel Kruglov)。
- Iceberg Iterator の非同期実行中にスローされる例外を処理しました。 #86932 (Daniil Ivanik).
- 大きな前処理済み XML 設定ファイルの保存処理を修正しました。 #86934 (c-end).
- system.iceberg_metadata_log テーブルで date フィールドの値が正しく設定されない問題を修正。 #86961 (Daniil Ivanik).
WHERE句付きのTTLが無限に再計算される不具合を修正しました。 #86965 (Anton Popov).ROLLUPおよびCUBE修飾子を使用した際にuniqExact関数が誤った結果を返す可能性があった不具合を修正しました。 #87014 (Nikita Taranov).parallel_replicas_for_cluster_functions設定が 1 の場合に、url()テーブル関数でテーブルスキーマを解決できない問題を修正しました。 #87029 (Konstantin Bogdanov)。- PREWHERE の出力を複数のステップに分割した場合でも正しくキャストされるように修正しました。 #87040 (Antonio Andelic).
ON CLUSTER句を伴う論理更新に関する不具合を修正しました。 #87043 (Anton Popov).- いくつかの集約関数状態における String 引数との互換性を修正。 #87049 (Pavel Kruglov)。
- OpenAI から取得したモデル名が正しく渡されていなかった問題を修正しました。 #87100 (Kaushik Iska).
- EmbeddedRocksDB: パスは user_files ディレクトリ配下でなければならない。 #87109 (Raúl Marín).
- 25.1 より前のバージョンで作成された KeeperMap テーブルにおいて、DROP クエリ実行後も ZooKeeper にデータが残り続ける問題を修正。 #87112 (Nikolay Degterinsky).
- Parquet 読み込み時の map および array フィールド ID の読み取りを修正。 #87136 (scanhex12)。
- 遅延マテリアライゼーションにおいて、配列サイズのサブカラムを持つ配列の読み取りを修正。 #87139 (Pavel Kruglov).
- Dynamic 型の引数を取る CASE 関数の不具合を修正。 #87177 (Pavel Kruglov).
- CSV で空文字列から空配列を読み取る処理を修正。#87182 (Pavel Kruglov)。
- 非相関な
EXISTSで誤った結果が返る可能性がある問題を修正しました。これは https://github.com/ClickHouse/ClickHouse/pull/85481 で導入されたexecute_exists_as_scalar_subquery=1により不正な動作をするようになっており、25.8に影響していました。#86415 を修正します。 #87207(Nikolai Kochetov)。 - iceberg_metadata_log が設定されていない状態でユーザーが Iceberg メタデータのデバッグ情報を取得しようとした場合にエラーをスローするようにし、nullptr 参照アクセスを修正しました。 #87250 (Daniil Ivanik).
ビルド/テスト/パッケージングの改善
- abseil-cpp 20250814.0 との互換性の問題を修正。https://github.com/abseil/abseil-cpp/issues/1923。 #85970 (Yuriy Chernyshov).
- スタンドアロン WASM lexer のビルドをフラグで切り替えられるよう変更。 #86505 (Konstantin Bogdanov).
vmull_p64命令をサポートしない古い ARM CPU 上での crc32c のビルドを修正。 #86521 (Pablo Marcos).openldap2.6.10 を使用。 #86623 (Konstantin Bogdanov).- darwin 上で
memalignをインターセプトしようとしないように修正。 #86769 (Konstantin Bogdanov). krb51.22.1-final を使用。 #86836 (Konstantin Bogdanov).list-licenses.shにおける Rust crate 名の展開処理を修正。 #87305 (Konstantin Bogdanov).
ClickHouse 25.8 LTS リリース, 2025-08-28
後方互換性のない変更
- JSON 内で異なる型の値を含む配列に対して、名前のない
Tupleの代わりにArray(Dynamic)を推論するように変更しました。以前の挙動を使用するには、設定input_format_json_infer_array_of_dynamic_from_array_of_different_typesを無効化してください。 #80859 (Pavel Kruglov). - 一貫性とシンプルさのために、S3 レイテンシメトリクスをヒストグラムに移行しました。 #82305 (Miсhael Stetsyuk).
- ドットを含む識別子が複合識別子としてパースされるのを防ぐため、デフォルト式ではそのような識別子をバッククォートで囲むことを必須にしました。 #83162 (Pervakov Grigorii).
- 遅延マテリアライゼーションは、アナライザ有効時(デフォルト)にのみ有効になるようにしました。これは、アナライザなしの場合の保守を避けるためであり、我々の経験では(例えば条件内で
indexHint()を使用する場合など)いくつか問題があるためです。 #83791 (Igor Nikonov). - Parquet 出力フォーマットにおいて、
Enum型の値をデフォルトで、論理型ENUMを持つBYTE_ARRAYとして書き出すようにしました。 #84169 (Pavel Kruglov). - MergeTree の設定
write_marks_for_substreams_in_compact_partsをデフォルトで有効化しました。これにより、新しく作成された Compact パーツからサブカラムを読み取る際のパフォーマンスが大幅に向上します。バージョン 25.5 未満のサーバーは、新しい Compact パーツを読み取ることができなくなります。 #84171 (Pavel Kruglov). - 以前の
concurrent_threads_schedulerのデフォルト値はround_robinでしたが、単一スレッドクエリ(例: INSERT)が多数存在する状況では不公平であることが判明しました。この変更により、より安全な代替であるfair_round_robinスケジューラがデフォルトになります。 #84747 (Sergei Trifonov). - ClickHouse は PostgreSQL 形式の heredoc 構文(
$tag$ string contents... $tag$、いわゆる dollar-quoted 文字列リテラル)をサポートしています。以前のバージョンではタグに対する制約が緩く、句読点や空白を含む任意の文字を使用できました。これは、ドル文字で始まる識別子との間でパースのあいまいさを引き起こします。一方 PostgreSQL では、タグには単語文字のみが許可されています。この問題を解決するため、heredoc のタグには単語文字のみを含むように制限しました。 #84731 をクローズします。 #84846 (Alexey Milovidov). azureBlobStorage、deltaLakeAzure、icebergAzure関数は、AZURE権限を正しく検証するように更新されました。すべてのクラスタ版関数(-Cluster関数)は、対応する非クラスタ版に対して権限を検証するようになりました。加えて、icebergLocalおよびdeltaLakeLocal関数はFILE権限チェックを強制するようになりました。 #84938 (Nikita Mikhaylov).- テーブルエンジンレベルの設定である
allow_dynamic_metadata_for_data_lakesをデフォルトで有効化しました。 #85044 (Daniil Ivanik). - デフォルトで、JSON フォーマットにおいて 64 ビット整数を文字列としてクォートしないようにしました。 #74079 (Pavel Kruglov)
新機能
- PromQL 方言の基本的なサポートが追加されました。これを使用するには、clickhouse-client で
dialect='promql'を設定し、promql_table_name='X'という設定で TimeSeries テーブルを指定し、rate(ClickHouseProfileEvents_ReadCompressedBytes[1m])[5m:1m]のようなクエリを実行します。さらに、PromQL クエリを SQL でラップしてSELECT * FROM prometheusQuery('up', ...);のように実行することもできます。現時点でサポートされているのはrate、delta、increaseの各関数のみです。単項/二項演算子には未対応です。HTTP API も未対応です。#75036(Vitaly Baranov)。 - AI による SQL 生成は、利用可能な場合には環境変数
ANTHROPIC_API_KEYおよびOPENAI_API_KEYから自動的にキーを取得して推論できるようになりました。これにより、この機能を設定不要(ゼロコンフィグ)で利用できるオプションが提供されます。 #83787 (Kaushik Iska). - ArrowFlight RPC プロトコルのサポートを実装しました。以下を追加しました: - 新しいテーブル関数
arrowflight。 #74184 (zakr600). - すべてのテーブルで
_table仮想カラムがサポートされるようになりました(Mergeエンジンのテーブルだけではありません)。これは特に UNION ALL を使用するクエリで有用です。 #63665 (Xiaozhe Yu)。 - 外部集約やソートに任意のストレージポリシー(S3 のようなオブジェクトストレージなど)を使用できるようにしました。 #84734 (Azat Khuzhin).
- 明示的に指定された IAM ロールを用いた AWS S3 認証を実装しました。GCS 向けの OAuth を実装しました。これらの機能は最近まで ClickHouse Cloud でのみ利用可能でしたが、今回オープンソース化されました。オブジェクトストレージ向けの接続パラメータのシリアル化など、いくつかのインターフェースを統一しました。 #84011 (Alexey Milovidov).
- Iceberg TableEngine 向けの position delete をサポートしました。 #83094 (Daniil Ivanik).
- Iceberg の Equality Delete をサポート。 #85843 (Han Fei).
- CREATE ステートメントに対する Iceberg 書き込みを追加。#83927 をクローズ。#83983(Konstantin Vedernikov)。
- 書き込み用 Glue カタログのサポートを追加しました。 #84136 (Konstantin Vedernikov).
- 書き込み用の Iceberg REST カタログを追加。 #84684 (Konstantin Vedernikov)。
- すべての Iceberg の position delete ファイルをデータファイルにマージします。これにより、Iceberg ストレージ内の Parquet ファイルの数とサイズを削減できます。構文:
OPTIMIZE TABLE table_name。 #85250 (Konstantin Vedernikov)。 - Iceberg テーブルに対する
DROP TABLEをサポートしました(REST/Glue カタログからの削除とテーブルに関するメタデータの削除)。 #85395 (Konstantin Vedernikov)。 - merge-on-read フォーマットの Iceberg テーブルに対する
ALTER DELETEmutation をサポート。 #85549 (Konstantin Vedernikov). - DeltaLake への書き込みをサポートしました。#79603 をクローズしました。#85564 (Kseniia Sumarokova)。
- テーブルエンジン
DeltaLakeで特定のスナップショットバージョンを読み取れるようにするための設定delta_lake_snapshot_versionを追加しました。 #85295 (Kseniia Sumarokova). - min-max プルーニングのために、メタデータ(マニフェストエントリ)に、より詳細な Iceberg 統計情報(カラムサイズ、下限値および上限値)を書き込むようにしました。 #85746 (Konstantin Vedernikov).
- Iceberg で単純な型のカラムの追加・削除・変更をサポート。 #85769 (Konstantin Vedernikov).
- Iceberg: version-hint ファイルへの書き込みをサポートしました。これにより #85097 がクローズされます。 #85130 (Konstantin Vedernikov)。
- 一時ユーザーによって作成されたビューは、実際のユーザーのコピーを保存するようになり、一時ユーザーが削除されても無効化されなくなりました。 #84763 (pufit).
- ベクトル類似度索引がバイナリ量子化を新たにサポートしました。バイナリ量子化によりメモリ消費量が大幅に削減され、距離計算が高速化されることでベクトル索引の構築プロセスも高速になります。また、既存の設定
vector_search_postfilter_multiplierは廃止され、より汎用的な設定vector_search_index_fetch_multiplierに置き換えられました。 #85024 (Shankar Iyer). s3またはs3Clusterテーブルエンジン/関数で key-value 形式の引数を指定できるようになりました。例えば、s3('url', CSV, structure = 'a Int32', compression_method = 'gzip')のように指定できます。 #85134 (Kseniia Sumarokova)。- Kafka のようなエンジンから受信したエラーメッセージを保持するための新しいシステムテーブル(「dead letter queue」)。 #68873 (Ilya Golshtein).
- Replicated データベース向けに新しい SYSTEM RESTORE DATABASE REPLICA コマンドを追加しました。ReplicatedMergeTree における既存の restore 機能と同様に動作します。 #73100 (Konstantin Morozov).
- PostgreSQL プロトコルで
COPYコマンドがサポートされるようになりました。 #74344 (Konstantin Vedernikov)。 - MySQL プロトコルに対応した C# クライアントを追加しました。これにより #83992 がクローズされました。 #84397 (Konstantin Vedernikov).
- Hive パーティションスタイルでの読み取りおよび書き込みをサポートしました。 #76802 (Arthur Passos)。
zookeeper_connection_logシステムテーブルを追加し、ZooKeeper 接続に関する履歴情報を保存するようにしました。 #79494 (János Benjamin Antal)。- サーバー設定
cpu_slot_preemptionは、ワークロードに対してプリエンプティブな CPU スケジューリングを有効にし、ワークロード間で CPU 時間を max-min 公平に割り当てることを保証します。CPU スロットリング用の新しいワークロード設定max_cpus、max_cpu_share、max_burst_cpu_secondsが追加されました。詳細: https://clickhouse.com/docs/operations/workload-scheduling#cpu_scheduling。#80879(Sergei Trifonov)。 - 設定されたクエリ数または時間のしきい値に達した後に TCP 接続を切断します。これにより、ロードバランサの背後にあるクラスタノード間で、より均一に接続が分散されるようになります。#68000 を解決。#81472(Kenny Sun)。
- Parallel replicas を使用するクエリで PROJECTION を利用できるようになりました。 #82659. #82807 (zoomxi).
- DESCRIBE (SELECT ...) に加えて DESCRIBE SELECT もサポートします。 #82947 (Yarik Briukhovetskyi).
- mysql_port および postgresql_port でセキュアな接続を必須にしました。 #82962 (tiandiwonder).
JSONExtractCaseInsensitive(および他のJSONExtractのバリアント)を使用して、大文字小文字を区別しない JSON キー検索を行えるようになりました。 #83770 (Alistair Evans).system.completionsテーブルを導入し、#81889 をクローズ。#83833 (|2ustam)。- 新しい関数
nowInBlock64を追加しました。使用例:SELECT nowInBlock64(6)は2025-07-29 17:09:37.775725を返します。 #84178 (Halersson Paris)。 - AzureBlobStorage に extra_credentials を追加し、client_id および tenant_id を用いて認証できるようになりました。 #84235 (Pablo Marcos).
- DateTime 値を UUIDv7 に変換する関数
dateTimeToUUIDv7を追加しました。使用例:SELECT dateTimeToUUIDv7(toDateTime('2025-08-15 18:57:56'))は0198af18-8320-7a7d-abd3-358db23b9d5cを返します。 #84319 (samradovich)。 timeSeriesDerivToGridおよびtimeSeriesPredictLinearToGrid集約関数で、指定された開始タイムスタンプ・終了タイムスタンプ・ステップで定義される時間グリッドにデータを再サンプリングし、それぞれ PromQL のderivおよびpredict_linearと同様の計算を行います。 #84328 (Stephen Chi).- 2 つの新しい TimeSeries 関数を追加しました: -
timeSeriesRange(start_timestamp, end_timestamp, step)、-timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)。#85435(Vitaly Baranov)。 - 新しい構文
GRANT READ ON S3('s3://foo/.*') TO userが追加されました。 #84503 (pufit). Hashを新しい出力フォーマットとして追加しました。結果のすべてのカラムおよび行に対して単一のハッシュ値を計算します。たとえば、データ転送がボトルネックとなるユースケースで、結果の「フィンガープリント」を計算するのに有用です。例:SELECT arrayJoin(['abc', 'def']), 42 FORMAT Hashはe5f9e676db098fdb9530d2059d8c23efを返します。 #84607 (Robert Schulze)。- Keeper の Multi クエリで任意のウォッチを設定できる機能を追加しました。 #84964 (Mikhail Artemenko).
clickhouse-benchmarkツールに、並列クエリ数を徐々に増加させるモードを有効にできる--max-concurrencyオプションを追加しました。 #85623 (Sergei Trifonov)。- 部分集約済みメトリクスのサポートを追加。 #85328 (Mikhail Artemenko).
実験的機能
- 相関サブクエリのサポートがデフォルトで有効になり、実験的機能ではなくなりました。 #85107 (Dmitry Novik).
- Unity、Glue、REST、および Hive Metastore のデータレイクカタログが実験的機能からベータ版に昇格しました。 #85848 (Melvyn Peignon).
- 論理更新と削除が実験的機能からベータ版に昇格しました。
- ベクター類似度索引を用いた近似ベクター検索が GA になりました。 #85888 (Robert Schulze).
- Ytsaurus テーブルエンジンおよびテーブル関数。 #77606 (MikhailBurdukov).
- これまでは、テキスト索引データは複数のセグメントに分割されていました(デフォルトの各セグメントサイズは 256 MiB)。これはテキスト索引構築時のメモリ消費を抑える場合がありますが、その一方でディスク上の必要容量を増大させ、クエリの応答時間を延ばしていました。 #84590 (Elmi Ahmadov).
パフォーマンスの向上
- 新しい Parquet リーダーの実装。従来より高速で、ページレベルのフィルタープッシュダウンと PREWHERE をサポートします。現在は実験的機能です。
input_format_parquet_use_native_reader_v3設定を有効にして使用します。#82789 (Michael Kolupaev)。 - Azure Blob Storage 用の Azure ライブラリにおける公式 HTTP トランスポートを、独自実装の HTTP クライアントに置き換えました。このクライアント向けに、S3 の設定を反映した複数の設定項目を導入しました。Azure と S3 の両方に対して、かなり短い接続タイムアウトを導入しました。Azure プロファイルのイベントおよびメトリクスの可視性を改善しました。新しいクライアントはデフォルトで有効になっており、Azure Blob Storage 上でのコールドクエリのレイテンシが大幅に改善されます。以前の
Curlクライアントは、azure_sdk_use_native_client=falseを設定することで元に戻すことができます。 #83294 (alesapin)。以前の公式 Azure クライアント実装は、レイテンシのスパイクが 5 秒から数分に及ぶひどい状態だったため、本番環境には不適切でした。その問題のある実装はすでに廃止しており、この点について非常に誇りに思っています。 - 索引をファイルサイズの昇順で処理します。最終的な索引の処理順序では、まず minmax 索引とベクター索引(それぞれ単純さと選択性の高さによる)を優先し、その後にその他の小さな索引を処理します。minmax / ベクター索引の中でも、より小さい索引が優先されます。 #84094 (Maruth Goyal).
- MergeTree の設定
write_marks_for_substreams_in_compact_partsをデフォルトで有効にしました。これにより、新しく作成された Compact パーツからサブカラムを読み取る際のパフォーマンスが大幅に向上します。バージョンが 25.5 未満のサーバーは、新しい Compact パーツを読み取ることができません。 #84171 (Pavel Kruglov)。 azureBlobStorageテーブルエンジン: スロットル制限を回避するため、可能な場合にはマネージド ID の認証トークンをキャッシュして再利用するようにしました。 #79860 (Nick Blakely).- 結合の右側テーブルが結合キーのカラムによって関数的に決定される(すべての行で結合キーの値が一意である)場合、
ALLのLEFT/INNERJOIN は自動的にRightAnyに変換されます。 #84010 (Nikita Taranov)。 - サイズの大きなカラムを含む JOIN のメモリ消費を制限するために、
max_joined_block_size_rowsに加えてmax_joined_block_size_bytesを追加しました。 #83869 (Nikolai Kochetov). - 新しいロジック(
enable_producing_buckets_out_of_order_in_aggregation設定で制御され、デフォルトで有効)が追加され、メモリ効率の高い集約処理中に一部のバケットを順不同で出力できるようになりました。一部の集約バケットのマージに他よりも著しく時間がかかる場合、イニシエータがその間にバケット ID が高いバケットを先にマージできるようにすることで、パフォーマンスが向上します。欠点としてはメモリ使用量が増加する可能性がありますが、それほど大きくはないはずです。#80179(Nikita Taranov)。 optimize_rewrite_regexp_functions設定(デフォルトで有効)を導入しました。これにより、特定の正規表現パターンが検出された場合に、オプティマイザーがreplaceRegexpAll、replaceRegexpOne、およびextractの一部の呼び出しを、より単純で効率的な形式に書き換えられるようになります。(issue #81981)。#81992(Amos Bird)。- ハッシュ JOIN のメインループ外で
max_joined_block_rowsを処理するようにしました。ALL JOIN でのパフォーマンスがわずかに向上します。 #83216 (Nikolai Kochetov). - より細かい粒度の min-max 索引を優先的に処理するようにしました。#75381 をクローズしました。#83798 (Maruth Goyal).
DISTINCTウィンドウ集約が線形時間で実行されるようにし、sumDistinctのバグを修正しました。#79792 をクローズしました。#52253 をクローズしました。#79859(Nihal Z. Miaji)。- ベクトル類似度索引を使用するベクトル検索クエリは、ストレージ読み取りと CPU 使用量の削減により、完了までのレイテンシが低くなりました。 #83803 (Shankar Iyer).
- 並列レプリカ間でのワークロード分散時のキャッシュ局所性を改善するための Rendezvous ハッシュ。 #82511 (Anton Ivashkin).
- If コンビネータ用に addManyDefaults を実装し、これにより If コンビネータを用いる集約関数がより高速に動作するようになりました。 #83870 (Raúl Marín).
- 複数の文字列または数値カラムで GROUP BY する場合に、シリアライズキーの計算を列指向で行うようにしました。 #83884 (李扬).
- 並列レプリカ読み出しに対する索引解析の結果が空の範囲となる場合には、フルスキャンを行わないようにしました。 #84971 (Eduard Karacharov).
- パフォーマンステストの安定性向上を狙い、-falign-functions=64 を試しました。 #83920 (Azat Khuzhin).
- ブルームフィルター索引が、
columnがArray型ではない場合のhas([c1, c2, ...], column)のような条件にも使用されるようになりました。これにより、そのようなクエリの性能が向上し、IN演算子を用いる場合と同程度の効率で実行できるようになります。 #83945 (Doron David)。 - CompressedReadBufferBase::readCompressedData における不要な memcpy 関数呼び出しを削減しました。 #83986 (Raúl Marín)。
- 一時データを削除して
largestTriangleThreeBucketsを最適化しました。 #84479 (Alexey Milovidov). - コードを簡素化して文字列デシリアライズを最適化しました。#38564 をクローズします。 #84561(Alexey Milovidov)。
- 並列レプリカ用の最小タスクサイズの計算を修正しました。 #84752 (Nikita Taranov).
Joinモードにおけるパッチパーツ適用のパフォーマンスを改善しました。 #85040 (Anton Popov).- ゼロバイトを削除しました。#85062 をクローズします。いくつかの小さなバグを修正しました。関数
structureToProtobufSchema、structureToCapnProtoSchemaはゼロ終端バイトを正しく配置せず、代わりに改行を使用していました。この問題により出力から改行が欠落し、ゼロバイトに依存する他の関数(logTrace、demangle、extractURLParameter、toStringCutToZero、encrypt/decryptなど)を使用した際にバッファオーバーフローを引き起こす可能性がありました。regexp_treeDictionary レイアウトは、ゼロバイトを含む文字列の処理をサポートしていませんでした。formatRowNoNewline関数は、Valuesフォーマット、または行末に改行を持たない他の任意のフォーマットで呼び出された場合、出力の最後の文字を誤って切り捨てていました。stem関数には例外安全性の不具合があり、非常にまれなシナリオでメモリリークにつながる可能性がありました。initcap関数はFixedString引数に対して誤った動作をしていました。すなわち、ブロック内の前の文字列が単語文字で終わっている場合、文字列の先頭にある単語の開始位置を認識できていませんでした。ApacheORCフォーマットに存在したセキュリティ脆弱性を修正しました。これにより、初期化されていないメモリが読み出される可能性がありました。関数replaceRegexpAllと、そのエイリアスであるREGEXP_REPLACEの動作を変更しました。これらの関数は、^a*|a*$や^|.*のように、直前のマッチが文字列全体を処理している場合であっても、文字列末尾で空マッチを行えるようになりました。これは JavaScript、Perl、Python、PHP、Ruby のセマンティクスに準拠しますが、PostgreSQL のセマンティクスとは異なります。多くの関数の実装を単純化し、最適化しました。いくつかの関数について、誤っていたドキュメントを修正しました。String カラムおよび String カラムを含む複合型に対するbyteSizeの出力が変更されたことに留意してください(空文字列 1 個あたり 9 バイトから 8 バイトへと変更されました)が、これは正常な挙動です。#85063(Alexey Milovidov)。 - 単一の行を返すためだけに定数をマテリアライズする場合、そのマテリアライズを最適化しました。 #85071 (Alexey Milovidov).
- delta-kernel-rs バックエンドによるファイルの並列処理を改善。 #85642 (Azat Khuzhin).
- 新しい設定 enable_add_distinct_to_in_subqueries が導入されました。有効にすると、ClickHouse は分散クエリにおける IN 句内のサブクエリに DISTINCT を自動的に追加します。これにより、分片間で転送される一時テーブルのサイズを大幅に削減し、ネットワーク効率を向上させることができます。注意:これはトレードオフであり、ネットワーク転送量は削減されますが、各ノードで追加のマージ(重複排除)処理が必要になります。ネットワーク転送がボトルネックとなっており、マージ処理のコストが許容できる場合にこの設定を有効にしてください。 #81908 (fhw12345).
- 実行可能なユーザー定義関数におけるクエリのメモリトラッキングのオーバーヘッドを削減。 #83929 (Eduard Karacharov).
- ストレージ
DeltaLakeにおいて、内部のdelta-kernel-rsフィルタリング(統計情報およびパーティションプルーニング)を実装。 #84006 (Kseniia Sumarokova). - オンザフライで更新されるカラム、またはより細かい粒度でパッチパーツによって更新されるカラムに依存するスキップインデックスの無効化を、よりきめ細かく制御するようにしました。現在は、スキップインデックスはオンザフライで行われるミューテーションやパッチパーツの影響を受けたパーツでのみ使用されません。以前は、これらのインデックスはすべてのパーツに対して無効化されていました。#84241(Anton Popov)。
- 暗号化された named collection 用の
encrypted_bufferに必要最小限のメモリだけを割り当てるようにしました。 #84432 (Pablo Marcos). - 第一引数が定数配列(集合)、第二引数が索引付きカラム(部分集合)の場合にブルームフィルター索引(通常、ngram、token)を利用できるようサポートが改善され、より効率的にクエリを実行できるようになりました。 #84700 (Doron David)。
- Keeper におけるストレージロックの競合を軽減。 #84732 (Antonio Andelic).
WHEREに対するread_in_order_use_virtual_rowの不足していたサポートを追加しました。これにより、PREWHEREに完全にはプッシュダウンされなかったフィルタを含むクエリで、より多くのパーツを読み飛ばすことが可能になります。 #84835 (Nikolai Kochetov)。- 各データファイルごとにオブジェクトを明示的に保持することなく、Iceberg テーブル上のオブジェクトを非同期にイテレーションできるようにしました。 #85369 (Daniil Ivanik).
- 非相関な
EXISTSをスカラサブクエリとして実行するようにしました。これにより、スカラサブクエリキャッシュを利用したり、結果を定数畳み込みできるようになり、索引に対して有用です。互換性のため、新しい設定項目execute_exists_as_scalar_subquery=1を追加しました。 #85481 (Nikolai Kochetov).
改良
database_replicated設定を追加し、DatabaseReplicatedSettings のデフォルト値を定義できるようにしました。Replicated データベースの CREATE クエリ内にその設定が指定されていない場合、この設定の値が使用されます。 #85127 (Tuan Pham Anh).- Web UI (play) のテーブル列をリサイズ可能にしました。 #84012 (Doron David).
iceberg_metadata_compression_method設定により、圧縮された.metadata.jsonファイルをサポートしました。すべての ClickHouse の圧縮方式をサポートします。これにより #84895 がクローズされました。 #85196 (Konstantin Vedernikov)。EXPLAIN indexes = 1の出力に、読み取る範囲の数を表示するようになりました。 #79938 (Christoph Wurm).- ORC 圧縮ブロックサイズを設定するための設定を導入し、Spark や Hive と整合させるためにデフォルト値を 64KB から 256KB に更新しました。 #80602 (李扬).
- Wide パーツに
columns_substreams.txtファイルを追加し、そのパーツ内に保存されているすべてのサブストリームを記録・追跡できるようにしました。これにより、JSON や Dynamic 型におけるダイナミックストリームを把握するために、これらのカラムを一部読み出してダイナミックストリームの一覧を取得する必要がなくなります(たとえばカラムサイズを計算する場合など)。また、すべてのダイナミックストリームがsystem.parts_columnsに反映されるようになりました。 #81091 (Pavel Kruglov). - 既定では機密データを非表示にするため、
clickhouse formatに CLI フラグ--show_secretsを追加しました。 #81524 (Nikolai Ryzhov). - S3 の読み取りおよび書き込みリクエストは、S3 リクエスト全体ではなく HTTP ソケットレベルで帯域制限されるようになり、
max_remote_read_network_bandwidth_for_serverおよびmax_remote_write_network_bandwidth_for_serverによる帯域制限との問題を回避します。 #81837 (Sergei Trifonov)。 - 同一カラムに対し、ウィンドウ関数の異なるウィンドウごとに異なる照合順序を使用できるようにしました。 #82877 (Yakov Olkhovskiy).
- マージセレクタをシミュレート、可視化、比較できるツールを追加。 #71496 (Sergei Trifonov).
address_expression引数でクラスターが指定されている場合に、並列レプリカを用いたremote*テーブル関数をサポートしました。また、#73295 も修正しました。 #82904 (Igor Nikonov)。- バックアップファイルを書き込む際のすべてのログメッセージを TRACE レベルに設定しました。 #82907 (Hans Krutzer).
- 特殊な名前やコーデックを持つユーザー定義関数が、SQL フォーマッタによって一貫性のないフォーマットになる場合がありました。これにより #83092 がクローズされます。#83644(Alexey Milovidov)。
- JSON 型で Time 型および Time64 型を使用できるようになりました。 #83784 (Yarik Briukhovetskyi)。
- 並列レプリカを用いた結合では、
join logical stepが使用されるようになりました。並列レプリカを使用する結合クエリで問題が発生した場合は、SET query_plan_use_new_logical_join_step=0を設定してから Issue を報告してください。 #83801 (Vladimir Cherkasov). - 複数ノードでの
cluster_function_process_archive_on_multiple_nodesの互換性の問題を修正。 #83968 (Kseniia Sumarokova). S3Queueテーブルレベルでマテリアライズドビュー(MV)の挿入設定を変更できるようにしました。新たにS3Queueレベルの設定min_insert_block_size_rows_for_materialized_viewsとmin_insert_block_size_bytes_for_materialized_viewsを追加しました。デフォルトではプロファイルレベルの設定が使用され、S3Queueレベルの設定がそれらを上書きします。 #83971 (Kseniia Sumarokova)。- ミューテーションで影響を受けた行数の上限を示すプロファイルイベント
MutationAffectedRowsUpperBoundを追加しました。例えば、ALTER UPDATEやALTER DELETEクエリにおいて条件を満たす行の総数などです。 #83978 (Anton Popov). - cgroup の情報(該当する場合、つまり
memory_worker_use_cgroupが有効であり、cgroup が利用可能な場合)を使用して、メモリトラッカー(memory_worker_correct_memory_tracker)を調整するようにしました。 #83981 (Azat Khuzhin)。 - MongoDB: 文字列から数値型への暗黙的な変換。以前は、ClickHouse テーブルの数値カラムに対して MongoDB ソースから文字列値が受信された場合、例外がスローされていました。現在では、エンジンが文字列から数値を自動的にパースしようとします。#81167 をクローズします。 #84069(Kirill Nikiforov)。
Nullableな数値に対するPrettyフォーマットで、桁区切りをハイライト表示するようにしました。 #84070 (Alexey Milovidov).- Dashboard: ツールチップが上端でコンテナを越えて表示されなくなりました。 #84072 (Alexey Milovidov).
- ダッシュボード上のドットの見栄えをわずかに向上させました。 #84074 (Alexey Milovidov).
- Dashboard の favicon をわずかに改善しました。 #84076 (Alexey Milovidov).
- Web UI: ブラウザにパスワードを保存させることができるようにしました。また、URL の値も記憶するようにしました。 #84087 (Alexey Milovidov).
apply_to_children設定を使用して特定の Keeper ノードに追加の ACL を適用できるようにしました。 #84137 (Antonio Andelic).- MergeTree における Variant の "compact" 判別子シリアライゼーションの利用を修正しました。以前は、本来使用できる一部のケースで使用されていませんでした。 #84141 (Pavel Kruglov).
- サーバー設定
logs_to_keepをレプリケートデータベースの設定に追加しました。これにより、レプリケートデータベースに対するデフォルトのlogs_to_keepパラメータを変更できます。値を小さくすると ZNode の数(特に多くのデータベースが存在する場合)が減少し、値を大きくすると欠落しているレプリカが、より長い期間経過した後でも追いつけるようになります。 #84183 (Alexey Khatskevich)。 - JSON 型の解析時に JSON キー内のドットをエスケープするための
json_type_escape_dots_in_keysという設定を追加しました。この設定はデフォルトでは無効です。 #84207 (Pavel Kruglov)。 - クローズされた接続から読み取らないようにするため、EOF を確認する前に接続がキャンセルされているかどうかをチェックするようにしました。#83893 を修正。#84227(Raufs Dunamalijevs)。
- Web UI におけるテキスト選択時の色合いをわずかに調整しました。違いが大きく現れるのは、ダークモードで選択されたテーブルセルの場合のみです。以前のバージョンでは、テキストと選択範囲の背景色とのコントラストが十分ではありませんでした。 #84258 (Alexey Milovidov).
- 内部チェックを簡素化することで、クライアント接続向けのサーバーのシャットダウン処理を改善しました。 #84312 (Raufs Dunamalijevs).
- デバッグ時にテストログレベルでも式ビジターのログが冗長になりすぎる可能性があるため、それらを無効化できるようにする設定
delta_lake_enable_expression_visitor_loggingを追加しました。 #84315 (Kseniia Sumarokova). - cgroup レベルおよびシステム全体レベルのメトリクスが、現在はまとめて報告されます。cgroup レベルのメトリクスは
CGroup<Metric>という名前で、OS レベルのメトリクス(procfs から収集されるもの)はOS<Metric>という名前です。 #84317 (Nikita Taranov). - Web UI のチャート表示を少し改善しました。大きな変更ではありませんが、以前より良くなっています。 #84326 (Alexey Milovidov).
- Replicated データベースの設定
max_retries_before_automatic_recoveryのデフォルト値を 10 に変更し、一部の状況でより迅速に復旧できるようにしました。 #84369 (Alexander Tokmakov)。 - クエリパラメータ付き CREATE USER ステートメントのフォーマットを修正しました(例:
CREATE USER {username:Identifier} IDENTIFIED WITH no_password)。 #84376 (Azat Khuzhin). - バックアップおよびリストア処理時に使用される S3 リトライのバックオフ戦略を構成するため、
backup_restore_s3_retry_initial_backoff_ms、backup_restore_s3_retry_max_backoff_ms、backup_restore_s3_retry_jitter_factorを追加しました。 #84421 (Julia Kartseva). - S3Queue の ordered モードの修正: shutdown が呼び出された場合に、より早く終了するよう修正しました。 #84463 (Kseniia Sumarokova).
- pyiceberg から読み取れるような iceberg への書き込みをサポートしました。 #84466 (Konstantin Vedernikov).
- KeyValue ストレージのプライマリキー(例: EmbeddedRocksDB、KeeperMap)に対して
IN/GLOBAL INフィルタをプッシュダウンする際に、Set の値の型変換を許可するようにしました。 #84515 (Eduard Karacharov)。 - chdig を 25.7.1 に更新。 #84521 (Azat Khuzhin)。
- UDF 実行中に発生する低レベルエラーは、これまではさまざまなエラーコードが返されていましたが、現在はエラーコード
UDF_EXECUTION_FAILEDで失敗するように統一されました。 #84547 (Xu Jia)。 - KeeperClient に
get_aclコマンドを追加。 #84641 (Antonio Andelic)。 - データレイクテーブルエンジンにスナップショットバージョンを追加しました。 #84659 (Pete Hampton).
ConcurrentBoundedQueueのサイズに関するディメンション付きメトリクスを追加しました。キュー種別(そのキューの用途)とキュー ID(そのキューの現在のインスタンスに対してランダムに生成される ID)をラベルとして持ちます。 #84675 (Miсhael Stetsyuk).system.columnsテーブルで、既存のnameカラムのエイリアスとしてcolumnが利用できるようになりました。 #84695 (Yunchi Pang).- ローカルメタデータを持つディスクなどでパーツ探索の対象を制限するための新しい MergeTree 設定
search_orphaned_parts_drives。 #84710 (Ilya Golshtein). - Keeper に 4LW
lgrqを追加し、受信リクエストのログ出力を切り替えられるようにしました。 #84719 (Antonio Andelic). - 外部認証の
forward_headersを大文字小文字を区別せずに一致判定するようにしました。 #84737 (ingodwerust). encrypt_decryptツールが暗号化された ZooKeeper への接続をサポートするようになりました。 #84764 (Roman Vasin)system.errorsテーブルにフォーマット文字列を格納するカラムを追加しました。このカラムは、アラートルールで同じエラータイプごとにグループ化するために必要です。 #84776 (Miсhael Stetsyuk).clickhouse-formatで--hiliteのエイリアスとして--highlightを受け付けるように更新しました。-clickhouse-clientで--highlightのエイリアスとして--hiliteを受け付けるように更新しました。- この変更を反映するようにclickhouse-formatのドキュメントを更新しました。#84806 (Rishabh Bhardwaj)。- 複合型に対するフィールド ID 指定の Iceberg 読み取りを修正。 #84821 (Konstantin Vedernikov).
SlowDownなどのエラーによって発生するリトライストームの際に、単一のリトライ可能なエラーが発生した時点ですべてのスレッドの処理を遅くすることで S3 への負荷を軽減する、新しいbackup_slow_all_threads_after_retryable_s3_errorSETTING を導入しました。 #84854 (Julia Kartseva).- レプリケーテッド DB における append 以外の RMV DDL では、古い一時テーブルを作成してリネームする処理をスキップするようにしました。 #84858 (Tuan Pham Anh)。
keeper_server.coordination_settings.latest_logs_cache_entry_count_thresholdおよびkeeper_server.coordination_settings.commit_logs_cache_entry_count_thresholdを使用して、Keeper ログエントリキャッシュのサイズをエントリ数ベースで制限できるようにしました。 #84877 (Antonio Andelic).- サポート対象外のアーキテクチャでも
simdjsonを使用できるようにしました(従来はCANNOT_ALLOCATE_MEMORYエラーを引き起こしていました)。 #84966 (Azat Khuzhin). - 非同期ロギング: 制限値を調整可能にし、内部状態を確認するための機能を追加。 #85105 (Raúl Marín).
- 削除対象となるすべてのオブジェクトをまとめて収集し、オブジェクトストレージの削除処理を1回の実行で行うようにしました。 #85316 (Mikhail Artemenko).
- Iceberg の現在の positional delete file の実装では、すべてのデータをメモリ上に保持します。positional delete file が大きくなることはよくあるため、これはかなりコストが高くなり得ます。この実装では、Parquet delete file の最後の row-group のみをメモリ上に保持することで、コストを大幅に削減しています。#85329(Konstantin Vedernikov)。
- chdig: 画面に残る表示の不具合を修正し、エディタでクエリを編集した後に発生するクラッシュを修正、
PATH内でeditorを検索するように変更、25.8.1 に更新。#85341(Azat Khuzhin)。 - 不足していた
partition_columns_in_data_fileを Azure の構成に追加。 #85373 (Arthur Passos)。 - 関数
timeSeries*ToGridでステップ 0 を許可しました。これは #75036 の一部です。#85390(Vitaly Baranov)。 system.tablesシステムテーブルにデータレイクのテーブルを追加するかどうかを制御するshow_data_lake_catalogs_in_system_tablesフラグを追加。 #85384 を解決。 #85411 (Smita Kulkarni)。remote_fs_zero_copy_zookeeper_pathにマクロ展開のサポートを追加しました。 #85437 (Mikhail Koviazin).- clickhouse-client の AI の見た目が少し改善されました。 #85447 (Alexey Milovidov).
- 既存のデプロイメントに対して
trace_log.symbolizeをデフォルトで有効化しました。 #85456 (Azat Khuzhin). - 複合識別子を含むより多くのケースに対応しました。特に、
ARRAY JOINと旧アナライザーとの互換性が改善されています。従来の挙動を維持するため、新しい設定項目analyzer_compatibility_allow_compound_identifiers_in_unflatten_nestedを導入しました。 #85492 (Nikolai Kochetov)。 - system.columns のテーブルのカラムサイズを取得する際に UNKNOWN_DATABASE を無視するようにしました。 #85632 (Azat Khuzhin).
- パッチパーツ内の非圧縮データサイズの合計に対する上限(テーブル設定
max_uncompressed_bytes_in_patches)を追加しました。これにより、論理更新の後にSELECTクエリの実行が大幅に低速化することを防ぐとともに、論理更新の不適切な利用を抑止します。 #85641 (Anton Popov). GRANT READ/WRITEのソース種別およびGRANT TABLE ENGINEのテーブルエンジンを識別できるようにするため、system.grantsにparameterカラムを追加しました。 #85643 (MikhailBurdukov)。- パラメータ付きのカラム(例: Decimal(8))の後に続く
CREATE DICTIONARYクエリ内のカラムで、末尾のカンマがあっても正しくパースされるよう修正しました。 #85586 をクローズ。 #85653(Nikolay Degterinsky)。 - 関数
nestedが内部配列をサポートするようになりました。 #85719 (Nikolai Kochetov). - 外部ライブラリによって行われるすべてのアロケーションが、ClickHouse のメモリトラッカーで把握され、正しく計上されるようになりました。これにより、一部のクエリで報告されるメモリ使用量が「増加」したように見えたり、
MEMORY_LIMIT_EXCEEDEDによるエラーが発生したりする可能性があります。 #84082 (Nikita Mikhaylov).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- このPRでは、REST カタログ経由で Iceberg テーブルに対してクエリを実行する際のメタデータ解決処理を修正します。... #80562 (Saurabh Kumar Ojha).
- DDLWorker および DatabaseReplicatedDDLWorker の markReplicasActive を修正しました。 #81395 (Tuan Pham Anh)。
- パースに失敗した際の Dynamic カラムのロールバック処理を修正。#82169 (Pavel Kruglov)。
- 関数
trimがすべて定数の引数で呼び出された場合、出力として定数文字列を生成するようになりました(バグ #78796)。#82900(Robert Schulze)。 optimize_syntax_fuse_functionsが有効な場合に発生する、重複したサブクエリに関する論理エラーを修正し、#75511 をクローズ。#83300(Vladimir Cherkasov)。WHERE ... IN (<subquery>)句を含み、かつクエリ条件キャッシュ(use_query_condition_cacheSETTING)が有効になっているクエリで、誤った結果が返されることがあった問題を修正しました。 #83445 (LB7666).- これまで
gcs関数の利用には特別な権限は不要でしたが、今後は利用時にGRANT READ ON S3権限が付与されているかを確認するようになります。#70567 をクローズします。#83503(pufit)。 - s3Cluster() からレプリケートされた MergeTree テーブルへの INSERT SELECT 実行時に、利用不能なノードをスキップするようになりました。 #83676 (Igor Nikonov).
- 実験的トランザクションで使用される MergeTree において、
plain_rewritable/plainメタデータタイプへの追記書き込みが以前は単純に無視されていた問題を修正しました。 #83695 (Tuan Pham Anh)。 - Avro schema registry の認証情報をマスクし、ユーザーやログからは表示されないようにしました。 #83713 (János Benjamin Antal).
add_minmax_index_for_numeric_columns=1またはadd_minmax_index_for_string_columns=1を指定して MergeTree テーブルを作成した場合に、その後の ALTER 操作で索引がマテリアライズされることで、新しいレプリカ上で Replicated データベースが正しく初期化されなくなる問題を修正しました。 #83751 (Nikolay Degterinsky)。- parquet writer が Decimal 型に対する統計情報 (min/max) を誤って出力していた問題を修正しました。 #83754 (Michael Kolupaev).
LowCardinality(Float32|Float64|BFloat16)型における NaN 値のソート処理を修正。 #83786 (Pervakov Grigorii)。- バックアップからリストアする際に、definer user がバックアップに含まれていない場合があり、その結果バックアップ全体が無効になってしまう可能性がありました。これを修正するために、リストア中の対象テーブル作成時に行っていた権限チェックを延期し、実行時にのみチェックするようにしました。 #83818 (pufit).
- 誤った
INSERT実行後に接続が切断状態のまま残っていたために発生していたクライアントのクラッシュを修正。 #83842 (Azat Khuzhin). - analyzer が有効な場合、
remoteテーブル関数のview(...)引数内で任意のテーブルを参照できるようにしました。これにより #78717 および #79377 の問題を修正しました。#83844(Dmitry Novik)。 - jsoneachrowwithprogress における onprogress の呼び出しが、最終処理と同期して行われるようになりました。 #83879 (Sema Checherinda).
- これにより #81303 がクローズされました。 #83892(Konstantin Vedernikov)。
- const 引数と非 const 引数が混在している colorSRGBToOKLCH/colorOKLCHToSRGB を修正。 #83906 (Azat Khuzhin).
- RowBinary format における NULL 値を含む JSON パスの書き込みに関する不具合を修正。 #83923 (Pavel Kruglov).
- Date から DateTime64 へのキャスト時に、2106-02-07 より大きい値がオーバーフローしていた問題を修正しました。 #83982 (Yarik Briukhovetskyi).
filesystem_prefetches_limitが(MergeTreePrefetchedReadPoolからの場合だけでなく)常に適用されるようになりました。 #83999 (Azat Khuzhin).MATERIALIZE COLUMNクエリによりchecksums.txtに予期しないファイルが書き込まれ、最終的にデータパーツが detached 状態になってしまう稀なバグを修正しました。 #84007 (alesapin).- 不等号条件で JOIN を実行する際、一方のカラムが
LowCardinalityでもう一方が定数である場合に発生していた、Expected single dictionary argument for functionという論理エラーを修正しました。#81779 をクローズしました。 #84019 (Alexey Milovidov)。 - 構文ハイライトを有効にしたインタラクティブモードで clickhouse client を使用するとクラッシュする問題を修正しました。#84025 (Bharat Nallan)。
- 再帰 CTE と組み合わせて
query condition cacheを使用した場合に誤った結果が返る問題を修正しました(issue #81506)。#84026(zhongyuankai)。 - パーツの定期的なリフレッシュ処理で例外を適切に処理するようにしました。 #84083 (Azat Khuzhin).
- 等価比較の被演算子の型が異なる場合や、定数を参照している場合に、フィルタを JOIN 条件へマージする処理を修正しました。これにより #83432 を修正しました。 #84145(Dmitry Novik)。
- テーブルに PROJECTION が存在し、
lightweight_mutation_projection_mode = 'rebuild'が設定されていて、ユーザーがテーブル内の任意のブロックからすべての行を削除する lightweight delete を実行した場合に、まれに発生する ClickHouse のクラッシュを修正しました。 #84158 (alesapin)。 - バックグラウンドで動作するキャンセルチェック用スレッドによって発生していたデッドロックを修正。 #84203 (Antonio Andelic)。
- 不正な
WINDOW定義に対して無限再帰的な解析が行われる問題を修正しました。#83131 を修正します。#84242(Dmitry Novik)。 - Bech32 のエンコーディングおよびデコーディングが誤った結果を生成していたバグを修正しました。このバグは、テストに使用していたアルゴリズムのオンライン実装にも同じ問題が存在していたため、当初は検出されませんでした。 #84257 (George Larionov).
array()関数における空タプルの誤った構築方法を修正しました。これにより #84202 が解決されました。 #84297 (Amos Bird)。- parallel replicas を有効にした状態で、複数の INNER JOIN の後に RIGHT JOIN が続くクエリで発生する
LOGICAL_ERRORを修正しました。このようなクエリでは parallel replicas を使用しないでください。#84299(Vladimir Cherkasov)。 - 以前は、
set索引が、グラニュールがフィルタを通過したかどうかを判定する際にNullableカラムを考慮していませんでした(issue #75485)。#84305(Elmi Ahmadov)。 - ClickHouse は、テーブル型が小文字で指定されている Glue カタログからもテーブルを読み取れるようになりました。 #84316 (alesapin)。
- JOIN またはサブクエリが存在する場合には、テーブル関数を対応する cluster 版に置き換えないでください。 #84335 (Konstantin Bogdanov).
IAccessStorageにおける logger の使用を修正。 #84365 (Konstantin Bogdanov).- テーブル内のすべてのカラムを更新する論理更新で発生していた論理エラーを修正しました。 #84380 (Anton Popov).
- Codec
DoubleDeltaは、数値型のカラムにのみ適用できるようになりました。特に、FixedStringカラムはDoubleDeltaを使用して圧縮できなくなりました。(#80220 の修正)。 #84383 (Jimmy Aguilar Mena)。 MinMax索引の評価時に、NaN 値との比較で正しい範囲条件が使用されていませんでした。 #84386 (Elmi Ahmadov).- 遅延マテリアライゼーションを使用した Variant カラムの読み取りを修正。 #84400 (Pavel Kruglov).
zoutofmemoryをハードウェアエラーとして扱うようにしました。そうしないと論理エラーをスローします。詳しくは https://github.com/clickhouse/clickhouse-core-incidents/issues/877 を参照してください。 #84420 (Han Fei)。no_passwordで作成されたユーザーが、サーバー設定allow_no_passwordを 0 に変更した後にログインを試みた際にサーバーがクラッシュする不具合を修正しました。 #84426 (Shankar Iyer).- Keeper の changelog への順不同の書き込みを修正しました。以前は、changelog への書き込みが進行中の状態で、ロールバックにより出力先のファイルが同時に変更される可能性がありました。これにより、ログの不整合やデータ損失が発生するおそれがありました。 #84434 (Antonio Andelic).
- テーブルからすべての有効期限 (TTL) が削除された場合、MergeTree は TTL に関連する処理を一切行わないようになりました。 #84441 (alesapin).
- LIMIT を伴う並列分散 INSERT SELECT が許可されていましたが、本来は許可されるべきではなく、ターゲットテーブルでデータの重複を引き起こしていました。 #84477 (Igor Nikonov).
- データレイクにおける仮想カラムを用いたファイルのプルーニングを修正。 #84520 (Kseniia Sumarokova).
- rocksdb ストレージを使用する Keeper において、イテレータが破棄されていなかったことによるリークを修正しました。 #84523 (Azat Khuzhin).
- ALTER MODIFY ORDER BY がソートキー内の有効期限 (TTL) カラムを検証していなかった不具合を修正しました。これにより、ALTER 処理時に ORDER BY 句で有効期限 (TTL) カラムが使用されている場合は正しく拒否されるようになり、テーブルの破損が発生する可能性を防ぎます。 #84536 (xiaohuanlin).
- 互換性のため、25.5 より前のバージョンに対する
allow_experimental_delta_kernel_rsの値をfalseに変更しました。 #84587 (Kseniia Sumarokova)。 - マニフェストファイルからスキーマを取得するのをやめ、各スナップショットごとに関連するスキーマを独立して保存するようにしました。各データファイルに対して、そのファイルに対応するスナップショットから関連するスキーマを推論します。以前の動作では、status が existing のエントリを含むマニフェストファイルについて、Iceberg の仕様に違反していました。 #84588 (Daniil Ivanik)。
- Keeper の設定
rotate_log_storage_interval = 0によって ClickHouse がクラッシュする問題を修正しました。(issue #83975). #84637 (George Larionov). - S3Queue のロジックエラー「Table is already registered」を修正。#84433 をクローズ。https://github.com/ClickHouse/ClickHouse/pull/83530 の変更以降で発生していた不具合。#84677(Kseniia Sumarokova)。
- RefreshTask で 'view' から ZooKeeper を取得する際に 'mutex' をロックするように修正しました。 #84699 (Tuan Pham Anh).
- 外部ソート使用時にレイジーカラムを使用すると発生する
CORRUPTED_DATAエラーを修正しました。 #84738 (János Benjamin Antal). - ストレージ
DeltaLakeにおける delta-kernel 使用時のカラムプルーニングの問題を修正しました。#84543 をクローズしました。#84745(Kseniia Sumarokova)。 - DeltaLake ストレージの delta-kernel で認証情報を更新するように修正しました。 #84751 (Kseniia Sumarokova).
- 接続トラブル発生後に不要な内部バックアップが開始される不具合を修正しました。 #84755 (Vitaly Baranov).
- 遅延しているリモートソースに対してクエリを実行した際に、ベクターの範囲外アクセスが発生する可能性があった問題を修正しました。 #84820 (George Larionov).
ngramおよびno_opトークナイザーを使用した際に、空の入力トークンが原因で (実験的な) テキスト索引がクラッシュしなくなりました。 #84849 (Robert Schulze).ReplacingMergeTreeおよびCollapsingMergeTreeエンジンを使用するテーブルに対する論理更新の不具合を修正しました。 #84851 (Anton Popov).- object queue エンジンを使用するテーブルで、すべての設定がテーブルメタデータに正しく保存されるように修正しました。 #84860 (Antonio Andelic).
- Keeper が返すウォッチの合計数を修正。 #84890 (Antonio Andelic).
- 25.7 より前のバージョンのサーバー上で作成された
ReplicatedMergeTreeエンジンを使用するテーブルに対する論理更新の問題を修正しました。 #84933 (Anton Popov)。 ALTER TABLE ... REPLACE PARTITIONクエリを実行した後に、レプリケーションなしのMergeTreeエンジンを使用するテーブルに対する論理更新が正しく動作しない問題を修正しました。 #84941 (Anton Popov).- クエリ内の真偽値リテラルに対するカラム名の生成を、"1"/"0" ではなく "true"/"false" を使用するように修正し、真偽値リテラルと整数リテラルとの間でカラム名が競合しないようにしました。 #84945 (xiaohuanlin).
- バックグラウンドスケジュールプールおよび executor におけるメモリトラッキングのずれを修正。 #84946 (Azat Khuzhin).
- Merge テーブルエンジンにおける、ソート順が不正確になる可能性のある問題を修正しました。 #85025 (Xiaozhe Yu)。
- DiskEncrypted の未実装だった API を実装しました。 #85028 (Azat Khuzhin).
- 分散クエリコンテキストで相関サブクエリが使用されている場合にクラッシュを回避するためのチェックを追加しました。#82205 を修正しました。#85030(Dmitry Novik)。
- Iceberg は、
SELECTクエリ間で関連するスナップショットバージョンをキャッシュしようとせず、常にスナップショットを正しく解決するようになりました。以前の Iceberg スナップショットのキャッシュの試みは、タイムトラベル機能を用いた Iceberg テーブルの利用時に問題を引き起こしていました。 #85038 (Daniil Ivanik)。 AzureIteratorAsyncにおける二重解放の不具合を修正。 #85064 (Nikita Taranov).- JWT で識別される USER を作成しようとしたときのエラーメッセージを改善。 #85072 (Konstantin Bogdanov).
ReplicatedMergeTreeにおけるパッチパーツのクリーンアップ処理を修正しました。以前は、パッチパーツを実体化するマージ済みまたはミューテート済みパーツが別のレプリカからダウンロードされるまで、論理更新の結果が一時的にレプリカ上に反映されない場合がありました。 #85121 (Anton Popov).- 型が異なる場合に mv で発生していた illegal_type_of_argument エラーを修正しました。 #85135 (Sema Checherinda).
- delta-kernel 実装で発生していたセグメンテーションフォルトを修正。 #85160 (Kseniia Sumarokova)。
- メタデータファイルの移動に長時間を要する場合のレプリケーテッドデータベースの復旧処理を修正しました。 #85177 (Tuan Pham Anh)。
additional_table_filters expression設定内でIN (subquery)を含む場合に発生するNot-ready Setの問題を修正しました。 #85210 (Nikolai Kochetov).- SYSTEM DROP REPLICA クエリ中の不要な
getStatus()呼び出しを除去しました。バックグラウンドでテーブルが削除されている場合にShutdown for storage is called例外が投げられるケースを修正しました。 #85220 (Nikolay Degterinsky). DeltaLakeエンジンの delta-kernel 実装におけるレースコンディションを修正しました。 #85221 (Kseniia Sumarokova).DeltaLakeエンジンで delta-kernel を無効化した状態におけるパーティション化データの読み取りを修正しました。これは 25.7 で動作しなくなっていました(https://github.com/ClickHouse/ClickHouse/pull/81136)。#85223(Kseniia Sumarokova)。- CREATE OR REPLACE および RENAME クエリに対し、抜けていたテーブル名の長さチェックを追加しました。 #85326 (Michael Kolupaev).
- DEFINER が削除されている場合に、Replicated データベースの新しいレプリカで RMV を作成できない問題を修正しました。 #85327 (Nikolay Degterinsky).
- 複合型の Iceberg への書き込み処理を修正。 #85330 (Konstantin Vedernikov).
- 複合型に対する下限値および上限値の指定はサポートされていません。 #85332 (Konstantin Vedernikov).
- オブジェクトストレージ関数から分散テーブルまたはリモートテーブル関数経由で読み取る際の論理エラーを修正。修正: #84658、#85173、#52022。#85359(alesapin)。
- 壊れたプロジェクションを含むパーツのバックアップ処理を修正しました。 #85362 (Antonio Andelic).
- 安定するまでのリリースでは、プロジェクションで
_part_offsetカラムを使用できないようにしました。 #85372 (Sema Checherinda). - JSON に対する ALTER UPDATE の実行中に発生するクラッシュおよびデータ破損を修正。 #85383 (Pavel Kruglov).
- 順序を逆方向に読み取る最適化を利用する parallel replicas のクエリで、誤った結果が返される可能性がありました。 #85406 (Igor Nikonov).
- String のデシリアライズ中に MEMORY_LIMIT_EXCEEDED が発生した場合に未定義動作(クラッシュ)が起こる可能性があった問題を修正しました。 #85440 (Azat Khuzhin).
- 誤っていたメトリクス KafkaAssignedPartitions および KafkaConsumersWithAssignment を修正。 #85494 (Ilya Golshtein).
- PREWHERE 句(明示的指定・自動適用のいずれの場合も)が使用されているときに、処理済みバイト数の統計値が過小に報告される問題を修正しました。 #85495 (Michael Kolupaev).
- S3 リクエストレートのスローダウンに関する早期リターン条件を修正しました。再試行可能なエラーにより全スレッドが一時停止されている場合にスローダウン動作を有効にする条件として、
s3_slow_all_threads_after_network_errorとbackup_slow_all_threads_after_retryable_s3_errorの両方が真であることを要求するのではなく、いずれか一方が真であればよいように変更しました。 #85505 (Julia Kartseva)。 - このPRは、REST カタログ経由で Iceberg テーブルに対してクエリを実行する際のメタデータ解決処理の不具合を修正します。... #85531 (Saurabh Kumar Ojha).
log_commentまたはinsert_deduplication_tokenの設定を変更する非同期 INSERT で、まれにクラッシュする不具合を修正しました。 #85540 (Anton Popov).- HTTP 経由で multipart/form-data を使用した場合、date_time_input_format のようなパラメータは無視されていました。 #85570 (Sema Checherinda).
- icebergS3Cluster および icebergAzureCluster テーブル関数におけるシークレットのマスク処理を修正。 #85658 (MikhailBurdukov).
JSONExtractで JSON 数値を Decimal 型に変換する際に発生していた精度の損失を修正しました。これにより、JSON 内の数値はもとの小数表現どおりに保持され、浮動小数点による丸め誤差を回避できるようになりました。 #85665 (ssive7b).DROP COLUMNの後に、同じALTERステートメント内でCOMMENT COLUMN IF EXISTSを使用した際に発生していたLOGICAL_ERRORを修正しました。IF EXISTS句は、同一ステートメント内でカラムが削除されている場合に、コメント操作を正しくスキップするようになりました。#85688 (xiaohuanlin).- Delta Lake 用のキャッシュからの読み取り回数を修正。 #85704 (Kseniia Sumarokova).
- 巨大な文字列を扱う際に発生する CoalescingMergeTree のセグメンテーションフォールトを修正しました。これにより #84582 がクローズされました。#85709(Konstantin Vedernikov)。
- iceberg 書き込み時にメタデータのタイムスタンプを更新するよう修正。 #85711 (Konstantin Vedernikov)。
distributed_depthを *Cluster 関数の指標として使用していたのは誤りであり、データ重複の原因となる可能性があります。代わりにclient_info.collaborate_with_initiatorを使用してください。 #85734 (Konstantin Bogdanov).- Spark は position delete ファイルを読み込めません。 #85762 (Konstantin Vedernikov).
send_logs_source_regexpを修正(#85105 の非同期ロギングのリファクタリング後に発生した問題)。 #85797 (Azat Khuzhin)。- MEMORY_LIMIT_EXCEEDED エラー発生時に update_field を使用する辞書で発生する可能性のあった不整合を修正しました。 #85807 (Azat Khuzhin).
Distributed宛先テーブルに対する並列分散INSERT SELECTで、WITHステートメント由来のグローバル定数をサポートするようになりました。以前は、このクエリでUnknown expression identifierエラーがスローされることがありました。#85811 (Nikolai Kochetov)。deltaLakeAzure、deltaLakeCluster、icebergS3ClusterおよびicebergAzureClusterの資格情報をマスクするようにしました。 #85889 (Julian Maicher)。DatabaseReplicatedを使用してCREATE ... AS (SELECT * FROM s3Cluster(...))を実行した際に発生していた論理エラーを修正しました。 #85904 (Konstantin Bogdanov).url()テーブル関数が送信する HTTP リクエストについて、非標準ポートへアクセスする際に Host ヘッダーにポート番号を正しく含めるよう修正しました。これにより、開発環境で一般的な、カスタムポート上で動作する MinIO などの S3 互換サービスに対して事前署名付き URL を使用する場合に発生していた認証エラーが解消されます。(Fixes #85898). #85921 (Tom Quist).- これにより、Unity Catalog は非 Delta テーブルの場合、異常なデータ型を含むスキーマを無視するようになりました。#85699 を修正。#85950(alesapin)。
- Iceberg のフィールドの null 許容性を修正。 #85977 (Konstantin Vedernikov).
Replicatedデータベースのリカバリ処理におけるバグを修正しました。テーブル名に%記号が含まれている場合、リカバリ中に異なる名前でテーブルが再作成される可能性がありました。 #85987 (Alexander Tokmakov)。- 空の
Memoryテーブルを復元する際にBACKUP_ENTRY_NOT_FOUNDエラーにより復元が失敗する問題を修正。#86012 (Julia Kartseva). - 分散テーブルに対する ALTER 実行時に sharding_key の検査を追加しました。これまでは、不正な ALTER によってテーブル定義が壊れ、サーバーの再起動が必要になることがありました。 #86015 (Nikolay Degterinsky).
- 空の Iceberg 削除ファイルが作成されないようになりました。 #86061 (Konstantin Vedernikov).
- 大きすぎる設定値によって S3Queue テーブルおよびレプリカの再起動が動作しなくなる問題を修正しました。 #86074 (Nikolay Degterinsky).
ビルド/テスト/パッケージングの改善
- デフォルトで、S3 を用いたテストに暗号化ディスクを使用するようにしました。 #59898 (Nikita Mikhaylov).
- インテグレーションテストでストリップされていないデバッグシンボルを取得するために、
clickhouseバイナリを使用するようにしました。 #83779 (Mikhail f. Shiryaev). - 内部の libxml2 を 2.14.4 から 2.14.5 に更新しました。 #84230 (Robert Schulze).
- 内部の curl を 8.14.0 から 8.15.0 に更新しました。 #84231 (Robert Schulze).
- CI におけるキャッシュ用のメモリ使用量を削減し、エビクション動作に対するテストを改善しました。 #84676 (alesapin).
ClickHouse 25.7 リリース(2025-07-24)
後方互換性のない変更
extractKeyValuePairs関数の変更: 新しい引数unexpected_quoting_character_strategyを追加しました。これは、クォートされていないキーまたは値を読み取っているときに、予期せずquoting_characterが見つかった場合の挙動を制御します。値として指定できるのはinvalid、accept、promoteのいずれかです。invalidはキーを破棄し、キー待ち状態に戻ります。acceptはそれをキーの一部として扱います。promoteは直前の文字を破棄し、クォートされたキーとしてのパースを開始します。加えて、クォートされた値をパースした後は、ペア区切り文字が見つかった場合にのみ次のキーをパースします。#80657 (Arthur Passos).countMatches関数でゼロバイト一致をサポートしました。従来の動作を維持したいユーザーは、設定count_matches_stop_at_empty_matchを有効にできます。#81676 (Elmi Ahmadov).- BACKUP の生成時に、専用のサーバー設定 (
max_backup_bandwidth_for_server、max_mutations_bandwidth_for_server、max_merges_bandwidth_for_server) に加えて、ローカル用 (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) のサーバー全体のスロットル機構を使用するようにしました。#81753 (Sergei Trifonov). - 挿入可能なカラムを持たないテーブルの作成を禁止しました。#81835 (Pervakov Grigorii).
- アーカイブ内のファイル単位で cluster 関数の処理を並列化しました。以前のバージョンでは、アーカイブ全体(zip、tar、7z など)が 1 つの作業単位でした。新しい設定
cluster_function_process_archive_on_multiple_nodesを追加し、デフォルトはtrueです。trueに設定すると、cluster 関数でアーカイブを処理する際のパフォーマンスが向上します。以前のバージョンでアーカイブ付きの cluster 関数を使用している場合、25.7+ へのアップグレード時の互換性とエラー回避のためにはfalseに設定する必要があります。#82355 (Kseniia Sumarokova). SYSTEM RESTART REPLICASクエリが、Lazy データベース内のテーブルに対するアクセス権がない場合でもそれらのテーブルを起動させており、しかもそれらのテーブルが同時に drop されている最中に発生していました。注: 現在は、SYSTEM RESTART REPLICASはSHOW TABLESの権限を持つデータベース内のレプリカのみを再起動します。これは自然な挙動です。#83321 (Alexey Milovidov).
新機能
MergeTreeファミリーのテーブルに対する論理更新のサポートを追加しました。論理更新は、新しい構文UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>を用いて実行できます。論理更新を利用した論理削除機能を実装しました。これはlightweight_delete_mode = 'lightweight_update'を設定することで有効化できます。 #82004 (Anton Popov)。- Iceberg のスキーマ進化で複合データ型をサポート。 #73714 (Konstantin Vedernikov).
- Iceberg テーブルへの
INSERTをサポートしました。 #82692 (Konstantin Vedernikov)。 - Iceberg のデータファイルをフィールド ID で読み取れるようにしました。これにより Iceberg との互換性が向上します。メタデータ内のフィールドをリネームしても、基盤となる Parquet ファイル内の別名のフィールドへマッピングできます。これにより #83065 がクローズされました。 #83653(Konstantin Vedernikov)。
- ClickHouse で Iceberg 向けの圧縮
metadata.jsonファイルがサポートされるようになりました。#70874 を修正しました。#81451(alesapin)。 - Glue カタログで
TimestampTZをサポートするようになりました。これにより #81654 がクローズされました。#83132(Konstantin Vedernikov)。 - AI を活用した SQL 生成機能を ClickHouse クライアントに追加しました。クエリの先頭に
??を付けて入力することで、自然言語による記述から SQL クエリを生成できるようになりました。OpenAI および Anthropic のプロバイダーをサポートし、スキーマの自動検出に対応します。 #83314 (Kaushik Iska). - Geo 型を WKB 形式で出力する関数を追加しました。 #82935 (Konstantin Vedernikov).
- ソース用に新しいアクセス種別
READとWRITEを導入し、ソースに関連する従来のすべてのアクセス種別は非推奨になりました。これまでのGRANT S3 ON *.* TO userは、今後はGRANT READ, WRITE ON S3 TO userとなります。これにより、ソースに対するREADとWRITE権限を分離して付与することも可能になります。例:GRANT READ ON * TO user,GRANT WRITE ON S3 TO user。この機能はaccess_control_improvements.enable_read_write_grantsという設定で制御され、デフォルトでは無効になっています。#73659 (pufit). - NumericIndexedVector: ビットスライスおよび Roaring Bitmap 圧縮を基盤とした新しいベクターデータ構造であり、構築・分析・要素単位の算術演算のための 20 以上の関数を備えています。ストレージ使用量を削減し、スパースデータに対する結合、フィルタおよび集約処理を高速化できます。#70582 および T. Xiong と Y. Wang による VLDB 2024 掲載論文 “Large-Scale Metric Computation in Online Controlled Experiment Platform” paper を実装しています。 #74193 (FriendLey)。
- ワークロード設定
max_waiting_queriesがサポートされるようになりました。クエリキューのサイズを制限するために使用できます。上限に達した場合、それ以降のすべてのクエリはSERVER_OVERLOADEDエラーで失敗します。#81250(Oleg Doronin)。 - 金融関数を追加:
financialInternalRateOfReturnExtended(XIRR)、financialInternalRateOfReturn(IRR)、financialNetPresentValueExtended(XNPV)、financialNetPresentValue(NPV)。#81599(Joanna Hulboj)。 - 2 つのポリゴンの交差を判定するための地理空間関数
polygonsIntersectCartesianとpolygonsIntersectSphericalを追加しました。 #81882 (Paul Lamb)。 - MergeTree ファミリーのテーブルで
_part_granule_offset仮想カラムをサポートしました。このカラムは、各データパーツ内で各行が属する granule/mark の 0 始まりのインデックスを示します。これは #79572 に対応するものです。#82341 (Amos Bird)。#82341 (Amos Bird) - sRGB 色空間と OkLCH 色空間の間で色を変換するための SQL 関数
colorSRGBToOkLCHとcolorOkLCHToSRGBを追加しました。 #83679 (Fgrtue)。 CREATE USERクエリでユーザー名にパラメータを指定できるようになりました。 #81387 (Diskein).system.formatsテーブルに、HTTP コンテンツタイプやスキーマ推論の対応状況など、フォーマットに関する拡張情報が含まれるようになりました。 #81505 (Alexey Milovidov)。
実験的機能
- テキスト索引を検索するための汎用ツールとして、
searchAnyおよびsearchAll関数を追加しました。 #80641 (Elmi Ahmadov). - テキスト索引で新しい
splitトークナイザーをサポートしました。 #81752 (Elmi Ahmadov). text索引のデフォルトの索引粒度の値を 64 に変更しました。これにより、社内ベンチマークにおける平均的なテストクエリの期待されるパフォーマンスが向上します。 #82162 (Jimmy Aguilar Mena).- 256 ビットのビットマップは、状態から出るラベルを順序付きで格納しますが、遷移先の状態はハッシュテーブル内に現れる順序でディスクに保存されます。そのため、ディスクから読み込む際に、ラベルが誤った次の状態を指してしまう可能性があります。 #82783 (Elmi Ahmadov).
- テキスト索引における FST ツリーの blob に対して zstd 圧縮を有効化しました。 #83093 (Elmi Ahmadov).
- ベクトル類似度索引をベータ版に昇格しました。ベクトル類似度索引を使用するには、有効化が必要なエイリアス設定
enable_vector_similarity_indexを導入しました。 #83459 (Robert Schulze). - 実験的なゼロコピー・レプリケーションに関連する実験的な
send_metadataロジックを削除しました。これは一度も使用されておらず、このコードをサポートしている人もいませんでした。さらに、これに関連するテストも存在しなかったため、かなり前から壊れていた可能性が高いです。 #82508 (alesapin). StorageKafka2をsystem.kafka_consumersに統合しました。 #82652 (János Benjamin Antal).(a < 1 and a > 0) or b = 3のような複雑な CNF/DNF を、STATISTICS に基づいて推定するようにしました。 #82663 (Han Fei).
パフォーマンスの向上
- 非同期ロギングを導入しました。ログを低速なデバイスに出力する場合でも、クエリが遅延しなくなりました。 #82516 (Raúl Marín)。キュー内に保持されるエントリ数に上限を設けました。 #83214 (Raúl Marín)。
- Parallel distributed INSERT SELECT は、各 shard(分片)上で独立して INSERT SELECT が実行されるモードにおいて、デフォルトで有効になりました。
parallel_distributed_insert_selectSETTING を参照してください。 #83040 (Igor Nikonov). - 集約クエリに、
Nullableではないカラムに対する単一のcount()関数のみが含まれている場合、ハッシュテーブルの探索時に集約ロジックが完全にインライン化されます。これにより、集約状態を割り当てて維持する必要がなくなり、メモリ使用量と CPU オーバーヘッドが大幅に削減されます。これは部分的に #81982 に対処するものです。 #82104 (Amos Bird)。 HashJoinのパフォーマンスを改善しました。典型的なキーが 1 カラムのみの場合には、ハッシュマップに対する余分なループ処理を削除し、さらにnull_mapおよびjoin_maskが常にtrueまたはfalseである場合には、そのチェックを省略するようにしました。 #82308 (Nikita Taranov)。-Ifコンビネータに対する軽微な最適化。 #78454 (李扬).- ベクトル類似度インデックスを使用するベクトル検索クエリは、ストレージの読み取り回数と CPU 使用量が削減されることで、より低レイテンシで完了します。 #79103 (Shankar Iyer).
filterPartsByQueryConditionCacheにおいてもmerge_tree_min_{rows,bytes}_for_seekを考慮するようにし、索引によるフィルタリングを行う他のメソッドと整合するようにしました。#80312 (李扬)。TOTALSステップ以降のパイプライン処理をマルチスレッド化しました。 #80331 (UnamedRus).RedisおよびKeeperMapストレージのキーによるフィルタリングを修正。 #81833 (Pervakov Grigorii).- 新しい設定
min_joined_block_size_rows(min_joined_block_size_bytesと同様。デフォルトは 65409)を追加し、JOIN の入力および出力ブロックに対する最小ブロックサイズ(行数)を制御できるようにしました(JOIN アルゴリズムが対応している場合)。小さいブロックはまとめて結合されます。 #81886 (Nikita Taranov)。 ATTACH PARTITIONで全キャッシュがクリアされることはなくなりました。 #82377 (Alexey Milovidov).- 同値類を使用して冗長な JOIN 操作を削除することで、相関サブクエリ向けに生成されるプランを最適化します。すべての相関カラムに対して同値な式が存在する場合、
query_plan_correlated_subqueries_use_substitution設定が有効になっていれば、CROSS JOINは生成されません。#82435(Dmitry Novik)。 EXISTS関数の引数として使用されている場合、相関サブクエリでは必要なカラムのみを読み取るようにしました。 #82443 (Dmitry Novik).- クエリ解析中のクエリツリーの比較をわずかに高速化しました。 #82617 (Nikolai Kochetov).
ProfileEventsのCounterにアラインメントを追加し、フォールスシェアリングを減らしました。 #82697 (Jiebin Sun)。- #82308 で行われた
null_mapとJoinMaskの最適化が、複数の OR 条件を含む JOIN のケースにも適用されました。また、KnownRowsHolderデータ構造も最適化されました。#83041(Nikita Taranov)。 - フラグへの各アクセス時にハッシュを計算することを避けるため、JOIN フラグにはプレーンな
std::vector<std::atomic_bool>を使用します。 #83043 (Nikita Taranov)。 HashJoinがlazy出力モードを使用している場合、結果カラム用のメモリを事前に確保しないようにしました。これは、特に一致件数が少ない場合には非効率的です。さらに、結合が完了した後であれば一致件数を正確に把握できるため、より精度の高い事前確保が可能です。#83304(Nikita Taranov)。- パイプライン構築時のポートヘッダーでのメモリコピーを最小化しました。元のPRはheymindによるものです。#83381(Raúl Marín)。
- RocksDB ストレージ使用時の clickhouse-keeper の起動を改善しました。 #83390 (Antonio Andelic).
- 高い同時実行負荷がかかる状況でのロック競合を減らすため、ストレージスナップショットデータの作成中はロックを保持しないようにしました。 #83510 (Duc Canh Le).
- パースエラーが発生しない場合にシリアライザを再利用することで、
ProtobufSingle入力形式のパフォーマンスを向上させました。 #83613 (Eduard Karacharov). - 短いクエリを高速化するためのパイプライン構築処理のパフォーマンスを改善しました。 #83631 (Raúl Marín).
- 短いクエリを高速化するため、
MergeTreeReadersChain::getSampleBlockを最適化しました。#83875(Raúl Marín)。 - 非同期リクエストによりデータカタログでのテーブル一覧表示を高速化。 #81084 (alesapin).
s3_slow_all_threads_after_network_error設定が有効な場合、S3 のリトライ処理にジッターを導入しました。 #81849 (zoomxi)。
改良
- 可読性を高めるために、括弧を複数の色で色分けして表示するようにしました。 #82538 (Konstantin Bogdanov).
- LIKE/REGEXP パターンを入力しているときにメタ文字をハイライト表示するようにしました。これは既に
clickhouse-formatやclickhouse-clientの echo 出力では対応済みでしたが、今回コマンドプロンプトでも行われるようになりました。#82871(Alexey Milovidov)。 clickhouse-format内およびクライアントの echo 出力でのハイライトは、コマンドラインプロンプトでのハイライトと同様に動作します。#82874 (Alexey Milovidov)。plain_rewritableディスクがデータベースメタデータ用のディスクとして利用できるようになりました。データベースディスクとしての利用をサポートするため、plain_rewritableにmoveFileとreplaceFileメソッドを実装しました。 #79424 (Tuan Pham Anh).PostgreSQL、MySQL、DataLakeデータベースのバックアップを許可しました。これらのデータベースのバックアップでは、定義のみが保存され、中身のデータは保存されません。#79982(Nikolay Degterinsky)。- 設定
allow_experimental_join_conditionは、現在は常に許可されているため、廃止予定としてマークされました。 #80566 (Vladimir Cherkasov). - ClickHouse の非同期メトリクスに pressure メトリクスを追加しました。 #80779 (Xander Garbett).
- マークキャッシュからのエビクションを追跡するためのメトリクス
MarkCacheEvictedBytes、MarkCacheEvictedMarks、MarkCacheEvictedFilesを追加しました(issue #60989)。#80799(Shivji Kumar Jha)。 - Parquet の enum 型を、仕様で規定されているとおり byte array(バイト配列)として書き込めるようにしました。#81090 (Arthur Passos)。
DeltaLakeテーブルエンジンの改善: delta-kernel-rs にExpressionVisitorAPI が追加されており、この PR ではその API を実装し、パーティションカラムの式変換に適用しています(これにより、これまでコード内で使用していた、delta-kernel-rs における古く非推奨となっている方式を置き換えます)。将来的には、このExpressionVisitorにより、統計情報に基づくプルーニングや、DeltaLake固有のいくつかの機能も実装できるようになります。さらに、この変更の目的は、DeltaLakeClusterテーブルエンジンでパーティションプルーニングをサポートすることです(構文解析された式の結果である ActionsDAG はシリアライズされ、データパスと一緒にイニシエータから送信されます。プルーニングに必要なこの種の情報は、データファイル一覧時のメタ情報としてのみ利用可能であり、その処理はイニシエータだけが行いますが、各読み取りサーバ上のデータに対して適用される必要があるためです)。 #81136 (Kseniia Sumarokova)。- 名前付きタプルのスーパータイプを導出する際に要素名を保持するようにしました。 #81345 (lgbo).
- StorageKafka2 において、以前にコミットされたオフセットに依存しないよう、消費したメッセージを手動でカウントするようにしました。 #81662 (János Benjamin Antal).
clickhouse-keeper-utilsを追加しました。ClickHouse Keeper データを管理および分析するための新しいコマンドラインツールです。このツールは、スナップショットおよびチェンジログからの状態のダンプ取得、チェンジログファイルの分析、特定のログ範囲の抽出をサポートします。 #81677 (Antonio Andelic).- 合計およびユーザーごとのネットワークスロットルはリセットされないようになり、
max_network_bandwidth_for_all_usersとmax_network_bandwidth_for_all_usersの制限値が超過されることがなくなりました。 #81729 (Sergei Trifonov)。 - 出力フォーマットとして GeoParquet 形式への書き込みをサポートしました。 #81784 (Konstantin Vedernikov).
- 未完了のデータミューテーションの影響下にあるカラムの名前を変更してしまう場合は、
RENAME COLUMNの ALTER ミューテーションを開始できないようにしました。 #81823 (Mikhail Artemenko)。 Connectionヘッダーは、接続を維持すべきだと判断できた時点で、ヘッダー群の最後に送信されるようになりました。 #81951 (Sema Checherinda).listen_backlog(デフォルト 4096)に基づいて、TCP サーバーのキュー長(デフォルト 64)を調整するようにしました。 #82045 (Azat Khuzhin)。max_local_read_bandwidth_for_serverとmax_local_write_bandwidth_for_serverを、サーバーを再起動することなく動的に再読み込みできるようにしました。 #82083 (Kai Zhu).TRUNCATE TABLE system.warningsを使用してsystem.warningsテーブルからすべての警告を削除できるようにしました。 #82087 (Vladimir Cherkasov)。- データレイククラスタ関数におけるパーティションプルーニングを修正。 #82131 (Kseniia Sumarokova).
- DeltaLakeCluster テーブル関数でのパーティション化されたデータの読み取りを修正しました。この PR では cluster 関数群のプロトコルバージョンを引き上げ、イニシエーターからレプリカへ追加情報を送信できるようにしています。この追加情報には delta-kernel の transform 式が含まれており、パーティションカラム(および将来的には生成カラムなどの他の情報)をパースするために必要です。 #82132 (Kseniia Sumarokova)。
- 関数
reinterpretは、Tが固定長データ型である場合にArray(T)への変換をサポートするようになりました(issue #82621)。#83399(Shankar Iyer)。 - database Datalake が、よりわかりやすい例外をスローするようになりました。 #81211 を修正しました。 #82304(alesapin)。
HashJoin::needUsedFlagsForPerRightTableRowから false を返すことで CROSS JOIN の動作を改善。 #82379 (lgbo).- map カラムの読み書きを Tuple の Array として行えるようにしました。 #82408 (MikhailBurdukov).
- Rust クレートのライセンスを
system.licensesに一覧できるようにしました。 #82440 (Raúl Marín)。 {uuid}のようなマクロを、S3Queue テーブルエンジンのkeeper_path設定項目で使用できるようになりました。 #82463 (Nikolay Degterinsky)。- Keeper の改善: バックグラウンドスレッドでディスク間の changelog ファイルを移動するようにしました。以前は、changelog を別のディスクへ移動する処理が完了するまで、Keeper 全体がブロックされていました。これにより、移動処理に時間がかかる場合(例: S3 ディスクへの移動)には、パフォーマンスの低下を招いていました。 #82485 (Antonio Andelic).
- Keeper の改善: 新しい設定項目
keeper_server.cleanup_old_and_ignore_new_aclを追加しました。有効化すると、すべてのノードの ACL が消去され、新しいリクエストに対する ACL は無視されます。ノードから ACL を完全に削除することが目的の場合は、新しいスナップショットが作成されるまで、この設定を有効のままにしておくことが重要です。 #82496 (Antonio Andelic). - S3Queue テーブルエンジンを使用するテーブルでのストリーミングを無効化できる新しいサーバー設定
s3queue_disable_streamingを追加しました。この設定はサーバーを再起動せずに変更できます。 #82515 (Kseniia Sumarokova). - ファイルシステムキャッシュの動的リサイズ機能をリファクタリングし、イントロスペクションのためのログをさらに追加しました。 #82556 (Kseniia Sumarokova).
- 設定ファイルがない場合でも、
clickhouse-serverはデフォルト設定と同様に PostgreSQL 用のポート 9005 をリッスンします。 #82633 (Alexey Milovidov). ReplicatedMergeTree::executeMetadataAlterでは、StorageID を取得し、DDLGuard を取得せずにIDatabase::alterTableを呼び出そうとします。この間に、問題となっているテーブルを別のテーブルと技術的には入れ替えることができるため、定義を取得すると誤ったテーブルの定義を取得してしまう可能性があります。これを回避するため、IDatabase::alterTableを呼び出そうとする際に UUID が一致するかどうかを確認するチェックを別途追加しました。#82666 (Nikolay Degterinsky)。- 読み取り専用のリモートディスクを使用するデータベースをアタッチする際は、
DatabaseCatalogにテーブル UUID を手動で追加する必要があります。 #82670 (Tuan Pham Anh)。 NumericIndexedVectorでnanおよびinfを使用できないようにしました。これにより #82239 などが修正されました。 #82681(Raufs Dunamalijevs)。X-ClickHouse-ProgressおよびX-ClickHouse-Summaryヘッダーのフォーマットでゼロ値を省略しないようにしました。 #82727 (Nikita Mikhaylov).- Keeper の改善: world:anyone ACL に対して特定の権限をサポート。 #82755 (Antonio Andelic).
- SummingMergeTree テーブルで、合計対象として明示的に列挙されているカラムを対象とする
RENAME COLUMNやDROP COLUMNを許可しないようにしました。#81836 をクローズしました。#82821(Alexey Milovidov)。 DecimalからFloat32への変換精度を改善しました。DecimalからBFloat16への変換を実装しました。#82660 をクローズしました。 #82823(Alexey Milovidov)。- Web UI のスクロールバーの見た目が少し良くなりました。 #82869 (Alexey Milovidov).
- 組み込み設定を備えた
clickhouse-serverで、HTTP OPTIONS レスポンスを返すことにより Web UI を利用できるようになりました。 #82870 (Alexey Milovidov). - config 内のパスに対して追加の Keeper ACL を指定できるようになりました。特定のパスに追加の ACL を設定する場合は、config の
zookeeper.path_aclsの下に定義してください。 #82898 (Antonio Andelic). - ミューテーションのスナップショットは、可視パーツのスナップショットから構築されるようになりました。また、スナップショットで使用されるミューテーションカウンタは、含まれるミューテーションに基づいて再計算されます。 #82945 (Mikhail Artemenko).
- Keeper がソフトメモリ制限により書き込みを拒否した場合に、ProfileEvent を追加するようにしました。 #82963 (Xander Garbett).
commit_timeとcommit_idのカラムをsystem.s3queue_logに追加。 #83016 (Kseniia Sumarokova).- 場合によっては、メトリクスに複数のディメンション(次元)が必要になることがあります。たとえば、単一のカウンタではなく、エラーコードごとに失敗したマージやミューテーションをカウントしたい場合です。そのために、この要件を満たす
system.dimensional_metricsを導入し、最初のディメンション付きメトリクスとしてfailed_mergesを追加しました。 #83030 (Miсhael Stetsyuk)。 - ClickHouse クライアントで不明な設定に関する警告を集約し、サマリとしてログに記録するようにしました。 #83042 (Bharat Nallan)。
- ClickHouse クライアントは、接続エラー発生時にローカルポート番号を報告するようになりました。 #83050 (Jianfei Hu)。
AsynchronousMetricsにおけるエラー処理がわずかに改善されました。/sys/blockディレクトリが存在するがアクセスできない場合、サーバーはブロックデバイスの監視なしで起動します。#79229 をクローズしました。 #83115(Alexey Milovidov)。SystemLogsのシャットダウン順序を変更し、通常テーブルの後かつシステムテーブルの前に行うようにしました(以前は通常テーブルの前に行っていました)。 #83134 (Kseniia Sumarokova).S3Queueのシャットダウン処理のログを追加しました。 #83163 (Kseniia Sumarokova).TimeおよびTime64をMM:SS、M:SS、SS、S形式として解釈できるようになりました。 #83299 (Yarik Briukhovetskyi).distributed_ddl_output_mode='*_only_active'の場合、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)。- 例外メッセージ内に過度に長い式処理の説明を出力しないようにしました。 #83164 をクローズ。 #83350(Alexey Milovidov)。
- パーツのプレフィックスおよびサフィックスを解析する機能を追加し、非定数カラムのカバレッジも検証できるようにしました。 #83377 (Mikhail Artemenko).
- 名前付きコレクション使用時に、ODBC および JDBC 間のパラメータ名を統一しました。 #83410 (Andrey Zvonov).
- ストレージのシャットダウン中に
getStatusはErrorCodes::ABORTED例外をスローします。以前はこの結果、select クエリが失敗していましたが、現在はErrorCodes::ABORTED例外を捕捉して明示的に無視するようになりました。 #83435 (Miсhael Stetsyuk). MergePartsエントリの part_log のプロファイルイベントに、UserTimeMicroseconds、SystemTimeMicroseconds、RealTimeMicrosecondsなどのプロセスリソースのメトリクスを追加。 #83460 (Vladimir Cherkasov)。- Keeper において、新しい種類のリクエストを可能にする
create_if_not_exists、check_not_exists、remove_recursiveの各 feature flag をデフォルトで有効にしました。 #83488 (Antonio Andelic)。 - サーバーのシャットダウン時にテーブルを停止する前に、S3(Azure など)Queue のストリーミングを停止するようになりました。 #83530 (Kseniia Sumarokova).
JSON入力フォーマットでDate/Date32を整数値として扱えるようにしました。 #83597 (MikhailBurdukov)- 特定の状況での PROJECTION の読み込みおよび追加に関する例外メッセージを、より読みやすくしました。 #83728 (Robert Schulze).
clickhouse-serverのバイナリのチェックサム整合性検証をスキップできる設定オプションを追加しました。 #83637 を解決します。 #83749(Rafael Roquetto)。
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- 誤って #79465 で変更されていた
clickhouse-benchmarkの--reconnectオプションのデフォルト値を修正。 #82677(Alexey Milovidov による)。 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)。
- 集約関数の状態を IPv4 と乗算する際に、適切なエラーコードが返されるようにしました。 #82817 をクローズ。 #82818(Alexey Milovidov)。
- ファイルシステムキャッシュにおける「Having zero bytes but range is not finished」という論理エラーを修正。 #81868 (Kseniia Sumarokova).
- TTL によって行が削除された場合に、それに依存しているアルゴリズム(例えば
minmax_count_projection)の正しさを保証するため、min-max 索引を再計算します。これにより #77091 が解決されます。#77166 (Amos Bird)。 ORDER BY ... LIMIT BY ... LIMIT Nを組み合わせたクエリにおいて、ORDER BY が PartialSorting として実行される場合、カウンターrows_before_limit_at_leastは、ソート処理で消費された行数ではなく、LIMIT 句で処理された行数を反映するようになりました。 #78999 (Eduard Karacharov)。- オルタネーションを含み、先頭の選択肢がリテラルでない
regexpを用いた token/ngram 索引でのフィルタリングにおいて発生していた、過剰な granule スキップを修正。 #79373 (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). - 一部のクエリを parallel replicas で実行した場合、initiator 側では順序付き読み取りの最適化を適用できる一方、リモートノード側では適用できないことがありました。その結果、parallel replicas のコーディネーター(initiator 上)とリモートノードで異なる読み取りモードが使用され、論理エラーが発生していました。 #80652 (Igor Nikonov)。
- カラム型がNullableに変更された際のprojectionのmaterialize時に発生していた論理エラーを修正しました。 #80741 (Pavel Kruglov).
- TTL 更新時に、TTL GROUP BY での有効期限 (TTL) の再計算が誤っていた問題を修正しました。 #81222 (Evgeniy Ulasik).
- Parquet の Bloom フィルターが、
WHERE function(key) IN (...)のような条件をWHERE key IN (...)であるかのように誤って扱っていた不具合を修正しました。 #81255 (Michael Kolupaev). - マージ処理中に例外が発生した際に
Aggregatorがクラッシュする可能性のあった問題を修正しました。 #81450 (Nikita Taranov). InterpreterInsertQuery::extendQueryLogElemImplを修正し、必要に応じてデータベース名およびテーブル名にバッククオートを追加するようにしました(例:名前に-のような特殊文字が含まれている場合)。 #81528 (Ilia Shvyrialkin).- 左辺引数が null でサブクエリ結果が Nullable ではない場合に、
transform_null_in=1設定時のINの実行を修正。 #81584 (Pavel Kruglov). - 既存テーブルからの読み取り時に実行される default/materialize 式について、experimental/suspicious 型を検証しないようにしました。 #81618 (Pavel Kruglov).
- TTL 式で dict が使用されている場合に、マージ処理中に "Context has expired" エラーが発生する問題を修正しました。 #81690 (Azat Khuzhin).
cast関数の単調性を修正しました。 #81722 (zoomxi)。- スカラ相関サブクエリの処理中に必要なカラムが読み込まれない問題を修正しました。#81716 に対する修正です。#81805(Dmitry Novik)。
- 以前のバージョンでは、サーバーが
/jsへのリクエストに対して過剰なコンテンツを返していました。これにより #61890 が解決されました。#81895(Alexey Milovidov)。 - これまで、
MongoDBテーブルエンジン定義では、host:port引数にパスコンポーネントを含めることができましたが、そのパスコンポーネントは黙って無視されていました。MongoDB 連携機能では、そのようなテーブルのロードを拒否していました。この修正により、MongoDBエンジンの引数が 5 つある場合には、そのようなテーブルのロードを許可し、引数で指定されたデータベース名を使用しつつパスコンポーネントを無視するようにしました。注意: この修正は、新規に作成されたテーブルやmongoテーブル関数を使用したクエリ、ならびに Dictionary のソースおよび named collection には適用されません。 #81942 (Vladimir Cherkasov)。 - マージ中に例外が発生した場合に
Aggregatorがクラッシュする可能性があった問題を修正しました。 #82022 (Nikita Taranov)。 - クエリで定数の別名カラムのみが使用されている場合のフィルタ解析を修正しました。 #79448 を修正。 #82037 (Dmitry Novik).
- GROUP BY および SET の有効期限 (TTL) で同じカラムを指定した場合に発生する LOGICAL_ERROR と、その後のクラッシュを修正しました。 #82054 (Pablo Marcos)。
- シークレットマスキング処理における S3 テーブル関数の引数検証を修正し、潜在的な
LOGICAL_ERRORの発生を防止。#80620 をクローズ。#82056 (Vladimir Cherkasov)。 - Iceberg のデータレースを修正。 #82088 (Azat Khuzhin).
DatabaseReplicated::getClusterImplを修正しました。hostsの最初の要素(または複数の要素)がid == DROPPED_MARKであり、同じ分片に対する他の要素が存在しない場合、shardsの最初の要素が空のベクタとなり、std::out_of_rangeが発生していました。 #82093 (Miсhael Stetsyuk)。- arraySimilarity におけるコピーペーストの誤りを修正し、UInt32 および Int32 の重みの使用を禁止。テストおよびドキュメントを更新。 #82103 (Mikhail f. Shiryaev)。
WHERE句およびIndexSetの条件下でarrayJoinを含むクエリにおいて発生していたNot found columnエラーを修正しました。 #82113 (Nikolai Kochetov).- Glue カタログ統合のバグを修正。これにより、サブカラムの一部が Decimal 型であるネストしたデータ型のテーブル(例:
map<string, decimal(9, 2)>)を ClickHouse が読み取れるようになった。#81301 を修正。#82114(alesapin)。 - SummingMergeTree において、25.5 で https://github.com/ClickHouse/ClickHouse/pull/79051 によって導入されたパフォーマンス低下を修正しました。#82130(Pavel Kruglov)。
- URI 経由で設定を渡した場合、最後の値のみが有効になります。 #82137 (Sema Checherinda).
- Iceberg における「Context has expired」エラーを修正。 #82146 (Azat Khuzhin).
- メモリ逼迫時のリモートクエリで発生しうるデッドロックを修正。 #82160 (Kirill).
numericIndexedVectorPointwiseAdd、numericIndexedVectorPointwiseSubtract、numericIndexedVectorPointwiseMultiply、numericIndexedVectorPointwiseDivide関数を大きな数値に対して適用した際にオーバーフローが発生していた問題を修正しました。 #82165 (Raufs Dunamalijevs)。- Materialized View が INSERT クエリを取りこぼす原因となっていたテーブル依存関係のバグを修正しました。 #82222 (Nikolay Degterinsky).
- サジェスションスレッドとメインクライアントスレッド間で発生する可能性のあったデータレースを修正。 #82233 (Azat Khuzhin).
- ClickHouse はスキーマ進化後でも Glue カタログから Iceberg テーブルを読み込めるようになりました。 #81272 を修正しました。 #82301 (alesapin)。
- 非同期メトリクス用の設定
asynchronous_metrics_update_period_sとasynchronous_heavy_metrics_update_period_sの検証を修正しました。 #82310 (Bharat Nallan)。 - 複数の JOIN を含むクエリで matcher を解決する処理における論理エラーを修正し、#81969 をクローズしました。#82421(Vladimir Cherkasov)。
- AWS ECS トークンに有効期限を追加し、再読み込み可能にしました。 #82422 (Konstantin Bogdanov).
CASE関数でNULL引数が正しく処理されない不具合を修正しました。 #82436 (Yarik Briukhovetskyi)。- クライアント内のデータレース(グローバルコンテキストを使用しないようにすることで回避)および
session_timezoneのオーバーライドを修正しました。以前は、session_timezoneがusers.xml/クライアントオプションで非空に設定され、クエリコンテキストでは空に設定されている場合、本来とは異なりusers.xmlの値が使用されていましたが、現在は常にクエリコンテキストがグローバルコンテキストより優先されます。 #82444 (Azat Khuzhin)。 - 外部テーブルエンジンにおけるキャッシュバッファの境界アライメント無効化処理を修正しました。この処理は https://github.com/ClickHouse/ClickHouse/pull/81868 で正しく動作していませんでした。 #82493(Kseniia Sumarokova)。
- 型変換されたキーで key-value ストレージを JOIN した場合に発生していたクラッシュを修正しました。 #82497 (Pervakov Grigorii).
- ログおよび
query_logで named collection の値が隠されてしまう問題を修正。 #82405 をクローズ。 #82510 (Kseniia Sumarokova)。 - セッション終了時のログ出力で、
user_idが空になる場合にクラッシュする可能性があった問題を修正しました。 #82513 (Bharat Nallan). - Time のパース処理で msan の問題が発生する可能性があったケースを修正しました。この変更では次の Issue を修正しています: #82477。 #82514 (Yarik Briukhovetskyi)。
- サーバーの処理がハングしないようにするため、
threadpool_writer_pool_sizeをゼロに設定できないようにしました。 #82532 (Bharat Nallan)。 - 相関付けられたカラムに対する ROW POLICY 式の解析中に発生する
LOGICAL_ERRORを修正。 #82618 (Dmitry Novik)。 enable_shared_storage_snapshot_in_query = 1の場合に、mergeTreeProjectionテーブル関数で親メタデータを誤って使用していた不具合を修正しました。これは #82634 に対応する修正です。#82638(Amos Bird)。- 関数
trim{Left,Right,Both}は、入力文字列型 "FixedString(N)" をサポートするようになりました。例えば、SELECT trimBoth(toFixedString('abc', 3), 'ac')が動作するようになりました。 #82691 (Robert Schulze). - AzureBlobStorage において、ネイティブコピーのために認証方法を比較する際に例外が発生した場合は、読み取りしてからコピーする(つまり非ネイティブコピー)処理にフォールバックするようコードを更新しました。 #82693 (Smita Kulkarni).
- 空要素が含まれる場合の
groupArraySample/groupArrayLastのデシリアライズ処理を修正しました(入力が空だった場合に、デシリアライズがバイナリデータの一部を読み飛ばしてしまう可能性があり、その結果、データ読み取り時の破損や TCP プロトコルでの UNKNOWN_PACKET_FROM_SERVER エラーを引き起こすおそれがありました)。数値型および日時型には影響しません。#82763(Pedro Ferreira)。 - 空の
Memoryテーブルのバックアップ処理を修正し、バックアップ復元がBACKUP_ENTRY_NOT_FOUNDエラーで失敗していた問題を解消しました。 #82791 (Julia Kartseva). - union/intersect/except_default_mode の書き換え時の例外安全性を修正。#82664 を解決。#82820(Alexey Milovidov)。
- 非同期テーブルのロードジョブの数を追跡するようにしました。実行中のジョブが存在する場合は、
TransactionLog::removeOldEntriesでtail_ptrを更新しないようにしました。 #82824 (Tuan Pham Anh)。 - Iceberg におけるデータレースを修正。 #82841 (Azat Khuzhin).
- 25.6 で導入された
use_skip_indexes_if_final_exact_mode最適化において、MergeTreeエンジンの設定やデータ分布によっては、適切な候補範囲を選択できない場合がありました。この問題はすでに修正されています。 #82879 (Shankar Iyer). - SCRAM_SHA256_PASSWORD 型の AST から解析する際に認証データの salt が設定されるようにしました。 #82888 (Tuan Pham Anh).
- キャッシュ機能を持たない Database 実装を使用している場合、対応するテーブルのメタデータは、カラムが返された後に削除され、参照が無効化されます。 #82939 (buyval01).
Mergeストレージを使用するテーブルとの JOIN 式を含むクエリに対するフィルタの書き換え処理を修正。#82092 を修正。#82950(Dmitry Novik)。- QueryMetricLog で発生していた LOGICAL_ERROR「Mutex cannot be NULL」を修正。#82979(Pablo Marcos)。
- 可変長フォーマッタ(例:
%M)とフォーマッタ%fを併用した場合に、関数formatDateTimeが誤った出力を行っていた問題を修正しました。 #83020 (Robert Schulze). - セカンダリクエリが常に VIEW からすべてのカラムを読み取る場合に、analyzer 有効化によって発生していたパフォーマンス低下の問題を修正しました。#81718 を修正します。#83036(Dmitry Novik)。
- 読み取り専用ディスク上でバックアップを復元する際に表示される誤解を招くエラーメッセージを修正。 #83051 (Julia Kartseva).
- 依存関係を持たないテーブルの作成時には循環依存関係のチェックを行わないようにしました。これにより、https://github.com/ClickHouse/ClickHouse/pull/65405 によって導入された、数千のテーブルを作成するユースケースでのパフォーマンス低下が解消されます。#83077(Pavel Kruglov)。
- 負の Time 値が暗黙的にテーブルに読み込まれてしまう問題を修正し、ドキュメントの記述を分かりやすくしました。 #83091 (Yarik Briukhovetskyi).
lowCardinalityKeys関数が共有 Dictionary の無関係なパーツを使用しないようになりました。 #83118 (Alexey Milovidov)。- Materialized Views におけるサブカラムの利用に関するリグレッションを修正しました。これにより次の問題が修正されます: #82784。 #83221 (Nikita Mikhaylov)。
- 失敗した
INSERTの後に接続が切断状態のまま残っていたためクライアントがクラッシュする問題を修正。 #83253 (Azat Khuzhin)。 - 空のカラムを含むブロックのサイズを計算する際に発生していたクラッシュを修正しました。 #83271 (Raúl Marín).
- UNION における Variant 型で発生する可能性のあるクラッシュを修正。 #83295 (Pavel Kruglov).
- 未サポートの SYSTEM クエリに対して clickhouse-local が LOGICAL_ERROR を返していた問題を修正。 #83333 (Surya Kant Ranjan).
- S3 クライアント向けの
no_sign_requestを修正しました。これは、S3 リクエストに署名しないように明示的に設定するために使用できます。エンドポイントベースの設定を使用して、特定のエンドポイントごとに定義することもできます。 #83379 (Antonio Andelic)。 - CPU スケジューリングが有効な状態で負荷下で実行された場合に、設定 'max_threads=1' を指定したクエリでクラッシュが発生する可能性がある問題を修正しました。 #83387 (Fan Ziqi).
- CTE 定義内で同名の別のテーブル式を参照している場合に発生する
TOO_DEEP_SUBQUERIES例外を修正。 #83413 (Dmitry Novik)。 REVOKE S3 ON system.*を実行した際に*.*に対する S3 権限まで誤って取り消されてしまう不具合を修正しました。この変更により #83417 が解決されました。 #83420 (pufit)。- クエリ間で async_read_counters を共有しないよう修正しました。 #83423 (Azat Khuzhin).
- サブクエリに FINAL が含まれている場合は並列レプリカを無効にします。 #83455 (zoomxi).
role_cache_expiration_time_seconds設定の構成時に発生する軽微な整数オーバーフロー問題を修正しました(issue #83374)。#83461(wushap)。- https://github.com/ClickHouse/ClickHouse/pull/79963 で紛れ込んだバグを修正しました。ディファイナー付きの MV(マテリアライズドビュー)に挿入する際には、権限チェックはディファイナーに付与された権限を使用する必要があります。この修正により #79951 が解決されます。#83502(pufit)。
- Iceberg の配列要素および map 値と、それらのすべてのネストされたサブフィールドに対して、境界値に基づくファイルプルーニングを無効化しました。 #83520 (Daniil Ivanik).
- 一時データストレージとして使用している場合に発生する可能性のある、ファイルキャッシュが初期化されていないことによるエラーを修正しました。 #83539 (Bharat Nallan)。
- Keeper の修正: セッション終了時に ephemeral ノードが削除された際に total watch カウントが正しく更新されない問題を修正しました。 #83583 (Antonio Andelic)。
- max_untracked_memory に関する誤ったメモリ管理を修正しました。 #83607 (Azat Khuzhin).
INSERT SELECTとUNION ALLを組み合わせたクエリにおいて、一部の稀なケースでヌルポインタ参照が発生する可能性がありました。これにより #83618 が解決されました。 #83643 (Alexey Milovidov).- 論理エラーを引き起こす可能性があったため、
max_insert_block_sizeにゼロ値を設定することを禁止しました。 #83688 (Bharat Nallan)。 - block_size_bytes=0 の場合に estimateCompressionRatio() で発生する無限ループを修正しました。 #83704 (Azat Khuzhin).
IndexUncompressedCacheBytes/IndexUncompressedCacheCells/IndexMarkCacheBytes/IndexMarkCacheFilesメトリクスを修正(以前は、Cache接頭辞なしのメトリクスに含められていました)。 #83730 (Azat Khuzhin).BackgroundSchedulePoolのシャットダウン時に、タスク側からスレッドを join することが原因で発生し得た強制終了と、ユニットテストで発生していた可能性のあるハングを修正しました。 #83769 (Azat Khuzhin).- 名前の衝突が発生する場合でも、新しいアナライザが
WITH句内から外側のエイリアスを参照できるようにする後方互換性用の設定を導入しました。 #82700 を修正します。 #83797 (Dmitry Novik)。 - ライブラリブリッジのクリーンアップ中のコンテキストの再帰的ロックが原因で、シャットダウン時に発生するデッドロックを修正。 #83824 (Azat Khuzhin).
ビルド/テスト/パッケージングの改善
- ClickHouse の lexer 用に最小限の C ライブラリ(10 KB)をビルドしました。これは #80977 の対応に必要です。#81347(Alexey Milovidov)。スタンドアロンの lexer 用テストを追加し、テストタグ
fasttest-onlyを追加しました。#82472(Yakov Olkhovskiy)。 - Nix サブモジュールの input を検査するチェックを追加しました。#81691(Konstantin Bogdanov)。
- ローカルホスト上でインテグレーションテストを実行しようとした際に発生し得る一連の問題を修正しました。#82135(Oleg Doronin)。
- Mac および FreeBSD で SymbolIndex をコンパイルできるようにしました(ただし動作するのは ELF システムである Linux と FreeBSD のみです)。#82347(Alexey Milovidov)。
- Azure SDK を v1.15.0 に更新しました。#82747(Smita Kulkarni)。
- ビルドシステムに google-cloud-cpp の storage モジュールを追加しました。#82881(Pablo Marcos)。
- Docker Official Library の要件を満たすように、clickhouse-server 用の
Dockerfile.ubuntuを変更しました。#83039(Mikhail f. Shiryaev)。 curl clickhouse.comへのビルドのアップロード処理を修正するため、#83158 に対するフォローアップを行いました。#83463(Mikhail f. Shiryaev)。clickhouse/clickhouse-serverおよび公式clickhouseイメージにbusyboxバイナリとインストール用ツールを追加しました。#83735(Mikhail f. Shiryaev)。- ClickHouse サーバーのホストを指定するための
CLICKHOUSE_HOST環境変数のサポートを追加し、既存のCLICKHOUSE_USERおよびCLICKHOUSE_PASSWORD環境変数と一貫性を持たせました。これにより、クライアントや設定ファイルを直接変更することなく、より簡単に設定できるようになります。#83659(Doron David)。
ClickHouse 25.6 リリース、2025-06-26
下位互換性のない変更
- これまで、関数
countMatchesは、パターンが空文字列を許容していても、最初の空マッチが発生した時点でカウントを停止していました。この問題を解消するために、countMatchesは空マッチが発生した場合に 1 文字分進めて実行を継続するようになりました。従来の挙動を維持したいユーザーは、設定count_matches_stop_at_empty_matchを有効化してください。 #81676 (Elmi Ahmadov). - マイナー: サーバーの
backup_threadsおよびrestore_threadsの設定が 0 にならないように強制しました。 #80224 (Raúl Marín). - マイナー:
Stringに対するbitNotが、内部メモリ表現としてヌル終端文字列を返すように修正しました。これはユーザーから見える挙動には影響しないはずですが、著者がこの変更を明示しておきたいとしています。 #80791 (Azat Khuzhin).
新機能
- 新しいデータ型
Time([H]HH:MM:SS) およびTime64([H]HH:MM.fractional) を追加し、これらと他のデータ型の間で利用する基本的なキャスト関数や補助関数を追加しました。既存の関数toTimeとの互換性を保つための設定を追加し、設定use_legacy_to_timeは当面、従来の動作を維持するように構成されています。 #81217 (Yarik Briukhovetskyi). また、Time/Time64 間の比較をサポートしました。 #80327 (Yarik Briukhovetskyi). - 新しい CLI ツール
chdig— ClickHouse 向けの TUI インターフェイス(topのような UI)で、ClickHouse の一部として追加されました。#79666(Azat Khuzhin)。 AtomicおよびOrdinaryデータベースエンジンでdisk設定をサポートし、テーブルのメタデータファイルを保存するディスクを指定できるようにしました。 #80546 (Tuan Pham Anh)。これにより、外部ストレージ上のデータベースをアタッチできるようになります。- 新しい種類の MergeTree エンジン
CoalescingMergeTree— バックグラウンドマージの際に、最初の非 NULL 値を採用します。これにより #78869 が解決されました。 #79344 (scanhex12)。 - WKB("Well-Known Binary"、GIS アプリケーションで使用される、さまざまなジオメトリ型をバイナリでエンコードするフォーマット)を読み取る関数をサポートしました。#43941 を参照してください。#80139(scanhex12)。
- ワークロード向けにクエリ スロットのスケジューリングを追加しました。詳細は workload scheduling を参照してください。 #78415 (Sergei Trifonov)。
timeSeries*ヘルパー関数により、時系列データを扱う際のいくつかのユースケースを高速化できます: - 指定された開始タイムスタンプ、終了タイムスタンプ、およびステップに従ってデータを時間グリッドに再サンプリングする - PromQL 風のdelta、rate、idelta、irateを計算する。 #80590 (Alexander Gololobov).mapContainsValuesLike/mapContainsValues/mapExtractValuesLike関数を追加し、map の値でフィルタリングできるようにするとともに、これらの関数をブルームフィルターベースの索引でもサポートしました。 #78171 (UnamedRus).settings constraintsで禁止する値の Set を指定できるようになりました。 #78499 (Bharat Nallan).- 単一のクエリ内のすべてのサブクエリで同じストレージスナップショットを共有できるようにする
enable_shared_storage_snapshot_in_query設定を追加しました。これにより、クエリ内で同じテーブルが複数回参照される場合でも、そのテーブルからの読み取りの一貫性が保証されます。#79471 (Amos Bird)。 JSONカラムをParquetに直接書き込み、ParquetからJSONカラムを直接読み取れるようになりました。 #79649 (Nihal Z. Miaji).pointInPolygonにMultiPolygonのサポートを追加しました。 #79773 (Nihal Z. Miaji).deltaLakeLocalテーブル関数経由で、ローカルファイルシステムにマウントされた Delta テーブルをクエリできるようにしました。 #79781 (roykim98)。- String から DateTime への型変換時のパースモードを選択できる新しい設定項目
cast_string_to_date_time_modeを追加しました。#80210 (Pavel Kruglov)。たとえば、ベストエフォートモードに設定できます。 - Bitcoin の Bech アルゴリズムを利用するための
bech32Encodeおよびbech32Decode関数を追加しました(issue #40381)。#80239(George Larionov)。 - MergeTree のパーツ名を解析するための SQL 関数を追加しました。 #80573 (Mikhail Artemenko).
- クエリで参照されるパーツを、それらが配置されているディスク名でフィルタリングできるよう、新しい仮想カラム
_disk_nameを導入しました。 #80650 (tanner-bruce). - 埋め込み Web ツールの一覧を表示するランディングページを追加しました。ブラウザー類似のユーザーエージェントでアクセスされた場合に表示されます。 #81129 (Alexey Milovidov).
arrayFirst、arrayFirstIndex、arrayLastおよびarrayLastIndex関数は、フィルタ式によって返される NULL 値を除外するようになりました。以前のバージョンでは、Nullable 型のフィルタ結果はサポートされていませんでした。#81113 を修正。#81197(Lennard Eijsackers)。USE nameの代わりにUSE DATABASE nameと記述できるようになりました。 #81307 (Yarik Briukhovetskyi)。- 利用可能なコーデックを確認できる新しい system テーブル
system.codecsを追加しました。(issue #81525). #81600 (Jimmy Aguilar Mena). lagおよびleadウィンドウ関数のサポートを追加。 #9887 をクローズ。 #82108(Dmitry Novik)。- 関数
tokensで、ログ向けの新しいトークナイザーsplitがサポートされるようになりました。 #80195 (Robert Schulze)。 clickhouse-localに--database引数のサポートを追加しました。既に作成済みのデータベースに切り替えることができます。これにより #44115 がクローズされます。 #81465 (Alexey Milovidov)。
実験的機能
- ClickHouse Keeper を使用して
Kafka2に対して Kafka のリバランスに類似したロジックを実装しました。各レプリカに対して 2 種類のパーティションロック(恒久ロックと一時ロック)をサポートします。レプリカは可能な限り長く恒久ロックを保持しようとし、任意の時点でそのレプリカ上の恒久ロックはall_topic_partitions / active_replicas_count(ここでall_topic_partitionsはすべてのパーティション数、active_replicas_countはアクティブなレプリカ数)を超えません。もしそれより多くなった場合、レプリカはいくつかのパーティションを解放します。一部のパーティションはレプリカによって一時的に保持されます。レプリカ上の一時ロックの最大数は動的に変化し、他のレプリカがいくつかのパーティションを恒久ロックとして取得できるようにします。一時ロックを更新する際、レプリカはいったんそれらをすべて解放し、別のパーティションを再度取得しようとします。#78726(Daria Fomina)。 - 実験的なテキスト索引の改良として、キーと値のペアによる明示的なパラメータ指定をサポートしました。現在サポートされているパラメータは、必須の
tokenizerと、オプションのmax_rows_per_postings_listおよびngram_sizeの 2 つです。#80262(Elmi Ahmadov)。 - 以前は、セグメント ID をディスク上の (
.gin_sid) ファイルを読み書きしてオンザフライで更新していたため、packedストレージは全文索引でサポートされていませんでした。packedストレージでは、コミットされていないファイルから値を読み出すことはサポートされておらず、これが問題の原因となっていました。現在はこの問題は解消されています。#80852(Elmi Ahmadov)。 gin型の実験的な索引(PostgreSQL ハッカーたちの内輪ネタなので気に入っていませんでした)はtextに名称変更されました。既存のgin型索引は引き続きロード可能ですが、検索で使用しようとすると例外をスローし(代わりにtext索引を提案します)、使用できません。#80855(Robert Schulze)。
パフォーマンスの向上
- 複数のプロジェクションによるフィルタリングをサポートし、パートレベルのフィルタリングに 1 つ以上のプロジェクションを使用できるようにしました。これにより #55525 が解決されます。これは、#78429 に続く、プロジェクション索引を実装するための第 2 段階の変更です。#80343(Amos Bird)。
- ファイルシステムキャッシュのデフォルトのキャッシュポリシーとして
SLRUを使用するようにしました。 #75072 (Kseniia Sumarokova). - クエリパイプラインの Resize ステップで発生する競合状態を解消しました。 #77562 (Zhiguo Zhou).
- ネットワーク接続に関連付けられた単一スレッドではなく、ブロックの圧縮/解凍およびシリアライズ/デシリアライズ処理をパイプラインスレッドにオフロードするオプションを導入しました。
enable_parallel_blocks_marshalling設定で制御できます。これにより、クエリの発行元ノードとリモートノード間で大量のデータを転送する分散クエリが高速化されます。 #78694 (Nikita Taranov). - ブルームフィルターの全タイプに対するパフォーマンス改善。OpenHouse カンファレンスの動画 #79800(Delyan Kratunov)。
- いずれか一方の Set が空の場合に、
UniqExactSet::mergeに高速パスを導入しました。また、LHS 側の Set が 2 レベルで RHS 側が 1 レベルの場合でも、RHS 側を 2 レベルに変換しないようにしました。 #79971 (Nikita Taranov)。 - 2 レベルのハッシュテーブル使用時におけるメモリ再利用効率を改善し、ページフォールトを削減しました。これにより
GROUP BYを高速化します。 #80245 (Jiebin Sun)。 - クエリ条件キャッシュにおける不要な更新を避け、ロック競合を軽減しました。 #80247 (Jiebin Sun).
concatenateBlocksに対する軽微な最適化。並列ハッシュ結合にも有効である可能性があります。 #80328 (李扬).- 主キー範囲からマーク範囲を選択する際、主キーが関数でラップされていると二分探索を使用できませんでした。この PR はこの制限を緩和し、主キーが常に単調な関数チェーンでラップされている場合や、RPN に常に真となる要素が含まれている場合でも二分探索を適用できるようにします。#45536 をクローズします。#80597(zoomxi)。
Kafkaエンジンのシャットダウン速度を改善しました(複数のKafkaテーブルがある場合に発生していた余分な 3 秒の遅延を解消)。 #80796 (Azat Khuzhin).- Async inserts: メモリ使用量を削減し、INSERT クエリのパフォーマンスを向上。 #80972 (Raúl Marín).
- ログテーブルが無効になっている場合はプロセッサのプロファイルを行わないようにしました。 #81256 (Raúl Marín)。これにより、非常に短いクエリの処理が高速になります。
- ソースが要求される長さと完全に一致する場合の
toFixedStringの処理を高速化しました。 #81257 (Raúl Marín). - USER に制限がない場合は QUOTA の値を処理しないようにしました。 #81549 (Raúl Marín)。これにより、ごく短いクエリの実行が高速になります。
- メモリトラッキングにおける性能退行を修正しました。 #81694 (Michael Kolupaev).
- 分散クエリに対するシャーディングキー最適化を改善しました。 #78452 (fhw12345).
- Parallel replicas: すべての読み取りタスクが他のレプリカに割り当てられている場合は、使用されていない低速なレプリカの完了を待たないようにしました。 #80199 (Igor Nikonov).
- Parallel replicas では個別の接続タイムアウトが使用されるようになりました。
parallel_replicas_connect_timeout_ms設定を参照してください。以前は、connect_timeout_with_failover_msおよびconnect_timeout_with_failover_secure_ms設定が parallel replicas クエリの接続タイムアウト値として使用されていました(デフォルトは 1 秒)。#80421(Igor Nikonov)。 - ジャーナリング対応のファイルシステムでは、
mkdirはファイルシステムのジャーナルに書き込まれ、それがディスクに永続化されます。ディスクが遅い場合、この処理に時間がかかることがあります。これを reserve ロックのスコープ外に移動しました。 #81371 (Kseniia Sumarokova)。 - 最初の読み取りクエリが実行されるまで Iceberg マニフェストファイルの読み込みを遅延するようにしました。 #81619 (Daniil Ivanik)。
- 該当する場合、
GLOBAL [NOT] IN述語をPREWHERE句に移動できるようにしました。 #79996 (Eduard Karacharov)。
改良
EXPLAIN SYNTAXは新しいアナライザーを使用するようになりました。クエリツリーから構築された AST を返します。クエリツリーを AST に変換する前に適用するパスの回数を制御するためのオプションquery_tree_passesを追加しました。 #74536 (Vladimir Cherkasov)。- Native フォーマットにおいて Dynamic と JSON 向けのフラットなシリアル化を実装しました。これにより、Dynamic の shared variant や JSON の shared data のような特別な構造を使わずに、Dynamic および JSON データをシリアル化/デシリアライズできるようになります。このシリアル化は
output_format_native_use_flattened_dynamic_and_json_serializationを設定することで有効にできます。また、このシリアル化は、さまざまな言語で実装されたクライアントにおいて、TCP プロトコル経由で Dynamic および JSON をより容易にサポートするために利用できます。 #80499 (Pavel Kruglov). - エラー
AuthenticationRequiredが発生した場合にS3の認証情報を更新するようにしました。 #77353 (Vitaly Baranov). system.asynchronous_metricsに Dictionary 関連のメトリクスを追加しました。DictionaryMaxUpdateDelay- Dictionary 更新遅延の最大値(秒)。DictionaryTotalFailedUpdates- 直近の正常なロード以降、すべての Dictionary で発生したエラーの総数。#78175 (Vlad).- 破損したテーブルを保存するために作成された可能性があるデータベースに関する警告を追加。 #78841 (János Benjamin Antal)。
S3Queue、AzureQueueエンジンに_time仮想カラムを追加しました。 #78926 (Anton Ivashkin)。- CPU 過負荷時の接続ドロップを制御する設定をホットリロードに対応しました。 #79052 (Alexey Katsman).
- Azure Blob Storage 上のプレーンディスクに対して、
system.tablesで報告されるデータパスにコンテナープレフィックスを追加し、S3 および GCP と報告内容の一貫性を持たせました。#79241 (Julia Kartseva). clickhouse-clientとlocalで、param_<name>(アンダースコア)に加えてparam-<name>(ダッシュ)形式のクエリパラメータも受け付けるようになりました。これによって #63093 が解決されました。 #79429(Engel Danila)。- チェックサムを有効にしてローカルからリモートの S3 へデータをコピーする際の帯域幅割引について、詳細な警告メッセージを追加。 #79464 (VicoWu).
- 以前は、
input_format_parquet_max_block_size = 0(無効な値)を指定すると ClickHouse がハングしていましたが、この問題は修正されました。これにより #79394 がクローズされました。 #79601 (abashkeev)。 startup_scriptsにthrow_on_error設定を追加しました。throw_on_errorが true の場合、すべてのクエリが正常に完了しない限りサーバーは起動しません。デフォルト値はthrow_on_errorが false で、従来どおりの動作が維持されます。 #79732 (Aleksandr Musorin).- 任意の種類の
http_handlersにhttp_response_headersを追加できるようにしました。 #79975 (Andrey Zvonov). - 関数
reverseはTupleデータ型もサポートするようになりました。これにより #80053 がクローズされました。#80083(flynn)。 - #75817 を解決し、
system.zookeeperテーブルからauxiliary_zookeepersデータを取得できるようにしました。 #80146 (Nikolay Govorov)。 - サーバーの TCP ソケットに関する非同期メトリクスを追加し、オブザーバビリティを向上させました。#80187 をクローズしました。 #80188(Alexey Milovidov)。
anyLast_respect_nullsとany_respect_nullsをSimpleAggregateFunctionとしてサポートするようになりました。 #80219 (Diskein).- レプリケートされたデータベースに対する不要な
adjustCreateQueryForBackup呼び出しを削除しました。 #80282 (Vitaly Baranov)。 clickhouse-localで、-- --config.value='abc'のように--の後ろに続く追加オプションを、=記号なしでも指定できるようにしました。#80292 をクローズしました。 #80293(Alexey Milovidov)。SHOW ... LIKEクエリ内のメタ文字を強調表示するようにしました。これにより #80275 が解決されました。#80297(Alexey Milovidov)。clickhouse-localで SQL UDF を永続化。以前に作成された関数は起動時にロードされます。これにより #80085 がクローズされました。 #80300 (Alexey Milovidov)。- 事前の DISTINCT ステップの EXPLAIN プランにおける説明を修正しました。 #80330 (UnamedRus).
- ODBC/JDBC で名前付きコレクションを使用可能にしました。 #80334 (Andrey Zvonov).
- 読み取り専用ディスクおよび故障ディスクの数のメトリクスを追加。DiskLocalCheckThread の開始時にインジケーターをログに記録します。 #80391 (VicoWu).
s3_plain_rewritableストレージで PROJECTION をサポートしました。以前のバージョンでは、PROJECTION を参照する S3 内のメタデータオブジェクトは、移動されても更新されませんでした。#70258 をクローズ。#80393(Sav)。SYSTEM UNFREEZEコマンドは、読み取り専用ディスクおよび一度だけ書き込み可能なディスク上のパーツを検索しなくなりました。これにより #80430 が解決されました。 #80432(Alexey Milovidov)。- マージされたパーツに関するログメッセージのレベルを下げました。 #80476 (Hans Krutzer).
- Iceberg テーブルに対するパーティションプルーニングの既定動作を変更しました。 #80583 (Melvyn Peignon).
- 索引検索アルゴリズムのオブザーバビリティ向上のために、2 つの新しい ProfileEvents
IndexBinarySearchAlgorithmとIndexGenericExclusionSearchAlgorithmを追加しました。 #80679 (Pablo Marcos)。 - 古いカーネルでの
MADV_POPULATE_WRITEの非サポートについては、ログに出力しないようにしました(ログを不要に汚さないため)。 #80704 (Robert Schulze). TTL式でDate32およびDateTime64がサポートされるように追加されました。 #80710 (Andrey Zvonov).max_merge_delayed_streams_for_parallel_writeの互換性のための値を調整しました。 #80760 (Azat Khuzhin).- クラッシュを修正: デストラクタ内で一時ファイル(ディスク上に一時データをスピルするために使用)を削除しようとした際に例外がスローされると、プログラムが異常終了してしまう可能性がある問題を修正しました。 #80776 (Alexey Milovidov).
SYSTEM SYNC REPLICAにIF EXISTS修飾子を追加しました。 #80810 (Raúl Marín).- "Having zero bytes, but read range is not finished..." という内容の例外メッセージを拡張し、
system.filesystem_cacheに finished_download_time カラムを追加。#80849 (Kseniia Sumarokova). indexes = 1を指定してEXPLAINを実行した場合、その出力に検索アルゴリズムのセクションを追加しました。そこには「binary search」または「generic exclusion search」のいずれかが表示されます。 #80881 (Pablo Marcos)。- 2024年初頭、新しいアナライザがデフォルトで有効になっていなかったため、MySQL ハンドラでは
prefer_column_name_to_aliasが true にハードコードされていました。現在は、ハードコードを解除できるようになりました。 #80916 (Yarik Briukhovetskyi). system.iceberg_historyには、glue や iceberg rest のようなカタログデータベースの履歴も表示されるようになりました。また、一貫性のために、system.iceberg_history内のtable_nameおよびdatabase_nameカラムを、それぞれtableとdatabaseに名称変更しました。 #80975 (alesapin).mergeテーブル関数で読み取り専用モードを許可し、その利用時にCREATE TEMPORARY TABLE権限が不要になるようにしました。 #80981 (Miсhael Stetsyuk).- インメモリキャッシュの内部観測性を改善しました(これまで
system.asynchronouse_metricsでは不完全だったキャッシュ情報をsystem.metricsで公開)。インメモリキャッシュのサイズ(バイト単位)をdashboard.htmlに追加しました。VectorSimilarityIndexCacheSize/IcebergMetadataFilesCacheSizeはVectorSimilarityIndexCacheBytes/IcebergMetadataFilesCacheBytesに名称変更しました。 #81023 (Azat Khuzhin)。 system.rocksdbから読み取る際に、RocksDBテーブルを格納できないエンジンを持つデータベースを無視するようにしました。 #81083 (Pervakov Grigorii).clickhouse-localの設定ファイルでfilesystem_cachesとnamed_collectionsを利用可能にしました。 #81105 (Alexey Milovidov)。INSERTクエリにおけるPARTITION BYのシンタックスハイライトを修正しました。以前のバージョンでは、PARTITION BYがキーワードとしてハイライトされていませんでした。 #81106 (Alexey Milovidov)。- Web UI に小さな改善を 2 つ加えました。-
CREATEやINSERTのような出力を伴わないクエリを正しく処理するようにしました(つい最近まで、これらのクエリではスピナーが無限に回り続けていました)。- テーブルをダブルクリックした際に、先頭までスクロールするようにしました。 #81131 (Alexey Milovidov)。 MemoryResidentWithoutPageCacheメトリクスは、ユーザースペースのページキャッシュを除いたサーバープロセスの物理メモリ使用量を、バイト単位で表します。これにより、ユーザースペースのページキャッシュが利用されている場合でも、実際のメモリ使用量をより正確に把握できます。ユーザースペースのページキャッシュが無効化されている場合、この値はMemoryResidentと等しくなります。 #81233 (Jayme Bird)。- クライアント、ローカルサーバー、Keeper クライアント、および Disks アプリで手動で記録された例外を「ログ済み」としてマークし、同じ例外が二重にログ出力されないようにしました。 #81271 (Miсhael Stetsyuk).
use_skip_indexes_if_finalおよびuse_skip_indexes_if_final_exact_modeの既定値がTrueになりました。これにより、FINAL句を含むクエリは(該当する場合)スキップ索引を使用してグラニュールを絞り込み、さらに一致する主キー範囲に対応する追加のグラニュールも読み取るようになります。以前の、近似的で厳密ではない結果を返す挙動を必要とするユーザーは、慎重に評価したうえでuse_skip_indexes_if_final_exact_modeを FALSE に設定できます。#81331 (Shankar Iyer)。- Web UI で複数のクエリがある場合、カーソル位置のクエリが実行されます。 #80977 の継続対応です。 #81354 (Alexey Milovidov)。
- この PR は、変換関数の単調性チェックにおける
is_strictの実装上の問題を解決します。現在、一部の変換関数(toFloat64(UInt32)やtoDate(UInt8)など)が、本来は true を返すべきところで誤ってis_strictを false と返しています。 #81359 (zoomxi)。 KeyConditionが連続した範囲に一致するかどうかをチェックする際、キーに非厳密な関数チェーンが適用されている場合は、Constraint::POINTをConstraint::RANGEに変換する必要がある場合があります。たとえば、toDate(event_time) = '2025-06-03'はevent_timeに対して次のような範囲を意味します: ['2025-06-03 00:00:00', '2025-06-04 00:00:00')。この PR により、この挙動が修正されました。 #81400 (zoomxi).clickhouse/chのエイリアスは、--hostまたは--portが指定されている場合、clickhouse-localではなくclickhouse-clientを呼び出すようになりました。#79422 のフォローアップ。#65252 をクローズ。#81509(Alexey Milovidov)。- Keeper の応答時間分布データが得られたので、メトリクス用のヒストグラムのバケットを調整できるようになりました。 #81516 (Miсhael Stetsyuk).
- プロファイルイベント
PageCacheReadBytesを追加しました。#81742 (Kseniia Sumarokova)。 - ファイルシステムキャッシュの論理エラー「Having zero bytes but range is not finished」を修正。 #81868 (Kseniia Sumarokova).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
SELECT EXCEPTクエリを使用するパラメータ付きビューを修正。 #49447 を解決。 #57380 (Nikolay Degterinsky)。- Analyzer: JOIN でのカラム型の昇格後にカラムの PROJECTION 名を修正。#63345 をクローズ。#63519 (Dmitry Novik)。
- analyzer_compatibility_join_using_top_level_identifier が有効な場合に、カラム名の競合が発生するケースでの論理エラーを修正しました。 #75676 (Vladimir Cherkasov)。
allow_push_predicate_ast_for_distributed_subqueriesが有効な場合の、プッシュダウンされた述語における CTE の扱いを修正。#75647 および #79672 を修正。#77316(Dmitry Novik)。SYSTEM SYNC REPLICA LIGHTWEIGHT 'foo'が、指定したレプリカが存在しない場合でも成功を報告してしまう問題を修正しました。コマンドは、同期を試みる前に Keeper 内にレプリカが存在するかを正しく検証するようになりました。 #78405 (Jayme Bird).ON CLUSTERクエリのCONSTRAINTセクションでcurrentDatabase関数が使用されていた、非常に限定的なケースで発生していたクラッシュを修正しました。#78100 をクローズしました。#79070(pufit)。- サーバー間クエリにおける外部ロールの伝達処理を修正。#79099(Andrey Zvonov)。
- SingleValueDataGeneric で Field の代わりに IColumn を使用するようにしました。これにより、
Dynamic/Variant/JSON型に対するargMaxなど一部の集約関数で誤った戻り値が返される問題が修正されました。 #79166 (Pavel Kruglov)。 - Azure Blob Storage 向けの
use_native_copyおよびallow_azure_native_copy設定の適用を修正し、認証情報が一致する場合にのみネイティブコピーを使用するよう更新しました。これにより #78964 が解決されました。#79561 (Smita Kulkarni)。 - このカラムが相関付けられているかどうかをチェックする際に、カラムの起源スコープが不明な場合に発生していた論理エラーを修正しました。#78183 を修正しました。#79451 を修正しました。#79727(Dmitry Novik)。
- ColumnConst と Analyzer を使用した grouping sets で誤った結果が返される問題を修正しました。 #79743 (Andrey Zvonov).
- ローカルレプリカが古くなっている状態で分散テーブルを読み取る際に、ローカル分片の結果が重複する問題を修正しました。 #79761 (Eduard Karacharov).
- 負の符号ビットを持つ NaN のソート順を修正しました。 #79847 (Pervakov Grigorii)。
- GROUP BY ALL で
GROUPING句が考慮されなくなりました。 #79915 (Yarik Briukhovetskyi). TopK/TopKWeighted関数において、容量を使い切っていない場合でも過大な誤差を引き起こしていた、誤った状態のマージ処理を修正しました。#79939 (Joel Höner).azure_blob_storageオブジェクトストレージでもreadonly設定が尊重されるようにしました。 #79954 (Julia Kartseva).- バックスラッシュでエスケープされた文字を含む
match(column, '^…')を使用した際に発生していた、誤ったクエリ結果が返される問題およびメモリ不足によるクラッシュを修正しました。 #79969 (filimonov). - データレイクでの Hive パーティショニングを無効化。次の問題の一部を解決します: https://github.com/issues/assigned?issue=ClickHouse%7CClickHouse%7C79937。#80005(Daniil Ivanik)。
- ラムダ式を含むスキップインデックスが適用されない問題を修正しました。これは、索引定義内の高レベル関数がクエリ内のものと完全に一致する場合に発生していました。 #80025 (Nikolai Kochetov).
- レプリカがレプリケーションログから ATTACH_PART コマンドを実行してパーツをアタッチする際のメタデータバージョンを修正。 #80038 (Aleksei Filatov).
- Executable User Defined Functions (eUDF) の名前は、他の関数と異なり
system.query_logテーブルのused_functionsカラムに追加されていませんでした。このPRでは、リクエストで eUDF が使用されていた場合に、その eUDF の名前が追加されるようにしました。 #80073 (Kyamran)。 - Arrow フォーマットでの LowCardinality(FixedString) の論理エラーを修正しました。 #80156 (Pavel Kruglov).
- Merge エンジンからのサブカラムの読み取りを修正。 #80158 (Pavel Kruglov).
KeyConditionにおける数値型の比較に関する不具合を修正しました。#80207 (Yarik Briukhovetskyi)。- 遅延マテリアライゼーションがプロジェクションを持つテーブルに対して適用された場合に発生する AMBIGUOUS_COLUMN_NAME を修正しました。 #80251 (Igor Nikonov).
- 暗黙的なプロジェクション使用時に、LIKE 'ab_c%' のような文字列プレフィックスフィルタに対する COUNT の最適化が誤っていた不具合を修正。これにより #80250 が解決されます。 #80261 (Amos Bird)。
- MongoDB ドキュメント内の入れ子になった数値フィールドが文字列として誤ってシリアライズされる問題を修正しました。MongoDB から読み込んだドキュメントに対する最大ネスト深度の制限を撤廃しました。 #80289 (Kirill Nikiforov).
- Replicated データベースにおける RMT のメタデータ検査の厳密さを緩和しました。 #80296 をクローズしました。 #80298(Nikolay Degterinsky)。
- PostgreSQL ストレージ用の DateTime および DateTime64 のテキスト表現を修正しました。 #80301 (Yakov Olkhovskiy).
StripeLogテーブルでタイムゾーン付きのDateTimeを許可しました。これにより #44120 が解決されました。#80304(Alexey Milovidov)。- クエリプランのステップで行数が変化する場合は、非決定的関数を含む述語に対するフィルタのプッシュダウンを無効化しました。 #40273 を修正。 #80329(Nikolai Kochetov)。
- サブカラムを含むプロジェクションで発生する可能性のある論理エラーやクラッシュを修正。 #80333 (Pavel Kruglov).
ON式が自明な等価条件でない場合に、logical JOIN のフィルタープッシュダウン最適化によって発生していたNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#79647 と #77848 を修正しました。#80360(Nikolai Kochetov)。- パーティション化されたテーブルでキーを逆順に読み取る際に誤った結果が返される不具合を修正しました。これにより #79987 が修正されました。 #80448 (Amos Bird)。
- Nullable キーを持ち、optimize_read_in_order が有効なテーブルで発生していた誤ったソート順を修正しました。 #80515 (Pervakov Grigorii).
- SYSTEM STOP REPLICATED VIEW を使用して materialized view を一時停止していた場合に、リフレッシャブルmaterialized view の DROP が完了せずハングする問題を修正しました。 #80543 (Michael Kolupaev).
- 定数タプルを含む分散クエリで発生する「Cannot find column」エラーを修正。 #80596 (Yakov Olkhovskiy).
join_use_nullsを使用する分散テーブルでのshardNum関数を修正。 #80612 (János Benjamin Antal).- Merge エンジンで、一部のテーブルにのみ存在するカラムを読み込む際に誤った結果が返される問題を修正しました。 #80643 (Pavel Kruglov).
replxxのハングが原因となり得た SSH プロトコル違反を修正。 #80688 (Azat Khuzhin).- iceberg_history テーブル内のタイムスタンプが正しく記録されるようになりました。 #80711 (Melvyn Peignon).
- Dictionary の登録に失敗した場合に発生する可能性があったクラッシュを修正(
CREATE DICTIONARYがCANNOT_SCHEDULE_TASKで失敗すると、Dictionary レジストリ内にダングリングポインタが残る可能性があり、その後のクラッシュにつながっていた問題を修正)。 #80714 (Azat Khuzhin). - オブジェクトストレージ向けテーブル関数における、要素が1つだけの enum グロブパターンの扱いを修正しました。 #80716 (Konstantin Bogdanov).
- Tuple(Dynamic) と String を扱う比較関数の結果型が誤っていた問題を修正し、それにより発生していた論理エラーを解消しました。 #80728 (Pavel Kruglov).
- Unity Catalog 向けにサポートされていなかったデータ型
timestamp_ntzを追加。#79535 および #79875 を修正。#80740(alesapin)。 IN cteを含む分散クエリで発生するTHERE_IS_NO_COLUMNエラーを修正しました(#75032)。#80757(Nikolai Kochetov)。- 外部 ORDER BY においてファイル数が過剰になり、メモリ使用量が過大になる問題を修正。 #80777 (Azat Khuzhin).
- このPRにより #80742 がクローズされる可能性があります。 #80783 (zoomxi)。
- Kafka で、
get_member_id()が NULL からstd::stringを生成していたためにクラッシュする不具合を修正しました(おそらくブローカーへの接続に失敗した場合にのみ発生していた問題です)。 #80793 (Azat Khuzhin)。 - Kafka エンジンをシャットダウンする前に consumer の終了を正しく待機するよう修正しました(シャットダウン後にアクティブな consumer が残っていると、さまざまなデバッグアサーションが発火したり、テーブルが drop/detach された後もバックグラウンドで broker からデータを読み続けてしまう可能性があります)。 #80795 (Azat Khuzhin).
predicate-push-down最適化が原因で発生していたNOT_FOUND_COLUMN_IN_BLOCKを修正。#80443 を解決。#80834(Nikolai Kochetov)。- USING 句付き JOIN におけるテーブル関数内で、アスタリスク (
*) マッチャーを解決する処理の論理的な誤りを修正しました。 #80894 (Vladimir Cherkasov). - Iceberg メタデータファイルキャッシュにおけるメモリ使用量の計上を修正。 #80904 (Azat Khuzhin).
- Nullable なパーティションキー使用時の誤ったパーティショニングを修正。 #80913 (Pervakov Grigorii).
- 分散クエリで述語プッシュダウン(
allow_push_predicate_ast_for_distributed_subqueries=1)を有効にしている場合に、ソーステーブルがイニシエーターノード上に存在しないと発生していたTable does not existエラーの問題を修正しました。 #77281。 #80915(Nikolai Kochetov)。 - 名前付きウィンドウを用いるネストされた関数の論理エラーを修正。 #80926 (Pervakov Grigorii).
- Nullable および浮動小数点カラムに対する extremes の動作を修正。 #80970 (Pervakov Grigorii).
- system.tables からのクエリ実行時に発生し得るクラッシュを修正(メモリプレッシャー時に発生する可能性が高い)。 #80976 (Azat Khuzhin).
- ファイル拡張子から圧縮形式を判別するファイルに対する、truncate を伴う atomic rename 操作を修正しました。 #80979 (Pablo Marcos)。
- ErrorCodes::getName を修正。 #81032 (RinChanNOW)。
- Unity Catalog で、すべてのテーブルに対する権限がない場合にユーザーがテーブルを一覧表示できないバグを修正しました。この修正により、すべてのテーブルが正しく一覧表示され、アクセス制限されたテーブルを読み取ろうとすると例外がスローされます。 #81044 (alesapin).
SHOW TABLESクエリ実行時に、データレイクカタログからのエラーや予期しない応答を ClickHouse が無視するようになりました。これにより #79725 が修正されました。 #81046(alesapin)。- JSONExtract および JSON 型の解析で、整数値からの DateTime64 の解析を修正しました。 #81050 (Pavel Kruglov).
- スキーマ推論キャッシュに date_time_input_format 設定を反映するようにしました。 #81052 (Pavel Kruglov).
INSERTの実行開始後、カラムが送信される前にテーブルがDROPされた場合にクラッシュが発生する不具合を修正。 #81053 (Azat Khuzhin).- quantileDeterministic における未初期化値の使用の問題を修正。 #81062 (Azat Khuzhin)。
- metadatastoragefromdisk ディスクトランザクションでのハードリンク数の管理を修正し、テストを追加。 #81066 (Sema Checherinda).
- 他の関数と異なり、ユーザー定義関数 (UDF) の名前が
system.query_logテーブルに追加されていませんでした。このPRでは、リクエスト内でUDFが使用された場合に、そのUDF名を2つのカラムused_executable_user_defined_functionsまたはused_sql_user_defined_functionsのいずれかに追加するようにしました。 #81101 (Kyamran)。 - HTTP プロトコル経由でテキストフォーマット(
JSON、Valuesなど)を使用した INSERT 時に、Enumフィールドを省略した場合に発生する可能性があったToo large size ... passed to allocatorエラーやクラッシュを修正しました。 #81145 (Anton Popov). - non-MT の MV にプッシュされる INSERT ブロック内のスパースなカラムで発生する LOGICAL_ERROR を修正。 #81161 (Azat Khuzhin).
distributed_product_mode_local=localとクロスレプリケーションを併用した場合に発生するUnknown table expression identifierエラーを修正。 #81162 (Nikolai Kochetov)。- Parquet ファイルに対してフィルタリングを行った後の行数を誤ってキャッシュしていた問題を修正しました。 #81184 (Michael Kolupaev).
- 相対パスのキャッシュディレクトリを使用している場合の
fs cache max_size_to_total_space設定を修正しました。 #81237 (Kseniia Sumarokova). - Parquet 形式で const タプルまたは map を出力する際に clickhouse-local がクラッシュしていた問題を修正しました。 #81249 (Michael Kolupaev).
- ネットワーク経由で受信した配列オフセットを検証するようにしました。 #81269 (Azat Khuzhin).
- 空のテーブルを結合しウィンドウ関数を使用するクエリにおける特定のコーナーケースを修正しました。このバグにより並列ストリーム数が爆発的に増加し、その結果 OOM が発生していました。 #81299 (Alexander Gololobov)。
- datalake の Cluster 関数(
deltaLakeCluster、icebergClusterなど)に対する修正: (1) 古い analyzer でCluster関数を使用した際にDataLakeConfigurationで発生しうるセグメンテーションフォールトを修正; (2) 重複して行われていたデータレイクメタデータ更新(余分なオブジェクトストレージリクエスト)を解消; (3) フォーマットが明示的に指定されていない場合の、オブジェクトストレージでの冗長な一覧取得を修正(これはすでに非クラスターデータレイクエンジンでは行われていたもの)。#81300(Kseniia Sumarokova)。 force_restore_dataフラグで失われた Keeper メタデータを復元できるようにしました。 #81324 (Raúl Marín).- delta-kernel における region エラーを修正。#79914 の不具合に対応。#81353(Kseniia Sumarokova)。
- divideOrNull に対する誤った JIT を無効化。 #81370 (Raúl Marín).
- MergeTree テーブルでパーティションのカラム名が長い場合に発生する挿入エラーを修正しました。 #81390 (hy123q).
- #81957 にバックポート済み。マージ中に例外が発生した場合に
Aggregatorがクラッシュする可能性がある問題を修正しました。#81450(Nikita Taranov)。 - 複数のマニフェストファイルの内容をメモリに保持しないようにしました。 #81470 (Daniil Ivanik).
- バックグラウンドプール (
background_.*pool_size) のシャットダウン時に発生する可能性のあるクラッシュを修正しました。 #81473 (Azat Khuzhin). URLエンジンを使用してテーブルに書き込む際にNpyフォーマットで発生していた範囲外読み取りを修正しました。これにより #81356 が解決されます。#81502(Alexey Milovidov)。- Web UI が
NaN%を表示する可能性があります(JavaScript 特有の問題)。 #81507 (Alexey Milovidov)。 database_replicated_enforce_synchronous_settings=1設定有効時のDatabaseReplicatedの動作を修正しました。 #81564 (Azat Khuzhin)。- LowCardinality(Nullable(...)) 型のソート順を修正しました。 #81583 (Pervakov Grigorii)。
- サーバーは、ソケットからリクエストを完全に読み込んでいない場合、HTTP 接続を保持すべきではありません。 #81595 (Sema Checherinda).
- スカラーな相関サブクエリが、射影式の結果を Nullable として返すようにしました。相関サブクエリが空の結果セットを生成する場合の不具合を修正しました。 #81632 (Dmitry Novik)。
ReplicatedMergeTreeに対するATTACH実行時に発生するUnexpected relative path for a deduplicated partを修正。 #81647 (Azat Khuzhin)。- クエリ設定
use_iceberg_partition_pruningは、クエリコンテキストではなくグローバルコンテキストを使用しているため、Iceberg ストレージに対しては反映されません。デフォルト値が true であるため致命的ではありませんが、この PR で修正されます。 #81673 (Han Fei). - #82128 にバックポート: TTL 式で dict を使用している場合のマージ中に発生する「Context has expired」エラーを修正。#81690 (Azat Khuzhin).
- MergeTree の設定項目
merge_max_block_sizeが 0 ではない値であることを検証する処理を追加しました。 #81693 (Bharat Nallan). - ハングしてしまう
DROP VIEWクエリに関するclickhouse-localの問題を修正しました。 #81705 (Bharat Nallan)。 - 一部の場合における StorageRedis の JOIN を修正。 #81736 (Pervakov Grigorii)。
- old analyzer が有効な状態で空の
USING ()を指定した場合にConcurrentHashJoinがクラッシュする問題を修正。 #81754 (Nikita Taranov)。 - Keeper の修正: ログ内に不正なエントリがある場合、新しいログをコミットしないようにブロックします。以前は、リーダーが一部のログを誤って適用しても、フォロワーがダイジェスト不一致を検出して処理を中断するにもかかわらず、新しいログのコミットを続行していました。 #81780 (Antonio Andelic).
- スカラー相関付きサブクエリの処理中に必要なカラムが読み込まれない問題を修正しました。 #81716 を修正します。 #81805(Dmitry Novik)。
- 誰かが私たちのコードにKustoの記述を散在させていたので、整理しました。これにより #81643 がクローズされます。 #81885 (Alexey Milovidov)。
- 以前のバージョンでは、
/jsへのリクエストに対してサーバーが過剰な量のコンテンツを返していました。これにより #61890 が解決されました。#81895(Alexey Milovidov)。 - 以前は、
MongoDBテーブルエンジンの定義でhost:port引数にパスコンポーネントを含めることができましたが、このパスコンポーネントは暗黙的に無視されていました。MongoDB 連携機能では、そのようなテーブルの読み込みを拒否していました。この修正により、MongoDBエンジンが 5 つの引数を取る場合には、そのようなテーブルの読み込みを許可し、引数に含まれるデータベース名を使用したうえでパスコンポーネントを無視します。注意: この修正は、新規に作成されたテーブルやmongoテーブル関数を用いたクエリ、Dictionary ソースおよび named collections には適用されません。#81942 (Vladimir Cherkasov)。 - マージ処理中に例外が発生した際に
Aggregatorがクラッシュする可能性があった問題を修正しました。 #82022 (Nikita Taranov). arraySimilarityにおけるコピー&ペーストによる誤りを修正し、重みとしてのUInt32およびInt32の使用を禁止しました。テストとドキュメントを更新しました。 #82103 (Mikhail f. Shiryaev)。- サジェスチョンスレッドとメインクライアントスレッドの間で発生しうるデータレースを修正。 #82233 (Azat Khuzhin).
ビルド/テスト/パッケージングに関する改善
postgres16.9 を使用するようにしました。 #81437 (Konstantin Bogdanov).openssl3.2.4 を使用するようにしました。 #81438 (Konstantin Bogdanov)。abseil-cpp2025-01-27 を使用するように更新しました。 #81440 (Konstantin Bogdanov).mongo-c-driver1.30.4 を使用。 #81449 (Konstantin Bogdanov).krb51.21.3-final を使用します。 #81453 (Konstantin Bogdanov).orc2.1.2 を使用するようにしました。 #81455 (Konstantin Bogdanov)。grpc1.73.0 を使用するようにしました。 #81629 (Konstantin Bogdanov)。delta-kernel-rsを v0.12.1 に更新。 #81707 (Konstantin Bogdanov)。c-aresをv1.34.5に更新しました。 #81159 (Konstantin Bogdanov).- CVE-2025-5025 および CVE-2025-4947 に対処するため、
curlを 8.14 へアップグレードしました。 #81171 (larryluogit). libarchiveを 3.7.9 にアップグレードし、以下の脆弱性に対応しました:CVE-2024-20696 CVE-2025-25724 CVE-2024-48958 CVE-2024-57970 CVE-2025-1632 CVE-2024-48957 CVE-2024-48615。 #81174 (larryluogit).libxml2を 2.14.3 に更新しました。 #81187 (larryluogit).- vendored Rust のソースコードを
CARGO_HOMEにコピーしないようにしました。 #79560 (Konstantin Bogdanov). - 独自のエンドポイントに置き換えることで、Sentry ライブラリへの依存を排除しました。 #80236 (Alexey Milovidov)。
- Dependabot のアラートに対応するため、CI イメージ内の Python 依存関係を更新しました。 #80658 (Raúl Marín).
- 起動時に、Keeper 向けのフォルトインジェクションが有効な場合でもテストがより堅牢になるよう、Keeper からレプリケーテッド DDL の停止フラグを読み取る処理を再試行するようにしました。 #80964 (Alexander Gololobov).
- Ubuntu アーカイブの URL で https を使用するように変更。 #81016 (Raúl Marín).
- テストイメージの Python 依存関係を更新しました。 #81042 (dependabot[bot])。
- Nix ビルド向けに
flake.nixを導入しました。 #81463 (Konstantin Bogdanov). - ビルド時に
delta-kernel-rsがネットワーク アクセスを必要とする問題を修正しました。#80609 をクローズしました。#81602(Konstantin Bogdanov)。記事 A Year of Rust in ClickHouse もご覧ください。
ClickHouse 25.5 リリース、2025-05-22
後方互換性のない変更
- 関数
geoToH3は、他の幾何関数と同様に、入力を (lat, lon, res) の順序で受け取るようになりました。以前と同じ順序 (lon, lat, res) を維持したいユーザーは、settinggeotoh3_argument_order = 'lon_lat'を設定できます。#78852(Pratima Patel)。 - ファイルシステムキャッシュの設定項目
allow_dynamic_cache_resizeを追加しました。デフォルトはfalseで、ファイルシステムキャッシュの動的リサイズを許可するかどうかを制御します。理由: 特定の環境(ClickHouse Cloud)では、すべてのスケーリングイベントはプロセスの再起動によって行われるため、この機能を明示的に無効化して動作をより厳密に制御し、安全策としたいためです。この PR は後方互換性のない変更としてマークされています。以前のバージョンでは、特別な設定なしに動的キャッシュリサイズがデフォルトで有効になっていたためです。#79148(Kseniia Sumarokova)。 - レガシー索引型
annoyおよびusearchのサポートを削除しました。これらは長い間スタブであり、レガシー索引を使用しようとするすべての試みは、いずれにせよエラーを返していました。まだannoyおよびusearchの索引を保持している場合は、削除してください。#79802(Robert Schulze)。 - サーバー設定
format_alter_commands_with_parenthesesを削除しました。この設定は 24.2 で導入され、デフォルトでは無効化されていましたが、25.2 でデフォルト有効化されました。新しいフォーマットをサポートしない LTS バージョンが存在しないため、この設定を削除できます。#79970(János Benjamin Antal)。 DeltaLakeストレージのdelta-kernel-rs実装をデフォルトで有効化しました。#79541(Kseniia Sumarokova)。URLからの読み取りで複数回のリダイレクトが発生する場合、設定enable_url_encodingはチェーン内のすべてのリダイレクトに対して正しく適用されます。#79563(Shankar Iyer)。設定enble_url_encodingのデフォルト値は、現在falseに設定されています。#80088(Shankar Iyer)。
新機能
- WHERE 句でスカラー相関サブクエリをサポートしました。#6697 をクローズ。#79600(Dmitry Novik)。単純なケースにおいて、射影リストでの相関サブクエリをサポートしました。#79925(Dmitry Novik)。#76078(Dmitry Novik)。これで TPC-H テストスイートを 100% カバーできるようになりました。
- ベクトル類似度索引を使用したベクトル検索機能が、これまでの実験的段階からベータ版になりました。 #80164 (Robert Schulze)。
Parquetフォーマットで geo データ型をサポートしました。これにより #75317 がクローズされました。#79777 (scanhex12).- インデックス作成および検索のために部分文字列を抽出する堅牢なアルゴリズム「sparse-ngrams」を計算するための新しい関数
sparseGrams、sparseGramsHashes、sparseGramsHashesUTF8、sparseGramsUTF8を追加しました。 #79517 (scanhex12)。 clickhouse-local(およびその短縮エイリアス名であるch)は、処理対象の入力データが存在する場合に、暗黙的なFROM tableを使用するようになりました。これにより #65023 が解決されました。また、通常のファイルを処理する際に--input-formatが指定されていない場合、clickhouse-localでフォーマットの自動判別が行われるようになりました。#79085(Alexey Milovidov)。stringBytesUniqとstringBytesEntropy関数を追加し、ランダムまたは暗号化されている可能性があるデータを検索できるようにしました。 #79350 (Sachin Kumar Singh)。- Base32 形式のエンコードおよびデコード用の関数を追加しました。 #79809 (Joanna Hulboj)。
getServerSettingおよびgetMergeTreeSetting関数を追加。#78318 をクローズ。#78439 (NamNguyenHoai)。version-hint.textファイルを活用するための新しいiceberg_enable_version_hint設定を追加しました。#78594(Arnaud Briche)。LIKEキーワードでフィルタリングして、データベース内の特定のテーブルだけを TRUNCATE できるようになりました。 #78597 (Yarik Briukhovetskyi).MergeTreeファミリーのテーブルで_part_starting_offset仮想カラムをサポートしました。このカラムは、現在のパーツリストに基づいてクエリ時に計算される、それ以前のすべてのパーツにおける累積行数を表します。累積値はクエリ実行全体を通して保持され、パーツのプルーニング後も有効なままです。この動作をサポートするため、関連する内部ロジックをリファクタリングしました。#79417 (Amos Bird)。- 右辺の引数がゼロの場合に NULL を返す関数
divideOrNull,moduloOrNull,intDivOrNull,positiveModuloOrNullを追加。#78276 (kevinyhzou). - ClickHouse のベクター検索は、プリフィルタリングとポストフィルタリングの両方をサポートし、より細かく制御できる関連設定を提供するようになりました (issue #78161). #79854 (Shankar Iyer).
icebergHash関数とicebergBucket関数を追加しました。bucket transfomでパーティション化されたIcebergテーブルにおけるデータファイルのプルーニングをサポートします。#79262(Daniil Ivanik)。
実験的機能
- 新しい
Time/Time64データ型を追加しました:Time(HHH:MM:SS) とTime64(HHH:MM:SS.<fractional>)、および他のデータ型と相互運用するためのいくつかの基本的なキャスト関数・関連関数を追加しました。また、キャスト関数で関数 toTime が必要になるため、既存の関数名 toTime を toTimeWithFixedDate に変更しました。 #75735 (Yarik Briukhovetskyi). - Iceberg データレイク向けの Hive metastore カタログを追加しました。 #77677 (scanhex12).
full_text型の索引の名称をginに変更しました。これは PostgreSQL や他のデータベースでより一般的な用語に従うものです。full_text型の既存の索引は引き続き読み込み可能ですが、検索で使用しようとすると例外をスローし、その代わりにgin索引の使用を提案します。 #79024 (Robert Schulze).
パフォーマンスの向上
- Compact パーツ形式を変更し、各サブストリームごとにマークを保存して個々のサブカラムを読み取れるようにしました。古い Compact 形式は読み取りでは引き続きサポートされており、書き込みでも MergeTree の設定
write_marks_for_substreams_in_compact_partsを使用して有効化できます。compact パーツのストレージが変更されるため、より安全にアップグレードできるよう、デフォルトでは無効になっています。今後のいずれかのリリースでデフォルト有効になります。#77940(Pavel Kruglov)。 - サブカラムを含む条件式を PREWHERE 句に移動できるようにしました。 #79489 (Pavel Kruglov).
- セカンダリインデックスの式を複数のグラニュールに対して同時に評価することで、高速化しました。 #64109 (Alexey Milovidov).
compile_expressions(通常の式フラグメント向けの JIT コンパイラ)をデフォルトで有効化しました。これにより、#51264 と #56386 および #66486 が解決されました。#79907(Alexey Milovidov)。- 新しい設定
use_skip_indexes_in_final_exact_modeが追加されました。ReplacingMergeTreeテーブルに対するクエリに FINAL 句が含まれている場合、スキップ索引に基づいてテーブル範囲のみを読み込むと、不正確な結果が返される可能性があります。この設定により、スキップ索引で返された主キー範囲と重複する新しいパーツを走査することで、正しい結果が返されることを保証します。無効化するには 0、有効化するには 1 を設定します。 #78350 (Shankar Iyer). - オブジェクトストレージクラスターのテーブル関数(例:
s3Cluster)は、キャッシュの局所性を改善するため、コンシステントハッシュに基づいて読み取り対象のファイルをレプリカに割り当てるようになりました。 #77326 (Andrej Hoos). S3Queue/AzureQueueでINSERTの処理を並列実行できるようにし、パフォーマンスを改善しました(キュー設定parallel_inserts=trueで有効化可能)。これまでは S3Queue/AzureQueue はパイプラインの最初の部分(ダウンロード、パース)のみ並列化でき、INSERTは単一スレッドでした。また、INSERTがほぼ常にボトルネックとなっていました。現在ではprocessing_threads_numに対してほぼ線形にスケールします。#77671(Azat Khuzhin)。S3Queue/AzureQueue におけるmax_processed_files_before_commitの上限適用がより公平になりました。#79363(Azat Khuzhin)。- 右側テーブルのサイズがしきい値未満の場合に
hashアルゴリズムへフォールバックするためのしきい値(parallel_hash_join_threshold設定で制御)を導入しました。 #76185 (Nikita Taranov)。 - 並列レプリカが有効な場合の読み取りタスクのサイズを決定する際に、レプリカ数を基準として使用するようにしました。これにより、読み取るデータ量がそれほど大きくない場合でも、レプリカ間での作業分散がより良好になります。 #78695 (Nikita Taranov)。
- 分散集約の最終段階で
uniqExact状態を並列にマージできるようにしました。 #78703 (Nikita Taranov)。 - キー付きの集約における
uniqExact状態の並列マージで発生し得るパフォーマンス低下を修正しました。 #78724 (Nikita Taranov)。 - Azure Storage への List Blobs API 呼び出し回数を削減しました。 #78860 (Julia Kartseva).
- 並列レプリカを使用した分散 INSERT SELECT のパフォーマンスを改善しました。 #79441 (Azat Khuzhin).
LogSeriesLimiterがインスタンス生成のたびにクリーンアップを行わないようにし、高い並行性のシナリオにおけるロック競合とパフォーマンス低下を回避しました。 #79864 (filimonov).- 単純な COUNT の最適化によりクエリを高速化しました。 #79945 (Raúl Marín).
- 一部の
Decimal演算に対するインライン展開を改善しました。 #79999 (Konstantin Bogdanov). input_format_parquet_bloom_filter_push_downのデフォルト値を true に設定しました。また、SETTINGS の変更履歴における誤りを修正しました。 #80058 (Alexey Milovidov)。- すべての行が削除されるパーツに対する
ALTER ... DELETEmutation を最適化しました。このような場合、mutation を実行せず、元のパーツの代わりに空のパーツを作成するようになりました。#79307 (Anton Popov)。 - 可能な場合、Compact パーツへの挿入時にブロックを余分にコピーしないようにしました。 #79536 (Pavel Kruglov).
- 入力フォーマットで作成されるブロックのサイズをバイト単位で制限する設定
input_format_max_block_size_bytesを追加しました。行に大きな値が含まれる場合のデータインポート時の過剰なメモリ使用を抑制するのに役立ちます。 #79495 (Pavel Kruglov)。 - スレッドおよび async_socket_for_remote/use_hedge_requests のガードページを削除しました。
FiberStackにおける割り当て方式をmmapからaligned_allocに変更しました。この変更により VMA が分割されるため、高負荷時には vm.max_map_count に到達する可能性があります。 #79147 (Sema Checherinda). - Parallel Replicas を用いた遅延マテリアライズ。 #79401 (Igor Nikonov).
改良
- 設定
lightweight_deletes_sync = 0、apply_mutations_on_fly = 1を使用して、論理削除を動的に適用できるようにしました。 #79281 (Anton Popov). - 端末上で Pretty フォーマットのデータを表示している場合、後続のブロックが同じカラム幅を持つときは、カーソルを上に移動して前のブロックから続けて表示し、前のブロックと連結できるようになりました。これにより #79333 がクローズされました。この機能は新しい設定項目
output_format_pretty_glue_chunksで制御されます。 #79339 (Alexey Milovidov)。 isIPAddressInRange関数を拡張し、String、IPv4、IPv6、Nullable(String)、Nullable(IPv4)、Nullable(IPv6)データ型をサポートするようにしました。 #78364 (YjyJeff)。PostgreSQLエンジンのコネクションプーラー設定を動的に変更できるようになりました。 #78414 (Samay Sharma).- 通常の PROJECTION で
_part_offsetを指定可能にしました。これは PROJECTION 用インデックスを構築するための最初のステップです。#58224 と組み合わせて使用でき、#63207 の改善にも役立ちます。 #78429 (Amos Bird). system.named_collectionsに新しいカラム(create_queryとsource)を追加しました。 #78179 をクローズしました。 #78582(MikhailBurdukov)。- システムテーブル
system.query_condition_cacheに新しいフィールドconditionを追加しました。このフィールドには、クエリ条件キャッシュのキーとして使用されるハッシュの元となるプレーンテキストの条件式が格納されます。 #78671 (Robert Schulze). - ベクトル類似度インデックスを
BFloat16カラム上でも作成できるようになりました。 #78850 (Robert Schulze)。 - ベストエフォートの
DateTime64解析で、小数部を含む UNIX タイムスタンプをサポートするようになりました。 #78908 (Pavel Kruglov). - ストレージ
DeltaLakeの delta-kernel 実装において、カラムマッピングモードの不具合を修正し、スキーマ進化向けのテストを追加。 #78921 (Kseniia Sumarokova)。 - Values フォーマットでの
Variantカラムへの insert 時に、値の変換をより適切に行うよう改善しました。 #78923 (Pavel Kruglov). tokens関数が拡張され、追加の「tokenizer」引数およびその他の tokenizer 固有の引数を受け取れるようになりました。#79001(Elmi Ahmadov)。SHOW CLUSTERステートメントは、引数で指定されたマクロ(存在する場合)を展開するようになりました。 #79006 (arf42)。- ハッシュ関数で、配列、タプル、マップ内の
NULLがサポートされるようになりました(issues #48365 および #48623)。#79008(Michael Kolupaev)。 - cctz を 2025a に更新しました。 #79043 (Raúl Marín)。
- UDF の stderr のデフォルト処理を "log_last" に変更。利便性が向上します。 #79066 (Alexey Milovidov).
- Web UI でタブの取り消し(Undo)が可能になりました。これにより #71284 が解決されました。#79084(Alexey Milovidov)。
recoverLostReplicaの実行中に設定を削除するようにし、次の PR と同様の動作としました: https://github.com/ClickHouse/ClickHouse/pull/78637。 #79113 (Nikita Mikhaylov)。- Parquet インデックスのプルーニングをプロファイリングするためのプロファイルイベント
ParquetReadRowGroupsとParquetPrunedRowGroupsを追加しました。 #79180 (flynn). - クラスタ上のデータベースに対する
ALTERをサポート。 #79242 (Tuan Pham Anh). - QueryMetricLog の統計収集で取りこぼされた実行を明示的にスキップするようにし、そうしない場合にログが現在時刻に追いつくまで長時間かかってしまう問題を回避します。 #79257 (Mikhail Artemenko).
Arrowベースのフォーマット読み取りに対する細かな最適化をいくつか行いました。 #79308 (Bharat Nallan).allow_archive_path_syntaxの設定が誤って experimental としてマークされていました。experimental な設定がデフォルトで有効になることを防ぐためのテストを追加しました。 #79320 (Alexey Milovidov).- ページキャッシュ設定をクエリごとに調整可能にしました。これは、実験をより高速に行えるようにするとともに、高スループットかつ低レイテンシーなクエリ向けにきめ細かいチューニングを行えるようにするためです。 #79337 (Alexey Milovidov).
- 典型的な 64 ビットハッシュのように見える数値については、Pretty 形式で数値ヒントを出力しないようにしました。これにより #79334 が解決されました。#79338(Alexey Milovidov)。
- 高度なダッシュボード上のグラフの色は、対応するクエリのハッシュから計算されるようになりました。これにより、ダッシュボードをスクロールしている際にグラフを識別して見つけやすくなります。 #79341 (Alexey Milovidov).
- 非同期メトリック
FilesystemCacheCapacityを追加しました。cache仮想ファイルシステムの総容量を表し、グローバルなインフラストラクチャ監視に役立ちます。 #79348 (Alexey Milovidov)。 - system.parts へのアクセスを最適化し、要求された場合にのみカラム/索引のサイズを読み取るようにしました。 #79352 (Azat Khuzhin).
'SHOW CLUSTER <name>'クエリに対して、すべてのフィールドではなく関連するフィールドのみを計算するようにしました。 #79368 (Tuan Pham Anh).DatabaseCatalog向けにストレージ設定を指定可能にしました。 #79407 (Kseniia Sumarokova).DeltaLakeでローカルストレージをサポートしました。 #79416 (Kseniia Sumarokova).- delta-kernel-rs を有効化するためのクエリレベルの設定
allow_experimental_delta_kernel_rsを追加しました。 #79418 (Kseniia Sumarokova). - Azure/S3 BLOB ストレージからの BLOB 一覧取得時に発生し得た無限ループを修正しました。 #79425 (Alexander Gololobov).
- ファイルシステムキャッシュの設定
max_size_ratio_to_total_spaceを追加しました。 #79460 (Kseniia Sumarokova). clickhouse-benchmarkのreconnectオプションを再構成し、再接続回数に応じて 0、1、または N を値として指定できるようにしました。 #79465 (Sachin Kumar Singh).- 異なる
plain_rewritableディスク上にあるテーブルに対してもALTER TABLE ... MOVE|REPLACE PARTITIONが許可されるようになりました。 #79566 (Julia Kartseva)。 - 参照ベクトルが
Array(BFloat16)型の場合にも、ベクトル類似度の索引が使用されるようになりました。 #79745 (Shankar Iyer). - last_error_message、last_error_trace、および query_id を system.error_log テーブルに追加。関連チケット #75816。#79836(Andrei Tinikov)。
- クラッシュレポートの送信を既定で有効化しました。これはサーバーの設定ファイルで無効にできます。 #79838 (Alexey Milovidov).
- システムテーブル
system.functionsに、各関数が初めて導入された ClickHouse のバージョンが表示されるようになりました。 #79839 (Robert Schulze)。 access_control_improvements.enable_user_name_access_typeSETTING を追加しました。この SETTING により、https://github.com/ClickHouse/ClickHouse/pull/72246 で導入されたユーザー/ロールごとの厳密な権限付与を有効化/無効化できます。25.1 より古いレプリカを含むクラスターを使用している場合は、この SETTING を無効にすることを検討してください。#79842(pufit)。ASTSelectWithUnionQuery::clone()メソッドの適切な実装において、is_normalizedフィールドも考慮されるようになりました。これにより #77569 の問題の解決に役立つ可能性があります。 #79909 (Nikita Mikhaylov)。- EXCEPT 演算子を含む一部のクエリにおける一貫性のない整形を修正しました。EXCEPT 演算子の左辺が
*で終わる場合、整形後のクエリから括弧が失われ、その結果EXCEPT修飾子付きの*として解釈されてしまいます。これらのクエリは fuzzer によって検出されたものであり、実際に利用される可能性は低いと考えられます。この変更により #79950 がクローズされました。#79952(Alexey Milovidov)。 JSON型のパースを、バリアントのデシリアライズ順序をキャッシュすることでわずかに改善しました。 #79984 (Pavel Kruglov).s3_slow_all_threads_after_network_error設定を追加。 #80035 (Vitaly Baranov)。- マージ対象として選択されたパーツに関するログレベルが誤って Information レベルになっていました。#80061 をクローズしました。#80062(Alexey Milovidov)。
- trace-visualizer: ツールチップとステータスメッセージに runtime/share を追加。 #79040 (Sergei Trifonov).
- trace-visualizer: ClickHouse サーバーからのデータ読み込みをサポートしました。 #79042 (Sergei Trifonov).
- 失敗したマージに関するメトリクスを追加。 #79228 (Miсhael Stetsyuk).
clickhouse-benchmarkは、最大反復回数が指定されている場合、その最大反復回数に対する割合を表示します。 #79346 (Alexey Milovidov).- system.parts テーブルの可視化ツールを追加。 #79437 (Sergei Trifonov).
- クエリのレイテンシーを解析するためのツールを追加。 #79978 (Sergei Trifonov).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- パーツ内で欠落しているカラムの名称変更処理を修正。 #76346 (Anton Popov).
- materialized view が開始されるタイミングが遅くなり、例えば、その materialized view にストリーミングする Kafka テーブルより後に開始してしまうことがありました。 #72123 (Ilya Golshtein).
analyzer有効時のVIEW作成におけるSELECTクエリの書き換えを修正。#75956 をクローズ。#76356(Dmitry Novik)。- サーバーからの
async_insert設定の適用処理(apply_settings_from_server経由)を修正(以前はクライアント側でUnknown packet 11 from serverエラーが発生してしまっていた)。 #77578 (Azat Khuzhin). - Replicated データベースにおいて、新たに追加されたレプリカでリフレッシャブルmaterialized view が動作しない問題を修正しました。 #77774 (Michael Kolupaev).
- リフレッシャブルmaterialized viewによりバックアップが壊れる不具合を修正しました。 #77893 (Michael Kolupaev).
transformにおいて古い条件で誤ってスローされていた論理エラーを修正。 #78247 (Yarik Briukhovetskyi).- 一部のケースでアナライザ使用時にセカンダリ索引が適用されていなかった問題を修正しました。#65607 および #69373 を修正しました。 #78485 (Nikolai Kochetov)。
- HTTP プロトコルで圧縮を有効にした場合の profile events(
NetworkSendElapsedMicroseconds/NetworkSendBytes)のダンプ処理を修正しました(誤差がバッファサイズ(通常は約 1 MiB)を超えないようにしました)。 #78516 (Azat Khuzhin). - JOIN ... USING に ALIAS カラム が含まれている場合に LOGICAL_ERROR を発生させていたアナライザを修正し、適切なエラーを返すようにしました。 #78618 (Yakov Olkhovskiy).
- analyzer を修正:
SELECTに位置引数が含まれている場合にCREATE VIEW ... ON CLUSTERが失敗していた不具合を解消。 #78663 (Yakov Olkhovskiy)。 SELECTにスカラーサブクエリが含まれている場合に、スキーマを自動推論するテーブル関数へのINSERT SELECTで発生するBlock structure mismatchエラーを修正。 #78677 (Pervakov Grigorii)。- analyzer を修正: 分散テーブルに対して prefer_global_in_and_join=1 を有効にしている場合、SELECT クエリ内の
in関数がglobalInに置き換えられるようにしました。 #78749 (Yakov Olkhovskiy). MongoDBエンジンを使用するテーブル、またはmongodbテーブル関数を参照する複数種類のSELECTクエリを修正しました。対象には、WHERE句内で定数値の暗黙的な型変換が行われるクエリ(例:WHERE datetime = '2025-03-10 00:00:00')や、LIMITおよびGROUP BYを含むクエリが含まれます。以前は、これらのクエリが誤った結果を返す可能性がありました。 #78777 (Anton Popov).- 異なる JSON 型間の変換を修正しました。現在は、String への/からの変換を介した単純なキャストで行われます。パフォーマンスは低下しますが、結果は 100% 正確です。 #78807 (Pavel Kruglov)。
- Dynamic 型から Interval 型への変換時の論理エラーを修正。 #78813 (Pavel Kruglov).
- JSON パースエラー時のカラムのロールバック処理を修正。 #78836 (Pavel Kruglov).
- JOIN において定数エイリアスカラムを使用した場合に発生する「bad cast」エラーを修正。 #78848 (Vladimir Cherkasov).
- materialized view において、ビューと対象テーブルで型が異なるカラムに対する PREWHERE 句を許可しないようにしました。 #78889 (Pavel Kruglov).
- Variantカラムの不正なバイナリデータを解析する際に発生する論理エラーを修正。 #78982 (Pavel Kruglov).
- Parquet バッチサイズが 0 に設定されている場合は例外をスローするようにしました。以前は output_format_parquet_batch_size = 0 のとき、ClickHouse がハングしていましたが、この問題を修正しました。 #78991 (daryawessely).
- コンパクトパーツにおける basic format を用いた variant discriminator のデシリアライズを修正しました。この問題は https://github.com/ClickHouse/ClickHouse/pull/55518 で導入されました。 #79000 (Pavel Kruglov)。
complex_key_ssd_cache型の辞書は、ゼロ以下のblock_sizeおよびwrite_buffer_sizeパラメータを拒否するようになりました(issue #78314)。#79028(Elmi Ahmadov)。- SummingMergeTree で非集約カラムに対して Field を使用しないでください。SummingMergeTree で使用される Dynamic/Variant 型との組み合わせにより、予期しないエラーが発生する可能性があります。 #79051 (Pavel Kruglov).
- analyzer においてヘッダーが異なる Distributed 宛先テーブルを使用する materialized view からの読み取りの問題を修正しました。#79059(Pavel Kruglov)。
- バッチ挿入を行うテーブルに対して
arrayUnion()が余分な(誤った)値を返すバグを修正しました。#75057 を修正。#79079(Peter Nguyen)。 OpenSSLInitializer内のセグメンテーションフォルトを修正し、#79092 をクローズ。 #79097 (Konstantin Bogdanov).- S3 の ListObject に対して常に prefix を設定するようにしました。 #79114 (Azat Khuzhin).
- バッチ挿入を行うテーブルで arrayUnion() が余分な(誤った)値を返していたバグを修正しました(#79157)。#79158(Peter Nguyen)。
- フィルタープッシュダウン後に発生する論理エラーを修正。 #79164 (Pervakov Grigorii)。
- HTTP ベースのエンドポイントで使用される delta-kernel 実装を用いた DeltaLake テーブルエンジンの問題を修正し、NOSIGN を修正しました。 #78124 をクローズ。 #79203(Kseniia Sumarokova)。
- Keeper の修正: 失敗したマルチリクエストに対して watch が発火しないように修正しました。 #79247 (Antonio Andelic).
INで Dynamic 型および JSON 型の使用を禁止しました。現在のINの実装では、それらを使用すると不正確な結果につながる可能性があります。これらの型に対するINの適切なサポートは複雑であり、将来対応が行われる可能性があります。#79282 (Pavel Kruglov)。- JSON 型解析時の重複パスチェックを修正。 #79317 (Pavel Kruglov)。
- SecureStreamSocket の接続に関する問題を修正。 #79383 (Konstantin Bogdanov).
- データを含む plain_rewritable ディスクの読み込みの不具合を修正。#79439(Julia Kartseva)。
- MergeTree の Wide パーツにおける動的サブカラム検出でクラッシュする問題を修正。 #79466 (Pavel Kruglov)。
- テーブル名の長さは初回の CREATE クエリに対してのみ検証するようにしました。下位互換性の問題を避けるため、後続の CREATE については検証しません。 #79488 (Miсhael Stetsyuk).
- スパースなカラムを持つテーブルで、複数のケースにおいて発生していた
Block structure mismatchエラーを修正しました。 #79491 (Anton Popov)。 - 「Logical Error: Can't set alias of * of Asterisk on alias」というエラーが発生する2つのケースを修正。#79505 (Raúl Marín).
- Atomic データベースの名前変更時に誤ったパスを使用していた不具合を修正しました。 #79569 (Tuan Pham Anh).
- JSON カラムを他のカラムと併用した ORDER BY の動作を修正。 #79591 (Pavel Kruglov).
use_hedged_requestsとallow_experimental_parallel_reading_from_replicasが両方とも無効になっている場合に、remote からの読み取り時に結果が重複する問題を修正。 #79599 (Eduard Karacharov)。- Unity Catalog 使用時に delta-kernel 実装で発生するクラッシュを修正。 #79677 (Kseniia Sumarokova).
- 自動検出クラスタ向けマクロの解決に対応しました。 #79696 (Anton Ivashkin).
- 不正な
page_cache_limitsの設定を適切に処理するようにしました。 #79805 (Bharat Nallan). - 可変長の書式指定子(例:
%W、曜日を表すMondayやTuesdayなど)の後に複合書式指定子(複数の要素を一度に出力する書式指定子。例:%D、アメリカ式日付05/04/25)が続く場合に誤った結果となっていた SQL 関数formatDateTimeの動作を修正しました。 #79835 (Robert Schulze)。 - IcebergS3 は COUNT 関数の最適化をサポートしていますが、IcebergS3Cluster はサポートしていません。その結果、クラスターモードでの count() の結果がレプリカ数の倍数になる場合があります。 #79844 (wxybear)
- 遅延マテリアライゼーションを使用しており、PROJECTION が適用されるまでクエリ実行にカラムが一切使用されない場合に発生する AMBIGUOUS_COLUMN_NAME エラーを修正しました。例: SELECT * FROM t ORDER BY rand() LIMIT 5。 #79926 (Igor Nikonov)。
- クエリ
CREATE DATABASE datalake ENGINE = DataLakeCatalog(\'http://catalog:8181\', \'admin\', \'password\')に含まれるパスワードをマスクしました。 #79941 (Han Fei). - JOIN USING でエイリアスを指定できるようになりました。カラム名が変更されている場合(例:ARRAY JOIN によるリネーム)に、このエイリアスを指定します。 #73707 を修正。 #79942(Nikolai Kochetov)。
- UNION を含む materialized view が新しいレプリカ上でも正しく動作するようにしました。 #80037 (Samay Sharma).
- SQL 関数
parseDateTimeの書式指定子%eは、これまでは先頭をスペースでパディングした日(例:3)のみを受け付けていましたが、現在は 1 桁の日(例:3)も認識するようになりました。これにより、MySQL と互換性のある動作になります。以前の動作を保持したい場合は、設定parsedatetime_e_requires_space_padding = 1を有効にしてください。(issue #78243)。 #80057(Robert Schulze)。 - ClickHouse のログに出力されていた
Cannot find 'kernel' in '[...]/memory.stat'という警告を修正しました(issue #77410)。 #80129(Robert Schulze)。 - スタックオーバーフローによるクラッシュを防ぐために、FunctionComparison 内でスタックサイズをチェックするようにしました。 #78208 (Julia Kartseva).
system.workloadsからの SELECT クエリ実行時に発生するレースコンディションを修正。 #78743 (Sergei Trifonov)。- 修正: 分散クエリでの遅延マテリアライズを修正。 #78815 (Igor Nikonov).
Array(Bool)からArray(FixedString)への変換の不具合を修正。 #78863 (Nikita Taranov)- Parquet バージョンの選択をより分かりやすくしました。 #78818 (Michael Kolupaev).
ReservoirSamplerの自己マージ処理を修正。 #79031 (Nikita Taranov).- クライアントコンテキスト内での挿入テーブルの格納を修正。 #79046 (Pervakov Grigorii).
AggregatingSortedAlgorithmとSummingSortedAlgorithmのデータメンバーの破棄順序を修正しました。 #79056 (Nikita Taranov).enable_user_name_access_typeがDEFINERアクセスタイプに影響を与えないようにしました。 #80026 (pufit).systemデータベースのメタデータが Keeper 上にある場合、systemデータベースへのクエリがハングすることがある問題を修正。 #79304 (Mikhail Artemenko)。
ビルド/テスト/パッケージングの改善
chcacheバイナリを毎回再ビルドするのではなく、ビルド済みのものを再利用できるようにしました。 #78851 (János Benjamin Antal).- NATS の一時停止待ち処理を追加しました。 #78987 (Dmitry Novikov).
- ARM ビルドが誤って amd64compat として公開されていた問題を修正しました。 #79122 (Alexander Gololobov).
- OpenSSL 向けに事前生成されたアセンブリを使用するようにしました。 #79386 (Konstantin Bogdanov).
clang20を用いたビルドが可能になるよう修正しました。 #79588 (Konstantin Bogdanov).chcache: Rust 製キャッシュ機能のサポートを追加しました。 #78691 (Konstantin Bogdanov).zstdのアセンブリファイルにアンワインド情報を追加しました。 #79288 (Michael Kolupaev).
ClickHouse リリース 25.4(2025-04-22)
後方互換性のない変更
allow_materialized_view_with_bad_selectがfalseの場合、materialized view のすべてのカラムがターゲットテーブルと一致しているかをチェックするようにしました。 #74481 (Christoph Wurm).dateTruncが負の Date/DateTime 引数で使用される場合の動作を修正しました。 #77622 (Yarik Briukhovetskyi).- レガシーな
MongoDB連携を削除しました。サーバー設定use_legacy_mongodb_integrationは廃止され、現在は何も行いません。 #77895 (Robert Schulze). SummingMergeTreeの検証ロジックを強化し、パーティションキーまたはソートキーで使用されているカラムでは集約をスキップするようにしました。 #78022 (Pervakov Grigorii).
新機能
- ワークロード向けに CPU スロットスケジューリング機能を追加しました。詳細はドキュメントを参照してください。#77595(Sergei Trifonov)。
--pathコマンドライン引数を指定すると、clickhouse-localは再起動後もデータベースを保持するようになりました。これにより #50647 および #49947 が解決されました。#71722(Alexey Milovidov)。- サーバーが過負荷状態にある場合、クエリを拒否します。この判断は、待機時間(
OSCPUWaitMicroseconds)とビジー時間(OSCPUVirtualTimeMicroseconds)の比率に基づいて行われます。この比率がmin_os_cpu_wait_time_ratio_to_throwとmax_os_cpu_wait_time_ratio_to_throwの間にある場合(これらはクエリレベルの設定です)、クエリは一定の確率で破棄されます。 #63206 (Alexey Katsman)。 Icebergのタイムトラベル: 特定のタイムスタンプ時点の状態としてIcebergテーブルをクエリできるようにするための設定を追加。 #71072 (Brett Hoerner). #77439 (Daniil Ivanik).Icebergメタデータ用のインメモリキャッシュ。クエリの高速化のために、マニフェストファイルとそのリスト、およびmetadata.jsonを保持します。 #77156 (Han Fei).- Azure Blob Storage 向けに
DeltaLakeテーブルエンジンをサポートしました。#68043 を修正しました。#74541(Smita Kulkarni)。 - デシリアライズされたベクトル類似度索引向けのインメモリキャッシュを追加しました。これにより、近似最近傍 (ANN) 検索クエリの繰り返し実行が高速化されます。新しいキャッシュのサイズは、サーバー設定
vector_similarity_index_cache_sizeおよびvector_similarity_index_cache_max_entriesで制御されます。この機能は、従来のリリースにあったスキップ索引キャッシュ機能を置き換えます。#77905(Shankar Iyer)。 - DeltaLake でパーティションプルーニングをサポートしました。 #78486 (Kseniia Sumarokova).
- 読み取り専用の
MergeTreeテーブルに対するバックグラウンドリフレッシュをサポートし、無制限の数の分散リーダーから更新可能テーブルへのクエリ実行を可能にします(ClickHouse ネイティブなデータレイク)。 #76467 (Alexey Milovidov). - データベースのメタデータファイルを保存するためにカスタムディスクを使用できるようになりました。現在はグローバルなサーバーレベルでのみ設定できます。 #77365 (Tuan Pham Anh)。
- plain_rewritable ディスクで ALTER TABLE ... ATTACH|DETACH|MOVE|REPLACE PARTITION がサポートされました。 #77406 (Julia Kartseva).
Kafkaテーブルエンジン向けに、SASL構成および認証情報を指定するテーブル設定を追加しました。これにより、設定ファイルや名前付きコレクションを使用せずに、CREATE TABLE文内で直接、Kafka および Kafka 互換システム向けの SASL ベース認証を構成できるようになります。 #78810 (Christoph Wurm)。- MergeTree テーブルに対して
default_compression_codecを設定できるようになりました。これは、対象カラムについて CREATE クエリで圧縮コーデックが明示的に指定されていない場合に使用されます。これにより #42005 が解決されました。 #66394 (gvoelfin)。 - クラスタ設定に
bind_host設定を追加し、ClickHouse が分散接続で特定のネットワークを使用できるようにしました。 #74741 (Todd Yocum)。 system.tablesに新しいカラムparametrized_view_parametersを追加しました。 https://github.com/clickhouse/clickhouse/issues/66756 をクローズします。 #75112 (NamNguyenHoai).- データベースコメントの変更を許可します。Closes #73351 ### ユーザー向け変更に関するドキュメントエントリ。#75622 (NamNguyenHoai).
- PostgreSQL 互換プロトコルでの
SCRAM-SHA-256認証サポート。 #76839 (scanhex12). arrayLevenshteinDistance、arrayLevenshteinDistanceWeighted、arraySimilarity関数を追加しました。 #77187 (Mikhail f. Shiryaev)。- 設定
parallel_distributed_insert_selectが、ReplicatedMergeTreeテーブルへのINSERT SELECTに対しても有効になりました(以前は Distributed テーブルが必要でした)。#78041 (Igor Nikonov)。 toInterval関数を導入しました。この関数は value と unit の 2 つの引数を取り、値を指定したInterval型に変換します。 #78723 (Andrew Davis)。- iceberg テーブル関数およびエンジンで、ルート
metadata.jsonファイルを特定するための、いくつかの便利な方法を追加しました。 #78455 をクローズしました。 #78475(Daniil Ivanik)。 - ClickHouse の SSH プロトコルでパスワードベース認証をサポート。 #78586 (Nikita Mikhaylov).
実験的機能
WHERE句内のEXISTS式の引数として相関サブクエリをサポート。#72459 をクローズ。#76078(Dmitry Novik)。- 関数
sparseGramsおよびsparseGramsHashesに ASCII 版および UTF-8 版を追加。作成者: scanhex12。#78176(Pervakov Grigorii)。今後のバージョンで実装が変更される予定があるため、使用しないでください。
パフォーマンスの向上
- ORDER BY および LIMIT の適用後にデータを読み込む lazy カラムにより、パフォーマンスを最適化しました。 #55518 (Xiaozhe Yu).
- クエリ条件キャッシュがデフォルトで有効になりました。 #79080 (Alexey Milovidov)。
col->insertFrom()への呼び出しをデバーチャル化することで、JOIN 結果の構築を高速化しました。 #77350 (Alexander Gololobov).- 可能な場合には、フィルタクエリプランのステップにある等価条件を JOIN 条件にマージし、ハッシュテーブルのキーとして利用できるようにしました。 #78877 (Dmitry Novik).
- JOIN キーが両方のパーツで PK のプレフィックスになっている場合、JOIN に動的分片を使用します。この最適化は
query_plan_join_shard_by_pk_ranges設定で有効化できます(デフォルトでは無効です)。 #74733 (Nikolai Kochetov)。 Icebergのデータプルーニングで、カラムの下限値および上限値(境界値)に基づく処理をサポートしました。#77638 を修正しました。#78242(alesapin)。Iceberg向けの簡易な count 最適化を実装しました。これにより、フィルターなしでcount()を用いるクエリはより高速に実行されます。#77639 をクローズしました。#78090 (alesapin)。max_merge_delayed_streams_for_parallel_writeを使用して、マージ処理が並列にフラッシュできるカラム数を構成できるようにしました(これにより、S3 への垂直マージにおけるメモリ使用量がおよそ 1/25 まで削減されるはずです)。#77922(Azat Khuzhin)。- キャッシュがマージなどで受動的に使用される場合は、
filesystem_cache_prefer_bigger_buffer_sizeを無効にします。これにより、マージ時のメモリ消費量が削減されます。 #77898 (Kseniia Sumarokova). - 並列レプリカ機能が有効な場合、読み取りタスクのサイズを決定する際にレプリカ数を基準とするようにしました。これにより、読み取るデータ量がそれほど大きくない場合でも、レプリカ間でのワークロード分散が向上します。 #78695 (Nikita Taranov)。
ORCフォーマットで非同期 I/O プレフェッチをサポートし、リモート I/O レイテンシを隠すことで全体的なパフォーマンスを向上させます。 #70534 (李扬)。- 非同期挿入が使用するメモリを事前割り当てして、パフォーマンスを向上させました。 #74945 (Ilya Golshtein).
multiReadが利用可能な箇所では単一のgetリクエストを使用しないようにすることで、レプリカ数の増加に伴い Keeper に大きな負荷を与える可能性があった Keeper へのリクエスト数を削減しました。 #56862 (Nikolay Degterinsky)。- Nullable 引数に対する関数実行の軽微な最適化。 #76489 (李扬).
arraySortの最適化。 #76850 (李扬)。- 同一パートのマークをマージし、一度にクエリ条件キャッシュに書き込むことで、ロック取得のオーバーヘッドを削減しました。 #77377 (zhongyuankai).
- ブラケット展開が1つだけ含まれるクエリに対する
s3Clusterのパフォーマンスを最適化しました。 #77686 (Tomáš Hromada). - 単一の Nullable または LowCardinality カラムに対する ORDER BY を最適化。 #77789 (李扬).
Nativeフォーマットのメモリ使用量を最適化。 #78442 (Azat Khuzhin).- 軽微な最適化:型キャストが必要な場合は、
count(if(...))をcountIfに書き換えないようにしました。#78564 をクローズしました。#78565(李扬)。 hasAll関数でtokenbf_v1、ngrambf_v1のフルテキストスキップインデックスを利用できるようになりました。 #77662 (UnamedRus).- ベクトル類似性インデックスにより、メインメモリが最大で 2 倍まで過剰に確保されてしまう可能性がありました。この修正ではメモリ割り当て戦略を見直し、メモリ使用量を削減するとともに、ベクトル類似性インデックスキャッシュの効率を向上させています。(issue #78056). #78394 (Shankar Iyer).
system.metric_logテーブルに対してスキーマ種別を指定するschema_type設定を導入しました。利用可能なスキーマは 3 種類あります。wide-- 現在のスキーマで、各メトリクス/イベントが個別のカラムに格納されます(個々のカラムを読む場合に最も高効率)、transposed--system.asynchronous_metric_logに類似しており、メトリクス/イベントが行として格納されます。そして最も興味深いのがtransposed_with_wide_view-- 内部テーブルはtransposedスキーマで作成しつつ、クエリを内部テーブルに対するものへ変換するwideスキーマの VIEW もあわせて導入します。transposed_with_wide_viewでは、VIEW に対するサブ秒精度はサポートされておらず、event_time_microsecondsは後方互換性のためのエイリアスにすぎません。 #78412 (alesapin)。
改良
Distributedクエリのクエリプランをシリアライズできるようになりました。新しい設定項目serialize_query_planが追加されています。有効化すると、Distributedテーブルからのクエリはリモートクエリ実行のためにシリアライズされたクエリプランを使用します。これにより TCP プロトコルに新しいパケットタイプが導入され、このパケットを処理できるようにするには、サーバーの設定に<process_query_plan_packet>true</process_query_plan_packet>を追加する必要があります。 #69652 (Nikolai Kochetov).JSON型およびサブカラムの VIEW からの読み取りをサポート。 #76903 (Pavel Kruglov).- ALTER DATABASE ... ON CLUSTER をサポートしました。 #79242 (Tuan Pham Anh).
- リフレッシャブルmaterialized viewのリフレッシュ処理が
system.query_logに記録されるようになりました。 #71333 (Michael Kolupaev)。 - ユーザー定義関数 (UDF) は、その設定における新しい SETTING によって決定的 (deterministic) であるとマークできるようになりました。また、クエリキャッシュは、クエリ内で呼び出される UDF が決定的かどうかを確認するようになりました。この場合、クエリ結果がキャッシュされます。(Issue #59988). #77769 (Jimmy Aguilar Mena).
- あらゆる種類のレプリケーテッドタスクに対してバックオフロジックを有効にしました。これにより、CPU 使用率、メモリ使用量、ログファイルサイズを削減できるようになります。
max_postpone_time_for_failed_mutations_msに類似した新しい設定max_postpone_time_for_failed_replicated_fetches_ms、max_postpone_time_for_failed_replicated_merges_ms、max_postpone_time_for_failed_replicated_tasks_msを追加しました。 #74576 (MikhailBurdukov). system.errorsにquery_idを追加。 #75815 をクローズ。 #76581(Vladimir Baikov)。UInt128からIPv6への変換をサポートしました。これにより、IPv6に対するbitAnd演算および算術演算が可能になり、その結果をIPv6に再変換できるようになります。#76752 をクローズしました。これにより、IPv6に対するbitAnd演算の結果もIPv6に再変換できるようになります。#57707 も参照してください。#76928(Muzammil Abdul Rehman)。- デフォルトでは、
Variant型のテキスト形式において特別なBool値はパースされません。allow_special_bool_values_inside_variant設定を使用して有効化できます。 #76974 (Pavel Kruglov)。 - セッションレベルおよびサーバーレベルで、低い
priorityを持つクエリのタスク単位の待機時間を設定可能にしました。 #77013 (VicoWu). - JSON データ型の値に対する比較処理を実装しました。JSON オブジェクトを Map 型と同様に比較できるようになりました。 #77397 (Pavel Kruglov)。
system.kafka_consumersによる権限管理のサポートを改善し、内部のlibrdkafkaエラーを転送するようにしました(なお、このライブラリの出来は正直かなりひどいです)。 #77700 (Ilya Golshtein).- Buffer テーブルエンジンの設定の検証機能を追加しました。 #77840 (Pervakov Grigorii).
HDFSでのpreadを有効化または無効化できる設定enable_hdfs_preadを追加しました。 #77885 (kevinyhzou).- ZooKeeper の
multi読み取りおよび書き込みリクエスト数向けのプロファイルイベントを追加しました。 #77888 (JackyWoo)。 disable_insertion_and_mutationが有効な場合でも、一時テーブルの作成および挿入を行えるようになりました。 #77901 (Xu Jia)。max_insert_delayed_streams_for_parallel_writeを 100 に減らしました。 #77919 (Azat Khuzhin).yyyのような Joda 構文(Java の世界のものです)における年のパースを修正しました。 #77973 (李扬).MergeTreeテーブルのパーツのアタッチは、そのブロック順に実行されるようになりました。これはReplacingMergeTreeのような特殊なマージアルゴリズムにとって重要です。この変更により #71009 がクローズされました。 #77976 (Alexey Milovidov).- クエリマスキングルールで、マッチが発生した場合に
LOGICAL_ERRORをスローできるようになりました。これにより、あらかじめ定義したパスワードがログのどこかに漏洩していないかを検出しやすくなります。 #78094 (Nikita Mikhaylov)。 - MySQL との互換性を向上させるため、
information_schema.tablesにカラムindex_length_columnを追加しました。 #78119 (Paweł Zakrzewski). TotalMergeFailuresとNonAbortedMergeFailuresという 2 つの新しいメトリックを導入。これらのメトリックは、短時間に多数のマージ失敗が発生するケースを検出するために必要です。 #78150 (Miсhael Stetsyuk).- キーが指定されていないパススタイルの場合の S3 URL のパース不具合を修正。 #78185 (Arthur Passos).
- 非同期メトリクス
BlockActiveTime、BlockDiscardTime、BlockWriteTime、BlockQueueTime、BlockReadTimeで誤った値が報告される問題を修正しました(変更前は 1 秒が誤って 0.001 として報告されていました)。 #78211 (filimonov)。 - StorageS3(Azure)Queue に対して materialized view へプッシュする際に発生するエラーについて、
loading_retriesで設定されたリトライ回数の上限が適用されるようにしました。これ以前は、そのようなエラーは無期限にリトライされていました。 #78313 (Kseniia Sumarokova). - DeltaLake の
delta-kernel-rs実装で、パフォーマンスと進捗バーの問題を修正。 #78368 (Kseniia Sumarokova). - ランタイムディスクで
include、from_env、from_zkをサポートしました。#78177 をクローズ。#78470(Kseniia Sumarokova)。 - 長時間実行中のミューテーションに対して、
system.warningsテーブルに動的な警告を追加しました。 #78658 (Bharat Nallan). - システムテーブル
system.query_condition_cacheにフィールドconditionを追加しました。これは、クエリ条件キャッシュでキーとして使用されるハッシュの元となる、プレーンテキストの条件を保存します。#78671 (Robert Schulze). - Hive パーティションで空値を許可できるようにしました。 #78816 (Arthur Passos).
BFloat16に対するIN句の型変換を修正しました(つまり、SELECT toBFloat16(1) IN [1, 2, 3];は今では1を返します)。#78754 をクローズしました。#78839(Raufs Dunamalijevs)。disk = ...が設定されている場合、MergeTree において他のディスク上のパーツをチェックしないようにしました。 #78855 (Azat Khuzhin).system.query_log内のused_data_type_familiesにおけるデータ型が、正準名で記録されるようにしました。 #78972 (Kseniia Sumarokova).recoverLostReplica実行時の設定クリーンアップを、#78637 と同様の方法で行うようにしました。 #79113 (Nikita Mikhaylov).- INFILE のスキーマ推論に挿入カラムを使用できるようにしました。 #78490 (Pervakov Grigorii).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- 集約プロジェクションで
count(Nullable)が使用されている場合の誤ったプロジェクション解析を修正しました。これにより #74495 が修正されます。この PR ではさらに、プロジェクションが使用される理由/使用されない理由を明確にするために、プロジェクション解析まわりのログをいくつか追加しています。#74498(Amos Bird)。 DETACH PART実行時に発生するPart <...> does not contain in snapshot of previous virtual parts. (PART_IS_TEMPORARILY_LOCKED)エラーを修正しました。 #76039 (Aleksei Filatov)。- アナライザでリテラルを含む式を持つスキップ索引が動作しない問題を修正し、索引の解析時に自明なキャストを削除しました。 #77229 (Pavel Kruglov).
close_sessionクエリパラメータが効かず、名前付きセッションがsession_timeout後にのみ閉じられていたバグを修正しました。 #77336 (Alexey Katsman).- Materialized Views がアタッチされていない NATS サーバーからのメッセージ受信を修正しました。 #77392 (Dmitry Novikov).
- 空の
FileLogからmergeテーブル関数経由で読み取る際の論理エラーを修正し、#75575 をクローズしました。#77441(Vladimir Cherkasov)。 - 共有された variant からの
Dynamicシリアライゼーションでデフォルトのフォーマット設定を使用するよう修正しました。 #77572 (Pavel Kruglov). - ローカルディスク上のテーブルデータパスの存在チェックを修正。 #77608 (Tuan Pham Anh).
- 一部の型における定数値のリモート送信を修正。 #77634 (Pavel Kruglov)。
- S3/AzureQueue において、有効期限切れのコンテキストが原因で発生していたクラッシュを修正。 #77720 (Kseniia Sumarokova).
- RabbitMQ、Nats、Redis、AzureQueue のテーブルエンジンで認証情報が表示されないようにしました。 #77755 (Kseniia Sumarokova).
argMin/argMaxにおけるNaNの比較時の未定義動作を修正しました。 #77756 (Raúl Marín).- マージおよびミューテーションの処理が、書き込むブロックを生成しない場合でもキャンセルされたかどうかを定期的に確認するようにしました。 #77766 (János Benjamin Antal).
- Replicated データベースで、新しく追加されたレプリカでは動作していなかったリフレッシャブルmaterialized view の問題を修正しました。 #77774 (Michael Kolupaev).
NOT_FOUND_COLUMN_IN_BLOCKエラー発生時にクラッシュが起きる可能性があった不具合を修正。 #77854 (Vladimir Cherkasov)。- データの投入中に S3/AzureQueue で発生していたクラッシュを修正しました。 #77878 (Bharat Nallan).
- SSH サーバーでの履歴に対するファジー検索を無効化(
skimライブラリを必要とするため)。 #78002 (Azat Khuzhin)。 - インデックスが設定されていないカラムに対するベクトル検索クエリについて、テーブル内の別のベクトルカラムにベクトル類似度索引が定義されている場合に誤った結果が返される問題を修正しました(Issue #77978)。#78069(Shankar Iyer)。
- "The requested output format is binary... Do you want to output it anyway? [y/N]" というプロンプトメッセージ内のごく小さな誤りを修正。 #78095 (Azat Khuzhin).
toStartOfIntervalで origin 引数が 0 の場合に発生するバグを修正しました。 #78096 (Yarik Briukhovetskyi).- HTTP インターフェースで、空の
session_idクエリパラメータを指定することを禁止しました。 #78098 (Alexey Katsman). ALTERクエリの直後に実行されたRENAMEクエリが原因でReplicatedデータベースのメタデータが上書きされてしまう可能性があった問題を修正しました。 #78107 (Nikolay Degterinsky)。NATSエンジンにおけるクラッシュを修正。 #78108 (Dmitry Novikov).- SSH 用組み込みクライアントでの history_file 作成を試みないようにしました(以前のバージョンでは作成は常に失敗していましたが、試行自体は行われていました)。 #78112 (Azat Khuzhin).
RENAME DATABASEまたはDROP TABLEクエリの実行後にsystem.detached_tablesが誤った情報を表示していた問題を修正しました。 #78126 (Nikolay Degterinsky)。Replicatedデータベースでテーブル数が多すぎる場合のチェックに関する不具合を、#77274 の変更後に発生していたものとして修正しました。あわせて、ReplicatedMergeTreeやKeeperMapの場合に Keeper 内に管理対象外のノードが作成されるのを防ぐため、ストレージを作成する前にチェックを実行するようにしました。 #78127 (Nikolay Degterinsky)。S3Queueメタデータの初期化が同時に行われた場合に発生する可能性があったクラッシュを修正しました。 #78131 (Azat Khuzhin).groupArray*関数は、これまで実行を試みていた Int 型のmax_size引数に 0 が指定された場合についても、すでに UInt 型で行われているのと同様に、BAD_ARGUMENTSエラーを返すようになりました。 #78140 (Eduard Karacharov).- ローカルテーブルが切り離される前に削除されていた場合に、失われたレプリカを復旧する際にクラッシュしないようにしました。 #78173 (Raúl Marín).
system.s3_queue_settingsの "alterable" カラムが常にfalseを返していた不具合を修正。#78187 (Kseniia Sumarokova).- Azure アクセス署名がユーザーやログに表示されないようにマスクしました。 #78189 (Kseniia Sumarokova).
- Wide パーツで接頭辞付きサブストリームのプリフェッチが正しく行われない問題を修正。 #78205 (Pavel Kruglov).
- キー配列が
LowCardinality(Nullable)型の場合にmapFromArraysで発生していたクラッシュや誤った結果を修正しました。 #78240 (Eduard Karacharov)。 - delta-kernel-rs の認証オプションを修正。 #78255 (Kseniia Sumarokova).
- レプリカの
disable_insertion_and_mutationが true の場合、Refreshable Materialized Views のタスクをスケジュールしないようにしました。タスクは挿入処理を伴うため、disable_insertion_and_mutationが true の場合は失敗します。 #78277 (Xu Jia). Mergeエンジンの背後にあるテーブルへのアクセスを検証するようにしました。 #78339 (Pervakov Grigorii)。Distributedテーブルに対するクエリで、FINAL修飾子が無視されることがありました。 #78428 (Yakov Olkhovskiy).bitmapMinは、ビットマップが空の場合に uint32_max(入力型がそれより大きい場合には uint64_max)を返します。これは、空の roaring_bitmap に対する最小値の挙動と一致します。 #78444 (wxybear)。distributed_aggregation_memory_efficientが有効な場合、FROM 句の読み取り直後におけるクエリ処理の並列化を無効化しました。これは論理エラーを引き起こす可能性があったためです。Closes #76934. #78500 (flynn).max_streams_to_max_threads_ratioSETTING を適用した結果、計画されたストリーム数が 0 になってしまう場合でも、読み取り用に少なくとも 1 つのストリームが設定されるようになりました。 #78505 (Eduard Karacharov)。- ストレージ
S3Queueで発生していた論理エラー「Cannot unregister: table uuid is not registered」を修正しました。 #78285 をクローズしました。 #78541(Kseniia Sumarokova)。 - ClickHouse は、cgroups v1 と v2 の両方が有効になっているシステムで、自身が属する cgroup v2 を判別できるようになりました。 #78566 (Grigory Korolev).
- テーブルレベルの設定を指定して使用すると、
-Clusterテーブル関数が失敗していました。 #78587 (Daniil Ivanik). - INSERT 時に ReplicatedMergeTree がトランザクションをサポートしていない場合のチェックを強化しました。 #78633 (Azat Khuzhin).
- ATTACH 時にクエリ設定をクリーンアップするように修正しました。 #78637 (Raúl Marín).
iceberg_metadata_file_pathに無効なパスが指定された場合にクラッシュする問題を修正しました。 #78688 (alesapin).DeltaLakeテーブルエンジンの delta-kernel-s 実装において、読み取りスキーマがテーブルスキーマと異なり、かつパーティションカラムが存在する場合に「カラムが見つかりません」エラーが発生する問題を修正しました。 #78690 (Kseniia Sumarokova).- 名前付きセッションをクローズするようにスケジュールした後(ただしタイムアウトが実際に発生する前)に、同じ名前で新しい名前付きセッションを作成すると、新しいセッションまで、最初のセッションがクローズされるはずだったタイミングでクローズされてしまう問題を修正しました。 #78698 (Alexey Katsman).
MongoDBエンジンを使用するテーブル、またはmongodbテーブル関数から読み取るいくつかのタイプのSELECTクエリを修正しました。修正対象は、WHERE句内で定数値が暗黙的に型変換されるクエリ(例:WHERE datetime = '2025-03-10 00:00:00')、およびLIMITとGROUP BYを含むクエリです。以前は誤った結果を返すことがありました。 #78777 (Anton Popov)。CHECK TABLE実行中でもテーブルのシャットダウンがブロックされないようにしました。 #78782 (Raúl Marín).- Keeper の修正: すべてのケースでエフェメラルカウントが正しく計算されるよう修正。 #78799 (Antonio Andelic).
view以外のテーブル関数を使用した場合にStorageDistributedで発生する誤ったキャストを修正しました。#78464 をクローズしました。#78828(Konstantin Bogdanov)。tupleElement(*, 1)のフォーマットの一貫性を修正しました。#78639 をクローズしました。#78832(Konstantin Bogdanov)。ssd_cache型の辞書は、0 または負の値のblock_sizeおよびwrite_buffer_sizeパラメータを拒否するようになりました(issue #78314)。#78854(Elmi Ahmadov)。- 異常終了後に ALTER を実行した場合に Refreshable MATERIALIZED VIEW がクラッシュする不具合を修正しました。 #78858 (Azat Khuzhin).
CSVフォーマットにおける不正なDateTime値のパース処理を修正しました。 #78919 (Pavel Kruglov)。- Keeper の修正: 失敗した multi リクエストで watch が発火しないようにしました。 #79247 (Antonio Andelic)。
- min-max 値が明示的に指定されているにもかかわらず
NULLになっている場合に、Iceberg テーブルの読み取りに失敗していた問題を修正しました。そのような不正なファイルを生成していたのは Go Iceberg ライブラリであることが判明しました。Closes #78740. #78764 (flynn).
ビルド/テスト/パッケージングの改善
- Rust において CPU ターゲットの機能を考慮し、すべてのクレートで LTO を有効化しました。 #78590 (Raúl Marín).
ClickHouse 25.3 LTS リリース、2025-03-20
後方互換性のない変更
- レプリケートされたデータベースに対する TRUNCATE を禁止しました。 #76651 (Bharat Nallan).
- 索引キャッシュをスキップする変更を元に戻しました。 #77447 (Nikita Mikhaylov).
新機能
JSONデータ型が本番利用に対応しました。詳しくは https://jsonbench.com/ を参照してください。DynamicおよびVariantデータ型も本番利用に対応しました。#77785(Alexey Milovidov)。- clickhouse-server 向けに SSH プロトコルを導入しました。これにより、任意の SSH クライアントを使用して ClickHouse に接続できるようになりました。その結果、次の issue がクローズされました: #74340。#74989(George Gamezardashvili)。
- parallel replicas が有効な場合は、テーブル関数を対応する -Cluster 版に置き換えます。#65024 を修正します。#70659(Konstantin Bogdanov)。
- Userspace Page Cache の新しい実装により、OS のページキャッシュに依存せず、プロセス内メモリ上にデータをキャッシュできるようになります。これは、データがローカルファイルシステムキャッシュでバックされていないリモートの仮想ファイルシステム上に格納されている場合に有用です。 #70509 (Michael Kolupaev).
- 同時実行クエリ間での CPU スロットの割り当て方法を制御するサーバー設定
concurrent_threads_schedulerを追加しました。round_robin(従来の挙動)またはfair_round_robinを指定でき、INSERT と SELECT 間での CPU 割り当ての不公平さの問題に対処します。 #75949 (Sergei Trifonov)。 estimateCompressionRatio集約関数を追加しました。 #70801、#76661(Tariq Almawash)。- 関数
arraySymmetricDifferenceを追加しました。複数の配列引数のうち、すべての引数に共通して含まれていない要素をすべて返します。例:SELECT arraySymmetricDifference([1, 2], [2, 3])は[1, 3]を返します。(issue #61673)。#76231(Filipp Abapolov)。 - Iceberg 用 storage/table 関数の設定項目
iceberg_metadata_file_pathにより、読み込むメタデータファイルを明示的に指定できるようにしました。 #47412 を修正。 #77318 (alesapin)。 - ブロックチェーンの実装、特に EVM ベースのシステムで一般的に使用される
keccak256ハッシュ関数を追加しました。 #76669 (Arnaud Briche). - 3 つの新しい関数を追加。
icebergTruncateは仕様に準拠(https://iceberg.apache.org/spec/#truncate-transform-details)、toYearNumSinceEpochおよびtoMonthNumSinceEpochを追加。Icebergエンジンのパーティションプルーニングでtruncate変換をサポート。#77403(alesapin)。 LowCardinality(Decimal)データ型をサポートしました #72256。#72833(zhanglistar)。FilterTransformPassedRowsとFilterTransformPassedBytesのプロファイルイベントでは、クエリ実行中にフィルタリングされた行数とバイト数が示されます。 #76662 (Onkar Deshpande).- ヒストグラム型メトリクスをサポートしました。インターフェースは Prometheus クライアントと非常によく似ており、値に対応するバケット内のカウンタをインクリメントするには、単に
observe(value)を呼び出すだけです。ヒストグラムメトリクスはsystem.histogram_metricsを通じて公開されます。 #75736 (Miсhael Stetsyuk)。 - 明示的な値に対して分岐できる非定数
CASEをサポート。 #77399 (Yarik Briukhovetskyi)。
実験的機能
- AWS S3 およびローカルファイルシステム上の Delta Lake テーブルに対して、Unity Catalog のサポートを追加しました。#76988 (alesapin)。
- Iceberg テーブル向けに AWS Glue サービスカタログとの実験的な連携機能を導入しました。#77257 (alesapin)。
- 動的なクラスタの自動検出機能を追加しました。これにより、既存の node の自動検出機能が拡張されます。ClickHouse は、
<multicluster_root_path>を使用して共通の ZooKeeper パス配下で新しい clusters を自動的に検出して登録できるようになりました。#76001 (Anton Ivashkin)。 - 新しい設定
enable_replacing_merge_with_cleanup_for_min_age_to_force_mergeにより、設定可能なタイムアウト後にパーティション全体を自動的にクリーンアップマージできるようになりました。#76440 (Christoph Wurm)。
パフォーマンス改善
- 繰り返し使用される条件によるクエリパフォーマンスを向上させるため、クエリ条件キャッシュを実装しました。条件を満たさないデータ範囲を、一時的なインデックスとしてメモリ上に保持します。後続のクエリはこのインデックスを利用します。 #67768 #69236 をクローズしました。 (zhongyuankai)
- パーツ削除時にキャッシュからデータを積極的に削除するようにしました。データ量がそれより少ない場合でも、キャッシュが最大サイズまで成長しないようにします。 #76641 (Alexey Milovidov)
- 算術計算で Int256 と UInt256 を clang の組み込み型 i256 に置き換え、パフォーマンスを向上させました #70502。 #73658 (李扬)
- 一部のケース(例: 空の array カラム)では、データパーツに空ファイルが含まれることがあります。テーブルがメタデータとオブジェクトストレージが分離されたストレージ構成のディスク上にある場合、そのようなファイルについては空の blob の書き込みをスキップし、メタデータのみを保存できるようにしました。 #75860 (Alexander Gololobov)
- Decimal32/Decimal64/DateTime64 に対する min/max のパフォーマンスを改善しました。 #76570 (李扬)
- クエリコンパイル(
compile_expressions設定)は、マシンタイプを考慮するようになりました。これにより、そのようなクエリが大幅に高速化されます。 #76753 (ZhangLiStar) arraySortを最適化しました。 #76850 (李扬)- マージなど、キャッシュが受動的に使用される場合には
filesystem_cache_prefer_bigger_buffer_sizeを無効化しました。 #77898 (Kseniia Sumarokova) - 一部のコード箇所で
preserve_most属性を適用し、わずかにより良いコード生成を可能にしました。 #67778 (Nikita Taranov) - ClickHouse サーバーのシャットダウンを高速化しました(2.5 秒の遅延を除去)。 #76550 (Azat Khuzhin)
- ReadBufferFromS3 およびその他のリモート読み取りバッファで不要なアロケーションを回避し、メモリ消費を半分に削減しました。 #76692 (Sema Checherinda)
- zstd を 1.5.5 から 1.5.7 に更新しました。これにより、いくつかのパフォーマンス向上につながる可能性があります。 #77137 (Pradeep Chhetri)
- Wide パーツ内の JSON カラムのプリフェッチ中のメモリ使用量を削減しました。これは、ClickHouse Cloud のような共有ストレージ上で ClickHouse を使用する場合に特に有効です。 #77640 (Pavel Kruglov)
改良
TRUNCATEがINTO OUTFILEと共に使用される場合に、アトミックなリネームをサポートするようにしました。#70323 を解決します。#77181(Onkar Deshpande)。NaNやinfを float 型の設定値として使用することはできなくなりました。そもそも妥当な使い方ではありませんでしたが。 #77546 (Yarik Briukhovetskyi).compatibility設定に関わらず、analyzer が無効になっている場合は parallel replicas をデフォルトで無効にするようにしました。この挙動は、parallel_replicas_only_with_analyzerを明示的にfalseに設定することで変更できます。 #77115 (Igor Nikonov).- クライアントリクエストのヘッダーから外部 HTTP 認証器に転送するヘッダーのリストを定義できるようになりました。 #77054 (inv2004).
- タプル型カラム内のフィールドに対して、カラム名の大文字・小文字を区別しないマッチングを正しく扱うようにしました。 https://github.com/apache/incubator-gluten/issues/8324 をクローズ。 #73780 (李扬)。
- Codec Gorilla のパラメータは、常に .sql ファイル内のテーブルメタデータに保存されるようになりました。これにより次の issue が解決されました: #70072。#74814(Nikita Mikhaylov)。
- 特定のデータレイク向けにパース処理を強化しました(Sequence ID のパース: マニフェストファイル内のシーケンス識別子をパースする機能を追加、Avro メタデータのパース: 将来の拡張が容易になるよう Avro メタデータパーサーを再設計)。 #75010 (Daniil Ivanik)。
system.opentelemetry_span_logテーブルのデフォルト ORDER BY から trace_id を除外しました。 #75907 (Azat Khuzhin).- 暗号化(
encrypted_by属性)は、任意の設定ファイル(config.xml、users.xml、入れ子になった設定ファイル)に適用できるようになりました。これまでは、トップレベルの config.xml ファイルに対してのみ有効でした。 #75911 (Mikhail Gorshkov). system.warningsテーブルを改善し、追加・更新・削除が可能な動的な警告メッセージを追加できるようにしました。 #76029 (Bharat Nallan).- このPRでは、すべての
DROP操作を順序として先に記述する必要があるため、ALTER USER user1 ADD PROFILES a, DROP ALL PROFILESというクエリは実行できなくなりました。 #76242 (pufit). - SYNC REPLICA に対するさまざまな強化(エラーメッセージの改善、テストの充実、サニティチェックの追加)。 #76307 (Azat Khuzhin)。
- バックアップ時に
Access Deniedが発生して S3 へのマルチパートコピーが失敗した場合に、正しいフォールバック処理を行うようにしました。バケット間で異なるクレデンシャルを使用してバックアップを行う場合、マルチパートコピーでAccess Deniedエラーが発生することがあります。 #76515 (Antonio Andelic). - librdkafka(ひどい代物)をバージョン 2.8.0(代物の質は特に良くなってはいない)にアップグレードし、Kafka テーブルのシャットダウンシーケンスを改善して、テーブル削除時およびサーバー再起動時の遅延を低減しました。
engine=Kafkaは、テーブルが削除されたときにコンシューマグループから明示的に離脱しなくなりました。その代わり、コンシューマは非アクティブな状態がsession_timeout_ms(デフォルト: 45 秒)続いた後に自動的に削除されるまで、グループに留まります。 #76621(filimonov)。 - S3 リクエスト設定の検証処理を修正。 #76658 (Vitaly Baranov)。
server_settingsやsettingsのようなシステムテーブルには、default値用のカラムがあり便利です。これらをmerge_tree_settingsおよびreplicated_merge_tree_settingsにも追加しました。 #76942 (Diego Nieto).CurrentMetrics::QueryPreemptedと同様のロジックを持つProfileEvents::QueryPreemptedを追加しました。 #77015 (VicoWu)。- 以前は、Replicated データベースがクエリで指定された認証情報をログに出力してしまうことがありました。この問題は修正されました。これにより次の問題が解決されます: #77123。#77133(Nikita Mikhaylov)。
plain_rewritable diskに対して ALTER TABLE DROP PARTITION が利用できるようになりました。 #77138 (Julia Kartseva).- バックアップ/リストア用の設定
allow_s3_native_copyは、現在は次の 3 つの値をサポートするようになりました: -False- S3 ネイティブコピーは使用されません。 -True(従来のデフォルト)- ClickHouse は最初に S3 ネイティブコピーを試行し、失敗した場合は読み取り+書き込み方式にフォールバックします。 -'auto'(新しいデフォルト)- ClickHouse は最初にソースとデスティネーションの認証情報を比較します。同一であれば、まず S3 ネイティブコピーを試行し、その後読み取り+書き込み方式にフォールバックする場合があります。異なる場合は、最初から読み取り+書き込み方式を使用します。 #77401 (Vitaly Baranov)。 - Delta Lake テーブルエンジンの Delta カーネルで AWS セッショントークンおよび環境認証情報の利用をサポートしました。 #77661 (Kseniia Sumarokova).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- 非同期分散 INSERT で保留中バッチの処理中にハングする問題(
No such file or directoryなどにより発生)を修正。 #72939 (Azat Khuzhin)。 - INDEX 分析中の日時変換を改善し、暗黙的な Date から DateTime への変換に対して飽和動作を強制するようにしました。これにより、日時の範囲制限が原因で発生し得た INDEX 分析結果の不正確さが解消されます。この変更により #73307 を修正しました。また、デフォルト値である
date_time_overflow_behavior = 'ignore'設定時における明示的なtoDateTime変換の動作も修正しました。#73326(Amos Bird)。 - UUID とテーブル名の間のレースコンディションに起因するさまざまなバグを修正しました(たとえば、
RENAMEとRESTART REPLICAのレースコンディションが解消されます。同時にRENAMEとSYSTEM RESTART REPLICAを実行した場合に、誤ったレプリカを再起動してしまったり、あるいはテーブルの一つがTable X is being restarted状態のまま取り残されてしまう可能性がありました)。 #76308 (Azat Khuzhin). - 非同期インサートを有効にし、ブロックサイズが不揃いな状態で
insert into ... from file ...を実行した際、最初のブロックサイズがasync_max_size未満で 2 番目のブロックサイズがasync_max_sizeを超える場合、2 番目のブロックがインサートされずにデータ損失が発生する問題を修正。2 番目のブロックのデータはsquashingに残留したままとなっていました。 #76343 (Han Fei). system.data_skipping_indicesにおいてフィールド名 'marks' を 'marks_bytes' に変更しました。 #76374 (Robert Schulze).- 動的ファイルシステムキャッシュのリサイズ時に、削除処理中に予期しないエラーが発生した際の処理を修正しました。 #76466 (Kseniia Sumarokova).
- 並列ハッシュにおける
used_flagの初期化を修正しました。これによりサーバーがクラッシュする可能性がありました。 #76580 (Nikita Taranov). - PROJECTION 内で
defaultProfiles関数を呼び出した際に発生する論理エラーを修正。 #76627 (pufit). - Web UI でブラウザによる対話的な Basic 認証を要求しないようにしました。#76319 をクローズします。#76637(Alexey Milovidov)。
- 分散テーブルからブール値リテラルを SELECT した際に発生する THERE_IS_NO_COLUMN 例外を修正。 #76656 (Yakov Olkhovskiy).
- テーブルディレクトリ内のサブパスが、より適切な方法で選択されるようになりました。 #76681 (Daniil Ivanik).
- サブカラムを含む主キー (PK) を持つテーブルを ALTER した後に発生するエラー
Not found column in blockを修正しました。https://github.com/ClickHouse/ClickHouse/pull/72644 適用後は、https://github.com/ClickHouse/ClickHouse/pull/74403 が必要です。#76686(Nikolai Kochetov)。 - NULL ショートサーキットのパフォーマンステストを追加し、バグを修正しました。 #76708 (李扬).
- 出力の書き込みバッファをファイナライズする前にフラッシュするようにしました。いくつかの出力フォーマット(例:
JSONEachRowWithProgressRowOutputFormat)のファイナライズ時に発生していたLOGICAL_ERRORを修正しました。 #76726 (Antonio Andelic)。 - MongoDBのバイナリUUIDへの対応を追加しました(#74452) - テーブル関数使用時のMongoDBへのWHEREプッシュダウンを修正しました(#72210) - MongoDBのバイナリUUIDはClickHouseのUUIDにのみ変換されるように、MongoDBとClickHouse間の型マッピングを変更しました。これにより、将来のあいまいさや予期せぬ動作を防ぐことができます。- 後方互換性を維持したまま、OIDのマッピングを修正しました。#76762(Kirill Nikiforov)。
- JSON サブカラムのプレフィックス並列デシリアライズにおける例外処理を修正。#76809 (Pavel Kruglov)。
- 負の整数に対する
lgamma関数の動作を修正。 #76840 (Ilya Kataev). - 明示的に定義された primary key に対する reverse key analysis を修正しました。#76654 と同様の問題です。 #76846 (Amos Bird)。
- JSON フォーマットでの Bool 値の Pretty 表示を修正しました。 #76905 (Pavel Kruglov).
- 非同期挿入中にエラーが発生した際、不正な JSON カラムのロールバック処理によりクラッシュする可能性があった問題を修正しました。 #76908 (Pavel Kruglov).
- 以前は、
multiIfがプランニング時と本実行時で異なる型のカラムを返す場合がありました。これにより、C++ の観点から未定義動作を引き起こすコードが生成されていました。 #76914 (Nikita Taranov)。 - MergeTree における定数 Nullable キーのシリアライズ処理が誤っていた問題を修正しました。これにより #76939 が修正されます。 #76985 (Amos Bird)。
BFloat16値のソート処理を修正しました。この修正により #75487 がクローズされます。さらに #75669 もクローズされます。 #77000(Alexey Milovidov)。- パーツ整合性チェックで一時的なサブカラムをスキップするチェックを追加することで、Variant サブカラムを含む JSON のバグを修正しました。 #72187。 #77034(Smita Kulkarni)。
Valuesフォーマットで Template をパースする際の型不一致によりクラッシュする問題を修正。 #77071 (Pavel Kruglov)。- EmbeddedRocksDB テーブルの主キーにサブカラムを含めて作成できないようにしました。以前はそのようなテーブルを作成できましたが、SELECT クエリが失敗していました。 #77074 (Pavel Kruglov)。
- 述語をリモート側にプッシュダウンする際にリテラル型が考慮されていなかったため、分散クエリで不正な比較が行われていた問題を修正。 #77093 (Duc Canh Le).
- 例外により Kafka テーブル作成時にクラッシュする問題を修正。 #77121 (Pavel Kruglov).
- Kafka および RabbitMQ エンジンで JSON およびサブカラムのサポートを追加しました。 #77122 (Pavel Kruglov).
- MacOS での例外スタックのアンワインド処理を修正。#77126(Eduard Karacharov)。
- getSubcolumn 関数における 'null' サブカラムの読み取りを修正。 #77163 (Pavel Kruglov).
- Array 型および未サポート関数での bloom filter 索引の不具合を修正。 #77271 (Pavel Kruglov).
- テーブル数に関する制限は、初回の CREATE クエリ実行時にのみチェックするようにしました。 #77274 (Nikolay Degterinsky).
- バグではありません:
SELECT toBFloat16(-0.0) == toBFloat16(0.0)は、これまでfalseを返していましたが、現在は正しくtrueを返すようになりました。これにより、Float32およびFloat64と挙動が一貫するようになりました。 #77290 (Shankar Iyer). - デバッグビルドでクラッシュを引き起こす可能性がある、未初期化の
key_index変数への誤った参照が行われる不具合を修正しました(この未初期化参照は、後続のコードが例外をスローする可能性が高いため、リリースビルドでは問題になりません)。 ### ユーザー向け変更に関するドキュメントのエントリ。 #77305 (wxybear). - Bool 値を持つパーティションの名前付けを修正しました。これは https://github.com/ClickHouse/ClickHouse/pull/74533 によって不正な状態になっていました。 #77319 (Pavel Kruglov)。
- 内部に Nullable 要素を含むタプルと文字列の比較の不具合を修正しました。例えば、この変更より前は、タプル
(1, null)と文字列'(1,null)'の比較でエラーが発生していました。別の例として、Nullable カラムであるaを含むタプル(1, a)と文字列'(1, 2)'の比較も同様です。この変更により、これらの問題が解消されました。 #77323 (Alexey Katsman). - ObjectStorageQueueSource で発生していたクラッシュを修正しました。この不具合は https://github.com/ClickHouse/ClickHouse/pull/76358 で導入されました。 #77325 (Pavel Kruglov)。
inputと併用した場合のasync_insertを修正。 #77340 (Azat Khuzhin).- Fix:
WITH FILLが、ソートカラムがプランナーによって削除された場合に NOT_FOUND_COLUMN_IN_BLOCK で失敗する可能性がある問題を修正。INTERPOLATE 式に対して計算される DAG の不整合に関連する同様の問題も修正。 #77343 (Yakov Olkhovskiy)。 - 無効な AST ノードに対するエイリアス設定まわりで発生していた複数の LOGICAL_ERROR を修正しました。 #77445 (Raúl Marín).
- filesystem cache の実装において、ファイルセグメントの書き込み中のエラー処理の不具合を修正しました。 #77471 (Kseniia Sumarokova).
- カタログから提供される適切なメタデータファイルを DatabaseIceberg が使用するようにしました。#75187 をクローズ。#77486 (Kseniia Sumarokova)。
query cacheは UDF を非決定的であるものと仮定するようになりました。これに伴い、UDF を含むクエリの結果はキャッシュされなくなりました。以前は、ユーザーが非決定的な UDF を定義した場合でも、その結果が誤ってキャッシュされてしまうことがありました(issue #77553)。#77633(Jimmy Aguilar Mena)。enable_filesystem_cache_logSETTING が有効な場合にのみ動作していた system.filesystem_cache_log の問題を修正。 #77650 (Kseniia Sumarokova).defaultRoles関数を PROJECTION 内で呼び出した場合に発生する論理エラーを修正しました。#76627 に対するフォローアップです。#77667(pufit)。- 関数
arrayResizeの第2引数としてNullable型を指定することは、現在は許可されていません。これまでは、第2引数がNullableの場合に、エラーが発生したり誤った結果が返されたりする可能性がありました。(issue #48398). #77724 (Manish Gill). - 書き込み対象のブロックが一切生成されない場合でも、マージおよびミューテーションがキャンセルされたかどうかを定期的に確認するようにしました。 #77766 (János Benjamin Antal)。
ビルド/テスト/パッケージング関連の改善
clickhouse-odbc-bridgeとclickhouse-library-bridgeを、別リポジトリ https://github.com/ClickHouse/odbc-bridge/ に分離しました。 #76225 (Alexey Milovidov).- Rust のクロスコンパイルを修正し、Rust を完全に無効化できるようにしました。 #76921 (Raúl Marín).
ClickHouse 25.2 リリース, 2025-02-27
後方互換性のない変更
async_load_databasesをデフォルトで完全に有効化しました(config.xmlをアップグレードしていないインストールでも同様です)。#74772(Azat Khuzhin)。JSONCompactEachRowWithProgressとJSONCompactStringsEachRowWithProgressフォーマットを追加しました。#69989 の継続です。JSONCompactWithNamesとJSONCompactWithNamesAndTypesは今後 "totals" を出力しません。これは実装上の誤りだったと考えられます。#75037(Alexey Milovidov)。- ALTER コマンドの一覧の曖昧さをなくすため、
format_alter_operations_with_parenthesesのデフォルト値を true に変更しました(https://github.com/ClickHouse/ClickHouse/pull/59532 を参照)。これにより 24.3 より前のクラスターとのレプリケーションは動作しなくなります。古いリリースを使用しているクラスターをアップグレードする場合は、サーバー設定でこの設定を無効にするか、先に 24.3 にアップグレードしてください。#75302(Raúl Marín)。 - 正規表現を使用してログメッセージをフィルタリングする機能を削除しました。実装にデータレースがあったため、削除する必要がありました。#75577(János Benjamin Antal)。
min_chunk_bytes_for_parallel_parsing設定は、もはや 0 を指定できなくなりました。これにより #71110 が修正されます。#75239(Nikita Mikhaylov)。- キャッシュ設定内の設定を検証するようにしました。存在しない設定はこれまでは無視されていましたが、今後はエラーをスローし、設定から削除する必要があります。#75452(Kseniia Sumarokova)。
新機能
- 型
Nullable(JSON)をサポートしました。#73556 (Pavel Kruglov). - DEFAULT および MATERIALIZED 式でサブカラムをサポートしました。#74403 (Pavel Kruglov).
output_format_parquet_write_bloom_filter設定(デフォルトで有効)を使用した Parquet のブルームフィルター書き込みをサポートしました。#71681 (Michael Kolupaev).- Web UI に対話的なデータベースナビゲーション機能が追加されました。#75777 (Alexey Milovidov).
- ストレージポリシーで読み取り専用ディスクと読み書き可能ディスクを組み合わせて使用できるようになりました(複数ボリュームまたは複数ディスクとして構成可能)。これによりボリューム全体からデータを読み取ることができ、挿入は書き込み可能なディスクが優先されます(いわゆる Copy-on-Write のストレージポリシー)。#75862 (Azat Khuzhin).
- 新しい Database エンジン
DatabaseBackupが追加され、バックアップからテーブル/データベースを即座にアタッチできるようになりました。#75725 (Maksim Kita). - Postgres ワイヤプロトコルでのプリペアドステートメントをサポートしました。#75035 (scanhex12).
- データベースレイヤーなしで ATTACH テーブルできる機能を追加しました。これは Web、S3 などの外部仮想ファイルシステム上の MergeTree テーブルに対して有用です。#75788 (Azat Khuzhin).
- 2 つの文字列の一部同士を比較する新しい文字列比較関数
compareSubstringsを追加しました。例:SELECT compareSubstrings('Saxony', 'Anglo-Saxon', 0, 6, 5) AS resultは「文字列 'Saxon' と 'Anglo-Saxon' について、最初の文字列ではオフセット 0、2 番目の文字列ではオフセット 5 から、それぞれ 6 バイト分を辞書順で比較する」という意味です。#74070 (lgbo). - 新しい関数
initialQueryStartTimeが追加されました。現在のクエリの開始時刻を返します。この値は、分散クエリ中はすべての分片で同一です。#75087 (Roman Lomonosov). - MySQL 向けに、named collection を用いた SSL 認証をサポートしました。#59111 をクローズしました。#59452 (Nikolay Degterinsky).
実験的機能
- 新しい設定
enable_adaptive_memory_spill_schedulerを追加しました。この設定により、同一クエリ内の複数の Grace JOIN が合計のメモリ使用量を監視し、MEMORY_LIMIT_EXCEEDED を防ぐために外部ストレージへのスピルを適応的にトリガーできるようになります。 #72728 (lgbo). - 新しい実験的な
Kafkaテーブルエンジンが Keeper の機能フラグを完全に尊重するようにしました。 #76004 (János Benjamin Antal). - ライセンス上の問題により v24.10 で削除されていた (Intel) QPL コーデックを復元しました。 #76021 (Konstantin Bogdanov).
- HDFS との統合で、
dfs.client.use.datanode.hostname構成オプションのサポートを追加しました。 #74635 (Mikhail Tiukavkin).
パフォーマンスの改善
- S3 上の Wide パーツにおける JSON カラム全体の読み取りパフォーマンスを改善しました。サブカラム接頭辞のデシリアライズ用プリフェッチの追加、デシリアライズ済み接頭辞のキャッシュ、サブカラム接頭辞の並列デシリアライズにより実現しています。これにより、
SELECT data FROM tableのようなクエリでは S3 からの JSON カラム読み取りが 4 倍、SELECT data FROM table LIMIT 10のようなクエリでは約 10 倍高速になります。#74827 (Pavel Kruglov). max_rows_in_join = max_bytes_in_join = 0の場合にparallel_hash内で発生していた不要な競合を修正しました。#75155 (Nikita Taranov).- オプティマイザにより結合の左右が入れ替えられた場合に、
ConcurrentHashJoinで事前確保が二重に行われていた問題を修正しました。#75149 (Nikita Taranov). - 一部の JOIN シナリオでのわずかな改善として、出力行数を事前計算し、その分のメモリを予約するようにしました。#75376 (Alexander Gololobov).
WHERE a < b AND b < c AND c < 5のようなクエリに対して、新しい比較条件(a < 5 AND b < 5)を推論してフィルタリング能力を向上させることができるようにしました。#73164 (Shichao Jin).- Keeper の改善: パフォーマンス向上のため、インメモリストレージへコミットする際のダイジェスト計算を無効化しました。これは
keeper_server.digest_enabled_on_commit設定で有効化できます。リクエストの前処理時には引き続きダイジェストが計算されます。#75490 (Antonio Andelic). - 可能な場合に、JOIN の ON 句からフィルタ式をプッシュダウンするようにしました。#75536 (Vladimir Cherkasov).
- MergeTree において、カラムおよび索引のサイズを遅延評価するようにしました。#75938 (Pavel Kruglov).
MATERIALIZE TTLにおいてttl_only_drop_partsを再び尊重するようにしました。TTL を再計算してパーツを空のパーツに置き換えることで削除するため、必要なカラムのみを読み取ります。#72751 (Andrey Zvonov).- plain_rewritable メタデータファイル向けの書き込みバッファサイズを削減しました。#75758 (Julia Kartseva).
- 一部のウィンドウ関数でメモリ使用量を削減しました。#65647 (lgbo).
- parquet Bloom フィルタと min/max 索引を同時に評価するようにしました。これは
x = 3 or x > 5かつ data = [1, 2, 4, 5] のようなケースを正しくサポートするために必要です。#71383 (Arthur Passos). Executableストレージに渡されたクエリは、もはやシングルスレッド実行に限定されません。#70084 (yawnt).- ALTER TABLE FETCH PARTITION においてパーツを並列にフェッチするようにしました(スレッドプールのサイズは
max_fetch_partition_thread_pool_sizeで制御されます)。#74978 (Azat Khuzhin). indexHint関数を用いた述語をPREWHEREに移動できるようにしました。#74987 (Anton Popov).
改良
LowCardinalityカラムのメモリ内サイズの計算を修正しました。 #74688 (Nikita Taranov).processors_profile_logテーブルに、30 日の有効期限 (TTL) を持つデフォルト設定が適用されました。 #66139 (Ilya Yatsishin).- クラスタ設定で分片に名前を設定できるようにしました。 #72276 (MikhailBurdukov).
- Prometheus remote write レスポンスの成功ステータスコードを 200/OK から 204/NoContent に変更しました。 #74170 (Michael Dempsey).
max_remote_read_network_bandwidth_for_serveとmax_remote_write_network_bandwidth_for_serverを、サーバーを再起動せずに動的に再読み込みできるようにしました。#74206 (Kai Zhu)。- バックアップの作成時に、チェックサムの計算に blob パスを使用できるようにしました。 #74729 (Vitaly Baranov).
system.query_cacheにクエリ ID カラムを追加しました(#68205 を解決)。#74982(NamHoaiNguyen)。ALTER TABLE ... FREEZE ...クエリを、KILL QUERYまたはタイムアウト値(max_execution_time)による自動処理でキャンセルできるようになりました。 #75016 (Kirill).groupUniqArrayArrayMapをSimpleAggregateFunctionとしてサポートする機能を追加しました。 #75034 (Miel Donkers)。- データベースエンジン
Icebergでカタログの認証情報設定を非表示にしました。 #74559 をクローズしました。 #75080(Kseniia Sumarokova)。 intExp2/intExp10: 未定義だった動作を明確化:引数が小さすぎる場合は 0 を返し、大きすぎる場合は18446744073709551615を返し、NaNの場合は例外をスローします。 #75312 (Vitaly Baranov).DatabaseIcebergのカタログ設定でs3.endpointをネイティブにサポートしました。 #74558 をクローズしました。 #75375 (Kseniia Sumarokova)。- ユーザーが
SYSTEM DROP REPLICAを実行する際に十分な権限を持っていない場合、黙って失敗するのではなくエラーを報告するようにしました。 #75377 (Bharat Nallan). - いずれかのシステムログがフラッシュに失敗した回数を示す ProfileEvent を追加しました。 #75466 (Alexey Milovidov)。
- 復号および解凍処理に対するチェックと追加のログ出力を追加しました。 #75471 (Vitaly Baranov).
parseTimeDelta関数でマイクロ記号(U+00B5)のサポートを追加しました。これにより、マイクロ記号(U+00B5)とギリシャ文字 μ(U+03BC)の両方がマイクロ秒の有効な表現として認識され、ClickHouse の動作が Go の実装と一致します(time.go を参照 および time/format.go)。 #75472 (Vitaly Orlov)。- サーバー側の設定 (
send_settings_to_client) を、クライアント側の設定 (apply_settings_from_server) に置き換えました。この設定は、クライアント側コード(例: INSERT データのパース処理やクエリ出力の整形)が、サーバーのusers.xmlおよびユーザープロファイルに定義された設定を使用すべきかどうかを制御します。これを無効にすると、クライアントのコマンドライン、セッション、およびクエリからの設定のみが使用されます。これはネイティブクライアントにのみ適用され(例: HTTP には適用されません)、またクエリ処理の大部分(サーバー側で実行される部分)には適用されない点に注意してください。 #75478 (Michael Kolupaev). - 構文エラーに対するエラーメッセージを改善しました。これまでは、クエリが大きすぎて、長さが制限を超えるトークンが非常に長い文字列リテラルだった場合、その非常に長いトークンの 2 つの例に挟まれて、本来の原因に関するメッセージが途中で失われていました。UTF-8 文字を含むクエリがエラーメッセージ内で不正に切り詰められる問題を修正しました。クエリ断片が過剰に引用符で囲まれてしまう問題を修正しました。これにより #75473 がクローズされました。#75561(Alexey Milovidov)。
- ストレージ
S3(Azure)Queueに profile events を追加しました。 #75618 (Kseniia Sumarokova). - 互換性維持のため、サーバーからクライアントへの設定送信 (
send_settings_to_client=false) を無効化しました(この機能は、利便性向上のため、後にクライアント側の設定として再実装される予定です)。 #75648 (Michael Kolupaev). - バックグラウンドスレッドで定期的に読み取られる複数のソースからの情報を用いて内部メモリトラッカーを補正するための設定
memory_worker_correct_memory_trackerを追加しました。 #75714 (Antonio Andelic). system.processesにカラムnormalized_query_hashを追加しました。注意:normalizedQueryHash関数を使えばその場で容易に計算できますが、今後の変更に備えるために必要です。 #75756 (Alexey Milovidov).system.tablesをクエリしても、もはや存在しないデータベース上に作成されたMergeテーブルがあっても例外は発生しません。複雑な処理を行うことを許可していないため、HiveテーブルからgetTotalRowsメソッドを削除しました。 #75772 (Alexey Milovidov).- バックアップの
start_timeとend_timeをマイクロ秒単位で保存するようにしました。 #75929 (Aleksandr Musorin). - RSS による補正が行われない内部グローバルメモリトラッカーの値を示す
MemoryTrackingUncorrectedメトリクスを追加しました。 #75935 (Antonio Andelic). PostgreSQLやMySQLのテーブル関数で、localhost:1234/handleのようなエンドポイントをパースできるようにしました。これにより、https://github.com/ClickHouse/ClickHouse/pull/52503 で導入されたリグレッション(退行バグ)を修正しました。 #75944 (Nikita Mikhaylov)。- サーバー設定
throw_on_unknown_workloadを追加しました。この設定により、workload設定に未知の値が指定されたクエリに対する動作を選択できます。無制限なアクセスを許可する(デフォルト)か、RESOURCE_ACCESS_DENIEDエラーをスローするかを切り替えられます。すべてのクエリでワークロードスケジューリングを利用させたい場合に役立ちます。 #75999 (Sergei Trifonov)。 - 不要な場合には、
ARRAY JOIN内でサブカラムをgetSubcolumnに書き換えないようにしました。 #76018 (Pavel Kruglov). - テーブル読み込み時のコーディネーションエラーを再試行するようにしました。 #76020 (Alexander Tokmakov).
SYSTEM FLUSH LOGSで個々のログをフラッシュできるようになりました。 #76132 (Raúl Marín)./binaryサーバーのページを改良しました。Morton 曲線の代わりに Hilbert 曲線を使用します。正方形内に 512 MB 分のアドレスを表示し、これにより正方形全体がより隙間なく埋まるようにしました(以前のバージョンでは、アドレスは正方形の半分しか埋めていませんでした)。アドレスの色付けを、関数名ではなくライブラリ名に基づいて行うようにしました。表示領域外にも、より余裕をもってスクロールできるようにしました。 #76192 (Alexey Milovidov)。- TOO_MANY_SIMULTANEOUS_QUERIES エラーが発生した場合に、ON CLUSTER クエリを再試行するようにしました。 #76352 (Patrick Galbraith).
- サーバーの CPU の相対的な不足度合いを算出する
CPUOverload非同期メトリクスを追加。 #76404 (Alexey Milovidov). output_format_pretty_max_rowsのデフォルト値を 10000 から 1000 に変更しました。使い勝手の観点から、この方が望ましいと考えています。 #76407 (Alexey Milovidov).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- クエリの解釈中に発生した例外を、クエリで指定されたカスタムフォーマットで整形するよう修正しました。これまでのバージョンでは、例外はクエリで指定されたフォーマットではなくデフォルトフォーマットで整形されていました。これにより #55422 が解決されます。 #74994 (Alexey Milovidov)。
- SQLite の型マッピングを修正し、整数型を
int64、浮動小数点型をfloat64に対応付け。 #73853 (Joanna Hulboj)。 - 親スコープからの識別子の解決を修正しました。
WITH句内の式に対してエイリアスを使用できるようにしました。#58994 を修正。#62946 を修正。#63239 を修正。#65233 を修正。#71659 を修正。#71828 を修正。#68749 を修正。#66143(Dmitry Novik)。 negate関数の単調性を修正しました。以前のバージョンでは、xが主キーである場合にクエリselect * from a where -x = -42;を実行すると、誤った結果が返されることがありました。 #71440 (Michael Kolupaev).- arrayIntersect における空のタプルの処理を修正しました。これにより #72578 を修正しています。#72581(Amos Bird)。
- JSON サブオブジェクトのサブカラムの読み取りで誤ったプレフィックスが使用されていた問題を修正。 #73182 (Pavel Kruglov).
- クライアントとサーバー間の通信で Native フォーマットの設定が正しく伝播されるように修正しました。 #73924 (Pavel Kruglov).
- 一部のストレージで未サポートの型を検出するようにしました。 #74218 (Pavel Kruglov)。
- macOS 上の PostgreSQL インターフェイス経由で実行した
INSERT INTO SELECTクエリにより発生していたクラッシュを修正しました(issue #72938)。 #74231(Artem Yurov)。 - レプリケーテッドデータベース内の初期化されていない
max_log_ptrを修正しました。 #74336 (Konstantin Morozov). - interval 型の挿入時に発生していたクラッシュを修正しました(issue #74299)。#74478(NamHoaiNguyen)。
- 定数 JSON リテラルの整形処理を修正しました。これまで、別のサーバーにクエリを送信する際に構文エラーが発生する可能性がありました。 #74533 (Pavel Kruglov).
- 暗黙的な PROJECTION が有効な場合に、定数パーティション式を使用した CREATE クエリが不正になる問題を修正しました。これにより #74596 が修正されます。#74634(Amos Bird)。
- INSERT が例外で終了した後に、接続が壊れたまま残ることがないようにしました。 #74740 (Azat Khuzhin).
- 中間状態のままになっていた接続を再利用しないように修正しました。 #74749 (Azat Khuzhin).
- JSON 型宣言をパースする際、型名が大文字でない場合にクラッシュする問題を修正。 #74784 (Pavel Kruglov).
- Keeper: 接続が確立される前に切断されていた場合に発生する logical_error を修正。 #74844 (Michael Kolupaev).
AzureBlobStorageを使用しているテーブルが存在する場合にサーバーが起動できない問題を修正しました。テーブルは Azure へのリクエストを送信することなく読み込まれます。 #74880 (Alexey Katsman).- BACKUP および RESTORE 操作において、
query_log内のused_privilegesとmissing_privilegesフィールドが記録されない問題を修正。 #74887 (Alexey Katsman). - HDFS の select リクエスト中に SASL エラーが発生した場合に Kerberos チケットをリフレッシュするようにしました。 #74930 (inv2004).
- startup_scripts 内の Replicated データベースへのクエリを修正。 #74942 (Azat Khuzhin).
JOIN ON句でNULLセーフな比較が使用されている場合に、型エイリアスが付けられた式に起因する問題を修正しました。 #74970 (Vladimir Cherkasov)。- remove 操作が失敗した場合に、part の状態を deleting から outdated にロールバックするようにしました。 #74985 (Sema Checherinda).
- 以前のバージョンでは、スカラーサブクエリが存在する場合、データフォーマットの初期化中に(サブクエリの処理から蓄積された)進捗の書き込みを開始しており、これは HTTP ヘッダーが書き出される前に行われていました。その結果、X-ClickHouse-QueryId や X-ClickHouse-Format などの HTTP ヘッダーや Content-Type が失われていました。 #74991 (Alexey Milovidov).
database_replicated_allow_replicated_engine_arguments=0設定時のCREATE TABLE AS...クエリを修正しました。 #75000 (Bharat Nallan).- INSERT 実行時の例外発生後にクライアント側の接続が異常な状態のまま残る問題を修正。 #75030 (Azat Khuzhin).
- PSQL レプリケーション中の未捕捉例外により発生していたクラッシュの問題を修正。 #75062 (Azat Khuzhin)。
- SASL により任意の RPC 呼び出しが失敗する可能性があり、この修正により、krb5 チケットの有効期限が切れている場合に呼び出しを再実行できるようになりました。 #75063 (inv2004).
- 設定
optimize_function_to_subcolumnsが有効な場合のArray、Map、Nullable(..)カラムに対する索引(プライマリおよびセカンダリ)の扱いを修正しました。以前は、これらのカラムに対する索引が無視されることがありました。 #75081 (Anton Popov). - inner テーブルを持つ materialized view を作成する際には、
flatten_nestedを無効化するようにしました。このようにフラット化されたカラムは使用できないためです。 #75085 (Christoph Wurm)。 - forwarded_for フィールド内の一部の IPv6 アドレス(::ffff:1.1.1.1 など)が誤って解釈され、その結果、例外とともにクライアント接続が切断される問題を修正。 #75133 (Yakov Olkhovskiy).
- LowCardinality の Nullable データ型に対する NULL セーフな JOIN の処理を修正しました。以前は、
IS NOT DISTINCT FROM、<=>、a IS NULL AND b IS NULL OR a == bのような NULL セーフな比較を伴う JOIN の ON 句が、LowCardinality カラムで正しく動作していませんでした。 #75143 (Vladimir Cherkasov). - NumRowsCache の total_number_of_rows をカウントする際に key_condition が指定されていないことを検証するようにしました。 #75164 (Daniil Ivanik).
- 新しいアナライザーで、未使用の補間を含むクエリの問題を修正しました。 #75173 (János Benjamin Antal).
- INSERT と CTE の併用時にクラッシュを引き起こすバグを修正。 #75188 (Shichao Jin).
- Keeper の修正:ログのロールバック時に、破損した changelog に書き込まないようにしました。#75197 (Antonio Andelic)。
- 適切な箇所では
BFloat16をスーパータイプとして使用するようにしました。これにより次の issue がクローズされました: #74404。#75236(Nikita Mikhaylov)。 - any_join_distinct_right_table_keys と JOIN 句の ON 条件での OR を併用した場合に、結合結果で予期しないデフォルト値が発生していた問題を修正。 #75262 (Vladimir Cherkasov).
- azureblobstorage テーブルエンジンの認証情報をマスクするよう修正しました。 #75319 (Garrett Thomas).
- PostgreSQL、MySQL、SQLite などの外部データベースに対して、ClickHouse が誤ってフィルタープッシュダウンを行ってしまうことがある問題を修正しました。これにより、次の issue が解決されました: #71423。#75320(Nikita Mikhaylov)。
- Protobuf 形式での出力中に、並行して
SYSTEM DROP FORMAT SCHEMA CACHEクエリが実行されると発生しうる Protobuf スキーマキャッシュのクラッシュを修正しました。 #75357 (Pavel Kruglov)。 HAVINGからのフィルタが並列レプリカでプッシュダウンされる場合に発生し得る、論理エラーまたは未初期化メモリ使用の問題を修正しました。 #75363 (Vladimir Cherkasov)。icebergS3、icebergAzureテーブル関数およびテーブルエンジンで機密情報を非表示にしました。 #75378 (Kseniia Sumarokova).- 計算結果として空文字列となるトリム文字を指定した
TRIM関数が、正しく処理されるようになりました。例:SELECT TRIM(LEADING concat('') FROM 'foo')(Issue #69922)。#75399(Manish Gill)。 - IOutputFormat のデータレースを修正。 #75448 (Pavel Kruglov)。
- 分散テーブル上での JOIN で Array 型の JSON サブカラムを使用した際に発生する可能性のある、
Elements ... and ... of Nested data structure ... (Array columns) have different array sizesというエラーを修正しました。 #75512 (Pavel Kruglov). CODEC(ZSTD, DoubleDelta)使用時に発生するデータ破損を修正しました。#70031 をクローズ。#75548(Konstantin Bogdanov)。- allow_feature_tier と compatibility MergeTree 設定の相互作用を修正しました。 #75635 (Raúl Marín).
- ファイルが再試行された際に、system.s3queue_log 内の processed_rows の値が誤って記録される問題を修正。#75666 (Kseniia Sumarokova)。
- materialized view が URL エンジンに書き込みを行う際に接続障害が発生した場合、
materialized_views_ignore_errorsの設定が正しく適用されるようにしました。 #75679 (Christoph Wurm). - 異なる型のカラム間で複数の非同期の
RENAMEクエリ(alter_sync = 0)を実行した後に、MergeTreeテーブルから読み取る際にまれに発生していたクラッシュを修正しました。#75693 (Anton Popov)。 - 一部の
UNION ALLを含むクエリで発生していたBlock structure mismatch in QueryPipeline streamエラーを修正。#75715 (Nikolai Kochetov)。 - PK カラムを
ALTER MODIFYした際に、その PK を持つ PROJECTION を再構築するようにしました。以前は、PROJECTION の PK に使用されているカラムをALTER MODIFYした後のSELECT時にCANNOT_READ_ALL_DATAエラーが発生する可能性がありました。 #75720 (Pavel Kruglov). - スカラーサブクエリに対する
ARRAY JOINの結果が analyzer 使用時に誤っていた問題を修正しました。 #75732 (Nikolai Kochetov). DistinctSortedStreamTransformにおけるヌルポインタ参照を修正しました。 #75734 (Nikita Taranov)。allow_suspicious_ttl_expressionsの挙動を修正しました。 #75771 (Aleksei Filatov)。- 関数
translateにおける未初期化メモリの読み取りを修正しました。これにより #75592 が解決されました。 #75794 (Alexey Milovidov)。 - Native フォーマットにおいて、JSON 文字列のフォーマットにフォーマット設定が伝播されるようにしました。 #75832 (Pavel Kruglov).
- v24.12 において結合アルゴリズムとして parallel hash をデフォルトで有効化したことを、設定変更履歴に記録しました。これにより、互換性レベルに v24.12 より古いバージョンが設定されている場合、ClickHouse は引き続き非 parallel hash アルゴリズムを用いて結合を実行します。 #75870 (Robert Schulze).
- 暗黙的に追加された min-max インデックスを持つテーブルを新しいテーブルにコピーできない問題を修正しました(issue #75677)。#75877(Smita Kulkarni)。
clickhouse-library-bridgeはファイルシステムから任意のライブラリを開くことができるため、その性質上、分離された環境内でのみ実行するのが安全です。clickhouse-serverの近くで実行された際の脆弱性を防ぐため、設定で指定された場所にあるライブラリのみをパスとして許可するよう制限します。この脆弱性は Arseniy Dugin によって ClickHouse Bug Bounty Program を通じて発見されました。#75954(Alexey Milovidov)。- いくつかのメタデータのシリアライゼーションに JSON を使用していましたが、これは誤りでした。JSON は、ゼロバイトを含む文字列リテラル内のバイナリデータをサポートしないためです。SQL クエリにはバイナリデータや不正な UTF-8 を含めることができるので、メタデータファイル側でもこれをサポートする必要があります。同時に、ClickHouse の
JSONEachRowなどのフォーマットは、バイナリデータの完全なラウンドトリップを優先し、JSON 標準からあえて逸脱することでこの問題を回避しています。その背景については、こちらを参照してください: https://github.com/ClickHouse/ClickHouse/pull/73668#issuecomment-2560501790。解決策は、Poco::JSONライブラリを ClickHouse における JSON 形式のシリアライゼーションと一貫させることです。これにより #73668 がクローズされます。 #75963 (Alexey Milovidov)。 - ストレージ
S3Queueにおけるコミット上限チェックを修正。 #76104 (Kseniia Sumarokova)。 - 自動索引(
add_minmax_index_for_numeric_columns/add_minmax_index_for_string_columns)を有効にした MergeTree テーブルの ATTACH を修正。 #76139 (Azat Khuzhin). - ジョブの親スレッドのスタックトレース(
enable_job_stack_trace設定)が出力されない問題を修正しました。また、enable_job_stack_trace設定がスレッドに正しく伝播されず、その結果スタックトレースの内容が常にこの設定を反映しない場合がある問題を修正しました。 #76191 (Yakov Olkhovskiy). ALTER RENAMEに対して誤ってCREATE USER権限を要求していた権限チェックを修正しました。#74372 をクローズしました。 #76241(pufit)。- ビッグエンディアンアーキテクチャ上で FixedString を使用する reinterpretAs を修正。 #76253 (Azat Khuzhin).
- S3Queue における論理エラー「Expected current processor to be equal to for bucket 」を修正しました。 #76358 (Kseniia Sumarokova).
- Memory データベースにおける ALTER のデッドロックを修正。 #76359 (Azat Khuzhin).
WHERE句の条件にpointInPolygon関数が含まれている場合の索引解析における論理エラーを修正しました。 #76360 (Anton Popov)。- シグナルハンドラー内の潜在的に危険な呼び出しを修正。 #76549 (Yakov Olkhovskiy).
- PartsSplitter における逆順キーのサポートを修正しました。これにより #73400 が修正されました。#73418 (Amos Bird)。
ビルド/テスト/パッケージングの改善
- ARM および Intel Mac の両方で HDFS のビルドをサポート。#74244 (Yan Xin).
- Darwin 向けクロスコンパイル時に ICU と GRPC を有効化。#75922 (Raúl Marín).
- 組み込み LLVM をバージョン 19 に更新。#75148 (Konstantin Bogdanov).
- Docker イメージでデフォルトユーザーのネットワークアクセスを無効化。#75259 (Mikhail f. Shiryaev). すべての clickhouse-server 関連の処理を 1 つの関数にまとめ、
entrypoint.shでデフォルトバイナリを起動する場合にのみ実行されるように変更。長らく先送りされていた改善で、#50724 で提案されていたもの。users.xmlから値を取得するためのスイッチ--usersをclickhouse-extract-from-configに追加。#75643 (Mikhail f. Shiryaev). - バイナリから約 20 MB のデッドコードを削除。#76226 (Alexey Milovidov).
ClickHouse 25.1 リリース, 2025-01-28
下位互換性のない変更
JSONEachRowWithProgressは、進捗が発生するたびに進捗情報を書き出すようになりました。以前のバージョンでは、進捗は結果の各ブロックごとにしか表示されず、ほとんど役に立ちませんでした。進捗の表示方法を変更し、ゼロ値は表示しないようにしました。これにより #70800 が解決されました。 #73834 (Alexey Milovidov).Mergeテーブルは、基になるテーブル群の構造を、それらのカラムの和集合を取り、共通の型を導出することで統一するようになりました。これにより #64864 が解決されました。特定のケースでは、この変更は下位互換性がない可能性があります。一例として、テーブル間に共通の型が存在しないが、先頭のテーブルの型への変換は依然として可能なケースが挙げられます(UInt64 と Int64、あるいは任意の数値型と String の組み合わせなど)。以前の挙動に戻したい場合は、merge_table_max_tables_to_look_for_schema_inferenceを1に設定するか、compatibilityを24.12以前に設定してください。 #73956 (Alexey Milovidov).- Parquet 出力フォーマットは、Date および DateTime カラムを、生の数値として書き出すのではなく、Parquet がサポートする日付/時刻型に変換するようになりました。
DateTimeはDateTime64(3)(以前はUInt32)になりました。output_format_parquet_datetime_as_uint32を設定すると、以前の挙動に戻せます。DateはDate32(以前はUInt16)になります。 #70950 (Michael Kolupaev). - 既定では、
ORDER BYおよびless/greater/equal/etcといった比較関数で、JSON/Object/AggregateFunctionのような比較不能な型は許可されなくなりました。 #73276 (Pavel Kruglov). - 廃止予定だった
MaterializedMySQLデータベースエンジンは削除され、利用できなくなりました。 #73879 (Alexey Milovidov). mysqldictionary ソースは、もはやSHOW TABLE STATUSクエリを実行しなくなりました。これは、最近の MySQL バージョンおよび InnoDB テーブルでは、このクエリが何の有用な情報も提供しないためです。これにより #72636 が解決されました。この変更は下位互換性がありますが、気付いてもらえるようにこのカテゴリに含めています。 #73914 (Alexey Milovidov).CHECK TABLEクエリには、新たに個別のCHECK権限が必要になりました。以前のバージョンでは、これらのクエリを実行するにはSHOW TABLES権限だけで十分でした。しかし、CHECK TABLEクエリは高負荷になり得るうえ、SELECTクエリ向けの通常のクエリ複雑性制限はこれには適用されませんでした。そのため、DoS の可能性につながっていました。 #74471 (Alexey Milovidov).- 関数
h3ToGeo()は、結果を(幾何関数における標準的な順序である)(lat, lon)の順で返すようになりました。従来の(lon, lat)の結果順序を維持したいユーザーは、h3togeo_lon_lat_result_order = trueを設定してください。 #74719 (Manish Gill). - 新しい MongoDB ドライバーがデフォルトになりました。従来のドライバーを引き続き使用したいユーザーは、サーバー設定
use_legacy_mongodb_integrationを true に設定してください。 #73359 (Robert Schulze).
新機能
SELECTクエリ送信直後、その実行中に、未完了(バックグラウンドプロセスでまだマテリアライズされていない)のミューテーションを即時に適用できるようになりました。apply_mutations_on_flyを設定することで有効化できます。 #74877 (Anton Popov).Icebergテーブルで、時間ベースの変換パーティション操作に対するパーティションプルーニングを実装しました。 #72044 (Daniil Ivanik)。- MergeTree のソートキーおよびスキップ索引でサブカラムをサポートしました。 #72644 (Pavel Kruglov).
Apache Arrow/Parquet/ORCからのHALF_FLOAT値の読み取りをサポートしました(Float32として読み込みます)。これにより #72960 がクローズされました。IEEE-754 の half float はBFloat16と同じではないことに注意してください。#73835 をクローズしました。#73836(Alexey Milovidov)。system.trace_logテーブルに、シンボル化されたスタックトレースを格納する 2 つの新しいカラムsymbolsとlinesが追加されます。これにより、プロファイル情報の収集とエクスポートが容易になります。これはtrace_log内のサーバー設定値symbolizeによって制御され、デフォルトで有効になっています。 #73896 (Alexey Milovidov)。- テーブル内でオートインクリメントの連番を生成するために使用できる新しい関数
generateSerialIDを追加しました。kazalika による #64310 の継続対応です。これにより #62485 がクローズされました。#73950(Alexey Milovidov)。 - DDL クエリに対して、
query1 PARALLEL WITH query2 PARALLEL WITH query3 ... PARALLEL WITH queryNという構文を追加しました。これは、クエリ{query1, query2, ... queryN}を互いに並列実行できる(かつ、その方が望ましい)ことを意味します。#73983(Vitaly Baranov)。 - デシリアライズ済みのスキッピング索引グラニュール用のインメモリキャッシュを追加しました。これにより、スキッピング索引を使用する繰り返しクエリの実行が高速化されます。新しいキャッシュのサイズは、サーバー設定
skipping_index_cache_sizeとskipping_index_cache_max_entriesによって制御されます。このキャッシュ追加の主な動機はベクトル類似度索引であり、これらは今回の変更によって大幅に高速化されました。 #70102 (Robert Schulze). - 現在、組み込みの Web UI では、クエリ実行中に進行状況バーが表示されます。そこからクエリをキャンセルできます。合計レコード数と、速度に関する詳細な情報を表示します。データが到着し次第、テーブルをインクリメンタルにレンダリングできます。HTTP 圧縮を有効化しました。テーブルのレンダリングが高速になりました。テーブルヘッダーが固定表示(スティッキー)になりました。セルを選択し、矢印キーで移動できるようになりました。選択したセルのアウトラインによってセルが小さくなってしまう問題を修正しました。セルはマウスホバーでは拡大されず、選択時のみ拡大されるようになりました。受信データのレンダリングをいつ停止するかの判断は、サーバー側ではなくクライアント側で行われます。数値の桁区切りをハイライト表示します。全体的なデザインが刷新され、より大胆になりました。サーバーへ到達可能かどうかと認証情報の正しさを確認し、サーバーバージョンと稼働時間を表示します。クラウドアイコンは、Safari を含むあらゆるフォントで輪郭表示されます。ネストされたデータ型内の大きな整数も、より適切にレンダリングされます。inf/nan を正しく表示します。カラムヘッダーにマウスオーバーすると、そのデータ型を表示します。 #74204 (Alexey Milovidov)。
- MergeTree によって管理されるカラムに対して、設定
add_minmax_index_for_numeric_columns(数値カラム用)およびadd_minmax_index_for_string_columns(文字列カラム用)を使用し、デフォルトで min-max(スキップ)索引を作成できる機能を追加しました。現時点ではどちらの設定も無効化されているため、まだ動作の変更はありません。 #74266 (Smita Kulkarni)。 system.query_log、ネイティブプロトコルの ClientInfo、およびサーバーログにscript_query_numberとscript_line_numberフィールドを追加しました。これにより #67542 がクローズされました。この機能の立ち上げに先立って貢献した #68133 での pinsvin00 の働きに感謝します。 #74477(Alexey Milovidov)。- パターン内の最長のイベントチェーンに対して、一致したイベントのタイムスタンプを返す集約関数
sequenceMatchEventsを追加しました。 #72349 (UnamedRus)。 - 関数
arrayNormalizedGiniを追加。 #72823 (flynn)。 DateTime64に対するマイナス演算子のサポートを追加し、DateTime64同士およびDateTimeとの減算を可能にしました。 #74482 (Li Yin)。
実験的機能
BFloat16データ型が本番利用可能になりました。 #73840 (Alexey Milovidov).
パフォーマンスの向上
- 関数
indexHintを最適化しました。これにより、関数indexHintの引数としてのみ使用されているカラムはテーブルから読み出されなくなりました。 #74314 (Anton Popov)。もしindexHint関数がエンタープライズ向けデータアーキテクチャの中核を成しているのであれば、この最適化は大きな助けになるでしょう。 parallel_hashJOIN アルゴリズムに対するmax_joined_block_size_rows設定の計算をより正確にしました。これにより、hashアルゴリズムと比較してメモリ消費量が増加してしまうことを避けられます。#74630(Nikita Taranov)。MergingAggregatedステップに対して、クエリプランレベルでの述語プッシュダウン最適化をサポートしました。これにより、analyzerを使用する一部のクエリのパフォーマンスが向上します。#74073 (Nikolai Kochetov)。parallel_hashJOIN アルゴリズムの probe フェーズから、左テーブルのブロックをハッシュで分割する処理が削除されました。 #73089 (Nikita Taranov).- RowBinary 入力形式を最適化。#63805 をクローズしました。#65059(Pavel Kruglov)。
optimize_on_insertが有効な場合、レベル 1 のパーツとして書き込みます。これにより、新しく書き込まれたパーツに対するFINAL付きクエリに複数の最適化を適用できるようになります。 #73132 (Anton Popov)。- 一部の低レベルな最適化により、文字列のデシリアライズ処理を高速化しました。 #65948 (Nikita Taranov).
- マージ処理などでレコード間の等値比較を行う際、まず値が異なる可能性が最も高いカラムから行の比較を開始するようにしました。 #63780 (UnamedRus).
- 右側の結合テーブルをキーで再ランク付けし、grace hash join のパフォーマンスを向上。 #72237 (kevinyhzou).
arrayROCAUCとarrayAUCPRが曲線全体に対する部分面積を計算できるようにし、その計算を巨大なデータセットに対して並列化できるようにしました。 #72904 (Emmanuel).- 多数のアイドル状態のスレッドを生成しないようにしました。 #72920 (Guo Wangyang).
- テーブル関数で波括弧による展開のみを行う場合には、BLOB ストレージのキーを列挙しないようにしました。#73333 をクローズしました。#73518 (Konstantin Bogdanov).
- Nullable 引数に対して実行される関数の短絡評価を最適化。 #73820 (李扬).
- 非関数カラムには
maskedExecuteを適用しないようにし、ショートサーキット実行のパフォーマンスを改善しました。 #73965 (lgbo). Kafka/NATS/RabbitMQ/FileLogの入力フォーマットでのヘッダー自動検出を無効化し、パフォーマンスを向上させました。 #74006 (Azat Khuzhin)。GROUPING SETSを用いた集計の後に、より高い並列度でパイプラインを実行するようにしました。 #74082 (Nikita Taranov).MergeTreeReadPoolにおけるクリティカルセクションの範囲を縮小しました。 #74202 (Guo Wangyang).- Parallel replicas のパフォーマンスを改善しました。parallel replicas プロトコルに関係しないパケットについては、クエリのイニシエーター側でのデシリアライズが、常にパイプラインスレッド内で行われるようになりました。以前は、パイプラインのスケジューリングを担当するスレッドで実行されることがあり、その結果、イニシエーターの応答性が低下し、パイプライン実行が遅延する可能性がありました。#74398 (Igor Nikonov)。
- Keeper における大規模な複数リクエストのパフォーマンスを改善。 #74849 (Antonio Andelic)。
- ログラッパーを値として扱い、ヒープに割り当てないようにしました。 #74034 (Mikhail Artemenko).
- MySQL および Postgres の Dictionary レプリカへの接続をバックグラウンドで再接続し、対応する Dictionary へのリクエストが遅延しないようにしました。 #71101 (Yakov Olkhovskiy).
- Parallel replicas 機能では、レプリカ選択を改善するためにレプリカの可用性に関する過去の情報を利用していましたが、接続できない場合にレプリカのエラー数が更新されていませんでした。この PR により、レプリカが利用不能な場合にはエラー数が更新されるようになりました。 #72666 (zoomxi)。
- マージ処理中にスキップ索引の作成を抑制する MergeTree の設定
materialize_skip_indexes_on_mergeを追加しました。これにより、スキップ索引がいつ作成されるかをALTER TABLE [..] MATERIALIZE INDEX [...]を通じて明示的に制御できます。スキップ索引の構築コストが高い場合(例: ベクター類似度索引)に有用です。 #74401 (Robert Schulze)。 - Storage(S3/Azure)Queue における Keeper へのリクエストを最適化しました。 #74410 (Kseniia Sumarokova). #74538 (Kseniia Sumarokova).
- デフォルトで並列レプリカを最大
1000個まで使用可能になりました。 #74504 (Konstantin Bogdanov). - S3 ディスクからの読み取り時の HTTP セッション再利用を改善 (#72401)。 #74548 (Julian Maicher)。
改良
- 暗黙的な ENGINE を持つ CREATE TABLE クエリで SETTINGS が利用可能になり、ENGINE の設定とクエリ設定を混在して指定できるようになりました。 #73120 (Raúl Marín).
use_hive_partitioningをデフォルトで有効にします。 #71636 (Yarik Briukhovetskyi)。- 異なるパラメータを持つ JSON 型間での CAST および ALTER をサポートしました。 #72303 (Pavel Kruglov).
- JSONカラム値の等値比較をサポートしました。 #72991 (Pavel Kruglov).
- JSON サブカラムを含む識別子のフォーマットを改善し、不要なバッククォートが付かないようにしました。 #73085 (Pavel Kruglov).
- インタラクティブなメトリクス表示を改善しました。並列レプリカからのメトリクスがすべて表示されない不具合を修正しました。メトリクスは最新の更新時刻が新しい順、その後名前の辞書順で表示します。古くなったメトリクス(stale)は表示しません。 #71631 (Julia Kartseva).
- JSON 出力フォーマットをデフォルトで整形表示するようにしました。これを制御するための新しい設定
output_format_json_pretty_printを追加し、デフォルトで有効化しました。 #72148 (Pavel Kruglov). LowCardinality(UUID)をデフォルトで許可するようにしました。これは ClickHouse Cloud のお客様の間で実用的であることが確認されています。 #73826 (Alexey Milovidov)。- インストール中のメッセージを改善しました。 #73827 (Alexey Milovidov).
- ClickHouse Cloud のパスワードリセット時のメッセージを改善。 #73831 (Alexey Milovidov).
- ファイルへの追記を行えない File テーブルのエラーメッセージを改善。 #73832 (Alexey Milovidov).
- ユーザーが誤ってターミナルでバイナリ形式(Native、Parquet、Avro など)の出力を要求した場合に、確認を求めるようにしました。これにより #59524 がクローズされました。 #73833(Alexey Milovidov)。
- ターミナル上での可読性を高めるため、Pretty および Vertical フォーマットで末尾の空白をハイライト表示するようにしました。この動作は
output_format_pretty_highlight_trailing_spaces設定で制御されます。最初の実装は #72996 にて Braden Burns によって行われました。#71590 をクローズします。#73847(Alexey Milovidov)。 clickhouse-clientとclickhouse-localは、標準入力がファイルからリダイレクトされている場合、その圧縮形式を自動検出します。これにより #70865 がクローズされました。#73848(Alexey Milovidov)。- Pretty 形式では、長すぎるカラム名をデフォルトで切り詰めるようにしました。これは
output_format_pretty_max_column_name_width_cut_toとoutput_format_pretty_max_column_name_width_min_chars_to_cutの設定で制御できます。これは #66502 における tanmaydatta の作業の継続です。#65968 をクローズします。#73851(Alexey Milovidov)。 Prettyフォーマットをさらに見やすくしました。直前のブロックの出力からあまり時間が経っていない場合は、ブロックをまとめて表示します。これは新しい設定output_format_pretty_squash_consecutive_ms(デフォルト 50 ms)およびoutput_format_pretty_squash_max_wait_ms(デフォルト 1000 ms)で制御されます。#49537 の継続です。この変更により #49153 がクローズされました。#73852(Alexey Milovidov)。- 現在マージ中のソースパーツ数を示すメトリクスを追加しました。これにより #70809 がクローズされました。 #73868 (Alexey Milovidov)。
- 出力先がターミナルの場合、
Verticalフォーマットでカラムをハイライト表示します。これはoutput_format_pretty_color設定で無効化できます。 #73898 (Alexey Milovidov)。 - MySQL 互換性を拡張し、
mysqlsh(Oracle 製の高機能な MySQL CLI)が ClickHouse に接続できるレベルまで高まりました。これはテストの実施を容易にするために必要な改善です。 #73912 (Alexey Milovidov). - Pretty フォーマットで、テーブルセル内に複数行のフィールドを描画できるようになり、可読性が向上します。これはデフォルトで有効になっており、
output_format_pretty_multiline_fields設定で制御できます。#64094 における Volodyachan の作業の継続です。この変更により #56912 がクローズされました。#74032(Alexey Milovidov)。 - ブラウザー上で動作する JavaScript から
X-ClickHouseHTTP ヘッダーを参照できるようにしました。これによりアプリケーションの開発がより容易になります。 #74180 (Alexey Milovidov). JSONEachRowWithProgressフォーマットには、メタデータ付きのイベントに加えて、合計値および極値も含まれるようになりました。さらに、rows_before_limit_at_leastとrows_before_aggregationも含まれます。このフォーマットは、部分的な結果の後に例外が発生した場合でも、例外を正しく出力します。進捗情報には経過ナノ秒が含まれるようになりました。終了時に最終の進捗イベントが 1 回発行されます。クエリ実行中の進捗情報は、interactive_delay設定の値より高い頻度では出力されません。 #74181 (Alexey Milovidov)。- Play UI 上で砂時計アイコンがスムーズに回転するようになりました。 #74182 (Alexey Milovidov).
- HTTP レスポンスが圧縮されている場合でも、パケットは到着し次第すぐに送信します。これにより、ブラウザは進捗通知用のパケットと圧縮データの両方を受信できるようになります。 #74201 (Alexey Milovidov)。
- 出力レコード数が N =
output_format_pretty_max_rowsを超える場合、先頭の N 行だけを表示する代わりに、出力テーブルを途中で分割し、先頭から N/2 行と末尾から N/2 行を表示します。#64200 の継続です。これにより #59502 がクローズされます。#73929(Alexey Milovidov)。 - ハッシュ結合アルゴリズムが有効な場合に、より汎用的な結合計画アルゴリズムを使用可能にしました。 #71926 (János Benjamin Antal)。
DateTime64型カラムに対して bloom_filter インデックスを作成できるようになりました。 #66416 (Yutong Xiao).min_age_to_force_merge_secondsとmin_age_to_force_merge_on_partition_onlyが両方とも有効な場合、パーツのマージ処理は最大バイト数制限を無視します。 #73656 (Kai Zhu)。- トレーサビリティ向上のために、OpenTelemetry スパンログテーブルに HTTP ヘッダーを追加しました。#70516 (jonymohajanGmail)。
orc形式のファイルを書き込む際に、常にGMTタイムゾーンではなく、任意のタイムゾーンを指定して使用できるようにしました。 #70615 (kevinyhzou).- クラウド間でバックアップを書き込む際に、I/O スケジューリング設定を考慮するようにしました。 #71093 (János Benjamin Antal).
system.asynchronous_metricsにmetricカラムのエイリアスであるnameを追加。 #71164 (megao).- 歴史的な理由により、クエリ
ALTER TABLE MOVE PARTITION TO TABLEは専用のALTER_MOVE_PARTITION権限ではなく、SELECTとALTER DELETE権限をチェックしていました。この PR で、このアクセス種別を利用するようにしました。互換性のため、SELECTとALTER DELETEが付与されている場合には、この権限も暗黙的に付与されますが、この動作は将来のリリースで廃止される予定です。#16403 をクローズしました。#71632(pufit)。 - ソートキー内のカラムをマテリアライズしようとした際にソート順が乱れてしまうのを許容するのではなく、例外をスローするようにしました。 #71891 (Peter Nguyen).
EXPLAIN QUERY TREEにシークレットを表示しないようにしました。#72025 (Yakov Olkhovskiy).- "native" リーダーで Parquet の整数論理型をサポートしました。 #72105 (Arthur Passos).
- デフォルトユーザーにパスワードが必要な場合、ブラウザーで対話的に認証情報を要求するようにしました。以前のバージョンではサーバーは HTTP 403 を返していましたが、現在では HTTP 401 を返します。 #72198 (Alexey Milovidov)。
- アクセス種別
CREATE_USER、ALTER_USER、DROP_USER、CREATE_ROLE、ALTER_ROLE、DROP_ROLEをグローバルなものからパラメーター付きのものに変更しました。これにより、アクセス管理に関する権限を、より細かい粒度で付与できるようになりました。#72246 (pufit)。 system.mutationsにlatest_fail_error_code_nameカラムを追加しました。スタックした mutation に関する新しいメトリクスを導入し、クラウドで発生したエラーのグラフを構築するためにこのカラムが必要です。また、必要に応じて、ノイズの少ない新しいアラートを追加できるようにします。 #72398 (Miсhael Stetsyuk)。ATTACH PARTITIONクエリでのメモリアロケーション量を削減しました。 #72583 (Konstantin Morozov).max_bytes_before_external_sortの制限がクエリ全体のメモリ消費量に依存するように変更しました(以前は 1 つのソートスレッドあたりのソートブロック内のバイト数を基準としていましたが、現在はmax_bytes_before_external_group_byと同じ意味を持ち、全スレッドを通したクエリ全体のメモリ使用量に対する総量制限となります)。さらに、ディスク上のブロックサイズを制御するための設定min_external_sort_block_bytesを追加しました。 #72598 (Azat Khuzhin)。- trace collector が課すメモリ制限を無視するようにしました。 #72606 (Azat Khuzhin).
- サーバー設定
dictionaries_lazy_loadとwait_dictionaries_load_at_startupをsystem.server_settingsに追加しました #72664 (Christoph Wurm)。 BACKUP/RESTOREクエリの一部として指定できる設定の一覧にmax_backup_bandwidthを追加しました。 #72665 (Christoph Wurm)。- ReplicatedMergeTree エンジンで出現するレプリカパーツに対するログレベルを引き下げ、レプリケーション構成のクラスターで生成されるログ量を抑えました。 #72876 (mor-akamai).
- 選言(OR 条件)における共通式の抽出を改善しました。すべての選言項に共通部分式が存在しない場合でも、結果のフィルタ式を簡略化できるようにしました。#71537 の継続です。#73271 (Dmitry Novik)。
- ストレージ
S3Queue/AzureQueueにおいて、設定を指定せずに作成されたテーブルにも設定を追加できるようになりました。 #73283 (Kseniia Sumarokova). leastおよびgreatest関数がNULL引数を、常にNULLを返して処理するか(trueの場合)、無視して処理するか(falseの場合)を制御する設定least_greatest_legacy_null_behavior(デフォルト:false)を導入しました。 #73344 (Robert Schulze).- ObjectStorageQueueMetadata のクリーンアップスレッドで Keeper のマルチリクエストを使用するようになりました。 #73357 (Antonio Andelic)。
- ClickHouse が cgroup の制御下で実行されている場合でも、システム負荷、プロセススケジューリング、メモリなどに関連するシステム全体の非同期メトリクスを引き続き収集します。これらは、ClickHouse がホスト上で多くのリソースを消費している唯一のプロセスである場合に、有用な指標となる可能性があります。 #73369 (Nikita Taranov)。
- ストレージ
S3Queueで、24.6 以前に作成された古い順序付きテーブルを、バケットを用いた新しい構造へ移行できるようにしました。 #73467 (Kseniia Sumarokova). - 既存の
system.s3queueと同様のsystem.azure_queueを追加しました。 #73477 (Kseniia Sumarokova). - 関数
parseDateTime64(およびそのバリアント)は、1970年以前 / 2106年以降の日付の入力値に対して正しい結果を返すようになりました。例:SELECT parseDateTime64InJodaSyntax('2200-01-01 00:00:00.000', 'yyyy-MM-dd HH:mm:ss.SSS')。 #73594 (zhanglistar)。 - ユーザーから報告されていた
clickhouse-disksの使い勝手に関するいくつかの問題に対処しました。#67136 をクローズしました。#73616(Daniil Ivanik)。 - storage S3(Azure)Queue でのコミット設定を変更できるようにしました。(コミット設定は
max_processed_files_before_commit、max_processed_rows_before_commit、max_processed_bytes_before_commit、max_processing_time_sec_before_commitです)。 #73635 (Kseniia Sumarokova). - ストレージ S3(Azure)Queue において、コミット制限 SETTINGS と比較できるように、ソース間の進捗状況を集約できるようにしました。 #73641 (Kseniia Sumarokova).
BACKUP/RESTOREクエリでコア設定をサポートしました。 #73650 (Vitaly Baranov)。- Parquet 出力時に
output_format_compression_levelが考慮されるようになりました。 #73651 (Arthur Passos). - Apache Arrow の
fixed_size_listをサポート対象外の型として扱うのではなく、Arrayとして読み込めるようにしました。 #73654 (Julian Meyers). - 2つのバックアップエンジン
Memory(バックアップを現在のユーザーセッション内に保持)とNull(バックアップをどこにも保持しないテスト用)を追加。#73690(Vitaly Baranov)。 concurrent_threads_soft_limit_numとconcurrent_threads_soft_limit_num_ratio_to_coresをサーバーの再起動なしに変更可能になりました。 #73713 (Sergei Trifonov)。formatReadable関数で拡張数値型(Decimalやビッグ整数)をサポートしました。 #73765 (Raúl Marín)。- Postgres のワイヤプロトコル互換で TLS をサポート。 #73812 (scanhex12).
- 関数
isIPv4Stringは、正しい形式の IPv4 アドレスの後ろにゼロバイトが続いている場合に true を返していましたが、この場合には false を返すべきでした。#65387 の継続対応です。#73946(Alexey Milovidov)。 - MySQL ワイヤープロトコルにおけるエラーコードを MySQL と互換性を持たせました。 #56831 の継続対応です。 #50957 をクローズします。 #73948(Alexey Milovidov)。
IN、NOT INなどの演算子で使用される列挙型リテラルを列挙型に対して検証し、リテラルが有効な列挙型値でない場合は例外をスローするための設定validate_enum_literals_in_opearatorsを追加しました。 #73985 (Vladimir Cherkasov)。- Storage
S3(Azure)Queueで、コミット設定で定義された単一バッチ内のすべてのファイルを、単一の Keeper トランザクションでコミットするようにしました。 #73991 (Kseniia Sumarokova). - 実行可能UDFおよび辞書のヘッダー検出を無効化しました(Function 'X': wrong result, expected Y row(s), actual Y-1 という誤結果が発生する可能性がありました)。 #73992 (Azat Khuzhin).
EXPLAIN PLANにdistributedオプションを追加しました。これにより、EXPLAIN distributed=1 ...ではリモートプランがReadFromParallelRemote*ステップに付加されるようになりました。#73994 (Nikolai Kochetov)。- Dynamic 引数に対する not/xor の戻り値型を正しくしました。 #74013 (Pavel Kruglov).
- テーブル作成後でも
add_implicit_sign_column_constraint_for_collapsing_engineを変更できるようにしました。 #74014 (Christoph Wurm). - materialized view の SELECT クエリでサブカラムをサポートしました。 #74030 (Pavel Kruglov).
clickhouse-clientでカスタムプロンプトを設定する簡単な方法が 3 つ用意されました。1. コマンドラインパラメータ--promptを使う方法、2. 設定ファイル内の<prompt>[...]</prompt>のsettingsから設定する方法、3. 同じく設定ファイル内の接続ごとの設定<connections_credentials><prompt>[...]</prompt></connections_credentials>から行う方法です。 #74168 (Christoph Wurm)。- ClickHouse Client でポート 9440 への接続時にセキュア接続かどうかを自動検出するようにしました。 #74212 (Christoph Wurm).
http_handlersでユーザー名だけでユーザーを認証できるようにしました(以前はパスワードの入力も必要でした)。 #74221 (Azat Khuzhin).- 代替クエリ言語である PRQL と KQL へのサポートが、実験的機能としてマークされました。これらを使用するには、
allow_experimental_prql_dialect = 1およびallow_experimental_kusto_dialect = 1の SETTING を指定します。 #74224 (Robert Schulze)。 - より多くの集約関数でデフォルトの
Enum型を返せるようになりました。 #74272 (Raúl Marín). OPTIMIZE TABLEで、既存のキーワードFINALの代替としてキーワードFORCEを指定できるようになりました。 #74342 (Robert Schulze)。- サーバーのシャットダウンに時間がかかりすぎる場合にアラートをトリガーするために必要となる
IsServerShuttingDownメトリクスを追加しました。 #74429 (Miсhael Stetsyuk). - EXPLAIN に Iceberg テーブルの名前を追加しました。 #74485 (alekseev-maksim).
- 旧アナライザー使用時に RECURSIVE CTE を利用した場合、より適切なエラーメッセージを表示するようにしました。 #74523 (Raúl Marín).
system.errorsに拡張エラーメッセージを表示できるようにしました。 #74574 (Vitaly Baranov).- clickhouse-keeper とのクライアント通信でパスワードを使用できるようにしました。サーバーおよびクライアントに対して適切なSSL設定を行っている場合、この機能の有用性はそれほど高くありませんが、一部のケースでは依然として有用です。パスワードは16文字を超えることはできません。Keeper Auth モデルとは関連していない機能です。 #74673 (alesapin).
- config reloader のエラーコードを追加。 #74746 (Garrett Thomas).
- MySQL および PostgreSQL のテーブル関数とエンジンにおいて、IPv6 アドレスのサポートを追加しました。 #74796 (Mikhail Koviazin).
divideDecimalに対してショートサーキット最適化を実装しました。 #74280 を修正。 #74843(Kevin Mingtarja)。- 起動スクリプト内でUSERを定義できるようになりました。 #74894 (pufit).
- Azure SAS トークンのサポートを追加しました。 #72959 (Azat Khuzhin).
バグ修正(公式安定版リリースにおけるユーザーに影響する不具合)
- 圧縮コーデックがサポートしている場合にのみ Parquet の圧縮レベルを設定するようにしました。 #74659 (Arthur Passos).
- 修飾子付きの照合ロケールを使用した場合にエラーが発生していた退行バグを修正しました。例えば、
SELECT arrayJoin(['kk 50', 'KK 01', ' KK 2', ' KK 3', 'kk 1', 'x9y99', 'x9y100']) item ORDER BY item ASC COLLATE 'tr-u-kn-true-ka-shiftedが正常に動作するようになりました。#73544(Robert Schulze)。 - keeper-client で SEQUENTIAL ノードを作成できなかった不具合を修正。 #64177 (Duc Canh Le).
position関数群における文字数カウントの誤りを修正。 #71003 (思维).- アクセスエンティティに対する
RESTORE操作で、一部の権限取り消しが正しく処理されていなかったため、本来よりも多くの権限を要求していました。この PR で問題を修正します。#71853 をクローズします。#71958(pufit)。 ALTER TABLE REPLACE/MOVE PARTITION FROM/TO TABLE実行後に処理が一時的に停止してしまう問題を解消しました。バックグラウンドタスクのスケジューリングに使用される設定を正しく取得するようにしました。 #72024 (Aleksei Filatov).- 一部の入力および出力フォーマット(例: Parquet、Arrow)における空タプルの処理を修正。 #72616 (Michael Kolupaev).
- ワイルドカードを含むデータベース/テーブルに対するカラムレベルの GRANT SELECT/INSERT 文は、今後はエラーを返すようになりました。 #72646 (Johann Gan).
- 対象のアクセスエンティティに暗黙的な権限付与があるために
REVOKE ALL ON *.*を実行できない場合がある問題を修正。 #72872 (pufit). - formatDateTime スカラー関数での正のタイムゾーンのフォーマットを修正。 #73091 (ollidraese).
- PROXYv1 経由での接続時に
auth_use_forwarded_addressが設定されている場合、送信元ポートが正しく反映されるよう修正しました。これまではプロキシのポートが誤って使用されていました。currentQueryID()関数を追加しました。 #73095 (Yakov Olkhovskiy). - TCPHandler から NativeWriter にフォーマット設定を伝播させ、
output_format_native_write_json_as_stringのような設定が正しく適用されるようにしました。 #73179 (Pavel Kruglov). - StorageObjectStorageQueue で発生していたクラッシュを修正。 #73274 (Kseniia Sumarokova).
- サーバーのシャットダウン中にまれに発生するリフレッシャブルmaterialized viewのクラッシュを修正。 #73323 (Michael Kolupaev).
formatDateTime関数の%fプレースホルダは、小数点以下の秒を常に 6 桁で出力するようになりました。これにより、MySQL のDATE_FORMAT関数と互換性のある動作になります。以前の動作は、formatdatetime_f_prints_scale_number_of_digits = 1設定を使用することで復元できます。 #73324 (ollidraese)。S3ストレージおよびテーブル関数からの読み取り時における_etagカラムによるフィルタリングを修正しました。 #73353 (Anton Popov).- 旧アナライザー使用時に、
JOIN ON式内でIN (subquery)が使用されると発生していたNot-ready Set is passed as the second argument for function 'in'エラーを修正。 #73382 (Nikolai Kochetov)。 - Dynamic および JSON カラムに対する squash 処理の準備ロジックを修正しました。以前は、型/パスの上限にまだ達していない場合でも、一部のケースで共有バリアント/共有データに新しい型が挿入されてしまうことがありました。 #73388 (Pavel Kruglov)。
- 型のバイナリデコード時にサイズの破損をチェックし、過大なメモリアロケーションを防止しました。 #73390 (Pavel Kruglov).
- parallel replicas を有効にした single-replica クラスターからの読み取り時に発生する論理エラーを修正しました。 #73403 (Michael Kolupaev).
- ZooKeeper および旧バージョンの Keeper 使用時の ObjectStorageQueue の不具合を修正。 #73420 (Antonio Andelic)。
- デフォルトで Hive パーティショニングを有効にするために必要な修正を実装しました。 #73479 (Yarik Briukhovetskyi).
- ベクトル類似性索引作成時のデータレースを修正。 #73517 (Antonio Andelic).
- Dictionary のソースに誤ったデータを持つ関数が含まれている場合に発生していたセグメンテーションフォールトを修正。 #73535 (Yarik Briukhovetskyi).
- storage S3(Azure)Queue における挿入失敗時の再試行処理を修正。#70951 をクローズ。#73546(Kseniia Sumarokova)。
LowCardinality要素を含むタプルに対して、optimize_functions_to_subcolumns設定が有効な場合に発生することがあったtupleElement関数のエラーを修正しました。 #73548 (Anton Popov)。- 範囲指定が後続する enum グロブのパースを修正。#73473 を修正。#73569(Konstantin Bogdanov)。
- 非レプリケートテーブルに対するサブクエリ内で
parallel_replicas_for_non_replicated_merge_treeが無視されていた問題を修正しました。 #73584 (Igor Nikonov). - タスクをスケジュールできない場合に
std::logical_error例外がスローされる不具合を修正しました。この問題はストレステスト中に発見されました。 #73629 (Alexander Gololobov)。 - 分散クエリに対して誤った処理ステージが適用されることによる論理エラーを回避するため、
EXPLAIN SYNTAXでクエリを解釈しないようにしました。#65205 を修正。#73634(Dmitry Novik)。 - Dynamic カラムで発生しうるデータ不整合を修正しました。
Nested columns sizes are inconsistent with local_discriminators column sizeという論理エラーが発生する可能性のある問題を修正しました。 #73644 (Pavel Kruglov). FINALとSAMPLEを含むクエリで発生するNOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。CollapsingMergeTreeに対するFINAL付きの SELECT 文で誤った結果となる問題を修正し、FINALの最適化を有効化しました。 #73682 (Anton Popov).- LIMIT BY COLUMNS で発生していたクラッシュを修正。 #73686 (Raúl Marín).
- 通常の PROJECTION の使用が強制されており、クエリが定義済みの PROJECTION と完全に一致しているにもかかわらず、その PROJECTION が選択されずにエラーが発生する不具合を修正しました。 #73700 (Shichao Jin).
- Dynamic/Object 構造のデシリアライズ処理を修正しました。これが原因で CANNOT_READ_ALL_DATA 例外が発生する可能性がありました。 #73767 (Pavel Kruglov).
- バックアップからパーツを復元する際に
metadata_version.txtをスキップします。 #73768 (Vitaly Baranov). - LIKE と組み合わせた Enum への CAST 時に発生していたセグメンテーションフォルトを修正しました。 #73775 (zhanglistar).
- ディスクとして動作しない S3 Express バケットの不具合を修正しました。 #73777 (Sameer Tamsekar).
- CollapsingMergeTree テーブルで、無効な sign カラム値を持つ行もマージできるようにしました。 #73864 (Christoph Wurm).
- オフラインのレプリカが存在する状態で DDL をクエリするとエラーになる問題を修正。 #73876 (Tuan Pham Anh).
- ネストされたタプルのフィールド名として 'keys', 'values' が明示的に指定されていない
Mapを作成できてしまうことが原因で、map()型同士の比較がまれに失敗する問題を修正しました。 #73878 (Yakov Olkhovskiy). GROUP BY ALL句を解決する際にウィンドウ関数を無視するようにしました。これにより #73501 を修正しました。#73916(Dmitry Novik)。- 暗黙的な権限の扱いを修正(以前はワイルドカードとして扱われていた)。 #73932 (Azat Khuzhin).
- ネストされた
Mapの作成時における高いメモリ使用量を修正。 #73982 (Pavel Kruglov)。 - 空キーを含むネストされた JSON のパースを修正。 #73993 (Pavel Kruglov).
- Fix: 別のエイリアスから参照されており、かつ逆順で選択された場合に、そのエイリアスが PROJECTION に追加されないことがある問題を修正。 #74033 (Yakov Olkhovskiy).
- Azure 用の plain_rewritable ディスクの初期化時に発生する "object not found" エラーを無視するようにしました。 #74059 (Julia Kartseva).
- enum 型および空テーブルに対する
anyとanyLastの挙動の不具合を修正。 #74061 (Joanna Hulboj)。 - ユーザーが Kafka テーブルエンジンでキーワード引数を指定した場合に発生する不具合を修正しました。 #74064 (Yarik Briukhovetskyi)。
- Storage
S3Queueの設定で、プレフィックスs3queue_付きと無しの間で変更する際の問題を修正しました。 #74075 (Kseniia Sumarokova). allow_push_predicate_ast_for_distributed_subqueriesという設定を追加しました。これにより、analyzer を用いた分散クエリに対して AST ベースの述語プッシュダウンが有効になります。これは、クエリプランのシリアライズに対応した分散クエリがサポートされるまでの一時的な対応策です。#66878 #69472 #65638 #68030 #73718 をクローズしました。#74085(Nikolai Kochetov)。- #73095 の変更以降、
forwarded_forフィールドにポートが含まれることがあり、その結果ポート付きのホスト名を解決できなくなる問題を修正しました。#74116 (Yakov Olkhovskiy)。 ALTER TABLE (DROP STATISTICS ...) (DROP STATISTICS ...)の誤ったフォーマットを修正しました。 #74126 (Han Fei).- Issue #66112 を修正。 #74128 (Anton Ivashkin)。
CREATE TABLEでテーブルエンジンとしてLoopを使用することはできなくなりました。以前はこの組み合わせによりセグメンテーションフォルトが発生していました。 #74137 (Yarik Briukhovetskyi)。- PostgreSQL および SQLite のテーブル関数に対する SQL インジェクションを防ぐためのセキュリティ上の問題を修正しました。 #74144 (Pablo Marcos)。
- 圧縮された Memory エンジンのテーブルからサブカラムを読み取る際に発生するクラッシュを修正。#74009 を修正。 #74161(Nikita Taranov)。
- system.detached_tables へのクエリで無限ループが発生する問題を修正しました。 #74190 (Konstantin Morozov).
- s3queue でファイルを失敗としてマークする際の論理エラーを修正。 #74216 (Kseniia Sumarokova).
- ベースバックアップからの
RESTOREにおけるネイティブコピー設定(allow_s3_native_copy/allow_azure_native_copy)を修正しました。 #74286 (Azat Khuzhin). - データベース内の detached テーブル数が
max_block_sizeの倍数となる場合に発生していた不具合を修正しました。 #74289 (Konstantin Morozov)。 - ソースと宛先で認証情報が異なる場合の ObjectStorage(例:S3)経由のコピー処理を修正しました。 #74331 (Azat Khuzhin)。
- GCS のネイティブコピーにおける「JSON API の Rewrite メソッドを使用する」設定の検出を修正しました。 #74338 (Azat Khuzhin).
BackgroundMergesAndMutationsPoolSizeの誤った計算を修正しました(誤って実際の値の 2 倍として計算されていました)。#74509 (alesapin)。- Cluster Discovery を有効にした際に Keeper の watch がリークしていた不具合を修正。 #74521 (RinChanNOW).
- UBSan によって報告されたメモリアラインメントに関する問題を修正しました。 #74512。 #74534(Arthur Passos)。
- テーブル作成時における KeeperMap の並行クリーンアップ処理を修正。 #74568 (Antonio Andelic).
EXCEPTまたはINTERSECTが存在する場合、正しいクエリ結果を維持するために、サブクエリ内で未使用の PROJECTION カラムを削除しないようにしました。#73930 を修正しました。#66465 を修正しました。#74577(Dmitry Novik)。Tupleカラムを持ち、スパースシリアライゼーションが有効になっているテーブル間でのINSERT SELECTクエリの不具合を修正しました。 #74698 (Anton Popov).- 関数
rightが const の負のオフセットに対して誤って動作していました。 #74701 (Daniil Ivanik). - クライアント側での不正な伸長処理が原因で gzip 圧縮データの挿入が失敗することがある問題を修正。 #74707 (siyuan).
- ワイルドカードを含む権限付与に対する部分的な取り消しにより、想定より多くの権限が取り消されることがありました。#74263 をクローズしました。#74751(pufit)。
- Keeper: ディスク上のログエントリの読み取りを修正。 #74785 (Antonio Andelic).
- SYSTEM REFRESH/START/STOP VIEW の権限チェックを修正しました。特定の VIEW に対するクエリを実行する際に
*.*への GRANT を持っている必要はなくなり、その VIEW への権限だけがあれば十分です。 #74789 (Alexander Tokmakov)。 hasColumnInTable関数がエイリアスカラムを考慮していなかった問題を修正し、エイリアスカラムにも対応するようにしました。 #74841 (Bharat Nallan).- Azure Blob Storage 上にあり空のカラムを含むテーブルのデータパーツマージ処理中に発生する FILE_DOESNT_EXIST エラーを修正。 #74892 (Julia Kartseva).
- 一時テーブルとの結合時のプロジェクション列名を修正し、#68872 をクローズしました。 #74897(Vladimir Cherkasov)。
ビルド/テスト/パッケージングの改善
- 汎用インストールスクリプトが、macOS 上でもインストールを促すようになりました。 #74339 (Alexey Milovidov).