メインコンテンツへスキップ
メインコンテンツへスキップ

2023年の変更履歴

目次

ClickHouse リリース v23.12, 2023-12-28
ClickHouse リリース v23.11, 2023-12-06
ClickHouse リリース v23.10, 2023-11-02
ClickHouse リリース v23.9, 2023-09-28
ClickHouse リリース v23.8 LTS, 2023-08-31
ClickHouse リリース v23.7, 2023-07-27
ClickHouse リリース v23.6, 2023-06-30
ClickHouse リリース v23.5, 2023-06-08
ClickHouse リリース v23.4, 2023-04-26
ClickHouse リリース v23.3 LTS, 2023-03-30
ClickHouse リリース v23.2, 2023-02-23
ClickHouse リリース v23.1, 2023-01-25
2022年の変更履歴

ClickHouse リリース 23.12、2023-12-28

後方互換性のない変更

  • TTL 式における非決定的関数のチェックを修正しました。以前は、場合によっては非決定的関数を含む有効期限 (TTL) 式を作成できており、その結果として後に未定義の動作を引き起こす可能性がありました。この変更は #37250 を修正します。デフォルトでは、テーブルのいかなるカラムにも依存しない TTL 式は禁止されます。SET allow_suspicious_ttl_expressions = 1 または SET compatibility = '23.11' を設定することで、再び許可できます。#37286 をクローズします。#51858Alexey Milovidov)。
  • MergeTree の設定 clean_deleted_rows は非推奨になり、もはや効果を持ちません。OPTIMIZE に対する CLEANUP キーワードはデフォルトでは許可されません(allow_experimental_replacing_merge_with_cleanup 設定を使用して有効化できます)。#58267Alexander Tokmakov)。これは #57930 を修正します。#54988 をクローズします。#54570 をクローズします。#50346 をクローズします。#47579 をクローズします。この機能は望ましいものではないため、削除する必要があります。ほかに選択肢がないため、できるだけ早く削除しなければなりません。#57932Alexey Milovidov)。

新機能

  • リフレッシャブルmaterialized viewを実装しました(#33919 で要望されていた機能)。#56946Michael KolupaevMichael 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#57995Yarik Briukhovetskyi)。
  • ORDER BY 句で ALL を指定できるようになりました。これにより、ClickHouse は SELECT 句内のすべてのカラムを使ってソートを行います。例: SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL#57875 (zhongyuankai).
  • 新しいミューテーションコマンド ALTER TABLE <table> APPLY DELETED MASK を追加しました。これにより、論理削除によって書き込まれたマスクの適用を強制し、削除済みとしてマークされた行をディスクから物理的に削除できるようになります。 #57433 (Anton Popov).
  • ハンドラー /binary は、ClickHouse バイナリ内のシンボルを可視化するビューアを開きます。 #58211 (Alexey Milovidov)。
  • Sqids(https://sqids.org/)を生成するための新しい SQL 関数 sqid を追加しました。例: SELECT sqid(125, 126)#57512Robert Schulze)。
  • FFT を使用して系列の周期を検出する新しい関数 seriesPeriodDetectFFT を追加しました。 #57574 (Bhavna Jindal)。
  • Keeper がトラフィックを受け入れ可能かを確認するための HTTP エンドポイントを追加。#55876Konstantin Bogdanov)。
  • スキーマ推論に「union」モードを追加しました。このモードでは、各ファイルごとにスキーマを推論し、その和集合が結果のテーブルスキーマになります。スキーマ推論のモードは schema_inference_mode という設定で制御され、取り得る値は defaultunion の 2 つです。 #55428 をクローズしました。 #55892 (Kruglov Pavel).
  • CSV フォーマットで文字列から数値を推論できるようにする新しい設定 input_format_csv_try_infer_numbers_from_strings を追加しました。#56455 をクローズしました。 #56859Kruglov Pavel)。
  • データベースまたはテーブルの数が設定可能なしきい値を超えた場合、ユーザーに警告を表示します。 #57375 (凌涛)。
  • HASHED_ARRAY(および COMPLEX_KEY_HASHED_ARRAY)レイアウトを持つ Dictionary で、HASHED と同様に SHARDS がサポートされるようになりました。 #57544 (vdimir)。
  • メモリ内のプライマリキー総バイト数および割り当て済みプライマリキー総バイト数に関する非同期メトリクスを追加。 #57551 (Bharat Nallan).
  • SHA512_256 関数を追加しました。 #57645 (Bharat Nallan)。
  • formatReadableSize のエイリアスとして FORMAT_BYTES を追加。 #57592 (Bharat Nallan)。
  • s3 テーブル関数に任意のセッショントークンを渡せるようにしました。 #57850 (Shani Elharrar)。
  • 新しい設定 http_make_head_request を導入しました。これを無効にすると、URL テーブルエンジンはファイルサイズを取得するために HEAD リクエストを送信しません。これは、非効率的なものや誤った設定のもの、またはこの機能に対応していない HTTP サーバーをサポートするために必要です。 #54602 (Fionera)。
  • 非プライマリキーの INDEX 定義内で ALIAS カラムを参照できるようになりました(issue #55650)。例: CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;#57546Robert Schulze)。
  • S3 ディスクを読み取り専用として指定できる新しい readonly 設定を追加しました。基盤となる S3 バケットへのアクセス権は読み取り専用のままにしつつ、s3_plain タイプのディスク上にテーブルを作成したい場合に有用です。#57977Pengyuan Bian)。
  • MergeTree テーブルにおける主キーの解析が、仮想カラム _part_offset(必要に応じて _part も含む)を含む述語にも適用されるようになりました。この機能は、一種のセカンダリ索引として利用できます。 #58224 (Amos Bird)。

パフォーマンスの向上

  • FINAL 処理中に、MergeTree テーブルから互いに交差しないパーツ範囲を抽出するようにしました。これにより、これらの交差しないパーツ範囲に対して追加の FINAL ロジックを適用せずに済みます。同じ primary key を持つ重複値の数が少ない場合、パフォーマンスは FINAL を使用しない場合とほぼ同じになります。do_not_merge_across_partitions_select_final SETTING が設定されている場合の MergeTree FINAL の読み取りパフォーマンスを改善しました。 #58120 (Maksim Kita)。
  • バッファ経由でコピーするのではなく、S3 サーバーサイドのコピー機能を使用して S3 ディスク間のコピーを行うようにしました。これにより、BACKUP/RESTORE 操作および clickhouse-disks copy コマンドの性能が向上します。 #56744 (MikhailBurdukov)。
  • Hash JOIN が setting max_joined_block_size_rows を尊重し、ALL JOIN で大きなブロックを生成しなくなりました。 #56996 (vdimir)。
  • 集計のためのメモリを早期に解放するようにしました。これにより、不要な外部集計を回避できる場合があります。 #57691 (Nikolai Kochetov).
  • 文字列シリアライゼーションの性能を改善。 #57717 (Maksim Kita).
  • Merge エンジンテーブルに対する単純な COUNT の最適化をサポート。 #57867 (skyoct).
  • 一部のケースにおいて集約処理を最適化しました。 #57872 (Anton Popov).
  • hasAny 関数がフルテキストスキップインデックスを活用できるようになりました。 #57878 (Jpnock)。
  • 関数 if(cond, then, else)(およびそのエイリアス cond ? then : else)は、ブランチレスで評価されるよう最適化されました。 #57885 (zhanglistar)。
  • パーティションキーの式にプライマリキー式のカラムのみが含まれている場合、MergeTree は do_not_merge_across_partitions_select_final 設定を自動的に推論します。 #58218 (Maksim Kita).
  • ネイティブ型に対する MIN および MAX の処理を高速化。 #58231 (Raúl Marín).
  • ファイルシステムキャッシュ用に SLRU キャッシュポリシーを実装。 #57076 (Kseniia Sumarokova).
  • バックグラウンドフェッチにおけるエンドポイントごとの接続数の上限が、15 から SETTING background_fetches_pool_size の値に引き上げられました。- MergeTree レベルの SETTING replicated_max_parallel_fetches_for_host は廃止されました。- MergeTree レベルの SETTING replicated_fetches_http_connection_timeoutreplicated_fetches_http_send_timeout および replicated_fetches_http_receive_timeout は Server レベルの SETTING に移されました。- Server レベルの SETTING の一覧に keep_alive_timeout が追加されました。#57523Nikita Mikhaylov)。
  • system.filesystem_cache へのクエリによるメモリ消費を抑えました。 #57687 (Kseniia Sumarokova).
  • 文字列デシリアライズ時のメモリ使用量を削減。 #57787 (Maksim Kita).
  • Enum 向けのより効率的なコンストラクタ。Enum に大量の値がある場合に有効です。 #57887 (Duc Canh Le).
  • ファイルシステムキャッシュからの読み出し処理を改善し、常に pread メソッドを使用するようにしました。 #57970 (Nikita Taranov)。
  • 論理式オプティマイザに AND notEquals の連鎖に対する最適化を追加しました。この最適化は、実験的な Analyzer 機能が有効な場合にのみ利用可能です。 #58214 (Kevin Mingtarja).

改善

  • Keeper におけるソフトメモリ制限のサポート。メモリ使用量が上限値に近づくと、リクエストを拒否します。 #57271 (Han Fei). #57699 (Han Fei).
  • 分散テーブルへの挿入が、更新されたクラスタ設定を正しく反映できるようにしました。クラスタノードのリストが動的に更新された場合、分散テーブルの Directory Monitor がそのリストを更新します。 #42826 (zhongyuankai).
  • 矛盾するマージパラメータを指定したレプリケーテッドテーブルを作成できないようにしました。 #56833 (Duc Canh Le).
  • system.tables に非圧縮サイズを表示するようにしました。#56618#57186Chen Lixiang)。
  • Distributed テーブルに、対応するクエリレベルの設定と同様の skip_unavailable_shards 設定を追加しました。 #43666 をクローズしました。 #57218 (Gagan Goel)。
  • 関数 substring(エイリアス: substr, mid)が Enum 型に対しても使用可能になりました。これまでは、最初の関数引数は String または FixedString 型の値である必要がありました。これにより、MySQL インターフェース経由で Tableau などのサードパーティツールと連携する際の互換性が向上します。 #57277 (Serge Klochkov)。
  • 関数 format は、任意の型の引数をサポートするようになりました(これまでは StringFixedString 型の引数のみをサポートしていました)。これにより、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 を修正)。#57479Mikhail Koviazin)。
  • ディスクからバッチを復元する際に発生する「No such file or directory」が原因で、分散送信が停止してしまう可能性のある問題を修正しました。distributed_directory_monitor_max_sleep_time_ms が 5 分より大きい場合に発生し得る、system.distribution_queueerror_count に関する問題を修正しました。非同期 INSERT の失敗を追跡するためのプロファイルイベント DistributedAsyncInsertionFailures を導入しました。 #57480 (Azat Khuzhin)。
  • MaterializedPostgreSQL(実験的機能)で PostgreSQL の生成カラムおよびデフォルトカラム値をサポートしました。 #40449 をクローズしました。 #57568Kseniia Sumarokova)。
  • 一部のファイルシステムキャッシュ設定の変更を、サーバーを再起動せずに適用できるようにしました。 #57578 (Kseniia Sumarokova).
  • 空配列を含む PostgreSQL のテーブル構造を正しく処理できるようにしました。#57618 (Mike Kot).
  • 最後のサーバー再起動以降に発生したエラーの総数を、ClickHouseErrorMetric_ALL メトリクスとして公開するようにしました。 #57627 (Nikita Mikhaylov)。
  • from_env/from_zk 参照を持つ設定ファイル内のノードについて、replace=1 が指定されていて要素が空でない場合も許可するようにしました。 #57628 (Azat Khuzhin).
  • ファジングに利用するために、不正な形式の JSON を大量に生成できるテーブル関数 fuzzJSON を追加。 #57646Julia Kartseva)。
  • IPv6 を UInt128 に変換し、バイナリ演算を行えるようにしました。 #57707 (Yakov Olkhovskiy).
  • async inserts deduplication cache 用の設定を追加し、キャッシュ更新をどの程度の時間待機するかを指定できるようにしました。async_block_ids_cache_min_update_interval_ms 設定は非推奨になりました。キャッシュは、競合が発生した場合にのみ更新されるようになりました。#57743 (alesapin)。
  • sleep() 関数は KILL QUERY によってキャンセルできるようになりました。 #57746 (Vitaly Baranov)。
  • Replicated テーブルエンジンに対する CREATE TABLE ... AS SELECT クエリはサポートされていないため、実験的な Replicated データベース内では禁止しました。#35408 を参照。#57796Nikolay Degterinsky)。
  • 外部データベース向けクエリの変換処理を修正および改善し、再帰的にすべての適用可能な述語を取得できるようにしました。 #57888 (flynn)。
  • ファイルシステムキャッシュサイズの動的な再読み込みをサポート。#57866 をクローズ。 #57897Kseniia Sumarokova)。
  • system.stack_trace が SIGRTMIN をブロックしているスレッド(Apache rdkafka のような品質の低い外部ライブラリ内に存在することがあります)でも正しく動作するようにしました。 #57907 (Azat Khuzhin)。また、storage_system_stack_trace_pipe_read_timeout_ms を待っても意味がない状況での待ちを避けるため、SIGRTMIN がブロックされていないスレッドに対してのみシグナルを送信するようにしました。 #58136 (Azat Khuzhin)。
  • クォーラム INSERT のチェック時に Keeper の障害を許容できるようにしました。 #57986 (Raúl Marín).
  • max/peak の RSS (MemoryResidentMax) を system.asynchronous_metrics に追加。 #58095 (Azat Khuzhin)。
  • このPRにより、デフォルトリージョン以外を利用する場合でもリージョンを明示せずに s3 スタイルのリンク(https:// および s3://)を使用できるようになります。また、ユーザーが誤ったリージョンを指定した場合でも、正しいリージョンを自動的に特定します。 #58148 (Yarik Briukhovetskyi)。
  • clickhouse-format --obfuscate は Settings、MergeTreeSettings、およびタイムゾーンを認識し、それらの名前を変更せずに維持するようになりました。 #58179 (Alexey Milovidov)。
  • ZipArchiveWriter に明示的な finalize() 関数を追加しました。ZipArchiveWriter 内の過度に複雑だったコードを簡素化しました。これにより #58074 が修正されました。#58202 (Vitaly Baranov)。
  • 同じパスを持つキャッシュが同じキャッシュオブジェクトを使用するようにしました。この挙動は以前から存在していましたが、23.4 で不具合により動作していませんでした。同じパスを持つキャッシュに異なるキャッシュ設定が指定された場合には、そのような構成は許可されていないことを示す例外がスローされます。 #58264 (Kseniia Sumarokova)。
  • Parallel replicas(実験的機能):より扱いやすい設定 #57542 (Igor Nikonov).
  • Parallel replicas(実験的機能):アナウンス応答の処理を改善 #57749 (Igor Nikonov).
  • Parallel replicas(実験的機能):ParallelReplicasReadingCoordinator において min_number_of_marks がより厳密に考慮されるようになりました #57763Nikita Taranov)。
  • Parallel replicas(実験的機能):IN(サブクエリ)を使用するクエリでは parallel replicas を無効化 #58133 (Igor Nikonov).
  • Parallel replicas(実験的機能):プロファイルイベント 'ParallelReplicasUsedCount' を追加 #58173 (Igor Nikonov)。
  • POST 以外の HEAD などのリクエストは、GET と同様に読み取り専用になります。 #58060 (San)。
  • system.part_logbytes_uncompressed カラムを追加 #58167 (Jordi Villar)。
  • system.backups および system.backup_log テーブルにベースバックアップの名前を追加 #58178 (Pradeep Chhetri)。
  • clickhouse-local において、コマンドラインでクエリパラメータを指定するためのサポートを追加 #58210 (Pradeep Chhetri)。

ビルド/テスト/パッケージングの改善

  • さらに多くの設定をランダム化。#39663Anton Popov)。
  • CI で無効化された最適化をランダム化。#57315Raúl Marín)。
  • macOS 上で Azure 関連のテーブルエンジン/関数を使用できるように。#51866Alexey Milovidov)。
  • ClickHouse Fast Test が GLibc の代わりに Musl を使用するようになりました。#57711Alexey Milovidov)。完全静的リンクの Musl ビルドは CI からダウンロード可能です。
  • すべてのコミットに対して ClickBench を実行するようにしました。これにより #57708 がクローズされます。#57712Alexey Milovidov)。
  • 外部ライブラリから有害な C/POSIX の select 関数の使用を削除。#57467Igor Nikonov)。
  • 利便性のため、ClickHouse Cloud のみで利用可能だった設定を、オープンソース版 ClickHouse のビルドにも含めるようにしました。#57638Nikita Mikhaylov)。

バグ修正(公式安定版リリースでユーザーに顕在化する不具合)

  • 有効期限 (TTL) GROUP BY でソート順が乱れる可能性があった問題を修正しました #49103 (Nikita Mikhaylov)。
  • 修正: lttb のバケット分割戦略を修正し、先頭のバケットと末尾のバケットには単一点のみが含まれるようにしました #57003 (FFish).
  • エラー発生後の同期処理中に Template フォーマットで起こり得るデッドロックを修正しました #57004Kruglov Pavel)。
  • 多数のエラーをスキップしながらファイルをパースする際に、処理が途中で早期終了してしまう問題を修正 #57006 (Kruglov Pavel)。
  • dictionary テーブル関数を利用した Dictionary に対する ACL の回避を防止 #57362 (Salvatore Mesoraca).
  • Fuzzer によって検出された「non-ready set」エラーの別の発生ケースを修正しました。 #57423 (Nikolai Kochetov)。
  • PostgreSQL の array_ndims の使用に関連する不具合をいくつか修正しました。 #57436 (Ryan Jacobs)。
  • 書き込みロックのタイムアウト後に発生する RWLock の不整合を修正 #57454 (Vitaly Baranov)。書き込みロックのタイムアウト後に発生する RWLock の不整合を再度修正 #57733 (Vitaly Baranov)。
  • 修正: VIEW チェーンを構築してプッシュする際にエフェメラルカラムを除外しないようにした #57461 (Yakov Olkhovskiy).
  • MaterializedPostgreSQL(実験的機能): issue #41922 を修正し、#41923 のテストを追加 #57515Kseniia Sumarokova)。
  • レプリケートされたアクセスエンティティの管理では、grant/revoke クエリ内の ON CLUSTER 句を無視するようになりました。 #57538 (MikhailBurdukov).
  • clickhouse-local がクラッシュする不具合を修正 #57553 (Nikolay Degterinsky)。
  • Hash JOIN の不具合を修正。 #57564 (vdimir)。
  • PostgreSQL のソースコードで発生し得るエラーを修正 #57567Kseniia 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 における切断されたノードに対するリトライ処理を修正 #57764Vitaly Baranov)。
  • 部分的にマテリアライズされた PROJECTION が存在する場合の外部集約の結果を修正 #57790 (Anton Popov)。
  • *Map コンビネータを使用する集約関数におけるマージ処理を修正 #57795 (Anton Popov)。
  • バグがあるため、system.kafka_consumers を無効化しました。 #57822 (Azat Khuzhin)。
  • Merge JOIN における LowCardinality キーのサポートを修正。 #57827 (vdimir).
  • InterpreterCreateQuery におけるサンプルブロック関連の不具合を修正。 #57855 (Maksim Kita).
  • PostgreSQL 由来の名前付きコレクションに対して、addresses_expr が無視されていました。 #57874 (joelynch).
  • BLAKE3 (Rust) における不正なメモリアクセスを修正しました #57876 (Raúl Marín)。その後、メモリ安全性を高めるために、Rust から C++ へ書き換えられました #57994 (Raúl Marín)。memory-safety
  • CREATE INDEX 内の関数名を正規化しました #57906 (Alexander Tokmakov)。
  • 最初のリクエストが発生する前に利用不能なレプリカを扱う処理を修正 #57933 (Nikita Taranov)。
  • リテラルエイリアスの誤った分類を修正 #57988 (Chen768959)。
  • Keeper コンポーネントでの不適切な前処理を修正 #58069Antonio Andelic)。
  • Poco ライブラリの UTF32Encoding に関連する整数オーバーフローを修正 #58073 (Andrey Fedotov)。
  • 大きな整数値を含むスカラーサブクエリが存在する場合の parallel replicas(実験的機能)の動作を修正しました #58118 (Alexey Milovidov)。
  • 範囲外の DateTime に対する accurateCastOrNull の動作を修正 #58139 (Andrey Zvonov).
  • MergeTree の wide part からサブカラムを読み取る際に PARAMETER_OUT_OF_BOUND エラーが発生する可能性のあった問題を修正 #58175 (Kruglov Pavel).
  • 膨大な数のサブクエリを含む CREATE VIEW の実行時に発生する性能低下を修正しました #58220 (Tao Wang)。
  • JSONCompactEachRow の並列解析を修正 #58181 (Alexey Milovidov). #58250 (Kruglov Pavel).

ClickHouse 23.11 リリース(2023-12-06)

後方互換性のない変更

  • 既定の ClickHouse サーバー設定ファイルでは、default ユーザーに対して access_management(SQL クエリによるユーザー管理)と named_collection_control(SQL クエリによる named collection の操作)がデフォルトで有効になりました。これにより #56482 がクローズされました。 #56619Alexey Milovidov)。
  • ウィンドウ関数向けの RESPECT NULLS / IGNORE NULLS に対して複数の改善を行いました。これらを集約関数として使用し、さらにこれらの修飾子付きで集約関数の状態を保存している場合、それらが互換性のないものになる可能性があります。 #57189Raúl Marín)。
  • 最適化 optimize_move_functions_out_of_any を削除しました。 #57190Raúl Marín)。
  • 関数 parseDateTime のフォーマッタ %l / %k / %c は、先頭ゼロなしの時/月をパースできるようになりました。例えば、select parseDateTime('2023-11-26 8:14', '%F %k:%i') が動作するようになりました。以前の、2 桁を必須としていた挙動を復元するには parsedatetime_parse_without_leading_zeros = 0 を設定してください。関数 formatDateTime も、先頭ゼロなしの時/月を出力できるようになりました。これは formatdatetime_format_without_leading_zeros によって制御されますが、既存のユースケースを壊さないよう、デフォルトでは無効になっています。 #55872Azat Khuzhin)。
  • 集約関数 avgWeightedDecimal 型の引数と一緒に使用することは、もはやできません。回避策: 引数を Float64 に変換してください。これにより #43928 がクローズされました。これにより #31768 がクローズされました。これにより #56435 がクローズされました。Decimal 引数付きでこの関数を materialized views または PROJECTION 内で使用している場合は、[email protected] までご連絡ください。集約関数 sumMap のエラーを修正し、その結果としておよそ 1.5 ~ 2 倍ほど遅くなりました。どうせこの関数はガラクタのようなものなので、問題にはなりません。これにより #54955 がクローズされました。これにより #53134 がクローズされました。これにより #55148 がクローズされました。関数 groupArraySample のバグを修正しました — 1 つのクエリで複数の集約状態が生成される場合に、同じ乱数シードが使用されていました。 #56350Alexey Milovidov)。

新機能

  • データベースとテーブルを非同期にロードするためのサーバー設定 async_load_databases を追加しました。サーバーの起動時間が短縮されます。OrdinaryAtomicReplicated エンジンを持つデータベースに適用されます。これらのデータベース内のテーブルのメタデータは非同期にロードされます。テーブルへのクエリはロードジョブの優先度を上げ、その完了を待機します。内部状態の確認用に新しいテーブル system.asynchronous_loader を追加しました。 #49351 (Sergei Trifonov).
  • blob_storage_log システムテーブルを追加しました。これにより、S3 およびその他のオブジェクトストレージに書き込まれたすべてのデータを監査できるようになります。 #52918 (vdimir)。
  • STATISTICS を使用して PREWHERE 条件の順序をより適切に最適化します。 #53240 (Han Fei).
  • Keeper プロトコルでの圧縮をサポートしました。ClickHouse 側では、zookeeper セクション内のフラグ use_compression を使用することで有効化できます。圧縮をサポートするのは ClickHouse Keeper のみであり、Apache ZooKeeper はサポートしていないことに注意してください。#49507 を解決しました。#54957SmitaRKulkarni)。
  • storage_metadata_write_full_object_key 機能を導入しました。これを true に設定すると、メタデータファイルは新しい形式で書き込まれます。この形式では、ClickHouse はメタデータファイル内にリモートオブジェクトキー全体を保存し、より高い柔軟性と最適化を可能にします。#55566Sema Checherinda)。
  • 名前付きコレクションのフィールドが上書きされないよう保護するための新しい設定と構文を追加しました。これは、悪意のあるユーザーによるシークレットへの不正アクセスを防ぐことを目的としています。 #55782 (Salvatore Mesoraca)。
  • すべての system ログテーブルに hostname カラムを追加しました。system テーブルをレプリケート、共有、または分散テーブルとして扱う場合に便利です。 #55894 (Bharat Nallan)。
  • CHECK ALL TABLES クエリを追加しました。 #56022 (vdimir).
  • MySQL の FROM_DAYS に類似した関数 fromDaysSinceYearZero を追加しました。例えば、SELECT fromDaysSinceYearZero(739136)2023-09-08 を返します。 #56088 (Joanna Hulboj)。
  • ClickHouse を使用せずにバックアップを参照し、そこから情報を抽出できる外部 Python ツールを追加しました。 #56268 (Vitaly Baranov)。
  • preferred_optimize_projection_name という新しい設定を導入しました。これが空でない文字列に設定されている場合、可能であれば、すべての候補から選択する代わりに、その指定されたプロジェクションが使用されます。#56309Yarik Briukhovetskyi)。
  • リーダー役を譲渡/辞退するための 4 文字コマンドを追加(https://github.com/ClickHouse/ClickHouse/issues/56352)。#56354Pradeep Chhetri)。#56620Pradeep Chhetri)。
  • 新しい SQL 関数 arrayRandomSample(arr, k) を追加しました。入力配列から k 個の要素をランダムに抽出して返します。以前は、同様の機能はあまり使い勝手のよくない構文でしか実現できず、例えば SELECT arrayReduce('groupArraySample(3)', range(10)) のように記述する必要がありました。#56416 (Robert Schulze)。
  • .npy ファイルで使用するための Float16 型データのサポートを追加しました。#56344 をクローズ。#56424Yarik Briukhovetskyi)。
  • Tableau Online との互換性を高めるため、システムビュー information_schema.statistics を追加しました。 #56425 (Serge Klochkov).
  • バイナリのインスペクションに役立つ system.symbols テーブルを追加しました。 #56548 (Alexey Milovidov)。
  • 設定可能なダッシュボード。チャート用のクエリは、現在はクエリ経由で読み込まれ、デフォルトでは新しい system.dashboards テーブルを使用します。 #56771 (Sergei Trifonov)。
  • fileCluster テーブル関数を追加しました。これは共有ファイルシステム(NFS など)を user_files ディレクトリにマウントする場合に便利です。 #56868 (Andrey Zvonov)。
  • s3/file/hdfs/url/azureBlobStorage エンジンに、バイト単位のファイルサイズを表す _size 仮想カラムを追加しました。 #57126 (Kruglov Pavel).
  • Prometheus エンドポイントで、サーバーの直近の再起動以降に発生した各エラーコードごとのエラー数を公開できるようにしました。 #57209 (Nikita Mikhaylov)。
  • ClickHouse Keeper は、稼働中のアベイラビリティゾーンを /keeper/availability-zone パスで報告します。これは <availability_zone><value>us-west-1a</value></availability_zone> で設定できます。 #56715 (Jianfei Hu)。
  • ALTER materialized_view MODIFY QUERY を実験的機能ではないものとし、allow_experimental_alter_materialized_view_structure 設定を非推奨としました。#15206 を修正します。 #57311 (alesapin)。
  • join_algorithm SETTING で指定された順序が尊重されるようになりました #51745 (vdimir)。
  • Protobuf フォーマットで well-known Protobuf types のサポートを追加しました。 #56741 (János Benjamin Antal)。

パフォーマンスの向上

  • S3 とのやり取りにアダプティブなタイムアウトを採用。最初の試行では、送信タイムアウトと受信タイムアウトを短く設定して実行します。 #56314 (Sema Checherinda).
  • max_concurrent_queries のデフォルト値を 100 から 1000 に引き上げました。これは、接続しているクライアント数が多く、それぞれがゆっくりデータを送受信しているためサーバーのボトルネックが CPU になっていない場合や、CPU コア数が 100 を超える場合に妥当です。あわせて、デフォルトで同時実行制御を有効にし、全体のクエリ処理スレッド数を CPU コア数の 2 倍に設定しました。これにより、非常に多くのクエリが同時実行されるシナリオでパフォーマンスが向上します。 #46927 (Alexey Milovidov)。
  • ウィンドウ関数の並列評価をサポートしました。#34688 を修正しました。 #39631Dmitry Novik)。
  • system.numbers テーブルの Numbers テーブルエンジンが、テーブルの索引と同様に、必要なデータの部分集合を生成するために条件を解析するようになりました。 #50909 (JackyWoo).
  • Merge テーブルエンジンに対する IN (...) 条件によるフィルタリングの性能を改善しました。 #54905 (Nikita Taranov)。
  • ファイルシステムキャッシュがいっぱいで大規模な読み込みが行われている場合に効果を発揮する改善です。 #55158 (Kseniia Sumarokova).
  • S3 に対するチェックサムを無効化できるようにし、ファイルに対する不要な複数回の走査を回避できるようにしました(s3_disable_checksum 設定で制御されます)。 #55559 (Azat Khuzhin)。
  • ページキャッシュにデータがある場合、ローカルテーブルと同様にリモートテーブルからも同期的に読み取るようになりました。これにより高速になり、スレッドプール内での同期処理が不要となり、ローカルファイルシステム上での seek も問題なく実行できるようになり、CPU の待ち時間が削減されます。 #55841 (Nikita Taranov)。
  • map および arrayElement からの値取得処理を最適化し、約 30% の高速化を実現しました。- 予約済みメモリの削減 - resize 呼び出し回数の削減。 #55957 (lgbo).
  • AVX-512 を用いたマルチステージフィルタリングの最適化。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上で OnTime データセットを用いて実施したパフォーマンス実験により、この変更によってクエリ Q2、Q3、Q4、Q5、Q6 の QPS がそれぞれ 7.4%、5.9%、4.7%、3.0%、4.6% 向上し、その他のクエリには影響がないことが示されました。 #56079 (Zhiguo Zhou)。
  • query profiler 内でビジー状態になるスレッド数に上限を設けます。上限を超えたスレッドはプロファイリングをスキップします。 #56105 (Alexey Milovidov).
  • ウィンドウ関数における仮想関数呼び出しの回数を削減。 #56120 (Maksim Kita).
  • ORC データ形式で再帰的な Tuple フィールドのプルーニングを許可し、スキャンを高速化しました。 #56122 (李扬)。
  • Npy データ形式に対する単純な count() の最適化: select count() from 'data.npy' のようなクエリは、結果をキャッシュすることで大幅に高速に実行されるようになりました。 #56304 (Yarik Briukhovetskyi).
  • 集約を伴い多数のストリームを持つクエリにおいて、プラン構築中に使用するメモリ量が削減されました。 #57074 (Alexey Milovidov).
  • 多くのユーザーと高いクエリ同時実行性(2000 QPS 超)を伴うユースケース向けに、ProcessList へのアクセスを最適化することでクエリ実行性能を向上しました。 #57106 (Andrej Hoos).
  • array join の処理をわずかに改善し、一部の中間結果を再利用するようにしました。 #57183 (李扬)。
  • スタックのアンワインド処理が遅いケースがありましたが、もはやそのようなことはありません。 #57221 (Alexey Milovidov).
  • max_streams = 1 の場合、外部ストレージからの読み取りにデフォルトの read pool を使用するようになりました。これは read prefetch が有効になっている場合に効果的です。 #57334 (Nikita Taranov)。
  • Keeper の改善: ログの前処理を遅らせることで、起動時のメモリ使用量を削減。 #55660 (Antonio Andelic).
  • File および HDFS ストレージに対するグロブマッチングの性能を改善しました。 #56141 (Andrey Zvonov).
  • 実験的な全文索引における posting list が圧縮されるようになり、そのサイズが 10〜30% 削減されました。 #56226 (Harry Lee).
  • バックアップ処理で BackupEntriesCollector の並列実行を行うようにしました。 #56312 (Kseniia Sumarokova).

改善

  • 新しい MergeTree 設定 add_implicit_sign_column_constraint_for_collapsing_engine(デフォルトでは無効)を追加しました。有効化すると、CollapsingMergeTree テーブルに対して暗黙的な CHECK 制約を追加し、Sign カラムの値を -1 または 1 のみに制限します。#56701#56986Kevin Mingtarja)。
  • 再起動せずにストレージ設定へ新しいディスクを追加できるようにしました。 #56367 (Duc Canh Le).
  • 同じ ALTER クエリ内で索引の作成とマテリアライズを行えるようになり、さらに同じクエリ内で "modify TTL" および "materialize TTL" もサポートしました。 #55651 をクローズしました。 #56331flynn)。
  • ソースの JSON 文字列にランダムな変動を加えたバージョンを含む行を返す、新しいテーブル関数 fuzzJSON を追加しました。 #56490 (Julia Kartseva).
  • Merge エンジンは、基盤となるテーブルの ROW POLICY に従ってレコードをフィルタリングするため、Merge テーブルに別途 ROW POLICY を作成する必要はありません。 #50209 (Ilya Golshtein).
  • 分散クエリにおいて分片ごとの実行時間を制限する max_execution_time_leaf と、タイムアウト発生時の挙動を制御する timeout_overflow_mode_leaf を追加しました。 #51823 (Duc Canh Le)。
  • HTTP プロキシ越しの HTTPS リクエストでトンネリングを無効化するための ClickHouse 設定を追加。#55033Arthur Passos)。
  • background_fetches_pool_size を 16、background_schedule_pool_size を 512 に設定し、小さな挿入が頻繁に発生する本番環境での利用により適した設定としました。 #54327 (Denny Crane)。
  • CSV 形式のファイルからデータを読み込む際に、行末が \n を伴わない \r になっていると、次のような例外が発生します: Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r.。ClickHouse では、CSV の行末は \n または \r\n または \n\r である必要があり、そのため \r の後には必ず \n が続いていなければなりません。しかし、状況によっては、上記のように CSV 入力データが異常で、\r が行末に単独で存在する場合があります。 #54340 (KevinyhZou).
  • Arrow ライブラリを新しいエンコーディングをサポートする release-13.0.0 に更新しました。 #44505 をクローズしました。 #54800 (Kruglov Pavel)。
  • DDL エントリのホスト一覧からローカル IP アドレスを探す際に、すべてのネットワークインターフェイスを取得する高コストなシステムコールを行わないようにすることで、ON CLUSTER クエリのパフォーマンスを改善しました。 #54909 (Duc Canh Le).
  • スレッドをクエリまたは USER に紐付ける前に割り当てられたメモリ使用量の計上方法を修正しました。 #56089 (Nikita Taranov).
  • Apache Arrow フォーマットで LARGE_LIST のサポートを追加しました。 #56118 (edef).
  • OPTIMIZE クエリで EmbeddedRocksDB を手動コンパクションできるようにしました。#56225 (Azat Khuzhin)。
  • EmbeddedRocksDB テーブルに対して BlockBasedTableOptions を指定可能にしました。 #56264 (Azat Khuzhin)。
  • SHOW COLUMNS は、MySQL プロトコル経由で接続された場合に、MySQL のデータ型に相当する名前を表示するようになりました。以前は、use_mysql_types_in_show_columns = 1 を設定した場合にのみ、この動作になっていました。この設定は保持されますが、非推奨となりました。 #56277 (Robert Schulze).
  • サーバーが TRUNCATE または DROP PARTITION の直後に再起動された場合に発生する可能性のある The local set of parts of table doesn't look like the set of parts in ZooKeeper エラーを修正しました。 #56282 (Alexander Tokmakov).
  • 関数 formatQuery および formatQuerySingleLine における const ではないクエリ文字列の処理を修正しました。さらに、クエリをパースできない場合に例外をスローする代わりに NULL を返す OrNull バリアントを両関数に追加しました。#56327Robert Schulze)。
  • バックアップを失敗させるのではなく、削除された内部テーブルを持つ materialized view もバックアップできるようにしました。 #56387 (Kseniia Sumarokova).
  • system.replicas へのクエリは、特定のカラムが問い合わせられた場合に ZooKeeper へのリクエストを発行します。テーブルが数千個ある場合、これらのリクエストによって ZooKeeper への負荷がかなり高くなる可能性があります。system.replicas へのクエリが同時に複数実行されていると、同じリクエストが何度も実行されます。この変更により、同時に実行されるクエリからのリクエストが「重複排除」されます。#56420Alexander Gololobov)。
  • 外部データベースをクエリする際の MySQL 互換クエリへの変換を修正。 #56456 (flynn)。
  • KeeperMap エンジンを使用するテーブルのバックアップおよび復元をサポートしました。 #56460 (Antonio Andelic).
  • CompleteMultipartUpload に対して 404 応答が返された場合は、再確認する必要があります。クライアント側でタイムアウトやその他のネットワークエラーが発生しても、サーバー側では操作が完了している可能性があります。CompleteMultipartUpload を再試行した際に 404 応答を受け取ることがあります。オブジェクトキーが存在していれば、その操作は成功したものとみなされます。 #56475 (Sema Checherinda).
  • HTTP OPTIONS メソッドをデフォルトで有効にしました。これにより、Web ブラウザから ClickHouse へのリクエストが容易になります。 #56483 (Alexey Milovidov).
  • dns_max_consecutive_failures の値が #46550 において誤って変更されていたため、これを元に戻したうえで、より適切な値に調整しました。また、本番環境での運用実績に基づき、HTTP のキープアライブタイムアウトも妥当な値まで延長しました。#56485 (Alexey Milovidov)。
  • ベースバックアップを必要になるまで読み込まないようにしました(オンデマンドで読み込むようにしました)。また、バックアップに関するログメッセージおよびプロファイルイベントを追加しました。 #56516 (Vitaly Baranov).
  • query_cache_store_results_of_queries_with_nondeterministic_functions(値は false または true)は非推奨の Setting としてマークされました。これは、クエリキャッシュが非決定的関数を含むクエリをどのように扱うかを制御する 3 値の enum である query_cache_nondeterministic_function_handling に置き換えられました。a) 例外をスローする(デフォルトの動作)、b) 非決定的なクエリ結果であってもキャッシュに保存する、c) 無視する、つまり例外をスローせず結果もキャッシュしない、のいずれかを指定します。 #56519 (Robert Schulze).
  • JOIN の ON 句における等価条件を is null チェックを用いた条件に書き換え。実験的機能であり、Analyzer のみ#56538 (vdimir)。
  • 関数 concat は、任意の型の引数をサポートするようになりました(これまでは String と FixedString の引数のみでした)。これにより、MySQL の concat 実装により近い動作になります。例えば、SELECT concat('ab', 42)ab42 を返します。 #56540 (Serge Klochkov)。
  • confignamed_collection セクション、または SQL で作成された named collection からキャッシュ設定を取得できるようにしました。 #56541 (Kseniia Sumarokova).
  • PostgreSQL データベースエンジン: PostgreSQL への接続に失敗した場合に、古いテーブルの削除動作を抑制するようにしました。 #56609 (jsc0218).
  • URL が正しくない場合に PG への接続に非常に時間がかかり、その間、対応するクエリがハングしてキャンセルされてしまう問題がありました。 #56648 (jsc0218).
  • Keeper の改善: Keeper で圧縮ログをデフォルトで無効化しました。 #56763 (Antonio Andelic).
  • 設定 wait_dictionaries_load_at_startup を追加。 #56782 (Vitaly Baranov).
  • 以前の ClickHouse バージョンには潜在的な脆弱性がありました。ユーザーが接続し、「interserver secret」メソッドでの認証に失敗した場合、サーバーはすぐに接続を終了せず、クライアントから送信される残りのパケットを受信して無視し続けていました。これらのパケットは無視されますが依然として解析されるため、もし別の既知の脆弱性を持つ圧縮方式が使われていた場合、認証なしにその脆弱性を悪用される可能性がありました。この問題は ClickHouse Bug Bounty Program において https://twitter.com/malacupa 氏によって発見されました。#56794Alexey Milovidov)。
  • パーツのフェッチは、そのパーツがリモートレプリカ側で完全にコミットされるまで待機するようになりました。PreActive 状態のパーツは送信しないことが望ましいです。ゼロコピーの場合、これは必須の制約です。#56808 (Sema Checherinda).
  • experimental な MaterializedPostgreSQL 使用時に発生する可能性のある PostgreSQL 論理レプリケーション変換エラーを修正しました。 #53721 (takakawa).
  • ユーザーレベルの設定 alter_move_to_space_execute_async を実装し、クエリ ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME を非同期で実行できるようにしました。バックグラウンド実行用プールのサイズは background_move_pool_size で制御されます。デフォルトの動作は同期実行です。これにより #47643 が修正されました。 #56809alesapin)。
  • system.tables をスキャンする際にエンジンでフィルタリングできるようにし、不要な(時間がかかる可能性のある)接続を回避できるようにしました。 #56813 (jsc0218).
  • RocksDB ストレージ向けに、system テーブルに total_bytestotal_rows を表示する機能を追加しました。 #56816 (Aleksandr Musorin)。
  • TEMPORARY テーブルに対する ALTER ステートメントで基本的なコマンドを許可しました。 #56892 (Sergey).
  • LZ4 圧縮。圧縮済みブロックを直接 out のバッファに書き込むのに out のバッファ容量が足りないというまれなケースでは、その圧縮済みブロックをバッファリングするようにしました。 #56938 (Sema Checherinda).
  • キューに入っているジョブ数を示すメトリクスを追加しました。I/O スレッドプールの監視に役立ちます。 #56958 (Alexey Milovidov).
  • PostgreSQL テーブルエンジン用の設定を設定ファイルに追加しました。その設定のチェック処理を追加しました。この追加設定に関するドキュメントを追記しました。 #56959 (Peignon Melvyn).
  • 関数 concat は、SELECT concat('abc') のように単一の引数で呼び出せるようになりました。これにより、MySQL の concat 実装との動作がより一貫したものになりました。#57000 (Serge Klochkov)。
  • AWS S3 ドキュメントの要件どおり、すべての x-amz-* ヘッダーを署名対象に含めます。 #57001 (Arthur Passos).
  • 関数 fromDaysSinceYearZero(エイリアス: FROM_DAYS)が、符号なし整数型に加えて符号付き整数型でも使用できるようになりました(以前は符号なし整数型である必要がありました)。これにより、Tableau Online などのサードパーティツールとの互換性が向上します。 #57002 (Serge Klochkov)。
  • system.s3queue_log をデフォルト設定に追加しました。 #57036 (Kseniia Sumarokova).
  • wait_dictionaries_load_at_startup のデフォルト値を true に変更し、dictionaries_lazy_load が false の場合にのみこの設定が使用されるようにしました。 #57133 (Vitaly Baranov)。
  • dictionaries_lazy_load が有効な場合でも、Dictionary 作成時にソースタイプをチェックするようにしました。 #57134 (Vitaly Baranov).
  • プランレベルの最適化を個別に有効化/無効化できるようになりました。以前は、すべての最適化を一括で無効化することしかできませんでした。以前その用途に使われていた設定 query_plan_enable_optimizations はそのまま残されており、引き続きすべての最適化を無効化するために使用できます。 #57152 (Robert Schulze).
  • サーバーの終了コードは例外コードに対応します。たとえば、メモリ制限によってサーバーを起動できない場合、コード 241 = MEMORY_LIMIT_EXCEEDED で終了します。以前のバージョンでは、例外に対する終了コードは常に 70 = Poco::Util::ExitCode::EXIT_SOFTWARE でした。 #57153 (Alexey Milovidov).
  • C++ の functional ヘッダー由来のスタックフレームについては、デマングルおよびシンボル化を行わないようにしました。 #57201 (Mike Kot).
  • HTTP サーバーページ /dashboard で複数の線を持つグラフがサポートされるようになりました。 #57236 (Sergei Trifonov)。
  • max_memory_usage_in_client コマンドラインオプションで、サフィックス(K、M、G など)付きの文字列値をサポートするようになりました。 #56879 をクローズしました。 #57273Yarik Briukhovetskyi)。
  • codec DEFLATE_QPL で使用されている Intel QPL を v1.2.0 から v1.3.1 にアップデートしました。また、BOF (Block On Fault) = 0 の場合のバグを修正し、ページフォールト発生時にはソフトウェアパスへフォールバックして処理するように変更しました。#57291 (jasperzhu)。
  • MergeTree の設定項目 replicated_deduplication_window のデフォルト値を 100 から 1k に引き上げ。#57335sichenzhao)。
  • INCONSISTENT_METADATA_FOR_BACKUP を過度に使用しないようにしました。可能な限り、バックアップ用のスキャンを最初からやり直すために一度停止して再開するのではなく、そのままスキャンを継続するようにしました。#57385 (Vitaly Baranov)。

ビルド/テスト/パッケージングの改善

  • SQLLogic テストを追加しました。 #56078 (Han Fei).
  • 利便性向上のため、clickhouse-localclickhouse-client を短い名前(chchlchc)でも利用できるようにしました。 #56634 (Alexey Milovidov).
  • 外部ライブラリから未使用コードを削除することで、ビルドサイズをさらに最適化しました。 #56786 (Alexey Milovidov).
  • 大きな翻訳単位が存在しないことを自動でチェックする仕組みを追加しました。 #56559 (Alexey Milovidov).
  • 単一バイナリディストリビューションのサイズを小さくしました。これにより #55181 がクローズされました。 #56617 (Alexey Milovidov).
  • 各ビルド後に、すべての翻訳単位およびバイナリファイルのサイズ情報を ClickHouse Cloud 上の CI データベースに送信するようにしました。これにより #56107 がクローズされました。 #56636 (Alexey Milovidov).
  • 「Apache Arrow」ライブラリの一部のファイル(arrow フォーマットのパースなど、本質的でない用途にのみ使用しているもの)が、ビルドキャッシュに関係なく常に再ビルドされていました。この問題を修正しました。 #56657 (Alexey Milovidov).
  • バージョン情報の自動生成ソースファイルに依存する翻訳単位が再コンパイルされないようにしました。 #56660 (Alexey Milovidov).
  • リンカ呼び出しのトレースデータを ClickHouse Cloud 上の CI データベースに送信するようにしました。 #56725 (Alexey Milovidov).
  • clickhouse バイナリのデバッグシンボルとして DWARF 5 を使用するようにしました(これまでは DWARF 4)。 #56770 (Michael Kolupaev).
  • 新しいビルドオプション SANITIZE_COVERAGE を追加しました。有効にすると、コードにインストルメンテーションを挿入してカバレッジを追跡します。収集された情報は ClickHouse 内で次の方法で利用できます: (1) 直近のカバレッジリセット以降に見つかったコード内のユニークなアドレスの配列を返す新しい関数 coverage、(2) 蓄積されたデータをリセットする SYSTEM RESET COVERAGE クエリ。これにより、差分コードカバレッジを含むさまざまなテスト間でカバレッジを比較できます。 #20539 の継続です。 #56102 (Alexey Milovidov).
  • スタック収集時に、一部のスタックフレームが解決できない場合があります。そのようなケースでは、生のアドレス値が役に立つことがあります。 #56267 (Alexander Gololobov).
  • libssh を無効化するオプションを追加しました。 #56333 (Alexey Milovidov).
  • CI 内の S3 テストで temporary_data_in_cache を有効化しました。 #48425 (vdimir).
  • CI で clickhouse-client の最大メモリ使用量を 1G に設定しました。 #56873 (Nikita Mikhaylov).

バグ修正(公式安定版リリースにおけるユーザー影響のある不具合)

  • 実験的な Analyzer を修正しました。挿入先テーブルを参照するサブクエリを含む SELECT からの挿入では、挿入ブロックのみを処理するようにしました。 #50857 (Yakov Olkhovskiy).
  • str_to_map 関数の不具合を修正。 #56423 (Arthur Passos).
  • Keeper reconfig: リーダーの役割を放棄/取得する前にタイムアウトを追加 #53481 (Mike Kot).
  • grace hash join および filter pushdown で誤ったヘッダーが使用される問題を修正 #53922 (vdimir)。
  • テーブルがテーブル関数に基づいている場合でも、system テーブルから SELECT できるようにしました。 #55540 (MikhailBurdukov).
  • RFC: Distributed クエリで LIMIT BY を使用した際に発生する「Cannot find column X in source stream」エラーを修正 #55836 (Azat Khuzhin)。
  • バックグラウンドでクライアントを実行している際に発生する 'Cannot read from file:' エラーを修正 #55976 (Kruglov Pavel)。
  • 不正な send_logs_level 設定時に clickhouse-local が異常終了してしまう問題を修正 #55994 (Kruglov Pavel)。
  • パラメータ化された VIEW を含む EXPLAIN AST のバグ修正 #56004 (SmitaRKulkarni)。
  • 起動時にテーブルを読み込む際に発生するクラッシュを修正 #56232 (Nikolay Degterinsky)。
  • ClickHouse をソースとする辞書で、明示的なクエリを使用するものを修正 #56236 (Nikolay Degterinsky)。
  • Keeper のシグナルハンドラで発生していたセグメンテーションフォルトを修正 #56266 (Antonio Andelic)。
  • view() 関数での UNION によりクエリ結果が不完全な状態で返される問題を修正。 #56274 (Nikolai Kochetov).
  • "cast('0' as DateTime64(3))" と "cast('0' as Nullable(DateTime64(3)))" の一貫性の問題を修正 #56286 (李扬)。
  • メモリ割り当ての失敗に関連する、まれに発生するレースコンディションを修正 #56303 (alesapin)。
  • flatten_nested および data_type_default_nullable 使用時のバックアップからの復元処理を修正 #56306 (Kseniia Sumarokova).
  • Object(JSON) 型のカラムを追加するとクラッシュする不具合を修正しました #56307 (Nikita Mikhaylov)。
  • filterPushDown で発生していたクラッシュを修正 #56380 (vdimir)。
  • マテリアライズドビューと削除されたソーステーブルが存在する場合のバックアップからのリストア処理を修正 #56383 (Kseniia Sumarokova)。
  • Kerberos 初期化時のセグメンテーションフォルトを修正 #56401 (Nikolay Degterinsky)。
  • T64 におけるバッファオーバーフローを修正 #56434 (Alexey Milovidov)。
  • FINAL での Nullable 主キーを修正 (2) #56452 (Amos Bird)。
  • 初期ノード上でデータベースが指定されていない ON CLUSTER クエリの不具合を修正 #56484 (Nikolay Degterinsky)。
  • 有効期限 (TTL) への依存関係が原因となっていた起動失敗を修正 #56489 (Nikolay Degterinsky)。
  • ON CLUSTER を含む ALTER COMMENT クエリを修正しました #56491 (Nikolay Degterinsky).
  • ALIAS 付きの ALTER COLUMN を修正 #56493Nikolay Degterinsky)。
  • 空の NAMED COLLECTION が生成される問題を修正しました #56494 (Nikolay Degterinsky)。
  • PROJECTION の解析で発生する 2 つのケースを修正しました。 #56502 (Amos Bird).
  • クエリキャッシュでのエイリアスの処理を修正 #56545 (Robert Schulze)。
  • Nullable(Enum) から Nullable(String) への変換の不具合を修正 #56644Nikolay Degterinsky)。
  • Keeper における、より信頼性の高いログ処理 #56670 (Antonio Andelic)。
  • 置換属性を持つノードの設定マージ処理を修正しました #56694 (Konstantin Bogdanov)。
  • テーブル関数 input() が重複して使用される問題を修正。 #56695 (Nikolai Kochetov).
  • 修正: RabbitMQ の OpenSSL の動的ロードに関する問題 #56703 (Igor Nikonov)。
  • データにゼロが含まれている場合に GCD codec がクラッシュする不具合を修正 #56704 (Nikita Mikhaylov)。
  • 関数への INSERT 中に clickhouse-local で発生する 'mutex lock failed: Invalid argument' エラーを修正 #56710 (Kruglov Pavel)。
  • 楽観的パスでの日付文字列のパースを修正 #56765 (Kruglov Pavel)。
  • FPC コーデックで発生するクラッシュを修正 #56795 (Alexey Milovidov)。
  • DatabaseReplicated: レプリカ復旧後に発生していた DDL クエリのタイムアウトを修正 #56796 (Alexander Tokmakov)。
  • MySQL バイナリプロトコルで Nullable カラムが正しく報告されない問題を修正しました #56799 (Serge Klochkov)。
  • メタストアテーブル用の Iceberg メタデータファイルをサポートしました #56810 (Kruglov Pavel)。
  • transform における TSAN レポートの問題を修正 #56817 (Raúl Marín)。
  • SET クエリおよび SETTINGS の書式を修正 #56825 (Nikolay Degterinsky).
  • joinGet でテーブル依存関係が原因となり起動に失敗する問題を修正 #56828 (Nikolay Degterinsky)。
  • ADD COLUMN 実行時に既存の Nested カラムが誤ってフラット化される問題を修正 #56830 (Nikolay Degterinsky).
  • CSV で行末の CR を許可できるよう修正しました #56901 (KevinyhZou)。
  • 無効な入力に対する tryBase64Decode の動作を修正 #56913 (Robert Schulze).
  • CapnProto/Protobuf スキーマで深くネストされたカラムを生成する処理を修正 #56941 (Kruglov Pavel)。
  • PROJECTION のカラムに対する互換性のない ALTER 操作を防止 #56948 (Amos Bird)。
  • SQLite ファイルパス検証を修正 #56984 (San).
  • S3Queue: メタデータ参照カウンタのインクリメント処理を修正 #56990 (Kseniia Sumarokova).
  • S3Queue の細かな修正 #56999 (Kseniia Sumarokova).
  • DatabaseFileSystem のファイルパスの検証処理を修正 #57029 (San)。
  • ARRAY JOIN 使用時の fuzzBits の不具合を修正 #57033 (Antonio Andelic).
  • joined_subquery_re... を伴う部分マージ結合での nullptr デリファレンスを修正しました。 #57048 (vdimir).
  • RemoteSource のレースコンディションを修正 #57052 (Raúl Marín)。
  • 大きな整数向けの bitHammingDistance を実装 #57073 (Alexey Milovidov)。
  • S3 形式のリンクに関するバグを修正 #57075 (Yarik Briukhovetskyi)。
  • JSON_QUERY 関数で数値パスを複数指定した場合に発生する不具合を修正 #57096 (KevinyhZou)。
  • Gorilla コーデックのバッファオーバーフローを修正 #57107Nikolay Degterinsky)。
  • 認証前にいかなる例外が発生した場合でもインターサーバー間接続をクローズするように変更 #57142 (Antonio Andelic).
  • Nullable な MATERIALIZED カラムに対する ALTER UPDATE 実行後に発生するセグメンテーションフォルトを修正 #57147 (Nikolay Degterinsky)。
  • 部分的にマテリアライズされた通常の PROJECTION を使用する場合の、誤った JOIN プランの最適化を修正。 #57196 (Amos Bird).
  • カラムの説明を比較する際にコメントを無視するようにしました #57259 (Antonio Andelic)。
  • すべてのケースで ReadonlyReplica メトリクスが正しく動作するよう修正 #57267 (Antonio Andelic).
  • バックグラウンドマージで一時データの保存にキャッシュを正しく使用するよう修正しました #57275 (vdimir).
  • Keeper における changelog とスナップショットの不具合修正 #57299 (Antonio Andelic)。
  • ホスト名が変更された場合は、完了済みの ON CLUSTER タスクを無視します #57339 (Alexander Tokmakov).
  • MergeTree の mutation が元のパートの索引の粒度を再利用するように修正 #57352 (Maksim Kita)。
  • FS cache: バックグラウンドでのダウンロードに制限を追加 #57424 (Kseniia Sumarokova).

ClickHouse リリース 23.10、2023-11-02

後方互換性のない変更

  • 壊れたデータパーツを自動的に削除するオプションは廃止されました。これにより #55174 がクローズされました。#55184Alexey Milovidov)。#55557Jihyuk Bok)。
  • 古いインメモリのデータパーツは、write-ahead log からは読み取れなくなりました。以前にインメモリパーツを構成していた場合は、アップグレード前に削除する必要があります。#55186Alexey Milovidov)。
  • Meilisearch との連携を削除しました。理由: 古いバージョン 0.18 にのみ対応していました。Meilisearch の最近のバージョンではプロトコルが変更され、もはや動作しません。注: 連携を復活させるためにご協力いただけると助かります。#55189Alexey Milovidov)。
  • directory monitor の概念名を background INSERT に変更しました。すべての *directory_monitor* 設定は distributed_background_insert* に改名されました。後方互換性は維持されるはずです(旧設定はエイリアスとして追加されています)。#55978Azat Khuzhin)。
  • クライアント側で設定された send_timeout を、サーバー側の receive_timeout として(およびその逆として)解釈しないようにしました。#56035Azat Khuzhin)。
  • 異なる単位の時間間隔の比較は、例外をスローするようになりました。これにより #55942 がクローズされました。以前の挙動(単位に関係なく内部の数値だけが比較される)に、意図せず依存していた可能性があります。#56090Alexey Milovidov)。
  • 実験的な S3Queue テーブルエンジンを完全に書き直しました。ZooKeeper 内で情報を保持する方法を変更し、ZooKeeper へのリクエスト回数を減らせるようにし、状態が変化しないとわかっている場合には ZooKeeper の状態をキャッシュする機能を追加し、S3 からのポーリング処理をより攻撃的でないように改善し、トラッキング対象ファイルの有効期限 (TTL) と max set の維持方法を変更し、これがバックグラウンドプロセスとして実行されるようになりました。system.s3queue および system.s3queue_log テーブルを追加しました。#54998 をクローズします。#54422Kseniia Sumarokova)。
  • HTTP エンドポイント上の任意のパスは、もはや /query エンドポイントへのリクエストとしては解釈されません。#55521Konstantin Bogdanov)。

新機能

  • arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn) 関数を追加しました。この関数は同じ要素数を持つ複数の配列に対してラムダ関数を適用し、その結果をアキュムレータに集約します。 #49794 (Lirikl).
  • Npy フォーマットをサポートしました。SELECT * FROM file('example_array.npy', Npy)#55982Yarik 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 の継続です。#55642Alexey Milovidov)。
  • force_optimize_projection_name という新しい設定が追加されました。これは引数として PROJECTION の名前を受け取ります。この値が空でない文字列に設定されている場合、ClickHouse はその PROJECTION がクエリ内で少なくとも 1 回使用されていることを確認します。#55331 をクローズします。 #56134Yarik Briukhovetskyi)。
  • ネイティブプロトコル経由で外部データを使用した非同期インサートをサポートしました。以前は、データがクエリ内にインラインで指定されている場合にのみ動作していました。 #54730 (Anton Popov).
  • 可視化用のデータをダウンサンプリングするために Largest-Triangle-Three-Buckets アルゴリズムを用いる集約関数 lttb を追加しました。 #53145 (Sinan)。
  • CHECK TABLE クエリのパフォーマンスと使い勝手が向上しました(進捗状況を通知し、実行をキャンセル可能)。CHECK TABLE ... PART 'part_name' による特定パートのチェックをサポートしました。 #53404 (vdimir).
  • jsonMergePatch 関数を追加しました。文字列として扱われる JSON オブジェクト同士をマージし、単一の JSON オブジェクトを表す 1 つの文字列にまとめる方法を提供します。 #54364 (Memo)。
  • Kusto Query Language 方言のサポート第 2 弾です。Phase 1 の実装 はマージ済みです。#42510larryluogit)。
  • 新しい SQL 関数 arrayRandomSample(arr, k) を追加しました。これは入力配列から k 個の要素をサンプリングして返します。これまでは、同様の機能はより扱いにくい構文(例: "SELECT arrayReduce('groupArraySample(3)', range(10))")でのみ実現可能でした。 #54391 (itayisraelov).
  • 最小値・最大値のみを対象に集約を行える -ArgMin / -ArgMax 集約コンビネータを導入しました。ユースケースの一例は #54818 に記載されています。この PR ではコンビネータを専用フォルダに整理しました。#54947 (Amos Bird)。
  • Protobuf フォーマット用のキャッシュを SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf] で削除できるようになりました。 #55064 (Aleksandr Musorin)。
  • 外部 HTTP Basic 認証器を追加。#55199Aleksei 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 をクローズしました。 #55477Kruglov Pavel)。
  • Keeper クライアントの改善:特定のパス配下に存在するすべての子ノードの数を返す get_all_children_number コマンドを追加。#55485 (guoxiaolong).
  • Keeper クライアントの改善: 指定したパス配下にある直接の子ノード数を返す get_direct_children_number コマンドを追加。#55898 (xuzifu666)。
  • 既存の SHOW SETTINGS ステートメントの簡易版である SHOW SETTING setting_name ステートメントを追加しました。 #55979 (Maksim Kita).
  • system.parts_columns テーブルに substreams および filenames 列を追加しました。 #55108 (Anton Popov)。
  • SHOW MERGES クエリのサポートを追加しました。 #55815 (megao).
  • デフォルトで ORDER BY () を使用するための設定 create_table_empty_primary_key_by_default を導入しました。 #55899 (Srikanth Chekuri).

パフォーマンスの向上

  • ウィンドウ関数評価後もストリーム数を維持してストリームの並列処理を可能にするオプション query_plan_preserve_num_streams_after_window_functions を追加しました。 #50771 (frinkr)。
  • データ量が少ない場合に、より多くのストリームを解放するようにした。 #53867 (Jiebin Sun)。
  • RoaringBitmap はシリアル化の前に最適化されるようになりました。 #55044 (UnamedRus).
  • 転置インデックスにおけるポスティングリストは、内部ビットマップを可能な限り小さい表現で保持するよう最適化されました。データの繰り返し度合いによっては、転置インデックスの使用容量を大幅に削減できる場合があります。 #55069 (Harry Lee).
  • Context ロックの競合を解消しました。これにより、多数の短時間で終了する並行クエリのパフォーマンスが大幅に向上します。 #55121 (Maksim Kita).
  • 反転インデックス作成時の性能を 30% 向上させました。これは std::unordered_mapabsl::flat_hash_map に置き換えることで達成しました。#55210Harry Lee)。
  • ORC フィルターのプッシュダウン(rowgroup レベル)をサポートしました。 #55330 (李扬)。
  • 多数の一時ファイルを扱う外部集約処理のパフォーマンスを改善。 #55489 (Maksim Kita).
  • セカンダリインデックスのマークキャッシュのデフォルトサイズを適切な値に設定し、マークが何度も再読み込みされるのを防ぐようにしました。 #55654 (Alexey Milovidov)。
  • skip index の読み取り時に、不要な index granule の再構築を回避します。これにより #55653 が解決されます。 #55683Amos Bird)。
  • IN 関数で使用される set の要素型がカラム型と完全に一致しない場合に、実行時に set 内での CAST 関数をキャッシュすることで、IN 関数のパフォーマンスを改善しました。 #55712 (Duc Canh Le).
  • ColumnVector::insertMany および ColumnVector::insertManyFrom のパフォーマンスを向上しました。 #55714 (frinkr)。
  • 次の行におけるキー位置を予測して比較回数を削減することで、Map の添字アクセスを最適化しました。 #55929 (lgbo).
  • Parquet での Struct 型フィールドのプルーニングをサポート(以前のバージョンでは一部のケースで動作していなかった)。 #56117 (lgbo).
  • 読み取り行数の推定に基づいて、クエリの実行時に使用される並列レプリカ数をチューニングできる機能を追加しました。 #51692 (Raúl Marín)。
  • 多数の一時ファイルが生成される場合における外部集約処理のメモリ消費を最適化しました。 #54798 (Nikita Taranov)。
  • async_socket_for_remote モード(デフォルト)で実行される分散クエリでも、max_threads の制限が適用されるようになりました。以前は、一部のクエリが過剰な数のスレッド(最大で max_distributed_connections まで)を作成し、サーバーのパフォーマンス問題を引き起こす可能性がありました。#53504filimonov)。
  • ZooKeeper の分散 DDL キューから DDL を実行する際に、スキップ対象のエントリをキャッシュするようにしました。 #54828 (Duc Canh Le).
  • 実験的な転置インデックスでは、一致数が多すぎるトークン(すなわちポスティングリスト内の行 ID)は保存されません。これにより、ストレージ容量を節約し、シーケンシャルスキャンと同等かそれ以上に高速な場合に、非効率なインデックス検索を回避できます。トークンを保存しない条件を制御していた従来のヒューリスティック(インデックス定義に渡される density パラメータ)は、ユーザーにとって分かりにくいものでした。代わりに、パラメータ max_rows_per_postings_list(デフォルト: 64k)に基づく、より単純なヒューリスティックが導入されました。これは、ポスティングリスト内で許可される行 ID の最大数を直接制御します。 #55616 (Harry Lee)。
  • EmbeddedRocksDB テーブルの書き込み性能を改善。 #55732 (Duc Canh Le).
  • 1つのパーティション内に多数のパーツ(1000個超)を含む場合における ClickHouse の全体的な耐障害性を改善しました。これにより、TOO_MANY_PARTS エラーの発生数が減少する可能性があります。 #55526 (Nikita Mikhaylov)。
  • 階層型ディクショナリの読み込み時のメモリ使用量を削減しました。 #55838 (Nikita Taranov).
  • すべてのDictionaryで dictionary_use_async_executor を設定可能になりました。 #55839 (vdimir).
  • AggregateFunctionTopKGenericData のデシリアライズ時に発生する過剰なメモリ使用を防止。 #55947 (Raúl Marín).
  • 多数の watch を保持している Keeper 環境では、DB::KeeperStorage::getSessionsWithWatchesCount 内で AsyncMetrics スレッドが体感できるほどの時間、CPU を 100% 消費する可能性があります。修正として、負荷の大きい watches および list_watches の集合を走査しないようにしました。 #56054 (Alexander Gololobov).
  • ストレージ EmbeddedRocksDB で count の近似計算を利用するための optimize_trivial_approximate_count_query 設定を追加しました。StorageJoin に対しても単純な count を有効化しました。#55806 (Duc Canh Le)。

改善

  • 関数 toDayOfWeek (MySQL のエイリアス: DAYOFWEEK)、toYearWeek (YEARWEEK)、toWeek (WEEK) が String 引数をサポートするようになりました。これにより、MySQL の動作と一貫したものになりました。 #55589 (Robert Schulze).
  • date_time_overflow_behavior という設定項目を導入しました。指定可能な値は ignorethrowsaturate で、Date、Date32、DateTime64、Integer または Float から Date、Date32、DateTime もしくは DateTime64 への変換時に、オーバーフロー時の動作を制御します。#55696Andrey Zvonov)。
  • ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType} に対するクエリパラメータ対応を実装しました。#49516 をマージし、#49449 をクローズしました。#55604alesapin)。
  • EXPLAIN でのプロセッサー ID の表示を、より見やすい形式にしました。 #48852 (Vlad Seliverstov).
  • lifetime フィールドを持つ direct dictionary の作成は、作成時に拒否されるようになりました(有効期限は direct dictionary には意味がないため)。修正: #27861#49043Rory Crispin)。
  • ALTER TABLE t DROP PARTITION のような、パーティションを指定するクエリでパラメータを使用できるようにしました。#49449 をクローズしました。 #49516Nikolay Degterinsky)。
  • system.zookeeper_connection に新しいカラム xid を追加しました。 #50702 (helifu).
  • 設定の再読み込み後に system.server_settings に正しいサーバー設定が表示されるようにしました。 #53774 (helifu).
  • クエリで、- と同様に動作する数学記号のマイナス文字 をサポートしました。 #54100 (Alexey Milovidov)。
  • 実験的な Replicated データベースエンジンにレプリカグループを追加。#53620 をクローズ。 #54421 (Nikolay Degterinsky)。
  • クエリを即座に失敗させてしまうよりも、再試行可能な S3 エラーは再試行した方がよいです。そのため、デフォルトの s3_retry_attempts の値を大きくしました。 #54770 (Sema Checherinda).
  • ロードバランシングモード hostname_levenshtein_distance を追加しました。 #54826 (JackyWoo)。
  • ログに出力されるシークレットのマスキングを改善。 #55089 (Vitaly Baranov)。
  • 現在のところ、PROJECTION の解析はクエリプランに対してのみ行われます。設定 query_plan_optimize_projection は廃止されました(かなり前からデフォルトで有効になっていました)。#55112Nikita Mikhaylov)。
  • 関数 untuple が名前付き要素を持つタプルに対して呼び出され、かつその関数自身にもエイリアスが付いている場合(例: select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias)、結果のカラム名は untuple のエイリアスとタプル要素のエイリアスを組み合わせて生成されるようになりました(この例では: "untuple_alias.element_alias")。 #55123 (garcher22).
  • テーブルの仮想カラムを DESCRIBE クエリの結果に含められるようにする describe_include_virtual_columns 設定を追加しました。describe_compact_output 設定を追加しました。これを true に設定すると、DESCRIBE クエリは追加情報なしでカラム名と型のみを返します。 #55129 (Anton Popov).
  • optimize_throw_if_noop=1 を指定した OPTIMIZE が、実際の原因はパーツごとに異なる PROJECTION が存在していたにもかかわらず、エラー unknown reason で失敗することがありました。この挙動は修正されました。 #55130 (Nikita Mikhaylov)。
  • 同じ Postgres テーブルに対応する複数の MaterializedPostgreSQL テーブルを作成できるようにしました。デフォルトではこの動作は無効です(後方互換性のない変更であるため) が、materialized_postgresql_use_unique_replication_consumer_identifier 設定を有効にすることでオンにできます。#54918 をクローズしました。 #55145Kseniia Sumarokova)。
  • 短い文字列から小数部を持つ負の DateTime64 および DateTime を解析できるようにしました。 #55146 (Andrey Zvonov)。
  • MySQL との互換性を高めるため、1. information_schema.tables に新たなフィールド table_rows を追加し、2. information_schema.columns に新たなフィールド extra を追加しました。 #55215 (Robert Schulze)。
  • 結果が 0 行で、かつ例外がスローされた場合、clickhouse-client は "0 rows in set" を表示しなくなりました。 #55240 (Salvatore Mesoraca).
  • TABLE キーワードなしでテーブル名を変更できるようにしました。例: RENAME db.t1 to db.t2#55373 (凌涛)。
  • system.clustersinternal_replication を追加。 #55377 (Konstantin Morozov).
  • リクエストプロトコルに基づいてリモートプロキシリゾルバを選択し、プロキシ機能のドキュメントを追加し、DB::ProxyConfiguration::Protocol::ANY を削除。 #55430 (Arthur Passos).
  • テーブルのシャットダウン後は、INSERT 時に Keeper 操作を再試行しないようにしました。 #55519 (Azat Khuzhin)。
  • SHOW COLUMNS は、設定 use_mysql_types_in_show_columns が有効な場合に、型 FixedString を正しく BLOB として報告するようになりました。さらに、新たに 2 つの設定 mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns が追加され、型 String および FixedString の出力を TEXT または BLOB に切り替えられるようになりました。 #55617 (Serge Klochkov)。
  • ReplicatedMergeTree テーブルの起動時に、ClickHouse サーバーはパーツ集合をチェックして、予期しないパーツ(ローカルには存在するが ZooKeeper には存在しないもの)がないか確認します。すべての予期しないパーツは detached ディレクトリに移動され、その代わりにサーバーはそれらを包含している祖先パーツを復元しようとします。サーバーはこれまではそれらを包含するパーツの中からランダムに選んで復元していましたが、最も近い祖先パーツを復元するようになりました。 #55645 (alesapin).
  • 高度なダッシュボードで、タッチデバイス上のグラフをドラッグできるようになりました。これにより #54206 がクローズされました。 #55649 (Alexey Milovidov)。
  • http_write_exception_in_output_format で例外を出力する際、宣言されている場合はデフォルトのクエリ形式を使用するようにしました。 #55739 (Raúl Marín).
  • 一般的な MATERIALIZED VIEW の落とし穴に対するメッセージを改善。 #55826 (Raúl Marín)。
  • 現在のデータベースを削除しても、clickhouse-local では一部のクエリを実行し、別のデータベースに切り替えることができます。これにより、clickhouse-client と動作が一致します。この変更により #55834 がクローズされました。#55853Alexey 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 をクローズしました。 #56046Kruglov Pavel)。
  • 埋め込み設定で clickhouse-keeper を実行できるようにしました。 #56086 (Maksim Kita).
  • Kafka からのデータ取得開始時の問題を回避するため、queued.min.messages の設定可能な最大値に制限を設けました。 #56121 (Stas Morozov).
  • SQL 関数 minSampleSizeContinous のタイポを修正し、minSampleSizeContinuous にリネームしました。後方互換性のため、古い名前も引き続き利用可能です。次の issue をクローズします: #56139#56143Dorota Szeremeta)。
  • サーバーをシャットダウンする前に、ディスク上で壊れたパーツのパスを出力するようにしました。この変更以前は、ディスク上のパーツが破損してサーバーが起動できない場合、どのパーツが壊れているのかを特定することはほぼ不可能でした。この問題は解消されました。 #56181 (Duc Canh Le)。

ビルド/テスト/パッケージングの改善

  • Docker 内のデータベースがすでに初期化されている場合、後続の起動時に再度初期化する必要はありません。これにより、データベースが 1000 回の試行以内にロードされない場合にコンテナが再起動を繰り返す問題を潜在的に修正できます(非常に大きなデータベースやマルチノード構成で発生する可能性があります)。 #50724 (Alexander Nikolaev).
  • サブモジュールを含むソースコードを持つリソースを、Darwin 用の特別なビルドタスクでビルドするようにしました。これにより、サブモジュールをチェックアウトせずに ClickHouse をビルドできます。 #51435 (Ilya Yatsishin).
  • AVX 命令群をグローバルに有効化して ClickHouse をビルドした場合(非推奨)、エラーが発生していました。原因は、snappy が SNAPPY_HAVE_X86_CRC32 を有効化していないことでした。 #55049 (monchickey).
  • clickhouse-server パッケージからスタンドアロンで clickhouse-keeper を起動する際の問題を解決しました。 #55226 (Mikhail f. Shiryaev).
  • テストにおいて RabbitMQ のバージョンを 3.12.6 に更新し、RabbitMQ テスト向けのログ収集を改善しました。 #55424 (Ilya Yatsishin).
  • 機能テストを修正するため、OpenSSL と BoringSSL 間のエラーメッセージの差異を調整しました。 #55975 (MeenaRenganathan22).
  • Apache DataSketches に対して upstream リポジトリを使用するようにしました。 #55787 (Nikita Taranov).

バグ修正(公式安定版リリースでユーザーに影響する不具合)

  • ミューテーション時に反転索引ファイルへのハードリンク作成をスキップするようにしました #47663 (cangyin)。
  • match 関数(正規表現)で、オルタネーションを含むパターンが誤ったキー条件を生成してしまうバグを修正しました。Closes #53222. #54696 (Yakov Olkhovskiy).
  • ARRAY JOIN での read-in-order 最適化時に発生していた 'Cannot find column' エラーを修正 #51746 (Nikolai Kochetov)。
  • クエリで見落とされていた実験的な Object(Nullable(json)) サブカラムのサポートを追加しました。 #54052 (zps).
  • accurateCastOrNull 向けの修正を再適用 #54629 (Salvatore Mesoraca)。
  • AS を指定せずに作成した分散テーブルのカラムにおける DEFAULT の検出を修正しました #55060 (Vitaly Baranov)。
  • ShellCommandSource のコンストラクタにおける例外発生時の適切なクリーンアップ #55103 (Alexander Gololobov)。
  • LDAP で割り当てられたロールの更新時に発生するデッドロックを修正 #55119 (Julian Maicher)。
  • 内部例外時のエラー統計の更新を抑制する #55128Robert Schulze)。
  • バックアップで発生するデッドロックを修正 #55132 (alesapin).
  • storage Iceberg におけるファイル取得処理を修正 #55144 (Kseniia Sumarokova)。
  • Set 内の余分なカラムに対するパーティションプルーニングを修正。 #55172 (Amos Bird).
  • テーブルがアダプティブグラニュラリティを使用している場合に、ALTER UPDATE クエリでスキップインデックスが正しく再計算されない問題を修正しました #55202 (Duc Canh Le)。
  • fs キャッシュにおけるバックグラウンドダウンロードの不具合を修正 #55252 (Kseniia Sumarokova)。
  • バッファが最終化されない場合にコンプレッサーで発生し得るメモリリークを防止しました #55262 (Azat Khuzhin)。
  • スパースなカラムに対する関数の実行を修正 #55275 (Azat Khuzhin)。
  • SummingMergeTree テーブルに対する SELECT FINAL 実行時の Nested カラムの誤ったマージ処理を修正しました #55276 (Azat Khuzhin)。
  • S3 上で zero copy を使用しない場合に、ReplicatedMergeTree テーブルで切り離されたパーティションを DROP できない問題を修正しました #55309 (alesapin).
  • MergeSortingPartialResultTransform において、remerge 後にチャンク数が 0 になる場合に発生するクラッシュを修正しました。#55335Azat Khuzhin)。
  • 共有例外をスローしていたことに起因する、エラー発生時の CreatingSetsTransform におけるデータ競合を修正しました #55338 (Azat Khuzhin)。
  • trash の最適化を(一定の範囲まで)修正しました #55353 (Alexey Milovidov)。
  • StorageHDFS のリークの問題を修正 #55370 (Azat Khuzhin)。
  • cast 演算子での配列のパース処理を修正 #55417 (Anton Popov).
  • クエリにおける仮想カラムに対する OR フィルターを含むフィルタリングを修正 #55418 (Azat Khuzhin)。
  • MongoDB への接続に関する問題を修正 #55419 (Nikolay Degterinsky)。
  • MySQL インターフェイスにおけるブール値の表現を修正 #55427 (Serge Klochkov)。
  • MySQL テキストプロトコルにおける DateTime フォーマットと LowCardinality(Nullable(T)) 型の報告方法を修正 #55479 (Serge Klochkov)。
  • use_mysql_types_in_show_columnsSHOW COLUMNS のみに影響するようにした #55481 (Robert Schulze)。
  • スタックシンボライザーが DW_FORM_ref_addr を誤って解析し、場合によってはクラッシュする問題を修正 #55483 (Michael Kolupaev)。
  • AsyncTaskExecutor の cancelBefore で例外が発生した場合に fiber を破棄する #55516 (Kruglov Pavel).
  • カスタム HTTP ハンドラーでクエリパラメーターが動作しない問題を修正 #55521 (Konstantin Bogdanov).
  • Values フォーマットにおける未処理データの検査処理を修正 #55527 (Azat Khuzhin)。
  • MS SQL Server と連携する ODBC で発生する 'Invalid cursor state' エラーを修正 #55558 (vdimir)。
  • 最大実行時間および 'break' オーバーフローモードの不具合を修正 #55577 (Alexander Gololobov).
  • 循環参照する別名がある場合に QueryNormalizer がクラッシュする不具合を修正 #55602 (vdimir)。
  • 誤った最適化を無効化し、テストを追加しました #55609 (Alexey Milovidov)。
  • #52352 #55621 をマージしました(Alexey Milovidov)。
  • 誤った Decimal 型のソートを防ぐためのテストを追加しました #55662 (Amos Bird)。
  • glob パターンを含まない URL を使用する S3 および Azure の Cluster 関数向けのプログレスバーを修正 #55666 (Kruglov Pavel)。
  • クエリで OR フィルタを用いた仮想カラムでのフィルタリングを修正(再提出) #55678 (Azat Khuzhin).
  • Iceberg ストレージの修正と改善 #55695 (Kruglov Pavel)。
  • CreatingSetsTransform (v2) のデータレースを修正 #55786 (Azat Khuzhin)。
  • precise_float_parsing が true の場合に、不正な文字列を float としてパースしようとした際は例外をスローするように変更 #55861 (李扬)。
  • CTE にステートフルな関数が含まれている場合は、predicate pushdown を無効にする #55871 (Raúl Marín)。
  • FORMAT 句をクエリから削除してしまっていた normalizeASTSelectWithUnionQuery の挙動を修正しました。 #55887 (flynn)。
  • Native ORC 入力フォーマットで発生する可能性のあるセグフォルトの修正を試みました #55891 (Kruglov Pavel)。
  • スパースなカラムに対するウィンドウ関数の不具合を修正。 #55895 (János Benjamin Antal).
  • バグ修正: StorageNull がサブカラムをサポートするようになりました #55912 (FFish).
  • Replicated テーブルの mutate/merge 操作に対する再試行可能なエラーをエラーログに出力しないようにしました #55944 (Azat Khuzhin).
  • SHOW DATABASES LIMIT &lt;N&gt; を修正しました #55962 (Raúl Marín).
  • アンダースコアを含むフィールドを持つ Protobuf スキーマの自動生成を修正 #55974Kruglov Pavel)。
  • スケールがデフォルト以外の場合の dateTime64ToSnowflake64() の動作を修正 #55983 (Robert Schulze)。
  • Arrow の Dictionary カラムの入出力を修正 #55989 (Kruglov Pavel).
  • AvroConfluent におけるスキーマレジストリからのスキーマ取得処理を修正 #55991 (Kruglov Pavel)。
  • Buffer テーブルで ALTER と INSERT を同時実行した際に発生する 'Block structure mismatch' を修正 #55995 (Michael Kolupaev).
  • least_used JBOD ポリシーの空き容量計算の誤りを修正 #56030 (Azat Khuzhin).
  • テーブル関数内でサブクエリを評価する際に発生していたスカラー値が欠落する問題を修正しました #56057 (Amos Bird).
  • http_write_exception_in_output_format=1 の場合に誤ったクエリ結果が返される不具合を修正 #56135 (Kruglov Pavel)。
  • 設定変更後のフォールバック JSON->JSONEachRow のスキーマキャッシュを修正しました #56172 (Kruglov Pavel)。
  • odbc-bridge にエラーハンドラを追加 #56185 (Yakov Olkhovskiy).

ClickHouse リリース 23.9、2023-09-28

後方互換性のない変更

  • デフォルトの Prometheus ハンドラーから、status_info 設定オプションおよび辞書ステータスを削除しました。 #54090 (Alexey Milovidov).
  • 実験的なパーツメタデータキャッシュをコードベースから削除しました。 #54215 (Alexey Milovidov).
  • 設定 input_format_json_try_infer_numbers_from_strings をデフォルトで無効にしました。これにより、サンプルデータに数値のように見える文字列が含まれている場合でも、JSON フォーマットで文字列から数値を推論しようとしないようにして、発生し得るパースエラーを回避します。 #55099 (Kruglov Pavel).

新機能

  • JSON フォーマットからのスキーマ推論を改善しました。1) JSON フォーマットにおいて、実験的な JSON 型を有効にしなくても、SETTING input_format_json_try_infer_named_tuples_from_objects により、JSON オブジェクトから名前付き Tuple を推論できるようになりました。以前は実験的な JSON 型なしでは、JSON オブジェクトは String または Map としてしか推論できませんでしたが、現在は名前付き Tuple を推論できます。生成される Tuple 型には、スキーマ推論時のデータサンプルで読み取られたオブジェクトのすべてのキーが含まれます。これは、スパースではない構造化された JSON データを読み取る際に有用です。この SETTING はデフォルトで有効になっています。2) SETTING input_format_json_read_arrays_as_strings により、JSON 配列を型 String のカラムとしてパースできるようになりました。これにより、異なる型の値を含む配列の読み取りに役立ちます。3) SETTING input_format_json_infer_incomplete_types_as_strings により、サンプルデータ内で型が不明な JSON キー(null/[]/{})に対して、型 String を使用できるようになりました。これにより、JSON フォーマットでは任意の値を String カラムとして読み取ることができ、未知の型に対して型 String を使用することで、スキーマ推論中の Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps というエラーの発生を回避し、データを正常に読み取れるようになります。#54427 (Kruglov Pavel).
  • リモートディスク向けの IO スケジューリングのサポートを追加しました。ディスクタイプ s3s3_plainhdfs および azure_blob_storage のストレージ設定に、リソース名を保持する read_resourcewrite_resource 要素を含められるようになりました。これらのリソース向けのスケジューリングポリシーは、サーバー設定内の別セクション resources で設定できます。クエリは設定 workload を使ってマークし、サーバー設定セクション workload_classifiers を使って分類することで、さまざまなリソーススケジューリング要件を満たすことができます。詳細はドキュメントを参照してください。 #47009Sergei Trifonov)。「bandwidth_limit」IO スケジューリングノードタイプを追加しました。これにより、このノードを通過するトラフィックに対して max_speedmax_burst の制約を指定できます。 #54618Sergei Trifonov)。
  • SSH キーに基づく新しいタイプの認証方式を追加しました。これはネイティブ TCP プロトコルでのみ利用できます。 #41109 (George Gamezardashvili)。
  • MergeTree テーブルに新しいカラム _block_number を追加しました。 #44532#47532 (SmitaRKulkarni)。
  • DROP TABLE クエリに対して IF EMPTY 句を追加しました。#48915Pavel Novitskiy)。
  • SQL 関数 toString(datetime, timezone)formatDateTime(datetime, format, timezone) は、定数ではないタイムゾーン引数もサポートするようになりました。 #53680 (Yarik Briukhovetskyi)。
  • ALTER TABLE MODIFY COMMENT のサポートを追加しました。注意: これと似た機能がかなり前に外部コントリビューターによって追加されましたが、まったく動作せず、ユーザーを混乱させるだけでした。これにより #36377 がクローズされます。 #51304 (Alexey Milovidov)。注意: このコマンドはレプリカ間で伝播しないため、同じテーブルでもレプリカごとに異なるコメントを持つ可能性があります。
  • 新しいデータ圧縮コーデックとして GCD、いわゆる「greatest common denominator(最大公約数)」を追加しました。このコーデックはすべてのカラム値の GCD を計算し、その後に各値を GCD で割ります。GCD コーデックは(Delta や DoubleDelta と同様の)データ前処理コーデックであり、単独では使用できません。整数型、Decimal 型、および日時型のデータ型で利用できます。GCD コーデックの有効な利用例としては、カラム値が GCD の倍数単位で増減するケースが挙げられます(例: 24 - 28 - 16 - 24 - 8 - 24、GCD = 4 と仮定)。 #53149 (Alexander Nam)。
  • 新しく 2 つの型エイリアス DECIMAL(P)DECIMAL(P, 0) の省略形)と DECIMALDECIMAL(10, 0) の省略形)が追加されました。これにより、ClickHouse は MySQL の SQL 方言との互換性が向上しました。 #53328 (Val Doroshchuk)。
  • すべての BACKUP および RESTORE 操作を追跡するための新しいシステムログテーブル backup_log が追加されました。 #53638 (Victor Krasnov)。
  • フォーマット設定 output_format_markdown_escape_special_characters(デフォルト: false)を追加しました。この設定は、Markdown 出力フォーマットにおいて、!#$ などの特殊文字をエスケープするかどうか(バックスラッシュを前置して出力するかどうか)を制御します。 #53860 (irenjj)。
  • 関数 decodeHTMLComponent を追加しました。 #54097 (Bharat Nallan).
  • query_log テーブルに peak_threads_usage 列を追加しました。 #54335 (Alexey Gerasimchuck).
  • clickhouse-client に SHOW FUNCTIONS のサポートを追加しました。 #54337 (Julia Kartseva).
  • 0001-01-01(先発グレゴリオ暦)から経過した日数を返す関数 toDaysSinceYearZero を、MySQL との互換性のためにエイリアス TO_DAYS とともに追加しました。 #54479 (Robert Schulze)。関数 toDaysSinceYearZero は、DateTime 型および DateTime64 型の引数もサポートするようになりました。 #54856 (Serge Klochkov)。
  • 関数 YYYYMMDDtoDateYYYYMMDDtoDate32YYYYMMDDhhmmssToDateTimeYYYYMMDDhhmmssToDateTime64 を追加しました。これらは整数としてエンコードされた日付または日時(例: 20230911)を、ネイティブな日付型または日時型に変換します。そのため、既存の関数 YYYYMMDDToDateYYYYMMDDToDateTimeYYYYMMDDhhmmddToDateTimeYYYYMMDDhhmmddToDateTime64 の逆の機能を提供します。 #54509 (Quanfa Fu) (Robert Schulze).
  • byteHammingDistanceeditDistance を含む複数の文字列距離関数を追加しました。 #54935 (flynn)。
  • VALID UNTIL datetime 句を使用して、ユーザー認証情報の有効期限の日付と、必要に応じて時刻を指定できるようにしました。 #51261 (Nikolay Degterinsky).
  • テーブル関数 s3gcsoss で S3 形式の URL を使用できるようになりました。URL は自動的に HTTP に変換されます。例: 's3://clickhouse-public-datasets/hits.csv''https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv' に変換されます。#54931Yarik Briukhovetskyi)。
  • 深くネストした Tuple/Map/Array などの型名を、読みやすい形式で出力するための新しい設定 print_pretty_type_names を追加しました。 #55095 (Kruglov Pavel).

パフォーマンスの向上

  • S3 からの読み取りを、デフォルトでプリフェッチを有効にすることで高速化します。 #53709 (Alexey Milovidov).
  • FINAL を伴うクエリで不要な場合、単一のパーツでは PK とバージョンカラムを暗黙的に読み込まないようにしました。 #53919 (Duc Canh Le).
  • 定数キーを持つ GROUP BY を最適化しました。https://github.com/ClickHouse/ClickHouse/pull/53529 の後、_file/_path で GROUP BY を行うクエリが最適化されます。 #53549 (Kruglov Pavel)。
  • Decimal カラムのソート性能を改善しました。ORDER BY に Decimal カラムが含まれている場合の MergeTree への挿入性能を改善しました。データがすでにソート済み、またはほぼソートされている場合のソート性能を改善しました。 #35961 (Maksim Kita).
  • 巨大なクエリの解析におけるパフォーマンスを改善しました。#51224 を修正しました。#51469frinkr)。
  • 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 のフォローアップです。#54443Yarik Briukhovetskyi)。
  • JSON 要素を std::stringstream にシリアライズする代わりに、このPRではシリアライズ結果を直接 ColumnString に格納するようにしました。#54613 (lgbo)。
  • テーブルが VIEW 経由で参照されている場合でも、MergeTree テーブルから ORDER BY に対応した順序でデータを読み取れるよう、最適化を有効化しました。 #54628 (Vitaly Baranov)。
  • GeneratorJSONPath を再利用し、複数の共有ポインタを削除することで JSON SQL 関数を改善しました。 #54735 (lgbo).
  • Keeper は、パフォーマンス向上のためにリクエストのフラッシュをバッチ化します。 #53049 (Antonio Andelic).
  • INFILE 'glob_expression' を使用する場合、clickhouse-client がファイルを並列に処理するようになりました。#54218 をクローズしました。#54533Max K.)。
  • IN 関数の右辺のカラム型とプライマリキーのカラム型が異なる場合でも、プライマリキーを IN 関数に利用できるようにしました。例: SELECT id FROM test_table WHERE id IN (SELECT '5')#48936 をクローズします。#54544Maksim Kita)。
  • Hash JOIN は内部バッファを縮小して、max_bytes_in_join で設定された利用可能メモリ上限の半分までにメモリ消費を抑えるようになりました。 #54584 (vdimir)。
  • max_block_size に従って array join を行い、OOM 発生の可能性を回避します。#54290 をクローズ。#54664李扬)。
  • s3 テーブル関数で HTTP 接続を再利用するようになりました。 #54812 (Michael Kolupaev).
  • MergeTreeRangeReader::Stream::ceilRowsToCompleteGranules における線形探索を二分探索に置き換え。 #54869 (usurai).

実験的機能

  • Annoy 索引の作成を、max_threads_for_annoy_index_creation SETTING を使用して並列化できるようになりました。 #54047 (Robert Schulze).
  • 分散テーブルでの parallel replicas は、すべてのレプリカから読み取らなくなりました。 #54199 (Igor Nikonov).

改善

  • MergeTree データパーツ内のカラムのファイル名が長い場合に、それらを名前のハッシュ値に置き換えられるようにしました。これにより、一部のケースで発生する File name too long エラーの回避に役立ちます。 #50612 (Anton Popov).
  • メタデータの解析に失敗した場合、JSON 形式のデータを JSONEachRow として解析します。これにより、実際の形式が JSONEachRow であっても、拡張子が .json のファイルを読み取ることができます。#45740 をクローズ。#54405Kruglov Pavel)。
  • HTTP クエリ実行中に例外が発生した場合にも、有効な JSON/XML を出力するようになりました。この挙動は http_write_exception_in_output_format 設定で有効/無効を切り替えられます(デフォルトで有効)。#52853Kruglov Pavel)。
  • information_schema.tables の VIEW に、新しいフィールド data_length が追加され、ディスク上のデータのおおよそのサイズを表示できるようになりました。Amazon QuickSight が生成するクエリを実行するために必須です。 #55037 (Robert Schulze).
  • MySQL インターフェイスに prepared statements の最小限の実装が追加され、MySQL connector を介して Tableau Online から ClickHouse へ接続できるようになりました。 #54115 (Serge Klochkov)。注意: prepared statements の実装はきわめてミニマルであり、この特定の Tableau Online のユースケースでは不要なため、まだ引数バインディングはサポートしていません。Tableau Online の大規模なテストを実施したうえで問題が見つかった場合には、必要に応じてフォローアップとして実装される予定です。
  • regexp_tree 辞書で大文字小文字を区別しないモードおよび dot-all マッチングモードをサポートしました。 #50906 (Johann Gan).
  • Keeper の改善: createIfNotExists コマンドを追加。 #48855 (Konstantin Bogdanov)。
  • 整数型に対する型推論の精度を向上し、#51236 を修正。 #53003 (Chen768959)。
  • MaterializedMySQL において、文字列リテラル内の文字セットを解決する処理を導入しました。 #53220 (Val Doroshchuk).
  • 利用頻度の低い EmbeddedRocksDB テーブルエンジンで、極めてまれなシナリオにおいて発生する細かな問題を修正しました。DROP TABLE 実行後に、EmbeddedRocksDB テーブルエンジンが NFS 上のファイルを正しくクローズしない場合がありました。 #53502 (Mingliang Pan)。
  • RESTORE TABLE ON CLUSTER は、ホスト上で UUID が一致するレプリケーテッドテーブルを作成しなければなりません。そうでない場合、ZooKeeper パスのマクロ {uuid} は RESTORE 実行後に正しく動作しません。この PR でそれを実装しました。 #53765 (Vitaly Baranov).
  • restore_broken_parts_as_detached というリストア用の設定を追加しました。この設定が true に設定されている場合、RESTORE プロセスはリストア中に壊れたパーツがあっても停止せず、壊れたパーツはすべて broken-from-backup というプレフィックスを付けて detached フォルダにコピーされます。false に設定されている場合、RESTORE プロセスは最初に見つかった壊れたパーツ(存在する場合)で停止します。デフォルト値は false です。 #53877 (Vitaly Baranov).
  • HTTP ヘッダー X-ClickHouse-Progress および X-ClickHouse-Summaryelapsed_ns フィールドを追加しました。 #54179 (joelynch)。
  • keeper-client 向けに reconfighttps://github.com/ClickHouse/ClickHouse/pull/49450)、syncexists コマンドを実装。#54201pufit)。
  • clickhouse-localclickhouse-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)の動作とも一貫性があります。#54249Robert Schulze)。
  • formatReadableTimeDelta にサブ秒精度のサポートを追加しました。 #54250 (Andrey Zvonov).
  • allow_remove_stale_moving_parts をデフォルトで有効化しました。 #54260 (vdimir).
  • キャッシュから取得した count の利用方法を修正し、アーカイブ読み取り時のプログレスバーを改善。 #54271 (Kruglov Pavel).
  • SSO を使用した S3 クレデンシャルのサポートを追加しました。SSO で使用するプロファイルを定義するには、AWS_PROFILE 環境変数を設定します。 #54347 (Antonio Andelic)。
  • 入力フォーマットで、ネストした型 Array/Tuple/Map のデフォルト値として NULL をサポート。#51100 をクローズ。#54351Kruglov Pavel)。
  • Arrow/Parquet フォーマットから、通常とは異なる chunk 構成のデータも読み取れるようにしました。 #54370 (Arthur Passos).
  • MySQL 互換性のために stddevPop 関数に STD エイリアスを追加しました。#54274 をクローズ。 #54382Nikolay Degterinsky)。
  • MySQL との互換性のために addDate 関数を、一貫性のために subDate 関数を追加しました。参照: #54275#54400 (Nikolay Degterinsky)。
  • system.detached_partsmodification_time 列を追加しました。 #54506 (Azat Khuzhin).
  • splitby_max_substrings_includes_remaining_string という設定を追加しました。これは、引数 max_substring > 0 を取る splitBy*() 関数が、(残りが存在する場合に)残りの文字列を結果配列に含めるかどうか(Python/Spark と同様のセマンティクス)を制御します。デフォルトの動作は変更されません。#54518Robert Schulze)。
  • Int64/UInt64 フィールドに対するより適切な整数型推論。#53003 の続きです。配列の配列などのネストされた型や、map/tuple のような関数にも対応するようになりました。Issue: #51236#54553Kruglov Pavel)。
  • スカラーと配列間の乗算、除算、剰余演算を追加しました。どちらの向きでも演算でき、例えば 5 * [5, 5][5, 5] * 5 の両方のケースが可能です。 #54608 (Yarik Briukhovetskyi)。
  • keeper-clientrm コマンドにオプションの version 引数を追加し、より安全に削除できるようにしました。 #54708 (János Benjamin Antal).
  • systemd によるサーバーの強制終了を無効化しました(Buffer テーブル使用時にデータ損失を引き起こす可能性があるため)。 #54744 (Azat Khuzhin).
  • 関数の結果が 2 回の呼び出しの間で(まったく同じ入力が与えられた場合に)安定しているかどうかを示すフィールド is_deterministic をシステムテーブル system.functions に追加しました。 #54766 #55035 (Robert Schulze).
  • スキーマ information_schema 内のビューを、MySQL の同等のビューとの互換性がより高くなるように(すなわち、変更および拡張を行い)、Tableau Online から ClickHouse に接続できるレベルまで改善しました。具体的には: 1. フィールド information_schema.tables.table_type の型を Enum8 から String に変更しました。2. ビュー information_schema.table にフィールド table_comment および table_collation を追加しました。3. ビュー information_schema.key_column_usagereferential_constraints を追加しました。4. information_schema のビュー内で使用されていた大文字エイリアスを、具体的な大文字のカラムに置き換えました。#54773 (Serge Klochkov)。
  • クエリキャッシュは、nowrandomStringdictGet のような非決定的関数を含むクエリの結果をキャッシュしようとした場合に、エラーを返すようになりました。以前の動作(結果を暗黙的にキャッシュしない)と比べて、この変更により混乱や驚きが減ります。 #54801 (Robert Schulze).
  • file/s3/url/... ストレージでは materialized/ephemeral/alias などの特殊カラムを使用できないようにし、ファイルからの ephemeral カラムへの INSERT を修正しました。#53477 をクローズしました。#54803Kruglov Pavel)。
  • バックアップ用メタデータの収集をより柔軟に構成できるようにしました。 #54804 (Vitaly Baranov).
  • clickhouse-local のログファイル(--server&#95;logs&#95;file フラグで有効化されている場合)は、clickhouse-server と同様に、各行の先頭にタイムスタンプやスレッド ID などの情報を付加するようになりました。 #54807 (Michael Kolupaev)。
  • system.merge_tree_settings テーブルのフィールド is_obsolete — 廃止された MergeTree の設定では、このフィールドが 1 になるようになりました。以前は、その設定が廃止されていることは説明文にのみ記載されていました。 #54837 (Robert Schulze).
  • interval リテラルを使用する場合に複数形を使えるようにしました。INTERVAL 2 HOURSINTERVAL 2 HOUR と同等になります。 #54860 (Jordi Villar).
  • Nullable な PK を持つ PROJECTION の作成を常に許可するようにしました。これにより #54814 を修正しました。 #54895 (Amos Bird)。
  • 接続リセットによる失敗が発生した場合にバックアップの S3 操作を再試行するようにしました。 #54900 (Vitaly Baranov).
  • 設定の最大値が最小値より小さい場合に出る例外メッセージを、より正確な内容になるように修正。 #54925 (János Benjamin Antal).
  • LIKEmatch およびその他の正規表現マッチ関数で、非 UTF-8 の部分文字列を含むパターンについて、バイナリマッチにフォールバックすることでマッチできるようになりました。例:string LIKE '\xFE\xFF%' を使用して BOM を検出できます。これにより #54486 が解決されました。 #54942 (Alexey Milovidov)。
  • プロファイルイベント ContextLockWaitMicroseconds を追加しました。 #55029 (Maksim Kita).
  • Keeper がログレベルを動的に調整できるようになりました。 #50372 (helifu).
  • MySQL との互換性確保のために timestamp 関数を追加しました。#54275 をクローズしました。#54639 (Nikolay Degterinsky)。

ビルド/テスト/パッケージングの改善

  • ClickHouse の公式ビルドおよび継続的インテグレーションビルドで使用するコンパイラを Clang 16 から 17 に更新しました。 #53831 (Robert Schulze).
  • ルックアップ用の tld データ(tldLookup.generated.cpp)を再生成しました。 #54269 (Bharat Nallan).
  • 冗長な clickhouse-keeper-client シンボリックリンクを削除しました。 #54587 (Tomas Barton).
  • bash の解決に /usr/bin/env を使用するようにし、NixOS をサポートしました。 #54603 (Fionera).
  • CMake に、DWARF コールグラフを使用せずに perf record を実行するために必要な PROFILE_CPU オプションを追加しました。 #54917 (Maksim Kita).
  • リンカが LLD と異なる場合は、致命的なエラーで停止するようにしました。 #55036 (Alexey Milovidov).
  • base64 値の処理(エンコード/デコード)に使用するライブラリを Turbo-Base64 から aklomp-base64 に置き換えました。どちらも x86 と ARM で SIMD により高速化されていますが、理由は次のとおりです。1. 後者のライセンス(BSD-2)は ClickHouse にとってより好ましく、一方で Turbo64 はその間に GPL-3 に変更されたこと、2. GitHub のスター数が多く、aklomp-base64 の方が将来性が高いと考えられること、3. aklomp-base64 の方がやや洗練された API を持っていること(これは主観的ではあります)、4. aklomp-base64 では(スレッドセーフでない初期化のような)バグを回避するためのハックが不要であることです。注意: aklomp-base64 はパディングされていない base64 値を拒否しますが、Turbo-Base64 はベストエフォートでデコードします。RFC-4648 ではパディングを必須とするかどうかは明確にされていませんが、コンテキストによってはこの点が動作変更となる場合があるため注意が必要です。 #54119 (Mikhail Koviazin).

バグ修正(公式安定版リリースでユーザーに見える誤動作)

  • zero-copy レプリケーションを使用する REPLACE/MOVE PARTITION の不具合を修正 (注: "zero-copy replication" は実験的機能です) #54193 (Alexander Tokmakov).
  • ハードリンクを用いたゼロコピーロックを修正(注: 「zero-copy replication」は実験的な機能です)#54859Alexander Tokmakov)。
  • ゼロコピー処理で発生するガベージを修正(注: "zero-copy レプリケーション" は実験的機能です) #54550 (Alexander Tokmakov)。
  • HTTP リトライのタイムアウト値をミリ秒単位で指定するように修正しました(以前は誤っていました)。 #54438 (Duc Canh Le).
  • OUTFILE で CapnProto/Protobuf を使用する際に表示される誤解を招くエラーメッセージを修正 #52870 (Kruglov Pavel)。
  • LIMIT 句を伴う parallel replicas 利用時のサマリーレポートを修正 #53050 (Raúl Marín)。
  • S3 への/からの BACKUP(ネイティブコピーが使用されていない場合)およびその他のいくつかの箇所におけるスロットル制御を修正しました #53336 (Azat Khuzhin)。
  • ディレクトリ全体をコピーする際の I/O 制限の問題を修正 #53338 (Azat Khuzhin)。
  • 修正: PREWHERE 句の条件へアクションを移動した際にカラムが失われることがある問題を修正 #53492 (Yakov Olkhovskiy)。
  • バイトレベルで等しいパーツを置き換える際に発生していた内部エラーを修正しました #53735 (Pedro Riera)。
  • 修正: interpolate 式に含まれるカラムを必須にする #53754Yakov Olkhovskiy)。
  • クラスタディスカバリの初期化と、設定ファイルでのフェイルポイントの設定処理を修正しました #54113 (vdimir)。
  • accurateCastOrNull の不具合を修正 #54136 (Salvatore Mesoraca).
  • FINAL 修飾子付きの Nullable 主キーを修正 #54164 (Amos Bird)。
  • 重複したデータが存在する場合に、新しいデータをレプリケートされた materialized view へ挿入できなくなっていた問題を修正しました。 #54184 (Pedro Riera).
  • Fix: ブルームフィルターで IPv6 を許可 #54200 (Yakov Olkhovskiy).
  • IPv4 で発生し得る型不一致を修正 #54212 (Bharat Nallan)。
  • 再作成されたインデックスに対応する system.data_skipping_indices を修正しました #54225 (Artur Malchanau)。
  • multiple join rewriter v2 における名前衝突を修正 #54240 (Tao Wang)。
  • JOIN の実行後に system.errors に予期しないエラーが記録される問題を修正 #54306 (vdimir)。
  • isZeroOrNull(NULL) の不具合を修正 #54316 (flynn)。
  • 修正: prefer_localhost_replica = 1 の場合に Distributed テーブルで parallel replicas を使用する際の問題を修正 #54334 (Igor Nikonov)。
  • vertical merge と ReplacingMergeTree およびクリーンアップの最適化における論理エラーを修正 #54368 (alesapin)。
  • s3 テーブル関数で発生する可能性があった URI contains invalid characters エラーを修正 #54373Kruglov Pavel)。
  • arrayExists 関数の AST 最適化中に発生するセグメンテーションフォルトを修正 #54379 (Nikolay Degterinsky)。
  • analysisOfVariance 関数での加算前にオーバーフローをチェックするようにしました #54385 (Antonio Andelic)。
  • removeSharedRecursive 関数のバグを再現して修正しました #54430 (Sema Checherinda)。
  • PREWHERE および FINAL における SimpleAggregateFunction の結果が誤ったものになる可能性がある問題を修正 #54436 (Azat Khuzhin).
  • アナライザーを使用しない場合の indexHint によるパーツのフィルタリングを修正 #54449 (Azat Khuzhin)。
  • 正規化された状態を使用する集約 PROJECTION を修正 #54480 (Amos Bird)。
  • clickhouse-local: multiquery パラメータに関する修正 #54498 (CuiShuoGuo).
  • clickhouse-local がコマンドライン引数 --database をサポートするようになりました #54503 (vdimir)。
  • input_format_with_names_use_header が無効になっている状態での -WithNames フォーマットで発生しうるパースエラーを修正 #54513 (Kruglov Pavel)。
  • まれに発生する CHECKSUM_DOESNT_MATCH エラーを修正しました #54549 (alesapin)。
  • 既にソート済みの結果に対する UNION ALL のソートを修正 #54564 (Vitaly Baranov)。
  • Keeper におけるスナップショットのインストール処理を修正 #54572 (Antonio Andelic).
  • ColumnUnique のレースコンディションを修正 #54575 (Nikita Taranov)。
  • Annoy/Usearch インデックス: デフォルト値での構築時に発生する LOGICAL_ERROR を修正 #54600 (Robert Schulze).
  • ColumnDecimal のシリアライズを修正 #54601 (Nikita Taranov)。
  • 空白を含むカラム名に対する *Cluster 関数のスキーマ推論を修正 #54635 (Kruglov Pavel)。
  • デフォルト値や INSERT で明示的に指定されたカラムがある場合に、挿入先テーブルの構造を使用する処理を修正 #54655 (Kruglov Pavel)。
  • 修正: 代替(オルタネーション)を含む可能性がある正規表現によるマッチをキー条件として使用しないようにしました。 #54696 (Yakov Olkhovskiy).
  • 垂直マージとクリーンアップに関する ReplacingMergeTree の問題を修正 #54706 (SmitaRKulkarni)。
  • ORDER BY 時に仮想カラムが誤った値を持つ問題を修正 #54811 (Michael Kolupaev)。
  • analyzer を使用しない場合における indexHint によるパーツのフィルタリングを修正。 #54825 #54449 (Azat Khuzhin)。
  • シャットダウン時に発生する Keeper のセグメンテーションフォールトを修正 #54841 (Antonio Andelic)。
  • MaterializedPostgreSQL で発生する Invalid number of rows in Chunk エラーを修正しました #54844 (Kseniia Sumarokova)。
  • 旧式のフォーマット設定を別セクションへ移動 #54855 (Kruglov Pavel)。
  • パーティションキーが変更された場合に minmax_count_projection を再構築する #54943 (Amos Bird)。
  • 関数 if における ColumnVector<Int128> への誤ったキャストを修正 #55019 (Kruglov Pavel)。
  • 異なる PROJECTION またはインデックスを持つテーブルからのパーツを ATTACH できないようにしました #55062 (János Benjamin Antal)。
  • 空のサブクエリ結果に対して、スカラー結果マップに NULL を格納するように修正 #52240 (vdimir)。
  • まれなケースにおいて FINAL が不正な読み取り範囲を生成してしまう問題を修正 #54934Nikita Taranov)。
  • Fix: Keeper によるリトライなしで insert quorum が動作するよう修正 #55026 (Igor Nikonov).
  • Nullable を使用する simple state の不具合を修正 #55030 (Pedro Riera)。

ClickHouse 23.8 LTS リリース, 2023-08-31

後方互換性のない変更

  • 動的ディスクに名前が付けられている場合は、ディスク関数の引数で disk = disk(name = 'disk_name', ...) のように指定する必要があります。以前のバージョンでは disk = disk_<disk_name>(...) のように指定できましたが、これはサポートされなくなりました。#52820Kseniia Sumarokova)。
  • clickhouse-benchmark は、--concurrency を 1 より大きい値で指定して実行した場合、接続を並列に確立します。以前は、ヨーロッパから米国への 1000 個の同時接続で実行すると実用的ではありませんでした。レイテンシが高い接続に対しても QPS を正しく計算するようになりました。後方互換性のない変更として、clickhouse-benchmark の JSON 出力用オプションは削除されました。このオプションを使用していた場合は、代替手段として system.query_log から JSON 形式でデータを抽出できます。#53293Alexey Milovidov)。
  • system.text_log から microseconds カラムを、system.metric_log から milliseconds カラムを削除しました。これらは event_time_microseconds カラムが存在するため冗長であるためです。#53601Alexey Milovidov)。
  • メタデータキャッシュ機能を非推奨としました。これは実験的機能であり、これまで使用したことはありません。この機能は危険です: #51182system.merge_tree_metadata_cache システムテーブルを削除しました。メタデータキャッシュはこのバージョンではまだ利用可能ですが、近いうちに削除されます。これにより #39197 がクローズされます。#51303Alexey Milovidov)。
  • TLS 接続での 3DES サポートを無効化しました。#52893Kenji 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)。
  • clusterclusterAllReplicasremoteremoteSecure 関数をテーブル名なしで使用できるようにしました。#50808#50848Yangkuan Liu)。
  • Kafka コンシューマを監視するためのシステムテーブル。 #50999 (Ilya Golshtein)。
  • max_sessions_for_user SETTING を追加しました。 #51724 (Alexey Gerasimchuck).
  • Spark の to_utc_timestamp/from_utc_timestamp と同様に動作する新しい関数 toUTCTimestamp/fromUTCTimestamp を追加しました。 #52117 (KevinyhZou)。
  • ClickHouse テーブルの構造を CapnProto/Protobuf フォーマットのスキーマに変換する新しい関数 structureToCapnProtoSchema / structureToProtobufSchema を追加しました。テーブル構造から自動生成されたスキーマ(format_capn_proto_use_autogenerated_schema / format_protobuf_use_autogenerated_schema の設定で制御)を利用することで、外部のフォーマット用スキーマなしに CapnProto/Protobuf フォーマットでデータを入出力できるようにしました。入出力時に、設定 output_format_schema を使用して自動生成されたスキーマをエクスポートできるようにしました。 #52278 (Kruglov Pavel).
  • system.query_log に新しいフィールド query_cache_usage が追加され、クエリキャッシュが利用されたかどうか、またどのように利用されたかを示します。 #52384 (Robert Schulze).
  • 新しい関数 startsWithUTF8endsWithUTF8 を追加しました。 #52555 (李扬).
  • TSV/CustomSeparated/JSONCompactEachRow 形式で可変個数のカラムを許可し、可変個数のカラムでもスキーマ推論が機能するようにしました。input_format_tsv_allow_variable_number_of_columnsinput_format_custom_allow_variable_number_of_columnsinput_format_json_compact_allow_variable_number_of_columns の各設定を追加しました。 #52692 (Kruglov Pavel)。
  • ReplicatedMergeTree のテスト用に、SYSTEM STOP/START PULLING REPLICATION LOG クエリを追加しました。 #52881 (Alexander Tokmakov)。
  • ミューテーション内で、定数だが非決定的な関数をイニシエーター側で実行できるようにしました。 #53129 (Anton Popov).
  • One という入力フォーマットを追加しました。このフォーマットはデータを一切読み出さず、UInt8 型で値が 0dummy というカラムを持つ単一行のみを常に返し、system.one と同様に動作します。これにより、データを読み込むことなく、_file/_path 仮想カラムと組み合わせて、file/s3/url/hdfs などのテーブル関数でファイル一覧を取得できます。 #53209 (Kruglov Pavel)。
  • tupleConcat 関数を追加しました。 #52759 をクローズしました。 #53239Nikolay Degterinsky)。
  • TRUNCATE DATABASE 操作をサポート。#53261Bharat Nallan)。
  • 主キーの処理に使用されるスレッド数を制限するための max_threads_for_indexes 設定を追加しました。 #53313 (jorisgio)。
  • SipHash の鍵付き関数を再度追加しました。 #53525 (Salvatore Mesoraca).
  • (#52755 , #52895) 関数 arrayRotateLeftarrayRotateRightarrayShiftLeftarrayShiftRight を追加しました。 #53557 (Mikhail Koviazin).
  • system.clusters テーブルに、cluster カラムのエイリアスとして name カラムを追加しました。 #53605 (irenjj).
  • 高度なダッシュボードで一括編集(保存/読み込み)が行えるようになりました。 #53608 (Alexey Milovidov).
  • 高度なダッシュボードで、チャートを最大化したり移動したりできるようになりました。 #53622 (Alexey Milovidov)。
  • 配列同士の加算および減算に対応しました: [5,2] + [1,7]。除算および乗算については、要素ごとの乗算と引数のスカラー積のどちらを意味するのかが曖昧なため、実装されていません。 #49939 をクローズ。 #52625Yarik Briukhovetskyi)。
  • テーブル名として文字列リテラルを使用できるようにしました。#52178 をクローズ。#52635hendrik-m)。

実験的機能

  • S3 からのストリーミングデータインポートのために、新しいテーブルエンジン S3Queue を追加しました。 #37012 をクローズ。 #49086 (s-kat)。まだ使用可能な状態ではありません。使用しないでください。
  • 分散テーブル経由でのレプリカからの並列読み取りを有効にしました。 #49708 に関連。 #53005 (Igor Nikonov)。
  • 近似近傍探索手法として HNSW の実験的サポートを追加しました。 #53447 (Davit Vardanyan)。現在は、この実装の開発を継続している人向けのものです。使用しないでください。

パフォーマンスの向上

  • Parquet フィルタプッシュダウン。つまり、Parquet ファイルを読み込む際に、WHERE 句および各カラムの最小/最大値に基づいて row groups(ファイルの chunk)がスキップされます。特に、ファイルがおおよそあるカラムでソートされている場合、そのカラムの狭い範囲でフィルタするクエリは大幅に高速になります。 #52951 (Michael Kolupaev)。
  • Parquet で小さな行グループをまとめてバッチ読み込みすることで、読み取りを最適化しました。#53069 をクローズしました。 #53281 (Kruglov Pavel)。
  • ほとんどの入力フォーマットにおいて、ファイルに対する count を最適化しました。#44334 をクローズ。#53637Kruglov Pavel)。
  • url/file/hdfs テーブル関数で読み込む前に、ファイルやパスでフィルタリングを行うようにしました。 #53529 (Kruglov Pavel).
  • AArch64、PowerPC、SystemZ、RISC-V 向けの JIT コンパイルを有効にしました。 #38217 (Maksim Kita).
  • countDistinctIfcount_distinct_implementation を用いるよう書き換えるための設定 rewrite_count_distinct_if_with_count_distinct_implementation を追加しました。#30642 をクローズしました。 #46051flynn)。
  • マージ前の変換処理を並列化することで、uniq および uniqExact 集約関数の状態マージを高速化しました。 #50748 (Jiebin Sun).
  • 可変長キーが多数ある場合の Nullable な文字列キーを用いた集約処理のパフォーマンスを最適化しました。 #51399 (LiuNeng).
  • preimage を用いた time フィルタ最適化のためのパスを Analyzer に追加しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上での SSB のパフォーマンス実験では、experimental analyzer を有効にした場合、この変更により QPS の幾何平均値が 8.5% 向上することが示されています。 #52091 (Zhiguo Zhou)。
  • uniqExact (COUNT DISTINCT) 関数において、すべてのハッシュセットが単一レベルの場合にマージ処理を最適化しました。 #52973 (Jiebin Sun).
  • Join テーブルエンジン: すべてのカラムを含むハッシュ結合用データ構造をクローンしないようにしました。 #53046 (Duc Canh Le).
  • パフォーマンスを向上させるため、Apache Arrow ライブラリを使用しないネイティブな ORC 入力フォーマットを実装しました。 #53324 (李扬)。
  • ダッシュボードがサーバーにデータの圧縮を指示します。これは、低速なインターネット接続で長期間のデータを扱う場合に有用です。例えば、86400 個のデータポイントを持つ 1 つのチャートは、圧縮しない場合 1.5 MB ですが、br で圧縮すると 60 KB になります。 #53569 (Alexey Milovidov)。
  • BACKUP および RESTORE でのスレッドプールの利用効率を改善。 #53649 (Nikita Mikhaylov).
  • 起動時にファイルシステムキャッシュのメタデータを並列で読み込むようになりました。load_metadata_threads(デフォルト: 1)キャッシュ設定で構成できます。#52037 に関連。#52943Kseniia Sumarokova)。
  • move_primary_key_columns_to_end_of_prewhere を改善しました。 #53337 (Han Fei)。
  • これは ClickHouse Keeper とのインタラクションを最適化します。以前は、呼び出し元が同じ watch コールバックを複数回登録できていました。その場合、それぞれのエントリがメモリを消費し、同じコールバックが何度も呼び出されてしまい、あまり意味がありませんでした。これを避けるために、呼び出し元側で同じ watch を複数回追加しないようにするロジックを実装することもできましたが、この変更により、watch コールバックが shared_ptr 経由で渡された場合には、この重複排除が内部で行われるようになりました。 #53452 (Alexander Gololobov).
  • file/s3/url/hdfs/azure 関数における count のために、ファイル内の行数をキャッシュできるようにしました。キャッシュは use_cache_for_count_from_files を設定することで有効/無効を切り替えられます(デフォルトで有効)。https://github.com/ClickHouse/ClickHouse/pull/53637 の続きです。 #53692 (Kruglov Pavel).
  • より慎重なスレッド管理により、大量のファイルを扱う S3 テーブル関数の処理速度が 25%以上向上しました。 #53668 (pufit).

改善点

  • 外部コマンドの標準エラー出力にデータが出力された場合の挙動(none、log、throw)を制御するための stderr_reaction 設定項目を追加しました。これにより、外部コマンドのデバッグが容易になります。 #43210 (Amos Bird)。
  • system part_log および Merge テーブルに partition カラムを追加しました。 #48990 (Jianfei Hu).
  • (index) uncompressed/mark、mmap およびクエリキャッシュのサイズを、サーバーの再起動なしに実行時に動的に構成できるようになりました。 #51446 (Robert Schulze).
  • 複合キーで Dictionary が作成された場合、自動的に「complex key」レイアウトバリアントを選択するようにしました。 #49587 (xiebin).
  • 新しい同時実行制御機能をより良くテストできるように、use_concurrency_control SETTING を追加しました。 #49618 (Alexey Milovidov)。
  • 誤入力されたデータベース名およびテーブル名に対する候補を追加しました。 #49801 (Yarik Briukhovetskyi).
  • Gluten によって HDFS から小さなファイルを読み込む際、Spark で直接クエリを実行する場合と比べて、より多くの時間がかかることが分かりました。この問題を改善しました。 #50063 (KevinyhZou)。
  • セッションの有効期限切れ後に無意味なエラーログが大量に出力されており、好ましくありませんでした。 #50171 (helifu).
  • 有効期限付きのフォールバック ZooKeeper セッションを導入しました。DNS アドレス向けの system.zookeeper_connection の index カラムを修正しました。 #50424 (Anton Kozlov).
  • max_partitions_per_insert_block に到達したときにログを記録できるようにしました。 #50948 (Sean Haynes)。
  • clickhouse-keeper-client に多数のカスタムコマンドを追加しました(主に ClickHouse のデバッグを容易にするため)。 #51117 (pufit)
  • 接続文字列に "sas" が含まれる場合に、その接続文字列が常にデフォルトエンドポイントで始まるとは限らないことを考慮して、azureBlobStorage テーブル関数での接続文字列チェックを更新しました。また、URL に Azure のコンテナーを追加した後も "sas" トークンが含まれるように、接続 URL を更新しました。 #51141 (SmitaRKulkarni).
  • full_sorting_merge JOIN アルゴリズムにおける Set フィルタリングの説明を修正。 #51329 (Tanay Tummalapalli)。
  • max_block_size が非常に大きい場合に Aggregator のメモリ消費量が増大する問題を修正しました。 #51566 (Nikita Taranov).
  • SYSTEM SYNC FILESYSTEM CACHE コマンドを追加しました。これはファイルシステムキャッシュのメモリ上の状態をディスク上の状態と比較し、必要に応じてメモリ上の状態を修正します。ディスク上のデータに対して手動で変更や操作を行う場合にのみ必要ですが、そのような操作は強く非推奨です。 #51622 (Kseniia Sumarokova)。
  • 既存の S3 storage 設定用プロキシリゾルバとの後方互換性を維持しつつ、ClickHouse 向けの汎用プロキシリゾルバの作成を試みました。 #51749 (Arthur Passos).
  • file/s3/hdfs/url/azureBlobStorage テーブル関数でタプルのサブカラムの読み取りをサポート。 #51806 (Kruglov Pavel).
  • 関数 arrayIntersect は、最初の引数の順序に対応する形で値を返すようになりました。 #27622 をクローズ。 #51850Yarik Briukhovetskyi)。
  • 指定したアクセスストレージ内でアクセスエンティティを作成・削除したり、あるアクセスストレージから別のアクセスストレージへ移動したりできる新しいクエリを追加しました。 #51912 (pufit).
  • Replicated データベースエンジンでの ALTER TABLE FREEZE クエリをレプリケートしないようにしました。 #52064 (Mike Kot).
  • 予期しないシャットダウンが発生した際にシステムテーブルをフラッシュできる機能を追加しました。 #52174 (Alexey Gerasimchuck).
  • 事前署名付きURL使用時に s3 テーブル関数が動作しない不具合を修正。#50846 をクローズ。#52310chen)。
  • system.events および system.metrics テーブルにおいて、eventmetric のエイリアスとしてカラム name を追加しました。 #51257 をクローズしました。 #52315chen)。
  • SQL との互換性を高めるため、パーサーで CREATE UNIQUE INDEX 構文を no-op(何もしない処理)としてサポートしました。UNIQUE インデックスはサポートされていません。クエリ内の UNIQUE キーワードを無視するには、create_index_ignore_unique = 1 を設定してください。#52320 (Ilya Yatsishin)。
  • 一部の Kafka エンジン設定(topic、consumer、client_id など)で、あらかじめ定義されたマクロ({database} および {table})を利用できるようにしました。#52386Yury Bogomolov)。
  • バックアップ/リストア中のファイルシステムキャッシュの更新を無効化しました。バックアップ/リストア中はファイルシステムキャッシュを更新すべきではなく、プロセスを遅くするだけでメリットがないと考えられます(BACKUP コマンドは大量のデータを読み取る可能性があり、そのすべてのデータをファイルシステムキャッシュに投入してすぐに追い出すことには意味がないため)。#52402Vitaly Baranov)。
  • S3 エンドポイントの設定により、ルートパスから利用できるようになり、必要に応じて末尾に自動的に「/」が追加されるようになりました。 #47809#52600xiaolei565)。
  • clickhouse-local で位置指定オプションを許可し、グローバルな UDF 設定(user_scripts_path と user_defined_executable_functions_config)を自動的に設定するようにしました。 #52643 (Yakov Olkhovskiy).
  • system.asynchronous_metrics に、クエリキャッシュを確認するためのメトリクス "QueryCacheEntries" および "QueryCacheBytes" が追加されました。 #52650 (Robert Schulze).
  • S3 へバックアップする際に、BACKUP ステートメントの SETTINGS 句で s3_storage_class パラメータを指定できるようになりました。 #52658 (Roman Vasin).
  • バックアップのメタデータファイルを解析し、バックアップに関する情報を出力するユーティリティ print-backup-info.py を追加しました。 #52690 (Vitaly Baranov)。
  • #49510 をクローズ。現在、データベース名およびテーブル名は大文字・小文字を区別していますが、BI ツールは information_schema に対して、あるときは小文字、あるときは大文字でクエリを送信します。このため、小文字のテーブル(information_schema.tables など)を含む information_schema データベースと、大文字のテーブル(INFORMATION_SCHEMA.TABLES など)を含む INFORMATION_SCHEMA データベースが存在します。しかし、一部のツールは INFORMATION_SCHEMA.tablesinformation_schema.TABLES に対してクエリを送信します。提案された解決策は、小文字および大文字のテーブルを、それぞれ小文字・大文字の information_schema データベース内に重複して用意することです。 #52695 (Yarik Briukhovetskyi)。
  • クエリ CHECK TABLE のパフォーマンスと使い勝手が改善されました(進行状況の更新を通知し、キャンセル可能になりました)。 #52745 (vdimir).
  • タプルに対して modulointDivintDivOrZero をサポートし、タプルの各要素に演算を適用するようにしました。 #52758 (Yakov Olkhovskiy).
  • xml の後に、clickhouse-client でデフォルトの yaml および yml 設定ファイルを検索するようになりました。 #52767 (Alexey Milovidov).
  • 'clickhouse' 以外をルートとする設定にマージする際、ルートノード名が異なる設定は、例外を送出することなく単にスキップされていました。 #52770 (Yakov Olkhovskiy).
  • サンプリングメモリプロファイラで追跡する割り当てについて、最小サイズ(memory_profiler_sample_min_allocation_size)と最大サイズ(memory_profiler_sample_max_allocation_size)を指定できるようになりました。 #52779 (alesapin)。
  • precise_float_parsing 設定を追加し、浮動小数点数の解析方式(高速/高精度)を切り替え可能にしました。 #52791 (Andrey Zvonov).
  • clickhouse-keeper(シンボリックリンク)にも、clickhouse-keeper(実行ファイル)と同じデフォルトパスを使用するようにしました。 #52861 (Vitaly Baranov).
  • テーブル関数 remote のエラーメッセージを改善しました。 #40220 をクローズしました。 #52959jiyoungyoooo)。
  • RESTORE クエリの SETTINGS 句で独自のストレージポリシーを指定できるようになりました。 #52970 (Victor Krasnov).
  • バックアップ処理における S3 リクエストをスロットリング(レート制限)できる機能を追加しました(BACKUP および RESTORE コマンドが s3_max_[get/put]_[rps/burst] の設定を反映するようになりました)。#52974Daniel Pozo Escalona)。
  • レプリケートされたユーザー定義関数やレプリケートストレージを使用するアクセス制御エンティティを管理する際に、クエリ内の ON CLUSTER 句を無視できるようにする設定を追加しました。 #52975 (Aleksei Filatov)。
  • JOIN ステップのアクションを EXPLAIN で表示できるようにしました。 #53006 (Maksim Kita).
  • hasTokenOrNullhasTokenCaseInsensitiveOrNull が、空の needle 引数に対して null を返すようになりました。 #53059 (ltrk2).
  • ファイルシステムキャッシュに許可されるパスを制限できるようにしました。主にダイナミックディスクで有用です。サーバー設定で filesystem_caches_path が指定されている場合、すべてのファイルシステムキャッシュのパスはこのディレクトリに制限されます。例えば、キャッシュ設定内の path が相対パスの場合は filesystem_caches_path 内に配置されます。キャッシュ設定内の path が絶対パスの場合は、filesystem_caches_path の内部に存在している必要があります。設定で filesystem_caches_path が指定されていない場合、挙動は以前のバージョンと同じになります。 #53124 (Kseniia Sumarokova)。
  • 多くのカスタムコマンドを追加しました(主に ClickHouse のデバッグを容易にするため)。 #53127 (pufit)。
  • スキーマ推論時にファイル名に関する診断情報を追加しました。これは、グロブで複数のファイルを処理する際に役立ちます。 #53135 (Alexey Milovidov)。
  • 2 つ目の接続でセッションの作成が許可されていない場合、クライアントはメイン接続を使用してサジェスト候補を読み込みます。 #53177 (Alexey Gerasimchuck).
  • SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM] クエリで EXCEPT 句を指定できるようになりました。例: SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP#53280 (Nikolay Degterinsky)。
  • max_concurrent_queries のデフォルト値を 100 から 1000 に変更しました。クエリが重くなく、主にネットワーク待ちであれば、多数のクエリを同時に実行していても問題ありません。注意: 同時実行クエリ数と QPS を混同しないでください。たとえば、ClickHouse サーバーは 100 未満の同時実行クエリ数でも、数万 QPS を処理できます。 #53285 (Alexey Milovidov)。
  • バックグラウンドで実行されるパーティションの最適化マージの同時実行数を制限します。 #53405 (Duc Canh Le).
  • Replicated データベースのレプリケーション/リカバリ時に Directory for table data already exists エラーを無視できるようにするための設定 allow_moving_table_directory_to_trash を追加しました。 #53425 (Alexander Tokmakov)。
  • サーバー設定 asynchronous_metrics_update_period_s および asynchronous_heavy_metrics_update_period_s が 0 に誤設定されている場合、アプリケーションを終了させるのではなく、安全にフェイルするようになりました。 #53428 (Robert Schulze).
  • ClickHouse サーバーは、設定を再読み込みする際に、cgroups を介して変更されたメモリ制限を認識するようになりました。 #53455 (Robert Schulze)。
  • DETACHDROP、またはサーバーのシャットダウン時に分散テーブルのフラッシュ処理を無効化できる機能を追加しました。 #53501 (Azat Khuzhin).
  • domainRFC 関数が、角かっこで囲まれた IPv6 アドレスをサポートするようになりました。 #53506 (Chen768959)。
  • バックアップで使用される S3 CopyObject リクエストのタイムアウトを長くしました。 #53533 (Michael Kolupaev).
  • サーバー設定 aggregate_function_group_array_max_element_size を追加しました。この設定は、groupArray 関数のシリアライズ時に配列サイズを制限するために使用されます。デフォルト値は 16777215 です。 #53550 (Nikolai Kochetov)。
  • MySQL との互換性を向上させるため、DATABASE のエイリアスとして SCHEMA が追加されました。 #53587 (Daniël van Eeden).
  • system データベース内のテーブルに関する非同期メトリクスを追加しました。たとえば TotalBytesOfMergeTreeTablesSystem などです。これにより #53603 がクローズされました。 #53604 (Alexey Milovidov)。
  • Play UI および Dashboard の SQL エディタでは Grammarly が使用されなくなりました。 #53614 (Alexey Milovidov).
  • エキスパートレベルの設定として、(1) [index] マーク/非圧縮キャッシュの size_ratio(保護キューの相対サイズ)を設定し、(2) index マークおよび index 非圧縮キャッシュのキャッシュポリシーを設定できるようになりました。 #53657 (Robert Schulze)。
  • TCPHandler のクエリパケットにクライアント情報検証を追加しました。 #53673 (Alexey Gerasimchuck).
  • Microsoft Azure との通信中にネットワークエラーが発生した場合に、パーツの読み込みを再試行するようにしました。 #53750 (SmitaRKulkarni).
  • 例外にスタックトレースが含まれ、Materialized View の例外が伝播されるようになりました。 #53766 (Ilya Golshtein).
  • ホスト名またはポートが指定されていない場合、keeper クライアントは ClickHouse の config.xml から接続文字列を検索しようとします。 #53769 (pufit).
  • MergeTree テーブルエンジンファミリーでデータパーツのロックを保持している時間(マイクロ秒単位)を示すプロファイルイベント PartsLockMicroseconds を追加しました。 #53797 (alesapin).
  • keeper 向けに RAFT の再接続回数上限を設定可能にしました。この設定により、現在の接続が切断された場合に、keeper がピアとの接続をより迅速に再確立できるようになります。#53817 (Pengyuan Bian)。
  • MySQL との互換性を向上させるため、テーブル定義内の外部キーを無視するようにし、ユーザーが外部キー部分の SQL を書き換える必要がないようにしました。参照 #53380#53864jsc0218)。

ビルド/テスト/パッケージングの改善

  • ClickHouse バイナリからダイナミックリンカーへのシンボルのエクスポートを行わないようにしました。これにより #43933 が修正される可能性があります。 #47475 (Alexey Milovidov)。
  • clickhouse-keeper-client へのシンボリックリンクを clickhouse-server パッケージに追加。 #51882 (Mikhail f. Shiryaev)。
  • SQL 2016 準拠状況をレポートするために、https://github.com/elliotchance/sqltest を CI に追加しました。 #52293 (Alexey Milovidov)。
  • PRQL を 0.9.3 にアップグレードしました。 #53060 (Maximilian Roos).
  • CI チェックで使用されるシステムテーブルが ClickHouse Cloud にエクスポートされるようになりました。 #53086 (Alexey Milovidov).
  • コンパイラのプロファイルデータ(-ftime-trace)が ClickHouse Cloud にアップロードされるようになりました。 #53100 (Alexey Milovidov).
  • Debug ビルドと Tidy ビルドを高速化しました。 #53178 (Alexey Milovidov).
  • 大量の不要なものを取り除くことでビルドを高速化しました。頻繁にインクルードされるヘッダーの 1 つが Boost によって「汚染」されていました。#53180 (Alexey Milovidov)。
  • さらに不要なものを削除しました。 #53182 (Alexey Milovidov).
  • 関数 arrayAUC は重い C++ テンプレートを使用していましたが、その使用をやめました。 #53183 (Alexey Milovidov).
  • いくつかのトランスレーションユニットが、ccache の有無にかかわらず常に再ビルドされていました。原因が特定され、修正されました。 #53184 (Alexey Milovidov).
  • コンパイラのプロファイルデータ (-ftime-trace) が ClickHouse Cloud にアップロードされるようになりました。#53100 に続く 2 回目の試みです。#53213Alexey Milovidov)。
  • ステートフルテストにおいて CI からのログを ClickHouse Cloud にエクスポート。 #53351 (Alexey Milovidov).
  • ストレステスト時にCIからログをエクスポートするようにしました。 #53353 (Alexey Milovidov).
  • fuzzer の CI でログをエクスポートする。 #53354 (Alexey Milovidov).
  • clickhouse start コマンドで環境変数を保持するようにしました。 #51962 を修正。 #53418Mikhail f. Shiryaev)。
  • #53418 のフォローアップ。install_check.py の小さな改善として、init.d start 実行時にメインプロセスへ適切な環境変数が渡されることを確認するテストを追加しました。#53457Mikhail f. Shiryaev)。
  • CMake におけるファイル管理を再編成し、重複が発生しないようにしました。たとえば、indexHint.cppdbms_sourcesclickhouse_functions_sources の両方で重複していました。 #53621 (Amos Bird)。
  • snappy を 1.1.10 にアップグレードしました。#53672 (李扬)。
  • 一部の依存関係をサニタイズし、重複を削除することで、cmake ビルドをわずかに改善しました。それぞれのコミットには、行われた変更内容の簡単な説明が付いています。 #53759 (Amos Bird)。

バグ修正(公式安定版リリースにおけるユーザーに見える不具合)

  • 複数のマークを扱うビルド時に実験的な Annoy 索引をリセットしないようにしました #51325 (Tian Xinhui)。
  • RESTORE 時に使用する一時ディレクトリの扱いを修正 #51493 (Azat Khuzhin)。
  • Nullable(IPv4) に対するバイナリ算術演算の不具合を修正 #51642 (Yakov Olkhovskiy).
  • Dictionary 属性で IPv4 および IPv6 データ型をサポート #51756 (Yakov Olkhovskiy)。
  • 圧縮マークのチェックサムに関する不具合修正 #51777 (SmitaRKulkarni)。
  • ベストエフォートでの CSV パース時に、カンマが誤って日時の一部としてパースされてしまう問題を修正しました #51950 (Kruglov Pavel).
  • 実行可能な UDF にパラメータがある場合に例外をスローしないよう修正しました #51961 (Nikita Taranov)。
  • ALTER DELETE クエリにおけるスキップ索引および PROJECTION の再計算処理を修正 #52530 (Anton Popov)。
  • MaterializedMySQL: ReadBuffer::read 関数における無限ループを修正 #52621 (Val Doroshchuk)。
  • サジェストのロードを clickhouse 方言でのみ行うようにしました #52628 (János Benjamin Antal).
  • 必要に応じて ares チャネルを初期化および破棄するようにしました。 #52634 (Arthur Passos).
  • OR 式を使用した仮想カラムでのフィルタリングを修正 #52653 (Azat Khuzhin)。
  • スパースなカラム引数を1つだけ取る関数 tuple の場合に発生していたクラッシュを修正 #52659 (Anton Popov).
  • クラスタでの named collections を修正 #52687 (Al Korgun)。
  • マルチステージの PREWHERE で不要なカラムが読み込まれてしまう問題を修正。#52689 (Anton Popov)。
  • NULLS FIRST を指定した複数カラムのソートで発生していた予期しない結果を修正しました #52761 (copperybean).
  • Keeper の再構成時のデータ競合を修正 #52804 (Antonio Andelic).
  • 大きな LIMIT を指定した場合にスパースなカラムのソートが正しく行われない問題を修正 #52827 (Anton Popov)。
  • clickhouse-keeper: poll を使用するサーバー実装の不具合を修正。 #52833 (Andy Fiddaman).
  • regexp analyzer が名前付きキャプチャグループを認識できるよう修正しました #52840 (Han Fei)。
  • clickhouse-local の ~PushingAsyncPipelineExecutor で発生しうるアサーション失敗を修正しました #52862 (Kruglov Pavel)。
  • 空の Nested(Array(LowCardinality(...))) の読み込みを修正 #52949 (Anton Popov)。
  • session_log に対する新しいテストを追加し、ログインとログアウト間の不整合を修正しました。 #52958 (Alexey Gerasimchuck).
  • SHOW CREATE MySQL TABLE におけるパスワード漏洩を修正 #52962 (Duc Canh Le).
  • CreateSetAndFilterOnTheFlyStep でスパースなカラム形式をフル形式に変換 #53000 (vdimir)。
  • fs キャッシュで、空のキー接頭辞を持つディレクトリの削除に関するまれなレースコンディションを修正 #53055Kseniia Sumarokova)。
  • ZstdDeflatingWriteBuffer でときどき出力が切り詰められてしまう問題を修正 #53064 (Michael Kolupaev)。
  • async flush クエリで part_log の query_id が正しく設定されない問題を修正 #53103 (Raúl Marín).
  • キャッシュで発生し得るエラー "Read unexpected size" を修正 #53121 (Kseniia Sumarokova).
  • 新しい Parquet エンコーダーを無効化しました #53130 (Alexey Milovidov)。
  • "Not-ready Set" 例外を修正 #53162 (Nikolai Kochetov)。
  • PostgreSQL エンジンにおける文字エスケープ処理を修正 #53250Nikolay Degterinsky)。
  • Experimental な session_log テーブル: session_log 用の新しいテストを追加し、ログインとログアウト間の不整合を修正しました。 #53255 (Alexey Gerasimchuck). ログイン成功時とログアウト時の不整合を修正しました。 #53302 (Alexey Gerasimchuck).
  • DateTime にサブ秒単位の間隔を加算する処理を修正 #53309 (Michael Kolupaev)。
  • 辞書で発生していた "Context has expired" エラーを修正 #53342 (Alexey Milovidov)。
  • 通常のプロジェクションの AST フォーマットの誤りを修正 #53347 (Amos Bird)。
  • Scalar 実行時に、テーブル関数内で use_structure_from_insertion_table_in_table_functions を使用することを禁止しました #53348 (flynn)。
  • system.table の SELECT クエリ実行時における lazy データベースのロード処理を修正 #53372 (SmitaRKulkarni).
  • MaterializedMySQL 用の system.data_skipping_indices を修正しました #53381 (Filipp Ozinov)。
  • TSV ファイルのセグメンテーションエンジンにおける単一のキャリッジリターン文字の処理を修正 #53407 (Kruglov Pavel)。
  • Context has expired エラーの処理を適切に修正 #53433 (Michael Kolupaev).
  • IN 句の右辺にサブクエリがある場合に timeout_overflow_mode が正しく動作しない問題を修正 #53439 (Duc Canh Le)。
  • #53152 および #53440 における予期しない動作を修正しました(Zhiguo Zhou)。
  • パスがすべて数値のときに発生する JSON_QUERY 関数のパースエラーを修正 #53470 (KevinyhZou)。
  • parallel FINAL を使用するクエリでのカラム順序の誤りを修正。 #53489 (Nikolai Kochetov).
  • ReplacingMergeTree から do_not_merge_across_partitions_select_final を指定した SELECT を実行した際の不具合を修正しました #53511 (Vasily Nemkov)。
  • シャットダウン時に非同期インサートキューを先にフラッシュする #53547 (joelynch).
  • スパースなカラムでの JOIN 時にクラッシュする問題を修正 #53548 (vdimir)。
  • 不正な引数を取る関数に対する Set のスキップ索引で発生し得る未定義動作 (UB) を修正 #53559 (Azat Khuzhin).
  • 逆インデックス(実験的機能)で発生しうる未定義動作を修正 #53560 (Azat Khuzhin)。
  • 修正: interpolate 式が、SELECT 句で同名のエイリアスではなく、元のソースカラムを使用するように修正しました。 #53572 (Yakov Olkhovskiy).
  • EXPLAIN PLAN index=1 における破棄されたグラニュール数の誤りを修正 #53616 (wangxiaobo)。
  • DelayedSource を使用して totals および extremes を正しく処理 #53644 (Antonio Andelic).
  • ミューテーション パイプラインで prepared set キャッシュがフリーズしてしまう問題を修正 #53645Nikolai Kochetov)。
  • JSON 型のサブカラムを述語で使用する UPDATE および DELETE クエリのミューテーションで発生していたバグを修正。 #53677 (VanDarkholme7).
  • full_sorting_merge join の filter pushdown を修正 #53699 (vdimir)。
  • NULL::LowCardinality(Nullable(...)) NOT IN に関するバグの修正を試みました。 #53706 (Andrey Zvonov)。
  • 修正: スパースカラムを含むソートされた DISTINCT の不具合を修正 #53711 (Igor Nikonov).
  • transform: 複数行を含むデフォルトのカラムを正しく処理 #53742 (Salvatore Mesoraca).
  • parseDateTime で発生する fuzzer によるクラッシュを修正 #53764 (Robert Schulze)。
  • MaterializedPostgreSQL: getCreateTableQueryImpl で発生する未捕捉の例外を修正 #53832 (Kseniia Sumarokova)。
  • PostgreSQL エンジン使用時に発生し得るセグメンテーションフォルトを修正 #53847 (Kseniia Sumarokova)。
  • named_collection_admin のエイリアスを修正 #54066 (Kseniia Sumarokova)。

ClickHouse 23.7 リリース(2023-07-27)

後方互換性のない変更

  • NAMED COLLECTION アクセスタイプ(エイリアス USE NAMED COLLECTIONNAMED COLLECTION USAGE)を追加しました。このアクセスタイプはデフォルトで無効になっており(親アクセスタイプである NAMED COLLECTION ADMIN もデフォルトで無効なため)、この PR は後方互換性のない変更となります。#50277 で提案されたものです。利用を許可するには GRANT NAMED COLLECTION ON collection_name TO user または GRANT NAMED COLLECTION ON * TO user を使用してください。これらの権限を付与できるようにするには config 内で named_collection_admin が必要です(以前は named_collection_control という名前だったため、エイリアスとして残ります)。 #50625Kseniia Sumarokova)。
  • system.parts のカラム名 last_removal_attemp_time のタイポを修正しました。現在の名前は last_removal_attempt_time です。 #52104filimonov)。
  • distributed_ddl_entry_format_version のデフォルトのバージョンを 5 に引き上げました(OpenTelemetry と initial_query_idd のパススルーを有効化します)。これにより、ダウングレード 後には既存の distributed DDL エントリを処理できなくなります(ただし通常、そのような未処理エントリは存在しないはずです)。 #52128Azat Khuzhin)。
  • 通常のメタデータと同様の方法でプロジェクションのメタデータを検証するようにしました。この変更により、不正なプロジェクションを持つテーブルが存在する場合、サーバーが起動できなくなる可能性があります。例として、PK に位置指定カラムを作成するプロジェクション(例: テーブルの PK では許可されず、insert/merge 中のクラッシュを引き起こす可能性がある projection p (select * order by 1, 4))があります。アップデート前にそのようなプロジェクションは削除してください。 #52353 を修正します。 #52361Nikolai Kochetov)。
  • 実験的機能 hashid はバグのため削除されました。実装品質は当初から疑問視されており、実験的ステータスを脱することはありませんでした。これにより #52406 がクローズされます。 #52449Alexey Milovidov)。

新機能

  • 複数のデータベースを 1 つに結合するための Overlay データベースエンジンを追加しました。ファイルシステム上のディレクトリを、自動検出されるフォーマットと構造を持つ暗黙的に利用可能なテーブルの集合として表現する Filesystem データベースエンジンを追加しました。新しい S3 データベースエンジンにより、プレフィックスをテーブルの集合として表現することで、S3 ストレージに読み取り専用でアクセスできるようになりました。新しい HDFS データベースエンジンにより、同様に HDFS ストレージに読み取り専用でアクセスできるようになりました。#48821 (alekseygolub)。
  • Keeper にスナップショットとログを保存するための外部ディスク対応を追加しました。 #50098 (Antonio Andelic).
  • 複数ディレクトリ選択用の {} グロブのサポートを追加しました。#50559Andrey Zvonov)。
  • Kafka コネクタが、URL エンコードされた認証情報を使用するベーシック認証でスキーマレジストリから Avro スキーマを取得できるようになりました。 #49664 (Ilya Golshtein).
  • 2つの配列間の Jaccard 類似度を計算する関数 arrayJaccardIndex を追加。 #50076 (FFFFFFFHHHHHHH).
  • system.settings および類似のテーブルにカラム is_obsolete を追加し、#50819 をクローズ。 #50826flynn)。
  • 設定ファイル内の暗号化された要素のサポートを追加しました。設定ファイルの末端(リーフ)要素で暗号化されたテキストを使用できるようになりました。テキストは <encryption_codecs> セクションの暗号化コーデックを使って暗号化されます。#50986Roman Vasin)。
  • Grace Hash Join アルゴリズムが FULL JOIN および RIGHT JOIN に対しても適用可能になりました。 #49483#51013 (lgbo)。
  • よりグレースフルに終了するための SYSTEM STOP LISTEN クエリを追加。 #47972 をクローズ。 #51016Nikolay Degterinsky)。
  • input_format_csv_allow_variable_number_of_columns オプションを追加しました。 #51273 (Dmitry Kardymon).
  • また地味な機能ですが、Spark や MySQL と同様に substring_index 関数を追加。 #51472 (李扬).
  • jemalloc の bin の統計情報を表示する system テーブル jemalloc_bins。例: SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10。お試しください。 #51674 (Alexander Gololobov).
  • 各カラムの直前に、そのカラムのデフォルト値を使用するかどうかを示す 1 バイトのフラグを持つ RowBinaryWithDefaults フォーマットを追加しました。 #50854 をクローズ。 #51695Kruglov Pavel)。
  • default_temporary_table_engine 設定を追加しました。default_table_engine と同様ですが、一時テーブル用です。#51292#51708velavokr)。
  • 各単語の先頭文字を大文字にし、残りを小文字に変換する新しい関数 initcap / initcapUTF8 を追加しました。 #51735 (Dmitry Kardymon).
  • CREATE TABLE のカラム定義で PRIMARY KEY 構文がサポートされるようになりました。カラムは、定義された順序でプライマリ索引に追加されます。 #51881 (Ilya Yatsishin).
  • ログおよびエラーログのファイル名に日付と時刻のフォーマット指定子を使用できるようになりました。設定ファイル内(log および errorlog タグ)とコマンドライン引数(--log-file および --errorlog-file)の両方で指定できます。 #51945 (Victor Krasnov).
  • HTTP ヘッダーに Peak Memory Usage の統計情報を追加しました。 #51946 (Dmitry Kardymon).
  • 文字列内の部分文字列を照合するための新しい hasSubsequence 関数(および CaseInsensitiveUTF8 バージョン)を追加しました。 #52050 (Dmitry Kardymon)。
  • PostgreSQL との互換性のために groupArray のエイリアスとして array_agg を追加しました。#52100 をクローズ。### エンドユーザー向け変更のドキュメント項目。#52135 (flynn)。
  • any 集約関数の互換エイリアスとして any_value を追加しました。 #52140 をクローズしました。 #52147flynn)。
  • BigQuery との互換性のため、集約関数 array_concat_agg を追加しました。groupArrayArray の別名です。#52139 をクローズしました。 #52149 (flynn)。
  • OCTET_LENGTHlength のエイリアスとして追加しました。#52153 をクローズしました。#52176FFFFFFFHHHHHHH)。
  • 複数行の文字列から最初の行を抽出する firstLine 関数を追加しました。これにより #51172 がクローズされました。#52209Mikhail Koviazin)。
  • Interval データ型向けに KQL スタイルのフォーマットを実装しました。これは Kusto クエリ言語との互換性のためにのみ必要です。 #45671 (ltrk2).
  • 保留中のすべての非同期 INSERT を宛先テーブルにフラッシュするクエリ SYSTEM FLUSH ASYNC INSERT QUEUE を追加しました。サーバー側の設定 async_insert_queue_flush_on_shutdown(デフォルトは true)を追加しました。これは、グレースフルシャットダウン時に非同期 INSERT のキューをフラッシュするかどうかを制御します。async_insert_threads の設定は、サーバー側の設定となりました。 #49160 (Anton Popov)。
  • PostgreSQL との互換性のために、current_database エイリアスと新しい関数 current_schemas を追加しました。 #51076 (Pedro Riera).
  • 関数 today 向けに curdate および current_date というエイリアスを、関数 now 向けに current_timestamp というエイリアスを追加しました。 #52106 (Lloyd-Pottiger).
  • 非同期挿入において async_deduplication_token をサポートしました。 #52136 (Han Fei).
  • URL エンジンで URI パスのエンコード/デコードを無効化できる新しい設定項目 disable_url_encoding を追加しました。#52337Kruglov 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_prewhereenable_multiple_prewhere_read_steps の設定をデフォルトで有効にしました。 #46365 (Alexander Gololobov).
  • アロケーターのチューニングにより、一部のクエリのパフォーマンスを向上。 #46416 (Azat Khuzhin).
  • MergeTreeReadPool と同様に、MergeTreePrefetchedReadPool でも固定サイズのタスクを使用するようになりました。また、S3 リクエストに対してもコネクションプールを使用するようになりました。 #49732 (Nikita Taranov)。
  • JOIN の右側へのプッシュダウンをさらに最適化しました。 #50532 (Nikita Taranov).
  • grace_hash 結合でハッシュテーブルのサイズを事前に予約してパフォーマンスを改善(再投稿)。 #50875 (lgbo).
  • OpenedFileCache でのロック待ちが、場合によっては顕著になることがありました。ロック競合を避けるため、これを複数のサブマップ(それぞれに専用のロックを持つ)に分割しました。 #51341 (Nikita Taranov)。
  • PRIMARY KEY カラムを含む条件を PREWHERE チェーンの末尾に移動します。PK カラムを含む条件は PK 解析で使用される可能性が高く、PREWHERE フィルタリングにはそれ以上大きく寄与しない、という考え方に基づきます。 #51958 (Alexander Gololobov)。
  • String 型に対する COUNT(DISTINCT) を、SipHash をインライン化することで高速化しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上での OnTime のパフォーマンス実験では、この変更によりクエリ Q8 の QPS が 11.6% 向上し、他のクエリには影響がないことが示されました。 #52036 (Zhiguo Zhou).
  • allow_vertical_merges_from_compact_to_wide_parts がデフォルトで有効になりました。これにより、マージ処理中のメモリ使用量が削減されます。 #52295 (Alexey Milovidov).
  • 主キーを無効化してしまう誤った PROJECTION の解析を修正しました。この問題は query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1 の場合にのみ発生します。これにより #48823 が修正されました。これにより #51173 が修正されました。#52308Amos Bird)。
  • FileCache::loadMetadata におけるシステムコールの回数を削減し、ファイルシステムキャッシュが有効になっている場合のサーバー起動を高速化します。 #52435 (Raúl Marín).
  • 残りのデータをバックグラウンドでダウンロードすることで、ファイルセグメントサイズの厳密な下限を設定できるようにしました。ファイルの実際のサイズがそれより大きい場合のファイルセグメントの最小サイズは、キャッシュ構成の boundary_alignment 設定で指定され、デフォルトは 4Mi です。バックグラウンドスレッドの数は、キャッシュ構成の background_download_threads 設定で指定され、デフォルトは 2 です。また、この PR では max_file_segment_size8Mi から 32Mi に引き上げられました。 #51000 (Kseniia Sumarokova)。
  • S3 用のデフォルトタイムアウトを 30 秒から 3 秒に、その他の HTTP のデフォルトタイムアウトを 180 秒から 30 秒に短縮しました。 #51171 (Michael Kolupaev).
  • 新しい設定 merge_tree_determine_task_size_by_prewhere_columns が追加されました。true に設定すると、読み取りタスクサイズの決定には PREWHERE セクション内のカラムサイズのみが考慮されます。false の場合は、クエリ内のすべてのカラムが考慮されます。 #52606 (Nikita Taranov).

改善点

  • s3/file/url/... テーブル関数のプログレスバーで read_bytes/total_bytes_to_read を使用し、進捗表示を改善しました。 #51286 (Kruglov Pavel).
  • テーブル設定 wait_for_unique_parts_send_before_shutdown_ms を導入し、レプリカがレプリケートされたデータ送信のためのインターサーバーハンドラーを閉じる前に待機する時間を指定できるようにしました。あわせて、テーブルとインターサーバーハンドラーのシャットダウン順序の不整合も修正しました。これにより、サーバーは最初にテーブルをシャットダウンし、その後でインターサーバーハンドラーをシャットダウンするようになりました。 #51851 (alesapin).
  • SQL 標準準拠の FETCHOFFSET を省略可能にしました。参照: https://antonz.org/sql-fetch/#51293Alexey Milovidov)。
  • config の新しい http_forbid_headers セクションにより、URL/S3 テーブル関数に対する HTTP ヘッダーのフィルタリングが可能になりました。完全一致フィルタと正規表現フィルタの両方を利用できます。 #51038 (Nikolay Degterinsky).
  • ログに 16 EiB の空き容量があるというメッセージを表示しないようにしました。これらは意味を成さないためです。これにより #49320 がクローズされました。#49342 (Alexey Milovidov)。
  • sleepEachRow 関数の制限値を正しくチェックするようにしました。function_sleep_max_microseconds_per_block という設定を追加しました。これは汎用的な query fuzzer のために必要です。#49343 (Alexey Milovidov)。
  • geoHash 関数の 2 つの不具合を修正しました。 #50066 (李扬)。
  • 非同期 insert の flush クエリを system.query_log に記録するようにしました。 #51160 (Raúl Marín).
  • 関数 date_diffage がミリ秒およびマイクロ秒単位をサポートし、マイクロ秒精度で動作するようになりました。 #51291 (Dmitry Kardymon)。
  • clickhouse-keeper-client におけるパスのパース処理を改善しました。 #51359 (Azat Khuzhin).
  • ClickHouse に依存するサードパーティ製品(Gluten: a Plugin to Double Spark SQL's Performance)にバグが存在しました。この修正により、HDFS からの読み込み時にそのサードパーティ製品でヒープオーバーフローが発生するのを防ぎます。 #51386 (李扬)。
  • S3 に対するネイティブコピー機能を無効化できるようにしました(BACKUP/RESTORE 用の設定 allow_s3_native_copy と、s3/s3_plain ディスク用の s3_allow_native_copy)。#51448Azat 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_columnsmodification_time カラムを追加。 #51685 (Azat Khuzhin).
  • CSV フォーマットに新しい設定 input_format_csv_use_default_on_bad_values を追加し、個々のフィールドのパースに失敗した場合にデフォルト値を挿入できるようにしました。 #51716 (KevinyhZou).
  • 予期しないクラッシュ発生後にクラッシュログをディスクにフラッシュする処理を追加しました。 #51720 (Alexey Gerasimchuck)。
  • ダッシュボードページで認証とは無関係のエラーが表示されない問題を修正しました。また、チャートが重なって表示される挙動も修正しました。 #51744 (Zach Naimon).
  • UUID から UInt128 への変換を許可します。 #51765 (Dmitry Kardymon)。
  • 関数 range が Nullable 引数をサポートするようになりました。 #51767 (Dmitry Kardymon).
  • toyear(x) = c のような条件式を c1 <= x < c2 に変換するようにしました。 #51795 (Han Fei).
  • SHOW INDEX ステートメントの MySQL との互換性を改善しました。 #51796 (Robert Schulze).
  • use_structure_from_insertion_table_in_table_functionsMATERIALIZED および ALIAS カラムで機能しない不具合を修正。 #51817 をクローズ。 #51019 をクローズ。 #51825flynn)。
  • Cache Dictionary は、ソースから一意なキーのみを要求するようになりました。#51762 をクローズしました。 #51853Maksim Kita)。
  • FORMAT が指定されている場合に EXPLAIN クエリに設定が適用されないケースを修正しました。 #51859 (Nikita Taranov)。
  • SELECT クエリとの互換性を保つため、DESCRIBE TABLE クエリで FORMAT の前に SETTINGS を指定できるようにしました。#51544 をクローズ。#51899Nikolay Degterinsky)。
  • Var-Int でエンコードされた整数値(ネイティブプロトコルで使用されるものなど)が、64 ビット整数の全範囲を利用できるようになりました。サードパーティー製クライアントは、それに合わせて var-int の実装を更新することが推奨されます。 #51905 (Robert Schulze)。
  • 証明書が変更された場合に、手動で SYSTEM RELOAD CONFIG を実行しなくても証明書が更新されるようにしました。 #52030 (Mike Kot).
  • TYPE を指定していない ADD INDEX クエリを無視できるようにする allow_create_index_without_type 設定を追加しました。標準的な SQL クエリは、テーブルスキーマを変更することなくそのまま成功します。 #52056 (Ilya Yatsishin)。
  • サーバーの起動時から system.text_log にログメッセージが書き込まれるようになりました。 #52113 (Dmitry Kardymon)。
  • HTTP エンドポイントが複数の IP アドレスを持ち、そのうち最初のものに到達できない場合にタイムアウト例外がスローされていました。セッション作成時に、解決済みのすべてのエンドポイントを順に処理するようにしました。 #52116 (Aleksei Filatov).
  • Avro 入力フォーマットは、単一の型しか含まない場合でも Union をサポートするようになりました。 #52131 をクローズ。 #52137 (flynn)。
  • 暗黙のプロジェクション(現時点では min_max_count PROJECTION のみ)を無効化できる optimize_use_implicit_projections SETTING を追加しました。#52152Amos Bird)。
  • 関数 hasToken を用いて無限ループを発生させることが可能でしたが、現在はこれを行えないようになりました。これにより #52156 がクローズされました。#52160Alexey Milovidov)。
  • ZK の祖先ノードを楽観的に作成するようになりました。 #52195 (Raúl Marín).
  • #50582 を修正。インオーダーでの読み取りおよび定数を扱う一部のケースで発生する Not found column ... in block エラーを回避。#52259Chen768959)。
  • S2 geo プリミティブが無効でないかどうかを、可能な限り早期に ClickHouse 側で検証します。これにより次の issue をクローズしました: #27090#52260Nikita Mikhaylov)。
  • query_plan_optimize_projection = 1 のときに不足していた projection の QueryAccessInfo を再追加しました。これにより #50183 が修正されます。さらに、#50093 も修正されます。 #52327 (Amos Bird)。
  • ZooKeeperRetriesControl がエラーを再スローする際には、ZooKeeperRetriesControl 自身のスタックトレースではなく、元のスタックトレースが表示される方がより有用です。 #52347 (Vitaly Baranov)。
  • 一部のディスクがこれをサポートしていない場合でも、ゼロコピーレプリケーションロックを待機するようになりました。 #52376 (Raúl Marín).
  • インターサーバー用ポートは、テーブルのシャットダウン完了後にのみ閉じられるようになりました。 #52498 (alesapin).

実験的機能

  • Parquet ファイルの書き込みが 10 倍高速になり、マルチスレッド対応になりました。読み込みとほぼ同等の速度です。#49367Michael Kolupaev)。この機能は設定 output_format_parquet_use_custom_encoder によって制御されますが、まだ完全ではないため、デフォルトでは無効になっています。
  • クエリ言語として PRQL のサポートを追加しました。#50686János Benjamin Antal)。
  • カスタムディスクにディスク名を追加できるようになりました。これまでは、カスタムディスクは内部で生成されたディスク名を使用していました。今後は disk = disk_<name>(...)(例: ディスク名は name)のように指定できます。#51552Kseniia Sumarokova)。このリリースでは、この構文が変更される可能性があります。
  • (experimental MaterializedMySQL)切断後に mysqlxx::Pool::Entry が使用された場合にクラッシュする問題を修正しました。#52063Val Doroshchuk)。
  • (experimental MaterializedMySQL)MaterializedMySQL で CREATE TABLE ... AS SELECT がサポートされるようになりました。#52067Val Doroshchuk)。
  • (experimental MaterializedMySQL)MaterializedMySQL に対してテキスト型を utf8 に自動変換する機能を導入しました。#52084Val Doroshchuk)。
  • (experimental MaterializedMySQL)MaterializedMySQL の DDL で、クオートされていない UTF-8 文字列がサポートされるようになりました。#52318Val Doroshchuk)。
  • (experimental MaterializedMySQL)MaterializedMySQL で二重引用符付きコメントがサポートされるようになりました。#52355Val Doroshchuk)。
  • Intel QPL を v1.1.0 から v1.2.0 へアップグレードし、Intel accel-config を v3.5 から v4.0 へアップグレードしました。さらに、IAA アクセラレータにおいて Device IOTLB miss が大きなパフォーマンス影響を与える問題を修正しました。#52180jasperzhu)。
  • session_timezone 設定(バージョン 23.6 で新規追加)は experimental に格下げされました。#52445Alexey Milovidov)。
  • ZooKeeper の reconfig コマンドを、インクリメンタルな再構成をサポートする ClickHouse Keeper で利用できるようにしました。これは keeper_server.enable_reconfiguration 設定で有効化できます。サーバーの追加、削除、およびサーバー優先度の変更をサポートします。#49450Mike Kot)。この機能はまだ不完全である可能性があります。

ビルド/テスト/パッケージングの改善

  • CI に Linux RISC-V 64 向けの実験的な ClickHouse ビルドを追加。 #31398 (Alexey Milovidov).
  • Analyzer を有効化した状態でのインテグレーションテストのチェックを追加。 #50926 #52210 (Dmitry Novik).
  • Rust の再現可能ビルドに対応。 #52395 (Azat Khuzhin).
  • Cargo の依存関係を更新。 #51721 (Raúl Marín).
  • 関数 CHColumnToArrowColumn::fillArrowArrayWithArrayColumnData が Nullable な配列でも動作するように変更。これらは ClickHouse では不可能だが、Gluten では必要。 #52112 (李扬).
  • CCTZ ライブラリを master ブランチ相当に更新したが、ユーザーから見える変更はない。 #52124 (Alexey Milovidov).
  • system.licenses テーブルに、ハードフォークされたライブラリ Poco を含めるようにした。これにより #52066 が解決。 #52127 (Alexey Milovidov).
  • 不適切な句読点のケースがないことをチェック:Hello ,world のようにコンマの前に空白が入っているのではなく、Hello, world となっていることを確認。 #52549 (Alexey Milovidov).

バグ修正(公式安定版でユーザーに影響する不具合)

  • MaterializedPostgreSQL の syncTables を修正 #49698 (Kseniia Sumarokova)。
  • optimize_aggregators_of_group_by_keys 使用時の projection を修正しました #49709 (Amos Bird)。
  • JOIN を含むクエリでの optimize_skip_unused_shards を修正 #51037 (Azat Khuzhin).
  • 小数部付きの負の datetime64 値に対する formatDateTime() の動作を修正しました #51290 (Dmitry Kardymon)。
  • 関数 hasToken* の実装が完全に誤っていました。#43358#51378 に対応するテストを追加しました(Alexey Milovidov)。
  • 関数をソート前に移動する最適化を修正しました。 #51481 (Nikolai Kochetov).
  • FINAL 用の Pipe::unitePipes における Block 構造の不整合を修正 #51492 (Nikita Taranov)。
  • すべての分片で重みがゼロのクラスタで発生する SIGSEGV を修正しました(INSERT INTO FUNCTION clusterAllReplicas() の問題を修正) #51545Azat Khuzhin)。
  • ヘッジリクエストのタイムアウトを修正 #51582 (Azat Khuzhin)。
  • NULL を含む ANTI JOIN の論理エラーを修正 #51601 (vdimir)。
  • PREWHERE への 'IN' 条件の移動に関する不具合を修正 #51610 (Alexander Gololobov)。
  • ASOF/ANTI join に対して PredicateExpressionsOptimizer を適用しないようにしました #51633 (vdimir)。
  • マージアルゴリズム使用時の ReplicatedMergeTree に対する重複排除付き非同期挿入を修正 #51676Antonio Andelic)。
  • parseSipHashKey において空のカラムから読み取ってしまう不具合を修正 #51804Nikita Taranov)。
  • 無効な EmbeddedRocksdb テーブルを作成しようとした際に発生するセグメンテーションフォルトを修正 #51847 (Duc Canh Le)。
  • MongoDB テーブルへのデータ挿入を修正 #51876 (Nikolay Degterinsky)。
  • DatabaseCatalog のシャットダウン時に発生するデッドロックを修正 #51908 (Alexander Tokmakov)。
  • サブクエリ演算子の不具合を修正 #51922 (Alexey Milovidov)。
  • 複数の IP アドレスを持つホストに対する非同期接続を修正 #51934 (Kruglov Pavel)。
  • ActionsDAG::merge 後に入力が削除されないようにしました #51947 (Nikolai Kochetov)。
  • execute ではなく RemoveManyObjectStorageOperation::finalize 内で参照カウントをチェックするように変更 #51954 (vdimir)。
  • パラメトリック UDF をサポート #51964 (Alexey Milovidov)。
  • 2283-12-31 以降の日付に対する toDateTime64() の軽微な修正 #52130Andrey Zvonov)。
  • ウィンドウ関数の ORDER BY 句のタプルを修正 #52145 (Alexey Milovidov).
  • 集約式に単調関数を含む場合の誤ったプロジェクション解析を修正。#52151Amos Bird)。
  • groupArrayMoving 関数の不具合を修正 #52161 (Alexey Milovidov)。
  • range Dictionary に対する direct JOIN を無効にしました #52187 (Duc Canh Le)。
  • sticky mutations のテストと、極めてまれなレースコンディションを修正 #52197 (alesapin)。
  • Web disk のレースコンディションを修正 #52211 (Kseniia Sumarokova)。
  • サーバーからの未知のパケット受信時の Connection::setAsyncCallback 内のデータ競合を修正 #52219 (Kruglov Pavel)。
  • 起動時の一時データの削除処理を修正し、テストを追加 #52275 (vdimir)。
  • Nullable 型のカラムをカウントする際は minmax_count プロジェクションを使用しないでください #52297 (Amos Bird).
  • MergeTree/ReplicatedMergeTree はログエントリにサーバーのタイムゾーンを使用するようになりました #52325 (Azat Khuzhin)。
  • CTE を含み複数回使用されるパラメータ化された VIEW を修正 #52328 (SmitaRKulkarni)。
  • 時間間隔に対する式テンプレートを無効にしました #52335 (Alexander Tokmakov)。
  • Keeper の apply_snapshot を修正 #52358 (Antonio Andelic)。
  • build-osx.md を更新しました #52377 (AlexBykovski)。
  • 検索対象がカラムで、検索文字列が空のときに countSubstrings がハングする問題を修正 #52409 (Sergei Trifonov)。
  • Merge テーブルでの通常のプロジェクションを修正しました #52432 (Amos Bird)。
  • Aggregator における二重解放が発生する可能性のある問題を修正 #52439 (Nikita Taranov)。
  • Buffer エンジンへの挿入処理を修正しました #52440 (Vasily Nemkov)。
  • AnyHash の実装が仕様に準拠していませんでした。#52448Alexey Milovidov)。
  • OptimizedRegularExpression で再帰の深さをチェックするようにしました #52451 (Alexey Milovidov)。
  • DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() におけるデータレースを修正 #52490 (Azat Khuzhin)。
  • transform 関数で発生していた abort の問題を修正。#52513Alexey Milovidov)。
  • プロジェクション削除後における論理削除の挙動を修正しました #52517 (Anton Popov).
  • "Cannot drain connections: cancel first" というエラーが発生し得る問題を修正 #52585 (Kruglov Pavel).

ClickHouse リリース 23.6、2023-06-29

後方互換性のない変更

  • FS キャッシュから do_not_evict_index_and_mark_files 機能を削除しました。この機能はむしろ悪影響を与えていました。 #51253 (Kseniia Sumarokova).
  • 実験的な LIVE VIEW に対する ALTER サポートを削除しました。 #51287 (Alexey Milovidov).
  • http_max_field_value_sizehttp_max_field_name_size のデフォルト値を 128 KiB に減らしました。 #51163 (Mikhail f. Shiryaev).
  • CPU に関連する CGroups メトリクスは、使いやすさ向上のため 1 つのメトリクス CGroupMaxCPU に置き換えられました。Normalized CPU 使用率メトリクスは、設定されている場合、CPU の総数ではなく CGroups の制限に対して正規化されます。これにより #50836 がクローズされました。 #50835 (Alexey Milovidov).

New Feature

  • 関数 transform および値マッチングを行う CASE が、すべてのデータ型をサポートするようになりました。これにより #29730#32387#50827#31336#40493 がクローズされました。#51351Alexey Milovidov)。
  • オプション --rename_files_after_processing <pattern> を追加しました。これにより #34207 がクローズされました。#49626alekseygolub)。
  • INTO OUTFILE 句で TRUNCATE 修飾子をサポートしました。ファイルが存在する場合は、INTO OUTFILEAPPEND または TRUNCATE の使用を推奨します。#50950alekar)。
  • テーブルエンジン Redis およびテーブル関数 redis を追加しました。これにより外部の Redis サーバーに対してクエリを実行できます。#50150JackyWoo)。
  • 設定 s3_skip_empty_fileshdfs_skip_empty_filesengine_file_skip_empty_filesengine_url_skip_empty_files を使用して、file/s3/url/hdfs テーブル関数で空ファイルをスキップできるようにしました。#50364Kruglov Pavel)。
  • MySQL 互換ポート経由でクライアントが接続されている場合に、MySQL の同等の型を表示するように SHOW COLUMNS SQL ステートメントを変更する新しい設定 use_mysql_types_in_show_columns を追加しました。#49577Thomas Panetti)。
  • clickhouse-client は、--host--port--user などの代わりに接続文字列で呼び出せるようになりました。#50689Alexey Gerasimchuck)。
  • 設定 session_timezone を追加しました。これは、明示的に指定されていない場合にセッションのデフォルトタイムゾーンとして使用されます。#44149Andrey Zvonov)。
  • Codec DEFLATE_QPL は、SETTING allow_experimental_codecs ではなく、サーバー設定 enable_deflate_qpl_codec(デフォルト: false)によって制御されるようになりました。これにより、DEFLATE_QPL は実験的ではないものとして扱われます。#50775Robert Schulze)。

パフォーマンスの改善

  • ReplicatedMergeTree におけるマージ選択およびクリーンアップタスクのスケジューリングを改善しました。マージやクリーンアップするものがない場合に、タスクが頻繁に実行されすぎないようになります。max_merge_selecting_sleep_msmerge_selecting_sleep_slowdown_factormax_cleanup_delay_periodcleanup_thread_preferred_points_per_iteration の各設定を追加しました。これにより #31919 がクローズされるはずです。 #50107Alexander Tokmakov)。
  • CROSS JOIN に対してフィルタのプッシュダウンを行うようにしました。 #50605Han Fei)。
  • グローバルオブジェクトの代わりにスレッドローカルな timer_id を使用することで、QueryProfiler 有効時のパフォーマンスを改善しました。 #48778Jiebin Sun)。
  • CapnProto の入出力フォーマットを書き直してパフォーマンスを改善しました。カラム名と CapnProto フィールドを大文字小文字を区別せずに対応付け、ネストした構造体フィールドの読み書きを修正しました。 #49752Kruglov Pavel)。
  • 並列スレッドでの Parquet 書き込みパフォーマンスを最適化しました。 #50102Hongbin Ma)。
  • MATERIALIZED VIEW と、1 ブロックのみを持つストレージの処理に対しては parallelize_output_from_storages を無効化しました。 #50214Azat Khuzhin)。
  • PR #46558 をマージしました。ブロックがすでにソートされている場合には、ソート中のブロックの並べ替え処理を回避します。 #50697Alexey MilovidovMaksim Kita)。
  • system.zookeeper テーブルからの読み取りを高速化するため、ZooKeeper への複数の list リクエストを並列に実行するようにしました。 #51042Alexander Gololobov)。
  • タイムゾーン向けの DateTime ルックアップテーブルの初期化を高速化しました。これにより、特にデバッグビルドのように処理が重い場合に、clickhouse-client の起動/接続時間が短縮されるはずです。 #51347Alexander Gololobov)。
  • 同期的な HEAD リクエストが原因となるデータレイクの低速化を修正しました(大量のファイルがある場合に Iceberg/Delta Lake/Hudi が遅くなる問題に関連)。 #50976Kseniia Sumarokova)。
  • 右側の GLOBAL JOIN テーブルから、すべてのカラムを読み取らないようにしました。 #50721Nikolai Kochetov)。

実験的機能

  • analyzer で並列レプリカをサポートしました。 #50441 (Raúl Marín).
  • zero-copy レプリケーションの場合にレプリカ間で負荷をより均等に分散するため、大きなマージ/ミューテーションの実行前にランダムなスリープを追加しました。 #51282 (alesapin).
  • 背後のテーブルが ReplicatedMergeTree で分片が 1 つだけの場合には、Replicated データベース経由で ALTER PARTITION クエリおよびミューテーションをレプリケートしないようにしました。 #51049 (Alexander Tokmakov).

改善

  • "パーツが多すぎる" のしきい値を、より現在の状況に合った値に緩和しました。長時間実行される INSERT クエリに対して、バックプレッシャーを再び有効にしました。 #50856 (Alexey Milovidov).
  • CIDR ::ffff:0:0/96(IPv4 マッピングされたアドレス)に対して、IPv6 を IPv4 アドレスにキャストできるようにしました。 #49759 (Yakov Olkhovskiy).
  • MongoDB プロトコルを更新し、MongoDB 5.1 以降のバージョンに対応しました。古いプロトコル(<3.6)を使用するバージョンへのサポートは維持されています。#45621#49879 をクローズ。#50061Nikolay Degterinsky)。
  • スキーマ推論時に読み込むバイト数の上限を設定するための input_format_max_bytes_to_read_for_schema_inference を追加しました。#50577 をクローズ。#50592Kruglov Pavel)。
  • スキーマ推論時に input_format_null_as_default 設定を考慮するようにしました。 #50602 (Kruglov Pavel).
  • 設定 input_format_csv_skip_trailing_empty_linesinput_format_tsv_skip_trailing_empty_linesinput_format_custom_skip_trailing_empty_lines(デフォルトでは無効)により、CSV/TSV/CustomSeparated フォーマットで末尾の空行をスキップできるようにしました。#49315 をクローズしました。#50635Kruglov Pavel)。
  • 関数 "toDateOrDefault|OrNull" および "accuateCast[OrDefault|OrNull]" が、数値引数を正しく解釈できるようになりました。 #50709 (Dmitry Kardymon).
  • 空白または \t をフィールド区切り文字とする CSV をサポートし、これらの区切り文字は Spark とも互換性があります。 #50712 (KevinyhZou).
  • 設定 number_of_mutations_to_delaynumber_of_mutations_to_throw がデフォルトで有効になり、それぞれの値は 500 および 1000 になりました。 #50726 (Anton Popov).
  • ダッシュボードで欠損値が正しく表示されるようになりました。これにより #50831 が解決されました。 #50832Alexey Milovidov)。
  • 関数 parseDateTimeBestEffort* および parseDateTime64BestEffort* で、syslog のタイムスタンプ形式における日付および時刻の引数を使用できるようにしました。 #50925 (Victor Krasnov)。
  • clickhouse-client のコマンドラインパラメータ "--password" は、1 回だけ指定できるようになりました。 #50966 (Alexey Gerasimchuck).
  • クラスタ内バックアップ時にパーツの同一性を確認するため、system.partshash_of_all_files を使用できるようにしました。 #50997 (Vitaly Baranov)。
  • システムテーブル zookeeper_connectionconnected_time は接続が確立された時刻(標準形式)を示し、確立された接続セッションの継続時間(秒単位)を表す session_uptime_elapsed_seconds 列が追加されました。 #51026 (郭小龙)。
  • file/s3/hdfs/url テーブル関数のプログレスバーを、ソースデータの chunk サイズを使用し、各スレッドで合計サイズをインクリメンタルにカウントするようにして改善しました。*Cluster 関数のプログレスバーも修正しました。これにより #47250 が解決されます。 #51088 (Kruglov Pavel)。
  • プログレスバー表示を改善するため、TCP プロトコルの Progress パケットに total_bytes_to_read を追加しました。 #51158 (Kruglov Pavel)。
  • ファイルシステムキャッシュを使用するディスク上のデータパーツの検査を強化しました。 #51164 (Anton Popov).
  • fs キャッシュで current_elements_num が正しくない値になることがある問題を修正。 #51242 (Kseniia Sumarokova).

ビルド/テスト/パッケージングの改善

  • スタンドアロンの keeper バイナリに組み込みの keeper-client を追加しました。 #50964 (pufit).
  • 適切な LZ4 バージョンが使用されるようになりました。 #50621 (Nikita Taranov).
  • 致命的エラー発生時に、ClickHouse サーバーが変更された設定の一覧を出力するようになりました。これにより #51137 がクローズされました。 #51138 (Alexey Milovidov).
  • ClickHouse を clang-17 でビルドできるようにしました。 #51300 (Alexey Milovidov).
  • SQLancer によるチェックでトリガーされていたバグが修正され、このチェックは安定したものと見なされるようになりました。これにより、SQLancer チェックが失敗した場合は、チェックステータスの失敗として報告されます。 #51340 (Ilya Yatsishin).
  • Dockerfile 内の巨大な RUN を、より小さな条件付きの RUN に分割しました。同じ RUN レイヤー内で必要なツールをオンデマンドでインストールし、その後削除します。OS のアップグレードは冒頭で 1 回だけ行います。署名済みリポジトリのチェックには、よりモダンな方法を使用します。古い Docker バージョンでの問題に対処するため、ベースイメージを ubuntu:20.04 にダウングレードしました。golang の脆弱性に対処するため、golang のバージョンをアップグレードしました。 #51504 (Mikhail f. Shiryaev).

バグ修正(公式安定リリースにおけるユーザーに影響する不具合)

  • 実行可能ディクショナリの読み込み状態を正しく報告するよう修正 #48775 (Anton Kozlov).
  • skip index および projection の mutation が正しく行われるよう修正 #50104 (Amos Bird)。
  • 移動中パーツのクリーンアップ #50489 (vdimir).
  • 集約関数内の IP 型のハッシュにおける後方互換性を修正しました #50551 (Yakov Olkhovskiy)。
  • Log ファミリーのテーブルが TRUNCATE 後に誤った行数を返す問題を修正 #50585 (flynn)。
  • uniqExact の並列マージ処理におけるバグを修正 #50590 (Nikita Taranov)。
  • 最近の grace hash join に関する変更を元に戻しました #50699 (vdimir)。
  • Query Cache: ColumnConst から ColumnVector<char8_t> への不正なキャストを修正しようと試みました #50704 (Robert Schulze).
  • Keeper に不明な操作を含むログを保存しないようにしました #50751Antonio Andelic)。
  • SummingMergeTree における DateTime64 のサポート #50797 (Jordi Villar)。
  • 非 const なタイムゾーン向けの互換性設定を追加 #50834 (Robert Schulze).
  • キャッシュエントリにおける LDAP パラメータのハッシュ処理を修正 #50865 (Julian Maicher)。
  • Parquet フォーマットで、例外を投げるのではなく String から大きな整数値をパースするようフォールバック #50873 (Kruglov Pavel)。
  • バックアップの書き込み中にロックファイルを過度にチェックしていた問題を修正 #50889 (Vitaly Baranov)。
  • read-in-order が有効な場合は PROJECTION を適用しないようにしました。 #50923 (Nikolai Kochetov).
  • Azure Blob Storage のイテレーターで発生するレースコンディションを修正 #50936 (SmitaRKulkarni).
  • CreatingSets における sort_description の誤った伝播を修正 #50955 (Nikita Taranov)。
  • Iceberg v2 のオプションメタデータの解析処理を修正 #50974 (Kseniia Sumarokova)。
  • MaterializedMySQL: 空のテーブルのオーバーライド時に括弧を保持するよう修正 #50977 (Val Doroshchuk).
  • BackupCoordinationStageSync::setError() で発生するクラッシュを修正 #51012 (Vitaly Baranov)。
  • ColumnLowCardinality Dictionary のコピーオンライト実装における微妙な不具合を修正しました #51064 (Michael Kolupaev).
  • 安全な IV の生成 #51086 (Salvatore Mesoraca).
  • 副問い合わせを含む SELECT 文に対するクエリキャッシュが正しく機能していなかった問題を修正 #51132 (Robert Schulze)。
  • 定数 Nullable 比較を伴う Set 索引の問題を修正。 #51205 (Nikolai Kochetov).
  • s3 および s3Cluster 関数で発生していたクラッシュを修正 #51209 (Nikolay Degterinsky)。
  • コンパイル済み式により発生していたクラッシュを修正しました #51231LiuNeng)。
  • 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 など)を経由してアップグレードしてください。#42587Alexey Milovidov)。
  • ローカルオブジェクトストレージが S3 オブジェクトストレージと一貫した動作をするようにし、append(追記)処理の問題を修正しました(#48465 をクローズ)。また、ローカルオブジェクトストレージを独立したストレージとして設定可能にしました。この変更は後方互換性がありません。ローカルオブジェクトストレージ上のキャッシュが以前のバージョンと互換性がないためです。#48791Kseniia Sumarokova)。
  • 実験的機能 "in-memory data parts" を削除しました。データフォーマット自体は引き続きサポートされますが、対応する設定は no-op(何も行われない)となり、代わりに compact または wide のパーツが使用されます。これにより #45409 がクローズされます。#49429Alexey Milovidov)。
  • parallelize_output_from_storages および input_format_parquet_preserve_order 設定のデフォルト値を変更しました。これにより、ClickHouse はファイル(例: CSV や Parquet)から読み込む際に行を並べ替えることができ、多くの場合でパフォーマンスが大幅に向上します。従来どおり順序を保持する動作に戻すには、parallelize_output_from_storages = 0input_format_parquet_preserve_order = 1 を使用してください。#49479Michael Kolupaev)。
  • PROJECTION を本番利用可能な状態にしました。optimize_use_projections 設定を追加し、SELECT クエリに対して PROJECTION を選択して使用するかどうかを制御できるようにしました。allow_experimental_projection_optimization 設定は廃止され、何も行いません。#49719Alexey Milovidov)。
  • joinGet を(dictGet と同様に)非決定的としてマークしました。これにより、追加の設定なしで mutation 内でそれらを使用できるようになります。#49843Azat Khuzhin)。
  • "groupArray returns cannot be nullable" の変更を元に戻しました(Nullable 型に対する groupArray / groupArrayLast / groupArraySample のバイナリ互換性が壊れ、TOO_LARGE_ARRAY_SIZECANNOT_READ_ALL_DATA を引き起こす可能性があるためです)。#49971Azat Khuzhin)。
  • enable_memory_bound_merging_of_aggregation_results 設定をデフォルトで有効にしました。22.12 より前のバージョンからアップデートする場合は、アップデートが完了するまでこのフラグを false に設定しておくことを推奨します。#50319Nikita Taranov)。

新機能

  • ストレージエンジン AzureBlobStorage と azureBlobStorage テーブル関数を追加しました。サポートされる機能セットは、ストレージ/テーブル関数 S3 と非常によく似ています [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni).
  • ネイティブの ClickHouse Keeper CLI クライアントを追加しました。clickhouse keeper-client として利用できるようになりました #47414 (pufit)。
  • urlCluster テーブル関数を追加しました。すべての *Cluster 系テーブル関数をリファクタリングしてコードの重複を削減しました。あらゆる *Cluster 関数シグネチャおよび名前付きコレクションに対してスキーマ推論が機能するようにしました。#38499 をクローズしました。#45427attack204)、Pavel Kruglov。
  • クエリキャッシュが本番ワークロードで使用可能になりました。 #47977 (Robert Schulze)。クエリキャッシュは totals および extremes 修飾子付きのクエリもサポートするようになりました。 #48853 (Robert Schulze)。後方互換性のため、allow_experimental_query_cache 設定は廃止扱いとなりました。この設定は https://github.com/ClickHouse/ClickHouse/pull/47977 で削除されています。 #49934 (Timur Solodovnikov)。
  • 地理空間データ型(PointRingPolygonMultiPolygon)が本番利用可能になりました。 #50022 (Alexey Milovidov)。
  • PostgreSQL、MySQL、MeiliSearch、SQLite のテーブルエンジンにスキーマ推論を追加。#49972 をクローズ。 #50000 (Nikolay Degterinsky)。
  • CREATE USER u IDENTIFIED BY 'p' のようなクエリにおけるパスワードの種類は、サーバー上の config.xml 内の設定 default_password_type に従って自動的に設定されます。 #42915 をクローズ。 #44674Nikolay Degterinsky)。
  • bcrypt パスワード認証方式を追加。 #34599 をクローズ。 #44905Nikolay 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 をクローズしました。 #48724Johann Gan)。
  • バックグラウンドタスク(マージおよびミューテーション)向けの MemoryTracker を追加します。マージおよびミューテーションに対するソフトメモリ制限を表す merges_mutations_memory_usage_soft_limit および merges_mutations_memory_usage_to_ram_ratio 設定を導入します。この制限に達すると、ClickHouse は新しいマージまたはミューテーションタスクをスケジュールしなくなります。また、バックグラウンドタスクの現在のメモリ使用量を観測できるようにするため、MergesMutationsMemoryTracking メトリクスも導入します。#46089 を再提出。#48774 をクローズ。#48787Dmitry Novik)。
  • 関数 dotProduct が配列に対して動作するようになりました。 #49050 (FFFFFFFHHHHHHH)。
  • MySQL との互換性を高めるため、SHOW INDEX ステートメントをサポートしました。 #49158 (Robert Schulze).
  • テーブル関数 url に仮想カラム _file および _path のサポートを追加。- テーブル関数 url のエラーメッセージを改善。- #49231 を解決。- #49232 を解決。 #49356Ziyi Tan)。
  • users.xml ファイルに grants フィールドを追加し、ユーザーごとの権限を指定できるようにしました。 #49381 (pufit)。
  • Grace hash join アルゴリズムを使用することで full/right join をサポートしました。 #49483 (lgbo).
  • WITH FILL 修飾子は、ソートプレフィックス単位での埋め値をまとめて処理します。use_with_fill_by_sorting_prefix SETTING によって制御されます(デフォルトで有効)。#33203#issuecomment-1418736794 に関連。#49503Igor Nikonov)。
  • clickhouse-client は、"--query"(または "-q")が指定されていない場合に、"--multiquery" の後に続くクエリも受け付けるようになりました。例: clickhouse-client --multiquery "select 1; select 2;"。 #49870 (Alexey Gerasimchuk)。
  • レプリカからの Hello パケット受信用の専用 handshake_timeout を追加。 #48854 をクローズ。 #49948Kruglov Pavel)。
  • 指定した回数だけ空白を繰り返す関数「space」を追加しました。 #50103 (Robert Schulze)
  • --input&#95;format&#95;csv&#95;trim&#95;whitespaces オプションを追加しました。 #50215 (Alexey Gerasimchuk)。
  • 正規表現ツリー辞書に対する dictGetAll 関数で、複数のマッチに対応する値を配列として返せるようにしました。 #50254 をクローズ。 #50255Johann Gan)。
  • 日付または日時を直後の土曜日または日曜日に切り上げるための toLastDayOfWeek 関数を追加しました。 #50315 (Victor Krasnov)
  • ignore_data_skipping_indices を指定することでスキップインデックスを無視できる機能。#50329Boris Kuschel)。
  • メモリ情報および ProfileEvents をユーザー単位で表示できるように、system.user_processes テーブルと SHOW USER PROCESSES クエリを追加しました。 #50492 (János Benjamin Antal)。
  • テーブル、データベース、テーブル関数、およびディクショナリのシークレットを表示できるようにするサーバー設定およびフォーマット設定 display_secrets_in_show_and_select を追加しました。どのユーザーがシークレットを閲覧できるかを制御する権限 displaySecretsInShowAndSelect も追加しました。#46528 (Mike Kot)。
  • DATABASE 配下のすべてのテーブルに対して ROW POLICY を設定できるようになりました。 #47640 (Ilya Golshtein).

パフォーマンスの向上

  • デフォルトでマークおよびプライマリキーを圧縮します。これにより、コールドクエリの実行時間が大幅に短縮されます。アップグレードに関する注意: マークおよびプライマリキーの圧縮サポートはバージョン 22.9 で追加されました。マークまたはプライマリキーの圧縮を有効にした場合、もしくはデフォルトでマークまたはプライマリキーの圧縮が有効になっているバージョン 23.5 以降をインストールした場合は、バージョン 22.8 以前へダウングレードすることはできません。また、サーバー設定ファイルの <merge_tree> セクションで compress_marks および compress_primary_key 設定を指定することで、マークまたはプライマリキーの圧縮を明示的に無効化することもできます。#42587Alexey Milovidov)。
  • 新しい s3_max_inflight_parts_for_one_file SETTING は、1 つのファイルに対するマルチパートアップロードリクエストで同時に処理されるパーツ数の上限を設定します。 #49961 (Sema Checherinda)。
  • 複数ファイルから読み込む際に、各ファイルに対する並列パース用スレッド数を減らしました。 #42192 を解決します。 #46661SmitaRKulkarni)。
  • 通常の読み出しよりも少ない granule を読む場合にのみ、集約 PROJECTION を使用してください。これは、クエリがテーブルの PK にはヒットするが、PROJECTION にはヒットしない場合に有効です。#49150 を修正。#49417Nikolai Kochetov)。
  • 何も挿入されない場合は、ANY ハッシュ結合でブロックを保持しないようにしました。 #48633 (vdimir)。
  • JIT コンパイル時における集約コンビネータ -If の不具合を修正し、集約関数への JIT コンパイルを有効化しました。 #48120 をクローズします。 #49083Igor Nikonov)。
  • リモートテーブルからの読み取りでは、タスクスティーリングが有効に機能するよう、(パーツ全体を読むのではなく)より小さなタスクを使用します。タスクサイズは読み取るカラムのサイズによって決まり、S3 から読み取る際には常に 1MB のバッファを使用します。キャッシュセグメントの境界は 1MB にアラインされているため、小さなタスクでも十分な大きさを保てるほか、断片化も防止できるはずです。#49287Nikita Taranov)。
  • 次の設定を導入しました。- バックグラウンド処理で使用されるメモリ量を制限するための merge_max_block_size_bytes。- 垂直マージを有効化するための追加条件を指定する vertical_merge_algorithm_min_bytes_to_activate#49313Nikita Mikhaylov)。
  • ローカルファイルシステムから読み取る際の読み取りバッファのデフォルトサイズが、わずかにより適切な値に変更されました。また、新たに 2 つの設定 max_read_buffer_size_local_fsmax_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 データ型を使用しています)、あまり賢い構造ではありませんが、以前よりはわずかに改善されます。#49647Alexey Milovidov)。
  • grace_hash join において、ハッシュテーブルのサイズを事前に確保するよう試みます。 #49816 (lgbo).
  • uniqExactIf 状態の並列マージ。 #49885 を解決。 #50285flynn)。
  • Keeper の改良: Keeper に CheckNotExists リクエストを追加し、Replicated テーブルのパフォーマンスを向上させました。 #48897 (Antonio Andelic).
  • Keeper のパフォーマンス改善: 処理中に同じリクエストを 2 回シリアライズしないようにしました。大きなリクエストのデシリアライズ結果をキャッシュするようにしました。これは新しい coordination の設定 min_request_size_for_cache によって制御されます。 #49004 (Antonio Andelic).
  • マージするパーツを選択する際、多数のパーティションにマージ対象がない場合の List ZooKeeper リクエスト数を削減しました。 #49637 (Alexander Tokmakov)。
  • FS キャッシュにおけるロック処理を再設計しました #44985 (Kseniia Sumarokova)。
  • 単純な count の最適化が可能な場合には、pure parallel replicas を無効化するようにしました。 #50594 (Raúl Marín).
  • Iceberg スキーマ推論時に、すべてのキーに対して HEAD リクエストを送信せず、データの読み取りに使用されるキーに対してのみ送信するようにしました。 #50203 (Kruglov Pavel).
  • enable_memory_bound_merging_of_aggregation_results 設定がデフォルトで有効になりました。 #50319 (Nikita Taranov).

実験的機能

  • DEFLATE_QPL コーデックで必要な最小 SIMD バージョンを SSE 4.2 に引き下げました。qpl におけるドキュメント変更 - Intel® QPL は、ランタイムのカーネルディスパッチャおよび CPUID チェックに依存して、利用可能な中で最適な実装 (SSE/AVX2/AVX512) を選択します - ClickHouse における qpl ビルド用の CMake ファイルを再構成し、最新版の upstream qpl と整合させました。 #49811 (jasperzhu)。
  • 純粋な Parallel Replicas 構成で JOIN を実行するための初期サポートを追加しました。 #49544 (Raúl Marín)。
  • 「zero-copy replication」を使用した Outdated パーツ削除処理の並列性を向上しました。 #49630 (Alexander Tokmakov)。
  • Parallel Replicas: 1) 非レプリケートなストレージで parallel_replicas_for_non_replicated_merge_tree 設定が無効な状態で Parallel Replicas を使用した場合に発生していたエラー NOT_FOUND_COLUMN_IN_BLOCK を修正しました。2) allow_experimental_parallel_reading_from_replicas は 0, 1, 2 の 3 つの値を取るようになりました。0 - 無効、1 - 有効 (失敗時にはサイレントに無効化、FINAL や JOIN の場合)、2 - 有効 (失敗時には例外を送出)。3) SELECT クエリで FINAL 修飾子が使用され、かつ Parallel Replicas が有効な場合、allow_experimental_parallel_reading_from_replicas が 1 に設定されていれば ClickHouse は Parallel Replicas を無効化しようとし、それ以外の場合は例外を送出します。 #50195 (Nikita Mikhaylov)。
  • Parallel Replicas が有効な場合、常に利用不可能なサーバーをスキップします (この挙動は設定 skip_unavailable_shards により制御され、デフォルトで有効であり、変更できるのは無効にする場合のみです)。これにより #48565 がクローズされました。 #50293 (Nikita Mikhaylov)。

改善点

  • BACKUP コマンドは、バックアップ作成時に暗号化ディスク上のデータを復号しません。代わりに、データはバックアップ内に暗号化された形式のまま保存されます。そのようなバックアップは、同一(またはそれを拡張した)暗号鍵のリストを持つ暗号化ディスクにのみ復元できます。 #48896 (Vitaly Baranov)。
  • ATTACH PARTITION FROM および REPLACE PARTITION FROM の FROM 句内で一時テーブルを使用できるようにしました。 #49436 (Roman Vasin).
  • MergeTree テーブル向けに async_insert 設定を追加しました。これはクエリレベルの設定 async_insert と同じ意味を持ち、特定のテーブルに対して非同期インサートを有効にします。注意: clickhouse-client からの INSERT クエリには適用されないため、その場合はクエリレベルの設定を使用してください。 #49122 (Anton Popov).
  • QUOTA 作成ステートメントのパラメータでサイズサフィックスを指定できるようにしました。 #49087 (Eridanus).
  • first_valuelast_value が NULL を受け付けるように拡張しました。 #46467 (lgbo).
  • extractKeyValuePairs に対するエイリアス str_to_map および mapFromString を追加しました。 https://github.com/clickhouse/clickhouse/issues/47185 をクローズしました。 #49466 (flynn)。
  • メモリ使用量および空きメモリ量に関する非同期メトリクスとして、CGroup バージョン 2 のサポートを追加しました。これにより #37983 がクローズされました。 #45999 (sichenzhao)。
  • Cluster テーブル関数は、利用不能な分片を常にスキップするようにしました。close #46314. #46765 (zk_kiger).
  • CSV ファイルのヘッダーに空のカラム名を含められるようにしました。 #47496 (你不要过来啊)。
  • Google Cloud Storage の S3 互換テーブル関数 gcs を追加しました。osscosn 関数と同様に、s3 テーブル関数へのエイリアスに過ぎず、新しい機能は追加されていません。 #47815 (Kuba Kaflik).
  • S3 に対して厳密なパーツサイズを使用できるようにしました(Cloudflare R2 S3 Storage との互換性)。 #48492 (Azat Khuzhin).
  • Replicated データベースのレプリカに関する情報を含む新しいカラム database_shard_namedatabase_replica_nameis_activesystem.clusters に追加しました。SYSTEM DROP DATABASE REPLICA クエリにオプションの FROM SHARD 句を追加しました。#48548Alexander Tokmakov)。
  • system.replicas に新しいカラム zookeeper_name を追加し、レプリケーテッドテーブルのメタデータがどの(補助)ZooKeeper クラスターに保存されているかを示します。 #48549 (cangyin)。
  • IN 演算子が DateDate32 の比較をサポートするようになりました。 #48736 をクローズしました。 #48806 (flynn).
  • HDFS におけるイレイジャーコーディングのサポート、著者: @M1eyu2018, @tomscut. #48833 (M1eyu).
  • 補助 ZooKeeper クラスターに対する SYSTEM DROP REPLICA を実装し、これにより #48931 がクローズされる可能性があります。 #48932wangxiaobo)。
  • MongoDB に Array データ型のサポートを追加しました。 #48598 をクローズしました。 #48983 (Nikolay Degterinsky)。
  • テーブルに Interval データ型を保存できるようにしました。 #49085 (larryluogit).
  • 明示的にウィンドウフレームを定義しなくても ntile ウィンドウ関数を使用できるようにしました: ntile(3) OVER (ORDER BY a)#46763 をクローズしました。#49093vdimir)。
  • 多数の未完了のミューテーションを既に抱えているテーブルに対して、ミューテーション(ALTER UPDATEALTER DELETEALTER MODIFY COLUMN など)を生成する ALTER クエリを遅延させたり、エラーとして失敗させたりできる number_of_mutations_to_delaynumber_of_mutations_to_throw の設定を追加しました。 #49117 (Anton Popov).
  • ファイルシステムキャッシュでの create_directories からの例外を捕捉するようにしました。 #49203 (Kseniia Sumarokova).
  • 埋め込みの例を、description フィールドを補足するために、system.functions 内の新しいフィールド example にコピーします。 #49222 (Dan Roscigno).
  • MongoDB Dictionary 向けの接続オプションを有効化しました。例: xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source> ### ユーザー向け変更のドキュメントエントリ。#49225 (MikhailBurdukov).
  • kolmogorovSmirnovTest の計算メソッド asymp に対して、エイリアス asymptotic を追加しました。ドキュメントを改善しました。 #49286 (Nikita Mikhaylov).
  • 集約関数 groupBitAnd/Or/Xor が符号付き整数データでも動作するようになりました。これにより、スカラー関数 bitAnd/Or/Xor の動作との一貫性が保たれます。 #49292 (exmy).
  • 関数ドキュメントを、より細かいフィールドに分割しました。 #49300 (Robert Schulze)。
  • サーバー内のすべてのテーブルで共有される複数のスレッドを使用して、古くなったデータパーツをロードします。このスレッドプールおよびそのキューのサイズは、max_outdated_parts_loading_thread_pool_size および outdated_part_loading_thread_pool_queue_size の設定で制御されます。 #49317 (Nikita Mikhaylov)。
  • ブロック間で辞書を共有している場合に、LowCardinality カラムの処理されたデータサイズを過大評価しないようにしました。これにより #49322 が解決しました。#48745 も参照してください。#49323Alexey Milovidov)。
  • OUTFILE 経由で使用された場合、Parquet writer は適切な row group サイズを使用するようになりました。 #49325 (Michael Kolupaev)。
  • エイリアスが引用符で囲まれている場合、ARRAY のような制限付きキーワードをエイリアスとして使用できるようにしました。#49324 をクローズ。#49360Nikolay Degterinsky)。
  • データパーツのロードおよび削除ジョブは、テーブルレベルのプールではなく、サーバー全体で共有されるプールに移されました。プールのサイズは、トップレベルの設定 max_active_parts_loading_thread_pool_sizemax_outdated_parts_loading_thread_pool_sizemax_parts_cleaning_thread_pool_size によって制御されます。テーブルレベルの設定 max_part_loading_threads および max_part_removal_threads は廃止されました。 #49474 (Nikita Mikhaylov)。
  • Play UI の URL で ?password=pass を許可。ブラウザ履歴ではパスワードをマスクするようにしました。 #49505 (Mike Kot).
  • リモートファイルシステムからサイズがゼロのオブジェクトを読み取れるようにしました(空のファイルはバックアップ対象とならないため、メタデータファイル内の BLOB が 0 個になってしまう場合があります)。#49480 をクローズしました。 #49519Kseniia Sumarokova)。
  • ThreadGroup がデタッチされた後に、スレッドの MemoryTracker を total_memory_tracker にアタッチします。 #49527 (Dmitry Novik).
  • クエリ内で同じクエリパラメータを複数回使用している場合に、パラメータ化ビューが正しく動作しない問題を修正しました。 #49556 (Azat Khuzhin).
  • クエリコンテキストにおいて、最後に送信された ProfileEvents スナップショットに割り当てられたメモリを解放します。#47564 のフォローアップ。#49561Dmitry Novik)。
  • 関数 "makeDate" に、MySQL 互換のオーバーロード(year と day of the year を引数に取る)が追加されました。 #49603 (Robert Schulze).
  • RegExpTreeDictionary に対する dictionary テーブル関数をサポートしました。 #49666 (Han Fei).
  • 重み付き公平 IO スケジューリングポリシーを追加しました。サーバーを再起動することなく、実行時に IO スケジューリング階層を更新できる動的リソースマネージャーを追加しました。 #49671 (Sergei Trifonov)。
  • GCS への multipart upload の後に compose リクエストを追加しました。これにより、multipart upload でアップロードされたオブジェクトに対して copy 操作を使用できるようになります。異なるサイズのパーツで作成されたオブジェクトでは compose リクエストが失敗する可能性があるため、s3_strict_upload_part_size を適切な値に設定することを推奨します。 #49693 (Antonio Andelic)。
  • extractKeyValuePairs 関数では、「ベストエフォート」のパースロジックを改善し、key_value_delimiter を値の有効な一部として受け付けるようにしました。これにより分岐が簡潔になり、わずかながら高速化も期待できます。 #49760 (Arthur Passos).
  • system.processors_profile_log に initial_query_id フィールドを追加。 #49777 (helifu).
  • システムログテーブルにカスタムソートキーを設定できるようになりました。 #49778 (helifu).
  • system.query_log に、計算にどのパーティションが関与したかを示すための新しいフィールド partitions が追加されました。 #49779 (helifu).
  • ReplicatedMergeTree 用に enable_the_endpoint_id_with_zookeeper_name_prefix 設定を追加しました(デフォルト無効)。有効化すると、テーブルのサーバー間通信エンドポイントに ZooKeeper クラスター名が追加されます。これにより、同じパスだが補助 ZooKeeper が異なるレプリケーションテーブルが存在する場合に発生する Duplicate interserver IO endpoint エラーを回避できます。 #49780 (helifu)。
  • clickhouse-local でクエリパラメータを利用可能にしました。 #46561 をクローズしました。 #49785Nikolay Degterinsky)。
  • デフォルトで YAML ファイルから辞書と関数を読み込めるようにしました。以前のバージョンでは、*.xml ファイルを前提としていたため、設定ファイル内の dictionaries_config または user_defined_executable_functions_config を編集する必要がありました。 #49812 (Alexey Milovidov)。
  • Kafka テーブルエンジンでエイリアスカラムを使用できるようになりました。 #49824 (Aleksandr Musorin).
  • extractKeyValuePairs によって生成されるペア数の上限を制限するための設定を追加しました。これはメモリの過剰使用を防ぐためのセーフガードです。 #49836 (Arthur Passos)。
  • IN 演算子の引数が単一要素のタプルであるという(珍しい)ケースをサポートしました。 #49844 (MikhailBurdukov).
  • bitHammingDistance 関数が String および FixedString データ型をサポートするようになりました。#48827 をクローズしました。#49858flynn)。
  • OS X 上のクライアントで発生していたタイムアウトリセットエラーを修正しました。 #49863 (alekar).
  • 関数 bitCount で UInt128、Int128、UInt256、Int256 などの大きな整数型をサポートしました。これにより、AI アプリケーション向けに大きなビットマスクに対するハミング距離の計算が可能になります。 #49867 (Alexey Milovidov).
  • 暗号化ディスクでキー ID の代わりにフィンガープリントを使用できるようになりました。これにより、暗号化ディスクの設定が簡素化されます。 #49882 (Vitaly Baranov).
  • PostgreSQL に UUID データ型を追加。#49739 をクローズ。#49894Nikolay Degterinsky)。
  • 関数 toUnixTimestamp は、Date および Date32 を引数として受け取れるようになりました。 #49989 (Victor Krasnov).
  • ディクショナリのメモリ使用量としてはサーバーメモリのみを計上するようにしました。 #49995 (Azat Khuzhin).
  • サーバーでは、MySQL との互換性のために SQL_AUTO_IS_NULL などの SQL_* 設定を no-op(何もしない操作)として扱えるようになります。これにより #49927 が解決されました。 #50013 (Alexey Milovidov)。
  • ON CLUSTER クエリで initial_query_id を保持するようにし、内部解析に役立つようにしました(distributed_ddl_entry_format_version=5 のとき)。 #50015 (Azat Khuzhin).
  • 設定名変更時の後方互換性を維持するため、エイリアス(optimize_use_projections に対する allow_experimental_projection_optimizationenable_lightweight_delete に対する allow_experimental_lightweight_delete)を使用。 #50044 (Azat Khuzhin).
  • Keeper 内でクラスタノードを登録するために、my_hostname を設定して FQDN を渡せるようになりました。複数の compute group をサポートするために invisible の SETTING を追加しました。クラスタとしての各 compute group は、他の compute group からは不可視になります。 #50186 (Yangkuan Liu).
  • LIMIT n を指定できるにもかかわらず PostgreSQL がすべてのデータを読み込んでしまう問題を修正しました。 #50187 (Kseniia Sumarokova)。
  • サブクエリを含むクエリ用の新しいプロファイルイベント(QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries)を追加しました。#50204Azat Khuzhin)。
  • users.xml ファイルに roles フィールドを追加し、設定ファイル経由で付与するロールを指定できるようにしました。 #50278 (pufit).
  • AsynchronousMetrics で CGroupCpuCfsPeriodCGroupCpuCfsQuota をレポートするようにしました。- サーバー起動時に cgroup v2 のメモリ制限を考慮するようにしました。#50379 (alekar).
  • SIGQUIT 用のシグナルハンドラーを追加し、SIGINT と同様に動作するようにしました。 #50298 をクローズしました。 #50435 (Nikolay Degterinsky)。
  • JSON のパースがオブジェクト出力のサイズが大きすぎるために失敗した場合、デバッグできるように処理した最後の位置を出力するようにしました。 #50474 (Valentin Alexeev).
  • 固定サイズではない Decimal 型をサポートしました。#49130 をクローズしました。#50586 (Kruglov Pavel)。

ビルド/テスト/パッケージングの改善

  • 新しく改良された keeper-bench。すべてを YAML/XML ファイルからカスタマイズ可能です。- リクエストジェネレータ - 各種リクエストジェネレータごとに特有のフィールドセットを持たせることができる - multi キーの下で同じ定義を行うだけでマルチリクエストを生成できる - multi 内の各リクエストまたはサブリクエストには、分布を制御するための weight フィールドを定義できる - テスト実行のためにセットアップが必要なツリーを定義できる - ホストは、すべてのタイムアウトをカスタマイズ可能な形で定義でき、各ホストごとに生成するセッション数も制御可能 - min_value および max_value フィールドで定義された整数は乱数を生成する。#48547Antonio Andelic)。
  • Io_uring は macOS ではサポートされていないため、ローカルでテストを実行する際には選択しないでください。テストがまれに失敗するのを防ぐためです。 #49250 (Frank Chen).
  • テスト用に名前付きフォールトインジェクションをサポートしました。 #49361 (Han Fei).
  • prctl(プロセス制御)システムコールが利用できない OS(AWS Lambda など)上でも ClickHouse を実行できるようにしました。 #49538 (Alexey Milovidov)。
  • qpl における contrib/isa-l と isa-l 間のビルド時の競合問題を修正しました 49296#49584jasperzhu)。
  • ユーティリティはデフォルトではビルドされず、明示的に -DENABLE_UTILS=1 を指定した場合にのみビルドされるようになりました。これにより、一般的な開発ビルドでのリンク時間が短縮されます。 #49620 (Robert Schulze)。
  • 将来誤って削除されるのを防ぐため、idxd-config のビルド設定を別の CMake ファイルに分離しました。 #49651 (jasperzhu).
  • master ブランチでアナライザーを有効にした CI チェックを追加。フォローアップ #49562#49668Dmitry 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 がクローズされました。#50457Alexey Milovidov)。
  • 内部で使用している protobuf を v3.18 に更新しました(誤検知とされていた CVE-2022-1941 を修正)。#50400Robert Schulze)。
  • 内部で使用している libxml2 を v2.10.4 に更新しました(誤って報告されていた CVE-2023-28484 および CVE-2023-29469 を解消)。 #50402 (Robert Schulze).
  • c-ares を v1.19.1 に更新 (誤検知とされる CVE-2023-32067、CVE-2023-31130、CVE-2023-31147)。 #50403 (Robert Schulze).
  • libgsasl に対して誤って報告されていた CVE-2022-2469 を修正。 #50404 (Robert Schulze)。

バグ修正(公式安定版でのユーザー影響のある不具合)

  • ActionsDAG: 誤った最適化を修正 #47584 (Salvatore Mesoraca)。
  • Keeper における同時スナップショットの処理を正しく行うように修正 #48466 (Antonio Andelic).
  • MergeTreeMarksLoader が DataPartStorage ではなく DataPart を保持するようになりました #48515 (SmitaRKulkarni).
  • シーケンス状態を修正 #48603 (Ilya Golshtein).
  • Backup/Restore の同時実行チェックが、以前の失敗時に正しく動作しない問題を修正 #48726 (SmitaRKulkarni)。
  • 存在しない ZK パスを持つテーブルをアタッチしても ReadonlyReplica メトリックが増加しない問題を修正 #48954 (wangxiaobo).
  • 一部の箇所で、捕捉されない例外に対して terminate が呼び出される可能性のある問題を修正。 #49112 (Kruglov Pavel)。
  • 複数の StorageJoin を含むクエリで発生する key が見つからないエラーを修正しました #49137 (vdimir)。
  • Nullable な primary key 使用時に誤ったクエリ結果が返される問題を修正 #49172 (Duc Canh Le)。
  • ビッグエンディアンマシン上での reinterpretAs*() の動作を修正 #49198 (Suzy Wang)。
  • (実験的なゼロコピー レプリケーション) ゼロコピー パーツのロックをよりアトミックにする #49211 (alesapin).
  • Outdated パーツのロード時に発生するレースコンディションを修正 #49223 (Alexander Tokmakov).
  • すべてのキーの値が NULL の場合に GROUP BYWITH ROLLUP を使用すると誤った結果が返される不具合を修正しました #49282 (Shuai li)。
  • SHARDS 使用時の HASHED 辞書における load_factor の計算を修正しました #49319 (Azat Khuzhin)。
  • エイリアスカラムに圧縮CODECを設定できないようにしました #49363 (Timur Solodovnikov).
  • 既存のパーツディレクトリ削除時のバグを修正しました #49365 (alesapin)。
  • HMAC 使用時の GCS の問題を適切に修正 #49390 (Antonio Andelic).
  • remote() からの読み取り時にサブクエリの Set が構築されない fuzz テスト由来のバグを修正 #49425Alexander Gololobov)。
  • shutdown_wait_unfinished_queries を反転しました #49427 (Konstantin Bogdanov).
  • (実験的なゼロコピー レプリケーション)別のゼロコピーに関するバグを修正 #49473alesapin)。
  • PostgreSQL データベースの設定を修正 #49481 (Mal Curtis)。
  • s3Cluster の引数を正しく処理するよう修正しました #49490 (Antonio Andelic).
  • TraceCollector のデストラクタのバグを修正。 #49508 (Yakov Olkhovskiy).
  • 短いシークで不具合が発生していた AsynchronousReadIndirectBufferFromRemoteFS を修正 #49525 (Michael Kolupaev)。
  • 辞書の読み込み順序を修正 #49560Alexander Tokmakov)。
  • Object('json') 型カラムのデータ型変更を禁止 #49563 (Nikolay Degterinsky)。
  • ストレステストの修正 (Logical error: Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
  • DISTINCT の不具合を修正 #49628Alexey Milovidov)。
  • Fix: ソート対象外のカラムに 0 値が含まれる場合の DISTINCT と並び順の不具合を修正 #49636 (Igor Nikonov).
  • fuzzer と UBSan で検出された大整数におけるオフバイワンエラーを修正 #49645 (Alexey Milovidov)。
  • 再起動後にスパースカラムから読み取れない問題を修正 #49660 (Anton Popov)。
  • fibers 使用時に SpanHolder::finish() 内のアサートを修正 #49673 (Kruglov Pavel)。
  • スパースな引数を取るショートサーキット関数およびミューテーションを修正 #49716 (Anton Popov).
  • インクリメンタルバックアップに追記されるファイルの書き込みを修正 #49725Vitaly Baranov)。
  • Object 型カラムを持つテーブルで論理削除の mutation を実行した際に発生する "There is no physical column _row_exists in table" エラーを修正しました。 #49737 (Alexander Gololobov).
  • randomStringUTF8(奇数の場合)における msan の問題を修正 #49750 (Robert Schulze).
  • 集約関数 kolmogorovSmirnovTest の不具合を修正しました #49768 (FFFFFFFHHHHHHH).
  • ネイティブプロトコルの settings エイリアスを修正 #49776 (Azat Khuzhin)。
  • 単一要素タプルの配列に対する arrayMap の不具合を修正 #49789 (Anton Popov).
  • クエリ単位の IO/BACKUP スロットリング設定を修正しました #49797 (Azat Khuzhin).
  • プロファイル定義で NULL を設定できない問題を修正 #49831 (Vitaly Baranov).
  • プロジェクションおよび aggregate_functions_null_for_empty 設定(query_plan_optimize_projection 用)に関するバグを修正しました #49873 (Amos Bird).
  • 再起動後に Distributed async INSERT で保留状態となっていたバッチの処理を修正 #49884 (Azat Khuzhin)。
  • CacheMetadata::doCleanup のアサーションを修正 #49914 (Kseniia Sumarokova)。
  • OptimizeRegularExpression における is_prefix の不具合を修正 #49919 (Han Fei)。
  • メトリクス WriteBufferFromS3BytesWriteBufferFromS3MicrosecondsWriteBufferFromS3RequestsErrors を修正 #49930 (Aleksandr Musorin)。
  • protobuf での IPv6 のエンコードを修正 #49933Yakov Olkhovskiy)。
  • テキスト形式における Nullable の不正なパースで発生しうる論理エラーを修正しました #49960 (Kruglov Pavel)。
  • より互換性の高い Parquet ファイルを生成できるように、output_format_parquet_compliant_nested_types 設定を追加しました #50001Michael Kolupaev)。
  • 負荷テスト「Not enough space to add ...」における論理エラーを修正 #50021 (Kseniia Sumarokova)。
  • ReplicatedMergeTree の attach スレッドでテーブルを起動する際に発生するデッドロックを回避 #50026 (Antonio Andelic)。
  • fibers 利用時の SpanHolder::finish() のアサートを修正 (2 回目の試行) #50034 (Kruglov Pavel)。
  • DDL の OpenTelemetry コンテキストのシリアライゼーションに対して適切なエスケープ処理を追加。#50045 (Azat Khuzhin)。
  • 破損した PROJECTION パーツの報告処理を修正しました #50052 (Amos Bird).
  • JIT コンパイルにおける NaN との不等比較の不具合を修正 #50056 (Maksim Kita)。
  • 引数を指定しない Replicated データベース使用時に発生するクラッシュを修正 #50058 (Azat Khuzhin)。
  • 定数条件と Nullable 引数を取る multiIf で発生していたクラッシュを修正 #50123 (Anton Popov)。
  • 日付関連のキーに対する不正なインデックス解析を修正 #50153 (Amos Bird)。
  • ORDER BY 列が定義されていない場合は、ORDER BY の変更を許可しないようにしました #50154 (Han Fei).
  • NULL 定数引数を含む 2 項演算子に対する索引解析が壊れていた問題を修正しました #50177 (Amos Bird).
  • clickhouse-client: --query--queries-file を同時に使用できないようにしました #50210 (Alexey Gerasimchuk).
  • INTO OUTFILE 拡張機能(APPEND および STDOUT)および WATCH EVENTS における未定義動作(UB)を修正 #50216 (Azat Khuzhin)。
  • CustomSeparatedIgnoreSpaces フォーマットにおいて行末のスペースがスキップされる不具合を修正 #50224 (Kruglov Pavel)。
  • Iceberg メタデータの解析を修正 #50232 (Kseniia Sumarokova)。
  • WITH 句内のネストされた Distributed SELECT を修正 #50234 (Azat Khuzhin)。
  • keyed SipHash での MSan の問題を修正 #50245Robert Schulze)。
  • ノンブロッキングモードにおける Poco ソケットのバグを修正し、実際のノンブロッキングソケットを使用するようにしました #50252 (Kruglov Pavel)。
  • バックアップエントリのチェックサム計算を修正 #50264 (Vitaly Baranov)。
  • 比較関数での NaN の扱いを修正 #50287 (Maksim Kita)。
  • JIT 集約における Nullable キーの不具合を修正 #50291 (Maksim Kita).
  • 空の Arrow または Parquet 出力を書き込もうとすると clickhouse-local がクラッシュする問題を修正 #50328 (Michael Kolupaev).
  • Pool::Entry::disconnect() 呼び出し時にクラッシュが発生する問題を修正 #50334 (Val Doroshchuk)。
  • ディレクトリロックをより長く保持することで、パーツのフェッチ処理を改善しました #50339 (SmitaRKulkarni)。
  • 両方の引数が定数である bitShift* 関数を修正 #50343 (Kruglov Pavel)。
  • リクエスト前処理中に例外が発生した場合に Keeper がデッドロックする問題を修正。 #50387 (frinkr)。
  • 定数の整数値に対するハッシュ計算を修正 #50421 (Robert Schulze)。
  • データスキッピングインデックスにおける merge_tree_min_rows_for_seek および merge_tree_min_bytes_for_seek の挙動を修正 #50432 (Azat Khuzhin)。
  • 古いパーツを読み込む際の進行中タスク数を制限するようにしました #50450 (Nikita Mikhaylov)。
  • Keeper の修正: スナップショットのインストール後に未コミット状態を適用 #50483 (Antonio Andelic).
  • 誤った定数畳み込みを修正 #50536 (Alexey Milovidov).
  • ストレステストでの論理エラーを修正(Not enough space to add ...) #50583 (Kseniia Sumarokova)。
  • values テーブル関数における Null から LowCardinality(Nullable) への変換を修正 #50637 (Kruglov Pavel)。
  • 誤った RegExpTreeDictionary の最適化を元に戻しました #50642 (Johann Gan)。

ClickHouse リリース 23.4、2023-04-26

後方互換性のない変更

  • 関数 formatDateTime() のフォーマッタ %M は、分ではなく月名を出力するようになりました。これにより、MySQL と動作が一致します。以前の動作は、設定 "formatdatetime_parsedatetime_m_is_month_name = 0" を使用することで復元できます。 #47246 (Robert Schulze).
  • この変更は、仮想ファイルシステムキャッシュを使用している場合にのみ関係します。仮想ファイルシステムキャッシュ設定の path が空でなく、かつ絶対パスでない場合、それは <clickhouse server data directory>/caches/<path_from_cache_config> の下に配置されます。 #48784 (Kseniia Sumarokova).
  • 同一の式を持つプライマリ/セカンダリインデックスおよびソートキーは、現在は拒否されます。この動作は、設定 allow_suspicious_indices を使用して無効化できます。 #48536 (凌涛).

新機能

  • Spark の approx_percentile と同様の新しい集約関数 quantileGK/quantilesGK のサポートを追加。Greenwald-Khanna アルゴリズムについては http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf を参照。 #46428 (李扬)。
  • system.columns テーブルから要約された情報を表示する SHOW COLUMNS ステートメントを追加しました。 #48017 (Robert Schulze)。
  • SYSTEM SYNC REPLICA クエリに LIGHTWEIGHT および PULL 修飾子を追加しました。LIGHTWEIGHT バージョンはフェッチ処理とドロップレンジ操作のみを待機し(マージおよびミューテーションは無視されます)、PULL バージョンは ZooKeeper から新しいエントリを取得しますが、その完了を待機しません。#47794 を修正しました。#48085Alexander Tokmakov)。
  • kafkaMurmurHash 関数を追加し、Kafka の DefaultPartitioner と互換性を持たせました。 #47834 をクローズ。 #48185Nikolay Degterinsky)。
  • GRANT CURRENT GRANTS を使用して、現在のユーザーと同じ権限を持つユーザーを簡単に作成できるようにしました。 #48262 (pufit)。
  • 統計的集約関数 kolmogorovSmirnovTest を追加。 #48228 をクローズ。 #48325FFFFFFFHHHHHHH)。
  • system.replicas テーブルに lost_part_count カラムを追加しました。カラムの値は、対応するテーブルでロストしたパーツの総数を示します。この値は zookeeper に保存され、永続的でない ReplicatedDataLoss プロファイルイベントの代わりに監視用途で使用できます。 #48526 (Sergei Trifonov)。
  • 互換性確保のために soundex 関数を追加しました。#39880 をクローズしました。#48567FriendLey)。
  • JSONExtract で Map 型をサポートしました。 #48629 (李扬)
  • 改行区切りと 4 スペースインデントで見やすい JSON を出力するための PrettyJSONEachRow フォーマットを追加しました。 #48898 (Kruglov Pavel).
  • Parquet ファイルのメタデータを読み取るための ParquetMetadata 入力フォーマットを追加しました。 #48911 (Kruglov Pavel).
  • 文字列からキーと値のペアを抽出するための extractKeyValuePairs 関数を追加しました。入力文字列にはノイズを含んでいても構いません(例: ログファイル / キー・バリュー形式で 100% 整形されている必要はありません)。アルゴリズムは、関数に渡された引数に一致するキーと値のペアを検出します。現時点では、この関数は次の引数を受け付けます: data_column(必須)、key_value_pair_delimiter(デフォルトは :)、pair_delimiters(デフォルトは \space \, \;)、および quoting_character(デフォルトはダブルクォート)。 #43606 (Arthur Passos)。
  • 関数 replaceOne()、replaceAll()、replaceRegexpOne()、replaceRegexpAll() は、定数でないパターンおよび置換の各引数でも呼び出せるようになりました。 #46589 (Robert Schulze)。
  • Map 型カラムを扱うための関数 mapConcatmapSortmapExists を追加しました。 #48071 (Anton Popov)。

パフォーマンスの改善

  • Parquet フォーマットでのファイル読み取りが大幅に高速化されました。IO とデコードが並列化され(max_threads 設定で制御)、必要なデータ範囲のみを読み取ります。#47964 (Michael Kolupaev).
  • 次のような IN 句(サブクエリ付き)を伴う mutation を実行する場合: ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table)、テーブル t に複数のパーツがあると、各パーツごとにサブクエリ SELECT id FROM huge_table 用の set がメモリ上に構築されます。パーツが多いと、大量のメモリ(OOM に至る可能性も含む)と CPU を消費する場合があります。この問題への対応として、mutation タスクによって現在構築中の set の短命キャッシュを導入しました。同じ mutation の別タスクが同時に実行される場合、キャッシュ内の set を検索し、その構築完了を待って再利用できます。#46835 (Alexander Gololobov).
  • ALTER TABLE クエリを適用する際、必要な場合にのみ依存関係をチェックするようにしました。#48062 (Raúl Marín).
  • 関数 mapUpdate を最適化しました。#48118 (Anton Popov).
  • ローカルレプリカへの内部クエリは明示的に送信され、そのデータは loopback インターフェイス経由で受信されるようになりました。prefer_localhost_replica 設定は parallel replicas には適用されません。これはより良いスケジューリングのために必要であり、コードもよりクリーンになります。イニシエータは読み取りプロセスの調整と結果のマージのみを担当し、すべてのセカンダリクエリがデータを読み取っている間、リクエストに継続的に応答します。注意: loopback インターフェイスの使用自体はそれほど高性能ではありませんが、これがないと一部のレプリカがタスクを割り当てられずに飢餓状態となり、クエリ実行がさらに遅くなり、利用可能なリソースを使い切れない可能性があります。コーディネータの初期化は、これまで以上に遅延されるようになりました。すべての受信リクエストには読み取りアルゴリズムに関する情報が含まれており、最初のリクエスト到着時にその情報を用いてコーディネータを初期化します。いずれかのレプリカが異なるアルゴリズムで読み取ろうとした場合、例外がスローされ、クエリは中止されます。#48246 (Nikita Mikhaylov).
  • スキップ索引が use_skip_indexes=0 設定により無効化されている場合、スキップ索引の解析にのみ使用される IN 句右辺のサブクエリ用 set を構築しないようにしました。以前は、これによりクエリのパフォーマンスが悪化する可能性がありました。#48299 (Anton Popov).
  • FROM file(...) からの読み取り直後にクエリ処理を並列化するようにしました。#38755 に関連します。#48525 (Igor Nikonov). クエリ処理は、任意のデータソースからの読み取り直後に並列化されるようになりました。対象となるデータソースは、主にテーブル関数 urlfile のような単純または外部ストレージです。#48727 (Igor Nikonov). これはデフォルトでは有効になっていない parallelize_output_from_storages 設定によって制御されます。
  • ThreadPool のミューテックス競合を軽減しました(大量の小さなジョブがある場合にパフォーマンスが向上する可能性があります)。#48750 (Sergei Trifonov).
  • 複数の ALTER DELETE mutation におけるメモリ使用量を削減しました。#48522 (Nikolai Kochetov).
  • skip_unavailable_shards 設定が有効になっている場合、余分な接続試行を行わないようにしました。#48771 (Azat Khuzhin).

実験的機能

  • クエリキャッシュ内のエントリが max_block_size に揃えられ、圧縮されるようになりました。 #45912 (Robert Schulze).
  • クエリキャッシュで USER ごとの QUOTA を定義できるようになりました。 #48284 (Robert Schulze).
  • 並列レプリカに対するいくつかの修正を行いました。 #48433 (Nikita Mikhaylov).
  • 暗号化ディスク上での zero-copy-replication(実験的機能)を実装しました。 #48741 (Vitaly Baranov).

改善

  • connect_timeout_with_failover_ms のデフォルト値を 1000 ms に引き上げました(https://github.com/ClickHouse/ClickHouse/pull/47229 で非同期接続を追加したため)。#5188 をクローズします。#49009Kruglov Pavel)。
  • データレイク周りにいくつかの改善を行いました: - Iceberg が非パーティション化されたデータでも動作するようにしました。- Iceberg フォーマットバージョン v2 をサポートしました(以前は v1 のみサポート)。- DeltaLake / Hudi のパーティションデータの読み取りをサポートしました。- Delta のチェックポイントファイルを使用することで、DeltaLake メタデータの読み取りを高速化しました。- 誤った Hudi の読み取り動作を修正しました:以前は読み取るデータの選択を誤っていたため、小さなテーブルのみ正しく読み取ることができていました。- これらのエンジンが、変更されたデータの更新を取り込めるようにしました(以前はテーブル作成時の状態に固定されていました)。- Spark を使用して Iceberg / DeltaLake / Hudi の適切なテストを行いました。#47307 (Kseniia Sumarokova).
  • ソケットへの非同期接続およびソケットへの非同期書き込みを追加しました。分片全体にわたり、接続の確立およびクエリ/外部テーブルの送信を非同期化しました。コードをfibersを用いるようにリファクタリングしました。#46931 をクローズします。この PR により、デフォルトの connect_timeout_with_failover_ms を増やすことが可能になります(https://github.com/ClickHouse/ClickHouse/issues/5188)。#47229Kruglov Pavel)。
  • zookeeper の代替として、設定セクション keeper および keeper_server をサポートしました。#34766 および #34767 をクローズしました。#35113李扬)。
  • ClickHouse テーブルをソースとする Dictionary に対して、named_collections で secure フラグを設定できるようになりました。#38450 を解決。#46323Ilya Golshtein)。
  • bitCount 関数が FixedString および String データ型をサポートするようになりました。 #49044 (flynn).
  • Backup クエリで [Zoo]Keeper を使用するすべての操作に対して、リトライ回数を設定可能にしました。 #47224 (Nikita Mikhaylov).
  • デフォルトで S3 に対して use_environment_credentials を有効化し、プロバイダーチェーン全体が自動的に構築されるようにしました。 #47397 (Antonio Andelic)。
  • 現在、JSON_VALUE 関数は Spark の get_json_object 関数と似ており、'$.key' のようなパスを使って JSON 文字列から値を取得できます。ただし、いくつかの違いがあります。- 1. Spark の get_json_object ではパスが存在しない場合は null を返しますが、JSON_VALUE では空文字列を返します。- 2. Spark の get_json_object では JSON オブジェクトや配列値などの複合型の値を返すことがありますが、JSON_VALUE ではその場合も空文字列を返します。 #47494 (KevinyhZou).
  • use_structure_from_insertion_table_in_table_functions により、挿入元テーブルの構造をテーブル関数へ伝播させる挙動がより柔軟になりました。名前のマッピングと仮想カラムの使用に関する問題を修正しました。'auto' 設定を使用する必要はなくなりました。 #47962 (Yakov Olkhovskiy).
  • クエリが強制終了された場合や制限を超過した場合は、Keeper への接続を再試行し続けないようにしました。 #47985 (Raúl Marín).
  • BSONEachRow で Enum 型の入出力をサポートし、すべてのマップのキー型を許可し、出力時の不要な計算を回避しました。 #48122 (Kruglov Pavel)
  • ORC / Arrow / Parquet フォーマットでより多くの ClickHouse のデータ型をサポート:Enum(8|16)、(U)Int(128|256)、Decimal256(ORC 用)、Int32 値からの IPv4 の読み取りを許可(ORC は IPv4 を Int32 として出力しており、これまで再読み込みできなかった)、ORC でバイナリデータから Nullable(IPv6) を読み取る処理を修正。#48126Kruglov Pavel)。
  • テーブル system.storage_policies にカラム perform_ttl_move_on_insertload_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 テーブル上で行われる操作に対して追加の保証を強制する新しい SETTING keeper_map_strict_mode を追加しました。 #48293 (Antonio Andelic)。
  • 単純な Dictionary の主キーがネイティブの符号なし整数型かどうかをチェックするようにしました。互換性のために SETTING check_dictionary_primary_key を追加しました(チェックを無効化するには check_dictionary_primary_key = false を設定してください)。 #48335 (lizhuoyu5).
  • KeeperMap に対するミューテーションを、不要なためレプリケートしないようにしました。 #48354 (Antonio Andelic).
  • Protobuf 形式で、無名タプルをネストされた Message として読み書きできるようにしました。タプル要素と Message フィールドは、位置によって対応付けられます。 #48390 (Kruglov Pavel).
  • 新しいプランナーで additional_table_filtersadditional_result_filter の各設定をサポートしました。また、additional_result_filter に関するドキュメントを追加しました。 #48405 (Dmitry Novik)。
  • parseDateTime がフォーマット文字列 '%f'(秒の小数部)に対応しました。 #48420 (Robert Schulze).
  • formatDateTime() において、フォーマット文字列 "%f" は、フォーマットされた値に小数秒部分が含まれない場合に "000000" を出力するようになりました。以前の動作(ゼロ1文字)は、設定 "formatdatetime_f_prints_single_zero = 1" を使用することで復元できます。 #48422 (Robert Schulze).
  • KeeperMap に対する DELETE および TRUNCATE のレプリケーションを行わないようにしました。 #48434 (Antonio Andelic).
  • generateRandom 関数で有効な Decimal 型および Bool 型の値を生成できるようにしました。 #48436 (Kruglov Pavel).
  • SELECT a, b, c, FROM table のように、SELECT クエリの式リストで末尾のカンマを許可しました。 #37802 をクローズしました。 #48438Nikolay 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 が解決されます。 #48563Alexey Milovidov)。
  • インストールスクリプトは、可能な場合にはコピーではなくハードリンクを作成します。 #48578 (Alexey Milovidov)。
  • SHOW CREATE TABLE と同等の意味を持つ SHOW TABLE 構文をサポートしました。 #48580 をクローズしました。 #48591flynn)。
  • HTTP 一時バッファが、仮想ファイルシステムキャッシュからデータを追い出すことで動作できるようになりました。 #48664 (Vladimir C).
  • CREATE AS SELECT に対してスキーマの自動推論が行われるようにしました。 #47599 をクローズしました。 #48679flynn)。
  • ReplicatedMergeTree 用に replicated_max_mutations_in_one_entry SETTING を追加しました。これにより、1 つの MUTATE_PART エントリあたりの mutation コマンド数に上限を設けることができます(デフォルトは 10000)。#48731Alexander Tokmakov)。
  • AggregateFunction 型において、未使用の arena バイトを read_bytes としてカウントしないようにしました。 #48745 (Raúl Marín)。
  • MySQL 辞書ソースおよび名前付きコレクション使用時に、一部の MySQL 関連設定が正しく処理されない問題を修正。 #48402 をクローズ。 #48759Kseniia Sumarokova)。
  • ユーザーが max_single_part_upload_size を非常に大きな値に設定すると、AWS S3 SDK のバグによりクラッシュが発生しうる問題がありました。これにより #47679 が修正されました。 #48816Alexey Milovidov)。
  • RabbitMQ のデータレースを修正し(report)、コードをリファクタリングしました。 #48845Kseniia Sumarokova)。
  • system.parts および system.part_lognamepart_name のエイリアスを追加しました。 #48718 をクローズ。 #48850sichenzhao)。
  • 関数 "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 をクローズしました。#49036Kevin Zhang)。
  • ログメッセージ用のプロファイルイベントを追加し、重大度ごとのログメッセージ数を簡単に確認できるようにしました。 #49042 (Alexey Milovidov).
  • 以前のバージョンでは、LineAsString フォーマットは、DOS または macOS Classic の改行が存在する場合に、並列パースの有効・無効によって動作が一貫しませんでした。この変更により #49039 が解決されました。 #49052Alexey Milovidov)。
  • パースできなかったクエリパラメータに関する例外メッセージに、パラメータ名も含めるようにしました。 #48878 を再実装。 #48772 をクローズ。 #49061Alexey Milovidov)。

ビルド/テスト/パッケージングの改善

  • 以下のタイムゾーンを更新しました:Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore。 #48572 (Alexey Milovidov).
  • ビルドを高速化するため、ヘッダファイル内の依存関係の数を削減しました。 #47984 (Dmitry Novik).
  • テストでマークおよびインデックスの圧縮方式をランダム化しました。 #48286 (Alexey Milovidov).
  • 内部 ZSTD を 1.5.4 から 1.5.5 に更新しました。 #46797 (Robert Schulze).
  • テストで、コンパクトパーツからワイドパーツへの縦方向マージをランダム化しました。 #48287 (Raúl Marín).
  • HDFS で CRC32 チェックサムをサポートしました。パフォーマンス上の問題を修正しました。 #48614 (Alexey Milovidov).
  • GCC サポートの残存部分を削除しました。 #48671 (Robert Schulze).
  • 新しいアナライザーインフラストラクチャを有効にした CI 実行を追加しました。 #48719 (Dmitry Novik).

バグ修正(公式安定版リリースでユーザーに影響する不具合)

  • バックグラウンドスレッドからプッシュされるマテリアライズドビュー (MV) 用の system.query_views_log を修正 #46668 (Azat Khuzhin)。
  • 複数の RENAME COLUMN 関連のバグを修正しました #46946 (alesapin)。
  • clickhouse-format における細かなハイライト表示の不具合を修正 #47610 (Natasha Murashkina)。
  • LLVM の libc++ のバグを修正し、サイズが INT_MAX を超えるパーツを S3 にアップロードするとクラッシュしていた問題を解消しました #47693 (Azat Khuzhin)。
  • sparkbar 関数で発生していたオーバーフローを修正 #48121Vladimir C)。
  • S3 におけるレースコンディションを修正 #48190 (Anton Popov)。
  • 集約関数に対する JIT を、挙動の不整合により無効化しました #48195 (Alexey Milovidov)。
  • ALTER ステートメントのフォーマットを修正(軽微) #48289 (Natasha Murashkina)。
  • RabbitMQ における CPU 使用率の問題を修正(#44404 により 23.2 で悪化していた)。#48311Kseniia Sumarokova)。
  • Distributed テーブル上の Merge に対する EXPLAIN PIPELINE で発生していたクラッシュを修正しました #48320 (Azat Khuzhin)。
  • LowCardinality を Arrow の Dictionary 型としてシリアライズする処理を修正 #48361 (Kruglov Pavel)。
  • TemporaryFileStream でキャッシュファイルセグメントのダウンローダーをリセットするよう修正しました #48386 (Vladimir C).
  • DROP/REPLACE PARTITION 実行時に SYSTEM SYNC REPLICA がハングしたままになる可能性がある問題を修正 #48391 (Azat Khuzhin)。
  • Dictionary に依存する分散テーブルの読み込み時に発生していた起動時エラーを修正 #48419 (MikhailBurdukov)。
  • システムテーブルの名前を自動的に変更する際に依存関係をチェックしないようにする #48431 (Raúl Marín).
  • KeeperMap ストレージで影響を受けた行のみが更新されるよう修正 #48435 (Antonio Andelic).
  • VFS キャッシュにおいて発生する可能性のあるセグメンテーションフォルトを修正 #48469 (Kseniia Sumarokova)。
  • 定数文字列が指定されていない場合に toTimeZone 関数がエラーをスローしていた問題を修正 #48471 (Jordi Villar)。
  • Protobuf における IPv4 の論理エラーを修正し、Date32 のサポートを追加 #48486 (Kruglov Pavel)。
  • system.settings における "changed" フラグが、複数の値を取る設定に対して正しく計算されていませんでした #48516 (MikhailBurdukov)。
  • 圧縮有効時のストレージ Memory の不具合を修正 #48517Anton Popov)。
  • クライアントの再接続時に bracketed-paste モードによりパスワード入力が乱れる問題を修正 #48528 (Michael Kolupaev)。
  • IP および UUID 型キーに対するネストされた Map の不具合を修正 #48556 (Yakov Olkhovskiy).
  • ハッシュ辞書の並列ローダーで発生する未処理例外を修正。#48571Azat Khuzhin)。
  • groupArray 集約関数が、Nullable 型に対する空の結果に対しても正しく動作するようになりました #48593 (lgbo)。
  • ACL のスキーム auth でノードが作成されない場合がある Keeper のバグを修正。 #48595 (Aleksei Filatov).
  • IPv4 と UInt の比較演算子を許可 #48611Yakov Olkhovskiy)。
  • キャッシュに起因しうるエラーを修正 #48636Kseniia Sumarokova)。
  • 空のデータに対する非同期挿入を行っても、例外がスローされなくなりました。 #48663 (Anton Popov).
  • RENAME TABLE が失敗した場合にテーブルの依存関係を修正 #48683Azat Khuzhin)。
  • 主キーに重複したカラムが含まれている場合(これは PROJECTION の場合にのみ発生し得ます)、以前のバージョンではバグを引き起こす可能性がありました #48838Amos Bird)。
  • ZooKeeper で send_thread/receive_thread を join する際に発生するレースコンディションを修正 #48849 (Alexander Gololobov)。
  • ゼロコピー レプリケーション使用時に、無視されているデタッチ済みパーツを DROP しようとすると発生する予期しないパーツ名エラーを修正 #48862 (Michael Lex)。
  • Date32 型の Parquet/Arrow カラムが Date32 型以外のカラムとして読み込まれてしまう問題を修正 #48864 (Kruglov Pavel)。
  • ROW POLICY とドットを含むカラムを持つテーブルから SELECT した際に発生する UNKNOWN_IDENTIFIER エラーを修正しました #48976 (Kruglov Pavel).
  • 空の Nullable 文字列に対する集約処理を修正しました #48999 (LiuNeng).

ClickHouse 23.3 LTS リリース、2023-03-30

アップグレードに関する注意事項

  • 論理削除 (Lightweight DELETE) は本番利用に対応し、デフォルトで有効になりました。MergeTree テーブルに対する DELETE クエリは、デフォルトで利用可能になりました。
  • *domain*RFC および netloc 関数の挙動がわずかに変更されました。仕様への準拠性を高めるため、URL の authority 部分で許可される記号の集合を緩和しました。#46841 (Azat Khuzhin)。
  • KafkaEngine をベースにしたテーブルについて、カラムに対する DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED 文を用いることを禁止しました。#47138 (Aleksandr Musorin)。
  • 「asynchronous connection drain」機能を削除しました。関連する設定およびメトリクスも削除されています。これは内部向け機能であったため、この機能について知らなかったユーザーには、削除の影響はないはずです。#47486 (Alexander Tokmakov)。
  • arraySum/Min/Max/Avg/ProductarrayCumSum/CumSumNonNegativearrayDifference、配列構築、IN 演算子、クエリパラメータ、groupArrayMovingSum、統計関数、min/max/any/argMin/argMax、PostgreSQL wire protocol、MySQL テーブルエンジンおよび関数、sumMapmapAddmapSubtractarrayIntersect において、256-bit Decimal データ型 (38 桁を超える桁数) をサポートしました。arrayIntersect ではビッグイントもサポートしました。モーメントを含む統計集約関数 (たとえば corr や各種 TTest) は、内部表現として Float64 を使用するようになりました (これまでは Decimal128 を使用していましたが、意味がありませんでした)。この変更により、無限分散の場合に inf の代わりに nan を返すことがあります。以前のバージョンでは、いくつかの関数は Decimal256 データ型を受け付けながら Decimal128 を返していましたが、現在は修正されています。これにより #47569#44864#28335 が解決されました。#47594 (Alexey Milovidov)。
  • backup_threads/restore_threads をユーザー設定ではなくサーバー設定としました。#47881 (Azat Khuzhin)。
  • 定数および非決定的なセカンダリインデックスを許可しないようにしました。#46839 (Anton Popov)。

新機能

  • parallel_replicas_custom_key および parallel_replicas_custom_key_filter_type の設定を使用して、レプリカ間で処理を分割する新しいモードを追加しました。クラスターが 1 つの分片と複数のレプリカで構成されている場合、最大で max_parallel_replicas 個のレプリカがランダムに選択され、分片として扱われます。各分片に対して、それに対応するフィルタがイニシエータ側のクエリに追加され、その後その分片に送信されます。クラスターが複数の分片から構成されている場合は、任意のキーを定義できる点を除き、sample_key と同様に動作します。 #45108 (Antonio Andelic).
  • キャンセル時に部分結果を表示するオプション: クエリ設定 partial_result_on_first_cancel を追加し、クエリがキャンセルされた場合(例: Ctrl-C による中断)に部分結果を返せるようにしました。#45689 (Alexey Perevyshin)。
  • 一時テーブルに対して、Replicated および KeeperMap エンジンを除く任意のテーブルエンジンをサポートしました。#31497 をクローズしました。#46071Roman Vasin)。
  • Keeper の集中ストレージを用いたユーザー定義 SQL 関数のレプリケーションに対応しました。 #46085 (Aleksei Filatov).
  • system.settings に類似する system.server_settings を実装し、サーバー設定を保持するようにしました。 #46550 (pufit).
  • UNDROP TABLE クエリのサポートを追加しました。 #46811 をクローズしました。 #47241chen)。
  • 名前付きコレクションに対して個別に権限を付与できるようにしました(例えば、すべてのコレクションにまとめてではなく、特定のコレクションに対してのみ SHOW/CREATE/ALTER/DROP named collection アクセスを付与できるようにするため)。これにより #40894 をクローズします。新しいアクセス種別 NAMED_COLLECTION_CONTROL を追加しました。これはユーザー設定に明示的に追加されない限りユーザーのデフォルト設定には付与されません(GRANT ALL を実行できるようにするには必須です)。また、23.2 ではユーザーのデフォルト設定に完全なアクセス権を持たせるために手動で指定する必要があった show_named_collections は、もはや必須ではなくなりました。 #46241 (Kseniia Sumarokova)。
  • カスタムディスクで階層構造(ネスト)を利用可能にしました。以前はカスタムディスクはフラットなディスク構造のみをサポートしていました。 #47106 (Kseniia Sumarokova)。
  • widthBucket 関数(互換性のためのエイリアス WIDTH_BUCKET を含む)を導入しました。 #42974#46790avoiderboi)。
  • 指定されたフォーマット文字列に従って、新しい関数 parseDateTime および parseDateTimeInJodaSyntax を追加しました。parseDateTime は MySQL 構文で記述された文字列を DateTime に変換し、parseDateTimeInJodaSyntax は Joda 構文で変換します。 #46815 (李扬)。
  • テーブル関数 null のデフォルト構造として dummy UInt8 を使用するようにしました。 #46930 をクローズ。 #47006flynn)。
  • parseDateTimeBestEffort 関数で、Dec 15, 2021 のようなカンマ付きの日付形式をサポートしました。#46816 をクローズ。#47071chen)。
  • HTTP インターフェイス向けの URL パラメータ wait_end_of_query および buffer_size に対応する設定 http_wait_end_of_queryhttp_response_buffer_size を追加しました。これにより、プロファイル内でこれらの設定を変更できるようになりました。 #47108 (Vladimir C).
  • Atomic データベースから DROP されたが、まだ完全には削除されていないテーブルを表示する system.dropped_tables テーブルを追加しました。 #47364 (chen)。
  • MySQL 互換性のため、positionCaseInsensitive のエイリアスとして INSTR を追加。 #47529 をクローズ。 #47535flynn)。
  • 固定精度で数値を文字列に変換するための toDecimalString 関数を追加しました。 #47838 (Andrey Zvonov).
  • MergeTree の SETTING max_number_of_mutations_for_replica を追加しました。これは、レプリカごとのパーツの mutation 数を指定した値までに制限します。0 を指定すると、レプリカごとの mutation 数に制限はありません(ただし実行は他の SETTING によって引き続き制約される可能性があります)。 #48047 (Vladimir C)。
  • 2 つの配列から Map を作成できる Map 関連の関数 mapFromArrays を追加しました。#31125 (李扬)。
  • Parquet/ORC/Arrow 出力フォーマットで圧縮方式を制御できるようにし、より多くの圧縮入力フォーマットをサポートしました。これにより #13541 がクローズされました。#47114 (Kruglov Pavel)。
  • ネイティブプロトコルに SSL ユーザー証明書認証を追加。#47077 をクローズ。#47596Nikolay Degterinsky)。
  • parseDateTime に *OrNull() および *OrZero() バリアントを追加し、MySQL との互換性確保のためにエイリアス str_to_date を追加しました。 #48000 (Robert Schulze).
  • MySQL との互換性向上のため、「LIKE」「IN」「MOD」などの演算子と同様の演算子 REGEXP を追加しました。 #47869 (Robert Schulze)。

パフォーマンス向上

  • メモリ上のマークが圧縮され、3~6 分の 1 のメモリで済むようになりました。 #47290 (Michael Kolupaev)。
  • これまでのバージョンでは、大量のファイルに対するバックアップは信じられないほど遅いものでしたが、今は違います。今では信じられないほど高速です。 #47251 (Alexey Milovidov)。バックアップの I/O 処理専用のスレッドプールを導入しました。これにより、他のプールとは独立してスケールできるようになり、パフォーマンスが向上します。 #47174 (Nikita Mikhaylov)。バックアップ処理の最終段階でメタデータを収集する際に、MultiRead リクエストとリトライを使用するようにしました。 #47243 (Nikita Mikhaylov)。バックアップと復元対象データの両方が S3 上にある場合は、今後はサーバーサイドコピーが使用されます。 #47546 (Vitaly Baranov)。
  • FINAL 付きのクエリにおける不要な読み取りを修正しました。 #47801 (Nikita Taranov).
  • max_final_threads の値が、サーバー起動時にコア数に応じて自動設定されるようになりました(max_threads と同じアルゴリズムを使用)。これにより、多数の CPU を搭載したサーバーでの final 実行の並列性が向上します。 #47915 (Nikita Taranov)。
  • CLICKHOUSE をソースとする DIRECT Dictionary に対して、読み取りパイプラインを複数スレッドで実行できるようにしました。有効にするには、CREATE DICTIONARY 文のソースの SETTINGS セクションで dictionary_use_async_executor=1 を設定してください。 #47986 (Vladimir C)。
  • 単一の Nullable キーを使用する集約のパフォーマンスを最適化。 #45772 (LiuNeng).
  • hasTokenOrNullhasTokenCaseInsensitivehasTokenCaseInsensitiveOrNull に対して、小文字の tokenbf_v1 索引を利用できるようにしました。 #46252 (ltrk2).
  • SIMD を使用して先頭 2 文字を検索することで、position および LIKE 関数を最適化しました。 #46289 (Jiebin Sun)。
  • system.detached_parts に対するクエリを最適化しました。これは非常に大きくなる場合があります。ブロックサイズ制限に対応していくつかのソースを追加しました。各ブロック内では、I/O スレッドプールを使用してパーツサイズを計算し、システムコールを並列に実行します。 #46624 (Sema Checherinda)。
  • ReplicatedMergeTree テーブルにおける max_replicated_merges_in_queue のデフォルト値を 16 から 1000 に引き上げました。これにより、ClickHouse Cloud の共有ストレージを利用するクラスタなど、レプリカ数が非常に多いクラスタでのバックグラウンドでのマージ処理をより高速に実行できます。 #47050 (Alexey Milovidov)。
  • パーティション一覧を取得するために、clickhouse-copierDISTINCT ではなく GROUP BY を使用するように更新されました。大きなテーブルでは、これにより SELECT の実行時間が 500 秒超から 1 秒未満に短縮されました。 #47386 (Clayton McClure).
  • ASOF JOIN のパフォーマンス低下を修正。 #47544 (Ongkong).
  • Keeper におけるバッチ処理をさらに強化しました。読み取りリクエスト時にバッチを分割しないことでパフォーマンスを改善します。 #47978 (Antonio Andelic)。
  • カラムごとに異なる DEFAULT 式を持つ Merge エンジンのテーブルで PREWHERE が使用可能になりました。 #46831 (Azat Khuzhin).

Experimental Feature

  • 並列レプリカ: ローカルレプリカをより有効に活用することで全体的なパフォーマンスを改善し、デフォルトではレプリケーションなしの MergeTree から並列レプリカを使った読み取りを禁止しました。 #47858 (Nikita Mikhaylov).
  • 実験的な Analyzer が有効な場合、JoinDictionaryEmbeddedRocksDB テーブルとの JOIN に対して、左側テーブルへのフィルタプッシュダウンをサポートしました。 #47280 (Maksim Kita).
  • ゼロコピーのレプリケーションを使用する ReplicatedMergeTree において、Keeper への負荷が軽減されました。 #47676 (alesapin).
  • MaterializedPostgreSQL を用いた materialized view の作成に関する問題を修正しました。 #40807 (Maksim Buren).

改善

  • input_format_json_ignore_unknown_keys_in_named_tuple をデフォルトで有効にしました。 #46742Kruglov Pavel)。
  • MATERIALIZED VIEW へのプッシュ時のエラーを無視できるようにしました(新しい設定項目 materialized_views_ignore_errors を追加しました。デフォルト値は false ですが、system.*_log テーブルへのログのフラッシュについては常に true に設定されます)。 #46658 (Azat Khuzhin).
  • メモリ上で分散送信のファイルキューを追跡します。 #45491 (Azat Khuzhin).
  • HTTP プロトコル経由のすべてのクエリのレスポンスに、X-ClickHouse-Query-Id ヘッダーと X-ClickHouse-Timezone ヘッダーが追加されるようになりました。以前は SELECT クエリのレスポンスに対してのみ追加されていました。 #46364 (Anton Popov).
  • MongoDB からの外部テーブル: host:port を列挙した URI を介したレプリカセットへの接続のサポートと、MongoDB 辞書での readPreference オプションのサポートを追加。URI の例: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary。 #46524 (artem-yadr)。
  • この改善はユーザーからは見えないはずです。クエリプランに基づいてPROJECTION解析を再実装しました。旧バージョンと新バージョンを切り替えるための設定 query_plan_optimize_projection=1 を追加しました。#44963 を修正しました。#46537Nikolai Kochetov)。
  • 出力フォーマットではデフォルトで Parquet フォーマット v1 の代わりに v2 を使用するようにしました。Parquet のバージョンを制御するための設定 output_format_parquet_version を追加しました。指定可能な値は 1.02.42.62.latest(デフォルト)です。 #46617 (Kruglov Pavel)。
  • 新しい設定構文により、名前にピリオド(.)を含む Kafka トピックを設定できるようになりました。 #46752 (Robert Schulze).
  • hyperscan パターンにおける問題のある繰り返しを検査するヒューリスティックを修正。 #46819 (Robert Schulze).
  • 別のレプリカによって同時にブロックが作成された場合に、「ZK ノードが既に存在する」ことを示すエラーを system.errors に報告しないようにしました。 #46820 (Raúl Marín).
  • clickhouse-local のオープン可能なファイル数の上限を引き上げました。これにより、大量の CPU コアを持つサーバー上でも web テーブルから読み取ることが可能になります。開いているファイル数が多すぎる場合でも、URL テーブルエンジンからの読み取りをやめないようにしました。これにより、#46852 が解決されます。#46853Alexey Milovidov)。
  • 数値をパースできなかった場合にスローされる例外メッセージが、より読みやすくなりました。 #46917 (Robert Schulze).
  • 各タスクの処理が完了するたびに system.backups を更新するようにし、バックアップの進行状況を追跡できるようにしました。 #46989 (Aleksandr Musorin).
  • Native 入力フォーマットで型変換を許可するようにしました。これを制御する設定 input_format_native_allow_types_conversion を追加しました(デフォルトで有効です)。 #46990 (Kruglov Pavel)。
  • range 関数で IPv4 を扱えるようにし、IP アドレス範囲を生成できるようにしました。 #46995 (Yakov Olkhovskiy).
  • あるボリューム/ディスクから別のボリューム/ディスクへパーツを移動できない場合に出力される例外メッセージを改善しました。 #47032 (alesapin).
  • JSONType 関数で Bool 型をサポートするようにしました。これまでブール値に対して誤って Null 型が返されていました。 #47046 (Anton Popov).
  • あらかじめ定義した HTTP クエリを構成するために _request_body パラメータを使用できるようにしました。 #47086 (Constantine Peresypkin).
  • 組み込み UI の SQL エディターで Enter キーを押したときに自動インデントが行われるようになりました。 #47113 (Alexey Korepanov).
  • 'sudo' を用いて自己展開を行うと、展開されたファイルの uid と gid を実行中のユーザーに設定しようとします。 #47116 (Yakov Olkhovskiy)。
  • 以前は、repeat 関数の第 2 引数は符号なし整数型のみを受け付けていたため、-1 のような値を渡すことができませんでした。この挙動は Spark の同名関数とは異なっていました。このアップデートでは、repeat 関数の挙動を Spark の関数と一致するように修正しました。これにより、負の整数を含む、同じ型の入力を受け付けるようになりました。更新後の実装の正しさを検証するために、広範なテストを実施しました。#47134KevinyhZou)。注記: この変更履歴エントリは ChatGPT によって書き直されています。
  • スタックトレースから ::__1 部分を削除しました。スタックトレース内で std::basic_string<char, ...String として表示するようにしました。 #47171 (Mike Kot).
  • リプレイ攻撃を回避するために interserver モードを再実装しました(この変更は古いサーバーとも後方互換性を保っています)。 #47213 (Azat Khuzhin).
  • 正規表現グループの認識を改善し、regexp_tree Dictionary を改善しました。 #47218 (Han Fei).
  • Keeper の改善: Keeper が使用するリソース(例: 未使用メモリの解放など)をクリーンアップするための新しい 4LW コマンド clrs を追加。 #47256 (Antonio Andelic).
  • コーデック DoubleDelta(bytes_size)Gorilla(bytes_size)FPC(level, float_size) にオプション引数を追加しました。これにより、clickhouse-compressor でカラム型を指定せずにこれらのコーデックを使用できるようになります。これらのコーデックを使用した際に clickhouse-compressor で発生しうる異常終了と算術エラーを修正しました。修正: https://github.com/ClickHouse/ClickHouse/discussions/47262#47271Kruglov Pavel)。
  • runningDifference 関数で bigint 型をサポートしました。#47194 をクローズします。 #47322Nikolay Degterinsky)。
  • 有効期限付きの S3 の認証情報で一部のエッジケースにおいて発生する ExpiredToken エラーを防ぐため、有効期限前の猶予時間を追加しました。これは expiration_window_seconds 設定で制御でき、デフォルト値は 120 秒です。 #47423 (Antonio Andelic)。
  • Avro フォーマットで Decimal および Date32 をサポートしました。 #47434 (Kruglov Pavel).
  • Ordinary から Atomic への変換が中断された状態であることが検出された場合は、サーバーを起動せず、トラブルシューティング手順を含む、よりわかりやすいエラーメッセージを出力するようにしました。 #47487 (Alexander Tokmakov).
  • system.opentelemetry_span_log に新しいカラム kind を追加しました。このカラムには、OpenTelemetry で定義されている SpanKind の値が格納されます。#47499Frank Chen)。
  • Protobuf フォーマットで、カラム名としてルートフィールド名のみを指定して入れ子配列の読み書きができるようになりました。以前は、カラム名にすべてのネストされたフィールド名を含める必要がありました(a.b.c Array(Array(Array(UInt32))) のように)。現在は、a Array(Array(Array(UInt32))) のようにルート名だけを使うことができます。 #47650 (Kruglov Pavel).
  • SYSTEM SYNC REPLICA にオプションの STRICT 修飾子を追加しました。これにより、クエリはレプリケーションキューが空になるまで待機するようになります(https://github.com/ClickHouse/ClickHouse/pull/45648 以前と同様の動作です)。#47659Alexander Tokmakov)。
  • 一部の OpenTelemetry スパンログの名前付けを改善。 #47667 (Frank Chen).
  • 集約関数コンビネータのチェーンが過度に長くならないようにしました(解析段階でクエリが遅くなる可能性があります)。これにより #47715 が解決されました。 #47716Alexey Milovidov)。
  • パラメータ化ビューでのサブクエリをサポートし、#46741 #47725 を解決しました(SmitaRKulkarni)。
  • MySQL インテグレーションにおけるメモリリークを修正(connection_auto_close=1 のときに発生)。 #47732 (Kseniia Sumarokova)。
  • Decimal パラメータに関連するコードのエラー処理を改善し、より情報量の多いエラーメッセージが出力されるようにしました。以前は、不正な Decimal パラメータが指定された場合に生成されるエラーメッセージが分かりにくく、有用ではありませんでした。このアップデートにより、エラーメッセージの内容を見直して、より詳細で有用な情報が提供されるようになり、Decimal パラメータに関連する問題の特定と修正が容易になりました。 #47812 (Yu Feng)。注: この変更ログ項目は ChatGPT によって書き直されています。
  • パラメータ exact_rows_before_limit は、rows_before_limit_at_least がリミットに到達する前に返された行数を正確に反映するようにするためのものです。この Pull Request では、クエリが複数の分片にまたがる分散処理やソート処理を含む場合に発生していた問題に対処しています。この更新以前は、これらのシナリオは期待どおりに動作していませんでした。 #47874 (Amos Bird)。
  • ThreadPools メトリクスの観測機能。 #47880 (Azat Khuzhin).
  • WriteBufferFromS3Microseconds および WriteBufferFromS3RequestsErrors プロファイルイベントを追加。 #47885 (Antonio Andelic)。
  • ClickHouse のインストール処理に --link および --noninteractive (-y) オプションを追加しました。#47750 をクローズしました。 #47887 (Nikolay Degterinsky)。
  • 利用できない依存テーブルを持つ materialized view に対して ATTACH する際に発生していた UNKNOWN_TABLE 例外を修正しました。これはバックアップから状態を復元しようとする場合に役立つ可能性があります。 #47975 (MikhailBurdukov).
  • 暗号化ディスク設定でオプションのパスが追加されないケースを修正。 #47981 (Kseniia Sumarokova).
  • パラメータ化されたビューにおける CTE のサポートを実装: スカラサブクエリの評価時にクエリパラメータを使用できるよう更新。 #48065 (SmitaRKulkarni).
  • 大きな整数型 (U)Int128/(U)Int256、任意のキー型を持つ Map、および任意の精度(3 と 6 だけでなく)の DateTime64 をサポートするようになりました。 #48119 (Kruglov Pavel).
  • 行形式の入力フォーマットで未知の Enum 値に起因するエラーをスキップできるようにしました。 #48133 (Alexey Milovidov)。

ビルド / テスト / パッケージングの改善

  • ClickHouse は C++23 でビルドされるようになりました。 #47424 (Robert Schulze).
  • AST Fuzzer で EXPLAIN クエリをファジングするようにしました。 #47803 #47852 (flynn).
  • ストレステストと自動バックワード互換性チェック(現在は Upgrade チェック)を分離しました。 #44879 (Kruglov Pavel).
  • 一部の誤ったセキュリティレポートを抑制するため、Docker 用 Ubuntu イメージを更新しました。 #46784 (Julio Jimenez). ClickHouse には依存関係がなく、Docker を必要としないことに注意してください。
  • ClickHouse を "curl | sh" でダウンロードする場合に、既存の clickhouse バイナリを削除(上書き)するかどうかを確認するプロンプトを追加しました。プロンプトは "ClickHouse binary clickhouse already exists. Overwrite? [y/N]" です。 #46859 (Dan Roscigno).
  • 古いディストリビューション(例: Amazon Linux 2)や ARM 上で、glibc 2.28 のシンボルが見つからないことによるサーバー起動時のエラーを修正しました。 #47008 (Robert Schulze).
  • clang 16 への対応を行いました。 #47027 (Amos Bird).
  • ClickHouse が ARM 上の古い glibc で動作できることを確認する CI チェックを追加しました。 #47063 (Robert Schulze).
  • NDEBUG マクロの誤った使用を防止するためのスタイルチェックを追加しました。 #47699 (Alexey Milovidov).
  • ビルドを少し高速化しました。 #47714 (Alexey Milovidov).
  • vectorscan を 5.4.9 に更新しました。 #47955 (Robert Schulze).
  • Apache Arrow の fatal ログ出力が abort しないことを検証するためのユニットテストを追加しました。これは ClickHouse/arrow#16 の変更をカバーします。 #47958 (Arthur Passos).
  • ネイティブな macOS デバッグサーバービルドを起動できる機能を復元しました。 #48050 (Robert Schulze). 注: この変更は開発時にのみ関連があり、ClickHouse の公式ビルドはクロスコンパイルで行われます。

バグ修正(公式安定版リリースにおけるユーザーから見て明らかな誤動作)

  • フォーマットパーサーがリセットされる問題を修正し、Kafka における不正なメッセージの処理をテストする機能を追加 #45693Kruglov 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)。
  • 有効期限切れのロールを変更できない不具合を修正 #46772Vitaly Baranov)。
  • 複数のステップにまたがって結合される PREWHERE カラムの蓄積処理を修正 #46785Alexander Gololobov)。
  • HTTP 読み取りバッファでファイルサイズを取得するために初期範囲を使用するようにしました。この変更がない場合、一部のリモートファイルを処理できない場合がありました。 #46824 (Antonio Andelic).
  • URL テーブル使用時に進行状況バーが誤った表示になる問題を修正 #46830 (Antonio Andelic)。
  • maxIntersections 関数における MSan レポートの問題を修正 #46847Alexey Milovidov)。
  • Map データ型のバグを修正 #46856Alexey Milovidov)。
  • LIKE パターンに本来クオートできない文字をクオートして含めた場合に、一部の LIKE 検索で誤った結果が返される問題を修正しました #46875 (Robert Schulze).
  • 修正 - WITH FILL 使用時に、Filling Transform が空のブロックを処理すると異常終了していた問題を修正しました #46897Yakov Olkhovskiy)。
  • JSON 文字列からの日付型および整数型の型推論を修正 #46972 (Kruglov Pavel)。
  • フェッチ時のゼロコピーレプリケーションでのディスク選択に関するバグを修正 #47010 (alesapin)。
  • systemd サービス定義の誤記を修正 #47051Palash Goel)。
  • CROSS JOIN かつ algorithm = auto の場合に発生する NOT_IMPLEMENTED エラーを修正 #47068 (Vladimir C)。
  • 'part_type' を実験的機能である 'InMemory' モードに設定した場合に、'ReplicatedMergeTree' テーブルへ類似する 2 件のデータを挿入できなかった問題を修正しました。 #47121 (liding1992).
  • External dictionaries / library-bridge: エラー "unknown library method 'extDict_libClone'" を修正。 #47136 (alex filatov).
  • LIMIT付きGrace Hash Joinにおけるレースコンディションを修正 #47153 (Vladimir C)。
  • 特定のカラムに対する PREWHERE 句のサポートを修正 #47154 (Azat Khuzhin)。
  • Query Status におけるデッドロック発生の可能性がある問題を修正 #47161Kruglov Pavel)。
  • 同一の Join テーブルに対する INSERT SELECT を禁止しました。デッドロックを引き起こす可能性があるためです #47260 (Vladimir C)。
  • min_age_to_force_merge_seconds によるマージで、既にマージ済みのパーティションをスキップするようにしました #47303 (Antonio Andelic).
  • find_first_not_symbols が期待どおりに動作するように、find_first_symbols を修正しました #47304 (Arthur Passos).
  • CSV における大きな数値の型推論を修正 #47410 (Kruglov Pavel)。
  • エイリアスを含む式に対する論理式の最適化を無効化。 #47451 (Nikolai Kochetov).
  • decodeURLComponent の不具合を修正 #47457Alexey Milovidov)。
  • PROJECTION を含む EXPLAIN グラフを修正 #47473 (flynn).
  • クエリパラメータの不具合を修正 #47488 (Alexey Milovidov)。
  • パラメータ化ビューのバグを修正。 #47495 (SmitaRKulkarni).
  • データフォーマット用Fuzzerおよびそれに対応する修正。 #47519 (Alexey Milovidov)。
  • DateTime64 の単調性チェックを修正 #47526 (Antonio Andelic)。
  • Nullable LowCardinality カラムでの「block structure mismatch」を修正 #47537 (Nikolai Kochetov).
  • Apache Parquet のバグに対する根本的な修正 #45878 #47538 (Kruglov Pavel)。
  • ドキュメントサイズが無効な場合の BSONEachRow の並列パースを修正 #47540 (Kruglov Pavel)。
  • SYSTEM FLUSH DISTRIBUTED 実行時に system.distribution_queue 内のエラーを保持するようにしました #47541 (Azat Khuzhin).
  • BSONEachRow フォーマットで重複したカラムを検出する #47609Kruglov Pavel)。
  • 移動処理中の zero copy lock の待機処理を修正 #47631 (alesapin).
  • パーティション単位の集約の不具合を修正 #47634 (Nikita Taranov)。
  • BSONEachRow フォーマットにおけるタプルを配列としてシリアル化する処理のバグを修正。#47690 (Kruglov Pavel)。
  • polygonsSymDifferenceCartesian のクラッシュを修正 #47702 (pufit)。
  • File ストレージから zlib および gzip で圧縮されたファイルの読み取りを修正 #47796 (Anton Popov)。
  • PostgreSQL 用の空クエリ検出処理を改善(Go 言語用 pgx ドライバー向け) #47854 (Azat Khuzhin)。
  • LowCardinality 型に対する DateTime の単調性チェックを修正 #47860 (Antonio Andelic).
  • RESTORE ASYNC で backup_threads ではなく restore_threads が使用されるようになりました #47861 (Azat Khuzhin)。
  • projection を含む ReplicatedMergeTree テーブルでの DROP COLUMN の問題を修正しました #47883 (Antonio Andelic).
  • Replicated データベースの復旧処理に関する修正 #47901 (Alexander Tokmakov)。
  • HTTP における冗長すぎる警告を修正するホットフィックス #47903Alexander Tokmakov)。
  • catboostEvaluate で発生する "Field value too long" エラーを修正 #47970 (Robert Schulze).
  • #36971 を修正: Watchdog: 子プロセスが終了した場合には非ゼロコードで終了するように修正 #47973 (Коренберг Марк)。
  • "index file cidx is unexpectedly long" となる問題を修正 #48010 (SmitaRKulkarni).
  • MaterializedPostgreSQL のクエリを修正し、属性(replica-identity)を取得できるようにしました #48015Solomatov Sergei)。
  • parseDateTime(): 未定義動作(符号付き整数オーバーフロー)を修正 #48019 (Robert Schulze)。
  • スキーマの再利用を避けるため、Avro の Record には一意の名前を付けるようにしました #48057 (Kruglov Pavel).
  • Keeper において TCP/HTTP ソケットのタイムアウトが正しく設定されるよう修正しました #48108 (Antonio Andelic).
  • Avro フォーマットで null ポインタに対してメンバー関数を呼び出してしまう可能性がある問題を修正。 #48184 (Kruglov Pavel).

ClickHouse リリース 23.2(2023-02-23)

後方互換性のない変更

  • 関数 toDayOfWeek()(エイリアス: DAYOFWEEK)にモード引数を追加し、週の開始曜日(月曜日か日曜日)と、カウントを 0 から始めるか 1 から始めるかを指定できるようにしました。他の日時関数との一貫性のため、モード引数は time 引数と time zone 引数の間に挿入されました。この変更により、既存の(これまでドキュメント化されていなかった)2 引数構文 toDayOfWeek(time, time_zone) は動作しなくなります。修正方法としては、関数を toDayOfWeek(time, 0, time_zone) に書き換えてください。 #45233 (Robert Schulze).
  • 設定 max_query_cache_sizefilesystem_cache_max_download_size に名称変更しました。 #45614 (Kseniia Sumarokova).
  • default ユーザーは、デフォルトではアクセス種別 SHOW NAMED COLLECTION の権限を持たなくなりました(例: これまで可能だったように、default ユーザーが他のユーザーに対して ALL を GRANT することはできなくなります。そのため、この PR は後方互換性がありません)。 #46010 (Kseniia Sumarokova).
  • SETTINGS 句が FORMAT 句の前に指定されている場合、その設定はフォーマット処理にも適用されます。 #46003 (Azat Khuzhin).
  • 設定 materialized_postgresql_allow_automatic_update(デフォルトでは無効)に対するサポートを削除しました。 #46106 (Kseniia Sumarokova).
  • 実際的なデータセットにおける countDigits のパフォーマンスをわずかに改善しました。これにより #44518 がクローズされました。以前のバージョンでは countDigits(0)0 を返していましたが、現在はより正しい 1 を返し、既存のドキュメントに従う動作になっています。 #46187 (Alexey Milovidov).
  • コーデック Delta または DoubleDelta に続けて Gorilla または FPC を組み合わせた圧縮を使用する新しいカラムの作成を禁止しました。この制限は、設定 allow_suspicious_codecs = true を使用することで回避できます。 #45652 (Robert Schulze).

新機能

  • S3 上の Iceberg テーブルストアにアクセスするための StorageIceberg およびテーブル関数 iceberg を追加。 #45384 (flynn)。
  • storage_policy の代わりに SETTINGS disk = '&lt;disk_name&gt;' でストレージを設定できるようになり、さらに SETTINGS disk = disk(type=s3, ...) による明示的なディスク作成にも対応しました。 #41976 (Kseniia Sumarokova).
  • system.part_logProfileEvents カウンタを利用可能にしました。 #38614 (Bharat Nallan)。
  • 既存の ReplacingMergeTree エンジンを拡張し、重複した行の挿入を許可できるようにしました。これにより、1 つの MergeTree エンジン内で ReplacingMergeTreeCollapsingMergeTree の両方の機能を活用できます。削除されたデータはクエリ実行時には返されませんが、ディスク上からも削除はされません。 #41005 (youennL-cs)。
  • generateULID 関数を追加しました。#36536 をクローズしました。#44662Nikolay Degterinsky)。
  • 各2つのカラムの組み合わせについて計算を行う集計関数 corrMatrix を追加しました。加えて、集計関数 covarSampcovarPopcorr と類似しているため、あわせて covarSampMatrixcovarPopMatrix も追加しました。@alexey-milovidov により #44587 がクローズされました。 #44680FFFFFFFHHHHHHH)。
  • 配列をランダムに並べ替える arrayShuffle 関数を導入。 #45271 (Joanna Hulboj).
  • Arrow の FIXED_SIZE_BINARY 型および ParquetFIXED_LENGTH_BYTE_ARRAY 型をサポートし、これらを FixedString にマッピングしました。FixedString のデフォルト出力型を制御するために、output_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_array の各設定を追加しました。#45326 をクローズします。#45340Kruglov Pavel)。
  • system.replication_queue に新しいカラム last_exception_time を追加。 #45457 (Frank Chen).
  • SipHash128 でユーザー定義のキー/シードを使用できる 2 つの新しい関数を追加しました。 #45513 (Salvatore Mesoraca).
  • テーブル関数 format に 3 引数版を追加。#45808 をクローズ。#45873FFFFFFFHHHHHHH)。
  • JodaTime フォーマットにおいて 'x','w','S' のサポートを追加しました。詳細は https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html を参照してください。 #46073 (zk_kiger)。
  • ウィンドウ関数 ntile をサポートしました。(lgbo)
  • すべてのテーブルに FINAL 修飾子を暗黙的に適用するための設定 final を追加しました。 #40945 (Arthur Passos)。
  • arrayPartialSort および arrayPartialReverseSort 関数を追加しました。 #46296 (Joanna Hulboj)。
  • 新しい HTTP パラメータ client_protocol_version により、HTTP レスポンスで Native フォーマットを使用する場合に、クライアントプロトコルバージョンを設定できるようになりました。 #40397#46360 (Geoff Genz)。
  • 互換性を確保するために、Spark の関数 REGEXP_EXTRACT と同様の新しい関数 regexpExtract を追加しました。これは既存の関数 extract とよく似ています。 #46469 (李扬)。
  • 新しい関数 JSONArrayLength を追加しました。この関数は、最外層の JSON 配列内の要素数を返します。入力された JSON 文字列が無効な場合は、NULL を返します。 #46631 (李扬).

パフォーマンスの向上

  • 導入されたこのロジックは、PREWHERE 条件が複数の条件の連言(cond1 AND cond2 AND ...)である場合に機能します。同じカラムの読み取りを必要とする条件をステップごとにグループ化します。各ステップの後に、その時点までの条件に対応する部分が評価され、その結果行がフィルタリングされる場合があります。これにより、次のステップで読み取る行数を減らすことができ、I/O 帯域幅を節約し、計算量も削減できます。このロジックは現時点ではデフォルトで無効になっています。リグレッションがないことが確認されしだい、将来のいずれかのリリースでデフォルトで有効化される予定のため、テスト用途での使用が強く推奨されます。これは 2 つの設定で制御できます: "enable_multiple_prewhere_read_steps" と "move_all_conditions_to_prewhere" です。 #46140 (Alexander Gololobov).
  • テーブルのパーティションキーと GROUP BY キーが互換性がある場合に、パーティションを個別に集計できるオプションを追加しました。allow_aggregate_partitions_independently という設定で制御されます。適用可能なケースが限られているため、デフォルトでは無効です(詳細はドキュメントを参照してください)。 #45364 (Nikita Taranov)。
  • Compact 形式のパーツに対して Vertical マージアルゴリズムを使用できるようにしました。これにより、ClickHouse サーバーはバックグラウンド処理時に必要とするメモリを大幅に削減できます。これによって #46084 が解決されました。 #45681 #46282 (Anton Popov)。
  • バッチリーダーを使用して Parquet リーダーを最適化。 #45878 (LiuNeng).
  • 非同期 Linux io_uring サブシステムに基づく新しい local_filesystem_read_method メソッド io_uring を追加しました。これにより、デフォルトの pread メソッドと比較して、ほぼあらゆるケースで読み取り性能が向上します。 #38456 (Saulius Valatka)。
  • 論理的に等価な場合、引数として if 式を取る集約関数を書き換えます。例えば、avg(if(cond, col, null))avgIf(cond, col) に書き換えることができます。これはパフォーマンス向上に役立ちます。 #44730 (李扬)。
  • lower/upper 関数のパフォーマンスを AVX-512 命令セットを使用して向上しました。 #37894 (yaqi-zhao).
  • SMT が無効になっている 32 コア以上のシステムで(BIOS で Hyper Threading を無効にした場合)、ClickHouse がコア数の半分しか使用しないという制限を撤廃しました。 #44973 (Robert Schulze)。
  • 関数 multiIf を列指向で実行することでパフォーマンスを改善し、2.3倍の高速化を実現しました。 #45296 (李扬)。
  • needle(検索文字列)が空のときの position 関数向け fast path を追加しました。 #45382 (李扬).
  • デフォルトで query_plan_remove_redundant_sorting 最適化を有効にしました。この最適化は #45420 で実装されました。#45567Igor Nikonov)。
  • HTTP インターフェイス経由の大規模クエリのパフォーマンスを向上させるため、HTTP Transfer Encoding のチャンクサイズを拡大しました。 #45593 (Geoff Genz)。
  • 多数の Array / Map / Nested カラムを持つテーブルを読み取る短い SELECT クエリのパフォーマンスを改善しました。 #45630 (Anton Popov)。
  • 大きな整数値および Decimal 型に対するフィルタリングのパフォーマンスを改善。 #45949 (李扬).
  • この変更により、ColumnNullable(UInt8) からフィルターを取得する際のオーバーヘッドを効果的に削減し、クエリ全体のパフォーマンスを向上させることができます。この変更の影響を評価するために、TPC-H ベンチマークを用い、カラム型を非 Nullable から Nullable に変更したうえで、性能指標としてクエリの QPS を測定しました。 #45962 (Zhiguo Zhou)。
  • _part および _partition_id 仮想カラムの型を LowCardinality(String) にしました。 #45964 をクローズしました。 #45975 (flynn)。
  • スケールが変更されない場合の Decimal 変換の性能を改善しました。 #46095 (Alexey Milovidov)。
  • 読み取り時のデータプリフェッチを増やせるようにしました。 #46168 (Kseniia Sumarokova).
  • arrayExists(x -> x = 1, arr)has(arr, 1) に書き換えることで、パフォーマンスを 1.34 倍に向上。 #46188 (李扬)。
  • 非リモートディスク上での垂直マージにおける過大なメモリ使用量を修正。リモートディスクでも max_insert_delayed_streams_for_parallel_write が尊重されるようにしました。 #46275 (Nikolai Kochetov).
  • zstd を v1.5.4 に更新しました。パフォーマンスと圧縮率がわずかに改善されています。異なるバージョンの ClickHouse でレプリカを実行している場合、Data after merge/mutation is not byte-identical to data on another replicas. という、説明付きで妥当なエラーメッセージが表示されることがあります。これらのメッセージは想定されたものであり、心配する必要はありません。 #46280 (Raúl Marín)。
  • #39737 に起因するパフォーマンス劣化を修正。#46309Alexey Milovidov)。
  • レプリケーションキューが大きい場合でも、replicas_status ハンドラーはすばやく応答します。 #46310 (Alexey Milovidov).
  • 集約関数 sum、単項算術関数、および比較関数向けに AVX-512 のサポートを追加。 #37870 (zhao zhou).
  • marks の分配および読み取り処理全体の調整に関するコードを書き直し、パフォーマンスを最大限に向上させました。これにより #34527 がクローズされました。#43772 (Nikita Mikhaylov)。
  • クエリ(サブクエリ)内の冗長な DISTINCT 句を削除します。クエリプランを基盤として実装されています。DISTINCT 句に関しては、optimize_duplicate_order_by_and_distinct と同様の最適化を行います。query_plan_remove_redundant_distinct 設定で有効化できます。関連イシュー: #42648#44176Igor Nikonov)。
  • クエリの書き換えによる最適化をいくつか追加: sumIf(123, cond) -> 123 * countIf(1, cond), sum(if(cond, 123, 0)) -> 123 * countIf(cond), sum(if(cond, 0, 123)) -> 123 * countIf(not(cond)) #44728 (李扬)。
  • メモリ制約付きのマージ処理と、クエリプラン上位での順序付き集約処理との相互作用を改善しました。以前は、実際には不要な場合でも、一部のケースで AIO のために明示的なソートへフォールバックしていました。 #45892 (Nikita Taranov)。
  • 並行マージは、公平でスタベーションが発生しない動作を保証するため、デフォルトでラウンドロビン方式でスケジューリングされます。以前は、負荷の非常に高い分片では、厳格な優先度ベースのスケジューリングを使用していたため、大きなマージが小さなマージによってスタベーションを起こす可能性がありました。スケジューリングアルゴリズム(round_robin または shortest_task_first)を選択できるようにするために、サーバー設定オプション background_merges_mutations_scheduling_policy を追加しました。 #46247 (Sergei Trifonov)。

改善

  • ZooKeeper セッションが失われた場合に備え、INSERT のリトライをデフォルトで有効にしました。すでに本番環境で運用しています。 #46308 (Alexey Milovidov).
  • 名前付きタプルに対して、JSON オブジェクト内の不明なキーを無視する機能を追加しました(input_format_json_ignore_unknown_keys_in_named_tuple)。#45678Azat Khuzhin)。
  • final を使用したクエリに対して、ソートキー式を prewhere に移動して where 句を最適化できるようにしました。#38893#38950hexiaoting)。
  • バックアップ用に新しいメトリクス num_processed_files および processed_files_size を追加し、実際に処理されたファイル数とそのサイズを表すようにしました。 #42244 (Aleksandr).
  • サーバ間の DNS エラー発生時にリトライを行うようにしました。 #43179 (Anton Kozlov).
  • Keeper の改善: 予期しないディスク容量不足の問題を回避するため、あらかじめディスク上の領域を確保するようにしました。Keeper の Raft ログファイルの最大サイズを制御するための max_log_file_size 設定を導入しました。 #44370 (Antonio Andelic).
  • レプリカが読み取り専用の場合における replica delay API ロジックの挙動を最適化しました。 #45148 (mateng915).
  • 空のパスワードが正しくない場合、clickhouse-client でパスワードの対話的な入力を求めるようにしました。#46702 をクローズしました。 #46730 (Nikolay Degterinsky)。
  • Float* 型以外のカラムでの Gorilla 圧縮の使用を疑わしいものとしてマークするようにしました。 #45376 (Robert Schulze).
  • マージを実行しているレプリカ名を postpone_reason カラムに表示するようになりました。 #45458 (Frank Chen).
  • part_log に例外のスタックトレースを保存するようになりました。 #45459 (Frank Chen).
  • regexp_tree Dictionary が改善され、https://github.com/ua-parser/uap-core と互換性を持つようになりました。 #45631 (Han Fei)。
  • SYSTEM SYNC REPLICA のチェック処理を更新し、#45508#45648 を解決(SmitaRKulkarni)。
  • 設定 replication_alter_partitions_syncalter_sync に名称変更されました。 #45659 (Antonio Andelic)。
  • generateRandom テーブル関数とエンジンが LowCardinality データ型をサポートするようになりました。これはテストに便利で、例えば INSERT INTO table SELECT * FROM generateRandom() LIMIT 1000 のようなクエリを記述できます。このサポートは #45590 のデバッグに必要でした。 #45661 (Alexey Milovidov)。
  • 実験的なクエリ結果キャッシュで、構成設定がよりモジュール化されました。 #45679 (Robert Schulze).
  • "query result cache" を "query cache" に名前を変更しました。 #45682 (Robert Schulze).
  • SYSTEM SYNC FILE CACHE コマンドを追加しました。このコマンドは sync システムコールを実行します。#8921#45685DR)。
  • 新しい S3 設定項目 allow_head_object_request を追加しました。この PR により、https://github.com/ClickHouse/ClickHouse/pull/45288 で導入された、HeadObject の代わりに GetObjectAttributes リクエストを使用する動作をオプション(デフォルトでは無効)にしました。#45701Vitaly Baranov)。
  • 接続名に基づいて接続設定を上書きできる機能を追加しました(つまり、各接続ごとにパスワードを保存しておく必要はなくなり、すべてを ~/.clickhouse-client/config.xml にまとめて記述できるようになりました。さらに、接続ごとに異なる履歴ファイルを使用することも可能になり、これも便利です)。 #45715 (Azat Khuzhin)。
  • Arrow フォーマット: duration 型に対応しました。#45669 をクローズしました。#45750 (flynn)。
  • Query Cache のログ出力を拡張し、キャッシュ動作の調査をしやすくしました。 #45751 (Robert Schulze).
  • クエリキャッシュのサーバーレベルの設定を、実行時に再設定できるようになりました。 #45758 (Robert Schulze).
  • テーブル関数の引数が名前付きコレクションで指定されている場合に、ログにパスワードを出力しないようにしました。 #45774 (Vitaly Baranov).
  • 内部の S3 クライアントを改善し、さまざまな形式の URL に対してリージョンとリダイレクトを正しく判別できるようにしました。 #45783 (Antonio Andelic).
  • generateRandom で Map 型、IPv4 型および IPv6 型をサポートしました。主にテスト用途で有用です。 #45785 (Raúl Marín)。
  • IP 型で empty/notEmpty 関数をサポートしました。 #45799 (Yakov Olkhovskiy).
  • カラム num_processed_files は 2 つのカラムに分割されました:num_files(BACKUP 用)および files_read(RESTORE 用)。カラム processed_files_size は 2 つのカラムに分割されました:total_size(BACKUP 用)および bytes_read(RESTORE 用)。#45800Vitaly Baranov)。
  • MySQL 互換性のため、SHOW ENGINES クエリをサポートしました。 #45859 (Filatenkov Artur).
  • 難読化機能によるクエリ処理を改善しました。 #45867 (Raúl Marín).
  • 境界値 65535 (2149-06-06) に対する Date 型への変換時の動作を改善。 #46042 #45914 (Joanna Hulboj)。
  • DROP TABLE 実行時に参照先テーブルの依存関係をチェックするための設定 check_referential_table_dependencies を追加しました。この PR は #38326 を解決します。 #45936 (Vitaly Baranov)。
  • Null 引数が指定された場合に Null を返すように tupleElement を修正。#45894 をクローズ。#45952flynn)。
  • S3 のワイルドカードに一致するファイルが存在しない場合にエラーをスローするようにしました。これにより #45587 がクローズされました。#45957 (chen).
  • クラスタ状態データを使用して、バックアップ/リストアの同時実行状況を確認できるようにしました。 #45982 (SmitaRKulkarni).
  • ClickHouse Client: あいまい検索に対して「exact」マッチングを使用するようにし、SQL クエリのマッチングにおいて大文字小文字を無視できる正しい動作と、より適切なアルゴリズムを用いるようにしました。 #46000 (Azat Khuzhin).
  • 誤った CREATE View X TO Y AS SELECT 構文の使用を禁止しました。 #4331 をクローズ。 #46043flynn)。
  • Storage Log ファミリーが storage_policy の設定に対応しました。 #43421 をクローズしました。 #46044 (flynn)。
  • 結果が空の場合の JSONColumns フォーマットを改善。#46024 をクローズ。#46053flynn)。
  • SipHash128 のリファレンス実装を追加しました。 #46065 (Salvatore Mesoraca).
  • mmap を使用した割り当て時間と割り当てバイト数を記録する新しいメトリクスを追加。 #46068 (李扬)。
  • 現在、leftPadrightPadleftPadUTF8rightPadUTF8 のような関数では、2 番目の引数 length は UInt8|16|32|64|128|256 のいずれかでなければなりません。これは ClickHouse ユーザーにとって制約が厳しすぎるうえ、arrayResizesubstring などの他の類似関数との一貫性もありません。#46103李扬)。
  • デバッグビルド時に、welchTTest 関数の結果の統計値が NaN となる場合のアサーションを修正し、他の類似関数と挙動を統一しました。studentTTest の挙動を、これまでの使い勝手の悪い例外スローではなく NaN を返すように変更しました。これにより #41176 および #42162 がクローズされます。#46141Alexey Milovidov)。
  • 大きな整数と ORDER BY WITH FILL の使い勝手を向上しました。大きな整数(128 ビットおよび 256 ビット)で ORDER BY する際に、WITH FILL の開始点と終了点として通常の整数を使用できるようにしました。開始点または終了点が負の値である大きな整数に対して誤った結果が返される問題を修正しました。これにより #16733 がクローズされました。#46152Alexey Milovidov)。
  • system.tablespartsactive_partstotal_marks カラムを追加。issue#46161attack204)。
  • 関数 "multi[Fuzzy]Match(Any|AnyIndex|AllIndices}" は、vectorscan での評価に非常に時間がかかる可能性が高い正規表現を拒否するようになりました。 #46167 (Robert Schulze).
  • insert_null_as_default が有効で、かつカラムにデフォルト値が定義されていない場合、カラム型のデフォルト値が使用されます。また、この PR では LowCardinality カラムにおける NULL 値に対するデフォルト値の使用も修正されています。 #46171 (Kruglov Pavel).
  • S3 クライアントには、明示的に定義されたアクセスキーを優先的に使用します。use_environment_credentialstrue に設定されていて、ユーザーがクエリまたは設定を通じてアクセスキーを指定している場合は、環境変数から取得したキーではなく、その指定されたキーが使用されます。 #46191 (Antonio Andelic)。
  • MySQL の SQL 方言との互換性を向上させるため、関数 "formatDateTime()" にエイリアス "DATE_FORMAT()" を追加し、関数 formatDateTime のフォーマット指定子を "a"、"b"、"c"、"h"、"i"、"k"、"l"、"r"、"s"、"W" に対応するよう拡張しました。 ### ユーザー向け変更のドキュメント項目 ユーザー向けの短い説明: DATE_FORMATformatDateTime のエイリアスです。指定されたフォーマット文字列に従って時刻をフォーマットします。Format は定数式である必要があるため、1 つの結果カラムに対して複数のフォーマットを使用することはできません。(formatDateTime へのリンクを提供)。 #46302 (Jake Bamrah)。
  • 並列レプリカ(s3Cluster および MergeTree テーブル)用のコールバックタスクに関する ProfileEventsCurrentMetrics を追加しました。 #46313 (Alexey Milovidov)。
  • KeeperMap ストレージエンジンを使用するテーブルに対して、DELETE および UPDATE のサポートを追加しました。 #46330 (Antonio Andelic)。
  • RENAME クエリをクエリパラメータを使用して実行できるようにしました。 #45778 を解決します。 #46407Nikolay Degterinsky)。
  • REPLACE トランスフォーマーを使用するパラメータ化された SELECT クエリの問題を修正し、#33002 を解決しました。#46420 (Nikolay Degterinsky)。
  • 一時/外部テーブル用に使用される内部データベースを、非同期メトリック「NumberOfDatabases」のカウントから除外しました。これにより、system テーブル「system.databases」と動作が一貫するようになります。 #46435 (Robert Schulze).
  • distribution_queue テーブルに last_exception_time カラムを追加しました。 #46564 (Aleksandr)
  • パラメータ化ビューで、パラメータ付き IN 句をサポート。 #46583 (SmitaRKulkarni).
  • サーバー起動時には named collections を読み込まず、初回アクセス時に読み込むようにしました。 #46607 (Kseniia Sumarokova).

ビルド/テスト/パッケージングの改善

  • LLVM ランタイムによって実装された GWP-ASan を導入しました。これにより #27039 がクローズされました。 #45226 (Han Fei).
  • あえてテストを不安定かつよりフレークしやすいものにするため、テスト内の MergeTree の設定にランダム化を追加しました。 #38983 (Anton Popov).
  • PowerPC で HDFS サポートを有効化し、これにより以下の機能テスト 02113_hdfs_assert.sh、02244_hdfs_cluster.sql、02368_cancel_write_into_hdfs.sh が修正されました。 #44949 (MeenaRenganathan22).
  • clickhouse-keeper 用の systemd.service ファイルを追加しました。 #44293 を修正します。 #45568 (Mikhail f. Shiryaev).
  • ClickHouse の poco フォークを "contrib/" から "base/poco/" に移動しました。 #46075 (Robert Schulze).
  • 子プロセスを再起動するための clickhouse-watchdog のオプションを追加しました。これはあまり有用ではありません。 #46312 (Alexey Milovidov).
  • 環境変数 CLICKHOUSE_DOCKER_RESTART_ON_EXIT が 1 に設定されている場合、Docker コンテナは最初のプロセスとしてではなく子プロセスとして clickhouse-server を実行し、終了したときにそれを再起動します。 #46391 (Alexey Milovidov).
  • systemd サービスファイルを修正しました。 #46461 (SuperDJY).
  • ClickHouse のビルドに必要な Clang の最小バージョンを 12 から 15 に引き上げました。 #46710 (Robert Schulze).
  • Intel QPL を v0.3.0 から v1.0.0 にアップグレードしました。また、libaccel-config をビルドし、QPL ライブラリには動的ではなく静的にリンクするようにしました。 #45809 (jasperzhu).

バグ修正(公式安定版でのユーザー影響のある不具合)

  • StorageRabbitMQ において、データを rabbitmq_flush_interval_ms または rabbitmq_max_block_size の条件で正確にフラッシュするようにしました。#42389 をクローズしました。#45160 をクローズしました。#44404Kseniia Sumarokova)。
  • sparkBar 関数でのレンダリングに PODArray を使用し、メモリ使用量を制御できるようにしました。#44467 をクローズしました。#44489Duc Canh Le)。
  • 関数 (quantilesExactExclusive, quantilesExactInclusive) がソートされていない配列要素を返していた問題を修正。 #45379 (wujunfu).
  • OpenTelemetry が有効な場合に HTTPHandler で発生する未処理の例外を修正。 #45456 (Frank Chen)。
  • 8 桁の数値を Date として推論しないようにしました。誤ったデータが読み込まれるおそれがあるためです。 #45581 (Kruglov Pavel).
  • odbc_bridge_use_connection_pooling 設定が正しく使用されるように修正。 #45591 (Bharat Nallan)。
  • キャッシュ内のコールバックが呼び出されたとき、このキャッシュオブジェクトがすでに破棄されている可能性があります。安全性を確保するため、メンバーは値でキャプチャします。タスクスケジューリングについても、ストレージが破棄される前に非アクティブ化されるため安全です。#45548 を解決しました。#45601Han Fei)。
  • codec Delta または DoubleDelta を codec Gorilla と組み合わせて使用した場合に発生するデータ破損を修正しました。 #45615 (Robert Schulze)。
  • 無効な読み取りを防ぐため、N-gram Bloom Filter 索引の使用時に型を正しくチェックするようにしました。 #45617 (Antonio Andelic).
  • c-ares 周辺でいくつかのセグメンテーションフォルトが報告されました。これは以前に私が出した pull request で紛れ込んだものでした。Alexander Tokmakov の協力を得て修正しました。#45629 (Arthur Passos)。
  • 重複した主キーが発生した場合のキーの説明文を修正しました。これは PROJECTION で発生することがあります。詳細は #45590 を参照してください。 #45686Amos Bird)。
  • バックアップの圧縮方式と圧縮レベルを設定できるようにしました。Closes #45690. #45737 (Pradeep Chhetri).
  • select_query_typed.limitOffset の代わりに select_query_typed.limitByOffset を使用する必要があります。 #45817 (刘陶峰).
  • experimental analyzer を使用した場合、SELECT number FROM numbers(100) LIMIT 10 OFFSET 10; のようなクエリが誤った結果(この SQL では結果が空になる)を返す問題がありました。これは、クエリプランナによって不要な OFFSET ステップが追加されていたことが原因です。 #45822 (刘陶峰).
  • 後方互換性 - INSERT ... VALUES ... 式で必要となる、UInt64 から IPv4 への暗黙的な縮小変換を許可しました。 #45865 (Yakov Olkhovskiy).
  • 先頭のオクテットが欠落した IPv4 アドレスとの混在アドレス(::.1.2.3 のような形式)に対する IPv6 パーサーのバグを修正。 #45871 (Yakov Olkhovskiy).
  • system.processes テーブルおよび SHOW PROCESSLIST クエリに query_kind カラムを追加し、重複コードを削除しました。これにより、グローバル設定パラメータ max_concurrent_select_queriesINTERSECT または EXCEPT チェーンを含むクエリに対して適用されていなかった不具合を修正しました。#45872Alexey Milovidov)。
  • 関数 stochasticLinearRegression でのクラッシュを修正。WingFuzz により発見。 #45985 (Nikolai Kochetov)。
  • INTERSECT および EXCEPT 修飾子を使用し、スパースカラム(設定 ratio_of_defaults_for_sparse_serialization で制御)を有効にしたテーブルからデータを読み取る SELECT クエリで発生するクラッシュを修正。 #45987 (Anton Popov).
  • FINAL を伴う DESC ソートに対する read in order 最適化を修正し、#45815 をクローズ。#46009Vladimir C)。
  • コンパクトパーツで、多段にネストされた存在しないカラムを読み込もうとした場合の動作を修正しました。 #46045 (Azat Khuzhin).
  • system.processeselapsed カラムで値が 10 倍になっていた問題を修正。 #46047 (Azat Khuzhin).
  • ドメイン IP 型 (IPv4, IPv6) をネイティブ型に置き換える変更(https://github.com/ClickHouse/ClickHouse/pull/43221)に対するフォローアップ修正。#46087Yakov Olkhovskiy)。
  • パラメータにすでに値が設定されている場合の、設定ファイルにおける環境変数の置換を修正しました。これにより #46131 および #9547 がクローズされます。 #46144pufit)。
  • GROUPING SETS 使用時の誤った述語プッシュダウンを修正しました。#45947 をクローズしました。#46151flynn)。
  • 定数キーを使用した場合に fulls_sorting_join でパイプラインがスタックする可能性があった不具合を修正しました。 #46175 (Vladimir C).
  • フォーマット時にタプル関数をリテラルに書き換えないようにして、結果が不正確になるのを防ぎます。 #46232 (Salvatore Mesoraca).
  • Arrow フォーマットでの LowCardinality(Nullable) 読み取り時に発生し得る範囲外アクセスエラーを修正。 #46270 (Kruglov Pavel)。
  • SYSTEM UNFREEZE クエリが例外 CANNOT_PARSE_INPUT_ASSERTION_FAILED により失敗していた問題を修正しました。 #46325 (Aleksei Filatov)。
  • HashTable を保持する関数の集約状態をデシリアライズする際に発生しうる、整数オーバーフローに起因するクラッシュを修正しました。 #46349 (Nikolai Kochetov).
  • 非同期インサートで、VALUES フォーマットで送信された不正なデータによって発生する可能性がある LOGICAL_ERROR を修正。#46350Anton Popov)。
  • ALTER ... MOVE PART ... TO TABLE を実行しようとした際に発生する LOGICAL_ERROR を修正しました。この種のクエリはそもそもサポートされていませんでした。 #46359 (Alexander Tokmakov).
  • parallel_distributed_insert_select が有効な場合の、並列分散 insert select 実行時における s3Cluster のスキーマ推論を修正。#46381 (Kruglov Pavel)。
  • arr1arr2 が同一の Nested カラムのフィールドである場合の ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ... のようなクエリの不具合を修正しました。#46387Anton Popov)。
  • Scheduler がタスクのスケジューリングに失敗することがあります。その場合、MulityPartUpload 全体を中止し、UploadHelper は既にスケジュールされたタスクの完了を待機する必要があります。 #46451 (Dmitry Novik).
  • 異なるデフォルトの型を持つ Merge に対する PREWHERE を修正(カラムのデフォルトの型が異なる場合に発生していた一部の NOT_FOUND_COLUMN_IN_BLOCK を解消し、テーブル間でカラムの型が同じ場合は PREWHERE を許可し、型が異なる場合にのみ禁止するように変更)。 #46454 (Azat Khuzhin)。
  • ORDER BY で定数値が使用された場合に発生する可能性のあったクラッシュを修正。#46466 を修正。#46493Nikolai Kochetov)。
  • disk 設定がクエリレベルで指定されており、かつ storage_policy が設定ファイルの MergeTree 設定セクションで指定されている場合でも、例外を送出しないようにしました。disk は設定ファイル側の値を上書きします。 #46533 (Kseniia Sumarokova)。
  • 関数 arrayMap における定数 LowCardinality 引数の誤った処理を修正しました。このバグにより、リリースビルドではセグフォルトが、デバッグビルドでは論理エラー Bad cast が発生する可能性がありました。 #46569 (Alexey Milovidov)。
  • #46557 を修正しました。#46611Alexander Gololobov による)。
  • サーバーが1分30秒以内に起動しない場合に、clickhouse-server の systemd ユニットが無限に再起動を繰り返す問題を修正(systemd サービスから clickhouse-server を起動する際のタイムアウト処理を無効化)。#46613Azat Khuzhin)。
  • 非同期 INSERT 中に割り当てられたメモリバッファがグローバルコンテキストで解放されており、対応するユーザーおよびクエリ向けの MemoryTracker カウンタが正しく更新されていませんでした。その結果、誤って OOM 例外が発生することがありました。 #46622 (Dmitry Novik)。
  • 将来の analyze 実行でも使用されるため、table_join から on_expression をクリアしないように更新しました。これにより #45185 が解決されました。 #46487 (SmitaRKulkarni)。

ClickHouse 23.1 リリース、2023-01-26

ClickHouse リリース 23.1

アップグレードに関する注意事項

  • SYSTEM RESTART DISK クエリは何もしない(no-op)動作になります。 #44647 (alesapin).
  • HASHED/SPARSE_HASHED 辞書の PREALLOCATE オプションは何もしない(no-op)動作になります。 #45388 (Azat Khuzhin). これはもはや有意な利点をもたらしません。
  • Float32 型でも Float64 型でもないカラムに対して Gorilla codec を使用することを禁止しました。 #45252 (Robert Schulze). 意味がなく、不整合を引き起こしていました。
  • 非推奨の構文で作成された *MergeTree テーブルでは、並列クォーラム挿入が正しく動作しない可能性があります。そのため、そのようなテーブルに対しては並列クォーラム挿入のサポートを完全に無効化しました。新しい構文で作成されたテーブルには影響しません。 #45430 (Alexander Tokmakov).
  • AWS S3 でオブジェクトサイズを取得する際、HeadObject リクエストの代わりに GetObjectAttributes リクエストを使用します。この変更により、例えば AWS SDK の更新後にリージョンが明示されていないエンドポイントを正しく扱えなくなる問題が修正されます。 #45288 (Vitaly Baranov). AWS S3 と Minio ではテストされていますが、さまざまな S3 互換サービス(GCS, R2, B2 など)には微妙な非互換性がある可能性があることに注意してください。この変更により、GetObjectAttributes リクエストを許可するように ACL を調整する必要が生じる場合もあります。
  • タイムゾーン名にパスを使用することを禁止しました。例えば /usr/share/zoneinfo/Asia/Aden のようなタイムゾーン名は許可されません。Asia/Aden のような IANA タイムゾーンデータベース名を使用する必要があります。 #44225 (Kruglov Pavel).
  • 等値結合と定数式を組み合わせたクエリ(例: JOIN ON t1.x = t2.x AND 1 = 1)は、誤った結果を返すため禁止されます。 #44016 (Vladimir C).

新機能

  • 正規表現の木構造を走査してキーを抽出する Dictionary ソース。User-Agent のパースに利用できます。#40878 (Vage Ogannisian)。#43858 (Han Fei)。
  • パラメータ化された VIEW 機能が追加され、VIEW テーブルエンジンに対してクエリパラメータを指定できるようになりました。これにより #40907 が解決されました。 #41687 (SmitaRKulkarni)。
  • quantileInterpolatedWeighted/quantilesInterpolatedWeighted 関数を追加しました。 #38252 (Bharat Nallan)
  • Spark の explode 関数と同様に、Map 型に対して array join をサポートしました。 #43239 (李扬)。
  • SQL 標準準拠のバイナリおよび 16 進文字列リテラルをサポートしました。 #43785 (Mo Xuan)。
  • DateTime を Joda-Time スタイルでフォーマットできるようにしました。詳細は Joda-Time のドキュメント を参照してください。 #43818 (李扬)。
  • formatDateTime 用の小数秒フォーマッタ(%f)を実装しました。 #44060 (ltrk2). #44497 (Alexander Gololobov).
  • 2 つの日付、または時刻を含む 2 つの日付の差を、完全な単位数として計算するための age 関数を追加しました。#41115 をクローズしました。#44421Robert Schulze)。
  • 辞書に Null ソースを追加しました。#44240 をクローズしました。 #44502mayamika)。
  • s3_storage_class 設定オプションで S3 のストレージクラスを指定できるようにしました。例: <s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class> #44443 をクローズしました。 #44707 (chen)。
  • 名前付きタプルをパースする際に JSON オブジェクト内の要素が欠けている場合は、デフォルト値を挿入するようにしました。この動作を制御するための設定 input_format_json_defaults_for_missing_elements_in_named_tuple を追加しました。#45142#issuecomment-1380153217 をクローズしました。#45231Kruglov Pavel)。
  • ProfileEvents の ServerStartupMilliseconds にサーバーの起動時間を記録するようにしました。#43188 を解決しました。#45250SmitaRKulkarni)。
  • ストリーミングエンジン Kafka/RabbitMQ/NATS をリファクタリングして改善し、すべてのフォーマットをサポートしました。また、フォーマットも少しリファクタリングしました。- サフィックス/プレフィックス付きの行ベースフォーマットでメッセージを生成する処理を修正しました。これにより各メッセージはすべてのデリミタを含めて完全にフォーマットされ、同じ入力フォーマットを用いて再度パースできます。- Native、Parquet、ORC などのブロックベースフォーマットをサポートしました。各ブロックは個別のメッセージとしてフォーマットされます。1 つのメッセージ内の行数はブロックサイズに依存するため、max_block_size 設定で制御できます。- 新しいエンジン設定 kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message を追加しました。これらは行ベースフォーマットで 1 メッセージにフォーマットされる行数を制御します。デフォルト値は 1 です。- NATS テーブルエンジンでの高いメモリ消費を修正しました。- NATS プロデューサで任意のバイナリデータをサポートしました(以前は末尾に \0 を含む文字列でのみ動作していました)。- ドキュメントに不足していた Kafka/RabbitMQ/NATS のエンジン設定を追加しました。- Kafka/RabbitMQ/NATS におけるメッセージの生成と消費をリファクタリングし、WriteBuffers/ReadBuffers のセマンティクスから分離しました。- 出力フォーマットをリファクタリングしました:Kafka/RabbitMQ/NATS で使用されていた各行ごとのコールバックを削除し(現在そこではコールバックを使用していません)、IRowOutputFormat を直接使用できるようにし、行末および行間のデリミタを明確にし、出力フォーマットをリセットして再度フォーマットを開始できるようにしました。- formatRow 関数に適切な実装を追加しました(フォーマットのリファクタリングに伴う副産物)。#42777Kruglov Pavel)。
  • CapnProto フォーマットで、Nested テーブルの読み書きを StructList としてサポートしました。Decimal32/64 型を Int32/64 型として読み書きできるようにしました。#43319 をクローズしました。#43379Kruglov Pavel)。
  • system.text_logmessage_format_string カラムを追加しました。このカラムには、メッセージをフォーマットするために使用されたパターンが含まれます。 #44543 (Alexander Tokmakov)。これにより、ClickHouse のログに対してさまざまな分析が可能になります。
  • CSV/TSV/CustomSeparated 入力フォーマットに対して、カラム名(および型情報)を含むヘッダーの自動検出を試みます。 この挙動を有効にする設定 input_format_tsv/csv/custom_detect_header を追加しました(デフォルトで有効)。#44640 を解決します。 #44953 (Kruglov Pavel).

実験的機能

  • 効率的なテキスト検索のための新しいセカンダリ索引型として、実験的な転置インデックスを追加しました。#38667 (larryluogit)。
  • 実験的なクエリ結果キャッシュを追加しました。#43797 (Robert Schulze)。
  • IO リクエスト用の拡張可能かつ設定可能なスケジューリングサブシステムを追加しました(まだ IO コード自体とは統合されていません)。#41840 (Sergei Trifonov)。この機能は一切何もしません。お楽しみください。
  • Replicated データベースの死んだレプリカのメタデータを削除する SYSTEM DROP DATABASE REPLICA を追加しました。#41794 を解決します。#42807 (Alexander Tokmakov)。

パフォーマンス向上

  • MergeTree テーブルの起動時には非アクティブなパーツをロードしないようにしました。 #42181 (Anton Popov).
  • ストレージ S3 およびテーブル関数 s3 から多数の小さなファイルを読み取る際のレイテンシを改善しました。ストレージ S3 から読み取る際に、設定 remote_filesystem_read_method および remote_filesystem_read_prefetch が有効になるようになりました。 #43726 (Anton Popov)。
  • Parquet/ORC ファイル内の struct フィールドの読み取りが最適化されました。必要なフィールドのみを読み込みます。 #44484 (lgbo).
  • HTTP インターフェイス経由のクエリで、二段階集約アルゴリズムが誤って無効化されていましたが、再度有効化したことで、大幅なパフォーマンス向上が得られました。 #45450 (Nikolai Kochetov)。
  • StorageFile に対して mmap サポートを追加し、clickhouse-local のパフォーマンスを向上させました。 #43927 (pufit)
  • HashedDictionary にシャーディング(分片)サポートを追加し、並列ロードを可能にしました(shards の数に対してほぼ線形にスケールします)。 #40003 (Azat Khuzhin).
  • クエリ解析を高速化しました。 #42284 (Raúl Marín).
  • exprLowCardinality カラムである場合は、常に OR チェーン expr = x1 OR ... OR expr = xNexpr IN (x1, ..., xN) に置き換えます。この場合、optimize_min_equality_disjunction_chain_length 設定は無視されます。 #42889 (Guo Wangyang).
  • ThreadStatus 周辺のコードを最適化し、パフォーマンスをわずかに向上させました。 #43586 (Zhiguo Zhou)。
  • カラム単位の三値論理評価を自動ベクトル化によって最適化しました。このマイクロベンチマークのパフォーマンステストでは、ICX デバイス(Intel Xeon Platinum 8380 CPU)上で最大 21 倍性能向上が確認されました。#43669Zhiguo Zhou)。
  • 可能な限り、system.tables テーブルでの読み取りロックの取得を回避するようにしました。 #43840 (Raúl Marín)。
  • ThreadPool を最適化しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上で SSB(Star Schema Benchmark)を用いて実施した性能実験により、この変更によって ThreadPoolImpl::mutex に対するロック競合を 75% 削減し、CPU 使用率を向上させ、全体的なパフォーマンスを 2.4% 改善できることが示されました。 #44308 (Zhiguo Zhou)。
  • ハッシュテーブルのサイズを予測する最適化は、キャッシュされたハッシュテーブルのサイズが十分に大きい場合にのみ適用されるようになりました(しきい値は経験的に決定され、ハードコードされています)。 #44455 (Nikita Taranov)。
  • リモートファイルシステムからの非同期読み取りのパフォーマンスを小幅に改善。 #44868 (Kseniia Sumarokova)。
  • 次の条件に対して高速パスを追加: - col like '%%'; - col like '%'; - col not like '%'; - col not like '%'; - match(col, '.*'). #45244 (李扬).
  • フィルタリング(WHERE 句)におけるハッピーパス最適化をわずかに改善しました。 #45289 (Nikita Taranov)。
  • toUnixTimestamp64* の単調性情報を提供して、索引解析でより多くの代数的最適化を行えるようにしました。 #44116 (Nikita Taranov)。
  • クエリ処理における一時データ(ディスクへのスピル)の構成を、ファイルシステムキャッシュ(キャッシュ用ディスクの空き容量を使用)と協調して動作できるようにしました #43972Vladimir C)。これは主に ClickHouse Cloud での動作を改善しますが、必要な設定が分かっていればセルフマネージド環境でも使用できます。
  • system.replicas テーブルでレプリカのステータス取得を並列化しました。これにより #43918 がクローズされました。 #43998 (Nikolay Degterinsky)。
  • S3 へのバックアップ時のメモリ消費を最適化しました。S3 へのファイルコピーは、メモリを大量に消費する可能性があった WriteBufferFromS3 を使用せず、直接コピーされるようになりました。 #45188 (Vitaly Baranov)。
  • 非同期ブロック ID 用のキャッシュを追加しました。これにより、非同期挿入の重複排除を有効にした際の ZooKeeper へのリクエスト数を削減できます。 #45106 (Han Fei).

改善点

  • 引数なしで generateRandom を使用した場合、挿入先テーブルの構造を使用するようになりました。 #45239 (Kruglov Pavel).
  • JSONExtract 関数で、JSON 内で文字列として格納されている浮動小数点数を、暗黙的に整数へ変換できるようにしました。例: JSONExtract('{"a": "1000.111"}', 'a', 'UInt64') -> 1000。以前は 0 を返していました。 #45432 (Anton Popov).
  • イントロスペクションを改善するため、テーブル system.formats にフィールド supports_parallel_parsing および supports_parallel_formatting を追加しました。 #45499 (Anton Popov).
  • CustomSeparated/Template フォーマットにおける CSV フィールドの読み取りを改善。#42352 を解決。#39620 を解決。#43332Kruglov Pavel)。
  • クエリの経過時間の測定を統一。 #43455 (Raúl Marín).
  • SELECT クエリに仮想カラムが含まれている場合に、file/hdfs/s3 の各 table function で挿入先テーブルの構造を自動的に利用する処理を改善し、Block structure mismatchnumber of columns mismatch エラーが発生し得た問題を修正しました。 #43695 (Kruglov Pavel).
  • 関数 range が符号付き引数をサポートするようになりました。 #43333 を修正。 #43733sanyu)。
  • 冗長なソートを削除します。たとえば、サブクエリ内の関連する ORDER BY 句によるソートを削除します。クエリプランに基づいて実装されています。ORDER BY 句に関しては optimize_duplicate_order_by_and_distinct と同様の最適化を行いますが、より汎用的であり、任意の冗長なソートステップ(ORDER BY 句によってのみ引き起こされるものに限らない)に適用され、サブクエリの深さを問わず適用されます。#42648 に関連。#43905Igor Nikonov)。
  • BACKUP でのファイル重複排除を無効にできるようになりました(重複排除を行わないバックアップでは、完全な RESTORE の代わりに ATTACH を使用できます)。例えば BACKUP foo TO S3(...) SETTINGS deduplicate_files=0(デフォルトは deduplicate_files=1)。 #43947 (Azat Khuzhin)。
  • テキスト形式に対するスキーマ推論をリファクタリングして改善しました。結果のカラム型を Nullable にするかどうかを制御する新しい設定 schema_inference_make_columns_nullable を追加しました(デフォルトで有効)。#44019Kruglov Pavel)。
  • PROXYv1 プロトコルのサポートを強化。 #44135 (Yakov Olkhovskiy).
  • クリーンアップスレッドが最後に実行したパーツチェックに関する情報を system.parts テーブルに追加。 #44244 (Dmitry Novik)。
  • 読み取り専用モードでは INSERT にテーブル関数を使用できないようにしました。 #44290 (SmitaRKulkarni).
  • CleanupThread の1回のイテレーションで処理されるパーツ数を制限できるようにする設定 simultaneous_parts_removal_limit を追加しました。 #44461 (Dmitry Novik)。
  • クエリで仮想カラムのみが必要な場合は、ReadBufferFromS3 を初期化しないようになりました。この変更は #44246 の解決に役立つ可能性があります。#44493chen)。
  • 重複したカラム名に関するヒントが出ないようにしました。 #44130 をクローズ。 #44519Joanna Hulboj)。
  • ディスクのエンドポイントでのマクロ展開を許可しました。#40951 を解決しました。#44533SmitaRKulkarni)。
  • input_format_json_read_object_as_string が有効な場合のスキーマ推論機能を改善しました。 #44546 (Kruglov Pavel)。
  • DatabaseReplicated 内で引数を指定した ReplicatedMergeTree テーブルの作成を禁止できる、ユーザーレベルの設定 database_replicated_allow_replicated_engine_arguments を追加しました。 #44566 (alesapin).
  • index_granularity に対して無効な値である 0 を誤って指定してしまうことを防止します。これにより #44536 がクローズされました。 #44578Alexey Milovidov)。
  • config.xml の kerberos セクション内の keytab パラメータで、サービスの keytab ファイルへのパスを設定できるようになりました。 #44594 (Roman Vasin)。
  • あいまい検索向けに、既に入力されたクエリの一部を利用できるようにしました(Rust で書かれ、ClickHouse に静的リンクされている skim ライブラリに渡します)。#44600Azat Khuzhin)。
  • 実験的機能である JSON Object 型でもネストされた JSON オブジェクトを読み取れるよう、デフォルトで input_format_json_read_objects_as_strings を有効化しました。 #44657 (Kruglov Pavel).
  • 非同期挿入の重複排除の改善: ユーザーが重複した非同期挿入を行った場合には、Keeper に問い合わせる前にメモリ内で重複排除を行うようにしました。 #44682 (Han Fei).
  • 入出力の Avro フォーマットで bool 型が ClickHouse の bool 型としてパースされるようになりました。 #44684 (Kruglov Pavel)。
  • Arrow/Parquet/ORC で Bool 型をサポートしました。#43970 をクローズしました。#44698Kruglov Pavel)。
  • UUID を読み込む際に、クォートの外側まで貪欲にパースしないようにしました。これにより、誤ったデータが誤って正常にパースされてしまうことを防ぎます。 #44686 (Raúl Marín).
  • Int64 がオーバーフローする場合は UInt64 を推論し、スキーマ推論時の一部の変換処理を修正。 #44696 (Kruglov Pavel).
  • これまで Replicated データベース内での依存関係の解決は、いささか場当たり的な方法で行われていましたが、現在は明示的なグラフを用いた適切な方法で行われるようになりました。 #44697 (Nikita Mikhaylov)。
  • output_format_pretty_row_numbers がブロック間でカウンタを引き継がない問題を修正。#44815 をクローズ。#44832flynn)。
  • バックグラウンドのクリーンアップ処理と同時に実行されるパーツのマージに起因する system.errors へのエラー報告を行わないようにしました。 #44874 (Raúl Marín).
  • Distributed async INSERT のメトリクスを最適化および修正しました。 #44922 (Azat Khuzhin).
  • 同時バックアップおよびリストアを禁止するための設定を追加しました。これにより #43891 が解決されました。実装内容: * Context 内で BackupWorker が作成される際に読み取り・設定される、同時バックアップおよびリストアを禁止するサーバーレベルの設定を追加。* 設定はデフォルトで true。* バックアップまたはリストアを開始する前に、他のバックアップ/リストアが実行中かどうかを確認するチェックを追加。内部リクエストの場合は、backup&#95;uuid を使用して同一ノードからのリクエストかどうかを確認します。#45072SmitaRKulkarni)。
  • システムログ用に <storage_policy> 設定パラメータを追加。 #45320 (Stig Bakken)。

ビルド/テスト/パッケージングの改善

  • clickhouse-client のローカル履歴に対するファジー検索用として(Rust で実装されている)skim ライブラリを静的リンクしました。 #44239 (Azat Khuzhin).
  • Rust を理由として共有ライブラリへのリンクのサポートを削除しました。実際には、Rust はこの削除の口実にすぎず、いずれにせよ削除する予定でした。 #44828 (Alexey Milovidov).
  • パッケージから adduser ツールへの依存関係を削除しました。これは使用していないためです。これにより #44934 が修正されます。 #45011 (Alexey Milovidov).
  • SQLite ライブラリを最新バージョンに更新しました。これは SQLite データベースおよびテーブル統合エンジンで使用されています。また、TSan の誤検知レポートを修正しました。これにより #45027 がクローズされます。 #45031 (Alexey Milovidov).
  • PowerPC における WeakHash の衝突問題に対処するために CRC-32 を変更しました。 #45144 (MeenaRenganathan22).
  • aws-c* サブモジュールを更新しました。 #43020 (Vitaly Baranov).
  • 成功している backport PR と、成功していて承認済みの PR を自動的にマージするようにしました。 #41110 (Mikhail f. Shiryaev).
  • ClickHouse CI のステータスを表示するための ウェブサイト を公開しました。 ソース

不具合修正

  • ドメインの IP 型 (IPv4, IPv6) をネイティブ型に置き換えました。 #43221 (Yakov Olkhovskiy)。これにより、コード内で未実装だった箇所の一部が自動的に解消されます。
  • バックアップ処理中にミューテーションが kill された場合でもバックアップ処理が正しく動作するように修正しました。 #45351 (Vitaly Baranov).
  • 例外メッセージ Invalid number of rows in Chunk を修正しました。#41404#42126 (Alexander Gololobov)。
  • ソート後に式を実行した際に未初期化の値が使用される可能性があった問題を修正し、#43386 #43635Kruglov Pavel)をクローズしました。
  • 集約コンビネータにおける NULL の扱いを改善し、特殊な最適化 optimize_rewrite_sum_if_to_count_if を使用した際に発生しうるセグメンテーションフォルトや論理エラーを修正しました。#43758 をクローズしました。#43813Kruglov Pavel)。
  • CREATE USER/ROLE クエリの設定制約を修正しました。 #43993 (Nikolay Degterinsky).
  • テーブルメタデータの EPHEMERAL カラムに対してパースできないデフォルト値が設定されていたバグを修正しました。 #44026 (Yakov Olkhovskiy).
  • 互換性設定に指定された不正なバージョンの解析を修正。 #44224 (Kruglov Pavel).
  • datetime からの interval 減算の挙動を加算と同一にしました。 #44241 (ltrk2).
  • ビューの結果サイズの上限を撤廃しました。 #44261 (lizhuoyu5).
  • do_not_evict_index_and_mrk_files=1 の場合にキャッシュで発生し得る論理エラーを修正。#42142 をクローズ。#44268Kseniia Sumarokova)。
  • ライトスルーキャッシュで、キャッシュへの書き込みが時期尚早に中断されてしまう可能性があった問題を修正(本来は停止すべきでない状況で、誤った仮定によりキャッシュが停止してしまうことがあった)。 #44289 (Kseniia Sumarokova).
  • 定数引数を取る IN 関数が LowCardinality と共に定数引数として使用された場合に発生し得るクラッシュを修正しました。 #44221 を修正。 #44346Nikolai Kochetov)。
  • パラメトリック集約関数の複雑なパラメータ(配列など)に対するサポートを修正しました。これにより #30975 が解決しました。この変更以前は、集約関数 sumMapFiltered は分散クエリでは使用できませんでした。#44358Alexey Milovidov)。
  • BSON スキーマ推論における ObjectId の読み取りを修正。 #44382 (Kruglov Pavel)。
  • ReplicatedMergeTree において、マージが完了する前に一時パーツが早期に削除されてしまう原因となるレースコンディションを修正しました。この問題により、No such file or directory: xxx のようなエラーが発生する可能性がありました。この修正により #43983 が解決されました。#44383alesapin)。
  • クラスタ名が指定されていない場合に、一部の無効な SYSTEM ... ON CLUSTER クエリが予期しない動作をしていました。これを修正し、現在は無効なクエリは本来どおり SYNTAX_ERROR をスローします。 #44264 を修正。 #44387Alexander Tokmakov)。
  • ORC フォーマットにおける Map 型の読み込みを修正。 #44400 (Kruglov Pavel).
  • Parquet/ORC フォーマットの入力データに存在しないカラムを読み込もうとした場合の処理を修正しました。以前は INCORRECT_NUMBER_OF_COLUMNS エラーが発生する可能性がありました。#44333 をクローズします。 #44405Kruglov 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 をクローズ。#44413save-my-heart)。
  • CRLF 改行を用いる CSV フォーマットでの bool 値の読み取りを修正。#44401 をクローズ。 #44442Kruglov Pavel)。
  • LowCardinality Dictionary 上では and/or/if/multiIf 関数を実行しないようにし、結果の型が LowCardinality にならないようにしました。これにより、場合によって発生していた Illegal column ColumnLowCardinality エラーを防ぎます。#43603 を修正。#44469Kruglov Pavel)。
  • max_streams_for_merge_tree_reading SETTING 使用時の mutation の問題を修正。 #44472 (Anton Popov)。
  • ASTSelectQuery::formatImpl における GROUPING SETS 使用時のヌルポインタ逆参照が発生する可能性のある不具合を修正しました(#43049)。#44479Robert Schulze)。
  • テーブル関数の引数、CAST 関数の引数、JSONAsObject のスキーマ推論において、設定に基づいて型を検証するようにしました。 #44501 (Kruglov Pavel)。
  • LowCardinality と const カラムに対する IN 関数の不具合を修正し、#44503 をクローズ。#44506Duc Canh Le)。
  • CREATE TABLE ステートメント内の DEFAULT 式の正規化処理におけるバグを修正しました。in 関数の第 2 引数(または IN 演算子の右側の引数)が、CREATE クエリの実行中に評価結果で置き換えられてしまうことがありました。#44496 を修正。#44547Alexander Tokmakov)。
  • WITH ROLLUP、WITH CUBE、および WITH TOTALS が存在する場合、PROJECTION は動作しません。以前のバージョンでは、PROJECTION の使用をスキップする代わりに、クエリは例外をスローしていました。これにより #44614 がクローズされました。これにより #42772 がクローズされました。#44615Alexey Milovidov)。
  • 関数 get all blocks sorted by time が非同期ブロックを取得していなかったことにより、非同期ブロックがクリーンアップされませんでした。 #44651 (Han Fei).
  • サブクエリを含む JOIN、UNION、TOTALS で発生する LOGICAL_ERROR The top step of the right pipeline should be ExpressionStep を修正しました(#43687)。#44673Nikolai Kochetov)。
  • Executable テーブルエンジンで発生する std::out_of_range 例外を回避しました。 #44681 (Kruglov Pavel).
  • AST 上の quantiles には optimize_syntax_fuse_functions を適用しないようにし、#44712 をクローズしました。#44713Vladimir C)。
  • Merge テーブルおよび PREWHERE で誤った型が使用されるバグを修正。 #43324 をクローズ。 #44716 (Vladimir C)。
  • シャットダウン時(TraceCollector の破棄中)に発生しうるクラッシュを修正しました。#44757 を修正しました。#44758Nikolai Kochetov)。
  • 分散クエリ処理で発生しうるクラッシュを修正しました。totals または extremes を伴うクエリが空の結果を返し、かつ Distributed テーブルとローカルテーブルで型が一致していない場合にクラッシュが発生する可能性がありました。#44738 を修正しました。 #44760Nikolai Kochetov)。
  • フェッチ時(min_compressed_bytes_to_fsync_after_fetch)およびミューテーション時の小さいファイル(ttl.txt, columns.txt)(min_rows_to_fsync_after_merge / min_compressed_bytes_to_fsync_after_merge)に対する fsync を修正。 #44781 (Azat Khuzhin).
  • ディスク間でパーツが移動されている最中に system.parts または system.parts_columns テーブルへクエリを実行すると、まれにレースコンディションが発生する可能性がありました。#41145 で導入された問題です。#44809Alexey Milovidov)。
  • PROJECTION の最適化を有効にした場合に発生する可能性のあった Context has expired エラーを修正しました。これは、実行時にコンテキストを使用する dictHas/dictGet のような特定の関数を含むクエリで再現可能でした。#44844 を修正します。#44850Nikolai Kochetov)。
  • リモートファイルシステムから LowCardinality Dictionary を読み込む際に発生する可能性があった Cannot read all data エラーの修正。 #44709 を解決。 #44875Nikolai Kochetov)。
  • ハードウェアモニタのセンサーを読み取れないケースは、ログに完全な例外メッセージを出力せずに無視するようにしました。 #44895 (Raúl Marín).
  • 計算された INSERT の遅延時間が max_delay_to_insert の設定値を超える場合は、遅延時間として max_delay_to_insert の値を使用するようにしました。関連: #44902#44916 (Igor Nikonov)。
  • UNION を含むクエリで発生していた Different order of columns in UNION subquery エラーを修正。 #44866 を解決。 #44920Nikolai Kochetov)。
  • INSERT の遅延が誤って計算される可能性があり、その結果、正しい値ではなく常に max_delay_to_insert 設定を遅延として使用してしまうことがありました。これを、単純な式 max_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold) を用いるように変更し、しきい値を超えたパーツ数に比例して遅延が増加するようにしました。#44902 をクローズしました。 #44954 (Igor Nikonov)。
  • wide パーツが論理削除マスクを持つ場合に発生していた ALTER TABLE の有効期限 (TTL) エラーを修正。 #44959 (Mingliang Pan).
  • ドメイン IP 型(IPv4、IPv6)をネイティブ型に置き換える対応 #43221 に対するフォローアップ修正。#45024Yakov Olkhovskiy)。
  • ドメイン IP 型(IPv4, IPv6)をネイティブ型に置き換える変更のフォローアップ修正。https://github.com/ClickHouse/ClickHouse/pull/43221#45043Yakov Olkhovskiy)。
  • パーサーでバッファオーバーフローが発生し得る問題があり、fuzzer によって発見されました。 #45047 (Alexey Milovidov)。
  • storage FileLog で発生する可能性のあった cannot-read-all-data エラーを修正しました。#45051#38257 をクローズします。#45057Kseniia Sumarokova)。
  • クエリ内に GROUPING SETS が含まれている場合、メモリ効率の良い集約(設定 distributed_aggregation_memory_efficient)は無効になります。 #45058 (Nikita Taranov).
  • update_field が指定されている場合、更新時にレンジカラムを主キーの一部として扱うように RANGE_HASHED Dictionary を修正しました。#44588 をクローズ。#45061 (Maksim Kita).
  • ネストされたラムダでキャプチャされた LowCardinality 型の引数に対して発生していたエラー Cannot capture column を修正しました。#45028 を解決。#45065Nikolai Kochetov)。
  • minmax/count PROJECTION 使用時に追加フィルタが適用されず、additional_table_filters のクエリ結果が誤っていた問題を修正しました。 #45133 (Nikolai Kochetov).
  • histogram 関数が負の値を受け入れていたバグを修正。 #45147 (simpleton).
  • StorageJoin におけるカラムの NULL 許容設定の誤りを修正。 #44940 をクローズ。 #45184 (Vladimir C)。
  • background_fetches_pool_size 設定を、実行時に値を増加させた場合に正しくリロードできるよう修正。 #45189 (Raúl Marín).
  • KV エンジン(KeeperMap、EmbeddedRocksDB など)において、キーに対する IN で異なる型を返すサブクエリを使用する SELECT クエリを正しく処理できるようにしました。 #45215 (Antonio Andelic)。
  • 一部のケースにおける SEMI JOINjoin_use_nulls の論理エラーを修正し、#45163 および #45209 をクローズ。#45230Vladimir C)。
  • S3 からの読み取り時に発生する heap-use-after-free を修正。#45253Kruglov Pavel)。
  • Avro の Union 型が ['null', Nested type] である場合のバグを修正しました。#45275 をクローズ。bytes 型を誤って Float 型として推論していたバグを修正しました。#45276flynn)。
  • ストレージエンジン Merge を使用するテーブルで明示的な PREWHERE を利用できない場合に、適切な例外をスローするようにしました。 #45319 (Antonio Andelic).
  • WSL1 上の Ubuntu 環境で、自己解凍形式の ClickHouse バイナリが解凍に失敗していた問題を修正。/proc/self/maps では 32-bit ファイルの inode を報告する一方で、stat では 64-bit の inode を報告するという不整合が原因だった。 #45339 (Yakov Olkhovskiy)。
  • 分散テーブルの起動時のレースコンディションを修正(非同期 INSERT のファイルが複数回処理されてしまう可能性があった問題)。 #45360 (Azat Khuzhin).
  • ListObject リクエストが失敗した場合に、ストレージ S3 およびテーブル関数 s3 からの読み取り時にクラッシュする可能性があった問題を修正しました。 #45371 (Anton Popov).
  • 不正な構造を持つ Dictionary(例: XML 設定における型の誤り)が存在する場合に SELECT ... FROM system.dictionaries が例外をスローしていた問題を修正しました。#45399 (Aleksei Filatov)。
  • INSERT INTO ... SELECT * FROM s3Cluster クエリで挿入先テーブルの構造が使用される場合の s3Cluster のスキーマ推論を修正しました。 #45422 (Kruglov Pavel)。
  • HTTP 経由の JSON/BSONEachRow のパースにおいて、一部のカラムでデータ中の値ではなくデフォルト値が使用されてしまう可能性があったバグを修正しました。 #45424 (Kruglov Pavel).
  • テキストソースから IP 型を型付きでパースする際に発生していたバグ(コード: 632. DB::Exception: Unexpected data ... after parsed IPv6 value ...)を修正しました。#45425Yakov Olkhovskiy)。
  • #45297 をクローズ。空の正規表現に対するチェックを追加。#45428 (Han Fei).
  • (おそらく分散)クエリがハングすることがある問題を修正。 #45448 (Azat Khuzhin).
  • allow_asynchronous_read_from_io_pool_for_merge_tree が有効な場合に、ThreadPool::schedule からの例外によって発生する可能性のあるデッドロックを修正しました。 #45481 (Nikolai Kochetov)。
  • DETACH 後にテーブルが使用中扱いのまま残る可能性がある問題を修正。 #45493 (Azat Khuzhin).
  • クエリがキャンセルされ、その実行中に並列パースが使用されていた場合にまれに発生していたアボートを修正しました。 #45498 (Anton Popov).
  • 分散テーブルの作成とそのテーブルへの INSERT 文の実行との間に発生するレースコンディションを修正しました(テーブルへの INSERT 時に CANNOT_LINK が発生する可能性がありました)。 #45502 (Azat Khuzhin).
  • キャッシュポリシーの getter に適切なデフォルト (SLRU) を追加しました。#45514 をクローズしました。#45524Kseniia Sumarokova)。
  • ミューテーションでの ARRAY JOIN を禁止しました。#42637 #44447SmitaRKulkarni)。
  • エイリアス付きテーブル名とカラム変換を伴う修飾アスタリスクの処理を修正しました。#44736 を解決します。#44755SmitaRKulkarni)。

2022 年の変更履歴

  • 目次
  • ClickHouse リリース 23.12、2023-12-28
  • ClickHouse 23.11 リリース(2023-12-06)
  • ClickHouse リリース 23.10、2023-11-02
  • ClickHouse リリース 23.9、2023-09-28
  • ClickHouse 23.8 LTS リリース, 2023-08-31
  • ClickHouse 23.7 リリース(2023-07-27)
  • ClickHouse リリース 23.6、2023-06-29
  • ClickHouse 23.5 リリース(2023-06-08)
  • ClickHouse リリース 23.4、2023-04-26
  • ClickHouse 23.3 LTS リリース、2023-03-30
  • ClickHouse リリース 23.2(2023-02-23)
  • ClickHouse 23.1 リリース、2023-01-26
  • ClickHouse リリース 23.1
  • 2022 年の変更履歴