2023年の変更履歴
目次
ClickHouse リリース v23.12, 2023-12-28
ClickHouse リリース v23.11, 2023-12-06
ClickHouse リリース v23.10, 2023-11-02
ClickHouse リリース v23.9, 2023-09-28
ClickHouse リリース v23.8 LTS, 2023-08-31
ClickHouse リリース v23.7, 2023-07-27
ClickHouse リリース v23.6, 2023-06-30
ClickHouse リリース v23.5, 2023-06-08
ClickHouse リリース v23.4, 2023-04-26
ClickHouse リリース v23.3 LTS, 2023-03-30
ClickHouse リリース v23.2, 2023-02-23
ClickHouse リリース v23.1, 2023-01-25
2022年の変更履歴
ClickHouse リリース 23.12、2023-12-28
後方互換性のない変更
- TTL 式における非決定的関数のチェックを修正しました。以前は、場合によっては非決定的関数を含む有効期限 (TTL) 式を作成できており、その結果として後に未定義の動作を引き起こす可能性がありました。この変更は #37250 を修正します。デフォルトでは、テーブルのいかなるカラムにも依存しない TTL 式は禁止されます。
SET allow_suspicious_ttl_expressions = 1またはSET compatibility = '23.11'を設定することで、再び許可できます。#37286 をクローズします。#51858(Alexey Milovidov)。 - MergeTree の設定
clean_deleted_rowsは非推奨になり、もはや効果を持ちません。OPTIMIZEに対するCLEANUPキーワードはデフォルトでは許可されません(allow_experimental_replacing_merge_with_cleanup設定を使用して有効化できます)。#58267(Alexander Tokmakov)。これは #57930 を修正します。#54988 をクローズします。#54570 をクローズします。#50346 をクローズします。#47579 をクローズします。この機能は望ましいものではないため、削除する必要があります。ほかに選択肢がないため、できるだけ早く削除しなければなりません。#57932(Alexey Milovidov)。
新機能
- リフレッシャブルmaterialized viewを実装しました(#33919 で要望されていた機能)。#56946(Michael Kolupaev、Michael Guzov)。
PASTE JOINを導入しました。これにより、ON句を指定せずに行番号に基づいてテーブルを結合できるようになります。例:SELECT * FROM (SELECT number AS a FROM numbers(2)) AS t1 PASTE JOIN (SELECT number AS a FROM numbers(2) ORDER BY a DESC) AS t2。 #57995(Yarik Briukhovetskyi)。ORDER BY句でALLを指定できるようになりました。これにより、ClickHouse はSELECT句内のすべてのカラムを使ってソートを行います。例:SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL。 #57875 (zhongyuankai).- 新しいミューテーションコマンド
ALTER TABLE <table> APPLY DELETED MASKを追加しました。これにより、論理削除によって書き込まれたマスクの適用を強制し、削除済みとしてマークされた行をディスクから物理的に削除できるようになります。 #57433 (Anton Popov). - ハンドラー
/binaryは、ClickHouse バイナリ内のシンボルを可視化するビューアを開きます。 #58211 (Alexey Milovidov)。 - Sqids(https://sqids.org/)を生成するための新しい SQL 関数
sqidを追加しました。例:SELECT sqid(125, 126)。 #57512(Robert Schulze)。 - FFT を使用して系列の周期を検出する新しい関数
seriesPeriodDetectFFTを追加しました。 #57574 (Bhavna Jindal)。 - Keeper がトラフィックを受け入れ可能かを確認するための HTTP エンドポイントを追加。#55876(Konstantin Bogdanov)。
- スキーマ推論に「union」モードを追加しました。このモードでは、各ファイルごとにスキーマを推論し、その和集合が結果のテーブルスキーマになります。スキーマ推論のモードは
schema_inference_modeという設定で制御され、取り得る値はdefaultとunionの 2 つです。 #55428 をクローズしました。 #55892 (Kruglov Pavel). - CSV フォーマットで文字列から数値を推論できるようにする新しい設定
input_format_csv_try_infer_numbers_from_stringsを追加しました。#56455 をクローズしました。 #56859(Kruglov Pavel)。 - データベースまたはテーブルの数が設定可能なしきい値を超えた場合、ユーザーに警告を表示します。 #57375 (凌涛)。
HASHED_ARRAY(およびCOMPLEX_KEY_HASHED_ARRAY)レイアウトを持つ Dictionary で、HASHEDと同様にSHARDSがサポートされるようになりました。 #57544 (vdimir)。- メモリ内のプライマリキー総バイト数および割り当て済みプライマリキー総バイト数に関する非同期メトリクスを追加。 #57551 (Bharat Nallan).
SHA512_256関数を追加しました。 #57645 (Bharat Nallan)。formatReadableSizeのエイリアスとしてFORMAT_BYTESを追加。 #57592 (Bharat Nallan)。s3テーブル関数に任意のセッショントークンを渡せるようにしました。 #57850 (Shani Elharrar)。- 新しい設定
http_make_head_requestを導入しました。これを無効にすると、URL テーブルエンジンはファイルサイズを取得するために HEAD リクエストを送信しません。これは、非効率的なものや誤った設定のもの、またはこの機能に対応していない HTTP サーバーをサポートするために必要です。 #54602 (Fionera)。 - 非プライマリキーの INDEX 定義内で ALIAS カラムを参照できるようになりました(issue #55650)。例:
CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;。#57546(Robert Schulze)。 - S3 ディスクを読み取り専用として指定できる新しい
readonly設定を追加しました。基盤となる S3 バケットへのアクセス権は読み取り専用のままにしつつ、s3_plainタイプのディスク上にテーブルを作成したい場合に有用です。#57977(Pengyuan Bian)。 - MergeTree テーブルにおける主キーの解析が、仮想カラム
_part_offset(必要に応じて_partも含む)を含む述語にも適用されるようになりました。この機能は、一種のセカンダリ索引として利用できます。 #58224 (Amos Bird)。
パフォーマンスの向上
- FINAL 処理中に、MergeTree テーブルから互いに交差しないパーツ範囲を抽出するようにしました。これにより、これらの交差しないパーツ範囲に対して追加の FINAL ロジックを適用せずに済みます。同じ primary key を持つ重複値の数が少ない場合、パフォーマンスは FINAL を使用しない場合とほぼ同じになります。
do_not_merge_across_partitions_select_finalSETTING が設定されている場合の MergeTree FINAL の読み取りパフォーマンスを改善しました。 #58120 (Maksim Kita)。 - バッファ経由でコピーするのではなく、S3 サーバーサイドのコピー機能を使用して S3 ディスク間のコピーを行うようにしました。これにより、
BACKUP/RESTORE操作およびclickhouse-disks copyコマンドの性能が向上します。 #56744 (MikhailBurdukov)。 - Hash JOIN が setting
max_joined_block_size_rowsを尊重し、ALL JOINで大きなブロックを生成しなくなりました。 #56996 (vdimir)。 - 集計のためのメモリを早期に解放するようにしました。これにより、不要な外部集計を回避できる場合があります。 #57691 (Nikolai Kochetov).
- 文字列シリアライゼーションの性能を改善。 #57717 (Maksim Kita).
Mergeエンジンテーブルに対する単純な COUNT の最適化をサポート。 #57867 (skyoct).- 一部のケースにおいて集約処理を最適化しました。 #57872 (Anton Popov).
hasAny関数がフルテキストスキップインデックスを活用できるようになりました。 #57878 (Jpnock)。- 関数
if(cond, then, else)(およびそのエイリアスcond ? then : else)は、ブランチレスで評価されるよう最適化されました。 #57885 (zhanglistar)。 - パーティションキーの式にプライマリキー式のカラムのみが含まれている場合、MergeTree は
do_not_merge_across_partitions_select_final設定を自動的に推論します。 #58218 (Maksim Kita). - ネイティブ型に対する
MINおよびMAXの処理を高速化。 #58231 (Raúl Marín). - ファイルシステムキャッシュ用に
SLRUキャッシュポリシーを実装。 #57076 (Kseniia Sumarokova). - バックグラウンドフェッチにおけるエンドポイントごとの接続数の上限が、
15から SETTINGbackground_fetches_pool_sizeの値に引き上げられました。- MergeTree レベルの SETTINGreplicated_max_parallel_fetches_for_hostは廃止されました。- MergeTree レベルの SETTINGreplicated_fetches_http_connection_timeout、replicated_fetches_http_send_timeoutおよびreplicated_fetches_http_receive_timeoutは Server レベルの SETTING に移されました。- Server レベルの SETTING の一覧にkeep_alive_timeoutが追加されました。#57523(Nikita Mikhaylov)。 system.filesystem_cacheへのクエリによるメモリ消費を抑えました。 #57687 (Kseniia Sumarokova).- 文字列デシリアライズ時のメモリ使用量を削減。 #57787 (Maksim Kita).
- Enum 向けのより効率的なコンストラクタ。Enum に大量の値がある場合に有効です。 #57887 (Duc Canh Le).
- ファイルシステムキャッシュからの読み出し処理を改善し、常に
preadメソッドを使用するようにしました。 #57970 (Nikita Taranov)。 - 論理式オプティマイザに AND notEquals の連鎖に対する最適化を追加しました。この最適化は、実験的な Analyzer 機能が有効な場合にのみ利用可能です。 #58214 (Kevin Mingtarja).
改善
- Keeper におけるソフトメモリ制限のサポート。メモリ使用量が上限値に近づくと、リクエストを拒否します。 #57271 (Han Fei). #57699 (Han Fei).
- 分散テーブルへの挿入が、更新されたクラスタ設定を正しく反映できるようにしました。クラスタノードのリストが動的に更新された場合、分散テーブルの Directory Monitor がそのリストを更新します。 #42826 (zhongyuankai).
- 矛盾するマージパラメータを指定したレプリケーテッドテーブルを作成できないようにしました。 #56833 (Duc Canh Le).
system.tablesに非圧縮サイズを表示するようにしました。#56618。#57186(Chen Lixiang)。Distributedテーブルに、対応するクエリレベルの設定と同様のskip_unavailable_shards設定を追加しました。 #43666 をクローズしました。 #57218 (Gagan Goel)。- 関数
substring(エイリアス:substr,mid)がEnum型に対しても使用可能になりました。これまでは、最初の関数引数はStringまたはFixedString型の値である必要がありました。これにより、MySQL インターフェース経由で Tableau などのサードパーティツールと連携する際の互換性が向上します。 #57277 (Serge Klochkov)。 - 関数
formatは、任意の型の引数をサポートするようになりました(これまではStringとFixedString型の引数のみをサポートしていました)。これにより、SELECT format('The {0} to all questions is {1}', 'answer', 42)を評価できます。 #57549 (Robert Schulze)。 date_trunc関数の第1引数を大文字小文字を区別せずに指定できるようになりました。SELECT date_trunc('day', now())とSELECT date_trunc('DAY', now())の両方の形式がサポートされます。 #57624 (Yarik Briukhovetskyi)。- テーブルが存在しない場合に表示されるヒントを改善。 #57342 (Bharat Nallan)。
- クエリ実行時に
max_partition_size_to_dropおよびmax_table_size_to_dropのサーバー設定を上書きできるようにしました。 #57452 (Jordi Villar). - JSON フォーマットにおける無名タプル型の推論精度をわずかに向上しました。 #57751 (Kruglov Pavel).
- Keeper への接続時に read-only フラグのサポートを追加しました(#53749 を修正)。#57479(Mikhail Koviazin)。
- ディスクからバッチを復元する際に発生する「No such file or directory」が原因で、分散送信が停止してしまう可能性のある問題を修正しました。
distributed_directory_monitor_max_sleep_time_msが 5 分より大きい場合に発生し得る、system.distribution_queueのerror_countに関する問題を修正しました。非同期 INSERT の失敗を追跡するためのプロファイルイベントDistributedAsyncInsertionFailuresを導入しました。 #57480 (Azat Khuzhin)。 MaterializedPostgreSQL(実験的機能)で PostgreSQL の生成カラムおよびデフォルトカラム値をサポートしました。 #40449 をクローズしました。 #57568(Kseniia Sumarokova)。- 一部のファイルシステムキャッシュ設定の変更を、サーバーを再起動せずに適用できるようにしました。 #57578 (Kseniia Sumarokova).
- 空配列を含む PostgreSQL のテーブル構造を正しく処理できるようにしました。#57618 (Mike Kot).
- 最後のサーバー再起動以降に発生したエラーの総数を、
ClickHouseErrorMetric_ALLメトリクスとして公開するようにしました。 #57627 (Nikita Mikhaylov)。 from_env/from_zk参照を持つ設定ファイル内のノードについて、replace=1が指定されていて要素が空でない場合も許可するようにしました。 #57628 (Azat Khuzhin).- ファジングに利用するために、不正な形式の JSON を大量に生成できるテーブル関数
fuzzJSONを追加。 #57646(Julia Kartseva)。 - IPv6 を UInt128 に変換し、バイナリ演算を行えるようにしました。 #57707 (Yakov Olkhovskiy).
async inserts deduplication cache用の設定を追加し、キャッシュ更新をどの程度の時間待機するかを指定できるようにしました。async_block_ids_cache_min_update_interval_ms設定は非推奨になりました。キャッシュは、競合が発生した場合にのみ更新されるようになりました。#57743 (alesapin)。sleep()関数はKILL QUERYによってキャンセルできるようになりました。 #57746 (Vitaly Baranov)。Replicatedテーブルエンジンに対するCREATE TABLE ... AS SELECTクエリはサポートされていないため、実験的なReplicatedデータベース内では禁止しました。#35408 を参照。#57796(Nikolay Degterinsky)。- 外部データベース向けクエリの変換処理を修正および改善し、再帰的にすべての適用可能な述語を取得できるようにしました。 #57888 (flynn)。
- ファイルシステムキャッシュサイズの動的な再読み込みをサポート。#57866 をクローズ。 #57897(Kseniia Sumarokova)。
system.stack_traceが SIGRTMIN をブロックしているスレッド(Apache rdkafka のような品質の低い外部ライブラリ内に存在することがあります)でも正しく動作するようにしました。 #57907 (Azat Khuzhin)。また、storage_system_stack_trace_pipe_read_timeout_msを待っても意味がない状況での待ちを避けるため、SIGRTMIN がブロックされていないスレッドに対してのみシグナルを送信するようにしました。 #58136 (Azat Khuzhin)。- クォーラム
INSERTのチェック時に Keeper の障害を許容できるようにしました。 #57986 (Raúl Marín). - max/peak の RSS (
MemoryResidentMax) を system.asynchronous_metrics に追加。 #58095 (Azat Khuzhin)。 - このPRにより、デフォルトリージョン以外を利用する場合でもリージョンを明示せずに s3 スタイルのリンク(
https://およびs3://)を使用できるようになります。また、ユーザーが誤ったリージョンを指定した場合でも、正しいリージョンを自動的に特定します。 #58148 (Yarik Briukhovetskyi)。 clickhouse-format --obfuscateは Settings、MergeTreeSettings、およびタイムゾーンを認識し、それらの名前を変更せずに維持するようになりました。 #58179 (Alexey Milovidov)。ZipArchiveWriterに明示的なfinalize()関数を追加しました。ZipArchiveWriter内の過度に複雑だったコードを簡素化しました。これにより #58074 が修正されました。#58202 (Vitaly Baranov)。- 同じパスを持つキャッシュが同じキャッシュオブジェクトを使用するようにしました。この挙動は以前から存在していましたが、23.4 で不具合により動作していませんでした。同じパスを持つキャッシュに異なるキャッシュ設定が指定された場合には、そのような構成は許可されていないことを示す例外がスローされます。 #58264 (Kseniia Sumarokova)。
- Parallel replicas(実験的機能):より扱いやすい設定 #57542 (Igor Nikonov).
- Parallel replicas(実験的機能):アナウンス応答の処理を改善 #57749 (Igor Nikonov).
- Parallel replicas(実験的機能):
ParallelReplicasReadingCoordinatorにおいてmin_number_of_marksがより厳密に考慮されるようになりました #57763(Nikita Taranov)。 - Parallel replicas(実験的機能):IN(サブクエリ)を使用するクエリでは parallel replicas を無効化 #58133 (Igor Nikonov).
- Parallel replicas(実験的機能):プロファイルイベント 'ParallelReplicasUsedCount' を追加 #58173 (Igor Nikonov)。
- POST 以外の HEAD などのリクエストは、GET と同様に読み取り専用になります。 #58060 (San)。
system.part_logにbytes_uncompressedカラムを追加 #58167 (Jordi Villar)。system.backupsおよびsystem.backup_logテーブルにベースバックアップの名前を追加 #58178 (Pradeep Chhetri)。- clickhouse-local において、コマンドラインでクエリパラメータを指定するためのサポートを追加 #58210 (Pradeep Chhetri)。
ビルド/テスト/パッケージングの改善
- さらに多くの設定をランダム化。#39663(Anton Popov)。
- CI で無効化された最適化をランダム化。#57315(Raúl Marín)。
- macOS 上で Azure 関連のテーブルエンジン/関数を使用できるように。#51866(Alexey Milovidov)。
- ClickHouse Fast Test が GLibc の代わりに Musl を使用するようになりました。#57711(Alexey Milovidov)。完全静的リンクの Musl ビルドは CI からダウンロード可能です。
- すべてのコミットに対して ClickBench を実行するようにしました。これにより #57708 がクローズされます。#57712(Alexey Milovidov)。
- 外部ライブラリから有害な C/POSIX の
select関数の使用を削除。#57467(Igor Nikonov)。 - 利便性のため、ClickHouse Cloud のみで利用可能だった設定を、オープンソース版 ClickHouse のビルドにも含めるようにしました。#57638(Nikita Mikhaylov)。
バグ修正(公式安定版リリースでユーザーに顕在化する不具合)
- 有効期限 (TTL) GROUP BY でソート順が乱れる可能性があった問題を修正しました #49103 (Nikita Mikhaylov)。
- 修正:
lttbのバケット分割戦略を修正し、先頭のバケットと末尾のバケットには単一点のみが含まれるようにしました #57003 (FFish). - エラー発生後の同期処理中に
Templateフォーマットで起こり得るデッドロックを修正しました #57004(Kruglov Pavel)。 - 多数のエラーをスキップしながらファイルをパースする際に、処理が途中で早期終了してしまう問題を修正 #57006 (Kruglov Pavel)。
dictionaryテーブル関数を利用した Dictionary に対する ACL の回避を防止 #57362 (Salvatore Mesoraca).- Fuzzer によって検出された「non-ready set」エラーの別の発生ケースを修正しました。 #57423 (Nikolai Kochetov)。
- PostgreSQL の
array_ndimsの使用に関連する不具合をいくつか修正しました。 #57436 (Ryan Jacobs)。 - 書き込みロックのタイムアウト後に発生する RWLock の不整合を修正 #57454 (Vitaly Baranov)。書き込みロックのタイムアウト後に発生する RWLock の不整合を再度修正 #57733 (Vitaly Baranov)。
- 修正: VIEW チェーンを構築してプッシュする際にエフェメラルカラムを除外しないようにした #57461 (Yakov Olkhovskiy).
- MaterializedPostgreSQL(実験的機能): issue #41922 を修正し、#41923 のテストを追加 #57515(Kseniia Sumarokova)。
- レプリケートされたアクセスエンティティの管理では、grant/revoke クエリ内の ON CLUSTER 句を無視するようになりました。 #57538 (MikhailBurdukov).
- clickhouse-local がクラッシュする不具合を修正 #57553 (Nikolay Degterinsky)。
- Hash JOIN の不具合を修正。 #57564 (vdimir)。
- PostgreSQL のソースコードで発生し得るエラーを修正 #57567(Kseniia Sumarokova)。
- ネストされた LowCardinality 型に対する Hash JOIN の型補正処理を修正しました。 #57614 (vdimir).
system.stack_traceからの並列読み取りを正しく禁止し、ハングの発生を防止。 #57641 (Azat Khuzhin).any(...) RESPECT NULLを使用したスパースなカラムの集約で発生するエラーを修正。 #57710 (Azat Khuzhin)。- 単項演算子の構文解析を修正 #57713 (Nikolay Degterinsky).
- 実験的なテーブルエンジン
MaterializedPostgreSQLの依存関係のロード処理を修正しました。 #57754 (Kseniia Sumarokova). - BACKUP/RESTORE ON CLUSTER における切断されたノードに対するリトライ処理を修正 #57764(Vitaly Baranov)。
- 部分的にマテリアライズされた PROJECTION が存在する場合の外部集約の結果を修正 #57790 (Anton Popov)。
*Mapコンビネータを使用する集約関数におけるマージ処理を修正 #57795 (Anton Popov)。- バグがあるため、
system.kafka_consumersを無効化しました。 #57822 (Azat Khuzhin)。 - Merge JOIN における LowCardinality キーのサポートを修正。 #57827 (vdimir).
InterpreterCreateQueryにおけるサンプルブロック関連の不具合を修正。 #57855 (Maksim Kita).- PostgreSQL 由来の名前付きコレクションに対して、
addresses_exprが無視されていました。 #57874 (joelynch). - BLAKE3 (Rust) における不正なメモリアクセスを修正しました #57876 (Raúl Marín)。その後、メモリ安全性を高めるために、Rust から C++ へ書き換えられました #57994 (Raúl Marín)。memory-safety
CREATE INDEX内の関数名を正規化しました #57906 (Alexander Tokmakov)。- 最初のリクエストが発生する前に利用不能なレプリカを扱う処理を修正 #57933 (Nikita Taranov)。
- リテラルエイリアスの誤った分類を修正 #57988 (Chen768959)。
- Keeper コンポーネントでの不適切な前処理を修正 #58069(Antonio Andelic)。
PocoライブラリのUTF32Encodingに関連する整数オーバーフローを修正 #58073 (Andrey Fedotov)。- 大きな整数値を含むスカラーサブクエリが存在する場合の parallel replicas(実験的機能)の動作を修正しました #58118 (Alexey Milovidov)。
- 範囲外の
DateTimeに対するaccurateCastOrNullの動作を修正 #58139 (Andrey Zvonov). - MergeTree の wide part からサブカラムを読み取る際に
PARAMETER_OUT_OF_BOUNDエラーが発生する可能性のあった問題を修正 #58175 (Kruglov Pavel). - 膨大な数のサブクエリを含む CREATE VIEW の実行時に発生する性能低下を修正しました #58220 (Tao Wang)。
- JSONCompactEachRow の並列解析を修正 #58181 (Alexey Milovidov). #58250 (Kruglov Pavel).
ClickHouse 23.11 リリース(2023-12-06)
後方互換性のない変更
- 既定の ClickHouse サーバー設定ファイルでは、
defaultユーザーに対してaccess_management(SQL クエリによるユーザー管理)とnamed_collection_control(SQL クエリによる named collection の操作)がデフォルトで有効になりました。これにより #56482 がクローズされました。 #56619(Alexey Milovidov)。 - ウィンドウ関数向けの
RESPECT NULLS/IGNORE NULLSに対して複数の改善を行いました。これらを集約関数として使用し、さらにこれらの修飾子付きで集約関数の状態を保存している場合、それらが互換性のないものになる可能性があります。 #57189(Raúl Marín)。 - 最適化
optimize_move_functions_out_of_anyを削除しました。 #57190(Raúl Marín)。 - 関数
parseDateTimeのフォーマッタ%l/%k/%cは、先頭ゼロなしの時/月をパースできるようになりました。例えば、select parseDateTime('2023-11-26 8:14', '%F %k:%i')が動作するようになりました。以前の、2 桁を必須としていた挙動を復元するにはparsedatetime_parse_without_leading_zeros = 0を設定してください。関数formatDateTimeも、先頭ゼロなしの時/月を出力できるようになりました。これはformatdatetime_format_without_leading_zerosによって制御されますが、既存のユースケースを壊さないよう、デフォルトでは無効になっています。 #55872(Azat Khuzhin)。 - 集約関数
avgWeightedをDecimal型の引数と一緒に使用することは、もはやできません。回避策: 引数をFloat64に変換してください。これにより #43928 がクローズされました。これにより #31768 がクローズされました。これにより #56435 がクローズされました。Decimal引数付きでこの関数を materialized views または PROJECTION 内で使用している場合は、[email protected] までご連絡ください。集約関数sumMapのエラーを修正し、その結果としておよそ 1.5 ~ 2 倍ほど遅くなりました。どうせこの関数はガラクタのようなものなので、問題にはなりません。これにより #54955 がクローズされました。これにより #53134 がクローズされました。これにより #55148 がクローズされました。関数groupArraySampleのバグを修正しました — 1 つのクエリで複数の集約状態が生成される場合に、同じ乱数シードが使用されていました。 #56350(Alexey Milovidov)。
新機能
- データベースとテーブルを非同期にロードするためのサーバー設定
async_load_databasesを追加しました。サーバーの起動時間が短縮されます。Ordinary、Atomic、Replicatedエンジンを持つデータベースに適用されます。これらのデータベース内のテーブルのメタデータは非同期にロードされます。テーブルへのクエリはロードジョブの優先度を上げ、その完了を待機します。内部状態の確認用に新しいテーブルsystem.asynchronous_loaderを追加しました。 #49351 (Sergei Trifonov). blob_storage_logシステムテーブルを追加しました。これにより、S3 およびその他のオブジェクトストレージに書き込まれたすべてのデータを監査できるようになります。 #52918 (vdimir)。STATISTICSを使用してPREWHERE条件の順序をより適切に最適化します。 #53240 (Han Fei).- Keeper プロトコルでの圧縮をサポートしました。ClickHouse 側では、
zookeeperセクション内のフラグuse_compressionを使用することで有効化できます。圧縮をサポートするのは ClickHouse Keeper のみであり、Apache ZooKeeper はサポートしていないことに注意してください。#49507 を解決しました。#54957(SmitaRKulkarni)。 storage_metadata_write_full_object_key機能を導入しました。これをtrueに設定すると、メタデータファイルは新しい形式で書き込まれます。この形式では、ClickHouse はメタデータファイル内にリモートオブジェクトキー全体を保存し、より高い柔軟性と最適化を可能にします。#55566(Sema Checherinda)。- 名前付きコレクションのフィールドが上書きされないよう保護するための新しい設定と構文を追加しました。これは、悪意のあるユーザーによるシークレットへの不正アクセスを防ぐことを目的としています。 #55782 (Salvatore Mesoraca)。
- すべての system ログテーブルに
hostnameカラムを追加しました。system テーブルをレプリケート、共有、または分散テーブルとして扱う場合に便利です。 #55894 (Bharat Nallan)。 CHECK ALL TABLESクエリを追加しました。 #56022 (vdimir).- MySQL の
FROM_DAYSに類似した関数fromDaysSinceYearZeroを追加しました。例えば、SELECT fromDaysSinceYearZero(739136)は2023-09-08を返します。 #56088 (Joanna Hulboj)。 - ClickHouse を使用せずにバックアップを参照し、そこから情報を抽出できる外部 Python ツールを追加しました。 #56268 (Vitaly Baranov)。
preferred_optimize_projection_nameという新しい設定を導入しました。これが空でない文字列に設定されている場合、可能であれば、すべての候補から選択する代わりに、その指定されたプロジェクションが使用されます。#56309(Yarik Briukhovetskyi)。- リーダー役を譲渡/辞退するための 4 文字コマンドを追加(https://github.com/ClickHouse/ClickHouse/issues/56352)。#56354(Pradeep Chhetri)。#56620(Pradeep Chhetri)。
- 新しい SQL 関数
arrayRandomSample(arr, k)を追加しました。入力配列から k 個の要素をランダムに抽出して返します。以前は、同様の機能はあまり使い勝手のよくない構文でしか実現できず、例えばSELECT arrayReduce('groupArraySample(3)', range(10))のように記述する必要がありました。#56416 (Robert Schulze)。 .npyファイルで使用するためのFloat16型データのサポートを追加しました。#56344 をクローズ。#56424(Yarik Briukhovetskyi)。- Tableau Online との互換性を高めるため、システムビュー
information_schema.statisticsを追加しました。 #56425 (Serge Klochkov). - バイナリのインスペクションに役立つ
system.symbolsテーブルを追加しました。 #56548 (Alexey Milovidov)。 - 設定可能なダッシュボード。チャート用のクエリは、現在はクエリ経由で読み込まれ、デフォルトでは新しい
system.dashboardsテーブルを使用します。 #56771 (Sergei Trifonov)。 fileClusterテーブル関数を追加しました。これは共有ファイルシステム(NFS など)をuser_filesディレクトリにマウントする場合に便利です。 #56868 (Andrey Zvonov)。s3/file/hdfs/url/azureBlobStorageエンジンに、バイト単位のファイルサイズを表す_size仮想カラムを追加しました。 #57126 (Kruglov Pavel).- Prometheus エンドポイントで、サーバーの直近の再起動以降に発生した各エラーコードごとのエラー数を公開できるようにしました。 #57209 (Nikita Mikhaylov)。
- ClickHouse Keeper は、稼働中のアベイラビリティゾーンを
/keeper/availability-zoneパスで報告します。これは<availability_zone><value>us-west-1a</value></availability_zone>で設定できます。 #56715 (Jianfei Hu)。 - ALTER materialized_view MODIFY QUERY を実験的機能ではないものとし、
allow_experimental_alter_materialized_view_structure設定を非推奨としました。#15206 を修正します。 #57311 (alesapin)。 join_algorithmSETTING で指定された順序が尊重されるようになりました #51745 (vdimir)。- Protobuf フォーマットで well-known Protobuf types のサポートを追加しました。 #56741 (János Benjamin Antal)。
パフォーマンスの向上
- S3 とのやり取りにアダプティブなタイムアウトを採用。最初の試行では、送信タイムアウトと受信タイムアウトを短く設定して実行します。 #56314 (Sema Checherinda).
max_concurrent_queriesのデフォルト値を 100 から 1000 に引き上げました。これは、接続しているクライアント数が多く、それぞれがゆっくりデータを送受信しているためサーバーのボトルネックが CPU になっていない場合や、CPU コア数が 100 を超える場合に妥当です。あわせて、デフォルトで同時実行制御を有効にし、全体のクエリ処理スレッド数を CPU コア数の 2 倍に設定しました。これにより、非常に多くのクエリが同時実行されるシナリオでパフォーマンスが向上します。 #46927 (Alexey Milovidov)。- ウィンドウ関数の並列評価をサポートしました。#34688 を修正しました。 #39631(Dmitry Novik)。
system.numbersテーブルのNumbersテーブルエンジンが、テーブルの索引と同様に、必要なデータの部分集合を生成するために条件を解析するようになりました。 #50909 (JackyWoo).Mergeテーブルエンジンに対するIN (...)条件によるフィルタリングの性能を改善しました。 #54905 (Nikita Taranov)。- ファイルシステムキャッシュがいっぱいで大規模な読み込みが行われている場合に効果を発揮する改善です。 #55158 (Kseniia Sumarokova).
- S3 に対するチェックサムを無効化できるようにし、ファイルに対する不要な複数回の走査を回避できるようにしました(
s3_disable_checksum設定で制御されます)。 #55559 (Azat Khuzhin)。 - ページキャッシュにデータがある場合、ローカルテーブルと同様にリモートテーブルからも同期的に読み取るようになりました。これにより高速になり、スレッドプール内での同期処理が不要となり、ローカルファイルシステム上での
seekも問題なく実行できるようになり、CPU の待ち時間が削減されます。 #55841 (Nikita Taranov)。 mapおよびarrayElementからの値取得処理を最適化し、約 30% の高速化を実現しました。- 予約済みメモリの削減 -resize呼び出し回数の削減。 #55957 (lgbo).- AVX-512 を用いたマルチステージフィルタリングの最適化。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上で OnTime データセットを用いて実施したパフォーマンス実験により、この変更によってクエリ Q2、Q3、Q4、Q5、Q6 の QPS がそれぞれ 7.4%、5.9%、4.7%、3.0%、4.6% 向上し、その他のクエリには影響がないことが示されました。 #56079 (Zhiguo Zhou)。
query profiler内でビジー状態になるスレッド数に上限を設けます。上限を超えたスレッドはプロファイリングをスキップします。 #56105 (Alexey Milovidov).- ウィンドウ関数における仮想関数呼び出しの回数を削減。 #56120 (Maksim Kita).
- ORC データ形式で再帰的な Tuple フィールドのプルーニングを許可し、スキャンを高速化しました。 #56122 (李扬)。
Npyデータ形式に対する単純なcount()の最適化:select count() from 'data.npy'のようなクエリは、結果をキャッシュすることで大幅に高速に実行されるようになりました。 #56304 (Yarik Briukhovetskyi).- 集約を伴い多数のストリームを持つクエリにおいて、プラン構築中に使用するメモリ量が削減されました。 #57074 (Alexey Milovidov).
- 多くのユーザーと高いクエリ同時実行性(2000 QPS 超)を伴うユースケース向けに、ProcessList へのアクセスを最適化することでクエリ実行性能を向上しました。 #57106 (Andrej Hoos).
array joinの処理をわずかに改善し、一部の中間結果を再利用するようにしました。 #57183 (李扬)。- スタックのアンワインド処理が遅いケースがありましたが、もはやそのようなことはありません。 #57221 (Alexey Milovidov).
max_streams = 1の場合、外部ストレージからの読み取りにデフォルトの read pool を使用するようになりました。これは read prefetch が有効になっている場合に効果的です。 #57334 (Nikita Taranov)。- Keeper の改善: ログの前処理を遅らせることで、起動時のメモリ使用量を削減。 #55660 (Antonio Andelic).
FileおよびHDFSストレージに対するグロブマッチングの性能を改善しました。 #56141 (Andrey Zvonov).- 実験的な全文索引における posting list が圧縮されるようになり、そのサイズが 10〜30% 削減されました。 #56226 (Harry Lee).
- バックアップ処理で
BackupEntriesCollectorの並列実行を行うようにしました。 #56312 (Kseniia Sumarokova).
改善
- 新しい
MergeTree設定add_implicit_sign_column_constraint_for_collapsing_engine(デフォルトでは無効)を追加しました。有効化すると、CollapsingMergeTreeテーブルに対して暗黙的な CHECK 制約を追加し、Signカラムの値を -1 または 1 のみに制限します。#56701。#56986(Kevin Mingtarja)。 - 再起動せずにストレージ設定へ新しいディスクを追加できるようにしました。 #56367 (Duc Canh Le).
- 同じ
ALTERクエリ内で索引の作成とマテリアライズを行えるようになり、さらに同じクエリ内で "modify TTL" および "materialize TTL" もサポートしました。 #55651 をクローズしました。 #56331(flynn)。 - ソースの JSON 文字列にランダムな変動を加えたバージョンを含む行を返す、新しいテーブル関数
fuzzJSONを追加しました。 #56490 (Julia Kartseva). Mergeエンジンは、基盤となるテーブルの ROW POLICY に従ってレコードをフィルタリングするため、Mergeテーブルに別途 ROW POLICY を作成する必要はありません。 #50209 (Ilya Golshtein).- 分散クエリにおいて分片ごとの実行時間を制限する
max_execution_time_leafと、タイムアウト発生時の挙動を制御するtimeout_overflow_mode_leafを追加しました。 #51823 (Duc Canh Le)。 - HTTP プロキシ越しの HTTPS リクエストでトンネリングを無効化するための ClickHouse 設定を追加。#55033(Arthur Passos)。
background_fetches_pool_sizeを 16、background_schedule_pool_sizeを 512 に設定し、小さな挿入が頻繁に発生する本番環境での利用により適した設定としました。 #54327 (Denny Crane)。- CSV 形式のファイルからデータを読み込む際に、行末が
\nを伴わない\rになっていると、次のような例外が発生します:Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r.。ClickHouse では、CSV の行末は\nまたは\r\nまたは\n\rである必要があり、そのため\rの後には必ず\nが続いていなければなりません。しかし、状況によっては、上記のように CSV 入力データが異常で、\rが行末に単独で存在する場合があります。 #54340 (KevinyhZou). - Arrow ライブラリを新しいエンコーディングをサポートする release-13.0.0 に更新しました。 #44505 をクローズしました。 #54800 (Kruglov Pavel)。
- DDL エントリのホスト一覧からローカル IP アドレスを探す際に、すべてのネットワークインターフェイスを取得する高コストなシステムコールを行わないようにすることで、
ON CLUSTERクエリのパフォーマンスを改善しました。 #54909 (Duc Canh Le). - スレッドをクエリまたは USER に紐付ける前に割り当てられたメモリ使用量の計上方法を修正しました。 #56089 (Nikita Taranov).
- Apache Arrow フォーマットで
LARGE_LISTのサポートを追加しました。 #56118 (edef). OPTIMIZEクエリでEmbeddedRocksDBを手動コンパクションできるようにしました。#56225 (Azat Khuzhin)。EmbeddedRocksDBテーブルに対して BlockBasedTableOptions を指定可能にしました。 #56264 (Azat Khuzhin)。SHOW COLUMNSは、MySQL プロトコル経由で接続された場合に、MySQL のデータ型に相当する名前を表示するようになりました。以前は、use_mysql_types_in_show_columns = 1を設定した場合にのみ、この動作になっていました。この設定は保持されますが、非推奨となりました。 #56277 (Robert Schulze).- サーバーが
TRUNCATEまたはDROP PARTITIONの直後に再起動された場合に発生する可能性のあるThe local set of parts of table doesn't look like the set of parts in ZooKeeperエラーを修正しました。 #56282 (Alexander Tokmakov). - 関数
formatQueryおよびformatQuerySingleLineにおける const ではないクエリ文字列の処理を修正しました。さらに、クエリをパースできない場合に例外をスローする代わりに NULL を返すOrNullバリアントを両関数に追加しました。#56327(Robert Schulze)。 - バックアップを失敗させるのではなく、削除された内部テーブルを持つ materialized view もバックアップできるようにしました。 #56387 (Kseniia Sumarokova).
system.replicasへのクエリは、特定のカラムが問い合わせられた場合に ZooKeeper へのリクエストを発行します。テーブルが数千個ある場合、これらのリクエストによって ZooKeeper への負荷がかなり高くなる可能性があります。system.replicasへのクエリが同時に複数実行されていると、同じリクエストが何度も実行されます。この変更により、同時に実行されるクエリからのリクエストが「重複排除」されます。#56420(Alexander Gololobov)。- 外部データベースをクエリする際の MySQL 互換クエリへの変換を修正。 #56456 (flynn)。
KeeperMapエンジンを使用するテーブルのバックアップおよび復元をサポートしました。 #56460 (Antonio Andelic).- CompleteMultipartUpload に対して 404 応答が返された場合は、再確認する必要があります。クライアント側でタイムアウトやその他のネットワークエラーが発生しても、サーバー側では操作が完了している可能性があります。CompleteMultipartUpload を再試行した際に 404 応答を受け取ることがあります。オブジェクトキーが存在していれば、その操作は成功したものとみなされます。 #56475 (Sema Checherinda).
- HTTP OPTIONS メソッドをデフォルトで有効にしました。これにより、Web ブラウザから ClickHouse へのリクエストが容易になります。 #56483 (Alexey Milovidov).
dns_max_consecutive_failuresの値が #46550 において誤って変更されていたため、これを元に戻したうえで、より適切な値に調整しました。また、本番環境での運用実績に基づき、HTTP のキープアライブタイムアウトも妥当な値まで延長しました。#56485 (Alexey Milovidov)。- ベースバックアップを必要になるまで読み込まないようにしました(オンデマンドで読み込むようにしました)。また、バックアップに関するログメッセージおよびプロファイルイベントを追加しました。 #56516 (Vitaly Baranov).
query_cache_store_results_of_queries_with_nondeterministic_functions(値はfalseまたはtrue)は非推奨の Setting としてマークされました。これは、クエリキャッシュが非決定的関数を含むクエリをどのように扱うかを制御する 3 値の enum であるquery_cache_nondeterministic_function_handlingに置き換えられました。a) 例外をスローする(デフォルトの動作)、b) 非決定的なクエリ結果であってもキャッシュに保存する、c) 無視する、つまり例外をスローせず結果もキャッシュしない、のいずれかを指定します。 #56519 (Robert Schulze).- JOIN の ON 句における等価条件を
is nullチェックを用いた条件に書き換え。実験的機能であり、Analyzer のみ。#56538 (vdimir)。 - 関数
concatは、任意の型の引数をサポートするようになりました(これまでは String と FixedString の引数のみでした)。これにより、MySQL のconcat実装により近い動作になります。例えば、SELECT concat('ab', 42)はab42を返します。 #56540 (Serge Klochkov)。 configのnamed_collectionセクション、または SQL で作成された named collection からキャッシュ設定を取得できるようにしました。 #56541 (Kseniia Sumarokova).- PostgreSQL データベースエンジン: PostgreSQL への接続に失敗した場合に、古いテーブルの削除動作を抑制するようにしました。 #56609 (jsc0218).
- URL が正しくない場合に PG への接続に非常に時間がかかり、その間、対応するクエリがハングしてキャンセルされてしまう問題がありました。 #56648 (jsc0218).
- Keeper の改善: Keeper で圧縮ログをデフォルトで無効化しました。 #56763 (Antonio Andelic).
- 設定
wait_dictionaries_load_at_startupを追加。 #56782 (Vitaly Baranov). - 以前の ClickHouse バージョンには潜在的な脆弱性がありました。ユーザーが接続し、「interserver secret」メソッドでの認証に失敗した場合、サーバーはすぐに接続を終了せず、クライアントから送信される残りのパケットを受信して無視し続けていました。これらのパケットは無視されますが依然として解析されるため、もし別の既知の脆弱性を持つ圧縮方式が使われていた場合、認証なしにその脆弱性を悪用される可能性がありました。この問題は ClickHouse Bug Bounty Program において https://twitter.com/malacupa 氏によって発見されました。#56794(Alexey Milovidov)。
- パーツのフェッチは、そのパーツがリモートレプリカ側で完全にコミットされるまで待機するようになりました。
PreActive状態のパーツは送信しないことが望ましいです。ゼロコピーの場合、これは必須の制約です。#56808 (Sema Checherinda). - experimental な
MaterializedPostgreSQL使用時に発生する可能性のある PostgreSQL 論理レプリケーション変換エラーを修正しました。 #53721 (takakawa). - ユーザーレベルの設定
alter_move_to_space_execute_asyncを実装し、クエリALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUMEを非同期で実行できるようにしました。バックグラウンド実行用プールのサイズはbackground_move_pool_sizeで制御されます。デフォルトの動作は同期実行です。これにより #47643 が修正されました。 #56809(alesapin)。 system.tablesをスキャンする際にエンジンでフィルタリングできるようにし、不要な(時間がかかる可能性のある)接続を回避できるようにしました。 #56813 (jsc0218).- RocksDB ストレージ向けに、system テーブルに
total_bytesとtotal_rowsを表示する機能を追加しました。 #56816 (Aleksandr Musorin)。 - TEMPORARY テーブルに対する ALTER ステートメントで基本的なコマンドを許可しました。 #56892 (Sergey).
- LZ4 圧縮。圧縮済みブロックを直接 out のバッファに書き込むのに out のバッファ容量が足りないというまれなケースでは、その圧縮済みブロックをバッファリングするようにしました。 #56938 (Sema Checherinda).
- キューに入っているジョブ数を示すメトリクスを追加しました。I/O スレッドプールの監視に役立ちます。 #56958 (Alexey Milovidov).
- PostgreSQL テーブルエンジン用の設定を設定ファイルに追加しました。その設定のチェック処理を追加しました。この追加設定に関するドキュメントを追記しました。 #56959 (Peignon Melvyn).
- 関数
concatは、SELECT concat('abc')のように単一の引数で呼び出せるようになりました。これにより、MySQL の concat 実装との動作がより一貫したものになりました。#57000 (Serge Klochkov)。 - AWS S3 ドキュメントの要件どおり、すべての
x-amz-*ヘッダーを署名対象に含めます。 #57001 (Arthur Passos). - 関数
fromDaysSinceYearZero(エイリアス:FROM_DAYS)が、符号なし整数型に加えて符号付き整数型でも使用できるようになりました(以前は符号なし整数型である必要がありました)。これにより、Tableau Online などのサードパーティツールとの互換性が向上します。 #57002 (Serge Klochkov)。 system.s3queue_logをデフォルト設定に追加しました。 #57036 (Kseniia Sumarokova).wait_dictionaries_load_at_startupのデフォルト値を true に変更し、dictionaries_lazy_loadが false の場合にのみこの設定が使用されるようにしました。 #57133 (Vitaly Baranov)。dictionaries_lazy_loadが有効な場合でも、Dictionary 作成時にソースタイプをチェックするようにしました。 #57134 (Vitaly Baranov).- プランレベルの最適化を個別に有効化/無効化できるようになりました。以前は、すべての最適化を一括で無効化することしかできませんでした。以前その用途に使われていた設定
query_plan_enable_optimizationsはそのまま残されており、引き続きすべての最適化を無効化するために使用できます。 #57152 (Robert Schulze). - サーバーの終了コードは例外コードに対応します。たとえば、メモリ制限によってサーバーを起動できない場合、コード 241 = MEMORY_LIMIT_EXCEEDED で終了します。以前のバージョンでは、例外に対する終了コードは常に 70 = Poco::Util::ExitCode::EXIT_SOFTWARE でした。 #57153 (Alexey Milovidov).
- C++ の
functionalヘッダー由来のスタックフレームについては、デマングルおよびシンボル化を行わないようにしました。 #57201 (Mike Kot). - HTTP サーバーページ
/dashboardで複数の線を持つグラフがサポートされるようになりました。 #57236 (Sergei Trifonov)。 max_memory_usage_in_clientコマンドラインオプションで、サフィックス(K、M、G など)付きの文字列値をサポートするようになりました。 #56879 をクローズしました。 #57273(Yarik Briukhovetskyi)。- codec
DEFLATE_QPLで使用されている Intel QPL を v1.2.0 から v1.3.1 にアップデートしました。また、BOF (Block On Fault) = 0 の場合のバグを修正し、ページフォールト発生時にはソフトウェアパスへフォールバックして処理するように変更しました。#57291 (jasperzhu)。 - MergeTree の設定項目
replicated_deduplication_windowのデフォルト値を 100 から 1k に引き上げ。#57335(sichenzhao)。 INCONSISTENT_METADATA_FOR_BACKUPを過度に使用しないようにしました。可能な限り、バックアップ用のスキャンを最初からやり直すために一度停止して再開するのではなく、そのままスキャンを継続するようにしました。#57385 (Vitaly Baranov)。
ビルド/テスト/パッケージングの改善
- SQLLogic テストを追加しました。 #56078 (Han Fei).
- 利便性向上のため、
clickhouse-localとclickhouse-clientを短い名前(ch、chl、chc)でも利用できるようにしました。 #56634 (Alexey Milovidov). - 外部ライブラリから未使用コードを削除することで、ビルドサイズをさらに最適化しました。 #56786 (Alexey Milovidov).
- 大きな翻訳単位が存在しないことを自動でチェックする仕組みを追加しました。 #56559 (Alexey Milovidov).
- 単一バイナリディストリビューションのサイズを小さくしました。これにより #55181 がクローズされました。 #56617 (Alexey Milovidov).
- 各ビルド後に、すべての翻訳単位およびバイナリファイルのサイズ情報を ClickHouse Cloud 上の CI データベースに送信するようにしました。これにより #56107 がクローズされました。 #56636 (Alexey Milovidov).
- 「Apache Arrow」ライブラリの一部のファイル(arrow フォーマットのパースなど、本質的でない用途にのみ使用しているもの)が、ビルドキャッシュに関係なく常に再ビルドされていました。この問題を修正しました。 #56657 (Alexey Milovidov).
- バージョン情報の自動生成ソースファイルに依存する翻訳単位が再コンパイルされないようにしました。 #56660 (Alexey Milovidov).
- リンカ呼び出しのトレースデータを ClickHouse Cloud 上の CI データベースに送信するようにしました。 #56725 (Alexey Milovidov).
- clickhouse バイナリのデバッグシンボルとして DWARF 5 を使用するようにしました(これまでは DWARF 4)。 #56770 (Michael Kolupaev).
- 新しいビルドオプション
SANITIZE_COVERAGEを追加しました。有効にすると、コードにインストルメンテーションを挿入してカバレッジを追跡します。収集された情報は ClickHouse 内で次の方法で利用できます: (1) 直近のカバレッジリセット以降に見つかったコード内のユニークなアドレスの配列を返す新しい関数coverage、(2) 蓄積されたデータをリセットするSYSTEM RESET COVERAGEクエリ。これにより、差分コードカバレッジを含むさまざまなテスト間でカバレッジを比較できます。 #20539 の継続です。 #56102 (Alexey Milovidov). - スタック収集時に、一部のスタックフレームが解決できない場合があります。そのようなケースでは、生のアドレス値が役に立つことがあります。 #56267 (Alexander Gololobov).
libsshを無効化するオプションを追加しました。 #56333 (Alexey Milovidov).- CI 内の S3 テストで
temporary_data_in_cacheを有効化しました。 #48425 (vdimir). - CI で clickhouse-client の最大メモリ使用量を
1Gに設定しました。 #56873 (Nikita Mikhaylov).
バグ修正(公式安定版リリースにおけるユーザー影響のある不具合)
- 実験的な Analyzer を修正しました。挿入先テーブルを参照するサブクエリを含む
SELECTからの挿入では、挿入ブロックのみを処理するようにしました。 #50857 (Yakov Olkhovskiy). str_to_map関数の不具合を修正。 #56423 (Arthur Passos).- Keeper
reconfig: リーダーの役割を放棄/取得する前にタイムアウトを追加 #53481 (Mike Kot). - grace hash join および filter pushdown で誤ったヘッダーが使用される問題を修正 #53922 (vdimir)。
- テーブルがテーブル関数に基づいている場合でも、system テーブルから SELECT できるようにしました。 #55540 (MikhailBurdukov).
- RFC: Distributed クエリで LIMIT BY を使用した際に発生する「Cannot find column X in source stream」エラーを修正 #55836 (Azat Khuzhin)。
- バックグラウンドでクライアントを実行している際に発生する 'Cannot read from file:' エラーを修正 #55976 (Kruglov Pavel)。
- 不正な
send_logs_level設定時にclickhouse-localが異常終了してしまう問題を修正 #55994 (Kruglov Pavel)。 - パラメータ化された VIEW を含む EXPLAIN AST のバグ修正 #56004 (SmitaRKulkarni)。
- 起動時にテーブルを読み込む際に発生するクラッシュを修正 #56232 (Nikolay Degterinsky)。
- ClickHouse をソースとする辞書で、明示的なクエリを使用するものを修正 #56236 (Nikolay Degterinsky)。
- Keeper のシグナルハンドラで発生していたセグメンテーションフォルトを修正 #56266 (Antonio Andelic)。
- view() 関数での UNION によりクエリ結果が不完全な状態で返される問題を修正。 #56274 (Nikolai Kochetov).
- "cast('0' as DateTime64(3))" と "cast('0' as Nullable(DateTime64(3)))" の一貫性の問題を修正 #56286 (李扬)。
- メモリ割り当ての失敗に関連する、まれに発生するレースコンディションを修正 #56303 (alesapin)。
flatten_nestedおよびdata_type_default_nullable使用時のバックアップからの復元処理を修正 #56306 (Kseniia Sumarokova).- Object(JSON) 型のカラムを追加するとクラッシュする不具合を修正しました #56307 (Nikita Mikhaylov)。
filterPushDownで発生していたクラッシュを修正 #56380 (vdimir)。- マテリアライズドビューと削除されたソーステーブルが存在する場合のバックアップからのリストア処理を修正 #56383 (Kseniia Sumarokova)。
- Kerberos 初期化時のセグメンテーションフォルトを修正 #56401 (Nikolay Degterinsky)。
- T64 におけるバッファオーバーフローを修正 #56434 (Alexey Milovidov)。
- FINAL での Nullable 主キーを修正 (2) #56452 (Amos Bird)。
- 初期ノード上でデータベースが指定されていない
ON CLUSTERクエリの不具合を修正 #56484 (Nikolay Degterinsky)。 - 有効期限 (TTL) への依存関係が原因となっていた起動失敗を修正 #56489 (Nikolay Degterinsky)。
ON CLUSTERを含むALTER COMMENTクエリを修正しました #56491 (Nikolay Degterinsky).- ALIAS 付きの ALTER COLUMN を修正 #56493(Nikolay Degterinsky)。
- 空の NAMED COLLECTION が生成される問題を修正しました #56494 (Nikolay Degterinsky)。
- PROJECTION の解析で発生する 2 つのケースを修正しました。 #56502 (Amos Bird).
- クエリキャッシュでのエイリアスの処理を修正 #56545 (Robert Schulze)。
Nullable(Enum)からNullable(String)への変換の不具合を修正 #56644(Nikolay Degterinsky)。- Keeper における、より信頼性の高いログ処理 #56670 (Antonio Andelic)。
- 置換属性を持つノードの設定マージ処理を修正しました #56694 (Konstantin Bogdanov)。
- テーブル関数 input() が重複して使用される問題を修正。 #56695 (Nikolai Kochetov).
- 修正: RabbitMQ の OpenSSL の動的ロードに関する問題 #56703 (Igor Nikonov)。
- データにゼロが含まれている場合に GCD codec がクラッシュする不具合を修正 #56704 (Nikita Mikhaylov)。
- 関数への INSERT 中に clickhouse-local で発生する 'mutex lock failed: Invalid argument' エラーを修正 #56710 (Kruglov Pavel)。
- 楽観的パスでの日付文字列のパースを修正 #56765 (Kruglov Pavel)。
- FPC コーデックで発生するクラッシュを修正 #56795 (Alexey Milovidov)。
- DatabaseReplicated: レプリカ復旧後に発生していた DDL クエリのタイムアウトを修正 #56796 (Alexander Tokmakov)。
- MySQL バイナリプロトコルで Nullable カラムが正しく報告されない問題を修正しました #56799 (Serge Klochkov)。
- メタストアテーブル用の Iceberg メタデータファイルをサポートしました #56810 (Kruglov Pavel)。
- transform における TSAN レポートの問題を修正 #56817 (Raúl Marín)。
- SET クエリおよび SETTINGS の書式を修正 #56825 (Nikolay Degterinsky).
- joinGet でテーブル依存関係が原因となり起動に失敗する問題を修正 #56828 (Nikolay Degterinsky)。
- ADD COLUMN 実行時に既存の Nested カラムが誤ってフラット化される問題を修正 #56830 (Nikolay Degterinsky).
- CSV で行末の CR を許可できるよう修正しました #56901 (KevinyhZou)。
- 無効な入力に対する
tryBase64Decodeの動作を修正 #56913 (Robert Schulze). - CapnProto/Protobuf スキーマで深くネストされたカラムを生成する処理を修正 #56941 (Kruglov Pavel)。
- PROJECTION のカラムに対する互換性のない ALTER 操作を防止 #56948 (Amos Bird)。
- SQLite ファイルパス検証を修正 #56984 (San).
- S3Queue: メタデータ参照カウンタのインクリメント処理を修正 #56990 (Kseniia Sumarokova).
- S3Queue の細かな修正 #56999 (Kseniia Sumarokova).
- DatabaseFileSystem のファイルパスの検証処理を修正 #57029 (San)。
ARRAY JOIN使用時のfuzzBitsの不具合を修正 #57033 (Antonio Andelic).- joined_subquery_re... を伴う部分マージ結合での nullptr デリファレンスを修正しました。 #57048 (vdimir).
- RemoteSource のレースコンディションを修正 #57052 (Raúl Marín)。
- 大きな整数向けの
bitHammingDistanceを実装 #57073 (Alexey Milovidov)。 - S3 形式のリンクに関するバグを修正 #57075 (Yarik Briukhovetskyi)。
JSON_QUERY関数で数値パスを複数指定した場合に発生する不具合を修正 #57096 (KevinyhZou)。- Gorilla コーデックのバッファオーバーフローを修正 #57107(Nikolay Degterinsky)。
- 認証前にいかなる例外が発生した場合でもインターサーバー間接続をクローズするように変更 #57142 (Antonio Andelic).
- Nullable な MATERIALIZED カラムに対する ALTER UPDATE 実行後に発生するセグメンテーションフォルトを修正 #57147 (Nikolay Degterinsky)。
- 部分的にマテリアライズされた通常の PROJECTION を使用する場合の、誤った JOIN プランの最適化を修正。 #57196 (Amos Bird).
- カラムの説明を比較する際にコメントを無視するようにしました #57259 (Antonio Andelic)。
- すべてのケースで
ReadonlyReplicaメトリクスが正しく動作するよう修正 #57267 (Antonio Andelic). - バックグラウンドマージで一時データの保存にキャッシュを正しく使用するよう修正しました #57275 (vdimir).
- Keeper における changelog とスナップショットの不具合修正 #57299 (Antonio Andelic)。
- ホスト名が変更された場合は、完了済みの ON CLUSTER タスクを無視します #57339 (Alexander Tokmakov).
- MergeTree の mutation が元のパートの索引の粒度を再利用するように修正 #57352 (Maksim Kita)。
- FS cache: バックグラウンドでのダウンロードに制限を追加 #57424 (Kseniia Sumarokova).
ClickHouse リリース 23.10、2023-11-02
後方互換性のない変更
- 壊れたデータパーツを自動的に削除するオプションは廃止されました。これにより #55174 がクローズされました。#55184(Alexey Milovidov)。#55557(Jihyuk Bok)。
- 古いインメモリのデータパーツは、write-ahead log からは読み取れなくなりました。以前にインメモリパーツを構成していた場合は、アップグレード前に削除する必要があります。#55186(Alexey Milovidov)。
- Meilisearch との連携を削除しました。理由: 古いバージョン 0.18 にのみ対応していました。Meilisearch の最近のバージョンではプロトコルが変更され、もはや動作しません。注: 連携を復活させるためにご協力いただけると助かります。#55189(Alexey Milovidov)。
- directory monitor の概念名を background INSERT に変更しました。すべての
*directory_monitor*設定はdistributed_background_insert*に改名されました。後方互換性は維持されるはずです(旧設定はエイリアスとして追加されています)。#55978(Azat Khuzhin)。 - クライアント側で設定された
send_timeoutを、サーバー側のreceive_timeoutとして(およびその逆として)解釈しないようにしました。#56035(Azat Khuzhin)。 - 異なる単位の時間間隔の比較は、例外をスローするようになりました。これにより #55942 がクローズされました。以前の挙動(単位に関係なく内部の数値だけが比較される)に、意図せず依存していた可能性があります。#56090(Alexey Milovidov)。
- 実験的な
S3Queueテーブルエンジンを完全に書き直しました。ZooKeeper 内で情報を保持する方法を変更し、ZooKeeper へのリクエスト回数を減らせるようにし、状態が変化しないとわかっている場合には ZooKeeper の状態をキャッシュする機能を追加し、S3 からのポーリング処理をより攻撃的でないように改善し、トラッキング対象ファイルの有効期限 (TTL) と max set の維持方法を変更し、これがバックグラウンドプロセスとして実行されるようになりました。system.s3queueおよびsystem.s3queue_logテーブルを追加しました。#54998 をクローズします。#54422(Kseniia Sumarokova)。 - HTTP エンドポイント上の任意のパスは、もはや
/queryエンドポイントへのリクエストとしては解釈されません。#55521(Konstantin Bogdanov)。
新機能
arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn)関数を追加しました。この関数は同じ要素数を持つ複数の配列に対してラムダ関数を適用し、その結果をアキュムレータに集約します。 #49794 (Lirikl).Npyフォーマットをサポートしました。SELECT * FROM file('example_array.npy', Npy)。#55982(Yarik Briukhovetskyi)。- テーブルがキーに空間充填曲線を用いている場合、例として
ORDER BY mortonEncode(x, y)のような場合、その引数に対する条件、例えばx >= 10 AND x <= 20 AND y >= 20 AND y <= 30を索引に利用できます。この解析を有効化または無効化するためにanalyze_index_with_space_filling_curvesという設定が追加されました。これにより #41195 が解決されました。#4538、#6286、#28130、#41753 の継続です。#55642(Alexey Milovidov)。 force_optimize_projection_nameという新しい設定が追加されました。これは引数として PROJECTION の名前を受け取ります。この値が空でない文字列に設定されている場合、ClickHouse はその PROJECTION がクエリ内で少なくとも 1 回使用されていることを確認します。#55331 をクローズします。 #56134(Yarik Briukhovetskyi)。- ネイティブプロトコル経由で外部データを使用した非同期インサートをサポートしました。以前は、データがクエリ内にインラインで指定されている場合にのみ動作していました。 #54730 (Anton Popov).
- 可視化用のデータをダウンサンプリングするために Largest-Triangle-Three-Buckets アルゴリズムを用いる集約関数
lttbを追加しました。 #53145 (Sinan)。 CHECK TABLEクエリのパフォーマンスと使い勝手が向上しました(進捗状況を通知し、実行をキャンセル可能)。CHECK TABLE ... PART 'part_name'による特定パートのチェックをサポートしました。 #53404 (vdimir).jsonMergePatch関数を追加しました。文字列として扱われる JSON オブジェクト同士をマージし、単一の JSON オブジェクトを表す 1 つの文字列にまとめる方法を提供します。 #54364 (Memo)。- Kusto Query Language 方言のサポート第 2 弾です。Phase 1 の実装 はマージ済みです。#42510(larryluogit)。
- 新しい SQL 関数
arrayRandomSample(arr, k)を追加しました。これは入力配列から k 個の要素をサンプリングして返します。これまでは、同様の機能はより扱いにくい構文(例: "SELECT arrayReduce('groupArraySample(3)', range(10))")でのみ実現可能でした。 #54391 (itayisraelov). - 最小値・最大値のみを対象に集約を行える
-ArgMin/-ArgMax集約コンビネータを導入しました。ユースケースの一例は #54818 に記載されています。この PR ではコンビネータを専用フォルダに整理しました。#54947 (Amos Bird)。 - Protobuf フォーマット用のキャッシュを
SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]で削除できるようになりました。 #55064 (Aleksandr Musorin)。 - 外部 HTTP Basic 認証器を追加。#55199(Aleksei Filatov)。
- 符号なし整数のバイト順を反転する関数
byteSwapを追加しました。これは、IPv4 など内部的に符号なし整数として表現される型の値のバイト順を反転する場合に特に有用です。 #55211 (Priyansh Agrawal)。 - SQL クエリ文字列の整形されたバージョン(複数行にまたがる可能性あり)を返す関数
formatQueryを追加しました。同様の処理を行い、かつ返される文字列に改行が含まれない関数formatQuerySingleLineも追加しました。 #55239 (Salvatore Mesoraca)。 - ELF 実行ファイル/ライブラリ/オブジェクトファイルからデバッグシンボルを読み取るための
DWARF入力フォーマットを追加しました。 #55450 (Michael Kolupaev)。 - RabbitMQ、NATS、および FileLog エンジンで、未解析のレコードとエラーを保存できるようにしました。ClickHouse が新しいレコードのパースに失敗した場合に設定される仮想カラムとして、
_errorと_raw_message(NATS および RabbitMQ 用)、_raw_record(FileLog 用)を追加しました。この挙動は、NATS 用のストレージ設定nats_handle_error_mode、RabbitMQ 用のrabbitmq_handle_error_mode、FileLog 用のhandle_error_modeによって制御され、kafka_handle_error_modeと同様です。defaultに設定されている場合、ClickHouse がレコードのパースに失敗すると例外がスローされ、streamに設定されている場合、エラーと元のレコードが仮想カラムに保存されます。 #36035 をクローズしました。 #55477(Kruglov Pavel)。 - Keeper クライアントの改善:特定のパス配下に存在するすべての子ノードの数を返す
get_all_children_numberコマンドを追加。#55485 (guoxiaolong). - Keeper クライアントの改善: 指定したパス配下にある直接の子ノード数を返す
get_direct_children_numberコマンドを追加。#55898 (xuzifu666)。 - 既存の
SHOW SETTINGSステートメントの簡易版であるSHOW SETTING setting_nameステートメントを追加しました。 #55979 (Maksim Kita). system.parts_columnsテーブルにsubstreamsおよびfilenames列を追加しました。 #55108 (Anton Popov)。SHOW MERGESクエリのサポートを追加しました。 #55815 (megao).- デフォルトで
ORDER BY ()を使用するための設定create_table_empty_primary_key_by_defaultを導入しました。 #55899 (Srikanth Chekuri).
パフォーマンスの向上
- ウィンドウ関数評価後もストリーム数を維持してストリームの並列処理を可能にするオプション
query_plan_preserve_num_streams_after_window_functionsを追加しました。 #50771 (frinkr)。 - データ量が少ない場合に、より多くのストリームを解放するようにした。 #53867 (Jiebin Sun)。
- RoaringBitmap はシリアル化の前に最適化されるようになりました。 #55044 (UnamedRus).
- 転置インデックスにおけるポスティングリストは、内部ビットマップを可能な限り小さい表現で保持するよう最適化されました。データの繰り返し度合いによっては、転置インデックスの使用容量を大幅に削減できる場合があります。 #55069 (Harry Lee).
- Context ロックの競合を解消しました。これにより、多数の短時間で終了する並行クエリのパフォーマンスが大幅に向上します。 #55121 (Maksim Kita).
- 反転インデックス作成時の性能を 30% 向上させました。これは
std::unordered_mapをabsl::flat_hash_mapに置き換えることで達成しました。#55210(Harry Lee)。 - ORC フィルターのプッシュダウン(rowgroup レベル)をサポートしました。 #55330 (李扬)。
- 多数の一時ファイルを扱う外部集約処理のパフォーマンスを改善。 #55489 (Maksim Kita).
- セカンダリインデックスのマークキャッシュのデフォルトサイズを適切な値に設定し、マークが何度も再読み込みされるのを防ぐようにしました。 #55654 (Alexey Milovidov)。
- skip index の読み取り時に、不要な index granule の再構築を回避します。これにより #55653 が解決されます。 #55683(Amos Bird)。
IN関数で使用される set の要素型がカラム型と完全に一致しない場合に、実行時に set 内での CAST 関数をキャッシュすることで、IN関数のパフォーマンスを改善しました。 #55712 (Duc Canh Le).ColumnVector::insertManyおよびColumnVector::insertManyFromのパフォーマンスを向上しました。 #55714 (frinkr)。- 次の行におけるキー位置を予測して比較回数を削減することで、Map の添字アクセスを最適化しました。 #55929 (lgbo).
- Parquet での Struct 型フィールドのプルーニングをサポート(以前のバージョンでは一部のケースで動作していなかった)。 #56117 (lgbo).
- 読み取り行数の推定に基づいて、クエリの実行時に使用される並列レプリカ数をチューニングできる機能を追加しました。 #51692 (Raúl Marín)。
- 多数の一時ファイルが生成される場合における外部集約処理のメモリ消費を最適化しました。 #54798 (Nikita Taranov)。
async_socket_for_remoteモード(デフォルト)で実行される分散クエリでも、max_threadsの制限が適用されるようになりました。以前は、一部のクエリが過剰な数のスレッド(最大でmax_distributed_connectionsまで)を作成し、サーバーのパフォーマンス問題を引き起こす可能性がありました。#53504(filimonov)。- ZooKeeper の分散 DDL キューから DDL を実行する際に、スキップ対象のエントリをキャッシュするようにしました。 #54828 (Duc Canh Le).
- 実験的な転置インデックスでは、一致数が多すぎるトークン(すなわちポスティングリスト内の行 ID)は保存されません。これにより、ストレージ容量を節約し、シーケンシャルスキャンと同等かそれ以上に高速な場合に、非効率なインデックス検索を回避できます。トークンを保存しない条件を制御していた従来のヒューリスティック(インデックス定義に渡される
densityパラメータ)は、ユーザーにとって分かりにくいものでした。代わりに、パラメータmax_rows_per_postings_list(デフォルト: 64k)に基づく、より単純なヒューリスティックが導入されました。これは、ポスティングリスト内で許可される行 ID の最大数を直接制御します。 #55616 (Harry Lee)。 EmbeddedRocksDBテーブルの書き込み性能を改善。 #55732 (Duc Canh Le).- 1つのパーティション内に多数のパーツ(1000個超)を含む場合における ClickHouse の全体的な耐障害性を改善しました。これにより、
TOO_MANY_PARTSエラーの発生数が減少する可能性があります。 #55526 (Nikita Mikhaylov)。 - 階層型ディクショナリの読み込み時のメモリ使用量を削減しました。 #55838 (Nikita Taranov).
- すべてのDictionaryで
dictionary_use_async_executorを設定可能になりました。 #55839 (vdimir). - AggregateFunctionTopKGenericData のデシリアライズ時に発生する過剰なメモリ使用を防止。 #55947 (Raúl Marín).
- 多数の watch を保持している Keeper 環境では、
DB::KeeperStorage::getSessionsWithWatchesCount内で AsyncMetrics スレッドが体感できるほどの時間、CPU を 100% 消費する可能性があります。修正として、負荷の大きいwatchesおよびlist_watchesの集合を走査しないようにしました。 #56054 (Alexander Gololobov). - ストレージ EmbeddedRocksDB で
countの近似計算を利用するためのoptimize_trivial_approximate_count_query設定を追加しました。StorageJoin に対しても単純な count を有効化しました。#55806 (Duc Canh Le)。
改善
- 関数
toDayOfWeek(MySQL のエイリアス:DAYOFWEEK)、toYearWeek(YEARWEEK)、toWeek(WEEK) がString引数をサポートするようになりました。これにより、MySQL の動作と一貫したものになりました。 #55589 (Robert Schulze). date_time_overflow_behaviorという設定項目を導入しました。指定可能な値はignore、throw、saturateで、Date、Date32、DateTime64、Integer または Float から Date、Date32、DateTime もしくは DateTime64 への変換時に、オーバーフロー時の動作を制御します。#55696(Andrey Zvonov)。ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType}に対するクエリパラメータ対応を実装しました。#49516 をマージし、#49449 をクローズしました。#55604(alesapin)。- EXPLAIN でのプロセッサー ID の表示を、より見やすい形式にしました。 #48852 (Vlad Seliverstov).
- lifetime フィールドを持つ direct dictionary の作成は、作成時に拒否されるようになりました(有効期限は direct dictionary には意味がないため)。修正: #27861。#49043(Rory Crispin)。
ALTER TABLE t DROP PARTITIONのような、パーティションを指定するクエリでパラメータを使用できるようにしました。#49449 をクローズしました。 #49516 (Nikolay Degterinsky)。system.zookeeper_connectionに新しいカラムxidを追加しました。 #50702 (helifu).- 設定の再読み込み後に
system.server_settingsに正しいサーバー設定が表示されるようにしました。 #53774 (helifu). - クエリで、
-と同様に動作する数学記号のマイナス文字−をサポートしました。 #54100 (Alexey Milovidov)。 - 実験的な
Replicatedデータベースエンジンにレプリカグループを追加。#53620 をクローズ。 #54421 (Nikolay Degterinsky)。 - クエリを即座に失敗させてしまうよりも、再試行可能な S3 エラーは再試行した方がよいです。そのため、デフォルトの
s3_retry_attemptsの値を大きくしました。 #54770 (Sema Checherinda). - ロードバランシングモード
hostname_levenshtein_distanceを追加しました。 #54826 (JackyWoo)。 - ログに出力されるシークレットのマスキングを改善。 #55089 (Vitaly Baranov)。
- 現在のところ、PROJECTION の解析はクエリプランに対してのみ行われます。設定
query_plan_optimize_projectionは廃止されました(かなり前からデフォルトで有効になっていました)。#55112(Nikita Mikhaylov)。 - 関数
untupleが名前付き要素を持つタプルに対して呼び出され、かつその関数自身にもエイリアスが付いている場合(例:select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias)、結果のカラム名はuntupleのエイリアスとタプル要素のエイリアスを組み合わせて生成されるようになりました(この例では: "untuple_alias.element_alias")。 #55123 (garcher22). - テーブルの仮想カラムを
DESCRIBEクエリの結果に含められるようにするdescribe_include_virtual_columns設定を追加しました。describe_compact_output設定を追加しました。これをtrueに設定すると、DESCRIBEクエリは追加情報なしでカラム名と型のみを返します。 #55129 (Anton Popov). optimize_throw_if_noop=1を指定したOPTIMIZEが、実際の原因はパーツごとに異なる PROJECTION が存在していたにもかかわらず、エラーunknown reasonで失敗することがありました。この挙動は修正されました。 #55130 (Nikita Mikhaylov)。- 同じ Postgres テーブルに対応する複数の
MaterializedPostgreSQLテーブルを作成できるようにしました。デフォルトではこの動作は無効です(後方互換性のない変更であるため) が、materialized_postgresql_use_unique_replication_consumer_identifier設定を有効にすることでオンにできます。#54918 をクローズしました。 #55145(Kseniia Sumarokova)。 - 短い文字列から小数部を持つ負の
DateTime64およびDateTimeを解析できるようにしました。 #55146 (Andrey Zvonov)。 - MySQL との互換性を高めるため、1.
information_schema.tablesに新たなフィールドtable_rowsを追加し、2.information_schema.columnsに新たなフィールドextraを追加しました。 #55215 (Robert Schulze)。 - 結果が 0 行で、かつ例外がスローされた場合、clickhouse-client は "0 rows in set" を表示しなくなりました。 #55240 (Salvatore Mesoraca).
TABLEキーワードなしでテーブル名を変更できるようにしました。例:RENAME db.t1 to db.t2。 #55373 (凌涛)。system.clustersにinternal_replicationを追加。 #55377 (Konstantin Morozov).- リクエストプロトコルに基づいてリモートプロキシリゾルバを選択し、プロキシ機能のドキュメントを追加し、
DB::ProxyConfiguration::Protocol::ANYを削除。 #55430 (Arthur Passos). - テーブルのシャットダウン後は、INSERT 時に Keeper 操作を再試行しないようにしました。 #55519 (Azat Khuzhin)。
SHOW COLUMNSは、設定use_mysql_types_in_show_columnsが有効な場合に、型FixedStringを正しくBLOBとして報告するようになりました。さらに、新たに 2 つの設定mysql_map_string_to_text_in_show_columnsとmysql_map_fixed_string_to_text_in_show_columnsが追加され、型StringおよびFixedStringの出力をTEXTまたはBLOBに切り替えられるようになりました。 #55617 (Serge Klochkov)。- ReplicatedMergeTree テーブルの起動時に、ClickHouse サーバーはパーツ集合をチェックして、予期しないパーツ(ローカルには存在するが ZooKeeper には存在しないもの)がないか確認します。すべての予期しないパーツは detached ディレクトリに移動され、その代わりにサーバーはそれらを包含している祖先パーツを復元しようとします。サーバーはこれまではそれらを包含するパーツの中からランダムに選んで復元していましたが、最も近い祖先パーツを復元するようになりました。 #55645 (alesapin).
- 高度なダッシュボードで、タッチデバイス上のグラフをドラッグできるようになりました。これにより #54206 がクローズされました。 #55649 (Alexey Milovidov)。
http_write_exception_in_output_formatで例外を出力する際、宣言されている場合はデフォルトのクエリ形式を使用するようにしました。 #55739 (Raúl Marín).- 一般的な MATERIALIZED VIEW の落とし穴に対するメッセージを改善。 #55826 (Raúl Marín)。
- 現在のデータベースを削除しても、
clickhouse-localでは一部のクエリを実行し、別のデータベースに切り替えることができます。これにより、clickhouse-clientと動作が一致します。この変更により #55834 がクローズされました。#55853(Alexey Milovidov)。 - 関数
(add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond)は、SELECT addDays('2023-10-22', 1)のように、文字列表現の日時引数をサポートするようになりました。これにより MySQL との互換性が向上し、Tableau Online が必要とする機能が提供されます。#55869 (Robert Schulze)。 apply_deleted_mask設定を無効化すると、論理削除の DELETE クエリによって削除済みとしてマークされた行を読み取ることができます。これはデバッグに役立ちます。 #55952 (Alexander Gololobov).- Tuple を JSON オブジェクトにシリアライズする際に
null値をスキップできるようにし、Spark のto_json関数との互換性を維持できるようにしました。これは gluten にとっても有用です。#55956 (李扬)。 - 関数
(add|sub)Dateは、文字列表現の日付引数をサポートするようになりました。例:SELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE)。同様の文字列表現の日付引数のサポートが、+および-演算子にも追加されました。例:SELECT '2023-10-23' + INTERVAL 1 DAY。これにより MySQL との互換性が向上し、Tableau Online で必要とされる機能が提供されます。 #55960 (Robert Schulze). - CSV 形式で CR (
\r) を含むクォートされていない文字列を許可するようにしました。 #39930 をクローズしました。 #56046(Kruglov Pavel)。 - 埋め込み設定で
clickhouse-keeperを実行できるようにしました。 #56086 (Maksim Kita). - Kafka からのデータ取得開始時の問題を回避するため、
queued.min.messagesの設定可能な最大値に制限を設けました。 #56121 (Stas Morozov). - SQL 関数
minSampleSizeContinousのタイポを修正し、minSampleSizeContinuousにリネームしました。後方互換性のため、古い名前も引き続き利用可能です。次の issue をクローズします: #56139。#56143(Dorota Szeremeta)。 - サーバーをシャットダウンする前に、ディスク上で壊れたパーツのパスを出力するようにしました。この変更以前は、ディスク上のパーツが破損してサーバーが起動できない場合、どのパーツが壊れているのかを特定することはほぼ不可能でした。この問題は解消されました。 #56181 (Duc Canh Le)。
ビルド/テスト/パッケージングの改善
- Docker 内のデータベースがすでに初期化されている場合、後続の起動時に再度初期化する必要はありません。これにより、データベースが 1000 回の試行以内にロードされない場合にコンテナが再起動を繰り返す問題を潜在的に修正できます(非常に大きなデータベースやマルチノード構成で発生する可能性があります)。 #50724 (Alexander Nikolaev).
- サブモジュールを含むソースコードを持つリソースを、Darwin 用の特別なビルドタスクでビルドするようにしました。これにより、サブモジュールをチェックアウトせずに ClickHouse をビルドできます。 #51435 (Ilya Yatsishin).
- AVX 命令群をグローバルに有効化して ClickHouse をビルドした場合(非推奨)、エラーが発生していました。原因は、snappy が
SNAPPY_HAVE_X86_CRC32を有効化していないことでした。 #55049 (monchickey). clickhouse-serverパッケージからスタンドアロンでclickhouse-keeperを起動する際の問題を解決しました。 #55226 (Mikhail f. Shiryaev).- テストにおいて RabbitMQ のバージョンを 3.12.6 に更新し、RabbitMQ テスト向けのログ収集を改善しました。 #55424 (Ilya Yatsishin).
- 機能テストを修正するため、OpenSSL と BoringSSL 間のエラーメッセージの差異を調整しました。 #55975 (MeenaRenganathan22).
- Apache DataSketches に対して upstream リポジトリを使用するようにしました。 #55787 (Nikita Taranov).
バグ修正(公式安定版リリースでユーザーに影響する不具合)
- ミューテーション時に反転索引ファイルへのハードリンク作成をスキップするようにしました #47663 (cangyin)。
match関数(正規表現)で、オルタネーションを含むパターンが誤ったキー条件を生成してしまうバグを修正しました。Closes #53222. #54696 (Yakov Olkhovskiy).- ARRAY JOIN での read-in-order 最適化時に発生していた 'Cannot find column' エラーを修正 #51746 (Nikolai Kochetov)。
- クエリで見落とされていた実験的な
Object(Nullable(json))サブカラムのサポートを追加しました。 #54052 (zps). accurateCastOrNull向けの修正を再適用 #54629 (Salvatore Mesoraca)。- AS を指定せずに作成した分散テーブルのカラムにおける
DEFAULTの検出を修正しました #55060 (Vitaly Baranov)。 - ShellCommandSource のコンストラクタにおける例外発生時の適切なクリーンアップ #55103 (Alexander Gololobov)。
- LDAP で割り当てられたロールの更新時に発生するデッドロックを修正 #55119 (Julian Maicher)。
- 内部例外時のエラー統計の更新を抑制する #55128(Robert Schulze)。
- バックアップで発生するデッドロックを修正 #55132 (alesapin).
- storage Iceberg におけるファイル取得処理を修正 #55144 (Kseniia Sumarokova)。
- Set 内の余分なカラムに対するパーティションプルーニングを修正。 #55172 (Amos Bird).
- テーブルがアダプティブグラニュラリティを使用している場合に、
ALTER UPDATEクエリでスキップインデックスが正しく再計算されない問題を修正しました #55202 (Duc Canh Le)。 - fs キャッシュにおけるバックグラウンドダウンロードの不具合を修正 #55252 (Kseniia Sumarokova)。
- バッファが最終化されない場合にコンプレッサーで発生し得るメモリリークを防止しました #55262 (Azat Khuzhin)。
- スパースなカラムに対する関数の実行を修正 #55275 (Azat Khuzhin)。
- SummingMergeTree テーブルに対する SELECT FINAL 実行時の Nested カラムの誤ったマージ処理を修正しました #55276 (Azat Khuzhin)。
- S3 上で zero copy を使用しない場合に、ReplicatedMergeTree テーブルで切り離されたパーティションを DROP できない問題を修正しました #55309 (alesapin).
- MergeSortingPartialResultTransform において、
remerge後にチャンク数が 0 になる場合に発生するクラッシュを修正しました。#55335(Azat Khuzhin)。 - 共有例外をスローしていたことに起因する、エラー発生時の CreatingSetsTransform におけるデータ競合を修正しました #55338 (Azat Khuzhin)。
- trash の最適化を(一定の範囲まで)修正しました #55353 (Alexey Milovidov)。
- StorageHDFS のリークの問題を修正 #55370 (Azat Khuzhin)。
- cast 演算子での配列のパース処理を修正 #55417 (Anton Popov).
- クエリにおける仮想カラムに対する OR フィルターを含むフィルタリングを修正 #55418 (Azat Khuzhin)。
- MongoDB への接続に関する問題を修正 #55419 (Nikolay Degterinsky)。
- MySQL インターフェイスにおけるブール値の表現を修正 #55427 (Serge Klochkov)。
- MySQL テキストプロトコルにおける DateTime フォーマットと LowCardinality(Nullable(T)) 型の報告方法を修正 #55479 (Serge Klochkov)。
use_mysql_types_in_show_columnsがSHOW COLUMNSのみに影響するようにした #55481 (Robert Schulze)。- スタックシンボライザーが
DW_FORM_ref_addrを誤って解析し、場合によってはクラッシュする問題を修正 #55483 (Michael Kolupaev)。 - AsyncTaskExecutor の cancelBefore で例外が発生した場合に fiber を破棄する #55516 (Kruglov Pavel).
- カスタム HTTP ハンドラーでクエリパラメーターが動作しない問題を修正 #55521 (Konstantin Bogdanov).
- Values フォーマットにおける未処理データの検査処理を修正 #55527 (Azat Khuzhin)。
- MS SQL Server と連携する ODBC で発生する 'Invalid cursor state' エラーを修正 #55558 (vdimir)。
- 最大実行時間および 'break' オーバーフローモードの不具合を修正 #55577 (Alexander Gololobov).
- 循環参照する別名がある場合に QueryNormalizer がクラッシュする不具合を修正 #55602 (vdimir)。
- 誤った最適化を無効化し、テストを追加しました #55609 (Alexey Milovidov)。
- #52352 #55621 をマージしました(Alexey Milovidov)。
- 誤った Decimal 型のソートを防ぐためのテストを追加しました #55662 (Amos Bird)。
- glob パターンを含まない URL を使用する S3 および Azure の Cluster 関数向けのプログレスバーを修正 #55666 (Kruglov Pavel)。
- クエリで OR フィルタを用いた仮想カラムでのフィルタリングを修正(再提出) #55678 (Azat Khuzhin).
- Iceberg ストレージの修正と改善 #55695 (Kruglov Pavel)。
- CreatingSetsTransform (v2) のデータレースを修正 #55786 (Azat Khuzhin)。
- precise_float_parsing が true の場合に、不正な文字列を float としてパースしようとした際は例外をスローするように変更 #55861 (李扬)。
- CTE にステートフルな関数が含まれている場合は、predicate pushdown を無効にする #55871 (Raúl Marín)。
FORMAT句をクエリから削除してしまっていたnormalizeASTSelectWithUnionQueryの挙動を修正しました。 #55887 (flynn)。- Native ORC 入力フォーマットで発生する可能性のあるセグフォルトの修正を試みました #55891 (Kruglov Pavel)。
- スパースなカラムに対するウィンドウ関数の不具合を修正。 #55895 (János Benjamin Antal).
- バグ修正: StorageNull がサブカラムをサポートするようになりました #55912 (FFish).
- Replicated テーブルの mutate/merge 操作に対する再試行可能なエラーをエラーログに出力しないようにしました #55944 (Azat Khuzhin).
SHOW DATABASES LIMIT <N>を修正しました #55962 (Raúl Marín).- アンダースコアを含むフィールドを持つ Protobuf スキーマの自動生成を修正 #55974(Kruglov Pavel)。
- スケールがデフォルト以外の場合の dateTime64ToSnowflake64() の動作を修正 #55983 (Robert Schulze)。
- Arrow の Dictionary カラムの入出力を修正 #55989 (Kruglov Pavel).
- AvroConfluent におけるスキーマレジストリからのスキーマ取得処理を修正 #55991 (Kruglov Pavel)。
- Buffer テーブルで ALTER と INSERT を同時実行した際に発生する 'Block structure mismatch' を修正 #55995 (Michael Kolupaev).
- least_used JBOD ポリシーの空き容量計算の誤りを修正 #56030 (Azat Khuzhin).
- テーブル関数内でサブクエリを評価する際に発生していたスカラー値が欠落する問題を修正しました #56057 (Amos Bird).
- http_write_exception_in_output_format=1 の場合に誤ったクエリ結果が返される不具合を修正 #56135 (Kruglov Pavel)。
- 設定変更後のフォールバック JSON->JSONEachRow のスキーマキャッシュを修正しました #56172 (Kruglov Pavel)。
- odbc-bridge にエラーハンドラを追加 #56185 (Yakov Olkhovskiy).
ClickHouse リリース 23.9、2023-09-28
後方互換性のない変更
- デフォルトの Prometheus ハンドラーから、
status_info設定オプションおよび辞書ステータスを削除しました。 #54090 (Alexey Milovidov). - 実験的なパーツメタデータキャッシュをコードベースから削除しました。 #54215 (Alexey Milovidov).
- 設定
input_format_json_try_infer_numbers_from_stringsをデフォルトで無効にしました。これにより、サンプルデータに数値のように見える文字列が含まれている場合でも、JSON フォーマットで文字列から数値を推論しようとしないようにして、発生し得るパースエラーを回避します。 #55099 (Kruglov Pavel).
新機能
- JSON フォーマットからのスキーマ推論を改善しました。1) JSON フォーマットにおいて、実験的な JSON 型を有効にしなくても、SETTING
input_format_json_try_infer_named_tuples_from_objectsにより、JSON オブジェクトから名前付き Tuple を推論できるようになりました。以前は実験的な JSON 型なしでは、JSON オブジェクトは String または Map としてしか推論できませんでしたが、現在は名前付き Tuple を推論できます。生成される Tuple 型には、スキーマ推論時のデータサンプルで読み取られたオブジェクトのすべてのキーが含まれます。これは、スパースではない構造化された JSON データを読み取る際に有用です。この SETTING はデフォルトで有効になっています。2) SETTINGinput_format_json_read_arrays_as_stringsにより、JSON 配列を型 String のカラムとしてパースできるようになりました。これにより、異なる型の値を含む配列の読み取りに役立ちます。3) SETTINGinput_format_json_infer_incomplete_types_as_stringsにより、サンプルデータ内で型が不明な JSON キー(null/[]/{})に対して、型 String を使用できるようになりました。これにより、JSON フォーマットでは任意の値を String カラムとして読み取ることができ、未知の型に対して型 String を使用することで、スキーマ推論中のCannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Mapsというエラーの発生を回避し、データを正常に読み取れるようになります。#54427 (Kruglov Pavel). - リモートディスク向けの IO スケジューリングのサポートを追加しました。ディスクタイプ
s3、s3_plain、hdfsおよびazure_blob_storageのストレージ設定に、リソース名を保持するread_resourceとwrite_resource要素を含められるようになりました。これらのリソース向けのスケジューリングポリシーは、サーバー設定内の別セクションresourcesで設定できます。クエリは設定workloadを使ってマークし、サーバー設定セクションworkload_classifiersを使って分類することで、さまざまなリソーススケジューリング要件を満たすことができます。詳細はドキュメントを参照してください。 #47009(Sergei Trifonov)。「bandwidth_limit」IO スケジューリングノードタイプを追加しました。これにより、このノードを通過するトラフィックに対してmax_speedとmax_burstの制約を指定できます。 #54618(Sergei Trifonov)。 - SSH キーに基づく新しいタイプの認証方式を追加しました。これはネイティブ TCP プロトコルでのみ利用できます。 #41109 (George Gamezardashvili)。
- MergeTree テーブルに新しいカラム
_block_numberを追加しました。 #44532。 #47532 (SmitaRKulkarni)。 DROP TABLEクエリに対してIF EMPTY句を追加しました。#48915(Pavel Novitskiy)。- SQL 関数
toString(datetime, timezone)とformatDateTime(datetime, format, timezone)は、定数ではないタイムゾーン引数もサポートするようになりました。 #53680 (Yarik Briukhovetskyi)。 ALTER TABLE MODIFY COMMENTのサポートを追加しました。注意: これと似た機能がかなり前に外部コントリビューターによって追加されましたが、まったく動作せず、ユーザーを混乱させるだけでした。これにより #36377 がクローズされます。 #51304 (Alexey Milovidov)。注意: このコマンドはレプリカ間で伝播しないため、同じテーブルでもレプリカごとに異なるコメントを持つ可能性があります。- 新しいデータ圧縮コーデックとして
GCD、いわゆる「greatest common denominator(最大公約数)」を追加しました。このコーデックはすべてのカラム値の GCD を計算し、その後に各値を GCD で割ります。GCD コーデックは(Delta や DoubleDelta と同様の)データ前処理コーデックであり、単独では使用できません。整数型、Decimal 型、および日時型のデータ型で利用できます。GCD コーデックの有効な利用例としては、カラム値が GCD の倍数単位で増減するケースが挙げられます(例: 24 - 28 - 16 - 24 - 8 - 24、GCD = 4 と仮定)。 #53149 (Alexander Nam)。 - 新しく 2 つの型エイリアス
DECIMAL(P)(DECIMAL(P, 0)の省略形)とDECIMAL(DECIMAL(10, 0)の省略形)が追加されました。これにより、ClickHouse は MySQL の SQL 方言との互換性が向上しました。 #53328 (Val Doroshchuk)。 - すべての
BACKUPおよびRESTORE操作を追跡するための新しいシステムログテーブルbackup_logが追加されました。 #53638 (Victor Krasnov)。 - フォーマット設定
output_format_markdown_escape_special_characters(デフォルト: false)を追加しました。この設定は、Markdown出力フォーマットにおいて、!、#、$などの特殊文字をエスケープするかどうか(バックスラッシュを前置して出力するかどうか)を制御します。 #53860 (irenjj)。 - 関数
decodeHTMLComponentを追加しました。 #54097 (Bharat Nallan). query_logテーブルにpeak_threads_usage列を追加しました。 #54335 (Alexey Gerasimchuck).- clickhouse-client に
SHOW FUNCTIONSのサポートを追加しました。 #54337 (Julia Kartseva). 0001-01-01(先発グレゴリオ暦)から経過した日数を返す関数toDaysSinceYearZeroを、MySQL との互換性のためにエイリアスTO_DAYSとともに追加しました。 #54479 (Robert Schulze)。関数toDaysSinceYearZeroは、DateTime型およびDateTime64型の引数もサポートするようになりました。 #54856 (Serge Klochkov)。- 関数
YYYYMMDDtoDate、YYYYMMDDtoDate32、YYYYMMDDhhmmssToDateTime、YYYYMMDDhhmmssToDateTime64を追加しました。これらは整数としてエンコードされた日付または日時(例: 20230911)を、ネイティブな日付型または日時型に変換します。そのため、既存の関数YYYYMMDDToDate、YYYYMMDDToDateTime、YYYYMMDDhhmmddToDateTime、YYYYMMDDhhmmddToDateTime64の逆の機能を提供します。 #54509 (Quanfa Fu) (Robert Schulze). byteHammingDistance、editDistanceを含む複数の文字列距離関数を追加しました。 #54935 (flynn)。VALID UNTIL datetime句を使用して、ユーザー認証情報の有効期限の日付と、必要に応じて時刻を指定できるようにしました。 #51261 (Nikolay Degterinsky).- テーブル関数
s3、gcs、ossで S3 形式の URL を使用できるようになりました。URL は自動的に HTTP に変換されます。例:'s3://clickhouse-public-datasets/hits.csv'は'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'に変換されます。#54931(Yarik Briukhovetskyi)。 - 深くネストした Tuple/Map/Array などの型名を、読みやすい形式で出力するための新しい設定
print_pretty_type_namesを追加しました。 #55095 (Kruglov Pavel).
パフォーマンスの向上
- S3 からの読み取りを、デフォルトでプリフェッチを有効にすることで高速化します。 #53709 (Alexey Milovidov).
- FINAL を伴うクエリで不要な場合、単一のパーツでは PK とバージョンカラムを暗黙的に読み込まないようにしました。 #53919 (Duc Canh Le).
- 定数キーを持つ GROUP BY を最適化しました。https://github.com/ClickHouse/ClickHouse/pull/53529 の後、
_file/_pathで GROUP BY を行うクエリが最適化されます。 #53549 (Kruglov Pavel)。 Decimalカラムのソート性能を改善しました。ORDER BY にDecimalカラムが含まれている場合のMergeTreeへの挿入性能を改善しました。データがすでにソート済み、またはほぼソートされている場合のソート性能を改善しました。 #35961 (Maksim Kita).- 巨大なクエリの解析におけるパフォーマンスを改善しました。#51224 を修正しました。#51469(frinkr)。
GROUP BYを含むサブクエリから選択されている場合に、COUNT(DISTINCT …)および各種uniq系のバリアントをcountに書き換える最適化。#52082 #52645 (JackyWoo)。- 手動での
mmap/mremap/munmap呼び出しを廃止し、これらすべての処理をjemallocに任せるようにしました。これによりパフォーマンスがわずかに向上します。 #52792 (Nikita Taranov)。 - NATS を使用しているときに CPU 使用率が高くなる問題を修正しました。 #54399 (Vasilev Pyotr).
toStringを datetime 引数付きで実行するための専用の処理を使用しているため、datetime 以外の引数についてはパフォーマンスを少し向上させるとともに、コードの一部をよりクリーンにできます。#53680 のフォローアップです。#54443(Yarik Briukhovetskyi)。- JSON 要素を
std::stringstreamにシリアライズする代わりに、このPRではシリアライズ結果を直接ColumnStringに格納するようにしました。#54613 (lgbo)。 - テーブルが VIEW 経由で参照されている場合でも、MergeTree テーブルから ORDER BY に対応した順序でデータを読み取れるよう、最適化を有効化しました。 #54628 (Vitaly Baranov)。
GeneratorJSONPathを再利用し、複数の共有ポインタを削除することで JSON SQL 関数を改善しました。 #54735 (lgbo).- Keeper は、パフォーマンス向上のためにリクエストのフラッシュをバッチ化します。 #53049 (Antonio Andelic).
INFILE 'glob_expression'を使用する場合、clickhouse-clientがファイルを並列に処理するようになりました。#54218 をクローズしました。#54533(Max K.)。IN関数の右辺のカラム型とプライマリキーのカラム型が異なる場合でも、プライマリキーをIN関数に利用できるようにしました。例:SELECT id FROM test_table WHERE id IN (SELECT '5')。#48936 をクローズします。#54544(Maksim Kita)。- Hash JOIN は内部バッファを縮小して、
max_bytes_in_joinで設定された利用可能メモリ上限の半分までにメモリ消費を抑えるようになりました。 #54584 (vdimir)。 max_block_sizeに従って array join を行い、OOM 発生の可能性を回避します。#54290 をクローズ。#54664(李扬)。s3テーブル関数で HTTP 接続を再利用するようになりました。 #54812 (Michael Kolupaev).MergeTreeRangeReader::Stream::ceilRowsToCompleteGranulesにおける線形探索を二分探索に置き換え。 #54869 (usurai).
実験的機能
Annoy索引の作成を、max_threads_for_annoy_index_creationSETTING を使用して並列化できるようになりました。 #54047 (Robert Schulze).- 分散テーブルでの parallel replicas は、すべてのレプリカから読み取らなくなりました。 #54199 (Igor Nikonov).
改善
MergeTreeデータパーツ内のカラムのファイル名が長い場合に、それらを名前のハッシュ値に置き換えられるようにしました。これにより、一部のケースで発生するFile name too longエラーの回避に役立ちます。 #50612 (Anton Popov).- メタデータの解析に失敗した場合、
JSON形式のデータをJSONEachRowとして解析します。これにより、実際の形式がJSONEachRowであっても、拡張子が.jsonのファイルを読み取ることができます。#45740 をクローズ。#54405(Kruglov Pavel)。 - HTTP クエリ実行中に例外が発生した場合にも、有効な JSON/XML を出力するようになりました。この挙動は
http_write_exception_in_output_format設定で有効/無効を切り替えられます(デフォルトで有効)。#52853(Kruglov Pavel)。 information_schema.tablesの VIEW に、新しいフィールドdata_lengthが追加され、ディスク上のデータのおおよそのサイズを表示できるようになりました。Amazon QuickSight が生成するクエリを実行するために必須です。 #55037 (Robert Schulze).- MySQL インターフェイスに prepared statements の最小限の実装が追加され、MySQL connector を介して Tableau Online から ClickHouse へ接続できるようになりました。 #54115 (Serge Klochkov)。注意: prepared statements の実装はきわめてミニマルであり、この特定の Tableau Online のユースケースでは不要なため、まだ引数バインディングはサポートしていません。Tableau Online の大規模なテストを実施したうえで問題が見つかった場合には、必要に応じてフォローアップとして実装される予定です。
regexp_tree辞書で大文字小文字を区別しないモードおよび dot-all マッチングモードをサポートしました。 #50906 (Johann Gan).- Keeper の改善:
createIfNotExistsコマンドを追加。 #48855 (Konstantin Bogdanov)。 - 整数型に対する型推論の精度を向上し、#51236 を修正。 #53003 (Chen768959)。
- MaterializedMySQL において、文字列リテラル内の文字セットを解決する処理を導入しました。 #53220 (Val Doroshchuk).
- 利用頻度の低い
EmbeddedRocksDBテーブルエンジンで、極めてまれなシナリオにおいて発生する細かな問題を修正しました。DROP TABLE実行後に、EmbeddedRocksDBテーブルエンジンが NFS 上のファイルを正しくクローズしない場合がありました。 #53502 (Mingliang Pan)。 RESTORE TABLE ON CLUSTERは、ホスト上で UUID が一致するレプリケーテッドテーブルを作成しなければなりません。そうでない場合、ZooKeeper パスのマクロ{uuid}は RESTORE 実行後に正しく動作しません。この PR でそれを実装しました。 #53765 (Vitaly Baranov).restore_broken_parts_as_detachedというリストア用の設定を追加しました。この設定が true に設定されている場合、RESTORE プロセスはリストア中に壊れたパーツがあっても停止せず、壊れたパーツはすべてbroken-from-backupというプレフィックスを付けてdetachedフォルダにコピーされます。false に設定されている場合、RESTORE プロセスは最初に見つかった壊れたパーツ(存在する場合)で停止します。デフォルト値は false です。 #53877 (Vitaly Baranov).- HTTP ヘッダー
X-ClickHouse-ProgressおよびX-ClickHouse-Summaryにelapsed_nsフィールドを追加しました。 #54179 (joelynch)。 - keeper-client 向けに
reconfig(https://github.com/ClickHouse/ClickHouse/pull/49450)、sync、existsコマンドを実装。#54201(pufit)。 clickhouse-localとclickhouse-clientで、--queryパラメータを複数回指定できるようになりました。たとえば./clickhouse-client --query "SELECT 1" --query "SELECT 2"のように指定できます。この構文は、./clickhouse-client --multiquery "SELECT 1;S ELECT 2"よりもやや直感的であり、スクリプトからも扱いやすく(例:queries.push_back('--query "$q"'))、既存のパラメータ--queries-file(例:./clickhouse client --queries-file queries1.sql --queries-file queries2.sql)の動作とも一貫性があります。#54249(Robert Schulze)。formatReadableTimeDeltaにサブ秒精度のサポートを追加しました。 #54250 (Andrey Zvonov).allow_remove_stale_moving_partsをデフォルトで有効化しました。 #54260 (vdimir).- キャッシュから取得した count の利用方法を修正し、アーカイブ読み取り時のプログレスバーを改善。 #54271 (Kruglov Pavel).
- SSO を使用した S3 クレデンシャルのサポートを追加しました。SSO で使用するプロファイルを定義するには、
AWS_PROFILE環境変数を設定します。 #54347 (Antonio Andelic)。 - 入力フォーマットで、ネストした型 Array/Tuple/Map のデフォルト値として NULL をサポート。#51100 をクローズ。#54351(Kruglov Pavel)。
- Arrow/Parquet フォーマットから、通常とは異なる chunk 構成のデータも読み取れるようにしました。 #54370 (Arthur Passos).
- MySQL 互換性のために
stddevPop関数にSTDエイリアスを追加しました。#54274 をクローズ。 #54382(Nikolay Degterinsky)。 - MySQL との互換性のために
addDate関数を、一貫性のためにsubDate関数を追加しました。参照: #54275。 #54400 (Nikolay Degterinsky)。 system.detached_partsにmodification_time列を追加しました。 #54506 (Azat Khuzhin).splitby_max_substrings_includes_remaining_stringという設定を追加しました。これは、引数max_substring> 0 を取るsplitBy*()関数が、(残りが存在する場合に)残りの文字列を結果配列に含めるかどうか(Python/Spark と同様のセマンティクス)を制御します。デフォルトの動作は変更されません。#54518(Robert Schulze)。Int64/UInt64フィールドに対するより適切な整数型推論。#53003 の続きです。配列の配列などのネストされた型や、map/tupleのような関数にも対応するようになりました。Issue: #51236。#54553(Kruglov Pavel)。- スカラーと配列間の乗算、除算、剰余演算を追加しました。どちらの向きでも演算でき、例えば
5 * [5, 5]と[5, 5] * 5の両方のケースが可能です。 #54608 (Yarik Briukhovetskyi)。 keeper-clientのrmコマンドにオプションのversion引数を追加し、より安全に削除できるようにしました。 #54708 (János Benjamin Antal).- systemd によるサーバーの強制終了を無効化しました(Buffer テーブル使用時にデータ損失を引き起こす可能性があるため)。 #54744 (Azat Khuzhin).
- 関数の結果が 2 回の呼び出しの間で(まったく同じ入力が与えられた場合に)安定しているかどうかを示すフィールド
is_deterministicをシステムテーブルsystem.functionsに追加しました。 #54766 #55035 (Robert Schulze). - スキーマ
information_schema内のビューを、MySQL の同等のビューとの互換性がより高くなるように(すなわち、変更および拡張を行い)、Tableau Online から ClickHouse に接続できるレベルまで改善しました。具体的には: 1. フィールドinformation_schema.tables.table_typeの型を Enum8 から String に変更しました。2. ビューinformation_schema.tableにフィールドtable_commentおよびtable_collationを追加しました。3. ビューinformation_schema.key_column_usageとreferential_constraintsを追加しました。4.information_schemaのビュー内で使用されていた大文字エイリアスを、具体的な大文字のカラムに置き換えました。#54773 (Serge Klochkov)。 - クエリキャッシュは、
now、randomString、dictGetのような非決定的関数を含むクエリの結果をキャッシュしようとした場合に、エラーを返すようになりました。以前の動作(結果を暗黙的にキャッシュしない)と比べて、この変更により混乱や驚きが減ります。 #54801 (Robert Schulze). file/s3/url/... ストレージでは materialized/ephemeral/alias などの特殊カラムを使用できないようにし、ファイルからの ephemeral カラムへの INSERT を修正しました。#53477 をクローズしました。#54803(Kruglov Pavel)。- バックアップ用メタデータの収集をより柔軟に構成できるようにしました。 #54804 (Vitaly Baranov).
clickhouse-localのログファイル(--server_logs_fileフラグで有効化されている場合)は、clickhouse-serverと同様に、各行の先頭にタイムスタンプやスレッド ID などの情報を付加するようになりました。 #54807 (Michael Kolupaev)。system.merge_tree_settingsテーブルのフィールドis_obsolete— 廃止された MergeTree の設定では、このフィールドが 1 になるようになりました。以前は、その設定が廃止されていることは説明文にのみ記載されていました。 #54837 (Robert Schulze).- interval リテラルを使用する場合に複数形を使えるようにしました。
INTERVAL 2 HOURSはINTERVAL 2 HOURと同等になります。 #54860 (Jordi Villar). Nullableな PK を持つ PROJECTION の作成を常に許可するようにしました。これにより #54814 を修正しました。 #54895 (Amos Bird)。- 接続リセットによる失敗が発生した場合にバックアップの S3 操作を再試行するようにしました。 #54900 (Vitaly Baranov).
- 設定の最大値が最小値より小さい場合に出る例外メッセージを、より正確な内容になるように修正。 #54925 (János Benjamin Antal).
LIKE、matchおよびその他の正規表現マッチ関数で、非 UTF-8 の部分文字列を含むパターンについて、バイナリマッチにフォールバックすることでマッチできるようになりました。例:string LIKE '\xFE\xFF%'を使用して BOM を検出できます。これにより #54486 が解決されました。 #54942 (Alexey Milovidov)。- プロファイルイベント
ContextLockWaitMicrosecondsを追加しました。 #55029 (Maksim Kita). - Keeper がログレベルを動的に調整できるようになりました。 #50372 (helifu).
- MySQL との互換性確保のために
timestamp関数を追加しました。#54275 をクローズしました。#54639 (Nikolay Degterinsky)。
ビルド/テスト/パッケージングの改善
- ClickHouse の公式ビルドおよび継続的インテグレーションビルドで使用するコンパイラを Clang 16 から 17 に更新しました。 #53831 (Robert Schulze).
- ルックアップ用の tld データ(
tldLookup.generated.cpp)を再生成しました。 #54269 (Bharat Nallan). - 冗長な
clickhouse-keeper-clientシンボリックリンクを削除しました。 #54587 (Tomas Barton). - bash の解決に
/usr/bin/envを使用するようにし、NixOS をサポートしました。 #54603 (Fionera). - CMake に、DWARF コールグラフを使用せずに
perf recordを実行するために必要なPROFILE_CPUオプションを追加しました。 #54917 (Maksim Kita). - リンカが LLD と異なる場合は、致命的なエラーで停止するようにしました。 #55036 (Alexey Milovidov).
- base64 値の処理(エンコード/デコード)に使用するライブラリを Turbo-Base64 から aklomp-base64 に置き換えました。どちらも x86 と ARM で SIMD により高速化されていますが、理由は次のとおりです。1. 後者のライセンス(BSD-2)は ClickHouse にとってより好ましく、一方で Turbo64 はその間に GPL-3 に変更されたこと、2. GitHub のスター数が多く、aklomp-base64 の方が将来性が高いと考えられること、3. aklomp-base64 の方がやや洗練された API を持っていること(これは主観的ではあります)、4. aklomp-base64 では(スレッドセーフでない初期化のような)バグを回避するためのハックが不要であることです。注意: aklomp-base64 はパディングされていない base64 値を拒否しますが、Turbo-Base64 はベストエフォートでデコードします。RFC-4648 ではパディングを必須とするかどうかは明確にされていませんが、コンテキストによってはこの点が動作変更となる場合があるため注意が必要です。 #54119 (Mikhail Koviazin).
バグ修正(公式安定版リリースでユーザーに見える誤動作)
- zero-copy レプリケーションを使用する REPLACE/MOVE PARTITION の不具合を修正 (注: "zero-copy replication" は実験的機能です) #54193 (Alexander Tokmakov).
- ハードリンクを用いたゼロコピーロックを修正(注: 「zero-copy replication」は実験的な機能です)#54859(Alexander Tokmakov)。
- ゼロコピー処理で発生するガベージを修正(注: "zero-copy レプリケーション" は実験的機能です) #54550 (Alexander Tokmakov)。
- HTTP リトライのタイムアウト値をミリ秒単位で指定するように修正しました(以前は誤っていました)。 #54438 (Duc Canh Le).
- OUTFILE で
CapnProto/Protobufを使用する際に表示される誤解を招くエラーメッセージを修正 #52870 (Kruglov Pavel)。 - LIMIT 句を伴う parallel replicas 利用時のサマリーレポートを修正 #53050 (Raúl Marín)。
- S3 への/からの BACKUP(ネイティブコピーが使用されていない場合)およびその他のいくつかの箇所におけるスロットル制御を修正しました #53336 (Azat Khuzhin)。
- ディレクトリ全体をコピーする際の I/O 制限の問題を修正 #53338 (Azat Khuzhin)。
- 修正:
PREWHERE句の条件へアクションを移動した際にカラムが失われることがある問題を修正 #53492 (Yakov Olkhovskiy)。 - バイトレベルで等しいパーツを置き換える際に発生していた内部エラーを修正しました #53735 (Pedro Riera)。
- 修正: interpolate 式に含まれるカラムを必須にする #53754(Yakov Olkhovskiy)。
- クラスタディスカバリの初期化と、設定ファイルでのフェイルポイントの設定処理を修正しました #54113 (vdimir)。
accurateCastOrNullの不具合を修正 #54136 (Salvatore Mesoraca).- FINAL 修飾子付きの Nullable 主キーを修正 #54164 (Amos Bird)。
- 重複したデータが存在する場合に、新しいデータをレプリケートされた materialized view へ挿入できなくなっていた問題を修正しました。 #54184 (Pedro Riera).
- Fix: ブルームフィルターで
IPv6を許可 #54200 (Yakov Olkhovskiy). IPv4で発生し得る型不一致を修正 #54212 (Bharat Nallan)。- 再作成されたインデックスに対応する
system.data_skipping_indicesを修正しました #54225 (Artur Malchanau)。 - multiple join rewriter v2 における名前衝突を修正 #54240 (Tao Wang)。
- JOIN の実行後に
system.errorsに予期しないエラーが記録される問題を修正 #54306 (vdimir)。 isZeroOrNull(NULL)の不具合を修正 #54316 (flynn)。- 修正:
prefer_localhost_replica= 1 の場合に Distributed テーブルで parallel replicas を使用する際の問題を修正 #54334 (Igor Nikonov)。 - vertical merge と
ReplacingMergeTreeおよびクリーンアップの最適化における論理エラーを修正 #54368 (alesapin)。 s3テーブル関数で発生する可能性があったURI contains invalid charactersエラーを修正 #54373(Kruglov Pavel)。arrayExists関数の AST 最適化中に発生するセグメンテーションフォルトを修正 #54379 (Nikolay Degterinsky)。analysisOfVariance関数での加算前にオーバーフローをチェックするようにしました #54385 (Antonio Andelic)。- removeSharedRecursive 関数のバグを再現して修正しました #54430 (Sema Checherinda)。
- PREWHERE および FINAL における SimpleAggregateFunction の結果が誤ったものになる可能性がある問題を修正 #54436 (Azat Khuzhin).
- アナライザーを使用しない場合の indexHint によるパーツのフィルタリングを修正 #54449 (Azat Khuzhin)。
- 正規化された状態を使用する集約 PROJECTION を修正 #54480 (Amos Bird)。
clickhouse-local: multiquery パラメータに関する修正 #54498 (CuiShuoGuo).clickhouse-localがコマンドライン引数--databaseをサポートするようになりました #54503 (vdimir)。input_format_with_names_use_headerが無効になっている状態での-WithNamesフォーマットで発生しうるパースエラーを修正 #54513 (Kruglov Pavel)。- まれに発生する CHECKSUM_DOESNT_MATCH エラーを修正しました #54549 (alesapin)。
- 既にソート済みの結果に対する UNION ALL のソートを修正 #54564 (Vitaly Baranov)。
- Keeper におけるスナップショットのインストール処理を修正 #54572 (Antonio Andelic).
ColumnUniqueのレースコンディションを修正 #54575 (Nikita Taranov)。- Annoy/Usearch インデックス: デフォルト値での構築時に発生する LOGICAL_ERROR を修正 #54600 (Robert Schulze).
ColumnDecimalのシリアライズを修正 #54601 (Nikita Taranov)。- 空白を含むカラム名に対する *Cluster 関数のスキーマ推論を修正 #54635 (Kruglov Pavel)。
- デフォルト値や INSERT で明示的に指定されたカラムがある場合に、挿入先テーブルの構造を使用する処理を修正 #54655 (Kruglov Pavel)。
- 修正: 代替(オルタネーション)を含む可能性がある正規表現によるマッチをキー条件として使用しないようにしました。 #54696 (Yakov Olkhovskiy).
- 垂直マージとクリーンアップに関する ReplacingMergeTree の問題を修正 #54706 (SmitaRKulkarni)。
- ORDER BY 時に仮想カラムが誤った値を持つ問題を修正 #54811 (Michael Kolupaev)。
- analyzer を使用しない場合における indexHint によるパーツのフィルタリングを修正。 #54825 #54449 (Azat Khuzhin)。
- シャットダウン時に発生する Keeper のセグメンテーションフォールトを修正 #54841 (Antonio Andelic)。
- MaterializedPostgreSQL で発生する
Invalid number of rows in Chunkエラーを修正しました #54844 (Kseniia Sumarokova)。 - 旧式のフォーマット設定を別セクションへ移動 #54855 (Kruglov Pavel)。
- パーティションキーが変更された場合に
minmax_count_projectionを再構築する #54943 (Amos Bird)。 - 関数
ifにおけるColumnVector<Int128>への誤ったキャストを修正 #55019 (Kruglov Pavel)。 - 異なる PROJECTION またはインデックスを持つテーブルからのパーツを ATTACH できないようにしました #55062 (János Benjamin Antal)。
- 空のサブクエリ結果に対して、スカラー結果マップに NULL を格納するように修正 #52240 (vdimir)。
- まれなケースにおいて
FINALが不正な読み取り範囲を生成してしまう問題を修正 #54934(Nikita Taranov)。 - Fix: Keeper によるリトライなしで insert quorum が動作するよう修正 #55026 (Igor Nikonov).
- Nullable を使用する simple state の不具合を修正 #55030 (Pedro Riera)。
ClickHouse 23.8 LTS リリース, 2023-08-31
後方互換性のない変更
- 動的ディスクに名前が付けられている場合は、ディスク関数の引数で
disk = disk(name = 'disk_name', ...) のように指定する必要があります。以前のバージョンではdisk = disk_<disk_name>(...)のように指定できましたが、これはサポートされなくなりました。#52820(Kseniia Sumarokova)。 clickhouse-benchmarkは、--concurrencyを 1 より大きい値で指定して実行した場合、接続を並列に確立します。以前は、ヨーロッパから米国への 1000 個の同時接続で実行すると実用的ではありませんでした。レイテンシが高い接続に対しても QPS を正しく計算するようになりました。後方互換性のない変更として、clickhouse-benchmarkの JSON 出力用オプションは削除されました。このオプションを使用していた場合は、代替手段としてsystem.query_logから JSON 形式でデータを抽出できます。#53293(Alexey Milovidov)。system.text_logからmicrosecondsカラムを、system.metric_logからmillisecondsカラムを削除しました。これらはevent_time_microsecondsカラムが存在するため冗長であるためです。#53601(Alexey Milovidov)。- メタデータキャッシュ機能を非推奨としました。これは実験的機能であり、これまで使用したことはありません。この機能は危険です: #51182。
system.merge_tree_metadata_cacheシステムテーブルを削除しました。メタデータキャッシュはこのバージョンではまだ利用可能ですが、近いうちに削除されます。これにより #39197 がクローズされます。#51303(Alexey Milovidov)。 - TLS 接続での 3DES サポートを無効化しました。#52893(Kenji Noguchi)。
新機能
- zip/7z/tar アーカイブからの直接インポートに対応。例:
file('*.zip :: *.csv')。 #50321 (nikitakeba)。 trace_type = 'MemorySample'の場合のsystem.trace_logにカラムptrを追加しました。このカラムにはメモリアロケーションのアドレスが格納されます。割り当て済みだが解放されていないメモリを含むフレームグラフを構築できる関数flameGraphを追加しました。 #38391 の改良版です。 #45322 (Nikolai Kochetov)。- テーブル関数
azureBlobStorageClusterを追加しました。サポートされている機能は、テーブル関数s3Clusterと非常によく似ています。 #50795 (SmitaRKulkarni)。 cluster、clusterAllReplicas、remote、remoteSecure関数をテーブル名なしで使用できるようにしました。#50808、#50848(Yangkuan Liu)。- Kafka コンシューマを監視するためのシステムテーブル。 #50999 (Ilya Golshtein)。
max_sessions_for_userSETTING を追加しました。 #51724 (Alexey Gerasimchuck).- Spark の
to_utc_timestamp/from_utc_timestampと同様に動作する新しい関数toUTCTimestamp/fromUTCTimestampを追加しました。 #52117 (KevinyhZou)。 - ClickHouse テーブルの構造を CapnProto/Protobuf フォーマットのスキーマに変換する新しい関数
structureToCapnProtoSchema/structureToProtobufSchemaを追加しました。テーブル構造から自動生成されたスキーマ(format_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schemaの設定で制御)を利用することで、外部のフォーマット用スキーマなしに CapnProto/Protobuf フォーマットでデータを入出力できるようにしました。入出力時に、設定output_format_schemaを使用して自動生成されたスキーマをエクスポートできるようにしました。 #52278 (Kruglov Pavel). system.query_logに新しいフィールドquery_cache_usageが追加され、クエリキャッシュが利用されたかどうか、またどのように利用されたかを示します。 #52384 (Robert Schulze).- 新しい関数
startsWithUTF8とendsWithUTF8を追加しました。 #52555 (李扬). - TSV/CustomSeparated/JSONCompactEachRow 形式で可変個数のカラムを許可し、可変個数のカラムでもスキーマ推論が機能するようにしました。
input_format_tsv_allow_variable_number_of_columns、input_format_custom_allow_variable_number_of_columns、input_format_json_compact_allow_variable_number_of_columnsの各設定を追加しました。 #52692 (Kruglov Pavel)。 ReplicatedMergeTreeのテスト用に、SYSTEM STOP/START PULLING REPLICATION LOGクエリを追加しました。 #52881 (Alexander Tokmakov)。- ミューテーション内で、定数だが非決定的な関数をイニシエーター側で実行できるようにしました。 #53129 (Anton Popov).
Oneという入力フォーマットを追加しました。このフォーマットはデータを一切読み出さず、UInt8型で値が0のdummyというカラムを持つ単一行のみを常に返し、system.oneと同様に動作します。これにより、データを読み込むことなく、_file/_path仮想カラムと組み合わせて、file/s3/url/hdfs などのテーブル関数でファイル一覧を取得できます。 #53209 (Kruglov Pavel)。tupleConcat関数を追加しました。 #52759 をクローズしました。 #53239(Nikolay Degterinsky)。TRUNCATE DATABASE操作をサポート。#53261(Bharat Nallan)。- 主キーの処理に使用されるスレッド数を制限するための
max_threads_for_indexes設定を追加しました。 #53313 (jorisgio)。 - SipHash の鍵付き関数を再度追加しました。 #53525 (Salvatore Mesoraca).
- (#52755 , #52895) 関数
arrayRotateLeft、arrayRotateRight、arrayShiftLeft、arrayShiftRightを追加しました。 #53557 (Mikhail Koviazin). system.clustersテーブルに、clusterカラムのエイリアスとしてnameカラムを追加しました。 #53605 (irenjj).- 高度なダッシュボードで一括編集(保存/読み込み)が行えるようになりました。 #53608 (Alexey Milovidov).
- 高度なダッシュボードで、チャートを最大化したり移動したりできるようになりました。 #53622 (Alexey Milovidov)。
- 配列同士の加算および減算に対応しました:
[5,2] + [1,7]。除算および乗算については、要素ごとの乗算と引数のスカラー積のどちらを意味するのかが曖昧なため、実装されていません。 #49939 をクローズ。 #52625(Yarik Briukhovetskyi)。 - テーブル名として文字列リテラルを使用できるようにしました。#52178 をクローズ。#52635(hendrik-m)。
実験的機能
- S3 からのストリーミングデータインポートのために、新しいテーブルエンジン
S3Queueを追加しました。 #37012 をクローズ。 #49086 (s-kat)。まだ使用可能な状態ではありません。使用しないでください。 - 分散テーブル経由でのレプリカからの並列読み取りを有効にしました。 #49708 に関連。 #53005 (Igor Nikonov)。
- 近似近傍探索手法として HNSW の実験的サポートを追加しました。 #53447 (Davit Vardanyan)。現在は、この実装の開発を継続している人向けのものです。使用しないでください。
パフォーマンスの向上
- Parquet フィルタプッシュダウン。つまり、Parquet ファイルを読み込む際に、WHERE 句および各カラムの最小/最大値に基づいて row groups(ファイルの chunk)がスキップされます。特に、ファイルがおおよそあるカラムでソートされている場合、そのカラムの狭い範囲でフィルタするクエリは大幅に高速になります。 #52951 (Michael Kolupaev)。
- Parquet で小さな行グループをまとめてバッチ読み込みすることで、読み取りを最適化しました。#53069 をクローズしました。 #53281 (Kruglov Pavel)。
- ほとんどの入力フォーマットにおいて、ファイルに対する
countを最適化しました。#44334 をクローズ。#53637(Kruglov Pavel)。 url/file/hdfsテーブル関数で読み込む前に、ファイルやパスでフィルタリングを行うようにしました。 #53529 (Kruglov Pavel).- AArch64、PowerPC、SystemZ、RISC-V 向けの JIT コンパイルを有効にしました。 #38217 (Maksim Kita).
countDistinctIfをcount_distinct_implementationを用いるよう書き換えるための設定rewrite_count_distinct_if_with_count_distinct_implementationを追加しました。#30642 をクローズしました。 #46051(flynn)。- マージ前の変換処理を並列化することで、
uniqおよびuniqExact集約関数の状態マージを高速化しました。 #50748 (Jiebin Sun). - 可変長キーが多数ある場合の Nullable な文字列キーを用いた集約処理のパフォーマンスを最適化しました。 #51399 (LiuNeng).
- preimage を用いた time フィルタ最適化のためのパスを Analyzer に追加しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上での SSB のパフォーマンス実験では、experimental analyzer を有効にした場合、この変更により QPS の幾何平均値が 8.5% 向上することが示されています。 #52091 (Zhiguo Zhou)。
uniqExact(COUNT DISTINCT) 関数において、すべてのハッシュセットが単一レベルの場合にマージ処理を最適化しました。 #52973 (Jiebin Sun).Joinテーブルエンジン: すべてのカラムを含むハッシュ結合用データ構造をクローンしないようにしました。 #53046 (Duc Canh Le).- パフォーマンスを向上させるため、Apache Arrow ライブラリを使用しないネイティブな
ORC入力フォーマットを実装しました。 #53324 (李扬)。 - ダッシュボードがサーバーにデータの圧縮を指示します。これは、低速なインターネット接続で長期間のデータを扱う場合に有用です。例えば、86400 個のデータポイントを持つ 1 つのチャートは、圧縮しない場合 1.5 MB ですが、
brで圧縮すると 60 KB になります。 #53569 (Alexey Milovidov)。 - BACKUP および RESTORE でのスレッドプールの利用効率を改善。 #53649 (Nikita Mikhaylov).
- 起動時にファイルシステムキャッシュのメタデータを並列で読み込むようになりました。
load_metadata_threads(デフォルト: 1)キャッシュ設定で構成できます。#52037 に関連。#52943(Kseniia Sumarokova)。 move_primary_key_columns_to_end_of_prewhereを改善しました。 #53337 (Han Fei)。- これは ClickHouse Keeper とのインタラクションを最適化します。以前は、呼び出し元が同じ watch コールバックを複数回登録できていました。その場合、それぞれのエントリがメモリを消費し、同じコールバックが何度も呼び出されてしまい、あまり意味がありませんでした。これを避けるために、呼び出し元側で同じ watch を複数回追加しないようにするロジックを実装することもできましたが、この変更により、watch コールバックが
shared_ptr経由で渡された場合には、この重複排除が内部で行われるようになりました。 #53452 (Alexander Gololobov). - file/s3/url/hdfs/azure 関数における
countのために、ファイル内の行数をキャッシュできるようにしました。キャッシュはuse_cache_for_count_from_filesを設定することで有効/無効を切り替えられます(デフォルトで有効)。https://github.com/ClickHouse/ClickHouse/pull/53637 の続きです。 #53692 (Kruglov Pavel). - より慎重なスレッド管理により、大量のファイルを扱う S3 テーブル関数の処理速度が 25%以上向上しました。 #53668 (pufit).
改善点
- 外部コマンドの標準エラー出力にデータが出力された場合の挙動(none、log、throw)を制御するための
stderr_reaction設定項目を追加しました。これにより、外部コマンドのデバッグが容易になります。 #43210 (Amos Bird)。 system part_logおよび Merge テーブルにpartitionカラムを追加しました。 #48990 (Jianfei Hu).- (index) uncompressed/mark、mmap およびクエリキャッシュのサイズを、サーバーの再起動なしに実行時に動的に構成できるようになりました。 #51446 (Robert Schulze).
- 複合キーで Dictionary が作成された場合、自動的に「complex key」レイアウトバリアントを選択するようにしました。 #49587 (xiebin).
- 新しい同時実行制御機能をより良くテストできるように、
use_concurrency_controlSETTING を追加しました。 #49618 (Alexey Milovidov)。 - 誤入力されたデータベース名およびテーブル名に対する候補を追加しました。 #49801 (Yarik Briukhovetskyi).
- Gluten によって HDFS から小さなファイルを読み込む際、Spark で直接クエリを実行する場合と比べて、より多くの時間がかかることが分かりました。この問題を改善しました。 #50063 (KevinyhZou)。
- セッションの有効期限切れ後に無意味なエラーログが大量に出力されており、好ましくありませんでした。 #50171 (helifu).
- 有効期限付きのフォールバック ZooKeeper セッションを導入しました。DNS アドレス向けの system.zookeeper_connection の
indexカラムを修正しました。 #50424 (Anton Kozlov). - max_partitions_per_insert_block に到達したときにログを記録できるようにしました。 #50948 (Sean Haynes)。
- clickhouse-keeper-client に多数のカスタムコマンドを追加しました(主に ClickHouse のデバッグを容易にするため)。 #51117 (pufit)
- 接続文字列に "sas" が含まれる場合に、その接続文字列が常にデフォルトエンドポイントで始まるとは限らないことを考慮して、
azureBlobStorageテーブル関数での接続文字列チェックを更新しました。また、URL に Azure のコンテナーを追加した後も "sas" トークンが含まれるように、接続 URL を更新しました。 #51141 (SmitaRKulkarni). full_sorting_mergeJOIN アルゴリズムにおける Set フィルタリングの説明を修正。 #51329 (Tanay Tummalapalli)。max_block_sizeが非常に大きい場合にAggregatorのメモリ消費量が増大する問題を修正しました。 #51566 (Nikita Taranov).SYSTEM SYNC FILESYSTEM CACHEコマンドを追加しました。これはファイルシステムキャッシュのメモリ上の状態をディスク上の状態と比較し、必要に応じてメモリ上の状態を修正します。ディスク上のデータに対して手動で変更や操作を行う場合にのみ必要ですが、そのような操作は強く非推奨です。 #51622 (Kseniia Sumarokova)。- 既存の S3 storage 設定用プロキシリゾルバとの後方互換性を維持しつつ、ClickHouse 向けの汎用プロキシリゾルバの作成を試みました。 #51749 (Arthur Passos).
- file/s3/hdfs/url/azureBlobStorage テーブル関数でタプルのサブカラムの読み取りをサポート。 #51806 (Kruglov Pavel).
- 関数
arrayIntersectは、最初の引数の順序に対応する形で値を返すようになりました。 #27622 をクローズ。 #51850(Yarik Briukhovetskyi)。 - 指定したアクセスストレージ内でアクセスエンティティを作成・削除したり、あるアクセスストレージから別のアクセスストレージへ移動したりできる新しいクエリを追加しました。 #51912 (pufit).
- Replicated データベースエンジンでの
ALTER TABLE FREEZEクエリをレプリケートしないようにしました。 #52064 (Mike Kot). - 予期しないシャットダウンが発生した際にシステムテーブルをフラッシュできる機能を追加しました。 #52174 (Alexey Gerasimchuck).
- 事前署名付きURL使用時に
s3テーブル関数が動作しない不具合を修正。#50846 をクローズ。#52310(chen)。 system.eventsおよびsystem.metricsテーブルにおいて、eventとmetricのエイリアスとしてカラムnameを追加しました。 #51257 をクローズしました。 #52315(chen)。- SQL との互換性を高めるため、パーサーで
CREATE UNIQUE INDEX構文を no-op(何もしない処理)としてサポートしました。UNIQUEインデックスはサポートされていません。クエリ内のUNIQUEキーワードを無視するには、create_index_ignore_unique = 1を設定してください。#52320 (Ilya Yatsishin)。 - 一部の Kafka エンジン設定(topic、consumer、client_id など)で、あらかじめ定義されたマクロ(
{database}および{table})を利用できるようにしました。#52386(Yury Bogomolov)。 - バックアップ/リストア中のファイルシステムキャッシュの更新を無効化しました。バックアップ/リストア中はファイルシステムキャッシュを更新すべきではなく、プロセスを遅くするだけでメリットがないと考えられます(
BACKUPコマンドは大量のデータを読み取る可能性があり、そのすべてのデータをファイルシステムキャッシュに投入してすぐに追い出すことには意味がないため)。#52402(Vitaly Baranov)。 - S3 エンドポイントの設定により、ルートパスから利用できるようになり、必要に応じて末尾に自動的に「/」が追加されるようになりました。 #47809。 #52600(xiaolei565)。
- clickhouse-local で位置指定オプションを許可し、グローバルな UDF 設定(user_scripts_path と user_defined_executable_functions_config)を自動的に設定するようにしました。 #52643 (Yakov Olkhovskiy).
system.asynchronous_metricsに、クエリキャッシュを確認するためのメトリクス "QueryCacheEntries" および "QueryCacheBytes" が追加されました。 #52650 (Robert Schulze).- S3 へバックアップする際に、
BACKUPステートメントのSETTINGS句でs3_storage_classパラメータを指定できるようになりました。 #52658 (Roman Vasin). - バックアップのメタデータファイルを解析し、バックアップに関する情報を出力するユーティリティ
print-backup-info.pyを追加しました。 #52690 (Vitaly Baranov)。 - #49510 をクローズ。現在、データベース名およびテーブル名は大文字・小文字を区別していますが、BI ツールは
information_schemaに対して、あるときは小文字、あるときは大文字でクエリを送信します。このため、小文字のテーブル(information_schema.tablesなど)を含むinformation_schemaデータベースと、大文字のテーブル(INFORMATION_SCHEMA.TABLESなど)を含むINFORMATION_SCHEMAデータベースが存在します。しかし、一部のツールはINFORMATION_SCHEMA.tablesやinformation_schema.TABLESに対してクエリを送信します。提案された解決策は、小文字および大文字のテーブルを、それぞれ小文字・大文字のinformation_schemaデータベース内に重複して用意することです。 #52695 (Yarik Briukhovetskyi)。 - クエリ
CHECK TABLEのパフォーマンスと使い勝手が改善されました(進行状況の更新を通知し、キャンセル可能になりました)。 #52745 (vdimir). - タプルに対して
modulo、intDiv、intDivOrZeroをサポートし、タプルの各要素に演算を適用するようにしました。 #52758 (Yakov Olkhovskiy). xmlの後に、clickhouse-client でデフォルトのyamlおよびyml設定ファイルを検索するようになりました。 #52767 (Alexey Milovidov).- 'clickhouse' 以外をルートとする設定にマージする際、ルートノード名が異なる設定は、例外を送出することなく単にスキップされていました。 #52770 (Yakov Olkhovskiy).
- サンプリングメモリプロファイラで追跡する割り当てについて、最小サイズ(
memory_profiler_sample_min_allocation_size)と最大サイズ(memory_profiler_sample_max_allocation_size)を指定できるようになりました。 #52779 (alesapin)。 precise_float_parsing設定を追加し、浮動小数点数の解析方式(高速/高精度)を切り替え可能にしました。 #52791 (Andrey Zvonov).clickhouse-keeper(シンボリックリンク)にも、clickhouse-keeper(実行ファイル)と同じデフォルトパスを使用するようにしました。 #52861 (Vitaly Baranov).- テーブル関数
remoteのエラーメッセージを改善しました。 #40220 をクローズしました。 #52959(jiyoungyoooo)。 RESTOREクエリのSETTINGS句で独自のストレージポリシーを指定できるようになりました。 #52970 (Victor Krasnov).- バックアップ処理における S3 リクエストをスロットリング(レート制限)できる機能を追加しました(
BACKUPおよびRESTOREコマンドがs3_max_[get/put]_[rps/burst]の設定を反映するようになりました)。#52974(Daniel Pozo Escalona)。 - レプリケートされたユーザー定義関数やレプリケートストレージを使用するアクセス制御エンティティを管理する際に、クエリ内の
ON CLUSTER句を無視できるようにする設定を追加しました。 #52975 (Aleksei Filatov)。 - JOIN ステップのアクションを EXPLAIN で表示できるようにしました。 #53006 (Maksim Kita).
hasTokenOrNullとhasTokenCaseInsensitiveOrNullが、空の needle 引数に対して null を返すようになりました。 #53059 (ltrk2).- ファイルシステムキャッシュに許可されるパスを制限できるようにしました。主にダイナミックディスクで有用です。サーバー設定で
filesystem_caches_pathが指定されている場合、すべてのファイルシステムキャッシュのパスはこのディレクトリに制限されます。例えば、キャッシュ設定内のpathが相対パスの場合はfilesystem_caches_path内に配置されます。キャッシュ設定内のpathが絶対パスの場合は、filesystem_caches_pathの内部に存在している必要があります。設定でfilesystem_caches_pathが指定されていない場合、挙動は以前のバージョンと同じになります。 #53124 (Kseniia Sumarokova)。 - 多くのカスタムコマンドを追加しました(主に ClickHouse のデバッグを容易にするため)。 #53127 (pufit)。
- スキーマ推論時にファイル名に関する診断情報を追加しました。これは、グロブで複数のファイルを処理する際に役立ちます。 #53135 (Alexey Milovidov)。
- 2 つ目の接続でセッションの作成が許可されていない場合、クライアントはメイン接続を使用してサジェスト候補を読み込みます。 #53177 (Alexey Gerasimchuck).
SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM]クエリで EXCEPT 句を指定できるようになりました。例:SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP。 #53280 (Nikolay Degterinsky)。max_concurrent_queriesのデフォルト値を 100 から 1000 に変更しました。クエリが重くなく、主にネットワーク待ちであれば、多数のクエリを同時に実行していても問題ありません。注意: 同時実行クエリ数と QPS を混同しないでください。たとえば、ClickHouse サーバーは 100 未満の同時実行クエリ数でも、数万 QPS を処理できます。 #53285 (Alexey Milovidov)。- バックグラウンドで実行されるパーティションの最適化マージの同時実行数を制限します。 #53405 (Duc Canh Le).
Replicatedデータベースのレプリケーション/リカバリ時にDirectory for table data already existsエラーを無視できるようにするための設定allow_moving_table_directory_to_trashを追加しました。 #53425 (Alexander Tokmakov)。- サーバー設定
asynchronous_metrics_update_period_sおよびasynchronous_heavy_metrics_update_period_sが 0 に誤設定されている場合、アプリケーションを終了させるのではなく、安全にフェイルするようになりました。 #53428 (Robert Schulze). - ClickHouse サーバーは、設定を再読み込みする際に、cgroups を介して変更されたメモリ制限を認識するようになりました。 #53455 (Robert Schulze)。
DETACH、DROP、またはサーバーのシャットダウン時に分散テーブルのフラッシュ処理を無効化できる機能を追加しました。 #53501 (Azat Khuzhin).domainRFC関数が、角かっこで囲まれた IPv6 アドレスをサポートするようになりました。 #53506 (Chen768959)。- バックアップで使用される S3 CopyObject リクエストのタイムアウトを長くしました。 #53533 (Michael Kolupaev).
- サーバー設定
aggregate_function_group_array_max_element_sizeを追加しました。この設定は、groupArray関数のシリアライズ時に配列サイズを制限するために使用されます。デフォルト値は16777215です。 #53550 (Nikolai Kochetov)。 - MySQL との互換性を向上させるため、
DATABASEのエイリアスとしてSCHEMAが追加されました。 #53587 (Daniël van Eeden). systemデータベース内のテーブルに関する非同期メトリクスを追加しました。たとえばTotalBytesOfMergeTreeTablesSystemなどです。これにより #53603 がクローズされました。 #53604 (Alexey Milovidov)。- Play UI および Dashboard の SQL エディタでは Grammarly が使用されなくなりました。 #53614 (Alexey Milovidov).
- エキスパートレベルの設定として、(1) [index] マーク/非圧縮キャッシュの size_ratio(保護キューの相対サイズ)を設定し、(2) index マークおよび index 非圧縮キャッシュのキャッシュポリシーを設定できるようになりました。 #53657 (Robert Schulze)。
- TCPHandler のクエリパケットにクライアント情報検証を追加しました。 #53673 (Alexey Gerasimchuck).
- Microsoft Azure との通信中にネットワークエラーが発生した場合に、パーツの読み込みを再試行するようにしました。 #53750 (SmitaRKulkarni).
- 例外にスタックトレースが含まれ、Materialized View の例外が伝播されるようになりました。 #53766 (Ilya Golshtein).
- ホスト名またはポートが指定されていない場合、keeper クライアントは ClickHouse の config.xml から接続文字列を検索しようとします。 #53769 (pufit).
- MergeTree テーブルエンジンファミリーでデータパーツのロックを保持している時間(マイクロ秒単位)を示すプロファイルイベント
PartsLockMicrosecondsを追加しました。 #53797 (alesapin). - keeper 向けに RAFT の再接続回数上限を設定可能にしました。この設定により、現在の接続が切断された場合に、keeper がピアとの接続をより迅速に再確立できるようになります。#53817 (Pengyuan Bian)。
- MySQL との互換性を向上させるため、テーブル定義内の外部キーを無視するようにし、ユーザーが外部キー部分の SQL を書き換える必要がないようにしました。参照 #53380。#53864(jsc0218)。
ビルド/テスト/パッケージングの改善
- ClickHouse バイナリからダイナミックリンカーへのシンボルのエクスポートを行わないようにしました。これにより #43933 が修正される可能性があります。 #47475 (Alexey Milovidov)。
clickhouse-keeper-clientへのシンボリックリンクをclickhouse-serverパッケージに追加。 #51882 (Mikhail f. Shiryaev)。- SQL 2016 準拠状況をレポートするために、https://github.com/elliotchance/sqltest を CI に追加しました。 #52293 (Alexey Milovidov)。
- PRQL を 0.9.3 にアップグレードしました。 #53060 (Maximilian Roos).
- CI チェックで使用されるシステムテーブルが ClickHouse Cloud にエクスポートされるようになりました。 #53086 (Alexey Milovidov).
- コンパイラのプロファイルデータ(
-ftime-trace)が ClickHouse Cloud にアップロードされるようになりました。 #53100 (Alexey Milovidov). - Debug ビルドと Tidy ビルドを高速化しました。 #53178 (Alexey Milovidov).
- 大量の不要なものを取り除くことでビルドを高速化しました。頻繁にインクルードされるヘッダーの 1 つが Boost によって「汚染」されていました。#53180 (Alexey Milovidov)。
- さらに不要なものを削除しました。 #53182 (Alexey Milovidov).
- 関数
arrayAUCは重い C++ テンプレートを使用していましたが、その使用をやめました。 #53183 (Alexey Milovidov). - いくつかのトランスレーションユニットが、
ccacheの有無にかかわらず常に再ビルドされていました。原因が特定され、修正されました。 #53184 (Alexey Milovidov). - コンパイラのプロファイルデータ (
-ftime-trace) が ClickHouse Cloud にアップロードされるようになりました。#53100 に続く 2 回目の試みです。#53213(Alexey Milovidov)。 - ステートフルテストにおいて CI からのログを ClickHouse Cloud にエクスポート。 #53351 (Alexey Milovidov).
- ストレステスト時にCIからログをエクスポートするようにしました。 #53353 (Alexey Milovidov).
- fuzzer の CI でログをエクスポートする。 #53354 (Alexey Milovidov).
clickhouse startコマンドで環境変数を保持するようにしました。 #51962 を修正。 #53418(Mikhail f. Shiryaev)。- #53418 のフォローアップ。install_check.py の小さな改善として、
init.d start実行時にメインプロセスへ適切な環境変数が渡されることを確認するテストを追加しました。#53457(Mikhail f. Shiryaev)。 - CMake におけるファイル管理を再編成し、重複が発生しないようにしました。たとえば、
indexHint.cppはdbms_sourcesとclickhouse_functions_sourcesの両方で重複していました。 #53621 (Amos Bird)。 - snappy を 1.1.10 にアップグレードしました。#53672 (李扬)。
- 一部の依存関係をサニタイズし、重複を削除することで、cmake ビルドをわずかに改善しました。それぞれのコミットには、行われた変更内容の簡単な説明が付いています。 #53759 (Amos Bird)。
バグ修正(公式安定版リリースにおけるユーザーに見える不具合)
- 複数のマークを扱うビルド時に実験的な Annoy 索引をリセットしないようにしました #51325 (Tian Xinhui)。
- RESTORE 時に使用する一時ディレクトリの扱いを修正 #51493 (Azat Khuzhin)。
- Nullable(IPv4) に対するバイナリ算術演算の不具合を修正 #51642 (Yakov Olkhovskiy).
- Dictionary 属性で IPv4 および IPv6 データ型をサポート #51756 (Yakov Olkhovskiy)。
- 圧縮マークのチェックサムに関する不具合修正 #51777 (SmitaRKulkarni)。
- ベストエフォートでの CSV パース時に、カンマが誤って日時の一部としてパースされてしまう問題を修正しました #51950 (Kruglov Pavel).
- 実行可能な UDF にパラメータがある場合に例外をスローしないよう修正しました #51961 (Nikita Taranov)。
ALTER DELETEクエリにおけるスキップ索引および PROJECTION の再計算処理を修正 #52530 (Anton Popov)。- MaterializedMySQL: ReadBuffer::read 関数における無限ループを修正 #52621 (Val Doroshchuk)。
- サジェストのロードを
clickhouse方言でのみ行うようにしました #52628 (János Benjamin Antal). - 必要に応じて ares チャネルを初期化および破棄するようにしました。 #52634 (Arthur Passos).
- OR 式を使用した仮想カラムでのフィルタリングを修正 #52653 (Azat Khuzhin)。
- スパースなカラム引数を1つだけ取る関数
tupleの場合に発生していたクラッシュを修正 #52659 (Anton Popov). - クラスタでの named collections を修正 #52687 (Al Korgun)。
- マルチステージの
PREWHEREで不要なカラムが読み込まれてしまう問題を修正。#52689 (Anton Popov)。 - NULLS FIRST を指定した複数カラムのソートで発生していた予期しない結果を修正しました #52761 (copperybean).
- Keeper の再構成時のデータ競合を修正 #52804 (Antonio Andelic).
- 大きな LIMIT を指定した場合にスパースなカラムのソートが正しく行われない問題を修正 #52827 (Anton Popov)。
- clickhouse-keeper: poll を使用するサーバー実装の不具合を修正。 #52833 (Andy Fiddaman).
- regexp analyzer が名前付きキャプチャグループを認識できるよう修正しました #52840 (Han Fei)。
- clickhouse-local の
~PushingAsyncPipelineExecutorで発生しうるアサーション失敗を修正しました #52862 (Kruglov Pavel)。 - 空の
Nested(Array(LowCardinality(...)))の読み込みを修正 #52949 (Anton Popov)。 - session_log に対する新しいテストを追加し、ログインとログアウト間の不整合を修正しました。 #52958 (Alexey Gerasimchuck).
- SHOW CREATE MySQL TABLE におけるパスワード漏洩を修正 #52962 (Duc Canh Le).
- CreateSetAndFilterOnTheFlyStep でスパースなカラム形式をフル形式に変換 #53000 (vdimir)。
- fs キャッシュで、空のキー接頭辞を持つディレクトリの削除に関するまれなレースコンディションを修正 #53055(Kseniia Sumarokova)。
- ZstdDeflatingWriteBuffer でときどき出力が切り詰められてしまう問題を修正 #53064 (Michael Kolupaev)。
- async flush クエリで part_log の query_id が正しく設定されない問題を修正 #53103 (Raúl Marín).
- キャッシュで発生し得るエラー "Read unexpected size" を修正 #53121 (Kseniia Sumarokova).
- 新しい Parquet エンコーダーを無効化しました #53130 (Alexey Milovidov)。
- "Not-ready Set" 例外を修正 #53162 (Nikolai Kochetov)。
- PostgreSQL エンジンにおける文字エスケープ処理を修正 #53250(Nikolay Degterinsky)。
- Experimental な session_log テーブル: session_log 用の新しいテストを追加し、ログインとログアウト間の不整合を修正しました。 #53255 (Alexey Gerasimchuck). ログイン成功時とログアウト時の不整合を修正しました。 #53302 (Alexey Gerasimchuck).
- DateTime にサブ秒単位の間隔を加算する処理を修正 #53309 (Michael Kolupaev)。
- 辞書で発生していた "Context has expired" エラーを修正 #53342 (Alexey Milovidov)。
- 通常のプロジェクションの AST フォーマットの誤りを修正 #53347 (Amos Bird)。
Scalar実行時に、テーブル関数内でuse_structure_from_insertion_table_in_table_functionsを使用することを禁止しました #53348 (flynn)。system.tableの SELECT クエリ実行時における lazy データベースのロード処理を修正 #53372 (SmitaRKulkarni).- MaterializedMySQL 用の system.data_skipping_indices を修正しました #53381 (Filipp Ozinov)。
- TSV ファイルのセグメンテーションエンジンにおける単一のキャリッジリターン文字の処理を修正 #53407 (Kruglov Pavel)。
Context has expiredエラーの処理を適切に修正 #53433 (Michael Kolupaev).- IN 句の右辺にサブクエリがある場合に
timeout_overflow_modeが正しく動作しない問題を修正 #53439 (Duc Canh Le)。 - #53152 および #53440 における予期しない動作を修正しました(Zhiguo Zhou)。
- パスがすべて数値のときに発生する JSON_QUERY 関数のパースエラーを修正 #53470 (KevinyhZou)。
- parallel FINAL を使用するクエリでのカラム順序の誤りを修正。 #53489 (Nikolai Kochetov).
- ReplacingMergeTree から do_not_merge_across_partitions_select_final を指定した SELECT を実行した際の不具合を修正しました #53511 (Vasily Nemkov)。
- シャットダウン時に非同期インサートキューを先にフラッシュする #53547 (joelynch).
- スパースなカラムでの JOIN 時にクラッシュする問題を修正 #53548 (vdimir)。
- 不正な引数を取る関数に対する Set のスキップ索引で発生し得る未定義動作 (UB) を修正 #53559 (Azat Khuzhin).
- 逆インデックス(実験的機能)で発生しうる未定義動作を修正 #53560 (Azat Khuzhin)。
- 修正:
interpolate式が、SELECT句で同名のエイリアスではなく、元のソースカラムを使用するように修正しました。 #53572 (Yakov Olkhovskiy). - EXPLAIN PLAN index=1 における破棄されたグラニュール数の誤りを修正 #53616 (wangxiaobo)。
DelayedSourceを使用して totals および extremes を正しく処理 #53644 (Antonio Andelic).- ミューテーション パイプラインで prepared set キャッシュがフリーズしてしまう問題を修正 #53645(Nikolai Kochetov)。
- JSON 型のサブカラムを述語で使用する UPDATE および DELETE クエリのミューテーションで発生していたバグを修正。 #53677 (VanDarkholme7).
- full_sorting_merge join の filter pushdown を修正 #53699 (vdimir)。
NULL::LowCardinality(Nullable(...)) NOT INに関するバグの修正を試みました。 #53706 (Andrey Zvonov)。- 修正: スパースカラムを含むソートされた DISTINCT の不具合を修正 #53711 (Igor Nikonov).
transform: 複数行を含むデフォルトのカラムを正しく処理 #53742 (Salvatore Mesoraca).- parseDateTime で発生する fuzzer によるクラッシュを修正 #53764 (Robert Schulze)。
- MaterializedPostgreSQL: getCreateTableQueryImpl で発生する未捕捉の例外を修正 #53832 (Kseniia Sumarokova)。
- PostgreSQL エンジン使用時に発生し得るセグメンテーションフォルトを修正 #53847 (Kseniia Sumarokova)。
- named_collection_admin のエイリアスを修正 #54066 (Kseniia Sumarokova)。
ClickHouse 23.7 リリース(2023-07-27)
後方互換性のない変更
NAMED COLLECTIONアクセスタイプ(エイリアスUSE NAMED COLLECTION、NAMED COLLECTION USAGE)を追加しました。このアクセスタイプはデフォルトで無効になっており(親アクセスタイプであるNAMED COLLECTION ADMINもデフォルトで無効なため)、この PR は後方互換性のない変更となります。#50277 で提案されたものです。利用を許可するにはGRANT NAMED COLLECTION ON collection_name TO userまたはGRANT NAMED COLLECTION ON * TO userを使用してください。これらの権限を付与できるようにするには config 内でnamed_collection_adminが必要です(以前はnamed_collection_controlという名前だったため、エイリアスとして残ります)。 #50625(Kseniia Sumarokova)。system.partsのカラム名last_removal_attemp_timeのタイポを修正しました。現在の名前はlast_removal_attempt_timeです。 #52104(filimonov)。distributed_ddl_entry_format_versionのデフォルトのバージョンを 5 に引き上げました(OpenTelemetry とinitial_query_iddのパススルーを有効化します)。これにより、ダウングレード 後には既存のdistributed DDLエントリを処理できなくなります(ただし通常、そのような未処理エントリは存在しないはずです)。 #52128(Azat Khuzhin)。- 通常のメタデータと同様の方法でプロジェクションのメタデータを検証するようにしました。この変更により、不正なプロジェクションを持つテーブルが存在する場合、サーバーが起動できなくなる可能性があります。例として、PK に位置指定カラムを作成するプロジェクション(例: テーブルの PK では許可されず、insert/merge 中のクラッシュを引き起こす可能性がある
projection p (select * order by 1, 4))があります。アップデート前にそのようなプロジェクションは削除してください。 #52353 を修正します。 #52361(Nikolai Kochetov)。 - 実験的機能
hashidはバグのため削除されました。実装品質は当初から疑問視されており、実験的ステータスを脱することはありませんでした。これにより #52406 がクローズされます。 #52449(Alexey Milovidov)。
新機能
- 複数のデータベースを 1 つに結合するための
Overlayデータベースエンジンを追加しました。ファイルシステム上のディレクトリを、自動検出されるフォーマットと構造を持つ暗黙的に利用可能なテーブルの集合として表現するFilesystemデータベースエンジンを追加しました。新しいS3データベースエンジンにより、プレフィックスをテーブルの集合として表現することで、S3 ストレージに読み取り専用でアクセスできるようになりました。新しいHDFSデータベースエンジンにより、同様に HDFS ストレージに読み取り専用でアクセスできるようになりました。#48821 (alekseygolub)。 - Keeper にスナップショットとログを保存するための外部ディスク対応を追加しました。 #50098 (Antonio Andelic).
- 複数ディレクトリ選択用の
{}グロブのサポートを追加しました。#50559(Andrey Zvonov)。 - Kafka コネクタが、URL エンコードされた認証情報を使用するベーシック認証でスキーマレジストリから Avro スキーマを取得できるようになりました。 #49664 (Ilya Golshtein).
- 2つの配列間の Jaccard 類似度を計算する関数
arrayJaccardIndexを追加。 #50076 (FFFFFFFHHHHHHH). system.settingsおよび類似のテーブルにカラムis_obsoleteを追加し、#50819 をクローズ。 #50826(flynn)。- 設定ファイル内の暗号化された要素のサポートを追加しました。設定ファイルの末端(リーフ)要素で暗号化されたテキストを使用できるようになりました。テキストは
<encryption_codecs>セクションの暗号化コーデックを使って暗号化されます。#50986(Roman Vasin)。 - Grace Hash Join アルゴリズムが FULL JOIN および RIGHT JOIN に対しても適用可能になりました。 #49483。 #51013 (lgbo)。
- よりグレースフルに終了するための
SYSTEM STOP LISTENクエリを追加。 #47972 をクローズ。 #51016(Nikolay Degterinsky)。 input_format_csv_allow_variable_number_of_columnsオプションを追加しました。 #51273 (Dmitry Kardymon).- また地味な機能ですが、Spark や MySQL と同様に
substring_index関数を追加。 #51472 (李扬). jemallocの bin の統計情報を表示する system テーブルjemalloc_bins。例:SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10。お試しください。 #51674 (Alexander Gololobov).- 各カラムの直前に、そのカラムのデフォルト値を使用するかどうかを示す 1 バイトのフラグを持つ
RowBinaryWithDefaultsフォーマットを追加しました。 #50854 をクローズ。 #51695(Kruglov Pavel)。 default_temporary_table_engine設定を追加しました。default_table_engineと同様ですが、一時テーブル用です。#51292。#51708(velavokr)。- 各単語の先頭文字を大文字にし、残りを小文字に変換する新しい関数
initcap/initcapUTF8を追加しました。 #51735 (Dmitry Kardymon). - CREATE TABLE のカラム定義で
PRIMARY KEY構文がサポートされるようになりました。カラムは、定義された順序でプライマリ索引に追加されます。 #51881 (Ilya Yatsishin). - ログおよびエラーログのファイル名に日付と時刻のフォーマット指定子を使用できるようになりました。設定ファイル内(
logおよびerrorlogタグ)とコマンドライン引数(--log-fileおよび--errorlog-file)の両方で指定できます。 #51945 (Victor Krasnov). - HTTP ヘッダーに Peak Memory Usage の統計情報を追加しました。 #51946 (Dmitry Kardymon).
- 文字列内の部分文字列を照合するための新しい
hasSubsequence関数(およびCaseInsensitiveとUTF8バージョン)を追加しました。 #52050 (Dmitry Kardymon)。 - PostgreSQL との互換性のために
groupArrayのエイリアスとしてarray_aggを追加しました。#52100 をクローズ。### エンドユーザー向け変更のドキュメント項目。#52135 (flynn)。 any集約関数の互換エイリアスとしてany_valueを追加しました。 #52140 をクローズしました。 #52147(flynn)。- BigQuery との互換性のため、集約関数
array_concat_aggを追加しました。groupArrayArrayの別名です。#52139 をクローズしました。 #52149 (flynn)。 OCTET_LENGTHをlengthのエイリアスとして追加しました。#52153 をクローズしました。#52176(FFFFFFFHHHHHHH)。- 複数行の文字列から最初の行を抽出する
firstLine関数を追加しました。これにより #51172 がクローズされました。#52209(Mikhail Koviazin)。 Intervalデータ型向けに KQL スタイルのフォーマットを実装しました。これはKustoクエリ言語との互換性のためにのみ必要です。 #45671 (ltrk2).- 保留中のすべての非同期 INSERT を宛先テーブルにフラッシュするクエリ
SYSTEM FLUSH ASYNC INSERT QUEUEを追加しました。サーバー側の設定async_insert_queue_flush_on_shutdown(デフォルトはtrue)を追加しました。これは、グレースフルシャットダウン時に非同期 INSERT のキューをフラッシュするかどうかを制御します。async_insert_threadsの設定は、サーバー側の設定となりました。 #49160 (Anton Popov)。 - PostgreSQL との互換性のために、
current_databaseエイリアスと新しい関数current_schemasを追加しました。 #51076 (Pedro Riera). - 関数
today向けにcurdateおよびcurrent_dateというエイリアスを、関数now向けにcurrent_timestampというエイリアスを追加しました。 #52106 (Lloyd-Pottiger). - 非同期挿入において
async_deduplication_tokenをサポートしました。 #52136 (Han Fei). - URL エンジンで URI パスのエンコード/デコードを無効化できる新しい設定項目
disable_url_encodingを追加しました。#52337(Kruglov Pavel)。
パフォーマンスの向上
- デフォルトでスパースシリアライゼーション形式を自動的に選択するようにしました。これによりパフォーマンスが向上します。この形式はバージョン 22.1 以降でサポートされています。この変更以降、22.1 より古いバージョンへのダウングレードができない可能性があります。ダウングレードには
ratio_of_defaults_for_sparse_serialization=0.9375を設定する必要がある場合があります 55153。MergeTree テーブルに対してratio_of_defaults_for_sparse_serialization = 1の設定を行うことで、スパースシリアライゼーション形式の使用を無効にできます。#49631 (Alexey Milovidov)。 move_all_conditions_to_prewhereとenable_multiple_prewhere_read_stepsの設定をデフォルトで有効にしました。 #46365 (Alexander Gololobov).- アロケーターのチューニングにより、一部のクエリのパフォーマンスを向上。 #46416 (Azat Khuzhin).
MergeTreeReadPoolと同様に、MergeTreePrefetchedReadPoolでも固定サイズのタスクを使用するようになりました。また、S3 リクエストに対してもコネクションプールを使用するようになりました。 #49732 (Nikita Taranov)。- JOIN の右側へのプッシュダウンをさらに最適化しました。 #50532 (Nikita Taranov).
grace_hash結合でハッシュテーブルのサイズを事前に予約してパフォーマンスを改善(再投稿)。 #50875 (lgbo).OpenedFileCacheでのロック待ちが、場合によっては顕著になることがありました。ロック競合を避けるため、これを複数のサブマップ(それぞれに専用のロックを持つ)に分割しました。 #51341 (Nikita Taranov)。- PRIMARY KEY カラムを含む条件を PREWHERE チェーンの末尾に移動します。PK カラムを含む条件は PK 解析で使用される可能性が高く、PREWHERE フィルタリングにはそれ以上大きく寄与しない、という考え方に基づきます。 #51958 (Alexander Gololobov)。
- String 型に対する
COUNT(DISTINCT)を、SipHash をインライン化することで高速化しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上での OnTime のパフォーマンス実験では、この変更によりクエリ Q8 の QPS が 11.6% 向上し、他のクエリには影響がないことが示されました。 #52036 (Zhiguo Zhou). allow_vertical_merges_from_compact_to_wide_partsがデフォルトで有効になりました。これにより、マージ処理中のメモリ使用量が削減されます。 #52295 (Alexey Milovidov).- 主キーを無効化してしまう誤った PROJECTION の解析を修正しました。この問題は
query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1の場合にのみ発生します。これにより #48823 が修正されました。これにより #51173 が修正されました。#52308(Amos Bird)。 FileCache::loadMetadataにおけるシステムコールの回数を削減し、ファイルシステムキャッシュが有効になっている場合のサーバー起動を高速化します。 #52435 (Raúl Marín).- 残りのデータをバックグラウンドでダウンロードすることで、ファイルセグメントサイズの厳密な下限を設定できるようにしました。ファイルの実際のサイズがそれより大きい場合のファイルセグメントの最小サイズは、キャッシュ構成の
boundary_alignment設定で指定され、デフォルトは4Miです。バックグラウンドスレッドの数は、キャッシュ構成のbackground_download_threads設定で指定され、デフォルトは2です。また、この PR ではmax_file_segment_sizeが8Miから32Miに引き上げられました。 #51000 (Kseniia Sumarokova)。 - S3 用のデフォルトタイムアウトを 30 秒から 3 秒に、その他の HTTP のデフォルトタイムアウトを 180 秒から 30 秒に短縮しました。 #51171 (Michael Kolupaev).
- 新しい設定
merge_tree_determine_task_size_by_prewhere_columnsが追加されました。trueに設定すると、読み取りタスクサイズの決定にはPREWHEREセクション内のカラムサイズのみが考慮されます。falseの場合は、クエリ内のすべてのカラムが考慮されます。 #52606 (Nikita Taranov).
改善点
s3/file/url/...テーブル関数のプログレスバーでread_bytes/total_bytes_to_readを使用し、進捗表示を改善しました。 #51286 (Kruglov Pavel).- テーブル設定
wait_for_unique_parts_send_before_shutdown_msを導入し、レプリカがレプリケートされたデータ送信のためのインターサーバーハンドラーを閉じる前に待機する時間を指定できるようにしました。あわせて、テーブルとインターサーバーハンドラーのシャットダウン順序の不整合も修正しました。これにより、サーバーは最初にテーブルをシャットダウンし、その後でインターサーバーハンドラーをシャットダウンするようになりました。 #51851 (alesapin). - SQL 標準準拠の
FETCHでOFFSETを省略可能にしました。参照: https://antonz.org/sql-fetch/。#51293(Alexey Milovidov)。 - config の新しい
http_forbid_headersセクションにより、URL/S3 テーブル関数に対する HTTP ヘッダーのフィルタリングが可能になりました。完全一致フィルタと正規表現フィルタの両方を利用できます。 #51038 (Nikolay Degterinsky). - ログに
16 EiBの空き容量があるというメッセージを表示しないようにしました。これらは意味を成さないためです。これにより #49320 がクローズされました。#49342 (Alexey Milovidov)。 sleepEachRow関数の制限値を正しくチェックするようにしました。function_sleep_max_microseconds_per_blockという設定を追加しました。これは汎用的な query fuzzer のために必要です。#49343 (Alexey Milovidov)。geoHash関数の 2 つの不具合を修正しました。 #50066 (李扬)。- 非同期 insert の flush クエリを
system.query_logに記録するようにしました。 #51160 (Raúl Marín). - 関数
date_diffとageがミリ秒およびマイクロ秒単位をサポートし、マイクロ秒精度で動作するようになりました。 #51291 (Dmitry Kardymon)。 - clickhouse-keeper-client におけるパスのパース処理を改善しました。 #51359 (Azat Khuzhin).
- ClickHouse に依存するサードパーティ製品(Gluten: a Plugin to Double Spark SQL's Performance)にバグが存在しました。この修正により、HDFS からの読み込み時にそのサードパーティ製品でヒープオーバーフローが発生するのを防ぎます。 #51386 (李扬)。
- S3 に対するネイティブコピー機能を無効化できるようにしました(BACKUP/RESTORE 用の設定
allow_s3_native_copyと、s3/s3_plainディスク用のs3_allow_native_copy)。#51448(Azat Khuzhin)。 - ディスク上の圧縮済みプライマリキーのサイズを表示するために、
system.partsテーブルにカラムprimary_key_sizeを追加。 #51400 をクローズ。 #51496 (Yarik Briukhovetskyi)。 procfsがなく、ホームディレクトリも存在せず、glibc の名前解決用プラグインもない環境でもclickhouse-localを実行できるようにしました。 #51518 (Alexey Milovidov)。- rename_files_after_processing 設定で、ファイル名全体を表すプレースホルダ
%aが使用できるようになりました。 #51603 (Kruglov Pavel). system.parts_columnsにmodification_timeカラムを追加。 #51685 (Azat Khuzhin).- CSV フォーマットに新しい設定
input_format_csv_use_default_on_bad_valuesを追加し、個々のフィールドのパースに失敗した場合にデフォルト値を挿入できるようにしました。 #51716 (KevinyhZou). - 予期しないクラッシュ発生後にクラッシュログをディスクにフラッシュする処理を追加しました。 #51720 (Alexey Gerasimchuck)。
- ダッシュボードページで認証とは無関係のエラーが表示されない問題を修正しました。また、チャートが重なって表示される挙動も修正しました。 #51744 (Zach Naimon).
- UUID から UInt128 への変換を許可します。 #51765 (Dmitry Kardymon)。
- 関数
rangeが Nullable 引数をサポートするようになりました。 #51767 (Dmitry Kardymon). toyear(x) = cのような条件式をc1 <= x < c2に変換するようにしました。 #51795 (Han Fei).SHOW INDEXステートメントの MySQL との互換性を改善しました。 #51796 (Robert Schulze).use_structure_from_insertion_table_in_table_functionsがMATERIALIZEDおよびALIASカラムで機能しない不具合を修正。 #51817 をクローズ。 #51019 をクローズ。 #51825(flynn)。- Cache Dictionary は、ソースから一意なキーのみを要求するようになりました。#51762 をクローズしました。 #51853(Maksim Kita)。
- FORMAT が指定されている場合に EXPLAIN クエリに設定が適用されないケースを修正しました。 #51859 (Nikita Taranov)。
- SELECT クエリとの互換性を保つため、DESCRIBE TABLE クエリで FORMAT の前に SETTINGS を指定できるようにしました。#51544 をクローズ。#51899(Nikolay Degterinsky)。
- Var-Int でエンコードされた整数値(ネイティブプロトコルで使用されるものなど)が、64 ビット整数の全範囲を利用できるようになりました。サードパーティー製クライアントは、それに合わせて var-int の実装を更新することが推奨されます。 #51905 (Robert Schulze)。
- 証明書が変更された場合に、手動で SYSTEM RELOAD CONFIG を実行しなくても証明書が更新されるようにしました。 #52030 (Mike Kot).
TYPEを指定していないADD INDEXクエリを無視できるようにするallow_create_index_without_type設定を追加しました。標準的な SQL クエリは、テーブルスキーマを変更することなくそのまま成功します。 #52056 (Ilya Yatsishin)。- サーバーの起動時から
system.text_logにログメッセージが書き込まれるようになりました。 #52113 (Dmitry Kardymon)。 - HTTP エンドポイントが複数の IP アドレスを持ち、そのうち最初のものに到達できない場合にタイムアウト例外がスローされていました。セッション作成時に、解決済みのすべてのエンドポイントを順に処理するようにしました。 #52116 (Aleksei Filatov).
- Avro 入力フォーマットは、単一の型しか含まない場合でも Union をサポートするようになりました。 #52131 をクローズ。 #52137 (flynn)。
- 暗黙のプロジェクション(現時点では
min_max_countPROJECTION のみ)を無効化できるoptimize_use_implicit_projectionsSETTING を追加しました。#52152(Amos Bird)。 - 関数
hasTokenを用いて無限ループを発生させることが可能でしたが、現在はこれを行えないようになりました。これにより #52156 がクローズされました。#52160(Alexey Milovidov)。 - ZK の祖先ノードを楽観的に作成するようになりました。 #52195 (Raúl Marín).
- #50582 を修正。インオーダーでの読み取りおよび定数を扱う一部のケースで発生する
Not found column ... in blockエラーを回避。#52259(Chen768959)。 - S2 geo プリミティブが無効でないかどうかを、可能な限り早期に ClickHouse 側で検証します。これにより次の issue をクローズしました: #27090。#52260(Nikita Mikhaylov)。
query_plan_optimize_projection = 1のときに不足していた projection の QueryAccessInfo を再追加しました。これにより #50183 が修正されます。さらに、#50093 も修正されます。 #52327 (Amos Bird)。ZooKeeperRetriesControlがエラーを再スローする際には、ZooKeeperRetriesControl自身のスタックトレースではなく、元のスタックトレースが表示される方がより有用です。 #52347 (Vitaly Baranov)。- 一部のディスクがこれをサポートしていない場合でも、ゼロコピーレプリケーションロックを待機するようになりました。 #52376 (Raúl Marín).
- インターサーバー用ポートは、テーブルのシャットダウン完了後にのみ閉じられるようになりました。 #52498 (alesapin).
実験的機能
- Parquet ファイルの書き込みが 10 倍高速になり、マルチスレッド対応になりました。読み込みとほぼ同等の速度です。#49367(Michael Kolupaev)。この機能は設定
output_format_parquet_use_custom_encoderによって制御されますが、まだ完全ではないため、デフォルトでは無効になっています。 - クエリ言語として PRQL のサポートを追加しました。#50686(János Benjamin Antal)。
- カスタムディスクにディスク名を追加できるようになりました。これまでは、カスタムディスクは内部で生成されたディスク名を使用していました。今後は
disk = disk_<name>(...)(例: ディスク名はname)のように指定できます。#51552(Kseniia Sumarokova)。このリリースでは、この構文が変更される可能性があります。 - (experimental MaterializedMySQL)切断後に
mysqlxx::Pool::Entryが使用された場合にクラッシュする問題を修正しました。#52063(Val Doroshchuk)。 - (experimental MaterializedMySQL)MaterializedMySQL で
CREATE TABLE ... AS SELECTがサポートされるようになりました。#52067(Val Doroshchuk)。 - (experimental MaterializedMySQL)MaterializedMySQL に対してテキスト型を utf8 に自動変換する機能を導入しました。#52084(Val Doroshchuk)。
- (experimental MaterializedMySQL)MaterializedMySQL の DDL で、クオートされていない UTF-8 文字列がサポートされるようになりました。#52318(Val Doroshchuk)。
- (experimental MaterializedMySQL)MaterializedMySQL で二重引用符付きコメントがサポートされるようになりました。#52355(Val Doroshchuk)。
- Intel QPL を v1.1.0 から v1.2.0 へアップグレードし、Intel accel-config を v3.5 から v4.0 へアップグレードしました。さらに、IAA アクセラレータにおいて Device IOTLB miss が大きなパフォーマンス影響を与える問題を修正しました。#52180(jasperzhu)。
session_timezone設定(バージョン 23.6 で新規追加)は experimental に格下げされました。#52445(Alexey Milovidov)。- ZooKeeper の
reconfigコマンドを、インクリメンタルな再構成をサポートする ClickHouse Keeper で利用できるようにしました。これはkeeper_server.enable_reconfiguration設定で有効化できます。サーバーの追加、削除、およびサーバー優先度の変更をサポートします。#49450(Mike Kot)。この機能はまだ不完全である可能性があります。
ビルド/テスト/パッケージングの改善
- CI に Linux RISC-V 64 向けの実験的な ClickHouse ビルドを追加。 #31398 (Alexey Milovidov).
- Analyzer を有効化した状態でのインテグレーションテストのチェックを追加。 #50926 #52210 (Dmitry Novik).
- Rust の再現可能ビルドに対応。 #52395 (Azat Khuzhin).
- Cargo の依存関係を更新。 #51721 (Raúl Marín).
- 関数
CHColumnToArrowColumn::fillArrowArrayWithArrayColumnDataが Nullable な配列でも動作するように変更。これらは ClickHouse では不可能だが、Gluten では必要。 #52112 (李扬). - CCTZ ライブラリを master ブランチ相当に更新したが、ユーザーから見える変更はない。 #52124 (Alexey Milovidov).
system.licensesテーブルに、ハードフォークされたライブラリ Poco を含めるようにした。これにより #52066 が解決。 #52127 (Alexey Milovidov).- 不適切な句読点のケースがないことをチェック:
Hello ,worldのようにコンマの前に空白が入っているのではなく、Hello, worldとなっていることを確認。 #52549 (Alexey Milovidov).
バグ修正(公式安定版でユーザーに影響する不具合)
- MaterializedPostgreSQL の syncTables を修正 #49698 (Kseniia Sumarokova)。
- optimize_aggregators_of_group_by_keys 使用時の projection を修正しました #49709 (Amos Bird)。
- JOIN を含むクエリでの optimize_skip_unused_shards を修正 #51037 (Azat Khuzhin).
- 小数部付きの負の datetime64 値に対する formatDateTime() の動作を修正しました #51290 (Dmitry Kardymon)。
- 関数
hasToken*の実装が完全に誤っていました。#43358 と #51378 に対応するテストを追加しました(Alexey Milovidov)。 - 関数をソート前に移動する最適化を修正しました。 #51481 (Nikolai Kochetov).
- FINAL 用の Pipe::unitePipes における Block 構造の不整合を修正 #51492 (Nikita Taranov)。
- すべての分片で重みがゼロのクラスタで発生する SIGSEGV を修正しました(
INSERT INTO FUNCTION clusterAllReplicas()の問題を修正) #51545(Azat Khuzhin)。 - ヘッジリクエストのタイムアウトを修正 #51582 (Azat Khuzhin)。
- NULL を含む ANTI JOIN の論理エラーを修正 #51601 (vdimir)。
- PREWHERE への 'IN' 条件の移動に関する不具合を修正 #51610 (Alexander Gololobov)。
- ASOF/ANTI join に対して PredicateExpressionsOptimizer を適用しないようにしました #51633 (vdimir)。
- マージアルゴリズム使用時の ReplicatedMergeTree に対する重複排除付き非同期挿入を修正 #51676(Antonio Andelic)。
parseSipHashKeyにおいて空のカラムから読み取ってしまう不具合を修正 #51804(Nikita Taranov)。- 無効な EmbeddedRocksdb テーブルを作成しようとした際に発生するセグメンテーションフォルトを修正 #51847 (Duc Canh Le)。
- MongoDB テーブルへのデータ挿入を修正 #51876 (Nikolay Degterinsky)。
- DatabaseCatalog のシャットダウン時に発生するデッドロックを修正 #51908 (Alexander Tokmakov)。
- サブクエリ演算子の不具合を修正 #51922 (Alexey Milovidov)。
- 複数の IP アドレスを持つホストに対する非同期接続を修正 #51934 (Kruglov Pavel)。
- ActionsDAG::merge 後に入力が削除されないようにしました #51947 (Nikolai Kochetov)。
executeではなくRemoveManyObjectStorageOperation::finalize内で参照カウントをチェックするように変更 #51954 (vdimir)。- パラメトリック UDF をサポート #51964 (Alexey Milovidov)。
- 2283-12-31 以降の日付に対する toDateTime64() の軽微な修正 #52130(Andrey Zvonov)。
- ウィンドウ関数の ORDER BY 句のタプルを修正 #52145 (Alexey Milovidov).
- 集約式に単調関数を含む場合の誤ったプロジェクション解析を修正。#52151(Amos Bird)。
groupArrayMoving関数の不具合を修正 #52161 (Alexey Milovidov)。- range Dictionary に対する direct JOIN を無効にしました #52187 (Duc Canh Le)。
- sticky mutations のテストと、極めてまれなレースコンディションを修正 #52197 (alesapin)。
- Web disk のレースコンディションを修正 #52211 (Kseniia Sumarokova)。
- サーバーからの未知のパケット受信時の Connection::setAsyncCallback 内のデータ競合を修正 #52219 (Kruglov Pavel)。
- 起動時の一時データの削除処理を修正し、テストを追加 #52275 (vdimir)。
- Nullable 型のカラムをカウントする際は minmax_count プロジェクションを使用しないでください #52297 (Amos Bird).
- MergeTree/ReplicatedMergeTree はログエントリにサーバーのタイムゾーンを使用するようになりました #52325 (Azat Khuzhin)。
- CTE を含み複数回使用されるパラメータ化された VIEW を修正 #52328 (SmitaRKulkarni)。
- 時間間隔に対する式テンプレートを無効にしました #52335 (Alexander Tokmakov)。
- Keeper の
apply_snapshotを修正 #52358 (Antonio Andelic)。 - build-osx.md を更新しました #52377 (AlexBykovski)。
- 検索対象がカラムで、検索文字列が空のときに
countSubstringsがハングする問題を修正 #52409 (Sergei Trifonov)。 - Merge テーブルでの通常のプロジェクションを修正しました #52432 (Amos Bird)。
- Aggregator における二重解放が発生する可能性のある問題を修正 #52439 (Nikita Taranov)。
- Buffer エンジンへの挿入処理を修正しました #52440 (Vasily Nemkov)。
- AnyHash の実装が仕様に準拠していませんでした。#52448(Alexey Milovidov)。
- OptimizedRegularExpression で再帰の深さをチェックするようにしました #52451 (Alexey Milovidov)。
- DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() におけるデータレースを修正 #52490 (Azat Khuzhin)。
transform関数で発生していた abort の問題を修正。#52513(Alexey Milovidov)。- プロジェクション削除後における論理削除の挙動を修正しました #52517 (Anton Popov).
- "Cannot drain connections: cancel first" というエラーが発生し得る問題を修正 #52585 (Kruglov Pavel).
ClickHouse リリース 23.6、2023-06-29
後方互換性のない変更
- FS キャッシュから
do_not_evict_index_and_mark_files機能を削除しました。この機能はむしろ悪影響を与えていました。 #51253 (Kseniia Sumarokova). - 実験的な LIVE VIEW に対する ALTER サポートを削除しました。 #51287 (Alexey Milovidov).
http_max_field_value_sizeとhttp_max_field_name_sizeのデフォルト値を 128 KiB に減らしました。 #51163 (Mikhail f. Shiryaev).- CPU に関連する CGroups メトリクスは、使いやすさ向上のため 1 つのメトリクス
CGroupMaxCPUに置き換えられました。NormalizedCPU 使用率メトリクスは、設定されている場合、CPU の総数ではなく CGroups の制限に対して正規化されます。これにより #50836 がクローズされました。 #50835 (Alexey Milovidov).
New Feature
- 関数
transformおよび値マッチングを行うCASEが、すべてのデータ型をサポートするようになりました。これにより #29730、#32387、#50827、#31336、#40493 がクローズされました。#51351(Alexey Milovidov)。 - オプション
--rename_files_after_processing <pattern>を追加しました。これにより #34207 がクローズされました。#49626(alekseygolub)。 INTO OUTFILE句でTRUNCATE修飾子をサポートしました。ファイルが存在する場合は、INTO OUTFILEでAPPENDまたはTRUNCATEの使用を推奨します。#50950(alekar)。- テーブルエンジン
Redisおよびテーブル関数redisを追加しました。これにより外部の Redis サーバーに対してクエリを実行できます。#50150(JackyWoo)。 - 設定
s3_skip_empty_files、hdfs_skip_empty_files、engine_file_skip_empty_files、engine_url_skip_empty_filesを使用して、file/s3/url/hdfs テーブル関数で空ファイルをスキップできるようにしました。#50364(Kruglov Pavel)。 - MySQL 互換ポート経由でクライアントが接続されている場合に、MySQL の同等の型を表示するように
SHOW COLUMNSSQL ステートメントを変更する新しい設定use_mysql_types_in_show_columnsを追加しました。#49577(Thomas Panetti)。 clickhouse-clientは、--host、--port、--userなどの代わりに接続文字列で呼び出せるようになりました。#50689(Alexey Gerasimchuck)。- 設定
session_timezoneを追加しました。これは、明示的に指定されていない場合にセッションのデフォルトタイムゾーンとして使用されます。#44149(Andrey Zvonov)。 - Codec
DEFLATE_QPLは、SETTINGallow_experimental_codecsではなく、サーバー設定enable_deflate_qpl_codec(デフォルト: false)によって制御されるようになりました。これにより、DEFLATE_QPLは実験的ではないものとして扱われます。#50775(Robert Schulze)。
パフォーマンスの改善
ReplicatedMergeTreeにおけるマージ選択およびクリーンアップタスクのスケジューリングを改善しました。マージやクリーンアップするものがない場合に、タスクが頻繁に実行されすぎないようになります。max_merge_selecting_sleep_ms、merge_selecting_sleep_slowdown_factor、max_cleanup_delay_period、cleanup_thread_preferred_points_per_iterationの各設定を追加しました。これにより #31919 がクローズされるはずです。 #50107(Alexander Tokmakov)。- CROSS JOIN に対してフィルタのプッシュダウンを行うようにしました。 #50605(Han Fei)。
- グローバルオブジェクトの代わりにスレッドローカルな
timer_idを使用することで、QueryProfiler 有効時のパフォーマンスを改善しました。 #48778(Jiebin Sun)。 - CapnProto の入出力フォーマットを書き直してパフォーマンスを改善しました。カラム名と CapnProto フィールドを大文字小文字を区別せずに対応付け、ネストした構造体フィールドの読み書きを修正しました。 #49752(Kruglov Pavel)。
- 並列スレッドでの Parquet 書き込みパフォーマンスを最適化しました。 #50102(Hongbin Ma)。
- MATERIALIZED VIEW と、1 ブロックのみを持つストレージの処理に対しては
parallelize_output_from_storagesを無効化しました。 #50214(Azat Khuzhin)。 - PR #46558 をマージしました。ブロックがすでにソートされている場合には、ソート中のブロックの並べ替え処理を回避します。 #50697(Alexey Milovidov、Maksim Kita)。
system.zookeeperテーブルからの読み取りを高速化するため、ZooKeeper への複数の list リクエストを並列に実行するようにしました。 #51042(Alexander Gololobov)。- タイムゾーン向けの DateTime ルックアップテーブルの初期化を高速化しました。これにより、特にデバッグビルドのように処理が重い場合に、
clickhouse-clientの起動/接続時間が短縮されるはずです。 #51347(Alexander Gololobov)。 - 同期的な HEAD リクエストが原因となるデータレイクの低速化を修正しました(大量のファイルがある場合に Iceberg/Delta Lake/Hudi が遅くなる問題に関連)。 #50976(Kseniia Sumarokova)。
- 右側の GLOBAL JOIN テーブルから、すべてのカラムを読み取らないようにしました。 #50721(Nikolai Kochetov)。
実験的機能
- analyzer で並列レプリカをサポートしました。 #50441 (Raúl Marín).
- zero-copy レプリケーションの場合にレプリカ間で負荷をより均等に分散するため、大きなマージ/ミューテーションの実行前にランダムなスリープを追加しました。 #51282 (alesapin).
- 背後のテーブルが
ReplicatedMergeTreeで分片が 1 つだけの場合には、Replicatedデータベース経由でALTER PARTITIONクエリおよびミューテーションをレプリケートしないようにしました。 #51049 (Alexander Tokmakov).
改善
- "パーツが多すぎる" のしきい値を、より現在の状況に合った値に緩和しました。長時間実行される INSERT クエリに対して、バックプレッシャーを再び有効にしました。 #50856 (Alexey Milovidov).
- CIDR ::ffff:0:0/96(IPv4 マッピングされたアドレス)に対して、IPv6 を IPv4 アドレスにキャストできるようにしました。 #49759 (Yakov Olkhovskiy).
- MongoDB プロトコルを更新し、MongoDB 5.1 以降のバージョンに対応しました。古いプロトコル(<3.6)を使用するバージョンへのサポートは維持されています。#45621、#49879 をクローズ。#50061(Nikolay Degterinsky)。
- スキーマ推論時に読み込むバイト数の上限を設定するための
input_format_max_bytes_to_read_for_schema_inferenceを追加しました。#50577 をクローズ。#50592(Kruglov Pavel)。 - スキーマ推論時に
input_format_null_as_default設定を考慮するようにしました。 #50602 (Kruglov Pavel). - 設定
input_format_csv_skip_trailing_empty_lines、input_format_tsv_skip_trailing_empty_lines、input_format_custom_skip_trailing_empty_lines(デフォルトでは無効)により、CSV/TSV/CustomSeparated フォーマットで末尾の空行をスキップできるようにしました。#49315 をクローズしました。#50635(Kruglov Pavel)。 - 関数 "toDateOrDefault|OrNull" および "accuateCast[OrDefault|OrNull]" が、数値引数を正しく解釈できるようになりました。 #50709 (Dmitry Kardymon).
- 空白または
\tをフィールド区切り文字とする CSV をサポートし、これらの区切り文字は Spark とも互換性があります。 #50712 (KevinyhZou). - 設定
number_of_mutations_to_delayとnumber_of_mutations_to_throwがデフォルトで有効になり、それぞれの値は 500 および 1000 になりました。 #50726 (Anton Popov). - ダッシュボードで欠損値が正しく表示されるようになりました。これにより #50831 が解決されました。 #50832(Alexey Milovidov)。
- 関数
parseDateTimeBestEffort*およびparseDateTime64BestEffort*で、syslog のタイムスタンプ形式における日付および時刻の引数を使用できるようにしました。 #50925 (Victor Krasnov)。 - clickhouse-client のコマンドラインパラメータ "--password" は、1 回だけ指定できるようになりました。 #50966 (Alexey Gerasimchuck).
- クラスタ内バックアップ時にパーツの同一性を確認するため、
system.partsのhash_of_all_filesを使用できるようにしました。 #50997 (Vitaly Baranov)。 - システムテーブル
zookeeper_connectionのconnected_timeは接続が確立された時刻(標準形式)を示し、確立された接続セッションの継続時間(秒単位)を表すsession_uptime_elapsed_seconds列が追加されました。 #51026 (郭小龙)。 - file/s3/hdfs/url テーブル関数のプログレスバーを、ソースデータの chunk サイズを使用し、各スレッドで合計サイズをインクリメンタルにカウントするようにして改善しました。*Cluster 関数のプログレスバーも修正しました。これにより #47250 が解決されます。 #51088 (Kruglov Pavel)。
- プログレスバー表示を改善するため、TCP プロトコルの Progress パケットに total_bytes_to_read を追加しました。 #51158 (Kruglov Pavel)。
- ファイルシステムキャッシュを使用するディスク上のデータパーツの検査を強化しました。 #51164 (Anton Popov).
- fs キャッシュで
current_elements_numが正しくない値になることがある問題を修正。 #51242 (Kseniia Sumarokova).
ビルド/テスト/パッケージングの改善
- スタンドアロンの keeper バイナリに組み込みの keeper-client を追加しました。 #50964 (pufit).
- 適切な LZ4 バージョンが使用されるようになりました。 #50621 (Nikita Taranov).
- 致命的エラー発生時に、ClickHouse サーバーが変更された設定の一覧を出力するようになりました。これにより #51137 がクローズされました。 #51138 (Alexey Milovidov).
- ClickHouse を clang-17 でビルドできるようにしました。 #51300 (Alexey Milovidov).
- SQLancer によるチェックでトリガーされていたバグが修正され、このチェックは安定したものと見なされるようになりました。これにより、SQLancer チェックが失敗した場合は、チェックステータスの失敗として報告されます。 #51340 (Ilya Yatsishin).
- Dockerfile 内の巨大な
RUNを、より小さな条件付きのRUNに分割しました。同じRUNレイヤー内で必要なツールをオンデマンドでインストールし、その後削除します。OS のアップグレードは冒頭で 1 回だけ行います。署名済みリポジトリのチェックには、よりモダンな方法を使用します。古い Docker バージョンでの問題に対処するため、ベースイメージを ubuntu:20.04 にダウングレードしました。golang の脆弱性に対処するため、golang のバージョンをアップグレードしました。 #51504 (Mikhail f. Shiryaev).
バグ修正(公式安定リリースにおけるユーザーに影響する不具合)
- 実行可能ディクショナリの読み込み状態を正しく報告するよう修正 #48775 (Anton Kozlov).
- skip index および projection の mutation が正しく行われるよう修正 #50104 (Amos Bird)。
- 移動中パーツのクリーンアップ #50489 (vdimir).
- 集約関数内の IP 型のハッシュにおける後方互換性を修正しました #50551 (Yakov Olkhovskiy)。
- Log ファミリーのテーブルが
TRUNCATE後に誤った行数を返す問題を修正 #50585 (flynn)。 uniqExactの並列マージ処理におけるバグを修正 #50590 (Nikita Taranov)。- 最近の grace hash join に関する変更を元に戻しました #50699 (vdimir)。
- Query Cache:
ColumnConstからColumnVector<char8_t>への不正なキャストを修正しようと試みました #50704 (Robert Schulze). - Keeper に不明な操作を含むログを保存しないようにしました #50751(Antonio Andelic)。
- SummingMergeTree における DateTime64 のサポート #50797 (Jordi Villar)。
- 非 const なタイムゾーン向けの互換性設定を追加 #50834 (Robert Schulze).
- キャッシュエントリにおける LDAP パラメータのハッシュ処理を修正 #50865 (Julian Maicher)。
- Parquet フォーマットで、例外を投げるのではなく String から大きな整数値をパースするようフォールバック #50873 (Kruglov Pavel)。
- バックアップの書き込み中にロックファイルを過度にチェックしていた問題を修正 #50889 (Vitaly Baranov)。
- read-in-order が有効な場合は PROJECTION を適用しないようにしました。 #50923 (Nikolai Kochetov).
- Azure Blob Storage のイテレーターで発生するレースコンディションを修正 #50936 (SmitaRKulkarni).
CreatingSetsにおけるsort_descriptionの誤った伝播を修正 #50955 (Nikita Taranov)。- Iceberg v2 のオプションメタデータの解析処理を修正 #50974 (Kseniia Sumarokova)。
- MaterializedMySQL: 空のテーブルのオーバーライド時に括弧を保持するよう修正 #50977 (Val Doroshchuk).
- BackupCoordinationStageSync::setError() で発生するクラッシュを修正 #51012 (Vitaly Baranov)。
- ColumnLowCardinality Dictionary のコピーオンライト実装における微妙な不具合を修正しました #51064 (Michael Kolupaev).
- 安全な IV の生成 #51086 (Salvatore Mesoraca).
- 副問い合わせを含む SELECT 文に対するクエリキャッシュが正しく機能していなかった問題を修正 #51132 (Robert Schulze)。
- 定数 Nullable 比較を伴う Set 索引の問題を修正。 #51205 (Nikolai Kochetov).
- s3 および s3Cluster 関数で発生していたクラッシュを修正 #51209 (Nikolay Degterinsky)。
- コンパイル済み式により発生していたクラッシュを修正しました #51231(LiuNeng)。
- URL 切り替え時の StorageURL における use-after-free の不具合を修正 #51260 (Michael Kolupaev).
- パラメータ化ビューに対する検査を更新しました #51272 (SmitaRKulkarni).
- バックアップ時に同じファイルが複数回書き込まれる問題を修正 #51299 (Vitaly Baranov)。
- ActionsDAG の fuzzer エラーを修正 #51301 (Alexey Milovidov)。
- 関数
transformから不要な処理を削除する #51350 (Alexey Milovidov)。
ClickHouse 23.5 リリース(2023-06-08)
アップグレードに関する注意事項
- マークとプライマリキーをデフォルトで圧縮するようにしました。これによりコールドクエリの実行時間が大幅に短縮されます。アップグレードに関する注意事項: 圧縮マークおよび圧縮プライマリキーのサポートはバージョン 22.9 で追加されました。圧縮マークまたはプライマリキーを有効にした場合、または圧縮マークまたはプライマリキーがデフォルトで有効になっているバージョン 23.5 以降をインストールした場合、バージョン 22.8 以前へはダウングレードできません。サーバー設定ファイルの
<merge_tree>セクションでcompress_marksおよびcompress_primary_key設定を指定することで、圧縮マークまたはプライマリキーを明示的に無効化することもできます。アップグレードに関する注意事項: 22.9 より前のバージョンからアップグレードする場合は、すべてのレプリカを一度にアップグレードするか、アップグレード前に圧縮を無効化するか、あるいは圧縮マークがサポートされているもののデフォルトでは有効になっていない中間バージョン(23.3 など)を経由してアップグレードしてください。#42587(Alexey Milovidov)。 - ローカルオブジェクトストレージが S3 オブジェクトストレージと一貫した動作をするようにし、append(追記)処理の問題を修正しました(#48465 をクローズ)。また、ローカルオブジェクトストレージを独立したストレージとして設定可能にしました。この変更は後方互換性がありません。ローカルオブジェクトストレージ上のキャッシュが以前のバージョンと互換性がないためです。#48791(Kseniia Sumarokova)。
- 実験的機能 "in-memory data parts" を削除しました。データフォーマット自体は引き続きサポートされますが、対応する設定は no-op(何も行われない)となり、代わりに compact または wide のパーツが使用されます。これにより #45409 がクローズされます。#49429(Alexey Milovidov)。
parallelize_output_from_storagesおよびinput_format_parquet_preserve_order設定のデフォルト値を変更しました。これにより、ClickHouse はファイル(例: CSV や Parquet)から読み込む際に行を並べ替えることができ、多くの場合でパフォーマンスが大幅に向上します。従来どおり順序を保持する動作に戻すには、parallelize_output_from_storages = 0、input_format_parquet_preserve_order = 1を使用してください。#49479(Michael Kolupaev)。- PROJECTION を本番利用可能な状態にしました。
optimize_use_projections設定を追加し、SELECT クエリに対して PROJECTION を選択して使用するかどうかを制御できるようにしました。allow_experimental_projection_optimization設定は廃止され、何も行いません。#49719(Alexey Milovidov)。 joinGetを(dictGetと同様に)非決定的としてマークしました。これにより、追加の設定なしで mutation 内でそれらを使用できるようになります。#49843(Azat Khuzhin)。- "
groupArrayreturns cannot be nullable" の変更を元に戻しました(Nullable型に対するgroupArray/groupArrayLast/groupArraySampleのバイナリ互換性が壊れ、TOO_LARGE_ARRAY_SIZEやCANNOT_READ_ALL_DATAを引き起こす可能性があるためです)。#49971(Azat Khuzhin)。 enable_memory_bound_merging_of_aggregation_results設定をデフォルトで有効にしました。22.12 より前のバージョンからアップデートする場合は、アップデートが完了するまでこのフラグをfalseに設定しておくことを推奨します。#50319(Nikita Taranov)。
新機能
- ストレージエンジン AzureBlobStorage と azureBlobStorage テーブル関数を追加しました。サポートされる機能セットは、ストレージ/テーブル関数 S3 と非常によく似ています [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni).
- ネイティブの ClickHouse Keeper CLI クライアントを追加しました。
clickhouse keeper-clientとして利用できるようになりました #47414 (pufit)。 urlClusterテーブル関数を追加しました。すべての *Cluster 系テーブル関数をリファクタリングしてコードの重複を削減しました。あらゆる *Cluster 関数シグネチャおよび名前付きコレクションに対してスキーマ推論が機能するようにしました。#38499 をクローズしました。#45427(attack204)、Pavel Kruglov。- クエリキャッシュが本番ワークロードで使用可能になりました。 #47977 (Robert Schulze)。クエリキャッシュは totals および extremes 修飾子付きのクエリもサポートするようになりました。 #48853 (Robert Schulze)。後方互換性のため、
allow_experimental_query_cache設定は廃止扱いとなりました。この設定は https://github.com/ClickHouse/ClickHouse/pull/47977 で削除されています。 #49934 (Timur Solodovnikov)。 - 地理空間データ型(
Point、Ring、Polygon、MultiPolygon)が本番利用可能になりました。 #50022 (Alexey Milovidov)。 - PostgreSQL、MySQL、MeiliSearch、SQLite のテーブルエンジンにスキーマ推論を追加。#49972 をクローズ。 #50000 (Nikolay Degterinsky)。
CREATE USER u IDENTIFIED BY 'p'のようなクエリにおけるパスワードの種類は、サーバー上のconfig.xml内の設定default_password_typeに従って自動的に設定されます。 #42915 をクローズ。 #44674 (Nikolay Degterinsky)。- bcrypt パスワード認証方式を追加。 #34599 をクローズ。 #44905(Nikolay Degterinsky)。
- 新しいキーワード
INTO OUTFILE 'file.txt' APPENDが追加されました。 #48880 (alekar). - Keeper への接続に関する情報を表示する
system.zookeeper_connectionテーブルを追加しました。 #45245 (mateng915). - ランダムなテーブル構造を生成する新しい関数
generateRandomStructureを追加しました。テーブル関数generateRandomと組み合わせて使用できます。 #47409 (Kruglov Pavel)。 ELSEブランチなしでのCASEの使用を許可し、より多くの型を扱えるようにtransformを拡張しました。また、Decimal 型が他の数値型と混在している場合に transform() が誤った結果を返していたいくつかの問題を修正しました。 #48300 (Salvatore Mesoraca)。これにより #2655、#9596、#38666 がクローズされました。- S3 テーブル向けの KMS キーを使用したサーバーサイド暗号化 と、S3 ディスク向けの
header設定を追加しました。 #48723 をクローズしました。 #48724(Johann Gan)。 - バックグラウンドタスク(マージおよびミューテーション)向けの MemoryTracker を追加します。マージおよびミューテーションに対するソフトメモリ制限を表す
merges_mutations_memory_usage_soft_limitおよびmerges_mutations_memory_usage_to_ram_ratio設定を導入します。この制限に達すると、ClickHouse は新しいマージまたはミューテーションタスクをスケジュールしなくなります。また、バックグラウンドタスクの現在のメモリ使用量を観測できるようにするため、MergesMutationsMemoryTrackingメトリクスも導入します。#46089 を再提出。#48774 をクローズ。#48787(Dmitry Novik)。 - 関数
dotProductが配列に対して動作するようになりました。 #49050 (FFFFFFFHHHHHHH)。 - MySQL との互換性を高めるため、
SHOW INDEXステートメントをサポートしました。 #49158 (Robert Schulze). - テーブル関数
urlに仮想カラム_fileおよび_pathのサポートを追加。- テーブル関数urlのエラーメッセージを改善。- #49231 を解決。- #49232 を解決。 #49356(Ziyi Tan)。 users.xmlファイルにgrantsフィールドを追加し、ユーザーごとの権限を指定できるようにしました。 #49381 (pufit)。- Grace hash join アルゴリズムを使用することで full/right join をサポートしました。 #49483 (lgbo).
WITH FILL修飾子は、ソートプレフィックス単位での埋め値をまとめて処理します。use_with_fill_by_sorting_prefixSETTING によって制御されます(デフォルトで有効)。#33203#issuecomment-1418736794 に関連。#49503(Igor Nikonov)。- clickhouse-client は、"--query"(または "-q")が指定されていない場合に、"--multiquery" の後に続くクエリも受け付けるようになりました。例: clickhouse-client --multiquery "select 1; select 2;"。 #49870 (Alexey Gerasimchuk)。
- レプリカからの Hello パケット受信用の専用
handshake_timeoutを追加。 #48854 をクローズ。 #49948(Kruglov Pavel)。 - 指定した回数だけ空白を繰り返す関数「space」を追加しました。 #50103 (Robert Schulze)
--input_format_csv_trim_whitespacesオプションを追加しました。 #50215 (Alexey Gerasimchuk)。- 正規表現ツリー辞書に対する
dictGetAll関数で、複数のマッチに対応する値を配列として返せるようにしました。 #50254 をクローズ。 #50255(Johann Gan)。 - 日付または日時を直後の土曜日または日曜日に切り上げるための
toLastDayOfWeek関数を追加しました。 #50315 (Victor Krasnov) ignore_data_skipping_indicesを指定することでスキップインデックスを無視できる機能。#50329(Boris Kuschel)。- メモリ情報および ProfileEvents をユーザー単位で表示できるように、
system.user_processesテーブルとSHOW USER PROCESSESクエリを追加しました。 #50492 (János Benjamin Antal)。 - テーブル、データベース、テーブル関数、およびディクショナリのシークレットを表示できるようにするサーバー設定およびフォーマット設定
display_secrets_in_show_and_selectを追加しました。どのユーザーがシークレットを閲覧できるかを制御する権限displaySecretsInShowAndSelectも追加しました。#46528 (Mike Kot)。 - DATABASE 配下のすべてのテーブルに対して ROW POLICY を設定できるようになりました。 #47640 (Ilya Golshtein).
パフォーマンスの向上
- デフォルトでマークおよびプライマリキーを圧縮します。これにより、コールドクエリの実行時間が大幅に短縮されます。アップグレードに関する注意: マークおよびプライマリキーの圧縮サポートはバージョン 22.9 で追加されました。マークまたはプライマリキーの圧縮を有効にした場合、もしくはデフォルトでマークまたはプライマリキーの圧縮が有効になっているバージョン 23.5 以降をインストールした場合は、バージョン 22.8 以前へダウングレードすることはできません。また、サーバー設定ファイルの
<merge_tree>セクションでcompress_marksおよびcompress_primary_key設定を指定することで、マークまたはプライマリキーの圧縮を明示的に無効化することもできます。#42587(Alexey Milovidov)。 - 新しい
s3_max_inflight_parts_for_one_fileSETTING は、1 つのファイルに対するマルチパートアップロードリクエストで同時に処理されるパーツ数の上限を設定します。 #49961 (Sema Checherinda)。 - 複数ファイルから読み込む際に、各ファイルに対する並列パース用スレッド数を減らしました。 #42192 を解決します。 #46661(SmitaRKulkarni)。
- 通常の読み出しよりも少ない granule を読む場合にのみ、集約 PROJECTION を使用してください。これは、クエリがテーブルの PK にはヒットするが、PROJECTION にはヒットしない場合に有効です。#49150 を修正。#49417(Nikolai Kochetov)。
- 何も挿入されない場合は、
ANYハッシュ結合でブロックを保持しないようにしました。 #48633 (vdimir)。 - JIT コンパイル時における集約コンビネータ
-Ifの不具合を修正し、集約関数への JIT コンパイルを有効化しました。 #48120 をクローズします。 #49083(Igor Nikonov)。 - リモートテーブルからの読み取りでは、タスクスティーリングが有効に機能するよう、(パーツ全体を読むのではなく)より小さなタスクを使用します。タスクサイズは読み取るカラムのサイズによって決まり、S3 から読み取る際には常に 1MB のバッファを使用します。キャッシュセグメントの境界は 1MB にアラインされているため、小さなタスクでも十分な大きさを保てるほか、断片化も防止できるはずです。#49287(Nikita Taranov)。
- 次の設定を導入しました。- バックグラウンド処理で使用されるメモリ量を制限するための
merge_max_block_size_bytes。- 垂直マージを有効化するための追加条件を指定するvertical_merge_algorithm_min_bytes_to_activate。#49313(Nikita Mikhaylov)。 - ローカルファイルシステムから読み取る際の読み取りバッファのデフォルトサイズが、わずかにより適切な値に変更されました。また、新たに 2 つの設定
max_read_buffer_size_local_fsとmax_read_buffer_size_remote_fsが導入されました。 #49321 (Nikita Taranov)。 SPARSE_HASHED/HASHEDディクショナリのメモリ使用量と速度を改善しました(例:SPARSE_HASHEDはメモリ使用量を 2.6 分の 1 にし、約 2 倍高速になりました)。#49380 (Azat Khuzhin)。- 適切な場合に
LowCardinalityを適用してsystem.query_logおよびsystem.query_thread_logテーブルを最適化し、これらのテーブルに対するクエリをより高速にしました。 #49530 (Alexey Milovidov)。 - ローカルの
Parquetファイル読み取り時のパフォーマンスが向上しました(並列読み取りにより)。 #49539 (Michael Kolupaev). - 特定のシナリオ、特に小さい左テーブルと大きい右テーブルを結合する場合に、
RIGHT/FULL JOINのパフォーマンスを最大 2 倍向上させました。 #49585 (lgbo)。 - Rust に対して LTO を有効化することで BLAKE3 のパフォーマンスを 11% 向上させました。 #49600 (Azat Khuzhin)。これにより、C++ と同等の性能になりました。
system.opentelemetry_span_logの構造を最適化しました。適切な箇所ではLowCardinalityを使用するようにしました。このテーブルは全体としてあまり良い設計ではなく(よく使われる属性に対しても Map データ型を使用しています)、あまり賢い構造ではありませんが、以前よりはわずかに改善されます。#49647(Alexey Milovidov)。grace_hashjoin において、ハッシュテーブルのサイズを事前に確保するよう試みます。 #49816 (lgbo).uniqExactIf状態の並列マージ。 #49885 を解決。 #50285(flynn)。- Keeper の改良: Keeper に
CheckNotExistsリクエストを追加し、Replicated テーブルのパフォーマンスを向上させました。 #48897 (Antonio Andelic). - Keeper のパフォーマンス改善: 処理中に同じリクエストを 2 回シリアライズしないようにしました。大きなリクエストのデシリアライズ結果をキャッシュするようにしました。これは新しい coordination の設定
min_request_size_for_cacheによって制御されます。 #49004 (Antonio Andelic). - マージするパーツを選択する際、多数のパーティションにマージ対象がない場合の
ListZooKeeper リクエスト数を削減しました。 #49637 (Alexander Tokmakov)。 - FS キャッシュにおけるロック処理を再設計しました #44985 (Kseniia Sumarokova)。
- 単純な
countの最適化が可能な場合には、pure parallel replicas を無効化するようにしました。 #50594 (Raúl Marín). - Iceberg スキーマ推論時に、すべてのキーに対して HEAD リクエストを送信せず、データの読み取りに使用されるキーに対してのみ送信するようにしました。 #50203 (Kruglov Pavel).
enable_memory_bound_merging_of_aggregation_results設定がデフォルトで有効になりました。 #50319 (Nikita Taranov).
実験的機能
DEFLATE_QPLコーデックで必要な最小 SIMD バージョンを SSE 4.2 に引き下げました。qpl におけるドキュメント変更 - Intel® QPL は、ランタイムのカーネルディスパッチャおよび CPUID チェックに依存して、利用可能な中で最適な実装 (SSE/AVX2/AVX512) を選択します - ClickHouse における qpl ビルド用の CMake ファイルを再構成し、最新版の upstream qpl と整合させました。 #49811 (jasperzhu)。- 純粋な Parallel Replicas 構成で JOIN を実行するための初期サポートを追加しました。 #49544 (Raúl Marín)。
- 「zero-copy replication」を使用した
Outdatedパーツ削除処理の並列性を向上しました。 #49630 (Alexander Tokmakov)。 - Parallel Replicas: 1) 非レプリケートなストレージで
parallel_replicas_for_non_replicated_merge_tree設定が無効な状態で Parallel Replicas を使用した場合に発生していたエラーNOT_FOUND_COLUMN_IN_BLOCKを修正しました。2)allow_experimental_parallel_reading_from_replicasは 0, 1, 2 の 3 つの値を取るようになりました。0 - 無効、1 - 有効 (失敗時にはサイレントに無効化、FINAL や JOIN の場合)、2 - 有効 (失敗時には例外を送出)。3) SELECT クエリで FINAL 修飾子が使用され、かつ Parallel Replicas が有効な場合、allow_experimental_parallel_reading_from_replicasが 1 に設定されていれば ClickHouse は Parallel Replicas を無効化しようとし、それ以外の場合は例外を送出します。 #50195 (Nikita Mikhaylov)。 - Parallel Replicas が有効な場合、常に利用不可能なサーバーをスキップします (この挙動は設定
skip_unavailable_shardsにより制御され、デフォルトで有効であり、変更できるのは無効にする場合のみです)。これにより #48565 がクローズされました。 #50293 (Nikita Mikhaylov)。
改善点
BACKUPコマンドは、バックアップ作成時に暗号化ディスク上のデータを復号しません。代わりに、データはバックアップ内に暗号化された形式のまま保存されます。そのようなバックアップは、同一(またはそれを拡張した)暗号鍵のリストを持つ暗号化ディスクにのみ復元できます。 #48896 (Vitaly Baranov)。- ATTACH PARTITION FROM および REPLACE PARTITION FROM の FROM 句内で一時テーブルを使用できるようにしました。 #49436 (Roman Vasin).
MergeTreeテーブル向けにasync_insert設定を追加しました。これはクエリレベルの設定async_insertと同じ意味を持ち、特定のテーブルに対して非同期インサートを有効にします。注意:clickhouse-clientからの INSERT クエリには適用されないため、その場合はクエリレベルの設定を使用してください。 #49122 (Anton Popov).- QUOTA 作成ステートメントのパラメータでサイズサフィックスを指定できるようにしました。 #49087 (Eridanus).
first_valueとlast_valueが NULL を受け付けるように拡張しました。 #46467 (lgbo).extractKeyValuePairsに対するエイリアスstr_to_mapおよびmapFromStringを追加しました。 https://github.com/clickhouse/clickhouse/issues/47185 をクローズしました。 #49466 (flynn)。- メモリ使用量および空きメモリ量に関する非同期メトリクスとして、CGroup バージョン 2 のサポートを追加しました。これにより #37983 がクローズされました。 #45999 (sichenzhao)。
- Cluster テーブル関数は、利用不能な分片を常にスキップするようにしました。close #46314. #46765 (zk_kiger).
- CSV ファイルのヘッダーに空のカラム名を含められるようにしました。 #47496 (你不要过来啊)。
- Google Cloud Storage の S3 互換テーブル関数
gcsを追加しました。ossやcosn関数と同様に、s3テーブル関数へのエイリアスに過ぎず、新しい機能は追加されていません。 #47815 (Kuba Kaflik). - S3 に対して厳密なパーツサイズを使用できるようにしました(Cloudflare R2 S3 Storage との互換性)。 #48492 (Azat Khuzhin).
Replicatedデータベースのレプリカに関する情報を含む新しいカラムdatabase_shard_name、database_replica_name、is_activeをsystem.clustersに追加しました。SYSTEM DROP DATABASE REPLICAクエリにオプションのFROM SHARD句を追加しました。#48548(Alexander Tokmakov)。system.replicasに新しいカラムzookeeper_nameを追加し、レプリケーテッドテーブルのメタデータがどの(補助)ZooKeeper クラスターに保存されているかを示します。 #48549 (cangyin)。IN演算子がDateとDate32の比較をサポートするようになりました。 #48736 をクローズしました。 #48806 (flynn).HDFSにおけるイレイジャーコーディングのサポート、著者: @M1eyu2018, @tomscut. #48833 (M1eyu).- 補助 ZooKeeper クラスターに対する
SYSTEM DROP REPLICAを実装し、これにより #48931 がクローズされる可能性があります。 #48932(wangxiaobo)。 - MongoDB に Array データ型のサポートを追加しました。 #48598 をクローズしました。 #48983 (Nikolay Degterinsky)。
- テーブルに
Intervalデータ型を保存できるようにしました。 #49085 (larryluogit). - 明示的にウィンドウフレームを定義しなくても
ntileウィンドウ関数を使用できるようにしました:ntile(3) OVER (ORDER BY a)。#46763 をクローズしました。#49093(vdimir)。 - 多数の未完了のミューテーションを既に抱えているテーブルに対して、ミューテーション(
ALTER UPDATE、ALTER DELETE、ALTER MODIFY COLUMNなど)を生成するALTERクエリを遅延させたり、エラーとして失敗させたりできるnumber_of_mutations_to_delayとnumber_of_mutations_to_throwの設定を追加しました。 #49117 (Anton Popov). - ファイルシステムキャッシュでの
create_directoriesからの例外を捕捉するようにしました。 #49203 (Kseniia Sumarokova). - 埋め込みの例を、
descriptionフィールドを補足するために、system.functions内の新しいフィールドexampleにコピーします。 #49222 (Dan Roscigno). - MongoDB Dictionary 向けの接続オプションを有効化しました。例:
xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source>### ユーザー向け変更のドキュメントエントリ。#49225 (MikhailBurdukov). kolmogorovSmirnovTestの計算メソッドasympに対して、エイリアスasymptoticを追加しました。ドキュメントを改善しました。 #49286 (Nikita Mikhaylov).- 集約関数 groupBitAnd/Or/Xor が符号付き整数データでも動作するようになりました。これにより、スカラー関数 bitAnd/Or/Xor の動作との一貫性が保たれます。 #49292 (exmy).
- 関数ドキュメントを、より細かいフィールドに分割しました。 #49300 (Robert Schulze)。
- サーバー内のすべてのテーブルで共有される複数のスレッドを使用して、古くなったデータパーツをロードします。このスレッドプールおよびそのキューのサイズは、
max_outdated_parts_loading_thread_pool_sizeおよびoutdated_part_loading_thread_pool_queue_sizeの設定で制御されます。 #49317 (Nikita Mikhaylov)。 - ブロック間で辞書を共有している場合に、
LowCardinalityカラムの処理されたデータサイズを過大評価しないようにしました。これにより #49322 が解決しました。#48745 も参照してください。#49323(Alexey Milovidov)。 OUTFILE経由で使用された場合、Parquet writer は適切な row group サイズを使用するようになりました。 #49325 (Michael Kolupaev)。- エイリアスが引用符で囲まれている場合、
ARRAYのような制限付きキーワードをエイリアスとして使用できるようにしました。#49324 をクローズ。#49360(Nikolay Degterinsky)。 - データパーツのロードおよび削除ジョブは、テーブルレベルのプールではなく、サーバー全体で共有されるプールに移されました。プールのサイズは、トップレベルの設定
max_active_parts_loading_thread_pool_size、max_outdated_parts_loading_thread_pool_size、max_parts_cleaning_thread_pool_sizeによって制御されます。テーブルレベルの設定max_part_loading_threadsおよびmax_part_removal_threadsは廃止されました。 #49474 (Nikita Mikhaylov)。 - Play UI の URL で
?password=passを許可。ブラウザ履歴ではパスワードをマスクするようにしました。 #49505 (Mike Kot). - リモートファイルシステムからサイズがゼロのオブジェクトを読み取れるようにしました(空のファイルはバックアップ対象とならないため、メタデータファイル内の BLOB が 0 個になってしまう場合があります)。#49480 をクローズしました。 #49519(Kseniia Sumarokova)。
ThreadGroupがデタッチされた後に、スレッドの MemoryTracker をtotal_memory_trackerにアタッチします。 #49527 (Dmitry Novik).- クエリ内で同じクエリパラメータを複数回使用している場合に、パラメータ化ビューが正しく動作しない問題を修正しました。 #49556 (Azat Khuzhin).
- クエリコンテキストにおいて、最後に送信された ProfileEvents スナップショットに割り当てられたメモリを解放します。#47564 のフォローアップ。#49561(Dmitry Novik)。
- 関数 "makeDate" に、MySQL 互換のオーバーロード(year と day of the year を引数に取る)が追加されました。 #49603 (Robert Schulze).
RegExpTreeDictionaryに対するdictionaryテーブル関数をサポートしました。 #49666 (Han Fei).- 重み付き公平 IO スケジューリングポリシーを追加しました。サーバーを再起動することなく、実行時に IO スケジューリング階層を更新できる動的リソースマネージャーを追加しました。 #49671 (Sergei Trifonov)。
- GCS への multipart upload の後に compose リクエストを追加しました。これにより、multipart upload でアップロードされたオブジェクトに対して copy 操作を使用できるようになります。異なるサイズのパーツで作成されたオブジェクトでは compose リクエストが失敗する可能性があるため、
s3_strict_upload_part_sizeを適切な値に設定することを推奨します。 #49693 (Antonio Andelic)。 extractKeyValuePairs関数では、「ベストエフォート」のパースロジックを改善し、key_value_delimiterを値の有効な一部として受け付けるようにしました。これにより分岐が簡潔になり、わずかながら高速化も期待できます。 #49760 (Arthur Passos).- system.processors_profile_log に
initial_query_idフィールドを追加。 #49777 (helifu). - システムログテーブルにカスタムソートキーを設定できるようになりました。 #49778 (helifu).
system.query_logに、計算にどのパーティションが関与したかを示すための新しいフィールドpartitionsが追加されました。 #49779 (helifu).ReplicatedMergeTree用にenable_the_endpoint_id_with_zookeeper_name_prefix設定を追加しました(デフォルト無効)。有効化すると、テーブルのサーバー間通信エンドポイントに ZooKeeper クラスター名が追加されます。これにより、同じパスだが補助 ZooKeeper が異なるレプリケーションテーブルが存在する場合に発生するDuplicate interserver IO endpointエラーを回避できます。 #49780 (helifu)。clickhouse-localでクエリパラメータを利用可能にしました。 #46561 をクローズしました。 #49785(Nikolay Degterinsky)。- デフォルトで YAML ファイルから辞書と関数を読み込めるようにしました。以前のバージョンでは、
*.xmlファイルを前提としていたため、設定ファイル内のdictionaries_configまたはuser_defined_executable_functions_configを編集する必要がありました。 #49812 (Alexey Milovidov)。 - Kafka テーブルエンジンでエイリアスカラムを使用できるようになりました。 #49824 (Aleksandr Musorin).
extractKeyValuePairsによって生成されるペア数の上限を制限するための設定を追加しました。これはメモリの過剰使用を防ぐためのセーフガードです。 #49836 (Arthur Passos)。IN演算子の引数が単一要素のタプルであるという(珍しい)ケースをサポートしました。 #49844 (MikhailBurdukov).bitHammingDistance関数がStringおよびFixedStringデータ型をサポートするようになりました。#48827 をクローズしました。#49858(flynn)。- OS X 上のクライアントで発生していたタイムアウトリセットエラーを修正しました。 #49863 (alekar).
- 関数
bitCountで UInt128、Int128、UInt256、Int256 などの大きな整数型をサポートしました。これにより、AI アプリケーション向けに大きなビットマスクに対するハミング距離の計算が可能になります。 #49867 (Alexey Milovidov). - 暗号化ディスクでキー ID の代わりにフィンガープリントを使用できるようになりました。これにより、暗号化ディスクの設定が簡素化されます。 #49882 (Vitaly Baranov).
- PostgreSQL に UUID データ型を追加。#49739 をクローズ。#49894(Nikolay Degterinsky)。
- 関数
toUnixTimestampは、DateおよびDate32を引数として受け取れるようになりました。 #49989 (Victor Krasnov). - ディクショナリのメモリ使用量としてはサーバーメモリのみを計上するようにしました。 #49995 (Azat Khuzhin).
- サーバーでは、MySQL との互換性のために
SQL_AUTO_IS_NULLなどのSQL_*設定を no-op(何もしない操作)として扱えるようになります。これにより #49927 が解決されました。 #50013 (Alexey Milovidov)。 - ON CLUSTER クエリで initial_query_id を保持するようにし、内部解析に役立つようにしました(
distributed_ddl_entry_format_version=5のとき)。 #50015 (Azat Khuzhin). - 設定名変更時の後方互換性を維持するため、エイリアス(
optimize_use_projectionsに対するallow_experimental_projection_optimization、enable_lightweight_deleteに対するallow_experimental_lightweight_delete)を使用。 #50044 (Azat Khuzhin). - Keeper 内でクラスタノードを登録するために、
my_hostnameを設定して FQDN を渡せるようになりました。複数の compute group をサポートするためにinvisibleの SETTING を追加しました。クラスタとしての各 compute group は、他の compute group からは不可視になります。 #50186 (Yangkuan Liu). LIMIT nを指定できるにもかかわらず PostgreSQL がすべてのデータを読み込んでしまう問題を修正しました。 #50187 (Kseniia Sumarokova)。- サブクエリを含むクエリ用の新しいプロファイルイベント(
QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries)を追加しました。#50204(Azat Khuzhin)。 - users.xml ファイルに roles フィールドを追加し、設定ファイル経由で付与するロールを指定できるようにしました。 #50278 (pufit).
- AsynchronousMetrics で
CGroupCpuCfsPeriodとCGroupCpuCfsQuotaをレポートするようにしました。- サーバー起動時に cgroup v2 のメモリ制限を考慮するようにしました。#50379 (alekar). - SIGQUIT 用のシグナルハンドラーを追加し、SIGINT と同様に動作するようにしました。 #50298 をクローズしました。 #50435 (Nikolay Degterinsky)。
- JSON のパースがオブジェクト出力のサイズが大きすぎるために失敗した場合、デバッグできるように処理した最後の位置を出力するようにしました。 #50474 (Valentin Alexeev).
- 固定サイズではない Decimal 型をサポートしました。#49130 をクローズしました。#50586 (Kruglov Pavel)。
ビルド/テスト/パッケージングの改善
- 新しく改良された
keeper-bench。すべてを YAML/XML ファイルからカスタマイズ可能です。- リクエストジェネレータ - 各種リクエストジェネレータごとに特有のフィールドセットを持たせることができる -multiキーの下で同じ定義を行うだけでマルチリクエストを生成できる -multi内の各リクエストまたはサブリクエストには、分布を制御するためのweightフィールドを定義できる - テスト実行のためにセットアップが必要なツリーを定義できる - ホストは、すべてのタイムアウトをカスタマイズ可能な形で定義でき、各ホストごとに生成するセッション数も制御可能 -min_valueおよびmax_valueフィールドで定義された整数は乱数を生成する。#48547(Antonio Andelic)。 - Io_uring は macOS ではサポートされていないため、ローカルでテストを実行する際には選択しないでください。テストがまれに失敗するのを防ぐためです。 #49250 (Frank Chen).
- テスト用に名前付きフォールトインジェクションをサポートしました。 #49361 (Han Fei).
prctl(プロセス制御)システムコールが利用できない OS(AWS Lambda など)上でも ClickHouse を実行できるようにしました。 #49538 (Alexey Milovidov)。- qpl における contrib/isa-l と isa-l 間のビルド時の競合問題を修正しました 49296。#49584(jasperzhu)。
- ユーティリティはデフォルトではビルドされず、明示的に
-DENABLE_UTILS=1を指定した場合にのみビルドされるようになりました。これにより、一般的な開発ビルドでのリンク時間が短縮されます。 #49620 (Robert Schulze)。 - 将来誤って削除されるのを防ぐため、idxd-config のビルド設定を別の CMake ファイルに分離しました。 #49651 (jasperzhu).
- master ブランチでアナライザーを有効にした CI チェックを追加。フォローアップ #49562。#49668(Dmitry Novik)。
- LLVM/clang 16 へ切り替え。 #49678 (Azat Khuzhin)。
- clang-17 を使って ClickHouse をビルドできるようにしました。 #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
- ClickHouse は、他の CMake プロジェクトに統合しやすくなりました。 #49991 (Amos Bird)。(ただし、これは強く非推奨です ― Alexey Milovidov)
- #47151 以降に発生した不自然な余分の QEMU ログ出力を修正。詳しくは https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless_tests__release__databasereplicated__[3_4].html を参照。 #50442 (Mikhail f. Shiryaev)。
- ClickHouse は Linux RISC-V 6.1.22 上で動作するようになりました。これにより #50456 がクローズされました。#50457(Alexey Milovidov)。
- 内部で使用している protobuf を v3.18 に更新しました(誤検知とされていた CVE-2022-1941 を修正)。#50400(Robert Schulze)。
- 内部で使用している libxml2 を v2.10.4 に更新しました(誤って報告されていた CVE-2023-28484 および CVE-2023-29469 を解消)。 #50402 (Robert Schulze).
- c-ares を v1.19.1 に更新 (誤検知とされる CVE-2023-32067、CVE-2023-31130、CVE-2023-31147)。 #50403 (Robert Schulze).
- libgsasl に対して誤って報告されていた CVE-2022-2469 を修正。 #50404 (Robert Schulze)。
バグ修正(公式安定版でのユーザー影響のある不具合)
- ActionsDAG: 誤った最適化を修正 #47584 (Salvatore Mesoraca)。
- Keeper における同時スナップショットの処理を正しく行うように修正 #48466 (Antonio Andelic).
- MergeTreeMarksLoader が DataPartStorage ではなく DataPart を保持するようになりました #48515 (SmitaRKulkarni).
- シーケンス状態を修正 #48603 (Ilya Golshtein).
- Backup/Restore の同時実行チェックが、以前の失敗時に正しく動作しない問題を修正 #48726 (SmitaRKulkarni)。
- 存在しない ZK パスを持つテーブルをアタッチしても ReadonlyReplica メトリックが増加しない問題を修正 #48954 (wangxiaobo).
- 一部の箇所で、捕捉されない例外に対して
terminateが呼び出される可能性のある問題を修正。 #49112 (Kruglov Pavel)。 - 複数の StorageJoin を含むクエリで発生する key が見つからないエラーを修正しました #49137 (vdimir)。
- Nullable な primary key 使用時に誤ったクエリ結果が返される問題を修正 #49172 (Duc Canh Le)。
- ビッグエンディアンマシン上での reinterpretAs*() の動作を修正 #49198 (Suzy Wang)。
- (実験的なゼロコピー レプリケーション) ゼロコピー パーツのロックをよりアトミックにする #49211 (alesapin).
- Outdated パーツのロード時に発生するレースコンディションを修正 #49223 (Alexander Tokmakov).
- すべてのキーの値が NULL の場合に
GROUP BYとWITH ROLLUPを使用すると誤った結果が返される不具合を修正しました #49282 (Shuai li)。 - SHARDS 使用時の HASHED 辞書における load_factor の計算を修正しました #49319 (Azat Khuzhin)。
- エイリアスカラムに圧縮CODECを設定できないようにしました #49363 (Timur Solodovnikov).
- 既存のパーツディレクトリ削除時のバグを修正しました #49365 (alesapin)。
- HMAC 使用時の GCS の問題を適切に修正 #49390 (Antonio Andelic).
- remote() からの読み取り時にサブクエリの Set が構築されない fuzz テスト由来のバグを修正 #49425(Alexander Gololobov)。
shutdown_wait_unfinished_queriesを反転しました #49427 (Konstantin Bogdanov).- (実験的なゼロコピー レプリケーション)別のゼロコピーに関するバグを修正 #49473(alesapin)。
- PostgreSQL データベースの設定を修正 #49481 (Mal Curtis)。
s3Clusterの引数を正しく処理するよう修正しました #49490 (Antonio Andelic).- TraceCollector のデストラクタのバグを修正。 #49508 (Yakov Olkhovskiy).
- 短いシークで不具合が発生していた AsynchronousReadIndirectBufferFromRemoteFS を修正 #49525 (Michael Kolupaev)。
- 辞書の読み込み順序を修正 #49560(Alexander Tokmakov)。
- Object('json') 型カラムのデータ型変更を禁止 #49563 (Nikolay Degterinsky)。
- ストレステストの修正 (Logical error: Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
- DISTINCT の不具合を修正 #49628(Alexey Milovidov)。
- Fix: ソート対象外のカラムに 0 値が含まれる場合の DISTINCT と並び順の不具合を修正 #49636 (Igor Nikonov).
- fuzzer と UBSan で検出された大整数におけるオフバイワンエラーを修正 #49645 (Alexey Milovidov)。
- 再起動後にスパースカラムから読み取れない問題を修正 #49660 (Anton Popov)。
- fibers 使用時に
SpanHolder::finish()内のアサートを修正 #49673 (Kruglov Pavel)。 - スパースな引数を取るショートサーキット関数およびミューテーションを修正 #49716 (Anton Popov).
- インクリメンタルバックアップに追記されるファイルの書き込みを修正 #49725(Vitaly Baranov)。
- Object 型カラムを持つテーブルで論理削除の mutation を実行した際に発生する "There is no physical column _row_exists in table" エラーを修正しました。 #49737 (Alexander Gololobov).
- randomStringUTF8(奇数の場合)における msan の問題を修正 #49750 (Robert Schulze).
- 集約関数 kolmogorovSmirnovTest の不具合を修正しました #49768 (FFFFFFFHHHHHHH).
- ネイティブプロトコルの settings エイリアスを修正 #49776 (Azat Khuzhin)。
- 単一要素タプルの配列に対する
arrayMapの不具合を修正 #49789 (Anton Popov). - クエリ単位の IO/BACKUP スロットリング設定を修正しました #49797 (Azat Khuzhin).
- プロファイル定義で NULL を設定できない問題を修正 #49831 (Vitaly Baranov).
- プロジェクションおよび
aggregate_functions_null_for_empty設定(query_plan_optimize_projection用)に関するバグを修正しました #49873 (Amos Bird). - 再起動後に Distributed async INSERT で保留状態となっていたバッチの処理を修正 #49884 (Azat Khuzhin)。
- CacheMetadata::doCleanup のアサーションを修正 #49914 (Kseniia Sumarokova)。
- OptimizeRegularExpression における
is_prefixの不具合を修正 #49919 (Han Fei)。 - メトリクス
WriteBufferFromS3Bytes、WriteBufferFromS3Microseconds、WriteBufferFromS3RequestsErrorsを修正 #49930 (Aleksandr Musorin)。 - protobuf での IPv6 のエンコードを修正 #49933(Yakov Olkhovskiy)。
- テキスト形式における Nullable の不正なパースで発生しうる論理エラーを修正しました #49960 (Kruglov Pavel)。
- より互換性の高い Parquet ファイルを生成できるように、
output_format_parquet_compliant_nested_types設定を追加しました #50001(Michael Kolupaev)。 - 負荷テスト「Not enough space to add ...」における論理エラーを修正 #50021 (Kseniia Sumarokova)。
ReplicatedMergeTreeの attach スレッドでテーブルを起動する際に発生するデッドロックを回避 #50026 (Antonio Andelic)。- fibers 利用時の SpanHolder::finish() のアサートを修正 (2 回目の試行) #50034 (Kruglov Pavel)。
- DDL の OpenTelemetry コンテキストのシリアライゼーションに対して適切なエスケープ処理を追加。#50045 (Azat Khuzhin)。
- 破損した PROJECTION パーツの報告処理を修正しました #50052 (Amos Bird).
- JIT コンパイルにおける NaN との不等比較の不具合を修正 #50056 (Maksim Kita)。
- 引数を指定しない Replicated データベース使用時に発生するクラッシュを修正 #50058 (Azat Khuzhin)。
- 定数条件と Nullable 引数を取る
multiIfで発生していたクラッシュを修正 #50123 (Anton Popov)。 - 日付関連のキーに対する不正なインデックス解析を修正 #50153 (Amos Bird)。
- ORDER BY 列が定義されていない場合は、ORDER BY の変更を許可しないようにしました #50154 (Han Fei).
NULL定数引数を含む 2 項演算子に対する索引解析が壊れていた問題を修正しました #50177 (Amos Bird).- clickhouse-client:
--queryと--queries-fileを同時に使用できないようにしました #50210 (Alexey Gerasimchuk). - INTO OUTFILE 拡張機能(APPEND および STDOUT)および WATCH EVENTS における未定義動作(UB)を修正 #50216 (Azat Khuzhin)。
- CustomSeparatedIgnoreSpaces フォーマットにおいて行末のスペースがスキップされる不具合を修正 #50224 (Kruglov Pavel)。
- Iceberg メタデータの解析を修正 #50232 (Kseniia Sumarokova)。
- WITH 句内のネストされた Distributed SELECT を修正 #50234 (Azat Khuzhin)。
- keyed SipHash での MSan の問題を修正 #50245 (Robert Schulze)。
- ノンブロッキングモードにおける Poco ソケットのバグを修正し、実際のノンブロッキングソケットを使用するようにしました #50252 (Kruglov Pavel)。
- バックアップエントリのチェックサム計算を修正 #50264 (Vitaly Baranov)。
- 比較関数での NaN の扱いを修正 #50287 (Maksim Kita)。
- JIT 集約における Nullable キーの不具合を修正 #50291 (Maksim Kita).
- 空の Arrow または Parquet 出力を書き込もうとすると clickhouse-local がクラッシュする問題を修正 #50328 (Michael Kolupaev).
- Pool::Entry::disconnect() 呼び出し時にクラッシュが発生する問題を修正 #50334 (Val Doroshchuk)。
- ディレクトリロックをより長く保持することで、パーツのフェッチ処理を改善しました #50339 (SmitaRKulkarni)。
- 両方の引数が定数である bitShift* 関数を修正 #50343 (Kruglov Pavel)。
- リクエスト前処理中に例外が発生した場合に Keeper がデッドロックする問題を修正。 #50387 (frinkr)。
- 定数の整数値に対するハッシュ計算を修正 #50421 (Robert Schulze)。
- データスキッピングインデックスにおける
merge_tree_min_rows_for_seekおよびmerge_tree_min_bytes_for_seekの挙動を修正 #50432 (Azat Khuzhin)。 - 古いパーツを読み込む際の進行中タスク数を制限するようにしました #50450 (Nikita Mikhaylov)。
- Keeper の修正: スナップショットのインストール後に未コミット状態を適用 #50483 (Antonio Andelic).
- 誤った定数畳み込みを修正 #50536 (Alexey Milovidov).
- ストレステストでの論理エラーを修正(Not enough space to add ...) #50583 (Kseniia Sumarokova)。
- values テーブル関数における Null から LowCardinality(Nullable) への変換を修正 #50637 (Kruglov Pavel)。
- 誤った RegExpTreeDictionary の最適化を元に戻しました #50642 (Johann Gan)。
ClickHouse リリース 23.4、2023-04-26
後方互換性のない変更
- 関数
formatDateTime()のフォーマッタ%Mは、分ではなく月名を出力するようになりました。これにより、MySQL と動作が一致します。以前の動作は、設定"formatdatetime_parsedatetime_m_is_month_name = 0"を使用することで復元できます。 #47246 (Robert Schulze). - この変更は、仮想ファイルシステムキャッシュを使用している場合にのみ関係します。仮想ファイルシステムキャッシュ設定の
pathが空でなく、かつ絶対パスでない場合、それは<clickhouse server data directory>/caches/<path_from_cache_config>の下に配置されます。 #48784 (Kseniia Sumarokova). - 同一の式を持つプライマリ/セカンダリインデックスおよびソートキーは、現在は拒否されます。この動作は、設定
allow_suspicious_indicesを使用して無効化できます。 #48536 (凌涛).
新機能
- Spark の approx_percentile と同様の新しい集約関数
quantileGK/quantilesGKのサポートを追加。Greenwald-Khanna アルゴリズムについては http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf を参照。 #46428 (李扬)。 system.columnsテーブルから要約された情報を表示するSHOW COLUMNSステートメントを追加しました。 #48017 (Robert Schulze)。SYSTEM SYNC REPLICAクエリにLIGHTWEIGHTおよびPULL修飾子を追加しました。LIGHTWEIGHTバージョンはフェッチ処理とドロップレンジ操作のみを待機し(マージおよびミューテーションは無視されます)、PULLバージョンは ZooKeeper から新しいエントリを取得しますが、その完了を待機しません。#47794 を修正しました。#48085(Alexander Tokmakov)。kafkaMurmurHash関数を追加し、Kafka の DefaultPartitioner と互換性を持たせました。 #47834 をクローズ。 #48185(Nikolay Degterinsky)。GRANT CURRENT GRANTSを使用して、現在のユーザーと同じ権限を持つユーザーを簡単に作成できるようにしました。 #48262 (pufit)。- 統計的集約関数
kolmogorovSmirnovTestを追加。 #48228 をクローズ。 #48325(FFFFFFFHHHHHHH)。 system.replicasテーブルにlost_part_countカラムを追加しました。カラムの値は、対応するテーブルでロストしたパーツの総数を示します。この値は zookeeper に保存され、永続的でないReplicatedDataLossプロファイルイベントの代わりに監視用途で使用できます。 #48526 (Sergei Trifonov)。- 互換性確保のために
soundex関数を追加しました。#39880 をクローズしました。#48567(FriendLey)。 - JSONExtract で
Map型をサポートしました。 #48629 (李扬) - 改行区切りと 4 スペースインデントで見やすい JSON を出力するための
PrettyJSONEachRowフォーマットを追加しました。 #48898 (Kruglov Pavel). - Parquet ファイルのメタデータを読み取るための
ParquetMetadata入力フォーマットを追加しました。 #48911 (Kruglov Pavel). - 文字列からキーと値のペアを抽出するための
extractKeyValuePairs関数を追加しました。入力文字列にはノイズを含んでいても構いません(例: ログファイル / キー・バリュー形式で 100% 整形されている必要はありません)。アルゴリズムは、関数に渡された引数に一致するキーと値のペアを検出します。現時点では、この関数は次の引数を受け付けます:data_column(必須)、key_value_pair_delimiter(デフォルトは:)、pair_delimiters(デフォルトは\space \, \;)、およびquoting_character(デフォルトはダブルクォート)。 #43606 (Arthur Passos)。 - 関数 replaceOne()、replaceAll()、replaceRegexpOne()、replaceRegexpAll() は、定数でないパターンおよび置換の各引数でも呼び出せるようになりました。 #46589 (Robert Schulze)。
Map型カラムを扱うための関数mapConcat、mapSort、mapExistsを追加しました。 #48071 (Anton Popov)。
パフォーマンスの改善
Parquetフォーマットでのファイル読み取りが大幅に高速化されました。IO とデコードが並列化され(max_threads設定で制御)、必要なデータ範囲のみを読み取ります。#47964 (Michael Kolupaev).- 次のような IN 句(サブクエリ付き)を伴う mutation を実行する場合:
ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table)、テーブルtに複数のパーツがあると、各パーツごとにサブクエリSELECT id FROM huge_table用の set がメモリ上に構築されます。パーツが多いと、大量のメモリ(OOM に至る可能性も含む)と CPU を消費する場合があります。この問題への対応として、mutation タスクによって現在構築中の set の短命キャッシュを導入しました。同じ mutation の別タスクが同時に実行される場合、キャッシュ内の set を検索し、その構築完了を待って再利用できます。#46835 (Alexander Gololobov). ALTER TABLEクエリを適用する際、必要な場合にのみ依存関係をチェックするようにしました。#48062 (Raúl Marín).- 関数
mapUpdateを最適化しました。#48118 (Anton Popov). - ローカルレプリカへの内部クエリは明示的に送信され、そのデータは loopback インターフェイス経由で受信されるようになりました。
prefer_localhost_replica設定は parallel replicas には適用されません。これはより良いスケジューリングのために必要であり、コードもよりクリーンになります。イニシエータは読み取りプロセスの調整と結果のマージのみを担当し、すべてのセカンダリクエリがデータを読み取っている間、リクエストに継続的に応答します。注意: loopback インターフェイスの使用自体はそれほど高性能ではありませんが、これがないと一部のレプリカがタスクを割り当てられずに飢餓状態となり、クエリ実行がさらに遅くなり、利用可能なリソースを使い切れない可能性があります。コーディネータの初期化は、これまで以上に遅延されるようになりました。すべての受信リクエストには読み取りアルゴリズムに関する情報が含まれており、最初のリクエスト到着時にその情報を用いてコーディネータを初期化します。いずれかのレプリカが異なるアルゴリズムで読み取ろうとした場合、例外がスローされ、クエリは中止されます。#48246 (Nikita Mikhaylov). - スキップ索引が
use_skip_indexes=0設定により無効化されている場合、スキップ索引の解析にのみ使用されるIN句右辺のサブクエリ用 set を構築しないようにしました。以前は、これによりクエリのパフォーマンスが悪化する可能性がありました。#48299 (Anton Popov). FROM file(...)からの読み取り直後にクエリ処理を並列化するようにしました。#38755 に関連します。#48525 (Igor Nikonov). クエリ処理は、任意のデータソースからの読み取り直後に並列化されるようになりました。対象となるデータソースは、主にテーブル関数urlやfileのような単純または外部ストレージです。#48727 (Igor Nikonov). これはデフォルトでは有効になっていないparallelize_output_from_storages設定によって制御されます。- ThreadPool のミューテックス競合を軽減しました(大量の小さなジョブがある場合にパフォーマンスが向上する可能性があります)。#48750 (Sergei Trifonov).
- 複数の
ALTER DELETEmutation におけるメモリ使用量を削減しました。#48522 (Nikolai Kochetov). skip_unavailable_shards設定が有効になっている場合、余分な接続試行を行わないようにしました。#48771 (Azat Khuzhin).
実験的機能
- クエリキャッシュ内のエントリが
max_block_sizeに揃えられ、圧縮されるようになりました。 #45912 (Robert Schulze). - クエリキャッシュで USER ごとの QUOTA を定義できるようになりました。 #48284 (Robert Schulze).
- 並列レプリカに対するいくつかの修正を行いました。 #48433 (Nikita Mikhaylov).
- 暗号化ディスク上での zero-copy-replication(実験的機能)を実装しました。 #48741 (Vitaly Baranov).
改善
connect_timeout_with_failover_msのデフォルト値を 1000 ms に引き上げました(https://github.com/ClickHouse/ClickHouse/pull/47229 で非同期接続を追加したため)。#5188 をクローズします。#49009(Kruglov Pavel)。- データレイク周りにいくつかの改善を行いました: -
Icebergが非パーティション化されたデータでも動作するようにしました。-Icebergフォーマットバージョン v2 をサポートしました(以前は v1 のみサポート)。-DeltaLake/Hudiのパーティションデータの読み取りをサポートしました。- Delta のチェックポイントファイルを使用することで、DeltaLakeメタデータの読み取りを高速化しました。- 誤ったHudiの読み取り動作を修正しました:以前は読み取るデータの選択を誤っていたため、小さなテーブルのみ正しく読み取ることができていました。- これらのエンジンが、変更されたデータの更新を取り込めるようにしました(以前はテーブル作成時の状態に固定されていました)。- Spark を使用してIceberg/DeltaLake/Hudiの適切なテストを行いました。#47307 (Kseniia Sumarokova). - ソケットへの非同期接続およびソケットへの非同期書き込みを追加しました。分片全体にわたり、接続の確立およびクエリ/外部テーブルの送信を非同期化しました。コードをfibersを用いるようにリファクタリングしました。#46931 をクローズします。この PR により、デフォルトの
connect_timeout_with_failover_msを増やすことが可能になります(https://github.com/ClickHouse/ClickHouse/issues/5188)。#47229(Kruglov Pavel)。 zookeeperの代替として、設定セクションkeeperおよびkeeper_serverをサポートしました。#34766 および #34767 をクローズしました。#35113(李扬)。- ClickHouse テーブルをソースとする Dictionary に対して、named_collections で secure フラグを設定できるようになりました。#38450 を解決。#46323 (Ilya Golshtein)。
bitCount関数がFixedStringおよびStringデータ型をサポートするようになりました。 #49044 (flynn).- Backup クエリで [Zoo]Keeper を使用するすべての操作に対して、リトライ回数を設定可能にしました。 #47224 (Nikita Mikhaylov).
- デフォルトで S3 に対して
use_environment_credentialsを有効化し、プロバイダーチェーン全体が自動的に構築されるようにしました。 #47397 (Antonio Andelic)。 - 現在、
JSON_VALUE関数は Spark のget_json_object関数と似ており、'$.key'のようなパスを使って JSON 文字列から値を取得できます。ただし、いくつかの違いがあります。- 1. Spark のget_json_objectではパスが存在しない場合はnullを返しますが、JSON_VALUEでは空文字列を返します。- 2. Spark のget_json_objectでは JSON オブジェクトや配列値などの複合型の値を返すことがありますが、JSON_VALUEではその場合も空文字列を返します。 #47494 (KevinyhZou). use_structure_from_insertion_table_in_table_functionsにより、挿入元テーブルの構造をテーブル関数へ伝播させる挙動がより柔軟になりました。名前のマッピングと仮想カラムの使用に関する問題を修正しました。'auto' 設定を使用する必要はなくなりました。 #47962 (Yakov Olkhovskiy).- クエリが強制終了された場合や制限を超過した場合は、Keeper への接続を再試行し続けないようにしました。 #47985 (Raúl Marín).
BSONEachRowで Enum 型の入出力をサポートし、すべてのマップのキー型を許可し、出力時の不要な計算を回避しました。 #48122 (Kruglov Pavel)ORC/Arrow/Parquetフォーマットでより多くの ClickHouse のデータ型をサポート:Enum(8|16)、(U)Int(128|256)、Decimal256(ORC 用)、Int32 値からの IPv4 の読み取りを許可(ORC は IPv4 を Int32 として出力しており、これまで再読み込みできなかった)、ORCでバイナリデータから Nullable(IPv6) を読み取る処理を修正。#48126(Kruglov Pavel)。- テーブル
system.storage_policiesにカラムperform_ttl_move_on_insert、load_balancingを追加し、カラムvolume_typeの型をEnum8に変更。 #48167 (lizhuoyu5). - 一時テーブルやシステムテーブルを含むすべてのテーブルおよびデータベースをバックアップする
BACKUP ALLコマンドをサポートしました。 #48189 (Vitaly Baranov). - 関数 mapFromArrays は入力として
Map型をサポートするようになりました。 #48207 (李扬). - 一部の
SHOW PROCESSLISTの出力結果がソートされるようになりました。 #48241 (Robert Schulze)。 - リモート IO/ローカル IO/BACKUP に対するクエリ単位/サーバー単位の帯域制限(サーバー設定:
max_remote_read_network_bandwidth_for_server,max_remote_write_network_bandwidth_for_server,max_local_read_bandwidth_for_server,max_local_write_bandwidth_for_server,max_backup_bandwidth_for_server、設定:max_remote_read_network_bandwidth,max_remote_write_network_bandwidth,max_local_read_bandwidth,max_local_write_bandwidth,max_backup_bandwidth)。 #48242 (Azat Khuzhin)。 CapnProtoフォーマットで対応する型を拡張しました: Map、(U)Int(128|256)、Decimal(128|256)。入出力時の整数の相互変換を可能にしました。 #48257 (Kruglov Pavel)。- 通常の動作では CURRENT_WRITE_BUFFER_IS_EXHAUSTED 例外をスローしないようにしました。 #48288 (Raúl Marín).
KeeperMapテーブル上で行われる操作に対して追加の保証を強制する新しい SETTINGkeeper_map_strict_modeを追加しました。 #48293 (Antonio Andelic)。- 単純な Dictionary の主キーがネイティブの符号なし整数型かどうかをチェックするようにしました。互換性のために SETTING
check_dictionary_primary_keyを追加しました(チェックを無効化するにはcheck_dictionary_primary_key = falseを設定してください)。 #48335 (lizhuoyu5). KeeperMapに対するミューテーションを、不要なためレプリケートしないようにしました。 #48354 (Antonio Andelic).- Protobuf 形式で、無名タプルをネストされた Message として読み書きできるようにしました。タプル要素と Message フィールドは、位置によって対応付けられます。 #48390 (Kruglov Pavel).
- 新しいプランナーで
additional_table_filtersとadditional_result_filterの各設定をサポートしました。また、additional_result_filterに関するドキュメントを追加しました。 #48405 (Dmitry Novik)。 parseDateTimeがフォーマット文字列 '%f'(秒の小数部)に対応しました。 #48420 (Robert Schulze).- formatDateTime() において、フォーマット文字列 "%f" は、フォーマットされた値に小数秒部分が含まれない場合に "000000" を出力するようになりました。以前の動作(ゼロ1文字)は、設定 "formatdatetime_f_prints_single_zero = 1" を使用することで復元できます。 #48422 (Robert Schulze).
- KeeperMap に対する DELETE および TRUNCATE のレプリケーションを行わないようにしました。 #48434 (Antonio Andelic).
- generateRandom 関数で有効な Decimal 型および Bool 型の値を生成できるようにしました。 #48436 (Kruglov Pavel).
SELECT a, b, c, FROM tableのように、SELECT クエリの式リストで末尾のカンマを許可しました。 #37802 をクローズしました。 #48438(Nikolay Degterinsky)。- クライアントパラメータ
--userおよび--passwordが、環境変数CLICKHOUSE_USERおよびCLICKHOUSE_PASSWORDを上書きするようにしました。 #38909 をクローズ。#48440 (Nikolay Degterinsky)。 MergeTreeテーブルにおけるパーツの読み込み処理に、リトライ可能なエラー発生時の再試行を追加しました。 #48442 (Anton Popov).arrayMin,arrayMax,arrayDifference関数にDate,Date32,DateTime,DateTime64データ型のサポートを追加しました。これにより #21645 がクローズされました。 #48445 (Nikolay Degterinsky)。{server_uuid}マクロのサポートを追加しました。これは、ランタイム時に新しいレプリカが次々に追加・削除されるオートスケールクラスターでレプリカを識別する際に役立ちます。これにより #48554 が解決されます。 #48563(Alexey Milovidov)。- インストールスクリプトは、可能な場合にはコピーではなくハードリンクを作成します。 #48578 (Alexey Milovidov)。
SHOW CREATE TABLEと同等の意味を持つSHOW TABLE構文をサポートしました。 #48580 をクローズしました。 #48591(flynn)。- HTTP 一時バッファが、仮想ファイルシステムキャッシュからデータを追い出すことで動作できるようになりました。 #48664 (Vladimir C).
CREATE AS SELECTに対してスキーマの自動推論が行われるようにしました。 #47599 をクローズしました。 #48679(flynn)。ReplicatedMergeTree用にreplicated_max_mutations_in_one_entrySETTING を追加しました。これにより、1 つのMUTATE_PARTエントリあたりの mutation コマンド数に上限を設けることができます(デフォルトは 10000)。#48731(Alexander Tokmakov)。- AggregateFunction 型において、未使用の arena バイトを
read_bytesとしてカウントしないようにしました。 #48745 (Raúl Marín)。 - MySQL 辞書ソースおよび名前付きコレクション使用時に、一部の MySQL 関連設定が正しく処理されない問題を修正。 #48402 をクローズ。 #48759(Kseniia Sumarokova)。
- ユーザーが
max_single_part_upload_sizeを非常に大きな値に設定すると、AWS S3 SDK のバグによりクラッシュが発生しうる問題がありました。これにより #47679 が修正されました。 #48816(Alexey Milovidov)。 RabbitMQのデータレースを修正し(report)、コードをリファクタリングしました。 #48845(Kseniia Sumarokova)。system.partsおよびsystem.part_logにnameとpart_nameのエイリアスを追加しました。 #48718 をクローズ。 #48850(sichenzhao)。- 関数 "arrayDifferenceSupport()"、"arrayCumSum()" および "arrayCumSumNonNegative()" で、ワイド整数型 (U)Int128/256 の入力配列がサポートされるようになりました。 #48866 (cluster)。
- clickhouse-client の複数行履歴に余分なパディングが入らなくなりました。これにより、貼り付けがより自然になります。 #48870 (Joanna Hulboj)。
- ClickHouse を LXC 内で実行し、かつ LXCFS を使用しているというまれなケースに対して、軽微な改善を行いました。LXCFS には、
/proc内のファイルを読み取る際に、時々「Transport endpoint is not connected」というエラーを返すという問題があります。このエラーは、これまでどおり正しく ClickHouse のサーバーログに記録されます。さらに、この問題を回避するために、ファイルを再度オープンするワークアラウンドを追加しました。これはごく小さな変更です。 #48922 (Real)。 - プリフェッチのメモリ使用量の計測を改善。CI でプリフェッチ設定をランダム化。 #48973 (Kseniia Sumarokova).
- GCS 上のネイティブコピー操作でヘッダーを正しく設定するようにしました。 #48981 (Antonio Andelic).
- コマンドラインで設定名を指定する際に、
--max_threadsの代わりに--max-threadsのように、アンダースコアではなくダッシュを使用できるようにしました。さらに、--の代わりに—のような Unicode のダッシュ文字もサポートしました。これは、他社のチームとやり取りしていて、そのチームのマネージャーが MS Word からコードをコピー&ペーストした場合などに役立ちます。 #48985 (alekseygolub)。 - SSL ユーザー証明書による認証が失敗した場合に、パスワード認証へフォールバックする機能を追加しました。 #48974 をクローズ。 #48989 (Nikolay Degterinsky)。
- 埋め込みダッシュボードを改善しました。#46671 をクローズしました。#49036(Kevin Zhang)。
- ログメッセージ用のプロファイルイベントを追加し、重大度ごとのログメッセージ数を簡単に確認できるようにしました。 #49042 (Alexey Milovidov).
- 以前のバージョンでは、
LineAsStringフォーマットは、DOS または macOS Classic の改行が存在する場合に、並列パースの有効・無効によって動作が一貫しませんでした。この変更により #49039 が解決されました。 #49052(Alexey Milovidov)。 - パースできなかったクエリパラメータに関する例外メッセージに、パラメータ名も含めるようにしました。 #48878 を再実装。 #48772 をクローズ。 #49061(Alexey Milovidov)。
ビルド/テスト/パッケージングの改善
- 以下のタイムゾーンを更新しました:Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore。 #48572 (Alexey Milovidov).
- ビルドを高速化するため、ヘッダファイル内の依存関係の数を削減しました。 #47984 (Dmitry Novik).
- テストでマークおよびインデックスの圧縮方式をランダム化しました。 #48286 (Alexey Milovidov).
- 内部 ZSTD を 1.5.4 から 1.5.5 に更新しました。 #46797 (Robert Schulze).
- テストで、コンパクトパーツからワイドパーツへの縦方向マージをランダム化しました。 #48287 (Raúl Marín).
- HDFS で CRC32 チェックサムをサポートしました。パフォーマンス上の問題を修正しました。 #48614 (Alexey Milovidov).
- GCC サポートの残存部分を削除しました。 #48671 (Robert Schulze).
- 新しいアナライザーインフラストラクチャを有効にした CI 実行を追加しました。 #48719 (Dmitry Novik).
バグ修正(公式安定版リリースでユーザーに影響する不具合)
- バックグラウンドスレッドからプッシュされるマテリアライズドビュー (MV) 用の system.query_views_log を修正 #46668 (Azat Khuzhin)。
- 複数の
RENAME COLUMN関連のバグを修正しました #46946 (alesapin)。 - clickhouse-format における細かなハイライト表示の不具合を修正 #47610 (Natasha Murashkina)。
- LLVM の libc++ のバグを修正し、サイズが INT_MAX を超えるパーツを S3 にアップロードするとクラッシュしていた問題を解消しました #47693 (Azat Khuzhin)。
sparkbar関数で発生していたオーバーフローを修正 #48121(Vladimir C)。- S3 におけるレースコンディションを修正 #48190 (Anton Popov)。
- 集約関数に対する JIT を、挙動の不整合により無効化しました #48195 (Alexey Milovidov)。
ALTERステートメントのフォーマットを修正(軽微) #48289 (Natasha Murashkina)。- RabbitMQ における CPU 使用率の問題を修正(#44404 により 23.2 で悪化していた)。#48311(Kseniia Sumarokova)。
- Distributed テーブル上の Merge に対する EXPLAIN PIPELINE で発生していたクラッシュを修正しました #48320 (Azat Khuzhin)。
- LowCardinality を Arrow の Dictionary 型としてシリアライズする処理を修正 #48361 (Kruglov Pavel)。
- TemporaryFileStream でキャッシュファイルセグメントのダウンローダーをリセットするよう修正しました #48386 (Vladimir C).
- DROP/REPLACE PARTITION 実行時に SYSTEM SYNC REPLICA がハングしたままになる可能性がある問題を修正 #48391 (Azat Khuzhin)。
- Dictionary に依存する分散テーブルの読み込み時に発生していた起動時エラーを修正 #48419 (MikhailBurdukov)。
- システムテーブルの名前を自動的に変更する際に依存関係をチェックしないようにする #48431 (Raúl Marín).
- KeeperMap ストレージで影響を受けた行のみが更新されるよう修正 #48435 (Antonio Andelic).
- VFS キャッシュにおいて発生する可能性のあるセグメンテーションフォルトを修正 #48469 (Kseniia Sumarokova)。
- 定数文字列が指定されていない場合に
toTimeZone関数がエラーをスローしていた問題を修正 #48471 (Jordi Villar)。 - Protobuf における IPv4 の論理エラーを修正し、Date32 のサポートを追加 #48486 (Kruglov Pavel)。
- system.settings における "changed" フラグが、複数の値を取る設定に対して正しく計算されていませんでした #48516 (MikhailBurdukov)。
- 圧縮有効時のストレージ
Memoryの不具合を修正 #48517(Anton Popov)。 - クライアントの再接続時に bracketed-paste モードによりパスワード入力が乱れる問題を修正 #48528 (Michael Kolupaev)。
- IP および UUID 型キーに対するネストされた Map の不具合を修正 #48556 (Yakov Olkhovskiy).
- ハッシュ辞書の並列ローダーで発生する未処理例外を修正。#48571(Azat Khuzhin)。
groupArray集約関数が、Nullable 型に対する空の結果に対しても正しく動作するようになりました #48593 (lgbo)。- ACL のスキーム
authでノードが作成されない場合がある Keeper のバグを修正。 #48595 (Aleksei Filatov). - IPv4 と UInt の比較演算子を許可 #48611(Yakov Olkhovskiy)。
- キャッシュに起因しうるエラーを修正 #48636(Kseniia Sumarokova)。
- 空のデータに対する非同期挿入を行っても、例外がスローされなくなりました。 #48663 (Anton Popov).
- RENAME TABLE が失敗した場合にテーブルの依存関係を修正 #48683(Azat Khuzhin)。
- 主キーに重複したカラムが含まれている場合(これは PROJECTION の場合にのみ発生し得ます)、以前のバージョンではバグを引き起こす可能性がありました #48838(Amos Bird)。
- ZooKeeper で send_thread/receive_thread を join する際に発生するレースコンディションを修正 #48849 (Alexander Gololobov)。
- ゼロコピー レプリケーション使用時に、無視されているデタッチ済みパーツを
DROPしようとすると発生する予期しないパーツ名エラーを修正 #48862 (Michael Lex)。 Date32型の Parquet/Arrow カラムがDate32型以外のカラムとして読み込まれてしまう問題を修正 #48864 (Kruglov Pavel)。- ROW POLICY とドットを含むカラムを持つテーブルから SELECT した際に発生する
UNKNOWN_IDENTIFIERエラーを修正しました #48976 (Kruglov Pavel). - 空の Nullable 文字列に対する集約処理を修正しました #48999 (LiuNeng).
ClickHouse 23.3 LTS リリース、2023-03-30
アップグレードに関する注意事項
- 論理削除 (Lightweight DELETE) は本番利用に対応し、デフォルトで有効になりました。MergeTree テーブルに対する
DELETEクエリは、デフォルトで利用可能になりました。 *domain*RFCおよびnetloc関数の挙動がわずかに変更されました。仕様への準拠性を高めるため、URL の authority 部分で許可される記号の集合を緩和しました。#46841 (Azat Khuzhin)。- KafkaEngine をベースにしたテーブルについて、カラムに対する DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED 文を用いることを禁止しました。#47138 (Aleksandr Musorin)。
- 「asynchronous connection drain」機能を削除しました。関連する設定およびメトリクスも削除されています。これは内部向け機能であったため、この機能について知らなかったユーザーには、削除の影響はないはずです。#47486 (Alexander Tokmakov)。
arraySum/Min/Max/Avg/Product、arrayCumSum/CumSumNonNegative、arrayDifference、配列構築、IN 演算子、クエリパラメータ、groupArrayMovingSum、統計関数、min/max/any/argMin/argMax、PostgreSQL wire protocol、MySQL テーブルエンジンおよび関数、sumMap、mapAdd、mapSubtract、arrayIntersectにおいて、256-bit Decimal データ型 (38 桁を超える桁数) をサポートしました。arrayIntersectではビッグイントもサポートしました。モーメントを含む統計集約関数 (たとえばcorrや各種TTest) は、内部表現としてFloat64を使用するようになりました (これまではDecimal128を使用していましたが、意味がありませんでした)。この変更により、無限分散の場合にinfの代わりにnanを返すことがあります。以前のバージョンでは、いくつかの関数はDecimal256データ型を受け付けながらDecimal128を返していましたが、現在は修正されています。これにより #47569、#44864、#28335 が解決されました。#47594 (Alexey Milovidov)。backup_threads/restore_threadsをユーザー設定ではなくサーバー設定としました。#47881 (Azat Khuzhin)。- 定数および非決定的なセカンダリインデックスを許可しないようにしました。#46839 (Anton Popov)。
新機能
parallel_replicas_custom_keyおよびparallel_replicas_custom_key_filter_typeの設定を使用して、レプリカ間で処理を分割する新しいモードを追加しました。クラスターが 1 つの分片と複数のレプリカで構成されている場合、最大でmax_parallel_replicas個のレプリカがランダムに選択され、分片として扱われます。各分片に対して、それに対応するフィルタがイニシエータ側のクエリに追加され、その後その分片に送信されます。クラスターが複数の分片から構成されている場合は、任意のキーを定義できる点を除き、sample_keyと同様に動作します。 #45108 (Antonio Andelic).- キャンセル時に部分結果を表示するオプション: クエリ設定
partial_result_on_first_cancelを追加し、クエリがキャンセルされた場合(例: Ctrl-C による中断)に部分結果を返せるようにしました。#45689 (Alexey Perevyshin)。 - 一時テーブルに対して、Replicated および KeeperMap エンジンを除く任意のテーブルエンジンをサポートしました。#31497 をクローズしました。#46071(Roman Vasin)。
- Keeper の集中ストレージを用いたユーザー定義 SQL 関数のレプリケーションに対応しました。 #46085 (Aleksei Filatov).
system.settingsに類似するsystem.server_settingsを実装し、サーバー設定を保持するようにしました。 #46550 (pufit).UNDROP TABLEクエリのサポートを追加しました。 #46811 をクローズしました。 #47241(chen)。- 名前付きコレクションに対して個別に権限を付与できるようにしました(例えば、すべてのコレクションにまとめてではなく、特定のコレクションに対してのみ
SHOW/CREATE/ALTER/DROP named collectionアクセスを付与できるようにするため)。これにより #40894 をクローズします。新しいアクセス種別NAMED_COLLECTION_CONTROLを追加しました。これはユーザー設定に明示的に追加されない限りユーザーのデフォルト設定には付与されません(GRANT ALLを実行できるようにするには必須です)。また、23.2 ではユーザーのデフォルト設定に完全なアクセス権を持たせるために手動で指定する必要があったshow_named_collectionsは、もはや必須ではなくなりました。 #46241 (Kseniia Sumarokova)。 - カスタムディスクで階層構造(ネスト)を利用可能にしました。以前はカスタムディスクはフラットなディスク構造のみをサポートしていました。 #47106 (Kseniia Sumarokova)。
widthBucket関数(互換性のためのエイリアスWIDTH_BUCKETを含む)を導入しました。 #42974。 #46790(avoiderboi)。- 指定されたフォーマット文字列に従って、新しい関数
parseDateTimeおよびparseDateTimeInJodaSyntaxを追加しました。parseDateTimeは MySQL 構文で記述された文字列を DateTime に変換し、parseDateTimeInJodaSyntaxは Joda 構文で変換します。 #46815 (李扬)。 - テーブル関数
nullのデフォルト構造としてdummy UInt8を使用するようにしました。 #46930 をクローズ。 #47006(flynn)。 parseDateTimeBestEffort関数で、Dec 15, 2021のようなカンマ付きの日付形式をサポートしました。#46816 をクローズ。#47071(chen)。- HTTP インターフェイス向けの URL パラメータ
wait_end_of_queryおよびbuffer_sizeに対応する設定http_wait_end_of_queryとhttp_response_buffer_sizeを追加しました。これにより、プロファイル内でこれらの設定を変更できるようになりました。 #47108 (Vladimir C). Atomicデータベースから DROP されたが、まだ完全には削除されていないテーブルを表示するsystem.dropped_tablesテーブルを追加しました。 #47364 (chen)。- MySQL 互換性のため、
positionCaseInsensitiveのエイリアスとしてINSTRを追加。 #47529 をクローズ。 #47535(flynn)。 - 固定精度で数値を文字列に変換するための
toDecimalString関数を追加しました。 #47838 (Andrey Zvonov). - MergeTree の SETTING
max_number_of_mutations_for_replicaを追加しました。これは、レプリカごとのパーツの mutation 数を指定した値までに制限します。0 を指定すると、レプリカごとの mutation 数に制限はありません(ただし実行は他の SETTING によって引き続き制約される可能性があります)。 #48047 (Vladimir C)。 - 2 つの配列から Map を作成できる Map 関連の関数
mapFromArraysを追加しました。#31125 (李扬)。 - Parquet/ORC/Arrow 出力フォーマットで圧縮方式を制御できるようにし、より多くの圧縮入力フォーマットをサポートしました。これにより #13541 がクローズされました。#47114 (Kruglov Pavel)。
- ネイティブプロトコルに SSL ユーザー証明書認証を追加。#47077 をクローズ。#47596(Nikolay Degterinsky)。
parseDateTimeに *OrNull() および *OrZero() バリアントを追加し、MySQL との互換性確保のためにエイリアスstr_to_dateを追加しました。 #48000 (Robert Schulze).- MySQL との互換性向上のため、「LIKE」「IN」「MOD」などの演算子と同様の演算子
REGEXPを追加しました。 #47869 (Robert Schulze)。
パフォーマンス向上
- メモリ上のマークが圧縮され、3~6 分の 1 のメモリで済むようになりました。 #47290 (Michael Kolupaev)。
- これまでのバージョンでは、大量のファイルに対するバックアップは信じられないほど遅いものでしたが、今は違います。今では信じられないほど高速です。 #47251 (Alexey Milovidov)。バックアップの I/O 処理専用のスレッドプールを導入しました。これにより、他のプールとは独立してスケールできるようになり、パフォーマンスが向上します。 #47174 (Nikita Mikhaylov)。バックアップ処理の最終段階でメタデータを収集する際に、MultiRead リクエストとリトライを使用するようにしました。 #47243 (Nikita Mikhaylov)。バックアップと復元対象データの両方が S3 上にある場合は、今後はサーバーサイドコピーが使用されます。 #47546 (Vitaly Baranov)。
FINAL付きのクエリにおける不要な読み取りを修正しました。 #47801 (Nikita Taranov).max_final_threadsの値が、サーバー起動時にコア数に応じて自動設定されるようになりました(max_threadsと同じアルゴリズムを使用)。これにより、多数の CPU を搭載したサーバーでのfinal実行の並列性が向上します。 #47915 (Nikita Taranov)。- CLICKHOUSE をソースとする DIRECT Dictionary に対して、読み取りパイプラインを複数スレッドで実行できるようにしました。有効にするには、
CREATE DICTIONARY文のソースのSETTINGSセクションでdictionary_use_async_executor=1を設定してください。 #47986 (Vladimir C)。 - 単一の Nullable キーを使用する集約のパフォーマンスを最適化。 #45772 (LiuNeng).
hasTokenOrNull、hasTokenCaseInsensitive、hasTokenCaseInsensitiveOrNullに対して、小文字のtokenbf_v1索引を利用できるようにしました。 #46252 (ltrk2).- SIMD を使用して先頭 2 文字を検索することで、
positionおよびLIKE関数を最適化しました。 #46289 (Jiebin Sun)。 system.detached_partsに対するクエリを最適化しました。これは非常に大きくなる場合があります。ブロックサイズ制限に対応していくつかのソースを追加しました。各ブロック内では、I/O スレッドプールを使用してパーツサイズを計算し、システムコールを並列に実行します。 #46624 (Sema Checherinda)。- ReplicatedMergeTree テーブルにおける
max_replicated_merges_in_queueのデフォルト値を 16 から 1000 に引き上げました。これにより、ClickHouse Cloud の共有ストレージを利用するクラスタなど、レプリカ数が非常に多いクラスタでのバックグラウンドでのマージ処理をより高速に実行できます。 #47050 (Alexey Milovidov)。 - パーティション一覧を取得するために、
clickhouse-copierがDISTINCTではなくGROUP BYを使用するように更新されました。大きなテーブルでは、これにより SELECT の実行時間が 500 秒超から 1 秒未満に短縮されました。 #47386 (Clayton McClure). ASOF JOINのパフォーマンス低下を修正。 #47544 (Ongkong).- Keeper におけるバッチ処理をさらに強化しました。読み取りリクエスト時にバッチを分割しないことでパフォーマンスを改善します。 #47978 (Antonio Andelic)。
- カラムごとに異なる DEFAULT 式を持つ Merge エンジンのテーブルで PREWHERE が使用可能になりました。 #46831 (Azat Khuzhin).
Experimental Feature
- 並列レプリカ: ローカルレプリカをより有効に活用することで全体的なパフォーマンスを改善し、デフォルトではレプリケーションなしの MergeTree から並列レプリカを使った読み取りを禁止しました。 #47858 (Nikita Mikhaylov).
- 実験的な Analyzer が有効な場合、
Join、Dictionary、EmbeddedRocksDBテーブルとの JOIN に対して、左側テーブルへのフィルタプッシュダウンをサポートしました。 #47280 (Maksim Kita). - ゼロコピーのレプリケーションを使用する ReplicatedMergeTree において、Keeper への負荷が軽減されました。 #47676 (alesapin).
- MaterializedPostgreSQL を用いた materialized view の作成に関する問題を修正しました。 #40807 (Maksim Buren).
改善
input_format_json_ignore_unknown_keys_in_named_tupleをデフォルトで有効にしました。 #46742(Kruglov Pavel)。- MATERIALIZED VIEW へのプッシュ時のエラーを無視できるようにしました(新しい設定項目
materialized_views_ignore_errorsを追加しました。デフォルト値はfalseですが、system.*_logテーブルへのログのフラッシュについては常にtrueに設定されます)。 #46658 (Azat Khuzhin). - メモリ上で分散送信のファイルキューを追跡します。 #45491 (Azat Khuzhin).
- HTTP プロトコル経由のすべてのクエリのレスポンスに、
X-ClickHouse-Query-IdヘッダーとX-ClickHouse-Timezoneヘッダーが追加されるようになりました。以前はSELECTクエリのレスポンスに対してのみ追加されていました。 #46364 (Anton Popov). MongoDBからの外部テーブル: host:port を列挙した URI を介したレプリカセットへの接続のサポートと、MongoDB 辞書での readPreference オプションのサポートを追加。URI の例: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary。 #46524 (artem-yadr)。- この改善はユーザーからは見えないはずです。クエリプランに基づいてPROJECTION解析を再実装しました。旧バージョンと新バージョンを切り替えるための設定
query_plan_optimize_projection=1を追加しました。#44963 を修正しました。#46537(Nikolai Kochetov)。 - 出力フォーマットではデフォルトで Parquet フォーマット v1 の代わりに v2 を使用するようにしました。Parquet のバージョンを制御するための設定
output_format_parquet_versionを追加しました。指定可能な値は1.0、2.4、2.6、2.latest(デフォルト)です。 #46617 (Kruglov Pavel)。 - 新しい設定構文により、名前にピリオド(
.)を含む Kafka トピックを設定できるようになりました。 #46752 (Robert Schulze). - hyperscan パターンにおける問題のある繰り返しを検査するヒューリスティックを修正。 #46819 (Robert Schulze).
- 別のレプリカによって同時にブロックが作成された場合に、「ZK ノードが既に存在する」ことを示すエラーを system.errors に報告しないようにしました。 #46820 (Raúl Marín).
clickhouse-localのオープン可能なファイル数の上限を引き上げました。これにより、大量の CPU コアを持つサーバー上でもwebテーブルから読み取ることが可能になります。開いているファイル数が多すぎる場合でも、URL テーブルエンジンからの読み取りをやめないようにしました。これにより、#46852 が解決されます。#46853(Alexey Milovidov)。- 数値をパースできなかった場合にスローされる例外メッセージが、より読みやすくなりました。 #46917 (Robert Schulze).
- 各タスクの処理が完了するたびに
system.backupsを更新するようにし、バックアップの進行状況を追跡できるようにしました。 #46989 (Aleksandr Musorin). - Native 入力フォーマットで型変換を許可するようにしました。これを制御する設定
input_format_native_allow_types_conversionを追加しました(デフォルトで有効です)。 #46990 (Kruglov Pavel)。 range関数で IPv4 を扱えるようにし、IP アドレス範囲を生成できるようにしました。 #46995 (Yakov Olkhovskiy).- あるボリューム/ディスクから別のボリューム/ディスクへパーツを移動できない場合に出力される例外メッセージを改善しました。 #47032 (alesapin).
JSONType関数でBool型をサポートするようにしました。これまでブール値に対して誤ってNull型が返されていました。 #47046 (Anton Popov).- あらかじめ定義した HTTP クエリを構成するために
_request_bodyパラメータを使用できるようにしました。 #47086 (Constantine Peresypkin). - 組み込み UI の SQL エディターで Enter キーを押したときに自動インデントが行われるようになりました。 #47113 (Alexey Korepanov).
- 'sudo' を用いて自己展開を行うと、展開されたファイルの uid と gid を実行中のユーザーに設定しようとします。 #47116 (Yakov Olkhovskiy)。
- 以前は、
repeat関数の第 2 引数は符号なし整数型のみを受け付けていたため、-1 のような値を渡すことができませんでした。この挙動は Spark の同名関数とは異なっていました。このアップデートでは、repeat関数の挙動を Spark の関数と一致するように修正しました。これにより、負の整数を含む、同じ型の入力を受け付けるようになりました。更新後の実装の正しさを検証するために、広範なテストを実施しました。#47134(KevinyhZou)。注記: この変更履歴エントリは ChatGPT によって書き直されています。 - スタックトレースから
::__1部分を削除しました。スタックトレース内でstd::basic_string<char, ...をStringとして表示するようにしました。 #47171 (Mike Kot). - リプレイ攻撃を回避するために interserver モードを再実装しました(この変更は古いサーバーとも後方互換性を保っています)。 #47213 (Azat Khuzhin).
- 正規表現グループの認識を改善し、
regexp_treeDictionary を改善しました。 #47218 (Han Fei). - Keeper の改善: Keeper が使用するリソース(例: 未使用メモリの解放など)をクリーンアップするための新しい 4LW コマンド
clrsを追加。 #47256 (Antonio Andelic). - コーデック
DoubleDelta(bytes_size)、Gorilla(bytes_size)、FPC(level, float_size)にオプション引数を追加しました。これにより、clickhouse-compressorでカラム型を指定せずにこれらのコーデックを使用できるようになります。これらのコーデックを使用した際にclickhouse-compressorで発生しうる異常終了と算術エラーを修正しました。修正: https://github.com/ClickHouse/ClickHouse/discussions/47262。#47271(Kruglov Pavel)。 runningDifference関数で bigint 型をサポートしました。#47194 をクローズします。 #47322(Nikolay Degterinsky)。- 有効期限付きの S3 の認証情報で一部のエッジケースにおいて発生する
ExpiredTokenエラーを防ぐため、有効期限前の猶予時間を追加しました。これはexpiration_window_seconds設定で制御でき、デフォルト値は 120 秒です。 #47423 (Antonio Andelic)。 AvroフォーマットでDecimalおよびDate32をサポートしました。 #47434 (Kruglov Pavel).OrdinaryからAtomicへの変換が中断された状態であることが検出された場合は、サーバーを起動せず、トラブルシューティング手順を含む、よりわかりやすいエラーメッセージを出力するようにしました。 #47487 (Alexander Tokmakov).system.opentelemetry_span_logに新しいカラムkindを追加しました。このカラムには、OpenTelemetry で定義されている SpanKind の値が格納されます。#47499(Frank Chen)。Protobufフォーマットで、カラム名としてルートフィールド名のみを指定して入れ子配列の読み書きができるようになりました。以前は、カラム名にすべてのネストされたフィールド名を含める必要がありました(a.b.c Array(Array(Array(UInt32)))のように)。現在は、a Array(Array(Array(UInt32)))のようにルート名だけを使うことができます。 #47650 (Kruglov Pavel).SYSTEM SYNC REPLICAにオプションのSTRICT修飾子を追加しました。これにより、クエリはレプリケーションキューが空になるまで待機するようになります(https://github.com/ClickHouse/ClickHouse/pull/45648 以前と同様の動作です)。#47659(Alexander Tokmakov)。- 一部の OpenTelemetry スパンログの名前付けを改善。 #47667 (Frank Chen).
- 集約関数コンビネータのチェーンが過度に長くならないようにしました(解析段階でクエリが遅くなる可能性があります)。これにより #47715 が解決されました。 #47716(Alexey Milovidov)。
- パラメータ化ビューでのサブクエリをサポートし、#46741 #47725 を解決しました(SmitaRKulkarni)。
- MySQL インテグレーションにおけるメモリリークを修正(
connection_auto_close=1のときに発生)。 #47732 (Kseniia Sumarokova)。 - Decimal パラメータに関連するコードのエラー処理を改善し、より情報量の多いエラーメッセージが出力されるようにしました。以前は、不正な Decimal パラメータが指定された場合に生成されるエラーメッセージが分かりにくく、有用ではありませんでした。このアップデートにより、エラーメッセージの内容を見直して、より詳細で有用な情報が提供されるようになり、Decimal パラメータに関連する問題の特定と修正が容易になりました。 #47812 (Yu Feng)。注: この変更ログ項目は ChatGPT によって書き直されています。
- パラメータ
exact_rows_before_limitは、rows_before_limit_at_leastがリミットに到達する前に返された行数を正確に反映するようにするためのものです。この Pull Request では、クエリが複数の分片にまたがる分散処理やソート処理を含む場合に発生していた問題に対処しています。この更新以前は、これらのシナリオは期待どおりに動作していませんでした。 #47874 (Amos Bird)。 - ThreadPools メトリクスの観測機能。 #47880 (Azat Khuzhin).
WriteBufferFromS3MicrosecondsおよびWriteBufferFromS3RequestsErrorsプロファイルイベントを追加。 #47885 (Antonio Andelic)。- ClickHouse のインストール処理に
--linkおよび--noninteractive(-y) オプションを追加しました。#47750 をクローズしました。 #47887 (Nikolay Degterinsky)。 - 利用できない依存テーブルを持つ materialized view に対して
ATTACHする際に発生していたUNKNOWN_TABLE例外を修正しました。これはバックアップから状態を復元しようとする場合に役立つ可能性があります。 #47975 (MikhailBurdukov). - 暗号化ディスク設定でオプションのパスが追加されないケースを修正。 #47981 (Kseniia Sumarokova).
- パラメータ化されたビューにおける CTE のサポートを実装: スカラサブクエリの評価時にクエリパラメータを使用できるよう更新。 #48065 (SmitaRKulkarni).
- 大きな整数型
(U)Int128/(U)Int256、任意のキー型を持つMap、および任意の精度(3 と 6 だけでなく)のDateTime64をサポートするようになりました。 #48119 (Kruglov Pavel). - 行形式の入力フォーマットで未知の Enum 値に起因するエラーをスキップできるようにしました。 #48133 (Alexey Milovidov)。
ビルド / テスト / パッケージングの改善
- ClickHouse は
C++23でビルドされるようになりました。 #47424 (Robert Schulze). - AST Fuzzer で
EXPLAINクエリをファジングするようにしました。 #47803 #47852 (flynn). - ストレステストと自動バックワード互換性チェック(現在は Upgrade チェック)を分離しました。 #44879 (Kruglov Pavel).
- 一部の誤ったセキュリティレポートを抑制するため、Docker 用 Ubuntu イメージを更新しました。 #46784 (Julio Jimenez). ClickHouse には依存関係がなく、Docker を必要としないことに注意してください。
- ClickHouse を "curl | sh" でダウンロードする場合に、既存の
clickhouseバイナリを削除(上書き)するかどうかを確認するプロンプトを追加しました。プロンプトは "ClickHouse binary clickhouse already exists. Overwrite? [y/N]" です。 #46859 (Dan Roscigno). - 古いディストリビューション(例: Amazon Linux 2)や ARM 上で、glibc 2.28 のシンボルが見つからないことによるサーバー起動時のエラーを修正しました。 #47008 (Robert Schulze).
- clang 16 への対応を行いました。 #47027 (Amos Bird).
- ClickHouse が ARM 上の古い glibc で動作できることを確認する CI チェックを追加しました。 #47063 (Robert Schulze).
NDEBUGマクロの誤った使用を防止するためのスタイルチェックを追加しました。 #47699 (Alexey Milovidov).- ビルドを少し高速化しました。 #47714 (Alexey Milovidov).
vectorscanを 5.4.9 に更新しました。 #47955 (Robert Schulze).- Apache Arrow の fatal ログ出力が abort しないことを検証するためのユニットテストを追加しました。これは ClickHouse/arrow#16 の変更をカバーします。 #47958 (Arthur Passos).
- ネイティブな macOS デバッグサーバービルドを起動できる機能を復元しました。 #48050 (Robert Schulze). 注: この変更は開発時にのみ関連があり、ClickHouse の公式ビルドはクロスコンパイルで行われます。
バグ修正(公式安定版リリースにおけるユーザーから見て明らかな誤動作)
- フォーマットパーサーがリセットされる問題を修正し、
Kafkaにおける不正なメッセージの処理をテストする機能を追加 #45693(Kruglov Pavel)。 - Keeper におけるデータサイズの計算を修正 #46086 (Antonio Andelic)。
ReplicatedMergeTreeテーブルおよびAtomicデータベースに対するDROP TABLEクエリの自動再試行機能に存在していた不具合を修正しました。まれに、DROP の最中に ZooKeeper セッションが期限切れとなり、ZooKeeper 上で同じパスを持つ新しいレプリカテーブルが並行して作成されると、Can't get data for node /zk_path/log_pointerおよびThe specified key does not existエラーが発生する可能性がありました。 #46384 (Alexander Tokmakov)。- クエリ正規化中のエイリアスの再帰処理により一部のクエリが実行できなくなっていた問題を修正しました。 #46609 (Raúl Marín).
- バイナリ形式での IPv4/IPv6 のシリアライズ/デシリアライズを修正 #46616 (Kruglov Pavel)。
- ActionsDAG: 最適化の際に
andの結果が変わらないようにしました #46653 (Salvatore Mesoraca). - クライアントが終了した際のクエリのキャンセル処理を改善 #46681 (Alexander Tokmakov).
- 集約最適化における算術演算の処理を修正 #46705 (Duc Canh Le)。
- JSONEachRow のスキーマ推論時に起こり得る
clickhouse-localの異常終了を修正 #46731 (Kruglov Pavel)。 - 有効期限切れのロールを変更できない不具合を修正 #46772(Vitaly Baranov)。
- 複数のステップにまたがって結合される PREWHERE カラムの蓄積処理を修正 #46785(Alexander Gololobov)。
- HTTP 読み取りバッファでファイルサイズを取得するために初期範囲を使用するようにしました。この変更がない場合、一部のリモートファイルを処理できない場合がありました。 #46824 (Antonio Andelic).
- URL テーブル使用時に進行状況バーが誤った表示になる問題を修正 #46830 (Antonio Andelic)。
maxIntersections関数における MSan レポートの問題を修正 #46847(Alexey Milovidov)。Mapデータ型のバグを修正 #46856(Alexey Milovidov)。- LIKE パターンに本来クオートできない文字をクオートして含めた場合に、一部の LIKE 検索で誤った結果が返される問題を修正しました #46875 (Robert Schulze).
- 修正 - WITH FILL 使用時に、Filling Transform が空のブロックを処理すると異常終了していた問題を修正しました #46897(Yakov Olkhovskiy)。
- JSON 文字列からの日付型および整数型の型推論を修正 #46972 (Kruglov Pavel)。
- フェッチ時のゼロコピーレプリケーションでのディスク選択に関するバグを修正 #47010 (alesapin)。
- systemd サービス定義の誤記を修正 #47051(Palash Goel)。
- CROSS JOIN かつ algorithm = auto の場合に発生する NOT_IMPLEMENTED エラーを修正 #47068 (Vladimir C)。
- 'part_type' を実験的機能である 'InMemory' モードに設定した場合に、'ReplicatedMergeTree' テーブルへ類似する 2 件のデータを挿入できなかった問題を修正しました。 #47121 (liding1992).
- External dictionaries / library-bridge: エラー "unknown library method 'extDict_libClone'" を修正。 #47136 (alex filatov).
- LIMIT付きGrace Hash Joinにおけるレースコンディションを修正 #47153 (Vladimir C)。
- 特定のカラムに対する PREWHERE 句のサポートを修正 #47154 (Azat Khuzhin)。
- Query Status におけるデッドロック発生の可能性がある問題を修正 #47161(Kruglov Pavel)。
- 同一の
Joinテーブルに対するINSERT SELECTを禁止しました。デッドロックを引き起こす可能性があるためです #47260 (Vladimir C)。 min_age_to_force_merge_secondsによるマージで、既にマージ済みのパーティションをスキップするようにしました #47303 (Antonio Andelic).- find_first_not_symbols が期待どおりに動作するように、find_first_symbols を修正しました #47304 (Arthur Passos).
- CSV における大きな数値の型推論を修正 #47410 (Kruglov Pavel)。
- エイリアスを含む式に対する論理式の最適化を無効化。 #47451 (Nikolai Kochetov).
decodeURLComponentの不具合を修正 #47457(Alexey Milovidov)。- PROJECTION を含む EXPLAIN グラフを修正 #47473 (flynn).
- クエリパラメータの不具合を修正 #47488 (Alexey Milovidov)。
- パラメータ化ビューのバグを修正。 #47495 (SmitaRKulkarni).
- データフォーマット用Fuzzerおよびそれに対応する修正。 #47519 (Alexey Milovidov)。
DateTime64の単調性チェックを修正 #47526 (Antonio Andelic)。- Nullable LowCardinality カラムでの「block structure mismatch」を修正 #47537 (Nikolai Kochetov).
- Apache Parquet のバグに対する根本的な修正 #45878 #47538 (Kruglov Pavel)。
- ドキュメントサイズが無効な場合の
BSONEachRowの並列パースを修正 #47540 (Kruglov Pavel)。 SYSTEM FLUSH DISTRIBUTED実行時にsystem.distribution_queue内のエラーを保持するようにしました #47541 (Azat Khuzhin).BSONEachRowフォーマットで重複したカラムを検出する #47609(Kruglov Pavel)。- 移動処理中の zero copy lock の待機処理を修正 #47631 (alesapin).
- パーティション単位の集約の不具合を修正 #47634 (Nikita Taranov)。
BSONEachRowフォーマットにおけるタプルを配列としてシリアル化する処理のバグを修正。#47690 (Kruglov Pavel)。polygonsSymDifferenceCartesianのクラッシュを修正 #47702 (pufit)。Fileストレージからzlibおよびgzipで圧縮されたファイルの読み取りを修正 #47796 (Anton Popov)。- PostgreSQL 用の空クエリ検出処理を改善(Go 言語用 pgx ドライバー向け) #47854 (Azat Khuzhin)。
- LowCardinality 型に対する DateTime の単調性チェックを修正 #47860 (Antonio Andelic).
- RESTORE ASYNC で backup_threads ではなく restore_threads が使用されるようになりました #47861 (Azat Khuzhin)。
- projection を含む ReplicatedMergeTree テーブルでの DROP COLUMN の問題を修正しました #47883 (Antonio Andelic).
- Replicated データベースの復旧処理に関する修正 #47901 (Alexander Tokmakov)。
- HTTP における冗長すぎる警告を修正するホットフィックス #47903(Alexander Tokmakov)。
catboostEvaluateで発生する "Field value too long" エラーを修正 #47970 (Robert Schulze).- #36971 を修正: Watchdog: 子プロセスが終了した場合には非ゼロコードで終了するように修正 #47973 (Коренберг Марк)。
- "index file
cidxis unexpectedly long" となる問題を修正 #48010 (SmitaRKulkarni). - MaterializedPostgreSQL のクエリを修正し、属性(replica-identity)を取得できるようにしました #48015(Solomatov Sergei)。
- parseDateTime(): 未定義動作(符号付き整数オーバーフロー)を修正 #48019 (Robert Schulze)。
- スキーマの再利用を避けるため、Avro の Record には一意の名前を付けるようにしました #48057 (Kruglov Pavel).
- Keeper において TCP/HTTP ソケットのタイムアウトが正しく設定されるよう修正しました #48108 (Antonio Andelic).
Avroフォーマットで null ポインタに対してメンバー関数を呼び出してしまう可能性がある問題を修正。 #48184 (Kruglov Pavel).
ClickHouse リリース 23.2(2023-02-23)
後方互換性のない変更
- 関数
toDayOfWeek()(エイリアス:DAYOFWEEK)にモード引数を追加し、週の開始曜日(月曜日か日曜日)と、カウントを 0 から始めるか 1 から始めるかを指定できるようにしました。他の日時関数との一貫性のため、モード引数は time 引数と time zone 引数の間に挿入されました。この変更により、既存の(これまでドキュメント化されていなかった)2 引数構文toDayOfWeek(time, time_zone)は動作しなくなります。修正方法としては、関数をtoDayOfWeek(time, 0, time_zone)に書き換えてください。 #45233 (Robert Schulze). - 設定
max_query_cache_sizeをfilesystem_cache_max_download_sizeに名称変更しました。 #45614 (Kseniia Sumarokova). defaultユーザーは、デフォルトではアクセス種別SHOW NAMED COLLECTIONの権限を持たなくなりました(例: これまで可能だったように、defaultユーザーが他のユーザーに対して ALL を GRANT することはできなくなります。そのため、この PR は後方互換性がありません)。 #46010 (Kseniia Sumarokova).- SETTINGS 句が FORMAT 句の前に指定されている場合、その設定はフォーマット処理にも適用されます。 #46003 (Azat Khuzhin).
- 設定
materialized_postgresql_allow_automatic_update(デフォルトでは無効)に対するサポートを削除しました。 #46106 (Kseniia Sumarokova). - 実際的なデータセットにおける
countDigitsのパフォーマンスをわずかに改善しました。これにより #44518 がクローズされました。以前のバージョンではcountDigits(0)は0を返していましたが、現在はより正しい1を返し、既存のドキュメントに従う動作になっています。 #46187 (Alexey Milovidov). - コーデック
DeltaまたはDoubleDeltaに続けてGorillaまたはFPCを組み合わせた圧縮を使用する新しいカラムの作成を禁止しました。この制限は、設定allow_suspicious_codecs = trueを使用することで回避できます。 #45652 (Robert Schulze).
新機能
- S3 上の Iceberg テーブルストアにアクセスするための
StorageIcebergおよびテーブル関数icebergを追加。 #45384 (flynn)。 storage_policyの代わりにSETTINGS disk = '<disk_name>'でストレージを設定できるようになり、さらにSETTINGS disk = disk(type=s3, ...)による明示的なディスク作成にも対応しました。 #41976 (Kseniia Sumarokova).system.part_logでProfileEventsカウンタを利用可能にしました。 #38614 (Bharat Nallan)。- 既存の
ReplacingMergeTreeエンジンを拡張し、重複した行の挿入を許可できるようにしました。これにより、1 つの MergeTree エンジン内でReplacingMergeTreeとCollapsingMergeTreeの両方の機能を活用できます。削除されたデータはクエリ実行時には返されませんが、ディスク上からも削除はされません。 #41005 (youennL-cs)。 generateULID関数を追加しました。#36536 をクローズしました。#44662(Nikolay Degterinsky)。- 各2つのカラムの組み合わせについて計算を行う集計関数
corrMatrixを追加しました。加えて、集計関数covarSampとcovarPopはcorrと類似しているため、あわせてcovarSampMatrixとcovarPopMatrixも追加しました。@alexey-milovidov により #44587 がクローズされました。 #44680(FFFFFFFHHHHHHH)。 - 配列をランダムに並べ替える arrayShuffle 関数を導入。 #45271 (Joanna Hulboj).
- Arrow の
FIXED_SIZE_BINARY型およびParquetのFIXED_LENGTH_BYTE_ARRAY型をサポートし、これらをFixedStringにマッピングしました。FixedStringのデフォルト出力型を制御するために、output_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_arrayの各設定を追加しました。#45326 をクローズします。#45340(Kruglov Pavel)。 - system.replication_queue に新しいカラム
last_exception_timeを追加。 #45457 (Frank Chen). - SipHash128 でユーザー定義のキー/シードを使用できる 2 つの新しい関数を追加しました。 #45513 (Salvatore Mesoraca).
- テーブル関数
formatに 3 引数版を追加。#45808 をクローズ。#45873(FFFFFFFHHHHHHH)。 JodaTimeフォーマットにおいて 'x','w','S' のサポートを追加しました。詳細は https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html を参照してください。 #46073 (zk_kiger)。- ウィンドウ関数
ntileをサポートしました。(lgbo) - すべてのテーブルに
FINAL修飾子を暗黙的に適用するための設定finalを追加しました。 #40945 (Arthur Passos)。 arrayPartialSortおよびarrayPartialReverseSort関数を追加しました。 #46296 (Joanna Hulboj)。- 新しい HTTP パラメータ
client_protocol_versionにより、HTTP レスポンスで Native フォーマットを使用する場合に、クライアントプロトコルバージョンを設定できるようになりました。 #40397。 #46360 (Geoff Genz)。 - 互換性を確保するために、Spark の関数
REGEXP_EXTRACTと同様の新しい関数regexpExtractを追加しました。これは既存の関数extractとよく似ています。 #46469 (李扬)。 - 新しい関数
JSONArrayLengthを追加しました。この関数は、最外層の JSON 配列内の要素数を返します。入力された JSON 文字列が無効な場合は、NULL を返します。 #46631 (李扬).
パフォーマンスの向上
- 導入されたこのロジックは、PREWHERE 条件が複数の条件の連言(cond1 AND cond2 AND ...)である場合に機能します。同じカラムの読み取りを必要とする条件をステップごとにグループ化します。各ステップの後に、その時点までの条件に対応する部分が評価され、その結果行がフィルタリングされる場合があります。これにより、次のステップで読み取る行数を減らすことができ、I/O 帯域幅を節約し、計算量も削減できます。このロジックは現時点ではデフォルトで無効になっています。リグレッションがないことが確認されしだい、将来のいずれかのリリースでデフォルトで有効化される予定のため、テスト用途での使用が強く推奨されます。これは 2 つの設定で制御できます: "enable_multiple_prewhere_read_steps" と "move_all_conditions_to_prewhere" です。 #46140 (Alexander Gololobov).
- テーブルのパーティションキーと GROUP BY キーが互換性がある場合に、パーティションを個別に集計できるオプションを追加しました。
allow_aggregate_partitions_independentlyという設定で制御されます。適用可能なケースが限られているため、デフォルトでは無効です(詳細はドキュメントを参照してください)。 #45364 (Nikita Taranov)。 - Compact 形式のパーツに対して Vertical マージアルゴリズムを使用できるようにしました。これにより、ClickHouse サーバーはバックグラウンド処理時に必要とするメモリを大幅に削減できます。これによって #46084 が解決されました。 #45681 #46282 (Anton Popov)。
- バッチリーダーを使用して
Parquetリーダーを最適化。 #45878 (LiuNeng). - 非同期 Linux io_uring サブシステムに基づく新しい
local_filesystem_read_methodメソッドio_uringを追加しました。これにより、デフォルトのpreadメソッドと比較して、ほぼあらゆるケースで読み取り性能が向上します。 #38456 (Saulius Valatka)。 - 論理的に等価な場合、引数として
if式を取る集約関数を書き換えます。例えば、avg(if(cond, col, null))はavgIf(cond, col)に書き換えることができます。これはパフォーマンス向上に役立ちます。 #44730 (李扬)。 lower/upper関数のパフォーマンスを AVX-512 命令セットを使用して向上しました。 #37894 (yaqi-zhao).- SMT が無効になっている 32 コア以上のシステムで(BIOS で Hyper Threading を無効にした場合)、ClickHouse がコア数の半分しか使用しないという制限を撤廃しました。 #44973 (Robert Schulze)。
- 関数
multiIfを列指向で実行することでパフォーマンスを改善し、2.3倍の高速化を実現しました。 #45296 (李扬)。 - needle(検索文字列)が空のときの
position関数向け fast path を追加しました。 #45382 (李扬). - デフォルトで
query_plan_remove_redundant_sorting最適化を有効にしました。この最適化は #45420 で実装されました。#45567(Igor Nikonov)。 - HTTP インターフェイス経由の大規模クエリのパフォーマンスを向上させるため、HTTP Transfer Encoding のチャンクサイズを拡大しました。 #45593 (Geoff Genz)。
- 多数の
Array/Map/Nestedカラムを持つテーブルを読み取る短いSELECTクエリのパフォーマンスを改善しました。 #45630 (Anton Popov)。 - 大きな整数値および Decimal 型に対するフィルタリングのパフォーマンスを改善。 #45949 (李扬).
- この変更により、ColumnNullable(UInt8) からフィルターを取得する際のオーバーヘッドを効果的に削減し、クエリ全体のパフォーマンスを向上させることができます。この変更の影響を評価するために、TPC-H ベンチマークを用い、カラム型を非 Nullable から Nullable に変更したうえで、性能指標としてクエリの QPS を測定しました。 #45962 (Zhiguo Zhou)。
_partおよび_partition_id仮想カラムの型をLowCardinality(String)にしました。 #45964 をクローズしました。 #45975 (flynn)。- スケールが変更されない場合の Decimal 変換の性能を改善しました。 #46095 (Alexey Milovidov)。
- 読み取り時のデータプリフェッチを増やせるようにしました。 #46168 (Kseniia Sumarokova).
arrayExists(x -> x = 1, arr)をhas(arr, 1)に書き換えることで、パフォーマンスを 1.34 倍に向上。 #46188 (李扬)。- 非リモートディスク上での垂直マージにおける過大なメモリ使用量を修正。リモートディスクでも
max_insert_delayed_streams_for_parallel_writeが尊重されるようにしました。 #46275 (Nikolai Kochetov). - zstd を v1.5.4 に更新しました。パフォーマンスと圧縮率がわずかに改善されています。異なるバージョンの ClickHouse でレプリカを実行している場合、
Data after merge/mutation is not byte-identical to data on another replicas.という、説明付きで妥当なエラーメッセージが表示されることがあります。これらのメッセージは想定されたものであり、心配する必要はありません。 #46280 (Raúl Marín)。 - #39737 に起因するパフォーマンス劣化を修正。#46309(Alexey Milovidov)。
- レプリケーションキューが大きい場合でも、
replicas_statusハンドラーはすばやく応答します。 #46310 (Alexey Milovidov). - 集約関数
sum、単項算術関数、および比較関数向けに AVX-512 のサポートを追加。 #37870 (zhao zhou). - marks の分配および読み取り処理全体の調整に関するコードを書き直し、パフォーマンスを最大限に向上させました。これにより #34527 がクローズされました。#43772 (Nikita Mikhaylov)。
- クエリ(サブクエリ)内の冗長な DISTINCT 句を削除します。クエリプランを基盤として実装されています。DISTINCT 句に関しては、
optimize_duplicate_order_by_and_distinctと同様の最適化を行います。query_plan_remove_redundant_distinct設定で有効化できます。関連イシュー: #42648。#44176(Igor Nikonov)。 - クエリの書き換えによる最適化をいくつか追加:
sumIf(123, cond) -> 123 * countIf(1, cond),sum(if(cond, 123, 0)) -> 123 * countIf(cond),sum(if(cond, 0, 123)) -> 123 * countIf(not(cond))#44728 (李扬)。 - メモリ制約付きのマージ処理と、クエリプラン上位での順序付き集約処理との相互作用を改善しました。以前は、実際には不要な場合でも、一部のケースで AIO のために明示的なソートへフォールバックしていました。 #45892 (Nikita Taranov)。
- 並行マージは、公平でスタベーションが発生しない動作を保証するため、デフォルトでラウンドロビン方式でスケジューリングされます。以前は、負荷の非常に高い分片では、厳格な優先度ベースのスケジューリングを使用していたため、大きなマージが小さなマージによってスタベーションを起こす可能性がありました。スケジューリングアルゴリズム(
round_robinまたはshortest_task_first)を選択できるようにするために、サーバー設定オプションbackground_merges_mutations_scheduling_policyを追加しました。 #46247 (Sergei Trifonov)。
改善
- ZooKeeper セッションが失われた場合に備え、
INSERTのリトライをデフォルトで有効にしました。すでに本番環境で運用しています。 #46308 (Alexey Milovidov). - 名前付きタプルに対して、JSON オブジェクト内の不明なキーを無視する機能を追加しました(
input_format_json_ignore_unknown_keys_in_named_tuple)。#45678(Azat Khuzhin)。 finalを使用したクエリに対して、ソートキー式をprewhereに移動してwhere句を最適化できるようにしました。#38893。#38950(hexiaoting)。- バックアップ用に新しいメトリクス
num_processed_filesおよびprocessed_files_sizeを追加し、実際に処理されたファイル数とそのサイズを表すようにしました。 #42244 (Aleksandr). - サーバ間の DNS エラー発生時にリトライを行うようにしました。 #43179 (Anton Kozlov).
- Keeper の改善: 予期しないディスク容量不足の問題を回避するため、あらかじめディスク上の領域を確保するようにしました。Keeper の Raft ログファイルの最大サイズを制御するための
max_log_file_size設定を導入しました。 #44370 (Antonio Andelic). - レプリカが読み取り専用の場合における replica delay API ロジックの挙動を最適化しました。 #45148 (mateng915).
- 空のパスワードが正しくない場合、clickhouse-client でパスワードの対話的な入力を求めるようにしました。#46702 をクローズしました。 #46730 (Nikolay Degterinsky)。
Float*型以外のカラムでのGorilla圧縮の使用を疑わしいものとしてマークするようにしました。 #45376 (Robert Schulze).- マージを実行しているレプリカ名を
postpone_reasonカラムに表示するようになりました。 #45458 (Frank Chen). - part_log に例外のスタックトレースを保存するようになりました。 #45459 (Frank Chen).
regexp_treeDictionary が改善され、https://github.com/ua-parser/uap-core と互換性を持つようになりました。 #45631 (Han Fei)。SYSTEM SYNC REPLICAのチェック処理を更新し、#45508 と #45648 を解決(SmitaRKulkarni)。- 設定
replication_alter_partitions_syncはalter_syncに名称変更されました。 #45659 (Antonio Andelic)。 generateRandomテーブル関数とエンジンがLowCardinalityデータ型をサポートするようになりました。これはテストに便利で、例えばINSERT INTO table SELECT * FROM generateRandom() LIMIT 1000のようなクエリを記述できます。このサポートは #45590 のデバッグに必要でした。 #45661 (Alexey Milovidov)。- 実験的なクエリ結果キャッシュで、構成設定がよりモジュール化されました。 #45679 (Robert Schulze).
- "query result cache" を "query cache" に名前を変更しました。 #45682 (Robert Schulze).
SYSTEM SYNC FILE CACHEコマンドを追加しました。このコマンドはsyncシステムコールを実行します。#8921。#45685(DR)。- 新しい S3 設定項目
allow_head_object_requestを追加しました。この PR により、https://github.com/ClickHouse/ClickHouse/pull/45288 で導入された、HeadObjectの代わりにGetObjectAttributesリクエストを使用する動作をオプション(デフォルトでは無効)にしました。#45701(Vitaly Baranov)。 - 接続名に基づいて接続設定を上書きできる機能を追加しました(つまり、各接続ごとにパスワードを保存しておく必要はなくなり、すべてを
~/.clickhouse-client/config.xmlにまとめて記述できるようになりました。さらに、接続ごとに異なる履歴ファイルを使用することも可能になり、これも便利です)。 #45715 (Azat Khuzhin)。 - Arrow フォーマット: duration 型に対応しました。#45669 をクローズしました。#45750 (flynn)。
- Query Cache のログ出力を拡張し、キャッシュ動作の調査をしやすくしました。 #45751 (Robert Schulze).
- クエリキャッシュのサーバーレベルの設定を、実行時に再設定できるようになりました。 #45758 (Robert Schulze).
- テーブル関数の引数が名前付きコレクションで指定されている場合に、ログにパスワードを出力しないようにしました。 #45774 (Vitaly Baranov).
- 内部の S3 クライアントを改善し、さまざまな形式の URL に対してリージョンとリダイレクトを正しく判別できるようにしました。 #45783 (Antonio Andelic).
- generateRandom で Map 型、IPv4 型および IPv6 型をサポートしました。主にテスト用途で有用です。 #45785 (Raúl Marín)。
- IP 型で empty/notEmpty 関数をサポートしました。 #45799 (Yakov Olkhovskiy).
- カラム
num_processed_filesは 2 つのカラムに分割されました:num_files(BACKUP 用)およびfiles_read(RESTORE 用)。カラムprocessed_files_sizeは 2 つのカラムに分割されました:total_size(BACKUP 用)およびbytes_read(RESTORE 用)。#45800(Vitaly Baranov)。 - MySQL 互換性のため、
SHOW ENGINESクエリをサポートしました。 #45859 (Filatenkov Artur). - 難読化機能によるクエリ処理を改善しました。 #45867 (Raúl Marín).
- 境界値 65535 (2149-06-06) に対する Date 型への変換時の動作を改善。 #46042 #45914 (Joanna Hulboj)。
DROP TABLE実行時に参照先テーブルの依存関係をチェックするための設定check_referential_table_dependenciesを追加しました。この PR は #38326 を解決します。 #45936 (Vitaly Baranov)。Null引数が指定された場合にNullを返すようにtupleElementを修正。#45894 をクローズ。#45952(flynn)。- S3 のワイルドカードに一致するファイルが存在しない場合にエラーをスローするようにしました。これにより #45587 がクローズされました。#45957 (chen).
- クラスタ状態データを使用して、バックアップ/リストアの同時実行状況を確認できるようにしました。 #45982 (SmitaRKulkarni).
- ClickHouse Client: あいまい検索に対して「exact」マッチングを使用するようにし、SQL クエリのマッチングにおいて大文字小文字を無視できる正しい動作と、より適切なアルゴリズムを用いるようにしました。 #46000 (Azat Khuzhin).
- 誤った
CREATE View X TO Y AS SELECT構文の使用を禁止しました。 #4331 をクローズ。 #46043(flynn)。 - Storage
Logファミリーがstorage_policyの設定に対応しました。 #43421 をクローズしました。 #46044 (flynn)。 - 結果が空の場合の
JSONColumnsフォーマットを改善。#46024 をクローズ。#46053(flynn)。 - SipHash128 のリファレンス実装を追加しました。 #46065 (Salvatore Mesoraca).
- mmap を使用した割り当て時間と割り当てバイト数を記録する新しいメトリクスを追加。 #46068 (李扬)。
- 現在、
leftPad、rightPad、leftPadUTF8、rightPadUTF8のような関数では、2 番目の引数lengthは UInt8|16|32|64|128|256 のいずれかでなければなりません。これは ClickHouse ユーザーにとって制約が厳しすぎるうえ、arrayResizeやsubstringなどの他の類似関数との一貫性もありません。#46103(李扬)。 - デバッグビルド時に、
welchTTest関数の結果の統計値が NaN となる場合のアサーションを修正し、他の類似関数と挙動を統一しました。studentTTestの挙動を、これまでの使い勝手の悪い例外スローではなく NaN を返すように変更しました。これにより #41176 および #42162 がクローズされます。#46141(Alexey Milovidov)。 - 大きな整数と ORDER BY WITH FILL の使い勝手を向上しました。大きな整数(128 ビットおよび 256 ビット)で ORDER BY する際に、WITH FILL の開始点と終了点として通常の整数を使用できるようにしました。開始点または終了点が負の値である大きな整数に対して誤った結果が返される問題を修正しました。これにより #16733 がクローズされました。#46152(Alexey Milovidov)。
system.tablesにparts、active_parts、total_marksカラムを追加。issue。#46161(attack204)。- 関数 "multi[Fuzzy]Match(Any|AnyIndex|AllIndices}" は、vectorscan での評価に非常に時間がかかる可能性が高い正規表現を拒否するようになりました。 #46167 (Robert Schulze).
insert_null_as_defaultが有効で、かつカラムにデフォルト値が定義されていない場合、カラム型のデフォルト値が使用されます。また、この PR では LowCardinality カラムにおける NULL 値に対するデフォルト値の使用も修正されています。 #46171 (Kruglov Pavel).- S3 クライアントには、明示的に定義されたアクセスキーを優先的に使用します。
use_environment_credentialsがtrueに設定されていて、ユーザーがクエリまたは設定を通じてアクセスキーを指定している場合は、環境変数から取得したキーではなく、その指定されたキーが使用されます。 #46191 (Antonio Andelic)。 - MySQL の SQL 方言との互換性を向上させるため、関数 "formatDateTime()" にエイリアス "DATE_FORMAT()" を追加し、関数
formatDateTimeのフォーマット指定子を "a"、"b"、"c"、"h"、"i"、"k"、"l"、"r"、"s"、"W" に対応するよう拡張しました。 ### ユーザー向け変更のドキュメント項目 ユーザー向けの短い説明:DATE_FORMATはformatDateTimeのエイリアスです。指定されたフォーマット文字列に従って時刻をフォーマットします。Format は定数式である必要があるため、1 つの結果カラムに対して複数のフォーマットを使用することはできません。(formatDateTime へのリンクを提供)。 #46302 (Jake Bamrah)。 - 並列レプリカ(
s3ClusterおよびMergeTreeテーブル)用のコールバックタスクに関するProfileEventsとCurrentMetricsを追加しました。 #46313 (Alexey Milovidov)。 KeeperMapストレージエンジンを使用するテーブルに対して、DELETEおよびUPDATEのサポートを追加しました。 #46330 (Antonio Andelic)。- RENAME クエリをクエリパラメータを使用して実行できるようにしました。 #45778 を解決します。 #46407(Nikolay Degterinsky)。
- REPLACE トランスフォーマーを使用するパラメータ化された SELECT クエリの問題を修正し、#33002 を解決しました。#46420 (Nikolay Degterinsky)。
- 一時/外部テーブル用に使用される内部データベースを、非同期メトリック「NumberOfDatabases」のカウントから除外しました。これにより、system テーブル「system.databases」と動作が一貫するようになります。 #46435 (Robert Schulze).
distribution_queueテーブルにlast_exception_timeカラムを追加しました。 #46564 (Aleksandr)- パラメータ化ビューで、パラメータ付き
IN句をサポート。 #46583 (SmitaRKulkarni). - サーバー起動時には named collections を読み込まず、初回アクセス時に読み込むようにしました。 #46607 (Kseniia Sumarokova).
ビルド/テスト/パッケージングの改善
- LLVM ランタイムによって実装された GWP-ASan を導入しました。これにより #27039 がクローズされました。 #45226 (Han Fei).
- あえてテストを不安定かつよりフレークしやすいものにするため、テスト内の MergeTree の設定にランダム化を追加しました。 #38983 (Anton Popov).
- PowerPC で HDFS サポートを有効化し、これにより以下の機能テスト 02113_hdfs_assert.sh、02244_hdfs_cluster.sql、02368_cancel_write_into_hdfs.sh が修正されました。 #44949 (MeenaRenganathan22).
- clickhouse-keeper 用の systemd.service ファイルを追加しました。 #44293 を修正します。 #45568 (Mikhail f. Shiryaev).
- ClickHouse の poco フォークを "contrib/" から "base/poco/" に移動しました。 #46075 (Robert Schulze).
- 子プロセスを再起動するための
clickhouse-watchdogのオプションを追加しました。これはあまり有用ではありません。 #46312 (Alexey Milovidov). - 環境変数
CLICKHOUSE_DOCKER_RESTART_ON_EXITが 1 に設定されている場合、Docker コンテナは最初のプロセスとしてではなく子プロセスとしてclickhouse-serverを実行し、終了したときにそれを再起動します。 #46391 (Alexey Milovidov). - systemd サービスファイルを修正しました。 #46461 (SuperDJY).
- ClickHouse のビルドに必要な Clang の最小バージョンを 12 から 15 に引き上げました。 #46710 (Robert Schulze).
- Intel QPL を v0.3.0 から v1.0.0 にアップグレードしました。また、libaccel-config をビルドし、QPL ライブラリには動的ではなく静的にリンクするようにしました。 #45809 (jasperzhu).
バグ修正(公式安定版でのユーザー影響のある不具合)
StorageRabbitMQにおいて、データをrabbitmq_flush_interval_msまたはrabbitmq_max_block_sizeの条件で正確にフラッシュするようにしました。#42389 をクローズしました。#45160 をクローズしました。#44404(Kseniia Sumarokova)。sparkBar関数でのレンダリングにPODArrayを使用し、メモリ使用量を制御できるようにしました。#44467 をクローズしました。#44489(Duc Canh Le)。- 関数 (quantilesExactExclusive, quantilesExactInclusive) がソートされていない配列要素を返していた問題を修正。 #45379 (wujunfu).
- OpenTelemetry が有効な場合に HTTPHandler で発生する未処理の例外を修正。 #45456 (Frank Chen)。
- 8 桁の数値を
Dateとして推論しないようにしました。誤ったデータが読み込まれるおそれがあるためです。 #45581 (Kruglov Pavel). odbc_bridge_use_connection_pooling設定が正しく使用されるように修正。 #45591 (Bharat Nallan)。- キャッシュ内のコールバックが呼び出されたとき、このキャッシュオブジェクトがすでに破棄されている可能性があります。安全性を確保するため、メンバーは値でキャプチャします。タスクスケジューリングについても、ストレージが破棄される前に非アクティブ化されるため安全です。#45548 を解決しました。#45601(Han Fei)。
- codec Delta または DoubleDelta を codec Gorilla と組み合わせて使用した場合に発生するデータ破損を修正しました。 #45615 (Robert Schulze)。
- 無効な読み取りを防ぐため、N-gram Bloom Filter 索引の使用時に型を正しくチェックするようにしました。 #45617 (Antonio Andelic).
c-ares周辺でいくつかのセグメンテーションフォルトが報告されました。これは以前に私が出した pull request で紛れ込んだものでした。Alexander Tokmakov の協力を得て修正しました。#45629 (Arthur Passos)。- 重複した主キーが発生した場合のキーの説明文を修正しました。これは PROJECTION で発生することがあります。詳細は #45590 を参照してください。 #45686(Amos Bird)。
- バックアップの圧縮方式と圧縮レベルを設定できるようにしました。Closes #45690. #45737 (Pradeep Chhetri).
select_query_typed.limitOffsetの代わりにselect_query_typed.limitByOffsetを使用する必要があります。 #45817 (刘陶峰).- experimental analyzer を使用した場合、
SELECT number FROM numbers(100) LIMIT 10 OFFSET 10;のようなクエリが誤った結果(この SQL では結果が空になる)を返す問題がありました。これは、クエリプランナによって不要な OFFSET ステップが追加されていたことが原因です。 #45822 (刘陶峰). - 後方互換性 -
INSERT ... VALUES ...式で必要となる、UInt64からIPv4への暗黙的な縮小変換を許可しました。 #45865 (Yakov Olkhovskiy). - 先頭のオクテットが欠落した IPv4 アドレスとの混在アドレス(
::.1.2.3のような形式)に対する IPv6 パーサーのバグを修正。 #45871 (Yakov Olkhovskiy). system.processesテーブルおよびSHOW PROCESSLISTクエリにquery_kindカラムを追加し、重複コードを削除しました。これにより、グローバル設定パラメータmax_concurrent_select_queriesがINTERSECTまたはEXCEPTチェーンを含むクエリに対して適用されていなかった不具合を修正しました。#45872(Alexey Milovidov)。- 関数
stochasticLinearRegressionでのクラッシュを修正。WingFuzz により発見。 #45985 (Nikolai Kochetov)。 INTERSECTおよびEXCEPT修飾子を使用し、スパースカラム(設定ratio_of_defaults_for_sparse_serializationで制御)を有効にしたテーブルからデータを読み取るSELECTクエリで発生するクラッシュを修正。 #45987 (Anton Popov).- FINAL を伴う DESC ソートに対する read in order 最適化を修正し、#45815 をクローズ。#46009(Vladimir C)。
- コンパクトパーツで、多段にネストされた存在しないカラムを読み込もうとした場合の動作を修正しました。 #46045 (Azat Khuzhin).
system.processesのelapsedカラムで値が 10 倍になっていた問題を修正。 #46047 (Azat Khuzhin).- ドメイン IP 型 (IPv4, IPv6) をネイティブ型に置き換える変更(https://github.com/ClickHouse/ClickHouse/pull/43221)に対するフォローアップ修正。#46087(Yakov Olkhovskiy)。
- パラメータにすでに値が設定されている場合の、設定ファイルにおける環境変数の置換を修正しました。これにより #46131 および #9547 がクローズされます。 #46144(pufit)。
- GROUPING SETS 使用時の誤った述語プッシュダウンを修正しました。#45947 をクローズしました。#46151(flynn)。
- 定数キーを使用した場合に
fulls_sorting_joinでパイプラインがスタックする可能性があった不具合を修正しました。 #46175 (Vladimir C). - フォーマット時にタプル関数をリテラルに書き換えないようにして、結果が不正確になるのを防ぎます。 #46232 (Salvatore Mesoraca).
- Arrow フォーマットでの LowCardinality(Nullable) 読み取り時に発生し得る範囲外アクセスエラーを修正。 #46270 (Kruglov Pavel)。
SYSTEM UNFREEZEクエリが例外CANNOT_PARSE_INPUT_ASSERTION_FAILEDにより失敗していた問題を修正しました。 #46325 (Aleksei Filatov)。- HashTable を保持する関数の集約状態をデシリアライズする際に発生しうる、整数オーバーフローに起因するクラッシュを修正しました。 #46349 (Nikolai Kochetov).
- 非同期インサートで、
VALUESフォーマットで送信された不正なデータによって発生する可能性があるLOGICAL_ERRORを修正。#46350(Anton Popov)。 ALTER ... MOVE PART ... TO TABLEを実行しようとした際に発生する LOGICAL_ERROR を修正しました。この種のクエリはそもそもサポートされていませんでした。 #46359 (Alexander Tokmakov).parallel_distributed_insert_selectが有効な場合の、並列分散 insert select 実行時における s3Cluster のスキーマ推論を修正。#46381 (Kruglov Pavel)。arr1とarr2が同一のNestedカラムのフィールドである場合のALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ...のようなクエリの不具合を修正しました。#46387(Anton Popov)。- Scheduler がタスクのスケジューリングに失敗することがあります。その場合、MulityPartUpload 全体を中止し、
UploadHelperは既にスケジュールされたタスクの完了を待機する必要があります。 #46451 (Dmitry Novik). - 異なるデフォルトの型を持つ Merge に対する
PREWHEREを修正(カラムのデフォルトの型が異なる場合に発生していた一部のNOT_FOUND_COLUMN_IN_BLOCKを解消し、テーブル間でカラムの型が同じ場合はPREWHEREを許可し、型が異なる場合にのみ禁止するように変更)。 #46454 (Azat Khuzhin)。 ORDER BYで定数値が使用された場合に発生する可能性のあったクラッシュを修正。#46466 を修正。#46493(Nikolai Kochetov)。disk設定がクエリレベルで指定されており、かつstorage_policyが設定ファイルの MergeTree 設定セクションで指定されている場合でも、例外を送出しないようにしました。diskは設定ファイル側の値を上書きします。 #46533 (Kseniia Sumarokova)。- 関数
arrayMapにおける定数LowCardinality引数の誤った処理を修正しました。このバグにより、リリースビルドではセグフォルトが、デバッグビルドでは論理エラーBad castが発生する可能性がありました。 #46569 (Alexey Milovidov)。 - #46557 を修正しました。#46611(Alexander Gololobov による)。
- サーバーが1分30秒以内に起動しない場合に、clickhouse-server の systemd ユニットが無限に再起動を繰り返す問題を修正(systemd サービスから clickhouse-server を起動する際のタイムアウト処理を無効化)。#46613(Azat Khuzhin)。
- 非同期 INSERT 中に割り当てられたメモリバッファがグローバルコンテキストで解放されており、対応するユーザーおよびクエリ向けの MemoryTracker カウンタが正しく更新されていませんでした。その結果、誤って OOM 例外が発生することがありました。 #46622 (Dmitry Novik)。
- 将来の analyze 実行でも使用されるため、table_join から on_expression をクリアしないように更新しました。これにより #45185 が解決されました。 #46487 (SmitaRKulkarni)。
ClickHouse 23.1 リリース、2023-01-26
ClickHouse リリース 23.1
アップグレードに関する注意事項
SYSTEM RESTART DISKクエリは何もしない(no-op)動作になります。 #44647 (alesapin).HASHED/SPARSE_HASHED辞書のPREALLOCATEオプションは何もしない(no-op)動作になります。 #45388 (Azat Khuzhin). これはもはや有意な利点をもたらしません。- Float32 型でも Float64 型でもないカラムに対して
Gorillacodec を使用することを禁止しました。 #45252 (Robert Schulze). 意味がなく、不整合を引き起こしていました。 - 非推奨の構文で作成された
*MergeTreeテーブルでは、並列クォーラム挿入が正しく動作しない可能性があります。そのため、そのようなテーブルに対しては並列クォーラム挿入のサポートを完全に無効化しました。新しい構文で作成されたテーブルには影響しません。 #45430 (Alexander Tokmakov). - AWS S3 でオブジェクトサイズを取得する際、
HeadObjectリクエストの代わりにGetObjectAttributesリクエストを使用します。この変更により、例えば AWS SDK の更新後にリージョンが明示されていないエンドポイントを正しく扱えなくなる問題が修正されます。 #45288 (Vitaly Baranov). AWS S3 と Minio ではテストされていますが、さまざまな S3 互換サービス(GCS, R2, B2 など)には微妙な非互換性がある可能性があることに注意してください。この変更により、GetObjectAttributesリクエストを許可するように ACL を調整する必要が生じる場合もあります。 - タイムゾーン名にパスを使用することを禁止しました。例えば
/usr/share/zoneinfo/Asia/Adenのようなタイムゾーン名は許可されません。Asia/Adenのような IANA タイムゾーンデータベース名を使用する必要があります。 #44225 (Kruglov Pavel). - 等値結合と定数式を組み合わせたクエリ(例:
JOIN ON t1.x = t2.x AND 1 = 1)は、誤った結果を返すため禁止されます。 #44016 (Vladimir C).
新機能
- 正規表現の木構造を走査してキーを抽出する Dictionary ソース。User-Agent のパースに利用できます。#40878 (Vage Ogannisian)。#43858 (Han Fei)。
- パラメータ化された VIEW 機能が追加され、VIEW テーブルエンジンに対してクエリパラメータを指定できるようになりました。これにより #40907 が解決されました。 #41687 (SmitaRKulkarni)。
quantileInterpolatedWeighted/quantilesInterpolatedWeighted関数を追加しました。 #38252 (Bharat Nallan)- Spark の explode 関数と同様に、
Map型に対して array join をサポートしました。 #43239 (李扬)。 - SQL 標準準拠のバイナリおよび 16 進文字列リテラルをサポートしました。 #43785 (Mo Xuan)。
DateTimeを Joda-Time スタイルでフォーマットできるようにしました。詳細は Joda-Time のドキュメント を参照してください。 #43818 (李扬)。formatDateTime用の小数秒フォーマッタ(%f)を実装しました。 #44060 (ltrk2). #44497 (Alexander Gololobov).- 2 つの日付、または時刻を含む 2 つの日付の差を、完全な単位数として計算するための
age関数を追加しました。#41115 をクローズしました。#44421(Robert Schulze)。 - 辞書に
Nullソースを追加しました。#44240 をクローズしました。 #44502(mayamika)。 s3_storage_class設定オプションで S3 のストレージクラスを指定できるようにしました。例:<s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class>#44443 をクローズしました。 #44707 (chen)。- 名前付きタプルをパースする際に JSON オブジェクト内の要素が欠けている場合は、デフォルト値を挿入するようにしました。この動作を制御するための設定
input_format_json_defaults_for_missing_elements_in_named_tupleを追加しました。#45142#issuecomment-1380153217 をクローズしました。#45231(Kruglov Pavel)。 - ProfileEvents の
ServerStartupMillisecondsにサーバーの起動時間を記録するようにしました。#43188 を解決しました。#45250(SmitaRKulkarni)。 - ストリーミングエンジン Kafka/RabbitMQ/NATS をリファクタリングして改善し、すべてのフォーマットをサポートしました。また、フォーマットも少しリファクタリングしました。- サフィックス/プレフィックス付きの行ベースフォーマットでメッセージを生成する処理を修正しました。これにより各メッセージはすべてのデリミタを含めて完全にフォーマットされ、同じ入力フォーマットを用いて再度パースできます。- Native、Parquet、ORC などのブロックベースフォーマットをサポートしました。各ブロックは個別のメッセージとしてフォーマットされます。1 つのメッセージ内の行数はブロックサイズに依存するため、
max_block_size設定で制御できます。- 新しいエンジン設定kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_messageを追加しました。これらは行ベースフォーマットで 1 メッセージにフォーマットされる行数を制御します。デフォルト値は 1 です。- NATS テーブルエンジンでの高いメモリ消費を修正しました。- NATS プロデューサで任意のバイナリデータをサポートしました(以前は末尾に \0 を含む文字列でのみ動作していました)。- ドキュメントに不足していた Kafka/RabbitMQ/NATS のエンジン設定を追加しました。- Kafka/RabbitMQ/NATS におけるメッセージの生成と消費をリファクタリングし、WriteBuffers/ReadBuffers のセマンティクスから分離しました。- 出力フォーマットをリファクタリングしました:Kafka/RabbitMQ/NATS で使用されていた各行ごとのコールバックを削除し(現在そこではコールバックを使用していません)、IRowOutputFormat を直接使用できるようにし、行末および行間のデリミタを明確にし、出力フォーマットをリセットして再度フォーマットを開始できるようにしました。- formatRow 関数に適切な実装を追加しました(フォーマットのリファクタリングに伴う副産物)。#42777(Kruglov Pavel)。 CapnProtoフォーマットで、Nestedテーブルの読み書きをStructのListとしてサポートしました。Decimal32/64型をInt32/64型として読み書きできるようにしました。#43319 をクローズしました。#43379(Kruglov Pavel)。system.text_logにmessage_format_stringカラムを追加しました。このカラムには、メッセージをフォーマットするために使用されたパターンが含まれます。 #44543 (Alexander Tokmakov)。これにより、ClickHouse のログに対してさまざまな分析が可能になります。- CSV/TSV/CustomSeparated 入力フォーマットに対して、カラム名(および型情報)を含むヘッダーの自動検出を試みます。 この挙動を有効にする設定 input_format_tsv/csv/custom_detect_header を追加しました(デフォルトで有効)。#44640 を解決します。 #44953 (Kruglov Pavel).
実験的機能
- 効率的なテキスト検索のための新しいセカンダリ索引型として、実験的な転置インデックスを追加しました。#38667 (larryluogit)。
- 実験的なクエリ結果キャッシュを追加しました。#43797 (Robert Schulze)。
- IO リクエスト用の拡張可能かつ設定可能なスケジューリングサブシステムを追加しました(まだ IO コード自体とは統合されていません)。#41840 (Sergei Trifonov)。この機能は一切何もしません。お楽しみください。
Replicatedデータベースの死んだレプリカのメタデータを削除するSYSTEM DROP DATABASE REPLICAを追加しました。#41794 を解決します。#42807 (Alexander Tokmakov)。
パフォーマンス向上
MergeTreeテーブルの起動時には非アクティブなパーツをロードしないようにしました。 #42181 (Anton Popov).- ストレージ
S3およびテーブル関数s3から多数の小さなファイルを読み取る際のレイテンシを改善しました。ストレージS3から読み取る際に、設定remote_filesystem_read_methodおよびremote_filesystem_read_prefetchが有効になるようになりました。 #43726 (Anton Popov)。 - Parquet/ORC ファイル内の struct フィールドの読み取りが最適化されました。必要なフィールドのみを読み込みます。 #44484 (lgbo).
- HTTP インターフェイス経由のクエリで、二段階集約アルゴリズムが誤って無効化されていましたが、再度有効化したことで、大幅なパフォーマンス向上が得られました。 #45450 (Nikolai Kochetov)。
- StorageFile に対して mmap サポートを追加し、clickhouse-local のパフォーマンスを向上させました。 #43927 (pufit)
HashedDictionaryにシャーディング(分片)サポートを追加し、並列ロードを可能にしました(shardsの数に対してほぼ線形にスケールします)。 #40003 (Azat Khuzhin).- クエリ解析を高速化しました。 #42284 (Raúl Marín).
exprがLowCardinalityカラムである場合は、常に OR チェーンexpr = x1 OR ... OR expr = xNをexpr IN (x1, ..., xN)に置き換えます。この場合、optimize_min_equality_disjunction_chain_length設定は無視されます。 #42889 (Guo Wangyang).- ThreadStatus 周辺のコードを最適化し、パフォーマンスをわずかに向上させました。 #43586 (Zhiguo Zhou)。
- カラム単位の三値論理評価を自動ベクトル化によって最適化しました。このマイクロベンチマークのパフォーマンステストでは、ICX デバイス(Intel Xeon Platinum 8380 CPU)上で最大 21 倍の性能向上が確認されました。#43669(Zhiguo Zhou)。
- 可能な限り、
system.tablesテーブルでの読み取りロックの取得を回避するようにしました。 #43840 (Raúl Marín)。 - ThreadPool を最適化しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上で SSB(Star Schema Benchmark)を用いて実施した性能実験により、この変更によって ThreadPoolImpl::mutex に対するロック競合を 75% 削減し、CPU 使用率を向上させ、全体的なパフォーマンスを 2.4% 改善できることが示されました。 #44308 (Zhiguo Zhou)。
- ハッシュテーブルのサイズを予測する最適化は、キャッシュされたハッシュテーブルのサイズが十分に大きい場合にのみ適用されるようになりました(しきい値は経験的に決定され、ハードコードされています)。 #44455 (Nikita Taranov)。
- リモートファイルシステムからの非同期読み取りのパフォーマンスを小幅に改善。 #44868 (Kseniia Sumarokova)。
- 次の条件に対して高速パスを追加: -
col like '%%'; -col like '%'; -col not like '%'; -col not like '%'; -match(col, '.*'). #45244 (李扬). - フィルタリング(WHERE 句)におけるハッピーパス最適化をわずかに改善しました。 #45289 (Nikita Taranov)。
toUnixTimestamp64*の単調性情報を提供して、索引解析でより多くの代数的最適化を行えるようにしました。 #44116 (Nikita Taranov)。- クエリ処理における一時データ(ディスクへのスピル)の構成を、ファイルシステムキャッシュ(キャッシュ用ディスクの空き容量を使用)と協調して動作できるようにしました #43972(Vladimir C)。これは主に ClickHouse Cloud での動作を改善しますが、必要な設定が分かっていればセルフマネージド環境でも使用できます。
system.replicasテーブルでレプリカのステータス取得を並列化しました。これにより #43918 がクローズされました。 #43998 (Nikolay Degterinsky)。- S3 へのバックアップ時のメモリ消費を最適化しました。S3 へのファイルコピーは、メモリを大量に消費する可能性があった
WriteBufferFromS3を使用せず、直接コピーされるようになりました。 #45188 (Vitaly Baranov)。 - 非同期ブロック ID 用のキャッシュを追加しました。これにより、非同期挿入の重複排除を有効にした際の ZooKeeper へのリクエスト数を削減できます。 #45106 (Han Fei).
改善点
- 引数なしで
generateRandomを使用した場合、挿入先テーブルの構造を使用するようになりました。 #45239 (Kruglov Pavel). JSONExtract関数で、JSON 内で文字列として格納されている浮動小数点数を、暗黙的に整数へ変換できるようにしました。例:JSONExtract('{"a": "1000.111"}', 'a', 'UInt64')->1000。以前は 0 を返していました。 #45432 (Anton Popov).- イントロスペクションを改善するため、テーブル
system.formatsにフィールドsupports_parallel_parsingおよびsupports_parallel_formattingを追加しました。 #45499 (Anton Popov). - CustomSeparated/Template フォーマットにおける CSV フィールドの読み取りを改善。#42352 を解決。#39620 を解決。#43332(Kruglov Pavel)。
- クエリの経過時間の測定を統一。 #43455 (Raúl Marín).
- SELECT クエリに仮想カラムが含まれている場合に、file/hdfs/s3 の各 table function で挿入先テーブルの構造を自動的に利用する処理を改善し、
Block structure mismatchやnumber of columns mismatchエラーが発生し得た問題を修正しました。 #43695 (Kruglov Pavel). - 関数
rangeが符号付き引数をサポートするようになりました。 #43333 を修正。 #43733(sanyu)。 - 冗長なソートを削除します。たとえば、サブクエリ内の関連する ORDER BY 句によるソートを削除します。クエリプランに基づいて実装されています。
ORDER BY句に関してはoptimize_duplicate_order_by_and_distinctと同様の最適化を行いますが、より汎用的であり、任意の冗長なソートステップ(ORDER BY 句によってのみ引き起こされるものに限らない)に適用され、サブクエリの深さを問わず適用されます。#42648 に関連。#43905(Igor Nikonov)。 - BACKUP でのファイル重複排除を無効にできるようになりました(重複排除を行わないバックアップでは、完全な RESTORE の代わりに ATTACH を使用できます)。例えば
BACKUP foo TO S3(...) SETTINGS deduplicate_files=0(デフォルトはdeduplicate_files=1)。 #43947 (Azat Khuzhin)。 - テキスト形式に対するスキーマ推論をリファクタリングして改善しました。結果のカラム型を
Nullableにするかどうかを制御する新しい設定schema_inference_make_columns_nullableを追加しました(デフォルトで有効)。#44019(Kruglov Pavel)。 PROXYv1プロトコルのサポートを強化。 #44135 (Yakov Olkhovskiy).- クリーンアップスレッドが最後に実行したパーツチェックに関する情報を
system.partsテーブルに追加。 #44244 (Dmitry Novik)。 - 読み取り専用モードでは INSERT にテーブル関数を使用できないようにしました。 #44290 (SmitaRKulkarni).
CleanupThreadの1回のイテレーションで処理されるパーツ数を制限できるようにする設定simultaneous_parts_removal_limitを追加しました。 #44461 (Dmitry Novik)。- クエリで仮想カラムのみが必要な場合は、ReadBufferFromS3 を初期化しないようになりました。この変更は #44246 の解決に役立つ可能性があります。#44493(chen)。
- 重複したカラム名に関するヒントが出ないようにしました。 #44130 をクローズ。 #44519(Joanna Hulboj)。
- ディスクのエンドポイントでのマクロ展開を許可しました。#40951 を解決しました。#44533(SmitaRKulkarni)。
input_format_json_read_object_as_stringが有効な場合のスキーマ推論機能を改善しました。 #44546 (Kruglov Pavel)。DatabaseReplicated内で引数を指定したReplicatedMergeTreeテーブルの作成を禁止できる、ユーザーレベルの設定database_replicated_allow_replicated_engine_argumentsを追加しました。 #44566 (alesapin).index_granularityに対して無効な値である 0 を誤って指定してしまうことを防止します。これにより #44536 がクローズされました。 #44578(Alexey Milovidov)。- config.xml の
kerberosセクション内のkeytabパラメータで、サービスの keytab ファイルへのパスを設定できるようになりました。 #44594 (Roman Vasin)。 - あいまい検索向けに、既に入力されたクエリの一部を利用できるようにしました(Rust で書かれ、ClickHouse に静的リンクされている
skimライブラリに渡します)。#44600(Azat Khuzhin)。 - 実験的機能である JSON Object 型でもネストされた JSON オブジェクトを読み取れるよう、デフォルトで
input_format_json_read_objects_as_stringsを有効化しました。 #44657 (Kruglov Pavel). - 非同期挿入の重複排除の改善: ユーザーが重複した非同期挿入を行った場合には、Keeper に問い合わせる前にメモリ内で重複排除を行うようにしました。 #44682 (Han Fei).
- 入出力の
Avroフォーマットで bool 型が ClickHouse の bool 型としてパースされるようになりました。 #44684 (Kruglov Pavel)。 - Arrow/Parquet/ORC で Bool 型をサポートしました。#43970 をクローズしました。#44698(Kruglov Pavel)。
- UUID を読み込む際に、クォートの外側まで貪欲にパースしないようにしました。これにより、誤ったデータが誤って正常にパースされてしまうことを防ぎます。 #44686 (Raúl Marín).
- Int64 がオーバーフローする場合は UInt64 を推論し、スキーマ推論時の一部の変換処理を修正。 #44696 (Kruglov Pavel).
- これまで
Replicatedデータベース内での依存関係の解決は、いささか場当たり的な方法で行われていましたが、現在は明示的なグラフを用いた適切な方法で行われるようになりました。 #44697 (Nikita Mikhaylov)。 output_format_pretty_row_numbersがブロック間でカウンタを引き継がない問題を修正。#44815 をクローズ。#44832(flynn)。- バックグラウンドのクリーンアップ処理と同時に実行されるパーツのマージに起因する
system.errorsへのエラー報告を行わないようにしました。 #44874 (Raúl Marín). - Distributed async INSERT のメトリクスを最適化および修正しました。 #44922 (Azat Khuzhin).
- 同時バックアップおよびリストアを禁止するための設定を追加しました。これにより #43891 が解決されました。実装内容: *
Context内でBackupWorkerが作成される際に読み取り・設定される、同時バックアップおよびリストアを禁止するサーバーレベルの設定を追加。* 設定はデフォルトで true。* バックアップまたはリストアを開始する前に、他のバックアップ/リストアが実行中かどうかを確認するチェックを追加。内部リクエストの場合は、backup_uuidを使用して同一ノードからのリクエストかどうかを確認します。#45072(SmitaRKulkarni)。 - システムログ用に
<storage_policy>設定パラメータを追加。 #45320 (Stig Bakken)。
ビルド/テスト/パッケージングの改善
- clickhouse-client のローカル履歴に対するファジー検索用として(Rust で実装されている)
skimライブラリを静的リンクしました。 #44239 (Azat Khuzhin). - Rust を理由として共有ライブラリへのリンクのサポートを削除しました。実際には、Rust はこの削除の口実にすぎず、いずれにせよ削除する予定でした。 #44828 (Alexey Milovidov).
- パッケージから
adduserツールへの依存関係を削除しました。これは使用していないためです。これにより #44934 が修正されます。 #45011 (Alexey Milovidov). SQLiteライブラリを最新バージョンに更新しました。これは SQLite データベースおよびテーブル統合エンジンで使用されています。また、TSan の誤検知レポートを修正しました。これにより #45027 がクローズされます。 #45031 (Alexey Milovidov).- PowerPC における WeakHash の衝突問題に対処するために CRC-32 を変更しました。 #45144 (MeenaRenganathan22).
- aws-c* サブモジュールを更新しました。 #43020 (Vitaly Baranov).
- 成功している backport PR と、成功していて承認済みの PR を自動的にマージするようにしました。 #41110 (Mikhail f. Shiryaev).
- ClickHouse CI のステータスを表示するための ウェブサイト を公開しました。 ソース。
不具合修正
- ドメインの IP 型 (IPv4, IPv6) をネイティブ型に置き換えました。 #43221 (Yakov Olkhovskiy)。これにより、コード内で未実装だった箇所の一部が自動的に解消されます。
- バックアップ処理中にミューテーションが kill された場合でもバックアップ処理が正しく動作するように修正しました。 #45351 (Vitaly Baranov).
- 例外メッセージ
Invalid number of rows in Chunkを修正しました。#41404。#42126 (Alexander Gololobov)。 - ソート後に式を実行した際に未初期化の値が使用される可能性があった問題を修正し、#43386 #43635(Kruglov Pavel)をクローズしました。
- 集約コンビネータにおける NULL の扱いを改善し、特殊な最適化
optimize_rewrite_sum_if_to_count_ifを使用した際に発生しうるセグメンテーションフォルトや論理エラーを修正しました。#43758 をクローズしました。#43813(Kruglov Pavel)。 - CREATE USER/ROLE クエリの設定制約を修正しました。 #43993 (Nikolay Degterinsky).
- テーブルメタデータの
EPHEMERALカラムに対してパースできないデフォルト値が設定されていたバグを修正しました。 #44026 (Yakov Olkhovskiy). - 互換性設定に指定された不正なバージョンの解析を修正。 #44224 (Kruglov Pavel).
datetimeからの interval 減算の挙動を加算と同一にしました。 #44241 (ltrk2).- ビューの結果サイズの上限を撤廃しました。 #44261 (lizhuoyu5).
do_not_evict_index_and_mrk_files=1の場合にキャッシュで発生し得る論理エラーを修正。#42142 をクローズ。#44268(Kseniia Sumarokova)。- ライトスルーキャッシュで、キャッシュへの書き込みが時期尚早に中断されてしまう可能性があった問題を修正(本来は停止すべきでない状況で、誤った仮定によりキャッシュが停止してしまうことがあった)。 #44289 (Kseniia Sumarokova).
- 定数引数を取る
IN関数がLowCardinalityと共に定数引数として使用された場合に発生し得るクラッシュを修正しました。 #44221 を修正。 #44346(Nikolai Kochetov)。 - パラメトリック集約関数の複雑なパラメータ(配列など)に対するサポートを修正しました。これにより #30975 が解決しました。この変更以前は、集約関数
sumMapFilteredは分散クエリでは使用できませんでした。#44358(Alexey Milovidov)。 - BSON スキーマ推論における ObjectId の読み取りを修正。 #44382 (Kruglov Pavel)。
- ReplicatedMergeTree において、マージが完了する前に一時パーツが早期に削除されてしまう原因となるレースコンディションを修正しました。この問題により、
No such file or directory: xxxのようなエラーが発生する可能性がありました。この修正により #43983 が解決されました。#44383(alesapin)。 - クラスタ名が指定されていない場合に、一部の無効な
SYSTEM ... ON CLUSTERクエリが予期しない動作をしていました。これを修正し、現在は無効なクエリは本来どおりSYNTAX_ERRORをスローします。 #44264 を修正。 #44387(Alexander Tokmakov)。 - ORC フォーマットにおける Map 型の読み込みを修正。 #44400 (Kruglov Pavel).
- Parquet/ORC フォーマットの入力データに存在しないカラムを読み込もうとした場合の処理を修正しました。以前は
INCORRECT_NUMBER_OF_COLUMNSエラーが発生する可能性がありました。#44333 をクローズします。 #44405(Kruglov Pavel)。 - これまで
bar関数は、5/8 と 6/8 のバーの表示に同じ '▋' (U+258B "Left five eighths block") 文字を使用していました。この変更により、6/8 のバーの表示には '▊' (U+258A "Left three quarters block") を使用するように修正されました。 #44410 (Alexander Gololobov). - 設定ファイルでプロファイル設定制約より後にプロファイル設定を記述していると、制約が有効にならない問題を修正。 #44411 (Konstantin Bogdanov).
- データを含む
EXPLAIN AST INSERTクエリの実行時に発生するSYNTAX_ERRORを修正。#44207 をクローズ。#44413(save-my-heart)。 - CRLF 改行を用いる CSV フォーマットでの bool 値の読み取りを修正。#44401 をクローズ。 #44442(Kruglov Pavel)。
- LowCardinality Dictionary 上では and/or/if/multiIf 関数を実行しないようにし、結果の型が LowCardinality にならないようにしました。これにより、場合によって発生していた
Illegal column ColumnLowCardinalityエラーを防ぎます。#43603 を修正。#44469(Kruglov Pavel)。 max_streams_for_merge_tree_readingSETTING 使用時の mutation の問題を修正。 #44472 (Anton Popov)。- ASTSelectQuery::formatImpl における GROUPING SETS 使用時のヌルポインタ逆参照が発生する可能性のある不具合を修正しました(#43049)。#44479(Robert Schulze)。
- テーブル関数の引数、CAST 関数の引数、JSONAsObject のスキーマ推論において、設定に基づいて型を検証するようにしました。 #44501 (Kruglov Pavel)。
- LowCardinality と const カラムに対する IN 関数の不具合を修正し、#44503 をクローズ。#44506(Duc Canh Le)。
CREATE TABLEステートメント内のDEFAULT式の正規化処理におけるバグを修正しました。in関数の第 2 引数(またはIN演算子の右側の引数)が、CREATE クエリの実行中に評価結果で置き換えられてしまうことがありました。#44496 を修正。#44547(Alexander Tokmakov)。- WITH ROLLUP、WITH CUBE、および WITH TOTALS が存在する場合、PROJECTION は動作しません。以前のバージョンでは、PROJECTION の使用をスキップする代わりに、クエリは例外をスローしていました。これにより #44614 がクローズされました。これにより #42772 がクローズされました。#44615(Alexey Milovidov)。
- 関数
get all blocks sorted by timeが非同期ブロックを取得していなかったことにより、非同期ブロックがクリーンアップされませんでした。 #44651 (Han Fei). - サブクエリを含む JOIN、UNION、TOTALS で発生する
LOGICAL_ERRORThe top step of the right pipeline should be ExpressionStepを修正しました(#43687)。#44673(Nikolai Kochetov)。 - Executable テーブルエンジンで発生する
std::out_of_range例外を回避しました。 #44681 (Kruglov Pavel). - AST 上の quantiles には
optimize_syntax_fuse_functionsを適用しないようにし、#44712 をクローズしました。#44713(Vladimir C)。 - Merge テーブルおよび PREWHERE で誤った型が使用されるバグを修正。 #43324 をクローズ。 #44716 (Vladimir C)。
- シャットダウン時(TraceCollector の破棄中)に発生しうるクラッシュを修正しました。#44757 を修正しました。#44758(Nikolai Kochetov)。
- 分散クエリ処理で発生しうるクラッシュを修正しました。
totalsまたはextremesを伴うクエリが空の結果を返し、かつ Distributed テーブルとローカルテーブルで型が一致していない場合にクラッシュが発生する可能性がありました。#44738 を修正しました。 #44760(Nikolai Kochetov)。 - フェッチ時(
min_compressed_bytes_to_fsync_after_fetch)およびミューテーション時の小さいファイル(ttl.txt, columns.txt)(min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge)に対する fsync を修正。 #44781 (Azat Khuzhin). - ディスク間でパーツが移動されている最中に
system.partsまたはsystem.parts_columnsテーブルへクエリを実行すると、まれにレースコンディションが発生する可能性がありました。#41145 で導入された問題です。#44809(Alexey Milovidov)。 - PROJECTION の最適化を有効にした場合に発生する可能性のあった
Context has expiredエラーを修正しました。これは、実行時にコンテキストを使用するdictHas/dictGetのような特定の関数を含むクエリで再現可能でした。#44844 を修正します。#44850(Nikolai Kochetov)。 - リモートファイルシステムから
LowCardinalityDictionary を読み込む際に発生する可能性があったCannot read all dataエラーの修正。 #44709 を解決。 #44875(Nikolai Kochetov)。 - ハードウェアモニタのセンサーを読み取れないケースは、ログに完全な例外メッセージを出力せずに無視するようにしました。 #44895 (Raúl Marín).
- 計算された INSERT の遅延時間が
max_delay_to_insertの設定値を超える場合は、遅延時間としてmax_delay_to_insertの値を使用するようにしました。関連: #44902。#44916 (Igor Nikonov)。 UNIONを含むクエリで発生していたDifferent order of columns in UNION subqueryエラーを修正。 #44866 を解決。 #44920(Nikolai Kochetov)。- INSERT の遅延が誤って計算される可能性があり、その結果、正しい値ではなく常に
max_delay_to_insert設定を遅延として使用してしまうことがありました。これを、単純な式max_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold)を用いるように変更し、しきい値を超えたパーツ数に比例して遅延が増加するようにしました。#44902 をクローズしました。 #44954 (Igor Nikonov)。 wideパーツが論理削除マスクを持つ場合に発生していたALTER TABLEの有効期限 (TTL) エラーを修正。 #44959 (Mingliang Pan).- ドメイン IP 型(IPv4、IPv6)をネイティブ型に置き換える対応 #43221 に対するフォローアップ修正。#45024(Yakov Olkhovskiy)。
- ドメイン IP 型(IPv4, IPv6)をネイティブ型に置き換える変更のフォローアップ修正。https://github.com/ClickHouse/ClickHouse/pull/43221。#45043(Yakov Olkhovskiy)。
- パーサーでバッファオーバーフローが発生し得る問題があり、fuzzer によって発見されました。 #45047 (Alexey Milovidov)。
- storage FileLog で発生する可能性のあった cannot-read-all-data エラーを修正しました。#45051、#38257 をクローズします。#45057(Kseniia Sumarokova)。
- クエリ内に GROUPING SETS が含まれている場合、メモリ効率の良い集約(設定
distributed_aggregation_memory_efficient)は無効になります。 #45058 (Nikita Taranov). update_fieldが指定されている場合、更新時にレンジカラムを主キーの一部として扱うようにRANGE_HASHEDDictionary を修正しました。#44588 をクローズ。#45061 (Maksim Kita).- ネストされたラムダでキャプチャされた
LowCardinality型の引数に対して発生していたエラーCannot capture columnを修正しました。#45028 を解決。#45065(Nikolai Kochetov)。 - minmax/count PROJECTION 使用時に追加フィルタが適用されず、
additional_table_filtersのクエリ結果が誤っていた問題を修正しました。 #45133 (Nikolai Kochetov). histogram関数が負の値を受け入れていたバグを修正。 #45147 (simpleton).- StorageJoin におけるカラムの NULL 許容設定の誤りを修正。 #44940 をクローズ。 #45184 (Vladimir C)。
background_fetches_pool_size設定を、実行時に値を増加させた場合に正しくリロードできるよう修正。 #45189 (Raúl Marín).- KV エンジン(KeeperMap、EmbeddedRocksDB など)において、キーに対する
INで異なる型を返すサブクエリを使用するSELECTクエリを正しく処理できるようにしました。 #45215 (Antonio Andelic)。 - 一部のケースにおける
SEMI JOINとjoin_use_nullsの論理エラーを修正し、#45163 および #45209 をクローズ。#45230(Vladimir C)。 - S3 からの読み取り時に発生する heap-use-after-free を修正。#45253(Kruglov Pavel)。
- Avro の Union 型が ['null', Nested type] である場合のバグを修正しました。#45275 をクローズ。
bytes型を誤ってFloat型として推論していたバグを修正しました。#45276(flynn)。 - ストレージエンジン
Mergeを使用するテーブルで明示的な PREWHERE を利用できない場合に、適切な例外をスローするようにしました。 #45319 (Antonio Andelic). - WSL1 上の Ubuntu 環境で、自己解凍形式の ClickHouse バイナリが解凍に失敗していた問題を修正。/proc/self/maps では 32-bit ファイルの inode を報告する一方で、stat では 64-bit の inode を報告するという不整合が原因だった。 #45339 (Yakov Olkhovskiy)。
- 分散テーブルの起動時のレースコンディションを修正(非同期
INSERTのファイルが複数回処理されてしまう可能性があった問題)。 #45360 (Azat Khuzhin). ListObjectリクエストが失敗した場合に、ストレージS3およびテーブル関数s3からの読み取り時にクラッシュする可能性があった問題を修正しました。 #45371 (Anton Popov).- 不正な構造を持つ Dictionary(例: XML 設定における型の誤り)が存在する場合に
SELECT ... FROM system.dictionariesが例外をスローしていた問題を修正しました。#45399 (Aleksei Filatov)。 INSERT INTO ... SELECT * FROM s3Clusterクエリで挿入先テーブルの構造が使用される場合の s3Cluster のスキーマ推論を修正しました。 #45422 (Kruglov Pavel)。- HTTP 経由の JSON/BSONEachRow のパースにおいて、一部のカラムでデータ中の値ではなくデフォルト値が使用されてしまう可能性があったバグを修正しました。 #45424 (Kruglov Pavel).
- テキストソースから IP 型を型付きでパースする際に発生していたバグ(コード: 632. DB::Exception: Unexpected data ... after parsed IPv6 value ...)を修正しました。#45425(Yakov Olkhovskiy)。
- #45297 をクローズ。空の正規表現に対するチェックを追加。#45428 (Han Fei).
- (おそらく分散)クエリがハングすることがある問題を修正。 #45448 (Azat Khuzhin).
allow_asynchronous_read_from_io_pool_for_merge_treeが有効な場合に、ThreadPool::scheduleからの例外によって発生する可能性のあるデッドロックを修正しました。 #45481 (Nikolai Kochetov)。- DETACH 後にテーブルが使用中扱いのまま残る可能性がある問題を修正。 #45493 (Azat Khuzhin).
- クエリがキャンセルされ、その実行中に並列パースが使用されていた場合にまれに発生していたアボートを修正しました。 #45498 (Anton Popov).
- 分散テーブルの作成とそのテーブルへの INSERT 文の実行との間に発生するレースコンディションを修正しました(テーブルへの INSERT 時に CANNOT_LINK が発生する可能性がありました)。 #45502 (Azat Khuzhin).
- キャッシュポリシーの getter に適切なデフォルト (SLRU) を追加しました。#45514 をクローズしました。#45524(Kseniia Sumarokova)。
- ミューテーションでの ARRAY JOIN を禁止しました。#42637 #44447(SmitaRKulkarni)。
- エイリアス付きテーブル名とカラム変換を伴う修飾アスタリスクの処理を修正しました。#44736 を解決します。#44755(SmitaRKulkarni)。