後方互換性を持たない変更
IN演算子は、Bool型に対して厳密な値セマンティクスを使用するようになりました。セット内の0と1の値のみがBool値に一致します。以前は、INセット内の255を超える数値がBoolとの比較時に誤って true に丸め込まれていたため、SELECT CAST(1, 'Bool') IN (256)は 1 を返していました。現在は正しく0を返します。#92980 をクローズしました。#93115 (Ashrith Bandla).- H3 ライブラリが v4 に更新され、長さ、面積、その他の計算の精度が向上しました。新しい結果は以前の結果と異なるため、この変更には後方互換性がありません。#100348 (Alexey Milovidov).
WITH式リストの要素で、SELECTをクォートなしの識別子として使用することを禁止しました。#101059 (Aruj Bansal).- このパッチでは、merge テーブルの仮想カラムの扱いが変更されます。基になるテーブルに
_tableまたは_databaseが含まれている場合、これらのカラムはストレージから読み取られます。含まれていない場合は、読み取りステップの後に expression ステップを使って補完されます。#101742 (Mikhail Artemenko). IN演算子は、複合型 (Tuple、Array、Map) 内での情報損失を伴うDecimal変換も拒否するようになり、トップレベルの scalar 比較と一貫した動作になりました。以前は、精度チェックはトップレベルの scalar 値に対してのみ適用されていました。たとえば、CAST('33.3', 'Decimal64(1)') IN (33.33)は正しく0を返していましたが、CAST(['33.3'], 'Array(Decimal64(1))') IN ([33.33])は、情報損失を伴う変換がArray内で発生していたため、誤って1を返していました。現在はどちらの場合も正しく0を返します。#101812 (Nihal Z. Miaji).- HTTP 接続による認証前のメモリ使用量を制限するため、デフォルトの
http_max_fieldsを 1,000,000 から 1,000 に、http_max_field_name_sizeを 128 KB から 4 KB に引き下げました。http_max_request_header_sizeおよびhttp_headers_read_timeout設定を追加しました。以前のより高い上限を利用しているユーザーは、設定で元に戻すことができます。#103285 (Sema Checherinda).
新機能
- メモリ制限に達した際、ハッシュ結合および並列ハッシュ結合を Grace Hash Join に変換することで、自動的にディスクへ書き出すようにしました。この動作は
max_bytes_before_external_joinで制御されます。 #97813 (János Benjamin Antal). - Arrow Flight SQLのサポートを追加しました。 #91170 (Yakov Olkhovskiy).
- Keeper を利用したスナップショット進捗の追跡機能を備えた
Paimonテーブルエンジンの増分読み取りサポートを追加し、paimon_target_snapshot_idによる特定スナップショットの差分読み取りに対応するとともに、型マッピング、パーティションプルーニング、増分読み取りシナリオのテストカバレッジを拡充しました。 #93655 (XiaoBinMu). stem関数は実験的機能ではなくなりました (以前は、設定allow_experimental_nlp_functionsを有効にする必要がありました) 。 #102399 (Jimmy Aguilar Mena) 。stem関数を使うと、String、FixedString、Array([Fixed]String)、Nullable、LowCardinality、Const型のカラム内にあるすべての単語/トークンを簡単に語幹化できるようになりました。 #99137 (Jimmy Aguilar Mena) 。- 互換性設定
use_strict_insert_block_limitsにおいて、まとめる処理でのmax_insert_block_size_rows、max_insert_block_size_bytes、min_insert_block_size_rows、min_insert_block_size_bytesの新しい動作を実装しました。#94207 (Kirill Kopnev) 。 - 各ラグに対する数値 Array の正規化自己相関を計算する関数
arrayAutocorrelation(arr [, max_lag])を追加しました。整数、浮動小数点数、Decimal の Array 型をサポートします。 #94776 (Wenyu Chen) 。 - SQL関数
obfuscateQueryを追加しました。#98010 をクローズしました。#98305 (Xuewei Wang)。 - Dictionary の属性として、Map および JSON/Object 型をサポートしました。これにより、FLAT レイアウトと HASHED レイアウトの両方で、Dictionary に Map(String, String)、Map(String, Array(String))、JSON、Nullable(JSON) などの複雑な型を保存し、取得できるようになりました。#98627 (yanglongwei).
- 新たに2つのMergeTree設定 —
replicated_fetches_min_part_levelとreplicated_fetches_min_part_level_timeout_seconds— が追加され、レプリカは新規に挿入されたばかりの (未マージの) パーツをピアから取得せずに済むようになり、大量インジェスト時のレプリケーション負荷を軽減できます。 #98625 (tanner-bruce). - JSONAllPaths と bloom_filter、tokenbf_v1、ngrambf_v1、および text (転置) 索引タイプを使用した、JSON カラム向けの MergeTree スキップ索引のサポートを追加しました。これにより、各グラニュールに含まれる JSON パスの集合に基づいてグラニュールをスキップできるようになりました。#98886 (Pavel Kruglov) 。
printf関数が非定数のフォーマット文字列をサポートするようになり、カラムの値に基づいて、行ごとに異なるフォーマットパターンを使用できるようになりました。#98991 (Yash ).- データを挿入順に再編成する新しいプロジェクション索引
commit_orderが追加されました。#99004 (Mikhail Artemenko) 。 - 検索語がテキスト文字列内に出現した箇所を HTML タグ (デフォルトは
<em>/</em>) で囲むhighlight関数を追加しました。ASCII の大文字・小文字を区別しない照合、重複する一致箇所の自動マージ、開始タグ/終了タグのカスタマイズに対応しています。#99131 (Peng). - 正規化クエリハッシュ単位のクォータを実装し、公開 ClickHouse サービスを濫用から保護します。1. クォータキーの型として
NORMALIZED_QUERY_HASHをサポート - 一意の正規化済みクエリごとに個別のクォータバケットを設けることで、CREATE QUOTA q KEYED BY normalized_query_hashはそれぞれの異なるクエリを独立して追跡します。2. クォータリソース型としてQUERIES_PER_NORMALIZED_HASHをサポート — これにより、一定期間内における単一の正規化済みクエリの最大実行回数を制限できるため、MAX queries_per_normalized_hash = 100によって、どのクエリパターンも 100 回を超えて実行できなくなります。 #99586 (Alexey Milovidov). - ユーザーは
NATURAL JOIN構文を使って JOIN クエリを記述できるようになりました。これにより、同じ名前のカラム同士が自動的に対応付けられ、結果ではそれらのカラムの重複が排除されます。#99840 (Peter Nguyen). SET TIME ZONE 'tz'をSET session_timezoneの別名としてサポートしました。#99883 (phulv94).- Web UI (
play.html) でパラメータ化クエリがサポートされるようになりました。{name:Type}のようなクエリパラメータが検出されると、その値を入力するための入力フィールドが表示されます。#100041 (Alexey Milovidov). FROM内のテーブル式として、SQL 標準のVALUES句をサポートしました。たとえば、SELECT * FROM (VALUES (1, 'a'), (2, 'b')) AS t(id, val)のように使用できます。#100143 (Desel72).EXTRACT演算子に、PostgreSQL 互換の単位EPOCH、DOW、DOY、ISODOW、ISOYEAR、WEEK、CENTURY、DECADE、MILLENNIUMを追加しました。あわせて、従来はエラーになっていたEXTRACT(WEEK FROM date)も修正しました。#100274 (Alexey Milovidov) 。TO範囲修飾子付きの SQL 標準複合インターバルリテラル (例:INTERVAL '1:30' HOUR TO MINUTE) のサポートが追加されました。内部的には、インターバルの和に分解されます。#100453 (Desel72).- HTTP 接続プールソケットのカーネル TCP の受信・送信バッファメモリ (
sk_rmem_alloc,sk_wmem_alloc) について、接続グループごとの p50/p75/p90/p95 パーセンタイルおよび totals として報告される非同期メトリクスを追加しました。#100575 (Sema Checherinda) 。 - ClickHouse Keeper 向けの jemalloc profiling Web UI を追加しました。HTTP 制御ポートの
/jemallocで利用できます。#100606 (murphy-4o) 。 - 順序付きモードおよび順不同モード向けのコマンド
SYSTEM FLUSH OBJECT STORAGE QUEUE db.table PATH 'x'を実装しました。#100709 (Bharat Nallan) 。 JSONカラム内のすべての値をArray(String)として返す関数JSONAllValuesを追加しました。値はテキスト表現にシリアライズされ、パス名順に並べられます。JSONカラム上のJSONAllValues式に対するテキスト索引のサポートも追加しました。JSONAllValues(json_column)にテキスト索引を作成すると、JSONサブカラムに対するクエリのフィルタ条件 (例:json_column.key1 = 'value') に自動的に使用されます。#100730 (Anton Popov).- 入力フォーマットで大文字・小文字の区別を異なる方式で扱えるようにする新しい設定
input_format_column_name_matching_modeを追加しました。#99346 (manerone) 。 clickhouse-keeper-clientにwatchコマンドを追加し、get、exists、lsコマンドでの watch をサポートしました。#100834 (Den Kalantaevskii) 。- ClickHouse Keeper に
getChildrenRecursive(ListRecursive) リクエストを、clickhouse-keeper-clientにlsrコマンドを追加しました。これにより #99916 が解決されます。#100998 (Konstantin Vedernikov) 。 - 二次元配列 (行列) を受け取り、転置を行う新しい関数
arrayTransposeを追加しました:SELECT arrayTranspose([[1, 2, 3], [4, 5, 6]]). #101214 (Vitaly Baranov). auto_statistics_types mergetree設定のデフォルト値は'minmax, uniq'です — 新しいテーブルでは、適切なすべてのカラムに対して minmax および uniq の統計情報が自動的に作成されます -materialize_statistics_on_insertのデフォルトは false です — 統計情報は insert 時ではなくマージ時に構築されるようになり、insert のオーバーヘッドが削減されます。以前の動作に戻すには、SET materialize_statistics_on_insert = 1を使用してください。 #101275 (Han Fei).- レプリカ間のレプリケーションラグによるデータ欠落を減らすため、materialized view の依存チェーン向けに
prefer_dependency_replicarefresh 設定を追加しました。#101591 (Seva Potapov). - フレーズ検索 (連続したトークン列) 向けの
hasPhrase(別名matchPhrase) 関数を追加しました。検索は総当たりで行われるため、現時点ではテキスト索引にはまだ対応していません。#101997 (Elmi Ahmadov) 。 - S3 GET リクエスト接続の存続時間と消費バイト数を観測するための
s3_read_request_duration_microsecondsおよびs3_read_request_bytesヒストグラムメトリクスを追加しました。これらはsystem.histogram_metricsと Prometheus エンドポイントで確認できます。#102058 (Sema Checherinda). DateおよびDate32の値にTimeとTime64の値を+演算子で加算し、DateTimeまたはDateTime64の結果を得られるようになりました。たとえば、SELECT toDate('2024-01-15') + toTime('14:30:25')は2024-01-15 14:30:25を返します。結果はセッションのタイムゾーンで計算され、範囲外の結果はdate_time_overflow_behavior設定に従って処理されます。#95914 をクローズしました。#102421 (Nihal Z. Miaji).- テキスト索引は GA となり、
compatibility設定にかかわらず常に有効のままとなったため、バックアップの復元時や互換性モードでの実行時に予期せず無効化されるのを防ぎます。#101518 (Nikita Fomichev).
実験的機能
- Icebergテーブル向けに
ALTER TABLE ... EXECUTE remove_orphan_filesを追加し、オブジェクトストレージ内の未参照ファイルを特定して削除できるようにしました。#99127 (murphy-4o). - join の並べ替えに使用される統計情報をランダム化する
query_plan_optimize_join_order_randomize設定を追加しました。テスト用途に有用です。#100643 (Vladimir Cherkasov). - ClickHouse に AI 関数のサポートを追加し、ユーザーが SQL を使って OpenAI および Anthropic のエンドポイントを呼び出せるようにしました。
aiGenerateはその最初の関数です。#100831 (George Larionov). - ClickHouse で LLM API を利用するための AI 関数
aiClassify、aiExtract、aiTranslateを追加しました。#100832 (George Larionov). - 新しいシステムテーブル
system.histogram_metric_logを追加しました。これはすべてのヒストグラムメトリクス (例: S3/Azure のレイテンシー、Keeper リクエスト処理段階の所要時間) のスナップショットを定期的に取得します。あわせて、system.histogram_metricsのvalueカラムは、より柔軟で Prometheus のデータモデルとの互換性が高いため、Float64に変更されます。#103046 (Miсhael Stetsyuk). このテーブルの構造は、今後のリリースで変更される可能性があります。
パフォーマンス改善
- ClickHouse は、min/max 統計に基づいて、SELECT クエリでデータパーツ全体をスキップできるようになりました。#94140 (zoomxi) 。
- 完了済みの mutation がある ReplicatedMergeTree テーブルに対する readonly 操作時のロック競合を軽減しました。#95771 (Eduard Karacharov) 。
- プロジェクションの読み取り時に
optimize_read_in_orderを考慮するようにしました。#89453 をクローズしました。#95885 (Andrey Zvonov) 。 - ハッシュ結合および同時実行ハッシュ結合にいくつかの改善を加えました。 #96663 (Yarik Briukhovetskyi).
- 入力データの重複がほとんどない場合は、
LowCardinalityカラムの最適化を無効にすることで、DISTINCT変換を最適化しました。 #97113 (Nihal Z. Miaji) 。 - #97723 による
LIKEクエリのパフォーマンス最適化。これらのクエリでテキストインデックスを使用できるようになりました。#98149 (Elmi Ahmadov) 。 - ベクトル化された数学関数 (
exp、log、sigmoid、tanh) が、AArch64 (NEON/SVE を使用) および FreeBSD/Darwin で高速化されました。これらの環境では、以前は低速な scalar のフォールバック実装が使用されていました。#98230 (Raúl Marín) 。 MergeTreeの主キーカラムを対象に、^(abc-1|abc-2)のようなリテラル文字列の正規表現オルタネーションでフィルタするクエリでは、選択肢が共通のプレフィックスを持つ場合に、主キーのプルーニングを利用できるようになりました。#98988 (Yash ).ORDER BY ... LIMITの top-k 動的フィルタリングを、Nullable、String、COLLATE型にも対応できるよう一般化しました。#99033 (murphy-4o).- 値の範囲が小さい
Int32およびInt64キーでのハッシュ結合を、直接索引型ハッシュテーブルを使用することで高速化しました。#99275 (Hechem Selmi). - 単一の辞書を使用する
LowCardinalityカラムに対する非連続クエリを高速化しました。 #99285 (Ivan Babrou). - 内部ループをデバーチャライズすることで、
Float64カラムに対するvar*Stableおよびstddev*Stable関数を高速化しました。注: これにより、浮動小数点演算の結果が ULP レベルで変化するコンパイラ最適化 (FMA/レジスタ) が有効になります。#99460 (Riyane El Qoqui). - 32/64 バイトの入力に対して、最適化された Firedancer の base58 エンコードを使用するようになりました (
base58Encodeでは自動) 。デコード結果が 32/64 バイトの場合は、最適化された base58 デコードも使用できるようになりました (base58Decode('...', 32)などで明示的に指定) 。#99461 (Joanna Hulboj). - リンカーのセクション単位の最適化 (
-ffunction-sections,-fdata-sections,--icf=all) を有効にし、バイナリサイズを削減するとともに、命令キャッシュの利用効率を向上させます。#99474 (Alexey Milovidov) 。 - 多数のコアを搭載したマシンで、集約を伴う短時間のクエリにおける負のスケーリングを修正しました。クエリが少数のマークしか読み取らない場合、集約後にパイプラインが
max_threadsまで拡張されなくなり、ほぼ空のストリームが大量に生じることによるオーバーヘッドを回避します。 #99493 (Alexey Milovidov). - 読み取りタスクサイズを適切に選択することで、並列レプリカ使用時のクエリのパフォーマンスを改善しました。 #99801 (Nikita Taranov).
- ユーザー空間ページキャッシュ経由でリモートファイルを読み込む際に、先読みを有効にしました。 #99919 (Alexey Milovidov).
- サブカラムの列挙時に、String
.sizeサブカラムの不要な計算を回避。#99941 (Pavel Kruglov) 。 - ホテルから、非常に多数のレプリカを持つクラスターに接続して作業する際でも、clickhouse-client のプログレスバーが過度に揺れないようにしました。#100145 (Alexey Milovidov).
- ページキャッシュが有効な場合に
clickhouse-localでMemoryWorkerを起動し、ユーザー空間のページキャッシュを実際に利用できるようにしました。 #100306 (Alexey Milovidov). LIMIT句をUNION ALLにプッシュダウンすることで、クエリを最適化します。#100364 (Alexey Milovidov) 。ORDER BYにおけるStringおよびFixedStringカラム比較の JIT コンパイル対応を追加し、文字列を多く含むソートキーでのマージフェーズのソート性能を 6〜17% 向上させました。@lgbo-ustc との共著です。#100577 (Raúl Marín) 。- 新しい
read_in_order_use_virtual_row_per_block設定とあわせてread_in_order_use_virtual_rowを有効にすると、MergeTreeから読み取った各 block の後に仮想行の境界情報が出力されるようになり、WHERE/PREWHERE/JOINによってデータが完全に除外されるパーツについて、マージ処理がストリームの途中でソースの優先順位を付け替えられるようになりました。#99945 をクローズしました。#100603 (Vladimir Cherkasov). itoaの高速パスを dragonbox 互換の丸め処理で拡張し、大きな整数値の Float-to-String 変換を高速化しました。#100649 (Raúl Marín) 。dragonboxをzmijに置き換え、Float-to-String 変換を 1.5~3 倍高速化。#100650 (Raúl Marín) 。- ソフトウェア除算をBarrett還元に置き換え、変換ループをアンロールすることで、
Int128/UInt128から文字列への変換を高速化しました。#100671 (Raúl Marín) 。 uniqExactの並列マージで余分なスレッドが生成されるのを防ぎました。#100686 (Jiebin Sun) 。uniqExactのバッチ並列マージに対応しました。#100687 (Jiebin Sun).- 基になる
MergeTreeテーブルを持つシンプルなビューに対するクエリで、並列レプリカ実行時の並列化が向上しました。 #100815 (Igor Nikonov). parallel_replicas_allow_view_over_mergetree=1の場合、単純なビュー (MergeTreeテーブル上の対象となるUNION ALLビューを含む) に対する並列レプリカのサポートを追加しました。これにより、ビューの内側のクエリではなく外側のクエリを並列化できるようになり、ノード間でのクエリの並列実行が向上します。#100958 (Igor Nikonov)。INを含むフィルターがクエリプランに存在する場合の、full_sorting_mergeにおける主キー順での読み取りを最適化。 #101261 (Nikita Taranov).- サンプリング設定をキャッシュし、メモリトラッカー階層全体をたどらないようにすることで、割り当て/解放を最適化しました。 #101267 (Azat Khuzhin).
deduplicate_insert = 'enable'(26.2以降のデフォルト設定) で発生していたINSERTの重大な性能低下を修正しました。データハッシュの計算をまとめる処理から sink へ遅らせ、updateHashWithValueRangeを使ったバッチ単位のカラムハッシュ計算を行うことで、22カラム・500万行におけるオーバーヘッドを約2.5秒から約0.5秒に削減しています。#101494 (Sema Checherinda) 。try_lockを使用して競合のないロック取得の計測を回避し、保持時間の計測を削除することで、プロファイル対象ロックのオーバーヘッドを削減しました。#101502 (Antonio Andelic) 。arrayDotProductの手書きの AVX-512 intrinsic を、プラットフォーム非依存で自動ベクトル化可能なループに置き換え、AVX2 と ARM NEON のサポートを追加しました。#101571 (Peng) 。- エスケープされた文字列 (例:
'{\'key\':1}') として値が渡された場合のMap、Array、Tupleカラムに対するINSERT VALUESのパフォーマンスを改善し、SQL式パーサーへの不要なフォールバックを回避しました。#102119 (Joanna Hulboj). RabbitMQテーブルエンジンで CPU 使用率が過剰になる問題を修正しました。#102711 (Jaap Elst) 。- JOIN 順序オプティマイザは、既存の JOIN 条件から推移的な等値 JOIN 述語を推論できるようになりました。たとえば、
A.x = B.x AND B.x = C.xが与えられた場合、A.x = C.xという等価関係も認識されるため、オプティマイザは推移的に接続されたテーブル間の直接 JOIN も検討できます。これにより、ディメンションテーブルが共通のファクトテーブルを介して接続されるスター型およびスノーフレーク型のスキーマでは、実行計画の品質が向上する可能性があります。この機能は、新しいenable_join_transitive_predicates設定で制御されます (デフォルトではオフ) 。 #98479 (Alexander Gololobov). - マージを並列に事前キャンセルすることで、
TRUNCATE DATABASE TABLES LIKEを最適化しました。#98597 (Shaohua Wang) 。 - multiply が単調性に対応し、
key * constant式で主キーの絞り込みが可能になりました。#98983 (Amos Bird) 。 - cacheディクショナリでは、
hasKeysで排他ロックを取得しなくなりました。cache の読み取りに共有ロックを使用することで、ロック競合が軽減されます。 #100796 (liuguangliang). - VIEW により多くの最適化を適用できるようにするため、クエリツリー内で VIEW サブクエリをインライン化。 #100830 (Dmitry Novik).
- サーバー起動時のcacheの読み込みを最適化しました。 #101500 (Kseniia Sumarokova).
- 述語の選択性が十分に高い場合に、FINAL を伴う ReplacingMergeTree で遅延カラム実体化を実装しました。#101647 (Nikolai Kochetov).
optimize_rewrite_array_exists_to_has最適化を再度有効化しました (23.10 以降、デフォルトでは無効) 。これにより、arrayExists(x -> x = elem, arr)は大幅に高速なhas(arr, elem)に書き換えられます。また、配列の要素型とelemがhasに対して互換性がない場合 (例:DateとString) は、この書き換えを正しくスキップするようになったため、以前は失敗していたクエリも引き続き動作します。#71431 をクローズしました。#100944 (Alexey Milovidov) 。
改善
- EXPLAIN PLAN pretty=1 の出力を改善: 最上位クエリの出力カラムを表示し、推定結果行数とローカリティ付きで JOIN の関係を表すラベル/シンボルを表示するほか、JOIN/ソースの各ステップについてステップごとの出力カラムも含めるようになりました。この変更は #98117 の Information Deficit の部分に対応しています。#99462 (Kirill Kopnev).
- MergeTree テーブル設定
share_nested_offsets(デフォルトはtrue) を追加しました。falseに設定すると、ドット付きの名前 (例:n.a、n.b) を持つ Array カラムは、従来のNestedセマンティクスの一部としてオフセットファイルを共有し、配列サイズが同一であることを検証するのではなく、独立したカラムとして扱われます。#98416 (Amos Bird). - users.xml/yaml の設定で複数の認証方法を指定できるようになりました (SQL では以前から可能でした) 。#91998 (Flip-Liquid).
- TLS を使用している Raft のノード間接続を自動的に再読み込みするようにしました。 #93455 (Evgeny).
cast_keep_nullableを拡張し、Dynamic/JSON 型でも動作するようにしました。これを設定すると、Nullable にできる型から NULL をキャストした場合は NULL が返され、それ以外では NULL に対してCANNOT_INSERT_NULL_IN_ORDINARY_COLUMNエラーが発生します。#96504 (Seva Potapov) 。- オブジェクトプールの導入により、内部データ構造 (
ISerializationオブジェクト) のメモリ使用量を削減しました。#96563 (Nikita Mikhaylov) 。 - keeper-client の XML 設定で
passwordおよびidentityフィールドがサポートされました。#96800 (Grigorii Sokolik). - Unity Catalog 向けの
Icebergへの書き込みを改善しました。#98162 (Konstantin Vedernikov) 。 - INSERT 時にプロジェクションパーツを同期的にファイナライズできるようにする設定
finalize_projection_parts_synchronouslyを追加しました。これにより、デフォルトでは既存の非同期動作を維持したまま、多数のプロジェクションを持つテーブルでピークメモリ使用量を削減できます。 #98228 (Amos Bird). - 各プロジェクションのマージ/再構築にかかった時間をミリ秒単位で記録する
projections_duration_msカラムをsystem.part_logに追加しました。#98292 (Amos Bird) 。 - KILL QUERY および clickhouse-client でのクエリキャンセル (Ctrl+C) によって、ExpressionTransform と NumbersRangedSource を使用するクエリのキャンセルを改善しました。#98908 (Roman Vasin) 。
- ハードコードされた
source_table_enginesのリストを、StorageFactory::getAllStorages()による実行時ルックアップに置き換えました。これにより、これまで漏れていた一部のテーブルエンジンに対するアクセスチェックが追加され、#71544 を解消しました。#98984 (pufit). - Variant と Dynamic で型不一致が発生した際の動作 (throw または NULL を返す) を制御する設定を追加しました。 #99085 (Bharat Nallan).
Icebergと Spark の互換性を改善しました。ストレージパスとメタデータパスの混在使用によって生じていた一貫性のないパス処理を修正し、Icebergテーブルが記録するテーブルロケーションは URL または絶対パスのいずれかでなければならないようにしました。また、一部の ClickHouse リーダーが走査後のバイト数カウントをサポートしていないため、Azureでファイルサイズをカウントするためのフォールバックを追加し、Spark と互換性のある形でversion-hint.txtを処理するようにしました。さらに、今後パスの型を取り違えにくくする型レベルの抽象化を導入し、中間的なアップロード/ダウンロードなしでエンジン間の相互運用性を検証するAzureおよびLocal向けのテストを追加しました。加えて、position deletes の扱いを修正しました。これは以前、不適切な場面でパス推論ヒューリスティクスに依存していました。 #99163 (Daniil Ivanik). #100420 (Daniil Ivanik).- https://github.com/ClickHouse/ClickHouse/pull/92844 で導入された
IPartitionStrategy::cached_resultにおけるレースコンディションの可能性を修正しました。#99400 (Arthur Passos). - ユーザーは、ArrowフォーマットでClickHouseのIntervalデータ型を書き出せるようになりました。#99519 (Peter Nguyen).
ArrowおよびParquetフォーマットでのUUIDデータ型のインポートとエクスポートがネイティブにサポートされました。これにより、ユーザーは手動で文字列に変換したり回避策を講じたりすることなく、ClickHouse と他のデータツールの間で UUID データを直接クエリおよび転送できるようになりました。トップレベルの UUID に対する自動的な論理推論と、ネストされた UUID に対する明示的なスキーマヒントもサポートされています。 #99521 (Ivan).- オブジェクトストレージ上の
7zアーカイブをサポート。#70968 をクローズ。#99600 (Alexey Milovidov) 。 - オブジェクトストレージ (
S3、Azureなど) のファイル一覧取得・読み取りパイプラインを内部的に把握できるよう、ObjectStorageListedObjects、ObjectStorageGlobFilteredObjects、ObjectStoragePredicateFilteredObjects、ObjectStorageReadObjectsの ProfileEvents を追加しました。#99778 (Sema Checherinda) 。 - 基になるすべての distributed/remote テーブルに存在しないカラムをクエリした際に、
mergeテーブル関数がUNKNOWN_IDENTIFIERエラーで失敗する問題を修正しました。#99833 (Alexey Milovidov). - ReplicatedMergeTree のミューテーションの総実行時間メトリックに、commit time が再び含まれるようになりました。#96376 以降は除外されていました。#99936 (alesapin).
MetadataStorageFromDiskに、削除待ちのブロブオブジェクト向けの先行書き込みログを追加し、オブジェクト削除時のメタデータとリモートオブジェクトストレージの間の耐久性と整合性を向上させました。#100019 (Maksim Kita).- サーバーの環境変数にアクセスできないようにするため、組み込みクライアント (SSH および WebSocket プロトコル) で AI SQL 生成 (
??コマンド) を無効化しました。#100290 (Alexey Milovidov) 。 - カタログを使った Iceberg への insert のインターフェイスを変更しました。設定
storage_catalog_type、storage_aws_access_key_idなどは非推奨になりました。#100334 (Konstantin Vedernikov). clickhouse-clientに貼り付ける際、タブを 4 つのスペースとして扱うようにしました。#100405 をクローズしました。#100416 (Raúl Marín).show_data_lake_catalogs_in_system_tablesが無効な場合、「もしかして …」というテーブル候補のヒントを表示するために、リモートのデータレイク カタログ全体をスキャンしないようにしました。#100452 (Alsu Giliazova) 。- パーティションプルーニング後に
distributed_index_analysis_min_indexes_bytes_to_activateを適用します。#100477 (Azat Khuzhin) 。 - 空の IN/NOT IN 句の使用時に、Parquet の bloom filter プッシュダウンで発生するアサーション失敗を修正しました。#100543 (zoomxi) 。
- MinMaxカラム STATISTICS は、最小値と最大値を Float64 ではなく Field (型付き) として格納するようになりました。シリアライズされたフォーマットには、値に加えてカラムの型名も含まれます。STATISTICS ファイルのバージョンは V2 に更新され、以前のバージョンで書き込まれたファイルは再マテリアライズ (ALTER TABLE … MATERIALIZE STATISTICS ALL) が必要です。修正 #53140。#100605 (Han Fei).
- Consumer のクローズ時に発生するデッドロックの修正を含むよう、
cppkafkaを更新しました。#100612 (Azat Khuzhin) 。 - Iceberg でデータファイルをパースする際に使用されるオブジェクト情報に、マニフェストファイルからパースしたファイルの行数とバイト単位のファイルサイズが含まれるようになりました。 #100645 (Daniil Ivanik).
- cache メモリアリーナの分離を制御できるようにするため、
use_separate_cache_arena設定パラメータが追加されました。#100664 (Seva Potapov) 。 - Apache Arrow の
StringViewおよびBinaryViewデータ型を ClickHouse のStringカラムにインポートするネイティブサポートが追加され、Arrow ベースのインジェストとの互換性が向上しました。#100762 (Ivan). - いくつかの Keeper サーバー設定が、実行時に設定ファイルが変更された場合にホットリロードされるようになりました: max_requests_batch_size, max_requests_batch_bytes_size, max_request_size, quorum_reads。 #100773 (Michael Kolupaev).
- リリースビルドで、プロファイルイベント
MemoryAllocatedWithoutCheck/MemoryAllocatedWithoutCheckBytesを増加させました。 #100899 (Pavel Kruglov). - Cgroupv2 のメモリ追跡で、カーネルメモリから
slab_reclaimableが除外されるようになり、回収不能なメモリ使用量をより正確に把握できるようになりました。#100901 (Antonio Andelic) 。 use_partition_pruning = 0は、パーティションキーに基づくプルーニングの無効化に加え、MinMax索引のプルーニングとパーティションキーのカラムに対する count 最適化も無効にするようになりました。#100904 (Nihal Z. Miaji).EXPLAIN [PLAN]のpretty=1で、式が人間にとって読みやすい形式で表示されるようになりました。 #100927 (Kirill Kopnev).accurateCastOrNullとaccurateCastOrDefaultが、Nullable要素を含むネストしたTuplesを含め、変換先のTuple型をサポートするようになりました。これまではTupleをNullableの内部に置けなかったため、これらの関数では変換先にTupleを指定できませんでした。#100820 をクローズしました。#100942 (Nihal Z. Miaji).- ライトテーマとダークテーマを切り替えた際に、Play UIでチャートが重複表示される問題を修正しました。 #101058 (Alexey Milovidov).
- chdig を v26.3.1 に更新 (perfetto UI、CPU/メモリ/マージ処理/クエリのサマリーへのスパークライン追加、system.warnings、ログ内の正規表現検索) 。#101092 (Azat Khuzhin) 。chdig を v26.4.3 に更新 (perfetto の改善、pastila.nl 経由の共有に関する修正、フレームグラフの差分、リアルタイムでの設定変更) 。#103145 (Azat Khuzhin) 。
- これで、
SELECTクエリの前にあるWITH句で末尾カンマを使えるようになりました。#101093 (Aruj Bansal) 。 - compact パーツ内で圧縮ブロックをどのように編成するかを制御する
compress_per_column_in_compact_partsMergeTree setting を追加しました。trueの場合 (デフォルトで、現在の動作を維持) 、各カラムが新しい圧縮ブロックの先頭となるため、必要なものだけを選択的に展開できます。falseの場合は、granule 内のすべてのカラムが同じ圧縮ブロックにまとめられるため、常にすべてのカラムを読み取るワークロードでは圧縮率と読み取り性能が向上します。#101114 (Amos Bird). - Play UIで、テーブル情報のバルーンを行全体ではなく、テーブル名にホバーしたときのみ表示するようにしました。#101118 (Alexey Milovidov).
- Play UI のサイドバーに engine ごとのアイコンを追加し、table 一覧の UX を改善しました。#101134 (Alexey Milovidov) 。
Arrow、ArrowStream、ORC、および従来のParquetフォーマットでNullable(Tuple)をサポート。#101272 (Nihal Z. Miaji).- web UI (play.html) で、TOTALS 行をテーブルのフッターに表示。#101286 (Alexey Milovidov).
- Web UI (
play.html) でマルチクエリモードに対応:複数のクエリを一度に実行でき、SELECT系クエリは並列で実行され、各クエリの結果が個別に表示されます。#101290 (Alexey Milovidov). - 結果テーブルの Web Component 化に伴って発生していた、play.html の Web UI におけるカラムのリサイズ不具合を修正しました。#101295 (Alexey Milovidov) 。
- 一定の時間間隔ごとに、MEMORY_LIMIT_EXCEEDED 発生時の jemalloc プロファイルの flush 回数を制限できるようになりました。#101396 (Azat Khuzhin).
- Keeper 設定
nuraft_streaming_mode(デフォルトはfalse) 、nuraft_max_log_gap_in_stream、nuraft_max_bytes_in_flight_in_streamを追加しました。#90743 をクローズしました。#101427 (Kseniia Sumarokova) 。 - カーネル OS のページキャッシュと ClickHouse のユーザー空間ページキャッシュの両方を除いた cgroup のメモリ使用量を報告する非同期メトリクス
CGroupMemoryUsedWithoutPageCacheを追加し、MemoryResidentWithoutPageCacheと同様の扱いにしました。あわせて、CGroupMemoryUsedメトリクスの説明も明確にしました。#101513 (Francesco Ciocchetti). - SQL 標準の
OVERLAY関数構文向けに、パーサーレベルのシンタックスシュガーを追加しました。overlay関数自体はすでに存在しており、今回の変更でPLACING、FROM、FORを区切りとして使うキーワードベースの形式もサポートされます。#101681 (Desel72). information_schema.tablesシステムテーブルに、このテーブルの既存の大文字の別名と同様のカラム別名INDEX_LENGTHを追加しました。#101705 (Robert Schulze).- システムテーブル
information_schema.tablesが、非アクティブなテーブルパーツを無視するようになりました。これにより、表示されるテーブルサイズの値がより実態に即したものになります。#101706 (Robert Schulze) 。 ngrams関数は、無効な N-gram 長を受け付けなくなりました。例:SELECT ngrams('abc', 0)はエラーを返すようになりました。 #101922 (Robert Schulze).- #91820 および #90837 のフォローアップ: エラーメッセージから未対応のアルゴリズムを除外し、FIPS builds で FIPS 固有のテストを実行するようにしました。#102067 (Mikhail f. Shiryaev).
- Web UI (
play.html) でセルの高さを3行までに制限し、クリックで展開できるようにしました。 #102154 (Alexey Milovidov). - S3 エンドポイントで (virtual/path) スタイルを強制できる新しいオプションを追加しました。#82019、#76007 を解決します。https://github.com/ClickHouse/ClickHouse/pull/83168 の続きです。#102378 (Konstantin Vedernikov).
restore_replace_external_engines_to_null設定により、失敗したり外部接続を開始したりする代わりに、外部エンジン (例:DataLakeCatalog、MySQL、PostgreSQL、S3) を使用するデータベースの復元もスキップするようになりました。#102400 (Nikita Fomichev) 。hasPhrase関数で、HINTモードによるテキスト索引解析をサポートしました。#102438 (Elmi Ahmadov) 。- MATERIALIZE STATISTICS ALL 実行時の LOGICAL_ERROR を修正するため、ColumnDependency で STATISTICS を読み取り専用として扱うようにした。 #102627 (Konstantin Bogdanov).
- keeper-as-serverモードで
system.asynchronous_metric_logを作成し、データを格納します。 #102664 (Miсhael Stetsyuk). default_system_log_flush_policy.skip_alias_columns設定オプションを追加し、システムログテーブルで ALIAS カラムを省略できるようにしました。これにより、ALIAS カラムを受け付けない S3 バックエンドのシステムログの問題を修正しました。#102669 (Miсhael Stetsyuk).- システムテーブルでは自動統計を有効にしないでください。利用されることはほとんどありません。 #102862 (Han Fei).
- LIKE 最適化で
arrayトークナイザーをサポート。#102880 (Elmi Ahmadov) 。 - リリースビルドでも MemoryAllocatedWithoutCheck を送信するようにしました。 #103064 (Azat Khuzhin).
- system.stack_trace でスレッドごとの untracked_memory を表示。 #103065 (Azat Khuzhin).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- 遅延マテリアライゼーションで返される不要なカラムが原因で発生する
Block structure mismatch in streamエラーを修正しました。#95191 を修正。#96682 (Nikolai Kochetov)。 - データマスキングポリシーに対する
ON CLUSTERクエリの論理エラーを修正しました。#97594 (Bharat Nallan). - GCS上で Unity Catalog を使用する際のバグを修正しました。#98456 (Melvyn Peignon) 。
DataLakeCatalogは、auth_header設定を検証する際に、サーバーのhttp_forbid_headers設定を考慮するようになりました。#98827 (Michael Anastasakis).- S3 のブレース展開グロブにおける N+1 件の
HeadObject呼び出しを修正しました。#99219 (Konstantin Bogdanov) 。 - エンジン自体も設定をサポートしている場合、CREATEクエリ内の設定変更を検証する。 #99279 (János Benjamin Antal).
ALTER TABLE UPDATE/DELETEが、式が EPHEMERAL カラムに依存する MATERIALIZED カラムを持つテーブルでMissing columnsエラーにより失敗する問題を修正しました。#99281 (Yash ).- JDBC、ODBC、NATS の接続文字列に含まれる認証情報は、クエリログと
SHOW CREATEの出力でマスクされるようになり、機密情報の意図しない露出を防げるようになりました。URI 形式の接続文字列 (例:{scheme}://{user}:{password}@{host}) では、パスワード部分のみがマスクされ、それ以外はデバッグしやすいよう引き続き表示されます。nats_token設定もマスクされるようになりました。#99344 (János Benjamin Antal) 。 - DD-month-YYYY フォーマットで、月名のプレフィックスで始まる単語を
parseDateTimeBestEffortが誤ってパースしてしまう問題を修正しました。#99345 をクローズしました。#99350 (Pavel Kruglov). - アナライザ非使用時に TABLE_UUID_MISMATCH が無視されていた問題を修正しました。#99380 (Azat Khuzhin) 。
- 同じリクエスト内で
compatibilityと一緒に送信された明示的な設定が、その値がサーバーのデフォルト値と一致している場合に、気付かれないまま無視されることがある不具合を修正しました。#99402 (Raufs Dunamalijevs). - Hive パーティションパス内で先頭にゼロが付いた数値が原因でエラーが発生していたケースを修正しました。 #98801。 #99458 (Yarik Briukhovetskyi).
- 実行中の読み取りクエリと同時にテーブルが削除された際に発生する heap-use-after-free を修正 (過去90日間のCIで19件発生) 。 #99483 (Alexey Milovidov).
- Keeper で、同じサーバー上の別の無関係なセッションがちょうど悪いタイミングで閉じられると、read request がハングし (その結果セッションがタイムアウトする) 得る不具合を修正しました。 #99484 (Michael Kolupaev).
- パッチを適用する前に、カラム構造を検証するようにしました。 #99531 (Seva Potapov).
Dynamicカラムを持つテーブルのマージ中に、SYSTEM STOP/START MERGESを短時間で繰り返し切り替えた際に発生する、vertical merge のrows_sourcesアサーション失敗を修正しました。#99532 (Alexey Milovidov).toWeek()における誤ったパーティションプルーニングを修正し、toYYYYMM(date)でパーティション化されたテーブルでWHERE toWeek(date, mode) = Nを含むクエリが第49〜52週で空の結果を返していた問題を解消しました。#99542 (Takumi Hara).- JOIN によって生成された未参照の行がある ColumnReplicated を扱う関数で発生する例外を修正しました。#99564 (Hechem Selmi).
CLEAR COLUMN実行時にプロジェクションが再構築されず、またクリアしたカラムに依存するマテリアライズドカラムが再評価されない問題を修正しました。この問題により、その後のマージで例外やデータ破損が発生する可能性がありました。 #99565 (Desel72).ConditionSelectivityEstimatorにおいて、クエリが単一のスカラー クエリパラメータを指定した IN を使用し (例:WHERE col IN ({p:String})) 、対象のテーブルにカラム STATISTICS があり、use_statisticsが有効になっている場合に発生していた例外 (Bad get: has Tuple, actual type String) を修正しました。#99614 (Ilya Yatsishin) 。- 不明なプロジェクションを含むパートは、永久に失われたものとしてマークすべきではありません。 #99623 (Sema Checherinda).
SYSTEM STOP MERGESとSYSTEM START MERGESが同時実行された際に、vertical merge 中にまれに発生していた論理エラー例外を修正しました。 #99628 (Desel72).- マージ時にクラッシュを引き起こしていた injectRequiredColumns のダングリング参照を修正しました。 #99679 (Tuan Pham Anh).
- 対象カラム型の範囲を超える数値を読み取る際に発生していた、Avro フォーマットリーダーの未定義動作を修正しました。これにより、オーバーフロー時には誤った値を黙って生成するのではなく、クエリが失敗するようになりました。#99697 (asyablue22).
executableテーブル関数の引数内にあるシェル形式のクォートのパースを修正しました。#99794 (Nikita Semenov) 。NativeReaderで、行数が一致しない Native format ストリームをデシリアライズする際に、abort が誤って発生する問題を修正しました。LOGICAL_ERRORをINCORRECT_DATAに変更し、sanitizer/debug builds でabort()がトリガーされるのではなく、エラーがデータエラーとして処理されるようにしました。#99822 (Rahul Nair).Tupleカラムのデシリアライゼーション中に、バイナリストリーム内のシリアライゼーション種別がDETACHEDの場合に発生するプロセスの異常終了を修正しました。#99823 (Rahul Nair).- SLRU sub-queue promotion における競合状態が原因で、ファイルシステムキャッシュの動的リサイズ中に
LOGICAL_ERROR例外が誤って発生する問題を修正しました。 #99850 (Alexey Milovidov). query_logとクライアント出力で、非同期 INSERT クエリのwritten_rows、read_rows、result_rowsが 0 と表示される問題を修正しました。#99879 (Sema Checherinda).- システムテーブルに対する内部クエリが
ColumnConstでラップされたカラムを返す場合に、KILL QUERYで発生する例外 “Bad cast from type X to Y” を修正しました。#99881 (Alexey Milovidov) 。 - untuple 引数内の相関サブクエリにおける論理エラーを修正しました。#99917 (Vladimir Cherkasov) 。
right、rightUTF8、またはその他の substring 関数を長さ INT64_MIN (-9223372036854775808) で呼び出した際に発生していた例外を修正しました。従来は整数オーバーフローにより未定義の動作を引き起こしていましたが、現在はこれらの関数が ARGUMENT_OUT_OF_BOUND error を正しく返すようになりました。#99934 (Jimmy Aguilar Mena).- これで ClickHouse は、Spark スタイルのテーブル (各ファイルが完全な絶対パスを持つ、または共通のテーブルパスからの相対パスを持つ場合) を適切に処理できるようになりました。 #92348 を修正しました。 #99935 (alesapin).
ALTER TABLE ... MODIFY QUERYで、ネストされたサブクエリにSETTINGSが含まれ、かつALTER自体にもSETTINGSがある場合に発生する “Inconsistent AST formatting” 例外を修正しました。#99938 (Nikita Mikhaylov) 。- パフォーマンス退行が疑われるため、#97114 “子が 1 つの場合のチェックより前に join step の行数推定を移動” を元に戻しました。#99957 (Alexander Gololobov).
- HEAD リクエストのレスポンスに
Content-Lengthヘッダーがない場合 (たとえば、GCS の展開的トランスコーディングが原因の場合) に、ClickHouse がファイルをスキップしてしまうことがある不具合を修正しました。#99971 (Yarik Briukhovetskyi). NumericIndexedVectorの aggregate states に偶数の整数定数を掛けた際に発生していたアサーション失敗 (デバッグビルドでは例外、リリースビルドでは誤った結果) を修正しました。原因は、pointwiseAddInplace内でエイリアスされた Roaring bitmap に対して自己 XOR が行われていたことです。#99976 (Desel72).- join 変換後にキーの型が変わる場合でも、連鎖した
JOIN USINGを介する従来の filter pushdown でUnexpected return type例外が発生しないようにしました。#99999 (Alexey Milovidov). - スカラー サブクエリが未解決のテーブル関数引数内で使用された際に発生する
LOGICAL_ERROR例外 “Unexpected node type for table expression … Actual IDENTIFIER” を修正しました。例:SELECT * FROM remote('localhost', view(SELECT 2 AS x), concat(x, (SELECT 1)))。#100014 (Alexey Milovidov). VALUESを伴うINSERTで、データの次の行に末尾SQLコメント (--または/* */) があると失敗する問題を修正しました。コメントは別の行として解析されず、スキップされるようになりました。#100016 (Pratima Patel).- NULL の部分を含むタプルの比較時に
arrayRemoveで発生する例外を修正しました。#100017 (Alexey Milovidov) 。 system.asynchronous_insertsにおけるユーザー間のデータ漏えいを修正しました。これまでは、テーブルに対するSELECT権限を持つユーザーであれば、他のユーザーに属する保留中の非同期 INSERT エントリも閲覧できていました。現在は、SHOW_USERS権限を持つユーザーを除き、エントリは現在のユーザーに基づいて絞り込まれます。#100024 (Shaohua Wang).- Time64 から UInt64 への CAST で、値が 24 時間に丸め込まれてしまうことがある問題を修正しました。#100025 (Yarik Briukhovetskyi) 。
- CREATE DICTIONARY の定義に、存在しない関数を含むリスト値がある場合にローカルサーバーがクラッシュする問題を修正しました。#100036 (Yakov Olkhovskiy) 。
CSV、MsgPackフォーマットでNullable(Tuple)を正しく解析できない問題を修正しました。#99753 をクローズ。#100038 (Nihal Z. Miaji).INの右辺に WITH の関数式エイリアス (例:tuple(...)) を使用した際に、UNKNOWN_IDENTIFIERによりCREATE VIEWが失敗する不具合を修正しました。#100042 (Peng).- 並列レプリカ使用時に、
initializeAggregationまたはAggregatingMergeTreeと併用すると時系列集約関数 (例:timeSeriesResampleToGridWithStaleness) がILLEGAL_TYPE_OF_ARGUMENTで失敗する問題を修正しました。#100053 (Alexey Milovidov) 。 - NumericIndexedVectorDataBSI 内部での負の値の処理を正しく行うようにしました。 #100086 (Daniil Ivanik).
accurateCastOrDefaultおよびto*OrDefault関数で、定数入力時に Const カラム型が保持されない問題を修正しました。#100132 (Alexey Milovidov) 。- 省略された
LowCardinality(Nullable(T))型のクエリパラメータは、Nullable(T)と同様に、正しくNULLがデフォルト値として扱われるようになりました。#100144 (Denys Melnyk). - StringSearcher.h での未初期化値の使用を修正しました。#100225 (Konstantin Bogdanov) 。
- Ctrl+C で、スカラー サブクエリやその他の解析時パイプラインをキャンセルできるようにしました。以前は、長時間実行されるスカラー サブクエリの実行中に Ctrl+C を押しても、サブクエリが完了するまで中断できませんでした。また、
clickhouse-clientとclickhouse-localの両方で、スカラー サブクエリの実行中に読み取られた行数が、進行状況バーと JSON 統計に正しく表示されるよう修正しました。@YjyJeff との共同作業です。#100230 (Raúl Marín) 。 - クロス結合およびランタイムフィルタを含む
Dynamicカラム関連のクエリで発生していたLOGICAL_ERROR例外を修正しました。原因は、hasOnlyNulls最適化パスでColumnVariant::filterが Variant カラムのポインタをクローンせずに共有していたことにありました。Closes https://github.com/ClickHouse/ClickHouse/pull/100147. #100234 (Pavel Kruglov). arrayFirst/arrayLast関数の呼び出し時にデータ型が誤って再解釈されることがある、Variant を含む Array の不具合を修正しました。たとえば以前は、実際の Variant 型がDateである場合でも、Array(Variant(Date, Bool))がBoolに変換されていました。#100255 (timothygk).- 関数に関する軽微な変更がいくつかあります。h3 関数は境界の検証がより適切になりました。readWKB はサイズ制限 (新しい設定
max_wkb_geometry_elements) を確認します。乱数生成関数では、計算時の最大反復回数が制限されます。#93543 のフォローアップです。#100270 (Alexey Milovidov). - cutURLParameter が、他のパラメータ名の部分文字列として含まれているパラメータを誤ってスキップしてしまうことがある問題を修正しました。 #100280 (Nikita Semenov).
- Iceberg のメタデータファイルパス設定に null byte が含まれている場合に発生する例外を修正しました。 #100283 (Alexey Milovidov).
distributed_index_analysisをINサブクエリを含む条件とともに使用した際に、実行されるクエリ数が二乗オーダーで増えてしまう問題を修正しました。#100287 (Anton Popov).GROUP BY ... WITH TOTALS HAVINGとUNION DISTINCTを Nullable式と組み合わせて使用した際に発生する “Block structure mismatch” 例外を修正しました。 #100293 (Alexey Milovidov).block_size_bytesパラメータが極端に大きい場合にestimateCompressionRatioで発生する LOGICAL_ERROR 例外を修正。 #100298 (Alexey Milovidov).GROUP BY CUBE(...) WITH ROLLUPや同様の組み合わせを使用した場合に、デバッグビルドで発生する “Inconsistent AST formatting” 例外を修正しました。#100376 (Alexey Milovidov) 。- カラムの別名を使用した、
SELECT *またはEXCEPT/INTERSECTクエリを含むビューの作成時に発生していた例外を修正しました。#100386 (Alexey Milovidov) 。 - ハートビートエラー後のリバランスでコンシューマーがスタックした際、Kafkaエンジンのテーブルで
DROP TABLEがいつまでも完了しない問題を修正しました。#100388 (Alexey Milovidov) 。 - zipアーカイブを使ったバックアップ/リストア操作で発生していた
ReadBuffer is canceled. Can't read from it.例外を修正しました。#100400 (Alexey Milovidov). - granule 境界が揃っていない複数のパーツにデータが分割されている場合に、
max_rows_to_read/force_primary_key使用時のSELECT count()クエリで発生するTOO_MANY_ROWS例外を修正しました。#100408 (Alexey Milovidov). system.completionsが、テーブル単位、DB単位、およびカラム単位の権限取り消しを含む、あらゆる権限付与の組み合わせで、データベース、テーブル、カラムをアクセス権に応じて正しくフィルタリングするよう修正しました。 #100432 (Shaohua Wang).- race condition に起因する NuRaft の SEGFAULT を修正しました。#100444 (Pablo Marcos) 。
min/max/argMin/argMaxでの NaN の扱いがORDER BYと一貫するようになりました。NaN は常にスキップされ、返されるのはすべての値が NaN の場合のみです。従来は、IEEE 754 の順序なし比較セマンティクスにより、結果がデータ内の NaN の位置に依存していました。#100448 (Raúl Marín).delta_lake_snapshot_start_versionを設定せずにdelta_lake_snapshot_end_versionを設定した場合、本来はBAD_ARGUMENTSerror が発生すべきところ、黙って無視されていたコピーペースト由来のバグを修正しました。#100454 (Mohammad Lareb Zafar).StorageRabbitMQ::shutdownは冪等ではありませんでした (weak pointer に無条件にアクセスしたうえで、対応する shared pointer を破棄していました) が、現在はStreamingStorageRegistryで1回、その後DatabaseCatalogでさらに1回、計2回呼び出されるようになっています。この修正により、このメソッドは冪等になり、予防的な null チェックも追加されました。#100455 (Miсhael Stetsyuk) 。QBitをターゲット型としてaccurateCastOrNullを使用した際に発生するLOGICAL_ERROR例外を修正しました。#100470 (Raufs Dunamalijevs).optimize_on_insert=0の wide パーツで、ネストされたArray(JSON)カラムを持つテーブルへの insert 時に発生する LOGICAL_ERROR 例外 “Stream … not found” を修正しました。#100475 (Pavel Kruglov) 。- バックアップメタデータ内のファイルエントリのパスを検証し、
RESTORE時にパストラバーサル、絶対パス、および空の名前を拒否するようにしました。#100483 (Pablo Marcos) 。 - 動作しなかった
LIMIT m OFFSET n WITH TIES構文を修正しました。この構文は、すでに動作していたLIMIT n, m WITH TIESと等価です。#100491 (Nihal Z. Miaji). - 名前付きフィールドと
LowCardinality要素を持つNullable(Tuple)カラムでINを使用した際に発生する例外 “No set is registered for key” を修正しました。 #100523 (Alexey Milovidov). - ベクトル類似度検索時にクラッシュや検知されないメモリ破損を引き起こすおそれがあった、usearch の
sorted_buffer_gt::insert()における heap-buffer-overflow を修正しました。#100537 (Dustin Healy) 。 - クエリで指定した
FORMAT句およびINTO OUTFILE句がEXECUTE ASで無視される問題を修正しました。#100538 (pufit). - クエリレベルの OFFSET を伴う SAMPLE で発生していた AST のフォーマットの不整合を修正しました。#100576 をクローズしました。#100579 (Pavel Kruglov) 。
- Azure の polaris カタログを修正しました。25.12 以降、このカタログでは Azure 使用時に path の先頭へ bucket が追加されるようになっていました。たとえば、
abfss://polaris-polaris@<some_url>.windows.net/<other-path>ではなく、abfss://polaris-polaris@<some_url>.windows.net/polaris-polaris/<other-path>となっていました。この PR では、path から bucket を取り除きます。#100583 (Konstantin Vedernikov) 。 - 一部のブロックでデフォルトカラムが const の場合に、transform で発生していた型不一致の例外を修正しました。#100574 をクローズします。#100616 (Pavel Kruglov).
- クエリの元の SELECT 部分に存在しないカラムが projection の SELECT 部分に含まれている場合に発生する NOT_FOUND_COLUMN_IN_BLOCK を修正しました。#100194 をクローズしました。#100623 (Yarik Briukhovetskyi).
- 過大な次元を持つように細工された
.npyファイルによるサービス拒否攻撃を防ぐため、Npy フォーマットの shape をファイルサイズとオーバーフロー制限に照らして検証します。また、空の shape を拒否し、1行あたりのメモリ使用量を 2 GiB に制限します。#100625 (Raúl Marín). - 非同期 INSERT (TCP) 時および HTTP 経由のすべての INSERT で
DateTime値をパースする際に、session_timezoneが無視される問題を修正しました。 #100647 (Sema Checherinda). - ソースとしてテーブル関数を使用する場合に、
cluster()およびclusterAllReplicas()テーブル関数へ分片キーを渡せるようになりました (例:cluster('name', view(...), sharding_key)) 。#100665 (Sergey Veletskiy) 。 quantileIfArrayArray(0.5)([[NULL]], [[1]])のように、Array コンビネータと NULL 引数を伴うパラメトリック集計関数の使用時に発生していたサーバークラッシュ (アサーション失敗) を修正しました。#100679 (nerve-bot) 。use_variant_as_common_typeが有効な場合に、空のタプルと空でないタプルの共通スーパータイプの計算中に発生していた例外を修正しました。#100699 (Antonio Andelic) 。- Azure blob storage ディスクが設定されている場合でも、エンドポイントに一時的に到達できないとき (例: DNS 障害) にサーバーの起動が失敗しなくなりました。#100701 (Raúl Marín) 。
- 符号なしの除数が符号付きの結果型に収まらない場合に発生する、
positiveModuloの未定義動作を修正しました。#100705 (Raúl Marín) 。 use_top_k_dynamic_filteringが有効で、ORDER BYカラムの型がDynamicまたはVariantの場合に発生していた、サーバーのクラッシュ (論理エラー “Unexpected return type from __topKFilter”) を修正しました。 #100742 (Groene AI) 。- LowCardinality 要素を含む Tuple キーに対して PREWHERE/WHERE で
has()関数を使用した際に、server がクラッシュする問題を修正しました。#100760 (Groene AI). - S3オブジェクトストレージ上の
LogまたはStripeLogテーブルで、同時書き込み中に読み取る際に発生していたfile_offset_of_buffer_end <= getFileSize()アサーション失敗 (デバッグビルドでは例外) を修正しました。 #100763 (Alexey Milovidov). - 統計が有効なテーブルで、WHERE句に関数式 (例:
toDecimal64(col, 3)) が含まれている場合に、統計の選択率推定器で発生していた例外を修正しました。これにより、推定器は無効な型変換を試みる代わりに、そのような述語をスキップするようになりました。#100764 (Han Fei) 。 - 並べ替えを伴う join が誤った結果になることがあるまれなケースを修正しました。#100790 (Yarik Briukhovetskyi) 。
- 最適化された単純な count で
AggregateFunctionの引数型が誤っていた問題を修正しました。この問題により、分散テーブルでcount(v0 + v1)のような式をクエリすると、NUMBER_OF_ARGUMENTS_DOESNT_MATCH例外が発生していました。 #100794 (YjyJeff). - 一部のカタログでは、
select * from system.databasesクエリの結果のSETTINGSセクションに、一部のシークレットが表示されることがあります。このPRでは、そのような挙動を防止します。#100800 (Konstantin Vedernikov). toStartOfIntervalで、origin 引数を指定し、かつ Week、Quarter、または Year のインターバルに極端な値を使用した場合に発生する未定義動作 (符号付き整数オーバーフロー) を修正しました。#100817 (Raúl Marín) 。Tuple戻り値型と、1 つ以上のNullableな引数を持つIf、Distinct、DistinctIf、IfState集約関数コンビネータで、Nullable(Tuple)の導入後に古いシリアライズ済み状態を読み取れなくなっていた問題を修正しました。#98917 をクローズします。#100826 (Nihal Z. Miaji).- s3Cluster と分散クエリにおいて、接続プールの use-after-free が原因で発生していたセグメンテーションフォールトを修正しました。 #100837 (Konstantin Bogdanov) 。
- サーバーのシャットダウン中に Dictionary を読み込む際、null ポインタのデリファレンスによるセグメンテーション違反が発生する不具合を修正しました。
Context::getUserDefinedSQLObjectsStorage(user_defined_sql_objects_storageをデリファレンスする) は、メインスレッドがContext::shutdown(user_defined_sql_objects_storageを null に設定する) を呼び出すのと同時に、Dictionary のスレッドからも呼び出されます。Context::shutdownを実行する前に、Dictionary ローダーで今後の更新を無効にし、現在実行中の Dictionary クエリを停止し、Dictionary の読み込みスレッドを join しておく必要があります。これは通常のクエリに対して行っている処理と同様です。#100839 (Miсhael Stetsyuk). - 入力に非ASCIIバイトが含まれている場合に
ULIDStringToDateTimeで発生するバッファオーバーフローを修正しました。#100843 (Konstantin Bogdanov) 。 - 複数のテーブル (
Distributedテーブルを含む) を束ねるMergeテーブル (またはmerge()テーブル関数) に対して、distributed_group_by_no_merge=1が有効な状態でクエリを実行すると発生していたクラッシュ (LOGICAL_ERROR) を修正しました。#100859 (Groene AI). - Cast_keep_nullable が有効な場合、dynamic null を Variant にキャストしても例外が発生しなくなりました。 #100864 (Seva Potapov).
clickhouse-keeper-clientのget、exists、lsコマンドで、重複したwatch_idエラーメッセージが stderr ではなく stdout に出力される問題を修正しました。#100893 (Mohammad Lareb Zafar).intDiv/intDivOrZeroで、Nullable なタプルの配列に対して発生していた例外を修正しました。例:SELECT intDiv([divide((1, 2), ... AND NULL)], 2). #100895 (Raúl Marín).- 定義を保存する前に
StorageAliasのエンジン引数を評価し、currentDatabase()のような式がデータベースに保存される前にリテラル値に解決されるようにしました。#100902 (Nikolay Degterinsky) 。 query_plan_merge_expressions = 0のときに、ExpressionStepがReadFromMergeTreeの直上にある場合のprocessAndOptimizeTextIndexFunctionsを修正しました。#100879 の修正です。#100909 (Jimmy Aguilar Mena).- do_complete_line の範囲外アクセスを修正した replxx に更新しました。 #100925 (Azat Khuzhin).
- shard-by-PK 最適化を使用する JOIN でクエリ条件キャッシュが使われ、一部のパーツがキャッシュされた条件によって除外される場合に、誤った結果が返される問題を修正しました。 #100926 (Groene AI).
- 一部のケースで、索引解析中にフィルタ式で
divideとintDivを使用するとILLEGAL_DIVISIONが返されていた問題を修正しました。#100928 (Nihal Z. Miaji) 。 - 非同期起動時に、起動時の依存関係の順序が誤っていたため、内部テーブルを持つmaterialized viewで発生していた”ターゲットテーブルが存在しない”エラーを修正しました。 #100946 (Nikolay Degterinsky).
- parseDateTimeBestEffortで、小数点以下が19桁以上ある日時文字列をパースする際に発生する未定義動作 (符号付き整数オーバーフロー) を修正しました。 #100948 (Vasily Chekalkin).
IN句にタプルのサブクエリを含む場合 (例:WHERE (id, str) IN (SELECT (id, str) FROM ...)) にテキスト検索索引を使用すると発生していたクラッシュ、またはサブクエリ内のカラム数がINの左辺のタプルと一致しない場合に発生していたクラッシュを修正しました。#100959 (Anton Popov).- スパースカラムのシリアライゼーションを使用する
MergeTreeテーブルからポリゴン Dictionary を構築する際に発生していたクラッシュを修正しました。#100964 (Anton Popov) 。 - 定数畳み込みされた式に対して
INTERSECT ALL/UNION ALLを使用した際に発生する論理エラー “Invalid action query tree node” を修正しました。#100977 (Alexey Milovidov). Nullable(Tuple)の導入後、1 つ以上のNullable引数を持つsumCountOrDefaultaggregate function が、古いシリアライズ済みの状態を読み取れなくなっていた問題を修正しました。#100882 をクローズしました。#101021 (Nihal Z. Miaji) 。- 遅延カラムレプリケーション (
enable_lazy_columns_replication) によって生成されたColumnReplicatedカラムが、入力の到着が遅れるマージソートパイプラインに流れ込む場合に、マージアルゴリズムで発生するクラッシュ (Logical error: isConst/isSparse/isReplicated assertTypeEquality) を修正しました。#101036 (Groene AI). SELECTで同じエイリアスが複数の式に使われている場合に、誤ったUNKNOWN_IDENTIFIERエラーではなく、正しいMULTIPLE_EXPRESSIONS_FOR_ALIASエラーが報告されるよう修正しました。#101040 (Alexey Milovidov) 。- 宣言されたタイムゾーンが式のタイムゾーンと異なる場合に、
DateTime/DateTime64型の ALIAS カラムでタイムゾーン変換が適用されない不具合を修正しました。 #101043 (Alexey Milovidov). - ビュー、サブクエリ、および
INSERT ... SELECTで、query_logに行ポリシーが記録されない問題を修正しました。クエリプランニング中には行ポリシーが適用されていたものの、ログ記録のためにサブプランナーから親プランナーへ引き継がれていませんでした。行ポリシー (ログ記録専用) は、プランナーとサブプランナーの双方が設定できるよう、QueryAccessInfoに保持されるようになりました。#101044 (Narasimha Pakeer). - パイプラインブロックに通常のカラムとマージされる
ColumnConstカラムが含まれている場合にDirectJoinMergeTreeEntityで発生する例外を修正しました。 #101046 (Alexey Milovidov). - CTE のカラム別名のフォーマットにおける不要なスペースを修正しました (
WITH t (a, b)→WITH t(a, b)) 。#101049 (Alexey Milovidov). - アナライザが有効な場合に、
mergeのようなネストされたテーブル関数を使用するとremote/clusterテーブル関数が失敗する問題を修正しました。#101055 (Alexey Milovidov). prefer_localhost_replica=1の場合に分散クエリでOFFSETが二重に適用され、想定より少ない行が返される不具合を修正しました。#101071 (Nihal Z. Miaji) 。format_regexp設定に無効な正規表現を指定してRegexpフォーマットを使用した際に発生するクラッシュを修正。 #101074 (Nihal Z. Miaji).- 並列レプリカで
serialize_query_plan=1を使用した際に、時系列集約関数で発生していた “Illegal type Decimal64 of start parameter” エラーを修正しました。#101083 (Groene AI). - PREWHERE を含むプロジェクションを
ORDER BY ... LIMITと併用した際にoptimizeLazyMaterializationで発生する例外を修正しました。 #101115 (Anton Popov). - 内部専用の
Nullcombinator (例:sumNull,avgNull) を使用する aggregate functions で、aggregate_functions_null_for_empty = 1設定が有効な場合に発生していた server のクラッシュ (SIGABRT) を修正しました。#101147 (Groene AI) 。 - 完了したファイルセグメントのログ記録時に解放済みメモリを読み取ってしまう可能性があった、ファイルシステムキャッシュの書き込みパスでの use-after-free を修正しました (BuzzHouse の MemorySanitizer により検出) 。#101161 (Groene AI).
- 分散索引解析で、明示的な要素なしに構築された set を持つ
GLOBAL IN述語に遭遇した際、“明示的な要素なしで外部テーブルを準備済みの set にアタッチしようとしています” というエラーでサーバーがクラッシュする不具合を修正しました。#101178 (Groene AI). - JIT コンパイルが有効な場合 (コンパイル閾値に達した後) 、
Decimalカラムに対するMAX/MIN集約関数が誤った結果を返す不具合を修正しました。 #101203 (Raúl Marín). - 論理削除後、論理削除のマスクが付いたすべてのパーツがマージで解消された後も、
minmax_count_projectionと単純なCOUNT(*)の最適化が恒久的に無効のままになる問題を修正しました。#101212 (Anton Popov). listとreadの間にリモート object が上書きされると、以前は stale な object メタデータが生成され、その結果 cache からHaving zero bytes, ...という論理 error が発生し得たケースを修正しました。#101219 (Kseniia Sumarokova).- LowCardinality 型の
lc_columnを持つ MergeTree テーブルに対してORDER BY CAST(lc_column, 'Type')でクエリを実行した際に発生していたサーバークラッシュ (LOGICAL_ERROR: Bad cast from ColumnVector to ColumnLowCardinality) を修正しました。 #101220 (Groene AI). S3Queueにおける期限切れの処理中ノードのクリーンアップを修正しました。#101230 (Kseniia Sumarokova) 。- 無効な
optimizations引数が指定された場合の mergeTreeAnalyzeIndexes() における UB を修正しました。#101253 (Azat Khuzhin). - パーティション化された Iceberg テーブルで
ALTER TABLE UPDATEを連続実行した際に発生するLogical error: 'partitions_count > 0'例外を修正しました。#101278 (Desel72). - 大きな整数定数 (例: 256、2147483648) を、MergeTreeテーブルに対する AND を含む WHERE 句でブール述語として使用した場合に、クエリ結果が誤っていた問題を修正しました。たとえば、
SELECT count() FROM t WHERE (2147483648 > b) AND 2147483648は、本来はすべての行に一致するべきところ、誤って 0 を返していました。#101287 (Groene AI). - Replicated MergeTree を使用する Delta Lake クラスターからの insert-select を修正しました。 #101299 (Konstantin Vedernikov).
- スカラー サブクエリが、依存関係にあるマテリアライズド CTE の連鎖を参照したときに、“Logical error: Reading from materialized CTE before materialization” でクラッシュする問題を修正しました。 #101305 (Groene AI).
IStorage::getDependentViewsByColumnにおけるstorage_idのデータ競合を修正しました。#101385 (Nikolay Degterinsky) 。- BACKUP FROM SNAPSHOT AST のフォーマット処理とクローン作成を修正しました。#101405 (Pablo Marcos) 。
enforce_keeper_component_tracking有効時にsystem.part_moves_between_shardsをクエリすると発生していた、LOGICAL_ERROR クラッシュ “Current component is empty” を修正しました。#101462 (Groene AI).- fuzzer が不正な Dynamic 型の AST を生成した際に発生する DataTypeDynamic::create() のセグメンテーションフォールトを修正しました。 #101464 (Groene AI) 。
- DeltaKernel が有効でない状態で
delta_lake_snapshot_versionまたは CDF version の設定を使用した場合、誤ったデータを黙って返すのではなく、エラーを返すようにしました。#101489 (Desel72). - ARRAY JOIN を JOIN USING とともに使用し、
analyzer_compatibility_join_using_top_level_identifier設定が有効な場合に発生していたNOT_FOUND_COLUMN_IN_BLOCK例外を修正しました。#101240 をクローズしました。#101507 (Vladimir Cherkasov). - テーブルが
iceberg_metadata_file_pathを使用して作成され、対象のメタデータバージョンがすでに存在する場合に、Iceberg INSERT の再試行ループが失敗する問題を修正しました。#101548 (Groene AI). - シリアライゼーション/デシリアライゼーションの不整合を避けるため、arrayIntersect および関連関数の結果カラムから Nullable を削除しました。 #101569 (George Larionov).
- IcebergLocal table engine を使用する materialized view に対して SELECT を実行した際に発生するサーバークラッシュ (LOGICAL_ERROR) を修正しました。 #101577 (Groene AI).
- NaN 引数で
intExp10を呼び出した際の誤ったエラーメッセージを修正しました。intExp10ではなくintExp2と表示されていました。#101582 (Krishna Chaitanya). - #100288 のリファクタリング後、
allow_statistics=0でALTER TABLE ADD STATISTICSおよびALTER TABLE DROP STATISTICSがブロックされなくなっていた問題を修正しました。#101585 (Krishna Chaitanya) 。 - 25.1 より前の不完全な drop によって残った ZooKeeper ノードに
drop_lock_versionノードがない場合に、KeeperMapのCREATE TABLEが “Cannot create metadata for table” で失敗する問題を修正しました。#101623 (Antonio Andelic). - Map のサブカラム読み取り時に発生する可能性がある論理エラーを修正しました。#100769 をクローズ。#101336 をクローズ。#101641 (Pavel Kruglov).
getSubcolumnDataで、プレフィックス一致よりもサブカラムの完全一致を優先するよう修正し、クラッシュの可能性を防止しました。#101271 をクローズしました。#101645 (Pavel Kruglov).use_variant_default_implementation_for_comparisonsが無効な場合に、LowCardinalityカラムをVariantの NULL 定数と比較するとクラッシュする問題 (LOGICAL_ERROR: “ColumnUnique can’t contain null values”) を修正しました。#101690 (Groene AI).- 内容: Bzip2ReadBuffer に空ストリーム用のガードを追加し、内部ストリームが空の場合に UNEXPECTED_END_OF_FILE を送出する代わりに EOF を返すようにしました。#101691 (ClickGap AI Bot) 。
- 内容:
system.s3_queue_settingsおよびsystem.azure_queue_settingsのalterableカラムで、説明文の内容が逆になっていた問題を修正しました。実際のコードの動作に合わせて、0と1の意味を入れ替えました。 #101703 (ClickGap AI Bot). - positiveModulo(tuple, number) が、剰余ではなく誤って除算にディスパッチされていた問題を修正しました。#101709 (ClickGap AI Bot) 。
- cache でラップされたディスクで
thread_pool_sizeが設定されている場合に発生していたクラッシュを修正しました。従来は、FileCacheSettings::loadFromConfig()がthread_pool_sizeを不明な設定として拒否していたため、server が起動できませんでした。この設定は有効なIDiskパラメータであり、バックグラウンドのパート移動中に行われるディスク間コピー処理で使用するスレッド数を制御します。#101712 (Francisco). RANGE_HASHEDDictionary の作成時に、存在しないMAX範囲属性を警告なしで受け入れてしまい、最小範囲属性と最大範囲属性の型が異なる場合に誤った型設定を使用していた不具合を修正しました。このバグはbuildRangeConfiguration内のコピー&ペーストミスが原因で、最大属性に対してmax_attr_nameではなくmin_attr_nameを参照していたことによるものです。#101732 (Yakov Olkhovskiy).- 待機タイマーが、参照先の
ProfileEvents::Countersを持つワーカースレッドより長く生存する場合に CPU lease scheduler で発生する use-after-free クラッシュを修正しました。 #101761 (Antonio Andelic) 。 - arrayLevenshteinDistanceWeighted 関数および arraySimilarity 関数の不具合を修正しました。#101725 をクローズしました。#101767 (Mikhail f. Shiryaev).
- POSTフォームボディを無視していた Prometheus Query API の問題を修正しました。 #101794 (James Cunningham).
- S3
Client::~Clientデストラクタから例外が伝播し、server が終了してしまう問題を修正しました。#101798 (Gagan Dhakrey). Object型の動的パスの並列デシリアライゼーションにおける use-after-scope の問題を修正しました。これは、動的パスが多数あるテーブルの読み取り時にクラッシュを引き起こす可能性がありました。#101823 (Antonio Andelic).- 特定の (デフォルト以外の) フォーマット設定で、関数
formatDateTimeのフォーマッタ%Wが誤った出力を返す問題を修正しました。 #101847 (Robert Schulze). - デマングルされたシンボル名のテンプレート引数内に検索文字列が最初に現れる場合に、
SYSTEM INSTRUMENT ADDでshouldPatchFunctionの偽陰性が発生する問題を修正しました。#101885 (Pablo Marcos). - 定期的なリフレッシュ中に ZooKeeper のセッションが期限切れになると UDF レジストリが失われる不具合を修正しました。この不具合により、完全なリフレッシュが成功するまで、すべてのユーザー定義関数が利用できなくなる可能性がありました。 #101891 (Nikita Fomichev).
AES_256_GCM_SIVのsystem.codecsの説明を修正し、AES-128ではなくAES-256と表示されるようにしました。#101917 (Jimmy Aguilar Mena) 。- JSON column 上に作成された min-max 索引で誤った極値が使われ、誤ったクエリ結果を引き起こす問題を修正しました。#101700 をクローズします。#101918 (Pavel Kruglov) 。
splitByStringトークナイザーは、空の区切り文字列を受け入れなくなりました。#101928 (Robert Schulze).materialize_skip_indexes_on_merge=falseで、マージ時にテキスト (全文) 索引が抑止されない不具合を修正しました。これまでは、テキスト以外のスキップ索引 (minmax、set、bloom_filter) のみが抑止され、テキスト索引は引き続き構築されていたため、CPU と I/O を無駄に消費していました。#101932 (Groene AI) 。sparseGramsトークナイザーが、指定された最大長を超えるトークンを生成していました (これは実装内で+2がハードコードされていたためです) 。 #101934 (Elmi Ahmadov).addStreams中にストリームのコンストラクタが例外をスローし、column_streamsに null エントリが残ることで発生するMergeTreeDataPartWriterWide::cancelの SIGSEGV を修正しました。 #101936 (Antonio Andelic).query_plan_direct_read_from_text_indexが有効な場合に、フルテキスト索引を持つ Merge または分散テーブルに対し、has*Tokensと LIKE が混在するフィルタ条件を含むクエリを実行すると例外が発生する問題を修正しました。 #101939 (Jimmy Aguilar Mena).- 無効な
QueryProcessingStage値を含むネイティブプロトコルのクエリパケットのパース時に発生する未定義動作を修正しました。 #101972 (Raúl Marín). - 初期クエリのパース中に例外が発生した場合、同期ずれしたストリームから不正なデータを読み取るのを防ぐため、TCP接続を閉じるようにしました。#101989 (Raúl Marín).
- 26.1+ のファイルシステムキャッシュにおける SLRU の競合バグを修正しました。この不具合により、領域予約に関する論理エラーが発生する可能性があります。デバッグビルドでは、アサーション失敗
'Previous state is Evicting, but expected state to be Active while setting Evicting flag for 2c1e3484ecdc6b78a8978fa5b17c5097:0:339 (state: Evicting)'.が発生することもあります。#101991 (Kseniia Sumarokova). - 末尾に余分なデータが付いた文字列を空の
Tuple()型にキャストする際に発生する例外を修正しました。#102011 (Alexey Milovidov). - ORDER BY と grace_hash join アルゴリズムを使用するクエリで、行の並び順が誤る問題を修正しました。影響を受けるクエリでは、結果が誤った順序で返されることで、気付かないうちに不正確な出力が生成される可能性がありました。 #102036 (János Benjamin Antal).
max_bytes_in_join設定が構成されている場合に、RIGHT JOIN および FULL JOIN クエリで発生する可能性があった LOGICAL ERROR (Unexpected size of index type) を修正しました。#102042 (Jimmy Aguilar Mena) 。- 負の値を持つ Time を DateTime と比較した際に、誤った結果が返されるケースを修正しました。#101670 をクローズしました。#102056 (Yarik Briukhovetskyi)。
ZooKeeperRetriesControlが古い (期限切れの) ZooKeeperセッションを更新せずに再試行していたことが原因で発生していた、UDF refresh のクラッシュを修正しました。 #102059 (Nikita Fomichev).- unlock snapshot のフォーマット時に欠けていたスペースを修正。https://github.com/clickhouse/clickhouse/issues/101723 をクローズ。#102063 (Han Fei).
- WHERE 句を含むビューに対するクエリで、内部クエリがビューのメタデータと異なる型のカラム (たとえば、
join_use_nullsを指定した LEFT JOIN による Nullable) を生成した場合にクラッシュ (SIGSEGV) する問題を修正しました。#102085 (Miсhael Stetsyuk). - cache キーの不一致により、パート削除後も
VectorSimilarityIndexCacheのエントリが追い出されない不具合を修正しました。#102152 (Seva Potapov). - rabbitmq ストレージの使用時に、破損したメッセージを NACK するようにしました。 #102157 (Seva Potapov).
- 不正な空のタプル文字列のパース時に発生する論理エラーを修正しました。#102289 (Nihal Z. Miaji) 。
- GROUP BY のカラムの順序がテーブルのソートキーと異なる場合に
optimize_aggregation_in_order=1を使用すると、誤った集計結果 (行の重複) が生じる問題を修正しました。 #102299 (Groene AI). - Avro フォーマットの使用時に
IcebergLocalのALTER TABLE ... UPDATEで発生していたクラッシュを修正しました。原因は、LowCardinality/Nullableのラッパー型がシリアライゼーション前にアンラップされていなかったことです。 #102337 (Desel72). - 式が定義されていないマテリアライズドカラムに対するミューテーションで発生していたセグメンテーションフォルトを修正しました。#102185 をクローズします。#102342 (zoomxi).
- Array型における Coalescing merge tree の修正です。これにより #89509 をクローズします。#102384 (Konstantin Vedernikov).
- ブルームフィルタのプッシュダウンが有効で、WHERE句に等値/不等値条件がある Parquet ファイルの読み取り時に発生する segfault (またはデバッグビルドでの LOGICAL_ERROR) を修正しました。このクラッシュは、Parquet の prefetcher におけるブルームフィルタデータ取得処理で範囲外のメモリアクセスが発生することが原因で、非決定論的に誤ったクエリ結果を引き起こす可能性もありました。#102385 (Groene AI).
- サブキュー間でエビクション統計が共有されていたことと、失敗した候補に対するリカバリパスが誤っていたことが原因で、SLRU ファイルシステムキャッシュの動的リサイズ中に
LOGICAL_ERRORで中断する問題を修正しました。#102396 (Antonio Andelic). - Database Replicated の新しいレプリカ上で、ターゲットテーブルのない Alias tables の初期化に失敗する問題を修正しました。#101320 をクローズしました。#102397 (Nikolay Degterinsky).
- ヌルバイトのみで構成された needle を検索する際に、文字列検索関数 (
countSubstrings、positionなど) で範囲外読み取りが発生する問題を修正しました。#102401 (Raúl Marín) 。 - 全文テキスト索引の設定 (
enable_full_text_index、allow_experimental_full_text_index、use_skip_indexes_on_data_read) は、compatibility設定が 26.1 より前のバージョンを指している場合でも、無効化されなくなりました。以前は、そのためSharedDatabaseCatalogがテキスト索引付きのテーブルを作成できないことがありました。#102422 (Nikita Fomichev) 。 - 末尾が
%のprintfにおける境界外読み取りを修正しました。#102472 (Raúl Marín) 。 - AsynchronousMetrics において、rewind でバッファのキャンセルフラグがリセットされないことが原因で、debug builds で発生していた
ReadBuffer is canceledという chassert 例外を修正しました。 #102524 (Yuri Fedoseev) 。 - 区切り文字だけからなる needle (例:
'()'、'!!!') を指定したhasToken/hasTokenOrNullについて、テキスト索引を持つカラムでの動作を修正しました。従来は、BAD_ARGUMENTSをスローすべき場合 (hasToken) やNULLを返すべき場合 (hasTokenOrNull) に、索引がすべてのグラニュールを黙ってスキップしていました。#102544 (Jimmy Aguilar Mena). - Keeper における巨大な multi リクエストでの OOM を修正しました。OpenTelemetry のトレーシングでは、
ZooKeeperRequestオブジェクト内の OpenTelemetry spans 用に無条件で >1 KiB を割り当てていたため、非常に巨大な multi リクエストでは追加で >10 GiB のメモリを確保しようとしていました。これを修正するため、共有データを静的メモリに保持するようにし、ZooKeeperOpentelemetrySpansではstd::optionalではなくstd::unique_ptrを使うようにしました。 #102586 (Miсhael Stetsyuk) 。 - 既存のコレクションに対して
CREATE NAMED COLLECTION IF NOT EXISTSを実行するとNamedCollectionの CurrentMetric が過大に計上される問題と、起動時に config または SQL ストレージから読み込まれたコレクションでこれが初期化されない問題を修正しました。#102507 をクローズします。#102598 (Pablo Marcos). - 同時実行DDLによりローカル分片が空のカラムを返す場合に、
getStructureOfRemoteTableで発生する例外を修正しました。 #102604 (Alexey Milovidov). - 複数の同時実行
CREATE TABLE IF NOT EXISTSクエリが Shared データベース上の同じS3Queueテーブルを対象とした際に発生するLOGICAL_ERROR例外を修正しました。 #102610 (Nikita Taranov). - WHERE フィルタ使用時に Nullable カラムを読み込む際、ネイティブ Parquet V3 リーダーで発生する LOGICAL_ERROR クラッシュ “Unexpected number of rows in column subchunk” を修正しました。 #102628 (Groene AI).
AzureWriteMicrosecondsprofile event の説明が、“write” ではなく “read” になっていた問題を修正しました。#102639 (Miсhael Stetsyuk) 。- 一部の特殊なケースで、行ポリシーによって ‘Not found column in block’ 例外が発生する不具合。#102648 (Yarik Briukhovetskyi).
- 設定で定義された静的クラスターで、一時的に稼働中のノードが1つもない場合に ClusterDiscovery で発生していたサーバー例外を修正しました。 #102661 (Kseniia Sumarokova).
- タイムゾーン調整後にオーバーフローが発生した場合、誤った日付データ型が推論される問題を修正しました。#102601 をクローズしました。#102674 (Pavel Kruglov).
- リフレッシャブルmaterialized view が待機中に削除された場合に、
SYSTEM WAIT VIEWがいつまでもハングしたままになる問題を修正しました。#102681 (Nikolay Degterinsky) 。 - すべての行で ELSE が返されてしまう Dynamic expression を含む CASE を修正。#102511 をクローズ。#102684 (Pavel Kruglov).
- バイナリエンコードされたデータ型で発生していた、フラット化されたDynamic型のシリアライゼーションの不具合を修正しました。#101911 をクローズします。#102692 (Pavel Kruglov) 。
- format_schema_source=‘query’ が複数行の結果を暗黙に無視してしまう問題を修正しました。#101905 をクローズしました。#102698 (Pavel Kruglov).
- すべてのエラーを
1にマッピングするのではなく、SSHクライアント経由で実際の終了コードを報告するようにしました。#101741 を修正しました。#102700 (Konstantin Bogdanov) 。 - 動的/定義済みクエリハンドラーで HTTP ヘッダーが失われる問題を修正しました。#101846 をクローズします。#102706 (Konstantin Bogdanov) 。
- 折りたたまれた jemalloc ヒーププロファイルにポアソン・サンプリング補正を適用し、jeprof の出力と一致するようにしました。以前は、collapsed フォーマットでサンプリング確率が考慮されていなかったため、実際の割り当てサイズが過小評価されていました。#102759 (Antonio Andelic).
- 関数
hasPhraseにNULL引数を渡した場合のクラッシュを修正しました。#102802 (Nikita Taranov) 。 - 循環するシンボリック型参照を含む再帰的なスキーマを持つ Avro ファイルの読み取り時に発生していたサーバーのクラッシュ (SIGSEGV) を修正しました。今後は、このようなスキーマはクラッシュを引き起こす代わりに検出され、明確なエラーメッセージとともに拒否されます。#102853 (Groene AI).
FunctionVariantAdaptorで結果をキャストする際、Variantカラムに対する関数がメモリ制限に達するか、型変換以外の例外が発生した場合に起きていたサーバークラッシュ (LOGICAL_ERRORアサーション) を修正しました。この例外は、内部エラーとして誤分類されるのではなく、正しく伝播されるようになりました。#102855 (Groene AI).- スキーマ推論中に
std::length_errorがスローされた場合 (たとえば、input_format_msgpack_number_of_columnsに極端な値が設定されている場合や、入力データが不正な場合) に、debug/sanitizer ビルドでサーバーがクラッシュする問題を修正しました。#102859 (Groene AI). - レプリケートされたカラムおよびスパースなカラムのシリアライゼーションにおける NULL 表現が、設定 (例:
format_tsv_null_representation) に従うようにしました。 #102888 (Hechem Selmi). - #103499 にバックポート: Poco の
BufferedStreamBuf::flushBufferがソケット層からの短い書き込みを適切に処理していなかったため、ios_base::clear: unspecified iostream_category errorが発生した S3 リクエストが再試行されずに失敗していた問題を修正しました。#102894 (Sema Checherinda). - 論理削除の後、論理削除マスク付きのパーツがすべてマージされて消えた後も、
minmax_count_projectionと単純なCOUNT(*)の最適化が恒久的に無効のままになる不具合を修正しました。#102900 (Anton Popov). - LTO に起因する jemalloc の散発的なクラッシュを修正しました。#102913 (Azat Khuzhin) 。
- 新しいアナライザで、行ポリシーの OR チェーンを IN に最適化しました。#102915 (Azat Khuzhin) 。
- 誤ったアラインメントで page cache を解放することで発生し、クラッシュにつながる可能性がある jemalloc のメタデータ破損を修正しました。 #102918 (Azat Khuzhin).
- materialized view を伴わない通常の INSERT では、過剰な ConcurrencyControl のスロットやスレッド (
max_insert_threadsではなくmax_threads) を要求しなくなり、INSERT スループットが高いクラスターでの CC スロットの枯渇やスレッド数の急増を防げるようになりました。 #102961 (Sema Checherinda). - カーネル OOM を回避するため、MEMORY_LIMIT_EXCEEDED を発生させられるように ArrowMemoryPool を再導入しました。#102999 (Azat Khuzhin) 。
cast_string_to_date_time_modeがNullable(DateTime)へのCASTで無視されていた問題を修正しました。#101840 をクローズしました。#103035 (Pavel Kruglov).- テキスト索引の direct read 最適化で、
ALIASカラムがサポートされるようになりました。#103037 (Anton Popov). - #103454 にバックポート: 集約プロジェクションがクエリに一致し、かつテーブルの一部のパーツにプロジェクションデータが存在しない場合 (たとえば、すでにデータが入っているテーブルにプロジェクションを追加したものの、
MATERIALIZE PROJECTIONを実行していない場合) に、SELECT DISTINCTが不完全な結果を何も通知せず返してしまう問題を修正しました。#102951 をクローズしました。#103052 (Nihal Z. Miaji). MergeTreeテーブルで、NがUInt8より大きい整数型 (例:256、65535、2147483648、または任意の負の整数) の場合に、WHERE x AND toNullable(N)が誤った結果を返す問題を修正しました。これは、splitFilterNodeForAllowedInputsが、簡約されたANDのNullableな残り部分を boolean に変換する際にNULLのゼロ値を使っていたため、三値論理のもとで比較結果がNULLとなり、filter がすべての行を誤って除外していたためです。#103077 (Groene AI).- 文字列検索関数 (
locate、positionなど) で、引数を逆順 (function_locate_has_mysql_compatible_argument_order = 1の場合のlocate(needle, haystack)) で渡した際に、エラーメッセージで誤った引数型が表示される不具合を修正しました。#103102 (Alex Kuleshov) 。 disableFailPointが、フェイルポイントで一時停止しているスレッドがない状態で呼び出された際に、waitForPauseが無限にハングし続ける問題を修正しました。#103119 (Shaohua Wang) 。- 事前認証時の TCP Hello パケット内の文字列長を 64 KB に制限し、ハンドシェイク全体の時間を制限する
handshake_timeout_millisecondsサーバー設定を追加しました。これにより、未認証のクライアントが過剰なメモリを消費したり、スレッドを無期限に占有したりすることを防ぎます。 #103284 (Sema Checherinda). - Parquet ColumnIndex の統計情報で、String カラムにおいて min_value > max_value となる問題を修正しました。 #103334 (Saurabh Kumar Ojha).
- Native format のフラット化された Dynamic データの不正な形式をチェックするようにしました。 #103392 (Pavel Kruglov).
urlテーブル関数から_timeカラムを設定するようにしました。#103437 (Nikita Taranov) 。- SVE 命令が利用できない環境でも SVE 命令を使ってしまっていた SVE 検出を修正しました。#103568 (Raúl Marín) 。
ビルド/テスト/パッケージングの改善
- Libstemmer (Snowball) の依存関係で、より新しい v3.0.1 を使用するようになりました。#99256 (Jimmy Aguilar Mena) 。
- clickhouse-test で
use_skip_indexes_for_top_k、use_top_k_dynamic_filtering、query_plan_max_limit_for_top_k_optimizationの設定をランダム化。 #91782 (Nikita Fomichev). - 関数向けのストレステストを実装し、そのさまざまな特性の妥当性を検証するようにしました。 #93543 (Michael Kolupaev).
llvm-projectについて、upstream の設定を取り込む代わりに、独自の CMake 構成を提供。 #97453 (Konstantin Bogdanov).- クエリ最適化パスのカバレッジを高めるため、テストインフラストラクチャ内で
optimize_*設定のランダム化対象を増やしました。#97547 (Alexey Milovidov) 。 - Rust ツールチェーン nightly-2026-03-22 を使用。#98602 (Konstantin Bogdanov).
wasmtimev42.0.1 を使用しました。 #98603 (Konstantin Bogdanov).llvm-project22.1.1 を使用。 #98882 (Konstantin Bogdanov).- nightly のテスト単位カバレッジパイプラインで、
SANITIZE_COVERAGE(カスタムサニタイザーコールバック、シンボル単位の粒度) を LLVM のソースベースカバレッジ (WITH_COVERAGE,-fprofile-instr-generate -fcoverage-mapping) に置き換えました。サーバーは起動時に ELF セクションから自身のカバレッジマッピングを読み込み、新しいSYSTEM SET COVERAGE TEST 'name'コマンドを通じて、テストごとに(file, line_start, line_end)タプルを収集するようになりました。対象を絞った CIチェックでのテスト選定では、新しい CIDB テーブルchecks_coverage_linesに対する行範囲クエリを使用し、変更された差分行のうちどれだけをカバーしているかに基づいて候補テストをランク付けします。#99513 (Nikita Fomichev). - -O0 ビルドで発生する llvm-libc のリンクエラーを修正。 #100023 (Zheguang Zhao).
- 設定に
logger.logとlogger.errorlogの設定が含まれていない場合 (たとえば、すべてのログメッセージを STDOUT/STDERR に出力する想定のとき) に、コンテナ起動時に発生していた 2 件のエラーメッセージを修正しました。 #100239 (Simon). - macOS ビルドでは、Apple の
ld(cctools-port ld64) よりld64.lldを優先するようにしました。これにより、Darwin でのリンク時間が大幅に短縮されるはずです。cctools-port の ld64 は、-ffunction-sectionsと-dead_stripを使用すると非常に遅いためです。ld64.lldが利用できない場合は、ldにフォールバックします。 #100275 (Alexey Milovidov). - ディレクトリに機密情報が一切登録されないことを確認するテスト (REST + Glue) 。#100307 (Konstantin Vedernikov) 。
- 最近変更されたテストを、異なるランダム化設定で繰り返し実行するようにしました。#100385 (Alexey Milovidov).
- CMake で
#embedファイルの依存関係を追跡し、正しく再ビルドできるように ccache の depend mode を有効にしました。#100411 (Alexey Milovidov) 。 - TPC-Hクエリの正しさを検証するテストを追加しました。#100580 (Raufs Dunamalijevs) 。
aws-sdk-cpp1.11.771 を使用するようになりました。 #100582 (Konstantin Bogdanov).- 性能テスト用XMLから、
file属性を使って外部のSQLクエリファイルや設定を参照できるようになりました。#100747 (Raufs Dunamalijevs). LowerUpperImpl.hに不足していたTargetSpecific.hの include を追加し、-march=x86-64-v4でのコンパイルが通るようにしました。#100932 (Alexey Milovidov).- cxxflags に —no-default-config を追加し、Gentoo でのビルドを修正しました。#100973 (Isak Ellmer).
utils/auto-bisect/を追加しました。これはシェルベースの二分探索フレームワークで、ローカルでビルドしなくても、事前ビルド済みの CI バイナリをダウンロードし、ユーザー指定のテストスクリプトを実行して、リグレッションを引き起こした最初のコミットを特定できます。#100989 (Nikita Fomichev) 。- CMake では ThinLTO をデフォルトで無効化し、ローカルの開発者向けビルドで暗黙的に有効にならないようにしました。CI のリリースビルドは
-DENABLE_THINLTO=1を明示的に指定しているため、影響を受けません。#101041 (Alexey Milovidov). - 性能テストにTPC-DS SF1ベンチマークを追加。#101209 (Raufs Dunamalijevs) 。
- 以下を対象とする、MergeTree の論理削除向けステートレステストが追加されました:
has_lightweight_deleteフラグのライフサイクル、optimize_trivial_count_queryにおけるCOUNT(*)の正確性、MATERIALIZED/DEFAULTカラムの整合性、ReplicatedMergeTreeフラグの復元、削除済みの行に対するread_in_order、複数回の delete/merge サイクル、_row_existsカラムの隠蔽、さまざまな predicate、ALTER DELETEに対する RBAC の適用。#101792 (Nikita Fomichev). - タグ付きリリース向けに、ubuntu および alpine バリアントの Distroless Dockerイメージが公開されるようになりました。#101941 (Rahul Nair).
- スタックトレースには、ビルドディレクトリを含む煩雑なパス (例:
./ci/tmp/fast_build/./src/Common/Exception.cpp) ではなく、クリーンな相対パス (例:src/Common/Exception.cpp) が表示されるようになりました。 #102000 (Raúl Marín). - リポジトリにコミットされた 5 MB 超のファイルを拒否する CI の Style check を追加し、既存の正規のテストデータについてはホワイトリストで許可するようにしました。未使用の 14 MB の
zookeeper_log.parquetを削除しました。 #102080 (Raúl Marín) 。 - コンパイル時間を短縮するため、ヘッダファイルから未使用の
#includeディレクティブを約400件削除しました。#102585 (Raúl Marín) 。 wasmtimev43.0.1 を使用するようにしました。 #102603 (Konstantin Bogdanov).openssl3.5.6 を使用するようにしました。 #102606 (Konstantin Bogdanov).xz5.8.3 を使用。 #102607 (Konstantin Bogdanov).- distroless Docker image のベースを Debian 12 (glibc 2.36、OpenSSL 3.0) から Debian 13 (glibc 2.41、OpenSSL 3.5) へアップグレードし、CVE の影響範囲を縮小して、到達可能な脆弱性をゼロにしました。#101678 (Rahul Nair) 。
後方互換性を持たない変更
- アップグレード後にダウングレードすると、データが失われる可能性があります。データ型のシリアル化バージョンが、ネストされたデータ型にも伝播されるようになりました。たとえば、これまで String のシリアル化バージョン
with_size_streamは、最上位レベルの String カラムと Tuple の要素にのみ適用されていました。現在は、Array/Map/Variant/JSON/etc. など、任意のネストされた型の中にあるあらゆる String 型に適用されます。この動作は、現在デフォルトで有効になっている MergeTree settingpropagate_types_serialization_versions_to_nested_typesによって制御されます。この変更により、新しく作成されたデータパーツは古いバージョンでは読み取れなくなりますが、古いパーツは新しいバージョンでも問題なく読み取れます。アップグレードは安全ですが、ダウングレードは安全ではありません。26.3 へのアップグレード後にロールバックが必要になった場合、ネストされた型を持つカラムに 26.3 が書き込んだデータは読み取れなくなります! 詳細については #101429 を参照してください。#94859 (Pavel Kruglov). hypothesisスキップ索引タイプを削除しました。これは実用性が低く、実験的でわかりにくい機能でした。INDEX ... TYPE hypothesisを指定してテーブルを作成すると、今後はエラーになります。#96874 (Alexey Milovidov).- 実験的な
detectProgrammingLanguage関数を削除。#99567 (Alexey Milovidov) 。 - SQL 標準に合わせて
NOT演算子の優先順位を修正しました。これにより、NOTはIS NULL、BETWEEN、LIKE、および算術演算子よりも低い優先順位で結合されるようになりました。たとえば、NOT (x) IS NULLは、従来の(NOT x) IS NULLではなく、NOT (x IS NULL)として解析されるようになりました。これにより、従来の (標準に準拠していない) 動作に依存していたクエリの結果が変わる可能性があります。#97680 (Alexey Milovidov). - 通常のプロジェクションのメタデータを修正し、複数カラムのソートキーを持つプロジェクションが正しく認識されるようにしました。#90429 を踏まえた修正です。#91352 (Amos Bird).
- replace_long_file_name_to_hash 設定がスキップ索引ファイルで考慮されておらず、“File name too long” エラーが発生したり、長い名前の索引で索引の読み取りができなくなったりする問題を修正しました。スキップ索引のファイル名は、カラムファイルと同様に、max_file_name_length を超える場合にハッシュ化されるようになりました。この変更には後方互換性があります (新しいサーバーは古いパーツを読み取れます) が、ダウングレード時 (またはローリングアップグレード中の古いサーバー) には、長い名前の索引が無視される可能性があります。#97128 (Raúl Marín).
- デフォルトで非同期 INSERT が有効になりました。ClickHouse では今後、すべての小さな insert がデフォルトでバッチ処理されます。この設定は compatibility で指定します。
compatibility=<version less than 26.2>を設定した場合、デフォルト値は以前と同じfalseになります。非同期 INSERT は、users profiles の設定、session、query、または MergeTree table について、複数のレベルでオン/オフを切り替えられます。 #97590 (Sema Checherinda). mysql_datatypes_support_levelのデフォルト値が空からdecimal,datetime64,date2Date32に変更され、MySQL のDATEはDate32、DECIMAL/NUMERICはDecimal、精度付きのDATETIME/TIMESTAMPはDateTime64に、デフォルトで適切にマッピングされるようになりました。従来、MySQL のDATEカラムはDateにマッピングされていましたが、Dateは 1970-01-01 より前の日付を表現できないため、データ破損を引き起こしていました。#97716 (Alexey Milovidov).mergeTreeAnalyzeIndexes{,UUID}では、低速なregexpの代わりに、part 名の配列を受け付けるようになりました (実験的機能) 。#98474 (Azat Khuzhin) 。- 実行可能 UDF のデフォルトの
stderr_reactionをthrowからlog_lastに変更しました。stderr に警告を出力する UDF は、終了コードが 0 の場合は失敗しなくなりました。終了コードに関する例外には、stderr の内容が含まれるようになりました。#99232 (Xu Jia) 。
新機能
- MergeTree の Map カラム向けに、バケット化シリアライゼーションが追加されました (
map_serialization_version = 'with_buckets') 。キーはハッシュベースのバケットに分割されるため、単一のキー (m['key']) を読み取る際には、カラム全体ではなく 1 つのバケットだけを読めばよくなり、Map のサイズに応じて単一キーのルックアップが 2〜49 倍高速化されます。バケット数とバケット化の戦略は、新しい MergeTree 設定map_serialization_version、max_buckets_in_map、map_buckets_strategy、map_buckets_coefficient、map_buckets_min_avg_sizeで制御できます。#99200 (Pavel Kruglov) 。 - マテリアライズド CTE をサポートしました。クエリ実行中に CTE を一度だけ評価し、その結果を一時テーブルに格納できるようになりました。#53449 をクローズしました。 #94849 (Dmitry Novik).
- 互換性のため、
NOWなどの一部の SQL 標準関数を括弧なしで使えるようにしました。#52102 をクローズしました。#95949 (Aly Kafoury). - 自然順ソートキー関数は
naturalSortKey(s)として使えるようになりました。#90322 (Nazarii Piontko) 。 - JSONExtract関数で、ネイティブのJSON/Object入力を使用できるようになりました。#88370 をクローズ。#96711 (Fisnik Kastrati) 。
- クエリパラメータの型が
Nullableで、かつ指定されていない場合は、その値をNULLとみなします。 #93869 (Vikash Kumar). Replicateddatabase で補助的な ZooKeeper をサポート。 #95590 (RinChanNOW).- Map と同様に、JSON type でパスの存在を確認する
has関数をサポートしました。#96927 (DQ). mergeTreeTextIndex(database, table, index)テーブル関数が追加され、テキスト索引からデータを直接読み取れるようになりました。この関数は、内部情報の確認や、テキスト索引データに対する集計の実行に使用できます。#97003 (Anton Popov).table_readonlyMergeTree setting を追加し、テーブルを読み取り専用としてマークすることで、insert や変更を防止できるようにしました。#97652 (Alexey Milovidov) 。- 新しい設定
use_partition_pruningと、そのエイリアスであるuse_partition_keyを追加しました。これをfalseに設定すると、パーティションキーに基づくパーティションプルーニングが無効になります。 #97888 (Nihal Z. Miaji). - Icebergテーブルで
ALTER TABLE ... EXECUTE expire_snapshots('<timestamp>')を実装しました。#97904 (murphy-4o) 。#99130 <protocols>内の各type=httpエントリで、別個の<http_handlers_*>設定セクションを参照するカスタム<handlers>キーを指定できるようになり、ポートごとに異なる HTTP ルーティングルールを設定できるようになりました。#98414 (Amos Bird) 。EXPLAINにpretty=1オプションを追加し、ツリー形式のインデント付き出力を可能にするとともに、compact=1でExpressionステップを折りたたんで、クエリプランをより読みやすくしました。#98500 (Kirill Kopnev) 。restore_access_entities_with_current_grantsサーバー設定を追加しました。有効にすると、バックアップから復元されたユーザー/ロールの権限は、復元を実行するユーザーが付与できる範囲に制限されるため、ACCESS_DENIEDで失敗せずに済みます (GRANT CURRENT GRANTSと同じセマンティクス) 。#98795 (pufit).- Unicodeのケースフォールディングおよび発音区別符号の削除のための
caseFoldUTF8関数とremoveDiacriticsUTF8関数を追加しました。#98973 (George Larionov) 。 - NFKC 正規化とケースフォールディングを組み合わせた NFKC_Casefold Unicode 正規化用の文字列関数
normalizeUTF8NFKCCasefoldを追加しました。#99276 (George Larionov) 。 - 全文検索用索引および
tokens関数向けに、asciiCJKトークナイザーを追加しました。これは Unicode の単語境界規則に基づいてテキストを分割します。ASCII の単語は接続文字 (アンダースコア、コロン、ドット、シングルクォート) を含めて構成され、非 ASCII の Unicode 文字はそれぞれ 1 文字のトークンになります。#99357 (Amos Bird) 。 skip_unavailable_shardsが有効な場合に、通知なしでスキップできる利用不能な分片の数を制限するため、max_skip_unavailable_shards_numおよびmax_skip_unavailable_shards_ratio設定が追加されました。利用不能な分片の数または比率が設定したしきい値を超えた場合、不完全な結果をそのまま返す代わりに例外が発生します。#99369 (Alexey Milovidov).- ユーザーはサブクエリ式で
SOMEキーワードを使えるようになりました。動作はANYと同一です。#99842 (Artem Kytkin). - テキスト出力フォーマットで
FixedString値の末尾にあるヌルバイトを取り除くためのoutput_format_trim_fixed_string設定を追加しました。#97558 (NeedmeFordev). - FROM句で、括弧で囲まれたテーブルJOIN式 (例:
SELECT * FROM (t1 CROSS JOIN t2)) をサポートしました。#97650 (Alexey Milovidov) 。 - 関数
toDaysInMonthを実装しました。指定した日付が属する月の日数を返します。#99227 (Vitaly Baranov) 。
実験的機能
- WebAssembly ベースのユーザー定義関数 (UDFs) の実験的サポートを追加し、カスタム関数ロジックを WebAssembly で実装して ClickHouse 内で実行できるようになりました。Wasmtime バックエンドサポートへの貢献に対し、Alexey Smirnov に特別な謝意を表します。#88747 (Vladimir Cherkasov)。あわせて、WASM UDF サポートも段階的に改善されました。#99373 (Vasily Chekalkin)。
polyglotライブラリを使用した外部 SQL ダイアレクト のサポートを追加しました。#99496 (Alexey Milovidov)。ALP浮動小数点圧縮コーデックを追加しました (圧縮できない double に対する ALP_rd fallback はありません) 。#91362 (Nazarii Piontko)。JSONカラム向けの実験的な lazy 型ヒントを追加しました。allow_experimental_json_lazy_type_hintsで有効にすると、型ヒントの追加または変更のみを行うALTER TABLE ... MODIFY COLUMN json JSON(path TypeName)は、過去のデータを書き換えることなく、メタデータのみの操作として即座に完了します。型ヒントは古いパーツにはクエリ時に適用され、INSERT 時およびバックグラウンドマージ中に実体化されます。#97412 (tanner-bruce)。- YTsaurus テーブルエンジンからの並列読み取りを有効化しました。#97343 (MikhailBurdukov)。
パフォーマンス改善
- データレイクのパフォーマンスを改善しました。以前のバージョンでは、オブジェクトストレージからの読み取り時に、処理スレッド数に応じてパイプラインのサイズが調整されていませんでした。これにより、マルチコアマシンで大幅な性能向上 (約40倍) が得られます。#99548 (Alexey Milovidov).
- 現在、
enable_parallel_replicasとautomatic_parallel_replicas_modeの関係は次のとおりです。クエリで並列レプリカを使用できるのは、enable_parallel_replicas > 0の場合に限られます。さらに、automatic_parallel_replicas_mode=1の場合、並列レプリカを使用するかどうかは、あらかじめ収集された統計情報に基づいてプランニング時に決定されます。automatic_parallel_replicas_mode=0の場合は、統計情報に関係なく、サポートされているすべてのクエリで並列レプリカが使用されます。特筆すべき例外として、並列レプリカを使う分散 insert-select があります。この場合、クエリは常にautomatic_parallel_replicas_mode=0であるかのように実行されます。#97517 (Nikita Taranov). - 述語に任意の比較演算子 (
=,<,>,!=) が含まれ、かつパーティションキーが決定論的な関数チェーンで包まれている場合に、パーティションプルーニングを行えるようにしました (たとえば、PARTITION BY xでcityHash64(x) % 5 > 2、toYYYYMM(x) < 2026、toYYYYMM(x) = 2026、toYYYYMM(x) != 2026のような述語はいずれも、プルーニングにパーティションキーを使用します) 。#28800 をクローズしました。#98432 (Nihal Z. Miaji) 。 CASTの変換先の型がNullableで、かつ変換が単調である場合に、read-in-order 最適化と主キーのプルーニングを利用できるようになりました。たとえば、PRIMARY KEY xの場合、ClickHouse はORDER BY x::Nullable(UInt64)に対して read-in-order 最適化を使用でき、WHERE x::Nullable(UInt64) > 500000のような条件に対して主キーのプルーニングを適用できます。#98482 (Nihal Z. Miaji).- 整数型カラムが浮動小数点リテラルと比較される場合に、索引のプルーニングとフィルタのプッシュダウンが可能になりました。たとえば、
WHERE x < 10.5のような条件では主キーを使ったプルーニングが可能になり、prime < 1e9やnumber < 1e5のようなフィルタも、無制限に実行される代わりに、primes()およびnumbers()テーブル関数にプッシュダウンされるようになりました。#85167 をクローズしました。 #98516 (Nihal Z. Miaji). - メタデータの読み取りだけのためにファイルを再ダウンロードする必要をなくし、読み取り性能を向上させるため、Parquet メタデータ用の新しい SLRU cache が追加されました。#98140 (Grant Holly).
- オプティマイザの統計情報に基づき、ANTI、SEMI、FULL JOIN の左右を入れ替えられるようになりました。#97498 (Hechem Selmi) 。
- 大きな Polygon に対する
pointInPolygonの granule スキップを最適化し、主キーのプルーニング中にpointInPolygonの索引解析で例外が発生する問題を修正しました。#91633 (Nihal Z. Miaji) 。 levenshteinDistance関数の性能を改善。 #94543 (Joanna Hulboj).- 要素ごとの関数呼び出しを避けることで、バッチの Decimal 型変換を最適化しました。 #95923 (Konstantin Bogdanov).
- Icebergテーブルで、
iceberg_metadata_async_prefetch_period_msテーブル設定による非同期のメタデータプリフェッチがサポートされ、メタデータキャッシュを定期的に事前拡充できるようになりました。さらに、iceberg_metadata_staleness_msクエリ設定により、指定した古さのしきい値より新しい場合は、SELECTクエリでキャッシュ済みのメタデータを使用できるため、リクエスト処理中に Iceberg カタログを呼び出す必要がなくなります。#96191 (Arsen Muk). S3Queueの ordered mode では、プレフィックス全体の履歴を再度一覧取得するのを避けるために S3 ListObjectsV2 StartAfter を使用し、ListObjects の呼び出し回数を削減します。 #96370 (Venkata Vineel ).- insert の deduplication におけるメモリ使用量を削減。通常、deduplication には元の block が必要ですが、同期 insert ではこれを省略できるため、メモリを大幅に節約できます。 #96661 (Sema Checherinda).
- ハードコードされた 64 ではなく、cache line size にはアーキテクチャ固有の値を使用するようにしました。#97357 (Nikita Taranov).
- テキスト索引のDictionaryからの読み取りをわずかに最適化し、テキスト索引解析全体のパフォーマンスを改善しました。 #97519 (Anton Popov).
- ARM での 16 バイトブロックの
LZ4解凍を高速化しました。#97774 (Raúl Marín) 。 - SIMD と状態保持型トークナイザーをサポートするため、従来のイテレータースタイルの API を新しい高性能なインターフェイスに置き換え、トークン化処理をリファクタリングしました。#90268 の一部です。#97871 (Amos Bird)。
- 索引付きカラムと非索引カラムの両方を含む複合条件を持つクエリにおける、テキスト索引の索引解析のパフォーマンスを改善しました。従来、このようなケースでは、索引解析中の早期終了最適化が誤って無効になっていました。#98096 (Anton Popov).
- 非常に長い Array や map を生成する定数式を含むクエリのパフォーマンスを改善しました。 #98287 (Alexey Milovidov).
- 整数定数との比較時における
DateTime64主キーのキー条件解析を修正し、これまでグラニュールのプルーニングが行われなかった問題を解消しました。#98410 (Amos Bird). - 設定
optimize_syntax_fuse_functionsはデフォルトで有効になっています。#98424 (Alexey Milovidov) 。 - 集約状態を介した行ごとのストアフォワーディングではなくローカルアキュムレータを使用するように
avgWeightedaggregate function を最適化し、Nullable 入力で最大 27% の性能向上を実現しました。 #98793 (Antonio Andelic) 。 - 特定の状況における並列ウィンドウ関数や、大きな配列を扱う
arrayFoldワークロードで、性能を向上させ、メモリ使用量を削減します。これにより、影響を受けるクエリにおけるページフォールトの負荷が軽減され、厳しいメモリ制限下での安定性も向上する場合があります。#98892 (filimonov) 。 - ソート済みのマージ処理のパフォーマンスを改善しました。#99013 (Artem Zuikov) 。
INTERSECT ALLとEXCEPT ALLを最適化。#99097 (Raufs Dunamalijevs) 。- 逆順読み取りでの
read_in_order_use_virtual_row最適化をサポートしました。#99198 (Vladimir Cherkasov) 。 - 書き込み前に JoinUsedFlags が設定されているかどうかを確認することで、
RIGHTおよびFULLJOIN における cache の競合を低減しました。 #99274 (Hechem Selmi). - 浮動小数点演算を純粋な整数演算に置き換えることで
PrefetchingHelper::calcPrefetchLookAheadを最適化し、命令 cache のレイアウトを改善するとともに、集計ループ中のサイクルオーバーヘッドを削減しました。#99327 (Riyane El Qoqui). - ノードの子の保存に使用する
absl::flat_hash_setをCompactChildrenSetに置き換えることで、Keeper のメモリ消費量を削減しました。新しいコンテナーは、ヒープ割り当てなしで 0~1 個の子をインラインに格納でき、Keeper ノードの大半をこれでカバーできます。これにより、KeeperMemNodeのサイズは 144 バイトから 128 バイトに削減されます。 #99860 (Antonio Andelic). - 集約プロジェクションがビューでも正しくサポートされるようになりました。#32753 を修正しました。#88798 (Amos Bird) 。
join_use_nullsによる OUTER から INNER への join 変換の最適化をサポートしました。#90978 をクローズしました。#95968 (Vladimir Cherkasov) 。- 読み取り前にサイズを正しく計算することで、サブカラムの読み取りを改善しました。これにより、メモリ使用量が削減され、サブカラムの読み取りが高速化されます。#96251 (Pavel Kruglov).
- 短命な割り当て、つまりクエリやリクエスト向けの割り当てと、cache 向けのより長寿命な割り当てが混在した際のメモリ断片化を防ぐため、mark cache、非圧縮 cache、ページキャッシュがそれぞれ別個の jemalloc アリーナを使用するようにしました。#96812 (Seva Potapov). #98812. #99021
DELETE TTLルールが設定されたテーブルで、Vertical merge アルゴリズムを使用できるようになりました。#97332 (murphy-4o) 。- 分散索引解析時にデータスキッピングインデックスを適用します。 #97767 (Azat Khuzhin).
- セカンダリ索引のマークは、
prewarm_mark_cache設定が有効な場合にプリウォームされるようになりました (data part のフェッチ時およびテーブル起動時に、index mark cache に読み込まれます) 。#97772 (Anton Popov). - アクセス制御におけるロックを削減しました。 #97894 (Nikita Taranov).
- apply_row_policy_after_final または apply_prewhere_after_final が有効な場合、行ポリシーおよび PREWHERE の複合 AND 条件が分解され、主キーの索引解析のためにソートキーの各要素を抽出できるようになりました。以前は、遅延されたフィルタにソートキーに関する条件とソートキーに関係しない条件が混在している場合 (たとえば x > 1 AND y != ‘foo’) 、式全体が索引解析の対象外となっていました。現在は、ネストした AND 式であっても、ソートキーの条件 (x > 1 など) を抽出して Granule pruning に利用できるようになりました。#98513 (Yarik Briukhovetskyi).
- ロックを取得せずにタスクのリソースを解放できるようにし、MergeTreeBackgroundExecutor におけるロック競合を軽減しました。#93620 をクローズ。#98604 (Dmitry Novik).
- ArrowStream リーダーが先頭のバイト列を非常に大きなメタデータ長と誤認していたことにより、Arrow 以外のデータ (例: フォーマットを明示せずに
urlまたはfileから読み込む JSON) の読み込み時に、フォーマット自動検出で過剰なメモリ (約 514 MiB) を消費していた問題を修正しました。#98893 (Konstantin Bogdanov) 。
改善
- 同じカラム内に異なるGeo型が含まれているGeoParquetファイルを解析できるようになりました。 #97851 (Mark Needham).
- ワイルドカードの意味を考慮しつつ LIKE パターンをトークン化する
tokensForLikePatternSQL 関数を導入しました。%と_はワイルドカードとして扱い、エスケープされたワイルドカード (\%、\_) はリテラルとして扱い、エスケープされていないワイルドカードに隣接する token は破棄します。#97872 (Amos Bird). - S3 テーブルエンジンに
{_schema_hash}プレースホルダーを追加し、table のカラム定義のハッシュを S3 の path に挿入できるようにしました。 #98265 (Miсhael Stetsyuk). SymbolIndex、addressToSymbol、system.symbols、およびbuildIdは、Mach-O のシンボルテーブルをパースすることで、macOS でも利用できるようになりました。#99014 (Alexey Milovidov) 。system.stack_traceテーブルが macOS でも利用可能になり、サーバーのすべてのスレッドのスタックトレースを調査できるようになりました。#98982 (Alexey Milovidov).- LDAP クライアントがリファラルをたどるかどうかを制御する、サーバーごとの LDAP 設定オプション
<follow_referrals>(デフォルトはfalse) を追加しました。リファラル追跡を無効にすると、Active Directory のドメインルートのベース DN から検索する際に発生するタイムアウトやハングを回避できます。リファラル関連のログメッセージはwarnからtraceに変更されました。#96765 (paf91). - クエリ実行時に使用されたデータスキッピングインデックスを、query_log テーブルの
skip_indicesという新しいカラムで追跡するようになりました。#78676 を修正しました。元の著者は @pheepa です。#87862 (Grant Holly). - ACCESS_DENIED のヒントでは、ユーザーに必要なすべてのカラムを表示する権限がある場合を除き、カラム名は表示されなくなりました。データベース名とテーブル名は引き続きヒントに表示されます。 #91067 (filimonov).
- マージ負荷が高い場合のクリーンアップ遅延を防ぐため、MergeTree に専用のクリーンアップスレッドを追加しました。これにより #86181 が解決されます。#91574 (Amos Bird) 。
- いずれかのホストのIPではなく、ローカルサーバーのホスト名に対応するIPが変更された場合にクラスター設定を再読み込みするようにしました。これにより、#81215、#70156、および#65268を修正します。#93726 (Zhigao Hong) 。
- optimize_aggregators_of_group_by_keys により、GROUPING SETS クエリ内の集約関数を正しく最適化できるようになりました。#93935 (Xiaozhe Yu) 。
- Keeper-bench: メトリクスでエラーを報告し、—input-request-log モード用の JSON メトリクスファイルを生成します。#95748 (Mohammad Lareb Zafar).
- CREATE USER に新しい ROLE 句を追加しました。#97074 (Vitaly Baranov) 。
- Replicated database で作成されたクラスターに対して、internal_replication 設定を行えるようになりました。#97228 (Pervakov Grigorii) 。
- 新しい設定
allow_nullable_tuple_in_extracted_subcolumnsは、Tuple、Variant、Dynamic、JSONから抽出されたTuple(...)サブカラムをNullable(Tuple(...))(欠落した行ではNULL) として返すか、Tuple(...)(欠落した行ではデフォルトのタプル値) として返すかを制御します。デフォルトでは無効で、この設定を変更するにはサーバーの再起動が必要です。 #97299 (Nihal Z. Miaji). - 遅延フィルターに関する情報を、EXPLAINクエリの出力に別項目として追加 (Row Policies/PREWHERE とともに FINAL を使用する場合) 。関連: #91065。#97374 (Yarik Briukhovetskyi) 。
type_json_allow_duplicated_key_with_literal_and_nested_objectをデフォルトで有効にしました。これにより、元の JSON データ{"a" : 42, "a.b" : 42}を ClickHouse が{"a" : 42, "a" : {"b" : 42}}のような JSON に整形する場合でも、その JSON のパース時に重複キーに関するエラーを回避できます。#97423 (Pavel Kruglov).- Keeper の改善:
find_super_nodesは、Keeper でノード数が想定外に増加した際のデバッグに非常に役立つコマンドです。残念ながら、スーパーノードが複数ある場合、最初に見つかったスーパーノードの子ノードをたどるところでコマンドが無限に停止してしまうため、2 つ目以降を見つけるのはほぼ不可能でした。この PR では、スーパーノードの子ノードをたどれないようにしました。#97819 (pufit). clickhouse-keeper-clientの補完機能のサポートを開始。 #97828 (Konstantin Bogdanov).- クラッシュ時に、非同期ログバッファをフラッシュするようにしました。 #97836 (Azat Khuzhin).
impersonate機能がデフォルトで有効になりました (EXECUTE AS target_userを参照) 。#97870 (Vitaly Baranov) 。- SQLite table engine におけるクエリのキャンセルについて、KILL QUERY および clickhouse-client でのクエリキャンセル (Ctrl+C) を改善しました。#97944 (Roman Vasin).
- サーバー設定
jemalloc_profiler_sampling_rateを追加し、jemalloc のlg_prof_sampleを制御できるようにするとともに、非同期メトリクスjemalloc.prof.lg_sampleとして公開しました。#97945 (Antonio Andelic). - 同時実行の有界キュー実装で、重みのサポートを追加しました。#97962 (Daniil Ivanik).
- PostgreSQL の Dictionary ソースで、許可されるキーに
sslmodeを追加しました。これまでsslmodeは PostgreSQLDictionarySource.cpp のdictionary_allowed_keys許可リストに含まれていなかったため、PostgreSQL の Dictionary 接続で SSL モードを設定できませんでした。その結果、SSL を必須とする PostgreSQL サーバー (たとえば、デフォルトで SSL を強制する AWS RDS) に Dictionary から接続できず、接続時の TLS ネゴシエーションが失敗し、サーバーは暗号化されていないフォールバック接続を拒否していました。#98014 (mcalfin). - 紛らわしい一般的なメッセージではなく、存在しないファイルパスを
clickhouseまたはclickhouse-localに渡したときに、明確な「そのようなファイルはありません」エラーを表示するようにしました。#98048 (Raúl Marín). - テキスト索引を
Nullable([Fixed]String)およびArray(Nullable([Fixed]String))カラムに対して構築できるようになりました。#98118 (Jimmy Aguilar Mena). - Dictionary ソースの依存先である named collections が削除されないようにしました。#98127 (Pablo Marcos) 。
- totals を伴うクエリで
grace_hashjoin アルゴリズムを有効にしました。#98144 (János Benjamin Antal) 。 - 通常の shared merge tree における DROP DATABASE で、バックグラウンドマージを早い段階でキャンセルするようにしました。 #98161 (Shaohua Wang).
- MongoDB と MySQL のクエリのキャンセルが、clickhouse-client での KILL QUERY とクエリのキャンセル (Ctrl+C) によって改善されました。#98187 (Roman Vasin) 。
- NetlinkMetricsProvider を削除し、スレッドごとの taskstats メトリクス収集には procfs のみを使用するようにしました。Netlink ベースの収集はコンテナー化環境では問題があり、競合時のテールレイテンシも悪化します。#98229 (Amos Bird).
- マニフェストファイルのキャッシュに関する問題を修正するため、Iceberg マニフェストファイルの処理をリファクタリングしました。 #98231 (Daniil Ivanik) 。
- これにより、テーブルのソートキーが
toDate(time)のような式である場合も考慮されるようになり、そのような式がフィルタの一部であれば、評価を遅延させないように判断できるようになりました。 #98237 (Yarik Briukhovetskyi). - ZooKeeper の ephemeral lock znode に割り当てられた sequential 番号の最大値を示す、新しい
MaxAllocatedEphemeralLockSequentialNumberメトリクスを追加しました。#98243 (Miсhael Stetsyuk). - ClickStackをバージョン 2.20.0 に更新。 #98252 (Aaron Knudtson).
- マルチリクエスト内の各サブリクエストを個別にカウントする新しいプロファイルイベント
KeeperRequestTotalWithSubrequestsが追加され、実際の Keeper ワークロードの可視性が向上しました。既存のKeeperRequestTotalイベントは、引き続き各マルチリクエストを1件のリクエストとしてカウントします。#98348 (Antonio Andelic) 。 SYSTEM RELOAD DICTIONARIESは、ほかのディクショナリをソースとするディクショナリが、再読み込み後に最新のデータを参照できるよう、ディクショナリをトポロジカル順序で再読み込みするようになりました。 #98356 (Alexey Milovidov) 。- MergeTree setting の変更後に、統計 cache を再起動するようにしました。#98520 (Han Fei) 。
- 接続可能な”alive”レプリカのみが分散索引解析に参加します。 #98521 (Azat Khuzhin) 。
- SQL で定義されたユーザーに対して、config で定義された設定プロファイル (
defaultプロファイルを除く) の使用を禁止する設定access_control_improvements.disallow_config_defined_profiles_for_sql_defined_usersを追加しました (デフォルトでは無効) 。 #98662 (Alexander Tokmakov). - 自動並列レプリカのヒューリスティックで使用するノード数の上限を、
max_parallel_replicas設定だけでなく、クラスター内の実際のノード数にも合わせるようにしました。 #98668 (Nikita Taranov). - 分散索引解析向けに、ヘッジリクエストと非同期読み取りを実装。 #98724 (Azat Khuzhin).
- バイナリの
AggregateFunction状態のデシリアライゼーションでは、入力全体を最後まで消費することが必要になりました。余分な不要バイトが末尾に存在する場合、ClickHouse は不正な状態データを受け入れるのではなく、例外をスローするようになりました。#98786 (Nihal Z. Miaji). - TRUNCATE DATABASE がクエリのキャンセルに対応するようになりました。#98828 (Shaohua Wang) 。
keeper-benchに、リクエストのパイプライン化、ウォームアップ期間、操作ごとの統計、再現性のあるシード、より適切なエラー処理を追加して改善しました。#98906 (Antonio Andelic).- 分散索引解析でのSAMPLE句をサポート。 #98931 (Azat Khuzhin).
- クエリが空の結果を返した場合やエラーが発生した場合でも、ダッシュボードにチャートのタイトルを表示するようにしました。 #98975 (Yash ).
- アナライザのエラーメッセージで、テーブルのすべてのカラムを出力しないようになりました (これにより 150KB 超の例外が発生する可能性がありました) 。カラム一覧は現在 10 エントリまでに制限されています。#99002 (Yash ).
- JOIN を含むサブクエリからカラム統計を適切に返すようにし、親クエリがそれを JOIN の並べ替えに利用できるようにしました。 #99096 (Alexander Gololobov).
- 終了処理の開始時に、送信スレッドの終了を待たず、ZooKeeper セッションを即座に期限切れとしてマークするようにしました。これにより、ほかのスレッドは遅滞なく新しいセッションを確立できます。 #99102 (Raúl Marín).
- LLVM-libc の数学関数の利用範囲を拡大しました:
exp,exp2,expm1,fabs,fabsl,floor,fmodl,log,log2,logf,pow,scalbn,scalbnl,copysignl,nan,nanf,nanl、およびexplogxfの共有定数。 #99118 (Konstantin Bogdanov). system.jemalloc_profile_textの collapsed フォーマットにおけるメモリ使用量を削減し、出力が重複する可能性がある問題を修正しました。 #99121 (Antonio Andelic).system.aggregated_zookeeper_logにis_subrequestカラムを追加し、スタンドアロンのリクエストと Multi/MultiRead リクエスト内のサブリクエストを区別できるようにしました。これまでは、サブリクエストはスタンドアロンのリクエストと同じバケットに集計されており、各サブ操作が multi-request 全体の所要時間で記録されていたため、平均レイテンシが実態を反映しないものになっていました。現在、サブリクエストのレイテンシは 0 になります。#99169 (Miсhael Stetsyuk).- カラムの型を指定しなくても
ALTER TABLE MODIFY COLUMN x TTL ...コマンドを実行できるようになりました。#99208 (Nikolay Degterinsky). - すでに切断されたセッションに対する古い Keeper リクエストをスキップし、不要な Raft のラウンドトリップを回避します。追跡する完了済みセッション数の上限は、協調設定
max_finished_sessions_cache_sizeで定められます。#99246 (Antonio Andelic) 。 IN演算子で、mapValues(map)に基づくテキスト索引をサポート。 #99286 (Anton Popov).- clickhouse keeper-client でシェル風補完をサポート (引用符付き引数、つまり
'foo ba'の補完や、エスケープされた引数、つまりfoo\ baの処理に対応し、空白を含むノードはlsで引用符付きで出力するようにしました) 。 #99312 (Azat Khuzhin). - ロック競合により Keeper の
mntrコマンドがハングするのを防ぐようにしました。#99472 (Antonio Andelic) 。 - mutex のスコープ外でコールバックの呼び出しと読み取りリクエストのディスパッチを行うことで、Keeper ディスパッチャのロック競合を低減し、オブザーバビリティ向けにプロファイル対応のロックガードを追加しました。#99751 (Antonio Andelic).
- Parquetファイルの最後のblockの末尾でパディングが欠けていても許容する。 #99857 (Seva Potapov).
バグ修正 (公式の安定版リリースでユーザーに影響する不具合)
- 完全修飾されていない場合に、Alias table のターゲットが DDL 依存関係として保存される際の扱いを修正しました。これにより、session database ではなく Alias table の database に保存されるようになりました。 #95175 (Enric Calabuig).
- ALIASカラムのサブカラムの読み取り時に発生する誤った結果や例外を修正しました。#95408 (Pavel Kruglov) 。
- 旧アナライザで、JOIN に非標準の識別子エイリアスを使用した場合にカラムが見つからない問題を修正。 #25594、#47288、および #53263 を修正。 #95679 (Zhigao Hong).
- 空の引数が渡された際に、Kusto dialect の関数
bin(),bin_at(),extract(),indexof()で発生するクラッシュを修正しました。#95736 (NeedmeFordev) 。 - clickhouse-client で、local filesystem 上のデータレイクや LocalDisk で使用される可能性がある local_object_storage を、user_files_path 以外の場所にマウントすることを禁止しました。 #96201 (Daniil Ivanik).
DeltaLakeテーブルエンジンで、snapshot version の変更時に発生する論理的なレースコンディションを修正し、冗長で負荷の高い snapshot の再読み込みを削除しました。#96226 (Kseniia Sumarokova) 。- Detach と Attach の間に複数回のリネームが連鎖的に行われた場合に、MergeTree でパートを Attach する際に発生する論理エラーを修正しました。 #96351 (Alexey Milovidov).
- 同一のリクエストで
compatibilityとともに送信された明示的な設定が、その値が server のデフォルト値と一致している場合に、黙って無視されることがあった不具合を修正しました。#97078 (Raufs Dunamalijevs). - 並列パースを伴う
INSERTで無効なデータに遭遇した際、実際のパースエラー (正しい行番号付き) ではなくNETWORK_ERRORを報告してしまうクライアントの問題を修正しました。 #97339 (Alexey Milovidov). Nullable(Tuple)の導入後、sumCount集約関数が古いシリアライズ済み状態を読み取れなくなっていた問題を修正しました。#97370 をクローズします。#97502 (Nihal Z. Miaji).Nothing型の要素 (例:NULLのタプル要素との比較) を含むタプル比較をGROUPING SETSおよびORDER BYと併用した際に発生する例外を修正しました。 #97509 (Alexey Milovidov).- 複数の圧縮コーデック使用時に Compact MergeTree パーツで
uncompressed_hashが非決定論的に計算される問題を修正しました。これにより、重複排除が誤動作する可能性がありました。 #97522 (Alexey Milovidov). - shared data 内で JSON と buckets を使用した INSERT SELECT の際に stream が欠落する論理エラーを修正しました。#97331 をクローズしました。 #97523 (Pavel Kruglov).
- SummingMergeTree および CoalescingMergeTree のマージ時に、
MEMORY_LIMIT_EXCEEDED例外が誤ってCORRUPTED_DATAとして報告される不具合を修正しました。#97537 (János Benjamin Antal) 。 url()のようなテーブル関数を含む相関サブクエリで発生する “Context has expired” 例外を修正しました。#97544 (Alexey Milovidov).- 集約プロジェクション、Date型、およびカラム名の保持に関する
optimize_syntax_fuse_functionsの例外と誤動作を修正しました。#97545 (Alexey Milovidov). - regexp が一致しない場合に誤った結果を返していた、
replaceRegexpOneからextractへの誤ったクエリの書き換えを削除しました。あわせて、replaceRegexpOneをGROUP BY ... WITH CUBEおよびgroup_by_use_nulls=1と併用した場合に発生する例外も修正しました。#97546 (Alexey Milovidov). - クエリが強制終了された際に、
database_atomic_wait_for_drop_and_detach_synchronouslyを指定したDROP DATABASEが無期限にハングする問題を修正しました。#97586 (Alexey Milovidov). KILL QUERYで、WITH FILLの生成処理、dictGetによる Dictionary の読み込み、またはReplicatedMergeTreeでmutations_sync=1を指定したALTER DELETEで処理が止まったクエリを終了できない問題を修正しました。#97589 (Alexey Milovidov).loopテーブル関数はinner_storage->read()を直接呼び出していたため、行ポリシー、カラムレベルの権限、その他のセキュリティチェックが適用されるインタープリタ層をバイパスしていました。その結果、行ポリシーで制限されているユーザーでも、直接 SELECT を実行すると 0 行しか返らない場合であっても、loop(table)経由ですべての行を読み取ることができていました。#97682 (pufit).toDate()関数の使用時に、epoch以前の DateTime64 に対するパーティションプルーニングが正しく行われない問題を修正しました。#97746 (Yarik Briukhovetskyi) 。- このパッチ適用後は、data part set 内により大きいパーティション ID を持つ別のパーティションが存在する場合、
hasPartitionIdは false を返すようになります。#97748 (Mikhail Artemenko). - JSON の高度な共有データにおいて、空のグラニュールの読み取り時に発生し得るクラッシュを修正しました。#97563 をクローズします。#97778 (Pavel Kruglov).
DROPとINSERTの競合によって、DistributedへのINSERT時に発生するCannot schedule a fileLOGICAL_ERRORを修正しました。#97822 (Azat Khuzhin).tokenbf_v1スキップ索引を使用したmapContainsKey/mapContainsKeyLikeの呼び出し時に発生する ClickHouse server のクラッシュやアサートを修正しました。#97826 (Shankar Iyer) 。concatWithSeparator、format、INサブクエリ、GLOBAL IN、およびランタイムフィルタを使用する JOIN において、複合型 (Variant、Dynamic、Tuple) 内のLowCardinalityが原因で発生するLOGICAL_ERROR例外を修正。 #97831 (Raúl Marín).GROUP BYと組み合わせて、複数の分散テーブルに対するmerge()テーブル関数でARRAY JOINを使用した際に発生するLOGICAL_ERROR例外Chunk info was not set for chunk in MergingAggregatedTransformを修正しました。#97838 (Raúl Marín).- 高い並行性で接続グループのハード上限に達した際に、HTTP 接続プールのデストラクタ内で未捕捉例外が発生し、サーバーがクラッシュ (
std::terminate) する問題を修正しました。接続を接続プールに戻す際に、例外HTTP_CONNECTION_LIMIT_REACHEDが~PooledConnectionから外に漏れ、SIGABRTを引き起こす可能性がありました。 #97850 (Antonio Andelic). grace_hashアルゴリズムを非等値 JOIN で使用し、JOIN 結果のサイズ制約により左側の block を最後まで処理できない場合に、誤った結果が返される不具合を修正しました。 #97866 (János Benjamin Antal).- #96686 で導入された Delta Lake メタデータのスキャンにおけるパフォーマンス上の非効率を修正しました。#97880 (Kseniia Sumarokova).
- ZooKeeperクライアントの sendThread と receiveThread 間のデータ競合を修正しました。#97887 (Pablo Marcos) 。
- distributed insert select で CTE を使用できない不具合を修正しました。https://github.com/ClickHouse/ClickHouse/pull/87789 の続きです。#95837 をクローズしました。#97889 (Yarik Briukhovetskyi).
CachedOnDiskReadBufferFromFile::readBigAtで発生する例外を修正しました。#97325 をクローズしました。#97890 (Kseniia Sumarokova).- カラムの不一致により、
Aliasエンジンでマテリアライズドカラムを使用した際に発生するLOGICAL_ERROR例外を修正しました。#97907 をクローズしました。#97921 (Kai Zhu). - ログストレージに
s3_plainメタデータを使用して Azure Blob Storage を利用する際、再起動後に Keeper のデータが失われる問題を修正しました。#97987 (Antonio Andelic). sign関数で、Int8よりビット幅の大きい整数型に対する JIT の誤コンパイルを修正しました。これにより、-128..127 の範囲外の値で誤った符号を返す可能性がありました。#98012 (Alexey Milovidov).- 列名にドットを含む struct フィールド (例:
STRUCT<`a.foo`: STRING, `b.foo`: STRING>) を持つ Delta Lake テーブルを、カラムマッピング “name” モードで読み取る際に発生していたDUPLICATE_COLUMN例外と、NULL が黙って返される問題を修正しました。 #98013 (Caio Ishizaka Costa). - 論理更新およびセカンダリ索引の後に実行される mutation の不具合を修正しました。 #98044 (Raúl Marín).
- 主キーと非主キーのスキップ索引を混在させた場合に、FINALクエリで誤った結果が返される問題を修正しました。 #98097 (Raúl Marín).
- scalar file() および DESCRIBE TABLE file() に対して、READ ON FILE チェックを適用。 #98115 (Nikolay Degterinsky).
- glob パターンを使ってファイルをクエリした際 (例:
file('dir/**', 'LineAsString')) 、ディレクトリにダングリングシンボリックリンクが含まれていると、未処理のファイルシステム例外 (STD_EXCEPTION) が発生してクラッシュしていた問題を修正しました。現在はダングリングシンボリックリンクを黙ってスキップし、有効なすべてのファイルから結果を返すようになりました。#98143 (Mark Andreev). - フィルタ式で
arrayJoinを使用して outer join を inner join に変換する際に、クエリプランの最適化で発生するセグメンテーションフォルトを修正しました。#98147 (Alexey Milovidov) 。 - メッセージ間で読み取り状態がリセットされないことにより、
ProtobufListフォーマットが Kafka エンジンで動作しない問題を修正しました。 #98151 (Alexey Milovidov). - analyzer_compatibility_join_using_top_level_identifier および ARRAY JOIN に関する論理エラーを修正し、#98164 をクローズしました。#98179 (Vladimir Cherkasov) 。
aggregated_zookeeper_logで、空のままになっていた watch レスポンス用のWatch部分を設定しました。#98202 (Antonio Andelic).- パーティションキーのキーカラムがソートキーに含まれていない場合、パーティションプルーニングによって、FINAL での重複排除時に本来”勝つ”べき行を含むパーティションが誤ってスキップされる可能性がありました。 #98242 (Yarik Briukhovetskyi).
- 定数 Array 引数を指定して
kql_array_sort_asc/kql_array_sort_descを呼び出した際に発生していた論理エラー “Bad cast from type DB::ColumnConst to DB::ColumnArray” を修正しました。#98251 (Alexey Milovidov). extremes = 1が有効な場合にクラッシュを引き起こす可能性があったColumnConst::getExtremesの範囲外アクセスを修正しました。 #98263 (Alexey Milovidov).- 同じ一対のテーブル間で逆方向に実行される 2 つの同時実行
MOVE PARTITION操作で発生する可能性があるデッドロックを修正しました。 #98264 (Alexey Milovidov). - HTTPサーバーは、不正なヘッダーが原因で発生する 400 Bad Request レスポンスに対して、空のボディではなくレスポンスボディにエラーメッセージを返すようになりました。#98268 (Alexey Milovidov).
- 分散索引解析 (実験的機能) およびクエリ条件キャッシュで誤った結果が返される問題を修正しました。#98269 (Azat Khuzhin).
- 65535 の境界をまたぐデータを含むキーカラムに対する
toDate変換で発生していた LOGICAL_ERROR 例外 “Invalid binary search result inMergeTreeSetIndex” を修正しました。#98276 (Alexey Milovidov) 。 query_plan_join_swap_table最適化により、CROSS JOIN で囲まれた RIGHT JOIN がレガシー join step のコードパスで入れ替えられた際に発生するLOGICAL_ERROR例外を修正しました。#98279 (Alexey Milovidov)。- 破損した
quantilesDD集約関数の状態の読み取り時に、セグメンテーション違反、例外、無限ループ、OOMを防ぐため、DDSketchのデシリアライズ時に破損データを検証するようにしました。 #98284 (Alexey Milovidov). - 外側のクエリの相関カラムが
arrayMapなどのラムダ関数内で参照された際に発生する LOGICAL_ERROR “Trying to execute PLACEHOLDER action” を修正しました。 #98285 (Alexey Milovidov). CASE式にmaterialize(NULL)またはその他のNullable(Nothing)型の引数が含まれる場合に、caseWithExpressionで発生していた論理エラー例外を修正しました。#98290 (Alexey Milovidov) 。mergeテーブル関数で_table仮想カラムをフィルタリングする際に発生する bad cast 例外を修正しました。#98291 (Alexey Milovidov) 。blocks/とdeduplication_hashes/の ZooKeeper ディレクトリ間でクリーンアップ順序に不整合があったため、再挿入が誤って重複排除されてしまう散発的な重複排除の不具合を修正しました。 #98293 (Alexey Milovidov).ORDER BY ... WITH FILLをLIMIT BYと併用した場合に発生する例外を修正しました。#98361 (Alexey Milovidov) 。- Parquet/Arrow の
DateカラムをEnumカラムに挿入した際に発生していた、検知しにくいデータ破損を修正しました。これにより、不正な enum 値を保存する代わりに、互換性のない型変換を適切に拒否するようになりました。#98364 (Alexey Milovidov). Arrayカラムを含む Arrow ファイルを、Nestedカラムを持つテーブルに読み込む際に発生する例外を修正しました。#98365 (Alexey Milovidov).- 索引またはプロジェクションがミューテーションの完了前に削除された場合に、
MATERIALIZE INDEXおよびMATERIALIZE PROJECTIONのミューテーションが停止したままになる問題を修正しました。#98369 (Alexey Milovidov). - Tuple 要素名が Nullable の
nullサブカラムと衝突する場合に、Nullable(Tuple(...))の読み取り時に発生する例外を修正しました。#98372 (Alexey Milovidov). Mergeテーブル (Distributedテーブルをラップしたもの) を別のテーブルと結合する際に発生する例外 “Column … query tree node does not have valid source node” を修正しました。#98376 (Alexey Milovidov) 。- 文字列表現ではなく生のバイト列を生成していた、native V3 リーダーでの Parquet
BoolからFixedStringへの誤った変換を修正しました。#98378 (Alexey Milovidov) 。 tryGetColumnDescriptionを修正し、他のカラムのルックアップメソッドとの整合性が取れるよう、親カラムの種類に基づいてサブカラムを絞り込むようにしました。#98391 (Alexey Milovidov).- HTTP Basic認証で、パディングなしのBase64認証情報を受け入れるようにしました。一部のHTTPクライアントは
Authorization: Basicヘッダーの末尾の=パディングを省略するため、これまでは認証に失敗していました。#98392 (Amos Bird). - 誤った min-max 索引の境界値が原因で、
Nullableなパーティションキーカラムを含むパーツのマージ後にパーティションプルーニング結果が誤る問題を修正しました。#98405 (Amos Bird). - パイプラインエグゼキュータでまれに発生する例外を修正しました。この例外は、パイプラインの拡張とクエリのキャンセルが競合した際に、
Received signal 6として現れることがありました (デバッグビルド時のみ) 。#98428 (Alexey Milovidov) 。 count_distinct_optimizationをQUALIFY句とともに使用した際に発生する例外 “Column identifier is already registered” を修正しました。 #98433 (Alexey Milovidov).IN/NOT INでLowCardinalityカラム引数を使用した際に発生する例外 “cannot be inside Nullable type” を修正しました (例:aがLowCardinality(String)の場合のa NOT IN (b)) 。#98443 (Alexey Milovidov).FilterBySetOnTheFly最適化によってMergeJoinTransformとの循環依存が生じた際、PingPongProcessorでデッドロックが発生し、full_sorting_mergeJOIN で “Pipeline stuck” 例外が発生する不具合を修正しました。 #98454 (Alexey Milovidov).- 有効期限 (TTL) によってすべての行が削除されるパーツのマージ時に、定数の
GROUP BYキーを持つ集計プロジェクションで発生するLOGICAL_ERROR例外 “Projection cannot increase the number of rows in a block” を修正しました。#98458 (Alexey Milovidov). CROSS JOINをINNER JOIN USINGと併用した際に発生する logical error 例外を修正しました。#98459 (Alexey Milovidov).- キー引数が
Nullableの場合にdictGetOrDefaultで発生するヌルポインタ逆参照を修正しました。 #98460 (Alexey Milovidov). - 集約プロジェクション使用時に、
materializeによりクエリとプロジェクションでLowCardinality型の違いが生じる場合に発生していたDISTINCTクエリの例外を修正しました。#98462 (Alexey Milovidov) 。 - OUTER JOIN と
join_use_nullsが有効な場合に、arrayJoinをフィルタ式内で使用すると発生する LOGICAL_ERROR 例外を修正しました。#98464 (Alexey Milovidov) 。 optimize_aggregation_in_orderと並列レプリカを併用した際に発生する論理エラー例外 “Replica decided to read in WithOrder mode, not in ReverseOrder” を修正しました。#98467 (Alexey Milovidov) 。addWatchリクエスト後に ClickHouse Keeper が Java ZooKeeper クライアントを切断してしまう問題を修正しました。Java クライアントはaddWatchレスポンスに 4 バイトのErrorResponseボディが含まれることを想定していますが、Keeper は空のボディを返していたため、EOFExceptionとセッション切断が発生していました。これにより、Apache Curator のCuratorCacheや永続ウォッチを使用するあらゆる Java アプリケーションが正常に動作しなくなっていました。#98079 を修正しました。 #98499 (Antonio Andelic).- フォロワーがダウンした際に、
zk_followersおよびzk_synced_followersの Keeper メトリクスが減少しない問題を修正しました。mntrfour-letter-word コマンドに、新たにzk_learnersおよびzk_synced_non_voting_followersメトリクスを追加しました。#54173 を修正。#98504 (Antonio Andelic) 。 - MergeTreeトランザクション利用時に、
TRUNCATE TABLEとOPTIMIZE TABLEが同時実行された際に発生する可能性があったrenameAndCommitEmptyPartsの LOGICAL_ERROR 例外を修正しました。 #98508 (Alexey Milovidov). - Keeper のセキュアな raft ポートが
openSSL設定のcipherListとdhParamsFileを無視し、ユーザー指定の値ではなく常にデフォルト値を使用していた問題を修正しました。#51188 をクローズしました。#98509 (Antonio Andelic). - 「Receiving request for session X took 9963 ms」のような誤解を招く Keeper のログメッセージを修正しました。ここで報告されていた時間は、実際に処理にかかった時間ではなく、ハートビートの合間に
poll()内で idle のまま待機していた時間でした。#79026 を修正しました。#98510 (Antonio Andelic). - read_in_order_use_virtual_row と単調関数で予期しない結果を返す問題を修正し、#97837 をクローズしました。#98514 (Vladimir Cherkasov).
- MergeTree テーブルで
INサブクエリとともにPREWHEREを使用した際に発生していたLOGICAL_ERROR: Not-ready Set is passed as the second argument for function 'in'を修正しました。#98522 (Alexey Milovidov). - シャットダウンシグナルに応答せず、サーバーの正常なシャットダウンを妨げていた Keeper の TCP 接続を修正しました。 #98525 (Alexey Milovidov).
query_plan_merge_expressions = 0でquery_plan_convert_join_to_inが有効な場合に発生する例外 “Sorting column wasn’t found in the ActionsDAG’s outputs” を修正しました。#98526 (Alexey Milovidov) 。- named collections 使用時に失敗する MongoDB Dictionary ソースを修正しました。#97840 をクローズしました。#98528 (Pablo Marcos) 。
- パラメータ置換後に Identifier が空になった場合に発生していた LOGICAL_ERROR を修正しました。#98530 (Pervakov Grigorii).
- ウィンドウ関数と組み合わせて
sort_overflow_mode = 'break'を使用した際に発生するパイプラインのデッドロックを修正しました。#98543 (Alexey Milovidov) 。 - 新しいブロックの追加中に例外が発生した際の、Bufferエンジンにおけるカラムのロールバック処理を修正しました。従来のロジックでは、カラムのインメモリ状態が破損するおそれがありました。#98551 (Pavel Kruglov).
- const の
DynamicまたはVariantカラムとNULLを用いた null-safe 比較 (<=>/IS NOT DISTINCT FROM) で発生していた例外Bad cast from type ColumnConst to ColumnDynamicを修正しました。あわせて、Dynamic/VariantとNULLの比較でIS DISTINCT FROMが常に誤って 0 を返していた問題も修正しました。#98553 (Alexey Milovidov). - テキスト索引を他のスキップ索引と併用した場合の不具合を修正しました。以前は、クエリのフィルターでテキスト索引と通常のスキップ索引を同時に使用すると、“Trying to get non-existing mark” のような論理エラーが発生することがありました。#98555 (Anton Popov).
- 同じクエリスコープ内でエイリアス付きの table function が複数回出現する場合 (たとえば
PREWHERE句とQUALIFY句の両方) に発生する論理エラー “TABLE_FUNCTION is not allowed in expression context” を修正しました。 #98557 (Alexey Milovidov). - PK 内の式 (カラムだけでなく) に対する分散索引解析を修正 (これにより、リモートレプリカ上の冗長なグラニュールがまったくフィルタリングされない状態になっていた) 。 #98561 (Azat Khuzhin).
- サブカラムが他のカラムの default/alias 式で使用されている場合、そのカラムの削除を禁止し、ALTER DROP COLUMN のデフォルト式でアナライザを使用するようにしました。#98569 (Nikita Mikhaylov).
- HTTP クライアントで、再試行できないエラー (
HTTP_CONNECTION_LIMIT_REACHEDを含む) でも S3 リクエストが誤って再試行されていた問題を修正しました。#98598 (Sema Checherinda) 。 - DateTime64 でパーティションプルーニングを行う際に発生する decimal のオーバーフローを修正しました。#98628 (Yarik Briukhovetskyi).
- JIT 式コンパイルにおける 2 件の不具合を修正しました。1 件目は、
nativeCastの型チェックにあったコピー&ペーストミスにより、整数から整数、および浮動小数点数から浮動小数点数への cast の分岐が到達不能になっていた問題です。2 件目は、LLVMPassBuilderに誤ってnullptrの TargetMachine が渡されていたため、ターゲット固有の最適化パスが登録されなかった問題です。#98660 (Alexey Milovidov). SHOW_COLUMNS権限がなくても、localhost を指すremote()、remoteSecure()、cluster()、またはclusterAllReplicas()を介して任意のテーブルに対して DESCRIBE を実行できてしまう RBAC バイパスを修正しました。#98669 (pufit).- フィルタープッシュダウン最適化によって共有 DAG ノードが破損し、非ブール式 (例:
sin(col)) を JOIN を伴う WHERE と SELECT の両方で使用した際にBAD_GET例外や誤ったクエリ結果が発生する問題を修正しました。#98681 (Alexey Milovidov) 。 - 並列レプリカ使用時に
read_in_order_through_joinを使うと発生する LOGICAL_ERROR “Replica decided to read in Default mode, not in WithOrder” を修正しました。#98685 (Alexey Milovidov) 。 remoteの引数としてinputテーブル関数を使用したときに発生する例外 “Bad cast from typeDB::TableFunctionNodetoDB::QueryNode” を修正しました。#98694 (Alexey Milovidov) 。- 空の covering parts を誤ってクリーンアップしたことが原因で発生していた、古い data parts の復活を修正しました。 #98698 (Shaohua Wang).
equals比較でブール関数がVariant型を返す場合に、LogicalExpressionOptimizerPassで例外が発生する不具合を修正しました。#98712 (Alexey Milovidov).parseDateTimeBestEffortが、月名/曜日のプレフィックスで始まる単語を誤ってパースする不具合を修正しました。#97965 をクローズします。#98742 (Pavel Kruglov).- 新しいアナライザを有効にした状態で、異なるパラメータ (例: 異なる
SKIPフィールド) を持ち、JSON のサブパスを参照する ALIAS カラムを含む JSON カラムを持つテーブルに対して、merge()テーブル関数またはMergeエンジンでクエリを実行した際に発生するUNKNOWN_IDENTIFIER例外を修正しました。#97812 をクローズします。#98753 (Pavel Kruglov). View内でDistributedストレージが使用されている場合の、アナライザでのoptimize_skip_unused_shards最適化を修正しました。#98754 (Nikolai Kochetov) 。clickhouse-clientの--externalで渡される外部テーブルについて、名前指定によるタプルのサブカラムアクセス (例:Tuple(a UUID, b Int32)に対するSELECT x.a) を修正しました。#96925 をクローズしました。#98755 (Pavel Kruglov) 。- 不正な (途中で切れた) UTF-8入力に対して
reverseUTF8が例外を発生させる問題を修正しました。 #98770 (Alexey Milovidov). - 偽値との OR (すなわち or(x, 0)) 述語がある場合に、set スキップ索引の有用性を正しく検出できない問題を修正しました。#98776 (Azat Khuzhin) 。
FINAL+PREWHERE+ 定数のWHERE式 +count()のようなカラムに依存しない集約関数の組み合わせで発生しうるLOGICAL_ERROR例外 (removeUnusedColumnsでのBlock structure mismatch) を修正しました。#98778 (Alexey Milovidov) 。- ClickHouse辞書の自動再読み込みに関する
system.trace_logエントリで、クエリIDが空にならないようにしました。#98784 (Miсhael Stetsyuk). IDatabaseTablesIterator::table()呼び出しでテーブルのスナップショットを取得してから、その後の反復処理中に別スレッドでテーブルが変更されるまでの間に作成されたシステムテーブルで、null ポインタを逆参照してクラッシュする問題を修正しました。#98792 (Grant Holly).SYSTEM START REPLICATED VIEWでリフレッシュタスクが起動しない問題を修正しました。#98797 (Pablo Marcos) 。- 別の JOIN 内で JOIN を含む
view()テーブル関数を使用した際に発生する例外 “Inconsistent table names” を修正 (旧アナライザ使用時のみ) 。 #98809 (Alexey Milovidov). - pending_signals 経由での RLIMIT_SIGPENDING の調整に関する不具合を修正しました。 #98829 (Azat Khuzhin).
loopをクラスターテーブル関数と組み合わせた際に発生する例外を修正しました。#98860 (Konstantin Bogdanov) 。- 複数の結合キーカラムを使用する LEFT ANTI JOIN で、
enable_join_runtime_filters=1(デフォルト) の場合に誤った結果が返されていました。#98871 (Alexander Gololobov). - データが複数のchunkに分けて読み込まれる場合 (たとえば
index_granularityが小さい場合) に、WITH FILL STALENESSが余分な補完行を生成する不具合を修正しました。#98895 (Alexey Milovidov). - “RPNBuilderFunctionTreeNode has A arguments, attempted to get argument at index B” という LOGICAL_ERROR を修正しました。#98900 (Azat Khuzhin) 。
- 失敗した割り当てがロールバックされないこと、
nallocx(0)の未定義動作、ならびにグローバルピーク追跡におけるオフバイワンによって生じるメモリ追跡のずれを修正。追跡対象をio_uringのリングバッファにも拡張。 #98915 (Antonio Andelic). - ユーザーパス外にあるローカルのデータレイクテーブルについて、作成だけでなくアタッチも禁止しました。#98936 (Daniil Ivanik) 。
urlClusterまたは同様のクラスターテーブル関数を使用するクエリで、“ReadBuffer is canceled” 例外を引き起こす可能性があったレースコンディションを修正しました。 #98955 (Alexey Milovidov).BFloat16型の引数を渡した際に金融関数 (financialNetPresentValue、financialInternalRateOfReturnなど) で発生していたLOGICAL_ERROR例外を修正しました。#98958 (Alexey Milovidov) 。- クエリプランの式マージが無効な場合 (query_plan_merge_expressions = 0 または query_plan_enable_optimizations = 0) に、ALIAS カラムに対してスキップ索引 (および主キー条件) が適用されない問題を修正しました。#98960 (Peng).
- 非同期 INSERT で
InsertQueryProfileEvent が増加するようにしました。#98626 をクローズしました。#98962 (Narasimha Pakeer)。 - 主キーに NaN の浮動小数点値が含まれる場合にデバッグビルドで発生する例外 “Inconsistent KeyCondition behavior” を、
accurateLessとaccurateEqualsが ClickHouse のソート順に従って NaN を一貫して処理するようにすることで修正しました。#98075 をクローズします。#98964 (Alexey Milovidov). - SummingMergeTree では、Bool (およびその他の domain 型) のカラムは合計されなくなりました。Bool の値は算術的に合計されず、そのまま保持されます。#98976 (Yash ).
optimize_const_name_sizeが有効で、enable_scalar_subquery_optimization= 0 の状態でリモート分片にクエリを実行した際に発生していたScalar doesn't exist例外を修正しました。リモートクエリ内で大きな定数が__getScalar参照に置き換えられていたにもかかわらず、それらが分片に送信されていなかったため、クエリが失敗していました。#98979 (andriibeee).GROUP BYと、Dictionary の逆引きルックアップ、Date/DateTime変換の比較、タプル比較を含む式を使用する一部のクエリで発生していたNOT_FOUND_COLUMN_IN_BLOCKを修正しました。#98888 をクローズします。#98980 (Nihal Z. Miaji).- MergeTreeエンジンで、version/sign/is_deletedカラムを
EPHEMERALまたはALIASに変更した際に発生する未定義動作 (nullポインタの逆参照) を修正しました。こうした変更は、現在は適切に拒否されるようになりました。#98985 (Alexey Milovidov). system.grantsのaccess_objectカラムで、URLおよびS3の権限に対する正規表現パラメータが省略されていた問題を修正しました。 #98987 (DQ).- Iceberg BigLake の読み取りを修正しました。ADC 認証情報が GCS S3 クライアントに転送されるようになり (403 エラーを解消) 、OAuth2 認証情報は送信前に URL エンコードされるようになったため (特殊文字を含むトークンでの認証失敗を解消) 、ネームスペースの走査処理も BigLake の HTTP 400 レスポンスで中断しなくなりました。#98998 (Nikita Fomichev) 。
TZ環境変数で POSIX のファイルパス構文 (例:TZ=:/etc/localtime) を使用している場合に、clickhouse-clientがタイムゾーンを切り替えられない問題を修正しました。#99000 (Yash ).startsWith、LIKE、NOT LIKEをFixedStringカラムに対して使用した際に、プルーニングが誤って行われる、または十分に行われない問題を修正しました。さらに、キー・カラムをFixedStringからStringにキャストした場合に、グラニュールのプルーニングができるようになりました。#98940。#99001 (Nihal Z. Miaji).- 重複イベントが検出された際に
strict_deduplicationで誤ったレベルが返されることがあったwindowFunnelを修正しました。#99003 (Yash ). - サブクエリ内の LIMIT 句と OFFSET 句が EXISTS によって無視され、オフセットまたは LIMIT が 0 のためにサブクエリが行を返さない場合に誤った結果となっていた不具合を修正しました。#88722 をクローズします。#99005 (andriibeee).
GROUPING SETS使用時に、フィルターのプッシュダウン最適化で、定数に短絡評価されるAND式に遭遇した際に発生する “Block structure mismatch” 例外を修正しました。#99010 (Alexey Milovidov) 。- クエリプランに
_part_offsetカラムがない場合に、パッチパート (論理更新) の読み取り時に発生する例外を修正しました。 #99023 (Alexey Milovidov). pk_idが主キーでString型の場合、SELECT * FROM table WHERE pk_id = ''のようなクエリでも、グラニュールの絞り込みに主キー索引が正しく使われるようになりました。#99027 (Shankar Iyer).- バックグラウンドスレッドがデータをストリーミング中に materialized view がデタッチされた場合に発生する、Kafkaエンジンの
DEPENDENCIES_NOT_FOUND例外を修正しました。#99028 (Alexey Milovidov). - 仮想カラム (例:
_part_offset) と同じ名前のEPHEMERALカラムを持つテーブルの作成時に発生する例外を修正しました。#99031 (Alexey Milovidov). - 存在しない圧縮ファイルを glob パターン付きの
url()テーブル関数で読み込む際に、誤解を招く “inflate failed: buffer error” が表示される問題を修正しました。http_skip_not_found_url_for_globsが有効な場合は、想定どおり空の結果を返すようになりました。#99034 (Alexey Milovidov). - スキーマ変更 (例: ADD COLUMN) 後、パッチパートに対して
ALTER TABLE ... DROP PARTを実行するとサーバーがクラッシュ (std::terminate) する問題を修正しました。原因は、空のカバレッジパートのメタデータにシステムカラム (_part) が欠けていたことで、NOEXCEPT_SCOPE 内で例外が捕捉されずに発生していたことです。#99036 (Peng). - ClickHouse server process は、cached disk read 中にメモリ制限超過例外が発生した場合、クラッシュする可能性がありました。これは修正されました。#99042 (Shankar Iyer) 。
dictGetを使用して ROW POLICY と ALIAS カラムの両方を持つテーブルにクエリを実行した際に発生するLOGICAL_ERRORを修正しました。この問題は、新しいアナライザで ALIAS カラムを解決する際、テーブル式に早い段階でアクセスしていたことが原因でした。#99065 (Peng).- データ形式に Avro フォーマットを使用する Iceberg テーブルで、仮想カラムのみをクエリしようとした際に発生する範囲外エラーを修正しました。非常にまれなケースのため、クリティカルとはしていません。#88238 を修正しました。 #99080 (alesapin).
remote()+view()を使用する再帰CTEで発生するセグメンテーションフォルトを修正しました。#99081 (Konstantin Bogdanov) 。- read-in-order 最適化が適用されている場合、不要な追加の索引解析をスキップします。#99084 (Vladimir Cherkasov) 。
- パッチパートの適用中にメモリ制限例外が発生した際に引き起こされるクラッシュを修正しました。 #99086 (Anton Popov).
- 再初期化リカバリ中に ZooKeeper のエントリが削除された際、古くなった
first_failed_task_nameが残ることで発生していたDDLWorkerのデバッグアサーションを修正しました。#99099 (Antonio Andelic) 。 - 有効期限 (TTL) を伴うマージ時のテキスト索引の再構築を修正しました。#99107 (Anton Popov).
- Iceberg テーブルエンジンの
ALTER TABLE ... REMOVE SETTINGSクエリで発生するクラッシュを修正しました。#86330 を修正しました。#99108 (alesapin). query_plan_convert_any_join_to_semi_or_anti_join最適化のバグを修正し、一致しない行に対して誤った結果が返される問題を解消しました。関連: https://github.com/ClickHouse/ClickHouse/pull/95995. #99112 (Yarik Briukhovetskyi).ASTColumnsExceptTransformer::transformで発生する LOGICAL_ERROR 例外を修正しました。#99119 (Pablo Marcos) 。- 必要なソースアクセス権限がないユーザーでも、テーブル関数 (
mysql(),postgresql(),sqlite(),arrowFlight(),jdbc(),odbc(), など) に対してDESCRIBE TABLEまたはCREATE TABLE ASを実行することでテーブル構造を取得できてしまう RBAC のバイパスを修正しました。リモートサーバーからスキーマを推論する関数では、これにより認可なしで外向き接続 (SSRF) をトリガーできる状態にもなっていました。#99122 (pufit). - 動的再構成およびリーダー移譲中に発生する Keeper のクラッシュ (NuRaft でのセグメンテーションフォルト) を修正。 #99133 (JIaQi Tang).
- 宛先が
SAMPLEに対応していない場合に Buffer table を使用するとクラッシュする問題を修正しました。 #99141 (Kseniia Sumarokova). - パッチパートのカラム順の不一致による LOGICAL_ERROR を修正。 #99164 (Pablo Marcos).
- Icebergテーブルに異なるフォーマット (ORC と Parquet) のファイルが混在している場合に、ごくまれに発生するクラッシュを修正しました。#88126。#99168 (alesapin).
- backup/restore で max_execution_time が適用されない問題を修正しました。 #99205 (Kseniia Sumarokova).
ORDER BY ALLのないINSERT SELECTクエリで、insert_deduplication_tokenが黙って無視される問題を修正しました。従来は、明示的にユーザーのトークンを指定していても、ソートされていないINSERT SELECTでは重複排除が完全に無効になっていました。現在は、insert_deduplication_tokenを指定するだけで、ORDER BY ALLの有無にかかわらず重複排除が有効になります。#99206 (Desel72).InverseDictionaryLookupPassの最適化中に発生していた過剰なアクセスチェックを修正しました。各訪問ノードごとではなく、パスの実行前にCREATE_TEMPORARY_TABLE権限を一度だけチェックするようにしました。#99210 (Mikhail Artemenko).clickhouse format --obfuscateが、スキップ索引の型、圧縮コーデック名、データベースエンジン名、Dictionary のレイアウト/ソース定義を難読化することで無効な SQL を生成していた問題を修正しました。 #99260 (Raúl Marín).- 一部のケースで Time[64] 型と DateTime[64] 型の比較がわかりにくくなっていた不具合を修正しました。現在は、このような場合、日付部分として
1970-01-01を追加して Time[64] の値を DateTime[64] に昇格させます。 #99267 (Yarik Briukhovetskyi). - distributed DDLクエリに対して、DDL workerで設定の制約内に収めるようにしました。 #99317 (Pablo Marcos).
- TOTP認証に関する軽微な問題を修正: パスワードが空の場合の
--one-time-passwordCLIオプション、および<digits>と<period>の設定値の検証。 #99322 (Vladimir Cherkasov). - Avroの出力フォーマットで、enumの定義に含まれない値を持つ
Enum8/Enum16カラムのシリアライズ時に発生するロジックエラーunordered_map::at: key not foundを修正しました。#99332 (Desel72). - Dynamic を含む Tuple 内でスパース シリアライゼーションを使用した CHECK TABLE の不具合を修正しました。#96588 をクローズしました。#99351 (Pavel Kruglov).
- テキスト索引のプリプロセッサに対する厳しすぎるバリデーションを修正した。#99359 (Anton Popov).
- 25.10 からそれ以降のバージョンへ、暗黙的な minmax インデックスを持つレプリケートテーブルをアップグレードする際の互換性を修正しました。#99392 (Raúl Marín) 。
- テキスト索引解析における否定形の関数 (
notEquals、notLike、notIn) のサポートを削除しました。これらの関数ではグラニュールをまったくスキップできなかったため、それらに対して索引解析を行っても、利点はなくオーバーヘッドが増えるだけでした。#99393 (Anton Popov) 。 INサブクエリ内でDistributedテーブルが使用された場合に、新しいアナライザでoptimize_skip_unused_shardsを修正しました。#99436 (Nikolai Kochetov) 。- クエリの結果でカラム名が重複した場合に
INTERSECT/EXCEPTで発生する heap-use-after-free を修正しました。#99471 (Alexey Milovidov). - part名に型付きのクエリパラメータを使用した場合に発生する
ALTER TABLE ... DROP PARTの論理エラーを修正しました。#99489 (Alexey Milovidov) 。 - テキスト索引の述語 (例:
hasAllTokens) がエイリアス経由でSELECT句とWHERE句の両方から参照されている場合に発生していたNOT_FOUND_COLUMN_IN_BLOCK例外を修正しました。#99504 (Anton Popov) 。 - 個別のテキスト索引を持つ複数のカラムにまたがって OR 条件で
hasAllTokensを使用した際に、誤った結果が返される問題を修正しました。#99505 (Anton Popov). clickhouse-localでページキャッシュを初期化し、page_cache_max_size設定が反映されるようにしました。#99510 (Alexey Milovidov) 。- まれに、
DETACH/ATTACH TABLEクエリの後に data part が誤って破損扱いとされ、デタッチされる不具合を修正しました。#99529 (Anton Popov). - HTTPインターフェイス経由でPrettyフォーマットを使って空のシステムテーブルにクエリを実行した際の
std::length_error例外を修正しました。#99541 (Alexey Milovidov) 。 ALTER TABLE ADD COLUMNを使用して、仮想カラムと同名のEPHEMERALカラム (例:_part_offset) を作成する際に発生していたLOGICAL_ERRORを修正しました。#99549 (Alexey Milovidov) 。- キャッシュキーの不一致が原因で、part の削除後も
VectorSimilarityIndexCacheのエントリが追い出されない問題を修正しました。 #99575 (Seva Potapov). - ローカルファイルから Google の認証情報を読み取ることを禁止しました。ファイルパスが判明しているとほかの認証情報まで読み取れてしまうため、この設定は安全ではありません。 #99584 (Konstantin Vedernikov).
- アナライザで発生していた性能低下を修正しました。ARRAY JOINから未使用のカラムを除外するようにしました。#99587 (Dmitry Novik) 。
- 既存の論理削除と行ポリシーが設定されたテーブルにおける、テキスト索引の読み取りを修正しました。 #99661 (Anton Popov).
- filter-in-decoder パスでフィルタリング除外されたページに遭遇した際に、Parquet リーダーで発生する nullptr のデリファレンスを修正。 #99676 をクローズ。 #99677 (Alexey Milovidov).
- O_DIRECT 使用時の AsynchronousReadBufferFromFileDescriptor における誤ったシークを修正しました。#99358 をクローズします。#99678 (Pavel Kruglov) 。
- 不正な圧縮データの展開時に
CompressionCodecT64で発生するヒープバッファオーバーフローと、CompressionCodecMultipleで発生するプロセスの異常終了を修正しました。いずれの問題も、新しい libFuzzer ターゲットによって発見されました。これらのコーデックは、クラッシュする代わりに例外を送出するようになりました。#99680 (Rahul). - サーバーがすべてのテーブルの読み込みを完了するまで、処理を遅らせる。#99700 (Seva Potapov) 。
- インライン DDL パラメータで
RemoteHostFilterをバイパスしていた MySQL Dictionary ソースの問題を修正しました。#99720 (Shaohua Wang) 。 system.tables内のデータレイクテーブルの反復処理時に発生する論理エラーを修正しました。#99739 (Konstantin Vedernikov) 。- プリプロセッサ付きのテキスト索引における、
IN関数を含む述語の解析を修正しました。あわせて、テキスト索引で検索対象のトークンが衝突し、不正確な結果を招く可能性がある問題を修正しました。 #99755 (Anton Popov). - 負の次元を持つ
Npyフォーマットのファイルを読み込む際に発生する無限ループを修正しました。#99812 (Desel72). - クエリプランのヘッダー計算時に、
FixedString引数に対するCRC32関数を行数ゼロで評価すると発生する global-buffer-overflow を修正しました。#99835 (Alexey Milovidov). - Iceberg テーブルに対して
ALTER TABLE ... MODIFY COLUMN ... COMMENTを実行した際に発生するクラッシュ (ヌルポインタ逆参照) を修正しました。#99838 (Desel72) 。 aggregate_functions_null_for_empty設定を修正し、ArrayやMapなどの非Nullable型を返す集約関数 (例:groupArray、sumMap) でも正しく動作するようにしました。#99839 (Alexey Milovidov) 。- 符号付き/符号なし整数型が混在する引数で呼び出した際に
midpoint関数で発生する LOGICAL_ERROR 例外を修正しました。#99867 (Alexey Milovidov). - フィルタ式に、NULL を生成する関数でラップされた集計と
materialize(0)の両方が含まれる HAVING 句を持つクエリで発生していた「Block structure mismatch」例外を修正しました。#99915 (Alexey Milovidov). - データ引数が、キーが配列である Map やその他のネストされた配列型である場合に、
sipHash128Keyed(および同様のキー付きハッシュ関数) で発生するアサーション失敗を修正しました。#99921 (Alexey Milovidov) 。 convertAnyJoinToSemiOrAntiJoinによるクエリプラン最適化中にIN関数で発生するLOGICAL_ERROR例外 “Not-ready Set” を修正しました。 #99939 (Alexey Milovidov).
ビルド/テスト/パッケージングの改善
- 重いヘッダーのインクルードを削減し、高コストなテンプレートのインスタンス化をヘッダーから切り出すことで、コンパイル時間を短縮しました。 #97893 (Raúl Marín).
- テンプレートのディスパッチマトリクスを縮小し、重いインクルードを削減することで、算術関数と関連ヘッダーのコンパイル時間を短縮しました。 #98204 (Raúl Marín).
mongo-c-driver2.2.2 を採用しました。 #98304 (Konstantin Bogdanov).postgresREL_18_3 を採用しました。 #98306 (Konstantin Bogdanov).- glibc malloc のメモリ回収効率の低さによる RSS の蓄積を避けるため、UBSan ビルドで jemalloc アロケータを有効化しました。 #98444 (Alexey Milovidov).
- パーサーコンビネータライブラリによるシンボル名の肥大化を抑えるため、Rust v0 のシンボルマングリングを採用し、PRQL ライブラリから内部シンボルを削除しました。 #98446 (Alexey Milovidov).
tests/benchmarksに TPC-H ベンチマークスイートと TPC-DS README を追加しました。 #98495 (Raufs Dunamalijevs).- TPC-DS の 99 個すべてのクエリに対する正当性テストを追加しました。 #99204 (Raufs Dunamalijevs).
- オフラインレプリカで発生する DDL CREATE TABLE + ALTER のバグ (#44070) を再現するインテグレーションテストを追加し、想定される失敗としてマークしました。 #99259 (Raufs Dunamalijevs).
- jemalloc を
je_プレフィックス付きで統合し、リンカーの —wrap の使用を廃止しました。 #99342 (Azat Khuzhin).
後方互換性を持たない変更
- デフォルトで、すべての insert に対して重複排除が ON になりました。以前は、非同期 INSERT と MV では OFF でしたが、同期 insert では ON でした。これは、どちらの insert 方法でもデフォルト設定を統一するためです。クラスターで重複排除を明示的に無効化している場合、従来の動作を維持するには
deduplicate_insert='backward_compatible_choice'を明示的に設定する必要があります。deduplicate_blocks_in_dependent_materialized_viewsについても同様です。#95970 (Sema Checherinda). - 統計情報の保存フォーマットが改善され、すべての統計情報が1つのファイルに保存されるようになりました。#93414 (Anton Popov)。
table statisticsを明示的に有効にしていない場合は、この項目は無視して構いません。 - S3(Azure)Queue のインメモリメタデータに制限を導入。システムテーブルの名称が
azure_queueからazure_queue_metadata_cacheに、system.s3queueからs3queue_metadata_cacheに変更されました。#95809 (Kseniia Sumarokova) 。 - 以前は、
Variantカラムに関数を適用した際、バリアントのサブタイプがその関数に適合しない場合でも暗黙的に NULL が返されていましたが、現在は例外がスローされるようになったため、この暗黙的な NULL の挙動に依存していたクエリが動作しなくなる可能性があります。 #95811 (Bharat Nallan). - PostgreSQL の
DATEカラムは、ClickHouse でDate32と推論されるようになりました (以前のバージョンではDateと推論されていましたが、その結果、狭い範囲を超える値でオーバーフローが発生していました) 。Date32の値を PostgreSQL に再度挿入できるようになりました。#73084 をクローズしました。#95999 (Alexey Milovidov). do_not_merge_across_partitions_select_final設定の意味が、より明確になりました。以前は、構成ファイルでこの設定を明示的に指定していない場合でも、この機能が自動的に有効になることがありました。そのためたびたび混乱を招き、残念ながら本番環境でいくつかの問題も引き起こしていました。現在はルールがよりシンプルになっています。do_not_merge_across_partitions_select_final=1を指定すると、この機能は無条件で有効になります。do_not_merge_across_partitions_select_final=0の場合、自動判定が使われるのは、新しい設定enable_automatic_decision_for_merging_across_partitions_for_final=1のときだけで、それ以外では使われません。従来の動作をできるだけ維持するため、デフォルト値はdo_not_merge_across_partitions_select_final=0およびenable_automatic_decision_for_merging_across_partitions_for_final=1に設定されました。#96110 (Nikita Taranov).- 明示的にカラムを指定して S3テーブルを作成する際、ClickHouse はそれらのカラム名が実際にリモートファイルのスキーマに存在するかを検証するようになりました。以前はカラム名が一致していなくても動作していたクエリは、今後はテーブル作成時に失敗します。これにより #96089 が修正されます。 #96194 (Konstantin Vedernikov).
- ORDER BY およびその他のテーブルのキー式でサブクエリを使用することを禁止しました。#96847 (Alexey Milovidov) 。
- デフォルトで
apply_row_policy_after_finalを有効化しました。もともとoptimize_move_to_prewhere_if_final=0の場合、ROW POLICY と PREWHERE はどちらも FINAL を考慮し、FINAL の後に適用されていました。#87303 によりこの挙動が壊れ、ROW POLICY フィルターではoptimize_move_to_prewhere_if_finalが無視されるようになっていました。これを修正するため、この PR では #91065 で導入された設定apply_row_policy_after_finalを有効にしています。apply_row_policy_after_finalを有効にすると、従来どおり、ROW POLICY はデフォルトで引き続き FINAL を考慮します。この PR はoptimize_move_to_prewhere_if_final=1の場合の挙動を変更するため、後方互換性のない変更です。今後、ROW POLICY を FINAL の前に適用するには、optimize_move_to_prewhere_if_finalではなくapply_row_policy_after_finalを使用する必要があります。#97279 (Nikolai Kochetov). Date型は、Arrow/ArrowStream フォーマットでuint16ではなく、Arrow ネイティブのdate32型としてシリアライズされるようになりました。これにより、PyArrow などのツールでこのカラムが日付型として正しく認識されるようになります。従来の動作は、output_format_arrow_date_as_uint16設定で復元できます。Dateカラムにuint16を使用していた古い Arrow ファイルの読み取りも引き続きサポートされます。#96860 (Alexey Milovidov).
新機能
- ユーザーは ClickHouse から直接 ClickStack (オブザーバビリティ UI) を使えるようになり、デバッグやローカル開発に便利になりました。#96597 (Aaron Knudtson).
- 認証方式として、時間ベースのワンタイムパスワード (TOTP) をサポート。 #71273 (Vladimir Cherkasov).
lazy_load_tablesデータベース設定を追加しました。有効にすると、データベースの起動時にテーブルは読み込まれず、代わりに軽量なStorageTableProxyが作成され、実際のテーブルエンジンは初回アクセス時に実体化されます。#96283 (xiaohuanlin).input_format_max_block_wait_ms設定を追加し、タイムアウト時にデータブロックを出力できるようにするとともに、HTTP connection が予期せず閉じられた場合でも残りのデータを処理できるようにしました。#94509 (Mostafa Mohamed Salah).- Google BigLake カタログのインテグレーション。#95339 をクローズします。#97104 (Konstantin Vedernikov)。
- 利用可能なすべてのトークナイザーを表示する system table
system.tokenizersを追加しました。 #96753 (Robert Schulze) 。 - UDF のロード状況と設定を監視できるように、新しいシステムテーブル
system.user_defined_functionsを追加しました。#90340 (Xu Jia). - jemalloc でビルドされたサーバーのメモリ使用量を診断するため、jemalloc メモリアロケータの統計情報 (
malloc_stats_print経由) を公開するsystem.jemalloc_statsテーブルを追加しました。あわせて、これらの統計情報をインタラクティブに可視化するための/jemalloc.htmlHTTP エンドポイントを ClickHouse HTTP インターフェイスに追加しました。#97077 (Antonio Andelic). - jemalloc のヒーププロファイルを読み取って分析するための
system.jemalloc_profile_textテーブルを追加しました。出力フォーマットはjemalloc_profile_text_output_format設定で制御されます (raw、symbolized、collapsed。デフォルトは collapsed) 。インラインフレームの解決はjemalloc_profile_text_symbolize_with_inlineで制御されます (有効な場合、シンボル化は遅くなりますがインラインフレームが含まれます。無効な場合、より高速に出力するためインラインフレームはスキップされます) 。collapsed フォーマットでは、jemalloc_profile_text_collapsed_use_countによって、スタックの重み付けに live allocation count (true) を使うか、live bytes (false、デフォルト) を使うかを制御します。これにより、jemalloc ヒーププロファイルのメモリプロファイリングや flame graph による可視化が容易になります。#93248 を修正しました。#97218 (Antonio Andelic). default_dictionary_database設定を追加しました。これにより、ClickHouse は、database 修飾子を付けずに参照された external dictionaries を、指定したデフォルトの database 内で解決できるようになります。これにより、XML で定義されたグローバル Dictionary から、SQL で定義された database 単位の Dictionary への移行が容易になり、既存の dictionary クエリ (例: dictGet(‘name’, …)) も変更せずにそのまま動作させることができます。#91412 (Dmitrii Plotnikov).DatabaseReplicatedで補助 ZooKeeper のサポートを追加しました。#91683 (RinChanNOW).- 昇順の素数を提供する新しいテーブル関数
primesと、新しいシステムテーブルsystem.primesを実装しました。#90839 をクローズしました。#92776 (Nihal Z. Miaji). - 非同期 INSERT は並列クォーラムに対応しました。挿入されたデータはクォーラムまでレプリケートされます。重複が見つかった場合、クエリは先に挿入されたデータのレプリケーションも完了するまで待機します。#93356 (Sema Checherinda).
- 色の値を sRGB から OKLAB へ、またその逆方向に変換する関数
colorOKLABToSRGB、colorSRGBToOKLABを追加しました。#93361 (Pranav Tiwari) 。 - 新たに、
insert_deduplicateおよびasync_insert_deduplicateをオーバーライドするdeduplicate_insert設定を追加しました。 #94413 (Sema Checherinda). - サーバー設定
insert_deduplication_versionにより、共通の重複排除ハッシュへの移行が可能になりました。 #95409 (Sema Checherinda). xxh3_128ハッシュ関数が追加されました。#96055 (Raúl Marín) 。- 結果パーツをコミットせずにマージをシミュレートできる
OPTIMIZE <table> DRY RUN PARTS <part names>クエリを追加しました。これはテスト用途、つまり新しいバージョンでマージの正しさを検証したり、マージ関連の不具合を決定論的に再現したり、マージ性能を確実にベンチマークしたりするのに役立ちます。#96122 (Anton Popov). - テーブルで使用されている named collections が削除されるのを防ぐため、設定
check_named_collection_dependenciesによってデフォルトで有効になる新しいチェックを追加しました。#96181 (Pablo Marcos). - サーバー内の既存のフェイルポイントと、それらが有効かどうかを確認するための
system.fail_pointsが追加されました。これにより、テストの自動化がしやすくなります。#96762 (Pedro Ferreira). - Glue カタログへのロールベースアクセスを追加。設定
aws_role_arnと、必要に応じてaws_role_session_nameを使用します。#90825 (Antonio Andelic). - 有効にすると、すべての
Date、Date32、Time、Time64、DateTime、DateTime64カラムに対して minmax 索引を自動的に作成する設定add_minmax_index_for_temporal_columnsが追加されました。#93355 (Michael Jarrett) 。 - JOINでの拡張テーブル別名をサポートしました (
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = bのようなクエリ) 。#95131 をクローズしました。#95331 (Yarik Briukhovetskyi) 。 - Icebergテーブルで
ALTER TABLE RENAME COLUMNがサポートされました。これまではADD COLUMN, DROP COLUMN, and MODIFY COLUMNのみがサポートされていました。#97455 (murphy-4o).
実験的機能
- テキスト索引が GA になりました。 #96794 (Robert Schulze).
- 量子化されたビットパック形式のベクトル格納 (近似最近傍探索で使用) 向けの
QBitデータ型が一般提供となり、実験的な設定を有効にする必要がなくなりました。 #95358 (Raufs Dunamalijevs). - ClickHouse のベクトル検索で、クラスター内のレプリカを使ってベクトル索引パーツの検索負荷を_分散_できるようになりました。これにより、ClickHouse は単一の VM のメモリ容量を超える大規模なベクトル索引をサポートできます。 #95876 (Shankar Iyer).
ast_fuzzer_runsおよびast_fuzzer_any_query設定で制御されるサーバー側 AST fuzzer を追加しました。有効にすると、サーバーは各クエリの通常実行後に、そのランダム化した改変版を実行し、結果は破棄します。 #97568 (Alexey Milovidov).- 実験的な KQL ダイアレクトに
iif関数を追加しました。 #94790 (happyso). - スキーマ推論で
allow_experimental_nullable_tuple_typeが考慮されるようになりました。有効にすると、推論された Tuple 型でNullable(Tuple(...))を使えるようになるため、欠落したネストされたオブジェクトをNULL要素の Tuple ではなくNULLとして扱えます。 #95525 (Nihal Z. Miaji). use_statistics_cache設定がデフォルトで有効になり、カラム STATISTICS がメモリに cache されるようになりました。これにより、各パーツから毎回再読み込みしなくてもクエリ最適化を高速化できます。 #95950 (Han Fei).
パフォーマンス改善
- 主キー内の任意の決定論的な式をデータスキップに使用できるようになりました (例:
ORDER BY cityHash64(user_id)/ORDER BY length(user_id)) 。決定論的な式については、ClickHouse はその式をクエリ定数に適用し、その結果を主キー索引で=,IN,hasなどの述語に利用できます。さらに、その式が単射でもある場合 (例:ORDER BY hex(p)またはORDER BY reverse(tuple(reverse(p), hex(p)))) 、否定形である!=,NOT IN,NOT hasでも索引を効果的に利用できます。#10685 を解決。#82161 を解決。#92952 (Nihal Z. Miaji). - 統計情報の保存フォーマットが改善され、すべての統計情報が単一のファイルに保存されるようになりました。#93414 (Anton Popov).
- ファイルシステムキャッシュで、リモートテーブルエンジン/関数の並列読み込みに対応しました。#71781 (Kseniia Sumarokova).
- ローカルファイルおよびオブジェクトストレージのテーブル関数で、ユーザー空間ページキャッシュを使用できるようになりました。#77874 (Michael Kolupaev).
- ユーザー空間のページキャッシュで不要な memcpy を回避。#77884 (Michael Kolupaev).
concurrent_threads_schedulerのデフォルトが、fair_round_robinからmax_min_fairに変更されました。これにより、高負荷時には割り当てスロット数の少ないクエリが優先されるようになり、公平性が向上します。その結果、短時間で終わるクエリが長時間実行されるクエリのせいで不利になることがなくなります。#95300 (Sergei Trifonov).FINALクエリで、フィルタリングに主キーの条件を使用し、ほかの条件にはスキップ索引を使用した場合、PrimaryKeyExpandの処理ステップでは、最初に絞り込まれた主キー範囲についてのみ交差を確認するようになりました。#94903 (Shankar Iyer).s3(...)のようなテーブル関数で並列レプリカを使用する場合、テーブル関数を単一のサブクエリでラップしたクエリも、以前はテーブル関数への直接参照のみが並列化の対象だったのに対し、現在ではレプリカ間で自動的に並列化されるようになりました。#92264 をクローズしました。#96332 (phulv94)。- cache内のデータファイルとシステムファイルを、それぞれ別のセグメントに分割できるようにしました。 #87834 (MikhailBurdukov).
ColumnVector::replicateの動的ディスパッチを実装し、一部のハッシュ結合処理を高速化しました。#79573 (Raúl Marín) 。- 複雑な述語条件がある場合の並列ハッシュ結合の性能を改善しました。従来は結合されなかった行を1つのスレッドで処理していましたが、これは最適ではなかったため、この最適化ではそれらの行の処理を複数のスレッドに並列化します。
parallel_non_joined_rows_processing設定で切り替えできます。デフォルトで有効です。#92068 (Yarik Briukhovetskyi). - JSON型のパースを若干最適化しました。#93614 (Pavel Kruglov).
- AST のメモリ使用量を削減。ハイライト表示が使われず、VALUES のパースも行われない場合はフィールドが使用されないため、この最適化は有効です。#93974 (Ilya Yatsishin).
- named Tuple ASTオブジェクトのメモリ消費を最適化しました。カラム名を汎用的なASTリテラルノードに保持するのではなく、tupleオブジェクト内に文字列として格納するようにしました。#94704 (Ilya Yatsishin).
- 追加のリンカオプションにより、デバーチャライゼーションが向上しました。 #94737 (Nikita Taranov).
- ZooKeeper リクエストをバッチ化することで、多数のパーツを持つ ReplicatedMergeTree テーブルのレプリカのクローン作成時の性能を改善。 #94847 (c-end).
- read step にすでに PREWHERE フィルタがある場合、新しいフィルタは追加できませんでした。この変更により、PREWHERE の最適化は JOIN ランタイムフィルタ最適化の後まで延期され、ランタイムフィルタも PREWHERE にプッシュできるようになりました。 #95838 (Alexander Gololobov).
- x86で動的ディスパッチを用いることで、
T64codecの圧縮を高速化。#95881 (Raúl Marín). - 可能な場合 (
NULL不可、-Ifではない、GROUP BY なし、IPv6 または String ではない) に、insert のバッチ化によって数値型に対するuniqを高速化しました。#95904 (Raúl Marín) 。 - Keeper 向けの低レベル最適化:
ZooKeeper::observeOperationsが、ZooKeeper の受信スレッドにおける CPU 使用量の 20% 超を占めていることが判明しました。この変更では、次の点に対応しています。1.AggregatedZooKeeperLog::statsでは、SipHashの代わりに 10 倍以上高速なCityHash64を使用します。2.Coordination::ErrorCounterでは、std::unordered_mapとstd::mutexの代わりにstd::array<std::atomic<UInt32>, N>を使用します。#95962 (Miсhael Stetsyuk) 。 - メモリを節約するため、ProfileEvents::Counter の 64 バイト境界へのアラインメントを廃止しました。#96097 (Azat Khuzhin) 。
- メモリ最適化:
CachedOnDiskReadBufferFromFile構造体のサイズを50分の1に削減しました。#96098 (Azat Khuzhin). - 空のハッシュテーブルをリサイズする際に、古いデータをコピーしないようにしました。#96180 (Raúl Marín) 。
RIGHT OUTERJOIN での JOIN ランタイムフィルタをサポート。 #96183 (Hechem Selmi).- 最適化設定
enable_join_runtime_filtersがデフォルトで有効になりました。#89314 (Alexey Milovidov) 。 - 従来、テキスト索引の direct read 最適化は、すべてのパーツにマテリアライズ済みのテキスト索引がある場合にのみ適用されていました。この PR では部分的なサポートが追加され、一部のパーツにマテリアライズ済みのテキスト索引がある場合はそれらのパーツでそれが使用され、マテリアライズ済みのテキスト索引がないパーツでは元のフィルタ式を実行する形にフォールバックします。#96411 (Anton Popov).
- フィルタリングを高速化するため、systemログテーブルの時間カラムに
minmaxセカンダリ索引を、query_id/initial_query_idカラムにbloom_filter索引を追加しました。 #96712 (Alexey Milovidov). - 遅延マテリアライゼーションの最適化が、
UNION ALLクエリの最初の分岐だけでなく、すべての分岐に適用されるようになりました。これにより、異なるMergeTreeテーブルからの複数のソート済み・件数制限付きの読み取りをUNION ALLで組み合わせるクエリでは、すべての分岐で必要になるまでカラムの読み取りが遅延され、I/O が削減されます。#96832 (Federico Ginosa). - 不要なデータコピーをなくし、数値カラムでベクトル化された最小値/最大値計算を有効にすることで、INSERT 時の minmax スキップ索引の計算を最適化しました。 #97392 (Raúl Marín).
- ストレージ
DeltaLakeは、Delta Lake のメタデータからcount()の結果を取得するようになり、system.tables に正しいテーブル統計情報 (合計バイト数/行数) が表示されるようになりました。 #96190 (Kseniia Sumarokova). - 未使用のカラムは、MergeTree から読み取る場合、読み取りステップからも除外されます。特に、フィルタが
PREWHEREにプッシュダウンされる場合に有効です。#89982 (János Benjamin Antal). - テーブル名のみを取得することで
SHOW TABLESクエリの処理を改善し、getLightweightTablesIteratorがテーブル名のみを含む構造を返すようにしました。#93835 を解決しました。#94467 (Smita Kulkarni). - キーカラムがこれらの関数でラップされている場合でも、範囲述語に対して主キーおよびスキップ索引のプルーニングを有効にできるよう、
assumeNotNull、coalesce、ifNullを改善しました。#94689 をクローズしました。#94754 (Nihal Z. Miaji). - getChildren Keeper リクエストに with_data と with_stat を追加しました。これにより、子の一覧だけでなく、その
statやdataも 1 回の操作でまとめて取得できるようになります。#94826 (Nikolay Degterinsky) 。 - 最終的にローカルプランを実行する場合でも、並列レプリカを使用するプランを実行する場合でも、索引解析は (ほとんどの場合) 一度しか行われません。 #94854 (Nikita Taranov).
- パーツ数 (
distributed_index_analysis_min_parts_to_activate) と索引のサイズ (distributed_index_analysis_min_indexes_size_to_activate) に応じて、分散索引解析を有効化できるようにしました。#95216 (Azat Khuzhin) 。 - IcebergテーブルでのPREWHERE最適化を有効化。 #95476 (Konstantin Vedernikov).
- 一部のASTクラスのメモリ消費量を削減しました。#95514 (Raúl Marín) 。
split_intersecting_parts_ranges_into_layersを有効にした際に生成されるパイプラインストリームの数を制限します。これにより、メモリの過剰な消費を防ぐことができます。#96478 (Nikita Taranov).- 複数の JOIN に対する等価集合最適化を実装しました。複数の
INNER JOINを連続して含むクエリで、filter pushdown 最適化が強化されました。テーブルが等価なカラム同士で結合されている場合 (例:t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id WHERE t1.id > 10) 、この chain 内のいずれかのテーブルに適用されたフィルタは、自動的にすべてのテーブルにプッシュダウンされます。#96550 をクローズしました。#96596 (Vladimir Cherkasov) 。 - Delta Lake のメタデータスキャンを最適化しました。delta-kernel の PR https://github.com/delta-io/delta-kernel-rs/pull/1827 の変更を利用しています。 #96686 (Kseniia Sumarokova).
- Replicated database では、ダミークエリのたびにキャッシュされたクラスターを更新しないようにしました。#96897 (Tuan Pham Anh) 。
- プレフィックスが ASCII 文字のみで構成されている場合、
startsWithUTF8によるフィルタリングで主キー索引を使用します。#97055 (vkcku).
改善
- Keeper へのリクエストに対する OpenTelemetry トレーシングを追加しました。 #91332 (Miсhael Stetsyuk).
- 新しい設定オプション:
logger.startup_console_levelとlogger.shutdown_console_levelが追加され、それぞれ ClickHouse の起動時および停止時のコンソールログレベルを上書きできるようになりました。#95919 (Garrett Thomas). - 設定の再読み込み時に、コマンドラインで指定したオーバーライドを尊重するようにしました。#80294 をクローズ。#80295 (Alexey Milovidov) 。
mongodbテーブル関数で、名前付きコレクションのパラメーターに対するキー・バリューによる上書きを許可しました。#89616 (vanchaklar).- Iceberg テーブル向けの read-in-order 最適化で、単純なカラム参照だけでなく、
icebergBucketやicebergTruncateのような複雑なソート関数も利用できるようになりました。#90256 (Konstantin Vedernikov) 。 - 診断機能を向上させるため、system.mutations に parts_postpone_reasons という新しいカラムを追加しました。これにより、パーツが延期された理由を確認できます。#92206 (Shaohua Wang).
DataflowStatisticsCacheで、読み取る行数の変化 (insert/delete や query condition cache の使用によるもの) を追跡できるようになりました。 #93636 (Nikita Taranov).- SYSTEM RESET DDL WORKER [ON CLUSTER] クエリに対応しました。このクエリは、メインスレッド内の DDLWorker の状態をリセットします。ホスト ID が更新された際に、レプリカの active 状態を更新するのに役立ちます。#93780 (Tuan Pham Anh) 。
- イベントタイプ
MUTATE_PARTおよびMUTATE_PART_STARTについて、system.part_logでmutation_idsをサポートしました。#93811 (Shaohua Wang). - バックグラウンド操作 (Mutate、Merge) を ‘background’ プロファイルで個別に設定できるようになりました。従来、これらの操作は ‘default’ プロファイルを介して通常のクエリと同じ設定を共有していました。#93905 (Arsen Muk).
system.crash_logに、さらに多くの情報を追加しました。#94112 #95857 (Miсhael Stetsyuk) 。- 実行中の非内部クエリ数を追跡するため、新しい
QueryNonInternalメトリクスを追加しました。このメトリクスはClickHouseMetrics_QueryNonInternalとして公開され、非内部クエリにのみ適用されるmax_concurrent_queries制限に対して、運用担当者がクエリの同時実行数を監視するのに役立ちます。#94284 (Ashwath Singh). RuntimeDataflowStatisticsCacheUpdaterで、compact パーツ内のカラムに対する入力バイトの統計情報収集をサポートしました。#94626 (Nikita Taranov).- Keeper の設定不備によってクラスターの構築に失敗するケースを検出するチェックを追加しました。#60932 をクローズします。#94682 (Konstantin Bogdanov)。
- partの読み込み時におけるJSONプレフィックスのデシリアライゼーションを改善しました。#94848 (Pavel Kruglov) 。
- 書き込み処理を完全なINSERTパイプラインを使用するようにリファクタリングし、ターゲットテーブル上のmaterialized viewがトリガーされるようにしました。 #94890 (Kai Zhu) 。
- 検索対象のカラムに索引がある場合にのみ、ベクトル類似度検索のプラン最適化を適用するようにしました。 #94998 (Eduard Karacharov).
- ユーザー認証の前に合計メモリ制限を確認し、合計制限が許容値を超えている場合は
(total) memory limit exceededをスローします。#95003 (Nikolai Kochetov). throw_on_unmatched_row_policies設定オプションが追加されました。このオプションを有効にすると、ユーザーが行ポリシーの設定されたテーブルにクエリを実行した際、そのユーザーに適用される行ポリシーが1つもない場合に例外がスローされます。これにより、アクセス制御の設定ミスによって全行が返されるという曖昧な挙動を防げます。#95014 (Vitaly Baranov).- Unity Catalog を使用する長時間実行されるクエリで、S3 アクセストークンを動的に更新できるようになりました。これにより #93981 がクローズされました。#95069 (Konstantin Vedernikov).
- ClickHouse が
memory_worker_decay_adjustment_period_msミリ秒の間、継続的にメモリ逼迫状態にある場合、jemalloc のダーティページ減衰を無効にします。ClickHouse が同じ時間だけ通常状態で動作している場合は、jemalloc のダーティページ減衰を再度有効にします。#95145 (Antonio Andelic). - S3Queue で、s3Queue の
keeper_path設定を使用する補助的な Zookeeper サポートを追加。#95203 (Diego Nieto) 。 - TTL の drop パーツマージで
max_parts_to_merge_at_onceを適用するようにしました。 #95315 (Kseniia Sumarokova)。 - 物理的な接続を反映するため、query_log に
connection_addressとconnection_portを追加しました (proxy 経由で接続され、auth_use_forwarded_address=1 の場合、addressとportは置き換えられます) 。#95471 (Yakov Olkhovskiy) 。 - クエリ条件cacheにおける誤ったメモリ使用量の計上を修正しました。主な問題は、複数の文字列 (part_name、テーブルID、SQL条件全体など) で構成されるcacheキーが考慮されていなかったことです。 #95478 (Nikita Mikhaylov).
- 埋め込み configuration で起動したサーバーでは、通常の設定と同様に、Users と grants を操作し、それらを
accessdirectory に保存できるようになりました。これにより、テストがしやすくなります。さらに、埋め込み configuration と clickhouse-local で access_control_improvements がすべて有効になりました。 #95481 (Alexey Milovidov). - S3 認証のエラーメッセージを改善し、アクセス拒否時に credentials を確認するよう促すヒントを含めました。#95648 (Gerald Latkovic).
- 統計キャッシュを有効にし、キャッシュの更新間隔を300秒に設定しました。#95841 (Han Fei) 。
system.aggregated_zookeeper_logにコンポーネント名を追加しました。#95882 (Antonio Andelic) 。system.tablesからDeltaLakeテーブルをクエリする際、オブジェクトストレージの読み取りをスキップするようにしました。 #95899 (Antonio Andelic).compatibility設定が26.2以上の場合、デフォルトでenable_max_bytes_limit_for_min_age_to_force_mergeを有効化しました。#95917 (Christoph Wurm).- Delta Lake が macOS で利用可能になりました。#95979 を解決しました。#95985 (Alexey Milovidov) 。
- 以前のバージョンでは、UPDATE および RENAME COLUMN を含む競合する ALTER 式を組み合わせると、適切な例外ではなく論理エラーがスローされていました。#70678 を修正しました。#96022 (Alexey Milovidov).
- すべての ClickHouse アプリケーションのヘルプ出力を改善し、いくつかの修正を加えるとともに
--no-sudoオプションを追加しました。これは、Ilya Yatsishin による #58244 の続きです。#96025 (Alexey Milovidov) 。 - 他のすべての距離関数にはすでにこの形式のエイリアスがあるため、
cosineDistanceのエイリアスとしてdistanceCosineを追加しました。#96065 (Raufs Dunamalijevs) 。 with_dataKeeper 拡張機能のサポートを追加し、Database Replicated におけるテーブルのフェッチを改善しました。#96090 (Nikolay Degterinsky) 。- chdig を v26.2.1 に更新 (新機能の追加および MacOS 対応) 。#96113 (Azat Khuzhin) 。
numbersとprimesの filter pushdown を改善しました。ClickHouse は、正確な境界を導き出せない場合でもWHERE条件から保守的な値の範囲を導き出し、それに応じてシーケンス生成を制限できるようになりました (たとえばWHERE number % 5 < 2 AND number > 100 AND number < 300の場合、ClickHouse は 100 から 300 までの数値だけを生成してから predicate を適用します) 。これにより、範囲が限定されないスキャンを回避できます。#84853 をクローズ。#93913 をクローズ。#96115 (Nihal Z. Miaji) 。- 以前は、パース時の曖昧さを避けるため、
COMMENT句がある場合、フォーマッタはSELECTを括弧で囲んでいました。代わりに、COMMENTをAS SELECTの前に出力することで、括弧を使わずに曖昧さを解消するようになりました。 #96293 (Alexey Milovidov). allow_impersonate_user設定は、単独のサーバー設定ではなく、access_control_improvementsセクション内に配置されるようになりました。#96451 (Vitaly Baranov) 。core_dump.size_limit設定をホットリロード可能にし、設定変更を反映するためにサーバーを再起動しなくても済むようにしました。#96524 (Miсhael Stetsyuk) 。- ソケットタイムアウト時の CPU およびリアルタイムプロファイラの相互運用性を改善しました。#96601 (Sergei Trifonov).
- DROP COLUMN mutation の直後に ADD COLUMN を短時間で実行した場合に、削除済みデータが復活するのを防ぎます。 #96713 (Alexey Milovidov).
system.instrumentationのfunction_idの型を LowCardinality(Int32) から Int32 に変更。#96726 (Copilot)。- ミューテーションの同期的な待機で、クエリのキャンセルや時間制限が反映されるようになりました。#96756 (Alexey Milovidov).
- delta-kernel のログを変更できるようにするシステムコマンド
SYSTEM RELOAD DELTA KERNEL TRACING <level>を追加しました。これはデバッグ時に役立つ場合があります。#96763 (Kseniia Sumarokova). - IP アドレスファミリーに基づくフィルタリング、つまり
dns_allow_resolve_names_to_ipv4/ipv6設定は、DNS cache が無効になっている場合でも適用されます。 #96810 (c-end). - jemalloc のイントロスペクションを改善。 #96840 (Azat Khuzhin).
- システムテーブルにクエリを実行した際に、
/playWeb UI でQUERY_CACHE_USED_WITH_SYSTEM_TABLEがスローされる問題を修正しました。#96869 (Alexey Milovidov). - Web UI を改善: 実行中のクエリであることがわかるように favicon を変更し、補助クエリ (database と table の読み込み) で発生した error を黙って無視せず表示するようにしました。Closes #85055. #96883 (Alexey Milovidov).
/playUI の左パネルをクリックして、データベース一覧の表示/非表示を切り替えられるようにしました。#96884 (Alexey Milovidov) 。DROP DATABASEは、データベースにロード時の依存関係を持つテーブル (例:joinGetを使用するDistributedテーブル) が含まれている場合に、依存関係の逆順でテーブルを削除するようになり、クラッシュ安全性が向上しました。#97057 (Alexey Milovidov).- 無効な YAML がスキップされないよう、yaml-cpp を更新しました。#97333 (Azat Khuzhin) 。
play.htmlのサイドバーでテーブルの取得中に読み込みインジケーターを表示するようにしました。#97531 (Alexey Milovidov) 。- 組み込みの Web UI (play.html) に、生のクエリ結果をクリップボードにコピーするボタンを追加しました。 #97532 (Alexey Milovidov).
- クエリ難読化ツール (
clickhouse-format --obfuscate) を修正し、より多くのケースで解析可能な SQL を生成できるようにしました。#97584 (Alexey Milovidov) 。
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- Enum の要素を拡張するなどのメタデータのみの ALTER の後、プロジェクションを用いた集約の最適化で例外が発生する場合があります。#84143 (Alexey Milovidov) 。
- materialized view は、作成されたデータベースを実行コンテキストとして使用するようになりました。これは次のことを意味します。 - view の SELECT クエリで参照される名前については、明示的なデータベース修飾を省略できます - 明示的なデータベース修飾が指定されていない場合は、materialized view が作成されたのと同じデータベースが使用されます。 #88193 (Dmitry Kovalev).
- ON CLUSTER 使用時の CREATE USER の認証方法におけるクエリパラメータの置換を修正しました。認証方法内のクエリパラメータ (例: password) が置換されず、リモートノードで UNKNOWN_QUERY_PARAMETER エラーが発生していました。#92777 (xiaohuanlin).
has、mapContainsKey、mapContainsValue関数におけるテキスト索引解析の不整合を修正しました。これまでは、これらの関数を使用するクエリで、式がテキスト索引を使って評価されるかどうかによって、結果が異なることがありました。 #93578 (Anton Popov).- スタックのアンワインド中に
dropReplicationSlotが例外を送出した場合、MaterializedPostgreSQLデータベースにテーブルをアタッチするとクラッシュする問題を修正しました。#96871 (Alexey Milovidov). - 同じファイルを巡って競合するバックアップを多数同時実行すると、サーバーがクラッシュする可能性がありました。#93659 (Alexey Milovidov).
- 並列レプリカを使用するクエリおよび non-MT テーブルとの JOIN に関する問題を修正しました。#92056 をクローズします。#93902 (Igor Nikonov).
- 名前にドットを含む Iceberg のカラムで、値が NULL として返される問題を修正しました。#94335 (Mikhail Koviazin) 。
stringJaccardIndexUTF8における UTF8 文字列の処理を修正し、パフォーマンスを改善しました。#94613 (Joanna Hulboj) 。WITH FILL STALENESSで発生しうるオーバーフロー (UB や無限ループの原因となるもの) を修正しました。大きな値の飛びによって発生しうる無限ループを修正しました。旧アナライザのサポートを追加しました (主にストレステスト向け) 。#94663 (Azat Khuzhin).- ホスト名が複数のアドレスに解決され、リモートのレプリカがフリーズした際に、分散クエリがハングする可能性がある問題を修正しました。 #94726 (c-end).
- 複数のテーブル式を結合する際に、左端のテーブル式が
-Clusterテーブル関数である場合に不正な結果が返される問題を修正しました。#89996 を解決しました。#94748 (Konstantin Bogdanov) 。 toWeek、toYearWeek、toStartOfWeek、toLastDayOfWeek、toDayOfWeekを含む述語における主キーおよびスキップ索引のプルーニングの不具合を修正し、LowCardinality(String)を使用した有効なクエリでこれらの関数の一部が例外を発生させる問題も修正しました。#94816 (Nihal Z. Miaji).- SQL Security を持つビューに対する
ATTACHクエリで、不要に権限チェックをスキップしていた処理を削除しました。これにより、必要なアクセス権を検証せずに definer 付きのビューをアタッチした場合に起こり得る権限昇格を防止します。#94865 (pufit). ReplicatedMergeTreeの起動時に、delete_tmp_*ディレクトリが並行して削除されることで発生していたクラッシュを修正しました。#94892 (myeongjun).- materialized view を持つ Iceberg table への
INSERTで deduplication 情報が失われて例外が発生していた問題を修正しました。#94938 (Daniil Ivanik) 。 SYSTEM DROP QUERY CACHE TAG 'TAGNAME' ON CLUSTER <CLUSTERNAME>を実行すると、クラスター上のcache全体が削除されてしまう不具合を修正しました。#94978 (Rory Crispin).- Vertical merges 後も一定の索引粒度 (use_const_adaptive_granularity) を維持するようにしました (Nested の修正を含む v2 および一般的なケース) 。 #95013 (Azat Khuzhin).
- [ClickHouse/ClickHouse#82764](https://github.com/ClickHouse/ClickHouse/pull/82764) の後、バージョン26.1におけるファイルシステムキャッシュの競合状態を修正しました。#95042 (Kseniia Sumarokova).
- clickhouse-client での KILL QUERY およびクエリのキャンセル (Ctrl+C) による postgresql() テーブル関数のキャンセル処理を修正しました。 #95136 (Roman Vasin).
- 複数の JOIN で
USING句を使用した場合の、ソーステーブル由来の修飾付きカラムに対する型推論を修正しました。以前は、そのカラムが後続の JOIN に関与していない場合でも、基になるソースカラムの型が誤って共通スーパータイプに更新されていました (たとえばSELECT t2.a FROM t1 LEFT JOIN t2 USING (a) LEFT JOIN t3 USING (a)では、t2.aカラムが使われるのは最初の JOIN のみなので、その型はt1.aとt2.aのスーパータイプであるべきであり、t3.aは含まれません) 。この問題により、関数が実際の実行プランに現れるカラム型とは異なる型を想定した場合、論理エラーやクラッシュが発生する可能性がありました。#95157 (Vladimir Cherkasov). - manifest の .avro リストおよびファイルの内容を取得する際、カラム変換が 1 回だけ行われるようにしました。#95164 (Daniil Ivanik).
- 過剰なメモリ使用量や誤ったカラム STATISTICS を招く可能性があった、JSONカラムサイズの誤計算を修正しました。 #95207 (Azat Khuzhin).
- 論理更新後に大きなパッチパートを適用する際、メモリ使用量の計上が不正確になる問題を修正しました。従来は、大きなパッチパートを適用するとメモリ使用量が過大になり、OOMキラーによってサーバープロセスが強制終了されることがありました。 #95231 (Anton Popov).
max_parallel_replicasを使用する分散クエリが、索引解析中にローカルレプリカへフォールバックした際に、誤った結果を返したり例外が発生したりする可能性のある未定義動作を修正しました。#95263 (Azat Khuzhin).group_by_overflow_modeがanyに設定されている場合の、sumおよび時系列におけるスパースなカラムの集約を修正しました。 #95301 (Mikhail Koviazin).plain_rewritableディスクポリシーで、メタデータファイルの unlink の途中にネットワークエラーが発生するとストレージが不整合な状態に陥る可能性があった、信頼性の問題を修正しました。#95302 (Mikhail Artemenko).- Iceberg では Date を Date32 に置き換えました。 #95322 (Konstantin Vedernikov).
redisテーブル関数の password 引数は、今後、logs およびシステムテーブル (例:query_log) でマスクされるようになりました。#95325 (János Benjamin Antal) 。- テーブルに対する分散クエリの実行中に、そのテーブルが削除または変更され、例外や誤った結果を引き起こす可能性があった不具合を修正しました。 #95356 (Azat Khuzhin) 。
- 分散クエリで負の
LIMIT/OFFSETを使用した一部のケースで発生していた論理エラーを修正しました。#95357 (Nihal Z. Miaji) 。 - ssh を使用して接続する際に、clickhouse-client がパスワードを 2 回求める不具合を修正しました。#95372 (Isak Ellmer) 。
- ストレージ S3(Azure)Queue におけるデータ競合を修正。#95385 (Kseniia Sumarokova).
- prewhere 内のラムダ式が原因で発生していた prewhere フィルタのエラーを修正しました。#95395 (Xiaozhe Yu) 。
optimize_syntax_fuse_functionsを修正し、集約引数がNullableの場合はsum/count/avgをsumCount()に書き換えないようにしました。#95390 を修正。#95441 (Nihal Z. Miaji).- キャンセル時に分散クエリでクラッシュする可能性を回避しました。#95466 (Aleksandr Musorin) 。
- S3(Azure)Queue engine からのストリーミングにおける重複排除の問題を修正しました。#95467 (Kseniia Sumarokova).
- 分散クエリにおいて、初期ユーザーに割り当てられた行ポリシーの更新に関する不具合を修正しました。#95469 (Vitaly Baranov) 。
- plain_rewritable 上の暗号化ディスクに対する判定を修正 (
It is not possible to register multiple plain-rewritable disks with the same object storage prefixが発生する可能性がある問題を修正) 。 #95470 (Azat Khuzhin). mergeTreeProjectionテーブル関数ではアクセスチェックが抜けていたため、テーブルに対する SELECT 権限を持たないユーザーでも (テーブル関数に対する権限があれば) 、そのプロジェクションからデータを読み取れていました。この修正では、mergeTreeIndexとmergeTreeAnalyzeIndexesにすでに実装されているものと同じアクセスチェックが追加されます。#95480 (Alexey Milovidov) 。- Dynamic/JSON 型の動的サブカラムから size サブカラムを読み取る際に発生する可能性のある論理エラーを修正しました。 #95573 (Pavel Kruglov) 。
- #94262で導入された (実験的な) ゼロコピー・レプリケーションの回帰不具合を修正しました。この不具合では、他のレプリカが共有パーツの取得を完了する前に、そのパーツが削除される可能性がありました。#95597 (filimonov) 。
- JSON 配列に
tupleElementを適用した際に発生するクラッシュを修正しました。#95581 をクローズ。#95647 (Pavel Kruglov). - USING を伴う JOIN の VALUES 句内で、ラムダ関数の中でマッチャー (
*) を使用した際に発生する論理エラー例外を修正しました。#93675 をクローズしました。#95661 (Vladimir Cherkasov) 。 - 分散 DDL の完了待機中に Replicated database を同時に削除した場合に発生していた、
There was an error: Cannot obtain error messageという論理エラーを修正しました。#95539。#95664 (Alexander Tokmakov). transform_null_inが有効な場合に、IN関数がNULL値に対して誤った結果を返す不具合を修正しました。#65776 をクローズしました。#95674 (Nihal Z. Miaji).- 設定
cast_keep_nullableが有効な場合、CASTで LowCardinality Nullable 型が正しく処理されるようにしました。#95670 を修正しました。#95747 (Alexey Milovidov). - パーティション化された Delta Lake データのまとめ処理を修正。 #95773 (Kseniia Sumarokova).
- ランタイムフィルタにおけるNullableなJOINカラムのレースコンディションを修正しました。 #95775 (Hechem Selmi).
USINGカラムの型がテーブルと SELECT リストで異なる場合に、matcher (*、table.*) およびanalyzer_compatibility_join_using_top_level_identifierを含むクエリで発生する可能性のある論理エラーを修正しました。#90477 をクローズしました。#95808 (Vladimir Cherkasov).- タスクのスケジューリング中にエラーが発生した際に例外を引き起こす可能性があった、並列スレッドプール処理 (バックアップ、集約、分散クエリ) におけるメモリ安全性の不具合を修正しました。 #95818 (Raúl Marín).
- 削除対象のワークロードを使用するクエリと同時実行中に DROP WORKLOAD を実行した際に発生するクラッシュを修正しました。#95856 (Alexey Milovidov) 。
- 多数のデータベースに対して限られた権限しか持たないユーザーがシステムテーブルにクエリを実行した際の性能低下を修正しました。#89371 をクローズしました。#95874 (pufit).
- ネストしたパスを持つ JSON に対する tupleElement の実行を修正しました。これまでは誤ったクエリ結果につながる可能性がありました。 #95907 (Pavel Kruglov).
- 空のMergeTreeテーブルに対して
directJOINアルゴリズムを使用した際に発生する可能性のあったNOT_SUPPORTEDエラーを修正しました。 #95935 (Vladimir Cherkasov). - クライアントが設定の別名を候補表示したり自動補完したりしない問題を修正し、#92190 をクローズしました。#95945 (phulv94).
- system.asynchronous_metric_log の event_date を修正。#95947 (Raúl Marín) 。
- JSON data type における skipping path を修正しました。従来は
JSON(SKIP path)を使用すると、pathをプレフィックスに持つすべての JSON キーがスキップされ、"pathpath"のようなキーまで対象になっていたため、insert時にそれらのパスでデータが失われる可能性がありました。現在は修正され、"path"キーのみがスキップされます。 #95948 (Pavel Kruglov). - 不明なプロジェクションを含むパートは、永久に失われたものとしてマークされるべきではありません。 #95952 (Mikhail Artemenko).
Nullable(String)キーを持つJointable で、空文字列がNULLになってしまう問題を修正。#71414 をクローズ。#96002 (Alexey Milovidov).- これで、PostgreSQLエンジンが
BOOLEAN[]を正しく読み取れるようになりました。#72754 を修正しました。#96006 (Alexey Milovidov) 。 - 空のファイルを読み取る際の
ProtobufListフォーマットを修正しました。#70059 をクローズしました。#96007 (Alexey Milovidov). - 空のテーブルで
ProtobufListフォーマットがゴーストレコードを生成してしまう問題を修正。#72596 をクローズ。#96010 (Alexey Milovidov). - 型推論を伴う、分散クエリおよび PREWHERE の特殊なケースで発生する、
UInt64とInt32間のif関数の型不一致を修正しました。#70017 をクローズします。#96012 (Alexey Milovidov). Bool型を含むJITコンパイル済みクエリを修正しました。 #96013 (Alexey Milovidov).- SQLite の TEXT カラムから UUID カラムを読み取る際の論理エラーを修正しました。#71263 をクローズしました。#96016 (Alexey Milovidov).
- SQLite engineにおける
DateTime、Date、UUID、およびその他の型の変換を修正しました。#73481 をクローズします。#96017 (Alexey Milovidov). - 外部データベース (SQLite および PostgreSQL) へのクエリで、
FixedStringの値が誤ってエスケープされていました。#73519 をクローズします。@jh0x と共同で作成。#96019 (Alexey Milovidov). - PRECEDING オフセットが大きい場合に WindowTransform で発生するアサーション失敗を修正しました。#75852 をクローズしました。#96026 (Alexey Milovidov).
- 同じパラメータ名を使用していても異なる値を含む同時実行の非同期 INSERT で、データ破損が発生する可能性がある不具合を修正しました。 #96035 (Seva Potapov) 。
- global profiler の周期 (
global_profiler_real_time_period_nsおよびglobal_profiler_cpu_time_period_nsで制御) を修正しました。設定した値ではなく切り捨てられた値が使用されていたため、profiler が意図した以上に頻繁に起動していました。#96048 (Antonio Andelic) 。 - 以前は、position delete 用の Iceberg マニフェストファイル内で、reference data file がエントリとして存在していても NULL の場合、対応する data files の正しい境界値を取得できませんでした。この PR でこのバグを修正しました。#96061 (Daniil Ivanik) 。
- デフォルトロールの取り消しに関する不具合を修正しました。#96103 (Vitaly Baranov) 。
use_primary_keyが無効で、かつ索引を利用する条件の論理和が非常に多いというまれな条件の組み合わせで発生する、索引解析における use-after-free を修正しました。#96112 (Alexey Milovidov) 。Gorillaコーデックで、明示的に指定されたサイズがデータ型のサイズと一致せず、かつバッファサイズが小さすぎる場合に発生するリグレッションを修正しました。以前のバージョンでは、伸長時に例外が発生していました。#78253 をクローズします。#96118 (Alexey Milovidov).- あるDictionaryが、それを再帰的に参照するMergeテーブルを参照している場合に、そのDictionaryの読み込み時に発生するデッドロックを回避しました。Closes #78360. #96120 (Alexey Milovidov).
- MySQL や JODA スタイルなどの非固定幅フォーマッタを使用した
formatDateTimeでの未初期化の値の使用を修正しました。#96133 (Alexey Milovidov) 。 use_const_adaptive_granularityとindex_granularity_bytesの設定の組み合わせ (つまり「非適応粒度」) により、読み取る行数の計算が誤り、例外が発生していました。#96143 (Alexey Milovidov) 。- S3 や Azure などのオブジェクトストレージ上のファイルライクなテーブルに対して無効な ALTER UPDATE mutation を実行すると、nullptr のデリファレンスが発生する可能性がありました。#92994 をクローズしました。#96162 (Alexey Milovidov).
- 部分的な権限取り消し時に
AccessRights::containsが誤った結果を返す問題を修正しました。 #96170 (pufit). - 誤ったクエリ結果を引き起こす可能性があった、CTE の folded constants におけるクエリ条件 cache のハッシュ衝突を修正しました。#96060 をクローズしました。#96172 (Alexey Milovidov).
- ProcessList で発生する可能性のあるデッドロックを修正しました。これは、キャンセルチェッカーにタスクを追加しているタイミングでメモリオーバーコミットトラッカーが作動すると、ロック順序の逆転が起こり得るためです。 #96182 (Antonio Andelic) 。
- 複数の INNER JOIN と組み合わせた外部結合 (LEFT、RIGHT、または FULL) を含むクエリで、無効な JOIN の並べ替えにより誤った結果が返される不具合を修正しました。外部結合の ON 条件が、先に結合された複数のテーブルのカラムを参照している場合、オプティマイザがすべてのテーブル依存関係を考慮できず、JOIN を誤った順序に並べ替えてしまい、その結果、一部の行が欠落することがありました。Close #95972. #96193 (Vladimir Cherkasov).
- テーブルに統計情報が定義されていない場合、ClickHouse はそれらを読み込もうとしないようにしました。これにより、統計情報ファイルが存在するかどうかを確認するためのオーバーヘッド (100ms 超) を回避できます。 (issue #96068) 。#96233 (Han Fei) 。
optimize_syntax_fuse_functionsを修正し、集約引数がLowCardinality(Nullable)の場合はsum/count/avgをsumCount()に書き換えないようにしました。#95390 をクローズ。#96239 (Nihal Z. Miaji) 。- 一部のケースで、
not INおよびnot has関数で発生していた誤ったパーティションプルーニングを修正しました。#96241 (Nihal Z. Miaji) 。 - ベクトル類似度索引での
stack-use-after-scopeを修正しました。 #96259 (Alexey Milovidov). - クエリの前にSQLコメントがある場合に、テストランナーが error hint comments を認識しない問題を修正しました。#96336 (Yakov Olkhovskiy).
- テーブルの主キーが Nullable で、クエリで第1引数が定数の
coalesce関数を使用している場合に発生する KeyCondition の論理エラーを修正しました。 #96340 (Alexey Milovidov). GROUPING SETS、group_by_use_nulls、および内部にLowCardinalityを含むTupleデータ型の組み合わせにより、クエリパイプライン内で予期しないブロック構造が生じ、論理エラーにつながる可能性がありました。これはNullableTupleの導入後に発生したものです。#96358 (Alexey Milovidov).- 空の式
()を索引とするテーブルを作成できてしまい、無効なメモリアクセスが発生していました。#96363 (Alexey Milovidov). - 古いアナライザで、JOIN と重複する別名がある場合に発生していたクラッシュを修正しました。 #96405 (Ilya Golshtein) 。
- Variant カラムに対する誤ったインプレースフィルタリング最適化により発生していた
Nested columns sizes are inconsistent with local_discriminatorsエラーを修正。 #96410 (Alexey Milovidov). CREATE TABLE ... CLONE AS ...がソーステーブルの完全修飾名を無視する問題を修正しました。#96415 (Hasyimi Bahrudin).mysqlテーブル関数が、KILL QUERY や clickhouse-client でのクエリキャンセル (Ctrl+C) で正しくキャンセルされない問題を修正しました。#96437 (Roman Vasin).max_execution_timeの値が大きいクエリで発生する、キャンセル確認スレッドのライブロックを修正しました。#96450 (Sergei Trifonov).- 分散クエリで小数の
LIMIT/OFFSETを使用した際に、一部のケースで発生していた論理エラーを修正しました。#96475 (Nihal Z. Miaji). - ラムダ関数を含む特定の式におけるヌルポインタの逆参照を修正しました。 #96479 (Alexey Milovidov).
LowCardinalityカラムがNullableに変換された際に、誤った結果が返される不具合を修正しました。#96483 (Nihal Z. Miaji).- 存在しないカラムを参照する、または位置引数を使用する
ORDER BY句を含む Iceberg テーブルの作成時に発生するクラッシュを修正しました。#93280 をクローズします。#96484 (Konstantin Vedernikov). - Nullable のサブフィールドを持つ Tuple カラムで発生するランタイムフィルタの例外を修正しました。 #96509 (Alexey Milovidov).
PREWHEREフィルターカラムにブール値ではない UInt8 値が含まれている場合に、Parquet V3 ネイティブリーダーで発生するLOGICAL_ERROR例外を修正しました。#96594 (Alexey Milovidov) 。- メタデータの変更時にレプリケートテーブルで暗黙的に索引が再生成される問題を修正。 #96600 (Raúl Marín).
- DROP WORKLOAD のデータレースを修正しました。#96614 (Sergei Trifonov).
- パーティション化された insert により、パーティションファイル間でデータが不正に分散されることがある Iceberg table への書き込みのバグを修正しました。 #96620 (Konstantin Vedernikov) 。
- 制約付きの
CREATE TABLEにおけるheap-use-after-freeを修正しました。#96669 (Nikita Taranov). - バッファオーバーフローを防ぐため、bech32 の witness バージョンを検証するようにしました。 #96671 (Raúl Marín).
- 無効な
auth_header設定でデータレイク REST カタログを作成した場合に、system.tablesがエラーを返す問題を修正しました。#96680 (Han Fei) 。 - TTL マージ後、ブロック内のすべての行がフィルタで除外されると、
_minmax_count_projection経由でmin(timestamp)が epoch (1970-01-01) を返してしまう問題を修正しました。 #96703 (Raquel Barbadillo). - パストラバーサルを防ぎ、指定されたメタデータファイルがテーブルディレクトリ内にあることを確実にするため、
iceberg_metadata_file_path設定の検証を改善しました。#96754 (Daniil Ivanik) 。 GROUP BYで使われるVariant引数を取るifNullのクラッシュを修正しました。#96790 (Alexey Milovidov) 。table_disk=1設定が有効なテーブル間で発生していたキャッシュキーの衝突を修正しました。#96818 (Raufs Dunamalijevs) 。- 競合状態により MemoryWorker のパージ用スレッドが停止したままになる不具合を修正しました。#96819 (Antonio Andelic) 。
- Iceberg カタログで認証情報を含むデータをログ出力しないようにしました。 #96831 (Konstantin Vedernikov).
- サーバーエラー発生後の clickhouse-client の終了ステータスを修正しました。#96841 (Vitaly Baranov) 。
- CROSS JOIN を含み、並列レプリカが有効なクエリで、誤った結果が返される可能性がありました。#74337 を修正しました。#96848 (Igor Nikonov).
- 以前に同じカラムに対して論理更新が行われていた場合、
ALTER TABLE DROP COLUMNクエリが失敗する問題を修正しました。#96861 (Anton Popov). plain_rewritableオブジェクトストレージディスクへのアーカイブベースのバックアップ (.zip、.tzst) 作成時に発生するスタックオーバーフロー (クラッシュ) を修正しました。 #96872 (Alexey Milovidov).- 宛先のファイルシステムでディスクフルやその他のI/Oエラーが原因でバックアップに失敗した際に、サーバーがクラッシュする問題を修正しました。 #96873 (Alexey Milovidov).
EXCEPT ALLとINTERSECT ALLが行の重複回数を無視し、それぞれのDISTINCT版と同様に動作してしまう問題を修正しました。#96876 (Alexey Milovidov).- 互換性のない型で
indexOfAssumeSortedを呼び出したときに発生するstd::terminate例外を修正しました (例:IPv4配列に対して整数の検索値を指定した場合) 。#96877 (Alexey Milovidov). group_by_use_nulls = 1と CUBE/ROLLUP/GROUPING SETS を使用したウィンドウ関数で発生する例外Bad cast from type DB::ColumnNullable to DB::ColumnStringを修正しました。#96878 (Alexey Milovidov) 。- JIT コンパイルされた式で
DateTimeからDateTime64への変換時に誤った結果になる問題を修正しました (たとえば、CASE/if/multiIfでDateTime型が混在する場合) 。値が適切にスケーリングされずに再解釈されていたため、式のコンパイルが有効になると誤ったタイムスタンプが生成されていました。#96879 (Alexey Milovidov). CoalescingMergeTreeで、スキップ索引の式が定数カラムを生成する場合 (例: 整数カラムに対するifNotFinite(1, c0)のbloom_filter) に発生する論理エラー例外を修正しました。 #96880 (Alexey Milovidov).- 誤って HTTP で TLS 対応のネイティブプロトコルポートに接続した場合に表示されるエラーメッセージ内の誤ったポート番号を修正しました。#96881 (Alexey Milovidov).
- CTEやサブクエリで、サブクエリごとの
SETTINGSがfileのようなテーブル関数に適用されない不具合を修正しました。#96882 (Alexey Milovidov). - X509 証明書の読み取り時に発生する BIO オブジェクトのメモリリークを修正しました。 #96885 (Alexey Milovidov).
- 具体的な値が必要な箇所 (たとえば
arrayFoldのアキュムレータ引数) にラムダ式が渡された場合に、クエリアナライザでLOGICAL_ERROR例外が発生する問題を修正しました。 #96892 (Alexey Milovidov). - 複雑にネストされた型 (Nullable Enum 値を持つ Map を含む Nullable Tuple の Array) をキャストする際に発生する
ColumnNullable is not compatible with original例外を修正しました。#96924 (Alexey Milovidov). - 分片化された
HASHEDDictionary の並列ロードにおける race condition を修正し、まれに一部の行が読み込まれないことがある問題を解消しました。 #96953 (Alexey Milovidov). REPLACE PARTITIONとバックグラウンドミューテーションの間で発生する競合状態を修正し、置換後に古いデータと新しいデータの両方が見えてしまうことがある問題を解消しました。 #96955 (Alexey Milovidov).- INNER JOIN および WHERE 句と組み合わせて使用した際に
arrayJoin関数が重複した行を生成する問題を修正しました。これは、部分的な述語プッシュダウン最適化によって、arrayJoinを含むフィルタが誤って JOIN の下にプッシュダウンされていたことが原因です。#96989 (Alexey Milovidov). BlockIO::operator=がquery_metadata_cacheを move しないことが原因で発生していたclearCachesのクラッシュ (SEGFAULT) を修正しました。これにより、cache されたストレージスナップショットが早期に破棄され、MergeTreeDataストレージで use-after-free が発生していました。#96995 (Alexey Milovidov).ifまたはtransform関数がNullable(String)を返す場合 (例:GROUP BY ... WITH CUBEでgroup_by_use_nulls = trueのとき) に、IfTransformStringsToEnumPassで発生するアサーション失敗を修正しました。#97002 (Alexey Milovidov).INSERT ... SELECTでUNION ALLおよびJOINを使用した際に、block をまとめる処理の後で定数文字列カラムに誤った値が入ることがあり、その結果不正なデータが書き込まれる問題を修正しました。#97019 (Hasyimi Bahrudin) 。ALTER TABLE MODIFY COLUMNによってカラムの型が変更された後、カラム STATISTICS の構築時に発生するassert_cast例外 (またはリリースビルドでのサイレントなデータ破損) を修正しました。 #97027 (Alexey Milovidov).- Azure Blob Storage、SSHプロトコル、およびArrow Flightインターフェイスでの未初期化メモリの読み取りを修正しました。 #97053 (Alexey Milovidov).
- 索引が、ROW POLICY/PREWHERE および FINAL を含むクエリの結果に影響していたケースを修正しました。#97076 (Yarik Briukhovetskyi).
MergeTreeテーブルにおけるREPLACE PARTITIONとバックグラウンドミューテーションの間に残っていた race condition を修正し、古いデータが再び現れる可能性を解消しました。#97105 (Alexey Milovidov).- エイリアスカラムを含む暗黙的インデックスを修正し、作成前に完全な検証を行うようにしました。 #97115 (Raúl Marín).
arrayROCAUCのように const 引数が必要な関数におけるFunctionVariantAdaptorの論理エラーを修正しました。#97116 (Bharat Nallan).PartCheckThreadが、すでにミューテーション適用済みのパーツに対するGET_PARTを再度キューに追加し、parts_to_doに実体のないエントリが残ることでミューテーションが停滞する問題を修正しました。#97162 (Alexey Milovidov).ORDER BY ... LIMITを含むサブクエリのクエリプランにおける行数推定を修正しました。これにより、オプティマイザが最適でない JOIN 順序を選択する可能性がありました。 #97193 (Alexander Gololobov).- Variant カラムを扱う関数が
Nothing型を返した際にFunctionVariantAdaptorで発生するLOGICAL_ERROR例外を修正しました。これは、UNION ALLクエリ内の空の配列で発生することがあります。#97213 (Alexey Milovidov). - 同時アクセス時に例外を引き起こす可能性があった、S3 のマルチパートコピー処理 (例: S3 への
BACKUP/RESTORE) 中のデータ競合を修正しました。#97227 (Azat Khuzhin). WHERE句内のarrayJoinがJOINの両側のカラムを参照している場合に発生するLOGICAL_ERROR例外を修正しました。#97239 (Alexey Milovidov).- PREWHERE を伴う Tuple 内のスパースな
Nullable(String)で、.sizeサブカラムの読み取り時に発生するLOGICAL_ERROR例外を修正しました。 #97264 (Alexey Milovidov). LazyMaterializingTransformで、非アダプティブインデックス粒度 (index_granularity_bytes = 0) のテーブルをORDER BY ... LIMITで読み取る際に発生する例外 “lazy chunk の行数が offsets の数と一致しない” を修正しました。#97270 (Alexey Milovidov) 。SYSTEM RESTART REPLICAで、テーブルの再作成が ZooKeeper 以外の例外 (たとえばメモリ制限) で失敗した場合に、データベースからテーブルが消失し、DatabaseReplicatedでメタデータダイジェストの不一致が発生する問題を修正しました。 #97276 (Alexey Milovidov).system.merge_tree_settingsのフィールドreadonlyが、特定の MergeTree 設定 (例:index_granularity) が無条件で readonly であることを正しく反映するようになりました。 #97277 (Robert Schulze).- データなしでストレージのスナップショットが作成された場合に、
MergeTreeテーブルでのcount()最適化中にクラッシュする問題を修正しました。#97281 (Pablo Marcos). - スタックトレースのデバッグ情報から関数名を解決する際に発生する可能性のあるクラッシュを修正しました。 #97294 (Azat Khuzhin).
- analyzer_compatibility_join_using_top_level_identifier と ALIAS カラムに関する論理エラーを修正しました。#96228 をクローズしました。#97297 (Vladimir Cherkasov).
QUALIFY句でテキスト索引付きのカラムを使用した際にapplyOrderで発生するLOGICAL_ERROR例外を修正しました。#97313 (Alexey Milovidov).- システムテーブル
system.functionsで、内部関数のcategoriesが''ではなく'Internal'と表示されるようになりました。#97315 (Robert Schulze). - RIGHT JOIN の連鎖と有効化された並列レプリカを使用するクエリで、誤った結果が返される可能性がありました。この問題を修正しました。#74341。#97316 (Igor Nikonov).
- テーブル名が変更された場合に、リフレッシャブルmaterialized viewやその他のシナリオで発生することがあった、誤った
TABLE_UUID_MISMATCHエラーを修正しました。 #97323 (Azat Khuzhin). - 遅延バックアップのバッチ処理で、ダングリングしたストレージポインタに対するuse-after-freeが原因で発生していた
StorageKeeperMapバックアップのセグメンテーションフォルトを修正しました。 #97336 (Alexey Milovidov). mutations_execute_subqueries_on_initiatorが有効な場合の、ALTER UPDATE/DELETE内でスカラー サブクエリを含むexists関数を修正しました。スカラー サブクエリが誤って評価されていたため、エラーが発生したり、次回のサーバー再起動時にテーブルを読み込めなくなる破損した mutation コマンドが生成されたりする可能性がありました。#97347 (Kirill Kopnev) 。- LowCardinality 型を含む Variant カラムと NULL を比較した際に発生する論理例外
Unexpected return type from equals. Expected Nullable(UInt8). Got Const(LowCardinality(Nullable(UInt8)))を修正しました。#97379 (Alexey Milovidov). - 分片クエリキャッシュが有効な状態で
EXCHANGE TABLESを並行実行した際に発生し得る競合状態を修正しました。 #97411 (Konstantin Vedernikov). - 外側の
Tupleラッパーのnullable_sourceによって、変換後の配列カラムが不一致なカラム型に置き換えられた場合に発生する、ArrayからQBitへの変換時のLOGICAL_ERROR例外を修正しました。#97389 をクローズします。#97413 (Alexey Milovidov). - 括弧内のエイリアス付きタプルリテラルにおける AST フォーマットのラウンドトリップの不整合を修正しました。たとえば、
(('a', 'b') AS x)が誤ってtuple(('a', 'b') AS x)に再フォーマットされていました。#97418 (Alexey Milovidov). - パースの失敗により 0 行の空ブロックが生成された場合に、重複排除を伴う非同期挿入中に発生していた例外を修正しました。#97460 (Sema Checherinda) 。
- 非アダプティブインデックス粒度 (
index_granularity_bytes = 0) のテーブルをORDER BY ... LIMITで読み取る際に、LazyMaterializingTransformで発生する例外 “lazy chunk の行数が offsets の数と一致しない” を修正しました。#97482 (Alexey Milovidov) 。 - Iceberg への insert に関する設定を修正。
allow_experimental_insert_into_iceberg設定の別名を追加。#97483 (Konstantin Vedernikov). optimize_inverse_dictionary_lookup最適化がdictGet(...)の述語を書き換える際、CREATE TEMPORARY TABLE権限を持たないユーザーでACCESS_DENIEDが発生する問題を修正しました。ClickHouse はこの書き換えをスキップし、元の式を実行するようになりました。#97269 をクローズしました。#97484 (Nihal Z. Miaji).- 内部にスパースなサブカラムを持つカラム (例: スパースなシリアライゼーションプロファイルが異なる MergeTree パーツの
Tupleカラム) の処理時に、SetとMergeTreeIndexSetで発生するアサーション失敗 (デバッグ/サニタイザービルドでは例外) を修正しました。 #97493 (Alexey Milovidov). - StorageKafka2 における、use-after-free が発生する可能性のある不具合を修正しました。 #97520 (Bharat Nallan).
- 出力パスにディレクトリが含まれる場合の、
TRUNCATEおよびinto_outfile_create_parent_directories設定を使用したINTO OUTFILEの不具合を修正しました。#97549 (Alexey Milovidov) 。 - アナライザが有効な状態で、
merge()テーブル関数を介して ALIAS カラム内にラムダ式を含むテーブルをクエリした際に発生するBAD_ARGUMENTSエラーを修正しました。#97551 (Alexey Milovidov). - Keeper の zxid が 0 のときに
system.zookeeper_infoで発生する例外を修正しました。#97553 (Alexey Milovidov) 。 - キーの型が String でない場合に
ip_trieDictionary で発生する可能性がある論理エラーを修正しました。 #97555 (Bharat Nallan). - ベースの
RestCatalogで REST カタログの OAuth 認証が機能しない問題を修正しました (それまではOneLakeCatalogのような派生カタログでしか機能していませんでした) 。この不具合により、BigLake カタログの導入後、デフォルトの REST カタログが使えない状態になっていました。#97561 (Konstantin Vedernikov). - Geometry 関数 (
perimeterSpherical、areaSphericalなど) は、GeometryVariant 型に加えて、個別のジオメトリサブタイプ (Polygon、Ring、Pointなど) も受け付けるようになりました。#97571 (Alexey Milovidov). Nullable(Tuple(... Nullable(T) ...))型のサブカラムに対してisNull/isNotNullを使用した際に発生するLOGICAL_ERROR例外を修正しました。#97224 をクローズしました。#97582 (Alexey Milovidov).- 論理更新時にパッチパートを適用する際のヌルポインタの逆参照を修正しました。 #97583 (Alexey Milovidov).
BaseSettings::readBinaryは、accessor.findが返したインデックスを、未検出を示す番兵値 (つまり-1) かどうか確認せずにfield_infos[]に渡しており、その結果std::vectorの範囲外アクセスを引き起こす可能性があります。この問題は libcxx hardening によって発見されました。これはおそらく、新しいサーバーが古いサーバーに未知の設定を送信した際のクエリプランのデシリアライズ中に発生していました。文字列ベースの読み取りメソッドではすでにこれを正しく処理していましたが、readBinaryには同じチェックが欠けていました。#97585 (Miсhael Stetsyuk) 。- 一方のブランチに常に偽となる条件がある
UNION ALLクエリで、本来は何も返さないはずのブランチが誤ってデータを読み込んでしまい、不正なクエリ結果を返していた問題を修正しました。 #97620 (Bharat Nallan). - 単一カラム参照を含む
IN (col)がUNSUPPORTED_METHODエラーで失敗する不具合を修正しました。#97646 (Alexey Milovidov) 。 GROUP BY ... WITH ROLLUP/CUBE実行時に、キーにNullable(Tuple(...))内のLowCardinality(Nullable(...))が含まれる場合に発生していた logical error 例外を修正しました。#97647 (Alexey Milovidov) 。NOT (1, 1, 1)に対する AST のフォーマットの不整合を修正し、デバッグビルドでLOGICAL_ERRORが発生する可能性がある問題を解消しました。 #97653 (Alexey Milovidov).- 空の ZooKeeper トランザクションログファイルを検出した際に発生する
keeper-converterの例外を修正しました。 #97673 (Alexey Milovidov) 。
ビルド/テスト/パッケージングの改善
- ClickHouse を clang-23 (master) でビルドできるようになりました。#95578 (Alexey Milovidov) 。
- 修正:
bind_hostが設定されている場合はis_localを強制的に false にし、これをインテグレーションテストに置き換えました。#74741 のフォローアップです。#93109 #96018 (Zhigao Hong). - ストレステスト: CI におけるストレステストとアップグレードテストを修正し、
no-{build}タグを無視するようにしました。互換性のランダム化を追加しました。#94693 (Nikita Fomichev). - ビルドから parser_memory_profiler バイナリを公開しました。AST のメモリ使用量を分析するために利用できるツールです。#95826 (Ilya Yatsishin).
- 結果内のシンボルを解決した
.heap.symファイルを生成するparser_memory_profilerツールに、--symbolizeフラグを追加しました。#96477 (Ilya Yatsishin). - 結合テストでサードパーティ製のDockerイメージを特定のバージョンに固定。 #96500 (Alexey Milovidov).
OpenSSLを動的にリンクできるようにするオプションを復活させました。これは推奨されておらず、どの本番ビルドでも使われていませんが、インターネット上の愛好家向けにこの選択肢は引き続き残されています。#96506 (Govind R Nair).Coordination::OpNum向けの型別特殊化を用いることで、magic_enumの範囲を [-100, 1000] からデフォルトの [-128, 127] に縮小し、ビルド時間を短縮しました。#96632 (Alexey Milovidov) 。- ビルド時間を削減するため、Function クラスから不要な C++ テンプレートを削除しました。#96646 (Alexey Milovidov) 。
- ビルドの並列性を向上させるため、
StorageSystemLicensesの生成を configure 時ではなく構成時に行うようにしました。#96697 (Alexey Milovidov). - ライセンススキャンの並列化。 #96727 (Raúl Marín).
- SSH プロトコル対応のためのステートレスな機能テストを追加しました。 #96996 (Alexey Milovidov).
- Kafka 3.9.0 をステートレス機能テスト用のインフラストラクチャに追加し、ClickHouse Keeper を ZooKeeper として使って Kafka および Kafka2 テーブルエンジンを直接テストできるようにしました。新たに追加された 6 件のステートレステストでは、基本的な produce/consume、仮想カラム、INSERT、複数のフォーマット、破損メッセージの処理、Keeper ベースのオフセット保存をカバーしています。#96997 (Alexey Milovidov).
- PGO+BOLT で最適化した clang ツールチェーンをビルドする CI ワークフローを追加しました。 #96991 (Alexey Milovidov).
- CI では PGO 最適化済みの LLVM/Clang ビルドを使用し、ビルド速度が 20..30% 向上する見込みです。#97031 (Alexey Milovidov) 。
- glibc の数学関数を llvm-libc の実装へ置き換えました。#90151 (Konstantin Bogdanov) 。
- Boostを1.83から1.90に更新し、デバッグビルドで発生していた
devectorのアサーション失敗を修正しました。#97037 (Alexey Milovidov) 。 postgresを REL_18_1 に更新しました。#95189 (Konstantin Bogdanov) 。libexpat2.7.3 を使用するようになりました。 #95218 (Konstantin Bogdanov).OpenSSL3.5.5 を使用します。 #95345 (Konstantin Bogdanov).simdjsonv4.2.4 を使用する。 #97129 (Konstantin Bogdanov).libarchive3.8.5 を使用。 #97131 (Konstantin Bogdanov).fast_floatv8.2.3 を採用。#97133 (Konstantin Bogdanov) 。abseil-cpp20260107.1 とs2geometryv0.13.1 を使用。#97134 (Konstantin Bogdanov) 。libxml2を 2.15.1 にアップデート。 #95574 (Robert Schulze).- EOL に達した、または削除されたベースイメージを使用していた 7 個の Tier-3 統合テスト用 Docker イメージを、現在サポートされているバージョンに更新しました。#97314 (Rahul).
- TPC-DSベンチマーククエリを追加しました。#97349 (Raufs Dunamalijevs) 。
- 個別の x86 命令セット向けの cmake オプション (
ENABLE_SSSE3、ENABLE_AVX2、NO_SSE3_OR_HIGHER、ARCH_NATIVEなど) を、実行時ディスパッチシステムですでに使用されている標準的な x86-64 マイクロアーキテクチャレベルに合わせて、単一の数値オプションX86_ARCH_LEVEL(1/2/3/4) に置き換えました。#97354 (Raúl Marín) 。 FunctionBinaryArithmeticで、除算以外の演算についてはdivision_by_nullable=trueのテンプレートバリアントをインスタンス化しないようにし、コンパイル時間とバイナリサイズを削減しました。#97496 (Raúl Marín).typeid_cast.h、assert_cast.h、Context_fwd.h、IDataType.h、および各種 Column ヘッダーなどの広く参照されるヘッダーからException.hを हटし、include の影響範囲を縮小しました。#97497 (Raúl Marín) 。- ホストコンパイラのヘッダーではなく、常にバンドル版の
compiler-rtヘッダー (sanitizer および XRay インターフェイス) を使用し、デフォルトでcompiler-rtライブラリをソースコードからビルドするようにしました。#97499 (Raúl Marín) 。 long doubleを十分に利用できるプラットフォームでは、wide_integer_impl.hにboost/multiprecisionのヘッダーを含めないようにし、ビルド時間を短縮しました。#96633 (Alexey Milovidov).- LLVM コードカバレッジジョブを実装し、まずは master ブランチでのみ有効化しました。#90952 (Alexey Bakharew) 。
- リリースビルドで libcxx の高速ハードニングを有効にしました。これは主に範囲外アクセスのチェックに必要です。Performance tests の結果から、性能への目立った影響はないと見込まれます。#94757 (Miсhael Stetsyuk).
後方互換性を持たない変更
- フォーマッタ内での別名の誤った置換によって生じていたフォーマットの不整合を修正しました。これにより #82833 をクローズします。これにより #82832 をクローズします。これにより #68296 をクローズします。この変更は後方互換性に影響する可能性があります: アナライザが無効な場合、別名を参照する IN を含む一部の CREATE VIEW クエリは処理できません。この非互換性を回避するには、アナライザを有効にしてください (24.3 以降はデフォルトで有効です) 。#82838 (Alexey Milovidov).
- コーデック
DEFLATE_QPLおよびZSTD_QATは削除されました。既存のDEFLATE_QPLまたはZSTD_QATで圧縮されたデータは、アップグレード前に別のコーデックへ変換しておくことを推奨します。なお、これらのコーデックを使用するには、設定enable_deflate_qpl_codecおよびenable_zstd_qat_codecを有効にしておく必要がありました。 #92150 (Robert Schulze). system.query_log.exceptionで stderr のキャプチャを有効にし、UDF のデバッグを改善しました。これまで UDF の stderr はファイルにしか記録されず、クエリログには出力されなかったため、デバッグは事実上不可能でした。現在は stderr がデフォルトで例外をトリガーし、送出前に最大 1MB まで完全に蓄積されるようになったため、完全な Python トレースバックとエラーメッセージがsystem.query_log.exceptionに記録され、より効果的にトラブルシューティングできるようになりました。#92209 (Xu Jia).JOIN USING ()句の空のカラムリストは、現在では構文エラーと見なされます。以前は、クエリ実行時にINVALID_JOIN_ON_EXPRESSIONとして扱われる想定でした。Joinストレージとの結合など一部のケースでは、LOGICAL_ERRORを引き起こしていました。これにより #82502 をクローズします。#92371 (Vladimir Cherkasov).- JSON型では、デフォルトで SKIP REGEXP に部分一致を使用するようになりました。#79250 をクローズ。#92847 (Pavel Kruglov).
- “Allow INSERT into simple ALIAS columns” を元に戻しました (ClickHouse/ClickHouse#84154 を差し戻し) 。カスタムフォーマットでは動作せず、設定でも制御されていません。#92849 (Azat Khuzhin).
- データレイクのカタログがオブジェクトストレージにアクセスできない場合に、エラーを発生させる設定。 #93606 (Konstantin Vedernikov).
Lazyデータベースエンジンは削除され、現在は利用できません。#91231 をクローズ。#93627 (Alexey Milovidov).metric_logのtransposed_with_wide_viewモードは、バグのため使用できないことから削除されました。今後、このモードでsystem.metric_logを定義することはできなくなります。これは #78412 を部分的に差し戻すものです。#93867 (Alexey Milovidov) 。- ワークロード向けのCPUスケジューリングは、デフォルトでプリエンプティブ方式になりました。
cpu_slot_preemptionサーバー設定を参照してください。#94060 (Sergei Trifonov) 。 - 破損したパーツを防ぐため、索引ファイル名をエスケープするようにしました。この変更により、以前のバージョンで作成され、名前に非 ASCII 文字を含む索引は ClickHouse で読み込めなくなります。これに対処するには、MergeTree の設定
escape_index_filenamesを使用できます。#94079 (Raúl Marín). - フォーマット設定
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). joinGet/joinGetOrNull関数では、基になる Join table に対してSELECT権限が必要になりました。この変更により、joinGet('db.table', 'column', key)を実行するには、ユーザーに Join table で定義されたキーカラムと、取得する attribute カラムの両方に対するSELECT権限が必要です。これらの権限がない queries は、ACCESS_DENIEDで失敗します。移行するには、テーブル全体へのアクセスにはGRANT SELECT ON db.join_table TO userを、カラム単位のアクセスにはGRANT SELECT(key_col, attr_col) ON db.join_table TO userを使用して、必要な permissions を付与してください。この変更は、これまで明示的なSELECTgrants を設定していなかった、joinGet/joinGetOrNullに依存するすべての users および applications に影響します。#94307 (Vladimir Cherkasov).CREATE TABLE ... AS ...クエリではSHOW COLUMNSをチェックするようになりました。以前はSHOW TABLESをチェックしていましたが、この種の権限チェックに必要な権限としては不適切でした。#94556 (pufit).Hash出力フォーマットがブロックサイズに依存しないようになりました。#94503 (Alexey Milovidov) 。この変更により、従来のバージョンと比べて出力されるハッシュ値が変わる点に注意してください。
新機能
- ClickHouse Keeper 向けの HTTP API と内蔵 Web UI。#78181 (pufit と speeedmaster) 。
- 非同期 INSERT の重複排除が、依存する materialized view でも機能するようになりました。block_id の衝突が発生すると、元の block は block_id に関連付けられた行を除外するようにフィルタリングされ、残りの行には関連するすべての materialized view の SELECT クエリが適用されて変換されます。これにより、競合する行を含まない元の block が再構築されます。#89140 (Sema Checherinda)。materialized view が関係する場合でも、非同期 INSERT で重複排除を使用できるようになりました。#93957 (Sema Checherinda)。
- projection索引機能を簡素化し、拡張するための新しい構文とフレームワークが導入されました。これは https://github.com/ClickHouse/ClickHouse/pull/81021 のフォローアップです。#91844 (Amos Bird).
Arrayカラムでのテキスト索引のサポートを追加しました。#89895 (Jimmy Aguilar Mena).- デフォルトで
use_variant_as_common_typeが有効になり、Array内、UNIONクエリ内、およびif/multiIf/caseの分岐で互換性のない型を使用できるようになりました。#90677 (Alexey Milovidov). - 新しいシステムテーブル
zookeeper_info。 #88014 を実装しました。 #90809 (Smita Kulkarni) 。 - すべての関数が
Variant型をサポート。 #90900 (Bharat Nallan). - Prometheus の
/metricsエンドポイントに、主にバージョン情報を含むClickHouse_Infoメトリクスを追加し、詳細なバージョン情報を時系列で追跡するチャートを作成できるようにしました。 #91125 (Christoph Wurm). - Keeper に、クラスター構成を変更できる新しい4文字コマンド
rcfgを追加しました。このコマンドでは、標準のreconfigureリクエストよりも柔軟に構成を変更できます。引数にはjson文字列を取ります。TCP インターフェイスに送信するバイト列全体は、rcfg{json_string_length_big_endian}{json_string}のようになります。コマンドの例:{"preconditions": {"leaders": [1, 2], "members": [1, 2, 3, 4, 5]}, "actions": [{"transfer_leadership": [3]}, {"remove_members": [1, 2]}, {"set_priority": [{"id": 4, "priority": 100}, {"id": 5, "priority": 100}]}, {"transfer_leadership": [4, 5]}, {"set_priority": [{"id": 3, "priority": 0}]}]}。#91354 (alesapin). - 指定した区切り文字で区切られた文字列内の部分文字列の順序を反転する関数
reverseBySeparatorを追加しました。#91463 をクローズしました。#91780 (Xuewei Wang). - 挿入時のブロック生成をより細かく制御できる新しい設定
max_insert_block_size_bytesを追加しました。 #92833 (Kirill Kopnev). ignore_on_cluster_for_replicated_database設定が有効な場合、Replicatedデータベースに対してON CLUSTER句を付けた DDLクエリを実行できます。この場合、クラスター名は無視されます。#92872 (Kirill).- 関数
mergeTreeAnalyzeIndexesを実装。 #92954 (Azat Khuzhin). - 新しい設定
use_primary_keyを追加しました。falseに設定すると、主キーに基づくグラニュールのプルーニングを無効にできます。#93319 (Nihal Z. Miaji). icebergLocalClusterテーブル関数が追加されました。#93323 (Anton Ivashkin) 。- 2点間の余弦距離を近似的に計算する
cosineDistanceTransposed関数が追加されました。#93621 (Raufs Dunamalijevs) 。 - 各データパートに含まれるファイル数を表示する
filesカラムを system.parts テーブルに追加しました。#94337 (Match) 。 - 同時実行制御向けに、max-min fair スケジューラが追加されました。これは、多数のクエリが限られた CPU スロットをめぐって競合する高オーバーサブスクリプション環境で、より高い公平性を実現します。長時間実行クエリが時間の経過とともにより多くのスロットを蓄積していても、短時間実行クエリが不利になることはありません。
concurrent_threads_schedulerサーバー設定をmax_min_fairに設定することで有効になります。#94732 (Sergei Trifonov) 。 - ClickHouse client で、サーバーへの接続時に TLS SNI を上書きできるようになりました。#89761 (Matt Klein) 。
joinGet関数の呼び出しで一時テーブルをサポート。 #92973 (Eduard Karacharov).DeltaLaketable engine で削除ベクターをサポートするようになりました。 #93852 (Kseniia Sumarokova).deltaLakeClusterが deletion vectors に対応しました。#94365 (Kseniia Sumarokova) 。- データレイク向けの Google Cloud Storage のサポート。#93866 (Konstantin Vedernikov) 。
実験的機能
QBitを Experimental から ベータに昇格しました。#93816 (Raufs Dunamalijevs).Nullable(Tuple)のサポートを追加しました。有効にするにはallow_experimental_nullable_tuple_type = 1を設定してください。#89643 (Nihal Z. Miaji).- https://github.com/ClickHouse/ClickHouse/pull/84423 に続き、Paimon REST カタログをサポートしました。#92011 (JIaQi Tang).
パフォーマンス改善
- 設定
use_skip_indexes_on_data_readは、デフォルトで有効になりました。この設定により、読み込みと同時にストリーミング方式でフィルタリングできるようになり、クエリのパフォーマンスと起動時間が向上します。#93407 (Shankar Iyer). LowCardinalityカラムに対するDISTINCTのパフォーマンスを改善しました。#5917 をクローズしました。#91639 (Nihal Z. Miaji) 。distinctJSONPaths集約関数を最適化し、JSONカラム全体ではなく、データパーツから JSON パスのみを読み取るようにしました。#92196 (Pavel Kruglov) 。- JOIN へのプッシュダウンに対応するフィルタが増えました。#85556 (Nikita Taranov).
- filter が片側の入力のみを使う場合に、join の ON 条件からの push down に対応するケースをさらに拡大しました。
ANY、SEMI、ANTIjoin のサポートを追加しました。#92584 (Dmitry Novik). SEMI JOINのフィルタをプッシュダウンするために、同等の集合を使用できるようにしました。#85239 をクローズしました。#92837 (Dmitry Novik) 。- 右側が空の場合、ハッシュ結合の左側の読み取りをスキップするようになりました。以前は、最初の空でないブロックに到達するまで左側を読み取っていたため、フィルタリングや集約の負荷が高い場合には多くの処理が発生する可能性がありました。#94062 (Alexander Gololobov).
- クエリパイプライン内でデータをパーティション化するために、“fastrange” (Daniel Lemire) 方式を採用しました。これにより、並列ソートやJOINが改善される可能性があります。#93080 (Alexey Milovidov).
- PARTITION BY がソートキーと一致する場合、またはそのプレフィックスである場合のウィンドウ関数の性能を向上させました。 #87299 (Nikita Taranov).
- 外側のフィルタがビューにプッシュダウンされるようになり、ローカルノードとリモートノードの両方でPREWHEREを適用できるようになりました。#88189 を解決しました。#88316 (Igor Nikonov) 。
- より多くの関数でJITコンパイルを実装しました。#73509 をクローズしました。#88770 (Alexey Milovidov、Taiyang Li と共同) 。
FINALクエリで使用されるスキップ索引が主キーの一部であるカラム上にある場合、他のパーツで主キーの積集合を確認する追加ステップは不要となり、現在は実行されなくなりました。#85897 を解消しました。#93899 (Shankar Iyer) 。- 小数値の
LIMITおよびOFFSETに対するパフォーマンスとメモリ使用量を最適化しました。#91167 (Ahmed Gouda) 。 - Parquet リーダー V3 のプリフェッチャーで、より高速なランダム読み取りロジックを使用するように修正しました。#90890 をクローズしました。#91435 (Arsen Muk) 。
icebergClusterのパフォーマンスを改善。#91462 をクローズ。#91537 (Yang Jiang).- 定数フィルターでは仮想カラムで絞り込まない。#91588 (c-end).
- adaptive write buffers を有効にすることで、非常に列数の多いテーブルにおける wide パーツでの INSERT/merges のメモリ使用量を削減します。暗号化ディスクに対する adaptive write buffers のサポートを追加しました。 #92250 (Azat Khuzhin).
- 索引内で検索するトークン数を削減し、テキスト索引と
sparseGramsトークナイザーを用いた全文検索の性能を向上させました。#93078 (Anton Popov). - Function
isValidASCIIは、すべてASCIIの入力値で有効になるケース向けに最適化されました。#93347 (Robert Schulze) 。 - read-in-order 最適化は、WHERE 条件によって ORDER BY カラムが定数になるケースを認識し、逆順での読み取りを効率的に実行できるようになりました。これにより、
WHERE tenant='42' ORDER BY tenant, event_time DESCのようなマルチテナントクエリでは、フルソートを行わずに InReverseOrder を利用できるようになります。”. #94103 (matanper). - メモリ使用量を最適化するため、値パラメータを ASTLiteral の子ノードではなく (string, integer) のペアとして格納する Enum AST 専用クラスを導入しました。 #94178 (Ilya Yatsishin).
- 複数のレプリカでの分散索引解析。共有ストレージや、クラスター内の大量のデータで効果を発揮します。これは SharedMergeTree (ClickHouse Cloud) に適用でき、共有ストレージ上の他の種類の MergeTree テーブルにも適用可能になる場合があります。#86786 (Azat Khuzhin) 。
- 以下の場合は joinランタイムフィルタを無効化してオーバーヘッドを削減: - bloom filter でセットされるビットが多すぎる場合 - 実行時に除外される行が少なすぎる場合。 #91578 (Alexander Gololobov).
- 相関サブクエリの入力にインメモリバッファを使用し、複数回評価するのを防ぎます。#79890 の一部。#91205 (Dmitry Novik).
- すべてのレプリカが、並列レプリカ読み取り時に孤立した範囲を並行して引き取れるようになりました。これにより、負荷分散が改善され、ロングテールレイテンシが低減されます。#91374 (zoomxi).
- 外部集約/ソート/結合で、あらゆるコンテキストでクエリ設定
temporary_files_codecが適用されるようになりました。Grace Hash Join のプロファイルイベントが欠落していた問題を修正しました。#92388 (Vladimir Cherkasov). - 集約/ソート時にディスクへスピルする際のクエリのメモリ使用量検出を、より堅牢にしました。#92500 (Azat Khuzhin) 。
- 集約キーカラムについて、総行数と NDV (異なる値の数) の統計を推定します。 #92812 (Alexander Gololobov) 。
- simdcomp によりポスティングリストの圧縮を最適化しました。#92871 (Peng Jian) 。
- バケットを用いて S3Queue Ordered モードの処理をリファクタリングしました。これにより、Keeper へのリクエスト数が減り、パフォーマンスの向上も見込まれます。#92889 (Kseniia Sumarokova) 。
- 関数
mapContainsKeyLikeとmapContainsValueLikeは、それぞれmapKeys()またはmapValues()に対するテキスト索引を利用できるようになりました。#93049 (Michael Jarrett) 。 - Linux 以外のシステムでのメモリ使用量を削減しました (jemalloc のダーティページの即時パージを有効にしました) 。#93360 (Eduard Karacharov) 。
- ダーティページサイズと
max_server_memory_usageの比率がmemory_worker_purge_dirty_pages_threshold_ratioを超えた場合、jemallocアリーナを強制的にパージするようになりました。 #93500 (Eduard Karacharov). - AST のメモリ使用量を削減。 #93601 (Nikolai Kochetov).
- 一部のケースで、ClickHouse がテーブルの読み取り時にメモリ制限を守らないことが確認されていました。この動作は修正されました。#93715 (Nikita Mikhaylov).
- Keeper 拡張機能
CHECK_STATおよびTRY_REMOVEをデフォルトで有効にしました。#93886 (Mikhail Artemenko). - 対応するデータファイルをより適切に選択できるよう、Iceberg マニフェストファイルのエントリから position delete に対応するファイル名の下限・上限を解析するようにしました。 #93980 (Daniil Ivanik).
- JSON カラム内の動的サブカラムの最大数を制御するための設定が、さらに 2 つ追加されました。1 つ目は MergeTree 設定
merge_max_dynamic_subcolumns_in_compact_partで (すでに追加されているmerge_max_dynamic_subcolumns_in_wide_partと同様) 、compact パーツへのマージ時に作成される動的サブカラム数を制限します。2 つ目はクエリレベルの設定max_dynamic_subcolumns_in_json_type_parsingで、JSON データのパース時に作成される動的サブカラム数を制限します。これにより、INSERT 時の上限を指定できるようになります。#94184 (Pavel Kruglov). - 一部のケースでJSONカラムをまとめる処理をわずかに最適化しました。#94247 (Pavel Kruglov) 。
- 本番運用の経験に基づき、スレッドプールのキューサイズを引き下げました。MergeTreeからデータを読み込む前に、明示的なメモリ使用量チェックを追加しました。#94692 (Nikita Mikhaylov).
- CPU 枯渇時にスケジューラが MemoryWorker スレッドを優先するようにし、ClickHouse プロセスを致命的な脅威から保護します。 #94864 (Nikita Mikhaylov).
- jemalloc の dirty page のパージを、MemoryWorker のメインスレッドとは別のスレッドで実行するようにしました。パージに時間がかかると RSS 使用量の更新が遅れ、その結果、プロセスが OOM キルされる可能性があります。総メモリ使用量の割合に基づいて dirty page のパージを開始するための新しい設定
memory_worker_purge_total_memory_threshold_ratioを導入しました。 #94902 (Antonio Andelic).
改善
- Azure Blob Storage で
system.blob_storage_logを利用できるようになりました。#93105 (Alexey Milovidov) 。 - Local と HDFS 向けに
blob_storage_logを実装しました。S3Queueがblob_storage_logへのログ出力でディスク名以外を使用していた場合に発生するエラーを修正しました。blob_storage_logにerror_codeカラムを追加しました。ローカルでのテストを簡単にするため、テスト用の設定ファイルを分割しました。 #93106 (Alexey Milovidov) 。 clickhouse-clientとclickhouse-localで、入力中の数値リテラル内の桁区切り (千、百万など) が強調表示されるようになりました。これにより #93100 が解決されました。#93108 (Alexey Milovidov).clickhouse-clientで、等号の前後にスペースを含むコマンドライン引数をサポートしました。#93077 をクローズしました。#93174 (Cole Smith) 。<interactive_history_legacy_keymap>true</interactive_history_legacy_keymap>を使用すると、CLI クライアントで従来どおり Ctrl-R による通常検索に戻せるようになり、Ctrl-T ではあいまい検索を行えます。#87785 (Larry Snizek) 。- cache をクリアするためのステートメント
SYSTEM DROP [...] CACHEは、そのステートメントが cache を無効にするかのような誤解を招いていました。ClickHouse は現在、より意味が明確なステートメントSYSTEM CLEAR [...] CACHEをサポートしています。古い構文も引き続き利用できます。#93727 (Pranav Tiwari). EmbeddedRocksDBで、複数カラムの主キーをサポートしました。#32819 をクローズ。#33917 (usurai).- スカラー値に対して非定数の IN を使用できるようになりました (
val1 NOT IN if(cond, val2, val3)のようなクエリ) 。#93495 (Yarik Briukhovetskyi) 。 - 未サポートのため、
x-amz-server-side-encryptionヘッダーがHeadObject、UploadPart、CompleteMultipartUploadの S3 リクエストに伝播されないようにしました。#64577 (Francisco J. Jurado Moreno) 。 - S3Queue の ordered モードで Hive パーティション化の追跡に対応しました。#71161 を解決しました。#81040 (Anton Ivashkin).
- ファイルシステムキャッシュの領域予約を最適化しました。
FileCache::collectCandidatesForEvictionは、unique lock を使用せずに実行されるようになりました。#82764 (Kseniia Sumarokova). - サーバーログで複合ローテーション戦略 (サイズ + 時間) をサポートしました。 #87620 (Jianmei Zhang).
- CLI クライアントで、コマンドラインの
--no-warningsの代わりに<warnings>false</warnings>を指定できるようになりました。#87783 (Larry Snizek) 。 avg集約関数で、Date、DateTime、Time型の値を引数としてサポートしました。#82267 をクローズしました。#87845 (Yarik Briukhovetskyi).- 最適化
use_join_disjunctions_push_downは、デフォルトで有効になっています。#89313 (Alexey Milovidov) 。 - 相関サブクエリで、より多くのテーブルエンジンとデータソースの種類をサポートしました。#80775 をクローズしました。#90175 (Dmitry Novik).
- パラメーター化ビューのスキーマが明示的に指定されている場合は、それが表示されます。#88875、#81385 をクローズしました。#90220 (Grigorii Sokolik) 。
- ログが最後にコミットされた索引より前にある場合に、Keeper のログエントリの欠落を正しく処理します。 #90403 (Antonio Andelic).
- JBODボリュームでも正しく動作するよう、
min_free_disk_bytes_to_perform_insert設定を改善しました。#90878 (Aleksandr Musorin) 。 S3table engine とs3table function の named collections でstorage_class_name設定を指定できるようになりました。#91926 (János Benjamin Antal) 。system.zookeeper経由で補助 ZooKeeper への insert をサポートしました。#92092 (RinChanNOW).- Keeper向けに、新たに
KeeperChangelogWrittenBytes、KeeperChangelogFileSyncMicroseconds、KeeperSnapshotWrittenBytes、KeeperSnapshotFileSyncMicrosecondsのプロファイルイベントと、KeeperBatchSizeElementsおよびKeeperBatchSizeBytesのヒストグラムメトリクスを追加しました。 #92149 (Miсhael Stetsyuk). - 新しい設定
trace_profile_events_listを追加し、trace_profile_eventによるトレースを指定したイベント名のリストに限定できるようにしました。これにより、大規模なワークロードでも、より精密なデータ収集が可能になります。#92298 (Alexey Milovidov). - 一時停止可能な failpoint に対する SYSTEM NOTIFY FAILPOINT のサポートを追加しました。 - SYSTEM WAIT FAILPOINT fp PAUSE/RESUME のサポートを追加しました。 #92368 (Shaohua Wang).
system.data_skipping_indicesにcreation(暗黙/明示) カラムを追加しました。#92378 (Raúl Marín) 。- YTsaurus dyn tables のカラムの説明を Dictionary ソースに渡せるようになりました。#92391 (MikhailBurdukov).
- #63985 では、TLS 設定に必要なすべてのパラメータをポート単位で指定できるようにし (コンポーザブルプロトコル を参照) 、グローバルな TLS 設定に依存しなくて済むようにしました。ところが、この実装では依然としてグローバルな
openSSL.server設定セクションが存在することを暗黙的に前提としており、ポートごとに異なる TLS 設定が必要な構成とは相性がよくありません。たとえば keeper-in-server デプロイメントでは、keeper 間の通信と clickhouse client 接続向けに、それぞれ別個の TLS 設定が必要です。 #92457 (Miсhael Stetsyuk) 。 - 悪意のあるペイロードへの対策として、バイナリフォーマットでデコードできる型ノードの総数を制限する新しい設定
input_format_binary_max_type_complexityを導入しました。 #92519 (Raufs Dunamalijevs) 。 system.background_schedule_pool{,_log}に実行中のタスクが反映されるようにしました。ドキュメントを追加。#92587 (Azat Khuzhin).- 履歴に一致する項目が見つからない場合、クライアントの Ctrl+R 検索で現在のクエリを実行するようになりました。 #92749 (Azat Khuzhin).
EXPLAIN indices = 1をEXPLAIN indexes = 1の alias としてサポートしました。#92483 をクローズしました。#92774 (Pranav Tiwari).- Parquet リーダーで、Tuple または Map カラムを JSON として読み取れるようになりました。
select x from file(f.parquet, auto, 'x JSON')は、f.parquet内のカラムxの型が tuple または map であっても動作します。#92864 (Michael Kolupaev)。 - Parquet リーダーで空のタプルをサポートしました。 #92868 (Michael Kolupaev).
- Azure Blob Storage で
nativecopy が BadRequest (例:無効な block list) で失敗した場合、read-write copy にフォールバックするようにしました。これまでは、異なるストレージアカウント間でブロブをコピーする際に発生していた Unauthorized エラーに対してのみ、この処理を行っていました。しかし、“The specified block list is invalid” エラーが発生することもあります。そのため、すべてのnativecopy の失敗で read & write にフォールバックするよう、条件を更新しました。#92888 (Smita Kulkarni). - EC2 インスタンスプロファイルの認証情報を使用して多数の同時実行 S3 クエリを実行する際に発生する、EC2 メタデータエンドポイントのスロットリングを修正しました。以前は各クエリがそれぞれ独自の
AWSInstanceProfileCredentialsProviderを作成していたため、EC2 メタデータサービスへの同時リクエストが発生し、その結果、タイムアウトやHTTP response code: 403エラーを引き起こすことがありました。現在は、認証情報プロバイダーがキャッシュされ、すべてのクエリで共有されます。 #92891 (Sav). - 後方互換性を維持できるよう、
insert_select_deduplicate設定を見直しました。#92951 (Sema Checherinda) 。 - タスクのログが過剰に出力されるのを防ぐため、平均より遅いバックグラウンドタスクのみをログに記録するようにしました (
background_schedule_pool_log.duration_threshold_milliseconds=30) 。#92965 (Azat Khuzhin). - 以前のバージョンでは、一部の C++ 関数名が
system.trace_logおよびsystem.symbolsで誤って (「mangled」のまま) 表示され、demangle関数でもそれらをうまく処理できませんでした。#93074 をクローズします。#93075 (Alexey Milovidov). - リフレッシャブルmaterialized view のバックアップをスキップするためのバックアップ設定
backup_data_from_refreshable_materialized_view_targetsが導入されました。APPEND リフレッシュ戦略の RMV は常にバックアップされます。 #93076 (Julia Kartseva). #93658 (Julia Kartseva) - 関数のような負荷の高い翻訳単位では、デバッグ情報をなくすのではなく、最小限のデバッグ情報を使用するようにしました。#93079 (Alexey Milovidov).
- MinIO 固有のエラーに対応するエラーコードマッピングを実装し、AWS S3 C++ SDK に MinIO 互換性のサポートを追加しました。この変更により、AWS S3 ではなく MinIO デプロイメントを使用する場合でも、ClickHouse が MinIO サーバーのエラーを適切に処理して再試行できるようになり、セルフホストの MinIO クラスター上でオブジェクトストレージを運用するユーザーの信頼性が向上します。 #93082 (XiaoBinMu).
- シンボル化済みの jemalloc プロファイルを出力できるようになり、heap profile の生成時にバイナリが不要になりました。#93099 (Azat Khuzhin) 。
clickhouse git-importツールを復活させました。大きなコミットや不正なコミットで正常に動作しなくなっていたためです。https://presentations.clickhouse.com/2020-matemarketing/ を参照してください。 #93202 (Alexey Milovidov).- クエリログに、URLストレージのパスワードを表示しないようにしました。 #93245 (Konstantin Vedernikov).
flipCoordinatesでGeometry型をサポートしました。#93303 (Bharat Nallan) 。- SYSTEM INSTRUMENT ADD/REMOVE の UX を改善: 関数名に String リテラルを使用し、一致するすべての関数にパッチを適用できるようにし、
REMOVEで function_name を使えるようにしました。#93345 (Pablo Marcos). - マージ時の統計情報のマテリアライズを有効/無効にする新しい設定
materialize_statistics_on_mergeを追加しました。デフォルト値は1です。#93379 (Han Fei) 。 - ClickHouse で、
DESCRIBE SELECTクエリにおいてSELECTを括弧で囲まなくても解析できるようになりました。#58382 を修正しました。#93429 (Yarik Briukhovetskyi). - 一定の確率で cache の正確性チェックをランダムに行うようにしました。#93439 (Kseniia Sumarokova) 。
- JSON において、一方がリテラルでもう一方がネストされたオブジェクトである場合に、重複したパスを許可する設定
type_json_allow_duplicated_key_with_literal_and_nested_objectを追加しました。例:{"a" : 42, "a" : {"b" : 42}}。https://github.com/ClickHouse/ClickHouse/pull/79317 で重複パスに対するこの制限が追加される前に作成されたデータが存在する可能性があり、現在ではそのようなデータをさらに操作するとエラーが発生することがあります。この設定を使用すると、そのような古いデータも引き続きエラーなく使用できます。#93604 (Pavel Kruglov). - Pretty JSON では、単純型の値を個別の行に出力しないようにしました。#93836 (Pavel Kruglov) 。
alter table ... modify setting ...ステートメントが多数ある場合、5秒間ロックを取得できないことがあります。logical errorではなくtimeoutを返すようにしたほうが適切です。 #93856 (Han Fei).- 構文エラー時の過剰な出力を防止しました。この変更以前は SQL スクリプト全体が出力されており、多数のクエリが含まれている可能性がありました。#93876 (Alexey Milovidov).
- Keeper において、統計情報付きの
checkリクエストのバイトサイズを正しく計算するようにしました。#93907 (Mikhail Artemenko). - join の並べ替えで実行時のハッシュテーブルサイズの統計を使用するかどうかを制御するため、
use_hash_table_stats_for_join_reordering設定が追加されました。この設定はデフォルトで有効になっており、collect_hash_table_stats_during_joinsの既存の動作は維持されます。#93912 (Vladimir Cherkasov). - ユーザーは、
system.server_settingsテーブルでネストされたグローバルなサーバー設定 (例:logger.level) を部分的に確認できるようになりました。これは、固定された構造を持つ設定 (リスト、列挙、繰り返しなどがないもの) のみを対象としています。#94001 (Hechem Selmi). QBitが等価比較できるようになりました。#94078 (Raufs Dunamalijevs) 。- Keeper が破損したスナップショットや不整合な変更ログを検出した場合は、手動で中断したりファイルを自動的にクリーンアップしたりする代わりに、例外をスローするようになりました。これにより、手動での介入を前提とした、より安全な Keeper の動作が実現されます。#94168 (Antonio Andelic).
CREATE TABLEの失敗時に不要な残骸が残る可能性がある問題を修正しました。 #94174 (Azat Khuzhin).- パスワードで保護された TLS 秘密鍵の使用時に発生する、未初期化メモリへのアクセス (OpenSSL のバグ) を修正しました。#94182 (Konstantin Bogdanov).
- chdig を v26.1.1 に更新しました。#94290 (Azat Khuzhin) 。
- S3Queue ordered mode で、より汎用的なパーティション化をサポートしました。 #94321 (Bharat Nallan).
- 設定
allow_statistics_optimizeのエイリアスとしてuse_statisticsを追加しました。これにより、既存の設定use_primary_keyおよびuse_skip_indexesとの整合性が高まります。#94366 (Robert Schulze). - Numbers から Enums への変換時に要素が存在するかどうかを確認するための設定
input_format_numbers_enum_on_conversion_errorを有効にしました。#94384 (Elmi Ahmadov) 。 - S3(Azure)Queue の ordered mode で、追跡制限に基づいて失敗したノードをクリーンアップするようになりました (以前は、失敗済みノードと処理済みノードの両方について Unordered mode でのみ行われていましたが、今後は Ordered mode でも失敗したノードに限って行われます) 。 #94412 (Kseniia Sumarokova).
- clickhouse-local の
defaultユーザーでアクセス管理を有効にしました。clickhouse-localのデフォルトユーザーには access_management 権限がなかったため、本来は無制限であるべきにもかかわらず、DROP ROW POLICY IF EXISTSのような操作がACCESS_DENIEDエラーで失敗していました。#94501 (Alexey Milovidov). - YTsaurus の辞書およびテーブルで named collection を有効にしました。#94582 (MikhailBurdukov).
- S3 および Azure Blob Storage 向けの BACKUP/RESTORE で、SQL で定義した named collection をサポートしました。#94604 をクローズします。#94605 (Pablo Marcos) 。
- ordered モードの S3Queue で、パーティションキーに基づくバケット分けをサポートしました。#94698 (Bharat Nallan) 。
- 最も長時間実行されているマージの経過時間を示す非同期メトリクスが追加されました。#94825 (Raúl Marín) 。
- IcebergBitmapPositionDeleteTransform を使用して位置削除を適用する前に、対象ファイルの確認を追加しました。 #94897 (Yang Jiang).
- これで
view_duration_msは、グループ内の各スレッドの継続時間の合計ではなく、グループがアクティブだった時間を示すようになりました。 #94966 (Sema Checherinda). - 64 個に制限されていた
hasAnyTokensおよびhasAllTokens関数の検索トークン数上限を削除しました。例:SELECT count() FROM table WHERE hasAllTokens(text, ['token_1', 'token_2', [...], 'token_65']]);検索トークンが 65 個あるため、このクエリはBAD_ARGUMENTSエラーになっていました。この PR により、この上限は完全に撤廃され、同じクエリもエラーなしで実行できるようになりました。#95152 (Elmi Ahmadov). - 要素が存在するかどうかを確認するため、Numbers から Enums への変換に対する設定
input_format_numbers_enum_on_conversion_errorを追加しました。Closes: #56144。#56240 (Nikolay Degterinsky) 。 - Icebergテーブルでデータファイルと position delete file を読み込む際にフォーマットパーサーのリソースを共有することで、メモリ割り当てを削減しました。 #94701 (Yang Jiang).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- 事前定義されたクエリハンドラーで、insert時に末尾の空白がデータとして扱われてしまう不具合を修正しました。 #83604 (Fabian Ponce).
- Joinストレージに対し、outer join から inner join への最適化が適用された場合に発生する INCOMPATIBLE_TYPE_OF_JOIN エラーを修正しました。#80794 を解決します。#84292 (Vladimir Cherkasov) 。
allow_experimental_join_right_table_sortingが有効な状態でハッシュ結合を使用した際に発生する例外 “Invalid number of rows in Chunk” を修正しました。 #86440 (yanglongwei).- ファイルシステムが大文字・小文字を区別しない場合、MergeTree では常にファイル名をハッシュに置き換えるようにしました。従来は、大文字・小文字を区別しないファイルシステム (MacOS など) を使用している環境で、複数のカラム名/サブカラム名が大文字・小文字だけ異なる場合に、データ破損につながる可能性がありました。 #86559 (Pavel Kruglov).
- materialized view 内の元となるクエリに対し、作成時に完全な権限チェックを行うようにしました。#89180 (pufit).
- 定数引数で
icebergHash関数がクラッシュする問題を修正しました。 #90335 (Michael Kolupaev). - トランザクションを伴わない mutation がアクティブなトランザクション内のパーツを変更し、そのトランザクションが最終的にロールバックされる場合に発生する論理エラーを修正しました。#90469 (Shaohua Wang) 。
- 通常のデータベースを atomic データベースに変換した後、
system.warningsが正しく更新されるよう修正しました。 #90473 (sdk2). - Parquet ファイルの読み取り時に、prewhere 式の一部がクエリ内の別の箇所でも使われている場合に発生していたアサーションを修正しました。#90635 (Max Kainov).
- Iceberg を split-by-buckets モードで読み取る際に、単一ノード構成のクラスターでクラッシュする問題を修正しました。これにより、#90913 をクローズしました。#91553 (Konstantin Vedernikov).
- サブカラムの読み取り中に Log エンジンで発生する可能性がある論理エラーを修正しました。 #91710 をクローズします。 #91711 (Pavel Kruglov).
- ATTACH AS REPLICATED 実行時に発生する論理エラー: ‘Storage が transaction をサポートしていません’ を修正しました。 #91772 (Shaohua Wang).
- LEFT ANTI JOIN に追加の条件がある場合に、ランタイムフィルタが正しく機能しない問題を修正しました。#91824 (Alexander Gololobov).
- Nothing 型を含む null-safe な比較で発生するエラーを修正しました。#91834 をクローズしました。#84870 をクローズしました。#91821 をクローズしました。#91884 (Yarik Briukhovetskyi).
- 同じ文字列が大量に繰り返されるデータに影響する、ネイティブの Parquet リーダーにおける DELTA_BYTE_ARRAY のデコードの不具合を修正しました。 #91929 (Daniel Muino).
- スキーマ推論時に、globs 内のすべてのファイルではなく、推論元のファイルに対してのみスキーマを cache するようにしました。#91745 をクローズしました。#92006 (Pavel Kruglov).
- 不正なアーカイブエントリサイズのヘッダーが原因で発生していた
Couldn't pack tar archive: Failed to write all bytesエラーを修正しました。#89075 の修正です。#92122 (Julia Kartseva). - HTTP接続が閉じられないようにするため、INSERT SELECT 内でリクエストストリームを解放しました。#92175 (Sema Checherinda).
USING句とjoin_use_nullsを使用する複数の JOIN を含むクエリで発生する論理エラーを修正しました。#92251 (Vladimir Cherkasov).- join_use_nulls を使用した join の並べ替え時に発生する論理エラーを修正し、https://github.com/clickhouse/clickhouse/issues/90795 をクローズしました。#92289 (Vladimir Cherkasov) 。
- negate リテラルを含む arrayElement の AST フォーマットの不整合を修正しました。#92288 をクローズ。#92212 をクローズ。#91832 をクローズ。#91789 をクローズ。#91735 をクローズ。#88495 をクローズ。#92386 をクローズ。#92293 (Pavel Kruglov).
join_on_disk_max_files_to_merge設定で発生する可能性があるクラッシュを修正しました。#92335 (Bharat Nallan) 。- 関連 issue #https://github.com/ClickHouse/support-escalation/issues/6365。 #92339 (Tuan Pham Anh) 。
SYSTEM SYNC FILE CACHEで不足していたアクセスチェックを修正しました。#92101 をクローズします。#92372 (Kseniia Sumarokova).- ウィンドウ関数および複数引数に対する
count_distinct_optimizationパスの不具合を修正しました。#92376 (Raúl Marín) 。 - ウィンドウ関数で特定の集約関数を使用した際に発生する “Cannot write to finalized buffer” エラーを修正しました。#91415 をクローズ。#92395 (Jimmy Aguilar Mena).
CREATE TABLE ... AS urlCluster()とデータベースエンジンReplicatedに関する論理エラーを修正しました。#92216 をクローズ。#92418 (Kseniia Sumarokova) 。- MergeTree での mutation 中に、元のパートのシリアライゼーション情報設定を継承するようにしました。これにより、データ型のシリアライゼーションを変更した後に、mutation 済みパートに対するクエリで誤った結果が返る可能性がある問題を修正しました。 #92419 (Pavel Kruglov).
- 同名のカラムとサブカラムの競合により、誤ったシリアライゼーションが使われてクエリが失敗する可能性があった問題を修正しました。Closes #90219。Closes #85161。#92453 (Pavel Kruglov).
- outer join を inner join に変換する際、クエリプランが意図せず変更されることで
LOGICAL_ERRORが発生していた問題を修正しました。あわせて、JOIN 時に集約キーへ単射関数が適用される場合にもこの最適化を適用できるよう、要件を緩和しました。#92503 (János Benjamin Antal) 。 - 空のタプルカラムのソート中に発生する可能性があるエラー
SIZES_OF_COLUMNS_DOESNT_MATCHを修正しました。#92422 をクローズしました。#92520 (Pavel Kruglov). - JSON type 内の互換性のない型付き path をチェック。 #91577 をクローズ。 #92539 (Pavel Kruglov).
- Backup データベースでの SHOW CREATE DATABASE のデッドロックを修正しました。#92541 (Azat Khuzhin).
- hypothesis 索引の検証時に、適切なエラーコードを使用するようにしました。#92559 (Raúl Marín).
- アナライザで、カラムの別名内にある動的サブカラムの解決を修正しました。以前は、カラムの別名内の動的サブカラムが
getSubcolumnでラップされていたため、場合によってはまったく解決できないことがありました。#91434 をクローズします。#92583 (Pavel Kruglov). - 第2引数が NULL の場合に tokens() でクラッシュする問題を防止しました。#92586 (Raúl Marín) 。
- 基盤となる const PREWHERE カラムへのインプレース mutation が原因で発生し得るクラッシュを修正しました。これは、カラムの縮小時 (
IColumn::shrinkToFit) またはフィルタリング時 (IColumn::filter) に、複数のスレッドから同時にトリガーされることで発生する可能性がありました。#92588 (Arsen Muk). - 大きなパーツ (4,294,967,295行超) を含むテーブルでは、テキスト索引の作成およびマテリアライズが一時的に無効化されています。現在の索引実装はこのような大きなパーツをまだサポートしていないため、この制限により誤ったクエリ結果が生じるのを防ぎます。 #92644 (Anton Popov).
- JOIN の実行中に発生する論理エラー
Too large size (A) passed to allocatorを修正しました。#92043 をクローズしました。#92667 (Yarik Briukhovetskyi). ngrambf_v1索引で、ngram の長さ (第1パラメーター) が 8 を超えると例外が発生していた不具合を修正しました。#92672 (Robert Schulze) 。- ZooKeeperストレージの使用時に、バックグラウンドで named collections を再読み込みすると発生する未捕捉例外を修正しました。https://github.com/ClickHouse/clickhouse-private/issues/44180 をクローズしました。#92717 (Kseniia Sumarokova).
- ワイルドカード付きの grant に対するアクセス権チェックの誤ったロジックを修正しました。以前の修正 https://github.com/ClickHouse/ClickHouse/pull/90928 では重大な脆弱性に対処したものの、制限が厳しすぎたため、無関係な権限の取り消しによって一部のワイルドカード
GRANT文が失敗していました。#92725 (pufit). WHEREでnot match(...)を使用した場合に誤った結果を招いていた、データスキップロジックのバグを修正しました。#92492 をクローズしました。#92726 (Nihal Z. Miaji).- MergeTree テーブルが読み取り専用ディスク上に作成されている場合、起動時に一時ディレクトリの削除を試行しないようにしました。 #92748 (Alexey Milovidov).
- ALTER TABLE REWRITE PARTS (v2) での “Cannot add action to empty ExpressionActionsChain” エラーを修正しました。 #92754 (Azat Khuzhin).
- 切断された
Connectionの読み取り時にクラッシュする問題を回避しました。#92807 (Raufs Dunamalijevs) 。 OrderedモードのS3Queueストレージにおける論理エラーFailed to set file processing within 100 retriesを修正し、このエラーは警告に置き換えられました。このエラーは、Keeper セッションの有効期限が切れた場合に 25.10 より前のバージョンで発生することがありましたが、Orderedモードで処理の並行度が高い場合には理論上このエラーが発生する可能性が依然としてあるため、25.10 以降のバージョンでも警告のままとなります。#92814 (Kseniia Sumarokova).- 以前は、偽の条件で PK 分片を使用する一部のクエリが失敗していましたが、現在は失敗しなくなりました。https://github.com/ClickHouse/ClickHouse/pull/89313 に必要です。#92815 (Yarik Briukhovetskyi).
system.partsテーブルにおけるテキスト索引の非圧縮サイズの計算を修正しました。 #92832 (Anton Popov).WHERE句の述語にサブクエリを含むIN句がある論理更新における、プライマリインデックスの使用を修正しました。#92838 (Anton Popov).- JSON の path ‘skip’ に対する型ヒント生成を修正しました。#92731 をクローズします。#92842 (Pavel Kruglov).
- S3テーブルエンジンでは、非決定論的関数が含まれる場合、パーティションキーをキャッシュしないようにしました。#92844 (Miсhael Stetsyuk) 。
ratio_of_defaults_for_sparse_serialization=0.0を指定したスパースカラムのミューテーション後に発生する可能性のあるエラーFILE_DOESNT_EXISTを修正しました。#92633 をクローズしました。#92860 (Pavel Kruglov).- JSON カラムが Tuple カラムの後に来る場合に、古い Parquet リーダー (デフォルトでは使用されません) での Parquet スキーマ推論を修正。空のタプルで失敗していた古い Parquet リーダー (デフォルトでは使用されません) を修正。 #92867 (Michael Kolupaev).
- 定数条件での複数の join と
join_use_nullsに関する論理エラーを修正し、#92640 をクローズしました。#92892 (Vladimir Cherkasov) 。 - パーティション式にサブカラムを含むテーブルへの insert 時に発生する可能性がある
NOT_FOUND_COLUMN_IN_BLOCKエラーを修正しました。#93210 をクローズ。#83406 をクローズ。#92905 (Pavel Kruglov). - 別名を持つテーブルに対する Merge エンジンで発生するエラー
NO_SUCH_COLUMN_IN_TABLEを修正しました。#88665 をクローズします。#92910 (Pavel Kruglov). - LowCardinality(Nullable(T)) カラムに対する full_sorting_join で、NULL != NULL となるケースを修正しました。 #92924 (Vladimir Cherkasov).
MergeTreeテーブルのテキスト索引のマージ処理中に発生していた複数のクラッシュを修正しました。#92925 (Anton Popov) 。- 必要に応じて、TTL 集約時に SET 式の結果の LowCardinality ラッパーを復元し、テーブル最適化中の例外発生を防ぐようにしました。 #92971 (Seva Potapov).
- 空の配列を
has関数で使用した際に、索引解析中に発生する論理エラーを修正しました。#92906 をクローズしました。#92995 (Nihal Z. Miaji). - 終了処理中のバックグラウンドスケジュールプールでハングする可能性がある問題を修正しました (シャットダウン時にサーバーがハングする原因となる場合があります) 。 #93008 (Azat Khuzhin).
- alter で設定
ratio_of_defaults_for_sparse_serializationを1.0に変更した後、スパースカラムの mutation 後に発生する可能性がある FILE_DOESNT_EXIST エラーを修正しました。#93016 (Pavel Kruglov) 。 - WHERE 句で
not materialize(...)またはnot CAST(...)を使用した際に、誤った結果を引き起こしていたデータスキップロジックの不具合を修正しました。#88536 をクローズします。#93017 (Nihal Z. Miaji). - 共有パーツでの TOCTOU 競合により、古いパーツが使用される可能性があった問題を修正しました。 #93022 (Azat Khuzhin).
- 範囲外のオフセットを含む不正な
groupConcat集約状態のデシリアライズ時に発生するクラッシュを修正しました。#93028 (Raufs Dunamalijevs). - 分散クエリの事前キャンセル後に、接続が壊れた状態のまま残る問題を修正しました。#93029 (Azat Khuzhin) 。
- 右側の join キーがスパースなカラムである場合の join 結果を修正しました。これにより #92920 をクローズします。バグを再現できるのは
set compatibility='23.3'の場合のみです。バックポートすべきかどうかは不明です。#93038 (Amos Bird). estimateCompressionRatio()でCannot finalize buffer after cancellationが発生する可能性がある問題を修正しました。修正: #87380。 #93068 (Azat Khuzhin).- 複雑な式 (
concat(col1, col2)など) に基づいて構築されたテキスト索引のマージ不具合を修正しました。#93073 (Anton Popov). - フィルターにサブカラムが含まれている場合のプロジェクションの適用を修正しました。#92882 をクローズしました。#93141 (Pavel Kruglov).
- クエリプランに join ランタイムフィルタが追加されたときに一部のケースで発生していた論理エラーを修正しました。原因は、join の片側から重複した const カラムを誤って返していたことでした。#93144 (Alexander Gololobov) 。
- JOIN ランタイムフィルタで使用される特別な関数
__applyFilterが、有効な一部のケースで ILLEGAL_TYPE_OF_ARGUMENT を返していました。#93187 (Alexander Gololobov) 。 - 補間されたカラムが実質的に同じカラムの別名である場合に、ブロック内で異なる補間済みカラムが同一カラムに集約されてしまうのを防止しました。#93197 (Yakov Olkhovskiy) 。
- すでに補完済みの右側テーブルとの結合時には、ランタイムフィルタを追加しないようにしました。#93211 (Alexander Gololobov) 。
- 切断されたセッションの後に Keeper の永続ウォッチが適切にクリーンアップされない問題を修正しました。これにより #92480 を解決します。#93213 (Konstantin Vedernikov) 。
- Iceberg の ORDER BY tuple を修正しました。これにより #92977 をクローズしました。#93225 (Konstantin Vedernikov).
- S3Queue 設定
s3queue_migrate_old_metadata_to_bucketsのバグを修正しました。#93392、#93196、#81739 をクローズしました。#93232 (Kseniia Sumarokova). - マージ時にプロジェクションが再構築される際、未使用のカラムを削除するようにしました。これにより、メモリ使用量が減り、作成される一時パーツも少なくなります。 #93233 (Nikolai Kochetov).
- スカラー相関サブクエリがある場合に、サブクエリから未使用のカラムが削除されてしまう問題を修正しました。修正前は、カラムが相関サブクエリ内でのみ使用されていると削除されることがあり、その結果クエリは
NOT_FOUND_COLUMN_IN_BLOCKエラーで失敗していました。#93273 (Dmitry Novik). - ソーステーブルのALTER中に、MVでサブカラムが欠落する可能性がある不具合を修正しました。#93231 をクローズしました。#93276 (Pavel Kruglov) 。
- ローカルおよびリモート/
Distributedテーブルのマージ時に、hostName()に対してILLEGAL_COLUMNがスローされることがあった、アナライザによるMergeテーブルエンジンのクエリプランニングを修正しました。#92059 をクローズしました。#93286 (Jinlin). - 非定数の配列引数を伴う
NOT INが誤った値を返す場合がある問題を修正し、非定数の Array 関数をサポートしました。#14980 をクローズします。#93314 (Yarik Briukhovetskyi). use_top_k_dynamic_filtering最適化で発生するNot found columnを修正。 #93186 を修正。 #93316 (Nikolai Kochetov).- サブカラム上に作成されたテキスト索引の再構築に関する不具合を修正しました。 #93326 (Anton Popov).
hasAllTokensおよびhasAnyTokens関数で、第2引数に空の配列を指定した場合の処理を修正しました。#93328 (Anton Popov).- 右側テーブルに対する totals 付きクエリでランタイムフィルタ使用時に発生する論理エラーを修正しました。 #93330 (Alexander Gololobov).
- 関数
tokensが非 const のトークナイザーパラメータ (第 2、第 3、第 4 パラメータ) で呼び出された場合でも、server がクラッシュしなくなりました。たとえば、SELECT tokens(NULL, 1, materialize(1))。#93383 (Robert Schulze) 。 groupConcat状態のデシリアライズにおける整数オーバーフローの脆弱性を修正しました。この脆弱性により、細工された集約状態によってメモリ安全性の問題が発生する可能性がありました。#93426 (Raufs Dunamalijevs) 。- 索引にトークンが含まれない場合 (すべての配列が空であるか、すべてのトークンがトークナイザーによってスキップされる場合) に、配列カラムに対するテキスト索引の索引解析が正しく行われない問題を修正しました。 #93457 (Anton Popov).
- 接続文字列にユーザー名/パスワードが含まれている場合に、ClickHouse Client で OAuth ログインを回避するようにしました。 #93459 (Krishna Mannem).
- DataLakeCatalog における Azure ADLS Gen2 の払い出し認証情報のサポートを修正 - Iceberg REST カタログから
adls.sas-token.*キーをパースし、ABFSS URL のパースを修正しました。 #93477 (Karun Anantharaman). - アナライザにおける GLOBAL IN のサポートを修正しました (以前は Set がリモートノードで再度作成されていました) 。#93507 (Azat Khuzhin) 。
- デシリアライゼーション時に、サブカラムを直接スパースカラムに抽出する際の不具合を修正しました。 #93512 (Pavel Kruglov).
- 重複する検索クエリがある場合の、テキスト索引からの直接読み取りを修正しました。 #93516 (Anton Popov).
- ランタイムフィルタが有効な場合に、結合されたテーブルで同じカラムが複数回返されると発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました (例: SELECT a, a, a FROM t) 。 #93526 (Alexander Gololobov).
- ssh を使用して接続する際に、clickhouse-client がパスワードを 2 回要求する不具合を修正しました。 #93547 (Isak Ellmer).
- シャットダウン時に zookeeper の終了処理が確実に完了するようにしました (ごくまれにシャットダウン時にハングする可能性がある問題を修正) 。 #93602 (Azat Khuzhin).
- deduplication の競合により ReplicatedMergeTree の復元時に LOGICAL_ERROR が発生する問題を修正しました。#93612 (Pablo Marcos) 。
- 一部の入力フォーマットで、Sparse カラムに直接デシリアライズする際の有効期限 (TTL) 更新で Sparse カラムを使用する処理を修正しました。これにより、論理エラー
Unexpected type of result TTL columnが発生する可能性を解消しました。 #93619 (Pavel Kruglov). - 無効な入力で呼び出された際に、クラッシュしたりハングしたりすることがあった h3 index 関数の問題を修正しました。#93657 (Michael Kolupaev) 。
- 非UTF-8データに対して
ngram_bf索引を使用すると、未初期化メモリの読み取りが発生し、その値が結果として生成される索引構造に含まれる可能性がありました。#92576 をクローズしました。#93663 (Alexey Milovidov). - 展開後のバッファサイズが想定どおりであることを確認します。#93690 (Raúl Marín) 。
mergetable engine の使用時に、SHOW COLUMNS権限を確認せずにユーザーがテーブルのカラム一覧を取得できないようにしました。#93695 (János Benjamin Antal).- サブカラム上に作成されたスキップ索引のマテリアライズ処理を修正しました。#93708 (Anton Popov).
PipelineExecutorの存続中にIStorageオブジェクトが破棄されないよう、storage の共有ポインタをQueryPipeline::resources::storage_holdersに保持します。 #93746 (Miсhael Stetsyuk).- 再起動後に interserver host が変更された場合の Replicated DB のアタッチを修正しました。#93779 (Tuan Pham Anh) 。
- cache が有効な際に発生していた
ReadBufferFromS3の assert!read_until_positionを修正しました。#93809 (Kseniia Sumarokova) 。 Mapカラムで空のタプルが使われるまれなケースで発生する論理エラーを修正しました。#93784 をクローズしました。#93814 (Nihal Z. Miaji) 。- マージ中にプロジェクションが再構築される際に発生する
_part_offsetの破損を修正し、_part_offsetカラムの不要な読み取りを避け、プロジェクション計算で不要なカラムをスキップすることで、プロジェクション処理を最適化しました。これは、#93233で導入された最適化をさらに発展させたものです。#93827 (Amos Bird) 。 - ‘Bad version’ の処理を削除しました。#93843 (Anton Ivashkin).
- キーが符号付き整数型の場合に、分散クエリで
optimize_inverse_dictionary_lookupが機能しない問題を修正しました。#93259 をクローズしました。#93848 (Nihal Z. Miaji). - 分散
remote()クエリでlag/leadが動作しない不具合を修正しました。#90014 をクローズしました。#93858 (Nihal Z. Miaji). - system instrument のディスパッチに関するバグを修正。 #93937 (Pablo Marcos).
- https://github.com/ClickHouse/ClickHouse/pull/89173 では、
TraceSenderが内部パイプ経由で送信する構造にフィールドを 1 つ追加しました。しかし、バッファサイズが更新されていなかったため (こちら) 、buffer_sizeを超えるデータをバッファに書き込むことになり、その結果、フラッシュが複数回発生します。さらに、TraceSender::sendは異なるスレッドから呼び出されるため、それぞれのスレッドによるフラッシュが途中で入り交じる可能性があり、受信側 (TraceCollector) が前提としている不変条件が崩れてしまいます。#93966 (Miсhael Stetsyuk) 。 USING句を使用したストレージJoinのJOIN演算における、上位型への型変換を修正しました。#91672 を修正しました。#78572 を修正しました。#94000 (Dmitry Novik).- JOIN ランタイムフィルタが Merge テーブルに適用された際に、FilterStep が適切に追加されない不具合を修正しました。#94021 (Alexander Gololobov).
- 複数のカラムに対する述語を含み、bloom filter スキップ索引が設定され、かつ
OR条件とNOT条件の両方を含むSELECTクエリでは、結果が不整合になることがありました。現在は修正されています。#94026 (Shankar Iyer). - 依存インデックスのあるカラムに対する CLEAR の不具合を修正しました。#94057 (Raúl Marín) 。
ReadWriteBufferFromHTTPにおける未初期化の値の使用を修正しました。#94058 (Alexey Milovidov).- JSON 内の型付きパスに対する不適切なチェックを修正しました。このチェックは https://github.com/ClickHouse/ClickHouse/pull/92842 で導入されたもので、既存のテーブルの起動時にエラーを引き起こす可能性がありました。#94070 (Pavel Kruglov).
- OUTER JOIN がある場合に、filter の解析中にクラッシュする問題を修正しました。#90979。#94080 (Dmitry Novik).
- 並列実行時 (
max_threads> 1、デフォルト) に UInt8 集約キーを使用した場合のuniqThetaの正確性を修正しました。#94095 (Azat Khuzhin) 。 SCOPE_EXIT内のsocket.setBlocking(true)呼び出しで例外が送出されてクラッシュしていた問題を修正しました。 #94100 (Miсhael Stetsyuk).- ReplicatedMergeTree で、
DROP PARTITIONによって後続のログエントリで作成されたパーツまで削除されてしまうことで発生するデータ損失を修正。 #94123 (Tuan Pham Anh). - ページ境界をまたぐ Array を Parquet リーダー v3 が誤って処理する問題を修正しました。これは、たとえばページ統計やページ索引を有効にせずに Arrow で書き込まれたファイルで発生します。影響を受けるのは Array データ型のカラムのみです。症状としては、約 1 MB ごとに 1 つの配列が途中で切り詰められる可能性があります。この修正前は、回避策として次の設定を使用してください:
input_format_parquet_use_native_reader_v3 = 0。 #94125 (Michael Kolupaev). - ログエントリ待機中の ReplicatedMergeTree におけるウォッチ過多の問題を修正しました。 #94133 (Azat Khuzhin).
- 関数
arrayShuffle、arrayPartialShuffle、arrayRandomSampleが const カラムを実体化するようになり、異なる行で異なる結果が返るようになりました。#94134 (Joanna Hulboj). - materialized view で table function を評価する際のデータ競合を修正。 #94171 (Alexey Milovidov).
- (クエリが不正な場合に発生する)
PostgreSQLデータベースエンジンでの nullptr の逆参照を修正しました。#92887 をクローズしました。#94180 (Alexey Milovidov). - 複数のサブクエリを含む
SELECTクエリを使うリフレッシュ可能なマテリアライズドビューにおけるメモリリークを修正しました。 #94200 (Antonio Andelic). DataPartStorageOnDiskBase::removeとsystem.parts間のデータ競合を修正しました。#49076 をクローズしました。#94262 (Alexey Milovidov).- メモリ例外発生時にクラッシュ (
std::terminate) を引き起こす可能性がある、HashTable のコピー代入における誤ったnoexcept指定を削除しました。 #94275 (Nikita Taranov) 。 - 以前は、GROUP BY に重複したカラムを含む PROJECTION (例:
GROUP BY c0, c0) を作成してデータを挿入すると、optimize_row_orderが有効な場合にstd::length_errorが発生していました。#94065 を修正しました。#94277 (Alexey Milovidov) 。 - 接続時にZooKeeperクライアントで発生し、ハングやクラッシュを引き起こすわかりにくいバグを修正しました。#94320 (Azat Khuzhin).
- サブカラムに適用されていなかった function to subcolumns 最適化の問題を修正しました。#94323 (Pavel Kruglov).
enable_lazy_columns_replicationが有効な場合に、ネストされた RIGHT JOIN で誤った結果が返される可能性がある問題を修正しました。この不具合により、レプリケートされたカラム内のすべての行で、本来はそれぞれ異なる値が返されるべきところ、誤って同じ値が返されていました。#93891 をクローズしました。#94339 (Vladimir Cherkasov).- 等価集合を用いた SEMI JOIN の filter pushdown を修正しました。引数の型が変更されている場合は、filter pushdown を行わないようにしました。#93264 を修正しました。#94340 (Dmitry Novik) 。
- database DataLake データベースエンジン使用時の DeltaLake CDF の利用を修正しました (Delta Lake カタログのインテグレーション) 。#94122 を修正しました。#94342 (Kseniia Sumarokova).
SLRUcacheポリシー使用時に、メトリクスFilesystemCacheSizeLimitの現在の値が誤っていた問題を修正しました。#94363 (Kseniia Sumarokova) 。- 2 つ未満の引数で Backup データベースエンジンを作成した場合、返されるエラーメッセージがより分かりやすくなりました (
std::out_of_range: InlinedVector::at(size_type) const failed bounds check.ではなく、Wrong number of argumentsが返されます) 。#94374 (Robert Schulze) 。 - grant option を持つ権限について、データベースレベルでグローバル権限を取り消そうとする無効な操作を無視するようになりました。 #94386 (pufit).
- compact パーツからスパース オフセットを読み取る際の不具合を修正しました。#94385 をクローズしました。#94399 (Pavel Kruglov).
alter_column_secondary_index_modeのthrowモードを使用している場合でも、暗黙的な索引を使用するカラムに対する ALTER を妨げないようにしました。#94425 (Raúl Marín).Protocol::Client::IgnoredPartUUIDsを複数のreceivePacketsExpectQuery呼び出しで読み取る際に発生するTCPHandlerのクラッシュを修正しました。 #94434 (Miсhael Stetsyuk).system.functionsにおける機密データのマスキングの不具合を修正しました。#94436 (Vitaly Baranov) 。send_profile_eventsが無効な場合に発生する nullptr の逆参照を修正しました。この機能は最近、ClickHouse Python ドライバーに導入されました。#92488 を解決します。#94466 (Alexey Milovidov).- マージ中のテキスト索引
.mrkの非互換性を修正。 #94494 (Peng Jian). read_in_order_use_virtual_rowが有効な場合、索引が切り詰められているかどうかを確認せずに、主キー全体のサイズに基づいて索引カラムにアクセスしていたため、use-after-free / 未初期化メモリの使用が発生していました。#85596 をクローズしました。#94500 (Alexey Milovidov).- 型がNullableの場合に、GLOBAL IN を含むサブクエリ用の外部テーブル送信時に、型不一致によって発生するerrorを修正しました。 #94097 をクローズしました。 #94511 (Alexey Milovidov).
- 以前のバージョンでは、同じ式に対する複数の索引条件を持つクエリで、誤って
Not found column例外がスローされることがありました。#60660 を修正しました。#94515 (Alexey Milovidov). - ランタイムフィルタにおける Nullable の JOIN カラムの誤った処理を修正しました。 #94555 (Alexander Gololobov).
- 現在使用中の workload 内に別の workload を作成しても、クラッシュしなくなりました。#94599 (Sergei Trifonov) 。
- 存在しないカラムに対して
isNotNullが評価された際に、ANY LEFT JOIN の最適化中に発生するクラッシュを修正しました。#94600 (Molly). - 計算済みデフォルトを持つ他のカラムを参照する場合の、デフォルト式の評価を修正しました。#94615 (Alexey Milovidov).
- BACKUP/RESTORE 操作における権限の問題を修正しました。 #94617 (Pablo Marcos) 。
- データ型が
Nullable(DateTime64)の場合に、不正な型変換が原因で発生するクラッシュを修正しました。#94627 (Miсhael Stetsyuk) 。 - 特定の分散クエリで、
ORDER BY使用時にALIASカラムの値が入れ替わって返されることがある不具合を修正しました (つまり、カラムaにカラムbのデータが表示され、逆にカラムbにはカラムaのデータが表示される問題です) 。#94644 (filimonov) 。 - keeper-bench の結果をファイルに保存する際の不具合を修正しました。#94654 (Antonio Andelic) 。
- 負の浮動小数点値を含むカラムで、MinMax 型統計による推定が誤る問題を修正しました。 #94665 (zoomxi).
- map のキーが struct の場合に発生していた Parquet ファイル読み取りの問題を修正しました。#94670 (Konstantin Vedernikov) 。
- 複雑な ON 条件を使用した場合に、RIGHT JOIN の結果が誤る可能性がある問題を修正しました。#92913 をクローズしました。#94680 (Vladimir Cherkasov) 。
- Vertical merge後も、一定の索引粒度 (use_const_adaptive_granularity) を維持する。 #94725 (Azat Khuzhin).
- スカラーサブクエリとテーブルの依存関係に関する mutation のバグを修正しました。テーブルのカラムに対して依存関係 (索引またはプロジェクション) がある場合、スカラーサブクエリがデータなしで評価・キャッシュされ、その結果、誤った変更が行われる可能性がありました。#94731 (Raúl Marín).
- エラー発生時の AsynchronousMetrics cpu_pressure フォールバックを修正しました。 #94827 (Raúl Marín).
getURLHostRFC関数では、ポインタをデリファレンスする前の境界チェックが不足していました。空文字列がdomainRFCに渡されると、未初期化メモリを読み取り、MSan error がトリガーされていました。#94851 (Alexey Milovidov) 。- 暗号化ディスクが読み取り専用になる問題を修正しました。 #94852 (Azat Khuzhin).
- 分散テーブルで古いアナライザを使用した際に、小数の
LIMIT/OFFSETで発生する論理エラーを修正しました。#94712 をクローズしました。#94999 (Ahmed Gouda). - JOIN ランタイムフィルタがデフォルトで有効な場合に、一部の条件下で発生するクラッシュを修正しました。 #95000 (Alexander Gololobov).
- テーブルエンジン
URL()およびテーブル関数url()で使用される URL 内のパスワードのマスキングを改善しました。#95006 (Vitaly Baranov) 。 - 関数
toStartOfIntervalは、enable_extended_results_for_datetime_functionsが有効な場合、XがDay, Week, Month, Quarter, YearのtoStartOfXと同様に動作するようになりました。#95011 (Kirill Kopnev) 。 - 定数文字列の比較で、設定
cast_string_to_date_time_mode、bool_true_representation、bool_false_representation、およびinput_format_null_as_defaultが正しく反映されない問題を修正しました。#91681 をクローズしました。#95040 (Nihal Z. Miaji). - ファイルシステムキャッシュで発生するデータ競合を修正しました。 #95064 (Alexey Milovidov).
- Parquet リーダーでまれに発生するレースコンディションを修正しました。 #95068 (Alexey Milovidov).
LIMITがゼロのときに top K 最適化で発生するクラッシュを修正しました。#93893 を解決します。#95072 (Alexey Milovidov).- DateTime/整数から Time64 への変換では、単調ではない
toTimeを使用して時刻部分を抽出しますが、ToDateTimeMonotonicityテンプレートがこの変換を誤って単調と見なしていました。その結果、デバッグビルドで “MergeTreeSetIndex における無効な二分探索結果” 例外が発生していました。#95125 (Alexey Milovidov). - 必要な場合にのみマニフェストファイルのエントリ一覧を再作成するようにしました (以前は各イテレーションで行われていました) 。 #95162 (Daniil Ivanik).
ビルド/テスト/パッケージングの改善
- jemalloc のヒーププロファイリング機能を利用して、ClickHouse SQL パーサーにおけるメモリ割り当てをプロファイリングするためのツール群を追加しました。#94072 (Ilya Yatsishin).
- パーサーでのメモリ割り当てのデバッグを簡単にするツールを追加しました。このツールは、クエリを AST 表現にパースする前後で jemalloc の
stats.allocatedメトリックを使い、何が割り当てられたかを表示します。さらに、前後でプロファイルをダンプして、どこで割り当てが発生したかを示すレポートを作成できるメモリプロファイリングモードにも対応しています。#93523 (Ilya Yatsishin). - 推移的な libc++ インクルードを削除しました。#92523 (Raúl Marín).
- 一部の sequential テストを並列化しました: https://github.com/ClickHouse/ClickHouse/pull/93030/changes#diff-c3a73510dae653c9bbfa24300b32f5d6ec663fd4e72cc4a3d5daa6e4342915df. #93030 (Nikita Fomichev).
- 一部のビルドフラグを整理しました。#93679 (Raúl Marín).
- c-ares を v1.34.5 から v1.34.6 に更新しました。これにより、ClickHouse には影響しない c-ares の
CVE-2025-62408に対応しています。#94129 (Govind R Nair). curl8.18.0 を使用するようにしました。#94742 (Konstantin Bogdanov).