2024年 変更履歴
目次
ClickHouse リリース v24.12, 2024-12-19
ClickHouse リリース v24.11, 2024-11-26
ClickHouse リリース v24.10, 2024-10-31
ClickHouse リリース v24.9, 2024-09-26
ClickHouse リリース v24.8 LTS, 2024-08-20
ClickHouse リリース v24.7, 2024-07-30
ClickHouse リリース v24.6, 2024-07-01
ClickHouse リリース v24.5, 2024-05-30
ClickHouse リリース v24.4, 2024-04-30
ClickHouse リリース v24.3 LTS, 2024-03-26
ClickHouse リリース v24.2, 2024-02-29
ClickHouse リリース v24.1, 2024-01-30
2023年の変更履歴
ClickHouse リリース 24.12, 2024-12-19
後方互換性のない変更
- 関数
greatestおよびleastは、これまでは引数のいずれかが NULL の場合に NULL を返していましたが、現在は NULL 入力値を無視します。例えば、SELECT greatest(1, 2, NULL)は現在 2 を返します。これにより PostgreSQL と互換の動作になりますが、一方で NULL を返す MySQL との互換性は失われます。以前の動作を維持するには、設定least_greatest_legacy_null_behavior(デフォルト:false)をtrueに設定してください。 #65519 #73344 (kevinyhzou). - 新しい MongoDB 統合がデフォルトになりました。従来の MongoDB ドライバ(Poco ドライバをベースとする)を使用する場合は、サーバー設定
use_legacy_mongodb_integrationを有効にしてください。 #73359 (Kirill Nikiforov).
新機能
JSON/Dynamic/Variant型を experimental 機能から beta 段階へ移行しました。#72294(Pavel Kruglov)。さらに、この変更を含むすべての修正を 24.11 にもバックポートしました。- Iceberg data storage フォーマットのスキーマ進化機能により、ユーザーはテーブルのスキーマを柔軟に変更できます。カラム順序やカラム名、単純な型の拡張は、内部的に透過的に変更されます。#69445(Daniil Ivanik)。
- Iceberg REST Catalog との統合: Iceberg という名前の新しいデータベースエンジンにより、Iceberg REST Catalog 全体を ClickHouse から利用できるようになりました。 #71542 (Kseniia Sumarokova).
MergeTreeテーブルのプライマリインデックスにキャッシュを追加しました(テーブル設定use_primary_key_cacheで有効化可能)。プライマリインデックスに対して遅延読み込みとキャッシュが有効な場合、(mark キャッシュと同様に)常にメモリ上に保持するのではなく、必要に応じてキャッシュへ読み込まれるようになります。さらに、データパーツの insert / merge / fetch 実行時およびテーブルの再起動時に、プライマリインデックスを事前にウォームアップする機能を追加しました(設定prewarm_primary_key_cacheで有効化可能)。これにより、共有ストレージ上の巨大なテーブルでもメモリ使用量を抑えることができ、1 千兆行を超えるテーブルで検証済みです。 #72102 (Anton Popov). #72750 (Alexander Gololobov).SYSTEM LOAD PRIMARY KEYコマンドを実装し、指定されたテーブルのすべてのパーツ、またはテーブルが指定されていない場合はすべてのテーブルについて、プライマリインデックスをロードできるようにしました。これはベンチマークに役立ち、クエリ実行時の追加レイテンシーを防ぐのに役立ちます。#66252 #67733 (ZAWA_ll)。MergeTreeテーブルをReplicatedMergeTreeとして、またその逆にReplicatedMergeTreeテーブルをMergeTreeとしてアタッチできるクエリを追加しました:ATTACH TABLE ... AS REPLICATEDおよびATTACH TABLE ... AS NOT REPLICATED。 #65401(Kirill)。- HTTP レスポンスヘッダーをカスタマイズできる新しい設定
http_response_headersが追加されました。例えば、データベースに保存されている画像をブラウザで直接表示させることができます。これにより #59620 がクローズされました。#72656(Alexey Milovidov)。 DateTime64を秒単位の精度を持つInt64値に変換する関数toUnixTimestamp64Secondを追加しました。これにより、日付が Unix エポックより前の場合に負の値を返せるようになります。 #70597 (zhanglistar). #73146 (Robert Schulze).- 新しい設定
enforce_index_structure_match_on_partition_manipulationを追加し、ソーステーブルのプロジェクションとセカンダリインデックスのセットがターゲットテーブルのそれらの部分集合である場合にATTACHを許可できるようにしました。 #70602 をクローズしました。 #70603 (zwy991114)。 - 構文
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)。indexOfAssumeSorted関数を配列型向けに追加しました。非減少順にソートされた配列に対する検索を最適化します。効果が現れるのは、非常に大きな配列(10万要素を超える)です。 #72517 (Eric Kurbanov).- 集約関数
groupConcatの第2引数として、区切り文字をオプションで指定できるようにしました。 #72540 (Yarik Briukhovetskyi). translate関数は、from引数がto引数より多くの文字を含む場合に、文字の削除をサポートするようになりました。例:SELECT translate('clickhouse', 'clickhouse', 'CLICK')は、現在CLICKを返します。#71441(shuai.xu)。
実験的機能
- 新しい MergeTree の設定項目
allow_experimental_reverse_keyが追加され、MergeTree のソートキーで降順ソートをサポートするようになりました。これは、特に TopN クエリを含む時系列分析に有用です。使用例:ENGINE = MergeTree ORDER BY (time DESC, key)-timeフィールドを降順にソートします。#71095(Amos Bird)。
パフォーマンスの向上
- JOIN のリオーダリング。クエリプランにおいて、結合のどちらの側のテーブルを inner(build)テーブルとして扱うかを選択できるオプションを追加しました。これは
query_plan_join_swap_tableによって制御され、autoに設定できます。このモードでは、ClickHouse は行数が最も少ないテーブルを選択しようとします。 #71577 (Vladimir Cherkasov)。 join_algorithm設定がdefaultの場合は(適用可能な場合)、parallel_hashアルゴリズムが使用されるようになりました。parallel_hashが使用できない場合には、従来の 2 つの代替手段(directとhash)が引き続き候補として考慮されます。 #70788 (Nikita Taranov)。WHERE式およびON式から共通部分式を抽出して、結合時に使用されるハッシュテーブルの数を削減するオプションを追加しました。これは、JOIN の ON 句の条件に AND で結合された共通部分があり、それが異なる OR 節の中に現れる場合に有効です。optimize_extract_common_expressions = 1で有効化できます。 #71537 (János Benjamin Antal).SELECTで、インデックス付きカラムがLowCardinality(String)に CAST されている場合でもインデックスを利用できるようにします。これは、あるテーブルがString型を持ち、別のテーブルがLowCardinality(String)型を持つようなテーブルを含む Merge テーブル上でクエリを実行する場合に発生し得ます。 #71598 (Yarik Briukhovetskyi)。- 並列レプリカとローカルプランが有効な状態でクエリを実行する際、ワーカー側ではインデックス解析を行いません。コーディネーターは、自身側(クエリの起点ノード)でのインデックス解析に基づいて、ワーカーが読み取る範囲を選択します。これにより、並列レプリカを用いた短いクエリでも、単一ノードでのクエリと同等の低レイテンシーを実現できます。 #72109 (Igor Nikonov).
- オブジェクトストレージディスクでの
clickhouse disks remove --recursiveのメモリ使用量を削減しました。 #67323 (Kirill)。 - コンパクトパーツ内の単一カラムからサブカラムを読み取る際の最適化を、#57631 で導入されたものに基づき復元しました。これは誤って削除されていました。 #72285 (Pavel Kruglov)。
- コンパレータ内の仮想関数呼び出しを除去することで、
LowCardinality(String)カラムのソートを高速化しました。 #72337 (Alexander Gololobov). - いくつかの単純なデータ型向けに
argMin/argMax関数を最適化しました。 #72350 (alesapin). - メモリトラッカーで共有ロックを使用してロックを最適化し、ロック競合を減らすことで、CPU コア数が非常に多いシステムでのパフォーマンスを向上させました。 #72375 (Jiebin Sun).
- 新しい設定
use_async_executor_for_materialized_viewsを追加しました。マテリアライズドビューのクエリを非同期(必要に応じてマルチスレッド)で実行し、INSERT 時のビュー処理を高速化できますが、より多くのメモリを消費します。 #72497 (alesapin). - データ型
AggregateFunctionおよび分散クエリにおける集約関数状態のデシリアライズのパフォーマンスを改善しました。RowBinaryフォーマットの解析パフォーマンスもわずかに向上しました。 #72818 (Anton Popov). - 読み取り時のメモリ消費を抑えるため、テーブルキーの順序に従って並列レプリカで読み取り範囲を分割するようにしました。 #72173 (JIaQi).
- 挿入バッチ内のパーティションキーが単一の値に揃っている場合に、MergeTree への挿入を高速化しました。 #72348 (alesapin)。
- バックアップからの復元時に、テーブル作成を並列に実行できるようにしました。このPR以前は、
RESTOREコマンドは常に単一スレッドでテーブルを作成しており、多数のテーブルを含むバックアップでは処理に時間がかかる場合がありました。 #72427 (Vitaly Baranov). - マークキャッシュが大きい場合、それを破棄する処理には無視できない時間がかかることがあります。この間にコンテキストのミューテックスを保持したままだと、他の多くの処理がブロックされ、新しいクライアント接続でさえミューテックスが解放されるまで確立できません。そもそも同期のためにこのミューテックスを保持する必要はなく、
shared_ptrを介してキャッシュへのローカル参照を持っていれば十分です。#72749(Alexander Gololobov)。
改善
allow_experimental_join_condition設定を削除し、非等値条件がデフォルトで許可されるようにしました。 #69910 (Vladimir Cherkasov)。- サーバー設定ファイル(users.xml)の内容がクライアントにも適用されるようになりました。
date_time_output_formatなどのフォーマット設定に便利です。 #71178 (Michael Kolupaev)。 - サーバー/ユーザーのメモリ使用量に応じて、
GROUP BY/ORDER BYを自動的にディスクへオフロードします。max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sortクエリ設定で制御できます。#71406(Azat Khuzhin)。 - 新しいキャンセル処理ロジックを追加しました。
CancellationCheckerは開始されたすべてのクエリのタイムアウトを監視し、タイムアウトに達した時点でそれらを停止します。 #69880 (Yarik Briukhovetskyi)。 ObjectからJSONへのALTERをサポートし、非推奨となったObject型から容易に移行できるようになりました。 #71784 (Pavel Kruglov).- Enum に存在しない未知の値を set に含めることを許可。#72662 を修正。#72686(zhanglistar)。
Enumデータ型に対して文字列検索用演算子(例: LIKE)をサポートし、#72661 を実装しました。#72732(zhanglistar)。- 意味のない
ALTER USERクエリが受理されていました。#71227 を修正。#71286(Arthur Passos)。 - 分散テーブルの
INSERT ... SELECTのプランを構築する際にprefer_locahost_replicaを考慮するようにしました。#72190 (filimonov). - Azure は Iceberg 仕様に違反し、誤って Iceberg v1 を Iceberg v2 とラベル付けしていました。この問題についてはこちらで説明されています。Azure Iceberg Writer は、仕様に違反する Iceberg メタデータファイル(およびマニフェストファイル)を作成します。その結果、(Azure がそのように書き込んでいるため)v2 リーダーで v1 の Iceberg フォーマットのメタデータを読み取ろうとすることになり、マニフェストファイル内に対応するフィールドが作成されていない場合にはエラーを発生させるようにしました。#72277(Daniil Ivanik)。
- クエリで
UNION [ALL]を使用したCREATE MATERIALIZED VIEWが利用できるようになりました。挙動はJOINを用いたマテリアライズドビューと同様で、SELECT式内の最初のテーブルだけが挿入のトリガーとして機能し、他のすべてのテーブルは無視されます。ただし、最初のテーブルへの参照が複数ある場合(例: 自身との UNION)には、それらはすべて挿入されたデータブロックとして処理されます。 #72347 (alesapin). - ClickHouse を辞書のソースとして使用する場合のソースクエリ検証を追加しました。 #72548 (Alexey Katsman)。
- ClickHouse が設定の再読み込み時にも ZooKeeper の変更を認識できるようにしました。 #72593 (Azat Khuzhin).
- キャッシュされたマークのメモリ使用量の推定を改善し、キャッシュ全体のメモリ使用量を削減しました。 #72630 (Antonio Andelic).
- 新しい
StartupScriptsExecutionStateメトリクスを追加しました。このメトリクスは 3 つの値を取り、0 = スタートアップスクリプトがまだ完了していない、1 = スタートアップスクリプトが正常に実行された、2 = スタートアップスクリプトが失敗した、を表します。このメトリクスは、特にベース構成のリリース後に、クラウド環境でスタートアップスクリプトが正常に実行されているかどうかを把握するために必要です。#72637(Miсhael Stetsyuk)。 - 新しい
MergeTreeIndexGranularityInternalArraysTotalSizeメトリクスをsystem.metricsに追加します。このメトリクスは、大規模なデータセットを持ち、高い影響を受けやすいインスタンスを特定するために必要です。 - レプリケーテッドテーブル作成時の再試行処理を追加しました。 #72682 (Vitaly Baranov).
- 非アクティブなパーツのバイト数も含めた総バイト数をカウントするために、
system.tablesにtotal_bytes_with_inactiveを追加しました。 #72690 (Kai Zhu)。 - MergeTree の設定を
system.settings_changesに追加。#72694 (Raúl Marín)。 notEmpty関数に JSON 型のサポートを追加しました。 #72741 (Pavel Kruglov)。- GCS S3 エラー
AuthenticationRequiredのパースをサポートしました。 #72753 (Vitaly Baranov). - 関数
ifNullおよびcoalesceでDynamic型をサポート。#72772 (Pavel Kruglov)。 - 関数
toFloat64/touInt32などでDynamicをサポートしました。 #72989 (Pavel Kruglov)。 - S3 リクエスト設定である
http_max_fields、http_max_field_name_size、http_max_field_value_sizeを追加し、バックアップまたはリストアの実行時に S3 API レスポンスを解析する際にこれらを使用するようにしました。#72778 (Vitaly Baranov)。 - Storage S3(Azure)Queue において、このメタデータを最後に使用していたテーブルが削除された後にのみ、Keeper 内のテーブルメタデータを削除するようにしました。 #72810 (Kseniia Sumarokova).
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCountのプロファイルイベントを追加しました。 #72842 (Vladimir Cherkasov).- MergeTree のソートキーおよびスキップインデックスでサブカラムをサポートできるようにしました。 #72644 (Pavel Kruglov).
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
- MergeTree で互いに交差している可能性のあるパーツを修正(オブジェクトストレージ上での操作などにより、パーツを detached ディレクトリに移動する操作が失敗した後)。 #70476 (Azat Khuzhin).
- テーブル名が長すぎる場合のエラー検出を修正し、最大長を通知する診断メッセージを出力するようにしました。新しい関数
getMaxTableNameLengthForDatabaseを追加しました。 #70810 (Yarik Briukhovetskyi). clickhouse-library-bridge(安全ではないライブラリを実行するためのプログラム)がクラッシュした後に残存するゾンビプロセスを修正しました。 #71301 (MikhailBurdukov).plain_rewritableディスクでディレクトリの作成に失敗した際のトランザクションロールバック中に NoSuchKey エラーが発生する問題を修正。 #71439 (Julia Kartseva).PrettyJSON 形式におけるDynamic値のシリアル化を修正。#71923(Pavel Kruglov)。File/S3/URL/HDFS/AzureエンジンのCREATEクエリに、推論されたフォーマット名を含めるようにしました。以前はサーバーが再起動されるたびにフォーマット名が再推論され、指定されたデータファイルが削除されていると、サーバー起動時にエラーが発生していました。 #72108 (Pavel Kruglov).- 古いアナライザで
JOIN ON句内の式に UDF を使用する際に発生していたバグを修正。 #72179 (Raúl Marín). StorageObjectStorageのいくつかの小さなバグを修正し、use_hive_partitioningをデフォルトで有効にしました。 #72185 (Yarik Briukhovetskyi).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).AWS_CONTAINER_AUTHORIZATION_TOKEN_PATHの代わりにAWS_CONTAINER_AUTHORIZATION_TOKEN_FILEを使用するようにしました。 #71074 を修正。 #72397(Konstantin Bogdanov)。BACKUP DATABASE db EXCEPT TABLES db.tableクエリのパースに失敗する問題を修正。 #72429 (Konstantin Bogdanov)。- 空の
Variantを作成できないようにしました。 #72454 (Pavel Kruglov)。 system.mergesでのresult_part_pathの不正な形式を修正。#72567(Konstantin Bogdanov)。- 要素が 1 つだけの glob パターン(
{file}など)の解析を修正しました。 #72572 (Konstantin Bogdanov)。 ARRAY JOINを含む分散クエリにおいて、フォロワーサーバー向けのクエリ生成を修正しました。これにより #69276 を解決します。#72608(Dmitry Novik)。DateTime64とDateTime64のIN演算が結果を返さないバグを修正。 #72640 (Yarik Briukhovetskyi).flatten_nested=0で作成されたテーブルを持つ Replicated データベースに新しいレプリカを追加する際のメタデータの不整合を修正しました。 #72685 (Alexander Tokmakov).- Keeper の内部通信向けの高度な SSL 設定を修正しました。 #72730 (Antonio Andelic)。
- S3Queue の unordered モードで、
tracked_files_limitの設定値が S3 ファイルの出現頻度より小さい場合に発生する「No such key」エラーを修正しました。 #72738 (Kseniia Sumarokova). - ローカルに該当ユーザーが存在しない場合に
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).
MemoryTrackingとMemoryResidentの差が増え続ける場合に起こりうる、メモリトラッキングの過大推定を修正。 #73081 (Azat Khuzhin).- Tuple のパース中に、重複した JSON キーがないかをチェックするようにしました。以前は、パース中に論理エラー
Invalid number of rows in Chunkが発生する可能性がありました。 #73082 (Pavel Kruglov).
ビルド/テスト/パッケージングの改善
- これまで
/utilsフォルダ内に保存され、ソースからの手動コンパイルが必要だった小さなユーティリティは、すべてメインの ClickHouse バンドルの一部になりました。これにより次の課題が解決されます: #72404。#72426(Nikita Mikhaylov)。 - 22.3 で導入された
/etc/systemd/system/clickhouse-server.serviceの削除処理を廃止しました。#39323。#72259(Mikhail f. Shiryaev)。 - メモリ/CPU 制限によるコンパイル失敗を避けるため、大きな翻訳単位を分割しました。#72352(Yakov Olkhovskiy)。
- OSX: 照合順序、文字セット変換、その他のローカリゼーション機能を有効にするため、ICU サポート付きでビルドするようにしました。#73083(Raúl Marín)。
ClickHouse リリース 24.11, 2024-11-26
後方互換性のない変更
- システムテーブル
generate_seriesおよびgenerateSeriesを削除しました。これらは誤って次の課題で追加されたものです: #59390。#71091(Alexey Milovidov)。 StorageExternalDistributedを削除しました。これにより #70600 がクローズされます。#71176(flynn)。- テーブルエンジン 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)。 deltaSumTimestampにおけるEnumおよびUInt128、UInt256引数のサポートを削除しました。また、deltaSumTimestampの 2 番目(「timestamp」)引数としてのInt8、UInt8、Int16、UInt16のサポートも削除しました。#71790(Alexey Milovidov)。- Dictionary ストレージ、dictionary テーブル関数、または辞書自体に対する直接の
SELECTによって辞書からデータを直接取得する場合、辞書に対するSELECT権限またはdictGet権限のいずれかを持っていれば十分になりました。これは ACL 回避を防ぐこれまでの試み(https://github.com/ClickHouse/ClickHouse/pull/57362 および https://github.com/ClickHouse/ClickHouse/pull/65359)と整合するものであり、後者を後方互換にするものでもあります。[#72051](https://github.com/ClickHouse/ClickHouse/pull/72051)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。
実験的機能
allow_feature_tierをグローバルスイッチとして実装し、すべての実験的 / ベータ機能を無効化できるようにしました。 #71841 #71145 (Raúl Marín).- JSON サブカラム用ファイル内の特殊文字がエスケープされていないことに起因して
No such file or directoryが発生しうる問題を修正しました。 #71182 (Pavel Kruglov). - String から JSON への
ALTERをサポートしました。この PR により、JSON および Dynamic 型のシリアル化方式が新バージョン V2 に変更されます。旧バージョン V1 も、設定merge_tree_use_v1_object_and_dynamic_serializationを有効化することで引き続き使用できます(アップグレード時に、問題なくバージョンをロールバックできるようにする目的で使用できます)。 #70442 (Pavel Kruglov). - JSON 文字列とのシリアル化 / デシリアル化を通じて、Map/Tuple/Object から新しい JSON への単純な CAST を実装しました。 #71320 (Pavel Kruglov).
- 予期しない結果につながる可能性があるため、デフォルトでは ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY で Variant/Dynamic 型を許可しないようにしました。 #69731 (Pavel Kruglov).
- 混乱を避けるため、min/max 関数で Dynamic/Variant 型を禁止しました。 #71761 (Pavel Kruglov).
新機能
- ワークロードおよびリソース管理を記述するための SQL 構文を追加しました。https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
- 新しいデータ型
BFloat16を追加しました。これは 8 ビットの指数部・符号・7 ビットの仮数部を持つ 16 ビット浮動小数点数を表します。これにより #44206 がクローズされます。また #49937 もクローズされます。 #64712 (Alexey Milovidov). - 現在のユーザー / ロールに特定の権限が付与されているか、対応するテーブル / カラムがメモリ上に存在するかを確認するための
CHECK GRANTクエリを追加しました。 #68885 (Unalian). iceberg[S3;HDFS;Azure]Cluster,deltaLakeCluster,hudiClusterテーブル関数を追加しました。 #72045 (Mikhail Artemenko).- http_handlers(
dynamic_query_handler/predefined_query_handler)で user/password(ユーザー名 / パスワード)を設定できる機能を追加しました。 #70725 (Azat Khuzhin). - ORDER BY WITH FILL 演算子において staleness 句をサポートしました。 #71151 (Mikhail Artemenko).
- 各認証方式ごとに個別の有効期限を持てるようにし、ユーザーエンティティからは削除しました。 #70090 (Arthur Passos).
- 新しい関数
parseDateTime64,parseDateTime64OrNull,parseDateTime64OrZeroを追加しました。既存のparseDateTime(およびそのバリアント)と比較して、これらはDateTimeではなくDateTime64型の値を返します。 #71581 (kevinyhzou).
パフォーマンスの向上
- パート内の粒度が一定である場合のインデックス粒度値に対するメモリ使用量を最適化しました。パートに対して常に一定の粒度を選択できる設定(
use_const_adaptive_granularity)を追加し、その場合にメモリ使用量が常に最適化されるようにしました。これにより、共有ストレージ上に数兆行規模の大きなワークロードがある場合でも、データパートのメタデータ(インデックス粒度の値)によるメモリ使用量の継続的な増加を防ぐことができます。#71786(Anton Popov)。 join_algorithm = 'parallel_hash'使用時には、並列処理のためにスレッド間で分配する際に、入力ブロックの列をコピーしないようにしました。 #67782 (Nikita Taranov).- 互いに交差しないパーツに対する
Replacingマージアルゴリズムの最適化。 #70977 (Anton Popov). - metrics および system.detached_parts において、readonly ディスクおよび write-once ディスク上の detached parts を一覧表示しないようにしました。 #71086 (Alexey Milovidov).
- 重い非同期メトリクスをデフォルトでは計算しないようにしました。この機能は #40332 で導入されましたが、ごく一部の顧客にしか必要とされない重いバックグラウンドジョブを常時走らせるのは好ましくありません。#71087(Alexey Milovidov)。
plain_rewritableディスクの場合は、ディレクトリを一覧表示するときにオブジェクトストレージ API を呼び出さないでください。コスト効率が悪くなる可能性があります。代わりに、ファイル名の一覧をメモリに保持してください。このアプローチのトレードオフとして、初回ロード時間とファイル名を保持するために必要なメモリが増加します。 #70823 (Julia Kartseva).- クリティカルセクションを短縮することで、
system.query_metric_logの収集間隔におけるパフォーマンスと精度を改善しました。 #71473 (Pablo Marcos). - 仮想行を生成することで順序どおりの読み込みを最適化し、特に複数のパーツが存在する場合のマージソート中に読み取る必要があるデータ量を削減しました。 #62125 (Shichao Jin).
- サーバー設定
async_load_system_databaseを追加しました。これにより、system データベースの読み込みが完了していなくてもサーバーを起動できるようになります。system テーブルが多数存在する場合に、ClickHouse の起動をより高速化するのに役立ちます。#69847(Sergei Trifonov)。 clickhouse-compressorに--threadsパラメーターを追加し、データを並列に圧縮できるようにしました。 #70860 (Alexey Milovidov).prewarm_mark_cacheという設定を追加しました。これにより、テーブルへの挿入、マージ、パーツのフェッチ時およびテーブルの起動時に、マークが mark cache に読み込まれるようになります。 #71053 (Anton Popov).- MergeTree テーブルエンジンファミリーのメモリフットプリントを削減するため、メモリ内の index_granularity 配列を実際の使用量に合わせて縮小するようにしました。 #71595 (alesapin).
- ディスクを介さない読み取りに対してファイルシステムキャッシュ設定
boundary_alignmentを無効化し、キャッシュを用いたスタンドアロンのリモートファイルからの読み取りパフォーマンスを改善しました。 #71827 (Kseniia Sumarokova)。 SELECT * FROM table LIMIT ...のようなクエリでは、実際には利用されないパートインデックスまで読み込まれていました。 #71866 (Alexander Gololobov).parallel_replicas_local_planをデフォルトで有効化しました。クエリの発行元で完全なローカルプランを構築することで、リソース消費を抑えつつ parallel replicas のパフォーマンスを向上させ、さらなるクエリ最適化を行える余地が生まれます。 #70171 (Igor Nikonov)。
改善
ch queries.sqlのようにファイルを引数として指定して ClickHouse を使用できるようにしました。 #71589 (Raúl Marín).Verticalフォーマット(クエリの末尾を\Gで終えることでも有効化されます)は、次のような Pretty フォーマットの機能を利用できるようになりました: - 数値の千単位区切りの強調表示 - 読みやすい数値の補足情報の出力。#71630 (Alexey Milovidov).- クエリの発行元からクラスタ内の他のノードへ外部ユーザーロールをプッシュできるようにしました。外部認証基盤(LDAP など)へのアクセス権が発行元ノードのみにある場合に有用です。 #70332 (Andrey Zvonov).
- 集約関数
anyに対して、anyRespectNulls、firstValueRespectNulls、anyValueRespectNullsというエイリアスを追加しました。また、集約関数anyLastに対してはanyLastRespectNullsとlastValueRespectNullsというエイリアスも追加しました。これにより、anyLast_respect_nullsStateIfではなくSELECT anyLastRespectNullsStateIfのように、アンダースコア混在ではないキャメルケースのみの、より自然な構文を使用できるようになります。 #71403 (Peter Nguyen)。 date_time_utc設定パラメータを追加し、JSON ログフォーマットで RFC 3339/ISO8601 形式の UTC 日時をサポートするようにしました。#71560 (Ali)。- ユーザー認証用の S3 エンドポイント向けに新しいヘッダー種別(
access_header)を追加しました。これにより、優先度が最も低いアクセスヘッダーを設定でき、この値は他のソース(例えばテーブルスキーマや名前付きコレクション)からのaccess_key_idによって上書きされます。 #71011 (MikhailBurdukov)。 - 定数配列および定数としてキャプチャされた引数を取る高階関数は、定数を返すようになりました。 #58400 (Alexey Milovidov).
- クエリプランのステップ名(
EXPLAIN PLAN json=1)およびパイプラインのプロセッサ名(EXPLAIN PIPELINE compact=0,graph=1)に、一意の ID が末尾のサフィックスとして付与されるようになりました。これにより、プロセッサプロファイラの出力および OpenTelemetry トレースを、EXPLAIN の出力と対応付けられるようになりました。 #63518 (qhsong). - Azure Blob Storage にオブジェクトを書き込んだ後、そのオブジェクトが存在するかを確認するオプションを追加しました。これは
check_objects_after_uploadの設定によって制御されます。 #64847 (Smita Kulkarni). clickhouse-localのデフォルトデータベースとしてAtomicを使用するようにしました。 #50647 の項目 1 および 5 に対応しています。 #44817 をクローズします。 #68024(Alexey Milovidov)。- クライアントにエラーを通知するために、例外は HTTP プロトコルに違反します。 #68800 (Sema Checherinda).
- replica_dir を作成し、DDLWorker でレプリカをアクティブとしてマークすることで、分散DDLクエリを実行しているホストを報告するようにしました。 #69658 (tuanpach).
- distributed_ddl_output_mode が *_only_active に設定されている場合、ON CLUSTER を指定したデータベースクエリではアクティブなレプリカのみを待機するようにしました。 #69660 (tuanpach).
ON CLUSTERバックアップおよびリストア時のエラーハンドリングとキャンセル処理の改善: - あるホストでバックアップまたはリストアが失敗した場合、他のホスト上の処理は自動的にキャンセルされます - 一部のホストが失敗し他のホストが処理を続行した場合でも、不可解なエラーが出力されることがないようにしました - あるホストでバックアップまたはリストアがキャンセルされた場合、他のホスト上の処理も自動的にキャンセルされます -test_disallow_concurrencyに関する問題を修正しました。これにより同時実行の無効化がより適切に動作するようになりました - バックアップおよびリストアは ZooKeeper 切断に対する耐性が、これまでよりはるかに高くなりました。 #70027 (Vitaly Baranov).- S3Queue ストレージにおいて、特定の設定に対する
ALTER TABLE ... MODIFY/RESET SETTING ...のサポートを追加しました。 #70811 (Kseniia Sumarokova)。 - サーバー証明書のリロード手順と同様に、クライアント証明書もリロードできるようになりました。 #70997 (Roman Antonov).
- クライアントの履歴サイズを設定可能にし、デフォルトサイズを増やしました。 #71014 (Jiří Kozlovský).
- Parquet ネイティブリーダーでの Boolean 型サポート。 #71055 (Arthur Passos)。
- S3 とのやり取り時に、「Malformed message」など、より多くの種類のエラーを再試行対象としました。 #71088 (Alexey Milovidov).
- S3 に関する一部のメッセージのログレベルを引き下げました。 #71090 (Alexey Milovidov)。
- スペースを含む HDFS ファイルへの書き込みをサポートしました。#71105 (exmy)。
- レプリケートされたテーブル、辞書、およびビューの数を制限する設定を追加しました。 #71179 (Kirill).
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILEが利用可能な場合は、AWS_CONTAINER_AUTHORIZATION_TOKENではなくAWS_CONTAINER_AUTHORIZATION_TOKEN_FILEを使用します。#71074 を修正。#71269(Konstantin Bogdanov)。- ReplicatedMergeTree の再起動スレッドから、metadata_version ZooKeeper ノードの作成を削除しました。このノードを作成する必要があるのは、ユーザーが 20.4 より前のバージョンから、直接 24.10 より後のバージョンへアップグレードした場合だけです。ClickHouse は 1 年以上の期間にまたがるアップグレードをサポートしていないため、ノードを作成するのではなく、例外をスローしてユーザーに段階的にアップグレードするよう求めるべきです。#71385 (Miсhael Stetsyuk)。
- ホストごとのダッシュボード
Overview (host)とCloud overview (host)を高度なダッシュボードに追加しました。 #71422 (alesapin). clickhouse-localはデフォルトで暗黙の SELECT を使用しており、電卓として利用できます。暗黙の SELECT モードにおける構文ハイライトを改善しました。 #71620 (Alexey Milovidov).- コマンドラインアプリケーションでは、複数ステートメントでも構文がハイライト表示されます。 #71622 (Alexey Milovidov).
- コマンドラインアプリケーションは、エラー時に非ゼロの終了コードを返すようになります。以前のバージョンでは、
disksアプリケーションはエラー時にも終了コード 0 を返し、他のアプリケーションもエラーコード 256(PARTITION_ALREADY_EXISTS)および 512(SET_NON_GRANTED_ROLE)に対して終了コード 0 を返していました。 #71623 (Alexey Milovidov)。 - ユーザー/グループが ID で指定された場合、
clickhouse suは失敗していました。このパッチにより、UID:GID形式の指定も受け付けるように修正されました。 #71626 (Mikhail f. Shiryaev). filesystem_cache_prefer_bigger_buffer_size設定により、ファイルシステムキャッシュのメモリバッファサイズ拡大を無効化できるようにしました。 #71640 (Kseniia Sumarokova).- ファイルシステムキャッシュにおけるバックグラウンドダウンロードの最大ファイルセグメントサイズ用として、個別の設定
background_download_max_file_segment_sizeを追加しました。 #71648 (Kseniia Sumarokova). - JSON 型のパースをわずかに改善しました。JSON パスに対応する現在のブロック内に複数種類の値が含まれている場合、特別なベストエフォートの順序で型を試し、最適な型を選択するようにしました。 #71785 (Pavel Kruglov).
- 以前は
system.asynchronous_metricsから読み取る際、並行して実行中の更新処理が完了するまで待機していました。システムに高い負荷がかかっている場合、これには長い時間がかかる可能性があります。この変更により、これまでに収集された値を常に読み取れるようになりました。 #71798 (Alexander Gololobov). - S3Queue と AzureQueue:
polling_max_timeout_msを 10 分、polling_backoff_msを 30 秒に設定。 #71817 (Kseniia Sumarokova). history期間中にHostResolverを 3 回更新するようにしました。 #71863 (Sema Checherinda).- 高度なダッシュボード用の HTML ページに、
system.dashboardsテーブル内のダッシュボードを選択するためのドロップダウンセレクターを追加しました。 #72081 (Sergei Trifonov). - 認可後にデフォルトデータベースが存在することを確認するようにしました。#71097 を修正。#71140(Konstantin Bogdanov)。
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
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).
- 同じ zk path を持つ別のレプリカが存在する場合でも、system drop replica zkpath を実行できるようにしました。 #70642 (MikhailBurdukov).
- AggregateFunctionGroupArraySorted のクラッシュおよびメモリリークを修正。 #70820 (Michael Kolupaev).
- URL エンジンで、ユーザー指定ヘッダーにより Content-Type を上書きできるようにした。 #70859 (Artem Iurin).
StorageS3Queueの論理エラー「Cannot create a persistent node in /processed since it already exists」を修正しました。 #70984 (Kseniia Sumarokova).- 特定の状況下で名前付きセッションが終了せず、ハングし続ける問題を修正しました。 #70998 (Márcio Martins).
- projection の lightweight delete の rebuild オプションで _row_exists 列が考慮されていなかったバグを修正。 #71089 (Shichao Jin).
- Oracle Linux UEK 6.10 上で実行する際に発生する
AT_* is out of rangeという問題を修正。 #71109 (Örjan Fors). - 予期しないレースコンディションが原因で
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).
- 7z ファイルの読み取りがローカルマシン上で行われていることを確認します。 #71184 (Daniil Ivanik).
- 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 column からの LowCardinality 辞書のデシリアライズ時に発生する可能性のあるエラー「Cannot read all data」を修正します。#71299 (Pavel Kruglov).
- クライアントにおける並列出力フォーマットのクリーンアップが不完全だった問題を修正。 #71304 (Raúl Marín).
- 名前付きコレクションで不足していたエスケープ解除処理を追加しました。この修正がないと clickhouse-server は起動できません。 #71308 (MikhailBurdukov).
- ネイティブプロトコル経由で空ブロックを含む非同期挿入の問題を修正。 #71312 (Anton Popov).
- 誤ったワイルドカード権限を付与した場合にASTのフォーマットが不整合になる問題を修正 #71309。#71332(pufit)。
std::terminateの発生を避けるため、データパーツのデストラクタに try/catch を追加しました。 #71364 (alesapin).- JSON の型ヒントで疑わしい型や実験的な型を検査するようにしました。 #71369 (Pavel Kruglov).
- Linux 以外の OS でもメモリワーカースレッドを起動するようにしました(#71051 の修正)。#71384(Alexandre Snarskii)。
- Variant カラムを含む Chunk で発生する「Invalid number of rows」エラーを修正。 #71388 (Pavel Kruglov).
- 古い PostgreSQL バージョンで列 "attgenerated" が存在しないエラーを修正し、#60651 を修正。#71396(0xMihalich)。
- サーバーログをスパムしないように、失敗した認証試行は
ERRORレベルではなくDEBUGレベルで記録されるようになりました。 #71405 (Robert Schulze). - 誤った引数(例:
NULL)を渡した場合にmongodbテーブル関数がクラッシュする問題を修正しました。#71426 (Vladimir Cherkasov)。 - optimize_rewrite_array_exists_to_has 有効時に発生するクラッシュを修正。 #71432 (Raúl Marín).
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)。- 0 列の SortCursor でクラッシュが発生しないように修正(旧アナライザー)。 #71494 (Raúl Marín).
- 初期化されていない ORC データが原因で発生する Date32 の範囲外エラーを修正しました。詳細は https://github.com/apache/incubator-gluten/issues/7823 を参照してください。 #71500(李扬)。
- Dynamic 型および JSON 型に対して、ワイドパートにおけるカウント用カラムのサイズを修正しました。#71526 (Pavel Kruglov).
- マテリアライズドビュー内のクエリが CTE とともに
INを使用している場合を Analyzer が正しく処理できるよう修正。#65598 をクローズ。#71538(Maksim Kita)。 - 制約内で UDF を使用した際にクラッシュしないようにしました。 #71541 (Raúl Marín).
- 範囲外の場合、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).
- Docker init スクリプトの失敗ログメッセージを、より分かりやすくするために修正。 #71734 (Андрей).
- LowCardinality(Nullable) から Dynamic への CAST の挙動を修正しました。以前は
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullableというエラーが発生する可能性がありました。 #71742 (Pavel Kruglov)。 - WHERE 句で DateTime64 型の主キーに対して
toDayOfWeekを使用した場合に発生する例外を修正。 #71849 (Yakov Olkhovskiy). - スパース列へのパース後のデフォルト値補完処理を修正しました。 #71854 (Anton Popov).
- 分散テーブルで入力が ALIAS の場合に発生していた GROUPING 関数のエラーを修正しました。#68602。#71855(Vladimir Cherkasov)。
allow_experimental_join_condition使用時にクラッシュが発生する可能性があった問題を修正し、#71693 をクローズしました。#71857(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).
- クラスタ自動検出に補助 Keeper を使用できるようにしました。 #71911 (Anton Ivashkin).
- 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)。
MergeTreeテーブルのORDER BYで、最初の引数が定数のバイナリ単調関数を使用した場合に発生する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).- 並列レプリカを使用するクエリにおける RIGHT / FULL JOIN の不具合を修正しました。これにより、RIGHT JOIN は並列レプリカで実行できるようになりました(右テーブルの読み取りが分散されます)。FULL JOIN はノード間で並列化できないため、ローカルで実行されます。 #71162 (Igor Nikonov)。
- 制限されたシステムコールが原因で、Docker コンテナ内の ClickHouse が stderr に "get_mempolicy: Operation not permitted" を出力していた問題を修正しました。 #70900 (filimonov).
attachスレッドではなく、再起動スレッド内で ZooKeeper のmetadata_versionレコードを修正するようにしました。 #70297 (Miсhael Stetsyuk)。- これはサポート対象外であり、今後完全に削除される予定の「zero-copy」レプリケーションに対する修正です。zero-copy レプリケーションを使用する ReplicatedMergeTree で、その blob を使用しているノードが存在する場合は、その blob を削除しないようにしました。 #71186 (Antonio Andelic).
- これはサポートされておらず、今後完全に削除される予定の「zero-copy」レプリケーションに対する修正です。Keeper が利用できない場合のデータ損失の可能性を防ぐため、パーツを zero-copy ディスクに移動する前に zero-copy の共有ロックを取得するようにしました。 #71845 (Aleksei Filatov)。
ClickHouse リリース 24.10, 2024-10-31
互換性のない変更
- サブクエリがかっこで囲まれている場合、
UNIONを含むクエリチェーンでFORMATの前にSETTINGSを記述できるようになりました。これにより #39712 が解決されます。さらに、1つのクエリ内でSETTINGS句が連続して2回指定されている場合の動作を変更しました。対応するサブクエリに最も近いSETTINGS句が優先されます。以前のバージョンでは、より外側のSETTINGS句が内側よりも優先される場合がありました。 #68614 (Alexey Milovidov). - デフォルトで
[PRE]WHERE句に含まれるフィルタ条件の並べ替えが許可されるようになりました。これはallow_reorder_prewhere_conditionsをfalseに設定することで無効化できます。 #70657 (Nikita Taranov). - ライセンスが非互換な
idxd-configライブラリを削除しました。これに伴い、実験的な Intel DeflateQPL コーデックも削除されました。 #70987 (Alexey Milovidov).
新機能
- ワイルドカード接頭辞を持つテーブルへのアクセスを許可できるようにしました。
GRANT SELECT ON db.table_pefix_* TO user。 #65311(pufit)。 - クエリの実行中にスペースバーを押すと、クライアントは詳細なメトリクスを含むリアルタイムのテーブルを表示します。
clickhouse-clientでは、新しい--progress-tableオプションによってこれをグローバルに有効化できます。新しい--enable-progress-table-toggleオプションは--progress-tableに関連付けられており、Ctrl+Space を押すことで進捗テーブルの描画を切り替えます。 #63689 (Maria Khristenko)、#70423 (Julia Kartseva)。 - ETag とファイルパスから生成したハッシュをキャッシュキーとして使用し、オブジェクトストレージ用テーブルエンジンおよびデータレイク向けに読み込むファイルをキャッシュできるようにしました。 #70135 (Kseniia Sumarokova).
- クエリ
CREATE TABLE ... CLONE AS ...を用いたテーブル作成をサポートします。これは、ソーステーブルのスキーマをクローンし、その後すべてのパーティションを新しく作成されたテーブルにアタッチします。この機能はMergeTreeファミリーのテーブルでのみサポートされます。#65015 をクローズします。 #69091 (tuanpach)。 - 新しいシステムテーブル
system.query_metric_logを追加しました。これは、個々のクエリごとにsystem.eventsテーブルから取得したメモリおよびメトリクス値の履歴を保持し、定期的にディスクにフラッシュします。 #66532 (Pablo Marcos)。 - 簡単な SELECT クエリは、暗黙の SELECT を使用して電卓スタイルの式を有効にする形で記述できます(例:
ch "1 + 2")。これは新しい設定項目implicit_selectによって制御されます。 #68502 (Alexey Milovidov)。 - フォーマット変換のためのショートカットとして
--copyモードを clickhouse local でサポートしました #68503。#68583(Denis Hananein)。 /mergesパスで利用できる、マージを可視化するための組み込み HTML ページを追加しました。 #70821 (Alexey Milovidov).arrayUnion関数のサポートを追加しました。 #68989 (Peter Nguyen)。- パラメータ付き SQL エイリアスを許可。#50665(Anton Kozlov)。
- 新しい集約関数
quantileExactWeightedInterpolatedが追加されました。これはquantileExactWeightedに基づく補間を行うバージョンです。すでにquantileExactInterpolatedWeightedがあるのに、なぜ新しいquantileExactWeightedInterpolatedが必要なのかと疑問に思うかもしれません。その理由は、新しい関数の方が既存のものよりも高い精度を持つためです。これは Spark との互換性のためのものです。 #69619 (李扬)。 - 新しい関数
arrayElementOrNullを追加しました。配列インデックスが範囲外の場合、または Map のキーが存在しない場合にNULLを返します。 #69646 (李扬)。 config.xmlファイル内に新たに追加されたmessage_regexpおよびmessage_regexp_negativeフィールドを通じて正規表現を指定し、ログをフィルタリングできるようにしました。ログ出力は、開発者にとって直感的な体験を提供するため、カラー装飾なしの整形テキストに対して適用されます。#69657 (Peter Nguyen)。RIPEMD160関数を追加しました。この関数は文字列の RIPEMD-160 暗号学的ハッシュ値を計算します。例:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))は37F332F68DB77BD9D7EDD4969571AD671CF9DD3Bを返します。 #70087 (Dergousov Maxim)。HDFS上のIcebergテーブルの読み込みをサポートします。 #70268 (flynn)WITH ... INSERT形式の CTE をサポートするようになりました。以前はINSERT ... WITH ...のみをサポートしていました。 #70593 (Shichao Jin).- MongoDB 連携: すべての MongoDB 型のサポート、MongoDB 側での WHERE および ORDER BY ステートメントのサポート、MongoDB でサポートされない式に対する制限。なお、新しい連携はデフォルトで無効になっているため、使用するにはサーバー設定で
<use_legacy_mongodb_integration>をfalseに設定してください。#63279 (Kirill Nikiforov)。 - カスタム設定が現在のプロファイル内に見つからない場合に、例外をスローせずにデフォルト値を返す新しい関数
getSettingOrDefaultが追加されました。 #69917 (Shankar).
実験的機能
- リフレッシュ可能なマテリアライズドビューが本番利用可能になりました。#70550(Michael Kolupaev)。リフレッシュ可能なマテリアライズドビューは、Replicated データベースでもサポートされるようになりました。#60669(Michael Kolupaev)。
- Parallel replicas は experimental から beta に移行しました。parallel replicas アルゴリズムの動作を制御する設定が再設計されました。簡単におさらいすると、ClickHouse には複数のレプリカを用いた並列読み取りのための 4 種類のアルゴリズムがあり、これは設定
parallel_replicas_modeに反映されています。デフォルト値はread_tasksです。さらに、トグル型の設定enable_parallel_replicasが追加されました。#63151(Alexey Milovidov)、(Nikita Mikhaylov)。 Dynamic内部の型に対して実行することで、ほとんどの関数でDynamic型をサポートしました。#69691(Pavel Kruglov)。- 設定
input_format_binary_read_json_as_string/output_format_binary_write_json_as_stringを有効にすると、RowBinaryフォーマットにおいてJSON型をバイナリ文字列として読み書きできるようになりました。#70288(Pavel Kruglov)。 - Native フォーマットで
JSON列を単一の String 列としてシリアライズ/デシリアライズできるようになりました。出力には設定output_format_native_write_json_as_stringを使用します。入力では、列データの前にシリアライズバージョン1を指定します。#70312(Pavel Kruglov)。 - MergeTree テーブルに対して特別な(実験的な)マージセレクターモードを導入しました。これは、パーツ数の上限に近いパーティションに対して、より積極的に動作するようにします。
merge_selector_use_blurry_baseという MergeTree レベルの設定で制御されます。#70645(Nikita Mikhaylov)。 - Avro の
Union型と ClickHouse のVariant型間の汎用的なシリアライズ/デシリアライズを実装しました。#69713 を解決します。#69712(Jiří Kozlovský)。
パフォーマンスの向上
IDiskとIObjectStorageをリファクタリングしてパフォーマンスを向上しました。plainおよびplain_rewritableオブジェクトストレージ上のテーブルがより高速に初期化されます。#68146 (Alexey Milovidov, Julia Kartseva)。plain_rewritable ディスク上でファイルまたはディレクトリの存在確認を行う際、コスト効率が悪くなり得るため LIST オブジェクトストレージ API を呼び出さないようにしました。#70852 (Julia Kartseva)。plain_rewritable ディスクにおけるオブジェクトストレージ HEAD API のリクエスト数を削減しました。#70915 (Julia Kartseva)。- データを直接スパースカラムにパースする機能を追加しました。 #69828 (Anton Popov).
- 欠損値が多いフォーマット(例:
JSONEachRow)の解析パフォーマンスを改善しました。 #69875 (Anton Popov). - Parquet の row group の並列読み取りと、シングルスレッドモードでの row group の先読みをサポートします。#69862 (LiuNeng).
pointInPolygonに minmax インデックスのサポートを追加。#62085 (JackyWoo)。- Parquet ファイルの読み取り時にブルームフィルターを使用します。 #62966 (Arthur Passos)。
- INSERT が SELECT に影響しないようにするため、パーツのリネームをロックフリー化しました(パーツロックによる影響を回避)。通常の状況で
fsync_part_directoryを有効にした場合、INSERT と並行して実行される SELECT の QPS が 2 倍に向上し、重負荷時には効果はさらに大きくなります。なお、現時点ではReplicatedMergeTreeのみが対象です。 #64955 (Azat Khuzhin)。 materialize ttlでttl_only_drop_partsの設定を反映し、TTL を再計算してパーツを空のパーツに置き換えて削除する際に必要な列だけを読み込むようにしました。 #65488 (Andrey Zvonov).- ThreadPool におけるスレッド生成処理を最適化し、ロック競合を最小限に抑えました。スレッド生成はクリティカルセクションの外側で実行されるようになり、高負荷時のジョブスケジューリングおよびスレッド管理における遅延を回避します。これにより、高い同時実行負荷下でも ClickHouse の応答性が大幅に向上します。 #68694 (filimonov).
ORC形式からLowCardinality文字列カラムを読み取れるようにしました。 #69481 (李扬)part_log、query_views_log、filesystem_cache_logなどのシステムログ内のProfileEventsでLowCardinalityを使用するようにしました。 #70152 (Alexey Milovidov)。fromUnixTimestamp/toUnixTimestamp関数のパフォーマンスを向上。#71042(kevinyhzou)。- ブロッキング I/O を扱う際に、サーバー全体でページキャッシュからのノンブロッキング読み取りを無効化しないようにしました。特定のファイルシステム(例: tmpfs)のみが
preadv2システムコールをサポートしておらず、他はサポートしている場合に、これがパフォーマンス低下を引き起こしていました。 #70299 (Antonio Andelic). ALTER TABLE .. REPLACE PARTITIONは、他のパーティションで発生している mutation や merge の完了を待機しなくなりました。 #59138 (Vasily Nemkov).- Keeper から ACL を同期するときには検証を行わないようにしました。作成時には既に検証されています。本来はそれほど問題にはなりませんが、ユーザーが数万、あるいはそれ以上作成されている環境では、不要なハッシュ検証によってサーバー起動中に(Keeper からすべてを同期するため)、処理が完了するまでに長時間かかる場合があります。#70644(Raúl Marín)。
改善
CREATE TABLE ASは、PRIMARY KEY、ORDER BY、およびそれらに類似する句(MergeTreeテーブルのもの)をコピーします。#69739 (sakulali)。- Keeper で 64-bit XID のサポートを追加しました。
use_xid_64設定値で有効化できます。#69908(Antonio Andelic)。 - Bool 型の設定に対するコマンドライン引数は、引数に値が指定されなかった場合に true に設定されます(例:
clickhouse-client --optimize_aggregation_in_order --query "SELECT 1")。 #70459 (davidtsuk)。 - ほぼ満杯のディスクへの挿入を防ぐため、ユーザーレベル設定
min_free_disk_bytes_to_perform_insertおよびmin_free_disk_perform_to_throw_insertを追加しました。 #69755 (Marco Vilas Boas). - 設定に対する組み込みドキュメントは、ウェブサイト上のドキュメントよりも必ず詳細かつ完全なものになります。これは、ウェブサイトのドキュメントを常にソースコードから自動生成するようにするための最初のステップです。これは長期的には次のような効果があります。- すべての設定項目が必ず網羅されることが保証される; - 既定値(デフォルト値)が古くなることがなくなる; - 各 ClickHouse バージョンごとにこのドキュメントを生成できる; - インターネット接続がなくてもサーバー自身がドキュメントを表示できるようになる。ウェブサイト上のドキュメントをソースコードから生成する。#70289 (Alexey Milovidov).
- 関数
replaceで空の needle を許可し、PostgreSQL と同じ動作にしました。#69918(zhanglistar)。 - 関数
replaceRegexp*で空の検索パターンを使用できるようにしました。 #70053 (zhanglistar). data/database_name/ディレクトリ内のテーブルに対するシンボリックリンクは、デフォルトディスク上のstore/...ディレクトリではなく、ストレージポリシーに応じてテーブルデータの実際のパスを指すように作成されるようになりました。 #61777 (Kirill).JSONからEnumフィールドをパースする際、整数値を表す文字列は対応するEnum要素として解釈されます。これにより #65119 が解決されました。 #66801 (scanhex12)。- 空文字列を対象とする
TRIMのLEADINGまたはTRAILINGを、何もしない操作として扱うようにしました。 #67792 をクローズ。 #68455(Peter Nguyen)。 cast(timestamp as String)の Spark との互換性を改善しました。 #69179 (Wenzheng Liu).enable_analyzerがtrueに設定されている場合、定数式の計算には常に新しいアナライザーを使用します。定数式に対してSELECTクエリを使用しなくても、executableテーブル関数の引数を計算できるようにしました。 #69292 (Dmitry Novik)。- 識別子に特殊文字を使用できないようにする設定項目
enable_secure_identifiersを追加しました。 #69411 (tuanpach). SHOW CREATE TABLEクエリ結果における識別子の引用動作を定義するためにshow_create_query_identifier_quoting_ruleを追加しました。指定可能な値: -user_display: 識別子がキーワードである場合。 -when_necessary: 識別子が{"distinct", "all", "table"}のいずれかであり、かつカラム名やディクショナリの属性名など、あいまいさを引き起こしうる場合。 -always: 常に識別子を引用符で囲みます。 #69448 (tuanpach).- アクセスエンティティの依存関係の復元処理を改善 #69563 (Vitaly Baranov)。
clickhouse-clientやその他の CLI アプリケーションを実行したときに、サーバーの過負荷が原因で起動が遅くなり、その間にSELECTのようなクエリの入力を開始すると、これまでのバージョンではウェルカムメッセージを表示する前に、ターミナルのエコーに残っていた内容が表示されてしまい、ClickHouse local version 24.10.1.1.ではなくSELECTClickHouse local version 24.10.1.1.のように表示されていました。この問題は修正されました。これにより #31696 がクローズされました。#69856 (Alexey Milovidov)。system.replicasテーブルに新しいカラムreadonly_durationを追加しました。アラートで、実際の readonly レプリカと sentinel レプリカを区別できるようにするために必要です。 #69871 (Miсhael Stetsyuk).join_output_by_rowlist_perkey_rows_threshold設定の型を符号なし整数型に変更しました。 #69886 (kevinyhzou)。- OpenTelemetry のスパンログを拡張し、クエリ設定を含めるようにしました。 #70011 (sharathks118).
- 高階配列関数でラムダ式の結果型が期待される型と異なる場合の診断情報を追加しました。 #70093 (ttanay).
- Keeper の改善: クラスター変更時のロックを軽減。 #70275 (Antonio Andelic).
SHOW GRANTSコマンドにWITH IMPLICITとFINALキーワードを追加しました。暗黙的な権限付与に関する軽微なバグを修正しました(#70094)。 #70293 (pufit)。- MergeTree の設定に
compatibilityを反映するようにしました。compatibilityの値はサーバー起動時にdefaultプロファイルから取得され、それに応じてデフォルトの MergeTree 設定が変更されます。その後にcompatibility設定を変更しても、MergeTree の設定には影響しません。 #70322 (Nikolai Kochetov). - サーバー間通信中のエラー発生時に、大きな HTTP レスポンスボディが大量に出力されてログを埋め尽くしてしまわないようにします。 #70487 (Vladimir Cherkasov).
- 一度に移動できるパーツの数の上限を制御する新しい設定
max_parts_to_moveを追加しました。 #70520 (Vladimir Cherkasov). - 特定のログメッセージが出力される頻度を制限しました。 #70601 (Alexey Milovidov).
PART修飾子付きのCHECK TABLEがクライアントで誤った形式で表示されていました。#70660 (Alexey Milovidov).- Parquet ネイティブ writer でカラムインデックスとオフセットインデックスを書き込めるようにしました。 #70669 (LiuNeng).
DateTime64のマイクロ秒およびタイムゾーンを含む値を joda 構文でパースできるようにしました(「joda」は日付と時刻向けの代表的な Java ライブラリであり、「joda 構文」はそのライブラリ固有の書式指定スタイルです)。 #70737 (kevinyhzou).- クラウドストレージがバッチ削除 (batch delete)をサポートしているかどうかを判別するアプローチを変更しました。 #70786 (Vitaly Baranov)。
- ネイティブリーダーでの Parquet page v2 のサポート。#70807 (Arthur Passos)。
- テーブルに
storage_policyとdiskの両方が設定されているかどうかを確認するチェックを追加しました。disk設定を使用している場合に、新しいストレージポリシーが既存のものと互換性があるかどうかを確認するチェックも追加しました。 #70839 (Kirill)。 system.s3_queue_settingsとsystem.azure_queue_settingsを追加。 #70841 (Kseniia Sumarokova).- 関数
base58Encodeとbase58Decodeは、FixedString型の引数を受け取れるようになりました。例:SELECT base58Encode(toFixedString('plaintext', 9));。#70846(Faizan Patel)。 - パートログのすべてのエントリタイプに
partitionカラムを追加しました。以前は一部のエントリに対してのみ設定されていました。これにより #70819 が解決されました。#70848(Alexey Milovidov)。 system.part_logにMergeStartおよびMutateStartイベントを追加し、マージの分析と可視化に役立つようにしました。 #70850 (Alexey Milovidov).- マージ元ソースパーツ数に関するプロファイルイベントを追加しました。これにより、本番環境で MergeTree のファンアウトを監視できます。#70908(Alexey Milovidov)。
- バックグラウンドでのファイルシステムキャッシュへのダウンロードが再度有効になりました。 #70929 (Nikita Taranov).
- プロフェッショナル用途専用として、
Trivialという名前の新しいマージセレクタアルゴリズムを追加しました。これはSimpleマージセレクタよりも性能が劣ります。#70969 (Alexey Milovidov)。 - アトミックな
CREATE OR REPLACE VIEWのサポートを追加。 #70536 (tuanpach) - 集約関数
windowFunnelにstrict_onceモードを追加し、複数の条件に一致する場合に同一イベントが複数回カウントされるのを防ぎました。 #21835 をクローズ。 #69738 (Vladimir Cherkasov).
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
- グローバルコンテキストオブジェクトで設定の更新を適用するようにしました。これにより、#62308 のような問題が修正されます。#62944(Amos Bird)。
ReadSettingsがユーザーが設定した値を使用せず、デフォルト値のみが使用されていた問題を修正しました。 #65625 (Kseniia Sumarokova).- 符号付き引数を使用する際の
sumMapFilteredにおける型不一致の問題を修正。#58408 (Chen768959)。 - オプションのタイムゾーン引数が渡された場合における、toHour 系の変換関数の単調性の問題を修正しました。 #60264 (Amos Bird).
Mergeテーブルに対するsupportsPrewhereチェックを緩和しました。これにより #61064 を修正しました。このチェックは #60082 において過度に厳格化されていました。#61091(Amos Bird)。concurrent_threads_soft_limit_numの制限を正しく適用できるように、use_concurrency_control設定の扱いを修正しました。これにより、以前は正しく機能していなかった同時実行制御がデフォルトで有効になります。#61473 (Sergei Trifonov)。IS NULLチェックが(NOTなどの)他の関数の内部にある場合に誤った結果を招く可能性のある、JOIN ON節の誤った最適化を修正しました。 #67915 をクローズしました。 #68049(Vladimir Cherkasov)。- テーブルの
CREATEクエリを不正なものにしてしまうようなALTERクエリを防止します。 #68574 (János Benjamin Antal)。 - タプルおよび配列に対する
negate(-) およびNOT関数の AST フォーマットの不整合を修正。 #68600 (Vladimir Cherkasov). - デシリアライズ時に不完全な型が
Dynamicに挿入される問題を修正しました。これが原因でParameter out of boundエラーが発生する可能性がありました。 #69291 (Pavel Kruglov). - ゼロコピー レプリケーション(実験的機能であり、本番環境での使用は推奨されません):ゼロコピー対応の ReplicatedMergeTree において、
restore replica実行後に発生する無限ループを修正しました。 #69293 (MikhailBurdukov). - ストレージエンジン
S3Queueにおいて、processing_threads_numのデフォルト値を CPU コア数に戻しました。 #69384 (Kseniia Sumarokova). - ネストされた repeated フィールドを持つ protobuf をネストされたカラムにシリアライズ/デシリアライズする際に、try/catch フローを経由しないようにしました(#41971 を修正)。#69556(Eliot Hautefeuille)。
- PostgreSQL エンジンで FixedString 型カラムへの挿入時に発生していたクラッシュを修正。 #69584 (Pavel Kruglov).
create view t as (with recursive 42 as ttt select ttt);を実行したときに発生していたクラッシュを修正。 #69676 (Han Fei).- 値の型が DateTime64 の場合に
maxMapStateが 'Bad get' をスローしていた不具合を修正。 #69787 (Michael Kolupaev). useDefaultImplementationForLowCardinalityColumnsをオーバーライドしてtrueを返すようにし、LowCardinalityカラムに対するgetSubcolumnを修正しました。 #69831 (Miсhael Stetsyuk).- 分散テーブルの DROP が失敗した場合に発生する、恒久的にブロックされた分散送信の問題を修正しました。 #69843 (Azat Khuzhin).
- WITH FILL と NaN キーを含む、キャンセルできないクエリを修正します。これにより #69261 がクローズされます。#69845(Alexey Milovidov)。
- 旧互換値を使用するアナライザーのデフォルトを修正。 #69895 (Raúl Marín).
- 古いテーブルの DROP 処理中に実行される
CREATE OR REPLACE VIEWにおいて、依存関係をチェックしないようにしました。以前は、再作成されるビューに依存するテーブルが存在する場合、CREATE OR REPLACEクエリが失敗していました。#69907 (Pavel Kruglov)。 - Decimal 関連の修正。#69730 を解決。#69978(Arthur Passos)。
- これで、パラメータ化されたビューでも DEFINER/INVOKER を利用できるようになりました。 #69984 (pufit).
- ビューの DEFINER 句のパースを修正。 #69985 (pufit).
DateまたはDate32引数を持つクエリの結果がタイムゾーン設定によって変化する可能性があった不具合を修正しました。 #70036 (Yarik Briukhovetskyi).- ネストされたビューと
WHERE句を含むクエリで発生するBlock structure mismatchエラーを修正します。#66209 を修正。#70054(Nikolai Kochetov)。 tuple関数を評価する際に、異なる名前付きタプル間で列を再利用しないようにしました。これにより #70022 を修正しました。#70103(Amos Bird)。- 範囲内のリテラルを置換する際に誤った LOGICAL_ERROR が発生していた問題を修正。 #70122 (Pablo Marcos).
- Nullable(Nothing) 型を持つテーブルが作成されないようにするため、ALTER TABLE MODIFY COLUMN/QUERY の実行時に Nullable(Nothing) 型をチェックするようにしました。 #70123 (Pavel Kruglov).
- 不正な
JOIN ... ON *クエリに対して適切なエラーメッセージを出力するようにし、#68650 をクローズ。#70124(Vladimir Cherkasov)。 - スキップインデックス使用時に誤った結果が返る問題を修正。 #70127 (Raúl Marín).
- ColumnObject/ColumnTuple の decompress メソッドにおけるデータレースを修正し、解放後ヒープ使用 (heap use after free) が発生しうる問題を防止しました。 #70137 (Pavel Kruglov).
- Dynamic 型を伴う ALTER COLUMN でハングする可能性のあった問題を修正。 #70144 (Pavel Kruglov).
- これにより、ClickHouse は再試行可能とみなすエラーの種類が増え、そのようなエラーが発生してもデータパーツを破損としてマークしなくなります。 #70145 (alesapin)。
- JSON サブカラム用 Dynamic 型の作成時に正しい
max_typesパラメータを使用するようにしました。 #70147 (Pavel Kruglov). - bcrypt パスワード認証方式を使用するユーザーについて、
system.query_logにパスワードが表示される不具合を修正しました。 #70148 (Nikolay Degterinsky). - ネイティブインターフェイスのイベントカウンター(InterfaceNativeSendBytes)を修正しました。 #70153 (Yakov Olkhovskiy).
- JSON 列に関連して発生する可能性のあるクラッシュを修正しました。 #70172 (Pavel Kruglov).
- arrayMin および arrayMax に関する複数の問題を修正しました。 #70207 (Raúl Marín).
- JSON 型パーサーで設定項目 allow_simdjson が正しく反映されるようにしました。#70218 (Pavel Kruglov)。
INTERSECTを含む 2 つの SELECT 文を使ってマテリアライズドビューを作成する際に発生するヌルポインタデリファレンスの不具合を修正しました。例:CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);。 #70264 (Konstantin Bogdanov).- スタートアップスクリプトでグローバル設定を変更しないでください。以前は、スタートアップスクリプト内で設定を変更すると、その設定がグローバル設定として変更されていました。 #70310 (Antonio Andelic)。
Dynamic型に対するALTER操作で、max_typesパラメータを小さくした際にサーバークラッシュを引き起こす可能性があった問題を修正。 #70328 (Pavel Kruglov).- WITH FILL の誤った使用時に発生するクラッシュを修正。 #70338 (Raúl Marín)。
SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobufにおける use-after-free が発生し得る問題を修正しました。 #70358 (Azat Khuzhin).- GROUP BY で JSON サブオブジェクト内のサブカラムを扱う際に発生していたクラッシュを修正。 #70374 (Pavel Kruglov)。
- パートに行がない場合は、vertical マージのためにそのパートをプリフェッチしないようにしました。 #70452 (Antonio Andelic).
- lambda 関数を使用した WHERE 句で発生していたクラッシュを修正。 #70464 (Raúl Marín).
- セカンダリレプリカ上で、データベース
Replicatedを使用しており、かつテーブル関数のソースが利用できない場合に、CREATE ... AS table_function(...)によるテーブル作成が行えない問題を修正。#70511(Kseniia Sumarokova)。 wait_for_async_insert=1の場合、非同期インサートのすべての出力を無視します。 #62644 をクローズします。 #70530 (Konstantin Bogdanov).- system.remote_data_paths からシャドウディレクトリを走査する際に frozen_metadata.txt を無視するようにしました。 #70590 (Aleksei Filatov).
- アラインされていないメモリ上でステートフルなウィンドウ関数を作成してしまう問題を修正しました。 #70631 (Raúl Marín).
Array型の列を空でないデフォルト式付きで追加した後に発生する、SELECTクエリやマージ処理におけるまれなクラッシュを修正しました。 #70695 (Anton Popov).INSERT INTO TABLE FUNCTION s3がクエリ設定を尊重するようになりました。 #70696 (Vladimir Cherkasov).- サポートされていないフィールドのスキップが有効な場合に、Protobuf スキーマ推論時に発生する無限再帰を修正。#70697 (Raúl Marín).
enable_named_columns_in_function_tupleをデフォルトで無効化しました。 #70833 (Raúl Marín).- S3Queue テーブルエンジンの設定
processing_threads_numが、サーバー上の CPU コア数から算出された場合に有効に機能しない問題を修正しました。 #70837 (Kseniia Sumarokova). - 集約状態での名前付きタプル引数を正規化しました。これにより、#69732 が修正されます。 #70853 (Amos Bird)。
- 2 レベルのハッシュテーブルにおける負のゼロが原因の論理エラーを修正しました。これにより #70973 が解決されます。#70979(Alexey Milovidov)。
- 分散レプリカおよび並列レプリカでの
limit byとlimit with tiesの動作を修正。#70880 (Nikita Taranov).
ClickHouse リリース 24.9, 2024-09-26
後方互換性のない変更
a[b].cのような式が名前付きタプルに対してサポートされるようになり、expr().nameのように、任意の式に対する名前付き添字もサポートされるようになりました。これは JSON の処理に有用です。この変更により #54965 がクローズされました。以前のバージョンでは、expr().name形式の式はtupleElement(expr(), name)としてパースされ、クエリアナライザーは対応するタプル要素ではなく列nameを検索していました。一方、新しいバージョンではこれがtupleElement(expr(), 'name')に変更されました。ほとんどの場合、以前のバージョンでは正しく動作していませんでしたが、この変更が非互換性を引き起こしうる、非常にまれなシナリオを想定することは可能です。例えば、タプル要素名を、タプル要素の名前とは異なる名前を持つ列またはエイリアスに格納していた場合です:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a。そのようなクエリを使用している可能性は非常に低いですが、それでもこの変更は潜在的に後方互換性がないものとしてマークする必要があります。 #68435(Alexey Milovidov)。- 設定
print_pretty_type_namesが有効な場合、SHOW CREATE TABLEステートメント、formatQuery関数、clickhouse-clientおよびclickhouse-localのインタラクティブモードにおいて、Tupleデータ型を見やすい形式で出力するようになりました。以前のバージョンでは、この設定はDESCRIBEクエリとtoTypeNameにのみ適用されていました。この変更により #65753 がクローズされました。 #68492(Alexey Milovidov)。 Replicatedデータベースでテーブルを作成する際に、UUID を明示的に指定することを許可しないようにしました。また、Replicated データベース内の *MergeTree テーブルに対して、Keeper パスおよびレプリカ名を明示的に指定することも許可しないようにしました。これにより、新しい設定database_replicated_allow_explicit_uuidが導入され、database_replicated_allow_replicated_engine_argumentsの型がBoolからUInt64に変更されました。 #66104(Alexander Tokmakov)。
新機能
- ユーザーが一つだけでなく複数の認証方法を持てるようにします。認証方法を、最後に追加された方法にリセットできるようにします。24.8 のインスタンスを動かしつつ、しばらくの間 24.9 のインスタンスも併用したい場合は、その期間中は互換性の問題を避けるために
max_authentication_methods_per_user= 1 に設定しておくことを推奨します。#65277 (Arthur Passos)。 ATTACH PARTITION ALL FROMのサポートを追加。#61987(Kirill Nikiforov)。input_format_json_empty_as_default設定を追加しました。この設定を有効にすると、JSON 入力内の空フィールドをデフォルト値として扱うようになります。#59339 をクローズしました。#66782(Alexis Arnaud)。- 文字列の一部を別の文字列で置き換える関数
overlayおよびoverlayUTF8を追加しました。例:SELECT overlay('Hello New York', 'Jersey', 11)はHello New Jerseyを返します。#66933 (李扬). - パーティションに対する軽量削除のサポートを追加:
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;#67805(sunny)。 Intervalデータ型において、秒や分など異なる単位の値を比較できるようにし、比較前にそれらを最小上位型へ変換するようにしました。#68057 (Yarik Briukhovetskyi)。- CREATE 文において
IF NOT EXISTSの動作をデフォルトにするため、create_if_not_exists設定を追加しました。 #68164 (Peter Nguyen). - Azure およびローカル環境で
Icebergテーブルを読み込みできるようにしました。 #68210 (Daniil Ivanik)。 - クエリキャッシュのエントリをタグ指定で削除できるようになりました。たとえば、
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'によって作成されたクエリキャッシュエントリは、SYSTEM DROP QUERY CACHE TAG 'abc'で削除できます。 #68477 (Michał Tabaszewski)。 - 名前付きコレクションにストレージ暗号化を追加しました。 #68615 (Pablo Marcos)
URLテーブルエンジンに仮想カラム_headersを追加し、#65026 をクローズ。 #68867(flynn)。- 利用可能なプロジェクションを追跡するために
system.projectionsテーブルを追加しました。 #68901 (Jordi Villar). - Spark 互換性のために、新しい関数
arrayZipUnaligned(Spark ではarrays_zipという名前)を追加しました。これは元のarrayZipに基づいており、長さの揃っていない配列も許可します。 #69030 (李扬)。 - ノードをアトミックにコピー/移動するための Keeper クライアント向けコマンドラインアプリケーションに
cp/mvコマンドを追加しました。#69034 (Mikhail Artemenko). - 関数
arrayAUCに引数scale(デフォルト:true)を追加し、正規化処理をスキップできるようにしました(issue #69609)。 #69717(gabrielmcg44)。
実験的機能
- 設定
input_format_try_infer_variantsを追加しました。これにより、テキストフォーマットのスキーマ推論時に、列/配列要素に対して複数の候補となる型が存在する場合にVariant型を推論できるようになります。 #63798 (Shaun Struwig). - JSON 列の型コンテンツをより詳細に調査するために、集約関数
distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypesを追加しました。 #68463 (Kruglov Pavel). - コンシステントハッシュにより並列レプリカ間でマークの分配単位を決定する新しいアルゴリズムを導入しました。さまざまな読み取りパターンに応じて異なる数のマークを選択することで、パフォーマンスを向上させます。 #68424 (Nikita Taranov).
- 以前は、並列レプリカのアナウンス処理におけるパーツ重複排除ロジックの計算量は O(n^2) であり、多数のパーツ(またはパーティション)を持つテーブルでは無視できない時間がかかる可能性がありました。この変更により、計算量は O(n*log(n)) になります。 #69596 (Alexander Gololobov).
- 更新可能なマテリアライズドビューの改善: テーブル全体を上書きするのではなく既存テーブルに行を追加するための append モード(
... REFRESH EVERY 1 MINUTE APPEND ...)、再試行(デフォルトでは無効で、クエリの SETTINGS セクションで設定)、現在実行中のリフレッシュが完了するまで待機するSYSTEM WAIT VIEW <name>クエリ、その他の修正が含まれます。 #58934 (Michael Kolupaev). - 新しい(実験的な)統計タイプとして
min_maxを追加しました。これは、数値列に対する範囲述語(例:x < 100)の選択度推定をサポートします。 #67013 (JackyWoo). - Variant/Dynamic 列に対する castOrDefault を改善し、内部型同士がまったく変換不可能な場合でも動作するようにしました。 #67150 (Kruglov Pavel).
- 一部の列のみのレプリケーションが MaterializedPostgreSQL を通じて利用可能になりました。 #33748 をクローズします。 #69092 (Kruglov Kirill).
パフォーマンスの改善
- Hive パーティション用に必要なファイルのみを読み込むように実装しました。#68963 (Yarik Briukhovetskyi).
- LEFT または INNER ハッシュ JOIN でテーブルキーが密な場合に、右側のテーブルをキーで並べ替えることで JOIN のパフォーマンスを向上しました。#60341 (kevinyhzou).
- 行リストを遅延追加することで、ALL JOIN のパフォーマンスを向上しました。#63677 (kevinyhzou).
- 再起動を高速化するため、ブートプロセス中にファイルシステムキャッシュのメタデータを非同期に読み込むようにしました(設定
load_metadata_asynchronouslyで制御可能)。#65736 (Daniel Pozo Escalona). - 関数
arrayおよびmapを最適化し、いくつかの一般的なケースを大幅に高速に処理できるようにしました。#67707 (李扬). - 特に列に NULL が含まれない場合に、ORC 文字列の読み取りを軽微な最適化によって高速化しました。#67794 (李扬).
- マージ処理ステップのスケジューリングによるオーバーヘッドを削減することで、マージ全体のパフォーマンスを改善しました。#68016 (Anton Popov).
- プロファイルが設定されておらず、クレデンシャルも設定されておらず、かつ IMDS が利用できない場合(例: クラウド外のマシンからパブリックバケットをクエリする場合)に S3 へのリクエストを高速化しました。これにより #52771 をクローズしました。#68082 (Alexey Milovidov).
- 一部のケースでのパフォーマンス向上のために、
RowInputFormatWithNamesAndTypes内のフォーマットリーダーをデバーチャル化しました。#68437 (李扬). - CPU 使用率を最大化するため、
uniq集約関数で group by キーにより集約する際に並列マージを追加しました。#68441 (Jiebin Sun). - ユーザーが
ORC出力フォーマットで文字列列に対して辞書エンコードを有効化できるようにするため、設定output_format_orc_dictionary_key_size_thresholdを追加しました。これにより、出力されるORCファイルサイズが削減され、読み取りパフォーマンスが大幅に向上します。#68591 (李扬). - ノードとその配下のすべてのサブツリーを削除する新しい Keeper リクエスト RemoveRecursive を導入しました。#69332 (Mikhail Artemenko).
- ベクター類似性インデックスを持つテーブルへの挿入パフォーマンスを、ベクターインデックスへのデータ追加を並列化することで高速化しました。#69493 (flynn).
- 適応的な書き込みバッファサイズを使用することで、JSON への挿入時のメモリ使用量を削減しました。ワイドパート内の JSON 列によって作成される多くのファイルは少量のデータしか含まず、それらに 1MB のバッファを割り当てるのは意味がありません。#69272 (Kruglov Pavel).
- クエリが過剰にスレッドを生成することを避けるため、並行ハッシュ JOIN のスレッドプールでスレッドを返却しないようにしました。#69406 (Duc Canh Le).
改善
- CREATE TABLE AS は、PRIMARY KEY や ORDER BY などの句もコピーするようになりました。現在は MergeTree 系のテーブルエンジンのみサポートしています。 #69076 (sakulali).
- 小さなエンティティのパースに関連するコードベースの一部を強化しました。以下の(軽微な)バグを発見して修正しました。-
DeltaLakeテーブルが Bool でパーティション分割されている場合、パーティション値が常に false として解釈される問題。-ExternalDistributedテーブルが、指定されたアドレスのうち単一のシャードしか使用していなかった問題。max_threads設定値などがauto(N)ではなく'auto(N)'として出力されていた問題も修正しました。 #52503 (Alexey Milovidov)。 - CPU 使用量の算出において、システム全体のメトリクスではなく cgroup 固有のメトリクスを使用するよう変更しました。 #62003 (Nikita Taranov).
- リモート S3 ディスク向けの I/O スケジューリングは、
bandwidth_limitによるスロットリングの問題を解消するため、(S3 リクエスト全体ではなく)HTTP ソケットストリーム単位で行われるようになりました。 #65182 (Sergei Trifonov)。 - 関数
upperUTF8とlowerUTF8は以前、キリル文字のみ大文字化/小文字化に対応していました。この制限は解消され、任意の言語の文字に対して大文字化/小文字化を行えるようになりました。例:SELECT upperUTF8('Süden')は現在SÜDENを返します。 #65761 (李扬). - projection を持つテーブルで lightweight delete が実行される場合、これまでは lightweight delete が行われようとしたときに例外を送出する(デフォルト)か、projection を削除するかの 2 つの選択肢しかありませんでしたが、新たに lightweight delete を実行したうえで projection を再構築するという第 3 のオプションが追加されました。 #66169 (jsc0218).
- 2 つのオプション(
dns_allow_resolve_names_to_ipv4とdns_allow_resolve_names_to_ipv6)が追加され、接続を IP ファミリーごとにブロックできるようになりました。 #66895 (MikhailBurdukov) - clickhouse-client で Ctrl-Z を無視するかどうかを設定可能にしました(ignore_shell_suspend)。 #67134 (Azat Khuzhin).
- JSON 出力フォーマットにおける UTF-8 検証を改善しました。結果データ内の特定のバイト列に対しても、有効な JSON が生成されることを保証します。#67938 (mwoenker).
- マージおよびミューテーション用のプロファイルイベントを追加し、より詳細な解析が行えるようにしました。 #68015 (Anton Popov).
- ODBC: サーバー構成から
http_max_triesを取得するようにしました。 #68128 (Rodolphe Dugé de Bernonville). - X.509 の SubjectAltName 拡張内のユーザー識別でワイルドカードをサポートしました。 #68236 (Marco Vilas Boas).
- 日時のスキーマ推論を改善しました。
DateTime64は、日時に小数部がある場合にのみ使用され、それ以外の場合は通常のDateTimeが使用されます。Date/DateTime の推論は、特にdate_time_input_format='best_effort'のときに、文字列から日時を誤って推論してしまうコーナーケースを避けるため、より厳密になりました。#68382(Kruglov Pavel)。 - 辞書から named collections 用の古いコードを削除し、DDL で作成された named collections を辞書で使用できるようにする新しいコードに置き換えました。#60936 をクローズし、#36890 をクローズしました。#68412(Kseniia Sumarokova)。
- 外部 HTTP 認証器には、(デフォルトで設定されている)HTTP/1.0 の代わりに HTTP/1.1 を使用します。#68456 (Aleksei Filatov).
- スレッドプールの内部解析用の新しいメトリクスセットを追加し、スレッドプールのパフォーマンスと動作に関するより深い洞察を得られるようにしました。 #68674 (filimonov).
Valuesフォーマットを使用する非同期挿入でクエリパラメータをサポートするようになりました。 #68741 (Anton Popov).dateTruncとtoStartOfIntervalがDate32をサポートするようになりました。 #68874 (LiuNeng).system.processors_profile_logにplan_step_nameおよびplan_step_description列を追加。 #68954 (Alexander Gololobov)。- 埋め込み辞書にスペイン語対応を追加。 #69035 (Vasily Okunev).
- 短い障害情報メッセージに CPU アーキテクチャ情報を追加。 #69037 (Konstantin Bogdanov).
- リトライ中に新しい Keeper 接続を確立できない場合、クエリはより早く失敗するようになりました。#69148 (Raúl Marín)
- DatabaseFactory を更新し、ユーザー定義データベースエンジンでも、StorageFactory と同様に引数・設定・テーブルのオーバーライドを指定できるようにしました。 #69201 (NikBarykin).
- すべての外部テーブルエンジンおよび関数を
Nullエンジンに置き換える復元モード(restore_replace_external_engines_to_null、restore_replace_external_table_functions_to_null設定)は、テーブルに SETTINGS がある場合に失敗していました。現在は、この場合テーブル定義から SETTINGS を削除するようになり、そのようなテーブルも復元できるようになりました。 #69253 (Ilya Yatsishin)。 - CLICKHOUSE_PASSWORD が ClickHouse イメージのエントリーポイント内で XML 用に正しくエスケープされるよう修正されました。 #69301 (aohoyd).
arrayZip/arrayZipUnalignedで空の引数を受け付けるようにしました。これは https://github.com/ClickHouse/ClickHouse/pull/65887 におけるconcatと同様の対応です。Gluten CH Backend における Spark との互換性のための変更です。#69576(李扬)。- Keeper の内部通信に対して、パスフレーズ付き秘密鍵など、より高度な SSL オプションをサポートしました。 #69582 (Antonio Andelic).
- 多くのパーツやパーティションを持つ大きなテーブルでは、インデックスの解析にかなりの時間がかかることがあります。この変更により、その段階で重いクエリを強制終了できるようになります。 #69606 (Alexander Gololobov).
gcsテーブル関数で機密情報のマスキングに対応しました。 #69611 (Vitaly Baranov).- 行数が減少するマージ時に projection を再構築。 #62364 (cangyin).
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
- 実験的かつサポート対象外の MaterializedPostgreSQL エンジンで、pg のデータベース名に「-」が含まれている場合のテーブルアタッチ時の問題を修正しました。 #62730 (takakawa).
- 実験的かつ完全にサポート対象外の MaterializedPostgreSQL エンジンにおいて、adnum の順序が乱れている場合の生成列に関するエラーを修正しました #63161。実験的かつ完全にサポート対象外の MaterializedPostgreSQL において、テーブルに生成列が存在する場合の、
nextval式をデフォルトとする id 列に関するエラーを修正しました。[a-z1-9-]以外の記号を含む publication を DROP する際のエラーを修正しました。 #67664 (Kruglov Kirill)。 - 左側テーブルの
Nullable列をサポートするよう Storage Join を拡張し、#61247 をクローズ。#66926(vdimir)。 IN演算子にDecimal()への変換が含まれている場合に、parallel replicas 使用時(クエリの分散実行時も同様)に誤ったクエリ結果が返る問題を修正。新しい analyzer によって導入されたバグ。 #67234 (Igor Nikonov).ALTER MODIFY ORDER BYによりメタデータの不整合が発生する問題を修正しました。 #67436 (iceFireser)。- 関数
fromModifiedJulianDayの上限値を修正します。本来は9999-12-31であるべきところを、誤って9999-01-01に設定していました。#67583(PHO)。 - インデックスがタプルの先頭にない場合の
INクエリの不具合を修正。 #67626 (Yarik Briukhovetskyi). RoleCacheの有効期限の扱いを修正。#67748(Vitaly Baranov)。- ビューへのフラッシュの遅さにより window view でブロックが欠落する問題を修正。 #67983 (Raúl Marín)
- 不正な日付フォーマットに起因する MSan の問題を修正。 #68105 (JackyWoo).
- Parquet ファイル内のデータ型が要求された型と大きく異なる場合(例:
... FROM file('a.parquet', Parquet, 'x String')だが、ファイル側ではx Int64)に、Parquet のフィルタリング処理がクラッシュする不具合を修正しました。この修正を適用していない場合は、回避策としてinput_format_parquet_filter_push_down = 0を使用してください。 #68131 (Michael Kolupaev)。 lag/leadで、#67091 によって導入されたクラッシュを修正。#68262(lgbo)。- クエリがキャンセルされた際に Postgres がクラッシュする問題の修正を試みました。#68288 (Kseniia Sumarokova).
- https://github.com/ClickHouse/ClickHouse/pull/61984 以降でも、
schema_inference_make_columns_nullable=0は Parquet/Arrow フォーマットにおいてカラムをNullableにしてしまう場合があります。この変更は後方互換性がないもので、ユーザーは動作の変化に気付きました。この PR により、schema_inference_make_columns_nullable=0は従来どおり(Nullableカラムは推論されない)に動作するようになり、さらにこの設定に新しい値autoを導入します。autoを指定すると、データに null 許容性に関する情報がある場合にのみカラムをNullableにします。 #68298 (Kruglov Pavel). - #50868 を修正。分散クエリ内のネストされたサブクエリから返される小さい DateTime64 の定数値が誤って NULL に変換されており、その結果、エラーや誤ったクエリ結果を引き起こす可能性がありました。#68323(Shankar)。
- クエリ
SYSTEM SYNC REPLICAで欠落していた同期レプリカモードを修正しました。 #68326 (Duc Canh Le). - キー条件の不具合を修正。#68354(Han Fei)。
- LDAP 外部ユーザーディレクトリで使用されているロールを削除または名前を変更するとクラッシュする問題を修正。 #68355 (Andrey Zvonov).
- system.view_refreshes の Progress 列で値が 1 を超えてしまう問題を修正 #68377。#68378(megao)。
- 正規表現のフラグを正しく処理するようにしました。 #68389 (Han Fei).
- PostgreSQL スタイルのキャスト演算子(
::)が、SQL スタイルの 16 進数およびバイナリ文字列リテラル(例:SELECT x'414243'::String)に対しても正しく動作するようになりました。これにより、#68324 が解決されました。#68482(Alexey Milovidov)。 - https://github.com/ClickHouse/ClickHouse/pull/68131 へのマイナーなパッチ。#68494(Chang chen)。
- #68239 整数
nを指定したSAMPLE nの不具合を修正。#68499(Denis Hananein)。 mann-whitney-utestにおいて、2 つの分布のサイズが等しくない場合のバグを修正。 #68556 (Han Fei)。- 予期しない再起動後、破損パーツに覆われているパーツの処理が異常で ReplicatedMergeTree のレプリケーションを開始できない問題を修正。 #68584 (baolin).
- 空の配列またはタプルに関数
sipHash64Keyed、sipHash128Keyed、sipHash128ReferenceKeyedを適用した際に発生していたLOGICAL_ERRORを修正。 #68630 (Robert Schulze)。 - 複数カラムにインデックスを作成した場合、フルテキストインデックスが誤ったカラムをフィルタリングしてしまうことがありました。これは、異なるカラム間で
row_idをリセットしていなかったためです。再現手順は tests/queries/0_stateless/03228_full_text_with_multi_col.sql にあります。この修正がないと問題が発生します。#68644 (siyuan)。 - replica_name 中の無効な文字 '\t' および '\n' を修正し、Replicated テーブル作成時に LogEntry 内の「source replica」が誤ってパースされる問題を解消しました。Issue #68640 で言及。#68645 (Zhigao Hong)。
- 分散テーブルに、バージョン 24.3 までは利用可能だった仮想カラム
_tableと_databaseを再度追加しました。 #68672 (Anton Popov). - Variant 列の permutation 中に発生する可能性のあるエラー
Size of permutation (0) is less than required (...)を修正。 #68681 (Kruglov Pavel). - 新しい JSON 列に関連して発生する可能性のある
DB::Exception: Block structure mismatch in joined block stream: different columns:エラーを修正します。 #68686 (Kruglov Pavel). - 関数
sipHash(64/128)Keyedにおいて、キーとして配列を持つ Map をハッシュ化する際の、マテリアライズされた定数キーの扱いに関する不具合を修正。#68731(Salvatore Mesoraca による変更)。 ColumnsDescription::toStringが各カラムを同一のIAST::FormatStateオブジェクトを使用してフォーマットするようにします。これにより、ディスクおよび ZooKeeper に書き込まれるカラムメタデータの形式が統一されます。 #68733 (Miсhael Stetsyuk).- GROUPING SETS における集約データのマージ処理を修正。#68744 (Nikolai Kochetov).
- レプリケーテッド MergeTree を作成し、カラムを
ALTERしてからMODIFY STATISTICSを実行した際に発生していた論理エラーを修正。 #68820 (Han Fei). - アナライザにおけるサブクエリからの動的サブカラム解決処理を修正。 #68824 (Kruglov Pavel).
- DeltaLake における複合型メタデータの解析を修正。#68739 をクローズ。#68836(Kseniia Sumarokova)。
- 非同期挿入において、テーブルのメタデータが(
ALTER ADD/MODIFY COLUMNクエリによって)挿入後からテーブルへのフラッシュ前の間に変更された場合でも正しく動作するように修正しました。 #68837 (Anton Popov)。 arrayに空のタプルを渡したときに発生していた予期しない例外を修正。これにより #68618 が修正されました。 #68848(Amos Bird)。- 純粋なメタデータのみの mutation コマンドの解析を修正。 #68935 (János Benjamin Antal).
- anyHeavy の状態をマージする際に誤った結果が生じる可能性があった問題を修正。 #68950 (Raúl Marín).
- 設定
optimize_functions_to_subcolumnsが有効な場合のマテリアライズドビューへの書き込みを修正しました。 #68951 (Anton Popov). - const Dynamic 列メソッドでは serializations キャッシュを使用しないでください。集計中に未初期化の値の使用や、さらにはレースコンディションを引き起こす可能性があります。 #68953 (Kruglov Pavel).
- JSON 型のパース時に、一部のケースでデフォルトとして
nullを挿入すべきところでパースエラーが発生していた問題を修正。 #68955 (Kruglov Pavel). - 一部の圧縮レスポンスで
Content-Encodingヘッダーが送信されない問題を修正。 #64802。 #68975 (Konstantin Bogdanov)。 - パスが誤って連結されて
//が含まれてしまうケースがあったため、パスの正規化によってこの問題を解決しました。 #69066 (Yarik Briukhovetskyi)。 - 空の async insert が発生した場合に論理エラーが起きる問題を修正しました。 #69080 (Han Fei).
- クエリキャンセル時に clickhouse-client の進行状況表示で発生していたデータレースを修正しました。 #69081 (Sergei Trifonov).
- コサイン距離を距離関数として使用した場合に、実験的なベクトル類似度インデックスが利用されない不具合を修正。 #69090 (flynn)。
- この変更では、初回の作成処理中にサーバー障害が発生した後に Replicated データベースを再作成しようとするとエラーが発生する可能性があった問題に対処します。 #69102 (Miсhael Stetsyuk)。
input_format_csv_try_infer_numbers_from_strings = 1のときに、文字列から Bool 型を推論しません。文字列から bool 値を読み取ることは許可されていないためです。 #69109 (Kruglov Pavel).--multiqueryが有効な場合、クライアント側で発生していたEXPLAIN AST INSERTクエリのパースエラーを修正。 #69123 (wxybear)。- サブクエリ内の
UNION句が、並列レプリカを使用するクエリで正しく処理されず、LOGICAL_ERRORDuplicate announcement received for replicaを引き起こしていました。 #69146 (Igor Nikonov). - s3Cluster における structure 引数の伝播処理を修正しました。以前は、s3Cluster 内のレプリカにクエリを送信する際に、カラムの
DEFAULT式が失われてしまう可能性がありました。#69147(Kruglov Pavel)。 - 式から宛先型への変換時に、Values フォーマットの設定が反映されるようにしました。 #69149 (Kruglov Pavel).
- 読み取り専用ユーザーで
clickhouse-client --queries-fileが動作するよう修正しました(以前は readonly モードでCannot modify 'log_comment' setting in readonly modeにより失敗していました)。 #69175 (Azat Khuzhin). - 早期に終了したプロセスにパイプされた場合の clickhouse-client におけるデータ競合を修正しました。 #69186 (vdimir).
- JSON/Dynamic 型に対する
uniq関数およびGROUP BYの誤った結果を修正。 #69203 (Kruglov Pavel). - 非同期挿入時の INFILE フォーマット検出を修正しました。FORMAT 句でフォーマットが明示的に指定されていない場合、INFILE のファイル拡張子からフォーマットを検出できるようになりました。 #69237 (Julia Kartseva).
- この issue 以降、本番環境では相当数のテーブルレプリカにおいて、
metadata_versionノードの値が0であり、かつ対応するテーブルのmetadataノードのバージョンとは異なる、という状態になっており、これによりそのようなレプリカ上ではalterクエリが失敗します。 #69274 (Miсhael Stetsyuk)。 - Fields での問題を回避するため、Dynamic 型を primary key として安全でない型としてマークしました。 #69311 (Kruglov Pavel).
- アクセスエンティティの依存関係の復元処理を改善。 #69346 (Vitaly Baranov).
- 挿入用の接続を取得する際に、すべての接続試行が失敗した場合に発生していた未定義動作を修正。 #69390 (Pablo Marcos)。
- #69135 をクローズ。
crossjoin で結合済みデータを再利用しようとしているが、これは現時点の ClickHouse では起こり得ない。そのため、have_compressedはreuseJoinedDataに残しておく方が良い。#69404(lgbo)。 - パラメータとしてスパースカラムが渡された場合に、
materialize()関数がカラム全体を返すようにしました。 #69429 (Alexander Gololobov). - 関数
sqidDecodeで発生していたLOGICAL_ERRORを修正しました(#69450)。#69451(Robert Schulze)。 - バージョン 24.6 における s3queue の問題に対する簡易的な修正、または Replicated データベースを使ったクエリの作成。 #69454 (Kseniia Sumarokova).
INSERT INTO ... SELECTやCREATE TABLE AS SELECTクエリでのスカッシュ処理によりメモリ消費量が過大になっていた問題を修正しました。 #69469 (Yarik Briukhovetskyi).- テーブル名にドットが含まれている場合でも、
SHOW COLUMNSとSHOW INDEXステートメントが正しく動作するようになりました。#69514 (Salvatore Mesoraca)。 overflowモードがthrow以外に設定されたクエリに対するクエリキャッシュの使用はできなくなりました。これにより、途中で打ち切られた不正確なクエリ結果がクエリキャッシュに保存されてしまう可能性のある状況を防ぎます。(issue #67476)。#69549(Robert Schulze)。prewhereへの移動時に条件の元の順序を維持するようになりました。以前は順序が変わることがあり、順序が重要な場合にクエリが失敗する可能性がありました。 #69560 (Kruglov Pavel)。- ZNOAUTH エラー発生後に Keeper の複数リクエストの前処理を修正。 #69627 (Antonio Andelic).
- 新しいレプリカを作成する際、DatabaseReplicated で TTL に WHERE 句を指定した場合に発生していた可能性のある METADATA_MISMATCH を修正しました。 #69736 (Nikolay Degterinsky).
StorageS3(Azure)Queueの設定項目tracked_file_ttl_secを修正しました。tracked_file_ttl_secというキーで Keeper に書き込んでいましたが、読み込み時には誤ってtracked_files_ttl_secとして読んでおり、これはタイポによる不具合でした。 #69742 (Kseniia Sumarokova).- gethyperrectangleforrowgroup において tryconvertfieldtotype を使用するようにしました。 #69745 (Miсhael Stetsyuk).
- 「Fix prewhere without columns and without adaptive index granularity (almost w/o anything)」をリバートしました。リバートした変更により、古い ClickHouse リリース(おそらく 2021 年以前)で生成されたデータパーツを読み取る際に、いくつかのエラーが発生する可能性があります。#68897 (Alexander Gololobov).
ClickHouse リリース 24.8 LTS, 2024-08-20
後方互換性のない変更
clickhouse-clientとclickhouse-localは、従来の単一クエリモードではなく、デフォルトでマルチクエリモードになりました。例えば、これまではclickhouse-client -q "SELECT 1; SELECT 2"を実行するには--multiquery(または-n)を付与する必要がありましたが、現在はそのまま動作します。これにより--multiquery/-nスイッチは不要になりました。マルチクエリ文内の INSERT クエリは、その FORMAT 句に基づいて特別に扱われます。FORMAT がVALUES(もっとも一般的なケース)の場合、INSERT 文の終端はクエリ末尾のセミコロン;で表されます。その他すべての FORMAT(例:CSVやJSONEachRow)では、INSERT 文の終端はクエリ末尾の 2 つの改行\n\nで表されます。 #63898 (FFish).- 以前のバージョンでは、
LowCardinalityデータ型に対して、そのデータ型名にWithDictionaryを付ける代替構文を使用することができました。これは初期のワーキング実装であり、ドキュメント化も公開もされていませんでした。現在、この構文は非推奨となりました。この構文を使用している場合は、テーブルに対して ALTER を実行し、データ型名をLowCardinalityに変更する必要があります。 #66842 (Alexey Milovidov). - 分散先テーブルと組み合わせて使用されるストレージ
Bufferにおける論理エラーを修正しました。これは後方互換性のない変更です。分散先テーブルとBufferを使用しているクエリで、対象テーブルがクエリ内に複数回(例: セルフジョイン)登場する場合、それらのクエリは動作しなくなる可能性があります。 #67015 (vdimir). - 以前のバージョンでは、Gamma 関数に基づく乱数分布関数(Chi-Squared、Student、Fisher など)を、ゼロに近い負の引数で呼び出すと、計算が非常に長引くか無限ループに陥る可能性がありました。新しいバージョンでは、これらの関数をゼロまたは負の引数で呼び出すと、例外がスローされます。これにより #67297 が解決されました。 #67326 (Alexey Milovidov).
- システムテーブル
text_logがデフォルトで有効になりました。これは以前のバージョンとの完全な互換性を保っていますが、ローカルディスクのディスク使用量がわずかに増加することに気付くかもしれません(このシステムテーブルが占有するディスク容量はごくわずかです)。 #67428 (Alexey Milovidov). - 以前のバージョンでは、
arrayWithConstantは非常に大きな配列を生成するよう要求された場合に遅くなる可能性がありました。新しいバージョンでは、配列あたり 1 GB に制限されました。これにより #32754 が解決されました。 #67741 (Alexey Milovidov). - REPLACE 修飾子のフォーマットを修正しました(括弧の省略を禁止)。 #67774 (Azat Khuzhin).
- #68349 でバックポート済み:
Dynamic型を再実装しました。動的データ型の上限に達した場合でも、新しい型は String にキャストされるのではなく、バイナリエンコードされたデータ型情報を持つ特別なデータ構造にバイナリ形式で保存されます。これにより、Dynamicカラムに一度でも挿入された任意の型を、サブカラムとして読み出すことができるようになりました。 #68132 (Kruglov Pavel).
新機能
- 特定のエンジンにおけるマージ処理時のプロジェクションおよび
OPTIMIZE DEDUPLICATEクエリの挙動を制御するために、新たなMergeTree設定deduplicate_merge_projection_modeを追加しました。サポートされるオプションは、throw(*MergeTree エンジンでプロジェクションが完全にはサポートされていない場合に例外をスローする)、drop(一貫した形でマージできない場合にマージ中のプロジェクションを削除する)、rebuild(プロジェクションを最初から再構築する。これは高コストな処理です)です。#66672(jsc0218)。 - S3 テーブルエンジンに
_etag仮想カラムを追加。 #65312 を修正。 #65386(skyoct)。 - クエリキャッシュにタグ(ネームスペース)機構を追加しました。タグの異なる同一クエリは、クエリキャッシュ上では別物として扱われます。例:
SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'とSELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def'は、別々のクエリキャッシュエントリを作成するようになりました。 #68235 (sakulali)。 - 左テーブルと右テーブルの両方のカラムを含む不等号条件(例:
t1.y < t2.y)で使用できる JOIN strictness のバリアントをさらにサポートしました(LEFT/RIGHT SEMI/ANTI/ANY JOINなど。設定allow_experimental_join_conditionを参照)。#64281(lgbo)。 - さまざまなエンジン(
File、URL、S3、AzureBlobStorage、HDFS)に対して Hive 形式のパーティショニングを解釈します。Hive 形式のパーティショニングでは、データをパーティション化されたサブディレクトリに整理することで、大規模なデータセットのクエリおよび管理を効率化します。現在は、適切な名前とデータを持つ仮想カラムを作成するのみを行います。後続の PR にて、適切なデータフィルタリング(パフォーマンス向上)が導入される予定です。#65997(Yarik Briukhovetskyi)。 - Spark との互換性のために関数
printfを追加しました(既存のformat関数も使用できます)。#66257(李扬)。 - テストに役立つよう、外部エンジンおよびテーブル関数を
Nullエンジンに置き換えるためのオプションrestore_replace_external_engines_to_nullとrestore_replace_external_table_functions_to_nullを追加しました。これは RESTORE と明示的なテーブル作成の両方で動作します。 #66536 (Ilya Yatsishin). - 関数
readWKTLineStringを使用して、WKT形式のMULTILINESTRINGジオメトリの読み取りをサポートしました。 #67647 (Jacob Reckhard). - 新しいテーブル関数
fuzzQueryを追加しました。この関数は、指定したクエリ文字列をランダムに変形したものを生成できます。例:SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;。 #67655 (pufit)。 - 切り離されたすべてのパーティションを削除するための
ALTER TABLE ... DROP DETACHED PARTITION ALLクエリを追加しました。 #67885 (Duc Canh Le). - 新しい設定
rows_before_aggregationが有効になっている場合、クエリのレスポンスにrows_before_aggregation_at_least統計情報を追加しました。この統計情報は、集約前に読み取られた行数を表します。分散クエリのコンテキストでは、limitなしでgroup byやmax集約関数を使用する場合、rows_before_aggregation_at_leastはクエリによってヒットした行数を反映します。 #66084 (morning-color). JoinテーブルでOPTIMIZEクエリをサポートし、メモリ使用量を削減できるようにしました。 #67883 (Duc Canh Le).- URL に
&run=1を追加すると、Play でクエリを即時に実行できるようになりました #66457 (Aleksandr Musorin)。
実験的機能
- 新しい
JSONデータ型を実装しました。#66444 (Kruglov Pavel). - 新しい
TimeSeriesテーブルエンジンを追加しました。#64183 (Vitaly Baranov). - 新しい実験的な
Kafkaストレージエンジンを追加し、オフセットを Kafka にコミットする代わりに Keeper に保存できるようにしました。これにより、キューからの消費に対して、ClickHouse テーブルへのコミットがアトミックになります。#57625 (János Benjamin Antal). - 並列レプリカに対して、適応的(読み取るカラムサイズに依存することを意味する)な読み取りタスクサイズの計算方法を使用します。#60377 (Nikita Taranov).
- 統計タイプ
count_min(count-min sketch)を追加しました。col = 'val'のような等価述語に対する選択度推定を提供します。サポートされるデータ型は string、date、datetime、および数値型です。#65521 (JackyWoo).
パフォーマンスの改善
optimize_functions_to_subcolumns設定をデフォルトで有効化しました。#68053 (Anton Popov).plain_rewritableディスクディレクトリのメタデータを、オブジェクトストレージ内の MergeTree データとは分離して__metaレイアウトに保存するようにしました。plain_rewritableディスクをフラットなディレクトリ構造に移行しました。#65751 (Julia Kartseva).String/Array/Map/Variant/Dynamic型に対して、すべてのサブカラム用に必要なメモリを事前に確保することで、INSERTクエリで発生するカラムの squashing(結合)処理を改善しました。#67043 (Kruglov Pavel).SYSTEM FLUSH LOGSを高速化し、シャットダウン時にログをフラッシュするようにしました。#67472 (Sema Checherinda).- マージ処理のスケジューリング段階のオーバーヘッドを削減することで、マージ全体のパフォーマンスを改善しました。#68016 (Anton Popov).
DROP DATABASEクエリにおけるテーブル削除を高速化するため、database_catalog_drop_table_concurrencyのデフォルト値を 16 に引き上げました。#67228 (Nikita Mikhaylov).- ORC 書き込み時に、配列カラムに対して過剰な容量を割り当てないように変更しました。Array カラムでのパフォーマンスが 15% 向上しました。#67879 (李扬).
- 非レプリケート MergeTree テーブルに対するミューテーションを大幅に高速化しました。#66911 #66909 (Alexey Milovidov).
改善
allow_experimental_analyzerの設定はenable_analyzerに名称変更されました。古い名前はエイリアスとして残されています。これは、Analyzer がもはやベータ版ではなく、本番利用が正式にサポートされるようになったことを意味します。 #66438 (Nikita Mikhaylov).- 日時のスキーマ推論を改善しました。現在は、日時に小数部がある場合にのみ DateTime64 が使用され、それ以外の場合は通常の DateTime が使用されます。Date/DateTime の推論は、特に
date_time_input_format='best_effort'の場合に、コーナーケースで文字列から日時を誤って推論してしまうことを避けるため、より厳密になりました。#68382(Kruglov Pavel)。 - ClickHouse サーバーは新しい設定項目
max_keep_alive_requestsをサポートするようになりました。サーバーへの keep-alive HTTP 接続に対してはkeep_alive_timeoutと連動して動作します。アイドルタイムアウトがまだ発生していない場合でも、その接続を通じて処理されたリクエスト数がmax_keep_alive_requestsを超えると、その接続はサーバーによってクローズされます。 #61793 (Nikita Taranov)。 - 高度なダッシュボードにおける各種改善。これにより #67697 がクローズされました。これにより #63407 がクローズされました。これにより #51129 がクローズされました。これにより #61204 がクローズされました。#67701(Alexey Milovidov)。
- Distributed テーブルを作成する際に REMOTE への GRANT は不要で、Distributed エンジンへの GRANT だけで十分です。 #65419 (jsc0218).
- keeper 用のログを上書きできるよう、Docker イメージで明示的に指定しないようにしました。 #65564 (Azat Khuzhin).
BACKUPクエリおよびRESTOREクエリ向けにuse_same_password_for_base_backup設定を導入し、パスワードで保護されたアーカイブに対してインクリメンタル バックアップを作成および復元できるようにしました。 #66214 (Samuele).ATTACHクエリに対してはasync_load_databasesを無視するようにしました(以前は、テーブルがアタッチされる前にATTACHが返る可能性がありました)。 #66240 (Azat Khuzhin).- リソース不足により接続が拒否された場合のログおよびメトリクスを追加しました。 #66410 (Alexander Tokmakov)。
- MongoDB エンジンで正しい
UUID型をサポートしました。 #66671 (Azat Khuzhin). - レプリケーション遅延および復旧時間のメトリクスを追加。 #66703 (Miсhael Stetsyuk).
DiskS3NoSuchKeyErrorsメトリクスを追加しました。 #66704 (Miсhael Stetsyuk).- すべてのテーブルエンジンで
COMMENT句が動作するようにしました。 #66832 (Joe Lynch). - 関数
mapFromArraysは、最初の引数としてMap(K, V)を受け取れるようになりました。例えば、SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb'])は、{('a',4):'aa',('b',4):'bb'}を返すようになりました。また、第 1 引数が Array の場合、実際の配列の要素値がNULLでない限り、型としてArray(Nullable(T))やArray(LowCardinality(Nullable(T)))も使用できるようになりました。 #67103 (李扬). clickhouse-localが~/.clickhouse-localから設定を読み込むようにしました。 #67135 (Azat Khuzhin)。- 設定
input_format_orc_read_use_writer_time_zoneの名称をinput_format_orc_reader_timezoneに変更し、ユーザーがリーダー側のタイムゾーンを設定できるようにしました。 #67175 (kevinyhzou). - HTTP 接続確立直後にピア側によって接続がリセットされた場合の
Socket is not connectedエラーのレベルを下げました。#34218。#67177(vdimir)。 - 設定ファイルから
system.dashboards用のダッシュボードを読み込めるようにしました(いったん設定すると、デフォルトのダッシュボード プリセットを上書きします)。 #67232 (Azat Khuzhin). - SQL のウィンドウ関数は一般的にスネークケースで記述されます。ClickHouse は
camelCaseを使用するため、新しいエイリアスdenseRank()とpercentRank()が作成されました。これらの新しい関数は、元のdense_rank()およびpercent_rank()関数とまったく同じように呼び出すことができます。スネークケースと camelCase の両方の構文が引き続き使用可能です。各関数に対する新しいテストも追加されました。これにより #67042 がクローズされます。 #67334 (Peter Nguyen)。 - 設定ファイルの形式が
.xml、.yml、.yamlでない場合、自動検出します。ファイルが < で始まる場合は XML の可能性があり、そうでない場合は YAML の可能性があります。これはパイプから設定ファイルを渡すときに便利です:clickhouse-server --config-file <(echo "hello: world")。#67391(sakulali)。 - Functions
formatDateTimeとformatDateTimeInJodaSyntaxは、format パラメータを省略可能なものとして扱うようになりました。指定されていない場合、フォーマット文字列%Y-%m-%d %H:%i:%sおよびyyyy-MM-dd HH:mm:ssが使用されます。例:SELECT parseDateTime('2021-01-04 23:12:34')は、現在 DateTime 値2021-01-04 23:12:34を返します(以前は例外をスローしていました)。 #67399 (Robert Schulze). - KeeperMap で、タイムアウトまたは接続断により失敗した Keeper へのリクエストを自動的に再試行するようにしました。 #67448 (Antonio Andelic).
- ClickHouse の再起動後でもスタックトレースを適切に解析およびシンボル解決できるよう、Aarch64 Linux ビルドに
-no-pieオプションを追加しました。 #67916 (filimonov). - マージおよびミューテーション向けのプロファイルイベントを追加し、内部状態の把握を容易にしました。 #68015 (Anton Popov).
- レプリケートされていない
MergeTree用の不要なログを削除しました。 #68238 (Daniil Ivanik).
ビルド/テスト/パッケージングの改善
- 統合テストのフレークチェックで、テスト内の問題をより多く発見しテストの信頼性を高めるため、各テストケースを複数回実行するようになりました。同一の環境でテストケースを複数回実行するために
pytest-repeatライブラリを使用しています。テストに合格させるには、テストケースの最後にテーブルやそのほかのエンティティをクリーンアップすることが重要です。必要なコンテナを一度だけ起動すればよいため、この繰り返し実行のほうが pytest を複数回実行するよりもはるかに高速です。#66986(Ilya Yatsishin)。 - ClickHouse の開発で CLion を利用できるようにしました。以前のバージョンでは、CLion はキー入力のたびに 1 分ほどフリーズしていました。これにより #66994 がクローズされます。#66995(Alexey Milovidov)。
- getauxval: 新しい Linux カーネルで ASLR のエントロピーが高いことにより、sanitizer の再実行時にクラッシュする問題を回避しました。#67081(Raúl Marín)。
- クライアントコードの一部を単一のファイルに切り出し、デバッグビルドであっても可能な限り高い最適化レベルを適用しました。これにより #65745 がクローズされます。#67215(Nikita Mikhaylov)。
バグ修正
- 実験的な Variant データ型にのみ該当します。Variant と AggregateFunction 型の組み合わせで発生していたクラッシュを修正しました。#67122 (Kruglov Pavel)。
- 接続が空の場合の DistributedAsyncInsert のクラッシュを修正。 #67219 (Pablo Marcos)。
tuple()引数を指定した場合にuniqおよびuniqThetaがクラッシュする問題を修正しました。 #67303 をクローズしました。 #67306(flynn)。- #66026 を修正しました。
ReplaceTableNodeToDummyVisitorにおいて、未解決のテーブル関数の引数を走査しないようにしました。#67522(Dmitry Novik)。 JSONMergePatch関数で発生しうるスタックオーバーフローを修正しました。以前の名前が不適切だったため、この関数名をjsonMergePatchからJSONMergePatchに変更しました。以前の名前も互換性維持のために残されています。関数内のエラー診断を改善しました。これにより #67304 が解決されます。#67756(Alexey Milovidov)。- 細工されたクエリにより
hopEnd、hopStart、tumbleEnd、tumbleStartを通じてサーバーがクラッシュしていた NULL ポインタ参照の問題を修正しました。 #68098 (Salvatore Mesoraca)。 - サブクエリを使用したフィルタリング時に一部の system テーブルで発生していた
Not-ready Setの問題を修正しました。 #66018 (Michael Kolupaev). ALTER ADD COLUMNクエリ実行後にサブカラムを読み取る際の不具合を修正しました。 #66243 (Anton Popov).PostgreSQLなどのエンジンを使用する外部データベースに送信されるクエリ内のブール値リテラルを修正しました。 #66282 (vdimir).- JOIN ON 句内の別名付き式を含むクエリのフォーマットを修正しました。例:
... JOIN t2 ON (x = y) AS e ORDER BY xは... JOIN t2 ON ((x = y) AS e) ORDER BY xとフォーマットされるべきです。 #66312 (vdimir)。 - inter-server secret 用の
cluster()を修正し、以前と同様にinitial userを保持するようにしました。 #66364 (Azat Khuzhin)。 - null を含む Array フィールドを Array(Variant) に変換する際に発生する可能性のある実行時エラーを修正。 #66727 (Kruglov Pavel).
- Context::getDDLWorker においてまれに発生するデッドロックの修正。 #66843 (Alexander Gololobov).
- 不完全な DROP 操作の後に KeeperMap テーブルを作成する処理を修正しました。 #66865 (Antonio Andelic).
s3_plain_rewritableディスクへのリストア中に発生する破損したパーツに関するエラーを修正。 #66881 (Vitaly Baranov).- まれなケースで、ディスク上の予期しない projection により、ClickHouse が一部のパーツを壊れていると誤判定してしまうことがありました。現在は修正されています。 #66898 (alesapin).
- スキーマ推論における無効なフォーマット検出を修正し、論理エラー「Format doesn't support schema inference」の発生を防止しました。#66899 (Kruglov Pavel)。
- 並列レプリカ使用時のクエリキャンセル時に発生する可能性のあるデッドロックを修正しました。 #66905 (Nikita Taranov).
database_replicated_allow_heavy_createが設定されている場合でも、CREATE AS SELECTを禁止するようにしました。23.12 では無条件に禁止されており、未リリースの 24.7 ではこの設定が有効な場合に誤って許可されていました。 #66980 (vdimir)。numbersから読み取る際、max_rows_to_readの上限が設定されていると、誤って例外がスローされる可能性がありました。これにより #66992 がクローズされました。 #66996(Alexey Milovidov)。- lagInFrame および leadInFrame のウィンドウ関数に対して適切な型変換を追加し、msan テストを修正。 #67091 (Yakov Olkhovskiy).
- TRUNCATE DATABASE が DROP DATABASE クエリと同様にレプリケーションを停止してしまっていた問題を修正しました。 #67129 (Alexander Tokmakov).
clickhouse-localでクライアントコンテキストを分離して使用するようにしました。 #67133 (Vitaly Baranov)。- 1 シャードのみの構成で
Distributedテーブル経由でMergeテーブルを読み出すクエリにおいて、エラーCannot convert column because it is non constant in source stream but must be constant in result.が発生する問題を修正しました。 #67146 (Nikolai Kochetov)。 enable_order_by_all無効時および並列レプリカ(分散クエリを含む)におけるORDER BY allの動作を正しくしました。 #67153 (Igor Nikonov).- スキーマキャッシュにおけるスキーマ推論用の
input_format_max_bytes_to_read_for_schema_inferenceの誤った使用方法を修正しました。 #67157 (Kruglov Pavel). - GROUP BY で単一の Nullable キーを使用している際に例外が発生した場合に、
count distinctで発生していたメモリリークを修正しました。 #67171 (Jet He). - OUTER JOIN を INNER JOIN に変換してしまっていた最適化のエラーを修正しました。これにより #67156 および #66447 がクローズされます。このバグは https://github.com/ClickHouse/ClickHouse/pull/62907 で導入されました。#67178(Maksim Kita)。
- エラー
Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supportedを修正。バグの原因はoptimize_rewrite_aggregate_function_with_if最適化でした。#67112 を修正。#67229(Nikolai Kochetov)。 IN関数の左辺に空のタプルを使用した場合にクエリがハングしてしまう問題を修正。 #67295 (Duc Canh Le).- 未知のフィールドをスキップする際にスタックオーバーフローを引き起こす、非常に深くネストした JSON データを作成できていました。これにより #67292 が解決されました。#67324(Alexey Milovidov)。
- 起動時に発生した例外の後に ReplicatedMergeTree テーブルをアタッチする処理を修正。 #67360 (Antonio Andelic).
Aggregatorでスレッドグループからのデタッチ処理を誤っていたために発生していたセグメンテーションフォルトを修正。 #67385 (Antonio Andelic).- PK に非決定的関数が指定されているもう一つのケースを修正しました。 #67395 (Nikolai Kochetov).
(k=2)=(k=2)やhas([1,2,3], k)のようなやや特殊な条件でクエリが誤動作してしまうbloom_filterインデックスの問題を修正しました。 #67423 (Michael Kolupaev)。- アーカイブでない場合は、
::を含むファイル名や URI を正しくパースするようにしました。 #67433 (Antonio Andelic). - WriteBuffer がキャンセルされた場合に ~WriteBufferFromS3 内でタスクを待機する処理を修正。 #67459 (Kseniia Sumarokova).
- RESTORE の実行中に一時パーツディレクトリが削除されないよう保護しました。 #67491 (Vitaly Baranov).
- ネストされた短絡評価関数の実行を修正。 #67520 (Kruglov Pavel).
Logical error: Expected the argument №N of type T to have X rows, but it has 0を修正しました。新しいアナライザーの使用時に、GROUP BY句内の定数式を含むリモートクエリでこのエラーが発生する可能性がありました。 #67536 (Nikolai Kochetov).NULLを含むタプルでの結合の修正: 新しいアナライザーを使用した場合に、JOIN ON句内でNULLを含むタプルを使う一部のクエリが誤った結果を返す問題を修正しました。 #67538 (vdimir).- 削除不可のキャッシュが満杯の場合における FileCache::freeSpaceRatioKeepingThreadFunc() の冗長な再スケジュールを修正。 #67540 (Kseniia Sumarokova).
- HTTP インターフェイス経由でのストリーム系エンジン(Kafka、RabbitMQ、NATS)への挿入処理を修正。 #67554 (János Benjamin Antal).
- 小さい
DateTime64値に対して誤った結果を返していた関数toStartOfWeekの不具合を修正しました。 #67558 (Yarik Briukhovetskyi). - 再帰CTEを使用するビュー作成の不具合を修正。 #67587 (Yakov Olkhovskiy).
- ファイルシステムキャッシュで発生する
Logical error: 'file_offset_of_buffer_end <= read_until_position'を修正しました。#57508 をクローズします。#67623(Kseniia Sumarokova)。 - #62282 を修正しました。
convertFieldToString()の呼び出しを削除し、データ型ごとのシリアライズ用コードを追加しました。パラメータ化ビューの置換機能は、パラメータ値がデータ型インスタンスを返す関数または式である場合、複数のデータ型に対して正しく動作していませんでした。#67654(Shankar)。 percent_rankがクラッシュする問題を修正。percent_rankのデフォルトのフレーム種別をrange unbounded preceding and unbounded followingに変更。IWindowFunctionのデフォルトのウィンドウフレームが考慮されるようになり、これにより SQL でウィンドウフレーム定義のないウィンドウ関数も、それぞれ適切なWindowTransfomerに配置できるようになった。#67661 (lgbo).- UNION を使用する SQL UDF のリロード処理を修正しました。以前は、サーバーを再起動すると UDF が無効になってしまうことがありました。 #67665 (Antonio Andelic)。
- Tuples および Maps を引数に取る
if関数で、実験的な Variant 型と設定use_variant_as_common_typeを有効にした際に発生しうる論理エラー「Unexpected return type from if」を修正しました。 #67687 (Kruglov Pavel). - Linux カーネルのバグにより、クエリが
TimerDescriptor::drain内でハングする場合があります。この問題の修正により #37686 がクローズされました。 #67702(Alexey Milovidov)。 RESTORE ON CLUSTERコマンドの完了時の挙動を修正しました。 #67720 (Vitaly Baranov).- ロード中に CANNOT_SCHEDULE_TASK が発生した場合に辞書がハングする問題を修正。 #67751 (Azat Khuzhin).
cに対して Bloom filter インデックスがある場合のSELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1のようなクエリが、正しく動作するようになりました。 #67781 (jsc0218).- 一部のクエリで、キーおよびフィルタなしの集約に対して誤った集約結果が返される問題を修正しました。 #67419。 #67804(vdimir)。
- ALTER 文の ADD/MODIFY COLUMN で、実験的または疑わしいデータ型を検証するようにしました。 #67911 (Kruglov Pavel).
- 分散クエリでの定数畳み込み後の DateTime64 のパースを修正し、#66773 をクローズしました。#67920(vdimir)。
- 述語内に非決定的関数が含まれている場合に
count()が不正な結果を返す問題を修正。 #67922 (János Benjamin Antal). - 使用可能な CPU 数が制限されているコンテナ化環境において、最大スレッド数のソフトリミットの計算を修正しました。 #67963 (Robert Schulze).
- ClickHouse は、
checksums.txtには存在するがディスク上には存在しない projection があっても、そのパーツを破損しているとは見なさなくなりました。 #68003 (alesapin). - 新しい analyzer を用いた mutation において、変更されていないパーツをスキップする処理を修正しました。以前は analyzer を有効にしていると、述語上は影響しないはずの mutation によって、そのパーツ内のデータが書き換えられてしまう可能性がありました。 #68052 (Anton Popov).
OFFSETを使用するサブクエリでソートを削除してしまう誤った最適化を取り除きました。#67906 を修正。#68099(Graham Campbell)。- 集約プロジェクションの最適化において発生する
Block structure mismatch in AggregatingStep stream: different typesを修正しようと試みました。 #68107 (Nikolai Kochetov). - クエリがキャンセルされた際に Postgres がクラッシュする問題の修正を試みました。 #68288 (Kseniia Sumarokova).
- クエリ
SYSTEM SYNC REPLICAの不足していた同期レプリカモードを修正。 #68326 (Duc Canh Le).
ClickHouse リリース 24.7, 2024-07-30
後方互換性のない変更
- Replicated データベースでは、
CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ...を禁止しました。 #63963 (vdimir). clickhouse-keeper-clientは、ls '/hello/world'のような文字列リテラル内のパスのみを受け付け、ls /hello/worldのようなクォートされていないパスは受け付けません。 #65494 (Alexey Milovidov).- メトリクス
KeeperOutstandingRequetsはKeeperOutstandingRequestsに名前が変更されました。 #66206 (Robert Schulze). system.functionsテーブルからis_deterministicフィールドを削除しました。 #66630 (Alexey Milovidov).- 関数
tupleは、クエリ内で名前付きタプルの構築を試みるようになりました(enable_named_columns_in_function_tupleで制御)。タプルから名前を抽出する関数tupleNamesを追加しました。 #54881 (Amos Bird). - マテリアライズドビューに対する重複排除の動作を変更しました。次のような多くのケースが修正されています。- 宛先テーブルで、データが 2 つ以上のブロックに分割されており、そのブロックが並列に挿入された際に重複として扱われるケース。- マテリアライズドビュー (MV) の宛先テーブルで、等価なブロックが重複排除されるケース。これは、集約の実行により、異なる入力データに対して MV が同じデータを結果として頻繁に生成する場合に発生します。- MV の宛先テーブルで、異なる MV から来た等価なブロックが重複排除されるケース。 #61601 (Sema Checherinda).
- 関数
bitShiftLeftおよびbitShitfRightは、シフト位置が範囲外の場合にエラーを返すようになりました。 #65838 (Pablo Marcos).
新機能
full_sorting_joinアルゴリズムに対するASOF JOINのサポートを追加。#55051 (vdimir).clickhouse-clientで JWT 認証をサポート(ClickHouse Cloud でのみ利用可能)。#62829 (Konstantin Bogdanov).- SQL 関数
changeYear,changeMonth,changeDay,changeHour,changeMinute,changeSecondを追加。例えばSELECT changeMonth(toDate('2024-06-14'), 7)は日付2024-07-14を返します。#63186 (cucumber95). - 起動スクリプトを導入し、起動段階で事前設定済みクエリを実行できるようにしました。#64889 (pufit).
- クライアント設定で
accept_invalid_certificateをサポートし、自己署名証明書で動作するサーバーに対して、クライアントがセキュアな TCP で接続できるようにしました。対応するopenSSLクライアント設定verificationMode=none+invalidCertificateHandler.name=AcceptCertificateHandlerの省略形として利用できます。#65238 (peacewalker122). system.errorsテーブルからのエラー値の履歴を保持し、定期的にディスクへフラッシュするsystem.error_logを追加。#65381 (Pablo Marcos).- 集約関数
groupConcatを追加。arrayStringConcat( groupArray(column), ',')とほぼ同じです。2 つのパラメータ(文字列の区切り文字と処理する要素数)を受け取ることができます。#65451 (Yarik Briukhovetskyi). - Azure Queue ストレージを追加。#65458 (Kseniia Sumarokova).
- Parquet ファイルにページインデックスを書き込むかどうかを無効化/有効化する新しい設定を追加。#65475 (lgbo).
- コンソール(有効になっている場合)へのログレベルを制御するための
logger.console_log_levelサーバー設定を導入。#65559 (Azat Khuzhin). - テーブル関数
fileで、ディレクトリパスの末尾にワイルドカード*を自動的に付加。#66019 (Zhidong (David) Guo). - クライアントの非インタラクティブモードに
--memory-usageオプションを追加。#66393 (vdimir). clickhouse-disks用のインタラクティブクライアントを作成し、ローカルディレクトリからローカルディスクを追加できるようにしました。#64446 (Daniil Ivanik).- プロジェクションを持つテーブルで
LIGHTWEIGHT DELETEが発生した場合、ユーザーは例外を投げる(デフォルト)か、プロジェクションを削除するかを選択できます。#65594 (jsc0218). - すべての detached(切り離された)テーブルに関する主要な情報を含む system テーブルを追加。#65400 (Konstantin Morozov).
実験的機能
Variantデータ型のバイナリシリアル化を変更しました。単一のバリアントのみ、または NULL 値のみを持つグラニュールで同じ判別子を繰り返し書き込まないようにするため、compactモードを追加しました。デフォルトで有効な MergeTree 設定use_compact_variant_discriminators_serializationを追加しました。Variant 型は依然として実験的であり、シリアル化形式に後方互換性のない変更が入ることは許容される点に注意してください。 #62774 (Kruglov Pavel).- clickhouse-keeper 用にディスクベースのバックエンドストレージをサポートしました。 #56626 (Han Fei).
- JSONExtract 関数をリファクタリングし、実験的な Dynamic 型を含む、より多くの型をサポートしました。 #66046 (Kruglov Pavel).
VariantおよびDynamicのサブカラムに対して null map サブカラムをサポートしました。 #66178 (Kruglov Pavel).- 変更された
MemoryテーブルからのDynamicサブカラムの読み取りを修正しました。以前は、Dynamic 型のmax_typesパラメータが ALTER 文によって Memory テーブルで変更された場合、その後のサブカラムの読み取りで誤った結果が返される可能性がありました。 #66066 (Kruglov Pavel). - カスタムキーの parallel replicas 使用時に
cluster_for_parallel_replicasをサポートしました。これにより、MergeTree テーブルでカスタムキーと parallel replicas を併用できるようになります。 #65453 (Antonio Andelic).
パフォーマンスの改善
- int から string への変換アルゴリズムを、より高速なもの(amdn/itoa の修正版から jeaiii/itoa の修正版)に置き換えました。 #61661 (Raúl Marín).
- join(
parallel_hashアルゴリズム)で作成されるハッシュテーブルのサイズを収集してキャッシュするようにしました。この情報は、後続のクエリ実行においてハッシュテーブルを事前確保するために使用され、ハッシュテーブルのリサイズにかかる時間を削減します。 #64553 (Nikita Taranov). - バッファリングを用いることで、
ORDER BY主キーと、高い選択性を持つ条件を含むWHERE句を伴うクエリを最適化しました。これは設定read_in_order_use_buffering(デフォルトで有効)で制御され、クエリのメモリ使用量が増加する可能性があります。 #64607 (Anton Popov). plain_rewritableメタデータの読み込み性能を改善しました。 #65634 (Alexey Milovidov).- 読み取り専用ディスク上でテーブルをアタッチする際に、古くなったパーツを読み込まないことで、リソース消費を削減しました。 #65635 (Alexey Milovidov).
- Set インデックスに対して minmax ハイパーレクタングルをサポートしました。 #65676 (AntiTopQuark).
- 古くなったパーツのプライマリインデックスをアンロードして、総メモリ使用量を削減しました。 #65852 (Anton Popov).
- パターンがメタ文字、パターンクラス、フラグ、グルーピング文字などを含まない単純なものである場合、
replaceRegexpAllとreplaceRegexpOne関数が大幅に高速になりました(Taiyang Li に感謝します)。 #66185 (Robert Schulze). - S3 リクエスト: クエリ用のリトライ時間を短縮し、バックアップ用のリトライ回数を増やしました。クエリでは 8.5 分・100 回のリトライ、バックアップ復元では 1.2 時間・1000 回のリトライとなります。 #65232 (Sema Checherinda).
- クエリプランに対する LIMIT の最適化をサポートしました。PostgreSQL ストレージおよびテーブル関数に対する LIMIT のプッシュダウンもサポートしました。 #65454 (Maksim Kita).
- ZooKeeper のロードバランシングを改善しました。
fallback_session_lifetimeに関わらず、最適なノードが利用可能になるまで現在のセッションは期限切れになりません。AZ を考慮したバランシングをサポートしました。 #65570 (Alexander Tokmakov). - DatabaseCatalog が、最大で database_catalog_drop_table_concurrency 個のスレッドを使用してテーブルをより高速に削除するようになりました。 #66065 (Sema Checherinda).
改善
- ZooKeeper の負荷分散を改善しました。
fallback_session_lifetimeに関わらず、最適なノードが利用可能になるまで現在のセッションが失効しないようになりました。AZ(アベイラビリティゾーン)を考慮したバランシングをサポートしました。 #65570 (Alexander Tokmakov)。 - 設定
optimize_trivial_insert_selectはデフォルトで無効になっています。多くの場合、この設定は有利に働きます。ただし、INSERT SELECT の実行が遅くなったりメモリ使用量が増加している場合は、再度有効化するか、SET compatibility = '24.6'を実行してください。 #58970 (Alexey Milovidov). clickhouse-clientまたはclickhouse-localがクラッシュした場合にスタックトレースと診断情報を出力するようになりました。 #61109 (Alexander Tokmakov).SHOW INDEX | INDEXES | INDICES | KEYSの結果は、以前はプライマリキーのカラム名でソートされていました。この動作は直感的ではなかったため、現在はプライマリキーを構成するカラムのプライマリキー内での位置順でソートされるようになりました。 #61131 (Robert Schulze)。- マテリアライズドビューに対する重複排除の動作を変更し、次のような多くのケースを修正しました。- 宛先テーブル上で、データが 2 つ以上のブロックに分割され、それらのブロックが並行して挿入されたときに重複として扱われてしまうケース。- MV の宛先テーブル上で、集約処理により異なる入力データから同一の結果データが頻繁に生成されることで、同一ブロックが重複排除されてしまうケース。- MV の宛先テーブル上で、異なる MV から来た同一ブロックが重複排除されてしまうケース。 #61601 (Sema Checherinda).
- パーティション化された DeltaLake データの読み取りをサポートしました。データ本体ではなくメタデータを読み取ることで DeltaLake のスキーマを推論します。 #63201 (Kseniia Sumarokova)。
- Composable Protocols において、TLS レイヤーは
certificateFileとprivateKeyFileパラメータのみを受け付けます。 https://clickhouse.com/docs/operations/settings/composable-protocols。 #63985 (Anton Ivashkin)。 - WHERE 句の評価で主キーを使用する SELECT クエリの数を示すプロファイルイベント
SelectQueriesWithPrimaryKeyUsageを追加しました。 #64492 (0x01f). StorageS3Queueに関連する修正と改善。サーバー上の物理 CPU コア数に応じてs3queue_processing_threads_numのデフォルト値を自動的に決定するように変更(以前のデフォルト値である 1 の代わり)。s3queue_loading_retriesのデフォルト値を 10 に設定。system.s3queueの exception カラムで発生しうる曖昧な「Uncaught exception」を修正。MEMORY_LIMIT_EXCEEDED例外発生時にはリトライ回数を増やさないように変更。ファイルが挿入されていない状態でコミットされることを避けるため、ファイルのコミット処理をテーブルへの挿入が完全に終了した後のステージに移動。コミットおよびフラッシュのタイミングをより細かく制御できるように、s3queue_max_processed_files_before_commit、s3queue_max_processed_rows_before_commit、s3queue_max_processed_bytes_before_commit、s3queue_max_processing_time_sec_before_commit設定を追加。 #65046 (Kseniia Sumarokova).- パラメータ化されたビュー関数でエイリアスをサポート(新しい analyzer のみ)。 #65190 (Kseniia Sumarokova).
- Azure Blob Storage のログ内に含まれるアカウントキーをマスクするよう更新しました。 #65273 (SmitaRKulkarni).
- フィルター式が
PARTITION BY式の一部である場合におけるIN述語のパーティションプルーニング。#65335(Eduard Karacharov)。 arrayMin/arrayMaxは、比較可能なあらゆるデータ型に適用可能になりました。 #65455 (pn)。- cgroups v2 におけるメモリ使用量の計測を改善し、ページキャッシュが占める分を除外するようにしました。 #65470 (Nikita Taranov).
- EmbeddedRocksDB テーブルに挿入するためにチャンクをシリアライズする際、行ごとにフォーマット設定を作成しないようにしました。 #65474 (Duc Canh Le).
clickhouse-localのプロンプトを:)のみに短縮しました。getFQDNOrHostName()は macOS では実行に時間がかかり、そもそもclickhouse-localのプロンプトにホスト名を表示する必要もないためです。 #65510 (Konstantin Bogdanov).- 低性能な仮想マシン上での per-CPU arenas に関する jemalloc のメッセージ出力を抑制しました。 #65532 (Alexey Milovidov).
- デフォルトでファイルシステムキャッシュのバックグラウンドダウンロードを無効化しました。バックグラウンドダウンロードスレッドを使用すると、バッファはクエリコンテキスト内で確保される一方で、メモリの解放がクエリコンテキスト外で実行されるため、メモリ制限超過が発生する可能性のある問題を修正した後に、再度有効化する予定です。加えて、バックグラウンドワーカーがダウンロードするデータの最大サイズを定義するための個別の設定を追加する必要があります(現在は
max_file_segment_sizeによって制限されていますが、これは大きすぎる可能性があります)。 #65534(Kseniia Sumarokova)。 - ClickHouse が設定を再読み込みする間隔を指定できる新しい設定オプション
<config_reload_interval_ms>を追加しました。 #65545 (alesapin)。 - ClickHouse のデータ型向けにバイナリエンコーディングを実装し、その仕様をドキュメントに追加しました。Dynamic binary serialization でこれを使用し、設定で RowBinaryWithNamesAndTypes および Native フォーマットでも利用できるようにしました。 #65546 (Kruglov Pavel).
- サーバー設定項目
compiled_expression_cache_sizeとcompiled_expression_cache_elements_sizeがsystem.server_settingsに表示されるようになりました。 #65584 (Robert Schulze). - x509 の SubjectAltName 拡張に基づくユーザー識別のサポートを追加。 #65626 (Anton Kozlov)。
clickhouse-localは、設定ファイル内のmax_server_memory_usageとmax_server_memory_usage_to_ram_ratioの値を使用します。また、clickhouse-serverと同様に、デフォルトでシステムメモリの 90% を最大メモリ使用量として設定します。#65697(Alexey Milovidov)。- ファイルを ClickHouse にバックアップするためのスクリプトを追加しました。 #65699 (Alexey Milovidov).
- クエリキャンセルをサポートする PostgreSQL ソース。 #65722 (Maksim Kita).
- 分散クエリで
allow_experimental_analyzerをイニシエータ側で制御できるようにしました。これにより、異なるバージョンが混在するクラスタでの運用時の互換性と正確性が保証されます。 #65777 (Nikita Mikhaylov). - Keeper で cgroup の CPU 制限を順守するようになりました。 #65819 (Antonio Andelic).
- 引数なしで
concat関数を使用できるようにしました(:) select concat();)。#65887(李扬)。 clickhouse-localで名前付きコレクションを制御可能にしました。 #65973 (Alexey Milovidov).- Azure 関連のプロファイルイベントを改善しました。 #65999 (alesapin).
- ライターのタイムゾーンを用いた ORC ファイルの読み取りをサポート。 #66025 (kevinyhzou).
- PostgreSQL への接続を制御するための設定を追加しました。設定
postgresql_connection_attempt_timeoutは、接続 URL のconnect_timeoutパラメータに渡される値を指定します。設定postgresql_connection_pool_retriesは、PostgreSQL エンドポイントへの接続を確立するための再試行回数を指定します。#66232 (Dmitry Novik)。 system.processors_profile_logにおけるinput_wait_elapsed_us/elapsed_usの値の不正確さを軽減しました。 #66239 (Azat Khuzhin).- ファイルシステムキャッシュ向けの ProfileEvents を改善。#66249(zhukai)。
- レプリケートされたストレージで名前付きコレクションを管理する際に、クエリ内の
ON CLUSTER句を無視できるようにする設定を追加しました。 #66288 (MikhailBurdukov)。 - 関数
generateSnowflakeIDでは、大規模クラスタでの ID の重複を防ぐために、マシンID をパラメータとして指定できるようになりました。 #66374 (ZAWA_ll). - インタラクティブモードでの
Ctrl+Zによるサスペンドを無効化しました。これはよくある落とし穴であり、ほとんどのユーザーにとっては期待される動作ではありません。ターミナルアプリケーションをバックグラウンドにサスペンドできることを便利だと感じるのは、ごく一部の極めて特殊なパワーユーザーだけかもしれませんが、私はそのようなユーザーを知りません。#66511(Alexey Milovidov)。 - 辞書における主キーの型を検証するオプションを追加しました。このオプションがない場合、simple レイアウトでは任意のカラム型が暗黙的に UInt64 に変換されます。 #66595 (MikhailBurdukov).
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
- CREATE/REPLACE/RENAME/EXCHANGE クエリにおける循環依存関係をチェックし、循環依存がある場合には例外をスローするようにしました。以前は、このような循環依存がサーバー起動時にデッドロックを引き起こす可能性がありました。また、依存関係の作成処理に関するいくつかのバグも修正しました。 #65405 (Kruglov Pavel)
- 関数呼び出しにおける
LowCardinality列の想定外のサイズを修正。 #65298 (Raúl Marín). - maxIntersections で発生していたクラッシュを修正。 #65689 (Raúl Marín)。
- 再起動後にリセットされていたユーザー定義の
VALID UNTIL句を修正しました。 #66409 (Nikolay Degterinsky)。 SHOW MERGESの残り時間列を修正しました。 #66735 (Alexey Milovidov)。Query was cancelledが clickhouse-client に 2 回出力されてしまうことがありました。この動作は修正されました。 #66005 (Nikita Mikhaylov).- MySQL の NULL フィールドを ClickHouse の NOT NULL フィールドにマッピングする TABLE OVERRIDE を指定して
MaterializedMySQL(サポート対象外の実験的機能)を使用した際に発生していたクラッシュを修正しました。 #54649 (Filipp Ozinov). PREWHERE式がどの列も読み込まず、テーブルが adaptive index granularity を使用していない(非常に古いテーブル)場合に発生する論理エラーを修正。 #59173 (Alexander Gololobov).- クエリのキャンセル時に使用されるキャンセルバッファに関するバグを修正。 #64478 (Sema Checherinda).
- columns.txt が存在しない場合に、メタデータから parts カラムを補完する処理を修正。 #64757 (Azat Khuzhin).
ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITYでクラッシュが発生する問題を修正しました。 #64957 (pufit).- AccessControl の破棄時に発生するクラッシュを修正: 明示的なシャットダウン処理を追加。 #64993 (Vitaly Baranov)。
- 関数
uniq*の引数にある単射関数を再帰的に除去するように修正しました。これは以前は正しく動作していましたが、新しいアナライザーでは動作しなくなっていました。#65140(Duc Canh Le)。 - CTE を使用したクエリで予期しないプロジェクション名が付与される問題を修正。#65267(wudidapaopao)。
Dictionaryテーブルエンジンまたは直接クエリで辞書にアクセスする際に、dictGet権限を必要とします。 #65359 (Joe Lynch).- インクリメンタルバックアップでのユーザー固有の S3 認証の問題を修正。 #65481 (Antonio Andelic).
read-in-order最適化が有効になっている場合、FINALを含むクエリではnon-intersecting-parts最適化を無効化するようにしました。そうしないと、誤ったクエリ結果が返される可能性がありました。回避策として、この修正がマージされるまではdo_not_merge_across_partitions_select_finalとsplit_parts_ranges_into_intersecting_and_non_intersecting_finalを無効にしてください。#65505(Nikolai Kochetov)。Index out of bound for blob metadataという例外が、list バッチ内のすべてのファイルがフィルタ処理により除外された場合に発生していた問題を修正しました。 #65523 (Kseniia Sumarokova).- projection の重複排除マージにおける NOT_FOUND_COLUMN_IN_BLOCK エラーを修正。 #65573 (Yakov Olkhovskiy).
- MergeJoin のバグを修正しました。疎シリアライゼーションのカラムが、必要な変換が実行されていないにもかかわらず、ネストされた型のカラムとして扱われてしまう可能性がありました。 #65632 (Nikita Taranov).
- 互換性レベル '23.4' が正しく適用されていなかったバグを修正しました。 #65737 (cw5121).
- NULL 値を許容するフィールドを含む ODBC テーブルを修正。 #65738 (Rodolphe Dugé de Bernonville).
- 致命的なエラー発生時に発生し得る
TCPHandlerのデータレースを修正しました。 #65744 (Kseniia Sumarokova). parseDateTime関数の%Fおよび%Dプレースホルダに関する不正な例外を修正。 #65768 (Antonio Andelic).PostgreSQLから読み取るクエリの場合、ClickHouseクエリが終了したら内部のPostgreSQLクエリをキャンセルします。そうしないと、内部のPostgreSQLクエリが終了するまでClickHouseクエリをキャンセルできません。 #65771 (Maksim Kita).- 古いアナライザーと
dictGetOrDefaultを併用している場合の短絡評価ロジックのバグを修正。 #65802 (jsc0218)。 EmbeddedRocksDBでの TTL 書き込みにより SST ファイルが破損するバグを修正しました。 #65816 (Duc Canh Le).- 関数
bitTest、bitTestAll、bitTestAnyは、指定されたビットインデックスが範囲外の場合にエラーを返すようになりました #65818 (Pablo Marcos)。 join_any_take_last_rowの設定は、ハッシュ結合を使用するすべてのクエリでサポートされます。 #65820 (vdimir)。IS NULLチェックを含む JOIN 条件の処理を改善しました(たとえばON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) )はON a <=> bに書き換えられます)。IS NULL以外の条件も存在する場合に誤った最適化が行われていた問題を修正しました。 #65835 (vdimir).- S3Queue で増え続けるメモリ使用量を修正。 #65839 (Kseniia Sumarokova).
arrayAUCの同点の扱いを修正し、sklearn と同じになるようにしました。 #65840 (gabrielmcg44)。- MySQL サーバープロトコルにおける TLS 接続の潜在的な問題を修正しました。 #65917 (Azat Khuzhin).
- MySQL クライアントプロトコルの TLS 接続で発生する可能性がある問題を修正しました。 #65938 (Azat Khuzhin).
SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITEをタイムアウトが 0 のときに正しく処理するよう修正。 #65941 (Azat Khuzhin).- スキーマ推論キャッシュに、不足していた
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuplesの各設定を追加しました。これらは結果のスキーマが変わり得るためです。これにより、これらの設定を変更した場合にスキーマ推論の結果が誤ることを防ぎます。 #65980 (Kruglov Pavel). - Column _size は S3 engine および S3 table function では、アーカイブ自体のサイズではなく、アーカイブ内のファイルサイズを表します。 #65993 (Daniil Ivanik).
- analyzer における動的サブカラムの解決を修正し、動的サブカラムの読み取り時にカラム全体を読み込まないようにしました。 #66004 (Kruglov Pavel).
- from_env に対する replace オーバーライド使用時の設定のマージ処理を修正。 #66034 (Azat Khuzhin).
- シャットダウン中に
GRPCServerがハングする可能性がある問題を修正しました。 #66061 (Vitaly Baranov)。 LowCardinalityの非定数引数を取る関数hasにおけるいくつかのケースを修正しました。 #66088 (Anton Popov).groupArrayIntersectの修正。merge()関数内で誤った動作をしていました。数値データおよび汎用データに対するdeserialise()の動作も修正しました。 #66103 (Yarik Briukhovetskyi).unbin/unhexの実装における固定バッファのバッファオーバーフロー不具合を修正しました。 #66106 (Nikita Taranov).- #64760 で導入された
merge-filters最適化を無効化しました。これは、最適化によって 2 つのフィルター式がマージされる際にショートサーキット評価が行われないと、例外が発生する可能性があるためです。#66126(Nikolai Kochetov)。 - Avro 仕様で現在は許可されている負のブロックサイズの配列としてエンコードされた Avro ファイルを、サーバーがパースできなかった問題を修正しました。#66130(Serge Klochkov)。
- ZooKeeper クライアントのバグを修正しました。ZooKeeper からハードウェアエラーを受信した後、セッションが使用不能な状態で停止してしまうことがありました。例えば、ClickHouse Keeper の "soft memory limit" が原因で発生する可能性があります。 #66140 (Alexander Tokmakov).
- SumIfToCountIfVisitor と符号付き整数に関する不具合を修正。 #66146 (Raúl Marín).
- 分散クエリの結果からデータが欠落する稀なケースを修正しました。 #66174 (vdimir).
- StorageDeltaLake でメタデータフィールドの解析順序を修正。 #66211 (Kseniia Sumarokova).
distributed_ddl_output_modeのnone_only_activeモードではTIMEOUT_EXCEEDEDをスローしないようにしました。 #66218 (Alexander Tokmakov).- インデックスを使用できない場合の
system.numbers_mtに対する LIMIT 句の処理を修正。 #66231 (János Benjamin Antal). - Docker などのコンテナ内でサーバーを実行している場合に、cgroups v2 によって指定された使用可能な CPU コア数の上限を ClickHouse サーバーが正しく検出できるように修正しました。より詳しく言うと、コンテナはしばしば名前が空の root cgroup 内でプロセスを実行しますが、その場合、ClickHouse は cgroups v2 によって設定された CPU 制限を無視していました。#66237 (filimonov)。
- 制約内で
INを使うサブクエリを使用した場合に発生するNot-ready setエラーを修正。 #66261 (Nikolai Kochetov). - S3 または Azure Blob Storage へのコピー時のエラー報告を修正。#66295 (Vitaly Baranov).
- watchdog がアンリンク(ローテーション)されたログファイルのディスクリプタを保持しないようにしました。 #66334 (Aleksei Filatov).
- logicalexpressionoptimizerpass が定数の論理型情報を失ってしまう不具合を修正。 #66344 (pn).
group_by_use_nulls=trueおよび新しいアナライザーの使用時に発生するColumn identifier is already registeredエラーを修正。 #66400 (Nikolai Kochetov).- 外部エンジン(PostgreSQL など)のテーブルを結合およびフィルタするクエリで、過度に積極的なフィルタプッシュダウンにより誤った結果が返る可能性がある問題を修正しました。今後は、外部テーブルとの外部結合の場合、
WHERE句の条件は外部データベースにプッシュダウンされません。 #66402 (vdimir)。 - クロス結合に不足していたカラムのマテリアライゼーションを追加しました。 #66413 (lgbo).
- 新しいアナライザーが有効な状態で
GROUP BYキーに定数式を含むクエリを実行した際に発生するCannot find columnエラーを修正。 #66433 (Nikolai Kochetov). - Npy 形式からのインポートする際に、配列のネストレベルが不正な場合に発生しうる論理エラーを回避し、その他の種類のエラーに対するテストを修正。 #66461 (Yarik Briukhovetskyi).
- 述語に非決定的関数が含まれている場合に count() の結果が誤ったものになる不具合を修正。 #66510 (Duc Canh Le).
Allocator::reallocにおけるメモリ使用量の追跡を正しく行うようにしました。 #66548 (Antonio Andelic).- 空のタプルをハッシュ化する際に未初期化メモリを読み取ってしまう不具合を修正。 #66562 (Alexey Milovidov).
WINDOWを含むクエリで不正な結果が返される問題を修正しました。これは、PARTITION列が疎なシリアライゼーション形式であり、かつウィンドウ関数が並列実行される場合に発生する可能性がありました。 #66579 (Nikolai Kochetov)。- ローカルストレージにおける名前付きコレクションの削除処理を修正。 #66599 (János Benjamin Antal).
ColumnTuple::insertManyFromでcolumn_lengthが更新されない問題を修正します。 #66626 (lgbo)。(column IS NULL)という式を含むクエリで発生するUnknown identifierおよびColumn is not under aggregate functionエラーを修正しました。このバグは analyzer を無効化した場合にのみ発生し、#65088 で報告されました。#66654(Nikolai Kochetov)。- 新しいアナライザーを使用している場合に、スカラーサブクエリが
INの第1引数として使用されていると発生していたMethod getResultType is not supported for QUERY query nodeエラーを修正しました。 #66655 (Nikolai Kochetov). - variant サブカラムの読み取り中に発生する可能性のある PARAMETER_OUT_OF_BOUND エラーを修正。 #66659 (Kruglov Pavel)。
- カラム削除後にまれに発生するマージ処理がハングする問題を修正しました。 #66707 (Raúl Marín).
- リモートソースからの
INSERT SELECT時のアサーションisUniqTypesを修正しました。 #66722 (Sema Checherinda)。 - PrometheusRequestHandler の論理エラーを修正。 #66621 (Vitaly Baranov)。
- fuzzer によって検出された
indexHint関数名の大文字小文字の問題を修正。#66286 (Anton Popov)。 - 'create table b empty as a' の AST のフォーマットを修正。 #64951 (Michael Kolupaev).
ClickHouse リリース 24.6, 2024-07-01
後方互換性のない変更
- データベースとテーブルの非同期ロードをデフォルトで有効化しました。
async_load_databasesについては config.xml を参照してください。この変更は完全に互換性がありますが、動作の違いを生む可能性があります。async_load_databasesが以前のバージョンと同様に false の場合、すべてのテーブルがロード完了するまでサーバーは接続を受け付けません。新しいバージョンのようにasync_load_databasesが true の場合、すべてのテーブルがロードされる前にサーバーが接続を受け付けることができます。まだロードされていないテーブルに対してクエリが実行された場合、そのテーブルのロード完了まで待機しなければならず、これにはかなりの時間がかかることがあります。ロードバランサー配下の大規模な分散システムの一部である場合、この挙動の違いがサーバーの動作に影響する可能性があります。前者のケースでは、ロードバランサーは接続拒否を受け取り、すばやく別のサーバーへフェイルオーバーできます。後者のケースでは、ロードバランサーはまだテーブルをロード中のサーバーに接続してしまい、そのクエリのレイテンシーが高くなります。さらに、多数のクエリが待機状態に蓄積すると、それらが一斉に処理を開始する「thundering herd」問題を引き起こす可能性があります。これは高負荷な分散バックエンドでのみ違いを生む可能性があります。この問題を回避するにはasync_load_databasesの値を false に設定してください。#57695(Alexey Milovidov)。 MergeTreeテーブルに対して、replace_long_file_name_to_hash設定がデフォルトで有効化されました。#64457(Anton Popov)。この設定は完全に互換性があり、アップグレード時に特別な対応は不要です。この新しいデータ形式は 23.9 以降のすべてのバージョンでサポートされています。この設定を有効化すると、バージョン 23.8 以前へのダウングレードはできなくなります。- 一部の不正なクエリは、パースの段階でもっと早く失敗するようになりました。注意: 文字列リテラルなしで
kqlテーブル関数に渡されたインライン KQL 式(実験的な Kusto 言語)のサポートを無効化しました。例:kql('garbage | trash')やkql($$garbage | trash$$)ではなくkql(garbage | trash)のような呼び出しです。この機能は意図せず導入されたものであり、存在すべきではありません。#61500(Alexey Milovidov)。 - ストレージ
S3QueueのOrderedモードにおける並列処理を再設計しました。この PR は、s3queue_processing_threads_numまたはs3queue_total_shards_num設定を使用していた場合、Ordered モードとの後方互換性がありません。s3queue_total_shards_num設定は削除されました。以前はs3queue_allow_experimental_sharded_modeのもとでのみ使用することが許可されていましたが、これは現在非推奨です。新しい設定s3queue_bucketsが追加されました。#64349(Kseniia Sumarokova)。 - 新しい関数
snowflakeIDToDateTime,snowflakeIDToDateTime64,dateTimeToSnowflakeID,dateTime64ToSnowflakeIDが追加されました。既存のsnowflakeToDateTime,snowflakeToDateTime64,dateTimeToSnowflake,dateTime64ToSnowflake関数と異なり、新しい関数はgenerateSnowflakeID関数と互換性があります。つまり、generateSnowflakeIDによって生成された snowflake ID を受け取り、generateSnowflakeIDと同じ型(UInt64)の snowflake ID を生成します。さらに、新しい関数はgenerateSnowflakeIDと同様に UNIX エポック(いわゆる 1970-01-01)をデフォルトとします。必要に応じて、異なるエポック、たとえば Twitter/X のエポックである 2010-11-04(UNIX エポックからの経過ミリ秒として 1288834974657)を渡すことができます。古い変換関数は非推奨であり、移行期間後に削除される予定です。これらをそれでも使用したい場合は、設定allow_deprecated_snowflake_conversion_functionsを有効にしてください。#64948(Robert Schulze)。
新機能
- ClickHouse Keeper に名前付きコレクションを格納できるようにしました。 #64574 (Kseniia Sumarokova).
- 空のタプルのサポートを追加。 #55061 (Amos Bird).
- Hilbert 曲線のエンコードおよびデコード関数を追加。 #60156 (Artem Mustafin).
hilbertEncodeを用いたインデックス分析のサポートを追加しました。 #64662 (Artem Mustafin).- 関数
readWKTLineStringを使用して、WKT 形式のLINESTRINGジオメトリを読み取る機能を追加しました。 #62519 (Nikita Mikhaylov)。 - 別のディスク上のパーツをアタッチできるようにしました。 #63087 (Unalian).
- Twitter 形式の Snowflake ID を生成するための新しい SQL 関数
generateSnowflakeIDを追加しました。 #63577 (Danila Puzov)。 - マージやミューテーションおよびその他のワークロード間でのリソースの使用方法と共有方法を制御するための
merge_workloadとmutation_workload設定を追加しました。 #64061 (Sergei Trifonov). =演算子を使用してIPv4型とIPv6型を比較できるようにしました。 #64292 (Francisco J. Jurado Moreno)。- 2項演算の数学関数(
pow、atan2、max2、min2、hypot)でDecimal型の引数をサポートしました。 #64582 (Mikhail Gorshkov). - SQL 関数
parseReadableSize(およびOrNullとOrZeroの各バリアント)を追加しました。 #64742 (Francisco J. Jurado Moreno)。 - サーバー設定
max_table_num_to_throwとmax_database_num_to_throwを追加し、CREATEクエリで作成されるデータベースおよびテーブルの数を制限します。 #64781 (Xu Jia)。 s3/file/hdfs/url/azureBlobStorageなどのファイル系ストレージに_time仮想カラムを追加。 #64947 (Ilya Golshtein)。- 新しい関数
base64URLEncode、base64URLDecode、tryBase64URLDecodeを追加しました。 #64991 (Mikhail Gorshkov). - 新しい関数
editDistanceUTF8を追加しました。この関数は 2 つの UTF-8 文字列間の編集距離を計算します。#65269(LiuNeng)。 - カスタム HTTP ハンドラーで独自のレスポンスヘッダーをサポートできるように、
http_response_headers設定を追加しました。 #63562 (Grigorii). - クエリ結果を無限ループで返すための新しいテーブル関数
loopを追加しました。 #63452 (Sariel)。テスト用途に有用です。 system.query_logにused_privilegesとmissing_privilegesという 2 つの新しいカラムを追加しました。used_privilegesにはクエリ実行中にチェックされた権限が格納され、missing_privilegesには必要だが不足している権限が含まれます。 #64597 (Alexey Katsman).output_format_pretty_display_footer_column_namesという設定が追加されました。有効化すると、行数の多いテーブル(デフォルトでは 50 行)ではテーブル末尾にカラム名を表示します。最小行数のしきい値はoutput_format_pretty_display_footer_column_names_min_rowsによって制御されます。 #65144 (Shaun Struwig).
実験的機能
- 「異なる値の個数」型の統計情報を導入しました。#59357 (Han Fei).
- ReplicatedMergeTree 向けの統計情報をサポートしました。#64934 (Han Fei).
Replicatedデータベースに「replica group」が設定されている場合、すべてのグループのレプリカを含むクラスタを自動的に作成するようにしました。#64312 (Alexander Tokmakov).- 範囲フィルタを使用する際に、動的シャード構成での parallel replicas によるクエリの並列化方法を制御できるよう、
parallel_replicas_custom_key_range_lowerとparallel_replicas_custom_key_range_upper設定を追加しました。#64604 (josh-hildred).
パフォーマンスの向上
PRIMARY KEYで定義された順序を維持しつつ、サイズを最適化するために挿入時に行を並べ替えられる機能を追加しました。これは設定optimize_row_orderによって制御されます(デフォルトではオフ)。#63578(Igor Markelov)。- ネイティブな Parquet リーダーを追加し、Parquet バイナリを直接 ClickHouse のカラムに読み込めるようにしました。これは設定
input_format_parquet_use_native_readerによって制御されます(デフォルトは無効)。#60361(ZhiHong Zhang)。 - クエリフィルターが MergeTree テーブルから正確な範囲を選択できる場合に、trivial count の部分的な最適化をサポートします。 #60463 (Amos Bird)。
- 複数スレッドの
INSERTにおける最大メモリ使用量を、複数スレッドのチャンクを単一の transform でまとめて収集することで削減しました。 #61047 (Yarik Briukhovetskyi)。 - 固定メモリ割り当てを使用して余分なバッファの割り当てを回避することで、Azure オブジェクトストレージ使用時のメモリ使用量を削減します。 #63160 (SmitaRKulkarni).
ColumnNullable::sizeにおける仮想関数呼び出しの回数を削減。 #60556 (HappenLee).- 正規表現引数が1文字のみの場合に
splitByRegexpを高速化しました。 #62696 (Robert Schulze). - 使用されたキーの最小値と最大値を追跡することで、8ビットおよび16ビットのキーによる集計を高速化します。これにより、確認が必要なセルの数を減らすことができます。 #62746 (Jiebin Sun).
- 左辺が
LowCardinalityで右辺が定数の集合である場合のIN演算子の処理を最適化しました。 #64060 (Zhiguo Zhou). ConcurrentHashJoin内部のハッシュテーブルの初期化と破棄にスレッドプールを使用します。 #64241 (Nikita Taranov)。- スパースカラムを含むテーブルにおける縦方向マージを最適化しました。 #64311 (Anton Popov).
- 垂直マージ時にリモートファイルシステムからデータをプリフェッチできるようにしました。これにより、データをリモートファイルシステムに保存しているテーブルでの垂直マージのレイテンシが改善されます。 #64314 (Anton Popov).
ColumnSparse::filterのisDefaultへの冗長な呼び出しを削減して、パフォーマンスを改善しました。 #64426 (Jiebin Sun)。- 複数の非同期
getChildrenリクエストを行うことで、keeper-client コマンドfind_super_nodesおよびfind_big_familyを高速化しました。 #64628 (Alexander Gololobov). - NULL を許容する数値型引数に対する関数
least/greatestを改善しました。 #64668 (KevinyhZou). - クエリプラン内の連続する 2 つのフィルタリングステップをマージできるようにしました。これにより、親ステップからフィルター条件をプッシュダウンできる場合、フィルタープッシュダウンの最適化が向上します。 #64760 (Nikolai Kochetov).
- vertical final 実装における不適切な最適化を削除し、vertical final アルゴリズムをデフォルトで再度有効にしました。 #64783 (Duc Canh Le).
- フィルタ式から ALIAS ノードを削除します。これにより、新しいアナライザー使用時に
PREWHERE句を含むクエリのパフォーマンスがわずかに向上します。 #64793 (Nikolai Kochetov). - OpenSSL のセッションキャッシュを再度有効にしました。 #65111 (Robert Schulze).
- 挿入時にスキップインデックスおよび統計量をマテリアライズしないようにする設定(
materialize_skip_indexes_on_insertとmaterialize_statistics_on_insert)を追加しました。 #64391 (Anton Popov)。 - 割り当てられたメモリサイズを用いて row group サイズを計算し、単一スレッドモードにおける Parquet writer のピークメモリを削減するようにしました。 #64424 (LiuNeng)。
- 疎なカラムのイテレータを改善し、
sizeの呼び出し回数を削減しました。 #64497 (Jiebin Sun). - Azure Blob Storage へのバックアップ時に server-side copy を使用する条件を更新。 #64518 (SmitaRKulkarni).
- 多数の skip index を持つテーブルの縦方向マージにおけるメモリ使用量を最適化しました。 #64580 (Anton Popov).
改善
- システムテーブルに対して
SHOW CREATE TABLEを実行すると、そのテーブルが何のために必要なのかを説明する、テーブルごとに固有の便利なコメントが表示されるようになりました。 #63788 (Nikita Mikhaylov). - 関数
round(),roundBankers(),floor(),ceil()およびtrunc()の第2引数(scale)は、定数である必要がなくなり、非 const の値を指定できるようになりました。 #64798 (Mikhail Gorshkov)。 - 新しいディスクを追加した際に、
Distributedテーブルのストレージポリシーをホットリロードできるようにしました。#58285 (Duc Canh Le). - 高負荷状態のサービスでスレッドをスケジューリングする際に、MergeTree インデックス解析中に発生する可能性のあるデッドロックを回避しました。 #59427 (Sean Haynes).
- S3 プロキシのサポートおよびトンネリングに関する軽微なコーナーケースの修正をいくつか行いました。 #63427 (Arthur Passos).
- io_uring の再送に関する可視性を向上させました。プロファイルイベント名を
IOUringSQEsResubmitsからIOUringSQEsResubmitsAsyncに変更し、新しいイベントIOUringSQEsResubmitsSyncを追加しました。#63699(Tomer Shafir)。 - メタデータストレージ用ディスク上の空き領域を確保しておくための新しい設定
metadata_keep_free_space_bytesを追加しました。 #64128 (MikhailBurdukov)。 plain_rewritableメタデータストレージによって作成および削除されたディレクトリ数と、ローカルとリモートを対応付けるインメモリマップ内のエントリ数を追跡するためのメトリクスを追加しました。 #64175 (Julia Kartseva).- クエリキャッシュは、クエリ本体が同じでも設定が異なる場合は別のクエリとして扱うようになりました。これにより、
limitやadditional_table_filtersなどの異なる設定がクエリ結果に影響するケースでの堅牢性が向上します。 #64205 (Robert Schulze). - オブジェクトストレージで非標準のエラーコード
QpsLimitExceededをリトライ可能なエラーとして扱えるようにしました。 #64225 (Sema Checherinda). - このテーブル用の ZooKeeper パスが既に存在する場合、MergeTree テーブルをレプリケーテッドテーブルに変換できないようにしました。 #64244 (Kirill).
- 平均出力ブロックのバイト数を制御するための新しい設定
input_format_parquet_prefer_block_bytesを追加し、input_format_parquet_max_block_sizeのデフォルト値を 65409 に変更しました。 #64427 (LiuNeng). no_proxy環境変数および ClickHouse のプロキシ設定で指定されたホストを、プロキシ経由から除外できるようにしました。 #63314 (Arthur Passos)。- Keeper を常に、グローバルスレッドプールに十分な数のスレッドを確保した状態で起動するようにしました。 #64444 (Duc Canh Le).
- ユーザー設定のパラメータは、オブジェクトストレージ上の
MergeTreeに対するマージおよびミューテーションには影響しません。#64456 (alesapin)。 - オブジェクトストレージで、非標準のエラーコード
TotalQpsLimitExceededを再試行可能なエラーとしてサポートしました。 #64520 (Sema Checherinda). - オープンソース版と ClickHouse Cloud 版の両方の Advanced Dashboard を更新し、「Maximum concurrent network connections」のチャートを含めました。 #64610 (Thom O'Connor)。
zeros_mtとgenerateRandomの進捗表示を改善。 #64804 (Raúl Marín).- 非同期メトリクス
jemalloc.profile.activeを追加し、サンプリングが現在有効かどうかを確認できるようにしました。これは prof.active に加わる有効化のための仕組みであり、呼び出しスレッドがサンプリングを行うには両方が有効である必要があります。 #64842 (Unalian). allow_experimental_join_conditionの重要フラグを削除しました。このフラグが原因で、異なるバージョンが混在するクラスターにおいて分散クエリが正常に実行されない場合がありました。 #65008 (Nikita Mikhaylov).- サーバーの非同期メトリクスとして
DiskGetObjectThrottler*およびDiskGetObjectThrottler*を追加しました。これらは、ディスク設定s3_max_get_rpsおよびs3_max_put_rpsで定義された 1 秒あたりのリクエスト数のレート制限と、ディスクのスロットリング制限に達することなく送信可能な現在利用可能なリクエスト数を反映します。メトリクスは、制限が設定されている各ディスクごとに定義されます。#65050(Sergei Trifonov)。 Poco::ThreadPool用のグローバルトレースコレクターを初期化(Keeper などで必要)。#65239 (Kseniia Sumarokova).bcrypt_hashでユーザーを作成する際にバリデーションを追加しました。#65242(Raúl Marín)。PREWHEREの実行中および実行後に読み取られた行数を示すプロファイルイベントを追加。 #64198 (Nikita Taranov).- 並列レプリカ利用時に
EXPLAIN PLANにクエリを表示。 #64298 (vdimir). allow_deprecated_functionsをallow_deprecated_error_prone_window_functionsに名称変更しました。 #64358 (Raúl Marín).fileテーブル関数においても、ファイルディスクリプタに対してmax_read_buffer_size設定が適用されるようにしました。 #64532 (Azat Khuzhin).- サポートされていないストレージに対しては、マテリアライズドビューであってもトランザクションを無効化しました。 #64918 (alesapin).
- 旧アナライザにおける
QUALIFY句の使用を禁止しました。旧アナライザはQUALIFYを無視していたため、ミューテーションで意図しないデータ削除が発生しうる問題がありました。 #65356 (Dmitry Novik)。
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
- Apache ORC ライブラリのバグが修正されました: すべてのプラットフォームにおける符号なし型および ARM 上の Int8 について、書き込み時の ORC 統計量の計算が正しく行われるようになりました。 #64563 (Michael Kolupaev)。
- ClickHouse における CSV 形式の Tuple の処理および解釈の動作を、元の挙動に戻しました。この変更により、実質的に https://github.com/ClickHouse/ClickHouse/pull/60994 はリバートされ、その挙動は
output_format_csv_serialize_tuple_into_separate_columns、input_format_csv_deserialize_separate_columns_into_tuple、input_format_csv_try_infer_strings_from_quoted_tuplesといった一部の設定でのみ有効になります。#65170(Nikita Mikhaylov)。 - 特定の状況において、ユーザーが必要な権限付与なしにデフォルトデータベースに対する自分の権限を昇格できてしまう権限エラーを修正しました。 #64769 (pufit)。
- UniqInjectiveFunctionsEliminationPass と uniqCombined が原因のクラッシュが発生する問題を修正。 #65188 (Raúl Marín).
- セッション終了時にダイジェスト不一致を引き起こしていた ClickHouse Keeper のバグを修正しました。 #65198 (Aleksei Filatov)。
- Distinct コンビネータに対して正しいメモリアラインメントを使用するよう修正しました。以前は、このコンビネータを使用した際に、不正なメモリ割り当てが原因でクラッシュが発生する可能性がありました。 #65379 (Antonio Andelic)。
DISTINCTとウィンドウ関数でクラッシュが発生する問題を修正。 #64767 (Igor Nikonov).- IN 句および indexHint() 使用時に 'set' スキップインデックスが動作しない問題を修正しました。 #62083(Michael Kolupaev)。
- パラメータ化ビューの値を代入する際に関数を実行できるようにしました。 #63502 (SmitaRKulkarni).
- Parquet のメモリトラッキングを修正しました。 #63584 (Michael Kolupaev)。
Tuple(Map(LowCardinality(String), String), ...)型の列読み取りの不具合を修正しました。 #63956 (Anton Popov)。- 異なる型(expression と function)からなる循環エイリアスに対して発生する
Cyclic aliasesエラーを修正しました。 #63993 (Nikolai Kochetov). - この修正により、クエリパイプライン内の各ビューごとに、正しい definer を持つ適切に再定義されたコンテキストが使用されます。 #64079 (pufit)。
- Fix analyzer: INTERPOLATE 使用時に発生していた "Not found column" エラーを修正しました。 #64096 (Yakov Olkhovskiy).
- ファイルが存在するディスクとは異なる認証情報を使用する S3 バケットへのバックアップ作成の問題を修正しました。 #64153 (Antonio Andelic).
- クエリキャッシュは、異なるデータベースに対する同一の2つのクエリを、別のものとして扱うようになりました。以前の動作では、テーブルの読み取り権限が不足している場合でも、その制限を回避するために悪用されるおそれがありました。 #64199 (Robert Schulze).
- StatusFile 内の ~WriteBufferFromFileDescriptor で、捕捉されない例外によりプロセスがアボートする可能性のある問題を修正。 #64206 (Kruglov Pavel)。
ARRAY JOINを使用する分散クエリで発生していたduplicate aliasエラーを修正しました。 #64226 (Nikolai Kochetov).- 文字列から整数への意図しない accurateCast を修正。 #64255 (wudidapaopao).
- OR グループに相互排他的な原子条件が含まれている場合の CNF の単純化を修正しました。 #64256 (Eduard Karacharov).
- Query Tree のサイズ検証を修正しました。 #64377 (Dmitry Novik).
PREWHEREを使用したBufferテーブルで発生するLogical error: Bad castを修正しました。 #64388 (Nikolai Kochetov).blob_storage_logをオブジェクトストレージ上に格納している場合に、再帰的なログ出力が発生しないようにしました。 #64393 (vdimir).- デフォルト式を含むテーブルに対する
CREATE TABLE ASクエリを修正しました。 #64455 (Anton Popov). - Nullable キーを持つテーブルに対する ORDER BY ... NULLS FIRST / LAST 句使用時の
optimize_read_in_orderの挙動を修正しました。 #64483 (Eduard Karacharov). GLOBAL INへのエイリアスを使用するクエリで発生するExpression nodes list expected 1 projection namesおよびUnknown expression or identifierエラーを修正。 #64517 (Nikolai Kochetov).GROUP BYキーに定数CTEを含む分散クエリで発生していたCannot find columnエラーを修正しました。 #64519 (Nikolai Kochetov).- バックアップからの復元が、まだ復元されていない definer を持つ MV の作成によってブロックされ、その結果発生するクラッシュループを修正。 #64595 (pufit).
- フォーマッターが生成する文字列の長さが奇数で、かつ最後の文字が
0の場合における関数formatDateTimeInJodaSyntaxの出力を修正しました。たとえば、SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')は、以前は15を返していましたが、現在は正しく150を返します。 #64614 (LiuNeng). -Ifコンビネータがすでに使用されている場合は、集約を書き換えないよう修正しました。#64638 (Dmitry Novik).- float の型推論を修正(バッファが小さい場合、つまり
--max_read_buffer_size 1のとき)。 #64641 (Azat Khuzhin). - 式を使用したTTLが正しく動作しなくなる可能性があった不具合を修正しました。 #64694 (alesapin).
- 新しいアナライザで、常に真となる
WHEREおよびPREWHEREの式を削除してしまう問題を修正しました。 #64695 (Nikolai Kochetov). startsWith、endsWith、match、multiSearchAnyの結果でフィルタリングする際に、トークンベースのテキストインデックス(ngrambf、full_text)によって不要な部分まで除去されてしまう問題を修正しました。 #64720 (Eduard Karacharov).UTF8::computeWidth関数における ANSI CSI エスケープシーケンス処理の誤った動作を修正します。#64756 (Shaun Struwig)。- サブクエリにまたがって
ORDER BY/LIMIT BYが誤って削除される不具合を修正。 #64766 (Raúl Marín). - 混在した結合条件に含まれる
setに対するサブクエリを用いる(実験的な)非等値結合を修正しました。 #64775 (lgbo). plain_rewritableディスク上のローカルキャッシュで発生していたクラッシュを修正。#64778 (Julia Kartseva)。- Keeper の修正:
mntrコマンドがzk_latest_snapshot_sizeの正しい値を返すように修正。 #64784 (Antonio Andelic). Nested列によるARRAY JOINを含む分散クエリで発生するCannot find columnエラーを修正しました。#64755 の問題を解決。#64801(Nikolai Kochetov)。- SLRU キャッシュポリシーのメモリリークを修正。 #64803 (Kseniia Sumarokova).
- S3 からデータを読み取るクエリ、HTTP プロトコル経由のクエリ、非同期 INSERT など、いくつかの種類のクエリで発生する可能性があった不正確なメモリトラッキングを修正しました。 #64844 (Anton Popov).
PREWHEREを使用してマテリアライズドビューからデータを読み取るクエリで、マテリアライズドビューのカラムの型がソーステーブルと異なる場合に発生するBlock structure mismatchエラーを修正しました。#64611 を修正。#64855(Nikolai Kochetov)。- サブクエリ付きの TTL を持つテーブル + レプリケートされたデータベース + 並列レプリカ + analyzer の組み合わせで、まれに発生するクラッシュを修正しました。発生頻度は非常に低いものの、サブクエリ付きの TTL の使用は避けてください。 #64858 (alesapin).
- 大きな削除バッチ処理時に
blob_storage_logでDeleteイベントが重複して記録される問題を修正しました。 #64924 (vdimir). - [Zoo]Keeper からの設定インクルードを含む構成で、サーバー起動後に発生する可能性があった [Zoo]Keeper の
Session moved to another serverエラーを修正しました。 #64986 (Alexander Tokmakov). - https://github.com/ClickHouse/ClickHouse/pull/54211 でパラメータ付き VIEW に対して正しく動作していなかった
ALTER MODIFY COMMENTクエリを修正。#65031 (Nikolay Degterinsky)。 cluster_secure_connectionパラメータが有効な場合の DatabaseReplicated におけるhost_idの扱いを修正しました。以前は、このパラメータが有効化されていても、DatabaseReplicated によってクラスター内で作成されるすべての接続が安全な接続になっていませんでした。#65054(Nikolay Degterinsky)。- StorageMerge に対する
PREWHERE最適化後に発生していたNot-ready Setエラーを修正。 #65057 (Nikolai Kochetov)。 - ファイルライクなストレージで確定済みバッファへの書き込みを避けるようにしました。 #65063 (Kruglov Pavel).
- 循環エイリアスが存在する場合にクエリの実行時間が無限になる可能性のある問題を修正。#64849 を修正。 #65081 (Nikolai Kochetov).
- 新しい analyzer での
INTERPOLATE (alias)を使用したリモートクエリで発生するUnknown expression identifierエラーを修正。#64636 を修正。#65090(Nikolai Kochetov)。 - 集約処理の外側に算術演算をプッシュダウンする最適化を修正しました。新しいアナライザでは、この最適化が1回だけしか適用されていませんでした。 #65104 (Dmitry Novik).
- 新しいアナライザーにおける集約関数名の書き換え処理を修正。 #65110 (Dmitry Novik)。
- クライアントソケットからリクエストボディ(またはその一部)を読み取る際に受信タイムアウトが発生した場合、200 OK ではなく 5xx を返すようにしました。 #65118 (Julian Maicher).
- ヘッジリクエストで発生する可能性のあるクラッシュを修正。 #65206 (Azat Khuzhin).
- Hashed および Hashed_Array 辞書のショートサーキット評価におけるバグを修正しました。このバグにより、未初期化の数値が読み出され、さまざまなエラーを引き起こす可能性がありました。 #65256 (jsc0218).
- このPRでは、定数(IN 演算子の第2引数)の型が、IN 演算子の型変換処理の間じゅう常に保持・参照されるようにします。そうしないと、型情報が失われて一部の変換(たとえば DateTime から Date への変換)が失敗する可能性があります。これにより、#64487 が修正されます。#65315(pn)。
ビルド/テスト/パッケージングの改善
- LLVM XRay のサポートを追加。#64592 #64837 (Tomer Shafir).
- s3/hdfs/azure ストレージ実装を、IObjectStorage と連携する単一クラスに統合。同様に *Cluster、データレイクおよび Queue ストレージも統合。#59767 (Kseniia Sumarokova).
- MergeTreeData と DataPart への依存関係を除去するために data part writer をリファクタリング。#63620 (Alexander Gololobov).
KeyConditionとキー解析をリファクタリングして、PartitionPruner および trivial count 最適化を改善。これは #60463 から分離されたもの。#61459 (Amos Bird).- すべての関数が正しいサイズのカラムで呼び出されていることを検証するアサーションを導入。#63723 (Raúl Marín).
- ClickHouse サーバーデーモンを起動するために
rcinit スクリプトを使用する際、networkサービスを必須としました。#60650 (Chun-Sheng, Li). - 一部の遅いテストのサイズを縮小。#64387 #64452 (Raúl Marín).
- keeper-bench を使用して ZooKeeper ログをリプレイ。#62481 (Antonio Andelic).
ClickHouse リリース 24.5, 2024-05-30
後方互換性のない変更
- 「inverted indexes」を、技術色を抑えたよりユーザーフレンドリーな名称である「full-text indexes」に改名。この変更により内部テーブルメタデータも変更され、既存の(実験的な) inverted indexes を持つテーブルは壊れます。アップグレード前にこれらのインデックスを必ず削除し、アップグレード後に再作成してください。#62884 (Robert Schulze).
- 関数
neighbor,runningAccumulate,runningDifferenceStartingWithFirstValue,runningDifferenceの使用は、エラーを招きやすいため非推奨となりました。代わりに適切なウィンドウ関数を使用すべきです。これらを再度有効にするには、allow_deprecated_error_prone_window_functions = 1を設定するか、compatibility = '24.4'以下を設定してください。#63132 (Nikita Taranov). - 多数のカラムが存在し、多くのデータベースまたはテーブルに
SHOW TABLES権限が付与されていない場合でも、system.columnsからのクエリがより高速に動作するようになりました。以前のバージョンでは、対応するテーブルにSHOW TABLESを付与せずに個々のカラムにSHOW COLUMNSを付与した場合、system.columnsテーブルにはそれらのカラムが表示されていましたが、新バージョンではそのテーブル全体がスキップされますので注意してください。クエリを低速化していた「Access granted」と「Access denied」のトレースログメッセージを削除しました。#63439 (Alexey Milovidov).
新機能
application/x-www-form-urlencoded形式で単一レコードを読み書きするためのFormフォーマットを追加しました。 #60199 (Shaun Struwig)。- CROSS JOIN での圧縮を可能にしました。 #60459 (p1rattttt).
- サイズが制限を超えた場合、一時ファイル内で
CROSS JOINを実行できるようにしました。 #63432 (p1rattttt). - 左テーブルと右テーブル両方のカラムを含む不等条件(例:
t1.y < t2.y)を用いたJOINをサポートするようになりました。有効化するには、SET allow_experimental_join_condition = 1を実行します。#60920(lgbo)。 - Map では、キーとして
Float32、Float64、Array(T)、Map(K, V)、Tuple(T1, T2, ...)を使用できるようになりました。これにより #54537 がクローズされました。#59318(李扬)。 - RocksDB の組み込み memtable に依存する代わりに SST ファイルを作成して取り込むことで、
EmbeddedRocksDBへの一括ロード機能を導入しました。これにより、特に StorageEmbeddedRocksDB テーブルへの長時間実行される INSERT クエリにおいて、インポート速度が向上します。また、EmbeddedRocksDBのテーブル設定も導入しました。 #59163 #63324 (Duc Canh Le). - ユーザーは、設定項目
input_format_tsv_crlf_end_of_lineを使用することで、TSV 形式の入力で行末としての CRLF をパースできるようになりました。 #56257 をクローズしました。 #59747(Shaun Struwig)。 - 省略されたフィールドに NULL 値を設定するよう強制する新しい設定
input_format_force_null_for_omitted_fields。 #60887(Constantine Peresypkin)。 - これまで、S3 ストレージと s3 テーブル関数は、tarball、zip、7z などのアーカイブファイルからの
SELECTをサポートしていませんでしたが、現在では、S3 上のアーカイブ内ファイルを順に処理できるようになりました。 #62259 (Daniil Ivanik)。 - 条件関数
clampをサポートしました。 #62377 (skyoct). NPy出力形式を追加。#62430(豪肥肥)。TSVRawの同義語としてRawフォーマットを追加。 #63394 (Unalian).- バージョン 7 の UUID(タイムスタンプベースでランダム要素を含む)を生成する新しい SQL 関数
generateUUIDv7を追加しました。さらに、UUID からバイト列を抽出する新しい関数UUIDToNumと、バージョン 7 の UUID からタイムスタンプ成分を抽出する新しい関数UUIDv7ToDateTimeも追加しました。 #62852 (Alexey Petrunyaka). - Linux および macOS では、プログラムの stdout が圧縮拡張子を持つファイルにリダイレクトされている場合、(何もしないのではなく)対応する圧縮方式で出力を圧縮するようになりました(
INTO OUTFILEと同様の動作になります)。#63662 (v01dXYZ)。 - 多数のテーブルがアタッチされている場合に表示される警告を、テーブル・ビュー・ディクショナリを区別できるように変更しました。 #64180 (Francisco J. Jurado Moreno).
- ClickHouse サーバーの
azureBlobStorage関数で Azure Workload Identity を使用して Azure Blob Storage に対して認証できるようサポートしました。設定ファイルでuse_workload_identityパラメータが有効になっている場合、認証には Workload Identity が使用されます。 #57881(Vinay Suryadevara)。 - TTL 情報を
system.parts_columnsテーブルに追加しました。 #63200 (litlig).
実験的機能
- 事前にすべての型を把握していなくても、任意の型の値を格納できる
Dynamicデータ型を実装しました。Dynamic型は設定allow_experimental_dynamic_typeによって利用可能です。参考: #54864、#63058(Kruglov Pavel)。 - MySQL への接続なしで
MaterializedMySQLデータベースを作成できるようにしました。#63397(Kirill)。 - ある DDL タスクが同じエラーで連続して
max_retries_before_automatic_recovery回(デフォルトでは 100 回)以上失敗した場合に、Replicated データベースのレプリカを自動的に「失われた」とマークし、リカバリを開始するようにしました。また、エントリ実行の初期段階で例外がスローされた場合に、DDL エントリがスキップされる可能性があった不具合も修正しました。#63549(Alexander Tokmakov)。 StorageS3Queueにおいて、失敗したファイルもs3queue_tracked_file_ttl_secおよびs3queue_traked_files_limitのカウントに含めるようにしました。#63638(Kseniia Sumarokova)。
パフォーマンスの改善
- ファイルシステムキャッシュ内での競合を削減しました(パート 4)。バックグラウンドで追加のエビクションを行うことで(
keep_free_space_size(elements)_ratioによって制御)、ファイルシステムキャッシュが限界まで埋まらないようにできます。これにより、クエリのための空き領域予約(tryReserveメソッド)にかかるプレッシャーを軽減できます。また、可能な限りロックフリーな方法で実装しており、通常のキャッシュ利用をブロックしない想定です。#61250(Kseniia Sumarokova)。 INSERT実行中に、新しく作成された projection ブロックのマージをスキップします。#59405(Nikita Taranov)。- 文字列関数
...UTF8について、入力文字列がすべて ASCII 文字の場合は ASCII として処理します。https://github.com/apache/doris/pull/29799 に触発されています。全体として 1.07~1.62 倍の高速化が得られました。いくつかのケースではピークメモリ使用量も減少しています。#61632(李扬)。 - StorageS3 におけるセレクション(
{})グロブのパフォーマンスを改善しました。#62120(Andrey Zvonov)。 - HostResolver が同じ IP アドレスを複数回保持していました。リモートホストが複数の IP を持ち、何らかの理由(たとえばファイアウォールルール)で一部の IP へのアクセスのみ許可され、他が禁止されている場合、禁止された IP のレコードのうち最初のものだけが失敗としてマークされ、各試行でこれらの IP が選択される可能性が残り(そして再度失敗します)。さらに、これを修正したとしても、120 秒ごとに DNS キャッシュが破棄されるため、IP が再び選択され得ます。#62652(Anton Ivashkin)。
- 新しい設定
prefer_merge_sort_block_bytesを追加し、多数のカラムがある場合のマージ時にメモリ使用量を制御しつつ、ソートを 2 倍高速化できるようにしました。#62904(LiuNeng)。 clickhouse-localがより高速に起動するようになりました。以前のバージョンでは、一時ディレクトリが誤って削除されていませんでしたが、現在は削除されます。これにより #62941 がクローズされます。#63074(Alexey Milovidov)。- 新しいアナライザに対するマイクロ最適化を行いました。#63429(Raúl Marín)。
DateTimeがDateTime64と比較される場合でもインデックス解析が動作するようになりました。これにより #63441 がクローズされます。#63443 #63532(Alexey Milovidov)。set型インデックスについて、不要なデータを削除することで少し(約 1.5 倍)高速化しました。#64098(Alexey Milovidov)。- ファイルシステムキャッシュへの書き込み時にデータをコピーしないようにしました。#63401(Kseniia Sumarokova)。
- Azure Blob Storage を利用したバックアップで multicopy を使用するようになりました。#64116(alesapin)。
- 異なるコンテナ間であっても、Azure に対してネイティブコピーを使用できるようにしました。#64154(alesapin)。
- Azure に対するネイティブコピーをついに有効化しました。#64182(alesapin)。
改善
clickhouse-localと、そのショートカットであるclickhouseおよびchで、クエリ文字列またはクエリを含むファイルを位置引数として指定して実行できるようにしました。例:ch "SELECT 1",ch --param_test Hello "SELECT {test:String}",ch query.sql。これにより #62361 がクローズされました。 #63081(Alexey Milovidov)。- ローカルおよび Azure (azure_blob_storage) のオブジェクトストレージで plain_rewritable メタデータを有効にしました。 #63365 (Julia Kartseva).
- 英語スタイルの Unicode 引用符(例: “Hello”、'world')をサポートします。一般的には疑問の余地がありますが、Google Docs などのワードプロセッサでクエリを入力する場合には便利です。これにより #58634 がクローズされました。#63381(Alexey Milovidov)。
- INSERT クエリのカラムリストで末尾のカンマを許可しました。例えば、
INSERT INTO test (a, b, c, ) VALUES ...のように記述できます。#63803(Alexey Milovidov)。 Regexpフォーマット向けの例外メッセージを改善。 #63804 (Alexey Milovidov).Values形式で末尾のカンマを許容するようになりました。たとえば、次のクエリが使用できます:INSERT INTO test (a, b, c) VALUES (4, 5, 6,);。 #63810 (Alexey Milovidov)。- RabbitMQ が破損したメッセージに nack を返すようにしました。#45350 をクローズしました。#60312(Kseniia Sumarokova)。
- デバッグ情報の解釈中に、(サンプリングクエリプロファイラ使用時などの)非同期スタックのアンワインド処理で発生していたクラッシュを修正しました。これにより #60460 がクローズされました。 #60468 (Alexey Milovidov)。
- ディスクとストレージの場合で、S3 エラー 'no key' のメッセージを区別しました。 #61108 (Sema Checherinda).
- プログレスバーは、
system.zeros、system.zeros_mtからのLIMIT句を含む単純なクエリでも動作し(すでにsystem.numbersおよびsystem.numbers_mtでは動作しています)、generateRandomテーブル関数でも動作するようになります。さらに、レコードの総数がmax_rows_to_readの上限を超えている場合には、より早い時点で例外をスローします。これにより #58183 がクローズされます。 #61823 (Alexey Milovidov)。 - YAML 設定における「Merge Key」対応(YAML のちょっと変わった機能なので、あまり気にしないでください)。 #62685 (Azat Khuzhin).
- Replicated ソースで非決定的関数が使用された場合のエラーメッセージを改善しました。 #62896 (Grégoire Pineau).
remoteによる Distributed over Distributed 用 interserver secret を修正。#63013(Azat Khuzhin)。- YAML ファイルで
include_fromがサポートされました。ただし、代わりにconfig.dを使用することを推奨します。#63106(Eduard Karacharov)。 - skim の候補から選択した後でも、ターミナルにそれまでの内容を残すようにしました。 #63261 (FlameFactory).
- Pretty フォーマットや
visibleWidth関数でのフィールド幅計算時に、ANSI エスケープシーケンスが正しく無視されるようになりました。 #63270 (Shaun Struwig)。 - 必要に応じて、エラーコード
NUMBER_OF_ARGUMENTS_DOESNT_MATCHの使用箇所を、より適切なエラーコードに更新しました。 #63406 (Yohann Jardin). os_userとclient_hostnameが、clickhouse-client のコマンドライン補完候補を取得するクエリに対して正しく設定されるようになりました。これにより #63430 が解決されました。 #63433 (Alexey Milovidov).max_block_sizeが 0 に設定されている場合、自動的にデフォルト値に補正されるようにしました。 #63587 (Antonio Andelic).- バイナリの変更が検出された際の自動リネームを容易にするため、
trace_logにbuild_idのALIAS列を追加しました。これは #52086 への対応です。#63656(Zimu Li)。 - オブジェクトストレージディスクで
truncate操作を有効にしました。 #63693 (MikhailBurdukov)。 - キーワード一覧の読み込みはサーバーのリビジョンに依存するようになったため、古いバージョンの ClickHouse サーバーでは無効化されます。CC @azat。 #63786 (Nikita Mikhaylov)。
- ClickHouse のディスクでは、実際のメタデータ形式のバージョンを取得するためにサーバー設定を読み取る必要があります。 #63831 (Sema Checherinda).
- stdout が TTY でない場合は、pretty 形式の制限(
output_format_pretty_max_rows/output_format_pretty_max_value_width)を無効化します。#63942(Azat Khuzhin)。 - AWS Lambda 環境で ClickHouse を使用する場合にも、例外処理が正しく機能するようになりました。著者: Alexey Coolnev。#64014(Alexey Milovidov)。
- HTTP 経由で渡された無効な圧縮データの場合は、
CORRUPTED_DATAではなくCANNOT_DECOMPRESSをスローするように変更。 #64036 (vdimir). - Pretty フォーマットにおける「単一の大きな数値」に関するヒントが、Nullable 型および LowCardinality 型でも機能するようになりました。これにより #61993 が解決されました。 #64084 (Alexey Milovidov)。
- インデックスを用いたパーツのフィルタリング処理の周辺に、メトリクス、ログ、およびスレッド名を追加しました。 #64130 (Alexey Milovidov)。
ATTACHではallow_suspicious_primary_keyを無視し、ALTERでは検証するようにしました。 #64202 (Azat Khuzhin).
ビルド/テスト/パッケージングの改善
- ClickHouse は clang-18 でビルドされるようになりました。clang-tidy-18 による多数の新しいチェックが有効化されました。#60469 (Alexey Milovidov).
- ClickHouse の新しいプラットフォームとして loongarch64 を実験的にサポートしました。#63733 (qiangxuhui).
- Dockerfile は https://github.com/docker-library/official-images/pull/15846 で Docker 公式ライブラリによるレビューを受けました。#63400 (Mikhail f. Shiryaev).
- CI 上のすべてのビルドで、各翻訳単位内のすべてのシンボルに関する情報を CI データベースに収集するようにしました。これにより #63494 が解決されます。#63495 (Alexey Milovidov).
- Apache Datasketches ライブラリを更新しました。これにより #63858 が解決されます。#63923 (Alexey Milovidov).
- バイナリのクロスコンパイル時に、aarch64 Linux 向けの gRPC サポートを有効にしました。#64072 (alesapin).
- aarch64 上での SIGSEGV 発生時のアンワインド処理を修正しました(signal 用スタックが小さいことが原因)。#64058 (Azat Khuzhin).
バグ修正
- デフォルトで
enable_vertical_final設定を無効にしました。この機能にはバグがあるため、使用しないでください: #64543。#64544(Alexander Tokmakov)。 - 複数シャード環境でのバックアップ作成処理を修正 #57684 (Vitaly Baranov).
CREATEクエリのカラムリストからマテリアライズドビュー (MV) の内部テーブルへprojections/indexes/primary keyを渡す処理を修正 #59183(Azat Khuzhin)。- boundRatio の誤ったマージを修正 #60532 (Tao Wang)。
constな low-cardinality 列に対して一部の関数を呼び出すとクラッシュする問題を修正 #61966 (Michael Kolupaev)。- adaptive granularity を使用していないテーブルで FINAL を使用したクエリが誤った結果を返す問題を修正 #62432 (Duc Canh Le).
- メモリコントローラー用の cgroups v2 サポートの検出処理を改善 #62903 (Robert Schulze)。
- クライアントにおける外部テーブルの後続利用を修正 #62964 (Azat Khuzhin).
untuple関数と未解決のラムダ式によるクラッシュを修正 #63131 (Raúl Marín)。- サーバーが接続待ちを開始するタイミングが早すぎた問題を修正 #63181 (alesapin).
- DROP PART コマンド実行後の再起動時に重複するパーツを修正 #63202 (Han Fei).
- 起動時に SQL セキュリティのデフォルト設定を正しく読み込むようにしました #63209 (pufit).
- JOIN フィルタのプッシュダウンにおける filter join の問題を修正 #63234 (Maksim Kita).
- AzureObjectStorage::listObjects で発生する無限ループを修正 #63257 (Julia Kartseva).
- CROSS JOIN が join_algorithm 設定を無視するようになりました #63273 (vdimir)。
- WriteBufferToFileSegment と StatusFile の finalize を修正 #63346 (vdimir).
- まれなケースにおいて ALTER 実行後に発生する SELECT クエリの論理エラーを修正しました #63353 (alesapin).
session_timezoneを使用してX-ClickHouse-Timezoneヘッダーを修正 #63377(Andrey Zvonov)。- グループ化クエリで WITH ROLLUP と LowCardinality 型を使用する際に発生するデバッグアサートを修正 #63398 (Raúl Marín).
- group_by_use_nulls に関する細かな修正 #63405 (vdimir)。
- テーブルメタデータからプロジェクションが削除されているが、パート側には依然としてプロジェクションが残っている場合のプロジェクションパートのバックアップ/リストアを修正しました #63426 (Kseniia Sumarokova).
- MySQL 辞書ソースを修正 #63481 (vdimir)。
- データがない場合に AsyncInsertFlush で QueryFinish を挿入 #63483 (Raúl Marín).
- 修正: system.query_log において used_dictionaries が空になっていた問題 #63487 (Eduard Karacharov).
MergeTreePrefetchedReadPoolの安全性を向上 #63513 (Antonio Andelic).- Sentry を有効化した状態で終了時に発生していたクラッシュを修正(Sentry より先に OpenSSL が破棄されることが原因) #63548 (Azat Khuzhin).
- Keyed hashing を使用する Array および Map のサポートを修正 #63628 (Salvatore Mesoraca)。
- Parquet および(おそらく)StorageMerge 向けフィルタープッシュダウン処理を修正 #63642 (Michael Kolupaev).
- ZooKeeper パスが既に存在する場合は Replicated への変換を行わないようにした #63670 (Kirill)。
- Analyzer: ビューが必要な列のみを読み込むように改善 #63688 (Maksim Kita).
- Analyzer: WINDOW の再定義を禁止 #63694 (Dmitry Novik).
- 実験的な Replicated データベースにおいて flatten_nested に不具合がありました。 #63695 (Nikolai Kochetov).
- #63653 #63722 を修正しました (Nikolai Kochetov)。
- Array(Nothing) から Map(Nothing, Nothing) へキャストできるようにした #63753 (Nikolai Kochetov).
- partial_merge 結合における ILLEGAL_COLUMN エラーを修正 #63755 (vdimir)。
- 修正: ウィンドウ関数における冗長な distinct を削除 #63776 (Igor Nikonov).
- SYSTEM UNLOAD PRIMARY KEY の使用時に発生し得るクラッシュを修正 #63778 (Raúl Marín)。
- 重複した循環エイリアスを含むクエリを修正。#63791 (Nikolai Kochetov).
TokenIteratorを本来あるべき通り遅延評価(lazy)にしました #63801 (Alexey Milovidov).- S3 URI の
endpoint_subpath設定を追加 #63806 (Julia Kartseva). ParallelReadBufferでのデッドロックを修正 #63814 (Antonio Andelic)。- JOIN フィルターのプッシュダウンにおける等価列の問題を修正 #63819 (Maksim Kita)。
- Lazy データベースにおいて DROP 実行後にすべてのディスクからデータを削除するようにしました。 #63848 (MikhailBurdukov).
- 並列レプリカと新しいアナライザを使用してマテリアライズドビュー (MV) から読み取る際に誤った結果が返される問題を修正しました #63861 (Nikita Taranov)。
- keeper-client の
find_super_nodesおよびfind_big_familyコマンドに関する修正 #63862 (Alexander Gololobov)。 - Lambda 実行名を更新 #63864 (Nikolai Kochetov).
- CPU/Real プロファイラが原因の SIGSEGV を修正 #63865 (Azat Khuzhin)。
EXPLAIN CURRENT TRANSACTIONクエリを修正 #63926(Anton Popov)。- アナライザーを修正: 無限再帰状態(turtles all the way down)を解消… #63930 (Yakov Olkhovskiy).
plain_rewritableディスクに対して一部の ALTER TABLE コマンドを許可するようにした #63933(Julia Kartseva)。- 分散環境での再帰CTEに関する修正 #63939(Maksim Kita)。
- Analyzer: COLUMNS の解決処理を修正 #63962 (Dmitry Novik).
- analyzer での LIMIT BY および skip_unused_shards のサポート #63983 (Nikolai Kochetov).
- experimental Kusto 関連の一部の出来の悪い実装に対する修正 #63992 (Yong Wang)。
- 信頼できないバイナリ入力のデシリアライズを、より安全な方法で行うようにしました #64024 (Robert Schulze).
- MergeTree ファミリー以外のテーブルを参照する Distributed テーブルに対して、設定
final= 1 が指定されたクエリの解析を修正しました。 #64037 (Nikolai Kochetov). - recoverLostReplica に不足していた設定を追加 #64040 (Raúl Marín)。
- アナライザーを使用して SQL のセキュリティアクセスチェックを修正 #64079 (pufit)。
- アナライザーを修正: DAG では補間式のみを使用するように変更 #64096 (Yakov Olkhovskiy).
- Azure バックアップが(非ネイティブコピーの場合に)
max_upload_part_sizeではなく 1 MiB(読み取りバッファサイズ)単位でマルチパートブロックを書き込んでいた問題を修正 #64117 (Kseniia Sumarokova). - バックアップコピー時のフォールバック処理を正しく行うよう修正 #64153 (Antonio Andelic).
- CREATE TABLE をマテリアライズドビューとして実行する際に発生する LOGICAL_ERROR を防止 #64174 (Raúl Marín).
- Query Cache: 異なるデータベースに対する同一クエリを別物として扱うようにしました #64199 (Robert Schulze)。
- Keeper では
text_logを無視 #64218 (Antonio Andelic)。 - 論理エラーを修正: prewhere を使用した Buffer テーブルでの不正なキャスト。 #64388 (Nikolai Kochetov).
ClickHouse リリース 24.4, 2024-04-30
アップグレードに関する注意事項
clickhouse-odbc-bridgeとclickhouse-library-bridgeは別々のパッケージになりました。これにより #61677 がクローズされました。#62114 (Alexey Milovidov).- 実験的機能であるレプリカからの並列読み取り用の
max_parallel_replicasを、0に設定できないようにしました(0には意味がないため)。#60140 をクローズしました。#61201 (Kruglov Pavel). - 非推奨となった
LIVE VIEW機能の一部であるINSERT WATCHクエリのサポートを削除しました。#62382 (Alexey Milovidov). optimize_monotonous_functions_in_order_by設定を削除しました。#63004 (Raúl Marín).Replicatedデータベースエンジンから experimental タグを削除しました。現在は Beta 段階です。#62937 (Justin de Guzman).
新機能
- 再帰 CTE をサポートしました。#62074 (Maksim Kita)。
QUALIFY句をサポートしました。#47819 をクローズします。#62619 (Maksim Kita)。- テーブルエンジンに対して権限付与が可能になり、既存ユーザーの動作には影響しません。#60117 (jsc0218)。
- INSERT 操作をサポートし、ローカルにメタデータを保存する必要がない、書き換え可能な S3 ディスクを追加しました。#61116 (Julia Kartseva)。主なユースケースは system テーブルです。
- クライアントでの入力中の構文ハイライトが、構文レベルで動作するようになりました(以前は字句解析レベルで動作していました)。#62123 (Alexey Milovidov)。
DROP TABLE a, b, cのように、複数テーブルを同時に削除することをサポートしました。#58705 (zhongyuankai)。ALTER MODIFY SETTINGによる memory テーブル設定の変更をサポートしました。例:ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;。#62039 (zhongyuankai)。- HTTP インターフェイスに
roleクエリパラメータを追加しました。これはSET ROLE xと同様に動作し、ステートメントを実行する前にロールを適用します。これにより、HTTP インターフェイスでは複数ステートメントが許可されておらず、SET ROLE xとステートメント本体を同時に送信できないという制限を回避できます。この方法で複数ロールを設定することも可能です(例:?role=x&role=y)。これはSET ROLE x, yと同等です。#62669 (Serge Klochkov)。 - テーブルのプライマリキーによるメモリ使用量を解放するための
SYSTEM UNLOAD PRIMARY KEYを追加しました。#62738 (Pablo Marcos)。 system.text_logにvalue1,value2, ...,value10カラムを追加しました。これらのカラムには、メッセージのフォーマットに使用された値が格納されます。#59619 (Alexey Katsman)。- 挿入時に割り当てられた、ブロック内での元の行番号を保持する永続的な仮想カラム
_block_offsetを追加しました。カラム_block_offsetの永続化は、MergeTree 設定enable_block_offset_columnによって有効化できます。パーツの最小ブロック番号またはパーツのミューテーションバージョンのいずれかを保持する仮想カラム_part_data_versionを追加しました。永続的な仮想カラム_block_numberは、もはや実験的とは見なされません。#60676 (Anton Popov)。 - 設定
input_format_json_throw_on_bad_escape_sequenceを追加しました。これを無効にすると、JSON 入力形式で不正なエスケープシーケンスをそのまま保存できます。#61889 (Kruglov Pavel)。
パフォーマンスの向上
- 同値集合を用いた JOIN フィルタのプッシュダウンの改善。 #61216 (Maksim Kita).
JOINの後のフィルタによって常にデフォルト値の行が除外される場合、OUTER JOINをINNER JOINに変換する最適化を行います。この最適化は設定query_plan_convert_outer_join_to_inner_joinで制御でき、デフォルトで有効になっています。#62907 (Maksim Kita).- AWS S3 向けの改善です。クライアントはサーバーにヘッダー 'Keep-Alive: timeout=X' を送信する必要があります。クライアントがそのヘッダーを含むサーバーからのレスポンスを受信した場合、サーバーから送られた値を使用する必要があります。また、クライアント側では、接続クローズ時のレースコンディションを避けるために、有効期限が近い接続は使用しないほうが望ましいです。 #62249 (Sema Checherinda).
- SELECT クエリに対するミューテーションのオーバーヘッドを削減 (v2)。 #60856 (Azat Khuzhin).
- PODArray でより頻繁に呼び出される関数が、強制的にインライン展開されるようになりました。 #61144 (李扬)
- 必須列をすべて読み込み終えた時点でオブジェクトの残りの部分をスキップして JSON の解析を高速化。 #62210 (lgbo).
- file/s3/hdfs/url/... テーブル関数におけるファイルからの単純な INSERT SELECT クエリを改善。並列パースに使用されるスレッド数を制御するための個別の max_parsing_threads 設定を追加。#62404 (Kruglov Pavel).
- 関数
to_utc_timestampとfrom_utc_timestampは、約 2 倍高速になりました。#62583 (KevinyhZou)。 parseDateTimeOrNull、parseDateTimeOrZero、parseDateTimeInJodaSyntaxOrNull、parseDateTimeInJodaSyntaxOrZero関数は、入力の大半がパース不能な値である場合に、従来より大幅に高速 (10倍〜1000倍) に実行されるようになりました。 #62634 (LiuNeng)。system.query_cacheに対する SELECT クエリは、クエリキャッシュに多数のエントリ(例: 100,000 件超)が含まれている場合に、これまでよりも目に見えて高速になりました。 #62671 (Robert Schulze).- ファイルシステムキャッシュでの競合を低減(パート3):空き領域の予約を試行する際に、ロックなしでファイルシステムからの削除を実行。 #61163 (Kseniia Sumarokova).
- ファイルシステムキャッシュの動的なサイズ変更を高速化しました。 #61723 (Kseniia Sumarokova).
INVALIDATE_QUERYを使用する辞書ソースは、起動時に 2 回再読み込みされなくなりました。#62050 (vdimir)。- 主キーを含むブール式の後ろに冗長な
= 1または= 0が追加された場合に、プライマリインデックスが使用されない問題を修正しました。例えば、SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1とSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0は、本来プライマリインデックスを使用できるにもかかわらず、いずれもフルテーブルスキャンを行ってしまいます。 #62142 (josh-hildred). system.remote_data_pathsからのチャンクを、全結果を 1 つの大きなチャンクに蓄積するのではなく、チャンクのストリームとして返すようにしました。これにより、メモリ使用量を抑えつつ、途中経過を表示し、クエリをキャンセルできるようになります。 #62613 (Alexander Gololobov).
実験的機能
azure_allow_parallel_part_upload設定で制御される Azure Blob Storage 向けの並列書き込みバッファをサポートしました。 #62534 (SmitaRKulkarni).- ユーザ空間ページキャッシュが静的 Web ストレージ(
disk(type = web))でも動作するようになりました。有効にするにはクライアント設定use_page_cache_for_disks_without_file_cache=1を使用してください。 #61911 (Michael Kolupaev). Variant型において Bool 型および数値型のバリアントを疑わしいものとして扱わないようにしました。 #61999 (Kruglov Pavel).- パース処理を用いることで String から
Variantへの変換を改善しました。 #62005 (Kruglov Pavel). - JSONExtract 関数で
Variantをサポートしました。 #62014 (Kruglov Pavel). - 型
Variantを比較可能としてマークし、主キーで使用できるようにしました。 #62693 (Kruglov Pavel).
改善
- 利便性のため、
SELECT * FROM numbers()は、SELECT * FROM system.numbersと同様に、制限なしで動作するようになりました。 #61969 (YenchangChan)。 - Kafka の設定に対して、コンシューマー / プロデューサー用の別々のタグを導入しました。これにより、コンシューマー向けのプロパティがプロデューサーインスタンスに、あるいはその逆に指定された場合に、librdkafka(多くのバグを抱えた品質の良くない C ライブラリ)から出る警告を防ぎます(例:
Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance)。Closes: #58983。#58956(Aleksandr Musorin)。 - 関数
date_diffとageは、結果をマイクロ秒精度ではなくナノ秒精度で計算するようになりました。また、unitパラメータに指定できる値としてnanosecond(またはnanoseconds、ns)も利用可能になりました。#61409(Austin Kothig)。 date_truncにナノ秒、マイクロ秒、ミリ秒の単位を追加しました。 #62335 (Misz606)。- 証明書を再読み込みする際に、証明書チェーンも再読み込みするようにしました。 #61671 (Pervakov Grigorii).
- レプリカパスにアクティブなレプリカが存在する場合は、そのレプリカパスに対するテーブルの ATTACH を許可しないことで、エラー #60432 の発生を防ぐようにしました。#61876(Arthur Passos)。
clickhouse-localにinputのサポートを実装。 #61923 (Azat Khuzhin).strictnessがANYのJoinテーブルエンジンは、再読み込み後も結果が一貫するようになりました。同じキーを持つ複数行が挿入された場合、最初の行が優先されます(以前は、テーブル読み込み時にランダムに選択されていました)。#51027 をクローズ。#61972 (vdimir)。- Apache Arrow スキーマから Nullable 列型を自動的に推論するようにしました。 #61984 (Maksim Kita).
- 集約処理中に集約状態の並列マージをキャンセルできるようにしました。例:
uniqExact。 #61992 (Maksim Kita). system.keywordsを使用してサジェストを補完し、内部のあらゆる箇所でもそれらを使用するようにします。 #62000 (Nikita Mikhaylov)。ReplicatedMergeTreeに対するOPTIMIZE FINALは、現在進行中のマージ処理が完了するまで待機してから、最終マージのスケジューリングを再度試みるようになりました。これにより、通常のMergeTreeの挙動により近づきます。 #62067 (Nikita Taranov)。- Hive のテキストファイルからデータを読み込む際、テキストファイルの最初の行を基に入力フィールド数を再設定していましたが、最初の行のフィールド数が Hive テーブルの定義と一致しない場合があります。例えば、Hive テーブルが
test_tbl(a Int32, b Int32, c Int32)のように 3 カラムで定義されているにもかかわらず、テキストファイルの最初の行に 2 フィールドしかない場合、この状況では入力フィールド数は 2 に再設定されます。その後、テキストファイルの次の行に 3 フィールドが存在しても、3 番目のフィールドは読み取られず、デフォルト値の 0 が設定されてしまいますが、これは正しくありません。#62086(KevinyhZou)。 CREATE ASはテーブルのコメントをコピーします。 #62117 (Pablo Marcos)。- テーブル zookeeper にクエリの進行状況を追加。#62152(JackyWoo)。
- トレースコレクタ(Real と CPU)をサーバー全体で有効化できるようにしました。 #62189 (alesapin).
- 設定
lightweight_deletes_syncを追加しました(デフォルト値: 2 - すべてのレプリカが同期的に処理を完了するまで待機)。これは設定mutations_syncに似ていますが、軽量削除の動作にのみ影響します。 #62195 (Anton Popov). - カスタム設定の値を解析する際に、ブール値と整数を区別するようにしました:
SET custom_a = true; SET custom_b = 1;。 #62206 (Vitaly Baranov). - AWS PrivateLink インターフェイスエンドポイント経由での S3 アクセスに対応しました。#60021、#31074、#53761 がクローズされました。#62208(Arthur Passos)。
- 存在しない場合は、clickhouse-client で UDF 用のディレクトリを作成しなくなりました。これにより #59597 が解決されました。#62366(Alexey Milovidov)。
- クエリキャッシュは、システムテーブル(
system.*、information_schema.*、INFORMATION_SCHEMA.*)に対するクエリ結果をキャッシュしなくなりました。 #62376 (Robert Schulze). MOVE PARTITION TO TABLEクエリは、パーツ数の上限を超えないように遅延される場合や、TOO_MANY_PARTS例外がスローされる場合があります。INSERTクエリと同様に、同じ設定および制限が適用されます(max_parts_in_total、parts_to_delay_insert、parts_to_throw_insert、inactive_parts_to_throw_insert、inactive_parts_to_delay_insert、max_avg_part_size_for_too_many_parts、min_delay_to_insert_ms、max_delay_to_insert設定を参照)。#62420(Sergei Trifonov)。- macOS におけるデフォルトのインストールディレクトリを
/usr/binから/usr/local/binに変更しました。これは、macOS El Capitan(2015)で導入された Apple の System Integrity Protection により、sudoを使用しても/usr/binへ書き込みできないようになっているためです。 #62489 (haohang). - transform が常に最初の一致を返すようにしました。 #62518 (Raúl Marín)。
- システムテーブル
blob_storage_logに不足していたhostname列を追加しました。 #62456 (Jayme Bird)。 - 他の system テーブルとの整合性を保つため、
system.backup_logにevent_time列が追加されました。 #62541 (Jayme Bird). - テーブル
system.backup_logは、他の_logテーブルエンジンと同様に、event_date, event_timeからなる「default」のソートキーを持つようになりました。 #62667 (Nikita Mikhaylov)。 RESTORE実行時にテーブルの DEFAULT 式が評価されないようにしました。 #62601 (Vitaly Baranov).- S3 ストレージおよびバックアップについても、S3 ディスクと同じ既定の keep alive 設定が必要です。 #62648 (Sema Checherinda).
- 単一のテーブルを利用する複数のコンシューマからのログメッセージを区別できるようにするため、librdkafka(多くのバグで悪名高い C 言語ライブラリ)のクライアント識別子をログメッセージに追加しました。 #62813 (János Benjamin Antal)。
- Replicated データベースの ZooKeeper パスで、特殊マクロ
{uuid}および{database}を使用できるようにしました。 #62818 (Vitaly Baranov). - HTTP リクエストで異なる認証スキームでもクォータキーを使用できるようにしました。 #62842 (Kseniia Sumarokova).
clickhouse clientおよびclickhouse localのコマンドライン引数--helpによる出力の冗長性を減らしました。従来の出力は今後、--help --verboseによって生成されます。 #62973 (Yarik Briukhovetskyi)。log_bin_use_v1_row_eventsは MySQL 8.3 で削除され、これに合わせて実験的なMaterializedMySQLエンジンを調整しました #60479。#63101(Eugene Klimov)。著者: Nikolay Yankin。
ビルド/テスト/パッケージングの改善
- Rust の依存関係をベンダリングし、(遊び目的の小規模な機能に使っている)Rust コードを、C++ と同様にまともな方法でビルドできるようにしました。 #62297 (Raúl Marín).
- ClickHouse は BoringSSL の代わりに OpenSSL 3.2 を使用するようになりました。 #59870 (Robert Schulze)。なお、OpenSSL は一般的にエンジニアリング文化の面では劣っており(sanitizer のレポートが複数存在し、こちらでパッチを適用する必要があったり、生成ファイルを多用する複雑なビルドシステムであったりします)が、互換性はより優れています。
- ストレステストでは
DROPクエリを 1/2 の確率で無視し、Memory/JOIN テーブルに対するアップグレードチェックではDROPを無視する代わりにTRUNCATEを使用するようにしました。 #61476 (Kruglov Pavel). - Keeper の Docker イメージから /etc/clickhouse-keeper および /var/log/clickhouse-keeper のボリュームを削除しました。 #61683 (Tristan).
- Analyzerがデフォルトで有効になったことで関連性を失ったすべての問題に対するテストを追加しました。 解決: #55794 解決: #49472 解決: #44414 解決: #13843 解決: #55803 解決: #48308 解決: #45535 解決: #44365 解決: #44153 解決: #42399 解決: #27115 解決: #23162 解決: #15395 解決: #15411 解決: #14978 解決: #17319 解決: #11813 解決: #13210 解決: #23053 解決: #37729 解決: #32639 解決: #9954 解決: #41964 解決: #54317 解決: #7520 解決: #36973 解決: #40955 解決: #19687 解決: #23104 解決: #21584 解決: #23344 解決: #22627 解決: #10276 解決: #19687 解決: #4567 解決: #17710 解決: #11068 解決: #24395 解決: #23416 解決: #23162 解決: #25655 解決: #11757 解決: #6571 解決: #4432 解決: #8259 解決: #9233 解決: #14699 解決: #27068 解決: #28687 解決: #28777 解決: #29734 解決: #61238 解決: #33825 解決: #35608 解決: #29838 解決: #35652 解決: #36189 解決: #39634 解決: #47432 解決: #54910 解決: #57321 解決: #59154 解決: #61014 解決: #61950 解決: #55647 解決: #61947. #62185 (Nikita Mikhaylov).
- アナライザで修正済み、または既に関連性がなくなった issue から、さらにテストを追加。 Closes: #58985 Closes: #59549 Closes: #36963 Closes: #39453 Closes: #56521 Closes: #47552 Closes: #56503 Closes: #59101 Closes: #50271 Closes: #54954 Closes: #56466 Closes: #11000 Closes: #10894 Closes: https://github.com/ClickHouse/ClickHouse/issues/448 Closes: #8030 Closes: #32139 Closes: #47288 Closes: #50705 Closes: #54511 Closes: #55466 Closes: #58500 Closes: #39923 Closes: #39855 Closes: #4596 Closes: #47422 Closes: #33000 Closes: #14739 Closes: #44039 Closes: #8547 Closes: #22923 Closes: #23865 Closes: #29748 Closes: #4222. #62457 (Nikita Mikhaylov).
- OpenSSL が動的リンクされている場合のビルドエラーを修正しました(注: これは通常はサポートされておらず、IBM の s390x プラットフォームにのみ必要です)。 #62888 (Harry Lee)。
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
- クォーラム挿入トランザクションの取り消し時に発生するロジックエラーを修正。#61953(Han Fei)。
- COUNT(*) で FILTER 句を使用した場合に発生するパーサーエラーを修正 #61357 (Duc Canh Le)。
group_by_use_nulls、grouping sets、analyzer、materialize/constant における論理エラーを修正 #61567 (Kruglov Pavel)。- 移動済みパーツを削除する前にマージをキャンセルするように変更 #61610 (János Benjamin Antal).
- Apache Arrow における abort の問題を修正 #61720 (Kruglov Pavel).
- 特定のディスクに対応する正しいパス上で
convert_to_replicatedフラグを検索するようにしました #61769 (Kirill)。 - distributed_foreground_insert/distributed_background_insert_batch における接続のデータ競合が発生する可能性を修正しました #61867 (Azat Khuzhin).
- 行ベースの入力形式でスキップできるように、CANNOT_PARSE_ESCAPE_SEQUENCE エラーを解析エラーとして扱うようにした #61883 (Kruglov Pavel).
- http_wait_end_of_query が使用されている場合に、HTTP の出力フォーマットで例外メッセージを書き出す処理を修正 #61951 (Kruglov Pavel)。
- LowCardinality と JSONExtact 関数を組み合わせた場合の正しい修正 #61957(Nikita Mikhaylov)。
- Row Policy に式がない場合に Engine Merge がクラッシュする #61971(Ilya Golshtein)。
- WriteBufferAzureBlobStorage のデストラクタで発生する未処理の例外を修正 #61988 (SmitaRKulkarni).
- ReplicatedMergeTree におけるカラム定義なしの CREATE TABLE を修正 #62040 (Azat Khuzhin).
- 複合シャーディングキー利用時の
optimize_skip_unused_shards_rewrite_inを修正 #62047 (Azat Khuzhin). - リダイレクト時に ReadWriteBufferFromHTTP が適切な Host ヘッダーを設定するようにしました #62068 (Sema Checherinda)。
- 外部テーブルでデータ型 Bool をパースできなかった問題を修正 #62115 (Duc Canh Le).
- Analyzer: クエリパラメータの解決を修正 #62186 (Dmitry Novik)。
- 読み取り専用モード時のパーツの復元処理を修正 #62207 (Vitaly Baranov).
- SQL UDF を含むインデックス定義で発生していたクラッシュを修正 #62225 (vdimir)。
- analyzer での generateRandom における NULL のランダムシードを修正。 #62248 (Nikolai Kochetov).
- Distinct Transform における const 列の処理を正しく行うようにしました #62250 (Antonio Andelic).
- FINAL 修飾子を含むクエリ向けの Parts Splitter を修正 #62268(Nikita Taranov)。
- Analyzer: パラメータ化ビューへのエイリアス解決を修正 #62274 (Dmitry Novik).
- Analyzer: 親スコープからの名前解決を修正 #62281 (Dmitry Novik)。
- nullable な非ネイティブ数値カラムに対する
argMaxを修正 #62285 (Raúl Marín)。 - Ordinary データベースにおけるマテリアライズドビューの BACKUP および RESTORE の動作を修正 #62295 (Vitaly Baranov).
- Context 内のスカラーにおけるデータ競合を修正 #62305 (Kruglov Pavel)。
- マテリアライズドビューの主キーを修正 #62319 (Murat Khairulin).
- マルチスレッドの
INSERTパイプラインをサポートしていないテーブルに対しては構築しないようにしました #62333 (vdimir)。 - 分散クエリで位置指定引数を扱う analyzer を修正 #62362 (flynn).
- analyzer の Merge エンジンにおける additional_table_filters のフィルタープッシュダウンを修正 #62398 (Kruglov Pavel)。
- analyzer で GLOBAL IN テーブルクエリを修正。 #62409 (Nikolai Kochetov)。
- パーティション書き込み時に s3/hdfs/azure エンジンで設定 truncate_on_insert/create_new_file_on_insert が反映されるようにしました #62425 (Kruglov Pavel).
- AzureBlobStorage のバックアップの復元パスを修正 #62447 (SmitaRKulkarni)。
- SimpleSquashingChunksTransform を修正 #62451 (Nikita Taranov)。
- ネストされたラムダ式のキャプチャを修正。 #62462 (Nikolai Kochetov).
- 再帰型を含む Protobuf 読み込み時のクラッシュを回避 #62506 (Raúl Marín).
- 1 つのパーティションを自身に移動する処理で発生していたバグを修正 #62524 (helifu)。
- LIMIT句におけるスカラーサブクエリを修正 #62567 (Nikolai Kochetov)。
- 実験的かつサポート対象外の Hive エンジンで発生していたセグメンテーションフォルトを修正しました。そもそもこのエンジンはあまり気に入っていませんが #62578(Nikolay Degterinsky)。
- groupArraySorted のメモリリークを修正 #62597 (Antonio Andelic)。
- largestTriangleThreeBuckets のクラッシュを修正 #62646 (Raúl Marín).
- より高い解像度向けに tumble[Start,End] と hop[Start,End] を修正 #62705 (Jordi Villar)。
- argMin/argMax コンビネータの状態を修正 #62708 (Raúl Marín).
- キャッシュロック競合の最適化によりキャッシュ内の一時データ処理が失敗する問題を修正 #62715 (Kseniia Sumarokova)。
- 関数
mergeTreeIndexで発生するクラッシュを修正 #62762(Anton Popov)。 - fix: update: ネストされたマテリアライズド列: サイズチェックの修正 #62773 (Eliot Hautefeuille).
- analyzer を使用した CTE で FINAL 修飾子が考慮されない問題を修正 #62811 (Duc Canh Le)。
- 関数
formatRowがJSONフォーマットおよび HTTP インターフェイス使用時にクラッシュする問題を修正 #62840 (Anton Popov)。 - Azure: エンドポイントオブジェクトからの最終 URL の構築処理を修正 #62850 (Daniel Pozo Escalona).
- GCD コーデックを修正 #62853 (Nikita Taranov).
- ハイパーレクタングルにおける LowCardinality(Nullable) キーの問題を修正 #62866 (Amos Bird)。
- 入力値が UInt32 を超える場合における Joda 構文での fromUnixtimestamp の問題を修正 #62901 (KevinyhZou)。
- sum(nullable) に対して optimize_rewrite_aggregate_function_with_if を無効化しました #62912 (Raúl Marín).
- ソーステーブルとカラム型が異なる StorageBuffer に対する PREWHERE を修正。 #62916 (Nikolai Kochetov).
- キャッシュ内の一時データによるキャッシュキー用ディレクトリ作成失敗時の誤った処理を修正 #62925 (Kseniia Sumarokova).
- gRPC: IPv6 ピアとの接続時のクラッシュを修正 #62978 (Konstantin Bogdanov).
- レプリケーションフェッチ中に発生し得る CHECKSUM_DOESNT_MATCH(など)を修正 #62987 (Azat Khuzhin).
- キャッシュ内の一時データで未処理例外により終了してしまう問題を修正 #62998 (Kseniia Sumarokova).
- optimize_rewrite_aggregate_function_with_if における暗黙的キャストを修正 #62999 (Raúl Marín)。
- ~RestorerFromBackup の未処理例外を修正 #63040 (Vitaly Baranov)。
- セカンダリクエリでは
GROUP BYキーからサーバー定数を削除しないようにしました。 #63047 (Nikolai Kochetov). - 関数
absの単調性に関する誤った判定を修正 #63097 (Duc Canh Le)。 - MongoDB エンジンで SSL ハンドシェイク用のサーバー名を設定 #63122 (Alexander Gololobov)。
- MongoDB のワイヤプロトコルバージョンチェックで、データベース名 "config" の代わりにユーザー指定のデータベースを使用するようにした #63126 (Alexander Gololobov)。
ClickHouse 24.3 LTS リリース, 2024-03-27
アップグレード時の注意事項
allow_experimental_analyzer設定はデフォルトで有効になっており、クエリ解析を互換性と機能面がより充実した新しい実装に切り替えます。「analyzer」機能は experimental ではなく beta とみなされます。従来の動作に戻したい場合は、compatibilityを24.2に設定するか、allow_experimental_analyzer設定を無効にしてください。YouTube の動画を視聴する。- ClickHouse は、通常は UTF-8 である String データ型に任意のバイナリデータを格納できます。一方、Parquet/ORC/Arrow の String は UTF-8 のみをサポートします。そのため、ClickHouse の String データ型に対して Arrow で使用するデータ型として、String か Binary かを選択できるようになっています。これは
output_format_parquet_string_as_string、output_format_orc_string_as_string、output_format_arrow_string_as_stringという設定で制御されます。Binary を使う方がより正確で互換性も高いものの、多くの場合はデフォルトで String を使用する方がユーザーの期待に合致します。Parquet/ORC/Arrow は lz4 や zstd を含む多くの圧縮方式をサポートしており、ClickHouse はそれらすべての圧縮方式をサポートしています。一部の性能の劣るツールは、高速なlz4圧縮方式をサポートしていないため、デフォルトではzstdを設定しています。これはoutput_format_parquet_compression_method、output_format_orc_compression_method、output_format_arrow_compression_methodという設定で制御されます。Parquet と ORC についてはデフォルトをzstdに変更しましたが、Arrow については変更していません(低レベル用途向けであることを重視しているためです)。#61817(Alexey Milovidov)。 - 新しい ClickHouse バージョンでは、関数
geoDistance、greatCircleDistance、greatCircleAngleは、すべての引数が Float64 の場合、内部計算および戻り値の型として 64 ビット倍精度浮動小数点データ型を使用します。この変更により、#58476 が解決されます。以前のバージョンでは、これらの関数は常に Float32 を使用していました。geo_distance_returns_float64_on_float64_argumentsをfalseに設定するか、compatibilityを24.2以前に設定することで、従来の動作に切り替えることができます。#61848(Alexey Milovidov)。Geet Patel との共同作業。 - インメモリデータパーツはバージョン 23.5 から非推奨となり、バージョン 23.10 以降はサポートされていません。このリリースで、残っていたコードが削除されました。#55186 および #45409 の継続対応です。インメモリデータパーツは、バージョン 23.5 より前かつ、MergeTree テーブルに対して対応する SETTINGS を明示的に指定して手動で有効化した場合にのみ利用可能だったため、実際に使用されている可能性は低いと考えられます。インメモリデータパーツが存在するか確認するには、次のクエリを実行します:
SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type。インメモリデータパーツの使用を無効化するには、ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULTを実行します。古い ClickHouse リリースからアップグレードする前に、インメモリデータパーツが存在しないことをまず確認してください。インメモリデータパーツが存在する場合は、最初にそれらを無効化し、その後インメモリデータパーツがなくなるまで待ってからアップグレードを続行してください。#61127 (Alexey Milovidov)。 system.zookeeperテーブル内の列名をduration_msからduration_microsecondsに変更し、実際には持続時間がマイクロ秒単位であることを反映しました。 #60774 (Duc Canh Le)。- クエリレベル設定
async_insertとdeduplicate_blocks_in_dependent_materialized_viewsが同時に有効になっている場合、受信される INSERT クエリを拒否します。この挙動は設定throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insertによって制御されており、デフォルトで有効です。これは https://github.com/ClickHouse/ClickHouse/pull/59699 の続きであり、https://github.com/ClickHouse/ClickHouse/pull/59915 のブロッカーを解消するために必要な変更です。#60888(Nikita Mikhaylov)。 - ユーティリティ
clickhouse-copierは GitHub 上の別リポジトリ https://github.com/ClickHouse/copier に移動されました。バンドルには同梱されなくなりましたが、引き続き個別にダウンロードして利用できます。これにより、次の issue がクローズされます: #60734 これにより、次の issue がクローズされます: #60540 これにより、次の issue がクローズされます: #60250 これにより、次の issue がクローズされます: #52917 これにより、次の issue がクローズされます: #51140 これにより、次の issue がクローズされます: #47517 これにより、次の issue がクローズされます: #47189 これにより、次の issue がクローズされます: #46598 これにより、次の issue がクローズされます: #40257 これにより、次の issue がクローズされます: #36504 これにより、次の issue がクローズされます: #35485 これにより、次の issue がクローズされます: #33702 これにより、次の issue がクローズされます: #26702。 - MySQL との互換性を高めるために、互換用エイリアス
locateはデフォルトで引数(needle, haystack[, start_pos])を受け付けるようになりました。以前の挙動である(haystack, needle[, start_pos])は、function_locate_has_mysql_compatible_argument_order = 0を設定することで元に戻せます。 #61092 (Robert Schulze). MergeTreeテーブルのORDER BY句でSimpleAggregateFunctionをデフォルトで禁止しました(AggregateFunctionが禁止されているのと同様ですが、SimpleAggregateFunctionが禁止される理由は、それらが比較不能なためです)。これらを許可するにはallow_suspicious_primary_keyを使用してください。 #61399 (Azat Khuzhin).Ordinaryデータベースエンジンは非推奨になりました。サーバーがこれを使用している場合、clickhouse-client で警告が表示されます。この変更により #52229 がクローズされました。#56942(shabroo)。
新機能
- バックアップの読み書きで
zipに加えてtarをサポートしました。#59535 (josh-hildred). - S3 Express バケットのサポートを実装しました。#59965 (Nikita Taranov).
- 別のディスクからパーツをアタッチできるようにしました(ハードリンクではなくコピーを使用)。#60112 (Unalian).
- サイズ上限付きの
Memoryテーブル:min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep, max_rows_to_keepの各設定で制御されます。#60612 (Jake Bamrah). - 待機中クエリ数と実行中クエリ数に対する個別の制限を追加しました。
async_load_databasesにより待機しているクエリ数を制限する新しいサーバー設定max_waiting_queriesを追加しました。既存の実行中クエリ数の制限には、待機中クエリは含まれなくなりました。#61053 (Sergei Trifonov). - パーサーに含まれるすべてのキーワードを保持するテーブル
system.keywordsを追加しました。主に、ファジングや構文ハイライトをより良くするために使用されます。#51808 (Nikita Mikhaylov). ATTACH PARTITION ALLをサポートしました。#61107 (Kirill Nikiforov).- 新しい関数
getClientHTTPHeaderを追加しました。これにより #54665 がクローズされます。@lingtaolf との共著です。#61820 (Alexey Milovidov). generate_seriesをテーブル関数として追加しました(既存のnumbers関数に対する PostgreSQL 互換エイリアス)。この関数は自然数の等差数列からなるテーブルを生成します。#59390 (divanik).topK/topkWeighed用のモードを追加し、値の個数とその誤差を返せるようにしました。#54508 (UnamedRus).DateTimeまたはDateTime64型の値についてミリ秒部分を返す関数toMillisecondを追加しました。#60281 (Shaun Struwig).- clickhouse-server 向けに HTTP リダイレクトハンドラを設定できるようにしました。たとえば、
/を Play UI にリダイレクトさせることができます。#60390 (Alexey Milovidov).
パフォーマンスの向上
- 不要で高コストなメモリコピーを省くために、
dotProduct関数を最適化しました。#60928(Robert Schulze)。 - 256ビット整数の出力を30倍高速化。 #61100 (Raúl Marín).
- テーブルのプライマリキーにほとんど役に立たないカラムが含まれている場合は、それらをメモリに保持しないでください。これは、新しい設定
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columnsによって制御され、デフォルト値は0.9です。つまり、複合プライマリキーにおいて、あるカラムの値が全体の少なくとも 90% の行で変化する場合、そのカラム以降のカラムはメモリに読み込まれません。 #60255 (Alexey Milovidov)。 - 複数の
Nullable列を扱う場合のシリアライズ済み集約メソッドの性能を向上しました。 #55809 (Amos Bird). - Lazy が ALL JOIN のパフォーマンスを向上させるために JSON 出力を生成するようになりました。 #58278 (LiuNeng).
- AWS S3 などの外部サービスへの HTTP/HTTPS 接続を、あらゆる用途で再利用できるようにしました。レスポンスが 3xx や 4xx の場合でも同様です。 #58845 (Sema Checherinda)。
- 集約関数
argMin/argMax/any/anyLast/anyHeavy、およびORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1クエリの改善。#58640(Raúl Marín)。 - カラムフィルタに対する単純な最適化。一部のケースでは、ピークメモリ使用量を元の44%まで削減できます。 #59698 (李扬)。
- 結果型の実体型が数値型である場合に、
multiIf関数をカラムナ形式で実行します。 #60384 (李扬)。 - ミューテックスを高速化(ほぼ 2 倍)。 #60823 (Azat Khuzhin).
- 分散クエリの終了時に複数の接続を並列にドレインするように変更。 #60845 (lizhuoyu5).
Nullableな数値列またはNullableな文字列列間のデータ移動を最適化し、一部のマイクロベンチマークを改善しました。 #60846 (李扬).- ファイルシステムキャッシュに対する操作におけるロック競合の影響が小さくなりました。 #61066 (Alexey Milovidov).
- 誤ったコンパイラの最適化を防ぐことで、ARRAY JOIN とその他の JOIN を最適化しました。#61074 をクローズしました。 #61075(李扬)。
- 構文エラーを含むクエリにおいて、
COLUMNSマッチャーに正規表現が含まれている場合、その正規表現は本来一度だけコンパイルされるべきところ、パーサーのバックトラッキングのたびに毎回コンパイルされていました。これは根本的な誤りでした。コンパイル済みの正規表現は AST に格納されていました。しかし AST の A は「abstract(抽象)」を意味し、重量級オブジェクトを含むべきではありません。AST の一部はパース中に生成および破棄される可能性があり、大量のバックトラッキングを伴う場合もあります。これによりパース処理が低速化し、その結果として読み取り専用ユーザーによる DoS を許してしまいます。しかし主な問題は、これが fuzzer による進捗を妨げることです。 #61543(Alexey Milovidov)。 - 単一の値に対する IN 演算子を最適化する新しい analyzer パスを追加しました。 #61564 (LiuNeng).
- DNSResolver は、解決済み IP アドレスの集合をシャッフルし、AWS S3 の複数エンドポイントを一様に利用できるようにします。 #60965 (Sema Checherinda)。
実験的機能
- Azure Blob Storage 向けの並列読み取りをサポートしました。これにより、実験的な Azure オブジェクトストレージのパフォーマンスが向上します。 #61503 (SmitaRKulkarni).
- S3 と同様に、Azure Blob Storage 向けの非同期
WriteBufferを追加しました。これにより、実験的な Azure オブジェクトストレージのパフォーマンスが向上します。 #59929 (SmitaRKulkarni). - Azure Blob Storage を使用する際、バックアップ I/O にマネージド ID を使用するようにしました。さらに、存在しないコンテナを ClickHouse が作成しようとするのを防ぐための設定を追加しました。コンテナの作成にはストレージアカウントレベルでの権限が必要です。 #61785 (Daniel Pozo Escalona).
- 並列レプリカで
IN句のサブクエリを使用できるようにする設定parallel_replicas_allow_in_with_subquery = 1を追加しました。 #60950 (Nikolai Kochetov). - 「ゼロコピー」レプリケーションに関する変更: テーブルが削除されるとき、そのテーブルに関連するすべてのゼロコピー ロックを削除する必要があります。これらのロックを含むディレクトリも削除する必要があります。 #57575 (Sema Checherinda).
改善
- デフォルトのテーブルエンジンとして
MergeTreeを使うようにしました。 #60524 (Alexey Milovidov) - デフォルトで
output_format_pretty_row_numbersを有効にしました。これにより使い勝手が向上します。 #61791 (Alexey Milovidov). - 以前のバージョンでは、Pretty フォーマットでの一部の数値表示が十分に「きれい」ではありませんでした。 #61794 (Alexey Milovidov)。
SHOW CREATE TABLEクエリの結果など、結果セットに単一の値しか含まれない場合、Pretty 形式での長い値は途中で切り詰められなくなりました。 #61795 (Alexey Milovidov).clickhouse-localと同様に、clickhouse-clientでも--formatオプションのエイリアスとして--output-formatオプションを受け付けるようになりました。これにより #59848 がクローズされました。 #61797 (Alexey Milovidov)。stdoutが端末であり、出力フォーマットが指定されていない場合、clickhouse-clientなどのツールは対話モードと同様に、デフォルトでPrettyCompactを使用します。clickhouse-clientとclickhouse-localは、入力および出力フォーマットに関するコマンドライン引数を一貫した方法で処理します。これにより #61272 が解決されました。 #61800 (Alexey Milovidov)。- Pretty フォーマットで数値の桁グループをアンダースコアで区切って表示し、可読性を向上しました。これは新しい設定項目
output_format_pretty_highlight_digit_groupsによって制御されます。 #61802 (Alexey Milovidov). SYSTEM FLUSH DISTRIBUTEDによって初期の INSERT 設定を上書きできるようにしました。 #61832 (Azat Khuzhin).- プロセッサのプロファイリング(ソートや集約などに費やした時間と入出力バイト数)をデフォルトで有効化。 #61096 (Azat Khuzhin).
- Filesystem データベースで、フォーマット拡張子のないファイルをサポートしました。 #60795 (Kruglov Pavel).
- すべてのフォーマット名の大文字・小文字を区別しないようにしました。たとえば、Tsv でも TSV でも tsv でも、あるいは rowbinary でも同じように扱われます。#60420(豪肥肥)。今後もできれば正しく表記していただけるとありがたいです(例:
JSON😇 であってJson🤮 ではなく)が、お好みの表記でも問題ありません。 distributed_ddl_output_mode設定にnone_only_activeモードを追加しました。 #60340 (Alexander Tokmakov).- 高度なダッシュボードで、複数系列の折れ線グラフの配色がわずかに改善されました。 #60391 (Alexey Milovidov).
- Advanced ダッシュボードでは、スクロールしてもコントロールが常に表示されるようになりました。これにより、上までスクロールし直さずに新しいチャートを追加できます。 #60692 (Alexey Milovidov).
- マテリアライズドビューに対して
MODIFY COLUMNクエリを実行する際は、すべてのカラムが存在することを確認するために内部テーブルの構造を確認してください。 #47427 (sunny)。 String型とEnum型は、配列、UNIONクエリ、条件式など、同じコンテキストで使用できます。これにより #60726 が解決されました。#60727(Alexey Milovidov)。- クエリ処理のための外部データの構造内で Enum を宣言できるようにしました(これはクエリに対して提供できる、その場で作成される一時テーブルです)。 #57857(Duc Canh Le)。
- マージ対象のパーツを選択する際に軽量削除行を考慮し、生成されるパーツのディスクサイズをより正確に見積もれるようにしました。 #58223 (Zhuo Qiu).
- より多くのシステムテーブルのカラムにコメントを追加しました。https://github.com/ClickHouse/ClickHouse/pull/58356 の続きです。#59016(Nikita Mikhaylov)。
- これにより
PREWHEREで仮想カラムを使用できるようになりました。_part_offsetのような非定数の仮想カラムに対して有効です。#59033(Amos Bird)。仮想カラムの全体的な使い勝手が向上しました。PREWHEREで仮想カラムを使用することが許可されるようになりました(_part_offsetのような非定数の仮想カラムに対して有効です)。また、設定describe_include_virtual_columnsを有効にしたDESCRIBEクエリにおいて、カラムのコメントとして仮想カラムの組み込みドキュメントを参照できるようになりました。#60205(Anton Popov)。 - 固定キーを使用する代わりに、オブジェクトストレージがオブジェクト削除可否を判定するためのキーを生成するようになりました。 #59495 (Sema Checherinda).
- オブジェクトストレージタイプとして「local_blob_storage」の代わりに「local」を許可できるようにした。 #60165 (Kseniia Sumarokova).
DETACH/サーバーシャットダウン時およびSYSTEM FLUSH DISTRIBUTED実行時に、Distributed エンジンの保留中の INSERT ブロックを並列でフラッシュするようにしました(並列実行は、そのテーブルにマルチディスクポリシーが設定されている場合にのみ機能します(現状の Distributed エンジン内のテーブルはすべてこれに該当します))。 #60225 (Azat Khuzhin).- マージ時に read-through キャッシュを強制するための設定を追加しました。 #60308 (Kseniia Sumarokova).
- MySQL 互換プロトコルの改善。Issue #57598 では、トランザクション処理に関する挙動の違いが指摘されています。アクティブなトランザクションが存在しない状態で発行された COMMIT/ROLLBACK 文が、MySQL の挙動とは異なりエラーとして報告されていました。#60338(PapaToemmsn)。
substring関数に新しいエイリアスbyteSliceが追加されました。 #60494 (Robert Schulze).- あいまいさを減らすため、サーバー設定
dns_cache_max_sizeの名称をdns_cache_max_entriesに変更しました。 #60500 (Kirill Nikiforov). SHOW INDEX | INDEXES | INDICES | KEYSは、もはやプライマリキー列でソートしなくなりました(この動作は直感的ではありませんでした)。#60514(Robert Schulze)。- Keeper の改善点: データ損失を防ぐため、不正なスナップショットが検出された場合は起動時に異常終了するようにしました。 #60537 (Antonio Andelic).
- tzdata を 2024a に更新しました。 #60768 (Raúl Marín).
- Keeper の改善: 設定で
leadership_expiry_msをサポートするようにしました。 #60806 (Brokenice0415). - 設定
input_format_try_infer_exponent_floatsに関わらず、JSON フォーマットで指数表記の数値を常に推論するようにしました。JSON オブジェクトから Named Tuple を推論する際に、例外をスローする代わりに曖昧なパスに String 型を使用できるようにする設定input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objectsを追加しました。 #60808 (Kruglov Pavel). - MySQL で一般的に使用される
START TRANSACTION構文のサポートを追加し、https://github.com/ClickHouse/ClickHouse/discussions/60865 を解決しました。#60886(Zach Naimon)。 nullを最大値または最小値として扱えるように、full-sorting merge join アルゴリズム向けのフラグを追加しました。これにより、Apache Spark などの他の SQL システムと動作の互換性を持たせることができます。 #60896 (loudongfeng).clickhouse-clientとclickhouse-localで、ファイル拡張子から出力フォーマットを自動判別できるようにしました。 #61036 (豪肥肥).- Linux の cgroup 値が変更された場合に、実行時にメモリ制限を更新するようになりました。 #61049 (Han Fei).
- 誤って追加漏れとなっていた関数
toUInt128OrZeroを追加しました(このミスは https://github.com/ClickHouse/ClickHouse/pull/945 に関連しています)。互換性エイリアスであるFROM_UNIXTIMEとDATE_FORMAT(これらは ClickHouse 固有のものではなく、MySQL 互換性のためだけに存在します)を、SQL 互換エイリアスに求められるとおり、大文字小文字を区別しないようにしました。 #61114(Alexey Milovidov)。 - アクセスチェックを改善し、対象ユーザーが(より広い権限に包含されているだけで)取り消し対象の権限自体は個別には保持していない場合でも、その権限を取り消せるようにしました。例:
GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;。#61115(pufit)。 Nullable列に対するhas()関数の動作を修正(#60214 を修正)。#61249(Mikhail Koviazin)。- 現在、サブツリー
<include from_zk="/path" merge="true">に対する設定の置換で、属性merge="true"を指定できるようになりました。
この属性が指定されている場合、ClickHouse はサブツリーを既存の設定とマージします。指定されていない場合のデフォルト動作は、新しい内容を設定に追記することです。 #61299 (alesapin)。 - 仮想メモリマッピング用の非同期メトリクス
VMMaxMapCountとVMNumMapsを追加。 #60662 をクローズ。 #61354(Tuan Pham Anh)。 - 一時データを作成するすべての箇所で
temporary_files_codec設定を使用するようにしました。たとえば、外部メモリでのソートや外部メモリでの GROUP BY などです。以前はpartial_mergeJOIN アルゴリズムでのみ機能していました。 #61456 (Maksim Kita)。 - クエリパースの複雑さを制限できる新しい設定
max_parser_backtracksを追加。 #61502(Alexey Milovidov)。 - ファイルシステムキャッシュの動的リサイズ時の競合を軽減。 #61524 (Kseniia Sumarokova).
- 今後書き換えられる予定のため、StorageS3 queue の sharded モードを禁止しました。 #61537 (Kseniia Sumarokova).
- タイプミスを修正し、
use_leagcy_max_levelをuse_legacy_max_levelに変更しました。 #61545 (William Schoeffel)。 system.blob_storage_log内の重複エントリをいくつか削除しました。 #61622 (YenchangChan).- MySQL 互換のために
current_user関数を互換エイリアスとして追加しました。 #61770 (Yarik Briukhovetskyi). - x86-64 / ARM 混在クラスタにおける浮動小数点の集約関数状態の不整合を修正 #60610 (Harry Lee).
ビルド/テスト/パッケージングの改善
- リアルタイムクエリプロファイラが AArch64 でも動作するようになりました。以前のバージョンでは、プログラムが syscall 内で時間を費やしていない場合にのみ動作していました。 #60807 (Alexey Milovidov).
- ClickHouse のバージョンが Docker ラベルに追加されました。これにより #54224 がクローズされました。 #60949 (Nikolay Monkov).
prqlcを 0.11.3 にアップグレードしました。 #60616 (Maximilian Roos).clickhouse-localに汎用的なクエリテキストファザーを追加しました。 #61508 (Alexey Milovidov).
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
- MergeTree において finished_mutations_to_keep=0 の動作を修正(ドキュメントでは 0 はすべてを保持することを意味するとされているため)#60031(Azat Khuzhin)。
- FINAL 最適化に問題がありました。著者は次のように述べています: "PartsSplitter invalid ranges for the same part". #60041 (Maksim Kita).
- 実験的機能でありサポート対象外の Apache Hive に不具合がありました。#60262 (shanfengp).
- 実験的な parallel replicas 機能に対する改善: parallel replicas が変更された場合に再解析を強制するようにしました #60362 (Raúl Marín)。
- 新しいディスク構成オプションにおける plain メタデータ型の扱いを修正 #60396(Kseniia Sumarokova)。
- mapContainsKeyLike における論理エラー「Cannot capture column because it has incompatible type」を修正 #60451(Kruglov Pavel)。
- CREATE TABLE のスカラーサブクエリを計算しないようにしました。 #60464 (Nikolai Kochetov).
- エラーにより多数の行がスキップされる場合の並列パース時に発生するデッドロックを修正 #60516 (Kruglov Pavel).
- 実験的な KQL (Kusto) サポートに不具合があったため、
max_query_size_for_kql_compound_operatorを修正しました: #60534 (Yong Wang)。 - Keeper の修正:コミットログの待機にタイムアウトを追加 #60544 (Antonio Andelic)。
- 日付型に対して数値に関するヒントを出力しないようにしました #60577 (Raúl Marín)。
- フィルタで非決定的関数を使用する場合の MergeTree からの読み取りを修正 #60586 (Kruglov Pavel)。
- 不正な互換性設定値型に起因する論理エラーを修正 #60596 (Kruglov Pavel).
- fix(prql): 堅牢なパニックハンドラ #60615 (Maximilian Roos).
intDivの decimal 型および date 型の引数に対する処理を修正 #60672 (Yarik Briukhovetskyi).- 修正: ALTER MODIFY クエリで CTE を展開 #60682 (Yakov Olkhovskiy).
- Atomic/Ordinary 以外のデータベースエンジン(例: Memory)向けの system.parts を修正 #60689 (Azat Khuzhin)。
- パラメータ化ビューで発生する "Invalid storage definition in metadata file" エラーを修正 #60708 (Azat Khuzhin).
- CompressionCodecMultiple のバッファオーバーフローを修正 #60731 (Alexey Milovidov).
- SQL/JSON から無効な値を除去 #60738 (Alexey Milovidov).
- 集約関数 quantileGK から不正なアサーションを削除 #60740 (李扬)。
- streams を 1 に設定して insert-select および insert_deduplication_token のバグを修正 #60745(Jordi Villar)。
- サポートされていないマルチパートアップロード操作でカスタムメタデータヘッダーを設定できないようにしました #60748 (Francisco J. Jurado Moreno).
- toStartOfInterval 関数を修正 #60763 (Andrey Zvonov).
- arrayEnumerateRanked で発生するクラッシュを修正 #60764 (Raúl Marín)。
- INSERT SELECT JOIN で
input()を使用した際に発生するクラッシュの不具合を修正 #60765 (Kruglov Pavel)。 - サブクエリで異なる allow_experimental_analyzer の値を使用した際にクラッシュする問題を修正 #60770 (Dmitry Novik)。
- S3 からの読み取り時の再帰処理を削除 #60849 (Antonio Andelic)。
- HashedDictionaryParallelLoader でエラー時にハングアップする可能性がある不具合を修正 #60926 (vdimir)。
- Replicated データベースにおける非同期 RESTORE の修正(実験的機能) #60934 (Antonio Andelic)。
- ネイティブプロトコル経由での
Logテーブルへの非同期インサート時に発生するデッドロックを修正 #61055 (Anton Popov). - RangeHashedDictionary における dictGetOrDefault のデフォルト引数の遅延実行の問題を修正 #61196 (Kruglov Pavel)。
- groupArraySorted の複数の不具合を修正 #61203 (Raúl Marín)。
- スタンドアロンバイナリにおける Keeper の再設定を修正 #61233 (Antonio Andelic)。
- S3 エンジンにおける
session_tokenの扱いを修正 #61234 (Kruglov Pavel). - 集約関数
uniqExactが誤った結果を返す可能性のある問題を修正 #61257 (Anton Popov)。 - SHOW DATABASE のバグを修正 #61269 (Raúl Marín)。
- RabbitMQ ストレージの MATERIALIZED 列に関する論理エラーを修正 #61320 (vdimir).
- CREATE OR REPLACE DICTIONARY を修正 #61356 (Vitaly Baranov)。
- 外部の ON CLUSTER を使用する ATTACH クエリを修正 #61365 (Nikolay Degterinsky)。
- Nullable キーに対する連続キー最適化の不具合を修正 #61393 (Anton Popov).
- Actions DAG の分割に起因する問題を修正 #61458 (Raúl Marín)。
- 失敗した RESTORE の終了処理を修正 #61466 (Vitaly Baranov)。
- 互換性設定を使用して async_insert_use_adaptive_busy_timeout を正しく無効化する #61468 (Raúl Marín).
- restore プールでのキューイングを許可 #61475 (Nikita Taranov)。
- UUID を使用して system.parts を読み取る際の不整合を修正。 #61479 (Dan Wu).
- ALTER QUERY MODIFY SQL SECURITY を修正 #61480 (pufit)。
- ウィンドウビュー(実験的機能)で発生していたクラッシュを修正 #61526 (Alexey Milovidov)。
- 非ネイティブ整数値を扱う
repeatの不具合を修正 #61527 (Antonio Andelic). - クライアントの
-s引数を修正 #61530 (Mikhail f. Shiryaev)。 - arrayPartialReverseSort のクラッシュを修正 #61539 (Raúl Marín)。
- const position を指定した文字列検索の不具合を修正 #61547 (Antonio Andelic).
- DateTime64 で使用したときにエラーが発生していた addDays を修正 #61561 (Shuai li).
- JSONExtract で LowCardinality 型の入力を不許可にする #61617 (Julia Kartseva)。
- 重複排除を伴う非同期挿入に対する
system.part_logの修正 #61620 (Antonio Andelic)。 - system.parts での
Non-ready set例外を修正。#61666(Nikolai Kochetov)。 - REPLACE_RANGE における actual_part_name を修正 (
Entry actual part isn't empty yet) #61675 (Alexander Tokmakov). - 不正な UTF-8 に関する
multiSearchAllPositionsCaseInsensitiveUTF8の sanitizer からのレポートを修正 #61749(pufit)。 - Nullable カラムで RANGE フレームがサポートされていないという不具合を修正。 #61766 (YuanLiu).
ClickHouse リリース 24.2, 2024-02-29
後方互換性のない変更
- ネストした型内の疑わしい/実験的なデータ型を検証するようにしました。以前は、Array/Tuple/Map のようなネストした型内では、そのような型(JSON を除く)を検証していませんでした。#59385(Kruglov Pavel)。
- スレッド数とブロックサイズに対する妥当性チェックを追加しました。#60138(Raúl Marín)。
- デフォルトでは指数表記の浮動小数点数を推論しないようにしました。以前の動作を復元する設定
input_format_try_infer_exponent_floatsを追加しました(デフォルトは無効)。#59476 をクローズします。#59500(Kruglov Pavel)。 - ALTER 操作を丸括弧で囲めるようにしました。括弧の出力は設定
format_alter_operations_with_parenthesesで制御できます。デフォルトでは、フォーマット済みクエリにおいて括弧は出力されます。これは、フォーマット済みの ALTER 操作をメタデータ(例: ミューテーション)として一部の箇所に保存しているためです。この新しい構文により、ALTER 操作がリストで終わる一部のクエリが明確になります。例:ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN cは、旧構文では正しくパースできません。新しい構文では、クエリALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c)は明確です。旧バージョンはこの新しい構文を読み取れないため、新しい構文を使用すると、単一のクラスター内で新旧バージョンの ClickHouse を混在させている場合に問題が発生する可能性があります。#59532(János Benjamin Antal)。 - マテリアライズドビューに関するセキュリティ問題を修正しました。この問題により、ユーザーは必要な権限なしにテーブルへ挿入できていました。この修正では、ユーザーがマテリアライズドビューだけでなく、その背後にあるすべてのテーブルへの挿入権限も持っているかを検証します。これは、以前は動作していた一部のクエリが、現在は
Not enough privilegesで失敗し得ることを意味します。この問題に対処するため、本リリースではビュー向けの新機能として SQL セキュリティを導入しています https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security 。#54901 #60439(pufit)。
新機能
- ビューやマテリアライズドビューで定義者ユーザーを指定できる新しい構文を追加しました。これにより、基礎となるテーブルに対して明示的に権限を付与しなくても、ビューからの SELECT/INSERT を実行できるようになります。つまり、ビュー側で権限をカプセル化できるようになります。 #54901 #60439 (pufit).
- スキーマ推論中に、
file/s3/hdfs/url/azureBlobStorageエンジンでファイル形式が不明な場合は、自動的にファイル形式を検出しようとするようにしました。 #50576 をクローズします。 #59092(Kruglov Pavel)。 - 非同期挿入タイムアウトの自動調整機能を実装しました。次の設定を追加しました: async_insert_poll_timeout_ms、async_insert_use_adaptive_busy_timeout、async_insert_busy_timeout_min_ms、async_insert_busy_timeout_max_ms、async_insert_busy_timeout_increase_rate、async_insert_busy_timeout_decrease_rate。#58486(Julia Kartseva)。
- 連続したログイン失敗回数に対する上限クォータを設定できるようにしました。 #54737 (Alexey Gerasimchuck).
- 新しい集約関数
groupArrayIntersect。#49862 のフォローアップ。#59598(Yarik Briukhovetskyi)。 AzureBlobStorageのバックアップおよびリストアをサポート。 #50747 を解決。#56988(SmitaRKulkarni)。- ユーザーは、
format_template_rowの代替として、クエリ内でformat_schema_rows_templateを使用してテンプレート文字列を直接指定できるようになりました。#31363 をクローズしました。#59088(Shaun Struwig)。 - さまざまな種類の MergeTree テーブルを自動的に Replicated エンジンへ変換する機能を実装しました。テーブルのデータディレクトリ(
/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)内に空のconvert_to_replicatedというファイルを作成すると、次回サーバー起動時にそのテーブルが自動的に変換されます。 #57798 (Kirill)。 - 空のパーティションに関連する ZooKeeper ノードを削除するクエリ
ALTER TABLE table FORGET PARTITION partitionを追加しました。 #59507 (Sergei Trifonov)。これは上級者向けの機能です。 - NATS テーブルエンジンで JWT 資格情報ファイルのサポートを追加。 #59543 (Nickolaj Jepsen).
- DNS に関する問題のデバッグに役立つ
system.dns_cacheテーブルを実装しました。 #59856 (Kirill Nikiforov)。 - コーデック
LZ4HCは、新たに圧縮レベル 2 をサポートするようになりました。これは、以前の最小レベルである 3 より高速ですが、その代わり圧縮率は低くなります。以前のバージョンでは、LZ4HC(2)以下の指定はすべてLZ4HC(3)と同一でした。著者: Cyan4973。#60090(Alexey Milovidov)。 system.dns_cacheテーブルを実装しました。DNS 関連の問題のデバッグに役立ちます。新しいサーバー設定dns_cache_max_sizeを追加しました。 #60257 (Kirill Nikiforov)。mergeテーブル関数で、merge(['db_name', ] 'tables_regexp')のような単一引数版をサポートしました。 #60372 (豪肥肥)。- 負の位置引数をサポートします。#57736 をクローズします。#58292(flynn)。
userキーを使用して、config 内の特定の S3 設定ごとに許可するユーザーのセットを指定できるようにしました。 #60144 (Antonio Andelic)。- テーブル関数
mergeTreeIndexを追加しました。MergeTreeテーブルの index ファイルおよび marks ファイルの内容を表し、テーブルの内部構造を調査する用途で使用できます。構文:mergeTreeIndex(database, table, [with_marks = true])。ここでdatabase.tableは、MergeTreeエンジンを持つ既存のテーブルです。#58140(Anton Popov)。
実験的機能
- Tukey's fences アルゴリズムを使用して系列データの外れ値を検出する関数
seriesOutliersDetectTukeyを追加しました。#58632 (Bhavna Jindal)。この関数の動作は次回のパッチリリースで変更される予定であることに注意してください。 - 各行に対して Variant 型名を持つ Enum を返す関数
variantTypeを追加しました。#59398 (Kruglov Pavel)。 - 並列レプリカ(analyzer 使用時のみ)に対して
LEFT JOIN、ALL INNER JOIN、および単純なサブクエリをサポートしました。新しい設定parallel_replicas_prefer_local_joinは、ローカルのJOIN実行(デフォルト)とGLOBAL JOINのどちらを選択するかを制御します。すべてのテーブルは、cluster_for_parallel_replicasに属するすべてのレプリカ上に存在している必要があります。新しい設定min_external_table_block_size_rowsとmin_external_table_block_size_bytesは、一時テーブルに送信される小さなブロックをまとめるために使用されます(analyzer 使用時のみ)。#58916 (Nikolai Kochetov)。 - 新しいレプリカの追加または復旧中に、
Replicatedデータベース内でテーブルを同時に作成できるようにしました。#59277 (Konstantin Bogdanov)。 Variant値に対する比較演算子と、Variantカラムへの適切な Field の挿入を実装しました。デフォルトでは、類似した Variant 型を持つVariant型の作成は許可されません(設定allow_suspicious_variant_typesにより許可できます)。#59996 をクローズしました。#59850 をクローズしました。#60198 (Kruglov Pavel)。- CTE を用いた並列レプリカ JOIN(analyzer 未使用)を無効化しました。#59239 (Raúl Marín)。
パフォーマンスの向上
- Primary keyのメモリ使用量が少なくなりました。 #60049 (Alexey Milovidov).
- プライマリキーおよび一部のその他の操作におけるメモリ使用量を改善しました。 #60050 (Alexey Milovidov)。
- テーブルのプライマリキーは、最初のアクセス時に遅延ロードでメモリに読み込まれます。これは、新しい MergeTree の設定
primary_key_lazy_loadによって制御され、デフォルトで有効になっています。これにはいくつかの利点があります。- 使用されないテーブルについてはロードされないこと。- メモリが不足している場合、サーバ起動時ではなく最初の使用時に例外がスローされること。これにはいくつかの欠点もあります。- プライマリキーのロードにかかるレイテンシが、接続を受け付ける前ではなく最初のクエリ時に発生するため、理論的には「thundering herd」問題を引き起こす可能性があること。これにより #11188 がクローズされました。 #60093(Alexey Milovidov)。 - ベクトル検索用のベクトル化距離関数。 #58866 (Robert Schulze).
- ベクトル検索に有用なベクトル化関数
dotProduct。#60202(Robert Schulze)。 dictGetOrDefault関数に短絡評価機能を追加し、#52098 をクローズ。 #57767(jsc0218)。- Keeper の改善:
latest_logs_cache_size_thresholdとcommit_logs_cache_size_thresholdによって制御される、メモリ内にキャッシュするログ量に上限を設けました。 #59460 (Antonio Andelic). - Keeper の改善: データノードのサイズをさらに削減。 #59592 (Antonio Andelic).
- 結果型が
Float*/Decimal*/*Int*の場合のif関数におけるブランチミスを引き続き最適化。https://github.com/ClickHouse/ClickHouse/pull/57885 のフォローアップ。#59148(李扬)。 - 入力型が
Mapの場合のif関数を最適化し、最大で約 10 倍の高速化を達成しました。 #59413 (李扬). Int8型のパフォーマンスを、strict aliasing を実装することで改善しました(UInt8および他のすべての整数型ではすでに実装済みです)。 #59485 (Raúl Marín)。- bigint 型および big decimal 型に対する sum/avg を条件付きで最適化し、分岐予測ミスを減らしてパフォーマンスを向上。 #59504 (李扬).
- アクティブなミューテーション実行中の SELECT クエリのパフォーマンスを改善。 #59531 (Azat Khuzhin).
- AVX2 を使用して関数
isNotNullを最適化。#59621 (李扬)。 - ソート済みまたはほぼソート済みのデータに対する ASOF JOIN のパフォーマンスを改善しました。 #59731 (Maksim Kita).
async_insert_max_data_sizeの以前のデフォルト値であった 1 MB は小さすぎることが判明しました。新しいデフォルト値は 10 MiB になります。#59536 (Nikita Mikhaylov)。- RESTORE コマンドの実行時に、バックアップ内のテーブルメタデータの読み取りで複数スレッドを使用するようにしました。 #60040 (Vitaly Baranov).
StorageBufferが 1 つより多くのシャードを持つ場合(num_layers> 1)、バックグラウンドでのフラッシュ処理は、複数スレッドで全シャードに対して同時に実行されるようになりました。 #60111 (alesapin).
改善
- 出力形式が
Prettyフォーマットで、ブロックが 100 万を超える単一の数値のみで構成されている場合、読みやすい形式の数値がテーブルの右側に表示されます。 #60379 (rogeryk)。 - 設定
split_parts_ranges_into_intersecting_and_non_intersecting_finalとsplit_intersecting_parts_ranges_into_layers_finalを追加しました。これらの設定は、FINALを伴うクエリ向けの最適化を無効化するために必要であり、デバッグ用途にのみ必要です。#59705(Maksim Kita)。実際にはそれだけではなく、パフォーマンスを犠牲にする代わりにメモリ使用量を抑えるためにも利用できます。 - 設定名
extract_kvp_max_pairs_per_rowをextract_key_value_pairs_max_pairs_per_rowに変更しました。この設定名に含まれていた不要な省略表現は https://github.com/ClickHouse/ClickHouse/pull/43606 で導入されたものです。この設定に関するドキュメントを修正しました。#59683(Alexey Milovidov)。#59960(jsc0218)。 DEFAULTまたはMATERIALIZED式を持つカラムに対してALTER COLUMN MATERIALIZEを実行した場合、処理が本来のセマンティクスどおりに動作するようになりました。 #58023 (Duc Canh Le).MUTATION実行中に発生するエラーに対して指数バックオフ処理を有効化しました。これにより、CPU 使用率、メモリ使用量、およびログファイルサイズを削減できます。 #58036 (MikhailBurdukov).InitialQueryプロファイルイベントをカウントするための改善を追加。 #58195 (Unalian)。storage_configurationでvolume_priorityを定義できるようになりました。 #58533 (Andrey Zvonov).T64コーデックでDate32型のサポートを追加。 #58738 (Hongbin Ma).- 複数の要素を含む型で末尾のカンマを許可しました。 #59119 (Aleksandr Musorin).
- Distributed テーブルエンジンの設定を(MergeTree の設定と同様に)サーバーの設定ファイル内で指定できるようになりました。例:
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>。 #59291 (Azat Khuzhin)。 system.zookeeperを読み取る際に、切断やセッション有効期限切れが発生した場合にリトライするようになりました。これは、特にフォルトインジェクションによる切断が存在する状況で、system.zookeeperテーブルから多数の行を読み取る場合に有用です。 #59388 (Alexander Gololobov)。input_format_values_interpret_expressions=0の場合、先頭にゼロが付いた数値を 8 進数として解釈しないようにしました。 #59403 (Joanna Hulboj).- 起動時および設定ファイルが変更されるたびに、ClickHouse は合計メモリトラッカーのハードリミットを更新します。これらのリミットは、各種サーバー設定および(Linux 上の)cgroup の制限に基づいて計算されます。以前は、
/sys/fs/cgroup/memory.max(cgroup v2 用)の設定がハードコードされていました。その結果、/sys/fs/cgroup/my/nested/group/memory.maxのようなネストされたグループ(階層)に対して設定された cgroup v2 のメモリリミットは無視されていました。この問題はすでに修正されています。v1 のメモリリミットの動作は変更されていません。#59435(Robert Schulze)。 INSERT実行時に、PK/プロジェクション/セカンダリインデックスの計算に費やされた時間を計測できるよう、新しいプロファイルイベントを追加しました。 #59436 (Nikita Taranov).S3QueueのOrderedモードにおいて、作成時に設定s3queue_last_processed_pathを使用して開始位置を指定できるようにしました。 #59446 (Kseniia Sumarokova).clickhouse-localのsystem.tablesでもシステムテーブルのコメントが利用できるようになりました。 #59493 (Nikita Mikhaylov).system.zookeeperテーブル: 以前は結果全体をメモリ上に蓄積し、1 つの大きなチャンクとして返していました。この変更により、system.zookeeperから多数の行を読み取る際のメモリ消費を削減し、中間進捗(これまでに読み込まれた行数)を表示できるようにし、結果セットが大きい場合でも接続タイムアウトに達するのを回避できるようになります。 #59545 (Alexander Gololobov).- これにより、ダッシュボードは URL の #hash の圧縮状態と非圧縮状態の両方を解釈できるようになりました(後方互換性の維持)。#59124 の続きです。#59548 (Amos Bird)。
- Intel QPL(コーデック
DEFLATE_QPLで使用)を v1.3.1 から v1.4.0 に更新しました。また、ポーリングのタイムアウト機構のバグも修正しました。一部のケースで、タイムアウトが発生してもタイムアウトが正しく動作せず、その結果 IAA と CPU がバッファを同時に処理してしまう可能性があることが分かったためです。現状では、IAA コーデックのステータスが QPL_STS_BEING_PROCESSED ではないことを確認してから、SW コーデックへのフォールバックを行うようにするのが望ましいです。 #59551 (jasperzhu). - ClickHouse Cloud では、シームレスなアップグレードが自動的に行われるため、サーバーバージョンに関する警告を表示しないようにしました。 #59657 (Alexey Milovidov).
- 自己解凍処理後、一時バイナリはコピーではなく移動されるようになりました。 #59661 (Yakov Olkhovskiy).
- Apple macOS におけるスタックのアンワインド処理を修正。これにより #53653 をクローズ。#59690(Nikita Mikhaylov)。
- ユーザーが
max_parser_depth設定を非常に大きな値に誤って設定している場合でも、パーサーでスタックオーバーフローを検出するようにしました。これにより #59622 がクローズされました。#59697(Alexey Milovidov)。#60434 - Kafka ストレージにおける、XML と SQL から作成された名前付きコレクションの挙動を統一しました。 #59710 (Pervakov Grigorii).
merge_max_block_size_bytesが十分に小さい値に設定されていて、テーブルに幅の広い行(文字列やタプル)を含む場合、バックグラウンドマージが無限ループに陥る可能性がありました。この挙動は修正されました。https://github.com/ClickHouse/ClickHouse/pull/59340 のフォローアップです。 #59812(Nikita Mikhaylov)。- CREATE TABLE で明示的に指定されている場合は、replica_path で uuid を許可するようにしました。 #59908 (Azat Khuzhin).
system.tablesシステムテーブルに ReplicatedMergeTree テーブル用のmetadata_version列を追加しました。 #59942 (Maksim Kita).- Keeper の改善: Prometheus には Keeper 関連のメトリクス/イベントのみを送信するように変更。 #59945 (Antonio Andelic).
- ダッシュボードは、アップグレード後に system テーブルの構造が変更された場合でも、異なる ClickHouse バージョンのメトリクスを表示します。#59967 (Alexey Milovidov)。
- ファイルから AZ 情報を読み込めるようにしました。 #59976 (Konstantin Bogdanov).
- Keeper の改善: ディスク関連の操作での失敗時のリトライ処理を追加。 #59980 (Antonio Andelic).
- 新しい設定
backups.remove_backup_files_after_failureを追加しました:<clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>。 #60002(Vitaly Baranov)。 - GCP が HTTP エラーコード
GATEWAY_TIMEOUTを伴うInternal Errorを返した場合に備えて、S3 ファイルの GCP フォールバック処理をバッファコピーを行う方式に変更しました。 #60164 (Maksim Kita). ULIDStringToDateTimeのショートサーキット実行に対応しました。 #60211 (Juan Madurga).system.backupsおよびsystem.backup_logテーブルにquery_idカラムを追加しました。errorカラムにエラーのスタックトレースを追加しました。 #60220 (Maksim Kita)。- MySQL ポート経由の接続では、QuickSight をそのまま利用できるようにするために、設定
prefer_column_name_to_alias = 1が自動的に有効化されて動作するようになりました。あわせて、設定mysql_map_string_to_text_in_show_columnsおよびmysql_map_fixed_string_to_text_in_show_columnsもデフォルトで有効になり、こちらも MySQL 接続にのみ影響します。これにより、より多くの BI ツールとの互換性が向上します。 #60365 (Robert Schulze). - チャートが互いに重なって表示される問題を引き起こしていた JavaScript コード内のレースコンディションを修正。 #60392 (Alexey Milovidov).
ビルド / テスト / パッケージングの改善
- イントロスペクション付きでカバレッジ収集を行うビルドおよびテストを追加しました。#56102 の継続です。#58792 (Alexey Milovidov).
- CMake のクロスコンパイル用ツールチェーン変数が設定されている場合に、
corrosion-cmake内の Rust ツールチェーンを更新するようにしました。#59309 (Aris Tritas). - ASTLiterals にいくつかのファジングを追加しました。#59383 (Raúl Marín).
- ClickHouse コンテナの起動時に毎回 initdb スクリプトを実行したい場合は、環境変数
CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTSを設定する必要があります。#59808 (Alexander Nikolaev). - 汎用的な ClickHouse コンポーネント(server / client / ... など)を無効化する機能を削除しましたが、ODBC や keeper など追加のライブラリを必要とするものについては引き続き無効化可能なままにしています。#59857 (Azat Khuzhin).
- Query fuzzer は、クエリ内の SETTINGS もファジング対象とするようになりました。#60087 (Alexey Milovidov).
- clang-19(master)で ClickHouse をビルドするためのサポートを追加しました。#60448 (Alexey Milovidov).
バグ修正(公式安定版リリースにおけるユーザー可視の不具合)
- TTL WHERE で発生していた「Non-ready set」エラーを修正。 #57430 (Nikolai Kochetov).
quantilesGK関数のバグを修正 #58216 (李扬)。- Decimal 引数に対する
intDivの誤った動作を修正 #59243 (Yarik Briukhovetskyi). FixedString型入力時のtranslateの不具合を修正 #59356 (Raúl Marín).- Keeper におけるダイジェスト計算を修正 #59439(Antonio Andelic)。
- デバッグシンボルを含まないバイナリのスタックトレースを修正 #59444 (Azat Khuzhin).
- カラム固有設定がある場合の
ASTAlterCommand::formatImplを修正... #59445 (János Benjamin Antal). - Analyzer により
SELECT * FROM [...] ORDER BY ALLを修正 #59462(zhongyuankai)。 - 分散クエリのキャンセル中に発生する可能性のある未捕捉例外を修正 #59487 (Azat Khuzhin).
- 複合型に対して、
MAXがpermutationと同じルールを使用するように変更しました #59498(Raúl Marín)。 update_insert_deduplication_token_in_dependent_materialized_viewsを渡す場合のコーナーケースを修正 #59544 (Jordi Villar).- 空の値に対する arrayElement / map の結果が誤っていた問題を修正 #59594 (Raúl Marín)。
- topK において空の状態をマージする際に発生するクラッシュを修正 #59603 (Raúl Marín)。
- 定数シャーディングキーを持つ分散テーブルを修正 #59606(Vitaly Baranov)。
- WingFuzz で検出された KQL の問題を修正 #59626 (Yong Wang)。
- AsynchronousBoundedReadBuffer で発生するエラー「Read beyond last offset」を修正 #59630 (Vitaly Baranov)。
- RewriteSumFunctionWithSumAndCountVisitor で関数エイリアスを保持 #59658(Raúl Marín)。
- 初回以外のクエリにおける開始時刻を修正 #59662 (Raúl Marín).
minmaxスキップインデックスで引数の型を検証するようにしました #59733 (Anton Popov)。- FixedString を入力とする leftPad / rightPad 関数の不具合を修正 #59739 (Raúl Marín)。
- 関数
countMatchesにおける AST fuzzer の問題を修正 #59752 (Robert Schulze). - RabbitMQ:ack も nack も行われないメッセージが存在する問題を修正 #59775 (Kseniia Sumarokova)。
- StorageURL がクエリ実行の一部を単一スレッドで行ってしまっていた問題を修正 #59833 (Michael Kolupaev)。
- S3Queue: 未初期化の値を修正 #59897 (Kseniia Sumarokova).
- 丸括弧で囲まれたパーティション式の構文解析を修正 #59901 (János Benjamin Antal)。
- HTTP 経由で JSONColumnsWithMetadata フォーマットを使用した際に発生するクラッシュを修正 #59925 (Kruglov Pavel)。
- Analyzer で戻り値が異なる場合は sum を count に書き換えないようにしました #59926 (Azat Khuzhin).
- UniqExactSet の読み取り時のクラッシュを修正 #59928(Maksim Kita)。
- ReplicatedMergeTree の無効な metadata_version の修正 #59946 (Maksim Kita)。
StorageDistributedのデータレースを修正 #59987 (Nikita Taranov)。- Docker: オプションが有効な場合にのみ初期化スクリプトを実行するように変更 #59991 (jktng)
SQLiteへの INSERT 文におけるシングルクォートの扱いを修正(シングルクォートをバックスラッシュではなく、シングルクォートを重ねてエスケープするように変更)#60015 (Azat Khuzhin).arrayFoldのいくつかの論理エラーを修正 #60022(Raúl Marín)。- カラムエイリアスを削除してしまっていた
optimize_uniq_to_countを修正 #60026 (Raúl Marín). - S3Queue テーブル削除時に発生する可能性のある例外を修正 #60036 (Kseniia Sumarokova).
- 単一リテラルに対する NOT の書式を修正 #60042 (Raúl Marín).
- DDLLogEntry でハードコードされた 4096 の代わりにコンテキストの max_query_size を使用するようにした #60083 (Kruglov Pavel)。
tableという名前のテーブルを含むクエリの不整合なフォーマットを修正しました。構造が線形でないUNION ALL、INTERSECT、EXCEPTを含むクエリの誤ったフォーマットを修正しました。これにより #52349 がクローズされます。SYSTEM ... DROP FILESYSTEM CACHE、SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW、SYSTEM ENABLE/DISABLE FAILPOINTを含むSYSTEMクエリの誤ったフォーマットを修正しました。パラメータ付き DDL クエリのフォーマットを修正しました。DESCRIBE FILESYSTEM CACHEクエリのフォーマットを修正しました。SET param_...(パラメータを設定するクエリ)の誤ったフォーマットを修正しました。CREATE INDEXクエリの誤ったフォーマットを修正しました。CREATE USERおよび同様のクエリの不整合なフォーマットを修正しました。CREATE SETTINGS PROFILEの不整合なフォーマットを修正しました。ALTER ... MODIFY REFRESHの誤ったフォーマットを修正しました。フレームオフセットが式である場合のウィンドウ関数の不整合なフォーマットを修正しました。plusなどの演算子を実装する関数の後でRESPECT NULLSおよびIGNORE NULLSが使われていた場合の不整合なフォーマットを修正しました。SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM ...のひどいフォーマットを修正しました。GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALSを含む無効なクエリの不整合なフォーマットを修正しました。GRANT CURRENT GRANTSの不整合なフォーマットを修正しました。CREATE TABLE (... COLLATE)の不整合なフォーマットを修正しました。加えて、サブクエリ内のEXPLAINの誤ったフォーマットを修正しました(#60102)。ラムダ関数の誤ったフォーマットを修正しました(#60012)。今後この種の問題を見逃さないようにするためのチェックを追加しました。#60095(Alexey Milovidov)。- サブクエリ内の EXPLAIN のフォーマットの不整合を修正 #60102 (Alexey Milovidov).
- Nullable における cosineDistance のクラッシュを修正 #60150 (Raúl Marín).
- 文字列表現の bool 値を真の bool 型にキャストできるようにしました #60160(Robert Schulze)。
system.s3queue_logを修正 #60166 (Kseniia Sumarokova)。- Nullable な集約関数名を持つ arrayReduce を修正 #60188 (Raúl Marín).
S3Queueの機密情報を非表示化 #60233 (Kseniia Sumarokova).- HTTP 例外コードを修正。#60252(Austin Kothig)。
- S3Queue: バグを修正(不安定だった test_storage_s3_queue/test.py::test_shards_distributed テストも併せて修正) #60282 (Kseniia Sumarokova).
- IPv6 アドレスを扱うハッシュ関数における未初期化値の使用と不正な結果を修正 #60359 (Kruglov Pavel)。
- null 引数を扱う際の
OptimizeDateOrDateTimeConverterWithPreimageVisitorを修正 #60453 (Raúl Marín)。 - KQL または PRQL 方言のクライアントから送信された分散テーブルクエリがレプリカ上で実行できない軽微なバグを修正しました。 #59674。 #60470 (Alexey Milovidov) #59674 (Austin Kothig)。
ClickHouse リリース 24.1, 2024-01-30
後方互換性のない変更
- 設定
print_pretty_type_namesがデフォルトで有効になりました。以前の挙動を維持したい場合はこの設定を無効にするか、SET compatibility = '23.12'を実行してください。 #57726 (Alexey Milovidov). - MergeTree の設定
clean_deleted_rowsは非推奨となり、もはや効果はありません。OPTIMIZEに対するCLEANUPキーワードはデフォルトでは許可されません(allow_experimental_replacing_merge_with_cleanupが有効な場合を除く)。 #58316 (Alexander Tokmakov). - 関数
reverseDNSQueryは利用できなくなりました。これにより #58368 がクローズされます。 #58369 (Alexey Milovidov). - 設定ファイル内のアクセス制御を改善するために、さまざまな変更を有効化しました。これらの変更は動作に影響を与えるため、
access_control_improvementsセクションのconfig.xmlを確認してください。よく分からない場合は、設定ファイル内の値を前バージョンのままにしておいてください。 #58584 (Alexey Milovidov). - NaN 値に対する
sumMapFilteredの動作を改善しました。NaN 値は(以前のようにランダムではなく)末尾に配置され、任意の値とは異なるものとして扱われます。また、-0は0と等しいものとして扱われるようになりました。0 の値は破棄されるため、-0の値も破棄されます。 #58959 (Raúl Marín). - 関数
visibleWidthはドキュメントに記載されているとおりに動作するようになります。以前のバージョンでは、lengthUTF8関数と同様に、文字列シリアライズ後のコードポイントを単純にカウントするだけで、ゼロ幅文字や結合文字、全角文字、タブ、削除文字を考慮していませんでした。現在はそれに合わせて動作が変更されています。以前の挙動を維持したい場合は、function_visible_width_behaviorを0に設定するか、compatibilityを23.12以下に設定してください。 #59022 (Alexey Milovidov). - 次の 2 つのバグが修正されるまで、
Kusto方言は無効化されています: #59037 および #59036。 #59305 (Alexey Milovidov).Kustoを使用しようとすると、必ず例外が発生します。 FINAL修飾子のより効率的な実装では、max_threads = 1の場合であっても順序が保持されることはもはや保証されません。以前の挙動に依存している場合は、enable_vertical_finalを 0 に設定するか、compatibilityを23.12以下に設定してください。
新機能
- 他のデータ型の共用体(ユニオン)を表す Variant データ型を実装。型
Variant(T1, T2, ..., TN)は、この型の各行がT1、T2、…、TNのいずれかの型、またはいずれの型でもない(NULL値)を値として持つことを意味します。Variant 型は設定allow_experimental_variant_typeを有効にすると利用できます。参考: #54864。#58047(Kruglov Pavel)。 - 特定の設定(現在は
min_compress_block_sizeとmax_compress_block_size)を、対応するテーブルレベルの設定より優先されるカラムレベルで指定できるようになりました。例:CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();。 #55201(Duc Canh Le)。 quantileDD集約関数と、それに対応するquantilesDDおよびmedianDDを追加しました。DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf に基づく実装です。 ### ユーザー向け変更のドキュメント項目。#56342(Srikanth Chekuri)。- 任意の種類のオブジェクトストレージおよびメタデータ型を設定できるようにしました。 #58357 (Kseniia Sumarokova).
distributed_ddl_output_modeにnull_status_on_timeout_only_activeとthrow_only_activeのモードを追加し、非アクティブなレプリカを待たずに済むようにしました。 #58350 (Alexander Tokmakov)。- 部分配列を生成する関数
arrayShinglesを追加しました。例えば、arrayShingles([1, 2, 3, 4, 5], 3)は[[1,2,3],[2,3,4],[3,4,5]]を返します。 #58396 (Zheng Miao). - IDNA 標準に従って国際化ドメイン名を ASCII 文字列表現に変換する際に有用な関数
punycodeEncode、punycodeDecode、idnaEncode、idnaDecodeを追加しました。 #58454 (Robert Schulze). - 文字列の類似度を計算する関数
dramerauLevenshteinDistance、jaroSimilarity、jaroWinklerSimilarityを追加しました。 #58531 (Robert Schulze). - 出力の圧縮レベルを変更するための
output_format_compression_levelと、圧縮ウィンドウのサイズを明示的に設定し、出力の圧縮方式がzstdの場合に zstd 圧縮のロングレンジモードを有効にするためのoutput_format_compression_zstd_window_logの 2 つの設定を追加しました。INTO OUTFILEおよびテーブル関数file、url、hdfs、s3、azureBlobStorageへの書き込み時に適用されます。 #58539 (Duc Canh Le). - 出力先がターミナルでない場合、Pretty フォーマットで ANSI エスケープシーケンスを自動的に無効化するようにしました。設定
output_format_pretty_colorに新しいautoモードを追加しました。 #58614 (Shaun Struwig). - Sqids をデコードする関数
sqidDecodeを追加しました。 #58544 (Robert Schulze)。 - JSON 入力フォーマットで Bool 型の値を String 型として読み取れるようにしました。これはデフォルトで有効になっている
input_format_json_read_bools_as_strings設定で制御されます。 #58561 (Kruglov Pavel)。 - 時系列データを季節成分、トレンド成分、残差成分に分解する関数
seriesDecomposeSTLを追加しました。 #57078 (Bhavna Jindal). - MaterializedMySQL 向けに MySQL Binlog クライアントを導入: binlog 接続 1 つで複数のデータベースを扱えるようになりました。 #57323 (Val Doroshchuk)。
- Intel QuickAssist Technology (QAT) は、ハードウェアアクセラレーションされた圧縮および暗号化機能を提供します。ClickHouse に新しい圧縮コーデック
ZSTD_QATが追加され、zstd 圧縮に QAT を利用できるようになりました。このコーデックは Intel's QATlib と Inte's QAT ZSTD Plugin を使用します。現時点では、ハードウェアで加速できるのは圧縮のみであり(QAT の初期化に失敗した場合にはソフトウェアのフォールバックが動作します)、伸長処理は常にソフトウェアで実行されます。#57509 (jasperzhu)。 - S3 ディスク用のオブジェクトストレージキーを生成する新しい方式を実装しました。これにより、ディスク定義内の
key_templateオプションを使って、re2正規表現構文に基づいてフォーマットを定義できるようになりました。 #57663 (Sema Checherinda)。 - テーブル system.dropped_tables_parts には、system.dropped_tables テーブル(DROP されたがまだ削除されていないテーブル)のパーツが含まれます。 #58038 (Yakov Olkhovskiy)。
- テーブルにアタッチできるマテリアライズドビューの数を制限する設定
max_materialized_views_size_for_tableを追加。 #58068 (zhongyuankai). clickhouse-formatの改善点:INSERT クエリでのVALUES句のサポート、コメントのサポート(出力するには--commentsを使用)、長いクエリのみを複数行に整形するための--max_line_lengthオプションのサポート。#58246 (vdimir)。clickhouse-localでsystem.partsを含むすべての system テーブルをアタッチします。これにより #58312 が解決されます。#58359(Alexey Milovidov)。- 関数
transformにおけるEnumデータ型サポートの追加。これにより #58241 がクローズされました。#58360(Alexey Milovidov)。 - テーブル
system.database_enginesを追加。#58390(Bharat Nallan)。データベースエンジンをコードベース内で独立して登録できるようにする。#58365(Bharat Nallan)。インタプリタを独立して登録できるようにする。#58443(Bharat Nallan)。 SYSTEM SYNC REPLICA LIGHTWEIGHTクエリにFROM <Replicas>修飾子を追加しました。FROM修飾子を使用することで、指定されたソースレプリカ、および ZooKeeper に存在しないレプリカやsource_replicaが空のレプリカに対してのみ、フェッチおよび drop-range を待機するようになります。 #58393 (Jayme Bird).- 設定
update_insert_deduplication_token_in_dependent_materialized_viewsを追加しました。この設定により、依存するマテリアライズドビューへの挿入時に、テーブル識別子を用いて INSERT の重複排除トークンを更新できるようになりました。#59165 をクローズ。#59238 (Maksim Kita)。 - 非同期メトリクスを更新する
SYSTEM RELOAD ASYNCHRONOUS METRICSステートメントを追加しました。主にテストや開発用途で役立ちます。 #53710 (Robert Schulze).
パフォーマンスの向上
- 並列レプリカのためのコーディネーションが、より高い並列性とキャッシュ局所性を実現するように書き換えられました。数百のレプリカにおける線形スケーラビリティについてテスト済みです。さらに、順序どおりの読み取りもサポートされました。#57968(Nikita Taranov)。
- HTTP ベースの送信バッファリングを ClickHouse ネイティブのバッファに置き換え。インターフェイス向けにバイト数を計測するメトリクスを追加。#56064 (Yakov Olkhovskiy).
- 分散クエリでは、
uniqExactの大規模な集約状態が並列にマージされます。 #59009 (Nikita Taranov)。 MergeTreeテーブル読み込み後のメモリ使用量を削減。#59290 (Anton Popov).- バーティカルマージ時のメモリ使用量を削減。 #59340 (Anton Popov).
- Keeper の起動時に大量のメモリを消費してしまうケースを、さらに多くの状況で回避できるようにしました。 #58455 (Antonio Andelic).
- Keeper の改善: 保存ノードのメモリ使用量を削減。 #59002 (Antonio Andelic).
- よりキャッシュ効率に優れた最終実装。挙動変更に関する注意: 以前は、
FINAL修飾子を持ち、単一ストリーム(例:max_threads = 1)で読み取るクエリは、ORDER BY句が明示的に指定されていなくてもソートされた出力を生成していました。enable_vertical_final = trueの場合(デフォルトで有効)、これはもはや保証されません。#54366(Duc Canh Le)。 - たとえば S3 からの読み取りに使用される
ReadBufferFromIStreamにおいて、不要なコピー処理を回避しました。#56961 (Nikita Taranov)。 - 入力が Array(Map) / Array(Array(Num)) / Array(Array(String)) / Array(BigInt) / Array(Decimal) の場合に、
arrayElement関数を最適化しました。以前の実装では不要なメモリアロケーションが多く発生していました。この最適化により、とくに入力型が Array(Map) の場合に最大で約 6 倍の高速化が見込めます。 #56403 (李扬). - コンパクトパーツから複数のサブカラムを読み込む際、カラムを1回だけ読み取るようにした。 #57631 (Kruglov Pavel).
sum(column + constant)関数の AST を書き換えます。これは Analyzer における最適化パスとして利用できます #57853(Jiebin Sun)。- 関数
matchの評価で、スキップインデックスngrambf_v1およびtokenbf_v1が利用されるようになりました。 #57882 (凌涛). - 関数
matchの評価にインバーテッドインデックスが利用されるようになりました。 #58284 (凌涛)。 - MergeTree の
FINALは、同じ non-L0 パーツ内にある行を比較しなくなりました。 #58142 (Duc Canh Le). iota呼び出し(配列を連番で埋める処理)の高速化。 #58271 (Raúl Marín)。- 数値以外の型に対する MIN/MAX の高速化。#58334 (Raúl Marín)。
- フィルターの組み合わせ(マルチステージ PREWHERE など)を、BMI2/SSE イントリンシックを用いて最適化 #58800(Zhiguo Zhou)。
clickhouse-localで使用するスレッド数を 1 つ減らしました。 #58968 (Alexey Milovidov).- 型が Nullable の場合の
multiIf関数のパフォーマンスを改善しました。 #57745 (KevinyhZou). - 未使用の jemalloc ページをパージするための
SYSTEM JEMALLOC PURGEと、プロファイラが有効な場合に jemalloc プロファイルを制御するためのSYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILEを追加しました。Keeper には jemalloc 関連の 4LW コマンドとして、jemalloc の統計情報をダンプするjmst、およびプロファイラが有効な場合に jemalloc プロファイルを制御するjmfp、jmep、jmdpを追加しました。#58665 (Antonio Andelic)。 - S3 へのバックアップにおけるメモリ使用量を削減。 #58962 (Vitaly Baranov)。
改善
- すべての system テーブルのカラムにコメント(簡潔な説明)を追加しました。これにはいくつか理由があります。- system テーブルは頻繁に利用しており、特定のカラムの目的や意味を開発者が理解するのが非常に難しい場合があります。- system テーブルは(新しいものを追加したり既存のものを変更したりと)頻繁に変更されるため、そのドキュメントは常に最新ではありません。たとえば、
system.partsのドキュメントページを見てください。多くのカラムが記載されていません。- 将来的には、ClickHouse から直接ドキュメントを生成できるようにしたいと考えています。#58356(Nikita Mikhaylov)。 PASTE JOIN用のサブクエリについて、エイリアスなしでもクエリを実行できるようにしました。 #58654 (Yarik Briukhovetskyi).- macOS 上での
MySQL/MariaDB連携を有効化。これにより #21191 がクローズされた。#46316 (Alexey Milovidov) (Robert Schulze)。 max_rows_in_set_to_optimize_joinをデフォルトで無効化しました。 #56396 (vdimir).ON CLUSTERDDL クエリおよび Replicated データベースエンジンにおいて、ホスト名の解決を行わないようにできる設定パラメータ<host_name>を追加しました。これにより、クラスター定義の変更があった場合にキューが詰まってしまう可能性を軽減します。#57573 をクローズしました。#57603(Nikolay Degterinsky)。- ファイルシステムキャッシュ用の
load_metadata_threadsを 16 に増やしました。これによりサーバーの起動が高速化されます。 #57732 (Alexey Milovidov). - マージ/ミューテーションの帯域を制限できる機能を追加(
max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server)。#57877(Azat Khuzhin)。 - システムテーブル
system.server_settingsにおいて、未ドキュメントだった boolean 型カラムis_hot_reloadableを、No、Yes、IncreaseOnly、DecreaseOnlyの値を取る Enum8 型カラムchangeable_without_restartに置き換えました。また、このカラムについてもドキュメント化しました。 #58029 (skyoct). - クラスタ検出でユーザー名とパスワードの設定をサポートするようにし、#58063 を解決しました。#58123(vdimir)。
ALTER TABLE ... PARTでクエリパラメータをサポートしました。 #58297 (Azat Khuzhin).- Kafka テーブル向けのコンシューマーをオンデマンドで作成しつつ、最後の利用から一定期間(
kafka_consumers_pool_ttl_ms)は保持するようにしました。これにより、system.kafka_consumersの統計に関する問題(Kafka テーブルから誰も読み取らない場合にコンシューム処理が行われず、その結果、メモリが解放されずにリークし続け、テーブルのデタッチが遅くなる問題)が修正されます。また、この PR によりsystem.kafka_consumersの統計が再びデフォルトで有効になります。 #58310 (Azat Khuzhin). sparkbarのエイリアスとしてsparkBarを追加しました。 #58335 (凌涛)。- アップロード後に
GCSへComposeObjectリクエストを送信しないようにする。 #58343 (Azat Khuzhin). - 構成 XML ファイルで、名前にドットを含むキーを正しく扱えるようにしました。 #58354 (Azat Khuzhin)。
- 関数
formatが定数引数に対して定数を返すようにしました。これにより、#58355 が解決しました。#58358(Alexey Milovidov)。 max_execution_timeとmax_estimated_execution_timeを分離するため、設定項目max_estimated_execution_timeを追加。 #58402 (Zhang Yifan).- 無効なデータベースエンジン名が指定された場合にヒントを表示するようにしました。 #58444 (Bharat Nallan).
- Arrow 辞書内のインデックス型をより細かく制御するための設定を追加しました。Arrow の推奨に従い、デフォルトで符号付き整数型をインデックスに使用します。#57401 をクローズしました。#58519(Kruglov Pavel)。
- #58575 を実装し、Docker イメージの実行時に
CLICKHOUSE_PASSWORD_FILE環境変数をサポート。 #58583(Eyal Halpern Shalev)。 - 一部のクエリを実行する際に、多数のストリームを使ってデータを読み取る必要がある場合、以前は
"Paste JOIN requires sorted tables only"というエラーがスローされていました。現在は、そのようなケースではストリーム数が 1 に調整されます。 #58608 (Yarik Briukhovetskyi)。 - INVALID_IDENTIFIER エラー時のメッセージを改善。 #58703 (Yakov Olkhovskiy).
- normalizeQuery における符号付き数値リテラルの扱いを改善しました。 #58710 (Salvatore Mesoraca)。
- MySQL の Point データ型のサポートを追加しました。 #58721 (Kseniia Sumarokova).
- Float32 カラムと const 文字列を比較する際には、文字列を Float64 ではなく Float32 として解釈するようにしました。#58724 (Raúl Marín)。
- S3 互換性を改善し、ECloud EOS ストレージのサポートを追加。 #58786 (xleoken).
KILL QUERYでバックアップおよびリストアをキャンセルできるようになりました。この PR により、実行中のバックアップおよびリストアがsystem.processesに表示されるようになりました。さらに、サーバー設定に新しい設定項目shutdown_wait_backups_and_restores(デフォルト = true)が追加され、サーバーのシャットダウン時に、実行中のすべてのバックアップおよびリストアの完了を待つか、ただちにキャンセルするかを制御できるようになりました。#58804(Vitaly Baranov)。- AvroフォーマットでZSTDコーデックをサポートしました。#58735 をクローズ。 #58805 (flynn).
- MySQL インターフェイスで
net_write_timeoutおよびnet_read_timeout設定がサポートされるようになりました。net_write_timeoutは ClickHouse のネイティブ設定であるsend_timeoutに、同様にnet_read_timeoutはreceive_timeoutにマッピングされます。MySQL のsql_select_limit設定が、ステートメント全体が大文字で記述されている場合にのみ設定可能だった問題を修正しました。#58835 (Serge Klochkov). - 同じ名前の dictionary と table を作成しようとして競合が発生した場合に出力される例外メッセージを改善しました。 #58841 (Yarik Briukhovetskyi).
- カスタムディスク(SQL から作成したもの)の場合は、サーバー設定で
filesystem_caches_path(すべてのファイルシステムキャッシュに共通のディレクトリプレフィックス)またはcustom_cached_disks_base_directory(カスタムディスクから作成されたファイルシステムキャッシュ専用の共通ディレクトリプレフィックス)のいずれかが指定されていることを確認してください。custom_cached_disks_base_directoryはカスタムディスクに対してfilesystem_caches_pathよりも優先され、前者が存在しない場合にのみfilesystem_caches_pathが使用されます。ファイルシステムキャッシュ設定のpathは必ずそのディレクトリ配下である必要があり、そうでない場合はディスクの作成を防ぐために例外がスローされます。これは、古いバージョンで作成されたディスクが存在し、その後サーバーをアップグレードした場合には影響しません。この場合、サーバーが正常に起動できるように、例外はスローされません。custom_cached_disks_base_directoryはデフォルトのサーバー設定に/var/lib/clickhouse/caches/として追加されています。#57825 をクローズ。#58869(Kseniia Sumarokova)。 - MySQL インターフェイスが
SHOW WARNINGS/SHOW COUNT(*) WARNINGSクエリに対応しましたが、返される結果は常に空集合です。#58929 (Serge Klochkov)。 - 並列分散
INSERT SELECTを実行する際に、利用できないレプリカをスキップするようになりました。 #58931 (Alexander Tokmakov). - ログレベルを単語でわかりやすく表示しつつ、構造化ログの JSON 形式によるフォーマットを有効化しました。 #58936 (Tim Liou).
- MySQL インターフェイスが、データ型エイリアスを通じて
CAST(x AS SIGNED)およびCAST(x AS UNSIGNED)ステートメントをサポートするようになりました。SIGNEDは Int64 の、UNSIGNEDは UInt64 のエイリアスです。これにより、Looker Studio などの BI ツールとの互換性が向上します。 #58954 (Serge Klochkov)。 - 作業ディレクトリを Docker コンテナ内のデータパスに変更しました。 #58975 (cangyin)。
- Azure Blob Storage 向けの設定
azure_max_unexpected_write_error_retriesを追加しました。これは設定ファイルの azure セクションからも設定できます。 #59001 (SmitaRKulkarni). - 壊れたデータレイクテーブルが存在していてもサーバーを起動できるようにしました。#58625 をクローズ。#59080(Kseniia Sumarokova)。
Icebergテーブルエンジンにおけるスキーマ進化を無視し、テーブル作成時にユーザーが指定したスキーマ、またはテーブル作成時にメタデータから解析された最新のスキーマを用いて、すべてのデータを読み出せるようにします。これは、デフォルトでは無効になっているiceberg_engine_ignore_schema_evolution設定によって制御されます。この設定を有効にすると、スキーマが進化している場合でもすべてのデータファイルが同一スキーマで読み取られるため、結果が不正確になる可能性がある点に注意してください。 #59133 (Kruglov Pavel)。- 読み取り専用/一度限り書き込みのストレージに対してミュータブルな操作(
INSERT/ALTER/OPTIMIZE/ ...)を禁止し、適切なTABLE_IS_READ_ONLYエラーを返すようにしました(不要な残り物を避けるため)。CREATE/ATTACH時に、一度限り書き込みディスク上に不要なファイル(format_version.txt)が残らないようにしました。ReplicatedMergeTreeに対するDROPを(MergeTreeと同様に)無視するようにしました。s3_plain(MetadataStorageFromPlainObjectStorage::iterateDirectory)上のディレクトリ反復処理を修正しました。読み取り専用ディスクはwebディスクであり、一度限り書き込みディスクはs3_plainであることに注意してください。 #59170 (Azat Khuzhin). - 実験的な
_block_numberカラムにおいて、ALTERとmergeを複雑に組み合わせた場合に論理エラーを引き起こす可能性があるバグを修正しました。#56202 を修正し、#58601 を置き換えます。#59295(alesapin)。 - Play UI が JSON 内で例外が返された場合にそれを正しく認識できるようになりました。#52853 への調整です。#59303(Alexey Milovidov)。
/binaryHTTP ハンドラーでは、クエリ文字列内で user と host を指定でき、必要に応じて password も指定できます。#59311(Alexey Milovidov)。- 圧縮インメモリテーブルに対するバックアップをサポートします。この変更により #57893 がクローズされます。#59315(Alexey Milovidov)。
BACKUPおよびRESTOREクエリでFORMAT句がサポートされるようになりました。 #59338 (Vitaly Baranov).- 関数
concatWithSeparatorは、これまでStringとFixedString型の引数のみをサポートしていましたが、任意の引数型をサポートするようになりました。たとえば、SELECT concatWithSeparator('.', 'number', 1)はnumber.1を返すようになりました。 #59341(Robert Schulze)。
ビルド/テスト/パッケージングの改善
- clickhouse バイナリのエイリアスを改善しました(現在は、渡された引数に応じて
ch/clickhouseがclickhouse-localまたはclickhouseになります)、さらに新しいエイリアス向けの bash 補完を追加しました。 #58344 (Azat Khuzhin). - すべての設定変更が設定変更履歴に反映されていることを確認するため、CI に設定変更チェックを追加しました。 #58555 (Kruglov Pavel).
- stateful テストで、S3 から直接アタッチされたテーブルを使用するようにしました。 #58791 (Alexey Milovidov).
fuzzer.log全体を、最後の 100k 行ではなくアーカイブとして保存するようにしました。tail -n 100000によってテーブル定義を含む行が削除されてしまうことがよくあります。例: #58821 (Dmitry Novik).- macOS の Aarch64 で Rust を有効化しました(これにより、クライアントで skim を使ったあいまい検索と PRQL 言語が利用可能になりますが、darwin 上で ClickHouse をホストしている人はほとんどいないと思うので、主にクライアントでのあいまい検索のためと言えるでしょう)。 #59272 (Azat Khuzhin).
- x86_64 と ARM が混在するクラスタにおける集計の問題を修正しました。 #59132 (Harry Lee).
バグ修正(公式安定版リリースにおけるユーザーから見て明らかな誤動作)
- ネストされた LowCardinality 用の結合キーの変換を追加 #51550 (vdimir)。
- flatten_nested=1 の場合、すべての Array(Tuple) ではなく、ネイティブな Nested 型のみをフラット化するようにしました #56132 (Kruglov Pavel)。
- 挿入時にプロジェクションと
aggregate_functions_null_for_empty設定の組み合わせで発生するバグを修正しました。 #56944 (Amos Bird)。 - 古くなったプロファイル UUID に起因する可能性のある例外を修正しました #57263 (Vasily Nemkov)。
- StreamingFormatExecutor における読み取りバッファーの処理を修正 #57438(Kruglov Pavel)。
- ビューへのプッシュ時に、ターゲットテーブルが削除済みの MV を無視するようにしました #57520 (Kruglov Pavel)。
- ALTER_METADATA と MERGE_PARTS 間で発生し得るレースコンディションを排除しました #57755 (Azat Khuzhin)。
- ROLLUP を伴う GROUP BY での式順序に関するバグを修正 #57786 (Chen768959).
- 廃止された「zero-copy」レプリケーション機能に対する修正: 壊れた detached part を含むレプリカを削除した際に失われていた blob の問題を修正 #58333(Alexander Tokmakov)。
- ユーザーが user_files_path 内のシンボリックリンクを利用できるようにしました #58447 (Duc Canh Le)。
- graphite テーブルに agg 関数が存在しない場合に発生していたクラッシュを修正 #58453 (Duc Canh Le)。
- マテリアライズドビューで複数回の読み取りを行えるようにするため、StorageKafka からの読み取りを遅延させました #58477 (János Benjamin Antal)。
- パーツ同士が交差してしまうおかしなケースを修正 #58482 (Alexander Tokmakov)。
- LIMIT のみのクエリで MergeTreePrefetchedReadPool を無効化 #58505 (Maksim Kita)。
- 復元中も通常のデータベースを有効化 #58520 (Jihyuk Bok).
- ORC/Parquet/... 向けの Apache Hive スレッドプールによる読み取り処理を修正。 #58537 (sunny).
system.backup_logのbase_backup_nameカラム内に含まれる認証情報をマスクする #58550(Daniel Pozo Escalona)。- ミリ秒およびマイクロ秒単位の値の丸めに対応した
toStartOfInterval#58557(Yarik Briukhovetskyi)。 - ConcurrentHashJoin での
max_joined_block_rowsの無効化 #58595 (vdimir). - 旧アナライザでの Nullable を使った JOIN を修正 #58596 (vdimir)。
makeDateTime64: 非定数の fraction 引数を許可するように変更 #58597 (Robert Schulze).- インラインフレームのシンボル化中に発生し得る NULL ポインタ逆参照を修正 #58607 (Azat Khuzhin)。
- 再作成されたユーザーやロール切り替え時のクエリキャッシュエントリの分離性を改善 #58611 (Robert Schulze).
- 投影の最適化時に不正になっていたパーティションキー解析を修正 #58638 (Amos Bird).
- クエリキャッシュ: ユーザーごとのクォータの問題を修正 #58731 (Robert Schulze).
- 並列ウィンドウ関数のストリームパーティショニングを修正 #58739 (Dmitry Novik)。
- addBatchLookupTable8 内で例外スロー時に
destroyが二重に呼び出される問題を修正 #58745 (Raúl Marín)。 - シャットダウン中に Keeper がリクエストを処理しないようにする #58765 (Antonio Andelic)。
SlabsPolygonIndex::findにおけるヌルポインタ逆参照を修正 #58771 (Yarik Briukhovetskyi)。- LowCardinality(Nullable) カラム用の JSONExtract 関数を修正 #58808 (vdimir)。
- CREATE および DROP によって大量のテーブルを作成・削除する際に、メモリ使用量が想定外に増加してしまう問題の修正。 #58831 (Maksim Kita).
- マテリアライズドビュー(MV)における複数 read file ログストレージ #58877(János Benjamin Antal)。
- S3 のアクセスキー ID に対する制限。 #58900 (MikhailBurdukov).
- suggestions 読み込み中に発生する可能性のある clickhouse-local のクラッシュを修正 #58907 (Kruglov Pavel)。
indexHint使用時にクラッシュする問題を修正 #58911 (Dmitry Novik)。- サーバー再起動後に StorageURL がヘッダーを保持しない問題を修正 #58933 (Michael Kolupaev)。
- Analyzer: 挿入ブロックを用いたストレージの置換を修正 #58958 (Yakov Olkhovskiy)。
- ReadBufferFromZipArchive のシーク処理を修正 #58966 (Michael Kolupaev).
- 実験的な inverted index 向けの修正(本番環境では使用しないでください):inverted index に対する
DROP INDEXが、永続化領域から関連するすべてのファイルを削除するようになりました #59040 (mochi)。 - query_factories_info におけるデータレースを修正 #59049 (Kseniia Sumarokova)。
- 「Too many redirects」エラーに対する再試行を無効化 #59099 (skyoct).
- 未起動のデータベースのシャットダウン時に発生するデッドロックを修正 #59137 (Sergei Trifonov).
- 修正: 分散クエリにおける
LIMIT BYとLIMITの扱い #59153 (Igor Nikonov). toStringの NULL 許容タイムゾーン値で発生するクラッシュを修正 #59190 (Yarik Briukhovetskyi)。- 不正なファイルパスが指定された場合に Iceberg メタデータで発生する異常終了を修正 #59275 (Kruglov Pavel).
- Rust ターゲットの select で使用するアーキテクチャ名を修正 #59307 (p1rattttt).
- IN 句のサブクエリを使用して
system.tablesをクエリする際に発生する「not-ready set」に関する論理エラーを修正。 #59351 (Nikolai Kochetov).