後方互換性を持たない変更
クエリと構文の変更
- 誤ったエイリアス置換によって生じていたクエリのフォーマットの不整合を修正しました。注: アナライザが無効な場合、エイリアス参照を伴う
INを使用する一部のCREATE VIEWクエリは処理されなくなる可能性があります。これを避けるには、アナライザが有効になっていることを確認してください (24.3 以降はデフォルトで有効です) 。 #82838 (Alexey Milovidov). JOIN USING ()の空のカラムリストは、現在では構文エラーになります。従来は、これはクエリ実行時にINVALID_JOIN_ON_EXPRESSIONとして報告されており、場合によっては (Joinストレージとの JOIN など)LOGICAL_ERRORを引き起こすことがありました。 #92371 (Vladimir Cherkasov).ORDER BYやその他のテーブルキー式では、サブクエリは使用できなくなりました。 #96847 (Alexey Milovidov).
データ型の変更
Nullable(Tuple)のサポートを追加しました。有効にするには、allow_experimental_nullable_tuple_type = 1を設定してください。#89643 (Nihal Z. Miaji).- JSON 型の高度な共有データが、デフォルトで有効になりました。新しい JSON フォーマットで書き込まれたデータパーツは古いバージョンでは読み取れないため、25.8 より前のバージョンにダウングレードすることはできません。安全にアップグレードするには、
compatibility設定を以前のバージョンに設定するか、MergeTree 設定dynamic_serialization_version='v2'およびobject_serialization_version='v2'を設定してください。#92511 (Pavel Kruglov). - JSON 型の
SKIP REGEXPは、デフォルトで部分一致を使用するようになりました。#92847 (Pavel Kruglov). Variant型の不一致時に発生していた論理エラーを修正しました。#95811 (Bharat Nallan).- PostgreSQL の
DATEカラムは、ClickHouse ではDate32として推論されるようになりました (以前はDateとして推論されていましたが、対応範囲が狭いため、その範囲外の値ではオーバーフローする可能性がありました) 。Date32の値を PostgreSQL に挿入することもサポートされるようになりました。#95999 (Alexey Milovidov).
ストレージと索引の変更
- 転置テキスト索引のストレージレイアウトが改善され、オブジェクトストレージからの読み取り効率が向上したほか、転置テキスト索引を持つテーブルのマージ性能も改善されました。バージョン 25.12 より前に実験的なテキスト索引を使用していた場合は、アップグレード前にその索引を削除し、新しいバージョンで再構築する必要があります。 #91518 (Anton Popov).
- 統計情報のストレージフォーマットが変更され、すべての統計情報が 1 つのファイルに保存されるようになりました。 #93414 (Anton Popov).
- パーツの破損を防ぐため、索引ファイル名がエスケープされるようになりました。以前のバージョンで作成され、名前に非 ASCII 文字を含む索引は、ClickHouse で読み込めなくなります。これに対処するには、MergeTree setting
escape_index_filenamesを使用してください。 #94079 (Raúl Marín).
削除された機能
DEFLATE_QPLおよびZSTD_QATコーデックは削除されました。これらのコーデックで圧縮された既存データがある場合は、アップグレード前に別のコーデックへ変換してください。なお、これらのコーデックを使用するには、従来enable_deflate_qpl_codecまたはenable_zstd_qat_codecを有効にする必要がありました。#92150 (Robert Schulze).- 単純な
ALIASカラムへのINSERTはサポートされなくなりました (#84154 を差し戻し) 。この機能はカスタムフォーマットでは動作せず、設定による保護もありませんでした。#92849 (Azat Khuzhin). Lazyデータベースエンジンは削除され、利用できなくなりました。#93627 (Alexey Milovidov).metric_logのtransposed_with_wide_viewモードは、使用できなくなる不具合があったため削除されました。system.metric_logをこのモードで定義することはできなくなりました。#93867 (Alexey Milovidov).
設定および構成の変更
- データレイクカタログがオブジェクトストレージにアクセスできない場合にエラーとなる新しい設定が追加されました。#93606 (Konstantin Vedernikov).
- ワークロードの CPU スケジューリングは、デフォルトでプリエンプティブ方式になりました。
cpu_slot_preemptionサーバー設定を参照してください。#94060 (Sergei Trifonov). exact_rows_before_limit、rows_before_aggregation、cross_to_inner_join_rewrite、regexp_dict_allow_hyperscan、regexp_dict_flag_case_insensitive、regexp_dict_flag_dotall、dictionary_use_async_executorの各設定は、フォーマット設定から通常の設定に再分類されました。これは主に内部的な変更であり、通常はユーザーに見える副作用はありません。ただし、これらのいずれかを Iceberg、Delta Lake、Kafka、S3、S3Queue、Azure、Hive、RabbitMQ、Set、FileLog、または NATS のテーブルエンジン定義で指定していた場合は例外で、そのような定義は今後、黙って無視されるのではなくエラーになります。#94106 (Robert Schulze).do_not_merge_across_partitions_select_finalの意味が簡素化されました。以前は、この機能は明示的に設定されていなくても自動的に有効になることがあり、混乱や本番環境での問題の原因となっていました。現在は、これを1に設定すると無条件で機能が有効になり、0に設定すると新しい設定enable_automatic_decision_for_merging_across_partitions_for_final(デフォルトは1) に従います。#96110 (Nikita Taranov).- S3 スキーマ検証が追加されました。#96194 (Konstantin Vedernikov).
apply_row_policy_after_final設定はデフォルトで有効になり、ROW POLICYが本来どおりFINALを尊重するようになりました。以前optimize_move_to_prewhere_if_final=1によってFINALより前に行ポリシーが適用される動作に依存していた場合は、代わりにapply_row_policy_after_final=0を使用してください。#97279 (Nikolai Kochetov).
セキュリティとアクセス制御の変更
joinGet/joinGetOrNullで、基になる Join テーブルに対してSELECT権限が適用されるようになりました。joinGet('db.table', 'column', key)の実行には、キーカラムと取得する属性カラムの両方に対するSELECT権限が必要です。これらの権限がないクエリはACCESS_DENIEDで失敗します。移行するには、テーブル全体へのアクセスにはGRANT SELECT ON db.join_table TO userで権限を付与するか、カラムレベルのアクセスにはGRANT SELECT(key_col, attr_col) ON db.join_table TO userを使用してください。 #94307 (Vladimir Cherkasov).CREATE TABLE ... AS ...クエリでは、これまで誤ってチェックされていたSHOW TABLESではなく、SHOW COLUMNS権限が必要になりました。 #94556 (pufit).
INSERT と重複排除に関する変更
- すべての INSERT で、重複排除がデフォルトで有効になりました。以前は、非同期 INSERT と materialized view では無効でしたが、同期 INSERT では有効でした。従来の動作を維持するには、
deduplicate_insert='backward_compatible_choice'を明示的に設定してください (deduplicate_blocks_in_dependent_materialized_viewsも同様です) 。 #95970 (Sema Checherinda).
システムテーブルの変更
- S3Queue と AzureQueue のインメモリメタデータが制限されるようになりました。システムテーブルの名前も変更され、
system.s3queueはsystem.s3queue_metadata_cacheに、system.azure_queueはsystem.azure_queue_metadata_cacheになりました。#95809 (Kseniia Sumarokova).
その他の破壊的変更
- 無効な入力を渡して呼び出した際にクラッシュまたはハングすることがあった h3 index 関数を修正しました。#93657 (Michael Kolupaev) 。
新機能
認証
- 時間ベースのワンタイムパスワード (TOTP) に、認証方式として対応しました。#71273 (Vladimir Cherkasov).
関数
- 指定した区切り文字で分割された文字列内の部分文字列の順序を反転する
reverseBySeparator関数が追加されました。#91780 (Xuewei Wang). - sRGB 色空間と OKLAB 色空間を相互変換する
colorOKLABToSRGB関数およびcolorSRGBToOKLAB関数が追加されました。#93361 (Pranav Tiwari). - 2 点間の コサイン距離を近似する
cosineDistanceTransposed関数が追加されました。#93621 (Raufs Dunamalijevs). xxh3_128ハッシュ関数が追加されました。#96055 (Raúl Marín).- MergeTree の索引使用状況を分析する
mergeTreeAnalyzeIndex()関数が追加されました。#92954 (Azat Khuzhin). - 関数が、新しい
FunctionVariantAdaptorを介してVariant型をサポートするようになりました。#90900 (Bharat Nallan). - 一部の関数は、SQL で括弧なしで呼び出せるようになりました。#94678 (Aly Kafoury).
システムテーブル
- UDF の読み込みステータスと設定を監視するための
system.user_defined_functionsテーブルを追加しました。 #90340 (Xu Jia). system.zookeeper_infoテーブルを追加しました。 #90809 (Smita Kulkarni).- 昇順の素数を含む
system.primesテーブルとprimesテーブル関数を追加しました。 #92776 (Nihal Z. Miaji). - 各データパーツ内のファイル数を示す
filesカラムをsystem.partsに追加しました。 #94337 (Match). - 既存の failpoint とその有効/無効を確認するための
system.fail_pointsテーブルを追加しました。 #96762 (Pedro Ferreira).
テーブルエンジンとストレージ
Arrayカラムのテキスト索引をサポートしました。#89895 (Jimmy Aguilar Mena).- Paimon REST カタログのサポートを追加しました。#92011 (JIaQi Tang).
icebergLocalClusterテーブル関数を追加しました。#93323 (Anton Ivashkin).lazy_load_tablesデータベース設定を追加しました。有効にすると、データベースの起動時にテーブルは読み込まれず、代わりに軽量なStorageTableProxyが作成され、実際のテーブルエンジンは初回アクセス時に実体化されます。#96283 (xiaohuanlin).DatabaseReplicated向けに補助的な ZooKeeper をサポートしました。#91683 (RinChanNOW).- cache 内の data ファイルと system ファイルを、それぞれ別のセグメントに分割できるようになりました。#87834 (MikhailBurdukov).
- 冗長なファイルダウンロードを回避して読み取り性能を向上させるため、Parquet メタデータ用の新しい SLRU cache を追加しました。この cache は
SYSTEM DROP PARQUET METADATA CACHEで削除できます。#89750 (Grant Holly). - データレイクのテーブルで、Parquet リーダー v3 における
PREWHEREおよび多段階PREWHEREがサポートされるようになりました。#93542 (Konstantin Vedernikov). - 複数のレプリカにまたがる分散索引解析を追加しました。共有ストレージや大規模データ量の環境で有用です。#86786 (Azat Khuzhin).
挿入と重複排除
- 非同期 INSERT の重複排除が、依存先の materialized view でも機能するようになりました。
block_idの衝突が発生した場合、元のブロックをフィルタリングして衝突したblock_idに関連する行を除外し、残りの行は関連するすべての materialized view クエリを通じて変換されます。 #89140 (Sema Checherinda). - 非同期 INSERT で並列クォーラムがサポートされるようになりました。挿入されたデータはクォーラムまでレプリケートされ、重複が見つかった場合は、以前に挿入されたデータのレプリケーションも完了するまでクエリが待機します。 #93356 (Sema Checherinda).
- 統一された重複排除ハッシュへの移行を有効にする
insert_deduplication_versionサーバー設定が追加されました。 #95409 (Sema Checherinda). - 重複排除ハッシュの移行を開始しました。 #97562 (Sema Checherinda).
SQL とクエリ機能
- 既存の
SYSTEM DROP [...] CACHEに代わる、より分かりやすいSYSTEM CLEAR [...] CACHE構文を追加しました。従来の構文も引き続き利用できます。#93727 (Pranav Tiwari)。 - 結果のパーツをコミットせずにマージをシミュレートする
OPTIMIZE <table> DRY RUN PARTS <part names>クエリを追加しました。マージの正確性の検証、マージ関連バグの再現、マージ性能のベンチマークに役立ちます。#96122 (Anton Popov)。 ignore_on_cluster_for_replicated_database設定が有効な場合、ON CLUSTERを含む DDLクエリを Replicatedデータベースに対して実行できるようになりました。クラスター名は無視されます。#92872 (Kirill)。- プロジェクション索引機能を簡素化し、拡張しやすくするための新しい構文とフレームワークを導入しました。#91844 (Amos Bird)。
設定と構成
max_insert_block_size_bytes設定を追加し、挿入されるブロックの形成をより細かく制御できるようにしました。#92833 (Kirill Kopnev).use_primary_key設定を追加しました。これをfalseに設定すると、主キーに基づくグラニュールプルーニングが無効になります。#93319 (Nihal Z. Miaji).default_dictionary_database設定を追加しました。これにより、データベース修飾子なしで参照された external Dictionary を、指定したデフォルトデータベース内で ClickHouse が解決できるようになります。これにより、XML で定義されたグローバル Dictionary から、SQL で定義されたデータベースごとの Dictionary への移行が容易になります。#91412 (Dmitrii Plotnikov).check_named_collection_dependencies設定 (デフォルトで有効) を追加し、テーブルで使用されている named collections が削除されるのを防げるようにしました。#96181 (Pablo Marcos).- 同時実行制御のために max-min fair スケジューラを追加し、多数のクエリが限られた CPU スロットを奪い合う高オーバーサブスクリプション時でも、より公平に処理できるようにしました。
concurrent_threads_schedulerサーバー設定のデフォルト値はfair_round_robinではなくmax_min_fairになり、短時間で完了するクエリが長時間実行されるクエリによって不利にならなくなりました。#94732 #95300 (Sergei Trifonov). logger.startup_console_levelおよびlogger.shutdown_console_levelの設定オプションを追加し、それぞれ ClickHouse の起動時および終了時のコンソールのログレベルを上書きできるようにしました。#95919 (Garrett Thomas).
監視
- バージョン情報を含む
ClickHouse_Infoメトリクスを Prometheus の/metricsエンドポイントに追加しました。これにより、詳細なバージョン情報の推移を時系列で追跡するグラフを作成できるようになりました。#91125 (Christoph Wurm) 。
実験的機能
- ベクトル検索でクラスター内のレプリカに負荷を分散できるようになり、単一の VM のメモリ容量を超える大規模なベクトル索引もサポート可能になりました。#95876 (Shankar Iyer).
ast_fuzzer_runsおよびast_fuzzer_any_queryの設定で制御されるサーバー側の AST fuzzer を追加しました。有効にすると、サーバーは通常の実行後に各クエリへランダムな変異を加えたものを実行し、その結果を破棄します。#97568 (Alexey Milovidov).
改善
クエリとSQL
- 相関サブクエリで、より多くのテーブルエンジンとデータソースの種類がサポートされるようになりました。#90175 (Dmitry Novik) 。
- 非定数の
INがスカラー値に対してサポートされるようになりました (例:val1 NOT IN if(cond, val2, val3)) 。#93495 (Yarik Briukhovetskyi) 。 - JOIN における拡張テーブル別名のサポートを追加しました (例:
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b) 。#95331 (Yarik Briukhovetskyi) 。 EXPLAIN indices = 1は、EXPLAIN indexes = 1の別名として利用できるようになりました。#92774 (Pranav Tiwari).numbersおよびprimesテーブル関数の filter pushdown を改善 — ClickHouse はWHERE条件から保守的な値の範囲を導き出して数列の生成を制限できるようになり、無制限なスキャンを回避します。#96115 (Nihal Z. Miaji).- 同値集合の最適化が、連続する複数の
INNER JOIN演算でも機能するようになりました。これにより、結合チェーン内の任意の table に適用された filter が、関連するすべての table に自動的にプッシュダウンされます。#96596 (Vladimir Cherkasov) 。 FROM句内の単一のサブクエリでも、自動クラスター・テーブル関数が使用されるようになりました。#96332 (phulv94).- プレフィックスが ASCII 文字のみで構成されている場合、
startsWithUTF8によるフィルタリング時に主キー索引が使用されるようになりました。#97055 (vkcku). assumeNotNull、coalesce、ifNullにより、キーカラムがこれらの関数でラップされている場合でも、範囲述語に対する主キーおよびスキップ索引のプルーニングが有効になりました。#94754 (Nihal Z. Miaji) 。- MergeTree から読み取る際、未使用のカラムが読み取りステップからも削除されるようになりました。これは、特にフィルターが
PREWHEREにプッシュダウンされる場合に有効です。#89982 (János Benjamin Antal). use_join_disjunctions_push_downの最適化は、デフォルトで有効になりました。#89313 (Alexey Milovidov) 。enable_join_runtime_filters最適化はデフォルトで有効になりました。#89314 (Alexey Milovidov) 。- JOIN ランタイムフィルタのオーバーヘッドが低減されました。これは、bloom filter でセットされる bits が多すぎる場合や、フィルタで除外される行が少なすぎる場合に、フィルタを自動的に無効化するようになったためです。 #91578 (Alexander Gololobov).
use_hash_table_stats_for_join_reordering設定 (デフォルトで有効) を追加し、join の並べ替えに実行時のハッシュテーブルサイズ統計を使用するかどうかを制御できるようにしました。#93912 (Vladimir Cherkasov) 。- 索引解析は、クエリの実行がローカルか並列レプリカかにかかわらず、1 回だけ行われるようになりました。#94854 (Nikita Taranov).
FINALクエリで、スキップ索引の対象が主キーを構成するカラムである場合、他のパーツに対する追加の主キー積集合チェックはスキップされるようになりました。#93899 (Shankar Iyer) 。DROP DATABASEは、データベースに読み込み依存関係のあるテーブルが含まれている場合のクラッシュ安全性を向上させるため、依存関係の逆順でテーブルを削除するようになりました。#97057 (Alexey Milovidov).- ミューテーションの完了を同期的に待機する際に、クエリのキャンセルと時間制限が反映されるようになりました。#96756 (Alexey Milovidov).
DROP COLUMNmutation の直後にADD COLUMNをすばやく実行した場合に、削除済みデータが復活するのを防止しました。#96713 (Alexey Milovidov).UPDATEとRENAME COLUMNを伴う競合するALTER式で、論理エラーではなく適切な例外がスローされるようになりました。#96022 (Alexey Milovidov).- 集約のキーカラムについて、推定総行数と NDV (異なる値の数) の統計情報が収集されるようになりました。 #92812 (Alexander Gololobov).
- すべてのレプリカが、並列レプリカ読み取り時に取り残された範囲を並列に引き継げるようになり、負荷分散が改善され、ロングテールレイテンシが低減されました。#91374 (zoomxi) 。
- 選択性の高い
PREWHEREフィルター使用時の自動並列レプリカの推定精度を向上しました。#97231 (Nikita Taranov). joinGetが一時テーブルに対応しました。#92973 (Eduard Karacharov) 。- 外部集約、ソート、および join は、あらゆるコンテキストで
temporary_files_codecクエリ設定に従うようになりました。#92388 (Vladimir Cherkasov) 。 - ベクトル類似度検索の実行計画の最適化は、検索対象カラムに索引がある場合にのみ適用されるようになりました。#94998 (Eduard Karacharov) 。
テーブルエンジンとストレージ
StorageEmbeddedRocksDBが、主キーとして複数のカラムをサポートするようになりました。#33917 (usurai).ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name>構文が追加され、filesystem 上で手動で名前を変更しなくても、detached/配下の任意のサブディレクトリ (たとえばbroken-on-startやunexpectedプレフィックスを持つパーツ) からパーツを Attach できるようになりました。#74816 (Anton Popov).min_free_disk_bytes_to_perform_insertが JBOD ボリュームでも正しく動作するようになりました。#90878 (Aleksandr Musorin).max_parts_to_merge_at_onceが、TTL の drop-part マージ時にも尊重されるようになりました。#95315 (Kseniia Sumarokova).- バックグラウンド操作 (mutate、merge) を、
defaultprofile で通常のクエリと設定を共有するのではなく、backgroundprofile で個別に設定できるようになりました。#93905 (Arsen Muk). - サイズを正確に計算するようにしてサブカラムの読み取りを改善し、メモリ使用量を削減するとともに速度も向上しました。#96251 (Pavel Kruglov).
split_intersecting_parts_ranges_into_layersで生成されるパイプラインのストリーム数を制限し、過剰なメモリ消費を防ぐようにしました。#96478 (Nikita Taranov).- テキスト索引が GA になりました。#96794 (Robert Schulze).
QBitが GA になりました。#95358 (Raufs Dunamalijevs).QBit同士を等価比較できるようになりました。#94078 (Raufs Dunamalijevs).enable_positional_arguments_for_projectionsを使用してテーブルスキーマを保存する際、位置引数ではなく式が保存されるようになり、この設定を無効にした状態でもサーバーを再起動できるようになりました。#96372 (Alexey Milovidov).- Replicated データベースでは、cache 済みのクラスターがダミークエリのたびに更新されなくなりました。#96897 (Tuan Pham Anh).
- DDLWorker の状態をリセットするための
SYSTEM RESET DDL WORKER [ON CLUSTER]クエリが追加され、ホスト ID の更新時にレプリカのアクティビティを更新するのに役立ちます。#93780 (Tuan Pham Anh).
データレイク
- Delta Lake の削除ベクター対応を追加しました。#93852 (Kseniia Sumarokova)。
- 削除ベクターは
deltaLakeClusterでもサポートされるようになりました。#94365 (Kseniia Sumarokova)。 - Delta Lake が macOS で利用できるようになりました。#95985 (Alexey Milovidov)。
- Delta Lake でメタデータから
count()の結果を取得し、system.tablesに正しいテーブル統計情報 (合計バイト数/行数) を表示するようになりました。#96190 (Kseniia Sumarokova)。 system.tablesから Delta Lake テーブルをクエリする際、オブジェクトストレージの読み取りをスキップするようになりました。#95899 (Antonio Andelic)。- delta-kernel ログのデバッグ用に
SYSTEM RELOAD DELTA KERNEL TRACING <level>コマンドを追加しました。#96763 (Kseniia Sumarokova)。 - Glue メタデータで
metadata_locationが指定されていない場合、Iceberg テーブルのメタデータの場所を自動的に判定するようになりました。#91994 (Andrey Zvonov)。 - Iceberg のマニフェストファイルのエントリで、position delete file 名の下限値と上限値を解析するようになり、データファイルの選択が改善されました。#93980 (Daniil Ivanik)。
- Iceberg テーブルで
PREWHERE最適化を有効にしました。#95476 (Konstantin Vedernikov)。 - Iceberg テーブルで、スレッドとメモリ制限をデータファイルリーダーと position delete file リーダーの間で共有するようになりました。#94701 (Yang Jiang)。
- Iceberg テーブルで
ALTER TABLE RENAME COLUMNをサポートしました。#97455 (murphy-4o)。 - データレイクで Google Cloud Storage をサポートしました。#93866 (Konstantin Vedernikov)。
- Unity Catalog で長時間実行されるクエリ中に、S3 アクセストークンを動的に更新するようになりました。#95069 (Konstantin Vedernikov)。
aws_role_arnおよびaws_role_session_name設定を使用して、Glue カタログへのロールベースアクセスを追加しました。#90825 (Antonio Andelic)。
S3Queue
- S3Queue が ordered モードで Hive パーティション化を追跡するようになりました。#81040 (Anton Ivashkin).
- バケットを使って S3Queue の ordered モードの処理をリファクタリングし、Keeper へのリクエスト数を削減してパフォーマンスを向上させました。#92889 (Kseniia Sumarokova).
- S3Queue の ordered モードに、より汎用的なパーティション化のサポートを追加しました。#94321 (Bharat Nallan).
- ordered モードの S3Queue に、パーティションキーに基づくバケット化を追加しました。#94698 (Bharat Nallan).
- S3Queue で、
keeper_path設定による補助的な ZooKeeper をサポートしました。#95203 (Diego Nieto). - S3(Azure)Queue の ordered モードで、制限を追跡することで失敗したノードをクリーンアップするようになりました。#94412 (Kseniia Sumarokova).
S3 とオブジェクトストレージ
- S3 の
x-amz-server-side-encryptionヘッダーは、HeadObject、UploadPart、CompleteMultipartUploadリクエストには渡されなくなりました。#64577 (Francisco J. Jurado Moreno). - S3 table engine と
s3テーブル関数の 名前付きコレクション で、storage_class_nameを指定できるようになりました。#91926 (János Benjamin Antal). - インスタンスプロファイル認証情報を使用して多数の同時実行 S3 クエリを実行する際に発生していた EC2 metadata エンドポイントのスロットリングを修正しました。認証情報プロバイダーは cache され、すべてのクエリで共有されるようになりました。#92891 (Sav).
- AWS S3 C++ SDK に、MinIO 固有のエラーに対応するエラーコードマッピングを含む MinIO 互換サポートを追加し、セルフホストの MinIO クラスターの信頼性を向上させました。#93082 (XiaoBinMu).
- 認証情報を確認するためのヒントを追加し、S3 の認証エラーメッセージを改善しました。#95648 (Gerald Latkovic).
- Azure Blob Storage では、ネイティブコピーが何らかのエラーで失敗した場合、read-write コピーにフォールバックするようになりました (以前は Unauthorized の場合のみ) 。#92888 (Smita Kulkarni).
関数
avg()が、Date、DateTime、Time型の値を引数としてサポートするようになりました。 #87845 (Yarik Briukhovetskyi).mapContainsKeyLikeとmapContainsValueLikeで、mapKeys()またはmapValues()に対するテキスト索引を利用できるようになりました。 #93049 (Michael Jarrett).flipCoordinatesがGeometry型をサポートするようになりました。 #93303 (Bharat Nallan).hasAnyTokens関数およびhasAllTokens関数の 64 トークン制限を撤廃しました。 #95152 (Elmi Ahmadov).- 他の距離関数との一貫性を保つため、
cosineDistanceの別名としてdistanceCosineを追加しました。 #96065 (Raufs Dunamalijevs). - ClickHouse KQL に
iif関数を追加しました。 #94790 (happyso). use_variant_as_common_typeがデフォルトで有効になり、Array、UNIONクエリ、およびif/multiIf/caseの分岐内で互換性のない型を扱えるようになりました。 #90677 (Alexey Milovidov).
設定と構成
use_skip_indexes_on_data_readはデフォルトで有効になっています。#93407 (Shankar Iyer) 。add_minmax_index_for_time_columns設定を追加しました。有効にすると、すべてのDate、Date32、Time、Time64、DateTime、DateTime64カラムに対して minmax 索引が自動的に作成されます。#93355 (Michael Jarrett).- マージ時に統計をマテリアライズするかどうかを制御する
materialize_statistics_on_merge設定 (デフォルトで有効) が追加されました。#93379 (Han Fei) 。 - 悪意のあるペイロードを防ぐため、バイナリフォーマットでデコードできる型ノードの総数を制限する
input_format_binary_max_type_complexity設定が追加されました。 #92519 (Raufs Dunamalijevs). - 特定のイベント名に対してのみ
trace_profile_eventによるトレースを行うよう制限するtrace_profile_events_list設定を追加しました。#92298 (Alexey Milovidov) 。 type_json_allow_duplicated_key_with_literal_and_nested_object設定を追加し、一方がリテラルでもう一方がネストされたオブジェクトである JSON において、重複するパスを許可できるようにしました。これは、パスの deduplication が強制される前に作成されたデータとの後方互換性を維持するためです。#93604 (Pavel Kruglov).- マージおよびパース時に JSON カラム内の動的サブカラムを制限するため、
merge_max_dynamic_subcolumns_in_compact_partMergeTree 設定とmax_dynamic_subcolumns_in_json_type_parsingクエリレベルの設定が追加されました。#94184 (Pavel Kruglov). use_statisticsをallow_statistics_optimizeのaliasとして追加し、use_primary_keyおよびuse_skip_indexesと整合するようにしました。#94366 (Robert Schulze) 。- 要素の存在を確認できるよう、数値から Enum への変換時に
input_format_numbers_enum_on_conversion_errorを有効にしました。#94384 (Elmi Ahmadov) 。 - テーブルに行ポリシーが設定されているにもかかわらず、現在のユーザーに適用されるものが1つもない場合に例外を発生させる設定が追加され、設定ミスの可能性を検出できるようになりました。#95014 (Vitaly Baranov).
- 互換性バージョン 26.2 以降では、
enable_max_bytes_limit_for_min_age_to_force_mergeがデフォルトで有効になります。 #95917 (Christoph Wurm). core_dump.size_limitは、server を再起動しなくてもホットリロードできるようになりました。#96524 (Miсhael Stetsyuk).- 設定の再読み込み時に、コマンドラインのオーバーライドが適用されるようになりました。#80295 (Alexey Milovidov).
- サーバーログに、複合ローテーション戦略 (サイズ + 時間) が追加されました。 #87620 (Jianmei Zhang).
- 分散索引解析を、パーツ数 (
distributed_index_analysis_min_parts_to_activate) および索引サイズ (distributed_index_analysis_min_indexes_size_to_activate) に基づいて有効化できるようになりました。#95216 (Azat Khuzhin) 。 - Statistics cache は、更新間隔 300 秒でデフォルトで有効になりました。#95841 (Han Fei) 。
path構成パラメータは、起動時に作業ディレクトリを基準とする相対パスとして解決されるようになり、データディレクトリが想定外の場所に配置されるのを防げるようになりました。#96305 (Alexey Milovidov).
システムテーブルと監視
- 診断機能の向上のため、
system.mutationsにparts_postpone_reasonsカラムを追加しました。#92206 (Shaohua Wang). system.data_skipping_indicesにcreation(implicit/explicit) カラムを追加しました。#92378 (Raúl Marín).- Running タスクが
system.background_schedule_poolおよび対応するログテーブルに反映されるようになりました。#92587 (Azat Khuzhin). - 実行中の非内部クエリ数を追跡する
QueryNonInternalMetric を追加しました。これにより、max_concurrent_queries制限に対する同時実行数の監視がしやすくなります。#94284 (Ashwath Singh). - 最も長時間実行されている merge の経過時間を示す非同期 Metric を追加しました。#94825 (Raúl Marín).
- 物理的な connection を反映するため、
query_logにconnection_addressとconnection_portを追加しました (proxy 経由で接続している場合に便利です) 。#95471 (Yakov Olkhovskiy). system.crash_logに追加情報を加えました。#94112 (Miсhael Stetsyuk).system.aggregated_zookeeper_logに component 名を追加しました。#95882 (Antonio Andelic).- 利用可能なすべてのトークナイザーを表示する
system.tokenizersテーブルを追加しました。#96753 (Robert Schulze). - jemalloc メモリアロケータの統計情報を対話的に可視化するための
system.jemalloc_statsテーブルと/jemalloc.htmlHTTP エンドポイント を追加しました。#97077 (Antonio Andelic). - raw、シンボル化された、collapsed の出力フォーマットに対応した、jemalloc ヒーププロファイルの読み取りと分析のための
system.jemalloc_profile_textテーブルを追加しました。#97218 (Antonio Andelic). MUTATE_PARTおよびMUTATE_PART_STARTイベント向けに、system.part_logにmutation_idsを追加しました。#93811 (Shaohua Wang).- ネストされたグローバル server settings (例:
logger.level) が、system.server_settingsで部分的に見えるようになりました。#94001 (Hechem Selmi). view_duration_msは、スレッド の継続時間の合計ではなく、グループがアクティブだった時間を示すようになりました。#94966 (Sema Checherinda).system.blob_storage_logが Azure Blob Storage、Local、HDFS でも利用可能になりました。あわせてerror_codeカラムも追加しました。#93105 (Alexey Milovidov).- 平均より遅い Background task は、設定可能なしきい値 (
background_schedule_pool_log.duration_threshold_milliseconds、デフォルトは 30ms) を超えるとログに記録されるようになりました。#92965 (Azat Khuzhin). - URL ストレージの password は、クエリログに表示されなくなりました。#93245 (Konstantin Vedernikov).
ClickHouse Keeper
- 最後にコミットされたインデックスより前のログが存在する場合でも、Keeper のログエントリ内のギャップを正しく処理するようになりました。#90403 (Antonio Andelic).
- Keeper リクエストに対する OpenTelemetry トレーシングを追加しました。#91332 (Miсhael Stetsyuk).
- 新しい Keeper メトリクス
KeeperChangelogWrittenBytes、KeeperChangelogFileSyncMicroseconds、KeeperSnapshotWrittenBytes、KeeperSnapshotFileSyncMicroseconds、KeeperBatchSizeElements、KeeperBatchSizeBytesを追加しました。#92149 (Miсhael Stetsyuk). CHECK_STATおよびTRY_REMOVEの Keeper 拡張機能がデフォルトで有効になりました。#93886 (Mikhail Artemenko).- 壊れたスナップショットや不整合な changelog を検出した場合、Keeper は異常終了するのではなく例外を送出するようになり、より安全に復旧するために手動での介入が必要になります。#94168 (Antonio Andelic).
getChildrenKeeper リクエストにwith_dataおよびwith_stat拡張機能を追加し、1 回の操作で子ノードをそのデータおよび stat 情報とともに取得できるようにしました。#94826 (Nikolay Degterinsky).- クラスターの構成失敗につながる可能性がある Keeper の設定不備を検出するチェックを追加しました。#94682 (Konstantin Bogdanov).
- Database Replicated でのテーブル取得を改善するため、
with_dataKeeper 拡張機能のサポートを追加しました。#96090 (Nikolay Degterinsky). system.zookeeper経由で補助的な ZooKeeper への挿入が可能になりました。#92092 (RinChanNOW).
メモリ管理
- ファイルシステムキャッシュの領域予約を最適化し、エビクション候補を排他ロックを保持せずに収集できるようにしました。#82764 (Kseniia Sumarokova).
- リモートテーブルエンジン/関数向けに、ファイルシステムキャッシュの読み取りバッファで並列読み取りを有効化しました。#71781 (Kseniia Sumarokova).
- jemalloc の dirty page の即時パージを有効にし、Linux 以外のシステムでのメモリ使用量を削減しました。#93360 (Eduard Karacharov).
- jemalloc の dirty page のパージは、メインの MemoryWorker スレッドとは別スレッドで実行されるようになりました。さらに、総メモリ使用率に基づいてパージを行うための
memory_worker_purge_total_memory_threshold_ratioconfig を追加しました。#94902 (Antonio Andelic). - ClickHouse が継続的なメモリ逼迫状態にある場合、jemalloc の dirty page decay が動的に無効化されるようになりました。#95145 (Antonio Andelic).
- MergeTree からデータを読み取る前に明示的なメモリ消費チェックを追加し、production 環境での経験に基づいてスレッドプールのキューサイズを引き下げました。#94692 (Nikita Mikhaylov).
- ユーザー認証の前に総メモリ制限をチェックするようになり、制限を超えた場合は
memory limit exceededをスローします。#95003 (Nikolai Kochetov). - query conditions cache のメモリ使用量の計測が不正確だった問題を修正しました。#95478 (Nikita Mikhaylov).
- aggregation/ソート 時にディスクへのスピルが発生する際のクエリメモリ使用量の検出を、より堅牢にしました。#92500 (Azat Khuzhin).
- CPU が枯渇した状況では、プロセス保護のために scheduler が MemoryWorker スレッドを優先するようになりました。#94864 (Nikita Mikhaylov).
- テーブルからの読み取り時に、場合によって ClickHouse がメモリ制限を守らない問題を修正しました。#93715 (Nikita Mikhaylov).
データフォーマット
- Parquet リーダーで、
TupleまたはMapカラムを JSON として読み込めるようになりました。#92864 (Michael Kolupaev). - Parquet リーダーで空のタプルがサポートされるようになりました。#92868 (Michael Kolupaev).
- Arrow/ArrowStream フォーマットでは、
Date型が Arrow ネイティブのdate32型 (従来はuint16) としてシリアライズされるようになりました。従来の動作はoutput_format_arrow_date_as_uint16設定で復元できます。#96860 (Alexey Milovidov). Hash出力フォーマットが block サイズに依存しなくなりました。#94503 (Alexey Milovidov).- Pretty JSON フォーマットでは、単純な型が別の行に出力されなくなりました。#93836 (Pavel Kruglov).
- スキーマ推論で
allow_experimental_nullable_tuple_typeが考慮されるようになりました。これを有効にすると、欠落したネストオブジェクトはNULL要素のタプルではなくNULLになることがあります。#95525 (Nihal Z. Miaji). - SQL フォーマッタで、
SELECTを括弧で囲む代わりに、AS SELECTの前にCOMMENTを出力するようになりました。#96293 (Alexey Milovidov). - simdcomp を使用した postings list の圧縮を最適化しました。#92871 (Peng Jian).
バックアップと復元
- リフレッシュ可能なマテリアライズドビューのターゲットデータをバックアップするかどうかを制御するためのバックアップ設定
backup_data_from_refreshable_materialized_view_targetsを追加しました。APPENDリフレッシュ戦略を持つ RMV のターゲットは、常にバックアップされます。#93658 (Julia Kartseva). - S3 および Azure Blob Storage 向けに、SQL で定義された名前付きコレクションを
BACKUP/RESTOREでサポートしました。#94605 (Pablo Marcos).
Named collections と Dictionaries
- MongoDB table function で、named collection のパラメーターのオーバーライドが許可されるようになりました。#89616 (vanchaklar).
- YTsaurus の dictionaries と tables で named collections が有効になりました。#94582 (MikhailBurdukov).
- YTsaurus の dynamic table の Dictionary ソースに、カラム定義を渡せるようになりました。#92391 (MikhailBurdukov).
- パラメーター化ビューのスキーマが、明示的に指定された場合に表示されるようになりました。#90220 (Grigorii Sokolik).
重複排除
insert_select_deduplicate設定が見直され、後方互換性のオプションが追加されました。#92951 (Sema Checherinda) 。- materialized view が関係する場合でも、非同期 INSERT で重複排除を行えるようになりました。#93957 (Sema Checherinda) 。
その他の改善
SYSTEM INSTRUMENT ADD/REMOVEの UX を改善しました。関数名に文字列リテラルを使えるようになり、一致するすべての関数にパッチが適用されるようになったほか、REMOVEでfunction_nameもサポートされました。#93345 (Pablo Marcos).- 一時停止可能な failpoint 向けに
SYSTEM NOTIFY FAILPOINTを追加し、PAUSE/RESUME 向けにSYSTEM WAIT FAILPOINTを追加しました。#92368 (Shaohua Wang). system.trace_log、system.symbols、およびdemangle関数で、C++ の関数名が正しく表示されるようになりました。#93075 (Alexey Milovidov).- jemalloc のプロファイルがシンボル付きで書き込まれるようになり、ヒーププロファイル生成時にバイナリが不要になりました。#93099 (Azat Khuzhin).
- スタック巻き戻し中に
dropReplicationSlotが例外を送出した場合、MaterializedPostgreSQLデータベースにテーブルをアタッチする際にクラッシュする問題を修正しました。#96871 (Alexey Milovidov). CREATE TABLEが失敗した際に、不要な残留物が残る可能性がある問題を修正しました。#94174 (Azat Khuzhin).- パスワードで保護された TLS 秘密鍵を使用した際に、未初期化メモリにアクセスする問題を修正しました。#94182 (Konstantin Bogdanov).
alter table ... modify setting ...がロック取得中にタイムアウトした場合、論理エラーではなくタイムアウトエラーを返すようになりました。#93856 (Han Fei).- ソケットのタイムアウトに対する CPU プロファイラおよびリアルタイムプロファイラの相互運用性を改善しました。#96601 (Sergei Trifonov).
- リリースビルドで高速な libcxx ハードニング (主に境界外チェック) を有効化し、目立った性能への影響なしに利用できるようにしました。#94757 (Miсhael Stetsyuk).
パフォーマンス改善
JOIN パフォーマンス
ColumnVector::replicateに動的ディスパッチを実装し、一部のハッシュ結合演算を高速化しました。#79573 (Raúl Marín).- より多くのフィルタを JOIN にプッシュダウンできるようになりました。#85556 (Nikita Taranov).
- フィルタが片側の入力のみを使用する場合、
ANY、SEMI、ANTIJOIN に対して、JOINON条件からのフィルタのプッシュダウンを拡張しました。#92584 (Dmitry Novik). SEMI JOINのフィルタのプッシュダウンに、同値集合を使用できるようになりました。#92837 (Dmitry Novik).- 複雑な条件式に対して、
ParallelHashJoinにおける非結合行の処理を並列化しました。これはparallel_non_joined_rows_processing設定で制御されます (デフォルトで有効) 。#92068 (Yarik Briukhovetskyi). - 右側が空の場合、ハッシュ結合では左側の読み取りを完全にスキップするようになり、重いフィルタ処理や集約による不要な処理を回避します。#94062 (Alexander Gololobov).
RIGHT OUTERJOIN で JOIN ランタイムフィルタがサポートされるようになりました。#96183 (Hechem Selmi).- PREWHERE 最適化は、JOIN ランタイムフィルタの最適化後まで遅らせるようになり、ランタイムフィルタを PREWHERE にもプッシュダウンできるようになりました。#95838 (Alexander Gololobov).
クエリ最適化
- パーティションキーがソートキーと一致するか、そのプレフィックスである場合、ウィンドウ関数に対するソート順の最適化を無効化し、並列実行性能を向上させました。#87299 (Nikita Taranov).
- 外側のフィルターがビューにプッシュダウンされるようになり、ローカルノードとリモートノードの両方で PREWHERE を適用できるようになりました。#88316 (Igor Nikonov).
- 小数の
LIMITおよびOFFSETに対する性能とメモリ使用量を最適化しました。#91167 (Ahmed Gouda). - 仮想カラムに対する定数フィルターは、不要に繰り返し評価されなくなりました。#91588 (c-end).
- 主キー内の任意の決定論的な式 (例:
ORDER BY cityHash64(user_id)) を、データスキップに使用できるようになりました。ClickHouse はその式をクエリ定数に適用し、その結果を=,IN,hasによる主キー索引のルックアップに利用します。単射な式では、否定形 (!=,NOT IN,NOT has) もサポートされます。#92952 (Nihal Z. Miaji). - read-in-order 最適化で、
WHERE条件によってORDER BYカラムが定数になるケースを認識できるようになり、逆順での効率的な読み取りが可能になりました。これはWHERE tenant='42' ORDER BY tenant, event_time DESCのようなマルチテナントクエリで効果があります。#94103 (matanper). - 主キー条件の後にスキップ索引を使用する
FINALクエリでは、PrimaryKeyExpandステップが、最初に絞り込まれた主キー範囲のみを確認するようになりました。#94903 (Shankar Iyer). - 遅延マテリアライゼーションの最適化が、
UNION ALLクエリの最初の分岐だけでなく、すべての分岐に適用されるようになりました。これにより、異なる MergeTree テーブルから複数のソート済み・件数制限付き読み取りを組み合わせるクエリで I/O を削減します。#96832 (Federico Ginosa).
関数と集約のパフォーマンス
- JIT コンパイルの対象となる関数が増えました。#88770 (Alexey Milovidov).
distinctJSONPaths集約関数を最適化し、JSON カラム全体ではなくデータパーツから JSON パスのみを読み取るようにしました。#92196 (Pavel Kruglov).- 同じ要素が連続して現れることが多い場合の
uniqExactを最適化しました。#93268 (Alexey Milovidov). - 入力値がすべて ASCII の場合の
isValidASCIIを高速化しました。#93347 (Robert Schulze). - 可能な場合には insert のバッチ化により、数値型に対する
uniqを高速化しました (Not null、-Ifではない、GROUP BYなし、IPv6またはStringではない場合) 。#95904 (Raúl Marín).
ストレージとI/Oのパフォーマンス
- Parquet Reader V3 Prefetcher が、より高速なランダムリードロジックを使用するようになりました。#91435 (Arsen Muk) 。
icebergClusterのパフォーマンスを改善しました。#91537 (Yang Jiang) 。- 適応型書き込みバッファを有効にすることで、wide パーツを持つ列数の多いテーブルにおける
INSERTおよびマージのメモリ使用量を削減しました。あわせて、暗号化ディスク向けの適応型書き込みバッファ対応も追加しました。#92250 (Azat Khuzhin) 。 - 検索対象のトークン数を減らすことで、テキスト索引と
sparseGramsトークナイザーを使用した全文検索のパフォーマンスを改善しました。#93078 (Anton Popov) 。 - x86 で動的ディスパッチを用いることで、T64 コーデックの圧縮を高速化しました。#95881 (Raúl Marín) 。
- x86 における 32 バイトブロックの LZ4 展開を高速化しました。#96778 (Raúl Marín) 。
- テキスト索引の direct read 最適化が部分的に機能するようになりました。マテリアライズ済みのテキスト索引を持つパーツではそれが使われ、持たないパーツでは元のフィルタ式にフォールバックします。#96411 (Anton Popov) 。
- 不要なデータコピーを削除し、数値カラムに対するベクトル化された min/max 計算を有効にすることで、
INSERT時のminmaxスキップ索引計算を最適化しました。#97392 (Raúl Marín) 。 - フィルタリングを高速化するため、system ログテーブルに time カラム用の
minmaxセカンダリ索引と、query_id/initial_query_idカラム用のbloom_filter索引を追加しました。#96712 (Alexey Milovidov) 。 - 重複排除が有効でない場合に、
INSERT時のメモリ使用量の回帰を回避しました。#96503 (Alexey Milovidov) 。
メモリ最適化
- ハイライト処理と
VALUESのパースが有効でない場合、未使用のフィールドを削除することで、ASTLiteralのメモリフットプリントを削減しました。#93974 (Ilya Yatsishin). - 汎用的な
ASTLiteralの子ノードではなく、値パラメータを文字列/整数のペアとして保持する専用の Enum AST クラスを導入し、メモリ消費を削減しました。#94178 (Ilya Yatsishin). - named tuple AST オブジェクトについて、カラム名を汎用的な AST リテラルノードではなく文字列として直接保持することで、メモリ消費を最適化しました。#94704 (Ilya Yatsishin).
CachedOnDiskReadBufferFromFile構造体のサイズを約 50 分の 1 に削減しました。#96098 (Azat Khuzhin).- テーブルが空の場合、
HashTable::resizeは古いデータをコピーしなくなりました。#96180 (Raúl Marín).
内部最適化
- クエリパイプライン内でデータをパーティション化するために “fastrange” (Daniel Lemire) 手法を採用し、並列ソートと JOIN を改善しました。 #93080 (Alexey Milovidov).
- リンカーオプションを追加し、脱仮想化を改善しました。 #94737 (Nikita Taranov).
- ZooKeeper リクエストをバッチ化することで、多数のパーツを持つ
ReplicatedMergeTreeテーブルでのレプリカのクローン処理のパフォーマンスを改善しました。 #94847 (c-end). - より高速なハッシュ化とロックフリーのカウンターへの切り替えにより、
observeOperationsによる ZooKeeper の受信スレッドの CPU 使用量を 20% 以上削減しました。 #95962 (Miсhael Stetsyuk).
バグ修正
すべてのバグ修正(クリックして展開)
すべてのバグ修正(クリックして展開)