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 という新しいデータベースエンジンを導入し、カタログ全体を 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として、またその逆にもアタッチできるクエリを追加しました。ATTACH TABLE ... AS REPLICATEDおよびATTACH TABLE ... AS NOT REPLICATED。 #65401 (Kirill).- 新しい設定
http_response_headersにより、HTTP レスポンスヘッダーをカスタマイズできるようになりました。たとえば、データベースに保存されている画像をブラウザに画像として表示させることができます。これにより #59620 が解決されました。 #72656(Alexey Milovidov)。 DateTime64を秒単位の固定精度のInt64値に変換する関数toUnixTimestamp64Secondを追加しました。これにより、日時が Unix エポックより前の場合に負の値を返せるようになりました。 #70597 (zhanglistar). #73146 (Robert Schulze).- 新しい設定
enforce_index_structure_match_on_partition_manipulationを追加し、ソーステーブルの PROJECTION およびセカンダリ索引の集合がターゲットテーブルのそれらの集合の部分集合である場合に 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)。 from引数に含まれる文字がto引数より多い場合に、余分な文字の削除をサポートするようにtranslate関数が拡張されました。例: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(ビルド)側として扱う JOIN の片側のテーブルを選択できるオプションを追加しました。これは
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 時に使用されるハッシュテーブルの数を削減するオプションを追加しました。これは、JOIN の ON 条件が、異なる OR 句内で AND で結合された共通部分を含んでいる場合に有効です。optimize_extract_common_expressions = 1で有効化できます。 #71537 (János Benjamin Antal).SELECTにおいて、インデックスが作成されているカラムがLowCardinality(String)に CAST されている場合でもインデックスを使用できるようにしました。これは、一部のテーブルがString型のカラムを持ち、別のテーブルがLowCardinality(String)型のカラムを持つような Merge テーブルに対してクエリを実行する場合などに発生し得ます。 #71598 (Yarik Briukhovetskyi).- 並列レプリカを用いたクエリ実行時に
localプランが有効な場合、ワーカー側では索引解析を実行しません。コーディネーターは、自身(クエリの発行元)側での索引解析に基づき、ワーカーが読み取る範囲を選択します。これにより、並列レプリカを用いる短時間のクエリでも、単一ノードのクエリと同等の低レイテンシーで実行できます。 #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を追加。materialized view のクエリを非同期かつ必要に応じてマルチスレッドで実行することで、INSERT 中の materialized view の処理を高速化できる一方、より多くのメモリを消費する可能性がある。 #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)で定義された Settings がクライアント側にも適用されるようになりました。
date_time_output_formatなどのフォーマット用 Settings に便利です。 #71178 (Michael Kolupaev). - サーバー/USER のメモリ使用量に応じて、
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)。
CREATE MATERIALIZED VIEWのクエリでUNION [ALL]を使用できるようになりました。動作はJOINを使用した materialized view と同じで、SELECT式内の最初のテーブルだけが挿入のトリガーとして機能し、他のすべてのテーブルは無視されます。ただし、最初のテーブルへの参照が複数ある場合(たとえば、自身との UNION など)の場合は、それらすべてが挿入されたデータブロックとして処理されます。 #72347 (alesapin).- ClickHouse を Dictionary のソースとして使用する場合のソースクエリ検証を追加しました。 #72548 (Alexey Katsman).
- ClickHouse が設定の再読み込み時にも ZooKeeper の変更を確実に検知できるようにしました。 #72593 (Azat Khuzhin).
- キャッシュされたマークのメモリ使用量の推定をより適切にし、キャッシュ全体のメモリ使用量を削減。 #72630 (Antonio Andelic).
- 新しい
StartupScriptsExecutionStateメトリクスを追加しました。このメトリクスは次の 3 つの値を取ります: 0 = スタートアップスクリプトがまだ完了していない、1 = スタートアップスクリプトが正常に実行された、2 = スタートアップスクリプトの実行が失敗した。Cloud において、特にベース構成へのリリース後にスタートアップスクリプトが正常に実行されているかどうかを把握する必要があるため、このメトリクスが必要です。 #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 において、このメタデータを使用している最後のテーブルが削除された後にのみ、ClickHouse 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が、すでに 1 つのパーツにマージ済みの同じパーティションを繰り返しマージしようとしてハングし、複数のパーツを持つパーティションをマージしない問題を修正。 #72209 (Christoph Wurm)。- まれなケースですが、スパースなカラムを処理する際に発生していた
SimpleSquashingChunksTransformのクラッシュを修正しました。 #72226 (Vladimir Cherkasov). GraceHashJoin内のデータレースを修正しました。これにより、結合結果から一部の行が欠落する可能性がありました。 #72233 (Nikita Taranov).enable_block_number_column設定が有効な場合における、マテリアライズドされた_block_numberカラムを含むALTER DELETEクエリの問題を修正しました。 #72261 (Anton Popov).ConcurrentHashJoinのコンストラクタ内などでColumnDynamic::dumpStructure()が並行して呼び出された場合に発生していたデータレースを修正しました。 #72278 (Nikita Taranov)。ORDER BY ... WITH FILLで重複したカラムがある場合に生じる可能性があるLOGICAL_ERRORを修正。 #72387 (Vladimir Cherkasov).optimize_functions_to_subcolumnsを適用した後、複数の箇所で発生していた型の不一致を修正しました。 #72394 (Anton Popov).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 つだけのグロブ(
{file}など)の解析処理を修正しました。 #72572 (Konstantin Bogdanov). ARRAY JOINを含む分散クエリにおいて、フォロワーサーバー向けのクエリ生成を修正しました。#69276 を修正します。 #72608(Dmitry Novik)。DateTime64型同士のIN演算(DateTime64 IN DateTime64)で結果が返らないバグを修正しました。 #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).
- マテリアライズされた
_block_numberカラムを持つミューテーションの不具合を修正しました(enable_block_number_column設定が有効な場合)。 #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 バンドルに統合されました。これにより次の issue が解決されました: #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)。 - 実行前に、完全な mutation クエリ(サブクエリを含む)を検証するようになりました。これにより、誤って無効なクエリを実行してしまい、有効な mutation をブロックする不要な mutation が蓄積されることを防ぎます。#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 storage、dictionary テーブル関数、または Dictionary 自体への直接
SELECTにより dictionary からデータを直接取得する場合、Dictionary に対する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)でユーザー名/パスワードを設定できるようにしました。 #70725 (Azat Khuzhin). - ORDER BY WITH FILL 演算子における staleness 句のサポートを追加しました。 #71151 (Mikhail Artemenko).
- 各認証方式に独自の有効期限を持たせられるようにし、USER エンティティからは削除しました。 #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 で、読み取り専用ディスクおよび write-once ディスク上のデタッチされたパーツを一覧表示しないようにしました。 #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を追加しました。これにより、システムデータベースの読み込みが完了していなくてもサーバーを起動できるようになります。システムテーブルが多数ある場合でも、ClickHouse をより高速に起動するのに役立ちます。 #69847 (Sergei Trifonov). clickhouse-compressorに--threadsパラメータを追加し、データを並列に圧縮できるようにしました。 #70860 (Alexey Milovidov).prewarm_mark_cacheという設定を追加しました。これにより、挿入、マージ、パーツのフェッチ、およびテーブルの起動時に、mark を 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_versionZooKeeper ノードの作成処理を削除しました。このノードを作成する必要があるシナリオは、ユーザーが 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).
- コマンドラインアプリケーションは、エラー発生時に 0 以外の終了コードを返すようになりました。以前のバージョンでは、
disksアプリケーションはエラー発生時でも終了コード 0 を返しており、他のアプリケーションも、エラー 256(PARTITION_ALREADY_EXISTS)および 512(SET_NON_GRANTED_ROLE)の場合に終了コード 0 を返していました。 #71623 (Alexey Milovidov). - user/group が ID で指定されている場合に
clickhouse suが失敗していました。このパッチでUID:GID形式も受け付けるようになりました。 #71626 (Mikhail f. Shiryaev). filesystem_cache_prefer_bigger_buffer_size設定により、filesystem cache におけるメモリバッファ拡張を無効化できるようにしました。 #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期間の 1 回の期間内に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)。
- 同じ ZooKeeper パス (zk path) を持つ別のレプリカが存在する場合に、
system drop replicaがその zk パスを削除できるようにしました。 #70642 (MikhailBurdukov). - AggregateFunctionGroupArraySorted におけるクラッシュおよびメモリリークを修正。 #70820 (Michael Kolupaev).
- URL エンジンで、ユーザー指定ヘッダーにより Content-Type を上書きできるようにしました。 #70859 (Artem Iurin)。
StorageS3Queueで発生していた論理エラー「既に存在するため /processed に永続ノードを作成できません」を修正。 #70984 (Kseniia Sumarokova).- 特定の状況下で、名前付きセッションが終了せず、無期限にハングし続ける問題を修正しました。 #70998 (Márcio Martins).
- PROJECTION における論理削除の 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 フォーマットで format 設定が無視されていた問題を修正。 #71193 (Pavel Kruglov).
use_query_cache = 1を設定して実行した SELECT クエリでも、システムテーブル名がリテラルとして現れる場合に拒否されることがなくなりました。例えばSELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;は現在は問題なく動作します。 #71254 (Robert Schulze)。- enable_filesystem_cache=1 を指定した状態で、ストレージ構成のディスクにキャッシュ設定がない場合にメモリ使用量が増加していた不具合を修正しました。 #71261 (Kseniia Sumarokova).
- Dynamic カラムからの LowCardinality Dictionary デシリアライズ時に発生する可能性のある「Cannot read all data」エラーを修正しました。 #71299 (Pavel Kruglov).
- クライアントにおける並列出力フォーマットで、クリーンアップが不完全になる問題を修正。 #71304 (Raúl Marín)。
- Named Collection で不足していたエスケープ解除処理を追加しました。この修正がない場合、clickhouse-server を起動できません。 #71308 (MikhailBurdukov).
- ネイティブプロトコル経由で空ブロックを伴う非同期インサートを修正。 #71312 (Anton Popov)。
- 誤ったワイルドカードを用いて権限を付与した際の AST フォーマットの不整合を修正。#71309。#71332(pufit)。
- データパーツのデストラクタに try/catch を追加して、std::terminate の発生を防ぎます。 #71364 (alesapin).
- JSON 型ヒント内の疑わしい型や実験的な型をチェック。 #71369 (Pavel Kruglov).
- Linux以外のOSでもメモリワーカースレッドを起動するようにした(#71051 を修正)。#71384(Alexandre Snarskii)。
- Variant 型のカラムを含む Chunk で発生するエラー "Invalid number of rows in Chunk" を修正。 #71388 (Pavel Kruglov)。
- 古い PostgreSQL バージョンで「column "attgenerated" does not exist」というエラーが発生する問題を修正し、#60651 を解決しました。#71396 (0xMihalich)。
- サーバーログがスパム的に出力されるのを避けるため、認証失敗の試行は、これまでの
ERRORレベルではなくDEBUGレベルでログ出力されるようになりました。 #71405 (Robert Schulze). mongodbテーブル関数に誤った引数(例:NULL)を渡した際にクラッシュが発生する不具合を修正。 #71426 (Vladimir Cherkasov).- optimize_rewrite_array_exists_to_has によるクラッシュの問題を修正。 #71432 (Raúl Marín).
- INSERT 時における
max_insert_delayed_streams_for_parallel_write設定の扱いを修正しました。以前は正しく動作しておらず、複数のパーティションにデータを書き込む INSERT でメモリ使用量が過大になる可能性がありました。 #71474 (Anton Popov). - arrayJoin が
WHERE条件内に現れる可能性がある場合に発生しうる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 型に対して、wide part におけるカラムサイズの計算を修正。 #71526 (Pavel Kruglov).
- materialized view 内のクエリが CTE と組み合わせて IN を使用している場合の Analyzer の不具合を修正。#65598 をクローズ。#71538(Maksim Kita)。
- CONSTRAINT 内で UDF を使用した場合にクラッシュする問題を修正しました。 #71541 (Raúl Marín).
- bitShift 関数で範囲外となった場合にエラーをスローする代わりに、0 またはデフォルト文字を返すようにしました。 #71580 (Pablo Marcos).
- 特定のエンジンを使用する materialized view の利用時にサーバーがクラッシュする問題を修正しました。 #71593 (Pervakov Grigorii).
- 定数配列へのエイリアスを含むネストしたデータ構造での array join により、ヌルポインタ参照が発生していました。これにより#71677がクローズされました。#71678 (Alexey Milovidov)。
- 空のタプルを指定して ALTER を実行した際に発生する LOGICAL_ERROR を修正しました。これにより #71647 が解決されます。 #71679 (Amos Bird)。
- NOT IN 演算子が使用されている場合、パーティションカラムに対する述語内の定数集合を変換しないようにしました。 #71695 (Eduard Karacharov).
- より分かりやすくするため、
docker initスクリプト失敗時のログメッセージを修正。 #71734 (Андрей)。 - LowCardinality(Nullable) から Dynamic への CAST を修正しました。これにより、以前は
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullableというエラーが発生する可能性がありました。 #71742 (Pavel Kruglov). - DateTime64 型の主キーに対する WHERE 条件で toDayOfWeek 関数により発生する例外を修正。 #71849 (Yakov Olkhovskiy).
- スパースカラムにパースした後のデフォルト値の補完処理を修正しました。 #71854 (Anton Popov).
- 分散テーブル上で入力が ALIAS の場合に GROUPING 関数で発生していたエラーを修正し、#68602 をクローズ。#71855(Vladimir Cherkasov)。
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)。
ORDER BY句で、最初の引数が定数であるバイナリ単調関数を使用したMergeTreeテーブルで発生するIllegal typeエラーを修正。#71941 を修正。#71966(Nikolai Kochetov)。- サブクエリ内で使用される EXPLAIN AST では、SELECT クエリのみが許可されます。その他の種類のクエリを使用すると、論理エラー('Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery' または
Inconsistent AST formatting)が発生します。 #71982 (Pavel Kruglov). clickhouse-clientでレコードを挿入する際、クライアントはサーバーからカラム定義を取得します。しかし、その定義を書き込む順序に不具合がありました。本来は [statistics, ttl, settings] の順であるべきでした。#71991(Han Fei)。format_alter_commands_with_parenthesesが有効な場合のMOVE PARTITION ... TO TABLE ...の ALTER コマンドのフォーマットを修正しました。 #72080 (János Benjamin Antal).- 並列レプリカを使用するクエリにおける RIGHT / FULL JOIN を修正しました。これにより、RIGHT JOIN は並列レプリカで実行できるようになり(右側テーブルの読み取りが分散されます)が、FULL JOIN はノード間で並列化できず、ローカルでのみ実行されます。 #71162 (Igor Nikonov).
- 制限されたシステムコールにより、Docker コンテナ内の ClickHouse が標準エラー出力に「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 が解決されます。クエリ内で 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 テーブル
system.query_metric_logを追加しました。このテーブルには、個々のクエリに対してsystem.eventsテーブルから取得したメモリ使用量およびメトリクス値の履歴が含まれ、定期的にディスクに書き出されます。 #66532 (Pablo Marcos)。 - 暗黙の SELECT を用いることで、
ch "1 + 2"のような電卓スタイルの式を実行するシンプルな SELECT クエリを記述できます。この挙動は新しい設定implicit_selectによって制御されます。#68502(Alexey Milovidov)。 - clickhouse local で、フォーマット変換を行うためのショートカットとして
--copyモードがサポートされました #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).- これまで
INSERT ... WITH ...のみをサポートしていましたが、WITH ... INSERT形式の CTE もサポートするようになりました。 #70593 (Shichao Jin). - MongoDB 連携機能: すべての MongoDB 型のサポート、MongoDB 側での WHERE および ORDER BY 文のサポート、MongoDB がサポートしない式を使用できないようにする制限を追加しました。新しい連携機能はデフォルトでは無効になっているため、使用するにはサーバー設定で
<use_legacy_mongodb_integration>をfalseに設定してください。#63279(Kirill Nikiforov)。 - 現在のプロファイルにカスタム設定が見つからない場合でも、例外を発生させずにデフォルト値を返すための新しい関数
getSettingOrDefaultが追加されました。 #69917 (Shankar)。
Experimental feature
- リフレッシャブルmaterialized view は本番環境で利用可能になりました。 #70550 (Michael Kolupaev)。また、リフレッシャブルmaterialized view は 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)。RowBinaryフォーマットにおいて、input_format_binary_read_json_as_string/output_format_binary_write_json_as_string設定により、JSON型をバイナリ文字列として読み書きできるようにしました。 #70288 (Pavel Kruglov)。- Native フォーマットで、
JSONカラムを単一の String カラムとしてシリアライズ/デシリアライズできるようにしました。出力にはoutput_format_native_write_json_as_string設定を使用します。入力では、カラムデータの前にシリアライズバージョン1を指定します。 #70312 (Pavel Kruglov)。 - MergeTree テーブル向けに、特別な(experimental)マージセレクターモードを導入しました。これは、パーツ数の上限に近いパーティションに対して、より積極的にマージを行うものです。この動作は MergeTree レベルの設定
merge_selector_use_blurry_baseによって制御されます。 #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 ファイルの読み込み時に Bloom フィルターを使用するようになりました。 #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 ビット 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*で needle に空文字列を指定できるようにしました。 #70053 (zhanglistar). data/database_name/ディレクトリ内のテーブルに対するシンボリックリンクは、デフォルトディスク上のstore/...ディレクトリではなく、ストレージポリシーに基づきテーブルデータの実際のパスを指すように作成されるようになりました。 #61777 (Kirill).JSONからEnumフィールドをパースする際、整数値を表す文字列は、対応するEnum要素として解釈されるようになりました。これにより #65119 がクローズされました。 #66801 (scanhex12).TRIMでLEADINGまたはTRAILINGに空文字列を指定した場合は、変更を伴わない no-op として扱うようにしました。#67792 をクローズ。#68455(Peter Nguyen)。cast(timestamp as String)における Spark との互換性を改善。#69179(Wenzheng Liu)。enable_analyzerがtrueに設定されている場合、定数式の計算には常に新しい analyzer が使用されるようになりました。定数式に対して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"}のいずれかであり、かつ曖昧さを招く可能性がある場合(カラム名や Dictionary 属性名など)。 -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を追加しました。アラートで実際の読み取り専用レプリカとセンチネルレプリカを区別できるようにするためです。 #69871 (Miсhael Stetsyuk)。join_output_by_rowlist_perkey_rows_thresholdSETTING の型を符号なし整数に変更しました。 #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)。- クラウドストレージがバッチ削除をサポートしているかどうかを判定する方法を変更しました。 #70786 (Vitaly Baranov)。
- ネイティブリーダーにおける Parquet ページ v2 のサポート。 #70807 (Arthur Passos).
- テーブルに
storage_policyとdiskの両方が設定されているかをチェックする機能を追加しました。diskSETTING を使用している場合に、新しいストレージポリシーが既存のポリシーと互換性があるかをチェックする機能も追加しました。#70839 (Kirill)。 system.s3_queue_settingsとsystem.azure_queue_settingsを追加しました。 #70841 (Kseniia Sumarokova).- 関数
base58Encodeとbase58Decodeは、FixedString型の引数を受け取れるようになりました。例:SELECT base58Encode(toFixedString('plaintext', 9));。 #70846 (Faizan Patel). - part log のすべてのエントリ種別に
partitionカラムを追加しました。以前は一部のエントリにのみ設定されていました。これにより #70819 が解決されました。#70848(Alexey Milovidov)。 - マージ処理の分析と可視化を行いやすくするために、
MergeStartおよびMutateStartイベントをsystem.part_logに追加しました。 #70850 (Alexey Milovidov). - マージされたソースパーツ数に関するプロファイルイベントを追加しました。これにより、本番環境での MergeTree のファンアウトを監視できます。 #70908 (Alexey Milovidov).
- バックグラウンドでのファイルシステムキャッシュへのダウンロード機能が再度有効化されました。 #70929 (Nikita Taranov).
- プロフェッショナル用途向けのみ使用可能な新しいマージセレクタアルゴリズム
Trivialを追加しました。これはSimpleマージセレクタよりも性能が低いアルゴリズムです。 #70969 (Alexey Milovidov)。 CREATE OR REPLACE VIEWのアトミックなサポート。 #70536 (tuanpach)- 集約関数
windowFunnelにstrict_onceモードを追加し、1つのイベントが複数の条件に一致する場合に複数回カウントされないようにしました。#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_controlSETTING の処理を修正しました。これにより、以前は正しく動作していなかった並行実行制御がデフォルトで有効になります。 #61473 (Sergei Trifonov).NOTなどの他の関数内でIS NULLチェックが行われている場合に誤った結果を招く可能性があった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). - ネストされた繰り返しフィールドを持つ 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 の場合に 'Bad get' 例外をスローしていた
maxMapStateを修正しました。 #69787 (Michael Kolupaev). useDefaultImplementationForLowCardinalityColumnsをオーバーライドしてtrueを返すようにすることで、LowCardinalityカラムに対するgetSubcolumnを修正しました。 #69831 (Miсhael Stetsyuk).- 分散テーブルの DROP が失敗した場合に、分散送信が永続的にブロックされる問題を修正。 #69843 (Azat Khuzhin).
- NaN キーを含む WITH FILL 付きのクエリがキャンセルできない問題を修正しました。これにより #69261 が解決しました。 #69845 (Alexey Milovidov).
- 古い互換性値を使用している場合のアナライザーのデフォルト値を修正。 #69895 (Raúl Marín).
- 古いテーブルを DROP する際には、CREATE OR REPLACE VIEW 実行時に依存関係をチェックしないようにしました。以前は、再作成される VIEW に依存するテーブルが存在すると、CREATE OR REPLACE クエリが失敗していました。 #69907 (Pavel Kruglov)。
- Decimal に関する変更。#69730 を修正。#69978(Arthur Passos)。
- DEFINER/INVOKER がパラメータ付きビューでも動作するようになりました。 #69984 (pufit).
- VIEW の 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).
- ALTER TABLE MODIFY COLUMN/クエリの実行中に Nullable(Nothing) 型をチェックし、そのようなデータ型を持つテーブルが作成されるのを防ぐようになりました。 #70123 (Pavel Kruglov)。
- 不正なクエリ
JOIN ... ON *に対して適切なエラーメッセージを出力するようにしました。#68650 をクローズしました。 #70124 (Vladimir Cherkasov)。 - スキップ索引により誤った結果が返される問題を修正。 #70127 (Raúl Marín).
- ColumnObject/ColumnTuple の decompress メソッドにおけるデータレースを修正しました。この問題により、解放後のヒープ領域を使用してしまう可能性がありました。 #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).
- 2つのSELECT文と
INTERSECTを含む materialized view を作成する際に発生していたヌルポインタ参照を修正しました。例:CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);。#70264(Konstantin Bogdanov)。 - 起動スクリプトでグローバル設定を変更しないでください。以前のバージョンでは、起動スクリプト内で設定を変更すると、その設定がグローバルに適用されていました。#70310(Antonio Andelic)。
Dynamic型に対して max_types パラメータを減らすALTERを行うとサーバがクラッシュする可能性があった問題を修正しました。 #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).
- 行を含まないパーツについては、垂直マージ時のプリフェッチを行わないようにしました。 #70452 (Antonio Andelic).
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). - テーブル関数 s3 への INSERT がクエリ設定を反映するようになりました。 #70696 (Vladimir Cherkasov).
- サポートされていないフィールドをスキップする設定が有効になっている場合に、protobuf スキーマの推論時に発生していた無限再帰を修正しました。 #70697 (Raúl Marín).
- デフォルトで enable_named_columns_in_function_tuple を無効化しました。 #70833 (Raúl Marín).
- サーバーの CPU コア数から自動的に決定された場合に、S3Queue テーブルエンジンの設定 processing_threads_num が有効になっていなかった問題を修正。 #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データ型が Pretty 形式で出力されるようになりました。以前のバージョンでは、この設定は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)。
新機能
- 1人のユーザーに対して、1つだけでなく複数の認証方法を利用できるようにしました。認証方法は、最後に追加された方法にリセットできるようになりました。しばらくの間、一部のインスタンスを 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_defaultSETTING を追加しました。有効にすると、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)。
実験的機能
- テキストフォーマットでスキーマ推論を行う際、カラム/配列要素に対して複数の型が候補となる場合に
Variant型を推論できるようにするinput_format_try_infer_variantsSETTING を追加しました。 #63798 (Shaun Struwig). - JSON カラムの型の内容をより良く解析するための集約関数
distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypesを追加しました。 #68463 (Kruglov Pavel). - コンシステントハッシュにより並列レプリカ間でマークの分配単位を決定する新しいアルゴリズムを導入しました。異なる読み取りパターンに対して異なる数のマークを選択することで、パフォーマンスを向上させます。 #68424 (Nikita Taranov).
- これまで並列レプリカのアナウンス処理におけるパート重複排除ロジックのアルゴリズムの計算量は O(n^2) であり、多数のパート(またはパーティション)を持つテーブルでは無視できない時間がかかることがありました。この変更により計算量は O(n*log(n)) になります。 #69596 (Alexander Gololobov).
- リフレッシャブルmaterialized view の改善: 既存テーブル全体を上書きするのではなく行を追加するアペンドモード(
... 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 使用率を最大化するため、group by キーで集約する際に
uniq集約関数に対して並列マージを追加しました。#68441 (Jiebin Sun). - ユーザーが
ORC出力フォーマットで文字列カラムに対して辞書エンコーディングを有効化できるように、output_format_orc_dictionary_key_size_threshold設定を追加しました。これにより出力されるORCファイルサイズが削減され、読み取りパフォーマンスが大幅に向上します。#68591 (李扬). - ノードとそのすべての部分木を削除する新しい Keeper リクエスト
RemoveRecursiveを導入しました。#69332 (Mikhail Artemenko). - ベクトル類似性索引を持つテーブルへの挿入時に、ベクトル索引へのデータ追加を並列化することで、挿入パフォーマンスを高速化しました。#69493 (flynn).
- 適応的な書き込みバッファサイズを使用することで、JSON への INSERT のメモリ使用量を削減しました。
wideパートの 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 (李扬). - プロジェクションを持つテーブルで論理削除が発生する場合、これまでは(デフォルトでは)例外をスローするか、論理削除の際にプロジェクションを削除するかのいずれかをユーザーが選択する必要がありましたが、新たに第三の選択肢として、論理削除を実行した後にプロジェクションを再構築できるようになりました。 #66169 (jsc0218).
- IP ファミリに基づいて接続をブロックできるようにするため、2 つのオプション(
dns_allow_resolve_names_to_ipv4とdns_allow_resolve_names_to_ipv6)が追加されました。#66895 (MikhailBurdukov)。 - clickhouse-client で Ctrl-Z を無視する動作(ignore_shell_suspend)を設定可能にしました。 #67134 (Azat Khuzhin).
- JSON 出力フォーマットにおける UTF-8 検証を改善しました。結果データに特定のバイト列が含まれている場合でも、有効な JSON が生成されることを保証します。 #67938 (mwoenker).
- マージおよびミューテーションの解析性を高めるために、profile events を追加しました。 #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 collection 関連の旧コードを削除し、DDL で作成された named collection を辞書で利用できる新しいコードに置き換えました。#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 イメージの entrypoint スクリプトで 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 エンジンにおいて、PostgreSQL の dbname に "-" が含まれている場合のテーブルのアタッチ処理を修正。 #62730 (takakawa)。
- 実験的であり完全に非サポートの MaterializedPostgreSQL エンジンにおいて、adnum の順序付けが壊れている場合の生成カラムに関するエラーを修正しました #63161。同じく実験的で完全に非サポートの MaterializedPostgreSQL エンジンにおいて、テーブル内に生成カラムが存在する場合に、デフォルト値として nextval 式を使用する id カラムで発生していたエラーを修正しました。さらに、
[a-z1-9-]以外の文字を含むパブリケーションを削除する際のエラーを修正しました #67664 (Kruglov Kirill)。 - 左側テーブルの Nullable カラムをサポートするように Storage Join を修正。#61247 をクローズ。#66926 (vdimir)。
IN演算子に Decimal() への変換が含まれている場合に、parallel replicas(およびクエリの分散実行)で誤ったクエリ結果が返される問題を修正しました。このバグは新しいアナライザーによって導入されました。 #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).- VIEW へのフラッシュが遅いために、WindowView でブロックが欠落する問題を修正。 #67983 (Raúl Marín)。
- 不正な日付形式が原因で発生していた MSan の問題を修正しました。 #68105 (JackyWoo)
- ファイル内のデータ型が要求された型と大きく異なる場合(例:
... FROM file('a.parquet', Parquet, 'x String')だが、ファイル側はx Int64の場合)に、Parquet フィルタリングがクラッシュする問題を修正しました。この修正が適用されていない場合は、回避策としてinput_format_parquet_filter_push_down = 0を使用してください。 #68131 (Michael Kolupaev). - #67091 で発生していた
lag/leadのクラッシュを修正。 #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)。- regexp フラグを正しく処理するようにしました。 #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)。 - 2 つの分布のサイズが等しくない場合の
mann-whitney-utestのバグを修正。 #68556 (Han Fei). - 予期しない再起動後に、破損したパーツに覆われているパーツの処理が異常となり、ReplicatedMergeTree のレプリケーションを開始できなくなる問題を修正しました。 #68584 (baolin).
- 空の配列またはタプルに対して関数
sipHash64Keyed、sipHash128Keyed、sipHash128ReferenceKeyedを適用した際に発生していたLOGICAL_ERRORを修正しました。 #68630 (Robert Schulze). - Full text index が複数のカラムに対して作成された場合に誤ったカラムをフィルタリングしてしまうことがありました。原因は、異なるカラム間で
row_idをリセットしていなかったためで、再現手順はtests/queries/0_stateless/03228_full_text_with_multi_col.sqlにあります。 #68644 (siyuan). - Replicated テーブルを作成する際に、replica_name に無効な文字 '\t' および '\n' が含まれていると、LogEntry 内の 'source replica' が正しく解釈されない問題を修正しました。GitHub issue #68640 で報告されています。#68645(Zhigao Hong)。
- 分散テーブルに仮想カラム
_tableと_databaseを再度追加しました。これらはバージョン 24.3 まで利用可能でした。 #68672 (Anton Popov). - Variant カラムの並べ替え処理中に発生する可能性のある
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).
- ReplicatedMergeTree テーブルを作成し、カラムに対して ALTER を行った後に MODIFY STATISTICS を実行すると発生していた論理エラーを修正しました。 #68820 (Han Fei).
- analyzer におけるサブクエリ由来の動的サブカラムの解決処理を修正。 #68824 (Kruglov Pavel).
- DeltaLake における複合型メタデータの解析処理を修正。#68739 をクローズ。#68836(Kseniia Sumarokova)。
ALTER ADD/MODIFY COLUMNクエリによって、挿入は完了しているがテーブルへのフラッシュ前のタイミングでテーブルのメタデータが変更された場合に発生する非同期挿入の問題を修正しました。 #68837 (Anton Popov).arrayに空のタプルを渡したときに予期しない例外が発生していた問題を修正しました。これにより #68618 が解決されます。 #68848 (Amos Bird)。- 純粋なメタデータのみを対象とする
MUTATIONSコマンドのパースを修正。 #68935 (János Benjamin Antal). - anyHeavy ステートのマージ中に誤った結果が生じる可能性があった問題を修正。 #68950 (Raúl Marín).
optimize_functions_to_subcolumns設定を有効にしている場合の materialized view への書き込みを修正しました。 #68951 (Anton Popov).- const Dynamic カラムのメソッドで serializations cache を使用しないようにしました。これを使用すると、集計中に未初期化の値が使われたり、レースコンディションが発生したりする可能性がありました。 #68953 (Kruglov Pavel).
- JSON 型のパース時に、一部のケースでデフォルトとして
nullを挿入すべき場面で発生していたパースエラーを修正。 #68955 (Kruglov Pavel)。 - 一部の圧縮レスポンスで
Content-Encodingヘッダーが送信されない不具合を修正。 #64802。 #68975 (Konstantin Bogdanov)。 - パスが誤って連結されて
//が含まれてしまうケースがあったため、パスの正規化によりこの問題を解消しました。 #69066 (Yarik Briukhovetskyi). - 非同期挿入が空の場合に発生する論理エラーを修正。 #69080 (Han Fei).
clickhouse-clientにおいて、クエリのキャンセル中に発生する進捗表示のデータレースを修正しました。 #69081 (Sergei Trifonov).- コサイン距離を距離関数として使用した場合に、ベクトル類似度索引(現在は実験的機能)が利用されていなかった不具合を修正しました。 #69090 (flynn)。
- この変更は、初回の作成処理中にサーバー障害が発生した後に、再度 Replicated データベースを作成しようとするとエラーになる可能性があった問題に対処します。 #69102 (Miсhael Stetsyuk).
input_format_csv_try_infer_numbers_from_strings = 1の場合でも、CSV で String から 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モードでlog_commentSETTING を変更できず失敗していました)。 #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型を主キーとしては安全でない型としてマークしました。 #69311 (Kruglov Pavel).- アクセスエンティティ間の依存関係の復元処理を改善。 #69346 (Vitaly Baranov).
- 挿入用の接続の取得がすべて失敗した場合に発生していた未定義動作を修正しました。 #69390 (Pablo Marcos).
- #69135 をクローズしました。
crossjoin で結合済みデータを再利用しようとしていますが、現時点の ClickHouse ではそのようなケースは発生しません。reuseJoinedData内でhave_compressedを保持しておく方がよいです。#69404(lgbo)。 materialize()関数が、スパースなカラムを引数に取った場合に完全なカラムを返すようにしました。 #69429 (Alexander Gololobov).- 関数
sqidDecodeで発生していたLOGICAL_ERRORを修正(#69450)。#69451(Robert Schulze)。 - 24.6 における s3queue の問題、または DATABASE REPLICATED を使用した CREATE クエリに対する簡易的な修正。 #69454 (Kseniia Sumarokova).
INSERT INTO ... SELECTまたはCREATE TABLE AS SELECTクエリでの squashing 処理によりメモリ消費が過大になっていた問題を修正しました。 #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 で新しいレプリカを作成する際に、WHERE 句を含む有効期限 (TTL) が原因で発生する可能性があった 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)。 - 以前のバージョンでは、ガンマ関数に基づく乱数分布(カイ二乗、スチューデント、フィッシャーなど)の関数をゼロに近い負の引数で呼び出した場合、計算に非常に長い時間がかかる、または無限ループに陥ることがありました。新しいバージョンでは、これらの関数をゼロまたは負の引数で呼び出すと、例外がスローされます。これにより #67297 が解決されました。#67326(Alexey Milovidov)。
- システムテーブル
text_logがデフォルトで有効になりました。これは以前のバージョンとの互換性を完全に維持していますが、ローカルディスク上のディスク使用量がわずかに増加していることに気付くかもしれません(このシステムテーブルはごく少量のディスク容量しか使用しません)。#67428(Alexey Milovidov)。 - 以前のバージョンでは、非常に大きな配列の生成を要求した場合、
arrayWithConstantが遅くなることがありました。新しいバージョンでは、1 つの配列あたり 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)。 LEFT/RIGHT SEMI/ANTI/ANY JOINなど、より多くの JOIN strictness の種類で、左テーブルと右テーブルの両方のカラムを参照する不等号条件(例:t1.y < t2.y)をサポートしました(allow_experimental_join_condition設定を参照)。#64281 (lgbo).- Hive スタイルのパーティショニングを、
File、URL、S3、AzureBlobStorage、HDFSといった異なるエンジンで解釈できるようにしました。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 にコミットするのではなく Keeper に保存する、新しい実験的な
Kafkaストレージエンジンを追加しました。これにより、キューからの消費に対する 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). - オブジェクトストレージ内の MergeTree データとは別に、
plain_rewritableディスクディレクトリのメタデータを__metaレイアウトに保存するようにしました。また、plain_rewritableディスクをフラットなディレクトリ構造に移行しました。 #65751 (Julia Kartseva). - すべてのサブカラム向けに必要なメモリを事前に確保することで、
String/Array/Map/Variant/Dynamic型に対するカラムの「squashing」(INSERTクエリで発生する処理)を改善しました。 #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の Setting はenable_analyzerにリネームされました。古い名前はエイリアスとして引き続き利用できます。これは、Analyzer がもはやベータ版ではなく、本番利用が想定された正式な機能になったことを意味します。 #66438 (Nikita Mikhaylov)。- 日付・時刻のスキーマ推論を改善しました。日時値に小数部がある場合にのみ DateTime64 を使用し、それ以外では通常の DateTime を使用します。Date/DateTime の推論はこれまでより厳密になり、とくに
date_time_input_format='best_effort'の場合には、特殊なケースで文字列を日付・時刻として推論してしまうことを避けるようになりました。 #68382 (Kruglov Pavel). - ClickHouse server は新しい設定項目
max_keep_alive_requestsをサポートするようになりました。サーバーへの keep-alive HTTP 接続に対しては、keep_alive_timeoutと組み合わせて動作します。アイドルタイムアウトがまだ経過していなくても、その接続経由で処理されたリクエスト数がmax_keep_alive_requestsを超えた場合、その接続はサーバーによって切断されます。 #61793 (Nikita Taranov)。 - 高度なダッシュボードにさまざまな改善を行いました。これにより #67697 をクローズしました。これにより #63407 をクローズしました。これにより #51129 をクローズしました。これにより #61204 をクローズしました。 #67701(Alexey Milovidov)。
- 分散テーブルを作成する際に REMOTE への権限付与は不要になりました。Distributed エンジンへの権限付与だけで十分です。 #65419 (jsc0218).
- Docker イメージ内で keeper 向けのログを明示的に渡さないようにし、上書きできるようにしました。 #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). - 関数
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)。
- Aarch64 Linux 向けビルドで
-no-pieを有効化し、ClickHouse 再起動後でもスタックトレースを適切に解析およびシンボル解決できるようにしました。 #67916 (filimonov). - マージおよびミューテーションの挙動をより詳細に把握できるよう、profile events を追加しました。 #68015 (Anton Popov).
- レプリカなしの
MergeTreeにおける不要なログ出力を削除。#68238(Daniil Ivanik)。
ビルド/テスト/パッケージングの改善
- 統合テストに対するフレークチェックが、テスト内のさらなる問題を検出して信頼性を高めるために、各テストケースを複数回実行するようになりました。同一の環境でテストケースを複数回実行するために
pytest-repeatライブラリを使用しています。テストケースを成功させるには、テストケースの最後にテーブルやその他のエンティティをクリーンアップすることが重要です。必要なコンテナを一度だけ起動すればよいため、pytest を複数回実行するよりも、繰り返し実行の方がはるかに高速です。#66986 (Ilya Yatsishin)。 - ClickHouse で CLion を使用できない問題を解消しました。以前のバージョンでは、CLion がキー入力のたびに 1 分程度フリーズしていました。この変更により #66994 が解決されます。#66995 (Alexey Milovidov)。
- 新しい Linux カーネルにおける高い ASLR エントロピーが原因で、sanitizer による再実行時に発生していた getauxval のクラッシュを回避しました。#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など)に送信されるクエリ内の boolean リテラルの扱いを修正しました。 #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)。 cluster()のサーバー間シークレットに関する動作を修正し、従来どおり元のユーザーを保持するようにしました。 #66364 (Azat Khuzhin).- null を含む Array フィールドを Array(Variant) に変換する際に発生する可能性があった実行時エラーを修正。 #66727 (Kruglov Pavel).
- Context::getDDLWorker でまれに発生するデッドロックを修正しました。 #66843 (Alexander Gololobov).
- 不完全な DROP 後に KeeperMap テーブルを作成できない問題を修正。#66865 (Antonio Andelic)。
s3_plain_rewritableディスクへリストアする際に発生していた「Broken part」エラーを修正。 #66881 (Vitaly Baranov).- まれに、ディスク上の予期しないプロジェクションが原因で、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 ではこの SETTING が有効な場合に誤って許可されていました。 #66980 (vdimir).max_rows_to_read制限が設定されている場合に、numbersからの読み取り時に誤って例外がスローされることがありました。これにより #66992 がクローズされました。 #66996 (Alexey Milovidov)。- lagInFrame および leadInFrame ウィンドウ関数に適切な型変換を追加し、msan テストを修正。 #67091 (Yakov Olkhovskiy).
- 以前は TRUNCATE DATABASE が DROP DATABASE クエリと同様にレプリケーションを停止してしまう問題がありましたが、これを修正しました。 #67129 (Alexander Tokmakov).
clickhouse-localで独立したクライアントコンテキストを使用するようにしました。 #67133 (Vitaly Baranov)。- 1 分片のみを持つ
Distriburtedテーブル上の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)。 - 単一の Nullable キーでの GROUP BY 中に例外が発生した場合に、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 に非決定的関数が指定されているもう 1 つのケースを修正しました。 #67395 (Nikolai Kochetov).
bloom_filter索引が、(k=2)=(k=2)やhas([1,2,3], k)のようなやや奇妙な条件を含むクエリを失敗させてしまう問題を修正しました。 #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 を修正: 新しい analyzer を使用した場合、
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を使用するVIEWの作成を修正。 #67587 (Yakov Olkhovskiy).
- filesystem cache における
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)。
- 実験的な Variant 型を使用し、Tuples および Maps を引数に取る
if関数で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が発生した場合に Dictionary がハングする不具合を修正。 #67751 (Azat Khuzhin). c列にブルームフィルター索引がある場合の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).
checksums.txtには存在するがディスク上には存在しない PROJECTION について、ClickHouse はそのパーツが破損しているとは見なさなくなりました。 #68003 (alesapin)。- 新しいアナライザー使用時の、未変更パーツをスキップする処理を修正しました。以前はアナライザーが有効な場合、述語に基づけばこのパーツには影響しないはずのミューテーションであっても、そのパーツ内のデータが書き換えられてしまう可能性がありました。 #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で 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). - Materialized Views に対する重複排除の動作を変更しました。次のような多数のケースを修正しました: - 宛先テーブル上: データが 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)。
- クライアントが自己署名証明書で稼働しているサーバーにセキュアな TCP で接続できるようにするため、クライアント設定で
accept_invalid_certificateをサポートしました。これは、対応するopenSSLクライアント設定verificationMode=none+invalidCertificateHandler.name=AcceptCertificateHandlerの省略形として利用できます。#65238 (peacewalker122)。 - テーブル system.errors に含まれるエラー値の履歴を保持し、定期的にディスクへフラッシュする system.error_log を追加しました。#65381 (Pablo Marcos)。
- 集約関数
groupConcatを追加しました。arrayStringConcat( groupArray(column), ',')とほぼ同等です。文字列の区切り文字と、処理する要素数という 2 つのパラメータを受け取ることができます。#65451 (Yarik Briukhovetskyi)。 - AzureQueue ストレージを追加しました。#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)。
- プロジェクションを持つテーブルで論理削除が行われる場合、ユーザーは(デフォルトの)例外を投げるか、あるいはプロジェクションを DROP するかを選択できるようになりました。#65594 (jsc0218)。
- すべてのデタッチされたテーブルに関する主要な情報を持つ system テーブルを追加しました。#65400 (Konstantin Morozov)。
実験的機能
Variantデータ型のバイナリシリアライズ形式を変更しました。単一の variant しか持たない、または NULL 値のみを持つ granule について、同じ discriminator を複数回書き込まないようにするために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サブカラムの読み取りを修正しました。以前は、Memory テーブルで ALTER によって Dynamic 型のmax_typesパラメータが変更された場合、その後のサブカラム読み取りが誤った結果を返す可能性がありました。 #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)。
parallel_hashアルゴリズムでjoinによって作成されるハッシュテーブルのサイズを収集してキャッシュするようにしました。この情報は、後続のクエリ実行時にハッシュテーブルの事前確保に利用され、ハッシュテーブルのリサイズにかかる時間を削減します。#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)。- Materialized Views の重複排除の動作を変更しました。次のような多くのケースに対応しています: - 宛先テーブルで: データが 2 つ以上のブロックに分割され、それらのブロックが並列に挿入される場合に、そのブロックが重複として扱われてしまう。 - MV の宛先テーブルで: 集約処理の結果、異なる入力データに対しても 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の例外カラムで「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)。- パラメータ化された VIEW 関数でエイリアスをサポートしました(新しいアナライザーのみ)。 #65190 (Kseniia Sumarokova).
- azureBlobStorage のログでアカウントキーがマスクされるように更新。#65273(SmitaRKulkarni)。
PARTITION BY式の一部となっているフィルタ式を含むIN述語に対して、パーティション・プルーニングを行うようにしました。 #65335 (Eduard Karacharov).arrayMin/arrayMaxは、比較可能なすべてのデータ型に適用可能になりました。 #65455 (pn)。- cgroups v2 におけるメモリアカウンティングを改善し、ページキャッシュが占有している分を除外するようにしました。 #65470 (Nikita Taranov)。
- EmbeddedRocksDB テーブルに挿入するために chunk をシリアライズする際に、各行ごとにフォーマット設定を作成しないようにしました。 #65474 (Duc Canh Le).
clickhouse-localのプロンプトを:)だけになるように短縮しました。getFQDNOrHostName()は macOS 上で時間がかかりすぎるうえ、そもそもclickhouse-localのプロンプトにホスト名は不要です。#65510(Konstantin Bogdanov)。- 低スペックの仮想マシン上で、jemalloc が CPU ごとの arena に関するメッセージを出力しないようにしました。 #65532 (Alexey Milovidov)。
- デフォルトでファイルシステムキャッシュのバックグラウンドダウンロードを無効化しました。バックグラウンドダウンロードスレッドを使用すると、メモリの解放がクエリコンテキストの外側で行われる一方で(バッファの割り当てはクエリコンテキスト内で行われる)、その結果として「Memory limit exceeded」が発生する可能性がある問題を修正した後に、再度有効化する予定です。また、バックグラウンドワーカーがダウンロードできる最大サイズを定義するための個別の設定を追加する必要があります(現在は max_file_segment_size によって制限されていますが、これは大きすぎる可能性があります)。 #65534 (Kseniia Sumarokova)。
<config_reload_interval_ms>という新しい設定オプションを追加し、ClickHouse が設定を再読み込みする間隔を指定できるようにしました。 #65545 (alesapin)。- ClickHouse のデータ型向けにバイナリエンコーディングを実装し、その仕様をドキュメントに追加しました。Dynamic binary serialization でこれを利用し、RowBinaryWithNamesAndTypes フォーマットおよび Native フォーマットで設定(settings)から利用できるようにしました。#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で named collections を制御できるようになりました。 #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をパラメーターとして指定できるようになりました。 #66374 (ZAWA_ll). - インタラクティブモードで
Ctrl+Zによるサスペンドを無効化しました。これはよくある落とし穴であり、ほとんどすべてのユーザーにとって想定された動作ではありません。端末アプリケーションをバックグラウンドにサスペンドできることを便利だと感じるような、かなり特殊なパワーユーザーもごく一部にはいるかもしれませんが、私自身はそのような人を一人も知りません。 #66511 (Alexey Milovidov)。 - Dictionaries におけるプライマリキー型を検証するためのオプションを追加しました。このオプションがない場合、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).MaterializedMySQL(サポート対象外の実験的機能)を使用し、MySQL の NULL フィールドを ClickHouse の NOT NULL フィールドにマッピングする TABLE OVERRIDE を用いた場合に発生していたクラッシュを修正しました。 #54649 (Filipp Ozinov)。PREWHERE式がカラムを一切読み込まず、かつテーブルに adaptive index granularity が存在しない(非常に古いテーブル)場合に発生する論理エラーを修正しました。 #59173 (Alexander Gololobov).- クエリのキャンセル時に使用されるキャンセルバッファの不具合を修正しました。 #64478 (Sema Checherinda).
columns.txtが存在しない場合の、メタデータからパーツのカラムを補完する処理を修正。 #64757 (Azat Khuzhin).ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITYを実行するとクラッシュする不具合を修正しました。 #64957 (pufit).- AccessControl 破棄時のクラッシュを修正: 明示的なシャットダウン処理を追加。 #64993 (Vitaly Baranov)。
- 関数
uniq*の引数に含まれる単射関数を再帰的に削除するようにしました。以前は正しく動作していましたが、新しいアナライザーで動作しなくなっていました。 #65140 (Duc Canh Le). - CTE を使用したクエリで、予期しない PROJECTION 名が付く問題を修正しました。 #65267 (wudidapaopao).
- 直接クエリまたは
Dictionaryテーブルエンジン経由で 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という例外が発生する問題を修正しました。 #65523 (Kseniia Sumarokova)。 - projection の重複排除マージ時に発生していた NOT_FOUND_COLUMN_IN_BLOCK エラーを修正。 #65573 (Yakov Olkhovskiy).
- MergeJoin のバグを修正しました。スパースシリアライゼーションのカラムが、必要な変換が行われていないにもかかわらず、そのネストされた型のカラムとして扱われてしまう場合がありました。 #65632 (Nikita Taranov).
- 互換性レベル「23.4」が正しく適用されない不具合を修正しました。 #65737 (cw5121).
- Nullable フィールドを含む ODBC テーブルの不具合を修正。 #65738 (Rodolphe Dugé de Bernonville).
- 致命的なエラー発生時に発生する可能性があった
TCPHandlerのデータレースを修正。 #65744 (Kseniia Sumarokova). %Fおよび%Dプレースホルダーを使用した関数parseDateTimeで誤った例外が発生する問題を修正しました。 #65768 (Antonio Andelic).PostgreSQLからデータを読み出すクエリに対して、ClickHouse のクエリが終了したら内部のPostgreSQLクエリをキャンセルするように変更しました。そうしない場合、内部のPostgreSQLクエリが終了するまでClickHouseのクエリをキャンセルできません。 #65771 (Maksim Kita).- old analyzer と dictGetOrDefault を使用している場合のショートサーキットロジックの不具合を修正しました。 #65802 (jsc0218)。
- EmbeddedRocksDB で有効期限 (TTL) 付きの書き込みを行うと壊れた SST ファイルが生成されるバグを修正しました。 #65816 (Duc Canh Le).
- 関数
bitTest、bitTestAll、bitTestAnyは、指定されたビットインデックスが範囲外の場合にエラーを返すようになりました #65818(Pablo Marcos)。 join_any_take_last_rowSETTING がハッシュ結合を使用する任意のクエリでサポートされるようになりました。 #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).
- タイムアウトが 0 の場合における
SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITEの扱いを修正。 #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).- S3 engine と S3 table function における Column _size は、アーカイブ自体のサイズではなく、アーカイブ内のファイルサイズを表します。 #65993 (Daniil Ivanik).
- analyzer における動的サブカラム解決の不具合を修正し、動的サブカラムの読み取り時にカラム全体を読み込まないようにしました。 #66004 (Kruglov Pavel).
- from_env における replace オーバーライド使用時の設定マージを修正。 #66034 (Azat Khuzhin).
- シャットダウン時に
GRPCServerがハングする可能性のあった問題を修正。 #66061 (Vitaly Baranov). - 関数
hasにおいて、非定数のLowCardinality引数を取る場合の不具合を複数修正しました。 #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 または AzureBlobStorage へのコピー時のエラー報告を修正しました。 #66295 (Vitaly Baranov).
- watchdog がリンク解除された(ローテーション済みの)ログファイルのファイルディスクリプタを保持しないようにしました。#66334 (Aleksei Filatov)。
logicalexpressionoptimizerpassが定数の論理型を失うバグを修正。 #66344 (pn)。group_by_use_nulls=trueと新しい analyzer の使用時に発生するColumn identifier is already registeredエラーを修正。 #66400 (Nikolai Kochetov).- PostgreSQL などの外部エンジンのテーブルを
JOINおよびフィルタ条件とともに利用するクエリにおいて、過度に積極的なフィルタプッシュダウンが原因で誤った結果が返る可能性がある問題を修正しました。今後は、外部テーブルとの外部結合の場合、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 演算子の最初の引数として使用されている場合に発生していた
Method getResultType is not supported for QUERY query nodeエラーを修正しました。#66655 (Nikolai Kochetov). - Variant サブカラムの読み取り時に発生する可能性のある PARAMETER_OUT_OF_BOUND エラーを修正しました。 #66659 (Kruglov Pavel).
DROP COLUMN後にマージ処理がまれに停止したままになることがある不具合を修正。 #66707 (Raúl Marín)。- リモートソースからの
INSERT SELECT実行時に発生していたisUniqTypesアサーションを修正。 #66722 (Sema Checherinda). - PrometheusRequestHandler の論理エラーを修正しました。 #66621 (Vitaly Baranov)。
indexHint関数の fuzzer によって検出されたケースを修正しました。 #66286 (Anton Popov)。- 'create table b empty as a' の AST フォーマットを修正しました。 #64951 (Michael Kolupaev).
ClickHouse 24.6 リリース(2024-07-01)。プレゼンテーション、動画
後方互換性のない変更
- データベースとテーブルの非同期ロードがデフォルトで有効になりました。
config.xml内のasync_load_databasesを参照してください。この変更は機能的には完全に互換性がありますが、動作に違いが生じる可能性があります。以前のバージョンと同様に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). CREATEクエリで作成できるデータベースまたはテーブルの数を制限するためのサーバー設定max_table_num_to_throwおよびmax_database_num_to_throwを追加しました。 #64781 (Xu Jia).s3/file/hdfs/url/azureBlobStorageなどのファイルライクなストレージに_time仮想カラムを追加。 #64947 (Ilya Golshtein).- 新しい関数
base64URLEncode、base64URLDecode、tryBase64URLDecodeが追加されました。 #64991 (Mikhail Gorshkov). - 2つのUTF-8文字列間の編集距離を計算する新しい関数
editDistanceUTF8を追加しました。 #65269 (LiuNeng)。 - カスタム HTTP ハンドラーでカスタムレスポンスヘッダーをサポートできるように、
http_response_headers設定を追加しました。 #63562 (Grigorii). - クエリ結果を無限ループで返すための新しいテーブル関数
loopを追加しました。 #63452 (Sariel)。テスト用途に便利です。 system.query_logに 2 つのカラムused_privilegesとmissing_privilegesが追加されました。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).
実験的機能
- 型「number of distinct values」の統計情報を導入。#59357 (Han Fei).
- ReplicatedMergeTree で統計情報をサポート。#64934 (Han Fei).
Replicatedデータベースに「replica group」が設定されている場合、すべてのグループのレプリカを含むクラスタを自動的に作成。#64312 (Alexander Tokmakov).- 範囲フィルタを使用する際に、動的な分片を持つ並列レプリカによるクエリの並列化方法を制御できるように、
parallel_replicas_custom_key_range_lowerとparallel_replicas_custom_key_range_upperの設定を追加。#64604 (josh-hildred).
パフォーマンス改善
PRIMARY KEYで設定された順序を維持したまま、サイズ最適化のために挿入時に行を再配置できる機能を追加しました。この挙動は設定項目optimize_row_order(デフォルトではオフ)で制御されます。 #63578 (Igor Markelov)。- Parquet のバイナリを ClickHouse のカラムに直接読み込めるネイティブな Parquet リーダーを追加しました。
input_format_parquet_use_native_readerという設定で制御されます(既定では無効です)。#60361(ZhiHong Zhang)。 - クエリのフィルタ条件が MergeTree テーブルから厳密な範囲を選択できる場合に、部分的な trivial count の最適化をサポートしました。 #60463 (Amos Bird)。
- マルチスレッド
INSERTにおいて、複数スレッドからの chunk を単一の transform で集約することで、最大メモリ使用量を削減しました。#61047 (Yarik Briukhovetskyi)。 - 固定的なメモリ割り当てを使用し、余分なバッファの割り当てを回避することで、Azure オブジェクトストレージ使用時のメモリ使用量を削減しました。 #63160 (SmitaRKulkarni).
ColumnNullable::sizeにおける仮想関数呼び出しの回数を削減しました。 #60556 (HappenLee).- 正規表現引数が1文字のときの
splitByRegexpの処理を高速化。 #62696 (Robert Schulze). - 使用されているキーの最小値と最大値を追跡することで、8-bit および 16-bit キーを用いる集約を高速化しました。これにより、検証が必要なセルの数を削減できます。 #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リクエストを発行することで、find_super_nodesおよびfind_big_familyの keeper-client コマンドを高速化しました。 #64628 (Alexander Gololobov). - Nullable な数値型引数を取る
least/greatest関数を改善しました。 #64668 (KevinyhZou). - クエリプラン内の連続する 2 つのフィルタリングステップを 1 つにマージできるようにしました。これにより、フィルター条件を親ステップからプッシュダウンできる場合に、フィルタープッシュダウン最適化が改善されます。 #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). - 割り当てられたメモリサイズを使用して行グループのサイズを計算し、単一スレッドモードにおける Parquet writer のピークメモリ使用量を削減しました。 #64424 (LiuNeng).
- スパースカラムのイテレータを改善し、
sizeの呼び出し回数を削減。 #64497 (Jiebin Sun). - Azure Blob Storage へのバックアップ時にサーバーサイドコピーを使用するよう条件を更新。 #64518 (SmitaRKulkarni).
- 多数のスキップ索引を持つテーブルに対する垂直マージ処理のメモリ使用量を最適化しました。 #64580 (Anton Popov).
改善
- systemテーブルに対して
SHOW CREATE TABLEを実行すると、そのテーブルがなぜ必要なのかを説明する、各テーブル固有の非常に便利なコメントが表示されるようになりました。 #63788 (Nikita Mikhaylov). - 関数
round(),roundBankers(),floor(),ceil()およびtrunc()の第2引数(scale)には、定数以外の値も指定できるようになりました。 #64798 (Mikhail Gorshkov). - 新しいディスクを追加した際に
Distributedテーブルの storage policy をホットリロードできるようにしました。 #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 テーブルを ReplicatedMergeTree テーブルに変換することを禁止しました。 #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).- 未対応のストレージに対しては、materialized view であってもトランザクションを無効化するようにしました。 #64918 (alesapin).
- 旧アナライザでの
QUALIFY句の使用を禁止しました。旧アナライザはQUALIFYを無視していたため、ミューテーションで予期しないデータ削除が発生する可能性がありました。 #65356 (Dmitry Novik).
バグ修正(公式安定版リリースにおけるユーザーにとって目に見える不具合)
- Apache ORC ライブラリのバグを修正しました: すべてのプラットフォームにおける符号なし型および ARM 上の Int8 について、書き込み時の ORC 統計値の計算を修正しました。 #64563 (Michael Kolupaev).
- CSV 形式における Tuple の扱いと解釈を、従来の ClickHouse の動作に戻しました。この変更により、実質的に 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)。 - 特定の状況下で、必要な
GRANTがないにもかかわらず、ユーザーがdefaultデータベース上で自身の権限を昇格できてしまう権限エラーを修正しました。 #64769 (pufit). - UniqInjectiveFunctionsEliminationPass と uniqCombined が原因のクラッシュを修正しました。 #65188 (Raúl Marín).
- セッション終了時に発生するダイジェスト不一致の原因となっていた ClickHouse Keeper のバグを修正しました。 #65198 (Aleksei Filatov)。
- Distinct コンビネータに対して正しいメモリアライメントを行うようにしました。以前は、このコンビネータの使用時に不正なメモリ割り当てが行われ、クラッシュが発生する可能性がありました。 #65379 (Antonio Andelic).
DISTINCTとウィンドウ関数の併用時にクラッシュが発生する問題を修正しました。 #64767 (Igor Nikonov)。- 'set' スキップ索引が IN 句および indexHint() 使用時に正しく動作しなかった問題を修正しました。 #62083 (Michael Kolupaev).
- パラメータ化されたビューの値を代入する際に関数を実行できるようになりました。 #63502 (SmitaRKulkarni)。
- Parquet におけるメモリトラッキングを修正しました。 #63584 (Michael Kolupaev).
Tuple(Map(LowCardinality(String), String), ...)型のカラムの読み込み処理を修正しました。 #63956 (Anton Popov)。- 異なる種類(式と関数)のエイリアス間で循環参照が発生した場合の
Cyclic aliasesエラーを修正しました。 #63993 (Nikolai Kochetov). - この修正により、クエリパイプライン内の各ビューについて、適切な定義者を持つ正しい再定義済みコンテキストが使用されるようになります。 #64079 (pufit).
- analyzer を修正: INTERPOLATE を使用時に発生していた「Not found column」エラーを修正しました。 #64096 (Yakov Olkhovskiy)。
- ファイルを格納しているディスクとは異なる認証情報を持つ S3 バケットにバックアップを作成できない問題を修正しました。 #64153 (Antonio Andelic).
- クエリキャッシュは、異なるデータベースに対する同一内容のクエリを別のものとして区別するようになりました。以前の挙動には、テーブルの読み取り権限が不足している場合でも、その制限を回避するために悪用されうる問題がありました。 #64199 (Robert Schulze)。
- StatusFile 内の ~WriteBufferFromFileDescriptor で捕捉されない例外が発生した際にプロセスが異常終了する可能性があった問題を修正。 #64206 (Kruglov Pavel).
ARRAY JOINを含む分散クエリで発生していたduplicate aliasエラーを修正しました。 #64226 (Nikolai Kochetov).- string から integer への想定外の 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). optimize_read_in_orderが Nullable 型のキーを持つテーブルでの ORDER BY ... NULLS FIRST / LAST 句に対して正しく動作するように修正しました。 #64483 (Eduard Karacharov).- エイリアス付きの
GLOBAL INを含むクエリで発生していたExpression nodes list expected 1 projection namesおよびUnknown expression or identifierエラーを修正しました。 #64517 (Nikolai Kochetov). - 定数 CTE を
GROUP BYキーに含む分散クエリで発生していた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).
- 新しい analyzer において、常に真となる
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 に対するサブクエリを用いた不等結合(experimental)を修正。 #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 プロトコル経由のクエリ、非同期挿入など、いくつかの種類のクエリでメモリトラッキングが正しく行われない可能性があった問題を修正しました。 #64844 (Anton Popov).
- materialized view がソーステーブルとは異なる型のカラムを持つ場合に、その materialized view から
PREWHERE付きで読み取るクエリで発生していたBlock structure mismatchエラーを修正しました。 #64611 を修正しました。 #64855 (Nikolai Kochetov)。 - TTL を設定したテーブルで、サブクエリ + レプリケートされたデータベース + 並列レプリカ (parallel replicas) + analyzer を組み合わせた場合に、まれにクラッシュする不具合を修正しました。発生頻度は非常に低いですが、TTL とサブクエリの併用は行わないでください。 #64858 (alesapin).
- 大規模なバッチ削除時に
blob_storage_logでDeleteイベントが重複して記録される問題を修正。 #64924 (vdimir). - 設定ファイルに [Zoo]Keeper からの include が含まれている場合に、サーバー起動後に発生することがあった [Zoo]Keeper の
Session moved to another serverエラーを修正しました。#64986 (Alexander Tokmakov). - パラメーター化された VIEW に対して正しく動作していなかった
ALTER MODIFY COMMENTクエリを修正しました https://github.com/ClickHouse/ClickHouse/pull/54211。 #65031 (Nikolay Degterinsky)。 cluster_secure_connectionパラメータが有効な場合の DatabaseReplicated におけるhost_idの扱いを修正しました。以前は、このパラメータが有効であっても、DatabaseReplicated によってクラスター内で作成されるすべての接続がセキュアなものになっていませんでした。 #65054 (Nikolay Degterinsky)。- StorageMerge での
PREWHERE最適化後に発生するNot-ready Setエラーを修正。 #65057 (Nikolai Kochetov). - File-like ストレージで finalized バッファへの書き込みを行わないように修正。 #65063 (Kruglov Pavel).
- 循環エイリアスがある場合にクエリが無限に実行され続ける可能性がある問題を修正。 #64849 を修正。 #65081(Nikolai Kochetov)。
INTERPOLATE (alias)を含むリモートクエリでUnknown expression identifierエラーが発生する問題を修正しました(new analyzer)。#64636 を修正。#65090(Nikolai Kochetov)。- 集計処理の外側に算術演算を押し出す最適化を修正しました。新しいアナライザーでは、この最適化が一度しか適用されていませんでした。 #65104 (Dmitry Novik).
- 新しいアナライザーでの集約関数名の書き換え処理を修正。 #65110 (Dmitry Novik).
- クライアントソケットからリクエストボディ(の一部)を読み取っている最中に受信タイムアウトが発生した場合、
200 OKではなく5xxを返すようにしました。 #65118 (Julian Maicher). - ヘッジリクエストで発生し得るクラッシュを修正。 #65206 (Azat Khuzhin).
- Hashed および Hashed_Array Dictionary におけるショートサーキット評価のバグを修正し、未初期化の数値が読み出されてさまざまなエラーが発生する可能性があった問題を解消しました。 #65256 (jsc0218).
- この PR は、IN 演算子の型変換処理中に、定数(IN 演算子の 2 番目のパラメータ)の型情報が常に保持されるようにします。そうしないと、型情報が失われることで、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 と単純な 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 を持つテーブルは利用できなくなります。アップグレード前にそのような索引を必ず DROP し、アップグレード後に再度作成してください。#62884(Robert Schulze)。
- 関数
neighbor、runningAccumulate、runningDifferenceStartingWithFirstValue、runningDifferenceの使用は非推奨になりました(エラーを起こしやすいため)。代わりに適切なウィンドウ関数を使用する必要があります。これらを再度有効にするには、allow_deprecated_error_prone_window_functions = 1を設定するか、compatibility = '24.4'以下を設定してください。#63132(Nikita Taranov)。 system.columnsからのクエリは、多数のカラムが存在し、かつ多くのデータベースまたはテーブルにSHOW TABLESの権限が付与されていない場合でも、より高速に動作するようになります。以前のバージョンでは、対応するテーブルに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). - 左表および右表の両方のカラムを含む不等条件での JOIN をサポートします(例:
t1.y < t2.y)。有効化するには、SET allow_experimental_join_condition = 1を実行します。 #60920 (lgbo)。 MapのキーとしてFloat32、Float64、Array(T)、Map(K, V)およびTuple(T1, T2, ...)を使用できるようになりました。#54537 をクローズ。#59318 (李扬)。EmbeddedRocksDBに対して、RocksDB の組み込み memtable に依存するのではなく、SST ファイルを作成して取り込むことでバルクロード機能を導入しました。これにより、特に 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 (豪肥肥).RawフォーマットをTSVRawの同義語として扱うようにした。#63394 (Unalian)。- 新しい SQL 関数
generateUUIDv7を追加し、バージョン 7 UUID(ランダムな成分を持つタイムスタンプベースの UUID)を生成できるようにしました。さらに、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 への認証を行えるようにしました。config でuse_workload_identityパラメータが設定されている場合、認証には workload identity が使用されます。#57881(Vinay Suryadevara)。 system.parts_columnsテーブルに有効期限 (TTL) に関する情報を追加。 #63200 (litlig).
実験的機能
- 事前にすべての型を把握していなくても、任意の型の値を保存できる
Dynamicデータ型を実装しました。Dynamic型はallow_experimental_dynamic_type設定を有効にすると利用できます。参考: #54864、#63058(Kruglov Pavel)。 - MySQL への接続なしで
MaterializedMySQLデータベースを作成できるようにしました。#63397(Kirill)。 - ある DDL タスクが同じエラーで連続して
max_retries_before_automatic_recovery回(デフォルトでは 100 回)以上失敗した場合に、Replicated データベースのレプリカを自動的に lost とマークし、リカバリを開始するようにしました。また、エントリ実行の初期段階で例外がスローされた場合に 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). - 新しく作成された PROJECTION ブロックのマージを
INSERT実行中にスキップするようにしました。 #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).
- 多数のカラムがある場合に、マージ時のソートを 2 倍高速化し、メモリ使用量を制御するための新しい設定
prefer_merge_sort_block_bytesを追加しました。 #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 向けの native copy を使用できるようにしました。 #64154 (alesapin).
- Azure 向けの native copy を最終的に有効化しました。 #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 を送信するようにしました。Closes #45350. #60312 (Kseniia Sumarokova).
- サンプリングクエリプロファイラの使用時など、非同期スタックのアンワインド処理中にデバッグ情報を解釈している際に発生していたクラッシュを修正しました。これにより #60460 が解決されます。 #60468 (Alexey Milovidov)。
- ディスクの場合とストレージの場合で、S3 エラー 'no key' に対して異なるメッセージを出力するようにしました。 #61108 (Sema Checherinda).
- プログレスバーは、
system.zeros、system.zeros_mt(system.numbersおよびsystem.numbers_mtではすでに対応済み)からの LIMIT を伴う単純なクエリや、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). - ClickHouse を AWS Lambda 内で使用する場合でも例外処理が機能するようになりました。作者: 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 発生時のスタックアンワインドを修正しました(シグナル用スタックが小さいことが原因)。#64058 (Azat Khuzhin).
不具合修正
- デフォルトで
enable_vertical_final設定を無効化しました。この機能にはバグがあるため、使用しないでください。#64543。 #64544 (Alexander Tokmakov)。 - 複数の分片を使用している場合にバックアップが作成できない問題を修正 #57684 (Vitaly Baranov)。
- CREATE クエリのカラムリストから MV の内部テーブルへのプロジェクション/索引/プライマリキーの受け渡しを修正しました #59183 (Azat Khuzhin).
- boundRatio の誤ったマージを修正 #60532 (Tao Wang)。
- 一部の関数を const な低カーディナリティカラムに対して呼び出すとクラッシュする問題を修正 #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 の Dictionary ソースを修正しました #63481 (vdimir).
- データなしの AsyncInsertFlush で QueryFinish を挿入 #63483 (Raúl Marín).
- Fix: system.query_log の used_dictionaries が空になる不具合を修正 #63487 (Eduard Karacharov).
MergeTreePrefetchedReadPoolの安全性を向上しました #63513 (Antonio Andelic).- Sentry を有効化している場合に、終了時に発生するクラッシュを修正(OpenSSL が Sentry より先に破棄されていたことが原因)#63548 (Azat Khuzhin).
- Keyed ハッシュにおける Array および Map のサポートを修正 #63628 (Salvatore Mesoraca)。
- Parquet および(場合によっては)StorageMerge に対するフィルタープッシュダウンの不具合を修正 #63642 (Michael Kolupaev)。
- ZooKeeper パスが既に存在する場合は Replicated への変換を行わないようにしました #63670 (Kirill).
- Analyzer: VIEW が必要なカラムのみを読み込むようになりました #63688 (Maksim Kita)。
- Analyzer: WINDOW の再定義を禁止 #63694 (Dmitry Novik).
- flatten_nested は experimental な Replicated データベースで正常に動作していませんでした。 #63695 (Nikolai Kochetov).
- #63653 #63722 を修正(Nikolai Kochetov)。
- Array(Nothing) から Map(Nothing, Nothing) へのキャストを許可しました #63753 (Nikolai Kochetov)。
- partial_merge join における ILLEGAL_COLUMN エラーを修正 #63755 (vdimir)。
- 修正: ウィンドウ関数における冗長な
DISTINCTを削除 #63776 (Igor Nikonov)。 - SYSTEM UNLOAD PRIMARY KEY でクラッシュが発生する可能性のあった問題を修正しました #63778 (Raúl Marín)。
- 循環するエイリアスが重複していたクエリを修正しました。 #63791 (Nikolai Kochetov)。
TokenIteratorを、本来意図されていたとおり遅延評価にした #63801 (Alexey Milovidov).- S3 URI の
endpoint_subpath設定を追加 #63806(Julia Kartseva)。 ParallelReadBufferにおけるデッドロックを修正 #63814 (Antonio Andelic)。- JOIN フィルタのプッシュダウンにおける等価カラムの処理を修正 #63819 (Maksim Kita)。
- Lazy データベースで DROP を実行した後に、すべてのディスクからデータを削除するようにしました。 #63848 (MikhailBurdukov).
- parallel replicas と new analyzer を使用している MV からの読み取り時に誤った結果が返る問題を修正 #63861 (Nikita Taranov)。
- keeper-client の
find_super_nodesおよびfind_big_familyコマンドの不具合を修正 #63862 (Alexander Gololobov)。 - lambda の実行名を更新 #63864 (Nikolai Kochetov)。
- CPU/Real profiler によって発生する SIGSEGV を修正 #63865 (Azat Khuzhin)。
EXPLAIN CURRENT TRANSACTIONクエリを修正。#63926(Anton Popov)。- analyzer を修正: “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 テーブルに対し、SETTING
final= 1 を指定したクエリの解析を修正。 #64037 (Nikolai Kochetov)。 - recoverLostReplica に不足していた設定を追加 #64040 (Raúl Marín)。
- analyzer を用いた SQL のセキュリティアクセスチェックの不具合を修正しました #64079 (pufit)。
- Fix analyzer: DAG では
interpolate式のみが使用されるように修正 #64096 (Yakov Olkhovskiy). - Azure バックアップで、非ネイティブコピーの場合に
max_upload_part_sizeではなく読み取りバッファサイズである 1 MiB 単位でマルチパートブロックを書き込むように修正しました #64117 (Kseniia Sumarokova)。 - バックアップコピー時のフォールバック処理を正しく行うよう修正 #64153 (Antonio Andelic).
- CREATE TABLE を materialized view として作成する際に発生する 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に設定できないようにしました。#60140 をクローズ。 #61201(Kruglov Pavel)。 - 非推奨の
LIVE VIEW機能の一部であるINSERT WATCHクエリのサポートを削除しました。 #62382(Alexey Milovidov)。 optimize_monotonous_functions_in_order_by設定を削除しました。 #63004(Raúl Marín)。Replicatedデータベースエンジンから experimental タグを削除しました。現在はベータ段階です。 #62937(Justin de Guzman)。
新機能
- 再帰 CTE をサポートしました。#62074(Maksim Kita)。
QUALIFY句をサポートしました。#47819 をクローズしました。#62619(Maksim Kita)。- テーブルエンジンに対する権限付与が可能になり、既存ユーザーの挙動には影響しないようになりました。#60117(jsc0218)。
- INSERT 操作をサポートし、ローカルにメタデータを保存する必要がない書き換え可能な S3 ディスクを追加しました。主なユースケースは system テーブル用です。#61116(Julia Kartseva)。
- クライアントでの入力中のシンタックスハイライトが、(以前のレキサーレベルではなく)構文レベルで動作するようになりました。#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によって有効化できます。パーツの最小ブロック番号または mutation バージョンのいずれかを含む仮想カラム_part_data_versionを追加しました。永続仮想カラム_block_numberは、もはや実験的とは見なされません。#60676(Anton Popov)。 - JSON 入力フォーマットで不正なエスケープシーケンスを保存できるようにするための設定
input_format_json_throw_on_bad_escape_sequenceを追加しました。これを無効にすると、不正なエスケープシーケンスを許容して保存できます。#61889(Kruglov Pavel)。
パフォーマンスの改善
- 等価な Set を用いた 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 クエリに対する mutation のオーバーヘッドを削減 (v2)。 #60856 (Azat Khuzhin)。
- PODArray 内でより頻繁に呼び出される関数が、強制的にインライン展開されるようになりました。 #61144 (李扬)。
- 必要なカラムをすべて読み終えた時点でオブジェクトの残りの部分をスキップすることで、JSON のパースを高速化しました。 #62210 (lgbo).
- file/s3/hdfs/url/... テーブル関数からの単純な
INSERT SELECTのパフォーマンスを改善しました。並列パースに使用するスレッド数を制御するために、個別のmax_parsing_threadsSETTING を追加しました。 #62404 (Kruglov Pavel). - 関数
to_utc_timestampとfrom_utc_timestampが約 2 倍高速化されました。 #62583 (KevinyhZou). - Functions
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を使用する Dictionary のソースが、起動時に 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 つの大きな chunk に蓄積するのではなく、chunk のストリームを返すようにしました。これにより、メモリ消費を抑えつつ、途中経過の表示やクエリのキャンセルが可能になります。 #62613 (Alexander Gololobov).
実験的機能
azure_allow_parallel_part_upload設定により、Azure Blob Storage 向けの並列書き込みバッファをサポートしました。#62534 (SmitaRKulkarni)- Userspace page cache が静的 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テーブルエンジンは、再読み込み後も結果が一貫するようになりました。同じキーを持つ複数の行が挿入された場合、最初の行が優先されるようになりました(以前は、テーブルのロード時にランダムに選択されていました)。close #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 テーブルで定義されたカラム数と一致しない場合がありました。例えば Hive テーブルが 3 カラムを持つように
test_tbl(a Int32, b Int32, c Int32)と定義されているのに、テキストファイルの最初の行にはフィールドが 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 Private Link Interface エンドポイントを介した S3 アクセスに対応しました。 #60021、#31074、#53761 をクローズしました。 #62208 (Arthur Passos)。
- UDF 用のディレクトリが存在しない場合に、clickhouse-client がそれを作成しないようにしました。これにより #59597 が解決されました。#62366(Alexey Milovidov)。
- クエリキャッシュは、system テーブル(
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).
- 単一のテーブルを利用する複数のコンシューマからのログメッセージを識別できるようにするため、多数のバグで悪名高い C ライブラリである librdkafka のクライアント識別子をログメッセージに追加しました。 #62813 (János Benjamin Antal).
- Replicated データベースの ZooKeeper パスで
{uuid}および{database}という特殊なマクロを使用できるようにしました。 #62818 (Vitaly Baranov)。 - HTTP リクエストで、別の認証スキームを使用する場合でも quota key を利用できるようにしました。 #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 の依存関係をベンダリングし、C++ と同様に、Rust コード(ちょっとした遊び心のある機能に使っているもの)を適切な方法でビルドできるようにした。 #62297 (Raúl Marín)。
- ClickHouse は現在、BoringSSL の代わりに OpenSSL 3.2 を使用しています。 #59870 (Robert Schulze)。なお、OpenSSL は一般的に、(私たちがパッチを当てる必要があった、サニタイザによるレポートがゼロではないことや、生成ファイルを伴う複雑なビルドシステムなど)エンジニアリング面の文化は劣るものの、互換性は優れています。
- ストレステストでは 2 分の 1 の確率で DROP クエリを無視し、Memory/JOIN テーブルのアップグレードチェックでは DROP を無視する代わりに TRUNCATE を使用するようにしました。 #61476 (Kruglov Pavel).
- Keeper の Docker イメージから /etc/clickhouse-keeper および /var/log/clickhouse-keeper のボリュームを削除しました。 #61683 (Tristan).
- Analyzerがデフォルトで有効になったことで関連性を失ったすべての問題に対するテストを追加。Closes: #55794 Closes: #49472 Closes: #44414 Closes: #13843 Closes: #55803 Closes: #48308 Closes: #45535 Closes: #44365 Closes: #44153 Closes: #42399 Closes: #27115 Closes: #23162 Closes: #15395 Closes: #15411 Closes: #14978 Closes: #17319 Closes: #11813 Closes: #13210 Closes: #23053 Closes: #37729 Closes: #32639 Closes: #9954 Closes: #41964 Closes: #54317 Closes: #7520 Closes: #36973 Closes: #40955 Closes: #19687 Closes: #23104 Closes: #21584 Closes: #23344 Closes: #22627 Closes: #10276 Closes: #19687 Closes: #4567 Closes: #17710 Closes: #11068 Closes: #24395 Closes: #23416 Closes: #23162 Closes: #25655 Closes: #11757 Closes: #6571 Closes: #4432 Closes: #8259 Closes: #9233 Closes: #14699 Closes: #27068 Closes: #28687 Closes: #28777 Closes: #29734 Closes: #61238 Closes: #33825 Closes: #35608 Closes: #29838 Closes: #35652 Closes: #36189 Closes: #39634 Closes: #47432 Closes: #54910 Closes: #57321 Closes: #59154 Closes: #61014 Closes: #61950 Closes: #55647 Closes: #61947. #62185 (Nikita Mikhaylov).
- アナライザーによって既に不要になった、または修正された issue に対するテストをさらに追加しました。クローズ: #58985 クローズ: #59549 クローズ: #36963 クローズ: #39453 クローズ: #56521 クローズ: #47552 クローズ: #56503 クローズ: #59101 クローズ: #50271 クローズ: #54954 クローズ: #56466 クローズ: #11000 クローズ: #10894 クローズ: https://github.com/ClickHouse/ClickHouse/issues/448 クローズ: #8030 クローズ: #32139 クローズ: #47288 クローズ: #50705 クローズ: #54511 クローズ: #55466 クローズ: #58500 クローズ: #39923 クローズ: #39855 クローズ: #4596 クローズ: #47422 クローズ: #33000 クローズ: #14739 クローズ: #44039 クローズ: #8547 クローズ: #22923 クローズ: #23865 クローズ: #29748 クローズ: #4222。 #62457 (Nikita Mikhaylov).
- OpenSSL が動的リンクされている場合のビルドエラーを修正しました(注: これは一般的にはサポートされておらず、IBM の s390x プラットフォームでのみ必要です)。 #62888 (Harry Lee).
バグ修正(公式安定版リリースにおけるユーザーに見える不具合)
- クォーラム挿入トランザクションを取り消す際に発生していた論理エラーを修正。 #61953 (Han Fei).
- FILTER 句を伴う COUNT(*) 使用時のパーサーエラーを修正 #61357 (Duc Canh Le)。
group_by_use_nullsと grouping sets、analyzer、materialize/constant の組み合わせ時に発生する論理エラーを修正。 #61567 (Kruglov Pavel).- 移動済みパーツを削除する前にマージをキャンセルする #61610 (János Benjamin Antal).
- Apache Arrow で発生していた異常終了を修正 #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 修飾子付きクエリのパーツスプリッタを修正しました #62268 (Nikita Taranov).
- Analyzer: パラメータ化された VIEW に対するエイリアスの解決を修正 #62274 (Dmitry Novik)。
- Analyzer: 親スコープからの名前解決の不具合を修正 #62281 (Dmitry Novik).
- Nullable な非ネイティブ数値カラムに対する argMax を修正 #62285 (Raúl Marín).
- Ordinary データベースにおける materialized view の BACKUP および RESTORE の不具合を修正 #62295 (Vitaly Baranov)。
- Context 内のスカラー値で発生するデータレースを修正 #62305 (Kruglov Pavel)。
- materialized view のプライマリキーを修正 #62319 (Murat Khairulin).
- マルチスレッド挿入パイプライン非対応のテーブルに対しては構築しないようにしました #62333 (vdimir).
- 分散クエリにおける位置引数の処理を行うアナライザーを修正 #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).- 修正: 更新: ネストされたマテリアライズドカラム: サイズチェックの不具合を修正 #62773 (Eliot Hautefeuille).
- analyzer を使用した CTE において FINAL 修飾子が適用されない問題を修正 #62811 (Duc Canh Le)。
JSONフォーマットと HTTP インターフェースの使用時にformatRow関数で発生するクラッシュを修正 #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" の代わりにユーザーが指定した db を使用するように変更 #63126 (Alexander Gololobov)。
ClickHouse 24.3 LTS リリース(2024-03-27)。プレゼンテーション、動画
アップグレード時の注意事項
allow_experimental_analyzerSETTING はデフォルトで有効になっており、クエリ解析を互換性と機能の完全性に優れた新しい実装に切り替えます。この "analyzer" 機能は、experimental ではなく beta と見なされます。従来の動作に戻したい場合は、compatibilityを24.2に設定するか、allow_experimental_analyzerSETTING を無効にしてください。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 を使用するほうがユーザーの期待に合致します。 - 新しい 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 #60540 #60250 #52917 #51140 #47517 #47189 #46598 #40257 #36504 #35485 #33702 #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と同様に禁止されますが、いずれも比較不能であることが理由です)。これらを許可するにはallow_suspicious_primary_keyを使用してください。 #61399 (Azat Khuzhin).Ordinaryデータベースエンジンは非推奨になりました。サーバーがこれを使用している場合、clickhouse-clientで警告が表示されます。この変更により #52229 がクローズされました。#56942(shabroo)。
新機能
- バックアップの読み書きで
tarをサポートしました(zipに加えて)。#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です。これは、複合プライマリキーにおいて、あるカラムの値が全体の少なくとも 0.9 の割合で変化する場合、その後ろに続くカラムはロードされないことを意味します。 #60255 (Alexey Milovidov)。 - 複数の
Nullableカラムが関与する場合のシリアライズされた集約メソッドのパフォーマンスを改善しました。 #55809 (Amos Bird). - 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演算子の最適化を行う新しいアナライザーパスを追加しました。 #61564 (LiuNeng). - DNSResolver は解決済み IP アドレスの Set をシャッフルし、複数の AWS S3 エンドポイントを均等に利用できるようにします。 #60965 (Sema Checherinda).
実験的機能
- Azure Blob Storage に対する並列読み取りをサポートしました。これにより、実験的な Azure オブジェクトストレージのパフォーマンスが向上します。 #61503 (SmitaRKulkarni).
- Azure Blob Storage 向けに、S3 と同様の非同期
WriteBufferを追加しました。これにより、実験的な Azure オブジェクトストレージのパフォーマンスが向上します。 #59929 (SmitaRKulkarni). - Azure Blob Storage を使用する際、バックアップ I/O にマネージド ID を使用するようにしました。ClickHouse が存在しないコンテナを作成しようとするのを防ぐための設定を追加しました。このコンテナの作成にはストレージアカウントレベルの権限が必要です。 #61785 (Daniel Pozo Escalona).
parallel_replicas_allow_in_with_subquery = 1という設定を追加しました。これにより、IN 句のサブクエリを並列レプリカで使用できるようになります。 #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クエリの結果のように、結果セット内に値が 1 つしかない場合は、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 SETTINGS を上書きできるようにしました。 #61832 (Azat Khuzhin).- ソートや集約などにおける処理時間および入出力バイト数のプロセッサプロファイリングを、デフォルトで有効化しました。 #61096 (Azat Khuzhin).
- Filesystem データベースで拡張子のないファイルをサポートしました。 #60795 (Kruglov Pavel).
- すべてのフォーマット名を大文字・小文字を区別しないようにしました。たとえば、Tsv でも TSV でも tsv でも、さらには rowbinary でも同じです。 #60420(豪肥肥)。今後もできれば正しい表記で書いてもらえるとありがたいです。たとえば
JSON😇 であってJson🤮 ではなく、という具合に。ただし、実際にはお好みの綴りで書いていただいて構いません。 distributed_ddl_output_modeSETTING にnone_only_activeモードを追加しました。 #60340 (Alexander Tokmakov).- 高度なダッシュボードで、複数系列グラフの色設定がわずかに改善されました。 #60391 (Alexey Milovidov).
- Advanced ダッシュボードでは、スクロールしてもコントロールが常に表示されるようになりました。これにより、ページの上部までスクロールし直さずに新しいチャートを追加できます。 #60692 (Alexey Milovidov).
- materialized view に対して
MODIFY COLUMNクエリを実行する際、すべてのカラムが存在することを確認するために、内部テーブルの構造をチェックするようになりました。 #47427 (sunny). - String 型と Enum 型は、配列、UNION クエリ、条件式など、同じコンテキストで使用できるようになりました。これにより、#60726 が解決されました。#60727(Alexey Milovidov)。
- クエリ処理のための外部データの構造内で Enum を宣言できるようにしました(クエリ専用に即座に用意できる一時テーブルです)。 #57857 (Duc Canh Le)。
- マージするパーツを選択する際に論理削除された行を考慮し、結果として生成されるパーツのディスクサイズをより正確に見積もるようにしました。 #58223 (Zhuo Qiu)。
- より多くの system テーブルのカラムにコメントを追加しました。これは https://github.com/ClickHouse/ClickHouse/pull/58356 の継続です。 #59016 (Nikita Mikhaylov)。
PREWHEREで仮想カラムを使用できるようになりました。これは_part_offsetのような非 const な仮想カラムに対して有用です。#59033 (Amos Bird)。仮想カラムの全体的な使い勝手が改善されました。PREWHEREで仮想カラムを使用することが許可されました(_part_offsetのような非 const な仮想カラムに対して有用です)。仮想カラムに関する組み込みドキュメントが、describe_include_virtual_columns設定を有効にしたDESCRIBEクエリ内で、カラムのコメントとして利用できるようになりました。#60205 (Anton Popov)。- 固定のキーを使用する代わりに、オブジェクトストレージがオブジェクト削除の可否を判定するためのキーを生成するようになりました。 #59495 (Sema Checherinda).
- オブジェクトストレージのタイプとして "local_blob_storage" の代わりに "local" を許可しました。 #60165 (Kseniia Sumarokova).
DETACH/ サーバーシャットダウン時およびSYSTEM FLUSH DISTRIBUTED実行時に、Distributed engine の保留中の INSERT ブロックを並列フラッシュできるようにしました(並列処理は、テーブルにマルチディスクポリシーが設定されている場合にのみ有効です(現時点では Distributed engine のすべてのテーブルがこれに該当します))。 #60225 (Azat Khuzhin).- マージ処理でリードスルーキャッシュを強制的に利用するための設定を追加しました。 #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 の改善: 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)。 - full-sorting merge join アルゴリズムで NULL を最大値/最小値として扱えるようにするフラグを追加しました。これにより、Apache Spark のような他の SQL システムと動作を互換にできます。 #60896 (loudongfeng).
clickhouse-clientとclickhouse-localで、ファイル拡張子から出力フォーマットを自動検出できるようになりました。 #61036 (豪肥肥).- Linux の CGroups の値が変更された場合に、実行時のメモリ制限を更新するようにしました。 #61049 (Han Fei).
- 関数
toUInt128OrZeroを、誤って見落としていたため追加しました(この誤りは https://github.com/ClickHouse/ClickHouse/pull/945 に関連しています)。互換性エイリアスであるFROM_UNIXTIMEとDATE_FORMAT(これらは ClickHouse ネイティブのものではなく、MySQL 互換性のためにのみ存在します)について、SQL 互換エイリアスとして期待されるとおり大文字小文字を区別しないようにしました。 #61114 (Alexey Milovidov)。 - アクセスチェックが改善され、対象ユーザーがそもそもその権限や付与権限(GRANT 権限)を持っていない場合でも、未保有の権限を REVOKE できるようになりました。例:
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)。 - 一時データを作成するすべての箇所(たとえば外部メモリソートや外部メモリによる GROUP BY)で
temporary_files_codec設定が使用されるようになりました。以前はpartial_mergeJOIN アルゴリズムでのみ適用されていました。 #61456 (Maksim Kita)。 - クエリの構文解析の複雑さを制限できる新しい設定
max_parser_backtracksを追加しました。 #61502 (Alexey Milovidov). - ファイルシステムキャッシュを動的にリサイズする際のコンテンションを減らしました。 #61524 (Kseniia Sumarokova).
- StorageS3 queue のシャーディングモードは、今後実装を書き換える予定のため無効化しました。 #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 でも動作するようになりました。以前のバージョンでは、プログラムがシステムコール内で時間を消費していない場合にのみ動作していました。#60807 (Alexey Milovidov)。
- ClickHouse のバージョン情報が Docker ラベルに追加されました。#54224 をクローズします。#60949 (Nikolay Monkov)。
prqlcを 0.11.3 にアップグレードしました。#60616 (Maximilian Roos)。clickhouse-localに汎用的なクエリテキスト fuzzer を追加しました。#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 metadata 型の利用を修正しました #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).
- Decimal および Date 型の引数に対する
intDivを修正。 #60672 (Yarik Briukhovetskyi)。 - Fix: ALTER MODIFY クエリ内の CTE を展開するよう修正 #60682 (Yakov Olkhovskiy).
- 非 Atomic/Ordinary データベースエンジン(例: Memory)における system.parts を修正。 #60689 (Azat Khuzhin).
- パラメータ化された VIEW で発生する「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).
- リストアプールでのキューイングを可能にしました #61475 (Nikita Taranov)。
- UUID で system.parts を読み取る際に生じていた不整合を修正しました。 #61479 (Dan Wu)。
ALTER QUERY MODIFY SQL SECURITYの不具合を修正しました #61480(pufit)。- window view(実験的機能)におけるクラッシュを修正 #61526 (Alexey Milovidov).
repeatが非ネイティブの整数型で正しく動作しない問題を修正 #61527 (Antonio Andelic).- クライアントの
-s引数の問題を修正 #61530 (Mikhail f. Shiryaev). - arrayPartialReverseSort におけるクラッシュを修正 #61539(Raúl Marín)。
- const 位置指定での文字列検索の不具合を修正 #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におけるサニタイザーレポートを修正しました #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操作を(たとえば mutation などの)メタデータとして格納している箇所があるためです。この新しい構文により、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).- materialized view に関するセキュリティ問題を修正しました。この問題により、必要な権限がないにもかかわらずテーブルへの挿入が可能になっていました。修正では、ユーザーが materialized view だけでなく、その基盤となるすべてのテーブルへの挿入権限も持っていることを検証します。これは、以前は動作していた一部のクエリが、現在は
Not enough privilegesで失敗し得ることを意味します。この問題に対処するため、本リリースでは VIEW 向けの SQL セキュリティという新機能を導入しました https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security。[#54901](https://github.com/ClickHouse/ClickHouse/pull/54901) #60439 (pufit).
新機能
view/materialized viewで definer USER を指定できる新しい構文を追加しました。これにより、背後のテーブルに対して明示的に権限を付与しなくても、VIEWからSELECT/INSERTを実行できるようになります。つまり、VIEWが権限(GRANT)をカプセル化します。 #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)。
- 連続ログイン失敗の最大回数に対してQUOTAを設定できるようになりました。 #54737 (Alexey Gerasimchuck).
- 新しい集約関数
groupArrayIntersect。#49862 のフォローアップ。 #59598(Yarik Briukhovetskyi)。 AzureBlobStorageの Backup & Restore をサポート。#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)。
system.dns_cacheテーブルを実装しました。DNS の問題のデバッグに役立ちます。 #59856 (Kirill Nikiforov).- codec
LZ4HCは、新たにレベル 2 を指定できるようになりました。これは、これまでの最小レベルである 3 よりも高速に動作しますが、その分圧縮率は低下します。以前のバージョンでは、LZ4HC(2)以下の指定はすべてLZ4HC(3)と同一の挙動でした。Author: 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キーを使用して、設定ファイル内の特定の S3 設定ごとに許可されるユーザーの集合を指定できるようにしました。 #60144 (Antonio Andelic).- テーブル関数
mergeTreeIndexを追加しました。これはMergeTreeテーブルの索引ファイルおよびマークファイルの内容を表します。内部構造の確認(イントロスペクション)に使用できます。構文:mergeTreeIndex(database, table, [with_marks = true])。ここでdatabase.tableはMergeTreeエンジンを使用する既存のテーブルです。#58140(Anton Popov)。
実験的機能
- Tukey のフェンスアルゴリズムを使用して系列データ内の外れ値を検出する関数
seriesOutliersDetectTukeyを追加しました。#58632(Bhavna Jindal)。この挙動は次回のパッチリリースで変更される予定であることに注意してください。 - 各行に対して Variant 型名を持つ Enum を返す関数
variantTypeを追加しました。#59398(Kruglov Pavel)。 - parallel replicas(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 を使用する parallel replicas における JOIN(analyzer 未使用時)を無効化しました。#59239(Raúl Marín)。
パフォーマンスの向上
- プライマリキーで使用されるメモリ量が少なくなります。 #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フォーマットで、ブロックが 1 つの数値のみから成り、その値が 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).- ミューテーション処理中のエラー時に指数バックオフロジックを有効化しました。これにより CPU 使用率、メモリ使用量、およびログファイルサイズが削減されます。 #58036 (MikhailBurdukov).
InitialQueryプロファイルイベントのカウントを改善。#58195(Unalian)。storage_configurationでvolume_priorityを指定できるようにしました。 #58533 (Andrey Zvonov).T64コーデックにDate32型のサポートを追加。#58738(Hongbin Ma)。- 複数の要素を持つ型で末尾のカンマを許可するようにしました。 #59119 (Aleksandr Musorin).
- 分散テーブルエンジンの設定は、サーバーの設定ファイル内で指定できるようになりました(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 上の)cgroups の制限に基づいて計算されます。以前は、
/sys/fs/cgroup/memory.max(cgroups v2 用)の設定がハードコードされていました。その結果、/sys/fs/cgroup/my/nested/group/memory.maxのようなネストされたグループ(階層)に対して設定された cgroup v2 のメモリ制限は無視されていました。この問題は修正されました。v1 のメモリ制限の動作は変わっていません。#59435(Robert Schulze)。 INSERT実行時に、PK/PROJECTION/セカンダリインデックスの計算に要した時間を観測できる新しいプロファイルイベントを追加しました。 #59436 (Nikita Taranov).- Ordered モードの S3Queue に対して、作成時に設定
s3queue_last_processed_pathを使用して開始点を定義できるようにしました。 #59446 (Kseniia Sumarokova). clickhouse-localのsystem.tablesでもシステムテーブルに対するコメントを利用できるようにしました。 #59493 (Nikita Mikhaylov)。system.zookeeperテーブル: 以前は結果全体をメモリ上に蓄積し、1 つの大きな chunk として返していました。この変更により、system.zookeeperから多数の行を読み取る際のメモリ消費を抑え、中間的な進捗(これまでに読み取られた行数)を表示できるようになり、結果セットが大きい場合の接続タイムアウトも回避できるようになります。 #59545 (Alexander Gololobov).- ダッシュボードが、URL の #hash 部分の圧縮済み状態と未圧縮状態の両方を理解できるようになりました(後方互換性のため)。#59124 の継続。#59548(Amos Bird)。
- codec
DEFLATE_QPLで使用されている Intel 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 から作成された named collection の挙動を統一しました。 #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 の改善: Disk 関連の操作失敗時に再試行を追加しました。 #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)。 - S3 ファイルのコピー時に、GCP が
GATEWAY_TIMEOUTHTTP エラーコード付きのInternal Errorを返した場合、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 に対していくつかの fuzzing を追加しました。 #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 を fuzzing するようにしました。 #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: オプションが無効な場合ではなく有効な場合に init スクリプトを実行するように修正 #59991 (jktng)。
SQLite向けの、シングルクォートを含む INSERT 文を修正(シングルクォートをバックスラッシュではなくクォートでエスケープするように変更)#60015(Azat Khuzhin)。arrayFoldのいくつかの論理エラーを修正。 #60022 (Raúl Marín)。- optimize_uniq_to_count がカラムエイリアスを削除してしまう不具合を修正。 #60026 (Raúl Marín).
- S3Queue テーブルを DROP する際に発生しうる例外を修正 #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). Kusto方言は、次の 2 つのバグが修正されるまで無効化されています: #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の場合に圧縮ウィンドウサイズを明示的に設定し、ロングレンジモードを有効化するための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_stringsSETTING によって制御されます。 #58561 (Kruglov Pavel). - 時系列データを季節性成分、トレンド成分、および残差成分に分解する関数
seriesDecomposeSTLを追加しました。 #57078 (Bhavna Jindal). - MaterializedMySQL 向けの MySQL Binlog Client を導入: 1 つの binlog 接続で複数のデータベースを扱えるようにしました。 #57323 (Val Doroshchuk)。
- Intel QuickAssist Technology (QAT) は、ハードウェアアクセラレーションによる圧縮および暗号処理を提供します。ClickHouse に、新しい圧縮コーデック
ZSTD_QATが追加され、zstd 圧縮に QAT を利用できるようになりました。このコーデックは Intel's QATlib と Intel'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).
- テーブルに紐付けられる materialized view の数を制限する設定
max_materialized_views_size_for_tableを追加しました。 #58068 (zhongyuankai). clickhouse-formatの改良:VALUESを使用した INSERT クエリのサポート、コメントのサポート(出力するには--commentsを使用)、長いクエリに対してのみ複数行フォーマットを行うための--max_line_lengthオプションのサポート。 #58246 (vdimir)。system.partsを含むすべての system テーブルをclickhouse-localでアタッチできるようにしました。これにより #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_viewsSETTING を追加しました。この SETTING により、依存する materialized view への INSERT 時に、テーブル識別子を用いて 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).- vertical マージにおけるメモリ使用量を削減しました。 #59340 (Anton Popov).
- より多くのケースで Keeper の起動時に大量のメモリを消費しないようにしました。 #58455 (Antonio Andelic).
- Keeper の改善: 保存ノードに対して Keeper が使用するメモリ量を削減。 #59002 (Antonio Andelic).
- よりキャッシュ効率の高い最終実装となりました。動作変更に関する注意: 以前は、単一ストリームで読み取りを行う(例:
max_threads = 1)FINAL修飾子付きクエリは、明示的にORDER BY句を指定しなくてもソートされた出力を生成していました。enable_vertical_final = trueの場合(これはデフォルトで有効です)、この挙動はもはや保証されません。#54366(Duc Canh Le)。 ReadBufferFromIStream(S3 からの読み取りなどに使用される)での不要なコピー処理を回避しました。 #56961 (Nikita Taranov)。- 入力が Array(Map)/Array(Array(Num))/Array(Array(String))/Array(BigInt)/Array(Decimal) の場合に、arrayElement 関数を最適化しました。以前の実装では、必要以上に多くのメモリアロケーションを行っていました。この最適化により、とくに入力型が Array(Map) の場合に、最大で約 6 倍の高速化が得られます。 #56403 (李扬).
- コンパクトなパーツから1つのカラムに含まれる複数のサブカラムを読み取る際、そのカラムの読み取りを1回にまとめました。 #57631 (Kruglov Pavel).
sum(column + constant)関数の AST を書き換えました。Analyzer の最適化パスとして利用可能です #57853 (Jiebin Sun)。- 関数
matchの評価時に、スキッピングインデックスngrambf_v1およびtokenbf_v1を利用するようになりました。 #57882 (凌涛). - 関数
matchの評価に反転インデックスが利用されるようになりました。 #58284 (凌涛)。 - MergeTree
FINALは、同じ L0 以外のパーツ内の行同士を比較しません。 #58142 (Duc Canh Le)。 iota呼び出し(配列を連番で埋める処理)を高速化。 #58271 (Raúl Marín).- 非数値型に対する MIN/MAX の高速化。 #58334 (Raúl Marín).
- BMI2/SSE の intrinsics を利用して、フィルターの組み合わせ(マルチステージ
PREWHEREなど)を最適化しました #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 テーブル
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 テーブルから読み取っていない場合にはコンシュームされず、その結果、メモリリークが発生し、テーブルの detach が遅くなる)を修正します。また、この 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 Dictionary における索引の型をより細かく制御するための設定を追加しました。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とテーブルを作成しようとして競合が発生した場合の例外メッセージを、よりわかりやすいものにしました。 #58841 (Yarik Briukhovetskyi).
- カスタムディスク(SQL から作成されたもの)の場合は、サーバー設定で必ず
filesystem_caches_path(すべてのファイルシステムキャッシュに共通のディレクトリプレフィックス)またはcustom_cached_disks_base_directory(カスタムディスクから作成されたファイルシステムキャッシュにのみ共通のディレクトリプレフィックス)のいずれかを指定してください。custom_cached_disks_base_directoryはカスタムディスクに対してfilesystem_caches_pathよりも優先され、custom_cached_disks_base_directoryが存在しない場合にのみ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 に settings の変更チェックを追加しました。#58555 (Kruglov Pavel).
- stateful テストで、S3 から直接アタッチされたテーブルを使用するようにしました。#58791 (Alexey Milovidov).
fuzzer.log全体を、最後の 100k 行だけではなくアーカイブとして保存するようにしました。tail -n 100000により、テーブル定義を含む行が削除されてしまうことがよくあります。例: #58821 (Dmitry Novik).- Aarch64 を搭載した macOS 上で Rust を有効化しました(これにより、クライアントで skim を用いたファジー検索と PRQL 言語が利用可能になります。ただし、darwin 上で ClickHouse をホストしている人はほとんどいないと思われるため、主にクライアントのファジー検索のためと言えるでしょう)。#59272 (Azat Khuzhin).
- x86_64 と ARM が混在するクラスタにおける集約の問題を修正しました。#59132 (Harry Lee).
バグ修正(公式安定版リリースにおけるユーザー影響のある不具合)
- ネストされた LowCardinality に対する結合キーの変換を追加 #51550 (vdimir).
- flatten_nested=1 の場合に実際の Nested 型のみをフラット化し、すべての Array(Tuple) をフラット化しないようにしました #56132 (Kruglov Pavel)。
- 挿入時の PROJECTION と
aggregate_functions_null_for_empty設定に関するバグを修正しました。 #56944 (Amos Bird). - 古くなったプロファイル UUID が原因で発生する可能性があった例外を修正しました #57263 (Vasily Nemkov)。
- StreamingFormatExecutor での読み取りバッファの取り扱いを修正 #57438 (Kruglov Pavel)。
- ビューへのプッシュ処理中に、対象テーブルが削除されているマテリアライズドビューを無視するようにしました #57520 (Kruglov Pavel).
- ALTER_METADATA と MERGE_PARTS の間で発生しうるレースコンディションを解消しました #57755 (Azat Khuzhin)。
- ROLLUP を伴う GROUP BY における式の順序のバグを修正 #57786 (Chen768959)。
- 廃止された「ゼロコピー」レプリケーション機能に関する修正:壊れた detached パーツを含むレプリカを削除した後に BLOB が失われる不具合を修正 #58333 (Alexander Tokmakov)。
- user_files_path 内のシンボリックリンクをユーザーが利用できるようにしました #58447 (Duc Canh Le)。
- graphite テーブルに集約関数が存在しない場合に発生していたクラッシュを修正。 #58453 (Duc Canh Le)。
- materialized view での複数回の読み取りを可能にするため、StorageKafka からの読み取りを遅延させるようにしました #58477 (János Benjamin Antal)。
- パーツが交差する異常なケースを修正 #58482 (Alexander Tokmakov)。
- LIMIT 句のみのクエリで MergeTreePrefetchedReadPool を無効化 #58505 (Maksim Kita).
- 復元処理中でも ordinary データベースを有効化 #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).
- PROJECTION の最適化を行う際に、パーティションキー解析が正しく機能していなかった問題を修正。 #58638 (Amos Bird).
- クエリキャッシュ: ユーザー単位の QUOTA を修正 #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)における multiple 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).
- 実験的な反転インデックス(本番環境では使用しないでください)に対する修正:反転インデックスに対する
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において Nullable なタイムゾーンを指定した場合に発生するクラッシュを修正 #59190 (Yarik Briukhovetskyi)。- 不正なファイルパスにより Iceberg メタデータで発生する異常終了を修正 #59275 (Kruglov Pavel)。
- Rust ターゲットの
selectで使用するアーキテクチャ名を修正 #59307(p1rattttt)。 - IN 句内のサブクエリを含む
system.tablesへのクエリで発生する「not-ready set」に関する論理エラーを修正。 #59351 (Nikolai Kochetov).