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)。
新機能
- #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が追加されました。これにより、lightweight delete で書き込まれたマスクを強制的に適用し、削除済みとしてマークされた行をディスクから削除できるようになります。 #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)。 - 新しい設定
input_format_csv_try_infer_numbers_from_stringsを追加し、CSV 形式の文字列から数値を推論できるようにしました。 #56455 をクローズしました。 #56859(Kruglov Pavel)。 - データベースまたはテーブルの数が設定可能な閾値を超えた際に、ユーザーに警告を表示します。 #57375 (凌涛).
HASHED_ARRAYレイアウト(およびCOMPLEX_KEY_HASHED_ARRAY)を持つ辞書は、HASHEDと同様にSHARDSをサポートします。 #57544 (vdimir)。- メモリ内のプライマリキー総バイト数と、メモリに割り当てられたプライマリキー総バイト数の非同期メトリクスを追加。 #57551 (Bharat Nallan).
SHA512_256関数を追加しました。 #57645 (Bharat Nallan)。FORMAT_BYTESをformatReadableSizeのエイリアスとして追加しました。#57592 (Bharat Nallan)。s3テーブル関数にオプションのセッショントークンを渡せるようにしました。#57850 (Shani Elharrar)。- 新しい設定項目
http_make_head_requestを導入しました。これをオフにすると、URL テーブルエンジンはファイルサイズを取得するための HEAD リクエストを行いません。これは、非効率的なものや設定ミスがあるもの、HEAD に対応していないものなどの HTTP サーバーをサポートするために必要です。 #54602 (Fionera)。 - インデックス(非主キー)定義内で 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)。 - 新しい設定項目
readonlyを追加しました。この設定により、S3 ディスクを読み取り専用として指定できます。基盤となる S3 バケットへのアクセス権が読み取り専用であっても、s3_plainタイプのディスク上にテーブルを作成する場合に有用です。 #57977 (Pengyuan Bian). - MergeTree テーブルにおけるプライマリキー解析が、仮想カラム
_part_offset(必要に応じて_partも含む)を含む述語にも適用されるようになりました。この機能は、一種のセカンダリインデックスとして利用できます。 #58224 (Amos Bird)。
パフォーマンスの向上
- FINAL 処理中に、MergeTree テーブルから互いに重ならないパーツの範囲を抽出します。これにより、これらの重ならないパーツ範囲に対しては、追加の FINAL ロジックを適用せずに済みます。同一の主キーを持つ重複値の数が少ない場合、パフォーマンスは FINAL を指定しない場合とほぼ同じになります。
do_not_merge_across_partitions_select_final設定が有効な場合に、MergeTree の FINAL 実行時の読み取りパフォーマンスを改善しました。 #58120 (Maksim Kita). - バッファ経由でコピーする代わりに、S3 のサーバーサイドコピー機能を使用して S3 ディスク間でコピーを行うようにしました。これにより、
BACKUP/RESTORE操作およびclickhouse-disks copyコマンドの効率が向上します。 #56744 (MikhailBurdukov). - Hash JOIN は設定値
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からbackground_fetches_pool_size設定値に引き上げられました。- MergeTree レベルの設定replicated_max_parallel_fetches_for_hostは廃止されました。- MergeTree レベルの設定replicated_fetches_http_connection_timeout、replicated_fetches_http_send_timeoutおよびreplicated_fetches_http_receive_timeoutは Server レベルに移動しました。- 設定keep_alive_timeoutが Server レベル設定の一覧に追加されました。#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データベースではサポートされていないため、Replicatedテーブルエンジンに対するCREATE TABLE ... AS SELECTクエリを禁止しました。#35408 を参照してください。#57796(Nikolay Degterinsky)。 - 外部データベース向けのクエリ変換を修正・改善し、互換性のある述語を再帰的にすべて取得できるようにしました。 #57888 (flynn).
- ファイルシステムキャッシュサイズの動的な再読み込みに対応。#57866 をクローズ。#57897 (Kseniia Sumarokova).
- ブロックされている SIGRTMIN を持つスレッド(Apache rdkafka のような低品質な外部ライブラリ内に存在することがあります)に対して
system.stack_traceを正しくサポートしました。 #57907 (Azat Khuzhin)。また、意味のないstorage_system_stack_trace_pipe_read_timeout_msの待機が発生しないよう、シグナルがブロックされていないスレッドに対してのみシグナルを送信するようにしました。 #58136 (Azat Khuzhin)。 - クォーラム挿入時のチェックで Keeper の障害を許容するようにしました。 #57986 (Raúl Marín).
- max/peak RSS(
MemoryResidentMax)を system.asynchronous_metrics に追加しました。 #58095 (Azat Khuzhin). - このPRにより、ユーザーはデフォルト以外のリージョンであってもリージョンを明示せずに、
https://やs3://といった 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).
- 並列レプリカ(実験的機能):アナウンス応答の処理を改善 #57749(Igor Nikonov)。
- Parallel replicas(実験的機能):
ParallelReplicasReadingCoordinatorにおいてmin_number_of_marksをより厳密に考慮するようにしました #57763(Nikita Taranov)。 - Parallel replicas(実験的機能):IN 句(サブクエリ)使用時の並列レプリカを無効化 #58133 (Igor Nikonov).
- 並列レプリカ(実験的機能):プロファイルイベント 'ParallelReplicasUsedCount' を追加 #58173 (Igor Nikonov)。
- HEAD などの POST 以外のリクエストは、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テーブル関数を経由した辞書 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)。
- 修正: ビューチェーンへの push 処理を構築する際に ephemeral カラムを除外しないように修正 #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).sparseカラムのany(...) RESPECT NULL集約で発生していたエラーを修正しました #57710 (Azat Khuzhin)。- 単項演算子の構文解析を修正 #57713 (Nikolay Degterinsky).
- 実験的テーブルエンジン
MaterializedPostgreSQLの依存関係の読み込み処理を修正しました。 #57754 (Kseniia Sumarokova)。 - BACKUP/RESTORE ON CLUSTER 実行時に切断されたノードに対するリトライ処理を修正しました #57764 (Vitaly Baranov)。
- 部分的にマテリアライズされたプロジェクションがある場合の外部集約の結果を修正 #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)。
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引数を用いたマテリアライズドビューまたはプロジェクション内でこの関数を使用している場合は、[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)。 - 統計情報を利用して
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).
- すべてのシステムログテーブルに
hostnameカラムを追加しました。これは、システムテーブルをレプリケート、共有、または分散構成にする場合に便利です。 #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_algorithm設定で指定した順序が尊重されるようになりました #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)。
Numbersテーブルエンジン(system.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)。
- クエリプロファイラ内で処理中のスレッド数に上限を設けました。上限を超えたスレッドはプロファイリングをスキップします。 #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).- 実験的なフルテキストインデックスのポスティングリストが圧縮され、そのサイズが 10〜30% 削減されました。 #56226 (Harry Lee).
- バックアップ処理で
BackupEntriesCollectorの並列実行を可能にしました。 #56312 (Kseniia Sumarokova).
改善点
- 新しい
MergeTreeの設定add_implicit_sign_column_constraint_for_collapsing_engineを追加しました(デフォルトは無効)。有効にすると、CollapsingMergeTreeテーブルに対して、Sign列の値を -1 または 1 のみに制限する暗黙的な CHECK 制約が追加されます。#56701。#56986 (Kevin Mingtarja)。 - 再起動なしでストレージ構成に新しいディスクを追加できるようにしました。 #56367 (Duc Canh Le).
- 同一の ALTER クエリ内でインデックスの作成と
MATERIALIZE INDEXを行えるようにし、同一クエリ内でのMODIFY TTLおよびMATERIALIZE TTLもサポートしました。#55651 をクローズしました。#56331(flynn)。 fuzzJSONという名前の新しいテーブル関数を追加し、元の JSON 文字列にランダムな変動(摂動)を加えたバージョンを行として含めるようにしました。 #56490 (Julia Kartseva).Mergeエンジンは、基になるテーブルの行ポリシーに従ってレコードをフィルタリングするため、Mergeテーブルに別途行ポリシーを作成する必要はありません。 #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 エントリ内の hosts リストでローカル IP アドレスを検索する際に、すべてのネットワークインターフェイスを列挙する負荷の高いシステムコールを削除し、ON CLUSTER クエリのパフォーマンスを向上。 #54909 (Duc Canh Le).
- クエリまたはユーザーにスレッドを関連付ける前に割り当てられたメモリ使用量の計上処理を修正しました。 #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)。 - バックアップが失敗しないよう、削除済みの内部テーブルを持つマテリアライズドビューもバックアップできるようにしました。 #56387 (Kseniia Sumarokova).
system.replicasへのクエリは、特定のカラムが問い合わせられたときに ZooKeeper へのリクエストを発行します。テーブルが数千ある場合、これらのリクエストが ZooKeeper にかなりの負荷を与える可能性があります。system.replicasへのクエリが同時に複数実行されると、同一のリクエストが複数回行われます。この変更は、並行クエリからのリクエストを「重複排除」するものです。#56420 (Alexander Gololobov)。- 外部データベースをクエリするための MySQL 互換クエリへの変換処理を修正しました。 #56456 (flynn).
KeeperMapエンジンを使用したテーブルのバックアップおよび復元のサポートを追加。 #56460 (Antonio Andelic).- CompleteMultipartUpload への 404 応答は再確認する必要があります。クライアント側でタイムアウトやその他のネットワークエラーが発生した場合でも、サーバー側では操作が完了している可能性があります。次回の CompleteMultipartUpload の再試行では 404 応答が返されます。オブジェクトキーが存在する場合、その CompleteMultipartUpload 操作は成功したものとみなされます。 #56475 (Sema Checherinda).
- デフォルトで HTTP OPTIONS メソッドを有効化しました。これにより、Web ブラウザから ClickHouse へリクエストしやすくなります。 #56483 (Alexey Milovidov)。
dns_max_consecutive_failuresの値が #46550 で誤って変更されていたため、これを元に戻し、より適切な値に調整しました。また、HTTP keep-alive タイムアウトを、本番環境での実運用に基づいた妥当な値に引き上げました。#56485(Alexey Milovidov)。- ベースバックアップを遅延読み込みするようにしました(必要になるまでベースバックアップは読み込まれません)。また、バックアップに関するログメッセージとプロファイルイベントも追加しました。#56516 (Vitaly Baranov)。
query_cache_store_results_of_queries_with_nondeterministic_functions(値はfalseまたはtrue)の設定は非推奨とマークされました。これは、クエリキャッシュが非決定的関数を含むクエリをどのように扱うかを制御する 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)。 - キャッシュ構成を、設定ファイル内の 'named_collection' セクション、または SQL で作成された named collection から取得できるようになりました。 #56541 (Kseniia Sumarokova).
- PostgreSQL データベースエンジン:
postgres接続が確立できなかった場合に、古いテーブルの削除をあまり積極的に行わないようにしました。#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)。 - 実験的機能である
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). - キューに入っているジョブ数のメトリクスを追加しました。これは IO スレッドプールで役立ちます。 #56958 (Alexey Milovidov).
- 設定ファイルに PostgreSQL テーブルエンジン用の設定を追加しました。設定値のチェック処理を追加しました。追加設定に関するドキュメントを追記しました。 #56959 (Peignon Melvyn).
- 関数
concatは、SELECT concat('abc')のように 1 つの引数で呼び出せるようになりました。これにより、動作が 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が有効になっている場合でも、辞書作成時に辞書ソースの種類をチェックするようにしました。 #57134 (Vitaly Baranov)。- プランレベルの最適化を、個別に有効化または無効化できるようになりました。以前は、すべてをまとめて無効化することしかできませんでした。以前すべての最適化を無効化するために使われていた設定(
query_plan_enable_optimizations)は残されており、引き続き最適化を一括で無効化するために使用できます。 #57152 (Robert Schulze)。 - サーバーの終了コードは、例外コードに対応します。例えば、サーバーがメモリ制限により起動できない場合、コード 241 = MEMORY_LIMIT_EXCEEDED で終了します。以前のバージョンでは、例外に対する終了コードは常に 70 = Poco::Util::ExitCode::EXIT_SOFTWARE でした。#57153(Alexey Milovidov)。
functionalC++ ヘッダー由来のスタックフレームをデマングルやシンボル化しないようにしました。 #57201 (Mike Kot).- HTTP サーバーの
/dashboardページが、複数系列の線グラフをサポートするようになりました。 #57236 (Sergei Trifonov)。 max_memory_usage_in_clientコマンドラインオプションで、サフィックス(K、M、G など)付きの文字列値がサポートされるようになりました。これにより #56879 がクローズされました。 #57273(Yarik Briukhovetskyi)。- Intel QPL(codec
DEFLATE_QPLで使用)を v1.2.0 から v1.3.1 に更新しました。また、BOF(Block On Fault)が 0 の場合のバグを修正し、ページフォールト発生時には SW パスへフォールバックして処理するように変更しました。#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 を修正しました。挿入テーブルを参照するサブクエリを含む
INSERT ... 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).
- パラメータ化ビューにおける 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 における NULL 許容 primary key を修正 (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).
- 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)。
clickhouse-localでINSERT INTO FUNCTIONの実行時に発生する「mutex lock failed: Invalid argument」を修正 #56710(Kruglov Pavel)。- 楽観的パスにおける Date テキスト解析を修正 #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... を用いた partial merge join で発生する 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).
- 部分的にマテリアライズされた通常プロジェクションに対して誤った JOIN プランが最適化される問題を修正 #57196 (Amos Bird).
- 列の説明を比較する際にコメントを無視するようにしました #57259(Antonio Andelic)。
ReadonlyReplicaメトリクスがすべてのケースで正しく動作するように修正 #57267(Antonio Andelic)。- バックグラウンドマージ処理がキャッシュ内の一時データストレージを正しく使用するようになりました #57275 (vdimir)。
- 変更ログおよびスナップショット向けの Keeper の修正 #57299 (Antonio Andelic).
- ホスト名が変更された場合は、完了済みの ON CLUSTER タスクを無視するようになりました #57339 (Alexander Tokmakov).
- MergeTree の mutation でソースパーツのインデックス粒度を再利用するようになりました #57352(Maksim Kita)。
- FS キャッシュ: バックグラウンドでのダウンロードに上限を追加 #57424 (Kseniia Sumarokova).
ClickHouse リリース 23.10, 2023-11-02
後方互換性のない変更
- 壊れたデータパーツを自動的に削除するオプションは廃止されました。これにより #55174 がクローズされました。 #55184(Alexey Milovidov)。 #55557(Jihyuk Bok)。
- 古いインメモリデータパーツは、write-ahead ログからはもはや読み取れません。以前にインメモリパーツを構成している場合は、アップグレード前にそれらを削除する必要があります。 #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 と最大数の設定の管理方法を変更して、これをバックグラウンドプロセスとしました。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)。- ネイティブプロトコル経由での外部データを用いた非同期INSERTをサポートしました。以前は、データをクエリ内にインライン指定した場合にのみ動作していました。 #54730 (Anton Popov).
- 可視化用のデータのダウンサンプリングに Largest-Triangle-Three-Buckets アルゴリズムを使用する集約関数
lttbを追加しました。 #53145 (Sinan)。 - クエリ
CHECK TABLEのパフォーマンスと使い勝手が向上し、進行状況の更新を送信でき、キャンセルも可能になりました。CHECK TABLE ... PART 'part_name'を用いて特定のパーツのみをチェックできるようになりました。#53404 (vdimir)。 - 関数
jsonMergePatchを追加しました。文字列としての JSON データを扱う際に、JSON オブジェクトを表すこれらの文字列をマージし、1 つの JSON オブジェクトを表す単一の文字列にまとめることができます。 #54364 (Memo). - Kusto Query Language 方言サポートの第 2 段階です。第 1 フェーズの実装はすでにマージされています。#42510(larryluogit)。
- 新しい SQL 関数
arrayRandomSample(arr, k)を追加しました。これは入力配列から k 個の要素をサンプルとして返します。これまで同様の機能は、たとえば "SELECT arrayReduce('groupArraySample(3)', range(10))" のような、あまり使い勝手のよくない構文でのみ実現可能でした。 #54391 (itayisraelov)。 -ArgMin/-ArgMax集約コンビネータを導入しました。これにより、最小値/最大値のみで集約できるようになります。ユースケースの一例は #54818 にあります。この PR では、コンビネータを専用フォルダに再編成しています。 #54947 (Amos Bird)。SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]を使用して、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).
- RoaringBitmaps がシリアライズ前に最適化されるようになりました。 #55044 (UnamedRus).
- 転置インデックス内のポスティングリストは、内部ビットマップに対して可能な限り最小の表現を使用するよう最適化されました。データの繰り返し度合いによっては、転置インデックスが占有する領域を大幅に削減できる場合があります。 #55069 (Harry Lee).
- Context ロックでの競合を修正しました。これにより、多数の短時間で終了する並行クエリのパフォーマンスが大幅に向上します。 #55121 (Maksim Kita).
- 転置インデックス作成のパフォーマンスを30%向上しました。これは
std::unordered_mapをabsl::flat_hash_mapに置き換えることで実現しています。 #55210 (Harry Lee). - ORC フィルターのプッシュダウン(rowgroup レベル)をサポート。 #55330 (李扬).
- 多数の一時ファイルを使用する external aggregation のパフォーマンスを改善しました。 #55489 (Maksim Kita).
- セカンダリインデックス用の marks キャッシュに、デフォルトで妥当なサイズを設定し、marks が繰り返し読み込まれることを避けるようにしました。 #55654 (Alexey Milovidov).
- スキップインデックスを読み取る際に、不必要なインデックスグラニュールの再構築を避けるようにしました。これにより、#55653 に対処しました。#55683(Amos Bird)。
- 実行時にセット内の 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パラメータ)は、ユーザーにとって分かりづらいものでした。より単純なヒューリスティクスとして、ポスティングリスト内で許可される行 ID の最大数を直接制御するmax_rows_per_postings_listパラメータ(デフォルト: 64k)に基づく方式が導入されました。#55616(Harry Lee)。 EmbeddedRocksDBテーブルへの書き込み性能を改善。#55732(Duc Canh Le)。- パーティション内に多数のパーツ(1000 個を超える場合)が存在する場合の ClickHouse の全体的な耐障害性を向上しました。これにより、
TOO_MANY_PARTSエラーの発生数が減少する可能性があります。 #55526 (Nikita Mikhaylov). - 階層型ディクショナリの読み込み時のメモリ使用量を削減しました。 #55838 (Nikita Taranov).
- すべてのディクショナリで
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)。 - 設定
optimize_trivial_approximate_count_queryを追加し、EmbeddedRocksDB ストレージでcountの近似値を使用するようにしました。また、StorageJoin で trivial 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 ではlifetimeは意味を持たないため)、作成時に拒否されるようになりました。修正: #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).
- 現時点では、プロジェクションの解析はクエリプランに対してのみ実行されます。設定項目
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がエラー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). - ClickHouse-client は、行数が 0 で、かつ例外がスローされた場合には、「0 rows in set」を表示しません。 #55240 (Salvatore Mesoraca)。
RENAME db.t1 to db.t2のように、キーワードTABLEなしでテーブルをリネームできるようになりました。 #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として報告するようになりました。さらに、型StringおよびFixedStringの出力をTEXTまたはBLOBに切り替えるための 2 つの新しい設定mysql_map_string_to_text_in_show_columnsとmysql_map_fixed_string_to_text_in_show_columnsが追加されました。 #55617 (Serge Klochkov).- ReplicatedMergeTree テーブルの起動時、ClickHouse サーバーはパーツの集合について、予期しないパーツ(ローカルには存在するが ZooKeeper には存在しないもの)がないかをチェックします。すべての予期しないパーツは detached ディレクトリに移動され、その代わりにサーバーはそれらをカバーしている祖先パーツを復元しようとします。現在は、サーバーはランダムなカバー済みパーツではなく、最も近い祖先パーツを復元しようとします。 #55645 (alesapin).
- 高度なダッシュボードで、タッチデバイス上のチャートをドラッグできるようになりました。これにより #54206 がクローズされました。 #55649 (Alexey Milovidov)。
http_write_exception_in_output_formatで例外を出力する際、宣言されている場合はデフォルトのクエリフォーマットを使用するようにしました。 #55739 (Raúl Marín).- 一般的なマテリアライズドビューの落とし穴に関するメッセージを、よりわかりやすい内容に改善しました。 #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)。
- ClickHouse を AVX 系の命令をグローバルに有効にした状態でビルドすると(これは推奨されません)、エラーが発生していました。原因は、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 に上流のリポジトリを使用するようにしました。#55787(Nikita Taranov)。
バグ修正(公式安定版リリースで発生するユーザーに見える不具合)
- mutation 実行時に転置インデックスファイルのハードリンク作成をスキップ #47663 (cangyin)。
- パターンにオルタネーション(
|)を含むmatch関数(正規表現)が誤ったキー条件を生成していたバグを修正。#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句を使用せずに作成された Distributed テーブルの列に対するDEFAULTの検出を修正 #55060(Vitaly Baranov)。- ShellCommandSource のコンストラクタで例外が発生した場合の適切なクリーンアップ #55103 (Alexander Gololobov).
- LDAP で割り当てられたロールの更新時のデッドロックを修正 #55119 (Julian Maicher).
- 内部例外に起因するエラー統計の更新を抑制 #55128 (Robert Schulze)。
- バックアップ処理におけるデッドロックを修正 #55132 (alesapin).
- ストレージの Iceberg ファイル取得を修正 #55144 (Kseniia Sumarokova).
set内の余分なカラムに対するパーティションプルーニングを修正。 #55172 (Amos Bird).- テーブルがアダプティブグラニュラリティを使用している場合の ALTER UPDATE クエリにおけるスキップインデックス再計算の問題を修正しました #55202 (Duc Canh Le).
- fs キャッシュにおけるバックグラウンド ダウンロードの修正 #55252 (Kseniia Sumarokova).
- バッファのファイナライズ漏れに起因しうるコンプレッサでのメモリリークを回避 #55262 (Azat Khuzhin).
- スパースカラムでの関数の実行を修正 #55275 (Azat Khuzhin).
- SELECT FINAL を使用した SummingMergeTree における Nested の誤ったマージを修正しました #55276 (Azat Khuzhin).
- S3 上に構築された ReplicatedMergeTree において、ゼロコピーを使用していない場合に detached パーティションを削除できなかったバグを修正 #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).
- ODBC 経由で MS SQL Server と連携する際に発生する 'Invalid cursor state' エラーを修正 #55558 (vdimir).
- 最大実行時間と'break' オーバーフロー モードを修正 #55577 (Alexander Gololobov)。
- 循環エイリアスが原因の QueryNormalizer のクラッシュを修正 #55602 (vdimir)。
- 誤った最適化を無効にし、テストを追加 #55609(Alexey Milovidov)。
- #52352 と #55621 のマージ(Alexey Milovidov)。
- 小数の誤ったソートを防ぐためのテストを追加 #55662 (Amos Bird)。
- グロブを含まない 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 にステートフル関数が含まれている場合は述語プッシュダウンを無効化する #55871 (Raúl Marín)。
- クエリから
FORMATが削除されてしまっていた normalize ASTSelectWithUnionQuery を修正 #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 の辞書カラムの入出力を修正 #55989 (Kruglov Pavel).
- AvroConfluent での schema registry からのスキーマ取得処理を修正 #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). - 実験的な parts メタデータキャッシュをコードベースから削除しました。 #54215 (Alexey Milovidov).
- デフォルトで
input_format_json_try_infer_numbers_from_stringsを有効にしないようにしました。これにより、サンプルデータに数値のように見える文字列が含まれている場合に発生しうる解析エラーを避けるため、JSON 形式で文字列から数値を推論しない挙動がデフォルトになります。 #55099 (Kruglov Pavel).
新機能
- JSON フォーマットからのスキーマ推論を改善しました。1) JSON フォーマットにおいて、設定
input_format_json_try_infer_named_tuples_from_objectsのもとで、実験的な JSON 型を使わずに JSON オブジェクトから名前付き Tuple を推論できるようになりました。これまで実験的な JSON 型なしでは、JSON オブジェクトは String か Map としてしか推論できませんでしたが、今では名前付き Tuple を推論できます。生成される Tuple 型には、スキーマ推論時のデータサンプルで読み込まれたオブジェクトのすべてのキーが含まれます。これは、スパースでない構造化 JSON データを読み取る際に有用です。この設定はデフォルトで有効になっています。2) 設定input_format_json_read_arrays_as_stringsのもとで、JSON 配列を型 String のカラムとしてパースできるようになりました。これにより、異なる型の値を含む配列の読み取りに役立ちます。3) 設定input_format_json_infer_incomplete_types_as_stringsのもとで、サンプルデータ内で型が不明 (null/[]/{}) な JSON キーに対して、型 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_limitIO スケジューリングノードタイプを追加しました。これにより、このノードを通過するトラフィックに対して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)が、非定数の 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)。 - 関数
toDaysSinceYearZeroを追加しました。MySQL との互換性のためのエイリアスTO_DAYSを持ち、0001-01-01(プロレプティック・グレゴリオ暦)から経過した日数を返します。#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 URL に変換されます。例:'s3://clickhouse-public-datasets/hits.csv'は'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'に変換されます。#54931(Yarik Briukhovetskyi)。 - 新しい設定
print_pretty_type_namesを追加し、Tuple/Maps/Arrays のような深くネストされた型を可読性の高い形式で出力できるようにしました。 #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)。
COUNT(DISTINCT ...)および各種uniq系集約関数を、GROUP BY を含むサブクエリから選択されている場合にcountへ書き換える最適化。 #52082 #52645 (JackyWoo).mmap/mremap/munmapへの手動呼び出しを削除し、この処理をすべてjemallocに委譲することで、パフォーマンスがわずかに向上します。 #52792 (Nikita Taranov).- NATS を使用している際に CPU 使用率が高くなる問題を修正しました。 #54399 (Vasilev Pyotr).
- datetime 引数付きで
toStringを実行するための専用命令を別途用意しているため、datetime 以外の引数に対してはパフォーマンスを少し向上させるとともに、一部のコードをよりクリーンにできます。#53680 のフォローアップです。#54443(Yarik Briukhovetskyi)。 std::stringstreamに JSON 要素をシリアライズする代わりに、この PR ではシリアライズ結果を直接ColumnStringに格納するようにしています。 #54613 (lgbo)。- ビューを介して参照されている MergeTree テーブルから、対応する順序でデータを読み取れるようにする ORDER BY 最適化を有効にしました。 #54628 (Vitaly Baranov).
GeneratorJSONPathを再利用し、いくつかの shared pointer を削除することで 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)。 - array join で
max_block_sizeを尊重し、OOM が発生する可能性を回避するようにしました。#54290 をクローズしました。#54664(李扬)。 s3テーブル関数で HTTP 接続を再利用できるようにしました。 #54812 (Michael Kolupaev).MergeTreeRangeReader::Stream::ceilRowsToCompleteGranulesにおける線形探索を二分探索に置き換え。 #54869 (usurai).
実験的機能
Annoyインデックスの作成は、設定項目max_threads_for_annoy_index_creationを使用して並列化できるようになりました。 #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ビューに新しいフィールドdata_lengthが追加され、ディスク上のデータのおおよそのサイズを表示できるようになりました。これは Amazon QuickSight によって生成されるクエリを実行するために必要があります。 #55037 (Robert Schulze).- MySQL インターフェイスにプリペアドステートメントの最小限の実装が追加され、MySQL コネクタ経由で Tableau Online から ClickHouse への接続ができるようになりました。 #54115 (Serge Klochkov)。注意: プリペアドステートメントの実装はかなり最小限であり、現在は引数バインドをまだサポートしていません。この特定の Tableau Online のユースケースでは必要ないためです。Tableau Online の包括的なテストを行ったうえで問題が見つかった場合には、必要に応じてフォローアップとして実装される予定です。
regexp_tree辞書で、case-insensitive(大文字小文字を区別しない)および 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 形式での一部の特殊なチャンク構成からも読み取れるようにしました。 #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).- 引数「max_substring」に 0 より大きい値が指定された場合に、関数「splitBy*()」が残りの文字列(存在する場合)を結果配列に含めるかどうか(Python/Spark のセマンティクス)を制御する設定
splitby_max_substrings_includes_remaining_stringを追加しました。デフォルトの動作は変更されていません。 #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).- Buffer テーブル使用時にデータ損失を招く可能性があるため、systemd によるサーバーの強制終了を無効化。 #54744 (Azat Khuzhin).
- システムテーブル
system.functionsにフィールドis_deterministicを追加しました。このフィールドは、(まったく同じ入力が与えられた場合に)関数の結果が 2 回の呼び出し間で一定かどうかを示します。 #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 カラムへの挿入処理を修正しました。#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 の公式ビルドおよび CI(継続的インテグレーション)ビルドで使用するコンパイラを、Clang 16 から 17 に更新しました。 #53831 (Robert Schulze).
- ルックアップ用の tld データ(
tldLookup.generated.cpp)を再生成しました。 #54269 (Bharat Nallan). - 冗長な
clickhouse-keeper-clientシンボリックリンクを削除しました。 #54587 (Tomas Barton). - bash のパス解決に
/usr/bin/envを使用するようにし、Nix OS をサポートしました。 #54603 (Fionera). perf recordを DWARF コールグラフなしで実行するために必要なPROFILE_CPUオプションを CMake に追加しました。 #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 replication 使用時の REPLACE/MOVE PARTITION の問題を修正(注: 「zero-copy replication」は実験的機能です)#54193 (Alexander Tokmakov)。
- ハードリンクで zero copy ロックを修正 (注: "zero-copy replication" は実験的な機能です) #54859 (Alexander Tokmakov).
- ゼロコピーのガベージを修正(注: 「zero-copy replication」は実験的な機能です) #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).
- Fix: PREWHERE 句に移動された actions によって列が失われる可能性がある問題を修正 #53492 (Yakov Olkhovskiy).
- バイトレベルで同一のパーツに置き換える際に発生していた内部エラーを修正しました #53735 (Pedro Riera)。
- Fix:
interpolate式で使用される列を必須にする #53754 (Yakov Olkhovskiy)。 - クラスタディスカバリの初期化を修正し、設定ファイルでフェイルポイントを設定 #54113 (vdimir)。
accurateCastOrNullの不具合を修正 #54136(Salvatore Mesoraca)。- FINAL 修飾子使用時の NULL 許容主キーに関する問題を修正 #54164(Amos Bird)。
- 重複したデータが存在する場合に、新しいデータをレプリケーテッドマテリアライズドビューに挿入できない不具合を修正しました。 #54184 (Pedro Riera)。
- 修正: ブルームフィルターで
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)。- Fix:
prefer_localhost_replica= 1 設定時に distributed で parallel replicas を使用する場合の動作を修正 #54334 (Igor Nikonov). - 垂直マージおよび 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).
- analyzer を使用しない場合の indexHint によるパーツのフィルタリングを修正 #54449 (Azat Khuzhin).
- 正規化された状態を持つ集約プロジェクションの問題を修正 #54480 (Amos Bird)。
clickhouse-local: マルチクエリパラメータ向けの機能 #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)。
- デフォルト値や明示的な挿入カラムがある場合に、挿入元テーブルの構造を利用するよう修正 #54655(Kruglov Pavel)。
- 修正: 選択(|)を含む可能性のある正規表現マッチを、キー条件として使用しないようにしました。 #54696 (Yakov Olkhovskiy).
- vertical merge およびクリーンアップ時の ReplacingMergeTree を修正 #54706 (SmitaRKulkarni).
- ORDER BY 句適用後に仮想カラムの値が不正になる問題を修正 #54811 (Michael Kolupaev)。
indexHintを用いた、analyzer を使用しない場合のフィルタリング部分を修正 #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).- 異なるプロジェクションまたはインデックスを持つテーブルからのパーツのアタッチを禁止しました #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をテーブル名を指定せずに使用できるようにしました(issue #50808)。#50848(Yangkuan Liu)。- Kafka コンシューマの監視用システムテーブル。 #50999 (Ilya Golshtein)。
max_sessions_for_user設定を追加しました。 #51724 (Alexey Gerasimchuck).- Spark の
to_utc_timestamp/from_utc_timestampと同様に動作する新しい関数toUTCTimestamp/fromUTCTimestampを追加。 #52117 (KevinyhZou). - ClickHouse のテーブル構造を CapnProto/Protobuf 形式のスキーマに変換する新しい関数
structureToCapnProtoSchema/structureToProtobufSchemaを追加しました。テーブル構造から自動生成されたスキーマを使用することで、外部のフォーマット用スキーマなしで CapnProto/Protobuf 形式のデータを入出力できるようになりました(設定format_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schemaで制御)。また、設定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).
- データを一切読み取らず、常に
dummyという名前のUInt8型カラムを持ち、その値が0の 1 行だけを返す入力フォーマットOneを追加しました。これはsystem.oneと同様です。file/S3/URL/HDFS などのテーブル関数で、データを読み取ることなくファイルを一覧表示するために、_file/_path仮想カラムと組み合わせて使用できます。#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条件と各カラムの最小値 / 最大値に基づいて、行グループ(ファイルを構成するチャンク)がスキップされます。特に、ファイルがおおよそあるカラムでソートされている場合、そのカラムの狭い範囲でフィルタリングするクエリは、はるかに高速になります。 #52951 (Michael Kolupaev). - Parquet で小さな行グループをまとめて一括処理することで、読み取りを最適化しました。#53069 をクローズ。#53281(Kruglov Pavel)。
- ほとんどの入力フォーマットにおいて、ファイルからの count の計算を最適化しました。Closes #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 を用いた時間フィルタ最適化を行うパスを 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).
改善
- 外部コマンドの標準エラー出力(
stderr)にデータがある場合の動作(none、log、throw)を制御するためのstderr_reaction設定項目を追加しました。これにより、外部コマンドのデバッグが容易になります。 #43210 (Amos Bird). system.part_logおよびマージテーブルにpartitionカラムを追加。 #48990 (Jianfei Hu).- (インデックス用の)非圧縮/マーク、mmap、およびクエリキャッシュのサイズを、サーバーを再起動することなく実行時に動的に変更できるようになりました。#51446 (Robert Schulze)。
- 複雑なキーを持つ辞書が作成された場合には、自動的に「complex key」レイアウトのバリアントが選択されるようになりました。 #49587 (xiebin).
- 新しい同時実行制御機能をより適切にテストするための設定
use_concurrency_controlを追加しました。 #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)。
azureBlobStorageテーブル関数における接続文字列のチェックを更新しました。sasを含む接続文字列は既定のエンドポイントで始まるとは限らないためです。また、URL に Azure のコンテナを追加した後にsasトークンが含まれるよう、接続 URL を更新しました。 #51141 (SmitaRKulkarni).full_sorting_mergeJOIN アルゴリズムにおけるセットのフィルタリング処理に関する説明を修正。#51329(Tanay Tummalapalli)。max_block_sizeが巨大な場合にAggregatorで発生していたメモリ消費を修正しました。 #51566 (Nikita Taranov)。SYSTEM SYNC FILESYSTEM CACHEコマンドを追加しました。このコマンドは、ファイルシステムキャッシュのメモリ上の状態をディスク上の内容と比較し、必要に応じてメモリ上の状態を修正します。これは、ディスク上のデータを手動で変更する場合にのみ必要になりますが、そのような操作は強く非推奨です。 #51622 (Kseniia Sumarokova)。- 既存の S3 ストレージ構成用プロキシリゾルバとの後方互換性を維持しつつ、ClickHouse 向けの汎用プロキシリゾルバの作成を試みました。 #51749 (Arthur Passos).
- file/s3/hdfs/url/azureBlobStorage テーブル関数でタプルのサブカラムの読み取りをサポートしました。 #51806 (Kruglov Pavel)
- 関数
arrayIntersectは、最初の引数の順序に従って値を返すようになりました。これにより #27622 がクローズされました。#51850(Yarik Briukhovetskyi)。 - 指定したアクセスストレージに対してアクセスエンティティの作成・削除や、あるアクセスストレージから別のアクセスストレージへの移動を行える新しいクエリを追加。 #51912 (pufit).
ALTER TABLE FREEZEクエリが Replicated データベースエンジンでレプリケートされないようにしました。 #52064 (Mike Kot).- 予期せぬシャットダウン時に system テーブルをフラッシュできるようにしました。 #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).- clickhouse-client で、
xmlの後にデフォルトの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 actions を追加。 #53006 (Maksim Kita).
- 空の needle を指定した場合は、
hasTokenOrNullとhasTokenCaseInsensitiveOrNullが null を返すようにしました。#53059 (ltrk2). - ファイルシステムキャッシュで許可されるパスを制限できるようにしました。主に dynamic disk で有用です。サーバー設定で
filesystem_caches_pathが指定されている場合、すべてのファイルシステムキャッシュのパスはこのディレクトリに制限されます。例えば、キャッシュ設定内のpathが相対パスの場合はfilesystem_caches_path配下に配置されます。キャッシュ設定内のpathが絶対パスの場合は、そのパスがfilesystem_caches_pathの内部である必要があります。設定でfilesystem_caches_pathが指定されていない場合、動作は以前のバージョンと同じになります。 #53124 (Kseniia Sumarokova). - 多数のカスタムコマンドを追加しました(主に ClickHouse のデバッグを簡単にするため)。#53127 (pufit)。
- スキーマ推論時にファイル名に関する診断情報を追加しました。これにより、glob パターンで複数のファイルを処理する際に役立ちます。 #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、またはサーバーのシャットダウン時に Distributed テーブルのフラッシュを無効化する機能を追加。 #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 とダッシュボードの SQL エディターでは Grammarly は使用されません。 #53614 (Alexey Milovidov).
- エキスパート向け設定として、(1) [index] mark/uncompressed キャッシュの size_ratio(つまり保護キューの相対サイズ)を構成し、(2) index mark キャッシュおよび index uncompressed キャッシュのキャッシュポリシーを構成できるようになりました。 #53657 (Robert Schulze)。
- TCPHandler のクエリパケットにクライアント情報の検証を追加しました。 #53673 (Alexey Gerasimchuck).
- Microsoft Azure との連携中にネットワークエラーが発生した場合、パーツの読み込みを再試行するようにしました。 #53750 (SmitaRKulkarni).
- 例外にスタックトレースが付与され、マテリアライズドビューで発生した例外も伝播されるようになりました。 #53766 (Ilya Golshtein).
- ホスト名またはポートが指定されていない場合、keeper client は ClickHouse の設定ファイル config.xml から接続文字列を取得しようとします。 #53769 (pufit)。
- プロファイルイベント
PartsLockMicrosecondsを追加しました。これは、MergeTree テーブルエンジンファミリーにおいてデータパーツのロックを保持している時間(マイクロ秒単位)を示します。 #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でメインプロセスに適切な環境変数 (ENV) パラメータが渡されることを確認するテストを追加。#53457(Mikhail f. Shiryaev)。 - CMake におけるファイル管理を再編成し、重複の発生を防ぎます。たとえば、
indexHint.cppはdbms_sourcesとclickhouse_functions_sourcesの両方で重複しています。 #53621 (Amos Bird)。 - Snappy を 1.1.10 にアップグレードしました。 #53672 (李扬).
- いくつかの依存関係を整理して一部の重複を削除することで、CMake ビルドをわずかに改善しました。各コミットには、行った変更内容の簡潔な説明が含まれています。 #53759 (Amos Bird).
バグ修正(公式の安定版リリースでユーザーに影響する不具合)
- 複数の mark がある場合の構築中に実験的な Annoy インデックスをリセットしないようにしました #51325 (Tian Xinhui)。
- RESTORE 時における一時ディレクトリの扱いを修正 #51493 (Azat Khuzhin).
- Nullable(IPv4) に対するバイナリ算術演算を修正 #51642 (Yakov Olkhovskiy)。
- IPv4 および IPv6 データ型を辞書属性としてサポート #51756 (Yakov Olkhovskiy)。
- 圧縮マークのチェックサムの修正 #51777(SmitaRKulkarni)。
- CSV のベストエフォートパースにおいて、カンマが誤って日時の一部として解釈される問題を修正 #51950 (Kruglov Pavel)。
- 実行可能な UDF にパラメータがある場合に例外をスローしないように変更 #51961 (Nikita Taranov)。
ALTER DELETEクエリにおけるスキップインデックスおよびプロジェクションの再計算処理を修正 #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)。 - クラスタ内の名前付きコレクションを修正 #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).
- 正規表現アナライザーが名前付きキャプチャグループを認識できるようにした #52840 (Han Fei).
- clickhouse-local の
~PushingAsyncPipelineExecutorで発生する可能性のあるアサーションを修正 #52862(Kruglov Pavel)。 - 空の
Nested(Array(LowCardinality(...)))の読み取り処理を修正 #52949 (Anton Popov)。 - session_log 向けの新しいテストを追加し、login と logout の不整合を修正しました。 #52958 (Alexey Gerasimchuck).
- MySQL の SHOW CREATE TABLE におけるパスワード漏えいを修正 #52962 (Duc Canh Le)。
- CreateSetAndFilterOnTheFlyStep でスパースカラム形式をフル形式に変換 #53000 (vdimir)。
- FS キャッシュにおける、空のキー・プレフィックスを持つディレクトリ削除時のまれなレースコンディションを修正 #53055 (Kseniia Sumarokova)。
- ZstdDeflatingWriteBuffer がまれに出力を途中で切り捨ててしまう問題を修正 #53064 (Michael Kolupaev).
- 非同期フラッシュクエリにおける 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)。
- 実験的な
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 クエリ実行時における遅延ロードデータベースの読み込み処理を修正 #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)。
- 並列 FINAL を使用するクエリにおける列順序の誤りを修正しました。 #53489 (Nikolai Kochetov).
- do_not_merge_across_partitions_select_final を使用した ReplacingMergeTree からの SELECT の不具合を修正しました #53511 (Vasily Nemkov).
- シャットダウン時に非同期挿入キューを先にフラッシュするように変更 #53547 (joelynch).
- スパースカラムに対する JOIN で発生するクラッシュを修正 #53548 (vdimir)。
- 誤った引数を取る関数に対する Set スキップインデックスで発生し得る未定義動作 (UB) を修正 #53559 (Azat Khuzhin)。
- インバーテッドインデックス(実験的機能)における未定義動作(UB)の可能性を修正 #53560 (Azat Khuzhin)。
- 修正:
interpolate式が、SELECT式で同名のエイリアスが付けられた列ではなく、元の列を使用するようにしました。 #53572 (Yakov Olkhovskiy)。 - EXPLAIN PLAN index=1 でのドロップ済みグラニュール数の計算を修正 #53616 (wangxiaobo).
DelayedSource使用時の totals および extremes の処理を正しく行うように修正 #53644(Antonio Andelic)。- mutation パイプライン内で prepared set cache が停止してしまう問題を修正 #53645 (Nikolai Kochetov)。
- UPDATE および DELETE クエリの述語で JSON 型サブカラムを使用するミューテーションに関するバグを修正。 #53677 (VanDarkholme7).
- full_sorting_merge join のフィルタープッシュダウンを修正 #53699 (vdimir)。
NULL::LowCardinality(Nullable(...)) NOT INに関するバグ修正を試行しました #53706 (Andrey Zvonov)。- 修正: スパース列での sorted distinct #53711 (Igor Nikonov).
transform: 複数行を含む default 列を正しく処理する #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)を追加しました。この PR は、このアクセスタイプがデフォルトで無効になっているため(親アクセスタイプであるNAMED COLLECTION ADMINもデフォルトで無効であるため)、後方互換性のない変更です。#50277 で提案されました。使用を許可するにはGRANT NAMED COLLECTION ON collection_name TO userまたはGRANT NAMED COLLECTION ON * TO userを使用してください。これらの権限を付与できるようにするには、設定ファイルで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 内に位置指定カラムを作成するプロジェクション(例:
projection p (select * order by 1, 4))があり、これはテーブルの PK では許可されず、挿入/マージ時にクラッシュを引き起こす可能性があります。アップデートの前に、そのようなプロジェクションは削除してください。#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 のビンごとの統計情報を表示するためのシステムテーブル
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)。 - 各カラムの前に、そのカラムのデフォルト値を使用するかどうかを示すフラグ用の追加バイトを挿入する
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 ヘッダーにピークメモリ使用量の統計情報を追加しました。 #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)。 length関数の別名としてOCTET_LENGTHを追加し、#52153 をクローズ。#52176(FFFFFFFHHHHHHH)。- 複数行文字列から最初の行を抽出する
firstLine関数を追加しました。これにより#51172 が解決されました。#52209(Mikhail Koviazin)。 Intervalデータ型に対して KQL スタイルのフォーマットを実装しました。これはKustoクエリ言語との互換性のためにのみ必要です。 #45671 (ltrk2)。- クエリ
SYSTEM FLUSH ASYNC INSERT QUEUEを追加し、保留中のすべての非同期挿入を宛先テーブルにフラッシュできるようにしました。サーバー側設定async_insert_queue_flush_on_shutdown(デフォルトはtrue)を追加し、グレースフルシャットダウン時に非同期挿入キューをフラッシュするかどうかを制御できるようにしました。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).- 結合の右側へのプッシュダウンを拡張。#50532 (Nikita Taranov)。
- ハッシュテーブルのサイズを事前に確保して grace_hash join を改善(再投稿)。 #50875 (lgbo)。
OpenedFileCache内でのロック待ちが、場合によっては目に見えて遅延として現れることがあります。このロック競合を避けるため、複数のサブマップ(それぞれが独自のロックを持つ)にシャーディングしました。 #51341 (Nikita Taranov)。- 主キー列を含む条件は、PREWHERE チェーンの末尾に移動します。これは、主キー列を含む条件は主キー解析に利用される可能性が高く、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)。 - プライマリキーを無効にしてしまう誤ったプロジェクション解析を修正しました。この問題は
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句に含まれるカラムのサイズのみが考慮されます。そうでない場合は、クエリ内のすべてのカラムが考慮されます。 #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). OFFSETなしの SQL 標準FETCHを許可します。詳細は https://antonz.org/sql-fetch/ を参照してください。#51293(Alexey Milovidov)。- URL/S3 テーブル関数に対して、設定ファイルの新しい
http_forbid_headersセクションを使用して 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 (李扬)。- 非同期インサートのフラッシュクエリを
system.query_logに記録します。 #51160 (Raúl Marín). - 関数
date_diffとageは、ミリ秒およびマイクロ秒の単位をサポートし、マイクロ秒精度で動作するようになりました。 #51291 (Dmitry Kardymon)。 - clickhouse-keeper-client におけるパス解析を改善。 #51359 (Azat Khuzhin).
- ClickHouse に依存しているサードパーティ製品(Gluten: Spark SQL のパフォーマンスを 2 倍にするプラグイン)にバグがありました。この修正により、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)。 clickhouse-localを、procfs がなくても、ホームディレクトリが存在しなくても、glibc の名前解決プラグインがなくても実行できるようにしました。 #51518 (Alexey Milovidov).- rename_files_after_processing 設定に、完全なファイル名用のプレースホルダー
%aを追加。 #51603 (Kruglov Pavel). - カラム
modification_timeをsystem.parts_columnsに追加しました。 #51685 (Azat Khuzhin). - CSV フォーマットに新しい設定
input_format_csv_use_default_on_bad_valuesを追加しました。これにより、1 つのフィールドの解析に失敗した場合に、デフォルト値を挿入できるようになります。 #51716 (KevinyhZou)。 - 予期せぬクラッシュ後にクラッシュログをディスクにフラッシュする処理を追加しました。 #51720 (Alexey Gerasimchuck).
- ダッシュボードページで認証とは無関係なエラーが表示されない問題を修正しました。また、「overlapping」チャートの動作も修正しました。 #51744 (Zach Naimon).
- UUID から UInt128 への変換を許可しました。 #51765 (Dmitry Kardymon).
- Nullable な引数を持つ
range関数のサポートを追加しました。 #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)。- キャッシュ辞書では、ソースから一意なキーのみを要求するようになりました。 #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_countプロジェクションのみ)を無効化するための設定optimize_use_implicit_projectionsを追加しました。 #52152 (Amos Bird)。 hasToken関数を無限ループを引き起こす用途に使えてしまう不具合がありましたが、この問題は修正されました。これにより #52156 がクローズされました。#52160(Alexey Milovidov)。- ZK の祖先ノードを楽観的に作成します。 #52195 (Raúl Marín).
- #50582 を修正。インオーダー読み取りや定数を扱う一部のケースで発生していた
Not found column ... in blockエラーを回避。#52259(Chen768959)。 - ClickHouse 側で S2 Geo プリミティブが無効かどうかを、可能な限り早い段階でチェックします。これにより、次の Issue がクローズされます: #27090。#52260(Nikita Mikhaylov)。
query_plan_optimize_projection = 1のときに欠落していたプロジェクション用の QueryAccessInfo を再度追加しました。これにより #50183 および #50093 が修正されます。#52327(Amos Bird)。ZooKeeperRetriesControlがエラーを再スローする場合は、ZooKeeperRetriesControl自身のスタックトレースではなく、元のスタックトレースが表示される方がより有用です。 #52347 (Vitaly Baranov)。- 一部のディスクがゼロコピー レプリケーションのロックをサポートしていなくても、そのロックが取得されるまで待機するようにしました。 #52376 (Raúl Marín).
- これにより、テーブルのシャットダウン完了後にのみ interserver ポートが閉じられるようになりました。 #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)。このリリースでは、この構文が変更される可能性があります。 - (実験的 MaterializedMySQL)切断後に
mysqlxx::Pool::Entryが使用された際にクラッシュする問題を修正しました。#52063(Val Doroshchuk)。 - (実験的 MaterializedMySQL)MaterializedMySQL で
CREATE TABLE ... AS SELECT.. がサポートされるようになりました。#52067(Val Doroshchuk)。 - (実験的 MaterializedMySQL)MaterializedMySQL 向けにテキスト型を utf8 に自動変換する機能を導入しました。#52084(Val Doroshchuk)。
- (実験的 MaterializedMySQL)MaterializedMySQL の DDL で、引用符なしの UTF-8 文字列がサポートされるようになりました。#52318(Val Doroshchuk)。
- (実験的 MaterializedMySQL)MaterializedMySQL で二重引用符によるコメントがサポートされるようになりました。#52355(Val Doroshchuk)。
- (バージョン 23.6 で新規導入された)
session_timezone設定を実験的機能に格下げしました。#52445(Alexey Milovidov)。 - インクリメンタルな再構成をサポートする ClickHouse Keeper で、ZooKeeper の
reconfigコマンドに対応しました。この機能はkeeper_server.enable_reconfiguration設定で有効化できます。サーバーの追加、削除、およびサーバー優先度の変更をサポートします。#49450(Mike Kot)。この機能は未完成である可能性があります。
ビルド/テスト/パッケージングの改善
- Linux RISC-V 64 向けの実験的な ClickHouse ビルドを CI に追加。#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 によるプロジェクションの不具合を修正 #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 結合の論理エラーを修正 #51601 (vdimir)。
IN条件を PREWHERE に移動するロジックの修正 #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 実行後に inputs を削除しないようにしました #51947 (Nikolai Kochetov).
- 参照カウントの確認を
executeではなくRemoveManyObjectStorageOperation::finalizeで行うように変更 #51954 (vdimir). - パラメトリック UDF をサポート #51964 (Alexey Milovidov).
- toDateTime64() における 2283-12-31 以降の日付の軽微な修正 #52130(Andrey Zvonov 氏)。
- ウィンドウ関数の ORDER BY 句のタプルを修正 #52145 (Alexey Milovidov).
- 集約式に単調関数が含まれる場合の誤ったプロジェクション解析を修正 #52151 (Amos Bird)。
groupArrayMoving関数の不具合を修正 #52161(Alexey Milovidov)。- range 辞書に対する 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 を含み複数箇所で使用されるパラメータ化ビューを修正 #52328 (SmitaRKulkarni)。
- 時間間隔用の式テンプレートを無効化 #52335 (Alexander Tokmakov)。
- Keeper の
apply_snapshotを修正 #52358 (Antonio Andelic). - build-osx.md を更新 #52377 (AlexBykovski)。
- needle が空で haystack がカラムのときに
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)。 - プロジェクションを DROP した後の軽量削除の問題を修正 #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).
新機能
- 関数
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 互換ポート経由でクライアントが接続されている場合に、
SHOW COLUMNSSQL ステートメントを変更して MySQL 相当の型を表示するための新しい設定use_mysql_types_in_show_columnsを追加しました。#49577(Thomas Panetti)。 clickhouse-clientを"--host"、"--port"、"--user"などの代わりに接続文字列で呼び出せるようになりました。#50689(Alexey Gerasimchuck)。- 設定
session_timezoneを追加しました。これは、タイムゾーンが明示的に指定されていない場合にセッションのデフォルトタイムゾーンとして使用されます。#44149(Andrey Zvonov)。 - コーデック DEFLATE_QPL は、設定
"allow_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/Deltalake/Hudi で遅くなる問題に関連します。) #50976 (Kseniia Sumarokova).
- 右側の GLOBAL JOIN テーブルからすべてのカラムを読み込まないようにしました。 #50721 (Nikolai Kochetov).
実験的機能
- アナライザで parallel replicas をサポートしました。 #50441 (Raúl Marín).
- ゼロコピー複製の場合に、レプリカ間で負荷をより均等に分散するため、大規模なマージ/ミューテーションの実行前にランダムなスリープを挿入しました。 #51282 (alesapin).
- シャードが 1 つしかなく、基盤のテーブルが
ReplicatedMergeTreeの場合、Replicatedデータベースを介してALTER PARTITIONクエリおよびミューテーションをレプリケートしないようにしました。 #51049 (Alexander Tokmakov).
改善
- "too many parts" のしきい値を、より現代的な環境に即した値となるよう緩和しました。長時間実行される 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). - CSV/TSV/CustomSeparated フォーマットにおいて、設定
input_format_csv_skip_trailing_empty_lines、input_format_tsv_skip_trailing_empty_lines、input_format_custom_skip_trailing_empty_linesにより末尾の空行をスキップできるようにしました(デフォルトでは無効)。#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" は、一度しか指定できなくなりました。 #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 テーブル関数のプログレスバーを、ソースデータのチャンクサイズを利用し、各スレッドで合計サイズを増分的にカウントすることで改善しました。*Cluster 関数向けのプログレスバーも修正しました。これにより #47250 がクローズされます。#51088(Kruglov Pavel)。
- Progress バーを改善するため、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 server が変更された設定の一覧を出力するようになりました。これにより #51137 がクローズされました。 #51138 (Alexey Milovidov).
- ClickHouse を clang-17 でビルドできるようにしました。 #51300 (Alexey Milovidov).
- SQLancer チェックは、それによってトリガーされたバグが修正されたため、安定と見なされるようになりました。今後は、SQLancer チェックの失敗は失敗したチェックステータスとして報告されます。 #51340 (Ilya Yatsishin).
- Dockerfile の巨大な
RUNを、より小さな条件付きのものに分割しました。同じRUNレイヤー内で必要なツールをオンデマンドでインストールし、その後削除します。OS のアップグレードは冒頭で 1 回だけ実施します。署名済みリポジトリのチェックには最新の方法を使用します。古い docker バージョンでの問題に対処するため、ベースリポジトリを ubuntu:20.04 にダウングレードしました。golang の脆弱性に対処するため、golang のバージョンをアップグレードしました。 #51504 (Mikhail f. Shiryaev).
バグ修正(公式安定版リリースにおけるユーザーに見える誤動作)
- 実行可能辞書の読み込みステータスを正しく報告するように修正 #48775 (Anton Kozlov).
- スキップインデックスおよびプロジェクションに対するミューテーションの適切な処理 #50104 (Amos Bird).
- 可動部分の整理 #50489 (vdimir)。
- 集約関数における IP 型のハッシュの後方互換性を修正 #50551 (Yakov Olkhovskiy).
- Log ファミリーテーブルが
TRUNCATE後に誤った行数を返す問題を修正 #50585 (flynn). uniqExactの並列マージ処理におけるバグを修正 #50590 (Nikita Taranov)。- 最近の grace hash join の変更をリバート #50699 (vdimir)。
- クエリキャッシュ:
ColumnConstからColumnVector<char8_t>への不正なキャストを修正 #50704 (Robert Schulze). - 未知の操作を含むログを Keeper に保存しないようにしました #50751(Antonio Andelic)。
- DateTime64 に対する SummingMergeTree のサポート #50797 (Jordi Villar)。
- const でないタイムゾーン用の互換性設定を追加 #50834 (Robert Schulze)。
- キャッシュエントリ内の LDAP パラメータのハッシュ処理を修正 #50865 (Julian Maicher)。
- Parquet 形式で、例外を送出する代わりに String から big integer をパースするフォールバックを行うよう変更 #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 辞書における copy-on-write の微妙な不具合を修正 #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のデフォルト値を変更しました。これにより、ファイル (例: CSV や Parquet) から読み込む際に ClickHouse が行の順序を並べ替えることが可能になり、多くの場合に性能が大きく向上します。従来の順序維持の動作を復元するには、parallelize_output_from_storages = 0,input_format_parquet_preserve_order = 1を使用してください。#49479 (Michael Kolupaev). - プロジェクションを本番運用レベルにしました。
optimize_use_projections設定を追加し、SELECT クエリに対してプロジェクションを選択するかどうかを制御できるようにしました。設定allow_experimental_projection_optimizationは廃止され、何の効果も持ちません。#49719 (Alexey Milovidov). joinGetを非決定的 (同様にdictGetも) としてマークしました。これにより、追加の設定なしでミューテーション内で使用できるようになります。#49843 (Azat Khuzhin).- 「
groupArrayの戻り値は 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)。 - Function
dotProductが配列でも利用できるようになりました。 #49050 (FFFFFFFHHHHHHH). - MySQL との互換性を向上させるため、
SHOW INDEXステートメントのサポートを追加。 #49158 (Robert Schulze). - テーブル関数
urlに仮想カラム_fileおよび_pathのサポートを追加。- テーブル関数urlのエラーメッセージを改善。- #49231 を解決。- #49232 を解決。#49356(Ziyi Tan)。 - users.xml ファイルに
grantsフィールドを追加し、ユーザーに付与する権限を指定できるようにしました。 #49381 (pufit)。 - Grace ハッシュ結合アルゴリズムの採用により FULL/RIGHT JOIN をサポートしました。 #49483 (lgbo).
WITH FILL修飾子は、ソートの接頭辞ごとに補間をグループ化します。use_with_fill_by_sorting_prefix設定によって制御されます(デフォルトで有効)。#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).
- regexp ツリー辞書に対する
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_fileは、1 つのファイルの範囲で、マルチパートアップロードリクエストによって同時にアップロードされるパーツ数の上限を設定します。 #49961 (Sema Checherinda)。 - 複数のファイルから読み出す場合、各ファイルに対する並列パース用スレッド数を減らします。 #42192 を解決します。 #46661(SmitaRKulkarni)。
- 通常の読み取りよりも少ない granule を読み取れる場合にのみ、集約プロジェクションを使用してください。クエリがテーブルの主キーにはヒットするが、プロジェクションにはヒットしない場合に役立ちます。 #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はメモリ使用量が従来比で約 1/2.6 になり、約 2 倍高速になりました)。 #49380 (Azat Khuzhin).system.query_logおよびsystem.query_thread_logテーブルに対して、適切な場合にはLowCardinalityを適用して最適化しました。これにより、これらのテーブルに対するクエリがより高速になります。 #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_hash結合でハッシュテーブルのサイズを事前に予約するようにしました。 #49816 (lgbo)。uniqExactIf状態の並列マージに対応。#49885 をクローズ。#50285(flynn)。- Keeper の改良: Keeper に
CheckNotExistsリクエストを追加し、Replicated テーブルのパフォーマンスを向上させました。 #48897 (Antonio Andelic). - Keeper のパフォーマンスを改善: 処理中に同一リクエストを 2 回シリアライズしないようにし、大きなリクエストのデシリアライズ結果をキャッシュするようにしました。新しい coordination 設定
min_request_size_for_cacheで制御されます。 #49004 (Antonio Andelic)。 - マージ対象のパーツを選択する際、多くのパーティションにマージ対象が存在しない場合に発生する ZooKeeper の
Listリクエスト数を削減しました。 #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 ビルド用の CMakefile を再構成し、上流の qpl の最新版と整合させました。 #49811 (jasperzhu).- pure 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 はそれらを無効化しようとし、それ以外の場合は例外をスローします。 #50195 (Nikita Mikhaylov). - Parallel Replicas が有効な場合、常に利用不可能なサーバーをスキップするようになりました (この動作は設定
skip_unavailable_shardsによって制御され、デフォルトで有効であり、無効にすることしかできません)。これにより次の Issue が解決されます: #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)。- クオータ作成ステートメントのパラメータでサイズ接尾辞をサポートしました。 #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 テーブル関数は、利用不能なシャードを常にスキップするようにしました。 #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)。 - 多くの未完了の mutation が既に存在するテーブルに対して、mutation を生成する
ALTERクエリ(ALTER UPDATE、ALTER DELETE、ALTER MODIFY COLUMNなど)を遅延させる、またはスローするための設定(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 辞書の接続オプションを有効にしました。例:
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)。 - Parquet writer は、
OUTFILE経由で呼び出された場合に、妥当な 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 と 年内通算日 を引数に取るもの)が追加されました。 #49603 (Robert Schulze).
RegExpTreeDictionaryでdictionaryテーブル関数をサポートしました。 #49666 (Han Fei).- 重み付きフェアな IO スケジューリングポリシーを追加しました。サーバーを再起動することなく、実行時に IO スケジューリング階層を更新できる動的リソースマネージャーを追加しました。 #49671 (Sergei Trifonov).
- GCS へのマルチパートアップロード後に compose リクエストを追加しました。これにより、マルチパートアップロードでアップロードされたオブジェクトに対してコピー操作を使用できるようになります。異なるサイズのパートから作成されたオブジェクトでは 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 ファイルから辞書と関数を読み込めるようになりました。以前のバージョンでは、設定ファイル内の
dictionaries_configまたはuser_defined_executable_functions_configを編集する必要がありました。これらは*.xmlファイルを前提としていたためです。 #49812 (Alexey Milovidov). - Kafka テーブルエンジンでエイリアス列が使用可能になりました。 #49824 (Aleksandr Musorin).
extractKeyValuePairsによって生成されるペアの最大数を制限する設定を追加しました。これはメモリの過剰消費を防ぐための安全策です。 #49836 (Arthur Passos).IN演算子の引数が要素数 1 のタプルであるという、やや特殊なケースをサポートしました。 #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 設定を追加しました。クラスタとしての compute group は、他の compute group からは見えません。 #50186 (Yangkuan Liu).
LIMIT nを指定できるにもかかわらず PostgreSQL が全てのデータを読み込んでしまう問題を修正しました。 #50187 (Kseniia Sumarokova).- サブクエリを含むクエリ向けに新しいプロファイルイベント(
QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries)を追加しました。#50204 (Azat Khuzhin)。 users.xmlファイルにrolesフィールドを追加し、設定ファイルから GRANT を伴うロールを指定できるようにしました。 #50278 (pufit)。- 非同期メトリクスで
CGroupCpuCfsPeriodとCGroupCpuCfsQuotaを報告するようにしました。- サーバー起動時に cgroup v2 のメモリ制限を考慮するようにしました。 #50379 (alekar)。 - SIGINT と同様に動作するよう SIGQUIT 用のシグナルハンドラを追加しました。#50298 をクローズします。#50435(Nikolay Degterinsky)。
- JSON のパースがオブジェクトのサイズが大きすぎるために失敗した場合、デバッグできるように最後に処理した位置を出力するようにしました。 #50474 (Valentin Alexeev).
- 可変長の Decimal をサポートしました。Closes #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 ブランチで有効になっている analyzer を使用する CI チェックを追加。フォローアップ #49562。#49668(Dmitry Novik)。
- LLVM/clang 16 に切り替え。 #49678 (Azat Khuzhin).
- ClickHouse を clang-17 でビルドできるようにしました。 #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)。
- 以前の失敗時におけるバックアップ/リストアの同時実行チェック #48726 (SmitaRKulkarni).
- 存在しない ZooKeeper パスのテーブルをアタッチしても ReadonlyReplica メトリクスが増加しない問題を修正 #48954 (wangxiaobo)。
- 一部の箇所で、捕捉されない例外に対して std::terminate が呼び出されてしまう可能性があった問題を修正 #49112 (Kruglov Pavel)。
- 複数の StorageJoin を含むクエリで発生していたキーが見つからないエラーを修正 #49137 (vdimir)。
- nullable な primary key 使用時に誤ったクエリ結果が返される問題を修正 #49172 (Duc Canh Le)。
- ビッグエンディアン環境での reinterpretAs*() の動作を修正 #49198(Suzy Wang)。
- (実験的ゼロコピー レプリケーション)ゼロコピーのパーツのロックをよりアトミックに行う #49211 (alesapin).
- Outdated parts の読み込み時に発生するレースコンディションを修正 #49223 (Alexander Tokmakov)。
- すべてのキー値が null の場合に、GROUP BY で ROLLUP を使用すると誤った結果が返される問題を修正 #49282 (Shuai li).
- SHARDS を使用する HASHED 辞書の load_factor の計算を修正 #49319 (Azat Khuzhin)。
- エイリアス列に圧縮 CODEC を設定できないようにしました #49363 (Timur Solodovnikov).
- 既存のパートディレクトリを削除する処理におけるバグを修正 #49365 (alesapin)。
- HMAC 使用時の GCS の挙動を正しく修正 #49390 (Antonio Andelic).
- remote() からの読み取り時にサブクエリセットが構築されないファジング関連のバグを修正 #49425(Alexander Gololobov)。
shutdown_wait_unfinished_queries設定を反転 #49427 (Konstantin Bogdanov)。- (実験的 zero-copy レプリケーション) 別の zero-copy バグを修正 #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)。
- 修正:ソートされていない列に 0 値が含まれる場合の ORDER 句での DISTINCT の挙動 #49636 (Igor Nikonov)。
- fuzzer を用いた UBSan により検出された大きな整数のオフバイワンエラーを修正 #49645 (Alexey Milovidov)。
- 再起動後の sparse columns からの読み取り処理を修正 #49660 (Anton Popov)。
- fibers 使用時の
SpanHolder::finish()内のassertを修正 #49673 (Kruglov Pavel)。 - 疎な引数を取る短絡評価関数およびミューテーションを修正 #49716 (Anton Popov).
- インクリメンタルバックアップに追記されるファイルの書き込み処理を修正 #49725 (Vitaly Baranov).
- Object 型カラムを含むテーブルで lightweight delete mutation を実行した際に発生していた "There is no physical column _row_exists in table" エラーを修正しました。 #49737 (Alexander Gololobov).
- randomStringUTF8(uneven number)における msan の問題を修正 #49750 (Robert Schulze)。
- 集約関数 kolmogorovSmirnovTest を修正 #49768 (FFFFFFFHHHHHHH)。
- ネイティブプロトコルにおける設定エイリアスを修正 #49776 (Azat Khuzhin).
- 単一要素のタプル配列に対する
arrayMapを修正 #49789 (Anton Popov). - クエリ単位の I/O およびバックアップのスロットリング設定を修正 #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 ファイルを生成できるようにするため、setting 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)。
- 壊れたプロジェクションパーツの報告処理を修正 #50052 (Amos Bird).
- JIT コンパイル時の != NaN の不具合修正 #50056 (Maksim Kita)
- 引数なしの Replicated データベースの場合に発生するクラッシュを修正 #50058 (Azat Khuzhin).
multiIfと定数条件および nullable 引数の組み合わせで発生するクラッシュを修正 #50123 (Anton Popov).- 日付関連キーに対する無効なインデックス解析を修正 #50153 (Amos Bird)。
- ORDER BY 列が存在しない場合は ORDER BY 句を変更できないようにしました #50154 (Han Fei).
- バイナリ演算子に null の定数引数が含まれている場合にインデックス解析が壊れていた問題を修正 #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 句内の入れ子になった分散 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バージョンはフェッチと drop-range のみを待機し(マージおよびミューテーションは無視します)、PULLバージョンは ZooKeeper から新しいエントリを取得しますが、その完了は待機しません。#47794 を修正しました。#48085(Alexander Tokmakov)。- Kafka の DefaultPartitioner との互換性を持たせるために
kafkaMurmurHash関数を追加。#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(李扬)。 PrettyJSONEachRowフォーマットを追加し、改行区切りかつ 4 スペースインデントの整形済み JSON を出力できるようにしました。 #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のセットがメモリ内に構築されます。パーツが多い場合、これによって大量のメモリと CPU を消費し(OOM を引き起こす可能性もあります)、負荷が高くなります。この問題への解決策として、現在 mutation タスクによって構築中のセットを短期間だけ保持するキャッシュを導入しました。同じ mutation の別のタスクが並行して実行されている場合は、そのキャッシュ内のセットを検索し、構築完了を待って再利用できます。#46835 (Alexander Gololobov). ALTER TABLEクエリを適用する際、必要な場合にのみ依存関係をチェックするようにしました。#48062 (Raúl Marín).- 関数
mapUpdateを最適化しました。#48118 (Anton Popov). - ローカルレプリカへの内部クエリは、明示的に送信され、その結果のデータはループバックインターフェイス経由で受信されるようになりました。設定
prefer_localhost_replicaは並列レプリカに対しては適用されません。これはスケジューリングを改善し、コードをよりクリーンにするための変更です。イニシエータは読み取りプロセスの調整と結果のマージのみを担当し、他のすべての副次クエリはデータの読み取りを行い、その間イニシエータはリクエストに継続的に応答します。注: ループバックインターフェイスの使用は必ずしも高パフォーマンスではありませんが、そうしないと一部のレプリカがタスク不足で待たされ、結果としてクエリ実行のさらなる遅延や利用可能なリソースを使い切れない状況につながる可能性があります。コーディネータの初期化はさらに遅延実行されるようになりました。すべての受信リクエストには読み取りアルゴリズムに関する情報が含まれており、最初のリクエスト到着時にその情報を用いてコーディネータを初期化します。もし任意のレプリカが別のアルゴリズムで読み取りを行うことを決定した場合は、例外がスローされ、クエリは中止されます。#48246 (Nikita Mikhaylov). use_skip_indexes=0の設定によりスキップインデックスが無効化されている場合、スキップインデックスの解析のみに使用されるIN句右辺のサブクエリに対しては、セットを構築しないようにしました。以前はこれがクエリのパフォーマンスに悪影響を与える可能性がありました。#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). - クエリキャッシュでユーザーごとのクオータを定義できるようになりました。 #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). - ソケットへの非同期接続と非同期書き込みを追加しました。シャード間での接続確立およびクエリ/外部テーブルの送信を非同期化しました。コードを fiber を用いてリファクタリングしました。#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 テーブルをソースとする辞書に対して、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).- クエリが kill された場合や制限を超えた場合には、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/バックアップに対するクエリ単位/サーバー単位の帯域幅制限(サーバー設定:
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テーブル上で行われる操作に対して追加の保証を強制する新しい設定keeper_map_strict_modeを追加しました。#48293(Antonio Andelic)。- シンプルディクショナリの主キー型がネイティブの符号なし整数型であることを検証するための設定
check_dictionary_primary_keyを、互換性のために追加しました(チェックを無効にするにはcheck_dictionary_primary_key = falseを設定します)。 #48335 (lizhuoyu5). KeeperMapに対する mutation は不要なため、レプリケートしないようにしました。 #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 クエリの式リストで末尾のカンマを許可するようにしました。たとえば
SELECT a, b, c, FROM tableのように記述できます。#37802 をクローズしました。 #48438(Nikolay Degterinsky)。 - 環境変数
CLICKHOUSE_USERおよびCLICKHOUSE_PASSWORDを、クライアントパラメータ--userおよび--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でスキーマ推論が機能するようにした。Closes #47599. #48679 (flynn).ReplicatedMergeTreeにreplicated_max_mutations_in_one_entry設定を追加し、1 つのMUTATE_PARTエントリあたりの mutation コマンド数に上限を設けられるようにしました(デフォルトは 10000)。 #48731 (Alexander Tokmakov)。- AggregateFunction 型では、未使用の arena のバイト数を
read_bytesに含めないようにしました。 #48745 (Raúl Marín). - MySQL 辞書ソースと named collection 使用時に、一部の MySQL 関連設定が正しく処理されない問題を修正。#48402 をクローズ。 #48759(Kseniia Sumarokova)。
- ユーザーが
max_single_part_upload_sizeを非常に大きな値に設定した場合、AWS S3 SDK に起因するバグが原因でクラッシュが発生する可能性があります。この変更により #47679 が修正されました。#48816(Alexey Milovidov)。 RabbitMQのデータ競合を修正(レポート)、コードをリファクタリング。 #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)。
- LXC 内で ClickHouse を実行し、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 使用量の問題を修正(23.2 で #44404 により悪化していた) #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).
- 辞書に依存する分散テーブルを読み込む際に発生する起動エラーを修正しました #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集約関数が、NULL を許容する型で空の結果に対しても正しく動作します #48593 (lgbo)。- ACL 使用時に、ノードがスキーム
auth付きで作成されないことがある Keeper のバグを修正しました。 #48595 (Aleksei Filatov). - IPv4 と UInt の比較演算子を許可 #48611 (Yakov Olkhovskiy)。
- キャッシュに起因する可能性のあるエラーを修正 #48636(Kseniia Sumarokova)。
- 空のデータに対する非同期挿入で、例外がスローされなくなりました。 #48663 (Anton Popov).
- RENAME TABLE が失敗した場合にテーブルの依存関係を修正する #48683(Azat Khuzhin)。
- 主キーに重複するカラムが含まれている場合(これはプロジェクションに対してのみ発生し得ます)、以前のバージョンではバグを引き起こす可能性がありました #48838(Amos Bird)。
- ZooKeeper における send_thread/receive_thread の join 時のレースコンディションを修正 #48849 (Alexander Gololobov)。
- zero copy replication で無視されている detached part を削除しようとした際に発生する予期しない part name エラーを修正 #48862 (Michael Lex).
Date32型の Parquet/Arrow 列がDate32型の列として読み込まれない問題を修正 #48864 (Kruglov Pavel)。- 行ポリシーが設定され、名前にドットを含む列を持つテーブルから選択するときに発生する
UNKNOWN_IDENTIFIERエラーを修正 #48976 (Kruglov Pavel)。 - 空の Nullable 文字列による集計を修正 #48999 (LiuNeng)。
ClickHouse リリース 23.3 LTS, 2023-03-30
アップグレードに関する注意事項
- 軽量 DELETE は本番運用で使用可能な状態になり、デフォルトで有効化されました。MergeTree テーブルに対する
DELETEクエリは、現在デフォルトで利用可能です。 *domain*RFCおよびnetloc関数の挙動がわずかに変更されました。より良い仕様準拠のために、URL の authority 部分で許可される記号の集合が緩和されています。 #46841 (Azat Khuzhin).- カラムに対して DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED 句を指定した KafkaEngine ベースのテーブルの作成を禁止しました。 #47138 (Aleksandr Musorin).
- 「非同期接続ドレイン」機能を削除しました。関連する設定およびメトリクスも削除されています。これは内部機能であったため、この機能について知らなかったユーザーには影響しないはずです。 #47486 (Alexander Tokmakov).
arraySum/Min/Max/Avg/Product、arrayCumSum/CumSumNonNegative、arrayDifference、配列構築、IN 演算子、クエリパラメータ、groupArrayMovingSum、統計関数、min/max/any/argMin/argMax、PostgreSQL ワイヤプロトコル、MySQL テーブルエンジンおよび関数、sumMap、mapAdd、mapSubtract、arrayIntersectにおいて、256 ビット 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の設定を使用して、レプリカ間で処理を分割する新しいモードを追加しました。クラスタが複数のレプリカを持つ単一のシャードで構成されている場合、最大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データベースから削除されたが、まだ完全には削除されていないテーブルを表示するsystem.dropped_tablesテーブルを追加しました。 #47364 (chen).- MySQL 互換性のため、
positionCaseInsensitiveのエイリアスとしてINSTRを追加。#47529 をクローズ。 #47535(flynn)。 - 固定精度で数値を文字列に変換できる
toDecimalString関数を追加しました。 #47838 (Andrey Zvonov)。 - MergeTree の設定
max_number_of_mutations_for_replicaを追加しました。これは、レプリカごとのパーツのミューテーション数を指定した値に制限します。0 を指定すると、レプリカごとのミューテーション数に制限がないことを意味します(ただし、実行自体は他の設定によって制約される場合があります)。 #48047 (Vladimir C)。 - 2つの配列からマップを作成できる 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 倍少ないメモリで済むようになりました。 #47290 (Michael Kolupaev).
- 以前のバージョンでは、大量のファイルに対するバックアップは信じられないほど遅いものでしたが、今は違います。今では信じられないほど高速です。 #47251 (Alexey Milovidov)。バックアップの IO 処理専用のスレッドプールを導入しました。これにより、他のプールとは独立してスケールでき、パフォーマンスが向上します。 #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 辞書の読み取りパイプラインをマルチスレッドで実行できるようになりました。有効にするには、
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に対するクエリを最適化しました。ブロックサイズ制限に対応するために複数のソースを追加し、各ブロックごとにパーツサイズを計算する(つまりシステムコールを並列に実行する)ため IO スレッドプールを使用するようにしました。 #46624 (Sema Checherinda)。 - ReplicatedMergeTree テーブルに対する
max_replicated_merges_in_queueのデフォルト値を 16 から 1000 に引き上げます。これにより、ClickHouse Cloud の共有ストレージを利用するクラスタなど、非常に多くのレプリカを持つクラスタでバックグラウンドマージ処理をより高速に実行できるようになります。 #47050 (Alexey Milovidov)。 - パーティションのリストを取得する際に
DISTINCTの代わりにGROUP BYを使用するようにclickhouse-copierを更新しました。大きなテーブルでは、これにより SELECT の実行時間が 500 秒超から 1 秒未満に短縮されました。 #47386 (Clayton McClure). ASOF JOINにおけるパフォーマンス低下を修正。 #47544 (Ongkong).- Keeper のバッチ処理をさらに強化。読み取りリクエスト時にバッチを分割しないようにしてパフォーマンスを改善。 #47978 (Antonio Andelic).
- 異なる DEFAULT 式を持つ列を含む Merge で PREWHERE を許可。 #46831 (Azat Khuzhin).
実験的機能
- Parallel replicas 機能: ローカルレプリカをより有効に活用することで全体的なパフォーマンスを改善し、デフォルトで非レプリケートな MergeTree テーブルからの parallel replicas 機能を用いた読み取りを禁止しました。#47858 (Nikita Mikhaylov).
- 実験的な Analyzer が有効な場合、
Join、Dictionary、EmbeddedRocksDBテーブルとの JOIN に対して、左テーブルへのフィルタープッシュダウンをサポートしました。#47280 (Maksim Kita). - ゼロコピー複製を用いる ReplicatedMergeTree において、Keeper への負荷が軽減されました。#47676 (alesapin).
- MaterializedPostgreSQL を用いたマテリアライズドビューの作成に関する問題を修正しました。#40807 (Maksim Buren).
改善
input_format_json_ignore_unknown_keys_in_named_tupleをデフォルトで有効にしました。 #46742 (Kruglov Pavel)。- MATERIALIZED VIEW(マテリアライズドビュー)への push 時に発生したエラーを無視できるようにしました(新しい設定
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)。- この改善はユーザーからは見えない形で行われます。クエリプランに基づいてプロジェクション解析を再実装しました。旧バージョンと新バージョンを切り替えるための設定項目
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型をサポートしました。以前は bool 値に対して誤ってNull型が返されていました。 #47046 (Anton Popov)._request_bodyパラメータを使用して、あらかじめ定義した HTTP クエリを設定します。 #47086 (Constantine Peresypkin)。- Enter キー押下時に組み込み UI の SQL エディタで自動インデントを行うようにしました。 #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_tree辞書を改善しました。 #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関数に big int 型のサポートを追加しました。#47194 をクローズしました。#47322(Nikolay Degterinsky)。- 有効期限付きの S3 認証情報に対し有効期限の猶予時間を設け、一部のエッジケースで発生する
ExpiredTokenエラーを回避できるようにしました。これはexpiration_window_seconds設定で制御でき、デフォルトは 120 秒です。 #47423 (Antonio Andelic)。 Avroフォーマットで Decimals 型と 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が正確に反映できるようにするために使用されます。このプルリクエストでは、クエリが複数シャードにまたがる分散処理やソート処理を含む場合に発生していた問題に対処しています。今回の更新以前は、これらのケースは意図したとおりに動作していませんでした。#47874 (Amos Bird)。 - ThreadPools メトリクスの内部観測。 #47880 (Azat Khuzhin).
WriteBufferFromS3MicrosecondsおよびWriteBufferFromS3RequestsErrorsのプロファイルイベントを追加しました。 #47885 (Antonio Andelic)。- ClickHouse のインストールに
--linkおよび--noninteractive(-y) オプションを追加。#47750 をクローズ。#47887(Nikolay Degterinsky)。 - 利用不可能な依存テーブルを持つマテリアライズドビューにアタッチする際に発生していた
UNKNOWN_TABLE例外を修正しました。これはバックアップから状態を復元する際に役立つ可能性があります。 #47975 (MikhailBurdukov). - 暗号化ディスク構成にオプションの path が追加されていない場合の不具合を修正。 #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).
- ARM 上で古い glibc でも ClickHouse が動作することを保証する 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 読み込みバッファでファイルサイズを取得する際に initial range を使用するようにしました。この変更がないと、一部のリモートファイルを処理できませんでした。 #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 内の文字列からの日付および int 型の推論を修正 #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).
- 外部辞書 / library-bridge: エラー「unknown library method 'extDict_libClone'」を修正 #47136(alex filatov)。
- LIMIT を伴う Grace Hash 結合における競合状態を修正 #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).
- データフォーマット用ファザーと、それに対応する修正。 #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)。- ムーブ操作中のゼロコピーロック待機の問題を修正 #47631 (alesapin)。
- パーティション単位の集約を修正 #47634 (Nikita Taranov)。
BSONEachRowフォーマットにおけるタプルを配列としてシリアル化する処理のバグを修正 #47690 (Kruglov Pavel)。polygonsSymDifferenceCartesianのクラッシュを修正 #47702 (pufit)。- ストレージ
Fileからの、zlibおよびgzipで圧縮されたファイルの読み取りを修正 #47796 (Anton Popov)。 - PostgreSQL の空クエリ検出を改善 (pgx Go 言語ドライバ向け) #47854 (Azat Khuzhin).
- LowCardinality 型の DateTime 単調性チェックを修正 #47860 (Antonio Andelic)。
- RESTORE ASYNC では backup_threads ではなく restore_threads を使用するようにしました #47861 (Azat Khuzhin)。
- 投影を含む 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(): UB(符号付き整数オーバーフローによる未定義動作)を修正 #48019 (Robert Schulze).
- スキーマの再利用を避けるため、Avro のレコードには一意の名前を使用するようにしました #48057 (Kruglov Pavel)。
- Keeper において TCP/HTTP ソケットのタイムアウトが正しく設定されるように修正 #48108 (Antonio Andelic)。
Avroフォーマットでのヌルポインタへのメンバー呼び出しが発生する可能性を修正 #48184 (Kruglov Pavel).
ClickHouse リリース 23.2, 2023-02-23
後方互換性のない変更
- 関数 "toDayOfWeek()"(エイリアス: "DAYOFWEEK")を拡張し、週の開始曜日(Monday または Sunday)と、カウントを 0 または 1 から開始するかどうかを表す mode 引数を追加しました。他の日時関数との一貫性を保つため、mode 引数は 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)。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により、Native フォーマットを使用する HTTP レスポンスのクライアントプロトコルバージョンを設定できるようになりました。 #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 merge アルゴリズムを使用できるようにしました。これにより、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 (李扬)。 - AVX-512 命令を使用して lower/upper 関数のパフォーマンスを向上しました。 #37894 (yaqi-zhao).
- SMT を無効化した状態でコア数が 32 以上のシステムにおいて、ClickHouse がコア数の半分しか使用しないという制約を解除しました(BIOS で Hyper-Threading を無効化した場合)。 #44973 (Robert Schulze)。
- 関数
multiIfをカラムナ実行に対応させることでパフォーマンスを向上し、2.3倍高速化しました。 #45296 (李扬). position関数で、検索文字列が空文字列の場合の高速パスを追加しました。 #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 ベンチマークを用い、カラム型を非 NULL 型から NULL 許容型に変更したうえで、そのクエリの 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 (李扬)。- リモートディスク以外での vertical merge による過剰なメモリ使用量を修正しました。リモートディスクでは
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)。 - マークの分布および読み取り処理全体の調整に関するコードを書き直し、パフォーマンスを最大限に向上させました。これにより #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付きのクエリに対して、ソートキーの式をwhere句からprewhereに移動して最適化できるようにサポート。 #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_tree辞書が改善され、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 ワイルドカードに一致するファイルが 1 件も存在しない場合にエラーをスローするようにしました。#45587 をクローズ。#45957 (chen).
- クラスター状態のデータを使用して、バックアップ/リストア処理の同時実行を確認します。 #45982 (SmitaRKulkarni).
- ClickHouse Client:あいまい検索に対して「exact」マッチングを使用するようにし、大文字・小文字を正しく無視しつつ、SQL クエリのマッチングにより適したアルゴリズムを採用しました。 #46000(Azat Khuzhin)。
- 誤ったビュー作成構文
CREATE View X TO Y AS SELECTを禁止しました。 #4331 をクローズしました。 #46043(flynn)。 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(李扬)。 - デバッグビルドにおいて、結果の統計量が NaN となる場合の
welchTTest関数内のアサーションを修正しました。他の類似関数との動作を統一しました。従来の動作が扱いづらかったため、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のエイリアスです。指定されたフォーマット文字列に従って時刻を整形します。フォーマット文字列は定数式である必要があるため、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.databases」の動作と一致するようになります。 #46435 (Robert Schulze).
distribution_queueテーブルにlast_exception_time列を追加しました。 #46564(Aleksandr)。- パラメータ化ビューでのパラメータ付き IN 句のサポート。 #46583 (SmitaRKulkarni).
- サーバー起動時に名前付きコレクションを読み込まず、代わりに初回アクセス時に読み込むようにしました。 #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桁の数値を日付として解釈しないようにしました。誤ったデータが読み取られるおそれがあるためです。 #45581 (Kruglov Pavel).
odbc_bridge_use_connection_pooling設定が正しく使用されるよう修正。 #45591 (Bharat Nallan)。- キャッシュ内のコールバックが呼び出されたとき、このキャッシュ自体が破棄されている可能性があります。安全性を確保するため、メンバーは値キャプチャします。タスクスケジューリングについても安全であり、ストレージが破棄される前に非アクティブ化されます。#45548 を解決。 #45601(Han Fei)。
- コーデック Delta または DoubleDelta をコーデック Gorilla と組み合わせて使用した場合に発生するデータ破損の問題を修正しました。 #45615 (Robert Schulze).
- N-gram ブルームフィルターインデックスの使用時に無効な読み取りを回避できるよう、型を正しくチェックするようにしました。 #45617 (Antonio Andelic).
c-ares周辺でいくつかのセグメンテーションフォルトが報告されていました。これらは私の以前の pull request により導入されたものでした。Alexander Tokmakov の協力を得て修正しました。#45629(Arthur Passos)。- 重複した主キーに遭遇した場合のキーの説明を修正します。これは projection で発生することがあります。詳細は #45590 を参照してください。 #45686(Amos Bird)。
- バックアップの圧縮方式とレベルを設定できるようにしました。これにより #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/IPv6 アドレス(
::.1.2.3のような)に対する IPv6 パーサーのバグを修正。 #45871 (Yakov Olkhovskiy). system.processesテーブルおよびSHOW PROCESSLISTクエリにquery_kindカラムを追加し、重複したコードを削除しました。これにより、グローバル設定パラメータmax_concurrent_select_queriesがINTERSECTやEXCEPTを連結したクエリに対して適用されていなかったバグが修正されました。 #45872 (Alexey Milovidov).- WingFuzz によって検出された関数
stochasticLinearRegressionのクラッシュを修正しました。#45985 (Nikolai Kochetov)。 - 疎なカラムが有効になっているテーブル(設定
ratio_of_defaults_for_sparse_serializationによって制御)からデータを読み取る際に、INTERSECTおよびEXCEPT修飾子を使用するSELECTクエリで発生していたクラッシュを修正しました。 #45987 (Anton Popov)。 - FINAL を伴う DESC ソートにおける順序読み取りの最適化を修正し、#45815 をクローズ。#46009(Vladimir C)。
- compact パーツにおける、複数レベルの存在しないネストされたカラムの読み取りを修正。#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)。
- グルーピングセット使用時の誤ったプレディケートプッシュダウンを修正。#45947 をクローズ。#46151 (flynn)。
- 定数キーを使用する
fulls_sorting_joinでパイプラインが停止してしまう可能性のある不具合を修正。#46175(Vladimir C)。 - 誤った結果を避けるため、フォーマット時に
tuple関数をリテラルに書き換えないよう修正しました。 #46232 (Salvatore Mesoraca). - Arrow 形式で LowCardinality(Nullable) を読み込む際に発生しうる範囲外アクセスエラーを修正。 #46270 (Kruglov Pavel).
- 例外
CANNOT_PARSE_INPUT_ASSERTION_FAILEDによりSYSTEM UNFREEZEクエリが失敗する不具合を修正。 #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が有効な場合の並列 distributed INSERT SELECT における s3Cluster のスキーマ推論を修正。 #46381 (Kruglov Pavel).- 同じ
Nestedカラム内のフィールドであるarr1とarr2を用いた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で定数値が使用された場合に発生する可能性のあったクラッシュを修正しました。関連する issue #46466 を解決。#46493(Nikolai Kochetov)。- クエリレベルで
disk設定が指定されており、かつ構成ファイルの MergeTree 設定セクションでstorage_policyが指定されている場合でも、例外をスローしないようにしました。diskが構成ファイル側の設定を上書きします。 #46533 (Kseniia Sumarokova). - 関数
arrayMapにおける定数LowCardinality引数の不正な処理を修正しました。このバグにより、リリースビルドではセグメンテーションフォルトが、デバッグビルドでは論理エラーBad castが発生する可能性がありました。 #46569 (Alexey Milovidov)。 - #46557 を修正します。 #46611 (Alexander Gololobov).
- clickhouse-server が 1分30秒以内に起動できない場合に systemd ユニットが際限なく再起動を繰り返す問題を修正しました(systemd サービスから clickhouse-server を起動する際のタイムアウト処理ロジックを無効化)。 #46613 (Azat Khuzhin).
- 非同期挿入で確保されたメモリバッファがグローバルコンテキストで解放されており、対応するユーザーおよびクエリの 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 型でもないカラムに対して
Gorillaコーデックを使用することを禁止します。 #45252 (Robert Schulze). 無意味であり、不整合を引き起こしていました。 - 非推奨の構文で作成された
*MergeTreeテーブルでは、parallel quorum insert が正しく動作しない可能性があります。そのため、そのようなテーブルに対する parallel quorum insert のサポートは完全に無効化されます。新しい構文で作成されたテーブルには影響しません。 #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).
新機能
- 正規表現ツリーを走査してキーを抽出するための辞書ソースです。User-Agent の解析に使用できます。 #40878 (Vage Ogannisian). #43858 (Han Fei).
- パラメータ化ビュー機能を追加し、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フォーマットでStructのListとしてNestedテーブルの読み書きをサポートします。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).
- I/O リクエスト向けに拡張可能かつ構成可能なスケジューリングサブシステムを追加しました(まだ I/O コード本体とは統合されていません)。 #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にシャーディング対応を追加し、並列読み込みを可能にしました(シャード数に応じてほぼ線形にスケーリング)。 #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が挿入テーブルの構造を自動的に利用する処理を改善しました。これにより、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).- 非同期 INSERT の重複排除を改善:ユーザーが非同期 INSERT を重複して実行した場合、Keeper へ問い合わせる前にメモリ内で重複排除を行うようにしました。 #44682 (Han Fei).
- Input/output
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 クライアント/ローカル履歴でのファジー検索のために、
skimライブラリ(Rust で実装)を静的リンクするようにしました。#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).
- green(成功)なバックポート PR と、green(成功)かつ承認済みの PR を自動マージするようにしました。#41110 (Mikhail f. Shiryaev).
- ClickHouse CI のステータスを確認できるウェブサイトを公開しました。Source.
バグ修正
- ドメイン IP 型 (IPv4, IPv6) をネイティブ型に置き換えました。 #43221 (Yakov Olkhovskiy)。これにより、コード内で欠けていた一部の実装が自動的に補われます。
- バックアップ処理中にミューテーションが強制終了された場合の挙動を修正しました。 #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 クエリにおける settings 制約を修正。 #43993 (Nikolay Degterinsky).
- テーブルメタデータ内の
EPHEMERALカラムに、パースできないデフォルト値が設定されていたバグを修正しました。 #44026 (Yakov Olkhovskiy). - 互換性設定から取得した不正なバージョンの解析処理を修正。 #44224 (Kruglov Pavel)
- 日時型からの interval 減算の動作を、加算時と同様にしました。 #44241 (ltrk2).
- ビュー結果の最大サイズに関する制限を撤廃しました。 #44261 (lizhuoyu5).
do_not_evict_index_and_mrk_files=1のときにキャッシュ内で発生しうる論理エラーを修正しました。#42142 をクローズ。#44268(Kseniia Sumarokova)。- ライトスルーキャッシュにおいて、キャッシュ書き込みが本来は中断されるべきでない状況で早期に中断されてしまう可能性があった問題を修正(誤った前提によりキャッシュ処理が停止してしまうことがあった)。 #44289 (Kseniia Sumarokova).
LowCardinalityと一緒に、定数引数を取る関数INが定数引数として使用された場合に発生する可能性のあったクラッシュを修正しました。#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)。 - 設定ファイル内で profile settings constraints の後に profile settings を記述すると、constraints が効かなくなっていました。 #44411 (Konstantin Bogdanov).
- データを含む
EXPLAIN AST INSERTクエリを実行した際に発生するSYNTAX_ERRORを修正しました。#44207 をクローズしました。 #44413(save-my-heart)。 - CSV フォーマットで CRLF を含む bool 値を読み取る処理を修正。Closes #44401. #44442 (Kruglov Pavel).
- LowCardinality 辞書上で and/or/if/multiIf 関数を実行しないようにし、その結果型が LowCardinality にならないようにしました。これは一部のケースで
Illegal column ColumnLowCardinalityエラーを引き起こす可能性がありました。この変更により #43603 を修正しました。#44469(Kruglov Pavel)。 - 設定
max_streams_for_merge_tree_readingで mutation を修正しました。 #44472 (Anton Popov)。 - ASTSelectQuery::formatImpl において、GROUPING SETS 使用時に発生し得るヌルポインタ逆参照の問題を修正しました(#43049)。#44479(Robert Schulze)。
- 設定に基づいて、テーブル関数の引数、CAST 関数の引数、および JSONAsObject のスキーマ推論における型を検証するようにしました。 #44501 (Kruglov Pavel)。
- LowCardinality と定数列を組み合わせた IN 関数の問題を修正し、#44503 をクローズ。#44506(Duc Canh Le)。
CREATE TABLE文におけるDEFAULT式の正規化処理で発生していたバグを修正しました。関数inの第 2 引数(または演算子INの右辺引数)が、CREATE クエリの実行時にその評価結果に置き換えられてしまうことがありました。#44496 を修正。#44547(Alexander Tokmakov)。WITH ROLLUP、WITH CUBE、WITH TOTALSを含む場合、プロジェクションは動作しません。以前のバージョンでは、プロジェクションの使用をスキップする代わりに、クエリが例外をスローしていました。これにより #44614 がクローズされました。また、#42772 もクローズされました。#44615(Alexey Milovidov)。- 非同期ブロックがクリーンアップされなかったのは、関数
get all blocks sorted by timeが非同期ブロックを取得していなかったことが原因です。 #44651 (Han Fei). - サブクエリを伴う
JOIN、UNION、およびTOTALSで発生するLOGICAL_ERROR「The 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)。 - フェッチ時の fsync(
min_compressed_bytes_to_fsync_after_fetch)およびミューテーション時の小さいファイル(ttl.txt, columns.txt)に対する fsync(min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge)の挙動を修正。 #44781 (Azat Khuzhin). - ディスク間でパーツが移動されている状況で
system.partsまたはsystem.parts_columnsテーブルをクエリすると、まれにレースコンディションが発生する可能性がありました。#41145 で導入された問題です。#44809(Alexey Milovidov)。 - プロジェクションの最適化を有効にした場合に発生する可能性のある
Context has expiredエラーを修正しました。これは、実行時にコンテキストを使用するdictHas/dictGetなどの特定の関数を含むクエリで再現できます。#44844 を修正。#44850(Nikolai Kochetov)。 - リモート fs から
LowCardinality辞書を読み込む際に発生する可能性があるCannot read all dataエラーを修正。 #44709 を解決。 #44875(Nikolai Kochetov)。 - ハードウェアモニターのセンサー値を読み取れない場合でも、ログに完全な例外メッセージを出力するのではなく、無視するようにしました。 #44895 (Raúl Marín).
- 計算された 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)を使用することで、しきい値を超えたparts数に比例して遅延が増加するようにしました。#44902 をクローズしました。#44954(Igor Nikonov)。 - ワイドパートに lightweight delete mask がある場合の
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).
- 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 プロジェクションが使用されている場合に、
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)上の
SELECTクエリで、キーに対してINを使用する際に、サブクエリが異なる型を返す場合でも正しく処理できるようにしました。 #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 ビットファイルの inode を報告する一方で、statは 64 ビットの inode を報告していたためです。 #45339 (Yakov Olkhovskiy)。 - Distributed テーブルの起動時のレースコンディションを修正(async
INSERTのファイルが複数回処理される可能性があった問題)。 #45360 (Azat Khuzhin). ListObjectリクエストが失敗した場合に、ストレージS3およびテーブル関数s3から読み取る際にクラッシュが発生する可能性がある問題を修正しました。 #45371 (Anton Popov).- 不正な構造の辞書(例: 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).
- close #45297 空の正規表現に対するチェックを追加。#45428 (Han Fei).
- (特に分散クエリで発生しがちな)クエリのハングを修正。 #45448 (Azat Khuzhin).
ThreadPool::scheduleからの例外発生時に、allow_asynchronous_read_from_io_pool_for_merge_treeが有効な場合に発生し得たデッドロックを修正しました。 #45481 (Nikolai Kochetov).- DETACH 後にテーブルが使用中のままになる可能性があった問題を修正。 #45493 (Azat Khuzhin).
- クエリがキャンセルされ、その実行中に並列パースが行われている場合にまれに発生する異常終了を修正しました。 #45498 (Anton Popov).
- Distributed テーブルの作成とそのテーブルへの INSERT の間に発生する race(競合状態)を修正(テーブルへの INSERT 実行中に CANNOT_LINK が発生する可能性があった)。#45502 (Azat Khuzhin).
- キャッシュポリシーの getter に適切なデフォルト値(SLRU)を追加。 #45514 をクローズ。 #45524(Kseniia Sumarokova)。
- ミューテーションでの array join の使用を禁止します #42637 #44447 (SmitaRKulkarni)。
- エイリアス付きテーブル名およびカラムトランスフォーマーと組み合わせた修飾付きアスタリスクに関する不具合を修正。#44736 を解決。#44755(SmitaRKulkarni)。