目次
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 setting
clean_deleted_rowsは非推奨となり、現在は何の効果もありません。OPTIMIZEのCLEANUPキーワードはデフォルトでは許可されません (allow_experimental_replacing_merge_with_cleanupsetting で再び有効化できます) 。#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).- 新しい mutation コマンド
ALTER TABLE <table> APPLY DELETED MASKが追加されました。これにより、論理削除で書き込まれたマスクの適用を強制し、削除済みとしてマークされた行をディスクから削除できるようになります。#57433 (Anton Popov). - ハンドラー
/binaryを使うと、ClickHouse バイナリ内のシンボルを視覚的に確認できるビューアが開きます。#58211 (Alexey Milovidov) 。 - Sqids (https://sqids.org/) を生成する新しいSQL関数
sqidを追加しました。例:SELECT sqid(125, 126)。#57512 (Robert Schulze) 。 - FFT を使用して時系列の周期を検出する新しい関数
seriesPeriodDetectFFTを追加しました。#57574 (Bhavna Jindal) 。 - Keeper がトラフィックを受け付ける準備ができているかどうかを確認するための HTTP endpoint を追加しました。#55876 (Konstantin Bogdanov) 。
- スキーマ推論に ‘ユニオン’ モードを追加しました。このモードでは、生成されるテーブルのスキーマはすべてのファイルのスキーマのユニオンになります (つまり、各ファイルごとにスキーマが推論されます) 。スキーマ推論モードは、2 つの設定可能な値
defaultとunionを持つ設定schema_inference_modeで制御されます。#55428 をクローズしました。#55892 (Kruglov Pavel). - CSVフォーマットで文字列から数値を推論できるようにする新しい設定
input_format_csv_try_infer_numbers_from_stringsを追加しました。#56455 をクローズしました。#56859 (Kruglov Pavel). - データベースまたはテーブルの数が設定可能なしきい値を超えた場合、ユーザーに警告を表示します。 #57375 (凌涛).
HASHED_ARRAY(およびCOMPLEX_KEY_HASHED_ARRAY) レイアウトの Dictionary で、HASHEDと同様にSHARDSがサポートされるようになりました。#57544 (vdimir) 。- 主キーの合計バイト数およびメモリ内で割り当てられた主キーの合計バイト数に対する非同期メトリクスを追加しました。 #57551 (Bharat Nallan).
SHA512_256関数を追加。#57645 (Bharat Nallan).FORMAT_BYTESをformatReadableSizeのエイリアスとして追加しました。#57592 (Bharat Nallan) 。- オプションのセッショントークンを
s3テーブル関数に渡せるようになりました。#57850 (Shani Elharrar) 。 - 新しい設定
http_make_head_requestを導入しました。これをオフにすると、URLテーブルエンジンはファイルサイズを判定するための HEAD リクエストを実行しません。これは、非効率な HTTP サーバー、設定が不適切な HTTP サーバー、または 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). - S3 ディスクを読み取り専用として指定できる新しい設定
readonlyが追加されました。これは、基盤となる 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関数で、全文検索用の skipping indices を活用できるようになりました。#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はサーバーレベルに移されました。- 設定keep_alive_timeoutがサーバーレベル設定の一覧に追加されました。#57523 (Nikita Mikhaylov) 。 system.filesystem_cacheへのクエリがメモリを大量消費しないようにしました。#57687 (Kseniia Sumarokova).- 文字列のデシリアライゼーションにおけるメモリ使用量を削減。 #57787 (Maksim Kita).
- Enum の値が非常に多い場合に有効な、より効率的なコンストラクタです。 #57887 (Duc Canh Le) 。
- ファイルシステムキャッシュからの読み取りを改善: 常に
preadメソッドを使用するようにしました。 #57970 (Nikita Taranov). - 論理式オプティマイザでの AND notEquals 連鎖に対する最適化を追加しました。この最適化は、実験的なアナライザが有効な場合にのみ利用できます。 #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” により、分散送信がスタックする可能性がある問題を修正しました (ディスクから Batch を復旧する際) 。
system.distribution_queueのerror_countで発生する可能性がある問題を修正しました (distributed_directory_monitor_max_sleep_time_ms> 5min の場合) 。非同期 INSERT の失敗を追跡するための profile eventDistributedAsyncInsertionFailuresを導入しました。#57480 (Azat Khuzhin). MaterializedPostgreSQLで、PostgreSQL の生成カラムとカラムのデフォルト値をサポートしました (Experimental Feature) 。#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の設定を追加し、cache の更新を待機する時間を指定できるようにしました。設定async_block_ids_cache_min_update_interval_msは非推奨になりました。現在、cache は競合が発生した場合にのみ更新されます。#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 がブロックされているスレッドでも
system.stack_traceを正しくサポートするようになりました (このようなスレッドは、Apache rdkafka のような品質の低い外部ライブラリに存在することがあります) 。#57907 (Azat Khuzhin)。また、意味がない場合にstorage_system_stack_trace_pipe_read_timeout_msを待たずに済むよう、シグナルがブロックされていない場合にのみスレッドへシグナルを送るようになりました。#58136 (Azat Khuzhin)。 - クォーラム insert のチェック時に Keeper の障害を許容する。#57986 (Raúl Marín) 。
- system.asynchronous_metrics に最大/ピーク RSS (
MemoryResidentMax) を追加しました。 #58095 (Azat Khuzhin). - このPRにより、デフォルト以外のリージョンであっても、リージョンを明記せずに s3 スタイルのリンク (
https://およびs3://) を使用できるようになりました。また、ユーザーが誤ったリージョンを指定した場合は、正しいリージョンを判別します。#58148 (Yarik Briukhovetskyi) 。 clickhouse-format --obfuscateは、Settings、MergeTreeSettings、およびタイムゾーンを認識し、それらの名前をそのまま保持するようになりました。 #58179 (Alexey Milovidov).ZipArchiveWriterに明示的なfinalize()関数を追加しました。ZipArchiveWriterの複雑になりすぎていたコードを簡略化しました。これにより #58074 が修正されました。#58202 (Vitaly Baranov).- 同じパスを持つ cache は、同じ cache オブジェクトを使用するようになりました。この動作は以前から存在していましたが、23.4 で壊れていました。同じパスを持つそのような cache どうしで cache 設定の組み合わせが異なる場合は、許可されていないとして例外がスローされます。#58264 (Kseniia Sumarokova).
- 並列レプリカ (実験的機能) : わかりやすい設定 #57542 (Igor Nikonov).
- 並列レプリカ (実験的機能) : announcement応答処理の改善 #57749 (Igor Nikonov).
- 並列レプリカ (実験的機能) :
ParallelReplicasReadingCoordinatorがmin_number_of_marksをより適切に考慮するようにしました #57763 (Nikita Taranov). - 並列レプリカ (実験的機能) : 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テーブルにbase backup名を追加 #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の分割バケット戦略で、最初と最後のバケットには1つのポイントだけが含まれるように修正しました #57003 (FFish). - エラー発生後の同期時に
Templateフォーマットで発生する可能性があるデッドロックを修正 #57004 (Kruglov Pavel). - 多数のエラーをスキップしながらファイルをパースする際に、途中で早期終了してしまう問題を修正しました #57006 (Kruglov Pavel).
dictionarytable function を介した 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).
- 修正: pushing to view chain の構築時に、一時的なカラムを除外しないようにしました #57461 (Yakov Olkhovskiy).
- MaterializedPostgreSQL (実験的機能に関する問題) : #41922 を修正し、#41923 のテストを追加 #57515 (Kseniia Sumarokova) 。
- レプリケートされたアクセスエンティティの管理用GRANT/REVOKEクエリでは、ON CLUSTER句を無視するようにしました。 #57538 (MikhailBurdukov).
- clickhouse-local のクラッシュを修正 #57553 (Nikolay Degterinsky).
- Hash JOIN の不具合を修正しました。 #57564 (vdimir).
- PostgreSQL ソースで発生する可能性があるエラーを修正 #57567 (Kseniia Sumarokova).
- ネストされた LowCardinality に対する Hash JOIN の型補正処理を修正しました。#57614 (vdimir).
system.stack_traceからの並列読み取りを適切に禁止し、ハングを防止しました。#57641 (Azat Khuzhin).any(...) RESPECT NULLを使用したスパースカラムの集約におけるエラーを修正しました #57710 (Azat Khuzhin).- 単項演算子のパース処理を修正 #57713 (Nikolay Degterinsky).
- 実験的なテーブルエンジン
MaterializedPostgreSQLの依存関係の読み込みに関する不具合を修正しました。#57754 (Kseniia Sumarokova). - BACKUP/RESTORE ON CLUSTER における切断されたノードの再試行処理を修正 #57764 (Vitaly Baranov).
- 部分的にマテリアライズされたプロジェクションで、外部集約の結果が正しくならない問題を修正 #57790 (Anton Popov).
*Mapcombinator を使用した集約関数のマージを修正 #57795 (Anton Popov).- バグがあるため、
system.kafka_consumersを無効にしました。#57822 (Azat Khuzhin) 。 - Merge JOIN における LowCardinality キーのサポートを修正しました。#57827 (vdimir).
- サンプルブロックに関連する
InterpreterCreateQueryの不具合を修正。#57855 (Maksim Kita) 。 - PostgreSQL の named collections で
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).- 大きな整数値を持つスカラーサブクエリが存在する場合の並列レプリカ (実験的機能) の不具合を修正 #58118 (Alexey Milovidov) 。
- 範囲外の
DateTimeに対するaccurateCastOrNullの問題を修正 #58139 (Andrey Zvonov). - wide パーツのサブカラムを MergeTree で読み取る際に発生する可能性のある
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を複数改善しました。これらを集約関数として使用し、これらの修飾子付き集約関数の state を保存している場合、互換性が失われる可能性があります。#57189 (Raúl Marín)。 - 最適化
optimize_move_functions_out_of_anyを削除しました。#57190 (Raúl Marín)。 - 関数
parseDateTimeのフォーマッタ%l/%k/%cで、先頭にゼロのない時刻・月も parse できるようになりました。たとえば、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)。 - 型
Decimalの引数では、集約関数avgWeightedを使用できなくなりました。回避策: 引数をFloat64に変換してください。これにより #43928 はクローズされます。これにより #31768 はクローズされます。これにより #56435 はクローズされます。Decimal引数でこの関数を materialized view または projections 内で使用していた場合は、support@clickhouse.com に連絡してください。集約関数sumMapの error を修正した結果、速度が約 1.5〜2 倍遅くなりました。とはいえ、この関数はどうせ使いものにならないので問題ありません。これにより #54955 はクローズされます。これにより #53134 はクローズされます。これにより #55148 はクローズされます。関数groupArraySampleのバグも修正しました。1 つのクエリ内で複数の集約 state が生成される場合、同じ random seed を使っていました。#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 プロトコルで圧縮がサポートされました。これは、
zookeeperセクション内でuse_compressionフラグを使用することで、ClickHouse 側で有効にできます。なお、圧縮をサポートしているのは ClickHouse Keeper のみで、Apache ZooKeeper はサポートしていません。#49507 を解決しました。#54957 (SmitaRKulkarni). - 機能
storage_metadata_write_full_object_keyを導入しました。これをtrueに設定すると、メタデータファイルは新しいフォーマットで書き込まれます。このフォーマットでは、ClickHouse はリモートオブジェクトの完全なキーをメタデータファイルに格納するため、柔軟性が高まり、最適化もしやすくなります。#55566 (Sema Checherinda). - named collections のフィールドが上書きされないように保護するための新しい設定と構文を追加しました。これは、悪意のあるユーザーによるシークレットへの不正アクセスを防ぐことを目的としています。#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テーブル関数を追加しました。共有filesystem (NFS など) をuser_filesdirectory にマウントしている場合に便利です。#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 を experimental 扱いではなくし、
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 に引き上げました。これは、接続中のクライアントが非常に多く、それらによるデータの送受信が低速で、server が CPU による制約を受けていない場合や、CPU コア数が 100 を超える場合に適しています。また、同時実行制御をデフォルトで有効にし、クエリ処理スレッドの望ましい総数を CPU コア数の 2 倍に設定しました。これにより、同時実行クエリ数が非常に多いシナリオでパフォーマンスが向上します。#46927 (Alexey Milovidov).- ウィンドウ関数の並列評価をサポートしました。#34688 を修正しました。#39631 (Dmitry Novik) 。
Numberstable engine (system.numbersテーブルの) が、テーブルの索引のように条件を解析し、必要なデータの部分集合を生成できるようになりました。#50909 (JackyWoo) 。MergeテーブルエンジンにおけるIN (...)条件でのフィルタリング性能を改善しました。#54905 (Nikita Taranov) 。- ファイルシステムキャッシュが満杯で、大量の読み取りが発生する場合の改善。 #55158 (Kseniia Sumarokova).
- ファイルを余分に読み返すのを避けるため、S3 のチェックサムを無効にできるようにしました (これは設定
s3_disable_checksumで制御されます) 。#55559 (Azat Khuzhin). - 現在は、データが page cache にある場合、リモート table からも同期的に読み取るようになりました (ローカル table と同様です) 。こちらの方が高速で、thread pool 内での同期が不要になり、ローカル FS 上での
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).
- ProcessList へのアクセスを最適化し、多数のユーザーと高いクエリ同時実行数 (>2000 QPS) を伴うユースケースでのクエリ実行パフォーマンスを改善しました。#57106 (Andrej Hoos) 。
- array join の軽微な改善。中間結果の一部を再利用するようにしました。#57183 (李扬).
- スタックアンワインドが遅いことがありましたが、もう違います。 #57221 (Alexey Milovidov).
max_streams = 1の場合、外部ストレージからの読み取りにデフォルトの読み取りプールを使用するようになりました。これは、読み取りプリフェッチが有効な場合に効果的です。 #57334 (Nikita Taranov).- Keeper の改善: ログの前処理を遅らせることで、起動時のメモリ使用量を削減しました。 #55660 (Antonio Andelic).
FileおよびHDFSストレージにおける glob マッチングのパフォーマンスを改善しました。#56141 (Andrey Zvonov) 。- 実験的な全文索引のポスティングリストは圧縮されるようになり、サイズが 10~30% 縮小されました。#56226 (Harry Lee).
- backupsで
BackupEntriesCollectorを並列化しました。 #56312 (Kseniia Sumarokova).
改善
- 新しい
MergeTree設定add_implicit_sign_column_constraint_for_collapsing_engineを追加しました (デフォルトでは無効) 。有効にすると、CollapsingMergeTreeテーブルに暗黙的な CHECK 制約が追加され、Signカラムの値が -1 または 1 のみになるよう制限されます。#56701。#56986 (Kevin Mingtarja) 。 - 再起動なしでストレージ構成に新しいディスクを追加できるようにしました。#56367 (Duc Canh Le) 。
- 同じALTERクエリ内での索引の作成とマテリアライズをサポートし、同じクエリ内で “modify TTL” と “materialize TTL” もサポートしました。#55651 をクローズしました。#56331 (flynn).
fuzzJSONという名前の新しいテーブル関数を追加し、ソースの JSON 文字列にランダムな変化を加えたバージョンを含む行を返すようにしました。#56490 (Julia Kartseva) 。- Engine
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 formatファイルからデータを読み込む際、行末が\rで、その後に\nが続かない場合、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が続かなければなりません。しかし、上記のように\rが行末に単独で現れる異常な csv 入力データが存在する場合もあります。#54340 (KevinyhZou).- 新しいエンコーディングをサポートする release-13.0.0 に Arrow ライブラリを更新。 #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 protocol 経由で接続された場合に、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での非定数クエリ文字列の扱いを修正しました。あわせて、両関数にOrNullバリアントを追加し、クエリを解析できない場合は例外をスローする代わりに NULL を返すようにしました。 #56327 (Robert Schulze). - 内部テーブルが drop された materialized view でも、バックアップを失敗させずに作成できるようにしました。#56387 (Kseniia Sumarokova).
system.replicasへのクエリでは、特定のカラムを問い合わせると ZooKeeper へのリクエストが発生します。テーブル数が数千にのぼる場合、これらのリクエストが ZooKeeper にかなりの負荷をかける可能性があります。system.replicasへの同時実行クエリが複数あると、同じリクエストが何度も実行されてしまいます。この変更では、同時実行クエリからのリクエストを「重複排除」します。#56420 (Alexander Gololobov) 。- 外部データベースのクエリ時にMySQL互換クエリへ変換する処理を修正。 #56456 (flynn).
KeeperMapengine を使用するtableのバックアップと復元に対応しました。#56460 (Antonio Andelic) 。- CompleteMultipartUpload に対する 404 レスポンスは再確認が必要です。クライアントでタイムアウトやその他のネットワークエラーが発生しても、サーバー側では操作が完了している可能性があります。次に CompleteMultipartUpload を再試行すると、404 レスポンスを受け取ります。オブジェクトキーが存在する場合、その操作は成功と見なされます。 #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) は廃止されたものとしてマークされました。これは、設定query_cache_nondeterministic_function_handlingに置き換えられました。これは 3 値の enum で、query cache が非決定論的関数を含むクエリをどのように扱うかを制御します。選択肢は、a) 例外をスローする (デフォルトの動作) 、b) 非決定論的クエリの結果を無条件に保存する、または c) 無視する、つまり例外をスローせず、結果もキャッシュしない、の 3 つです。#56519 (Robert Schulze). - JOIN ON 句での
is nullチェックを含む等価条件の書き換え。実験的な アナライザのみ。#56538 (vdimir). - 関数
concatが、任意の型の引数 (従来の String および FixedString 引数のみではなく) をサポートするようになりました。これにより、MySQL のconcatの実装により近い挙動になります。たとえば、SELECT concat('ab', 42)はab42を返すようになりました。#56540 (Serge Klochkov). - config の ‘named_collection’ セクション、または SQL で作成した named collections から cache 設定を取得できるようにしました。#56541 (Kseniia Sumarokova).
- PostgreSQL データベースエンジン: PostgreSQL への接続に失敗した場合に、古いテーブルの削除が過度に行われないようにしました。 #56609 (jsc0218).
- URL が正しくない場合、PG への接続に時間がかかりすぎ、関連するクエリがそこでハングしてキャンセルされてしまっていました。 #56648 (jsc0218).
- Keeper の改善: Keeper ではデフォルトで圧縮ログを無効化。#56763 (Antonio Andelic) 。
- 設定項目
wait_dictionaries_load_at_startupを追加しました。 #56782 (Vitaly Baranov) 。 - 以前の ClickHouse バージョンには、潜在的な脆弱性がありました。ユーザーが接続し、“interserver secret” 方式での認証に失敗した場合、サーバーは接続を直ちに終了せず、代わりにクライアントから送られてくる残りのパケットを受信し続けたうえで無視していました。これらのパケットは無視されるものの、依然としてパースは行われるため、別の既知の脆弱性がある圧縮方式を使用していた場合、認証なしでその脆弱性を悪用できてしまいます。この問題は、https://twitter.com/malacupa により ClickHouse Bug Bounty Program を通じて報告されました。#56794 (Alexey Milovidov).
- パートがリモートのレプリカで完全にコミットされるまで、そのパートの取得は待機します。PreActive 状態のパートは送信しないほうが望ましいです。zero copy の場合、これは必須の制約です。#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 をスキャンする際に engine でフィルタリングできるようになり、不要な (時間がかかる可能性のある) 接続を回避。 #56813 (jsc0218).
- RocksDB ストレージのシステムテーブルに
total_bytesとtotal_rowsを表示するようになりました。#56816 (Aleksandr Musorin). - TEMPORARY テーブルに対する ALTER で、基本的なコマンドを使用できるようになりました。#56892 (Sergey) 。
- LZ4圧縮。まれに out バッファの容量が不足し、圧縮済みブロックを out のバッファに直接書き込めない場合に備えて、圧縮済みブロックをバッファリングするようにしました。#56938 (Sema Checherinda).
- キューに入っているジョブ数のメトリクスを追加しました。これは IO thread pool で役立ちます。 #56958 (Alexey Milovidov).
- 設定ファイルに PostgreSQL table engine 用の設定を追加しました。あわせて、この設定のチェックを追加し、関連ドキュメントも追記しました。 #56959 (Peignon Melvyn).
- 関数
concatは、たとえばSELECT concat('abc')のように、単一の引数でも呼び出せるようになりました。これにより、MySQL の concat 実装との動作の一貫性が向上します。#57000 (Serge Klochkov). - AWS S3 のドキュメントで定められているとおり、すべての
x-amz-*ヘッダーに署名します。 #57001 (Arthur Passos). - 関数
fromDaysSinceYearZero(alias:FROM_DAYS) は、符号なし整数型および符号付き整数型でも使用できるようになりました (従来は符号なし整数型である必要がありました) 。これにより、Tableau Online などの3rd partyツールとの互換性が向上します。#57002 (Serge Klochkov) 。 - デフォルト設定に
system.s3queue_logを追加。 #57036 (Kseniia Sumarokova). wait_dictionaries_load_at_startupのデフォルト値を true に変更し、この設定はdictionaries_lazy_loadが false の場合にのみ使用するようにしました。#57133 (Vitaly Baranov).- 作成時に、
dictionaries_lazy_loadが有効でも Dictionary ソースの型をチェックするようにしました。#57134 (Vitaly Baranov) 。 - プランレベルの最適化を、個別に有効/無効にできるようになりました。以前は、すべてをまとめて無効にすることしかできませんでした。従来この役割を担っていた設定 (
query_plan_enable_optimizations) は引き続き残されており、今でもすべての最適化を無効にするために使用できます。#57152 (Robert Schulze). - サーバーの終了コードは、例外コードに対応します。たとえば、メモリ制限のためにサーバーが起動できない場合は、241 = MEMORY_LIMIT_EXCEEDED で終了します。以前のバージョンでは、例外時の終了コードは常に 70 = Poco::Util::ExitCode::EXIT_SOFTWARE でした。 #57153 (Alexey Milovidov).
functionalC++ header 由来のスタックフレームは、デマングルおよびシンボル化しないようにしました。 #57201 (Mike Kot).- HTTP server の
/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 path にフォールバックして処理するように変更しました。#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 format のパースのような本質的でない用途にしか使っていないにもかかわらず、ビルド cache に関係なく毎回再ビルドされていました。これを修正しました。#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。直前のカバレッジリセット以降にコード内で検出された一意のアドレスの Array を返します。(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).
バグ修正 (正式な安定版リリースにおけるユーザーに影響する不具合)
- 実験的なアナライザを修正しました。挿入先テーブルを参照するサブクエリを含む SELECT からの挿入で、挿入ブロックのみが処理されるようにしました。 #50857 (Yakov Olkhovskiy).
str_to_map関数の不具合を修正しました。#56423 (Arthur Passos) 。- Keeper
reconfig: リーダー権の譲渡/取得前にタイムアウトを追加 #53481 (Mike Kot). - Grace Hash Join と filter pushdown の誤ったヘッダーを修正 #53922 (vdimir).
- テーブル関数に基づくテーブルの場合に、システムテーブルから選択できるようにしました。 #55540 (MikhailBurdukov).
- RFC: LIMIT BY を使用する Distributed クエリでの「ソースストリームにカラム X が見つからない」を修正 #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 のシグナルハンドラーで発生する segfault を修正 #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 の初期化時に発生する segfault を修正しました #56401 (Nikolay Degterinsky).
- T64 のバッファオーバーフローを修正 #56434 (Alexey Milovidov).
- FINAL における Nullable 主キーの不具合を修正 (2) #56452 (Amos Bird).
- 初期ノードでデータベース未指定の ON CLUSTER クエリを修正 #56484 (Nikolay Degterinsky).
- 有効期限 (TTL) への依存関係による起動失敗を修正 #56489 (Nikolay Degterinsky).
- ON CLUSTER での ALTER COMMENT クエリを修正 #56491 (Nikolay Degterinsky).
- ALIAS を伴う ALTER COLUMN の修正 #56493 (Nikolay Degterinsky).
- 空のNAMED COLLECTIONを修正 #56494 (Nikolay Degterinsky).
- projection の解析における 2 件の不具合を修正しました。#56502 (Amos Bird) 。
- query cache における別名の処理を修正 #56545 (Robert Schulze).
Nullable(Enum)からNullable(String)への変換の問題を修正 #56644 (Nikolay Degterinsky).- Keeper のログ処理の信頼性向上 #56670 (Antonio Andelic) 。
- substitution 属性を持つノードの configuration マージを修正 #56694 (Konstantin Bogdanov) 。
- table function input() の重複利用の問題を修正しました。#56695 (Nikolai Kochetov) 。
- 修正: RabbitMQ OpenSSL の動的ロードに関する問題 #56703 (Igor Nikonov).
- データにゼロが含まれている場合に GCD codec でクラッシュする不具合を修正 #56704 (Nikita Mikhaylov).
- insert into function 実行時に clickhouse-local で発生する ‘mutex lock failed: Invalid argument’ を修正 #56710 (Kruglov Pavel).
- optimistic path における Date テキストのパースを修正 #56765 (Kruglov Pavel).
- FPC codec でのクラッシュを修正 #56795 (Alexey Milovidov).
- DatabaseReplicated: レプリカの復旧後のDDLクエリのタイムアウトを修正 #56796 (Alexander Tokmakov).
- MySQLバイナリプロトコルでNullable カラムが誤って報告される問題を修正 #56799 (Serge Klochkov).
- metastoreテーブルでIcebergメタデータファイルをサポートするようにしました #56810 (Kruglov Pavel).
- transform に関する TSAN レポートを修正 #56817 (Raúl Marín).
- SET クエリと SETTINGS の書式を修正 #56825 (Nikolay Degterinsky).
- joinGet において、table の依存関係が原因で起動に失敗する不具合を修正 #56828 (Nikolay Degterinsky).
- ADD COLUMN 時に既存の Nested カラムがフラット化される問題を修正 #56830 (Nikolay Degterinsky).
- CSVの行末にあるCRを許可するよう修正 #56901 (KevinyhZou).
- 無効な入力時の
tryBase64Decodeを修正 #56913 (Robert Schulze). - CapnProto/Protobuf スキーマで深くネストされたカラムが生成される問題を修正 #56941 (Kruglov Pavel).
- プロジェクションのカラムに対する互換性のない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 codecのバッファオーバーフローを修正 #57107 (Nikolay Degterinsky).
- 認証前に例外が発生した場合は、サーバー間の接続を閉じる #57142 (Antonio Andelic).
- Nullable MATERIALIZED カラムを含む ALTER UPDATE 後のセグメンテーション違反を修正 #57147 (Nikolay Degterinsky).
- 部分的にマテリアライズされた通常のプロジェクションにおける、誤ったJOINプラン最適化を修正 #57196 (Amos Bird).
- カラム定義の比較時にコメントを無視する #57259 (Antonio Andelic).
- あらゆるケースでの
ReadonlyReplicaメトリクスの不具合を修正 #57267 (Antonio Andelic). - バックグラウンドマージで、cache 内の一時データストレージが正しく使用されるようになりました #57275 (vdimir).
- Keeper の changelog と snapshots に関する修正 #57299 (Antonio Andelic).
- hostname が変更された場合、完了済みの ON CLUSTER タスクを無視する #57339 (Alexander Tokmakov).
- MergeTree ミューテーションで、ソースパートの索引粒度を再利用 #57352 (Maksim Kita).
- FS cache: バックグラウンドでのダウンロードに上限を追加 #57424 (Kseniia Sumarokova).
ClickHouse リリース 23.10、2023-11-02。 プレゼンテーション, ビデオ
後方互換性を持たない変更
- 破損したデータパーツを自動的に削除するオプションはなくなりました。これにより #55174 がクローズされます。#55184 (Alexey Milovidov)。#55557 (Jihyuk Bok)。
- 廃止されたインメモリのデータパーツは、write-ahead log から読み取れなくなりました。以前にインメモリパーツを設定していた場合は、アップグレード前に削除する必要があります。#55186 (Alexey Milovidov)。
- Meilisearch とのインテグレーションを削除しました。理由: 古い 0.18 バージョンでしか互換性がなかったためです。最近の Meilisearch ではプロトコルが変更され、現在は動作しなくなっています。注: これを復活させるためのご協力をいただけると幸いです。#55189 (Alexey Milovidov)。
- directory monitor という概念を background INSERT に改称しました。
*directory_monitor*を含むすべての設定名はdistributed_background_insert*に変更されました。後方互換性は維持されます (古い設定は alias として追加されているため) 。#55978 (Azat Khuzhin)。 - クライアント側で設定された
send_timeoutをサーバー側のreceive_timeoutとして解釈したり、その逆を行ったりすることはなくなりました。#56035 (Azat Khuzhin)。 - 単位の異なる時間インターバルを比較すると、例外をスローするようになりました。これにより #55942 がクローズされます。従来は、単位に関係なく内部の数値だけを比較する挙動に、意図せず依存していた場合があるかもしれません。#56090 (Alexey Milovidov)。
- 実験的な
S3Queuetable engine を全面的に書き直しました。zookeeper 内で情報を保持する方法を変更し、zookeeper へのリクエスト数を削減しました。また、状態が変わらないことが分かっている場合に zookeeper の状態をキャッシュするようにし、S3 からのポーリング処理を改善して過度に積極的にならないようにしました。さらに、追跡対象ファイルの ttl と max の管理方法を変更し、これをバックグラウンドプロセスにしました。system.s3queueおよびsystem.s3queue_logテーブルを追加しました。#54998 をクローズします。#54422 (Kseniia Sumarokova)。 - HTTP endpoint 上の任意の path は、
/queryendpoint へのリクエストとして解釈されなくなりました。#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という新しい設定が追加されました。これはプロジェクション名を引数に取ります。値が空でない文字列に設定されている場合、ClickHouse はこのプロジェクションがそのクエリ内で少なくとも 1 回使用されていることを確認します。#55331 をクローズしました。#56134 (Yarik Briukhovetskyi).- ネイティブプロトコル経由の外部データを使用した非同期挿入をサポートしました。以前は、データがクエリ内にインラインで埋め込まれている場合にのみ機能していました。 #54730 (Anton Popov).
- 可視化向けにデータをダウンサンプリングする Largest-Triangle-Three-Buckets アルゴリズムを使用する集約関数
lttbを追加しました。#53145 (Sinan) 。 - クエリ
CHECK TABLEのパフォーマンスと使いやすさが向上しました (進行状況の更新を送信し、キャンセル可能) 。CHECK TABLE ... PART 'part_name'による特定の part を対象としたチェックに対応しました。#53404 (vdimir). - 関数
jsonMergePatchを追加しました。JSON データを文字列として扱う場合、これらの文字列 (JSON オブジェクト) をマージして、単一の JSON オブジェクトを含む 1 つの文字列にまとめることができます。#54364 (Memo). - Kusto Query Language dialect サポートの第2弾。Phase 1 implementation がマージされました。#42510 (larryluogit) 。
- 新しい SQL 関数
arrayRandomSample(arr, k)が追加されました。これは、入力配列から k 個の要素をサンプルとして返します。同様の機能は以前も利用できましたが、たとえば “SELECT arrayReduce(‘groupArraySample(3)’, range(10))” のような、より扱いにくい構文を使う必要がありました。#54391 (itayisraelov). - 最小値/最大値の値に対してのみ集約できる
-ArgMin/-ArgMax集約コンビネーターを導入しました。ユースケースの1つは #54818 にあります。このPRでは、コンビネーターも専用のフォルダーに再編成しました。#54947 (Amos Bird). SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf]により、Protobufフォーマットのcacheを削除できるようになりました。#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 commandを追加しました。 #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).
std::unordered_mapをabsl::flat_hash_mapに置き換えることで、転置索引の作成パフォーマンスが 30% 向上しました。#55210 (Harry Lee) 。- ORC のフィルタープッシュダウン (rowgroup レベル) をサポート。 #55330 (李扬).
- 一時ファイルが多数ある場合の外部集約のパフォーマンスを改善しました。 #55489 (Maksim Kita).
- marks の繰り返しの読み込みを避けるため、デフォルトでセカンダリ索引用の marks cache に適切なサイズを設定するようにしました。 #55654 (Alexey Milovidov) 。
- スキップ索引の読み取り時に、インデックスグラニュールの不要な再構築を回避するようにしました。これにより、#55653 に対処しています。 #55683 (Amos Bird).
- 実行時に set 内の CAST 関数をキャッシュすることで、set の要素型がカラム型と完全に一致しない場合の関数
INのパフォーマンスを向上させました。#55712 (Duc Canh Le) 。 ColumnVector::insertManyとColumnVector::insertManyFromのパフォーマンスが向上しました。 #55714 (frinkr).- 次の行のキー位置を予測して比較回数を減らすことで、Map の添字演算を最適化しました。 #55929 (lgbo).
- Parquet での struct のフィールドプルーニングをサポートしました (以前のバージョンでは、一部のケースで動作していませんでした) 。 #56117 (lgbo).
- 読み取る行数の推定値に基づいて、クエリ実行時に使用する並列レプリカ数を調整できるようにしました。#51692 (Raúl Marín) 。
- 多数の一時ファイルが生成される場合の外部集約のメモリ使用量を最適化しました。#54798 (Nikita Taranov) 。
async_socket_for_remoteモード (デフォルト) で実行される分散クエリで、max_threadsの制限が適用されるようになりました。従来は、一部のクエリが過剰な数のスレッド (最大max_distributed_connections) を作成し、サーバーのパフォーマンス低下を引き起こすことがありました。 #53504 (filimonov).- ZooKeeper の分散DDLキューから DDL を実行する際に、スキップ可能なエントリをキャッシュするようにしました。#54828 (Duc Canh Le) 。
- 実験的な転置索引では、一致件数が多すぎるトークン (つまり、ポスティングリスト内の行IDが多すぎるもの) は保存されません。これにより、容量を節約できるほか、シーケンシャルスキャンのほうが同等以上に高速な場合に、効果の薄い索引ルックアップを避けられます。トークンを保存しない条件を制御していた従来のヒューリスティクス (索引定義に渡される
densityパラメータ) は、ユーザーにとって分かりにくすぎました。そこで、max_rows_per_postings_listパラメータ (デフォルト: 64k) に基づく、はるかにシンプルなヒューリスティクスが導入され、ポスティングリスト内で許容される行IDの最大数を直接制御できるようになりました。#55616 (Harry Lee). EmbeddedRocksDBテーブルへの書き込みパフォーマンスを改善しました。#55732 (Duc Canh Le) 。- パーティション内に多数のパーツ (1000 個超) がある場合の ClickHouse の全体的な耐障害性が向上しました。これにより、
TOO_MANY_PARTSエラーの発生数が減る可能性があります。#55526 (Nikita Mikhaylov). - 階層辞書の読み込み時のメモリ使用量を低減しました。#55838 (Nikita Taranov).
- すべてのDictionaryで、
dictionary_use_async_executorの設定に対応しました。 #55839 (vdimir) 。 - AggregateFunctionTopKGenericData のデシリアライズ時に、過剰なメモリ使用を防止しました。 #55947 (Raúl Marín).
- 多数のウォッチがある Keeper では、
DB::KeeperStorage::getSessionsWithWatchesCount内で、AsyncMetrics スレッドがかなりの時間にわたって CPU を 100% 使用することがあります。この修正では、負荷の高いwatchesおよびlist_watchesの Set を走査しないようにしました。#56054 (Alexander Gololobov). - ストレージ EmbeddedRocksDB で
countの概算を使用するための設定optimize_trivial_approximate_count_queryを追加しました。StorageJoin で trivial count を有効化しました。#55806 (Duc Canh Le).
改善
- 関数
toDayOfWeek(MySQL の alias: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 で processor ID をより見やすく出力するようにしました。#48852 (Vlad Seliverstov) 。
- lifetime フィールドを含む direct dictionary を作成しようとすると、作成時に拒否されるようになりました (lifetime は direct dictionary では意味を持たないためです) 。修正: #27861。#49043 (Rory Crispin).
ALTER TABLE t DROP PARTITIONのようにパーティションを扱うクエリで、パラメータを使用できるようになりました。#49449 をクローズしました。#49516 (Nikolay Degterinsky).system.zookeeper_connectionに新しいカラムxidを追加しました。#50702 (helifu).- 設定の再読み込み後、
system.server_settingsに正しいサーバー設定が表示されるようになりました。#53774 (helifu). -と同様に、クエリで数学のマイナス記号−もサポートしました。#54100 (Alexey Milovidov) 。- 実験的な
Replicatedデータベースエンジンにレプリカグループを追加しました。#53620 をクローズしました。#54421 (Nikolay Degterinsky)。 - 再試行可能なS3エラーでは、クエリを完全に失敗させるより再試行するほうがよい。デフォルトの s3_retry_attempts に、より大きな値を設定。 #54770 (Sema Checherinda).
- ロードバランシングモード
hostname_levenshtein_distanceを追加しました。 #54826 (JackyWoo) 。 - ログ内のシークレットの秘匿を改善しました。#55089 (Vitaly Baranov) 。
- 当面、プロジェクション解析はクエリプランに対してのみ実行されます。設定
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_include_virtual_columnsを追加しました。これにより、テーブルの仮想カラムをDESCRIBEクエリの結果に含められるようになりました。設定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).
TABLEキーワードなしのRENAME TABLE構文 (RENAME db.t1 to db.t2など) をサポートしました。#55373 (凌涛).system.clustersにinternal_replicationを追加。 #55377 (Konstantin Morozov).- リクエストのプロトコルに基づいてリモートプロキシリゾルバを選択するようにし、プロキシ機能のドキュメントを追加して、
DB::ProxyConfiguration::Protocol::ANYを削除しました。 #55430 (Arthur Passos). - テーブルのシャットダウン後は、INSERT 時の Keeper 操作を再試行しないようにしました。 #55519 (Azat Khuzhin).
SHOW COLUMNSは、設定use_mysql_types_in_show_columnsが有効な場合に、型FixedStringをBLOBとして正しく報告するようになりました。さらに、型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 serverは予期しないパーツのセット (ローカルには存在するが、ZooKeeperには存在しない) をチェックします。予期しないパーツはすべてdetachedディレクトリに移動され、その代わりにserverはそれらをカバーする祖先パーツの復元を試みます。現在は、ランダムなカバー済みパーツではなく、最も近い祖先パーツを復元するようになりました。#55645 (alesapin).
- 高度なダッシュボードで、タッチデバイス上のチャートをドラッグできるようになりました。これにより、#54206 が解決されました。#55649 (Alexey Milovidov)。
http_write_exception_in_output_formatで例外を出力する際、デフォルトのクエリフォーマットが指定されていれば、それを使用するようにしました。#55739 (Raúl Marín) 。- 一般的なMATERIALIZED VIEWの落とし穴に関するメッセージを改善。#55826 (Raúl Marín) 。
- 現在のデータベースを削除した場合でも、
clickhouse-localでは引き続き一部のクエリを実行したり、別のデータベースに切り替えたりできます。これにより、clickhouse-clientと動作が統一されます。これにより #55834 がクローズされます。#55853 (Alexey Milovidov). - 関数
(add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond)が、文字列で表現された日付引数をサポートするようになりました。たとえば、SELECT addDays('2023-10-22', 1)のように指定できます。これにより MySQL との互換性が向上し、Tableau Online で必要とされる機能に対応しています。#55869 (Robert Schulze). - 設定
apply_deleted_maskを無効にすると、論理削除の DELETE クエリによって削除済みとしてマークされた行を読み取れるようになります。これはデバッグに役立ちます。 #55952 (Alexander Gololobov) 。 - Tuple を JSONオブジェクトにシリアライズする際に
null値をスキップできるようになり、Spark のto_json関数との互換性を維持できるようになりました。これは gluten にとっても有用です。#55956 (李扬). - 関数
(add|sub)Dateが、文字列で表現された日付引数をサポートするようになりました。たとえばSELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE)のように使用できます。文字列で表現された日付引数に対する同様のサポートが、加算および減算の演算子にも追加されました。たとえばSELECT '2023-10-23' + INTERVAL 1 DAYのように使用できます。これにより MySQL との互換性が向上し、Tableau Online で必要とされる機能にも対応します。#55960 (Robert Schulze). - CSVフォーマットで、CR (
\r) を含む引用符なしの文字列を許可しました。#39930 をクローズしました。#56046 (Kruglov Pavel). - 組み込み設定を使用して
clickhouse-keeperを実行できるようにしました。#56086 (Maksim Kita) 。 - Kafka でのデータフェッチ開始時の問題を回避するため、
queued.min.messagesの設定値の最大値に上限を設けました。#56121 (Stas Morozov). - SQL関数
minSampleSizeContinousの誤字を修正し、minSampleSizeContinuousに改名しました。後方互換性のため、古い名前は引き続き使用できます。これにより #56139 をクローズしました。 #56143 (Dorota Szeremeta) 。 - サーバーをシャットダウンする前に、ディスク上の破損したパーツのパスを出力するようになりました。この変更以前は、ディスク上のパーツが破損していてサーバーが起動できない場合、どのパーツが壊れているのかを特定することはほぼ不可能でした。この問題は修正されました。 #56181 (Duc Canh Le).
ビルド/テスト/パッケージングの改善
- Docker 内のデータベースがすでに初期化済みであれば、その後の起動時に再度初期化する必要はありません。これにより、データベースを 1000 回試行しても読み込めない場合にコンテナーが無限に再起動する問題を修正できる可能性があります (非常に大規模なデータベースやマルチノード構成で該当) 。 #50724 (Alexander Nikolaev).
- サブモジュールを含むソースコード一式を、Darwin 用の特別なビルドタスクでビルドするようになりました。これにより、サブモジュールをチェックアウトせずに ClickHouse をビルドできます。 #51435 (Ilya Yatsishin).
- AVX 命令セットをグローバルに有効にして ClickHouse をビルドすると (これは推奨されません) 、エラーが発生していました。原因は、snappy が
SNAPPY_HAVE_X86_CRC32を有効にしていないことです。 #55049 (monchickey). clickhouse-serverパッケージから単体のclickhouse-keeperを起動する際の問題を修正しました。 #55226 (Mikhail f. Shiryaev).- テストで使用する RabbitMQ のバージョンを 3.12.6 に更新しました。RabbitMQ テストのログ収集も改善しました。 #55424 (Ilya Yatsishin).
- 機能テストを修正するため、openssl と boringssl のエラーメッセージの差異を修正しました。 #55975 (MeenaRenganathan22).
- apache datasketches で upstream リポジトリを使用するようにしました。 #55787 (Nikita Taranov).
バグ修正 (正式な安定版リリースにおけるユーザーに影響する不具合)
- 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なしで作成された分散テーブルのカラムに対するDEFAULTの検出を修正 #55060 (Vitaly Baranov).- ShellCommandSource の ctor で例外が発生した場合の適切なクリーンアップ処理 #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 cache におけるバックグラウンドダウンロードの不具合を修正 #55252 (Kseniia Sumarokova).
- バッファのファイナライズが行われない場合に圧縮器で発生する可能性のあるメモリリークを防止しました #55262 (Azat Khuzhin).
- スパースカラムでの関数実行を修正 #55275 (Azat Khuzhin).
- SummingMergeTree に対する SELECT FINAL での Nested の誤ったマージを修正 #55276 (Azat Khuzhin).
- S3上のReplicatedMergeTreeで、ゼロコピーを使わない場合にデタッチされたパーティションをドロップできない不具合を修正 #55309 (alesapin).
- MergeSortingPartialResultTransform で発生するクラッシュを修正 (
remerge後に chunk が 0 個になることが原因) #55335 (Azat Khuzhin). - 共有例外の送出によって発生する CreatingSetsTransform のデータ競合 (エラー時) を修正 #55338 (Azat Khuzhin) 。
- 問題のある最適化を (ある程度まで) 修正 #55353 (Alexey Milovidov).
- StorageHDFS のリークを修正 #55370 (Azat Khuzhin).
- CAST演算子でのArrayのパースを修正 #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).
- 誤ったDecimalのソートを防ぐためのテストを追加 #55662 (Amos Bird).
- globs を含まない 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 に stateful 関数が含まれる場合、predicate pushdown を無効化しました #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でスキーマレジストリからスキーマを取得する際の不具合を修正 #55991 (Kruglov Pavel).
- Bufferテーブルでの ALTER と INSERT の同時実行時に発生する ‘Block structure mismatch’ を修正 #55995 (Michael Kolupaev).
- least_used JBODポリシーにおける空き容量の計算誤りを修正 #56030 (Azat Khuzhin).
- テーブル関数内のサブクエリ評価時にscalarが欠落する問題を修正 #56057 (Amos Bird).
- http_write_exception_in_output_format=1 のときにクエリ結果が誤る問題を修正しました #56135 (Kruglov Pavel).
- 設定変更時のフォールバック JSON->JSONEachRow におけるスキーマ cache を修正 #56172 (Kruglov Pavel) 。
- odbc-bridge にエラーハンドラーを追加 #56185 (Yakov Olkhovskiy).
ClickHouse リリース 23.9 (2023-09-28) 。プレゼンテーション、ビデオ
後方互換性を持たない変更
- デフォルトの Prometheus ハンドラーから、
status_info設定オプションと dictionaries status を削除しました。#54090 (Alexey Milovidov). - 実験的なパーツのメタデータキャッシュはコードベースから削除されました。#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 type を使わなくても JSON object から named Tuple を推論できるようになりました。従来は、実験的な JSON type を有効にしない場合、JSON object は Strings または Maps としてしか推論できませんでしたが、現在は named Tuple としても推論できます。推論された Tuple type には、スキーマ推論時のデータサンプルで読み取られた object のすべてのキーが含まれます。これは、スパースな object を含まない構造化 JSON データを読み取る場合に役立ちます。この設定はデフォルトで有効です。2) 設定input_format_json_read_arrays_as_stringsにより、JSON array を String type のカラムにパースできるようになりました。これは、異なる type の値を含む配列を読み取るのに役立ちます。3) 設定input_format_json_infer_incomplete_types_as_stringsにより、サンプルデータ内で type が不明な JSON のキー (null/[]/{}) に対して String type を使用できるようになりました。これにより、JSON フォーマットでは任意の値を String カラムに読み込めるようになり、不明な type に String type を使用することで、スキーマ推論中に発生するエラーCannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Mapsを回避して、データを正常に読み取れるようになります。 #54427 (Kruglov Pavel). - リモートディスクの IO スケジューリングのサポートが追加されました。ディスクタイプ
s3、s3_plain、hdfs、azure_blob_storageのストレージ構成に、リソース名を保持するread_resource要素とwrite_resource要素を含められるようになりました。これらのリソースのスケジューリングポリシーは、別のサーバー構成セクションresourcesで設定できます。クエリには設定workloadでマークを付けることができ、さらにサーバー構成セクションworkload_classifiersで分類することで、さまざまなリソーススケジューリングの目的を実現できます。詳細はドキュメントを参照してください。#47009 (Sergei Trifonov)。“bandwidth_limit” IO スケジューリングノードタイプが追加されました。これにより、このノードを通過するトラフィックに対してmax_speedとmax_burstの制約を指定できます。#54618 (Sergei Trifonov)。 - SSH鍵を使用する新しい認証方式が追加されました。これはネイティブTCPプロトコルでのみ動作します。#41109 (George Gamezardashvili) 。
- MergeTree テーブルに新しいカラム
_block_numberを追加しました。#44532。#47532 (SmitaRKulkarni) 。 DROP TABLEクエリにIF EMPTY句を追加しました。#48915 (Pavel Novitskiy) 。- SQL関数
toString(datetime, timezone)とformatDateTime(datetime, format, timezone)が、非定数のタイムゾーン引数に対応しました。#53680 (Yarik Briukhovetskyi) 。 ALTER TABLE MODIFY COMMENTのサポートを追加しました。注: かなり前に外部コントリビューターがこれに類似したものを追加していましたが、この機能はまったく動作せず、ユーザーを混乱させるだけでした。これにより #36377 をクローズします。#51304 (Alexey Milovidov)。注: このコマンドはレプリカ間で伝播しないため、あるテーブルのレプリカごとに異なるコメントを持つ可能性があります。- 新しいデータ圧縮コーデックとして、
GCD(別名 “最大公約数”) が追加されました。このコーデックは、すべてのカラム値の GCD を計算し、その後、各値をその GCD で割ります。GCD コーデックはデータ準備コーデック (Delta や DoubleDelta と同様) であり、単独では使用できません。整数、10 進数、日付/時刻型のデータで利用できます。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) 。 peak_threads_usageを query_log テーブルに追加しました。#54335 (Alexey Gerasimchuck) 。- clickhouse-client で
SHOW FUNCTIONSをサポートしました。#54337 (Julia Kartseva) 。 - MySQL との互換性のため、
0001-01-01からの経過日数 (プロレプティック・グレゴリオ暦) を返す、別名TO_DAYSを持つ関数toDaysSinceYearZeroが追加されました。#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). - Tuple/Maps/Arrays のような深くネストした型を見やすい形式で表示するための新しい設定
print_pretty_type_namesを追加しました。#55095 (Kruglov Pavel) 。
パフォーマンス改善
- デフォルトでプリフェッチを有効にし、S3 からの読み取りを高速化しました。#53709 (Alexey Milovidov) 。
- FINAL を伴うクエリで不要な場合、単独のパーツ内の PK および version カラムを暗黙的に読み込まないようにしました。#53919 (Duc Canh Le).
- 定数キーによる group by を最適化しました。https://github.com/ClickHouse/ClickHouse/pull/53529 以降、
_file/_pathで group by するクエリも最適化されます。#53549 (Kruglov Pavel). Decimalカラムのソート性能を改善。ORDER BY にDecimalカラムが含まれる場合のMergeTreeへの挿入性能を改善。データがすでにソート済み、またはほぼソート済みの場合のソート性能を改善。#35961 (Maksim Kita).- 大規模なクエリ解析におけるパフォーマンスを改善しました。#51224 を修正しました。#51469 (frinkr).
- GROUP BY を含むサブクエリから選択される場合に、
COUNT(DISTINCT ...)や各種uniq系関数をcountに書き換える最適化。 #52082 #52645 (JackyWoo). mmap/mremap/munmapの手動呼び出しを削除し、これらの処理をすべてjemallocに委ねるようにしました。これにより、パフォーマンスがわずかに向上します。#52792 (Nikita Taranov) 。- NATS 使用時の CPU 消費量の増大を修正しました。 #54399 (Vasilev Pyotr).
toStringの datetime 引数の実行には別個の処理を使っているため、datetime 以外の引数ではパフォーマンスを少し改善でき、コードの一部もよりすっきりさせられます。#53680 のフォローアップです。#54443 (Yarik Briukhovetskyi).- json 要素を
std::stringstreamにシリアライズする代わりに、この PR ではシリアライズ結果を直接ColumnStringに格納するようにしています。#54613 (lgbo) 。 - テーブルがビュー経由で参照されている場合でも、MergeTree テーブルから対応する順序でデータを読み取るための ORDER BY 最適化を有効にしました。 #54628 (Vitaly Baranov).
GeneratorJSONPathの再利用と複数の共有ポインタの削除により、JSON SQL 関数を改善しました。#54735 (lgbo).- Keeper は、パフォーマンス向上のために flush リクエストをバッチ処理しようとします。#53049 (Antonio Andelic) 。
clickhouse-clientは、INFILE 'glob_expression'使用時にファイルを並列処理するようになりました。#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) 。 - OOM の可能性を避けるため、array join で
max_block_sizeを考慮するようにしました。#54290 をクローズしました。#54664 (李扬). s3テーブル関数で HTTP 接続の再利用に対応しました。#54812 (Michael Kolupaev) 。MergeTreeRangeReader::Stream::ceilRowsToCompleteGranulesの線形探索を二分探索に置き換えました。#54869 (usurai).
実験的機能
Annoy索引の作成を、設定max_threads_for_annoy_index_creationを使用して並列化できるようになりました。 #54047 (Robert Schulze).- Distributed 上の並列レプリカでは、すべてのレプリカから読み取ることはありません。 #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 インターフェイスに、ごく最小限のプリペアドステートメント実装が追加されました。これは、Tableau Online から MySQL コネクタ経由で ClickHouse に接続できるようにするために必要最低限の実装です。#54115 (Serge Klochkov). ご注意ください。プリペアドステートメントの実装はかなり限定的で、現時点では引数のバインドはサポートしていません。この Tableau Online のユースケースでは不要なためです。今後、Tableau Online を十分にテストした結果、問題が見つかった場合には、必要に応じて追加実装を行う予定です。
regexp_tree辞書で、大文字・小文字を区別しないマッチングモードと dot-all モードをサポートしました。#50906 (Johann Gan).- Keeper の改善: Keeper コマンド
createIfNotExistsを追加しました。#48855 (Konstantin Bogdanov) 。 - 整数型の推論精度を向上し、#51236 を修正しました。#53003 (Chen768959) 。
- MaterializedMySQL で、文字列リテラル内の文字セット解決が導入されました。 #53220 (Val Doroshchuk).
- ごくまれな状況で発生する、あまり使用されない
EmbeddedRocksDBテーブルエンジンの微妙な問題を修正しました。DROP TABLEの実行後、NFS上でEmbeddedRocksDBテーブルエンジンがファイルを正しく閉じられないことがありました。 #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 headers 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) 。 - cache から取得した count の使用を修正し、アーカイブからの読み込み時の進捗バーを改善しました。 #54271 (Kruglov Pavel).
- SSO を使用した S3 認証情報のサポートを追加しました。SSO で使用するプロファイルを指定するには、
AWS_PROFILE環境変数を設定します。#54347 (Antonio Andelic) 。 - 入力フォーマットで、ネストされた型 Array/Tuple/Map のデフォルト値として NULL をサポートしました。#51100 をクローズしました。#54351 (Kruglov Pavel).
- Arrow/Parquetフォーマットで、通常とは異なる一部のchunk構成を読み取れるようにしました。 #54370 (Arthur Passos).
- MySQL との互換性のため、
stddevPop関数にSTDエイリアスを追加しました。#54274 をクローズしました。#54382 (Nikolay Degterinsky) 。 - MySQL との互換性のために
addDate関数を追加し、一貫性を保つためにsubDateも追加しました。関連 #54275。#54400 (Nikolay Degterinsky)。 modification_timeをsystem.detached_partsに追加。#54506 (Azat Khuzhin) 。- 引数 “max_substring” > 0 を持つ “splitBy*()” 関数が、残りの文字列 (存在する場合) を結果の配列に含めるかどうか (Python/Spark のセマンティクス) を制御する設定
splitby_max_substrings_includes_remaining_stringを追加しました。デフォルトの動作は変わりません。#54518 (Robert Schulze) 。 Int64/UInt64フィールドに対する整数型推論が改善されました。#53003 の続きです。現在は、Array の Array のようなネストされた型や、map/tupleのような関数にも対応しています。Issue: #51236。#54553 (Kruglov Pavel).- スカラーに対する乗算、除算、剰余の配列演算を追加しました。どちらの順序でも動作し、たとえば
5 * [5, 5]と[5, 5] * 5の両方が可能です。 #54608 (Yarik Briukhovetskyi). - 安全に削除できるよう、
keeper-clientのrmコマンドに任意のversion引数を追加しました。#54708 (János Benjamin Antal). - systemd によるサーバーの終了を無効化しました (Bufferテーブルの使用時にデータ損失につながる可能性があるため) 。 #54744 (Azat Khuzhin).
- システムテーブル
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 カラムへの insert を修正しました。#53477 をクローズ。#54803 (Kruglov Pavel) 。- バックアップ用メタデータの収集を、より柔軟に設定できるようにしました。#54804 (Vitaly Baranov) 。
clickhouse-localのログファイル (--server_logs_fileフラグで有効にした場合) では、clickhouse-serverと同様に、各行の先頭にタイムスタンプやスレッド ID などが付加されるようになりました。#54807 (Michael Kolupaev) 。system.merge_tree_settingsテーブルのフィールドis_obsolete— 廃止された merge tree 設定では、この値が 1 になりました。これまでは、その設定が廃止されていることは説明文で示されているだけでした。#54837 (Robert Schulze) 。- intervalリテラルで複数形を使用できるようになりました。
INTERVAL 2 HOURSはINTERVAL 2 HOURと等価になりました。#54860 (Jordi Villar). NullablePK を持つプロジェクションを常に作成できるようにしました。これにより #54814 を修正しました。#54895 (Amos Bird)。- 接続リセットによる失敗後に、バックアップのS3操作を再試行するようにしました。 #54900 (Vitaly Baranov).
- 設定の最大値が最小値を下回る場合、例外メッセージが正確になるようにしました。 #54925 (János Benjamin Antal).
LIKE、match、およびその他の正規表現マッチング関数で、バイナリマッチングにフォールバックすることにより、非 UTF-8 の部分文字列を含む pattern とのマッチングが可能になりました。例: BOM の検出にはstring LIKE '\xFE\xFF%'を使用できます。これにより #54486 が修正されました。#54942 (Alexey Milovidov).ContextLockWaitMicrosecondsプロファイルイベントを追加しました。#55029 (Maksim Kita) 。- Keeper はログレベルを動的に調整できるようになりました。#50372 (helifu).
- MySQLとの互換性のため、関数
timestampを追加しました。#54275 をクローズしました。#54639 (Nikolay Degterinsky)。
ビルド/テスト/パッケージングの改善
- ClickHouse の公式ビルドおよび継続的インテグレーションビルドで使用するコンパイラを Clang 16 から 17 に更新しました。 #53831 (Robert Schulze).
- ルックアップ用の tld データ (
tldLookup.generated.cpp) を再生成しました。 #54269 (Bharat Nallan). - 冗長な
clickhouse-keeper-clientシンボリックリンクを削除しました。 #54587 (Tomas Barton). - bash の解決に
/usr/bin/envを使うようにし、Nix OS をサポートしました。 #54603 (Fionera). - CMake に、DWARF コールグラフを使わずに
perf recordを実行するために必要なPROFILE_CPUオプションを追加しました。 #54917 (Maksim Kita). - リンカが LLD でない場合は、致命的エラーで停止するようにしました。 #55036 (Alexey Milovidov).
- base64 値の処理 (エンコード/デコード) に使うライブラリを Turbo-Base64 から aklomp-base64 に置き換えました。どちらも x86 と ARM で SIMD により高速化されていますが、その理由は 1. 後者のライセンス (BSD-2) のほうが ClickHouse に適しており、一方で Turbo64 はその間に GPL-3 へ移行したこと、2. GitHub のスター数がより多く、aklomp-base64 のほうが将来性が高いと考えられること、3. aklomp-base64 のほうが API がやや扱いやすいこと (これには主観が入る可能性があります) 、4. aklomp-base64 ではバグ回避のための細工 (スレッドセーフでない初期化など) が不要なこと、です。注意: aklomp-base64 はパディングされていない base64 値を拒否しますが、Turbo-Base64 はベストエフォートでそれらをデコードします。RFC-4648 ではパディングが必須かどうかは明確に定められていませんが、文脈によっては、これは注意すべき動作変更となる可能性があります。 #54119 (Mikhail Koviazin).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- zero-copy replication における REPLACE/MOVE PARTITION を修正 (注: 「zero-copy replication」は実験的な機能です) #54193 (Alexander Tokmakov).
- ハードリンクにおけるゼロコピーのロックを修正 (注: “ゼロコピーレプリケーション”は実験的機能です) #54859 (Alexander Tokmakov) 。
- zero copy のガベージ問題を修正 (注: “zero-copy レプリケーション” は実験的機能です) #54550 (Alexander Tokmakov).
- HTTP の再試行タイムアウトをミリ秒単位で渡すよう修正しました (以前は誤っていました) 。 #54438 (Duc Canh Le).
CapnProto/Protobufを使用する OUTFILE で、誤解を招くエラーメッセージを修正 #52870 (Kruglov Pavel).- LIMIT 使用時の並列レプリカにおけるサマリー報告を修正 #53050 (Raúl Marín).
- S3 との間での BACKUP のスロットリング (native copy が使用されていない場合) や、そのほかいくつかの箇所の問題を修正 #53336 (Azat Khuzhin).
- ディレクトリ全体のコピー時の I/O スロットリングを修正 #53338 (Azat Khuzhin).
- 修正: prewhere 条件に移動されたアクションでカラムが失われることがある問題を修正 #53492 (Yakov Olkhovskiy).
- バイト単位で同一のパーツへの置き換え時に発生する内部エラーを修正しました #53735 (Pedro Riera).
- 修正: interpolate 式で使用するカラムを必須にしました #53754 (Yakov Olkhovskiy).
- Cluster Discovery の初期化の修正 + config でのフェイルポイント設定 #54113 (vdimir).
accurateCastOrNullの問題を修正 #54136 (Salvatore Mesoraca)。- FINAL 修飾子使用時の Nullable 主キーを修正 #54164 (Amos Bird) 。
- 重複データが存在する場合に、レプリケートされたmaterialized viewへの新規データの挿入を妨げていたエラーを修正しました。 #54184 (Pedro Riera).
- 修正: bloom filter で
IPv6をサポート #54200 (Yakov Olkhovskiy). IPv4との型不一致が発生する可能性がある問題を修正 #54212 (Bharat Nallan).- 再作成されたインデックスに対する
system.data_skipping_indicesを修正 #54225 (Artur Malchanau). - 複数の join リライター v2 での名前の競合を修正 #54240 (Tao Wang).
- JOIN 実行後に
system.errorsに予期しないエラーが記録される問題を修正 #54306 (vdimir). isZeroOrNull(NULL)の不具合を修正 #54316 (flynn).- 修正:
prefer_localhost_replica= 1 の場合に、Distributed 上の並列レプリカが正しく動作しない問題を修正 #54334 (Igor Nikonov). - vertical merge + replacing merge tree + optimize cleanup における論理エラーを修正 #54368 (alesapin).
s3table function で発生する可能性がある errorURI contains invalid charactersを修正 #54373 (Kruglov Pavel).arrayExists関数のAST最適化で発生するセグメンテーションフォルトを修正 #54379 (Nikolay Degterinsky).analysisOfVariance関数で、加算前にオーバーフローをチェックするように変更 #54385 (Antonio Andelic).- removeSharedRecursive のバグを再現して修正 #54430 (Sema Checherinda).
- PREWHERE と FINAL における SimpleAggregateFunction で、誤った結果が返る可能性がある問題を修正 #54436 (Azat Khuzhin).
- アナライザ無効時の
indexHintによるパーツのフィルタリングを修正 #54449 (Azat Khuzhin). - normalized state を使用する集約プロジェクションの不具合を修正 #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 と cleanup における ReplacingMergeTree の問題を修正 #54706 (SmitaRKulkarni).
- ORDER BY の後に仮想カラムの値が誤っていた問題を修正しました #54811 (Michael Kolupaev).
- 非アナライザでの indexHint を使用したパーツのフィルタリングを修正 #54825 #54449 (Azat Khuzhin).
- シャットダウン中に発生するKeeperのセグメンテーション違反を修正 #54841 (Antonio Andelic).
- MaterializedPostgreSQL における
Invalid number of rows in Chunkの修正 #54844 (Kseniia Sumarokova). - 廃止されたフォーマット設定を別セクションへ移動 #54855 (Kruglov Pavel).
- パーティションキーが変更された際に
minmax_count_projectionを再構築 #54943 (Amos Bird). if関数におけるColumnVector<Int128>への不正なキャストを修正 #55019 (Kruglov Pavel).- 異なるプロジェクションまたはインデックスを持つテーブルのパーツがアタッチされるのを防止 #55062 (János Benjamin Antal).
- 空のサブクエリ結果に対して、スカラー結果の map に NULL を格納する #52240 (vdimir).
FINALがまれに無効な読み取り範囲を生成する問題を修正 #54934 (Nikita Taranov).- 修正: Keeper を使わない insert クォーラムでの再試行 #55026 (Igor Nikonov).
- Nullable を使った単純な 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に 2 以上を指定して実行すると、接続を並列に確立するようになりました。以前は、ヨーロッパから米国に向けて 1000 の同時接続で実行すると実用的ではありませんでした。高遅延の接続に対する QPS の計算も正しくなりました。後方互換性を持たない変更として、clickhouse-benchmarkの JSON 出力オプションは削除されました。このオプションを使用していた場合は、回避策としてsystem.query_logから JSON フォーマットでデータを抽出することもできます。#53293 (Alexey Milovidov).event_time_microsecondsカラムがあるため冗長となることから、system.text_logからmicrosecondsカラムが削除され、system.metric_logからmillisecondsカラムが削除されました。#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). - issue #50808 で、
cluster、clusterAllReplicas、remote、remoteSecureをテーブル名なしで使用できるようにしました。#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が追加され、クエリ cache が使用されたかどうか、およびどのように使用されたかが分かるようになりました。#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).
- データを一切読み込まず、
system.oneのように型UInt8、値0のdummyカラムを含む1行を常に返す input formatOneを追加しました。これは_file/_path仮想カラムと組み合わせることで、file/s3/url/hdfs/etc のテーブル関数において、データを読み込まずにファイルを一覧できます。 #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 条件と各カラムの最小値/最大値に基づいて行グループ (ファイル内の chunk) がスキップされます。特に、ファイルがあるカラムでおおむねソートされている場合、そのカラムの狭い範囲で絞り込むクエリは大幅に高速になります。 #52951 (Michael Kolupaev).
- Parquet で小さな行グループをまとめてバッチ処理することで、読み取りを最適化しました。#53069 をクローズしました。#53281 (Kruglov Pavel).
- ほとんどの入力フォーマットで、ファイルに対する count を最適化しました。#44334 をクローズしました。#53637 (Kruglov Pavel).
url/file/hdfsテーブル関数で、読み込み前に file/path によるフィルタを使用できるようになりました。 #53529 (Kruglov Pavel).- AArch64、PowerPC、SystemZ、RISC-V での JIT コンパイルを有効化。#38217 (Maksim Kita) 。
- 設定
rewrite_count_distinct_if_with_count_distinct_implementationを追加し、countDistinctIfをcount_distinct_implementationで書き換えられるようにしました。#30642 をクローズしました。#46051 (flynn). uniqおよびuniqExact集約関数の集約状態のマージを、マージ前の変換を並列化することで高速化しました。#50748 (Jiebin Sun) 。- 多数の可変長キーを使用する場合のNullable Stringキーの集約処理のパフォーマンスを最適化しました。#51399 (LiuNeng) 。
- preimage を用いた時間フィルタ最適化のパスをアナライザに追加しました。ICX デバイス (Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド) での SSB の性能実験では、Experimental なアナライザを有効にすると、この変更により geomean QPS が 8.5% 向上する可能性があることが示されています。#52091 (Zhiguo Zhou).
uniqExact(COUNT DISTINCT) 関数で、すべてのハッシュセットが単一レベルの場合のマージを最適化しました。#52973 (Jiebin Sun) 。Joinテーブルエンジン: すべてのカラムを含むハッシュ結合用データ構造を複製しないようにしました。 #53046 (Duc Canh Le).- パフォーマンスを向上させるため、“apache arrow” ライブラリを使わずに、ネイティブの
ORC入力フォーマットを実装しました。#53324 (李扬). - ダッシュボードはサーバーにデータを圧縮するよう指示します。これは、低速なインターネット接続で長い時間範囲のデータを扱う場合に有用です。たとえば、86400 点のチャート 1 つは、
brを使うと非圧縮では 1.5 MB、圧縮後は 60 KB になります。#53569 (Alexey Milovidov) 。 - BACKUP と RESTORE でのスレッドプールの活用効率を向上しました。 #53649 (Nikita Mikhaylov).
- 起動時にファイルシステムキャッシュのメタデータを並列に読み込みます。
load_metadata_threads(デフォルト: 1) cache 設定で構成します。#52037 に関連しています。#52943 (Kseniia Sumarokova) 。 move_primary_key_columns_to_end_of_prewhereを改善。#53337 (Han Fei) 。- これにより、ClickHouse Keeper とのやり取りが最適化されます。従来は、呼び出し元が同じ watch コールバックを複数回登録できていました。その場合、各エントリがメモリを消費するうえに、同じコールバックが何度も呼び出されることになり、あまり合理的ではありませんでした。これを避けるには、呼び出し元で同じ watch を重複して追加しないためのロジックを実装する必要がありました。今回の変更により、watch コールバックが shared_ptr 経由で渡された場合は、この deduplication が内部で行われます。 #53452 (Alexander Gololobov).
- file/s3/url/hdfs/azure 関数の count 向けに、ファイル内の行数を cache するようになりました。cache は
use_cache_for_count_from_filesの設定で有効/無効を切り替えられます (デフォルトでは有効) 。https://github.com/ClickHouse/ClickHouse/pull/53637 の続きです。#53692 (Kruglov Pavel). - より適切なスレッド管理により、多数のファイルを扱う際の S3 table function の速度が約25%以上向上します。#53668 (pufit) 。
改善
- 外部コマンドの stderr にデータがある場合の動作 (none、log、または throw) を制御する
stderr_reaction設定を追加しました。これにより、外部コマンドのデバッグがしやすくなります。 #43210 (Amos Bird). system part_logと merge テーブルにpartitionカラムを追加しました。#48990 (Jianfei Hu) 。- (索引) 非圧縮/mark、mmap、クエリ cache のサイズを、実行時に (サーバーを再起動せずに) 動的に設定できるようになりました。 #51446 (Robert Schulze).
- Dictionary を複合キーで作成した場合は、自動的に “complex key” レイアウトのバリアントが選択されます。#49587 (xiebin).
- 新しい同時実行制御機能をより適切にテストできるよう、設定
use_concurrency_controlを追加しました。 #49618 (Alexey Milovidov). - データベース名およびテーブル名のスペルミスに対する候補表示を追加しました。#49801 (Yarik Briukhovetskyi) 。
- Gluten による HDFS 上の小さなファイルの読み取りでは、Spark で直接クエリする場合と比べて時間がより多くかかることがわかりました。そこで、この点を改善しました。#50063 (KevinyhZou).
- session の有効期限切れ後に、無意味なエラーログが多すぎたため、好ましくありませんでした。#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” を含む接続文字列が必ずしも既定のエンドポイントで始まるとは限らないためです。また、Azure のコンテナーを URL に追加した後、接続 URL に “sas” トークンを含めるよう更新しました。#51141 (SmitaRKulkarni).full_sorting_mergeJOIN アルゴリズムにおける Set のフィルタリングに関する説明を修正しました。#51329 (Tanay Tummalapalli) 。max_block_sizeが非常に大きい場合に発生するAggregatorのメモリ消費の問題を修正しました。#51566 (Nikita Taranov) 。SYSTEM SYNC FILESYSTEM CACHEコマンドを追加しました。このコマンドは、ファイルシステムキャッシュのインメモリ状態をディスク上の内容と比較し、必要に応じてインメモリ状態を修正します。これは、ディスク上のデータに手動で変更を加える場合にのみ必要ですが、そのような操作は強く非推奨です。#51622 (Kseniia Sumarokova).- 既存のS3ストレージ設定のプロキシリゾルバとの後方互換性を維持しつつ、CH向けの汎用的なプロキシリゾルバの作成を試みました。 #51749 (Arthur Passos).
- file/s3/hdfs/url/azureBlobStorage テーブル関数で tuple のサブカラムの読み取りをサポートしました。 #51806 (Kruglov Pavel).
- 関数
arrayIntersectは、最初の引数の順序に対応した値を返すようになりました。#27622 をクローズしました。#51850 (Yarik Briukhovetskyi). - 指定したアクセスストレージ内でアクセスエンティティを作成/削除したり、アクセスエンティティをあるアクセスストレージから別のアクセスストレージへ移動したりできる新しいクエリを追加しました。 #51912 (pufit).
- Replicated データベースエンジンで、
ALTER TABLE FREEZEクエリがレプリケートされないようにしました。#52064 (Mike Kot) 。 - 予期しないシャットダウン時にシステムテーブルをフラッシュする機能を追加しました。 #52174 (Alexey Gerasimchuck).
- 事前署名付きURLで
s3テーブル関数が動作しない問題を修正しました。close #50846。 #52310 (chen). system.eventsおよびsystem.metricsテーブルに、eventとmetricの alias としてカラム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 endpoint の設定により、ルートから利用できるようになり、必要に応じて自動的に ’/’ が追加されるようになりました。#47809。#52600 (xiaolei565) 。
- clickhouse-local で位置指定オプションを使用できるようにし、グローバル UDF 設定 (user_scripts_path と user_defined_executable_functions_config) を設定するようにしました。#52643 (Yakov Olkhovskiy) 。
system.asynchronous_metricsに、query cache を確認するためのメトリクス “QueryCacheEntries” と “QueryCacheBytes” が追加されました。 #52650 (Robert Schulze).- S3 へのバックアップで、
BACKUPステートメントのSETTINGS句においてs3_storage_classパラメータを使用できるようになりました。#52658 (Roman Vasin). - バックアップのメタデータファイルを解析してバックアップ情報を出力するユーティリティ
print-backup-info.pyを追加しました。 #52690 (Vitaly Baranov). - #49510 をクローズします。現在、database 名と table 名は大文字・小文字を区別しますが、BI ツールは
information_schemaに対して小文字でクエリする場合もあれば、大文字でクエリする場合もあります。そのため、information_schema.tablesのような小文字の table を含むinformation_schemadatabase と、INFORMATION_SCHEMA.TABLESのような大文字の table を含むINFORMATION_SCHEMAdatabase があります。しかし、一部のツールはINFORMATION_SCHEMA.tablesやinformation_schema.TABLESに対してクエリを実行します。提案されている解決策は、小文字と大文字の両方の table を、小文字と大文字の両方のinformation_schemadatabase に複製することです。 #52695 (Yarik Briukhovetskyi). - クエリ
CHECK TABLEのパフォーマンスと使い勝手が向上しました (進捗更新が送信され、中断も可能です) 。 #52745 (vdimir). - タプルの各要素に分配して適用することで、タプルに対する
modulo、intDiv、intDivOrZeroのサポートを追加しました。 #52758 (Yakov Olkhovskiy) 。 xmlに続いて、clickhouse-client でデフォルトのyamlおよびyml設定ファイルも検索するようにしました。#52767 (Alexey Milovidov) 。- ‘clickhouse’ をルートとしない設定にマージする際、ルートノード名が異なる設定は例外を出さず、単にスキップされるようになりました。 #52770 (Yakov Olkhovskiy).
- これで、サンプリングメモリプロファイラで追跡するアロケーションの最小サイズ (
memory_profiler_sample_min_allocation_size) と最大サイズ (memory_profiler_sample_max_allocation_size) を指定できるようになりました。#52779 (alesapin) 。 - 浮動小数点のパース方式 (fast/precise) を切り替えるための
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). - ファイルシステムキャッシュで許可されるパスを制限できるようになりました。主に動的ディスクで有用です。server config で
filesystem_caches_pathが指定されている場合、すべてのファイルシステムキャッシュのパスはこの directory 内に制限されます。たとえば、cache config のpathが相対パスであればfilesystem_caches_path配下に配置され、cache config のpathが絶対パスであればfilesystem_caches_path配下に存在する必要があります。config で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 server は、同時実行クエリが 100 未満でも数万 QPS を処理できます。#53285 (Alexey Milovidov).- バックグラウンドで同時実行されるパーティション最適化マージの数を制限。 #53405 (Duc Canh Le).
Replicateddatabase のレプリケーションまたは復旧時に、Directory for table data already existserror を無視できる設定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 server は、設定を再読み込みする際に、cgroups 経由で変更されたメモリ制限を反映するようになりました。#53455 (Robert Schulze).
DETACH、DROP、またはサーバーのシャットダウン時に、分散テーブルのフラッシュを無効化できるようになりました。#53501 (Azat Khuzhin) 。domainRFC関数で、角括弧付きの IPv6 がサポートされるようになりました。#53506 (Chen768959).- バックアップで使用されるS3 CopyObjectリクエストのタイムアウトを延長しました。#53533 (Michael Kolupaev) 。
- サーバー設定
aggregate_function_group_array_max_element_sizeが追加されました。この設定は、シリアライゼーション時にgroupArray関数の Array サイズを制限するために使用されます。デフォルト値は16777215です。#53550 (Nikolai Kochetov). - MySQL との互換性向上のため、
DATABASEのエイリアスとしてSCHEMAが追加されました。#53587 (Daniël van Eeden) 。 - system database 内のテーブルに関する非同期メトリクスを追加しました。たとえば、
TotalBytesOfMergeTreeTablesSystemです。これにより #53603 をクローズしました。#53604 (Alexey Milovidov). - Play UI とダッシュボードの SQL エディタでは、Grammarly は使用されなくなります。 #53614 (Alexey Milovidov).
- 上級者向けの設定として、(1) [索引] の mark/非圧縮 cache の size_ratio (つまり protected queue の相対的なサイズ) と、(2) 索引 mark cache および索引 非圧縮 cache の cache ポリシーを設定できるようになりました。#53657 (Robert Schulze) 。
- TCPHandler のクエリパケットに対するクライアント情報の検証を追加しました。#53673 (Alexey Gerasimchuck) 。
- Microsoft Azure とのやり取り中にネットワークエラーが発生した場合、パーツの読み込みを再試行するようにしました。 #53750 (SmitaRKulkarni).
- 例外のスタックトレースで、マテリアライズドビューの例外も伝播されるようになりました。#53766 (Ilya Golshtein).
- hostname または port が指定されていない場合、keeper client は ClickHouse の config.xml 内で接続文字列を探します。#53769 (pufit) 。
- MergeTree テーブルエンジンファミリーで、データパーツロックを保持している時間 (マイクロ秒) を示すプロファイルイベント
PartsLockMicrosecondsを追加しました。#53797 (alesapin) 。 - Keeper 向けに、RAFT の制限における reconnect limit を設定可能にしました。この設定により、現在の接続が切断された場合に、Keeper が他のノードとの接続をより迅速に再確立できるようになります。#53817 (Pengyuan Bian) 。
- MySQL との互換性を向上させるため、table 定義内の外部キーを無視するようにし、ユーザーが外部キー部分の SQL を書き換えなくても済むようにしました。参照 #53380。#53864 (jsc0218).
ビルド/テスト/パッケージングの改善
- ClickHouseバイナリのシンボルを動的リンカに公開しないようにしました。これで #43933 が解消される可能性があります。#47475 (Alexey Milovidov)。
- clickhouse-server パッケージに
clickhouse-keeper-clientのシンボリックリンクを追加しました。#51882 (Mikhail f. Shiryaev) 。 - SQL 2016 への準拠状況を報告するため、CI に https://github.com/elliotchance/sqltest を追加しました。 #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) 。
- 大量のごみを取り除いて、ビルドを高速化しました。boost によって、頻繁にインクルードされるヘッダーファイルの 1 つが汚染されていました。#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 が 2 つ以上ある場合、構築時に (実験的な) Annoy 索引をリセットしないようにしました #51325 (Tian Xinhui) 。
- RESTORE時の一時ディレクトリの使用を修正 #51493 (Azat Khuzhin).
- Nullable(IPv4) の二項演算の不具合を修正 #51642 (Yakov Olkhovskiy) 。
- Dictionary属性でIPv4およびIPv6のデータ型をサポート #51756 (Yakov Olkhovskiy) 。
- compress marks のチェックサム修正 #51777 (SmitaRKulkarni).
- CSVのベストエフォートパースで、カンマを誤って日時の一部としてパースしてしまう問題を修正 #51950 (Kruglov Pavel).
- 実行可能 UDF にパラメータがある場合でも例外をスローしない #51961 (Nikita Taranov).
ALTER DELETEクエリにおけるスキップ索引とプロジェクションの再計算の不具合を修正 #52530 (Anton Popov).- MaterializedMySQL: ReadBuffer::read における無限ループを修正 #52621 (Val Doroshchuk).
- 候補の読み込みを
clickhousedialectのみに限定 #52628 (János Benjamin Antal). - 必要に応じて、ares チャネルの初期化と破棄を行う。#52634 (Arthur Passos) 。
- OR 式を含む仮想カラムのフィルタリングを修正しました #52653 (Azat Khuzhin).
- 1 つのスパースカラム引数を持つ関数
tupleで発生するクラッシュを修正 #52659 (Anton Popov). - クラスター上の named collections の不具合を修正 #52687 (Al Korgun).
- 多段階
PREWHEREの場合に不要なカラムを読み取ってしまう不具合を修正 #52689 (Anton Popov). - 複数カラムで nulls first を指定した際に発生する予期しないソート結果を修正 #52761 (copperybean).
- Keeper の再構成でのデータレースを修正 #52804 (Antonio Andelic).
- 大きな limit 値を指定した場合のスパースなカラムのソートを修正 #52827 (Anton Popov).
- clickhouse-keeper: poll を使用するサーバー実装を修正。 #52833 (Andy Fiddaman).
- 正規表現アナライザで名前付きキャプチャグループを認識できるようにしました #52840 (Han Fei).
- clickhouse-local の
~PushingAsyncPipelineExecutorで発生する可能性のある assert を修正 #52862 (Kruglov Pavel). - 空の
Nested(Array(LowCardinality(...)))の読み込みを修正 #52949 (Anton Popov). - session_log の新しいテストを追加し、ログインとログアウトの不整合を修正しました。#52958 (Alexey Gerasimchuck).
- show create mysql table でのパスワード漏えいを修正 #52962 (Duc Canh Le).
- CreateSetAndFilterOnTheFlyStep でスパースなカラムフォーマットをフル形式に変換 #53000 (vdimir).
- fs cache において、空のキー・プレフィックスディレクトリの削除時にまれに発生する race condition を修正 #53055 (Kseniia Sumarokova).
- ZstdDeflatingWriteBuffer が出力をときどき切り詰めてしまう問題を修正しました #53064 (Michael Kolupaev).
- async flush クエリでの part_log の query_id を修正 #53103 (Raúl Marín).
- cache で発生する可能性のあるエラー “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 クエリ時に lazy database を読み込む際の不具合を修正 #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) 。
- path がすべて数値の場合に発生する JSON_QUERY 関数のパースエラーを修正 #53470 (KevinyhZou) 。
- parallel FINAL を使用するクエリで、カラムの順序が誤っていた問題を修正しました。#53489 (Nikolai Kochetov).
- do_not_merge_across_partitions_select_final を指定した ReplacingMergeTree からの SELECT の不具合を修正しました #53511 (Vasily Nemkov).
- シャットダウン時に、まず非同期 INSERT キューをフラッシュする #53547 (joelynch).
- join でのスパースカラムに関するクラッシュを修正 #53548 (vdimir).
- 引数が不正な関数に対する Set のスキッピング索引で発生する可能性のある UB を修正 #53559 (Azat Khuzhin).
- 転置索引で未定義動作 (UB) が発生する可能性がある問題を修正 (実験的機能) #53560 (Azat Khuzhin).
- 修正: interpolate 式が、select 式で同名の alias が付けられたものではなく、ソースカラムを参照してしまう問題を修正しました。 #53572 (Yakov Olkhovskiy).
- EXPLAIN PLAN index=1 で除外されたグラニュール数の不具合を修正 #53616 (wangxiaobo).
DelayedSourceで totals と extremes を正しく処理するよう修正 #53644 (Antonio Andelic) 。- mutation pipeline 内で prepared set cache がスタックする問題 #53645 (Nikolai Kochetov).
- UPDATE および DELETE クエリの条件式で使用される JSON 型サブカラムに関するミューテーションの不具合を修正しました。#53677 (VanDarkholme7) 。
- full_sorting_merge join における filter pushdown を修正 #53699 (vdimir).
NULL::LowCardinality(Nullable(...)) NOT INのバグ修正を試みた #53706 (Andrey Zvonov).- 修正: スパースカラムでのソート済みの distinct #53711 (Igor Nikonov) 。
transform: 複数行に対するデフォルトカラムの処理を正しく行う #53742 (Salvatore Mesoraca).- parseDateTime での fuzzer のクラッシュを修正しました #53764 (Robert Schulze).
- MaterializedPostgreSQL: getCreateTableQueryImpl における未処理例外を修正 #53832 (Kseniia Sumarokova).
- PostgreSQLエンジンの使用時に発生する可能性があるセグメンテーション違反を修正 #53847 (Kseniia Sumarokova).
- named_collection_adminエイリアスを修正 #54066 (Kseniia Sumarokova).
ClickHouse リリース 23.7、2023-07-27。 プレゼンテーション, ビデオ
後方互換性を持たない変更
NAMED COLLECTIONアクセスタイプ (別名USE NAMED COLLECTION、NAMED COLLECTION USAGE) を追加しました。このPRは、このアクセスタイプがデフォルトで無効になっているため、後方互換性がありません (親アクセスタイプであるNAMED COLLECTION ADMINもデフォルトで無効なためです) 。提案は #50277 です。付与するにはGRANT NAMED COLLECTION ON collection_name TO userまたはGRANT NAMED COLLECTION ON * TO userを使用します。これらの grant を付与できるようにするには、config でnamed_collection_adminが必要です (以前はnamed_collection_controlという名前だったため、別名として残されています) 。 #50625 (Kseniia Sumarokova).system.partsのカラム名last_removal_attemp_timeのタイプミスを修正しました。新しい名前はlast_removal_attempt_timeです。 #52104 (filimonov).- distributed_ddl_entry_format_version のデフォルトバージョンを 5 に引き上げました (opentelemetry と initial_query_idd のパススルーが有効になります) 。これにより、downgrade 後は distributed DDL の既存のエントリを処理できなくなります (ただし通常、そのような未処理のエントリは存在しないはずです) 。 #52128 (Azat Khuzhin).
- 通常のメタデータと同様に、projection のメタデータもチェックするようにしました。この変更により、無効な projection を含む table がある場合、server が起動できなくなる可能性があります。たとえば、PK に位置指定のカラムを作成する projection (例:
projection p (select * order by 1, 4)。これは table の PK では許可されず、insert/merge 中にクラッシュを引き起こす可能性があります) です。更新前にそのような projection を drop してください。#52353 を修正しました。 #52361 (Nikolai Kochetov). - バグのため、experimental feature である
hashidを削除しました。実装品質には当初から疑問があり、experimental の段階を脱することはありませんでした。これにより #52406 をクローズします。 #52449 (Alexey Milovidov).
新機能
- 複数のデータベースを1つに統合する
Overlayデータベースエンジンが追加されました。ファイルシステム内のディレクトリを、フォーマットと構造が自動検出される暗黙的に利用可能なテーブルの集合として表現するFilesystemデータベースエンジンが追加されました。新しいS3データベースエンジンでは、プレフィックスをテーブルの集合として表現することで、S3 storageと読み取り専用でやり取りできるようになりました。新しいHDFSデータベースエンジンでは、同じ方法でHDFS storageとやり取りできます。#48821 (alekseygolub). - Keeper で、スナップショットとログの保存に使用する外部ディスクをサポートしました。 #50098 (Antonio Andelic).
- 複数ディレクトリ選択用の
{}グロブのサポートを追加しました。#50559 (Andrey Zvonov) 。 - Kafka Connector は、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). - 各カラムの前に、そのカラムのデフォルト値を使用するかどうかを示すフラグとして追加の1バイトを付加する
RowBinaryWithDefaultsフォーマットを追加しました。#50854 をクローズしました。#51695 (Kruglov Pavel). default_temporary_table_engine設定が追加されました。default_table_engineと同様ですが、一時テーブル用です。#51292。#51708 (velavokr)。- 各単語の先頭文字を大文字にし、それ以外を小文字に変換する新しい
initcap/initcapUTF8関数を追加しました。#51735 (Dmitry Kardymon) 。 - CREATE TABLE で、カラム定義内の
PRIMARY KEY構文がサポートされるようになりました。カラムは、カラム定義の順にプライマリインデックスへ追加されます。#51881 (Ilya Yatsishin) 。 - 設定ファイル (
logおよびerrorlogタグ) またはコマンドライン引数 (--log-fileおよび--errorlog-file) で、ログファイル名およびエラーログファイル名に日付・時刻のフォーマット指定子を使用できるようになりました。#51945 (Victor Krasnov) 。 - HTTPヘッダーにピークメモリ使用量の統計情報を追加しました。#51946 (Dmitry Kardymon) 。
- 文字列中の部分列にマッチする新しい
hasSubsequence関数 (CaseInsensitiveおよびUTF8バージョンを含む) を追加しました。#52050 (Dmitry Kardymon) 。 - PostgreSQL との互換性のため、
groupArrayのエイリアスとしてarray_aggを追加しました。#52100 をクローズしました。 ### ユーザー向け変更のドキュメントエントリ。 #52135 (flynn). any集約関数との互換性を保つエイリアスとしてany_valueを追加しました。#52140 をクローズします。#52147 (flynn).- BigQuery との互換性のため、集約関数
array_concat_aggを追加しました。これはgroupArrayArrayのエイリアスです。#52139 をクローズしました。#52149 (flynn). OCTET_LENGTHをlengthのエイリアスとして追加しました。#52153 をクローズしました。#52176 (FFFFFFFHHHHHHH)。- 複数行文字列から先頭行を抽出する
firstLine関数を追加しました。これにより #51172 がクローズされました。#52209 (Mikhail Koviazin). Intervalデータ型に対して、KQL スタイルのフォーマットを実装しました。これはKustoクエリ言語との互換性のためにのみ必要です。#45671 (ltrk2).- 保留中の非同期挿入をすべて宛先テーブルにフラッシュするクエリ
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) 。 - 非同期 INSERT で
async_deduplication_tokenをサポートしました。 #52136 (Han Fei). - URL engine で URI 内の path のデコード/エンコードを無効にする新しい設定
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).
MergeTreePrefetchedReadPoolで、MergeTreeReadPoolと同様に固定サイズのタスクを使用するようになりました。また、S3 リクエストには接続プールを使用するようになりました。 #49732 (Nikita Taranov).- join の右側へのプッシュダウンをさらに改善しました。#50532 (Nikita Taranov).
- grace_hash 結合でハッシュテーブルのサイズを事前確保するようにして改善しました (再提出) 。 #50875 (lgbo).
OpenedFileCacheでのロック待ちは、状況によっては無視できないことがありました。競合を避けるため、これを複数のサブマップ (それぞれが独自のロックを持つ) に分割しました。#51341 (Nikita Taranov).- PREWHERE チェーンの末尾に、主キーカラムを含む条件を移動しました。主キーカラムを含む条件は PK の解析で使われる可能性が高く、PREWHERE による絞り込みへの追加的な効果はあまり大きくないためです。 #51958 (Alexander Gololobov).
- SipHash をインライン化することで、String 型の
COUNT(DISTINCT)を高速化しました。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).- 残りのデータをバックグラウンドでダウンロードすることで、file segment サイズに厳密な下限を設けられるようになりました。file segment の最小サイズ (実際のファイルサイズのほうが大きい場合) は、cache configuration 設定
boundary_alignmentで設定され、デフォルトは4Miです。バックグラウンド thread 数は、cache configuration 設定background_download_threadsで設定され、デフォルトは2です。さらに、この PR ではmax_file_segment_sizeも8Miから32Miに引き上げられました。#51000 (Kseniia Sumarokova) 。 - S3 のデフォルトのタイムアウトを 30 秒から 3 秒に、その他の HTTP のデフォルトのタイムアウトを 180 秒から 30 秒に短縮しました。#51171 (Michael Kolupaev) 。
- 新しい設定
merge_tree_determine_task_size_by_prewhere_columnsが追加されました。trueに設定すると、読み取りタスクのサイズの決定時にはPREWHEREセクションのカラムのサイズのみが考慮されます。falseの場合は、クエリ内のすべてのカラムが考慮されます。#52606 (Nikita Taranov) 。
改善
- 進捗表示をより適切に行うため、s3/file/url/… テーブル関数のプログレスバーで read_bytes/total_bytes_to_read を使用するようにしました。 #51286 (Kruglov Pavel).
- レプリケート送信のための interserver ハンドラーを閉じる前に、レプリカが待機する時間を指定するテーブル設定
wait_for_unique_parts_send_before_shutdown_msを導入しました。あわせて、テーブルと interserver ハンドラーのシャットダウン順序の不整合も修正しました。これにより、server はまずテーブルをシャットダウンし、その後に interserver ハンドラーをシャットダウンするようになりました。#51851 (alesapin). OFFSETなしの SQL 標準FETCHをサポートしました。https://antonz.org/sql-fetch/ を参照してください。#51293 (Alexey Milovidov).- config の新しい
http_forbid_headersセクションにより、URL/S3 テーブル関数で HTTP ヘッダーをフィルタリングできるようになりました。完全一致と正規表現によるフィルターの両方を利用できます。 #51038 (Nikolay Degterinsky). 16 EiBの空き容量に関するメッセージは意味がないため、logs に表示しないようにしました。これにより #49320 をクローズします。#49342 (Alexey Milovidov).sleepEachRow関数の制限が適切にチェックされるようにしました。設定function_sleep_max_microseconds_per_blockを追加しました。これは汎用クエリファザーに必要です。#49343 (Alexey Milovidov) 。geoHash関数に関する2つの問題を修正しました。#50066 (李扬) 。- 非同期 INSERT のフラッシュクエリを
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).- procfs がなくても、ホームディレクトリが存在しなくても、glibc の名前解決プラグインがなくても
clickhouse-localを実行できるようになりました。#51518 (Alexey Milovidov) 。 - rename_files_after_processing 設定に、完全なファイル名を表すプレースホルダー
%aを追加しました。#51603 (Kruglov Pavel) 。 system.parts_columnsにmodification_timeカラムを追加しました。#51685 (Azat Khuzhin) 。- 単一のフィールドのパースに失敗した場合にデフォルト値を挿入できるようにする新しい設定
input_format_csv_use_default_on_bad_valuesを CSVフォーマットに追加しました。#51716 (KevinyhZou). - 予期しないクラッシュ後に、クラッシュログをディスクへフラッシュする処理を追加しました。#51720 (Alexey Gerasimchuck) 。
- 認証に関係のないエラーが表示されないダッシュボードページの挙動を修正。さらに、‘overlapping’チャートの挙動も修正。 #51744 (Zach Naimon).
- UUID から UInt128 への変換を可能にしました。 #51765 (Dmitry Kardymon).
- 関数
rangeが Nullable 型の引数をサポートするようになりました。#51767 (Dmitry Kardymon) 。 toyear(x) = cのような条件を、c1 <= x < c2に変換します。#51795 (Han Fei) 。SHOW INDEXステートメントの MySQL 互換性を改善しました。 #51796 (Robert Schulze).use_structure_from_insertion_table_in_table_functionsがMATERIALIZEDおよびALIASカラムで機能しない問題を修正しました。#51817 をクローズしました。#51019 をクローズしました。#51825 (flynn).- cache Dictionary が、ソースに対して一意のキーのみをリクエストするようになりました。#51762 をクローズしました。#51853 (Maksim Kita) 。
- FORMAT が指定されている場合に、EXPLAIN クエリに設定が適用されないことがあった問題を修正しました。#51859 (Nikita Taranov) 。
- SELECTクエリとの互換性のため、DESCRIBE TABLEクエリでFORMATの前にSETTINGSを指定できるようにしました。#51544 をクローズしました。#51899 (Nikolay Degterinsky).
- Var-Int でエンコードされた整数 (ネイティブプロトコルなどで使用) は、64 ビットの全範囲を使用できるようになりました。サードパーティ製クライアントは、これに合わせて var-int のコードを更新することを推奨します。#51905 (Robert Schulze).
- 手動で SYSTEM RELOAD CONFIG を実行しなくても、証明書の変更時に更新できるようになりました。 #52030 (Mike Kot).
TYPEが指定されていないADD INDEXクエリを無視できるようにするallow_create_index_without_type設定が追加されました。標準的な SQL クエリは、テーブルのスキーマを変更せずにそのまま成功します。#52056 (Ilya Yatsishin).- ログメッセージは、サーバーの起動時点から
system.text_logに書き込まれます。#52113 (Dmitry Kardymon) 。 - HTTP endpoint に複数の IP アドレスがあり、その最初の 1 つに到達できない場合、timeout 例外が発生していました。解決されたすべての endpoints を処理して session を作成するようにしました。 #52116 (Aleksei Filatov).
- Avro入力フォーマットで、単一の型しか含まれない場合でもユニオンがサポートされるようになりました。#52131 をクローズしました。#52137 (flynn).
- 暗黙的な projection (現在は
min_max_countprojection のみ) を無効化するための設定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プリミティブをできるだけ早い段階で検出するようにしました。これにより、#27090 を解決しました。 #52260 (Nikita Mikhaylov).
query_plan_optimize_projection = 1のときに欠落していた projection QueryAccessInfo を再追加しました。これにより #50183 が修正されます。これにより #50093 が修正されます。#52327 (Amos Bird).ZooKeeperRetriesControlがエラーを再スローする際は、ZooKeeperRetriesControl自体のスタックトレースではなく、元のスタックトレースが表示されるほうが有用です。 #52347 (Vitaly Baranov).- 一部のディスクがサポートしていない場合でも、ゼロコピー レプリケーションのロックを待機する。 #52376 (Raúl Marín).
- これで、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)。この構文はこのリリース中に変更される可能性があります。 - (experimental MaterializedMySQL)
mysqlxx::Pool::Entryが切断後に使用された場合に発生するクラッシュを修正しました。#52063 (Val Doroshchuk)。 - (experimental MaterializedMySQL) MaterializedMySQL で
CREATE TABLE ... AS SELECT.. をサポートしました。#52067 (Val Doroshchuk)。 - (experimental MaterializedMySQL) MaterializedMySQL 向けに、テキスト型を utf8 に自動変換する機能を導入しました。#52084 (Val Doroshchuk)。
- (experimental MaterializedMySQL) MaterializedMySQL の DDL で、引用符なしのUTF-8文字列をサポートしました。#52318 (Val Doroshchuk)。
- (experimental MaterializedMySQL) MaterializedMySQL で二重引用符付きコメントをサポートしました。#52355 (Val Doroshchuk)。
- Intel QPL を v1.1.0 から v1.2.0 にアップグレードし、Intel accel-config を v3.5 から v4.0 にアップグレードしました。また、Device IOTLB miss が IAA アクセラレータの性能に大きな影響を与える問題を修正しました。#52180 (jasperzhu)。
session_timezone設定 (バージョン23.6で新たに追加) は、実験的機能に格下げされました。#52445 (Alexey Milovidov)。- ClickHouse Keeper で ZooKeeper の
reconfigコマンドをサポートし、keeper_server.enable_reconfiguration設定で有効化できる増分再構成に対応しました。サーバーの追加、削除、およびサーバー優先度の変更をサポートします。#49450 (Mike Kot)。この機能は未完成である可能性があります。
ビルド/テスト/パッケージングの改善
- Linux RISC-V 64 向けの Experimental な ClickHouse ビルドを CI に追加しました。 #31398 (Alexey Milovidov).
- enabled なアナライザでのインテグレーションテストチェックを追加しました。 #50926 #52210 (Dmitry Novik).
- Rust の再現可能なビルドに対応しました。 #52395 (Azat Khuzhin).
- Cargo の依存関係を更新しました。 #51721 (Raúl Marín).
- 関数
CHColumnToArrowColumn::fillArrowArrayWithArrayColumnDataが Nullable な Array でも動作するようにしました。これは 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 join における論理エラーを修正 #51601 (vdimir).
- 「IN」条件のPREWHEREへの移動に関する修正 #51610 (Alexander Gololobov).
- ASOF/ANTI join では PredicateExpressionsOptimizer を適用しない #51633 (vdimir).
- マージアルゴリズムを使用する ReplicatedMergeTree での重複排除付き非同期 INSERT を修正 #51676 (Antonio Andelic).
parseSipHashKeyで空のカラムから読み込んでしまう問題を修正 #51804 (Nikita Taranov).- 無効な EmbeddedRocksdb テーブルを作成した際に発生するセグメンテーションフォルトを修正 #51847 (Duc Canh Le).
- MongoDBテーブルへのinsert処理を修正 #51876 (Nikolay Degterinsky).
- DatabaseCatalog のシャットダウン時に発生するデッドロックを修正 #51908 (Alexander Tokmakov).
- サブクエリ演算子のエラーを修正 #51922 (Alexey Milovidov).
- 複数のIPアドレスを持つホストへの非同期接続を修正 #51934 (Kruglov Pavel).
- ActionsDAG::merge の後に入力を削除しないようにしました #51947 (Nikolai Kochetov).
executeではなくRemoveManyObjectStorageOperation::finalizeで refcount をチェックする #51954 (vdimir).- パラメトリック UDF を許可しました #51964 (Alexey Milovidov) 。
- 2283-12-31 以降の日付に対する toDateTime64() の軽微な修正 #52130 (Andrey Zvonov).
- WINDOW関数のORDER BY句のタプルを修正 #52145 (Alexey Milovidov).
- 集約式に単調関数が含まれる場合に発生する、誤ったプロジェクション解析を修正しました #52151 (Amos Bird).
groupArrayMoving関数のエラーを修正しました #52161 (Alexey Milovidov).- range dictionary での direct join を無効化 #52187 (Duc Canh Le).
- sticky mutations のテストを修正 (およびごくまれに発生するレースコンディションを修正) #52197 (alesapin).
- Web disk の競合状態を修正 #52211 (Kseniia Sumarokova).
- server からの不明なパケット受信時に 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 engine への挿入の不具合を修正しました #52440 (Vasily Nemkov).
- AnyHash の実装が仕様に準拠していませんでした。 #52448 (Alexey Milovidov).
- OptimizedRegularExpression の再帰深度をチェックするようにしました #52451 (Alexey Milovidov).
- DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() のデータレースを修正 #52490 (Azat Khuzhin).
- 関数
transformでの異常終了を修正 #52513 (Alexey Milovidov). - プロジェクション削除後に発生する論理削除の不具合を修正 #52517 (Anton Popov).
- 発生する可能性があるエラー “接続をドレインできません: 先にキャンセルしてください” を修正 #52585 (Kruglov Pavel).
ClickHouseリリース 23.6、2023-06-29。プレゼンテーション、ビデオ
後方互換性を持たない変更
- fs cache の機能
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 メトリクスは単一のメトリクス
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)。 use_mysql_types_in_show_columnsという新しい設定を追加しました。これは、クライアントが MySQL 互換ポート経由で接続している場合に、SHOW COLUMNSSQL ステートメントで MySQL 相当の型を表示するためのものです。#49577 (Thomas Panetti)。- Clickhouse-client は、“—host”、“—port”、“—user” などの代わりに接続文字列を使って呼び出せるようになりました。#50689 (Alexey Gerasimchuck)。
- 設定
session_timezoneを追加しました。これは、明示的に指定されていない場合に、セッションのデフォルトのタイムゾーンとして使用されます。#44149 (Andrey Zvonov)。 - Codec DEFLATE_QPL は、設定 “allow_experimental_codecs” ではなく、サーバー設定 “enable_deflate_qpl_codec” (デフォルト: false) で制御されるようになりました。これにより DEFLATE_QPL は Experimental ではなくなりました。#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)。- クロス結合をまたいだフィルタのプッシュダウンを可能にしました。#50605 (Han Fei)。
- グローバルオブジェクトの代わりにスレッドローカルな timer_id を使用することで、クエリプロファイラ有効時のパフォーマンスを改善しました。#48778 (Jiebin Sun)。
- CapnProto の入出力フォーマットを書き直して、パフォーマンスを改善しました。Map のカラム名と CapnProto のフィールド名を大文字・小文字を区別しない形で扱えるようにし、ネストされた structure フィールドの読み書きを修正しました。#49752 (Kruglov Pavel)。
- 並列スレッドでの Parquet 書き込みパフォーマンスを最適化しました。#50102 (Hongbin Ma)。
- MATERIALIZED VIEW の処理時、および block が 1 つしかないストレージでは
parallelize_output_from_storagesを無効化しました。#50214 (Azat Khuzhin)。 - PR #46558 をマージしました。block がすでにソート済みの場合、ソート中の block の並べ替えを回避します。#50697 (Alexey Milovidov, Maksim Kita)。
- system.zookeeper テーブルからの読み取りを高速化するため、ZooKeeper への複数の list リクエストを並列に実行するようにしました。#51042 (Alexander Gololobov)。
- time zone 用 DateTime ルックアップテーブルの初期化を高速化しました。これはかなり重いため、特に debug build では clickhouse-client の起動時間や接続時間の短縮につながるはずです。#51347 (Alexander Gololobov)。
- 同期的な HEAD リクエストが原因となっていたデータレイクの低速化を修正しました。 (多数のファイルがある場合に Iceberg/Delta Lake/Hudi が遅くなる問題に関連します) 。#50976 (Kseniia Sumarokova)。
- 右側の GLOBAL JOIN テーブルからすべてのカラムを読み取らないようにしました。#50721 (Nikolai Kochetov)。
実験的機能
- アナライザで並列レプリカをサポートしました。 #50441 (Raúl Marín).
- ゼロコピー レプリケーション環境でレプリカ間の負荷をより均等に分散するため、大規模なマージ/ミューテーションの実行前にランダムなスリープを追加しました。 #51282 (alesapin).
Replicatedデータベースの分片が 1 つだけで、基盤となるテーブルがReplicatedMergeTreeの場合、ALTER PARTITIONクエリとミューテーションはReplicatedデータベース経由ではレプリケートしないようにしました。 #51049 (Alexander Tokmakov).
改善
- “パーツが多すぎる” のしきい値を、現在の運用に即した形に緩和しました。長時間実行される insert クエリでバックプレッシャーを再導入しました。#50856 (Alexey Milovidov).
- CIDR ::ffff:0:0/96 (IPv4マップドアドレス) に対して、IPv6 を IPv4 アドレスに CAST できるようにしました。 #49759 (Yakov Olkhovskiy).
- MongoDB プロトコルを更新し、MongoDB 5.1 以降をサポートしました。古いプロトコル (<3.6) を使用するバージョンのサポートも維持されています。#45621、#49879 をクローズしました。#50061 (Nikolay Degterinsky) 。
- スキーマ推論で読み取るバイト数を制限するための設定
input_format_max_bytes_to_read_for_schema_inferenceを追加しました。#50577 をクローズしました。#50592 (Kruglov Pavel) 。 - スキーマ推論で設定
input_format_null_as_defaultが反映されるようにしました。 #50602 (Kruglov Pavel) 。 - 設定
input_format_csv_skip_trailing_empty_lines、input_format_tsv_skip_trailing_empty_lines、input_format_custom_skip_trailing_empty_linesにより、CSV/TSV/CustomSeparated フォーマットで末尾の空行をスキップできるようになりました (デフォルトでは無効) 。 #49315 をクローズします。 #50635 (Kruglov Pavel). - 関数 “toDateOrDefault|OrNull” と “accuateCast[OrDefault|OrNull]” が、数値引数を正しくパースするようになりました。#50709 (Dmitry Kardymon) 。
- 空白または
\tをフィールド区切り文字とする CSV をサポートし、これらの区切り文字は Spark でもサポートされています。 #50712 (KevinyhZou). number_of_mutations_to_delayとnumber_of_mutations_to_throwの設定は、現在はデフォルトで有効化されており、値はそれぞれ 500 と 1000 です。#50726 (Anton Popov) 。- ダッシュボードで欠損値が正しく表示されるよう修正しました。これにより #50831 がクローズされます。#50832 (Alexey Milovidov)。
- 関数
parseDateTimeBestEffort*およびparseDateTime64BestEffort*で、syslog のタイムスタンプフォーマットによる日付・時刻引数を使用できるようになりました。#50925 (Victor Krasnov). - clickhouse-client のコマンドラインパラメーター “—password” は、今後は 1 回だけ指定できるようになりました。#50966 (Alexey Gerasimchuck) 。
- クラスター上でのバックアップ時にパーツの同一性を確認するため、
system.partsのhash_of_all_filesを使用します。#50997 (Vitaly Baranov) 。 - システムテーブル zookeeper_connection の connected_time は接続が確立された時刻 (標準フォーマット) を示し、確立された接続セッションの継続時間 (秒) を表す session_uptime_elapsed_seconds が追加されました。 #51026 (郭小龙).
- ソースデータのchunkサイズを使用し、各スレッドで合計サイズを段階的にカウントすることで、file/S3/hdfs/urlテーブル関数の進捗バーを改善しました。*Cluster関数の進捗バーも修正しました。これにより #47250 をクローズしました。#51088 (Kruglov Pavel).
- Progressバーを改善するため、TCPプロトコルのProgressパケットに total_bytes_to_read を追加しました。 #51158 (Kruglov Pavel).
- ファイルシステムキャッシュ使用時の、ディスク上のデータパーツのチェックを改善しました。#51164 (Anton Popov) 。
- fs cache における current_elements_num が、場合によって正しくならない問題を修正しました。#51242 (Kseniia Sumarokova) 。
ビルド/テスト/パッケージングの改善
- standalone の Keeper バイナリに、keeper-client を組み込みで追加しました。 #50964 (pufit).
- 実際の LZ4 バージョンを使用するようになりました。 #50621 (Nikita Taranov).
- ClickHouse server が、致命的なエラー発生時に変更された設定の一覧を出力するようになりました。これにより #51137 は修正されました。 #51138 (Alexey Milovidov).
- clang-17 で ClickHouse をビルドできるようにしました。 #51300 (Alexey Milovidov).
- SQLancer によってトリガーされていたバグが修正されたため、SQLancer チェックは安定版と見なされるようになりました。今後、SQLancer チェックの失敗はチェック失敗ステータスとして報告されます。 #51340 (Ilya Yatsishin).
- Dockerfile 内の巨大な
RUNを、より小さな条件付きブロックに分割しました。必要なツールは同じRUNレイヤー内で必要に応じてインストールし、その後削除します。OS のアップグレードは冒頭で一度だけ行います。署名付きリポジトリの確認には最新の方法を使用します。古い docker バージョンでの問題に対処するため、ベースリポジトリを ubuntu:20.04 にダウングレードしました。golang の脆弱性に対処するため、golang のバージョンもアップグレードしました。 #51504 (Mikhail f. Shiryaev).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- 実行可能辞書の読み込みステータスが正しく報告されるようにしました #48775 (Anton Kozlov).
- スキップインデックスとプロジェクションに対するミューテーションの適切な処理 #50104 (Amos Bird).
- 移動中のパーツをクリーンアップ #50489 (vdimir).
- 集約関数での IP 型のハッシュ化に関する後方互換性を修正 #50551 (Yakov Olkhovskiy).
- TRUNCATE 後に Log ファミリーのテーブルが誤った行数を返す問題を修正 #50585 (flynn).
uniqExactの並列マージ時のバグを修正 #50590 (Nikita Taranov).- Grace Hash Joinに関する最近の変更を元に戻しました #50699 (vdimir) 。
- クエリキャッシュ:
ColumnConstからColumnVector<char8_t>への不正なキャストを修正する試み #50704 (Robert Schulze). - 不明な操作を含むログがKeeperに保存されないようにした #50751 (Antonio Andelic).
- SummingMergeTree での DateTime64 サポート #50797 (Jordi Villar) 。
- 非定数タイムゾーン向けの互換性設定を追加しました #50834 (Robert Schulze) 。
- cache エントリ内のLDAPパラメータのハッシュ化を修正 #50865 (Julian Maicher).
- 例外を発生させる代わりに、Parquet フォーマットでは String から大きな整数をパースするようフォールバック #50873 (Kruglov Pavel).
- バックアップ書き込み中にロックファイルを必要以上に頻繁に確認していた問題を修正 #50889 (Vitaly Baranov).
- read-in-order が有効な場合、projection を適用しないようにしました。 #50923 (Nikolai Kochetov).
- Azure Blob Storage イテレータのレースコンディションを修正 #50936 (SmitaRKulkarni).
CreatingSetsにおけるsort_descriptionの誤った伝播を修正 #50955 (Nikita Taranov).- Iceberg v2 のオプションのメタデータのパース処理を修正 #50974 (Kseniia Sumarokova).
- MaterializedMySQL: 空のテーブルオーバーライドでも括弧を保持 #50977 (Val Doroshchuk).
- BackupCoordinationStageSync::setError() で発生するクラッシュを修正 #51012 (Vitaly Baranov).
- ColumnLowCardinality 辞書の copy-on-write の微妙な不具合を修正 #51064 (Michael Kolupaev).
- 安全なIVを生成 #51086 (Salvatore Mesoraca) 。
- サブクエリを含む SELECT でクエリキャッシュが有効に機能しない問題を修正 #51132 (Robert Schulze).
- 定数との Nullable 比較における Set 索引の不具合を修正しました。#51205 (Nikolai Kochetov) 。
- s3 および s3Cluster 関数でのクラッシュを修正しました #51209 (Nikolay Degterinsky).
- compiled expressions によるクラッシュを修正 #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 をクローズ) 、独立したストレージとして設定できるようにしました。この変更には後方互換性がありません。ローカルオブジェクトストレージ上の cache が以前のバージョンと互換性を持たないためです。#48791 (Kseniia Sumarokova).
- 実験的機能 “in-memory data parts” は削除されました。データフォーマット自体は引き続きサポートされますが、設定は no-op となり、代わりに compact パーツ または wide パーツ が使用されます。これにより #45409 はクローズされます。#49429 (Alexey Milovidov).
- 設定
parallelize_output_from_storagesおよびinput_format_parquet_preserve_orderのデフォルト値を変更しました。これにより、ClickHouse はファイル (たとえば CSV や Parquet) から読み込む際に行の順序を並べ替えられるようになり、多くのケースでパフォーマンスが大幅に向上します。順序を保持する従来の動作に戻すには、parallelize_output_from_storages = 0,input_format_parquet_preserve_order = 1を使用してください。#49479 (Michael Kolupaev). - projections を本番利用可能な状態にしました。SELECT クエリで projections を選択するかどうかを制御するため、
optimize_use_projections設定を追加しました。設定allow_experimental_projection_optimizationは廃止されたもので、何もしません。#49719 (Alexey Milovidov). joinGetを非決定論的 (dictGetと同様) として扱うようにしました。これにより、追加設定なしで mutations 内で使用できます。#49843 (Azat Khuzhin).- “
groupArrayreturns cannot be nullable” の変更を元に戻しました (Nullable型に対するgroupArray/groupArrayLast/groupArraySampleで binary 互換性が壊れ、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 関数シグネチャと named collections でスキーマ推論が機能するようにしました。#38499 をクローズ。#45427 (attack204), Pavel Kruglov.- query cache が本番ワークロードで利用できるようになりました。#47977 (Robert Schulze)。query cache が、totals および extremes modifier を含むクエリもサポートするようになりました。#48853 (Robert Schulze)。後方互換性のため、
allow_experimental_query_cache設定は廃止されたものになりました。これは https://github.com/ClickHouse/ClickHouse/pull/47977 で削除されました。#49934 (Timur Solodovnikov)。 - 地理データ型 (
Point、Ring、Polygon、MultiPolygon) が本番利用に対応しました。#50022 (Alexey Milovidov) 。 - PostgreSQL、MySQL、MeiliSearch、SQLite のテーブルエンジンにスキーマ推論を追加。#49972 を解決。#50000 (Nikolay Degterinsky) 。
CREATE USER u IDENTIFIED BY 'p'のようなクエリで指定するパスワードタイプは、サーバー上のconfig.xmlにある設定default_password_typeに基づいて自動的に設定されるようになりました。#42915 をクローズしました。#44674 (Nikolay Degterinsky).- bcrypt パスワード認証タイプを追加。#34599 をクローズ。#44905 (Nikolay Degterinsky).
- 新しいキーワード
INTO OUTFILE 'file.txt' APPENDを追加しました。#48880 (alekar) 。 - Keeper 接続に関する情報を表示する
system.zookeeper_connectionテーブルを追加しました。#45245 (mateng915) 。 - ランダムなテーブル構造を生成する新しい関数
generateRandomStructureを追加しました。テーブル関数generateRandomと組み合わせて使用できます。#47409 (Kruglov Pavel) 。 ELSEブランチなしでCASEを使用できるようにし、より多くの型を扱えるようtransformを拡張しました。また、decimal 型が他の数値型と混在した場合に transform() が誤った結果を返していたいくつかの問題も修正しました。#48300 (Salvatore Mesoraca) 。これにより #2655 をクローズします。これにより #9596 をクローズします。これにより #38666 をクローズします。- S3テーブル向けにKMSキーを使用したサーバー側暗号化を追加し、S3ディスク向けに
header設定を追加しました。#48723 をクローズしました。#48724 (Johann Gan). - バックグラウンドタスク (マージとミューテーション) 向けに MemoryTracker を追加しました。マージとミューテーションのソフトメモリ制限を表す
merges_mutations_memory_usage_soft_limitおよびmerges_mutations_memory_usage_to_ram_ratio設定を導入しました。この制限に達すると、ClickHouse は新たなマージまたはミューテーションのタスクをスケジュールしません。あわせて、バックグラウンドタスクの現在のメモリ使用量を確認できるよう、MergesMutationsMemoryTrackingメトリクスも導入しました。#46089 の再提出です。#48774 をクローズします。#48787 (Dmitry Novik). - 関数
dotProductが配列で使用できるようになりました。#49050 (FFFFFFFHHHHHHH). - MySQL との互換性向上のため、
SHOW INDEXステートメントをサポートしました。#49158 (Robert Schulze) 。 - テーブル関数
urlに仮想カラム_fileと_pathへの対応を追加。 - テーブル関数urlのエラーメッセージを改善。 - #49231 を解決。 - #49232 を解決。 #49356 (Ziyi Tan). - users.xml ファイルに
grantsフィールドを追加し、ユーザーに付与する権限を指定できるようにしました。#49381 (pufit). - Grace Hash Join アルゴリズムを使用した full/right join のサポートを追加しました。 #49483 (lgbo).
WITH FILL修飾子では、ソートプレフィックスごとに補完が行われます。use_with_fill_by_sorting_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 tree dictionaries 向けに、
dictGetAll関数が複数の一致結果の値を Array として返せるようになりました。#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). - テーブル、データベース、テーブル関数、Dictionaries のシークレットを表示するためのサーバーおよびフォーマット設定
display_secrets_in_show_and_selectを追加しました。どのユーザーがシークレットを表示できるかを制御する権限displaySecretsInShowAndSelectを追加しました。#46528 (Mike Kot). - データベースに属するすべてのテーブルに対して、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).
- 通常の読み取りより少ないグラニュールしか読まない場合にのみ、集約プロジェクションを使用してください。これは、クエリがテーブルの PK にはヒットしても、プロジェクションにはヒットしない場合に有効です。#49150 を修正しました。#49417 (Nikolai Kochetov).
- 何も挿入されない場合、
ANYハッシュ結合でブロックを保存しない。#48633 (vdimir) 。 - JIT コンパイル時の aggregate combinator
-Ifの不具合を修正し、aggregate functions で JIT コンパイルを有効にしました。#48120 をクローズしました。#49083 (Igor Nikonov) 。 - リモートテーブルからの読み取りでは、task stealing が機能するように、part 全体を読み取るのではなく、より小さなタスクを使用します * task size は、読み取るカラムのサイズによって決まります * S3 からの読み取りでは常に 1mb のバッファを使用します * cache segments の境界は 1mb 単位に揃えられているため、小さなタスクでも十分なサイズを確保できます。これにより断片化の防止にもつながります。 #49287 (Nikita Taranov).
- 次の設定が導入されました: - バックグラウンド処理で使用するメモリ量を制限する
merge_max_block_size_bytes。 - 垂直マージを有効にするための追加条件を導入するvertical_merge_algorithm_min_bytes_to_activate。 #49313 (Nikita Mikhaylov). - ローカルfilesystemから読み込む際の読み取りバッファのデフォルトサイズが、やや適切な値に変更されました。あわせて、2つの新しい設定
max_read_buffer_size_local_fsとmax_read_buffer_size_remote_fsが導入されました。#49321 (Nikita Taranov). SPARSE_HASHED/HASHED辞書のメモリ使用量と速度を改善 (たとえば、SPARSE_HASHEDのメモリ消費量は 2.6 分の 1 になり、速度は約 2 倍に向上) 。#49380 (Azat Khuzhin).- 適切な場合は
LowCardinalityを適用して、system.query_logおよびsystem.query_thread_logテーブルを最適化しました。これらのテーブルに対するクエリは、より高速に実行されます。#49530 (Alexey Milovidov). - ローカルの
Parquetファイル読み取り時のパフォーマンスが向上 (並列読み取りによる) 。 #49539 (Michael Kolupaev). - 特定の条件下で、
RIGHT/FULL JOINのパフォーマンスを最大 2 倍改善しました。特に、小さな左テーブルと大きな右テーブルを結合する場合に効果的です。#49585 (lgbo). - Rust で LTO を有効にし、BLAKE3 の性能を 11% 向上させました。#49600 (Azat Khuzhin) 。これで C++ と同等の性能になりました。
system.opentelemetry_span_logの構造を最適化しました。適切な箇所ではLowCardinalityを使用しています。このテーブルは全体としてはあまり出来がよいとは言えません (一般的な属性に対しても Map データ型を使っているため) が、多少は改善されています。#49647 (Alexey Milovidov) 。grace_hashjoin で hash table のサイズを事前に確保するようにしました。#49816 (lgbo).uniqExactIfstate の並列マージ。#49885 をクローズ。#50285 (flynn) 。- Keeper の改善: Keeper に
CheckNotExistsリクエストを追加し、レプリケートテーブルのパフォーマンスを向上させました。#48897 (Antonio Andelic) 。 - Keeper のパフォーマンス改善: 処理中に同じリクエストを 2 回シリアライズしないようにしました。大きなリクエストのデシリアライズ結果を cache します。新しい協調設定
min_request_size_for_cacheで制御されます。#49004 (Antonio Andelic). - マージするパーツを選択する際、多くのパーティションにマージ対象がない場合の ZooKeeper
Listリクエスト数を削減しました。#49637 (Alexander Tokmakov) 。 - FS cache のロック処理を再設計しました #44985 (Kseniia Sumarokova) 。
- 単純なcount最適化が可能な場合は、純粋な並列レプリカを無効化しました。 #50594 (Raúl Marín).
- Iceberg のスキーマ推論では、すべてのキーに対して HEAD リクエストを送るのではなく、データの読み取りに使用するキーに対してのみ送るようにしました。#50203 (Kruglov Pavel) 。
enable_memory_bound_merging_of_aggregation_results設定はデフォルトで有効です。#50319 (Nikita Taranov).
実験的機能
DEFLATE_QPLcodec で必要な最小 SIMD バージョンを SSE 4.2 に引き下げました。qpl のドキュメント変更 - Intel® QPL は、実行時カーネルディスパッチャーと cpuid チェックを利用して、使用可能な最適の実装 (sse/avx2/avx512) を選択します。また、最新の upstream qpl に合わせて、ClickHouse での qpl ビルド用 cmakefile を再構成しました。#49811 (jasperzhu).- 純粋な並列レプリカで JOIN を実行するための初期サポートを追加しました。#49544 (Raúl Marín).
- “ゼロコピー レプリケーション” での
Outdatedパーツ削除の並列性を強化しました。#49630 (Alexander Tokmakov). - 並列レプリカ: 1) 非レプリケートストレージで、設定
parallel_replicas_for_non_replicated_merge_treeが無効な状態で並列レプリカを使用した際に発生していたエラーNOT_FOUND_COLUMN_IN_BLOCKを修正しました。2)allow_experimental_parallel_reading_from_replicasには 0、1、2 の 3 つの設定可能な値があります。0 - 無効、1 - 有効。失敗時は (FINAL または JOIN の場合に) 黙って無効化します。2 - 有効。失敗時は例外をスローします。3) SELECT クエリで FINAL modifier が使用され、並列レプリカが有効な場合、allow_experimental_parallel_reading_from_replicasが 1 に設定されていれば ClickHouse はそれらを無効化しようとし、それ以外では例外をスローします。#50195 (Nikita Mikhaylov). - 並列レプリカが有効な場合、利用できないサーバーは常にスキップされるようになりました (この動作は設定
skip_unavailable_shardsで制御され、デフォルトで有効であり、無効化のみ可能です) 。これにより #48565 をクローズします。#50293 (Nikita Mikhaylov).
改善
BACKUPコマンドは、バックアップの作成時に暗号化ディスク上のデータを復号しません。代わりに、データは暗号化されたままバックアップに保存されます。このようなバックアップは、同じ (または追加された) 暗号化キーのリストを持つ暗号化ディスクにのみ復元できます。#48896 (Vitaly Baranov).- ATTACH PARTITION FROM および REPLACE PARTITION FROM の FROM 句で、一時テーブルを使用できるようになりました。#49436 (Roman Vasin).
MergeTreeテーブル向けに設定async_insertが追加されました。これはクエリレベルの設定async_insertと同じ意味を持ち、特定のテーブルに対して非同期挿入を有効にします。注意:clickhouse-clientからの挿入クエリには効果がないため、その場合はクエリレベルの設定を使用してください。#49122 (Anton Popov).- クォータ作成ステートメントのパラメータで、サイズ接尾辞をサポート。#49087 (Eridanus).
first_valueとlast_valueが NULL を受け付けるように拡張しました。#46467 (lgbo).extractKeyValuePairsのaliasとしてstr_to_mapとmapFromStringを追加。https://github.com/clickhouse/clickhouse/issues/47185 をクローズ。#49466 (flynn) 。- メモリ使用量と使用可能量に関する非同期メトリクス向けに、CGroup version 2 のサポートを追加しました。これにより #37983 がクローズされます。#45999 (sichenzhao).
- cluster table function は、利用できない分片を常にスキップするようにしました。close #46314. #46765 (zk_kiger).
- CSV file のヘッダーに空のカラムを含めることができるようになりました。#47496 (你不要过来啊).
- Google Cloud Storage 向けの S3 互換テーブル関数
gcsを追加しました。ossおよびcosn関数と同様、これはs3テーブル関数の単なるエイリアスで、新機能が追加されるわけではありません。#47815 (Kuba Kaflik) 。 - S3で厳密なパートサイズを使用する機能を追加しました (CloudFlare R2 S3 Storageとの互換性) 。 #48492 (Azat Khuzhin).
system.clustersに、Replicatedデータベースのレプリカ情報を表す新しいカラムdatabase_shard_name、database_replica_name、is_activeを追加しました。SYSTEM DROP DATABASE REPLICAクエリに、オプションのFROM SHARD句を追加しました。#48548 (Alexander Tokmakov) 。- system.replicas に新しいカラム
zookeeper_nameを追加し、レプリケートテーブルのメタデータがどの (補助) zookeeperクラスターに保存されているかを示すようにしました。#48549 (cangyin) 。 IN演算子でDateとDate32を比較できるようになりました。#48736 をクローズします。#48806 (flynn).HDFSの消去符号化のサポート、著者: @M1eyu2018, @tomscut. #48833 (M1eyu).- 補助 ZooKeeper クラスターからの SYSTEM DROP REPLICA を実装。 #48931 に関連する可能性があります。 #48932 (wangxiaobo).
- MongoDB に Array データ型を追加しました。#48598 をクローズしました。#48983 (Nikolay Degterinsky).
- テーブルへの
Intervalデータ型の保存をサポートしました。 #49085 (larryluogit). - 明示的なウィンドウフレームの定義がなくても
ntileウィンドウ関数を使用できるようにしました:ntile(3) OVER (ORDER BY a)。#46763 をクローズしました。#49093 (vdimir). - テーブルに未完了のミューテーションがすでに多数ある場合に、ミューテーションを作成する
ALTERクエリ (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). - 埋め込みの例を
system.functionsの新しいフィールドexampleにコピーし、フィールドdescriptionを補足します。 #49222 (Dan Roscigno) 。 - MongoDB Dictionary の接続オプションを有効化しました。例:
xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source>### ユーザー向け変更についてのドキュメント項目。 #49225 (MikhailBurdukov). kolmogorovSmirnovTestの計算メソッドasympの alias として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経由で呼び出された際に、適切な行グループサイズを使用するようになりました。 #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). - リモートfilesystem上のサイズ 0 のオブジェクトを読み取れるようにしました (空のファイルはバックアップされないため、メタデータファイル内のブロブ数が 0 になる場合があるためです) 。#49480 をクローズしました。#49519 (Kseniia Sumarokova) 。
ThreadGroupがデタッチされた後に、スレッドの MemoryTracker をtotal_memory_trackerに紐付けます。#49527 (Dmitry Novik) 。- クエリ内で同じクエリパラメータが複数回使用された場合のパラメーター化ビューの不具合を修正しました。 #49556 (Azat Khuzhin).
- クエリのコンテキストで、最後に送信された ProfileEvents スナップショット用に割り当てられていたメモリを解放するようにしました。フォローアップ #47564。 #49561 (Dmitry Novik).
- 関数 “makeDate” で、MySQL互換のオーバーロード (年と年内通算日を引数に取る形式) が利用可能になりました。#49603 (Robert Schulze).
RegExpTreeDictionaryでdictionaryテーブル関数をサポートしました。#49666 (Han Fei) 。- 重み付きの公平なIOスケジューリングポリシーを追加しました。さらに、サーバーを再起動せずに実行時にIOスケジューリング階層を更新できる動的リソースマネージャーを追加しました。#49671 (Sergei Trifonov).
- GCS への multipart upload の後に compose request を追加しました。これにより、multipart upload でアップロードされたオブジェクトに対して copy operation を利用できるようになります。サイズの異なるパートで作成されたオブジェクトでは compose request が失敗する可能性があるため、
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 と関数の読み込みを許可しました。以前のバージョンでは、
dictionaries_configまたはuser_defined_executable_functions_configは*.xmlファイルを想定していたため、設定ファイルを編集する必要がありました。#49812 (Alexey Milovidov) 。 - Kafka table engine でエイリアスカラムが使用可能になりました。#49824 (Aleksandr Musorin) 。
extractKeyValuePairsが生成するペアの最大数を制限する設定を追加しました。これは、メモリの過剰な使用を防ぐための安全策です。#49836 (Arthur Passos).IN演算子の引数が単一要素のタプルとなる (まれな) ケースへの対応を追加しました。#49844 (MikhailBurdukov).bitHammingDistance関数でStringおよびFixedStringデータ型がサポートされました。#48827 をクローズしました。#49858 (flynn)。- OS X 上のクライアントで、timeout のリセットに関するエラーを修正しました。#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). - Dictionaries のメモリ使用量は server メモリのみに計上する。 #49995 (Azat Khuzhin).
- server で、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 を渡せるようにしました。複数のコンピュートグループをサポートするために、invisible 設定を追加しました。クラスターとしてのコンピュートグループは、他のコンピュートグループからは見えません。 #50186 (Yangkuan Liu).
LIMIT nを指定できる場合でも、PostgreSQL がすべてのデータを読み込んでしまう問題を修正しました。#50187 (Kseniia Sumarokova) 。- サブクエリを含むクエリ用の新しいプロファイルイベント (
QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries) を追加しました。#50204 (Azat Khuzhin) 。 - users.xmlファイルにrolesフィールドを追加し、設定ファイル経由で権限が付与されたロールを指定できるようにしました。#50278 (pufit).
- AsynchronousMetrics に
CGroupCpuCfsPeriodとCGroupCpuCfsQuotaを追加。 - サーバー起動時に cgroup v2 のメモリ制限を考慮。#50379 (alekar). - SIGINT と同様に動作する SIGQUIT 用のシグナルハンドラーを追加しました。#50298 をクローズしました。#50435 (Nikolay Degterinsky).
- オブジェクトのサイズが大きくて JSON のパースに失敗した場合、デバッグできるように最後の位置を出力するようにしました。 #50474 (Valentin Alexeev).
- 固定サイズでない Decimal をサポートしました。#49130 をクローズしました。#50586 (Kruglov Pavel) 。
ビルド/テスト/パッケージングの改善
- 新しく改良された
keeper-bench。YAML/XMLファイルですべてをカスタマイズできます: - リクエストジェネレーター - 各種リクエストジェネレーターごとに、固有のフィールドセットを指定できます -multiキーの下で同様に定義するだけで、マルチリクエストを生成できます - multi 内の各リクエストまたはサブリクエストには、分布を制御するためのweightフィールドを定義できます - テスト実行時にセットアップが必要なツリーを定義できます - ホストは、すべてのタイムアウトをカスタマイズ可能な形で定義でき、各ホストについて生成するセッション数も制御できます -min_valueおよびmax_valueフィールドで定義された整数は、乱数生成器として扱われます。#48547 (Antonio Andelic). - macos では Io_uring はサポートされていないため、ローカルでテストを実行する際は、断続的な失敗を避けるためにこれを選択しないでください。 #49250 (Frank Chen).
- テスト用の名前付きフォールトインジェクションに対応しました。 #49361 (Han Fei).
prctl(process control) syscall が利用できない AWS Lambda などの OS でも ClickHouse を実行できるようになりました。#49538 (Alexey Milovidov) 。- qpl における contrib/isa-l と isa-l のビルド競合の問題を修正しました 49296。 #49584 (jasperzhu).
- Utilities は、デフォルトではなく、明示的に指定した場合 (“-DENABLE_UTILS=1”) にのみビルドされるようになりました。これにより、一般的な開発ビルドでのリンク時間が短縮されます。#49620 (Robert Schulze).
- 将来誤って削除されるのを防ぐため、idxd-config のビルド記述を別の CMake ファイルに分離した。#49651 (jasperzhu).
- master で有効化されたアナライザを使った CI チェックを追加しました。フォローアップは #49562 を参照してください。#49668 (Dmitry Novik)。
- LLVM/clang 16 に移行しました。 #49678 (Azat Khuzhin) 。
- clang-17 で ClickHouse をビルドできるようになりました。 #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
- ClickHouse は、ほかの cmake プロジェクトにより組み込みやすくなりました。#49991 (Amos Bird) 。 (ただし、これは強く非推奨とされています - Alexey Milovidov) 。
- #47151 後に発生していた QEMU の不自然な追加ログを修正しました。https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless_tests__release__databasereplicated__[3_4].html を参照してください。#50442 (Mikhail f. Shiryaev) 。
- ClickHouse が Linux RISC-V 6.1.22 で動作するようになりました。これにより #50456 が解決されました。#50457 (Alexey Milovidov) 。
- 内部 protobuf を v3.18 に更新 (誤検知だった CVE-2022-1941 に対処) 。#50400 (Robert Schulze) 。
- 内部 libxml2 を v2.10.4 に更新しました (誤報だった CVE-2023-28484 および CVE-2023-29469 に対応) 。#50402 (Robert Schulze) 。
- c-ares を v1.19.1 に更新 (CVE-2023-32067、CVE-2023-31130、CVE-2023-31147 はいずれも誤り) 。#50403 (Robert Schulze) 。
- libgsasl に関する誤った CVE-2022-2469 を修正しました。#50404 (Robert Schulze).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- ActionsDAG: 誤った最適化を修正 #47584 (Salvatore Mesoraca).
- Keeper で同時実行されるスナップショットを正しく処理する #48466 (Antonio Andelic) 。
- MergeTreeMarksLoader が保持するのは、DataPartStorage ではなく DataPart です #48515 (SmitaRKulkarni) 。
- Sequence state の不具合修正 #48603 (Ilya Golshtein).
- 以前の失敗時における Back/Restore の並行性チェック #48726 (SmitaRKulkarni).
- 存在しない ZK path を持つテーブルを Attach しても、ReadonlyReplica メトリクスが増加しない問題を修正 #48954 (wangxiaobo).
- 一部の箇所で、未捕捉の例外により
terminate calledが発生する可能性がある問題を修正 #49112 (Kruglov Pavel). - 複数の StorageJoin を含むクエリで発生する「key not found」エラーを修正 #49137 (vdimir).
- Nullableな主キーの使用時に誤ったクエリ結果が返される問題を修正 #49172 (Duc Canh Le).
- ビッグエンディアン環境での reinterpretAs*() を修正 #49198 (Suzy Wang).
- (実験的な zero-copy レプリケーション) zero-copy パーツのロックをよりアトミックに実行 #49211 (alesapin).
- Outdated parts の読み込み時の競合状態を修正 #49223 (Alexander Tokmakov).
- すべてのキー値がNULLである場合や、グループでロールアップを使用した場合に誤った結果を返す問題を修正 #49282 (Shuai li).
- 分片を持つ HASHED 辞書の load_factor 計算を修正 #49319 (Azat Khuzhin).
- aliasカラムに圧縮 CODEC を設定できないようにしました #49363 (Timur Solodovnikov).
- 既存のpartディレクトリの削除時のバグを修正 #49365 (alesapin).
- HMAC 使用時の GCS の問題を適切に修正 #49390 (Antonio Andelic).
- remote() から読み取る際、サブクエリの Set が構築されない場合に発生するファズバグを修正しました #49425 (Alexander Gololobov).
shutdown_wait_unfinished_queriesの意味を反転 #49427 (Konstantin Bogdanov)。- (Experimental zero-copy レプリケーション) ゼロコピーに関する別のバグを修正 #49473 (alesapin).
- postgres データベースの設定を修正 #49481 (Mal Curtis).
s3Clusterの引数を適切に処理する #49490 (Antonio Andelic).- TraceCollector のデストラクタのバグを修正しました。 #49508 (Yakov Olkhovskiy).
- 短いシークで AsynchronousReadIndirectBufferFromRemoteFS が動作しなくなる不具合を修正 #49525 (Michael Kolupaev).
- Dictionariesの読み込み順を修正 #49560 (Alexander Tokmakov).
- Object(‘json’) カラムのデータ型変更を禁止 #49563 (Nikolay Degterinsky).
- ストレステストの修正 (Logical error: Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
- DISTINCT の不具合を修正 #49628 (Alexey Milovidov).
- 修正: ソート対象でないカラムにゼロ値がある場合の、順序どおりのDISTINCT #49636 (Igor Nikonov).
- fuzzerを用いたUBSanで見つかったbig integersの単発のerrorを修正しました #49645 (Alexey Milovidov).
- 再起動後にスパースカラムを読み取れない問題を修正 #49660 (Anton Popov).
- fibers使用時の SpanHolder::finish() 内のアサートを修正 #49673 (Kruglov Pavel).
- 短絡評価関数およびスパースな引数を持つミューテーションを修正 #49716 (Anton Popov).
- 増分バックアップへの追加ファイルの書き込みを修正 #49725 (Vitaly Baranov).
- Object カラムを持つテーブルで、論理削除 mutation の実行中に発生する “There is no physical column _row_exists in table” エラーを修正しました。 #49737 (Alexander Gololobov).
- randomStringUTF8(奇数長) の msan の問題を修正 #49750 (Robert Schulze).
- 集約関数 kolmogorovSmirnovTest の不具合を修正 #49768 (FFFFFFFHHHHHHH).
- ネイティブプロトコルにおける設定の別名を修正 #49776 (Azat Khuzhin).
- 単一引数のタプル配列に対する
arrayMapを修正 #49789 (Anton Popov). - クエリごとの IO/バックアップのスロットリング設定を修正 #49797 (Azat Khuzhin).
- profile 定義での NULL 設定を修正 #49831 (Vitaly Baranov).
- プロジェクションおよび aggregate_functions_null_for_empty 設定に関するバグ (query_plan_optimize_projection 用) を修正しました #49873 (Amos Bird).
- 再起動後の Distributed 非同期 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 のパース時に発生する可能性がある Logical error を修正 #49960 (Kruglov Pavel).
- より互換性の高いParquetファイルを生成するため、設定
output_format_parquet_compliant_nested_typesを追加 #50001 (Michael Kolupaev). - ストレステスト “Not enough space to add …” における論理エラーを修正しました #50021 (Kseniia Sumarokova).
ReplicatedMergeTreeの attach スレッドでテーブルを起動する際のデッドロックを回避 #50026 (Antonio Andelic).- fibers 使用時の SpanHolder::finish() におけるアサーションを修正 (再試行 2) #50034 (Kruglov Pavel).
- DDL OpenTelemetry コンテキストのシリアライゼーションに、適切なエスケープ処理を追加 #50045 (Azat Khuzhin).
- 破損した projection parts の報告処理を修正しました #50052 (Amos Bird).
- JITコンパイルでの NaN に対する not equals の修正 #50056 (Maksim Kita).
- 引数のない Replicated database でクラッシュする問題を修正 #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 / AND STDOUT) および WATCH EVENTS における UB を修正 #50216 (Azat Khuzhin).
- CustomSeparatedIgnoreSpaces フォーマットで行末のスペースをスキップしてしまう問題を修正 #50224 (Kruglov Pavel).
- Icebergメタデータのパースを修正 #50232 (Kseniia Sumarokova).
- WITH句内のネストされた Distributed SELECT を修正 #50234 (Azat Khuzhin).
- keyed siphash の msan の問題を修正 #50245 (Robert Schulze).
- 非ブロッキングモード時のPocoソケットの不具合を修正し、実際に非ブロッキングなソケットを使用するようにしました #50252 (Kruglov Pavel) 。
- バックアップ内のエントリのチェックサム計算を修正 #50264 (Vitaly Baranov).
- 比較関数におけるNaNの修正 #50287 (Maksim Kita).
- JIT集約におけるNullableキーの不具合修正 #50291 (Maksim Kita).
- 空のArrowまたはParquet出力の書き込み時にclickhouse-localがクラッシュする問題を修正 #50328 (Michael Kolupaev).
- Pool::Entry::disconnect() の呼び出し時に発生するクラッシュを修正 #50334 (Val Doroshchuk).
- ディレクトリロックの保持時間を長くすることで、part のフェッチを改善しました #50339 (SmitaRKulkarni).
- 両方の引数が定数の場合の bitShift* 関数の不具合を修正 #50343 (Kruglov Pavel).
- リクエストの前処理中に例外が発生した際のKeeperのデッドロックを修正しました。 #50387 (frinkr).
- const整数値のハッシュ処理を修正 #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 table function での 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 (李扬)。 SHOW COLUMNSステートメントを追加しました。これは system.columns から抽出した要約情報を表示します。#48017 (Robert Schulze).SYSTEM SYNC REPLICAクエリにLIGHTWEIGHTおよびPULL修飾子を追加しました。LIGHTWEIGHTバージョンでは fetches と drop-ranges のみを待機し、merges と mutations は無視されます。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 (李扬). - 改行区切りで4スペースのインデントを付けた整形JSONを出力する
PrettyJSONEachRowフォーマットを追加しました。#48898 (Kruglov Pavel) 。 - Parquetファイルのメタデータを読み取るための
ParquetMetadata入力フォーマットを追加しました。#48911 (Kruglov Pavel) 。 - 文字列からキー・バリュー・ペアを抽出する
extractKeyValuePairs関数を追加しました。入力文字列にはノイズが含まれていてもかまいません (つまり、ログファイルなどのように、キー・バリュー・ペア形式として 100% 整形されている必要はありません) 。このアルゴリズムは、関数に渡された引数に一致するキー・バリュー・ペアを探します。現時点で、この関数は次の引数を受け付けます:data_column(必須) 、key_value_pair_delimiter(デフォルトは:) 、pair_delimiters(デフォルトは\space \, \;) 、quoting_character(デフォルトは二重引用符) 。#43606 (Arthur Passos) 。 - replaceOne()、replaceAll()、replaceRegexpOne()、replaceRegexpAll() 関数は、非定数の pattern 引数および replacement 引数でも呼び出せるようになりました。#46589 (Robert Schulze) 。
Map型のカラムを扱うための関数mapConcat、mapSort、mapExistsを追加しました。#48071 (Anton Popov).
パフォーマンス改善
Parquetフォーマットのファイル読み取りが大幅に高速化されました。IO とデコードが並列化され (max_threads設定で制御) 、必要なデータ範囲のみを読み取るようになりました。#47964 (Michael Kolupaev).ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table)のように IN (サブクエリ) を含む mutation を実行する場合、テーブルtに複数のパーツがあると、各パーツごとにサブクエリSELECT id FROM huge_table用の Set がメモリ上に構築されます。パーツ数が多い場合、これにより大量のメモリ (OOM の原因になる可能性があります) と CPU を消費することがありました。この問題への対策として、mutation タスクが現在構築中の Set を保持する短命な cache が導入されました。同じ mutation の別タスクが同時実行される場合、そのタスクは cache 内の Set を参照し、構築完了を待って再利用できます。#46835 (Alexander Gololobov).ALTER TABLEクエリの適用時は、必要な場合にのみ依存関係をチェックするようになりました。#48062 (Raúl Marín).- 関数
mapUpdateを最適化しました。#48118 (Anton Popov). - ローカルレプリカへの内部クエリが明示的に送信され、そのデータはループバックインターフェイス経由で受信されるようになりました。
prefer_localhost_replica設定は並列レプリカでは考慮されません。これはスケジューリングを改善するために必要であり、コードもより明確になります。つまり、イニシエーターは読み取りプロセスの調整と結果のマージのみを担当し、すべての二次クエリがデータを読み取る間、継続的にリクエストへ応答します。注意: ループバックインターフェイスの使用自体はそれほど高性能ではありませんが、これを使わないと一部のレプリカにタスクが回らず飢餓状態となり、結果としてクエリ実行がさらに遅くなり、利用可能なリソースを十分に活用できなくなる可能性があります。コーディネーターの初期化はさらに遅延されるようになりました。すべての受信リクエストには読み取りアルゴリズムに関する情報が含まれており、最初のリクエストを受け取った時点で、その情報を使ってコーディネーターを初期化します。いずれかのレプリカが異なるアルゴリズムで読み取ろうとした場合は例外が throw され、クエリは中止されます。#48246 (Nikita Mikhaylov). - サブクエリを伴う
INclause の右辺の Set がスキップ索引の解析にのみ使われ、かつ設定 (use_skip_indexes=0) によってそれらが無効化されている場合は、その Set を構築しないようにしました。以前は、これがクエリ性能に影響する可能性がありました。#48299 (Anton Popov). FROM file(...)の読み取り直後にクエリ処理が並列化されるようになりました。#38755 に関連します。#48525 (Igor Nikonov). また、任意の data source からの読み取り直後にもクエリ処理が並列化されるようになりました。影響を受ける data source は、主に table functionurl、fileのようなシンプルなものや外部ストレージです。#48727 (Igor Nikonov). これは、デフォルトでは有効になっていないparallelize_output_from_storages設定で制御されます。- ThreadPool の mutex 競合を低減しました (非常に多数の小さな job がある場合に性能向上が見込まれます) 。#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 レプリケーション (実験的機能) を実装しました。#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の誤った読み取りを修正しました。以前は読み取るデータの選択が誤っていたため、小規模なテーブルしか正しく読み取れませんでした - これらのエンジンが変更されたデータの更新を取り込めるようにしました (以前は state がテーブル作成時に設定されていました) - spark を使用したIceberg/DeltaLake/Hudiの適切なテストを追加しました。 #47307 (Kseniia Sumarokova). - ソケットへの非同期接続と非同期書き込みを追加しました。分片をまたぐ接続の確立と、クエリ/外部テーブルの送信を非同期化しました。fibers を用いてコードをリファクタリングしました。#46931 をクローズしました。この PR の後、
connect_timeout_with_failover_msのデフォルト値を引き上げられるようになります (https://github.com/ClickHouse/ClickHouse/issues/5188)。[#47229](https://github.com/ClickHouse/ClickHouse/pull/47229) (Kruglov Pavel). zookeeperの代替として、設定セクションkeeper/keeper_serverをサポートしました。#34766、#34767 をクローズしました。#35113 (李扬) 。- ClickHouse テーブルをソースとする Dictionary の
named_collectionsで、secure フラグを設定できるようになりました。#38450 に対応しています。#46323 (Ilya Golshtein). bitCount関数でFixedStringおよびStringデータ型がサポートされるようになりました。#49044 (flynn) 。- Backupクエリで[Zoo]Keeperを使用するすべての操作に対して、設定可能な再試行を追加しました。#47224 (Nikita Mikhaylov) 。
- S3 の
use_environment_credentialsをデフォルトで有効にし、認証情報プロバイダーチェーン全体がデフォルトで構築されるようにしました。 #47397 (Antonio Andelic). - 現在、JSON_VALUE 関数は Spark の get_json_object 関数に似ており、‘$.key’ のようなパスを使って JSON 文字列から値を取得できます。ただし、いくつか違いがあります。- 1. Spark の get_json_object はパスが存在しない場合に null を返しますが、JSON_VALUE は空文字列を返します。- 2. Spark の get_json_object は JSON object/array value などの複合型の値を返しますが、JSON_VALUE は空文字列を返します。#47494 (KevinyhZou).
use_structure_from_insertion_table_in_table_functionsについて、table function への insert テーブル構造の伝播がより柔軟になりました。名前のマッピングと仮想カラムの使用に関する不具合を修正しました。‘auto’ 設定は不要になりました。#47962 (Yakov Olkhovskiy).- クエリが強制終了された場合、または制限を超えた場合は、Keeper への接続の再試行を継続しないようにしました。 #47985 (Raúl Marín).
BSONEachRowでEnumの入出力をサポートし、すべての map キー型を許可するとともに、出力時の余分な計算を回避しました。#48122 (Kruglov Pavel) 。ORC/Arrow/Parquetフォーマットで対応する ClickHouse 型を拡充しました: Enum(8|16)、(U)Int(128|256)、Decimal256 (ORC のみ) 、Int32 値からの IPv4 の読み取りに対応し (ORC は IPv4 を Int32 として出力するため、従来は読み戻せませんでした) 、ORCのバイナリデータから Nullable(IPv6) を読み取る際の不具合を修正しました。#48126 (Kruglov Pavel) 。- テーブル
system.storage_policiesにperform_ttl_move_on_insertとload_balancingのカラムを追加し、volume_typeカラムの型をEnum8に変更しました。 #48167 (lizhuoyu5). - 一時テーブルやシステムテーブル/データベースを含む、すべてのテーブルとデータベースをバックアップする
BACKUP ALLコマンドのサポートが追加されました。#48189 (Vitaly Baranov) 。 - 関数 mapFromArrays は、入力として
Map型をサポートするようになりました。#48207 (李扬). - 一部の SHOW PROCESSLIST の出力がソートされるようになりました。#48241 (Robert Schulze) 。
- リモート IO/ローカル IO/BACKUP に対するクエリ単位およびサーバー単位のスロットリング (サーバー設定:
max_remote_read_network_bandwidth_for_server,max_remote_write_network_bandwidth_for_server,max_local_read_bandwidth_for_server,max_local_write_bandwidth_for_server,max_backup_bandwidth_for_server、設定:max_remote_read_network_bandwidth,max_remote_write_network_bandwidth,max_local_read_bandwidth,max_local_write_bandwidth,max_backup_bandwidth) 。 #48242 (Azat Khuzhin) 。 CapnProtoフォーマットで、Map、(U)Int(128|256)、Decimal(128|256) など、より多くの型をサポート。入出力時の整数変換を許可。 #48257 (Kruglov Pavel).- 通常の動作では CURRENT_WRITE_BUFFER_IS_EXHAUSTED を発生させないようにしました。#48288 (Raúl Marín) 。
KeeperMapテーブルに対して行われる操作に追加の保証を適用する新しい設定keeper_map_strict_modeを追加しました。#48293 (Antonio Andelic) 。- シンプルなDictionaryの主キーの型がネイティブの符号なし整数型かどうかをチェックするようになりました。互換性のため、設定
check_dictionary_primary_keyを追加しました (チェックを無効にするにはcheck_dictionary_primary_key =falseを設定します) 。 #48335 (lizhuoyu5). KeeperMapでは不要なため、mutation はレプリケートしないようにしました。#48354 (Antonio Andelic) 。- Protobufフォーマットで、無名のTupleをネストされたMessageとして書き込み・読み取りできるようになりました。Tupleの要素とMessageのフィールドは、位置によって対応付けられます。 #48390 (Kruglov Pavel).
- 新しいプランナーで、
additional_table_filtersおよびadditional_result_filter設定をサポートしました。あわせて、additional_result_filterのドキュメント項目も追加しました。#48405 (Dmitry Novik) 。 parseDateTimeがフォーマット文字列 ‘%f’ (秒の小数部) に対応しました。#48420 (Robert Schulze) 。- formatDateTime() のフォーマット文字列 “%f” は、フォーマット対象の値に小数秒が含まれない場合、“000000” を出力するようになりました。以前の動作 (0 を 1 桁だけ出力する動作) は、設定 “formatdatetime_f_prints_single_zero = 1” で復元できます。#48422 (Robert Schulze).
- KeeperMap では DELETE と TRUNCATE をレプリケートしないようにしました。#48434 (Antonio Andelic) 。
- generateRandom 関数で、有効な Decimal 型および Bool 型を生成できるようにしました。#48436 (Kruglov Pavel) 。
SELECT a, b, c, FROM tableのように、SELECT クエリの式リストで末尾のカンマを許可しました。#37802 を修正しました。#48438 (Nikolay Degterinsky).--userおよび--passwordクライアントパラメータで、CLICKHOUSE_USERとCLICKHOUSE_PASSWORD環境変数を上書きできるようにしました。#38909 をクローズしました。#48440 (Nikolay Degterinsky).- 再試行可能なエラーが発生した場合に、
MergeTreeテーブルのデータパーツの読み込み時に再試行するようにしました。#48442 (Anton Popov) 。 arrayMin、arrayMax、arrayDifference関数でDate、Date32、DateTime、DateTime64データ型をサポートしました。#21645 をクローズしました。#48445 (Nikolay Degterinsky) 。{server_uuid}マクロのサポートを追加しました。これは、実行時に新しいレプリカが継続的に追加・削除されるオートスケーリングされたクラスターでレプリカを識別するのに役立ちます。これにより #48554 がクローズされました。#48563 (Alexey Milovidov)。- インストールスクリプトは、可能な場合はコピーではなくハードリンクを作成します。 #48578 (Alexey Milovidov).
SHOW CREATE TABLEと同じ意味を持つSHOW TABLE構文をサポートしました。#48580 をクローズ。#48591 (flynn).- HTTP 一時バッファーが、仮想ファイルシステムキャッシュからデータを追い出しながら動作できるようになりました。#48664 (Vladimir C).
CREATE AS SELECTでスキーマ推論が機能するようになりました。#47599 をクローズしました。#48679 (flynn).- 1つの
MUTATE_PARTエントリあたりのmutationコマンド数を制限できるReplicatedMergeTree用の設定replicated_max_mutations_in_one_entryが追加されました (デフォルトは10000) 。 #48731 (Alexander Tokmakov). - AggregateFunction 型では、未使用のアリーナ領域のバイト数を
read_bytesに含めないようにしました。#48745 (Raúl Marín). - MySQL Dictionary ソース + 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).
- ClickHouse が LXC 内で実行され、LXCFS が使用されるまれなケース向けに、わずかな改善を実装しました。LXCFS には問題があり、
/proc内のファイルを読み取る際に、“Transport endpoint is not connected” というエラーを返すことがあります。このエラーは ClickHouse のサーバーログに正しく記録されていました。加えて、この問題の回避策としてファイルを再オープンするようにしました。ごく小さな変更です。#48922 (Real). - プリフェッチのメモリ使用量の算定を改善。CI でプリフェッチ設定をランダム化。#48973 (Kseniia Sumarokova).
- GCS 上でのネイティブコピー操作において、ヘッダーが正しく設定されるようになりました。#48981 (Antonio Andelic).
- コマンドラインで設定名を指定する際、アンダースコアの代わりにダッシュを使えるようになりました。たとえば、
--max_threadsではなく--max-threadsを指定できます。さらに、--の代わりに—のような Unicode のダッシュ文字もサポートしました。これは、他社のチームとやり取りする中で、そのチームのマネージャーが MS Word からコードをコピー&ペーストしてきたような場合に便利です。#48985 (alekseygolub). - SSLユーザー証明書による認証に失敗した場合、パスワード認証にフォールバックするようにしました。#48974 をクローズしました。#48989 (Nikolay Degterinsky).
- 埋め込みダッシュボードを改善。#46671 をクローズ。#49036 (Kevin Zhang)。
- ログメッセージ向けのprofile eventsを追加し、重大度ごとのログメッセージ数を簡単に確認できるようにしました。#49042 (Alexey Milovidov).
- 以前のバージョンでは、DOS または macOS Classic の改行が含まれている場合、並列パースの有効・無効によって
LineAsStringフォーマットの動作が一貫しないことがありました。これにより #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).
- テストでcompact パーツからwide パーツへの垂直マージをランダム化。 #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) 。
- サイズが INT_MAX を超えるパートを S3 にアップロードするとクラッシュする原因となっていた LLVM’s libc++ のバグを修正しました #47693 (Azat Khuzhin).
sparkbar関数のオーバーフローを修正しました #48121 (Vladimir C).- S3での競合状態を修正 #48190 (Anton Popov).
- 挙動が安定しないため、集約関数のJITを無効化 #48195 (Alexey Milovidov).
- ALTER のフォーマットを修正 (軽微) #48289 (Natasha Murashkina).
- RabbitMQ の CPU 使用率の問題を修正 (#44404 以降、23.2 で悪化していたもの) #48311 (Kseniia Sumarokova).
- Distributed 上の Merge に対する EXPLAIN PIPELINE で発生するクラッシュを修正 #48320 (Azat Khuzhin).
- LowCardinality を Arrow の dictionary としてシリアライズする際の不具合を修正しました #48361 (Kruglov Pavel) 。
- TemporaryFileStream 内の cache file segment 用ダウンローダーをリセット #48386 (Vladimir C).
- DROP/REPLACE PARTITION の場合に SYSTEM SYNC REPLICA がハングする可能性がある問題を修正 #48391 (Azat Khuzhin).
- Dictionary に依存する分散テーブルの読み込み時に発生する起動エラーを修正しました #48419 (MikhailBurdukov).
- システムテーブルの自動リネーム時に依存関係をチェックしないようにしました #48431 (Raúl Marín).
- KeeperMap ストレージで影響を受けた行のみを更新 #48435 (Antonio Andelic).
- VFS cache で発生する可能性がある segfault を修正 #48469 (Kseniia Sumarokova).
- 定数文字列が指定されていない場合、
toTimeZone関数がエラーを返す #48471 (Jordi Villar). - Protobuf の IPv4 に関する論理エラーを修正し、Date32 のサポートを追加 #48486 (Kruglov Pavel).
- system.settings の “changed” フラグは、複数の値を持つ設定に対して誤って算出されていました #48516 (MikhailBurdukov).
- 圧縮が有効な
Memoryストレージを修正 #48517 (Anton Popov). - クライアントの再接続時に bracketed-paste モードの影響でパスワード入力が乱れる問題を修正 #48528 (Michael Kolupaev).
- IP 型および UUID 型のキーを持つネストされた Map を修正 #48556 (Yakov Olkhovskiy).
- ハッシュ化辞書の並列ローダー使用時に発生する未処理の例外を修正 #48571 (Azat Khuzhin).
groupArray集約関数が、Nullable 型で空の結果に対しても正しく動作するようになりました #48593 (lgbo).- ACL で
authスキーム付きのノードが作成されないことがある Keeper のバグを修正しました。#48595 (Aleksei Filatov) 。 - UIntでIPv4の比較演算子を許可 #48611 (Yakov Olkhovskiy) 。
- cache に起因する可能性があるエラーを修正 #48636 (Kseniia Sumarokova).
- 空のデータに対する非同期 INSERT で、例外がスローされなくなりました。#48663 (Anton Popov).
- RENAME TABLE が失敗した場合のテーブル依存関係を修正 #48683 (Azat Khuzhin).
- 主キーに重複したカラムがある場合 (これはプロジェクションでのみ発生します) 、以前のバージョンではバグ #48838 を引き起こす可能性がありました (Amos Bird) 。
- send_thread/receive_thread を join する際に ZooKeeper で発生する競合状態を修正 #48849 (Alexander Gololobov).
- ゼロコピー レプリケーションで、無視対象のデタッチされた part を drop しようとした際に発生する予期しない part 名エラーを修正 #48862 (Michael Lex).
- 非
Date32カラムにDate32の Parquet/Arrow カラムを読み込む際の問題を修正 #48864 (Kruglov Pavel). - ROW POLICY が設定され、ドットを含むカラムを持つテーブルから選択する際の
UNKNOWN_IDENTIFIERエラーを修正 #48976 (Kruglov Pavel). - 空の Nullable 文字列による集約の問題を修正 #48999 (LiuNeng).
ClickHouse リリース 23.3 LTS (2023-03-30) 。プレゼンテーション、ビデオ
アップグレードに関する注意事項
- 論理削除は本番環境で利用可能となり、デフォルトで有効になりました。MergeTree テーブルに対する
DELETEクエリも、デフォルトで利用できます。 *domain*RFCおよびnetloc関数の動作がわずかに変更されました。準拠性を高めるため、URL authority で許可される記号の範囲を緩和しました。#46841 (Azat Khuzhin).- KafkaEngine ベースのテーブルでは、カラムに DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED ステートメントを指定して作成することを禁止しました。#47138 (Aleksandr Musorin).
- 「asynchronous connection drain」機能は削除されました。関連する設定とメトリクスも削除されました。内部機能だったため、その存在を知らなかったユーザーに影響はないはずです。#47486 (Alexander Tokmakov).
arraySum/Min/Max/Avg/Product、arrayCumSum/CumSumNonNegative、arrayDifference、配列の構築、IN 演算子、クエリパラメータ、groupArrayMovingSum、統計関数、min/max/any/argMin/argMax、PostgreSQL wire protocol、MySQL table engine と関数、sumMap、mapAdd、mapSubtract、arrayIntersectで、256 ビット Decimal data type (38 桁超) をサポートしました。arrayIntersectでは巨大整数のサポートも追加しました。モーメントを含む統計 aggregate functions (corrや各種TTestなど) は内部表現としてFloat64を使用するようになりました (この変更前はDecimal128を使用していましたが、意味がありませんでした) 。また、分散が無限大の場合、これらの関数はinfではなくnanを返すことがあります。以前のバージョンでは、一部の関数はDecimal256data types で使えたものの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). - キャンセル時に部分結果を表示するオプション: キャンセルされたクエリ (Ctrl-C などによるもの) が部分結果を返せるようにするクエリ設定
partial_result_on_first_cancelを追加しました。 #45689 (Alexey Perevyshin). - 一時テーブルで任意のテーブルエンジンをサポートするようになりました (Replicated および KeeperMap エンジンを除く) 。#31497 をクローズしました。#46071 (Roman Vasin) 。
- Keeper の集中ストレージを使用した、ユーザー定義 SQL 関数のレプリケーション対応を追加しました。#46085 (Aleksei Filatov) 。
- サーバー設定を含む
system.server_settings(system.settingsと同様) を実装しました。#46550 (pufit). UNDROP TABLEクエリに対応。#46811 をクローズ。#47241 (chen)。- named collections に対して個別の grants を許可しました (たとえば、
SHOW/CREATE/ALTER/DROP named collectionのアクセス権を、すべてに一括で付与するのではなく、特定のコレクションにのみ付与できるようになりました) 。#40894 をクローズしました。新しい access typeNAMED_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 構文で String を DateTime にパースし、parseDateTimeInJodaSyntaxは Joda syntax でパースします。#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) 。 - まだ完全に削除されていない、
Atomicdatabase から削除された table を表示するsystem.dropped_tablestable を追加しました。#47364 (chen). - MySQL 互換性のため、
positionCaseInsensitiveのエイリアスとしてINSTRを追加しました。#47529 をクローズ。#47535 (flynn) 。 - 数値を固定精度の文字列に変換できる
toDecimalString関数を追加しました。#47838 (Andrey Zvonov). - マージツリー設定
max_number_of_mutations_for_replicaを追加しました。これにより、レプリカごとのパートミューテーション数が指定した値に制限されます。ゼロは、レプリカごとのミューテーション数に制限がないことを意味します (実行は引き続き他の設定によって制約される場合があります) 。#48047 (Vladimir C). - 配列のペアからMapを作成できる、Map関連の関数
mapFromArraysを追加しました。#31125 (李扬). - Parquet/ORC/Arrow の出力フォーマットで圧縮を制御できるようにし、より多くの圧縮入力フォーマットをサポートしました。これにより #13541 がクローズされます。#47114 (Kruglov Pavel).
- ネイティブプロトコルに、SSL ユーザー証明書認証を追加しました。#47077 をクローズしました。#47596 (Nikolay Degterinsky)。
parseDateTimeに *OrNull() および *OrZero() バリアントを追加し、MySQL との互換性のためにエイリアスstr_to_dateを追加しました。#48000 (Robert Schulze) 。- MySQL との互換性向上のため、演算子
REGEXP(演算子 “LIKE”、“IN”、“MOD” などと同様) を追加しました #47869 (Robert Schulze) 。
パフォーマンス改善
- メモリ上のマークが圧縮されるようになり、メモリ使用量が従来の3〜6分の1になりました。#47290 (Michael Kolupaev) 。
- 以前のバージョンでは、大量のファイルを含むバックアップは信じられないほど低速でした。しかし、それはもう過去の話です。今では信じられないほど高速になりました。#47251 (Alexey Milovidov)。バックアップの I/O 操作専用のスレッドプールを導入しました。これにより、ほかのプールとは独立してスケーリングでき、パフォーマンスを向上させることができます。#47174 (Nikita Mikhaylov)。バックアップ処理の最終段階でメタデータを収集するために、MultiRead リクエストと再試行を使用します。#47243 (Nikita Mikhaylov)。バックアップと復元対象データの両方が S3 上にある場合は、今後はサーバー側コピーが使用されます。#47546 (Vitaly Baranov).
FINALを使用するクエリでの過剰な読み込みを修正しました。#47801 (Nikita Taranov) 。max_final_threadsは、server の起動時にコア数に設定されるようになりました (max_threadsと同じアルゴリズムを使用) 。これにより、CPU 数の多い server でのfinal実行の並行性が向上します。#47915 (Nikita Taranov).- CLICKHOUSE ソースを使用する DIRECT 辞書の読み取りパイプラインを、複数スレッドで実行できるようになりました。有効にするには、
CREATE DICTIONARYステートメント内のソースのSETTINGSセクションでdictionary_use_async_executor=1を設定してください。#47986 (Vladimir C). - Nullable キーが 1 つの場合の集約パフォーマンスを最適化しました。#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 で共有ストレージを使用するクラスターなど、非常に多数のレプリカを持つクラスターで、バックグラウンド merge をより高速に実行できるようになります。 #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).
実験的機能
- 並列レプリカ: ローカル レプリカをより有効に活用することで全体的なパフォーマンスを向上させるとともに、デフォルトで非レプリケートの MergeTree から並列レプリカを使って読み取ることを禁止しました。 #47858 (Nikita Mikhaylov).
- 実験的なアナライザが有効な場合、
Join、Dictionary、EmbeddedRocksDBテーブルを使う JOIN で、左テーブルへのフィルタのプッシュダウンをサポートしました。 #47280 (Maksim Kita). - ゼロコピー レプリケーションを使用する ReplicatedMergeTree で、Keeper への負荷が低減されました。 #47676 (alesapin).
- MaterializedPostgreSQL で materialized view を作成できない不具合を修正しました。 #40807 (Maksim Buren).
改善
- デフォルトで
input_format_json_ignore_unknown_keys_in_named_tupleを有効にしました。 #46742 (Kruglov Pavel). - MATERIALIZED VIEW へのプッシュ時にエラーを無視できるようになりました (新しい設定
materialized_views_ignore_errorsを追加しました。デフォルトはfalseですが、ログをsystem.*_logテーブルへフラッシュする場合は、無条件でtrueに設定されます) 。#46658 (Azat Khuzhin) 。 - 分散送信のファイルキューをメモリ上で追跡するようにしました。#45491 (Azat Khuzhin).
- 現在、HTTPプロトコル経由のすべてのクエリのレスポンスに
X-ClickHouse-Query-IdおよびX-ClickHouse-Timezoneヘッダーが追加されるようになりました。以前はSELECTクエリに対してのみ追加されていました。#46364 (Anton Popov). MongoDBからのexternal table: host:port の enum を含む URI 経由でのレプリカセットへの接続と、MongoDB辞書における readPreference オプションをサポートしました。URI の例: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary. #46524 (artem-yadr).- この改善は、ユーザーには見えないはずです。クエリプランに基づいて projection analysis を再実装しました。旧バージョンと新バージョンを切り替えるための設定
query_plan_optimize_projection=1を追加しました。#44963 を修正しました。#46537 (Nikolai Kochetov) 。 - デフォルトで、出力フォーマットでは v1 ではなく Parquet フォーマット 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 node exists を 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 で型変換を許可しました。これを制御する設定
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 によって書き直されました。 - stacktraces から
::__1の部分を削除しました。stacktraces ではstd::basic_string<char, ...をStringと表示します。#47171 (Mike Kot). - リプレイ攻撃を防ぐため、interserver mode を再実装しました (なお、この変更は古いサーバーとの後方互換性があります) 。#47213 (Azat Khuzhin) 。
- 正規表現グループの認識を向上させ、regexp_tree Dictionaryを改善しました。 #47218 (Han Fei).
- Keeper の改善: Keeper が使用するリソースを解放するための新しい 4LW
clrsを追加しました (例: 未使用メモリの解放) 。#47256 (Antonio Andelic) 。 - codec
DoubleDelta(bytes_size)、Gorilla(bytes_size)、FPC(level, float_size)にオプション引数を追加しました。これにより、clickhouse-compressorでカラム型を指定しなくてもこれらの codec を使用できるようになりました。これらの codec 使用時にclickhouse-compressorで発生し得る異常終了や算術エラーを修正しました。Fixes: 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フォーマットで Decimal と Date32 をサポートしました。#47434 (Kruglov Pavel) 。OrdinaryからAtomicへの変換が中断されたことを検出した場合、server を起動せず、トラブルシューティング手順を含む、よりわかりやすいエラーメッセージを表示するようにしました。#47487 (Alexander Tokmakov).- 新しいカラム
kindをsystem.opentelemetry_span_logに追加しました。このカラムには、OpenTelemetry で定義されている SpanKind の値が格納されます。#47499 (Frank Chen). - カラム名にルートのフィールド名だけを指定して、ネストされた配列を
Protobuf形式で読み書きできるようになりました。従来は、カラム名にネストされたすべてのフィールド名を含める必要がありました (例:a.b.c Array(Array(Array(UInt32)))) 。現在はa Array(Array(Array(UInt32)))のように、aだけを使用できます。#47650 (Kruglov Pavel). SYSTEM SYNC REPLICAにオプションのSTRICT修飾子を追加し、レプリケーションキューが空になるまでクエリが待機するようにしました (https://github.com/ClickHouse/ClickHouse/pull/45648 より前の動作と同様です) 。 #47659 (Alexander Tokmakov).- 一部のOpenTelemetry span logsの名称を改善しました。#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という profile events を追加しました。 #47885 (Antonio Andelic)。- ClickHouse の install に
--linkおよび--noninteractive(-y) オプションを追加しました。#47750 を修正します。#47887 (Nikolay Degterinsky) 。 - 依存するテーブルを利用できない materialized view へのアタッチ時に発生する
UNKNOWN_TABLE例外を修正しました。これは、バックアップから状態を復元しようとする際に役立つ可能性があります。#47975 (MikhailBurdukov). - (省略可能な) パスが暗号化ディスクの設定に追加されないケースを修正しました。#47981 (Kseniia Sumarokova) 。
- パラメーター化ビューでのCTEサポートの実装: スカラーサブクエリの評価時にクエリパラメータを使用できるよう更新しました。 #48065 (SmitaRKulkarni).
- 大きな整数型
(U)Int128/(U)Int256、任意のキー型のMap、および任意の精度のDateTime64(3 と 6 のみではなく) をサポート。 #48119 (Kruglov Pavel). - 行入力フォーマットで、不明な enum 値に関連するエラーをスキップできるようにしました。#48133 (Alexey Milovidov) 。
ビルド/テスト/パッケージングの改善
- ClickHouse が
C++23でビルドされるようになりました。#47424 (Robert Schulze). - AST Fuzzer で
EXPLAINクエリのファズテストを行うようにしました。#47803 #47852 (flynn). - ストレステストと自動後方互換性チェック (現在は Upgrade check) を分割しました。#44879 (Kruglov Pavel).
- 誤検知のセキュリティレポートをいくつか抑えるため、Docker 用の Ubuntu イメージを更新しました。#46784 (Julio Jimenez). なお、ClickHouse には依存関係がなく、Docker も必要ありません。
"curl | sh"を使って ClickHouse をダウンロードする際、既存の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 logging で異常終了しないことを確認するユニットテストを追加しました。これにより 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 read bufferでファイルサイズを取得する際に、初期範囲を使用するようにしました。この変更がないと、一部のリモートファイルを処理できませんでした。 #46824 (Antonio Andelic).
- URLテーブルの使用時に表示される誤ったプログレスバーを修正しました #46830 (Antonio Andelic) 。
maxIntersections関数で報告された MSan の問題を修正しました #46847 (Alexey Milovidov).Mapデータ型の不具合を修正 #46856 (Alexey Milovidov).- LIKE パターンに、引用できない文字が引用符付きで含まれている場合に、一部の LIKE 検索で誤った結果が返される不具合を修正しました #46875 (Robert Schulze).
- 修正 - Filling Transform が空のブロックを処理した際に、WITH FILL で異常終了が発生する問題を修正しました #46897 (Yakov Olkhovskiy).
- JSON内の文字列からの日付および整数の推論を修正 #46972 (Kruglov Pavel)。
- fetch時のzero-copyレプリケーションにおけるディスク選択のバグを修正 #47010 (alesapin).
- systemd サービス定義のタイプミスを修正しました #47051 (Palash Goel) 。
- CROSS JOIN と algorithm = auto で発生する NOT_IMPLEMENTED エラーを修正しました #47068 (Vladimir C).
- ‘part_type’ が ‘InMemory’ モード (Experimental feature) に設定されている場合に、‘ReplicatedMergeTree’ テーブルで類似した 2 件のデータを insert できない問題を修正しました。 #47121 (liding1992).
- 外部辞書 / library-bridge: “unknown library method ‘extDict_libClone’” エラーを修正 #47136 (alex filatov).
- limit付きのGrace Hash Joinにおけるレースコンディションを修正 #47153 (Vladimir C).
- 実カラムに対するPREWHEREサポートを修正 #47154 (Azat Khuzhin).
- Query Status で発生する可能性があるデッドロックを修正しました #47161 (Kruglov Pavel) 。
- デッドロックの原因となるため、同じ
Joinテーブルに対する insert select を禁止しました #47260 (Vladimir C). min_age_to_force_merge_secondsのマージで、マージ済みパーティションをスキップ #47303 (Antonio Andelic).- find_first_symbols を修正し、find_first_not_symbols が期待どおり動作するようにしました #47304 (Arthur Passos).
- CSV の大きな数値の推論を修正 #47410 (Kruglov Pavel) 。
- 別名を含む式では、論理式オプティマイザーを無効にしました。 #47451 (Nikolai Kochetov).
decodeURLComponentのエラーを修正 #47457 (Alexey Milovidov).- projection 使用時の explain graph を修正 #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).- move 中の zero copy ロック待ちの問題を修正 #47631 (alesapin).
- パーティション別の集約の不具合を修正しました #47634 (Nikita Taranov) 。
BSONEachRowフォーマットで、tuple を array としてシリアライズする際のバグを修正 #47690 (Kruglov Pavel).polygonsSymDifferenceCartesianのクラッシュを修正しました #47702 (pufit).- ストレージ
Fileにおけるzlibおよびgzip圧縮ファイルの読み取りを修正 #47796 (Anton Popov). - PostgreSQL の空クエリ検出を改善 (pgx Golang ドライバー向け) #47854 (Azat Khuzhin) 。
- LowCardinality 型の DateTime の単調性チェックを修正 #47860 (Antonio Andelic).
- RESTORE ASYNC では、backup_threads ではなく restore_threads を使用するようにしました #47861 (Azat Khuzhin).
- プロジェクションを含む ReplicatedMergeTree での DROP COLUMN の問題を修正 #47883 (Antonio Andelic).
- Replicated database の復旧に関する不具合修正 #47901 (Alexander Tokmakov) 。
- HTTP の警告が冗長すぎる問題に対するホットフィックス #47903 (Alexander Tokmakov).
catboostEvaluateにおける “フィールド値が長すぎる” 問題を修正 #47970 (Robert Schulze).- 修正 #36971: Watchdog: 子プロセスが終了した場合は非ゼロの終了コードで終了する #47973 (Коренберг Марк).
- “索引ファイル
cidxが想定外に長すぎる” 問題の修正 #48010 (SmitaRKulkarni). - 属性 (replica-identity) を取得する MaterializedPostgreSQL のクエリを修正 #48015 (Solomatov Sergei).
- parseDateTime(): UB (符号付き整数オーバーフローによる未定義動作) を修正 #48019 (Robert Schulze).
- Avro 内の Record には一意の名前を使用し、スキーマが再利用されないようにする #48057 (Kruglov Pavel) 。
- Keeper で TCP/HTTP ソケットのタイムアウトを正しく設定 #48108 (Antonio Andelic).
Avroフォーマットで、null ポインタに対するメンバー呼び出しの可能性がある問題を修正 #48184 (Kruglov Pavel).
ClickHouse リリース 23.2 (2023-02-23) 。プレゼンテーション、ビデオ
後方互換性を持たない変更
- 関数 “toDayOfWeek()” (エイリアス: “DAYOFWEEK”) を、週の開始曜日を月曜日または日曜日のどちらにするか、およびカウントを 0 または 1 のどちらから始めるかを表す mode 引数で拡張しました。他の date time 関数との一貫性を保つため、この mode 引数は time 引数と time zone 引数の間に挿入されました。そのため、これまで使われていた (ただし文書化されていなかった) 2 引数構文 “toDayOfWeek(time, time_zone)” は互換性がなくなります。修正するには、関数を “toDayOfWeek(time, 0, time_zone)” に書き換えてください。#45233 (Robert Schulze).
- setting
max_query_cache_sizeの名称をfilesystem_cache_max_download_sizeに変更しました。#45614 (Kseniia Sumarokova). defaultuser は、access typeSHOW NAMED COLLECTIONに対する permissions をデフォルトでは持たなくなります (たとえば、defaultuser は従来のように他の user に ALL を grant できなくなるため、この PR は後方互換性を持ちません) 。#46010 (Kseniia Sumarokova).- SETTINGS clause が FORMAT clause より前に指定されている場合、その settings は formatting に対しても適用されます。#46003 (Azat Khuzhin).
- setting
materialized_postgresql_allow_automatic_updateのサポートを削除しました (これはデフォルトで無効でした) 。#46106 (Kseniia Sumarokova). - 実際のデータセットに近い条件での
countDigitsのパフォーマンスをわずかに改善しました。これにより #44518 はクローズされました。以前のバージョンではcountDigits(0)は0を返していましたが、現在は1を返します。こちらのほうがより正確で、既存のドキュメントにも沿っています。#46187 (Alexey Milovidov). - “Delta” または “DoubleDelta” codec の後に “Gorilla” または “FPC” codec を組み合わせて圧縮する新しいカラムの作成を禁止しました。これは setting “allow_suspicious_codecs = true” を使用することで回避できます。#45652 (Robert Schulze).
新機能
- S3 上の Iceberg テーブルストアにアクセスするための
StorageIcebergとテーブル関数icebergを追加しました。#45384 (flynn). - ストレージを
SETTINGS disk = '<disk_name>'(storage_policyの代わり) で設定できるようにし、さらに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).- 各カラムのペアごとに計算を行う aggregate function
corrMatrixを追加しました。さらに、aggregate functioncovarSampと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) 。 - SipHash でユーザー定義のキー/シードを指定できる 2 つの新しい関数を追加しました。#45513 (Salvatore Mesoraca) 。
- table function
formatで3引数版が使えるようになりました。close #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 format を使用する HTTP レスポンスのクライアントプロトコルバージョンを設定できるようになりました。#40397。#46360 (Geoff Genz) 。 - 互換性のため、Spark の関数
REGEXP_EXTRACTに対応する新しい関数regexpExtractを追加しました。これは既存の関数extractに似ています。#46469 (李扬). - 最上位のJSON配列の要素数を返す新しい関数
JSONArrayLengthを追加しました。入力された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 server のバックグラウンド処理に必要なメモリを大幅に削減できます。これは #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) 。
- >=32 コアのシステムで SMT が無効になっている場合に、ClickHouse がコアの半分しか使用しないという制限を撤廃しました (BIOS で Hyper-Threading を無効にした場合) 。#44973 (Robert Schulze).
- 関数
multiIfのパフォーマンスを列指向実行により改善し、2.3倍高速化しました。#45296 (李扬) 。 - needle が空の場合に、
position関数の高速パスを追加しました。#45382 (李扬). - デフォルトで
query_plan_remove_redundant_sorting最適化を有効にしました。この最適化は #45420 で実装されました。#45567 (Igor Nikonov) 。 - HTTPインターフェイスを使用する大規模クエリのパフォーマンスを向上させるため、HTTP Transfer Encodingのchunkサイズを増やしました。#45593 (Geoff Genz) 。
- 多数の
Array/Map/Nestedカラムを持つテーブルを参照する短いSELECTクエリのパフォーマンスを改善しました。#45630 (Anton Popov). - 大きな整数型および小数型のフィルタリング性能を向上。 #45949 (李扬).
- この変更により、ColumnNullable(UInt8) からフィルタを取得する際のオーバーヘッドを効果的に削減し、全体的なクエリ性能を向上できる可能性があります。この変更の影響を評価するため、TPC-H ベンチマークを採用し、カラム型を非 Nullable から Nullable に変更したうえで、各クエリの QPS を性能指標として測定しました。 #45962 (Zhiguo Zhou).
_partおよび_partition_id仮想カラムの型をLowCardinality(String)にします。#45964 をクローズ。#45975 (flynn).scaleが変わらない場合の Decimal 変換のパフォーマンスを改善しました。#46095 (Alexey Milovidov) 。- データ読み取り時の先読み量を増やせるようにしました。#46168 (Kseniia Sumarokova).
arrayExists(x -> x = 1, arr)をhas(arr, 1)に書き換えることで、性能が1.34倍向上しました。#46188 (李扬).- 非リモートディスク上の垂直マージでメモリ使用量が過大になる問題を修正しました。リモートディスクでは
max_insert_delayed_streams_for_parallel_writeを考慮するようにしました。 #46275 (Nikolai Kochetov). - zstd を v1.5.4 に更新しました。パフォーマンスと圧縮率に若干の改善があります。異なるバージョンの ClickHouse でレプリカを運用している場合、
Data after merge/mutation is not byte-identical to data on another replicas.という、説明付きの適切なエラーメッセージが表示されることがあります。これらのメッセージは問題ないため、心配する必要はありません。#46280 (Raúl Marín) 。 - #39737 によるパフォーマンス低下を修正しました。#46309 (Alexey Milovidov) 。
replicas_statusハンドルは、レプリケーションキューが大規模な場合でも高速に応答します。 #46310 (Alexey Milovidov).- 集約関数
sum、単項算術関数、比較関数の avx512 サポートを追加しました。#37870 (zhao zhou) 。 - 最大限の性能向上を実現するため、marks の分配と読み取り処理全体の協調に関するコードを書き直しました。これにより #34527 がクローズされました。#43772 (Nikita Mikhaylov).
- クエリ (サブクエリ) 内の冗長な DISTINCT 句を削除します。クエリプランに基づいて実装されています。DISTINCT 句について、
optimize_duplicate_order_by_and_distinctと同様の最適化を行います。query_plan_remove_redundant_distinct設定で有効にできます。#42648 に関連しています。#44176 (Igor Nikonov)。 - いくつかのクエリの書き換え最適化:
sumIf(123, cond) -> 123 * countIf(1, cond),sum(if(cond, 123, 0)) -> 123 * countIf(cond),sum(if(cond, 0, 123)) -> 123 * countIf(not(cond))#44728 (李扬). - メモリ制約下でのマージと、
in order集約が上位のクエリプラン上でどのように連携するかを改善しました。従来は、実際には不要な場合でも、一部のケースで 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) 。 - ソートキー式を
prewhereに移動することで、finalを伴うクエリでwhere句を最適化できるようにしました。 #38893. #38950 (hexiaoting). - バックアップ向けの新しいメトリクス
num_processed_filesとprocessed_files_sizeを追加し、実際に処理されたファイル数を把握できるようにしました。 #42244 (Aleksandr). - サーバー間のDNSエラー発生時の再試行を追加しました。 #43179 (Anton Kozlov).
- Keeper の改善: 想定外のディスク容量不足の問題を避けるため、ディスク領域を事前確保するようにしました。Keeper の Raft ログファイルの最大サイズを指定する設定
max_log_file_sizeを導入しました。#44370 (Antonio Andelic). - レプリカが読み取り専用の場合の、レプリカ遅延 API ロジックの動作を最適化しました。 #45148 (mateng915).
- 空のパスワードでは認証できない場合に、
clickhouse-clientが対話的にパスワードを求めるようにしました。#46702 をクローズしました。#46730 (Nikolay Degterinsky). - 非Float*型のカラムに対する
Gorilla圧縮を疑わしいものとしてマークするようにしました。 #45376 (Robert Schulze). postpone_reasonカラムに、マージを実行しているレプリカの名前を表示する。 #45458 (Frank Chen).- 例外のスタックトレースを part_log に保存。#45459 (Frank Chen) 。
regexp_treeDictionary が改善され、https://github.com/ua-parser/uap-core と互換性を持つようになりました。#45631 (Han Fei).SYSTEM SYNC REPLICAの確認処理を更新し、#45508 を解決しました #45648 (SmitaRKulkarni) 。- 設定
replication_alter_partitions_syncをalter_syncに名称変更しました。#45659 (Antonio Andelic) 。 generateRandomテーブル関数とエンジンが、LowCardinalityデータ型をサポートするようになりました。これはテストに便利で、たとえばINSERT INTO table SELECT * FROM generateRandom() LIMIT 1000のように記述できます。これは #45590 のデバッグに必要です。#45661 (Alexey Milovidov)。- 実験的なクエリ結果cacheで、よりモジュール化された設定が可能になりました。#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 format: 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は、num_files(BACKUP 用) とfiles_read(RESTORE 用) の 2 つのカラムに分割されました。カラムprocessed_files_sizeも、total_size(BACKUP 用) とbytes_read(RESTORE 用) の 2 つのカラムに分割されました。#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引数がある場合にtupleElementがNullを返すよう修正しました。#45894 をクローズしました。#45952 (flynn).- S3ワイルドカードに一致するファイルが1つもない場合は、エラーをスローする。#45587 をクローズ。#45957 (chen).
- クラスター状態データを使用して、バックアップ/復元の同時実行を確認できるようにした。 #45982 (SmitaRKulkarni).
- ClickHouse Client: あいまい検索で”exact”マッチングを使用するようにしました。これにより、大文字と小文字を正しく無視でき、SQLクエリのマッチングにより適したアルゴリズムが使われます。 #46000 (Azat Khuzhin).
- 誤った CREATE View 構文
CREATE View X TO Y AS SELECTを使用できないようにしました。#4331 をクローズ。#46043 (flynn) 。 - Storage
Logファミリーでstorage_policyを設定できるようになりました。#43421 をクローズ。#46044 (flynn)。 - 結果が空の場合の
JSONColumnsフォーマットを改善しました。#46024 をクローズしました。#46053 (flynn). - SipHash128 のリファレンス実装を追加しました。 #46065 (Salvatore Mesoraca) 。
- mmap を使用して、割り当て時間とバイト数を記録する新しいメトリックを追加しました。#46068 (李扬).
- 現在、
leftPad、rightPad、leftPadUTF8、rightPadUTF8などの関数では、第2引数lengthに指定できるのは UInt8|16|32|64|128|256 のみです。これは ClickHouse ユーザーにとって制約が厳しすぎるうえ、arrayResizeやsubstringなどの類似関数とも整合していません。#46103 (李扬). - 結果の統計量が NaN になる場合の、デバッグビルドにおける
welchTTest関数のアサーションを修正しました。ほかの類似関数と動作を統一しました。従来の動作が不便だったため、studentTTestの動作を変更し、例外をスローする代わりに NaN を返すようにしました。これにより #41176 をクローズしました。これにより #42162 をクローズしました。#46141 (Alexey Milovidov). - 大きな整数と ORDER BY WITH FILL をより便利に使えるようになりました。ORDER BY で大きな (128 ビットおよび 256 ビット) 整数を扱う場合、WITH FILL の開始点と終了点に通常の整数を使えるようになりました。開始点または終了点が負の値である大きな整数で誤った結果になる不具合を修正しました。これにより #16733 をクローズします。#46152 (Alexey Milovidov).
- issue で、
parts、active_parts、total_marksカラムをsystem.tablesに追加しました。#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 dialect との互換性を高めるため、関数 “formatDateTime()” の alias として “DATE_FORMAT()” を追加し、関数
formatDateTimeを “a”、“b”、“c”、“h”、“i”、“k”、“l” “r”、“s”、“W” の substitutions で拡張しました。 ### ユーザー向け変更のドキュメントエントリ ユーザーが読める短い説明:DATE_FORMATはformatDateTimeの alias です。指定した Format string に従って Time をフォーマットします。Format は定数 expression のため、1 つの結果カラムに複数のフォーマットを指定することはできません (formatDateTime へのリンクを追加してください) 。 #46302 (Jake Bamrah). - 並列レプリカのコールバックタスク (
s3ClusterおよびMergeTreeテーブル向け) に関するProfileEventsとCurrentMetricsを追加しました。 #46313 (Alexey Milovidov). KeeperMapストレージエンジンを使用するテーブルで、DELETEおよびUPDATEに対応しました。#46330 (Antonio Andelic) 。- クエリパラメータを使った RENAME クエリの記述を可能にしました。#45778 を修正しました。#46407 (Nikolay Degterinsky).
- REPLACE transformer を使用するパラメータ化された
SELECTクエリの不具合を修正しました。#33002 を解決します。#46420 (Nikolay Degterinsky)。 - 非同期メトリクス “NumberOfDatabases” の計算から、一時テーブル/外部テーブルに使用される内部データベースを除外しました。これにより、システムテーブル “system.databases” と動作の整合性が保たれます。#46435 (Robert Schulze).
last_exception_timeカラムが distribution_queue テーブルに追加されました。#46564 (Aleksandr) 。- パラメーター化ビューで、パラメーターを指定した IN 句をサポート。 #46583 (SmitaRKulkarni).
- サーバー起動時には named collections を読み込まず、代わりに初回アクセス時に読み込むようにしました。 #46607 (Kseniia Sumarokova).
ビルド/テスト/パッケージングの改善
- LLVM ランタイムで実装された GWP-ASan を導入しました。これにより #27039 をクローズします。 #45226 (Han Fei).
- テストをあえて不安定でフレークしやすくするため、テスト内の MergeTree 設定にランダム化を追加しました。 #38983 (Anton Popov).
- PowerPC で HDFS サポートを有効化し、機能テスト 02113_hdfs_assert.sh、02244_hdfs_cluster.sql、02368_cancel_write_into_hdfs.sh を修正しました。 #44949 (MeenaRenganathan22).
- clickhouse-keeper 用の systemd.service ファイルを追加しました。 #44293 を修正します。 #45568 (Mikhail f. Shiryaev).
- ClickHouse の poco フォークを “contrib/” から “base/poco/” へ移動しました。 #46075 (Robert Schulze).
- 子プロセスを再起動する
clickhouse-watchdogのオプションを追加しました。これはあまり実用的ではありません。 #46312 (Alexey Milovidov). - 環境変数
CLICKHOUSE_DOCKER_RESTART_ON_EXITが 1 に設定されている場合、Docker コンテナーはclickhouse-serverを最初のプロセスではなく子プロセスとして実行し、終了時に再起動します。 #46391 (Alexey Milovidov). - systemd の service ファイルを修正しました。 #46461 (SuperDJY).
- ClickHouse のビルドに必要な最小 Clang バージョンを 12 から 15 に引き上げました。 #46710 (Robert Schulze).
- Intel QPL を v0.3.0 から v1.0.0 2 にアップグレードしました。また、libaccel-config をビルドし、QPL ライブラリには動的リンクではなく静的リンクするようにしました。 #45809 (jasperzhu).
バグ修正 (公式stableリリースにおけるユーザー影響のある不具合)
StorageRabbitMQで、rabbitmq_flush_interval_msまたはrabbitmq_max_block_sizeに基づいて、データが正確にフラッシュされるようにしました。#42389 を修正しました。#45160 を修正しました。#44404 (Kseniia Sumarokova).- メモリ使用量を制御できるようにするため、sparkBar関数でのレンダリングにPODArrayを使用するようにしました。#44467 をクローズしました。#44489 (Duc Canh Le).
- 関数 (quantilesExactExclusive, quantilesExactInclusive) がソートされていない配列要素を返してしまう不具合を修正しました。#45379 (wujunfu).
- OpenTelemetry が有効な場合に HTTPHandler で発生する未処理の例外を修正しました。 #45456 (Frank Chen).
- 8桁の数字からDateを推測しないようにしました。誤ったデータが読み取られる可能性があります。 #45581 (Kruglov Pavel).
odbc_bridge_use_connection_pooling設定が正しく使用されるようにする修正。 #45591 (Bharat Nallan).- cache 内のコールバックが呼び出されたときには、この cache がすでに破棄されている可能性があります。安全性を確保するため、メンバーは値としてキャプチャします。また、タスクのスケジュールについても、ストレージが破棄される前に無効化されるため安全です。#45548 を修正しました。#45601 (Han Fei).
- codec Delta または DoubleDelta を codec Gorilla と組み合わせた際に発生するデータ破損を修正しました。 #45615 (Robert Schulze).
- 無効な読み取りを回避するため、N-gram bloom filter 索引の使用時に型を正しくチェックするよう修正。 #45617 (Antonio Andelic).
c-ares周りで、いくつかのセグメンテーション違反が報告されていました。これらは以前の私のプルリクエストで混入したものです。Alexander Tokmakov の協力を得て修正しました。#45629 (Arthur Passos) 。- 重複する主キーに遭遇した際のキーの説明を修正しました。これはプロジェクションで発生することがあります。詳細は #45590 を参照してください。#45686 (Amos Bird) 。
- バックアップの圧縮方式とレベルを設定。 #45690 を解決。 #45737 (Pradeep Chhetri).
select_query_typed.limitOffsetではなく、select_query_typed.limitByOffsetを使用すべきです。 #45817 (刘陶峰).- 実験的なアナライザを使用すると、
SELECT number FROM numbers(100) LIMIT 10 OFFSET 10;のようなクエリで誤った結果 (このSQLでは結果が空になる) が返されます。これは、プランナによって不要な offset ステップが追加されることが原因です。#45822 (刘陶峰). - 後方互換性 - UInt64 から IPv4 への暗黙の縮小変換を許可 - これは “INSERT … VALUES …” 式に必要です。 #45865 (Yakov Olkhovskiy).
- 先頭オクテットが欠落した IPv4 混在アドレス (
::.1.2.3のようなもの) に対する IPv6 パーサーのバグを修正しました。#45871 (Yakov Olkhovskiy). system.processesテーブルとSHOW PROCESSLISTクエリにquery_kindカラムを追加し、重複コードを削除しました。これにより、グローバル設定パラメータmax_concurrent_select_queriesがINTERSECTまたはEXCEPTの連鎖を含むクエリに対して適用されていなかった不具合が修正されました。#45872 (Alexey Milovidov).- 関数
stochasticLinearRegressionのクラッシュを修正しました。WingFuzz により発見されました。#45985 (Nikolai Kochetov). - スパースカラムが有効なテーブル (設定
ratio_of_defaults_for_sparse_serializationで制御) からデータを読み取る、INTERSECTおよびEXCEPT修飾子付きのSELECTクエリがクラッシュする問題を修正しました。 #45987 (Anton Popov). - FINAL 使用時の DESC ソートにおける read in order 最適化を修正し、#45815 をクローズしました。#46009 (Vladimir C) 。
- compact パーツで、複数階層の存在しないネストされたカラムを読み取る際の問題を修正しました。 #46045 (Azat Khuzhin).
- system.processes の elapsed カラムを修正 (10倍のずれ) 。#46047 (Azat Khuzhin).
- Replace domain の IP 型 (IPv4、IPv6) をネイティブ型に置き換える変更 https://github.com/ClickHouse/ClickHouse/pull/43221 に対する追加修正。 #46087 (Yakov Olkhovskiy).
- パラメータにすでに値が設定されている場合の、設定における環境変数の置換を修正しました。これにより #46131 はクローズされます。これにより #9547 はクローズされます。#46144 (pufit)。
- grouping sets での誤った述語プッシュダウンを修正しました。#45947 をクローズしました。#46151 (flynn).
- 定数キーを使用した
fulls_sorting_joinで、パイプラインが停止することがある不具合を修正しました。#46175 (Vladimir C). - 誤った結果を防ぐため、フォーマット時に 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) 。arr1とarr2が同じNestedカラムのフィールドである場合の、ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ...のようなクエリを修正しました。#46387 (Anton Popov).- スケジューラがタスクをスケジュールできない場合があります。その場合は、MulityPartUpload 全体を中止し、
UploadHelperはすでにスケジュールされたタスクの完了を待機する必要があります。 #46451 (Dmitry Novik). - デフォルト型が異なる Merge に対する PREWHERE を修正 (カラムのデフォルト型が異なる場合に発生する一部の
NOT_FOUND_COLUMN_IN_BLOCKを修正し、テーブル間でカラムの型が同じ場合はPREWHEREを許可し、異なる場合にのみ禁止するようにした) 。 #46454 (Azat Khuzhin). ORDER BYで定数値を使用した場合に発生する可能性があったクラッシュを修正しました。#46466 を修正。#46493 (Nikolai Kochetov)。disk設定がクエリレベルで指定され、設定ファイルの merge tree settings セクションでstorage_policyが指定されている場合でも、例外をスローしないようにしました。diskが設定ファイルの設定より優先されます。#46533 (Kseniia Sumarokova).- 関数
arrayMapにおける定数LowCardinality引数の不適切な処理を修正しました。このバグにより、リリース版ではセグメンテーション違反が発生し、デバッグビルドでは論理エラーBad castが発生する可能性がありました。#46569 (Alexey Milovidov). - #46557を修正しました。#46611 (Alexander Gololobov).
- server が 1 分 30 秒以内に起動できない場合に clickhouse-server の 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型以外のカラムでGorillacodec を使用することを禁止します。#45252 (Robert Schulze)。これには意味がなく、不整合の原因となっていました。- 非推奨の構文で作成された
*MergeTreeテーブルでは、並列クォーラム insert が正しく動作しない可能性があります。そのため、そのようなテーブルでは並列クォーラム insert のサポートが完全に無効化されます。これは新しい構文で作成されたテーブルには影響しません。#45430 (Alexander Tokmakov)。 - AWS S3 内の object のサイズを取得する際に、
HeadObjectリクエストの代わりにGetObjectAttributesリクエストを使用します。たとえばこの変更により、AWS SDK の更新後に明示的なリージョンがない endpoint の処理が修正されます。#45288 (Vitaly Baranov)。AWS S3 と Minio でのテストは行われていますが、各種 S3-compatible サービス (GCS、R2、B2) には微妙な非互換性がある可能性がある点に注意してください。また、この変更により、GetObjectAttributesリクエストを許可するように ACL の調整が必要になる場合があります。 - タイムゾーン名にパスを含めることを禁止します。たとえば、
/usr/share/zoneinfo/Asia/Adenのようなタイムゾーン名は許可されません。Asia/Adenのような IANA timezone database 名を使用する必要があります。#44225 (Kruglov Pavel)。 - 等値結合と定数式を組み合わせたクエリ (例:
JOIN ON t1.x = t2.x AND 1 = 1) は、誤った結果を返すため禁止されます。#44016 (Vladimir C)。
新機能
- 正規表現ツリーをたどってキーを抽出するための Dictionary ソース。ユーザーエージェントのパースに利用できます。 #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つの日付、または時刻値を含む日付同士の差を、完全な単位数で計算する
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).- named tuple のパース時に、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 のストリーミングエンジンをリファクタリングして改善し、すべてのフォーマットのサポートを追加するとともに、フォーマットまわりも若干リファクタリングしました: - 接尾辞/プレフィックス付きの行ベースのフォーマットでメッセージを生成する際の不具合を修正しました。これにより、各メッセージはすべての区切り文字を含む完全な形でフォーマットされ、入力フォーマットで再度 parse できるようになりました。 - Native、Parquet、ORC などのブロックベースのフォーマットをサポートしました。各 block は個別のメッセージとしてフォーマットされます。1 つのメッセージに含まれる行数は block サイズに依存するため、設定
max_block_sizeで制御できます。 - 新しいエンジン設定kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_messageを追加しました。これらは、行ベースのフォーマットで 1 つのメッセージにフォーマットされる行数を制御します。デフォルト値: 1。 - NATS テーブルエンジンでの過剰なメモリ消費を修正しました。 - NATS producer で任意の binary データをサポートしました (以前は末尾に \0 を含む文字列でしか動作しませんでした) - ドキュメントに不足していた Kafka/RabbitMQ/NATS エンジン設定を追加しました。 - Kafka/RabbitMQ/NATS における producing と consumption をリファクタリングし、WriteBuffers/ReadBuffers のセマンティクスから切り離しました。 - 出力フォーマットをリファクタリングしました: Kafka/RabbitMQ/NATS で各行ごとに使われていた callbacks を削除し (現在はそこで callbacks を使用していません) 、IRowOutputFormat を直接使えるようにし、行末および行間の区切り文字を明確にし、出力フォーマットをリセットして最初から再度フォーマットできるようにしました - formatRow 関数に適切な実装を追加しました (フォーマットのリファクタリング後の追加改善) 。 #42777 (Kruglov Pavel). CapnProtoフォーマットで、NestedテーブルをStructのListとして読み書きできるようになりました。Decimal32/64はInt32/64として読み書きされます。#43319 をクローズしました。#43379 (Kruglov Pavel).system.text_logにmessage_format_stringカラムが追加されました。このカラムには、メッセージのフォーマットに使用されたパターンが格納されます。#44543 (Alexander Tokmakov) 。これにより、ClickHouse のログに対してさまざまな分析が可能になります。- CSV/TSV/CustomSeparated 入力フォーマットで、カラム名 (場合によっては型も含む) を含むヘッダーの自動検出を試みるようにしました。 この動作を有効にする設定 input_format_tsv/csv/custom_detect_header を追加しました (デフォルトで有効) 。#44640 をクローズ。#44953 (Kruglov Pavel) 。
実験的機能
- 効率的なテキスト検索のための新しいセカンダリ索引型として、実験的な転置索引を追加しました。 #38667 (larryluogit).
- 実験的なクエリ結果 cache を追加しました。 #43797 (Robert Schulze).
- IO リクエスト向けに、拡張可能で設定可能なスケジューリングサブシステムを追加しました (まだ IO コード自体には統合されていません) 。 #41840 (Sergei Trifonov). この機能は現時点では何もしません。お楽しみに。
- 停止した
Replicatedデータベースのレプリカのメタデータを削除するSYSTEM DROP DATABASE REPLICAを追加しました。 #41794 を解決しました。 #42807 (Alexander Tokmakov).
パフォーマンス改善
MergeTreeテーブルの起動時に、非アクティブなパーツを読み込まないようにしました。#42181 (Anton Popov) 。- 多数の小さなファイルがある場合の、ストレージ
S3およびテーブル関数s3からの読み取りレイテンシが改善されました。ストレージS3からの読み取り時に、設定remote_filesystem_read_methodとremote_filesystem_read_prefetchが有効になりました。#43726 (Anton Popov) 。 - Parquet/ORC ファイル内の構造体フィールドの読み取りを最適化しました。必要なフィールドのみを読み込みます。#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)に置き換えられます。この場合、Settingoptimize_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) 。
- これにより、hash table サイズの予測のための最適化は、キャッシュされた hash table サイズが十分に大きい場合にのみ適用されるようになりました (閾値は経験的に決定され、ハードコードされています) 。#44455 (Nikita Taranov) 。
- リモートfilesystemからの非同期読み取りのパフォーマンスがわずかに向上しました。#44868 (Kseniia Sumarokova) 。
- 以下に対して高速パスを追加: -
col like '%%'; -col like '%'; -col not like '%'; -col not like '%'; -match(col, '.*'). #45244 (李扬). - フィルタリング (WHERE clause) における通常ケースでの最適化を若干改善しました。#45289 (Nikita Taranov) 。
toUnixTimestamp64*に単調性の情報を追加し、索引解析においてさらに多くの代数的最適化を可能にしました。 #44116 (Nikita Taranov).- クエリ処理用の一時データ (ディスクへのスピル) の設定で、ファイルシステムキャッシュ (キャッシュ用ディスクの領域を使用) と連携できるようになりました #43972 (Vladimir C). これは主に ClickHouse Cloud 向けの改善ですが、扱いを理解していればセルフマネージド構成でも使用できます。
system.replicasテーブルで、レプリカのステータスを並列に取得するようにしました。#43918 をクローズしました。#43998 (Nikolay Degterinsky) 。- S3 へのバックアップ時のメモリ消費を最適化: S3 へのファイルは今後、
WriteBufferFromS3を使用せずに直接コピーされるようになりました (WriteBufferFromS3は大量のメモリを消費する可能性がありました) 。 #45188 (Vitaly Baranov). - 非同期ブロック ID 用の cache を追加しました。これにより、非同期 INSERT の重複排除を有効にした際の ZooKeeper へのリクエスト数を削減できます。 #45106 (Han Fei).
改善
- 引数なしのGenerateRandomで、挿入先テーブルの構造を使用する。 #45239 (Kruglov Pavel).
- JSON の文字列フィールドに格納された浮動小数点数を、
JSONExtract関数内で暗黙的に整数へ変換できるようになりました。例: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にゼロ (無効な値) を指定するのを防ぐようにしました。これにより #44536 をクローズしました。#44578 (Alexey Milovidov)。 - config.xml の
kerberosセクションのkeytabパラメータで、サービスの keytab ファイルへのパスを設定できるようになりました。#44594 (Roman Vasin). - あいまい検索には、すでに記述されているクエリの一部を使用します (Rust で書かれ、ClickHouse に静的リンクされている
skimライブラリに渡されます) 。 #44600 (Azat Khuzhin). - JSON Object 型がExperimentalである間も入れ子の JSON オブジェクトを読み取れるよう、
input_format_json_read_objects_as_stringsがデフォルトで有効になりました。#44657 (Kruglov Pavel) 。 - 非同期 INSERT の重複排除を改善しました。ユーザーが重複する非同期 INSERT を行った場合、Keeper にクエリを送る前にメモリ内で重複排除を行います。#44682 (Han Fei).
- 入出力
Avroフォーマットで、bool型がClickHouseのbool型として解析されるようになりました。 #44684 (Kruglov Pavel) 。 - Arrow/Parquet/ORC での Bool 型をサポートしました。#43970 をクローズしました。#44698 (Kruglov Pavel).
- UUIDの読み取り時に、引用符の外側まで貪欲にパースしないようにしました。誤ったデータを誤って正常にパースしてしまう可能性があるためです。 #44686 (Raúl Marín).
- Int64 がオーバーフローする場合は UInt64 を推論し、スキーマ推論における一部の変換を修正しました。#44696 (Kruglov Pavel) 。
- 以前は
Replicatedデータベース内での依存関係の解決は場当たり的な方法で行われていましたが、現在は明示的なグラフを使って適切に処理されるようになりました。#44697 (Nikita Mikhaylov). output_format_pretty_row_numbersがブロック間でカウンターを保持しない問題を修正しました。#44815 をクローズしました。#44832 (flynn).- バックグラウンドのクリーンアップ処理と並行してパーツがマージされることに起因するエラーを、
system.errorsに記録しないようにしました。 #44874 (Raúl Marín). - Distributed の非同期 INSERT に関するメトリクスを最適化し、修正しました。#44922 (Azat Khuzhin).
- 同時実行のバックアップと復元を禁止する設定が追加され、#43891 が解決されました。実装: * Context で BackupWorker の作成時に読み込まれて設定される、同時実行のバックアップと復元を禁止するサーバーレベルの設定を追加しました。 * 設定はデフォルトで true に設定されています。 * バックアップまたは復元を開始する前に、ほかのバックアップ/復元が実行中かどうかを確認するチェックを追加しました。内部リクエストについては、backup_uuid を使って同一ノードからのものかどうかを確認します。 #45072 (SmitaRKulkarni).
- システムログ向けに
<storage_policy>設定パラメータを追加しました。#45320 (Stig Bakken).
ビルド/テスト/パッケージングの改善
clickhouse client/local history でのあいまい検索のために、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).
- 成功したバックポート PR と、承認済みかつ成功した PR を自動的にマージするようにしました。#41110 (Mikhail f. Shiryaev).
- ClickHouse CI のステータスを確認するための ウェブサイト を公開しました。ソース.
バグ修正
- domain の IP 型 (IPv4、IPv6) をネイティブ型に置き換えました。#43221 (Yakov Olkhovskiy) 。これにより、コード内で不足していた一部の実装が自動的に補われます。
- バックアップ処理中にmutationが停止された場合のバックアップ処理を修正しました。#45351 (Vitaly Baranov) 。
Invalid number of rows in Chunkの例外メッセージを修正しました。#41404。#42126 (Alexander Gololobov) 。- ソート後に式を実行した際、未初期化の値が使用される可能性がある問題を修正しました。#43386 #43635 (Kruglov Pavel) 。
- aggregate combinator における NULL の扱いを改善し、あまり使われていない最適化
optimize_rewrite_sum_if_to_count_ifの使用時に発生しうる segfault/論理エラーを修正しました。#43758 をクローズします。#43813 (Kruglov Pavel). - CREATE USER/ROLE クエリの設定に関する制約を修正しました。#43993 (Nikolay Degterinsky) 。
- テーブルメタデータ内の
EPHEMERALカラムのデフォルト値をパースできない不具合を修正しました。#44026 (Yakov Olkhovskiy). - compatibility設定における不正なバージョンのパースを修正しました。#44224 (Kruglov Pavel) 。
- datetimeからのintervalの減算を、加算と同様の挙動になるように修正しました。 #44241 (ltrk2).
- ビューの結果の最大サイズ制限を解除しました。#44261 (lizhuoyu5).
do_not_evict_index_and_mrk_files=1の場合に、cache で発生する可能性のある論理エラーを修正しました。#42142 をクローズしました。#44268 (Kseniia Sumarokova).- write-through cache で、cache への書き込みが早すぎる段階で中断される可能性がある問題を修正しました (誤った想定により、本来は停止すべきでない場合に caching が停止することがありました) 。 #44289 (Kseniia Sumarokova).
- 定数引数を持つ case 関数
INが、LowCardinalityと組み合わせて定数引数として使用された場合に発生する可能性のあるクラッシュを修正しました。#44221。 #44346 (Nikolai Kochetov). - パラメトリック集計関数の複雑なパラメーター (Array など) のサポートを修正しました。これにより #30975 はクローズされます。この変更前は、集計関数
sumMapFilteredを分散クエリで使用できませんでした。 #44358 (Alexey Milovidov). - BSONスキーマ推論におけるObjectIdの読み取りを修正。 #44382 (Kruglov Pavel).
- ReplicatedMergeTree で、マージの完了前に一時パーツが prematurely に削除される可能性がある競合状態を修正しました。この問題により、
No such file or directory: xxxのようなエラーが発生することがありました。#43983 を修正しました。#44383 (alesapin). - クラスター名が指定されていない場合、一部の無効な
SYSTEM ... ON CLUSTERクエリが予期しない動作をしていました。これは修正され、現在では無効なクエリは本来どおりSYNTAX_ERRORをスローするようになりました。#44264 を修正しました。 #44387 (Alexander Tokmakov). - ORCフォーマットでのMap型の読み込みを修正しました。 #44400 (Kruglov Pavel).
- Parquet/ORC フォーマットで、入力データに含まれないカラムを読み取る際の不具合を修正しました。以前は、これにより
INCORRECT_NUMBER_OF_COLUMNSエラーが発生する可能性がありました。#44333 をクローズしました。#44405 (Kruglov Pavel). - これまで
bar関数では、5/8 バーと 6/8 バーの両方の表示に同じ文字 ’▋’ (U+258B “Left five eighths block”) を使用していました。この変更により、6/8 バーの表示には ’▊’ (U+258A “Left three quarters block”) を使用するよう修正されました。#44410 (Alexander Gololobov) 。 - 設定ファイルで、プロファイル設定の制約の後にプロファイル設定を記述すると、制約が機能しなくなっていました。 #44411 (Konstantin Bogdanov).
- データを含む
EXPLAIN AST INSERTクエリの実行時に発生するSYNTAX_ERRORを修正しました。#44207 をクローズします。#44413 (save-my-heart). - CSVフォーマットで、CRLF を含む bool 値の読み取りの不具合を修正しました。#44401 をクローズしました。#44442 (Kruglov Pavel).
- LowCardinality の辞書に対して
and/or/if/multiIfを実行しないようにし、結果の型が LowCardinality にならないようにしました。これにより、一部のケースでIllegal column ColumnLowCardinalityエラーが発生する問題を修正しました。 #43603。 #44469 (Kruglov Pavel). - 設定
max_streams_for_merge_tree_reading使用時のミューテーションを修正しました。#44472 (Anton Popov) 。 - ASTSelectQuery::formatImpl の GROUPING SETS における null ポインタ逆参照の可能性を修正しました (#43049) 。#44479 (Robert Schulze) 。
- 設定に従って、テーブル関数の引数、CAST 関数の引数、および JSONAsObject のスキーマ推論における型を検証するようにしました。 #44501 (Kruglov Pavel) 。
- LowCardinality および const カラムでの IN 関数を修正し、#44503 をクローズしました。#44506 (Duc Canh Le).
CREATE TABLEステートメントにおけるDEFAULT式の正規化に関する不具合を修正しました。in関数の第2引数 (または演算子INの右辺) が、CREATE クエリの実行時にその評価結果で置き換えられることがありました。#44496 を修正しました。#44547 (Alexander Tokmakov).- WITH ROLLUP、WITH CUBE、WITH TOTALS がある場合、プロジェクションは機能しません。以前のバージョンでは、プロジェクションの使用をスキップする代わりに、クエリで例外が発生していました。これにより #44614 が解決されます。これにより #42772 が解決されます。#44615 (Alexey Milovidov).
- 関数
get all blocks sorted by timeが非同期ブロックを取得できていなかったため、非同期ブロックはクリーンアップされませんでした。#44651 (Han Fei) 。 - JOIN を伴うサブクエリ、UNION、TOTALS で発生する
LOGICAL_ERRORThe top step of the right pipeline should be ExpressionStepを修正しました。#43687 を修正。#44673 (Nikolai Kochetov) 。 - Executable table engine で発生する
std::out_of_range例外を回避しました。#44681 (Kruglov Pavel) 。 - AST 上の quantiles には
optimize_syntax_fuse_functionsを適用しないようにし、#44712 をクローズしました。 #44713 (Vladimir C). - Merge テーブルと PREWHERE で誤った型が使われる不具合を修正し、#43324 をクローズしました。 #44716 (Vladimir C).
- シャットダウン中 (TraceCollector の破棄時) に発生する可能性のあるクラッシュを修正しました。#44757 を修正しました。 #44758 (Nikolai Kochetov).
- 分散クエリ処理で発生する可能性があるクラッシュを修正しました。totals または extremes を含むクエリが空の結果を返し、Distributed テーブルとローカルテーブルの型が一致していない場合に、このクラッシュが発生することがありました。#44738 を修正しました。#44760 (Nikolai Kochetov) 。
- ミューテーションにおける、フェッチ (
min_compressed_bytes_to_fsync_after_fetch) および小さなファイル (ttl.txt、columns.txt) に対する 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). - projections 最適化が有効な場合に発生することがあったエラー
Context has expiredを修正しました。これは、dictHas/dictGetのように実行時にコンテキストを使用する特定の関数を含むクエリで再現できます。#44844 を修正。#44850 (Nikolai Kochetov) 。 - remote fs から
LowCardinalityDictionary を読み込む際に発生することがあった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)を使用するようにし、つまり遅延はしきい値を超えたパーツ数に比例して増加します。#44902 をクローズしました。#44954 (Igor Nikonov). - wide パーツに論理削除マスクがある場合に発生する alter table TTL のエラーを修正しました。 #44959 (Mingliang Pan).
- domain の IP 型 (IPv4、IPv6) をネイティブ型に置き換える修正のフォローアップ #43221。#45024 (Yakov Olkhovskiy) 。
- domain IP 型 (IPv4、IPv6) をネイティブ型に置き換える https://github.com/ClickHouse/ClickHouse/pull/43221 に続くフォローアップ修正。 #45043 (Yakov Olkhovskiy).
- パーサーにおいてバッファオーバーフローが発生する可能性がありました。ファザーによって発見されました。 #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) 。- StoreageJoin における誤ったカラムの NULL 許容性を修正し、#44940 をクローズしました。#45184 (Vladimir C).
background_fetches_pool_size設定の再読み込みを修正 (実行時に増やした場合) 。#45189 (Raúl Marín) 。- 異なる型を返すサブクエリでキーに対して
INを使用した場合でも、KV エンジン (例: KeeperMap、EmbeddedRocksDB) のSELECTクエリを正しく処理するようにしました。#45215 (Antonio Andelic) 。 - 一部のケースでの SEMI JOIN & join_use_nulls に関する論理エラーを修正し、#45163、#45209 をクローズしました。#45230 (Vladimir C).
- S3 からの読み取り時の heap-use-after-free を修正しました。 #45253 (Kruglov Pavel).
- Avro のユニオン型が [‘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 テーブルの起動時のレースコンディションを修正しました (これにより、非同期 INSERT の processing ファイルが複数回処理される可能性がありました) 。#45360 (Azat Khuzhin) 。
ListObjectリクエストが失敗した場合に、ストレージS3およびテーブル関数s3の読み取り時に発生する可能性があるクラッシュを修正しました。 #45371 (Anton Popov).- 不正な構造を持つDictionary (例:XML設定の型が誤っている) がある場合に
SELECT ... FROM system.dictionariesで例外が発生する問題を修正しました。#45399 (Aleksei Filatov) 。 INSERT INTO ... SELECT * FROM s3Clusterクエリで、挿入先テーブルの構造を使用する場合の s3Cluster のスキーマ推論を修正しました。#45422 (Kruglov Pavel) 。- HTTP 経由の JSON/BSONEachRow のパースで、データ内の値ではなく一部のカラムにデフォルト値が使われてしまう可能性がある不具合を修正しました。 #45424 (Kruglov Pavel).
- テキストソースから IP 型を型付きでパースする際のバグ (Code: 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 の間で発生する競合状態を修正しました (この競合により、テーブルへの INSERT 中に CANNOT_LINK が発生する可能性がありました) 。 #45502 (Azat Khuzhin).
- cache ポリシー getter に適切なデフォルト (SLRU) を追加しました。#45514 をクローズしました。#45524 (Kseniia Sumarokova).
- mutations での array join を禁止 #42637 #44447 (SmitaRKulkarni).
- エイリアステーブル名およびカラム変換子を使用した修飾付きアスタリスクに関する修正。#44736 を解決しました。#44755 (SmitaRKulkarni) 。