Cloud 向け v25.12 の変更履歴
後方互換性を損なう変更
データ型の変更
Geometry型を導入しました。この型についてWKBおよびWKTフォーマットの読み取りをサポートします。以前のバージョンではGeometry型はStringのエイリアスでしたが、現在は完全な機能を備えた独立した型になりました。 #83344 (Konstantin Vedernikov)。- 非推奨だった Object 型を削除しました。 #85718 (Pavel Kruglov)。
- MergeTree テーブルの Wide データパーツにおける Variant 型サブカラムのために作成されるファイル名をエスケープするようにしました。この変更により、Variant/Dynamic/JSON データ型を持つ既存テーブルとの互換性が失われます。この変更は、Variant 内で特殊文字を含む型(たとえば、
\を含む特定のタイムゾーンを持つ DateTime など)の保存時に発生していた問題を修正します。エスケープは、MergeTree の SETTINGescape_variant_subcolumn_filenamesを変更することで無効にできます(互換性を維持するには、MergeTree の設定でこの SETTING を無効化するか、アップグレード前のバージョンにcompatibilitySETTING を設定してください)。#69590 を解決します。 #87300 (Pavel Kruglov)。
クエリおよび関数の変更
ALTER MODIFY COLUMNは、Nullable なカラムを non-nullable 型に変換する際に、明示的なDEFAULTの指定が必須になりました。以前は、そのようなALTERがcannot convert null to not nullエラーで行き詰まる可能性がありましたが、現在はNULLがカラムのデフォルト式で置き換えられます。#5985 を解決します。 #84770(Vladimir Cherkasov)。- 設定
allow_not_comparable_types_in_order_by/allow_not_comparable_types_in_comparison_functionsを削除しました。ORDER BY 句や比較関数で比較不可能な型を許可すると、論理的なエラーや予期しない結果につながる可能性があります。#90028 を解決します。 #90527(Pavel Kruglov)。 - 関数 bitShiftLeft および bitShiftRight を修正し、型のサイズとちょうど同じだけシフトが行われた場合には、0 または空値を返すようにしました。 #91943(Pablo Marcos)。
- Ngram tokenizer は、設定された長さ N 未満の ngram を返さないようになりました。Text Search は、検索トークンが空の場合には行を返しません。 #89757(George Larionov)。
ストレージと索引の変更
- 廃止された
LIVE VIEW機能を削除しました。LIVE VIEWを使用している場合、新しいバージョンへのアップグレードはできません。 #88706 (Alexey Milovidov). - 共有オブジェクトストレージパス上に複数の
plain-rewritableディスクを作成することを禁止しました。これは、異なるメタデータストレージトランザクションが衝突した際に、挙動が未定義となる可能性があるためです。 #89038 (Mikhail Artemenko). - 特殊な
MergeTreeテーブル(ReplacingMergeTree、CollapsingMergeTreeなど)について、ORDER BYキーが空の状態で作成することを禁止しました。これらのテーブルではマージ動作が未定義となるためです。どうしてもそのようなテーブルを作成する必要がある場合は、allow_suspicious_primary_key設定を有効にしてください。 #91569 (Anton Popov). - 暗黙の索引に関して、複数の修正を行いました。表示または保存されるスキーマ(Keeper メタデータ)には、
add_minmax_index_for_numeric_columnsやadd_minmax_index_for_string_columnsのような設定によって作成される暗黙の索引は含まれなくなります。これにより、古いリリースのレプリカが存在する状態で、新しいバージョンで ReplicatedMergeTree テーブルを作成または更新すると、メタデータエラーが発生する可能性があります。 #91429 (Raúl Marín).
設定および構成の変更
- クライアントが例外をより確実にパースできるように、HTTP の結果レスポンスに対する例外のタグ付けをサポートしました。#75175 を解決します。設定
http_write_exception_in_output_formatは、フォーマット間の一貫性のためデフォルトでは無効になっています。#88818(Kaviraj Kanagaraj)。 - Kafka ストレージの SASL 設定の優先順位を修正しました。
CREATE TABLEクエリで指定されたテーブルレベルの SASL 設定が、設定ファイル内のコンシューマー/プロデューサー固有の設定を正しく上書きするようになりました。#89401(János Benjamin Antal)。 - ACME 構成パラメータ
refresh_certificates_task_intervalをrefresh_certificates_task_interval_secondsに、refresh_certificates_beforeをrefresh_certificates_before_secondsに名称変更しました。refresh_certificates_task_interval_secondsパラメータは、秒単位の値を受け取るようになりました。#92211(Konstantin Bogdanov)。 - プロジェクションで無効化された位置指定引数を、後方互換性のない変更としてマークしました。加えて、プロジェクション内に位置指定引数が存在する場合でも、安全に ClickHouse クラスタをアップグレードできるようにするための設定
enable_positional_arguments_for_projectionsを導入しました。#92007(Dmitry Novik)。
クライアントの変更
receive_timeoutによってクエリがタイムアウトした場合に、clickhouse-client が非ゼロの終了コード (159 - TIMEOUT_EXCEEDED) を返すように更新しました。以前は、タイムアウト時にも終了コード 0 (成功) を返していたため、スクリプトや自動化処理でタイムアウトによる失敗を検出することが困難でした。 #91432 (Sav)
統計フォーマットの変更
- カラムを
StringからNullable(String)にALTER COLUMNする場合、データ自体に対する mutation は行われません。ただし、uniq集約関数は異なるデータ構造を使用します。nullable なカラムの場合は、ネストされた uniq 集約器を持つAggregateFunctionNullを使用します。AggregateFunctionNullは追加の bool フラグをシリアライズします。このため、統計ファイルとの互換性が失われます。統計フォーマットは変更されており、古いフォーマットの統計が存在するとサーバーがクラッシュします。例外を回避するには、統計を再生成するためにALTER TABLE [db.]table MATERIALIZE STATISTICS ALLを実行してください。#90311(Han Fei)。
その他の互換性破壊的変更
- 要素サイズに揃っていないサイズのデータを圧縮する際に発生する
Fatalエラーを修正しました(T64 コーデック)。#89282 を解決しました。#89432(yanglongwei)。
新機能
Functions
- ユーザーのなりすましをサポートする新しい SQL ステートメント EXECUTE AS を追加しました。#39048 を解決。#70775(Shankar)。
- 配列内の必要な次元数を展開し、Tuple カラム内のポインタを入れ替える
flipCoordinates関数を追加しました。#79469 を解決。#79634(Sachin Kumar Singh)。 IS NOT DISTINCT FROM(<=>) 演算子を強化しました。逆のIS DISTINCT FROMをサポートし、異なる型の互換性のある数値オペランド(例:Nullable(UInt32)とNullable(Int64))をサポートしました。#87581(yanglongwei)。cume_distウィンドウ関数のサポートを追加しました。#86920 を修正。#88102(Manuel)。- geometry 型に対して面積と周長を計算する関数を追加しました。#89047(Konstantin Vedernikov)。
- 属性が指定された値と等しい Dictionary のキーを返す
dictGetKeys関数を実装しました。クエリ単位の逆引きキャッシュを使用しており、max_reverse_dictionary_lookup_cache_size_bytessetting によって調整され、繰り返し検索を高速化します。#89197(Nihal Z. Miaji)。 - 配列
arrからelemと等しいすべての要素を削除するarrayRemove(arr, elem)のサポートを追加しました。#52099 を解決。#89585(tiwarysaurav)。 - 平均を計算する
midpointスカラー関数を導入しました。#89029 を解決。#89679(simonmichal)。 - 新しい
argAndMinおよびargAndMax関数を使用して、引数と、その引数に対応する最小値または最大値の両方を取得できるようになりました。#89884(AbdAlRahman Gad)。 - #73900 および #38775 の一部として、
HMAC(algorithm, message, key)SQL 関数を追加しました。#90837(Mikhail f. Shiryaev)。 - 第 1 引数が定数配列の場合に、
has()関数がプライマリキーとデータスキッピングインデックスを使用できるようにサポートを追加しました。#90980 をクローズ。#91023(Nihal Z. Miaji)。
システムテーブル
- Unicode 文字とそのプロパティの一覧を含む
system.unicodeテーブルを追加しました。#80055 をクローズしました。#80857(wxybear)。 shared_merge_tree_outdated_partsに類似した新しいシステムテーブルshared_merge_tree_condemned_partsを追加しました。このテーブルは、PartsKillerThread によって削除予定のパーツを一覧します。(Smita Kulkarni)。
テーブルエンジンとストレージ
- Prometheus HTTP Query API の一部をサポートしました。有効化するには、設定ファイルの
<prometheus>セクションにquery_apiタイプのルールを追加します。サポートされるハンドラーは/api/v1/query_rangeと/api/v1/queryです。#86132(Nikita Mikhaylov)。 - ユーザーは、これまでのファイルを保持または削除するオプションに加えて、処理済みファイルを移動またはタグ付けするように S3/Azure Queue テーブルを設定できるようになりました。#72944 を解決します。#86907(Murat Khairulin)。
- マージ後の Wide パーツにおける動的サブカラム数を、データ型で指定されたパラメータに関係なく制限できるようにするため、新しい MergeTree の設定
merge_max_dynamic_subcolumns_in_wide_partを追加しました。#87646(Pavel Kruglov)。 - Microsoft OneLake カタログとの連携を追加しました。#89366(Konstantin Vedernikov)。
- 一時テーブルに対して
CREATE OR REPLACE構文をサポートしました。#35888 をクローズします。#89450(Aleksandr Musorin)。 - MergeTree テーブルに対して
direct(ネストされたループ)JOIN をサポートしました。使用するには、設定で唯一のオプションとして指定します:join_algorithm = 'direct'。#89920(Vladimir Cherkasov)。 - この PR では、
ALTER TABLE ... ADD PROJECTIONに新たに追加されたWITH SETTINGS句を通じて利用可能な、プロジェクションレベルの設定を導入します。これらの設定により、プロジェクションはプロジェクション単位で、特定の MergeTree ストレージパラメータ(例: index_granularity, index_granularity_bytes)を上書きできるようになります。#90158(Amos Bird)。
Iceberg とデータレイク
- Iceberg に対する
CREATE操作でのORDER BYのサポートおよびINSERT時のソートをサポート。#89916 を解決。#90141(Konstantin Vedernikov)。
SQL とクエリの機能
- 集約関数
windowFunnelにオプションallow_reentryを追加しました。strict_orderとともに有効化すると、ファネル解析を停止する代わりに順序に違反するイベントを無視します。これにより、リフレッシュを伴うユーザージャーニー (A->A->B) や戻る操作を伴うユーザージャーニー (A->B->A->C) を扱う際に、コンバージョン率を過少報告せずに済みます。#86916(Lee ChaeRok)。 - テキスト索引の構築時に、新しい引数
preprocessorを指定できるようになりました。この引数は、トークン化の前に各ドキュメントを変換するための任意の式です。#88272(Jimmy Aguilar Mena)。 - テーブルの一部(割合)を選択するために、
LIMITおよびOFFSETで小数値を指定できるようになりました。#81892 をクローズ。#88755(Ahmed Gouda)。 - 出力パスが存在しない場合の
INTO OUTFILEのエラーを防ぐために、親ディレクトリを自動的に作成する設定into_outfile_create_parent_directoriesを追加しました。#88610 を解決。#88795(Saksham)。 - JSON 型に対する INSERT/型キャスト時に、入力 JSON を JSON 型の明示的な型付きパスへキャストできない場合の例外を無効にするための設定
type_json_skip_invalid_typed_pathsを追加しました。代わりに、その型付きパスの null 値/ゼロ値にフォールバックします。#86917 をクローズ。#89886(Max Justus Spransy)。
クライアントおよび CLI の機能
- CLI クライアントで、
--no-server-client-version-messageまたはfalseを指定することで、「ClickHouse server version is older than ClickHouse client. It may indicate that the server is out of date and can be upgraded.」というメッセージを非表示にできるようになりました。#87784 (Larry Snizek)。 --loginを使用して、Cloud クレデンシャルで ClickHouse Cloud インスタンスにアクセスできるようになりました。#89261 (Krishna Mannem)。- Web UI にダウンロードボタンが追加されました。UI で一部のみが表示されている場合でも、結果全体をダウンロードします。#89768 (Alexey Milovidov)。
サーバー構成と監視
X-ClickHouse-ProgressおよびX-ClickHouse-Summaryにmemory_usageフィールドを追加しました。これにより、クエリのメモリ使用量をクライアント側でリアルタイムに収集できます。 #88393 (Christoph Wurm)。- プロファイルイベントを使用しない場合に、クライアント側のネットワークトラフィックを削減できるようにする
send_profile_eventsSETTING を追加しました。 #89588 (Kaviraj Kanagaraj)。
Keeper
- Keeper の ZooKeeper 互換性: STATISTICS を伴う CREATE に対応。#88797(Konstantin Vedernikov)。
- ClickHouse Keeper における ZooKeeper 永続ウォッチのサポート。#88813(Konstantin Vedernikov)。
入出力フォーマット
- 新しい入出力フォーマット
Buffersを実装しました。このフォーマットはNativeに似ていますが、Nativeと異なり、カラム名、カラム型、追加のメタデータを保存しません。#84017 をクローズしました。#91156(Nihal Z. Miaji)。 - Dremio およびコマンド形式のディスクリプタを要求するその他の Arrow Flight サーバーをサポートするために、
arrow_flight_request_descriptor_type設定を追加しました。#89523 を修正しました。#89826(Shreyas Ganesh)。 - メッセージペイロードをパースする前にエンベロープヘッダーのバイト(例: AWS Glue Schema Registry の 19 バイトのプレフィックス)をスキップできるようにするため、Kafka テーブルエンジンに
kafka_schema_registry_skip_bytes設定を追加しました。#89621(Taras Polishchuk)。
その他の新機能
- Cluster テーブル関数でのファイル並列読み込み時のストリーム数を制御するための設定
max_streams_for_files_processing_in_cluster_functionsを追加。#90223 をクローズ。#91323(Pavel Kruglov)。 - クエリごとに近接パーツデータのバックグラウンドでのダウンロードを無効化できるようにした。#89524 を修正。#89668(tanner-bruce)。
- ClickHouse の新しいプラットフォームとして e2k (Elbrus-2000) を実験的にサポート。#90159(Ramil Sattarov)。
実験的機能
- ACME プロバイダからの TLS 証明書取得をサポートしました。RFC 8555。#66315(Konstantin Bogdanov)。
- 設定
automatic_parallel_replicas_modeで制御される、並列レプリカを用いてクエリを自動実行するための新しいロジックを導入しました。#87541(Nikita Taranov)。 - フルテキスト検索は、以前の実験的段階からプライベートプレビューに移行しました。#88928(Robert Schulze)。
Aliasを実験的機能に移動し、allow_experimental_alias_table_engine=1で有効化できるようにしました。#89712(Kai Zhu)。
パフォーマンスの向上
クエリの実行と最適化
- クエリが行制限に達した場合は早期に失敗させるようにしました。#61872 を解決。#62804(Sean Haynes)。
- クエリプラン内の未使用カラムを削除する最適化を追加しました。#75152 を解決。#76487(János Benjamin Antal)。
- ConstantNode における大きな値に対する最適化を行いました。#72880 をクローズ。#81104(Yakov Olkhovskiy)。
- キャッシュミスを最小化するため、ハッシュテーブル反復中にキーを先読みするようにしました。#84708(lgbo)。
- コードの単純化と選択アルゴリズムの調整により、LZ4 の伸長速度を改善しました。#88360(Raúl Marín)。
- JOIN および ARRAY JOIN において、遅延カラムレプリケーションを実装しました。Sparse や Replicated のような特殊なカラム表現を、一部の出力フォーマットでフルカラムへ変換することを避けます。これにより、メモリ内での不要なデータコピーを回避します。#88752(Pavel Kruglov)。
- 動的ディスパッチを用いて、論理関数に対して高度な SIMD 演算を使用するようにしました。#90432(Raúl Marín)。
- 結果カラムを不要にゼロ初期化しないことで、JIT 関数の実行パフォーマンスを改善しました。#90449(Raúl Marín)。
- 動的ディスパッチにより、T64 の伸長処理を高速化しました。#90610(Raúl Marín)。
- 動的ディスパッチにより、(
WHERE句内での)カラムから bool への変換を高速化しました。#91203(Raúl Marín)。 - 動的ディスパッチにより、単一の数値ブロックのソートを高速化しました。#91213(Raúl Marín)。
JOIN の最適化
RIGHTおよびFULL JOINが ConcurrentHashJoin を使用するようになりました。これにより、これらの種類の JOIN はより高い並列度で実行されます。RIGHTおよびFULL JOINのさまざまなケースで、最大 2 倍の高速化が見込めます。#78027 を解決しました。#78462(Yarik Briukhovetskyi)。- 一部のケースでは、
ANY LEFT JOINまたはANY RIGHT JOINをALL INNER JOINに書き換えられるようになりました。#89403(Dmitry Novik)。 ANTIJOIN に対するJOINランタイムフィルタをサポートしました。また、ロック競合を減らすためにランタイムフィルタの実装をリファクタリングしました。#89710(Dmitry Novik)。- 後続のステップで活用できるよう、
LEFT/INNER JOIN演算において左テーブルからの読み取り順序を維持できるようにしました。#89815(Vladimir Cherkasov)。
MergeTree とストレージの最適化
- 10K 以上のパーツを持つテーブルで、パーティションプルーニングが多い
SELECTクエリを最大 8 倍まで高速化。#85535(James Morrison)。 - クエリが集約状態(小さい整数による GROUP BY)に固定ハッシュマップを使用する場合、ClickHouse はクエリを高速化するために集約状態を並列にマージするようになりました。#63666 を解決。#87366(Jianfei Hu)。
- Parquet reader v3 をデフォルトで有効化。#88827(Michael Kolupaev)。
optimize_read_in_orderとquery_plan_optimize_lazy_materializationを同時に利用してクエリを高速化可能に。#88767 を解決。#88866(Manuel)。DISTINCTを含むクエリで集約 PROJECTION を使用。#86925 をクローズ。#88894(Nihal Z. Miaji)。- 入力のソート順が
LIMIT BYキーと一致する場合に、ストリーミングLIMIT BYtransform を実行。#88969(Eduard Karacharov)。 - Nullable 型のカラムに対するスパースシリアライゼーションをサポート。#88999(Amos Bird)。
- MergeTree reader のインプレースフィルタリングを最適化。#87119 を解決。#90630(Xiaozhe Yu)。
- 選択されたマージ候補の幅を削減するための追加のヒューリスティックを導入。#91163(Mikhail Artemenko)。
索引およびテキスト検索の最適化
- ClickHouse は、
ANDとORが混在したフィルター条件を持つWHERE句に対してスキップ索引を用いた索引解析を行うようになりました。これまでは、スキップ索引を利用するにはWHERE句がフィルター条件の連言 (AND) である必要がありました。この機能は新しいuse_skip_indexes_for_disjunctions設定(デフォルト: on)で制御されます。#87781 (Shankar Iyer). like、equals、hasなどの関数を含む述語について、テキスト索引から構築された追加の事前フィルターを活用することでフィルタリングのパフォーマンスを向上させました。この最適化はquery_plan_text_index_add_hint設定で有効化されます。#88550 (Anton Popov).- Dictionary ブロックのキャッシュと、バイナリサーチの代わりにトークン検索にハッシュテーブルを使用することで、テキスト索引のパフォーマンスを改善しました。#88786 (Elmi Ahmadov).
- ポスティングリストはデータサイズが最も大きいため、それらをキャッシュすることで連続実行時のパフォーマンスが向上します。#88912 (Elmi Ahmadov).
- 可能なキー値の事前計算済み集合に対して高速な検索を行うことで、繰り返し実行される逆向き Dictionary ルックアップを最適化しました。#7968 をクローズしました。#88971 (Nihal Z. Miaji).
- スキップ索引と動的しきい値フィルターを使用して、処理される行数を大幅に削減することで
ORDER BY...LIMIT Nクエリを最適化しました。#89835 (Shankar Iyer). - 大きな
minmax索引(数百万グラニュール)が存在する場合、索引解析のレイテンシの低減が期待できます。#90428 (Shankar Iyer).
集約の最適化
AggregateFunctionHistogramを、points 配列の末尾部分のみをソートし、単調な入力に対してはソートをスキップすることで最適化し、およそ 10% の高速化を達成しました。 #85760 (MakarDev).- HashSetTable::merge のオーバーヘッドを削減することで、一部の countDistinct 演算をわずかに高速化しました。 #89727 (Raúl Marín).
- topK のパフォーマンスと挙動を改善しました。 #90091 (Raúl Marín).
- Decimal 型の比較演算のパフォーマンスを改善しました。#28192 を解決しました。 #90153 (Konstantin Bogdanov).
S3 とバックアップの最適化
- S3 はキー名プレフィックスに基づいて内部的にオブジェクトをパーティション分割し、パーティションごとの高いリクエストレートに自動的にスケールできるようになっています。この変更により、2 つの新しい BACKUP 設定
data_file_name_generatorとdata_file_name_prefix_lengthが導入されました。data_file_name_generator=checksumの場合、バックアップデータファイルはその内容のハッシュを用いた名前で保存されます。#88418 (Julia Kartseva)。 - グロブパターンで作成された S3 テーブルに対して
_pathフィルタ値をプッシュダウンすることでクエリパフォーマンスを改善し、S3 の listing 操作を回避できるようにしました。s3_path_filter_limit設定で制御されます。#91165 (Eduard Karacharov)。
データレイクの最適化
- 分散実行: タスクをファイル単位ではなく行グループ ID 単位でより適切に分割。#87508 (Konstantin Vedernikov).
- Paimon 関数でのパーティションプルーニングをサポート。#90253 (JIaQi Tang).
改善
クエリの最適化と実行
- レプリケーテッド MergeTree テーブルに障害のあるディスクが存在していても
FETCH PARTITIONが行えるようになりました。 #58663 (Duc Canh Le)。 - ジオメトリを h3 の六角形セルで充填できる
h3PolygonToCells関数を追加しました。これにより #33991 が解決されます。 #66262(Zacharias Knudsen)。 - すべての DDL
ON CLUSTERクエリは、アクセス権限の検証をより正確に行うため、元のクエリを実行したユーザーのコンテキストで実行されるようになりました。 #71334 (pufit). ALTER TABLE ... FREEZEクエリの処理を並列化しました。 #71743 (Kirill)。INの第 2 引数に非定数を使用できるようになりました。第 2 引数としてタプルも指定できます。 #77906 (Yarik Briukhovetskyi)。- この PR により、通常のプロジェクションをセカンダリ索引として使用できるようになります。有効にすると、特定のクエリ述語を利用してプロジェクションのパーツから読み出し、PREWHERE ステージで行を効率的にフィルタリングするためのビットマップを生成できます。 #81021 (Amos Bird)。
- より良い一貫性保証のため、
enable_shared_storage_snapshot_in_queryをデフォルトで有効化しました。 #82634 (Alexey Milovidov). - UNION は、必要に応じて Variant を使用して型を統一するようになりました。#82772 を解決しました。#83246(Mithun p)。
- 内部クエリ(dictionaries、リフレッシャブルmaterialized view などによって内部的に実行されるもの)をログ出力し、
system.query_logに新しいis_internalカラムを追加しました。 #83277 (Miсhael Stetsyuk). ALIASカラム(式を一切使用せずに物理カラムを単に参照するカラム)へのINSERTを許可します。#80060 をクローズします。#84154(Shaurya Mohan)。- clickhouse-client で、
SELECTを含むCREATE OR REPLACE TABLEクエリに対して、進行状況バー、ログ、およびパフォーマンス統計情報を表示できるようになりました。#38416 を解決しました。#87247(Diskein)。 - ハッシュ関数で JSON 型および Dynamic 型をサポートしました。#87734 を解決。 #87791(Pavel Kruglov)。
query_plan_optimize_join_order_limitのデフォルト値が 10 に変更されました。 #89312 (Alexey Milovidov)。- 最適化オプション enable_lazy_columns_replication がデフォルトで有効になり、JOIN 時のメモリ使用量が削減されます。 #89316 (Alexey Milovidov).
allow_statistics_optimize設定をデフォルトで有効化し、JOIN のオプティマイザーがカラム統計情報を使用するようにしました。 #89332 (Alexey Milovidov).create_table_empty_primary_key_by_defaultをデフォルトで有効化しました。これによりユーザビリティが向上します。 #89333 (Alexey Milovidov).enable_time_time64_type設定がデフォルトで有効になりました。 #89345 (Yarik Briukhovetskyi)。allow_special_serialization_kinds_in_output_formats設定をデフォルトで有効化しました。 #89402 (Pavel Kruglov).- Shared Catalog を通じて実行されるクエリでは
ON CLUSTER句を無視するようにしました。(Nikolay Degterinsky)。 - Shared Catalog で
ALTER DATABASE MODIFY COMMENTが利用できるようになりました。(Nikolay Degterinsky). - Shared データベースにおける SharedSet/SharedJoin で
CREATE OR REPLACEをサポートしました。(Tuan Pham Anh)。 - SharedMergeTree で
SYNC REPLICAを実行する際に、他のクエリの完了を待たないようにしました。 (Raúl Marín)。
Storage and MergeTree improvements
- S3 内の BLOB に関連付けられているすべてのタグを含む新しい仮想カラム
_tags(Map(String, String)) を追加しました。これにより #72945 が解決されました。 #77773(Zicong Qu)。 - パーツが重複排除されたことを示すエラーメッセージを追加しました。 #80264(Aleksandr Musorin)。
- OpenSSL 3.5.4 を使用するようにしました。 #81389(Konstantin Bogdanov)。
- bcrypt 認証用のキャッシュを追加しました。 #87115(Nikolay Degterinsky)。
- Parquet のタイムゾーンなしタイムスタンプ(isAdjustedToUTC=false)は、これまでの DateTime64(...) ではなく、DateTime64(..., 'UTC') として読み込まれるようになりました。 #87872(Michael Kolupaev)。
- SQL で定義されたロールを、
users.xmlで定義されたユーザーに付与できるようになりました。 #88139(c-end)。 - FINAL クエリで使用されるスキップ索引が、主キーの一部であるカラム上にある場合、他のパーツで主キーの交差を確認する追加ステップは不要であり、実行されなくなりました。 #85897 を解決しました。 #88368(Shankar Iyer)。
disable_insertion_and_mutationが有効な場合でも、リモートテーブルおよびデータレイクテーブルへの挿入が許可されるようになりました。 #88549(Alexander Tokmakov)。- テーブルレベルの統計情報をキャッシュし、2 つの設定を追加しました: MergeTree の設定
refresh_statistics_intervalとセッション設定use_statistics_cache。 #88670(Han Fei)。 - 変更処理中に索引をどのように扱うかを制御するための MergeTree 設定
alter_column_secondary_index_modeを追加しました。指定可能な値: throw、drop、rebuild、compatibility。 #77797 をクローズしました。 #89335(Raúl Marín)。 - パーツ向けにテーブル単位の
ColumnsDescriptionキャッシュを導入し、多数のパーツと多数のカラムを含むテーブルでのメモリ使用量を削減しました。 #89352(Azat Khuzhin)。
システムテーブルとモニタリング
- サーバーおよび Keeper 向けに、Keeper リクエストの実行ステージの所要時間を計測する複数のヒストグラムメトリクスを追加。#88158 (Miсhael Stetsyuk).
system.columnsに新しいカラム統計を追加し、このテーブル上で構築されている統計の種類を示すようにしました。#89086 (Han Fei).- HTTP インターフェイスは、クエリ結果キャッシュが使用されている場合に
AgeおよびExpiresヘッダーを返します。新しいプロファイルイベントQueryCacheAgeSeconds、QueryCacheReadRows、QueryCacheReadBytes、QueryCacheWrittenRows、QueryCacheWrittenBytesを導入。#89759 (Alexey Milovidov). - Web UI にテーブルプロパティを表示。行数またはバイト数をクリックすると、
system.tablesからのクエリが表示されます。#89771 (Alexey Milovidov). system.error_logテーブルにlast_error_time、last_error_message、last_error_query_id、last_error_traceフィールドを追加。#89879 (Narasimha Pakeer).system.part_logsに重複排除ブロック ID を保存。#89928 (Sema Checherinda).check_query_single_value_resultのデフォルト値をtrueからfalseに変更。これにより、CHECK TABLEは集約結果ではなく、パーツごとの詳細な結果を返すようになります。#90150 (Robert Schulze).- 診断性向上のため、
system.mutationsに新しいカラムparts_in_progress_namesを追加。#90155 (Shaohua Wang). - バックグラウンドジョブのインサイト取得を改善するため、
system.background_schedule_pool{,_log}を導入。#91157 (Azat Khuzhin). - プロファイルイベント
FailedInitialQueryおよびFailedInitialSelectQueryを追加。#91172 (RinChanNOW). - ダングリングパーツのメトリクス用に、
system.tablesに 3 つのカラムを追加。Han Fei). distributed_cache_client.connection_pool_sizeの値をメトリクスとして公開。Francesco Ciocchetti).
クライアントとUIの改善
- ページャー動作中でも、Ctrl+C を押すことでクエリをキャンセルできるようになりました。#80778 を解決しました。#88935 (Grigorii Sokolik)。
- Web UI のテーブルでは、値が負の場合でもバーが表示されるようになりました。#89016 (Alexey Milovidov)。
- 先頭が空白文字のクエリは履歴に保存されなくなりました。#89116 (Konstantin Bogdanov)。
- 対話モードの
clickhouse-clientおよびclickhouse-localでは、カーソル下にある識別子と同じ名前を持つコマンドライン上の識別子がハイライト表示されるようになりました。#89689 (Alexey Milovidov)。 - Web UI のクエリ入力用テキストエリアのリサイズハンドルが全幅になりました。#89457 (Alexey Milovidov)。
- Web UI の型ヒントがテーブルヘッダーにはみ出さないようになりました。#89753 (Alexey Milovidov)。
- Web UI のクエリエディタで、選択中の行を
Ctrl+/(Mac ではCmd+/)で素早くコメントアウト/コメント解除できるようになりました。#91160 (Samuel K.)。 - XDG Base Directory のパスから ClickHouse Client の設定を読み込めるようになりました。#89882 を解決しました。#90306 (Wujun Jiang)。
S3 とクラウドストレージの改善
- エンドポイントでリージョンが指定されていない場合に、S3 用のオプトインが必要な AWS リージョンを自動的に使用できるようにしました。#88930 (Andrey Zvonov)。
- S3 の再パーティショニングが発生した場合でもバックアップが確実に成功するよう、25.6 ではデフォルトの
s3_retry_attemptsを 500 に設定しました。#89051 (Nikita Mikhaylov)。 - STS エンドポイントとやり取りする S3 クレデンシャルをキャッシュし、異なる関数呼び出し間で再利用できるようにしました。#89734 (Antonio Andelic)。
- 事前署名付き URL が S3 で動作するようになりました。#65032 をクローズしました。#90827 (Yarik Briukhovetskyi)。
データレイクの改善
deltaLakeテーブル関数で、delta_lake_snapshot_start_version、delta_lake_snapshot_end_version設定を用いた Delta Lake CDF の読み取りをサポート。#90431(Kseniia Sumarokova)。SELECTとの一貫性のため、INSERT INTOテーブル関数でのストレージ設定をサポート。#89386 をクローズ。#91707(Kseniia Sumarokova)。- データレイクに対する
TRUNCATEクエリについて、何もせずに黙って成功させるのではなく、「not implemented」エラーをスローするように変更。#86604 をクローズ。#91713(Kseniia Sumarokova)。
Kafka の改善
kafka_compression_codecとkafka_compression_level設定を使用して、Kafka プロデューサーの圧縮方式を指定できるようになりました。#89073(János Benjamin Antal)。- 調整可能な
Kafkaテーブルエンジンの設定としてkafka_consumer_reschedule_msを追加しました。#89204 を解決します。#90112(Jeremy Aguilon)。
Keeper の改善
- Keeper における append リクエストのバッチにバイトサイズの上限を追加しました。上限は
keeper_server.coordination_settings.max_requests_append_bytes_sizeで制御されます。#90342 (Antonio Andelic)。 - ハンドシェイク中に keeper-server 側でのチェックを追加し、
last_zxid_seen (client によって提供される) > last_processed_zxidの場合にクライアントを拒否するようにしました。#90016 (Miсhael Stetsyuk)。 - S3Queue のクリーンアップ時の RemoveRecursive Keeper リクエストに対して、より小さいノード数の上限を使用するようにしました。#90201 (Antonio Andelic)。
入出力フォーマットの改善
- 論理型 UUID を持つ
FixedString(16)で表現されている場合の Parquet における UUID サポートを追加しました。#74484 (alekseev-maksim)。 hasAnyTokens関数およびhasAllTokens関数への入力として、文字列配列をサポートしました。#89124 (Elmi Ahmadov)。- Pretty フォーマットで、名前付きタプルが Pretty JSON として表示されるようになりました。これにより #65022 がクローズされました。#91779 (Mostafa Mohamed Salah)。
- CapnProto メッセージサイズ上限を追加しました。
format_capn_proto_max_message_sizeで変更できます。#91888 (Antonio Andelic)。
テキスト索引の改善
- テキスト索引が ReplacingMergeTree テーブルでも動作するようになりました。#90908 (Elmi Ahmadov).
PREWHEREで反転インデックスを使用できるようにしました。#89975 を解決しました。#89977 (Peng Jian).- Ngrams tokenizer を
ngram_length = 1でビルドできるようになりました。#91529 (George Larionov). - テキスト索引のデシリアライズ済みヘッダー用のキャッシュを導入し、I/O を削減してクエリ性能を向上させました。#89513 (Elmi Ahmadov).
その他の改善
- サイズ制限を検証する際に、
max_binary_string_sizeではなくmax_binary_array_size設定を使うように、ArrayとMapのバイナリデシリアライズを修正しました。#88744 (Raufs Dunamalijevs). - システムメモリが 5GB 未満の場合は、デフォルトで実行ファイルを mlock しないようにしました。#89751 (Alexey Milovidov).
system.metric_logテーブルで、min_bytes_for_wide_partとvertical_merge_algorithm_min_bytes_to_activateを 128MB に設定することで、マージ時のメモリ使用量を削減しました。#89811 (filimonov).- S3 ライブラリが XML レスポンスをパースする際に、ネットワークエラーをリトライするようにしました。#90216 (Sema Checherinda).
- ガードレールの制限値に近づいたときの警告メッセージを更新し、現在値と例外発生時の値を表示するようにしました。#90438 (Nikita Fomichev).
system.filesystem_cacheテーブルで、すべてのキャッシュ状態を 1 つの chunk にまとめるのではなく、chunk をストリーミングするようにしました。#90508 (Kseniia Sumarokova).- ベクトル類似度索引キャッシュ内のエントリが、テーブルパーツが削除されたり新しいパーツに置き換えられたりしたときに削除されるようになりました。#90750 (Shankar Iyer).
- 認証前に返される HTTP エラーレスポンスで ClickHouse サーバーバージョンを公開しないようにしました。#91003 (filimonov).
FINAL処理の後で行ポリシーとPREWHERE条件を適用できるように、新しい設定apply_row_policy_after_finalとapply_prewhere_after_finalを追加しました。#90986 を修正しました。#91065 (Yarik Briukhovetskyi).- tupleElement で JSON 型をサポートしました。#81630 をクローズしました。#91327 (Pavel Kruglov).
- タプル要素アクセスで負のインデックス(例: tuple.-1)をサポートしました。#91665 (Amos Bird).
ArrayからQBitへのキャスト時に暗黙の型変換を許可しました。#91846 (Raufs Dunamalijevs).system.blob_storage_logに新しいカラムelapsed_time_microsecondsを追加しました。#92322 (Alexey Milovidov).- Shared データベースにおけるテーブル削除の遅延時間を制御できる新しい設定
database_shared_drop_table_delay_secondsを追加しました。(Nikolay Degterinsky). - 名前付きコレクション用の暗号化キーを遅延ロードするようにしました。(Pablo Marcos).
- 分散キャッシュで、バッファー単位でクライアントキャッシュを無効化できるようにしました。(Kseniia Sumarokova).
- 分散キャッシュ接続に共通の上限値を追加しました。(Kseniia Sumarokova).
バグ修正
注記
このセクションでは、重要なバグ修正のうち主なもののみを取り上げています。このリリースにおけるすべてのバグ修正の一覧については、完全な変更履歴を参照してください。
クエリ実行に関する修正
- 分散マージ集約で複数のリモート分片が関与する場合の
rows_before_limit_at_leastの不正な値を修正しました。#63511 (Amos Bird). INSERT INTO ... SELECTクエリの後に0 rows in setが表示される問題を修正しました。#47800 をクローズ。 #79462 (Engel Danila).- 定数引数およびショートサーキット評価を伴う
multiIfを修正しました。#72714 をクローズ。 #84546 (Yakov Olkhovskiy). - サブクエリ制約を持つテーブルに対して SELECT を実行した際に発生する LogicalError を修正しました。#84190 を解決。 #85575 (Pervakov Grigorii).
query_plan_optimize_join_order_limit > 1の場合の CROSS JOIN の並び替えにおける論理エラーを修正しました。#89409 をクローズ。 #88286 (Vladimir Cherkasov).- 右テーブルのキーがユニークな場合に OR 条件付きの JOIN で誤った結果になる問題を修正しました。#89391 を解決。 #89512 (Vladimir Cherkasov).
- 重複カラムを伴う full_sorting_merge join における論理エラーを修正しました。#86957 を解決。 #89495 (Vladimir Cherkasov).
- 重複カラムを伴う JOIN で発生しうる "Invalid number of rows in Chunk" エラーを修正しました。#89411 を解決。 #90053 (Vladimir Cherkasov).
- parallel replicas 有効時、分散テーブルを用いた RIGHT JOIN で重複データが発生する問題を修正しました。#90806 (zoomxi).
join_use_nullsと複数の JOIN、さらに CROSS JOIN を組み合わせた場合の論理エラーを修正しました。#91853 (Vladimir Cherkasov).
データ型と JSON の修正
- 一部のケースにおいて、名前にドットを含むカラムからサブカラムを読み取る処理を修正しました。次の問題を解決します: #81261、#82058、#88169。#87205(Pavel Kruglov)。
- JSON 内の Float と Bool が混在した配列の読み取りを修正しました。以前はそのようなデータを挿入すると例外が発生していました。#88008(Pavel Kruglov)。
LowCardinality(Nullable(T))から Dynamic へのキャストを修正しました。#86365(Pavel Kruglov)。- 高度な JSON 共有データのシリアル化処理において、パスおよびそのサブカラムの読み取り時に発生しうる論理エラーを修正しました。#89805 をクローズしました。#89819(Pavel Kruglov)。
- データ型のバイナリデシリアル化で発生しうるスタックオーバーフローを修正しました。#88710 をクローズしました。#89822(Pavel Kruglov)。
- JSON 内の共有データおよび動的パスの状態が不整合になりうる問題を修正しました。この問題は論理エラーや予期しない結果につながる可能性がありました。#90816(Pavel Kruglov)。
- Summing/Aggregating/Coalescing MergeTree における JSON カラムのマージ処理を修正しました。#91151(Pavel Kruglov)。
MergeTree とストレージの修正
- 有効期限 (TTL) によるカラムの早期削除が原因で発生していた複数の問題を修正しました。 #88002 を解決します。 #88860 (Amos Bird).
- 主キーが逆順の場合に
min(PK)/max(PK)の結果が誤っていた問題を修正しました。これは #83619 を修正します。 #88796 (Amos Bird). - 主キーが降順にソートされている場合に、
JOIN最適化で誤った分片処理が行われる問題を修正しました。 #88512 を解決します。 #88794 (Amos Bird). - PROJECTION の索引の読み取り経路におけるレースコンディションを修正しました。 #89497 を解決します。 #89762 (Peng Jian).
deduplicate_merge_projection_mode='ignore'を使用している場合に、有効期限 (TTL) により空になったパーツと、非空の PROJECTION を含むパーツのマージ処理が誤っていた問題を修正しました。 #89430 を解決します。 #89458 (Amos Bird).- コンパクトなパーツに対して一部の
ALTERクエリを実行した後に発生しうるTOO_MANY_MARKSエラーを修正しました。 #91980 (alesapin).
Parquet およびフォーマットの修正
input_format_parquet_local_file_min_bytes_for_seekが 0 に設定されている場合に Parquet リーダーで発生していたセグメンテーションフォルトを修正しました。#78456 を解決。#88784 (Animesh)。- Parquet writer において、
created_by文字列を正しいフォーマットで出力するようにしました。#87735 (Michael Kolupaev)。 - ネイティブ writer を用いた単一スレッド書き込み時に、Parquet 書き込みで元の順序が保持されない問題を修正しました。#90126 (Arthur Passos)。
- DICTIONARY_V2 でエンコードされ、NULL 値のみを含む文字列カラムを読み込む際の ORC リーダーのバグを修正しました。#91889 (Peng Jian)。
- ORC フォーマットから Date および DateTime64 型を読み込む際に発生していたオーバーフローを修正しました。#70976 をクローズ。#91572 (Yarik Briukhovetskyi)。
Iceberg とデータレイクの修正
icebergS3Clusterプロトコルを修正し、icebergクラスタ関数でスキーマ進化、位置削除および等価削除をサポートするようになりました。#88287 を解決しました。#88919(Yang Jiang)。- glue カタログを使用している場合に、timestamp カラムを含む iceberg テーブルで発生する JSON の例外を修正しました。#90210 を解決しました。#90209(Alsu Giliazova)。
- manifest ファイルでソート順が指定されていない場合、ClickHouse が iceberg に対して read-in-order 最適化を使用しないようになりました。#89178 を修正しました。#90304(alesapin)。
関数の修正
- 関数
reverseUTF8のバグを修正しました。以前のバージョンでは、長さ 4 の UTF-8 コードポイントのバイト列を誤って反転していました。これにより #88913 がクローズされました。 #88914 (Alexey Milovidov)。 cramersV、cramersVBiasCorrected、theilsU、contingencyにおいて誤った結果を引き起こしていた φ二乗の計算を修正しました。 #87831 (Nihal Z. Miaji)。top_kが単一引数で呼び出された際に、しきい値(threshold)パラメータを正しく考慮するよう修正しました。これにより #88757 がクローズされました。 #88867 (Manuel)。countIf(*)の引数が切り捨てられる問題を修正しました。これにより #89372 がクローズされました。 #89373 (Manuel)。trim、ltrim、rtrim関数が 2 つの引数で動作しない問題を修正しました。これにより #90170 がクローズされました。 #90305 (Nihal Z. Miaji)。- 空配列と
isNull関数を併用した場合にarrayFilter関数が動作しない問題を修正しました。これにより #73849 がクローズされました。 #91105 (Nihal Z. Miaji)。
メモリおよびクラッシュの修正
IN内でのARRAY JOINを含むリモートクエリ実行時、enable_lazy_columns_replication設定有効時に発生しうるクラッシュを修正しました。#90361。#89997(Pavel Kruglov)。- 誤った破棄順序が原因で、サーバーのクリーンシャットダウン中に発生していたクラッシュを修正しました。#82420。#90076(Nikita Mikhaylov)。
- 集約関数の状態に LowCardinality(String) のカラムのシリアライズされた値が含まれている場合に発生するクラッシュを修正しました。#89550(Pavel Kruglov)。
- 不正な形式の分片ディレクトリ名を解析する際に StorageDistributed で発生するクラッシュを修正しました。#90243(Aleksandr Musorin)。
- userspace page cache が有効な場合に発生していた誤ったメモリ制限エラーを修正しました。#91361(Michael Kolupaev)。
MEMORY_LIMIT_EXCEEDEDの後に集約関数で発生しうるクラッシュを修正しました。#92390(Azat Khuzhin)。- ハッシュ結合の結果生成におけるメモリ使用量のトラッキングを改善しました。#89560(Azat Khuzhin)。
セキュリティとアクセスに関する修正
- 存在しないロールを持つユーザーから clusterAllReplicas を実行しようとした際に発生する
ACCESS_ENTITY_NOT_FOUNDエラーを修正。#87670 を解決。#89068(pufit)。 - 対象ホストとして
localhostを指定したremoteテーブル関数が使用される場合のALTER UPDATEクエリに対するアクセス権検証を修正。#90761(pufit)。 - 部分的な revoke に対するワイルドカード grant のチェックを修正。#90922(pufit)。
- ワイルドカード revoke と組み合わせたグローバル grant の処理を修正。#90928(pufit)。
Replicated データベースの修正
- リカバリ後に、Replicated データベースのレプリカが長時間にわたって
Failed to marked query-0004647339 as finishedのようなメッセージを出力し続けて進まなくなることがありましたが、修正されました。 #88671 (Alexander Tokmakov)。 - シャットダウン処理とバックグラウンドの
INSERTの競合状態により Distributed で発生していた use-after-free を修正しました。#88640 を解決します。 #89136 (Azat Khuzhin)。 - リフレッシャブルmaterialized view:リフレッシュ中にソーステーブルが完全に DROP された場合にまれに発生していたサーバークラッシュを修正しました。 #89203 (Michael Kolupaev)。
Keeper の修正
- ローテーション時に
changelogが正しくリネームされなかった場合に、Keeper の起動時におけるchangelogの読み取り処理が失敗していた問題を修正。#89496 (Antonio Andelic).
その他の主な修正
- スキップ索引を解析する際のパフォーマンス低下を修正しました。 #89004 (Anton Popov).
- 25.8 へのスムーズなアップグレードを妨げていた Hive パーティショニングの非互換性を修正しました。 #90202 (Kseniia Sumarokova).
nan/infにより無限に続いていたWITH FILLクエリを修正しました。 #69261 を解決しました。 #90255(Konstantin Bogdanov)。- Time および Time64 は、DateTime および DateTime64 からの変換時にタイムゾーンを正しく考慮するようになりました。#89896 をクローズしました。#90310(Yarik Briukhovetskyi)。
SELECTクエリでクエリ条件キャッシュが有効な場合に、論理更新後に誤ったクエリ結果が返される可能性があった問題を修正しました(#90176)。 #90204(Anton Popov)。- インメモリでの String 集約状態のシリアライズ互換性を修正。 #90880 (Antonio Andelic).
NestedかつLowCardinalityなカラムに対するSummingMergeTreeの集約を修正しました。 #90927 (Ivan Babrou)。system.view_refreshesがNo macro 'replica' in configエラーで失敗する問題を修正しました。 #92203 (Michael Kolupaev).- Shared Catalog を使用する MV に対して、カラムを間接的に追加する
ALTERクエリのレプリケーションを修正しました。 (Nikolay Degterinsky). - 失敗した MV コミットによって Shared Catalog の状態適用処理がハングする不具合を修正しました。 (Nikolay Degterinsky)
- Shared Catalog を使用するセカンダリレプリカ上での
ALTERにおける設定制約のチェックを修正しました。(Nikolay Degterinsky) - SharedCatalog へのマイグレーション時にデータベースコメントが保持されるようになりました。 (Alexander Tokmakov).
- Shared Catalog でセカンダリーレプリカ上の materialized view が置き換えられてしまう問題を修正しました。 (Nikolay Degterinsky)
- system.distributed_cache_usage カウンターを修正しました。(Kseniia Sumarokova)。
- Shared Catalog で
ILLEGAL_COLUMN例外により CREATE に失敗したテーブルに対し、DROP が進行しなくなる問題を修正しました。(Nikolay Degterinsky) - Replicated データベースにおいて、SharedSet/SharedJoin での
CREATE OR REPLACEを無効化しました。(Tuan Pham Anh) - 共有データベースでの RMV リフレッシュ時に発生する
UNFINISHED例外を修正。(Nikolay Degterinsky)。 - Shared データベースで
TABLE_ALREADY_EXISTSエラーにより発生していたクラッシュを修正しました。 (Nikolay Degterinsky). - Shared Catalog 内で不正な CREATE クエリを持つテーブルのマイグレーションを修正しました。 (Nikolay Degterinsky)。
getStatusで常にメモリ上の仮想パーツを使用するようにしました。(Mikhail Artemenko)。- 起動時に Shared catalog state アプリケーションにリトライ機能を追加しました。 (Nikolay Degterinsky).
- テーブル作成中に例外が発生した後、
DROP DATABASEがハングしたままになる問題を修正しました。(Nikolay Degterinsky) - 分散キャッシュのロジックエラーを修正しました。 (Kseniia Sumarokova).
- 分散キャッシュで誤ったエラーが発生する問題を修正しました。(Kseniia Sumarokova)
- Shared Catalog の ~TemporaryLockForUUIDDirectory で発生する
LOGICAL_ERRORを修正。(Nikolay Degterinsky)。 - データベース名の変更後にメタデータキャッシュが誤った依存関係を返してしまう問題を修正しました。 (Nikolay Degterinsky).
- Shared Catalog: セカンダリーレプリカ上で大きなテーブルを
DROPする際に発生していた問題を修正しました。 (Raúl Marín). - Distributed cache:
processWriteRequestの論理エラーを修正。(Kseniia Sumarokova)。 - セカンダリのレプリカ上での MV の
ALTER操作に対するチェックを削除しました。(Nikolay Degterinsky).