v24.12 Cloud 向け変更履歴
ClickHouse Cloud サービスに関する v24.12 リリースの変更点。
後方互換性のない変更
- 関数
greatestとleastは、これまでは引数のいずれかが NULL の場合に NULL を返していましたが、NULL の入力値を無視するようになりました。たとえば、SELECT greatest(1, 2, NULL)は現在 2 を返します。これにより、PostgreSQL の動作と互換になります。#65519(kevinyhzou)。 - 予期しない結果を招く可能性があるため、デフォルトでは ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY に Variant/Dynamic 型を使用できないようにしました。#69731(Pavel Kruglov)。
- システムテーブル
generate_seriesとgenerateSeriesを削除しました。これらは誤って次の issue で追加されていました: #59390。#71091(Alexey Milovidov)。 StorageExternalDistributedを削除しました。#70600 をクローズしました。#71176(flynn)。- サーバー設定ファイル(users.xml)からの設定が、クライアントにも適用されるようになりました。
date_time_output_formatなどのフォーマット設定に便利です。#71178(Michael Kolupaev)。 - JSON サブカラムのファイルで特殊文字がエスケープされていないことが原因で、
No such file or directoryエラーが発生する可能性があった問題を修正しました。#71182(Pavel Kruglov)。 - テーブルエンジン Kafka、NATS、RabbitMQ は、
SOURCES階層内でそれぞれ専用の権限によってカバーされるようになりました。これらのエンジンタイプでテーブルを作成するデフォルト以外のデータベースユーザーには、権限を追加してください。#71250(Christoph Wurm)。 - 実行前に(サブクエリを含む)ミューテーションクエリ全体を検査するようにしました。これにより、誤って無効なクエリを実行してしまい、有効なミューテーションをブロックするデッドなミューテーションが蓄積されることを防ぎます。#71300(Christoph Wurm)。
- ファイルシステムキャッシュの設定
skip_download_if_exceeds_query_cacheをfilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limitに名称変更しました。#71578(Kseniia Sumarokova)。 - 混乱を避けるため、min/max 関数で Dynamic/Variant 型の使用を禁止しました。#71761(Pavel Kruglov)。
deltaSumTimestampにおけるEnumおよびUInt128とUInt256引数のサポートを削除しました。deltaSumTimestampの 2 番目の(「timestamp」)引数に対するInt8、UInt8、Int16、UInt16のサポートも削除しました。#71790(Alexey Milovidov)。- ClickHouse を Dictionary のソースとして使用する場合に、ソースクエリの検証を行うようにしました。#72548(Alexey Katsman)。
新機能
SYSTEM LOAD PRIMARY KEYコマンドを実装し、指定したテーブルのすべてのパーツ、またはテーブルを指定しない場合はすべてのテーブルについて、プライマリインデックスをロードできるようにしました。これはベンチマークで役立ち、クエリ実行時の追加レイテンシを防ぐのに有用です。 #66252 (ZAWA_ll).- 指定したテーブルのすべてのパーツ、またはテーブルを指定しなかった場合はすべてのテーブルについて、プライマリインデックスをロードするための
SYSTEM LOAD PRIMARY KEYステートメントを追加しました。これはベンチマーク用途や、クエリ実行時の余分なレイテンシーを防ぐために有用です。 #67733 (ZAWA_ll). - 現在のユーザー/ロールに特定の権限が付与されているか、および対応するテーブル/カラムがメモリ内に存在するかを確認できる
CHECK GRANTクエリを追加しました。 #68885 (Unalian)。 - ワークロードおよびリソース管理を定義するための SQL 構文を追加しました。 https://clickhouse.com/docs/en/operations/workload-scheduling。 #69187 (Sergei Trifonov)。
- Iceberg データストレージ 形式は、テーブルのスキーマを変更するためのさまざまなオプションをユーザーに提供します。このプルリクエストでは、カラムの順序やカラム名、単純な型の拡張が変更された Iceberg 形式のテーブルを読み取る機能が実装されました。 #69445 (Daniil Ivanik)。
- 各認証方式ごとに独自の有効期限を持てるようにし、ユーザーエンティティからは削除しました。 #70090 (Arthur Passos).
- クエリの起点ノードからクラスタ内の他のノードへ外部ユーザーのロールをプッシュできるようにしました。外部認証器(LDAP など)へのアクセス権が起点ノードのみにある場合に便利です。 #70332 (Andrey Zvonov)。
- String から JSON への ALTER 操作をサポートしました。この PR では、JSON および Dynamic 型のシリアライゼーションも新しいバージョン V2 に変更しています。古いバージョン V1 も、設定
merge_tree_use_v1_object_and_dynamic_serializationを有効にすることで引き続き使用できます(アップグレード時に問題なくバージョンをロールバックできるようにするために利用できます)。#70442(Pavel Kruglov)。 DateTime64を秒単位の固定精度を持つInt64値に変換する関数toUnixTimestamp64Secondを追加しました。これにより、日時が 1970 年 1 月 1 日 木曜日 00:00:00 UTC より前の場合に負の値を返せるようになります。 #70597 (zhanglistar).- 新しい設定
enforce_index_structure_match_on_partition_manipulationを追加し、ソーステーブルのプロジェクションとセカンダリインデックスがターゲットテーブルのものの部分集合である場合に ATTACH を許可できるようにしました。 #70602 をクローズ。 #70603(zwy991114)。 - 関数
castの出力が Apache Spark と異なるため、gluten プロジェクトとの間で差異が生じています。詳細は https://github.com/apache/incubator-gluten/issues/7602 を参照してください。この PR では Spark のテキスト出力フォーマットのサポート機能を追加し、デフォルトでは無効としています。 #70957 (zhanglistar). - ユーザー認証のための S3 エンドポイント向けに、新しいヘッダータイプ(
access_header)を追加しました。これにより、最も優先度の低いアクセスヘッダーを指定できるようになり、これはテーブルスキーマや名前付きコレクションなど、他の任意のソースから取得されたaccess_key_idによって上書きされます。 #71011 (MikhailBurdukov)。 - 設定階層の初期実装。 #71145 (Raúl Marín).
- ORDER BY 句での fill 演算子使用時に、staleness 句をサポートしました。 #71151 (Mikhail Artemenko).
- JSON 文字列のシリアライズ/デシリアライズを通じて、Map/Tuple/Object から新しい JSON への単純な CAST を実装。 #71320 (Pavel Kruglov).
- 集計関数
anyに対して、anyRespectNulls、firstValueRespectNulls、anyValueRespectNullsのエイリアスを追加しました。また、集計関数anyLastに対して、anyLastRespectNullsおよびlastValueRespectNullsのエイリアスも追加しました。これにより、anyLast_respect_nullsStateIfの代わりにSELECT anyLastRespectNullsStateIfのように、キャメルケースのみからなるより自然な構文を使用できるようになります。 #71403 (Peter Nguyen). - JSON ログのフォーマットで RFC 3339/ISO8601 形式の UTC 日時をサポートするための
date_time_utcパラメータを追加しました。 #71560 (Ali). - 結合のどちらの側をクエリプラン上の inner(ビルド)テーブルとして扱うかを選択できるオプションを追加しました。これは
query_plan_join_swap_tableで制御され、autoに設定可能です。このモードでは、ClickHouse は行数が最も少ないテーブルを選択しようとします。 #71577 (Vladimir Cherkasov)。 - パーツに対してインデックス粒度の値が一定である場合のメモリ使用量を最適化しました。常にパーツに対して一定の粒度を選択できるようにする設定(
use_const_adaptive_granularity)を追加し、これによりメモリ使用を常に最適化された状態に保てるようにしました。これにより、大規模ワークロード(共有ストレージ上で数兆行規模)において、データパーツのメタデータ(インデックス粒度の値)によるメモリ使用量が継続的に増大することを防ぐのに役立ちます。 #71786 (Anton Popov). allowed_feature_tierを、すべての実験的およびベータ機能を無効化するグローバルスイッチとして実装しました。 #71841 (Raúl Marín).iceberg[S3;HDFS;Azure]Cluster、deltaLakeCluster、hudiClusterテーブル関数を追加しました。 #72045(Mikhail Artemenko)。ALTER USER {ADD|MODIFY|DROP SETTING}、ALTER USER {ADD|DROP PROFILE}の構文を追加し、同様の構文をALTER ROLEとALTER PROFILEにも追加しました。 #72050 (pufit)。arrayPrAUC関数を追加しました。この関数は Precision-Recall 曲線の AUC(曲線下面積、Area Under the Curve)を計算します。 #72073 (Emmanuel).MergeTreeテーブルのプライマリインデックス用キャッシュを追加しました(テーブル設定use_primary_key_cacheで有効化可能)。プライマリインデックスに対して遅延読み込みとキャッシュが有効になっている場合、メモリ上に常駐させておく代わりに、マークキャッシュと同様に必要に応じてキャッシュへ読み込まれるようになりました。データパーツの挿入/マージ/フェッチ時およびテーブルの再起動時にプライマリインデックスを事前にウォームする機能を追加しました(設定prewarm_primary_key_cacheで有効化可能)。 #72102 (Anton Popov).- 配列型に対して
indexOfAssumeSorted関数を追加しました。要素が非減少順に並んだ配列での検索を最適化します。 #72517 (Eric Kurbanov)。 - 集約関数
groupConcatの第2引数として区切り文字をオプションで指定できるようにしました。 #72540 (Yarik Briukhovetskyi). - 新しい設定
http_response_headersにより、HTTP レスポンスヘッダーをカスタマイズできるようになりました。たとえば、データベースに保存されている画像をブラウザに表示させることができます。これにより、#59620 がクローズされました。#72656(Alexey Milovidov)。 - Int64 の Unix タイムスタンプ値を DateTime64 に変換する関数
fromUnixTimestamp64Secondを追加しました。#73146(Robert Schulze)。
パフォーマンスの向上
short_circuit_function_evaluation_for_nullsとshort_circuit_function_evaluation_for_nulls_thresholdという 2 つの新しい設定を追加しました。これらにより、データブロック内の NULL 値の比率が指定したしきい値を超えた場合に、Nullable列に対してショートサーキット方式で関数を実行できるようになります。これは、NULL ではない値を持つ行に対してのみ関数が実行されることを意味します。これらの設定は、少なくとも 1 つの引数が NULL の行に対しては NULL 値を返す関数にのみ適用されます。 #60129 (李扬).- オブジェクトストレージディスクにおける
clickhouse disks remove --recursiveのメモリ使用量が低減されました。 #67323 (Kirill)。 - 現在は、並列処理のためにスレッド間に分配する際、
join_algorithm='parallel_hash'用の入力ブロックの列をコピーしません。 #67782 (Nikita Taranov)。 - より多くの式で JIT コンパイルを有効化しました:
abs/bitCount/sign/modulo/pmod/isNull/isNotNull/assumeNotNull/to(U)Int*/toFloat*、比較関数(=,<,>,>=,<=)、論理関数(and,or)。 #70598 (李扬). - 今後は、
join_algorithm設定がdefaultの場合、適用可能であればparallel_hashアルゴリズムが使用されます。parallel_hashが使用できない場合には、従来の 2 つの代替手段(directとhash)が引き続き候補として考慮されます。#70788(Nikita Taranov)。 - 互いに交差しないパーツ向けに
Replacingマージアルゴリズムを最適化しました。 #70977 (Anton Popov). - メトリクスおよび system.detached_parts で、read-only ディスクおよび write-once ディスク上の detached part を列挙しないようにしました。 #71086 (Alexey Milovidov).
- デフォルトでは重い非同期メトリクスを計算しないようにしました。この機能は #40332 で導入されましたが、特定の一人(社)の顧客にしか必要とされない重いバックグラウンドジョブを動かすのは望ましくありません。#71087(Alexey Milovidov)。
- クリティカルセクションを短縮することで、system.query_metric_log の収集間隔におけるパフォーマンスと精度を改善しました。 #71473 (Pablo Marcos)。
WHEREとONの式から共通式を抽出して、結合時に使用されるハッシュテーブルの数を削減するオプションを追加しました。optimize_extract_common_expressions = 1で有効にできます。 #71537 (János Benjamin Antal)。LowCardinality(String)を使用するSELECT文でインデックスを利用できるようにしました。 #71598 (Yarik Briukhovetskyi)。- 並列レプリカかつローカルプランが有効な状態でクエリを実行する際、ワーカー側ではスキップインデックスの解析を行わないようにしました。コーディネーターは、クエリ発行元(クエリイニシエーター)側でインデックス解析を行い、その結果に基づいてワーカーが読み取るレンジを選択します。 #72109 (Igor Nikonov)。
- https://github.com/ClickHouse/ClickHouse/pull/57631 で導入された、Compact parts における単一カラムのサブカラム読み取り最適化を元に戻しました。これは誤って削除されていました。 #72285 (Pavel Kruglov).
- コンパレータ内の仮想関数呼び出しを排除することで、
LowCardinality(String)カラムのソートを高速化しました。 #72337 (Alexander Gololobov)。 - いくつかの単純なデータ型に対して argMin/argMax 関数を最適化しました。 #72350 (alesapin)
- メモリトラッカーで共有ロックを使用するようロック機構を最適化し、ロック競合を減らしました。 #72375 (Jiebin Sun).
- 新しい設定
use_async_executor_for_materialized_viewsを追加しました。マテリアライズドビューのクエリを非同期で、場合によってはマルチスレッドで実行し、INSERT 時のビュー処理を高速化できますが、より多くのメモリを消費する可能性があります。 #72497 (alesapin)。 - 設定
max_size_to_preallocate_for_aggregationとmax_size_to_preallocate_for_joinsのデフォルト値はさらに10^12まで引き上げられたため、より多くの場面で最適化が適用されるようになりました。 #72555 (Nikita Taranov). - 集約関数の状態(データ型
AggregateFunctionおよび分散クエリ内)のデシリアライズ性能を改善しました。フォーマットRowBinaryのパース性能もわずかに改善しました。 #72818 (Anton Popov).
改善
- 定数配列および定数としてキャプチャされた引数を取る高階関数は、定数を返すようになりました。 #58400 (Alexey Milovidov).
- 仮想行を生成することで読み込み順序を最適化し、マージソート時に読み取るデータ量を削減します。これは、特に複数のパーツが存在する場合に有効です。 #62125 (Shichao Jin).
- クエリプランのステップ名(
EXPLAIN PLAN json=1)およびパイプラインプロセッサ名(EXPLAIN PIPELINE compact=0,graph=1)に、一意な ID が接尾辞として付与されるようになりました。これにより、processors profilerの出力や OpenTelemetry のトレースをEXPLAINの出力と突き合わせることができます。 #63518 (qhsong). - Azure Blob Storage への書き込み後にオブジェクトが存在するかを確認するオプションを追加しました。これは
check_objects_after_uploadの設定で制御できます。#64847 (Smita Kulkarni). - HashTable の destroyElements における use-after-dtor のロジックを修正。 #65279 (cangyin).
clickhouse-localでデフォルトとしてAtomicデータベースを使用するようにしました。#50647 の項目 1 および 5 に対応しました。#44817 をクローズしました。#68024(Alexey Milovidov)。- 書き込みバッファは明示的にキャンセルするか、ファイナライズする必要があります。例外は、クライアントにエラーを通知するために HTTP プロトコルを破ります。 #68800 (Sema Checherinda).
replica_dirを作成し、DDLWorker 内でレプリカをアクティブとしてマークすることで、実行中の DDLWorker ホストを報告できるようにしました。 #69658 (Tuan Pham Anh).-
DDLQueryStatusSourceのリファクタリング: -DDLQueryStatusSourceをDistributedQueryStatusSourceにリネームし、ベースクラスにする -DDL On Clusterとレプリケーテッドデータベースからそれぞれ DDL タスクのステータスをクエリするために、DDLQueryStatusSourceから派生した 2 つのサブクラスDDLOnClusterQueryStatusSourceとReplicatedDatabaseQueryStatusSourceを作成する。2.DDLOnClusterQueryStatusSourceでオフラインホストの待機を中止できるように対応。#69660 (Tuan Pham Anh).
- 新しいキャンセルロジックを追加しました。
CancellationCheckerは、開始されたすべてのクエリのタイムアウトを監視し、タイムアウトに達した時点でそれらを停止します。 #69880 (Yarik Briukhovetskyi)。 allow_experimental_join_condition設定を削除し、既定で非等値条件を許可するようにしました。 #69910 (Vladimir Cherkasov).parallel_replicas_local_planをデフォルトで有効化しました。クエリのイニシエーター上で完全なローカルプランを構築することで、リソース消費を抑えつつ parallel replicas のパフォーマンスを向上させ、より多くのクエリ最適化を適用できるようにしました。 #70171 (Igor Nikonov).- http_handlers(
dynamic_query_handler/predefined_query_handler)でユーザー/パスワードを設定できるようにしました。 #70725 (Azat Khuzhin). - S3Queue ストレージにおいて、一部の設定に対する
ALTER TABLE ... MODIFY/RESET SETTING ...をサポートしました。 #70811 (Kseniia Sumarokova). - ディレクトリを一覧表示する際にオブジェクトストレージの API を呼び出すのは避けてください。コスト効率が悪くなる可能性があります。代わりに、ファイル名のリストをメモリに保持してください。トレードオフとして、初期読み込み時間とファイル名を保持するためのメモリ使用量が増加します。 #70823 (Julia Kartseva)。
clickhouse-compressorに--threadsパラメータを追加し、データを並列に圧縮できるようにしました。 #70860 (Alexey Milovidov).- Replxx クライアントの履歴サイズを設定できるようにしました。 #71014 (Jiří Kozlovský).
- 設定
prewarm_mark_cacheを追加し、挿入、マージ、パーツのフェッチ、およびテーブルの起動時にマークを mark キャッシュへ事前読み込みできるようにしました。 #71053 (Anton Popov). - Parquet ネイティブリーダーでの Boolean 型サポート。 #71055 (Arthur Passos)。
- S3 とのやり取り時に、「Malformed message」など、より多くの種類のエラーをリトライ対象としました。 #71088 (Alexey Milovidov).
- 一部の S3 関連メッセージのログレベルを下げました。 #71090 (Alexey Milovidov).
- スペースを含む HDFS ファイル名への書き込みをサポート。 #71105 (exmy).
system.session_logは十分です。これにより #51760 がクローズされます。#71150(Alexey Milovidov)。- parallel replicas を使用するクエリにおける RIGHT / FULL JOIN の問題を修正しました。これにより、RIGHT JOIN は parallel replicas で実行できるようになり(右側テーブルの読み取りが分散されます)が、FULL JOIN はノード間で並列化できず、ローカルで実行されます。 #71162 (Igor Nikonov).
- レプリケートテーブル、辞書、ビューの数を制限する設定を追加しました。 #71179 (Kirill).
- #71227 を修正。#71286(Arthur Passos)。
- サーバー/ユーザーのメモリ使用量に応じて、自動的に
GROUP BY/ORDER BYをディスク処理に切り替えます。max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sortクエリ設定で制御できます。#71406(Azat Khuzhin)。 - ホスト単位のダッシュボード
Overview (host)とCloud overview (host)を高度なダッシュボードに追加。 #71422 (alesapin). - 関数
translateは、from引数に含まれる文字がto引数より多い場合に、余分な文字の削除をサポートするようになりました。例:SELECT translate('clickhouse', 'clickhouse', 'CLICK')は、CLICKを返すようになりました。#71441(shuai.xu)。 - 新しい関数
parseDateTime64、parseDateTime64OrNull、parseDateTime64OrZeroを追加しました。既存の関数parseDateTime(およびその派生関数)とは異なり、これらはDateTimeではなくDateTime64型の値を返します。 #71581 (kevinyhzou)。 - MergeTree テーブルエンジンファミリーのメモリフットプリントを削減するため、index_granularity 配列をメモリ内に収まるように縮小しました。 #71595 (alesapin).
- コマンドラインアプリケーションは、マルチステートメントに対しても構文をハイライトするようになりました。 #71622 (Alexey Milovidov).
- コマンドラインアプリケーションは、エラー発生時に非ゼロの終了コードを返すようになりました。以前のバージョンでは、
disksアプリケーションはエラー時にもゼロを返しており、また他のアプリケーションでも、エラー 256 (PARTITION_ALREADY_EXISTS) および 512 (SET_NON_GRANTED_ROLE) に対してゼロを返していました。 #71623 (Alexey Milovidov)。 Verticalフォーマット(クエリの末尾を\Gで終えることでも有効化されます)では、次のような Pretty フォーマットの機能が利用できます: - 数値を3桁ごとのグループにハイライト表示する。 - 読みやすい数値ヒントを表示する。 #71630 (Alexey Milovidov)。- 設定
filesystem_cache_prefer_bigger_buffer_sizeによって、ファイルシステムキャッシュにおけるメモリバッファサイズの拡大を無効化できるようにしました。 #71640 (Kseniia Sumarokova). - ファイルシステムキャッシュにおけるバックグラウンドダウンロードの最大ファイルセグメントサイズを制御するための個別設定
background_download_max_file_segment_sizeを追加しました。 #71648 (Kseniia Sumarokova). enable_http_compressionのデフォルト値を 0 から 1 に変更します。これにより #71591 がクローズされます。#71774(Peter Nguyen)。- Object 形式から JSON 形式への ALTER をサポートしました。 #71784 (Pavel Kruglov).
- JSON 型パースをわずかに改善しました: JSON パスに対応する現在のブロックに複数の型の値が含まれている場合、専用のベストエフォート順で各型を試すことで、最適な型を選択するようにしました。 #71785 (Pavel Kruglov).
- 以前は
system.asynchronous_metricsから読み取る際、並行して実行中の更新処理が完了するまで待機する必要がありました。これは、システムに高い負荷がかかっている場合には長時間になる可能性があります。この変更により、以前に収集された値を常に読み取れるようになりました。 #71798 (Alexander Gololobov). polling_max_timeout_msを 10 分、polling_backoff_msを 30 秒に設定します。 #71817 (Kseniia Sumarokova).- 'SELECT - FROM t LIMIT 1' のようなクエリは、実際には使用されないにもかかわらず、パートインデックスをロードしていました。 #71866 (Alexander Gololobov).
- Allow_reorder_prewhere_conditions は、古い互換性設定では既定で有効になっています。 #71867 (Raúl Marín).
bitmapTransform関数を使用していて、かつ引数の型が有効な場合には、system.errorsテーブル内のILLEGAL_TYPE_OF_ARGUMENTカウンタをインクリメントしないようにしました。 #71971 (Dmitry Novik)。- Dictionary ストレージ、Dictionary テーブル関数、または辞書自体への直接の
SELECTによって辞書からデータを取得する場合、辞書に対するSELECT権限またはdictGet権限のいずれかがあれば十分です。これは ACL の回避を防止しようとした以前の取り組み(https://github.com/ClickHouse/ClickHouse/pull/57362、https://github.com/ClickHouse/ClickHouse/pull/65359)と整合しています。また、これにより後者の変更との後方互換性も保たれます。#72051(Nikita Mikhaylov)。 - 高度なダッシュボード用 HTML ページに、
system.dashboardsテーブルからダッシュボードを選択するためのドロップダウンセレクターを追加しました。 #72081 (Sergei Trifonov)。 - 分散
INSERT ... SELECTのクエリプランを構築する際にprefer_locahost_replicaを尊重するようになりました。 #72190 (filimonov). - この問題についてはこちらで説明しています。Azure Iceberg Writer は仕様に違反する Iceberg メタデータファイル(およびマニフェストファイル)を作成します。この PR では、v2 リーダーで v1 Iceberg フォーマットのメタデータを読み取る処理を追加しました(Azure Iceberg Writer がその形式でメタデータを書き出しているため)ほか、マニフェストファイル内に対応するフィールドが作成されていない場合にエラーを出すようにしました。#72277(Daniil Ivanik)。
- JSON/Dynamic/Variant 型を実験的機能からベータ段階へ移行しました。 #72294 (Pavel Kruglov).
- クエリ内で
UNION [ALL]を含むCREATE MATERIALIZED VIEWを作成できるようになりました。動作はJOINを使用したマテリアライズドビューと同様で、SELECT式内の最初のテーブルだけが挿入トリガーとして機能し、他のテーブルはすべて無視されます。 #72347 (alesapin)。 - 挿入バッチ内のパーティションキーが1種類の値しか含まれていない場合に、MergeTree への挿入を高速化しました。#72348 (alesapin).
- 新しい
MergeTreeIndexGranularityInternalArraysTotalSizeメトリクスをsystem.metricsに追加しました。このメトリクスは、大規模なデータセットを保持していて高いメモリ使用量の問題が発生しやすいインスタンスを特定するために必要です。#72490(Miсhael Stetsyuk)。 - クエリで
Format Nullを使用する場合、単語Nullのあらゆる綴りが認識されるようになりました。以前は他の表記(例:NULL)でも例外はスローされませんでしたが、その一方で、そのような場合にフォーマットNullは実際には使用されていませんでした。 #72658 (Nikita Taranov)。 - Enum に存在しない未知の値も set 内で許可するようにしました。#72662 を修正。#72686(zhanglistar)。
- 非アクティブなパーツの総バイト数をカウントできるように、system.tables に total_bytes_with_inactive を追加しました。 #72690 (Kai Zhu).
- MergeTreeSettings を system.settings_changes に追加しました。 #72694 (Raúl Marín).
- Enum データ型に対して文字列検索演算子(例: LIKE)をサポートし、#72661 を修正しました。#72732(zhanglistar)。
- notEmpty 関数で JSON 型をサポートしました。 #72741 (Pavel Kruglov).
- GCS S3 エラー
AuthenticationRequiredの解析をサポートします。 #72753 (Vitaly Baranov). - 関数 ifNull と coalesce に Dynamic 型のサポートを追加しました。 #72772 (Pavel Kruglov)。
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCountプロファイルイベントを追加しました。 #72842 (Vladimir Cherkasov).- toFloat64/touInt32 などの関数で Dynamic 型をサポートしました。 #72989 (Pavel Kruglov).
バグ修正(公式な安定版リリースにおけるユーザーから見て明らかな不具合)
ATTACH PARTクエリ中に重複排除されたパーツが、attaching_プレフィックスが付いたまま残ることはなくなりました。 #65636 (Kirill).IN関数で DateTime64 型の精度が失われるバグを修正しました。#67230 (Yarik Briukhovetskyi)。ORDER BY ... WITH FILLでIGNORE/RESPECT NULLSを使用する関数における可能性のある論理エラーを修正しました。#57609 をクローズ。#68234(Vladimir Cherkasov)。- メモリ制限に達した場合に、
Nativeフォーマットを使用する非同期インサートでまれに発生していた論理エラーを修正しました。 #68965 (Anton Popov). - EPHEMERAL カラムの CREATE TABLE における COMMENT を修正しました。 #70458 (Yakov Olkhovskiy).
- LowCardinality(Nullable) を使用した JSONExtract における論理エラーを修正しました。#70549(Pavel Kruglov)。
- テーブル名が長すぎる場合の挙動を修正しました。 #70810 (Yarik Briukhovetskyi).
- URL エンジンで、ユーザーが指定したヘッダーによって Content-Type を上書きできるようにしました。#70859 (Artem Iurin).
StorageS3Queueの論理エラー「/processed にはすでにノードが存在するため、永続ノードを作成できません」を修正しました。#70984 (Kseniia Sumarokova).- PROJECTION の論理削除における rebuild オプションで
_row_existsカラムを考慮していなかったバグを修正。 #71089 (Shichao Jin). - 予期しないレースコンディションにより system.query_metric_log に誤った値が記録される問題を修正。 #71124 (Pablo Marcos).
- quantileExactWeightedInterpolated の集約関数名の不整合を修正。バグは https://github.com/ClickHouse/ClickHouse/pull/69619 で導入された。cc @Algunenano。#71168(李扬)。
- Dynamic 使用時の関数比較で発生する bad_weak_ptr 例外を修正。 #71183 (Pavel Kruglov).
- ゼロコピー レプリケーションを使用する ReplicatedMergeTree で、ノードによって使用されている blob が削除されないようにしました。 #71186 (Antonio Andelic).
- HTTP および Async Inserts 経由の Native フォーマットでフォーマット設定が無視される問題を修正。 #71193 (Pavel Kruglov).
use_query_cache = 1を設定して実行される SELECT クエリについて、システムテーブル名がリテラルとして出現してもクエリが拒否されなくなりました。たとえばSELECT - FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;は現在は正常に動作します。 #71254 (Robert Schulze).- enable_filesystem_cache=1 を設定した状態で、ストレージ設定内のディスクにキャッシュ設定がない場合にメモリ使用量が増加してしまうバグを修正しました。 #71261 (Kseniia Sumarokova)。
- Dynamic カラムから LowCardinality Dictionary をデシリアライズする際に発生する可能性のある "Cannot read all data" エラーを修正。 #71299 (Pavel Kruglov).
- クライアントにおける並列出力フォーマットのクリーンアップが不完全だった問題を修正しました。 #71304 (Raúl Marín).
- 名前付きコレクションで不足していたアンエスケープ処理を追加しました。この修正がない場合、clickhouse-server は起動できません。#71308 (MikhailBurdukov)。
- ネイティブプロトコル経由の空ブロックを含む非同期インサートを修正。 #71312 (Anton Popov).
- 誤ったワイルドカード権限を付与した際に発生する AST フォーマットの不整合を修正。#71309。#71332(pufit)。
- JSON の型ヒント内の疑わしい型および実験的な型をチェックするようにしました。 #71369 (Pavel Kruglov)。
- 「Invalid number of rows in Chunk with Variant column」エラーを修正。 #71388 (Pavel Kruglov).
- 不正な引数(例:
NULL)を渡した際にmongodbテーブル関数がクラッシュする問題を修正しました。 #71426 (Vladimir Cherkasov). - optimize_rewrite_array_exists_to_has に起因するクラッシュを修正。#71432(Raúl Marín)。
- palin_rewritable ディスクに対してディレクトリの作成に失敗した場合に、トランザクションロールバック時に発生する NoSuchKey エラーを修正。 #71439 (Julia Kartseva).
- 挿入時における
max_insert_delayed_streams_for_parallel_write設定の使用方法を修正しました。以前は誤った動作をしており、複数のパーティションにデータを書き込む挿入でメモリ使用量が増大する可能性がありました。 #71474 (Anton Popov). WHERE句内にarrayJoinが出現しうる場合に、旧アナライザでArgument for function must be constantというエラーが発生し得る不具合を修正。 https://github.com/ClickHouse/ClickHouse/pull/65414 によるリグレッション。 #71476(Nikolai Kochetov)。- カラム数が 0 の SortCursor でのクラッシュを防止しました(旧アナライザ)。 #71494 (Raúl Marín)。
- 初期化されていない ORC データが原因で発生する date32 の範囲外エラーを修正。詳細は https://github.com/apache/incubator-gluten/issues/7823 を参照してください。 #71500 (李扬).
- Dynamic 型および JSON 型に対して、ワイドパートにおけるカラムサイズの計算を修正。 #71526 (Pavel Kruglov).
- materialized view 内のクエリが CTE とともに IN を使用する場合の Analyzer の不具合を修正。#65598 をクローズ。#71538(Maksim Kita)。
- 範囲外アクセスの場合、bitShift 関数でエラーをスローする代わりに 0 またはデフォルト文字を返すようにしました。 #71580 (Pablo Marcos).
- 特定のエンジンと組み合わせて materialized view を使用した場合に発生するサーバークラッシュを修正。 #71593 (Pervakov Grigorii).
- 定数配列への別名を含むネストしたデータ構造での ARRAY JOIN が、ヌルポインタ参照の原因になっていました。これにより #71677 が解決されました。#71678(Alexey Milovidov)。
- 空タプルを指定した ALTER 実行時に発生する LOGICAL_ERROR を修正。これにより #71647 が解決される。 #71679 (Amos Bird).
- NOT IN 演算子の場合、パーティションカラム上の述語内の定数 Set を変換しないようにしました。 #71695 (Eduard Karacharov).
- LowCardinality(Nullable) から Dynamic への CAST の挙動を修正しました。以前のバージョンでは、
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullableというエラーが発生する可能性がありました。 #71742(Pavel Kruglov)。 - DateTime64 型の主キー列を対象とする WHERE 句で toDayOfWeek が例外を投げる問題を修正しました。 #71849 (Yakov Olkhovskiy)。
- スパースカラムへのパース後に行うデフォルト値の補完処理を修正しました。 #71854 (Anton Popov).
- 分散テーブル上で入力が ALIAS の場合に発生していた GROUPING 関数のエラーを修正。#68602 をクローズ。#71855(Vladimir Cherkasov)。
WITH TIES句を使用する SELECT 文で、十分な行が返されない場合があった問題を修正しました。 #71886 (wxybear).- arrayWithConstant の評価時に、あるカラムが配列サイズ制限を超えていると誤って判定され、TOO_LARGE_ARRAY_SIZE 例外が発生していた問題を修正しました。 #71894 (Udi)。
clickhouse-benchmarkは、1 秒以上かかるクエリに対して誤ったメトリクスを出力していました。 #71898 (Alexey Milovidov).- clickhouse-client における進捗インジケーターと進捗テーブル間のデータ競合を修正しました。この問題は FROM INFILE を使用した場合に発生します。INSERT クエリ実行中のキーストロークを捕捉して、進捗テーブルの表示を切り替えられるようにしました。 #71901 (Julia Kartseva).
- Pretty JSON 形式での Dynamic 値のシリアライズを修正。 #71923 (Pavel Kruglov).
- バージョン 24.6 で不正な状態になっていた system.s3/azure_queue_log の rows_processed カラムを修正。 #69975 をクローズ。 #71946 (Kseniia Sumarokova)。
s3/s3Cluster関数が不完全な結果を返したり、例外をスローしたりする可能性があったケースを修正しました。これは、s3 URI でグロブパターン(pattern/*のようなもの)を使用し、かつキーpattern/を持つ空のオブジェクトが存在している必要がある状況(そのようなオブジェクトは S3 コンソールで自動的に作成されます)に関連していました。また、設定項目s3_skip_empty_filesのデフォルト値がfalseからtrueに変更されました。 #71947 (Nikita Taranov).- clickhouse-client の構文ハイライトで発生していたクラッシュを修正。#71864 をクローズ。#71949(Nikolay Degterinsky)。
ORDER BY句内でバイナリな単調関数を使用するMergeTreeテーブルにおいて、最初の引数が定数の場合に発生するIllegal typeエラーを修正しました。 #71941 を修正します。 #71966(Nikolai Kochetov)。- サブクエリ内で使用される EXPLAIN AST には、SELECT クエリのみを許可します。他の種類のクエリは、論理エラー「Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery」または
Inconsistent AST formattingを引き起こします。 #71982 (Pavel Kruglov). clickhouse-clientでレコードを挿入する際、クライアントはサーバーからカラム定義を読み取ります。しかし、カラム定義を書き込む順序が誤っていたバグがありました。本来は [statistics, ttl, settings] の順序であるべきです。 #71991 (Han Fei).format_alter_commands_with_parenthesesが有効な場合にMOVE PARTITION ... TO TABLE ...ALTER コマンドの書式が正しくなるよう修正しました。 #72080 (János Benjamin Antal).- File/S3/URL/HDFS/Azure エンジンにおいて、推定されたフォーマット名を CREATE クエリに保存するようにしました。以前は、サーバーが再起動されるたびにフォーマット名が推定されており、指定されたデータファイルが削除されている場合、サーバー起動時にエラーが発生していました。 #72108 (Pavel Kruglov).
min_age_to_force_merge_on_partition_onlyが、すでに単一のパーツにマージ済みの同じパーティションを何度もマージしようとしてハングし、複数のパーツを持つパーティションをマージしない不具合を修正しました。 #72209 (Christoph Wurm)。- スパースなカラムを処理する際に、まれに発生していた
SimpleSquashingChunksTransformのクラッシュを修正しました。 #72226 (Vladimir Cherkasov). GraceHashJoinにおけるデータレースを修正しました。これが原因で、結合結果の出力から一部の行が欠落することがありました。 #72233 (Nikita Taranov).- マテリアライズされた
_block_numberカラム(enable_block_number_column設定が有効な場合)を使用するALTER DELETEクエリを修正しました。 #72261 (Anton Popov). ConcurrentHashJoinのコンストラクタ内などでColumnDynamic::dumpStructure()が並行して呼び出された場合に発生するデータ競合を修正しました。 #72278 (Nikita Taranov).ORDER BY ... WITH FILL内の重複したカラムによって発生する可能性のあるLOGICAL_ERRORを修正しました。 #72387 (Vladimir Cherkasov).optimize_functions_to_subcolumnsを適用した後に発生していた、いくつかのケースでの型の不整合を修正しました。 #72394 (Anton Popov).BACKUP DATABASE db EXCEPT TABLES db.tableクエリのパースに失敗する問題を修正しました。 #72429 (Konstantin Bogdanov).- 空の Variant を作成できないようにしました。 #72454 (Pavel Kruglov).
system.mergesテーブルにおけるresult_part_pathの不正な形式を修正しました。#72567 (Konstantin Bogdanov).- 要素が 1 つだけのグロブの解析処理を修正。 #72572 (Konstantin Bogdanov).
- ARRAY JOIN を含む分散クエリにおけるフォロワーサーバー向けクエリ生成を修正。#69276 を修正。#72608(Dmitry Novik)。
- DateTime64 において DateTime64 が何も返さないバグを修正します。 #72640 (Yarik Briukhovetskyi).
- S3 上のファイルが出現する速度よりも
tracked_files_limit設定値が小さい場合に、S3Queue の Unordered モードで発生する "No such key" エラーを修正しました。 #72738 (Kseniia Sumarokova). - mark cache のドロップは、そのサイズが大きい場合には無視できない時間がかかることがあります。この間コンテキストの mutex を保持していると、多くの他の処理がブロックされ、新しいクライアント接続でさえ mutex が解放されるまで確立できません。また、同期のためにこの mutex を保持しておく必要は実際にはなく、
shared_ptrを介してキャッシュへのローカル参照を持つだけで十分です。 #72749 (Alexander Gololobov). - あるテストインスタンスで、PK キャッシュが自身のサイズを大きく過小評価していました。特に、LowCardinality カラムでは Dictionary のサイズが含まれていませんでした。この問題の修正としては、キャッシュエントリのサイズとして column->allocatedBytes() に加え、追加のオーバーヘッド分も見積もるようにしました。#72750 (Alexander Gololobov)。
- ローカルにユーザーが存在しない場合に RemoteQueryExecutor がスローする例外を修正。 #72759 (Andrey Zvonov)。
enable_block_number_column設定が有効な場合にマテリアライズされる_block_numberカラムを使用するミューテーションを修正しました。 #72854 (Anton Popov).- バックアップ内に空のファイルが存在する場合に、プレーンな書き換え可能ディスクでのバックアップ/リストアが正しく動作するよう修正しました。 #72858 (Kseniia Sumarokova).
- DistributedAsyncInsertDirectoryQueue における挿入操作のキャンセルを正しく行うよう修正。 #72885 (Antonio Andelic).
- スパースなカラムへの不正なデータのパース時にクラッシュする問題を修正しました(
enable_parsing_to_custom_serialization設定が有効になっている場合に発生する可能性があります)。 #72891 (Anton Popov). - バックアップ復元中に起こり得るクラッシュを修正しました。 #72947 (Kseniia Sumarokova).
- クエリの
ON句に不等号フィルタを含む複雑な条件がある場合に発生する可能性があったparallel_hashJOIN メソッドのバグを修正しました。 #72993 (Nikita Taranov). - JSON パース時にはデフォルトのフォーマット設定を使用して、不正なデシリアライズを回避します。 #73043 (Pavel Kruglov).
- サポートされていないストレージを利用するトランザクションで発生するクラッシュを修正。 #73045 (Raúl Marín).
- Tuple のパース時に重複した JSON キーを検出するようになりました。以前は、これによりパース中に論理エラー
Invalid number of rows in Chunkが発生する可能性がありました。 #73082 (Pavel Kruglov).