v24.12 Cloud 向け変更ログ
v24.12 リリースにおける ClickHouse Cloud サービス関連の主な変更点。
後方互換性のない変更
- 関数
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).
- system テーブル
generate_seriesとgenerateSeriesを削除しました。これらは誤って追加されたものでした: #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 をディクショナリのソースとして使用する場合に、ソースクエリの検証を追加しました。 #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).
- JSONExtract で LowCardinality(Nullable) を使用した場合の論理エラーを修正。 #70549 (Pavel Kruglov).
- テーブル名が長すぎる場合の挙動を修正。 #70810 (Yarik Briukhovetskyi).
- URL エンジンでユーザー指定ヘッダーにより Content-Type を上書きできる機能を追加しました。 #70859 (Artem Iurin).
StorageS3Queueの論理エラー「/processed にはすでに存在するため永続ノードを作成できません」を修正。 #70984 (Kseniia Sumarokova).- projection の lightweight delete における 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 を有効にした際、storage 構成内のディスクにキャッシュ構成がまったく定義されていない場合にメモリ使用量が増加してしまうバグを修正しました。 #71261 (Kseniia Sumarokova).
- Dynamic column から LowCardinality 辞書をデシリアライズする際に発生する可能性のある "Cannot read all data" エラーを修正します。 #71299 (Pavel Kruglov).
- クライアントにおける並列出力フォーマットのクリーンアップが不完全だった問題を修正。 #71304 (Raúl Marín).
- 名前付きコレクションに不足していたエスケープ解除処理を追加しました。この修正がないと clickhouse-server は起動できません。#71308 (MikhailBurdukov)。
- ネイティブプロトコルを使用した空ブロックを含む非同期 INSERT の問題を修正しました。 #71312 (Anton Popov).
- 誤ったワイルドカード権限を付与した際に発生する AST フォーマットの不整合を修正しました #71309。 #71332 (pufit)。
- JSON の型ヒント内で疑わしい型および実験的な型をチェックするようにしました。 #71369 (Pavel Kruglov).
- Variant カラムを含むチャンクで発生する「Invalid number of rows in Chunk」エラーを修正しました。 #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設定の INSERT 時の扱いを修正しました。以前は正しく動作しておらず、複数のパーティションにデータを書き込む INSERT で高いメモリ使用量につながる可能性がありました。#71474 (Anton Popov)。WHERE条件内にarrayJoinが現れる可能性がある場合に、旧アナライザーで発生し得たArgument for function must be constantエラーを修正しました。https://github.com/ClickHouse/ClickHouse/pull/65414 の後に発生した回帰バグ(リグレッション)です。#71476(Nikolai Kochetov)。- SortCursor で列数が 0(旧アナライザー)の場合にクラッシュしないように修正。 #71494 (Raúl Marín).
- 未初期化の ORC データによって発生する date32 の範囲外となる問題を修正しました。詳細については https://github.com/apache/incubator-gluten/issues/7823 を参照してください。#71500(李扬)。
- Dynamic および JSON の wide part における列サイズの計算を修正。 #71526 (Pavel Kruglov).
- マテリアライズドビュー内のクエリで CTE と併用した IN 句を使用する場合の Analyzer の不具合を修正。 #65598 をクローズ。 #71538(Maksim Kita)。
- 範囲外の場合、bitShift 関数ではエラーをスローするのではなく、0 またはデフォルトの文字を返すようにしました。 #71580 (Pablo Marcos)。
- 特定のエンジンを使用するマテリアライズドビューで発生していたサーバークラッシュを修正しました。 #71593 (Pervakov Grigorii).
- 定数配列へのエイリアスを含む入れ子のデータ構造に対する ARRAY JOIN が、ヌルポインタ参照を引き起こしていました。この修正により #71677 がクローズされました。#71678(Alexey Milovidov)。
- 空のタプルで ALTER を実行した際に発生する LOGICAL_ERROR を修正しました。これにより #71647 が修正されました。#71679(Amos Bird)。
- NOT IN 演算子を使用する場合は、パーティション列を対象とする述語内の定数集合を変換しないようにしました。 #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)。- 設定
enable_block_number_columnが有効な場合に、マテリアライズされる_block_number列を使用するALTER DELETEクエリの問題を修正しました。 #72261 (Anton Popov). ColumnDynamic::dumpStructure()が、ConcurrentHashJoinのコンストラクタ内などで並行して呼び出された際に発生していたデータレースを修正しました。 #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つだけの glob の構文解析を修正。 #72572 (Konstantin Bogdanov)。
- ARRAY JOIN を含む分散クエリの場合のフォロワーサーバー向けクエリ生成を修正しました。#69276 を修正します。#72608(Dmitry Novik)。
- DateTime64 in DateTime64 が値を返さない不具合を修正しました。 #72640 (Yarik Briukhovetskyi).
- S3Queue の Unordered モードで、
tracked_files_limitの設定値が S3 上のファイルの出現頻度より小さい場合に発生する「No such key」エラーを修正しました。 #72738 (Kseniia Sumarokova). - mark cache が大きい場合、それを破棄する処理には無視できない時間がかかることがあります。この処理の間に context のミューテックスを保持してしまうと、他の多くの処理がブロックされ、新しいクライアント接続でさえミューテックスが解放されるまで確立できません。そもそも同期のためにこのミューテックスを保持する必要はなく、
shared_ptrを介してキャッシュへのローカル参照を持っていれば十分です。 #72749 (Alexander Gololobov). - あるテストインスタンスで、PK キャッシュが実際のサイズを大きく過小評価していました。特に、LowCardinality カラムではディクショナリのサイズが含まれていませんでした。修正としては、キャッシュエントリのサイズの見積もりに column->allocatedBytes() を用いるとともに、いくつかの追加オーバーヘッドも考慮するようにしました。 #72750 (Alexander Gololobov)。
- ユーザーがローカルに存在しない場合に RemoteQueryExecutor がスローする例外を修正。 #72759 (Andrey Zvonov).
- マテリアライズされた
_block_number列(enable_block_number_column設定が有効な場合)を使用するミューテーションの不具合を修正しました。 #72854 (Anton Popov). - バックアップ内に空のファイルが存在する場合でも、プレーンな再書き込み可能ディスクでのバックアップ/リストアが正しく動作するように修正しました。 #72858 (Kseniia Sumarokova).
- DistributedAsyncInsertDirectoryQueue 内の insert を適切にキャンセルできるようにしました。#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)。