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

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)。

新機能

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

パフォーマンスの向上

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

改善

  • Keeper におけるソフトメモリ上限のサポート。メモリ使用量が上限に近づいた場合、リクエストを拒否します。 #57271 (Han Fei). #57699 (Han Fei).
  • 分散テーブルへの挿入が、更新されたクラスタ設定を正しく反映できるようにしました。クラスタノードの一覧が動的に更新された場合、分散テーブルの Directory Monitor がそれを検知して一覧を更新します。 #42826 (zhongyuankai).
  • 不整合なマージパラメータを持つレプリケートテーブルを作成できないようにしました。 #56833 (Duc Canh Le)。
  • system.tables に非圧縮サイズを表示できるようになりました。 #56618#57186 (Chen Lixiang)。
  • Distributed テーブルに、対応するクエリレベルの設定と同様の設定である skip_unavailable_shards を追加しました。#43666 をクローズしました。 #57218Gagan Goel)。
  • 関数 substring(エイリアス: substr, mid)が Enum 型でも使用できるようになりました。これまでは、最初の関数引数は String または FixedString 型の値である必要がありました。これにより、MySQL インターフェース経由での Tableau などのサードパーティツールとの互換性が向上します。#57277Serge 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#57646 (Julia Kartseva)。
  • IPv6 から UInt128 への変換とバイナリ算術演算を可能にしました。 #57707 (Yakov Olkhovskiy).
  • async inserts deduplication cache に対して、キャッシュの更新をどれくらいの時間待機するかを指定する設定を追加しました。設定項目 async_block_ids_cache_min_update_interval_ms は非推奨になりました。現在は、競合が発生した場合にのみキャッシュが更新されます。#57743alesapin)。
  • sleep() 関数は、KILL QUERY によってキャンセルできるようになりました。 #57746 (Vitaly Baranov)。
  • 実験的な Replicated データベースではサポートされていないため、Replicated テーブルエンジンに対する CREATE TABLE ... AS SELECT クエリを禁止しました。#35408 を参照してください。#57796Nikolay Degterinsky)。
  • 外部データベース向けのクエリ変換を修正・改善し、互換性のある述語を再帰的にすべて取得できるようにしました。 #57888 (flynn).
  • ファイルシステムキャッシュサイズの動的な再読み込みに対応。#57866 をクローズ。#57897 (Kseniia Sumarokova).
  • ブロックされている SIGRTMIN を持つスレッド(Apache rdkafka のような低品質な外部ライブラリ内に存在することがあります)に対して system.stack_trace を正しくサポートしました。 #57907 (Azat Khuzhin)。また、意味のない storage_system_stack_trace_pipe_read_timeout_ms の待機が発生しないよう、シグナルがブロックされていないスレッドに対してのみシグナルを送信するようにしました。 #58136 (Azat Khuzhin)。
  • クォーラム挿入時のチェックで Keeper の障害を許容するようにしました。 #57986 (Raúl Marín).
  • max/peak RSS(MemoryResidentMax)を system.asynchronous_metrics に追加しました。 #58095 (Azat Khuzhin).
  • このPRにより、ユーザーはデフォルト以外のリージョンであってもリージョンを明示せずに、https://s3:// といった S3 スタイルのリンクを使用できるようになります。また、ユーザーが誤ったリージョンを指定した場合でも、正しいリージョンが自動的に特定されます。 #58148 (Yarik Briukhovetskyi)。
  • clickhouse-format --obfuscate は Settings、MergeTreeSettings、およびタイムゾーンを認識し、それらの名前を変更せず、そのまま保持します。 #58179 (Alexey Milovidov)。
  • ZipArchiveWriter に明示的な finalize() 関数を追加しました。ZipArchiveWriter 内の複雑すぎるコードを簡素化しました。これにより #58074 が修正されました。#58202Vitaly Baranov)。
  • 同じパスを持つキャッシュが同じキャッシュオブジェクトを使用するようにしました。この動作はもともと存在していましたが、23.4 で壊れていました。同じパスを持つキャッシュでキャッシュ設定の組み合わせが異なる場合は、許可されていないことを示す例外がスローされます。 #58264 (Kseniia Sumarokova)。
  • Parallel replicas(実験的機能):ユーザーフレンドリーな設定 #57542 (Igor Nikonov).
  • 並列レプリカ(実験的機能):アナウンス応答の処理を改善 #57749Igor Nikonov)。
  • Parallel replicas(実験的機能):ParallelReplicasReadingCoordinator において min_number_of_marks をより厳密に考慮するようにしました #57763Nikita Taranov)。
  • Parallel replicas(実験的機能):IN 句(サブクエリ)使用時の並列レプリカを無効化 #58133 (Igor Nikonov).
  • 並列レプリカ(実験的機能):プロファイルイベント 'ParallelReplicasUsedCount' を追加 #58173 (Igor Nikonov)。
  • HEAD などの POST 以外のリクエストは、GET と同様に読み取り専用になります。 #58060 (San).
  • system.part_logbytes_uncompressed カラムを追加 #58167 (Jordi Villar).
  • system.backups および system.backup_log テーブルにベースバックアップ名を追加 #58178 (Pradeep Chhetri)。
  • clickhouse-local に、コマンドラインからクエリパラメータを指定するためのサポートを追加 #58210 (Pradeep Chhetri)。

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

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

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

  • TTL GROUP BY においてソート順が乱れる可能性のあった問題を修正しました #49103 (Nikita Mikhaylov).
  • 修正: lttb バケット戦略を修正し、最初と最後のバケットには単一のデータポイントのみを含めるようにした #57003 (FFish)。
  • エラー後の同期処理中に Template フォーマットで発生し得るデッドロックを修正 #57004 (Kruglov Pavel).
  • 多数のエラーをスキップしながらファイルをパースする際に発生していた早期終了の問題を修正 #57006 (Kruglov Pavel).
  • dictionary テーブル関数を経由した辞書 ACL のバイパスを防止しました #57362Salvatore Mesoraca)。
  • Fuzzer によって検出された「non-ready set」エラーの別のケースを修正しました。 #57423 (Nikolai Kochetov).
  • PostgreSQL の array_ndims の使用に関するいくつかの問題を修正。 #57436 (Ryan Jacobs).
  • 書き込みロックのタイムアウト後に発生する RWLock の不整合状態を修正 #57454 (Vitaly Baranov)。書き込みロックのタイムアウト後に発生する RWLock の不整合状態を再度修正 #57733 (Vitaly Baranov)。
  • 修正: ビューチェーンへの push 処理を構築する際に ephemeral カラムを除外しないように修正 #57461 (Yakov Olkhovskiy).
  • MaterializedPostgreSQL(実験的): issue #41922 を修正し、#41923 に対するテストを追加 #57515 (Kseniia Sumarokova)。
  • レプリケートされたアクセスエンティティの管理時には、grant/revoke クエリの ON CLUSTER 句を無視するようにしました。 #57538 (MikhailBurdukov).
  • clickhouse-local のクラッシュを修正 #57553 (Nikolay Degterinsky)。
  • Hash JOIN の不具合修正。 #57564 (vdimir).
  • PostgreSQL ソースの潜在的な誤りを修正 #57567 (Kseniia Sumarokova).
  • ネストされた LowCardinality に対する Hash JOIN の型の補正を修正。 #57614 (vdimir).
  • system.stack_trace からの並列読み取りを正しく禁止し、ハングを回避するようにしました。 #57641 (Azat Khuzhin).
  • sparse カラムの any(...) RESPECT NULL 集約で発生していたエラーを修正しました #57710 (Azat Khuzhin)。
  • 単項演算子の構文解析を修正 #57713 (Nikolay Degterinsky).
  • 実験的テーブルエンジン MaterializedPostgreSQL の依存関係の読み込み処理を修正しました。 #57754 (Kseniia Sumarokova)。
  • BACKUP/RESTORE ON CLUSTER 実行時に切断されたノードに対するリトライ処理を修正しました #57764 (Vitaly Baranov)。
  • 部分的にマテリアライズされたプロジェクションがある場合の外部集約の結果を修正 #57790 (Anton Popov).
  • *Map コンビネーター付き集約関数のマージ処理を修正 #57795 (Anton Popov).
  • バグがあるため、system.kafka_consumers を無効化しました。#57822Azat Khuzhin)。
  • Merge JOIN における LowCardinality キーのサポートを修正。 #57827 (vdimir).
  • サンプルブロックに関連する InterpreterCreateQuery の修正。#57855Maksim Kita)。
  • PostgreSQL 由来の名前付きコレクションで addresses_expr が無視されていました。#57874 (joelynch).
  • BLAKE3(Rust 実装)での不正なメモリアクセスを修正しました #57876Raúl Marín)。その後、メモリ安全性を高めるために Rust から C++ へ書き換えられました #57994Raúl Marín)。
  • CREATE INDEX で使用する関数名を正規化 #57906 (Alexander Tokmakov).
  • 最初のリクエストが発生する前に利用不能になっているレプリカの扱いを修正 #57933 (Nikita Taranov)。
  • リテラルエイリアスの誤った分類を修正 #57988 (Chen768959)。
  • Keeper における無効な前処理を修正 #58069 (Antonio Andelic)。
  • Poco ライブラリの UTF32Encoding に関連する整数オーバーフローを修正 #58073 (Andrey Fedotov)。
  • 非常に大きな整数値を含むスカラサブクエリが存在する場合に parallel replicas(実験的機能)で発生していた問題を修正 #58118Alexey 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 引数を用いたマテリアライズドビューまたはプロジェクション内でこの関数を使用している場合は、[email protected] までお問い合わせください。集約関数 sumMap のエラーを修正し、その結果としておおよそ 1.5~2 倍ほど遅くなりました。ただし、この関数自体が元々あまり有用ではないため問題にはなりません。これにより #54955 がクローズされました。これにより #53134 がクローズされました。これにより #55148 がクローズされました。関数 groupArraySample のバグを修正しました。この関数は、1 つのクエリで複数の集約状態が生成される場合に、同じ乱数シードを使用していました。#56350Alexey Milovidov)。

新機能

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

パフォーマンス向上

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

改善点

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

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

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

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

後方互換性のない変更

  • 壊れたデータパーツを自動的に削除するオプションは廃止されました。これにより #55174 がクローズされました。 #55184Alexey Milovidov)。 #55557Jihyuk Bok)。
  • 古いインメモリデータパーツは、write-ahead ログからはもはや読み取れません。以前にインメモリパーツを構成している場合は、アップグレード前にそれらを削除する必要があります。 #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 と最大数の設定の管理方法を変更して、これをバックグラウンドプロセスとしました。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 がクローズされました。 #56134 (Yarik Briukhovetskyi)。
  • ネイティブプロトコル経由での外部データを用いた非同期INSERTをサポートしました。以前は、データをクエリ内にインライン指定した場合にのみ動作していました。 #54730 (Anton Popov).
  • 可視化用のデータのダウンサンプリングに Largest-Triangle-Three-Buckets アルゴリズムを使用する集約関数 lttb を追加しました。 #53145 (Sinan)。
  • クエリ CHECK TABLE のパフォーマンスと使い勝手が向上し、進行状況の更新を送信でき、キャンセルも可能になりました。CHECK TABLE ... PART 'part_name' を用いて特定のパーツのみをチェックできるようになりました。#53404 (vdimir)。
  • 関数 jsonMergePatch を追加しました。文字列としての JSON データを扱う際に、JSON オブジェクトを表すこれらの文字列をマージし、1 つの JSON オブジェクトを表す単一の文字列にまとめることができます。 #54364 (Memo).
  • Kusto Query Language 方言サポートの第 2 段階です。第 1 フェーズの実装はすでにマージされています。#42510larryluogit)。
  • 新しい SQL 関数 arrayRandomSample(arr, k) を追加しました。これは入力配列から k 個の要素をサンプルとして返します。これまで同様の機能は、たとえば "SELECT arrayReduce('groupArraySample(3)', range(10))" のような、あまり使い勝手のよくない構文でのみ実現可能でした。 #54391 (itayisraelov)。
  • -ArgMin/-ArgMax 集約コンビネータを導入しました。これにより、最小値/最大値のみで集約できるようになります。ユースケースの一例は #54818 にあります。この PR では、コンビネータを専用フォルダに再編成しています。 #54947 (Amos Bird)。
  • SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf] を使用して、Protobuf フォーマット用のキャッシュをドロップできるようになりました。 #55064 (Aleksandr Musorin).
  • 外部 HTTP Basic認証器を追加。#55199 (Aleksei Filatov).
  • 符号なし整数のバイト順を反転させる関数 byteSwap を追加しました。これは、IPv4 のように内部的に符号なし整数として表現される型の値のバイト順を入れ替える場合に特に有用です。 #55211 (Priyansh Agrawal)。
  • SQL クエリ文字列の整形済みバージョン(複数行にまたがる場合があります)を返す関数 formatQuery を追加しました。同様の処理を行いつつ、返される文字列に改行を含めない関数 formatQuerySingleLine も追加しました。 #55239 (Salvatore Mesoraca)。
  • ELF 実行ファイル/ライブラリ/オブジェクトファイルからデバッグシンボルを読み込む DWARF 入力フォーマットを追加しました。 #55450Michael 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).
  • RoaringBitmaps がシリアライズ前に最適化されるようになりました。 #55044 (UnamedRus).
  • 転置インデックス内のポスティングリストは、内部ビットマップに対して可能な限り最小の表現を使用するよう最適化されました。データの繰り返し度合いによっては、転置インデックスが占有する領域を大幅に削減できる場合があります。 #55069 (Harry Lee).
  • Context ロックでの競合を修正しました。これにより、多数の短時間で終了する並行クエリのパフォーマンスが大幅に向上します。 #55121 (Maksim Kita).
  • 転置インデックス作成のパフォーマンスを30%向上しました。これは std::unordered_mapabsl::flat_hash_map に置き換えることで実現しています。 #55210 (Harry Lee).
  • ORC フィルターのプッシュダウン(rowgroup レベル)をサポート。 #55330 (李扬).
  • 多数の一時ファイルを使用する external aggregation のパフォーマンスを改善しました。 #55489 (Maksim Kita).
  • セカンダリインデックス用の marks キャッシュに、デフォルトで妥当なサイズを設定し、marks が繰り返し読み込まれることを避けるようにしました。 #55654 (Alexey Milovidov).
  • スキップインデックスを読み取る際に、不必要なインデックスグラニュールの再構築を避けるようにしました。これにより、#55653 に対処しました。#55683Amos Bird)。
  • 実行時にセット内の CAST をキャッシュすることで、セットの要素型が列の型と完全には一致しない場合でも IN 関数のパフォーマンスを向上させました。 #55712 (Duc Canh Le).
  • ColumnVector::insertMany および ColumnVector::insertManyFrom のパフォーマンスを改善。 #55714 (frinkr).
  • 次の行のキー位置を予測して比較回数を減らすことで、Map の添字アクセスを最適化しました。#55929 (lgbo).
  • Parquet における struct フィールドのプルーニングをサポート(以前のバージョンでは一部のケースで正しく動作していなかった)。 #56117 (lgbo).
  • 読み取る行数の推定に基づいて、クエリ実行で使用される並列レプリカ数をチューニングできるようにしました。 #51692 (Raúl Marín).
  • 多数の一時ファイルが生成される場合における外部集約処理のメモリ消費を最適化しました。 #54798 (Nikita Taranov).
  • async_socket_for_remote モード(デフォルト)で実行される分散クエリで、max_threads による上限が適用されるようになりました。以前は、一部のクエリが過剰なスレッド(最大で max_distributed_connections まで)を作成し、サーバーのパフォーマンス低下を引き起こす可能性がありました。#53504filimonov)。
  • ZooKeeper の分散 DDL キューからの DDL 実行時に、スキップ可能なエントリをキャッシュするようにしました。 #54828 (Duc Canh Le).
  • 実験的な転置インデックスでは、一致件数が多すぎるトークン(すなわちポスティングリスト内の行 ID)は保存しません。これによりストレージ容量を節約でき、逐次スキャンと同等またはそれ以上に高速な場合に、効果の薄いインデックスルックアップを回避できます。トークンを保存しないかどうかを制御していた従来のヒューリスティクス(インデックス定義に渡される density パラメータ)は、ユーザーにとって分かりづらいものでした。より単純なヒューリスティクスとして、ポスティングリスト内で許可される行 ID の最大数を直接制御する max_rows_per_postings_list パラメータ(デフォルト: 64k)に基づく方式が導入されました。#55616Harry Lee)。
  • EmbeddedRocksDB テーブルへの書き込み性能を改善。#55732Duc Canh Le)。
  • パーティション内に多数のパーツ(1000 個を超える場合)が存在する場合の ClickHouse の全体的な耐障害性を向上しました。これにより、TOO_MANY_PARTS エラーの発生数が減少する可能性があります。 #55526 (Nikita Mikhaylov).
  • 階層型ディクショナリの読み込み時のメモリ使用量を削減しました。 #55838 (Nikita Taranov).
  • すべてのディクショナリで dictionary_use_async_executor を設定可能になりました。#55839vdimir)。
  • AggregateFunctionTopKGenericData のデシリアライズ時の過剰なメモリ使用量を防止。 #55947 (Raúl Marín).
  • 大量の watch を持つ Keeper 上では、DB::KeeperStorage::getSessionsWithWatchesCount 内で AsyncMetrics スレッドが一定時間 CPU を 100% 消費してしまう場合があります。修正として、大きな watches および list_watches セットの走査を回避するようにしました。 #56054 (Alexander Gololobov)。
  • 設定 optimize_trivial_approximate_count_query を追加し、EmbeddedRocksDB ストレージで count の近似値を使用するようにしました。また、StorageJoin で trivial count を有効化しました。 #55806 (Duc Canh Le).

改善点

  • 関数 toDayOfWeek(MySQL のエイリアス: DAYOFWEEK)、toYearWeekYEARWEEK)、toWeekWEEK)が String 引数をサポートするようになりました。これにより、これらの動作が MySQL と同様になります。 #55589 (Robert Schulze).
  • date_time_overflow_behavior 設定を追加しました。ignorethrowsaturate の値を指定でき、Date、Date32、DateTime64、Integer または Float から Date、Date32、DateTime もしくは DateTime64 への変換時のオーバーフロー時の動作を制御します。 #55696 (Andrey Zvonov).
  • ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType} のクエリパラメータ対応を実装しました。#49516 をマージし、#49449 をクローズしました。#55604alesapin)。
  • EXPLAIN でのプロセッサ ID の表示を、よりわかりやすい形式にしました。 #48852 (Vlad Seliverstov).
  • lifetime フィールド付きの direct dictionary を作成しようとすると(direct dictionary では lifetime は意味を持たないため)、作成時に拒否されるようになりました。修正: #27861#49043Rory Crispin)。
  • ALTER TABLE t DROP PARTITION のようなパーティションを指定するクエリでパラメータの使用を許可しました。#49449 をクローズ。 #49516 (Nikolay Degterinsky).
  • system.zookeeper_connection に新しいカラム xid を追加。 #50702 (helifu).
  • 設定の再読み込み後に system.server_settings に正しいサーバー設定が表示されるようにしました。 #53774 (helifu).
  • クエリで - と同様に数学用マイナス記号 文字をサポートするようにしました。#54100 (Alexey Milovidov).
  • 実験的な Replicated データベースエンジンにレプリカグループを追加。#53620 をクローズ。#54421Nikolay Degterinsky)。
  • 再試行可能な S3 エラーは、クエリを即座に失敗させるよりも再試行した方がよいです。そのため、デフォルトの s3_retry_attempts の値を大きくしました。 #54770 (Sema Checherinda).
  • ロードバランシングモード hostname_levenshtein_distance を追加しました。#54826JackyWoo)。
  • ログ内のシークレットのマスキングを改善。 #55089 (Vitaly Baranov).
  • 現時点では、プロジェクションの解析はクエリプランに対してのみ実行されます。設定項目 query_plan_optimize_projection は(かなり前からデフォルトで有効になっていたため)廃止されました。 #55112 (Nikita Mikhaylov)。
  • 関数 untuple が名前付き要素を持つタプルに対して呼び出され、かつその関数自体にエイリアスが付いている場合(例: select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias)、結果のカラム名は untuple のエイリアスとタプル要素のエイリアスから生成されるようになりました(この例では「untuple_alias.element_alias」)。 #55123 (garcher22)。
  • テーブルの仮想カラムを DESCRIBE クエリの結果に含められるようにする設定 describe_include_virtual_columns を追加しました。さらに、設定 describe_compact_output を追加しました。これを true に設定すると、DESCRIBE クエリは追加情報なしでカラム名と型のみを返します。 #55129 (Anton Popov).
  • optimize_throw_if_noop=1 を指定した OPTIMIZE がエラー unknown reason で失敗することがありましたが、実際の原因はパーツごとに投影が異なることにありました。この挙動は修正されました。 #55130 (Nikita Mikhaylov)。
  • 同じ Postgres テーブルに対応する複数の MaterializedPostgreSQL テーブルを持てるようにしました。デフォルトではこの挙動は無効です(後方互換性のない変更であり、互換性維持のため)が、設定 materialized_postgresql_use_unique_replication_consumer_identifier を有効にすることで利用できます。#54918 をクローズ。#55145Kseniia Sumarokova)。
  • 負の DateTime64 および DateTime を、小数部を含む短い文字列からパースできるようにしました。 #55146 (Andrey Zvonov).
  • MySQL との互換性向上のために、1. information_schema.tables に新しいフィールド table_rows が追加され、2. information_schema.columns にフィールド extra が追加されました。 #55215 (Robert Schulze).
  • ClickHouse-client は、行数が 0 で、かつ例外がスローされた場合には、「0 rows in set」を表示しません。 #55240 (Salvatore Mesoraca)。
  • RENAME db.t1 to db.t2 のように、キーワード TABLE なしでテーブルをリネームできるようになりました。 #55373 (凌涛)。
  • system.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 として報告するようになりました。さらに、型 String および FixedString の出力を TEXT または BLOB に切り替えるための 2 つの新しい設定 mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns が追加されました。 #55617 (Serge Klochkov).
  • ReplicatedMergeTree テーブルの起動時、ClickHouse サーバーはパーツの集合について、予期しないパーツ(ローカルには存在するが ZooKeeper には存在しないもの)がないかをチェックします。すべての予期しないパーツは detached ディレクトリに移動され、その代わりにサーバーはそれらをカバーしている祖先パーツを復元しようとします。現在は、サーバーはランダムなカバー済みパーツではなく、最も近い祖先パーツを復元しようとします。 #55645 (alesapin).
  • 高度なダッシュボードで、タッチデバイス上のチャートをドラッグできるようになりました。これにより #54206 がクローズされました。 #55649 (Alexey Milovidov)。
  • http_write_exception_in_output_format で例外を出力する際、宣言されている場合はデフォルトのクエリフォーマットを使用するようにしました。 #55739 (Raúl Marín).
  • 一般的なマテリアライズドビューの落とし穴に関するメッセージを、よりわかりやすい内容に改善しました。 #55826 (Raúl Marín)。
  • 現在のデータベースを削除してしまった場合でも、clickhouse-local で一部のクエリを実行し、別のデータベースに切り替えることができます。これにより、clickhouse-client と動作が一貫します。この変更により #55834 がクローズされました。#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 回の試行以内にロードされない場合にコンテナが無限に再起動してしまう問題を回避できる可能性があります(非常に大きなデータベースやマルチノード構成で発生し得ます)。#50724Alexander Nikolaev)。
  • サブモジュールを含むソースコードを持つリソースは、Darwin 向けの専用ビルドタスクでビルドされます。これにより、サブモジュールを個別にチェックアウトせずに ClickHouse をビルドできます。#51435Ilya Yatsishin)。
  • ClickHouse を AVX 系の命令をグローバルに有効にした状態でビルドすると(これは推奨されません)、エラーが発生していました。原因は、snappy が SNAPPY_HAVE_X86_CRC32 を有効にしていないことです。#55049monchickey)。
  • clickhouse-server パッケージからスタンドアロンの clickhouse-keeper を起動する際の問題を解決しました。#55226Mikhail f. Shiryaev)。
  • テストにおいて、RabbitMQ のバージョンを 3.12.6 に更新しました。RabbitMQ テスト用のログ収集を改善しました。#55424Ilya Yatsishin)。
  • 機能テストを修正するため、openssl と boringssl 間のエラーメッセージの差異を調整しました。#55975MeenaRenganathan22)。
  • Apache DataSketches に上流のリポジトリを使用するようにしました。#55787Nikita Taranov)。

バグ修正(公式安定版リリースで発生するユーザーに見える不具合)

  • mutation 実行時に転置インデックスファイルのハードリンク作成をスキップ #47663 (cangyin)。
  • パターンにオルタネーション(|)を含む match 関数(正規表現)が誤ったキー条件を生成していたバグを修正。#53222 をクローズ。#54696Yakov Olkhovskiy)。
  • ARRAY JOIN を用いた read-in-order 最適化で発生する 'Cannot find column' エラーを修正 #51746 (Nikolai Kochetov).
  • クエリで未対応だった実験的な Object(Nullable(json)) のサブカラムをサポートしました。 #54052 (zps)。
  • accurateCastOrNull 向けの修正を再度適用 #54629 (Salvatore Mesoraca)。
  • AS 句を使用せずに作成された Distributed テーブルの列に対する DEFAULT の検出を修正 #55060Vitaly Baranov)。
  • ShellCommandSource のコンストラクタで例外が発生した場合の適切なクリーンアップ #55103 (Alexander Gololobov).
  • LDAP で割り当てられたロールの更新時のデッドロックを修正 #55119 (Julian Maicher).
  • 内部例外に起因するエラー統計の更新を抑制 #55128 (Robert Schulze)。
  • バックアップ処理におけるデッドロックを修正 #55132 (alesapin).
  • ストレージの Iceberg ファイル取得を修正 #55144 (Kseniia Sumarokova).
  • set 内の余分なカラムに対するパーティションプルーニングを修正。 #55172 (Amos Bird).
  • テーブルがアダプティブグラニュラリティを使用している場合の ALTER UPDATE クエリにおけるスキップインデックス再計算の問題を修正しました #55202 (Duc Canh Le).
  • fs キャッシュにおけるバックグラウンド ダウンロードの修正 #55252 (Kseniia Sumarokova).
  • バッファのファイナライズ漏れに起因しうるコンプレッサでのメモリリークを回避 #55262 (Azat Khuzhin).
  • スパースカラムでの関数の実行を修正 #55275 (Azat Khuzhin).
  • SELECT FINAL を使用した SummingMergeTree における Nested の誤ったマージを修正しました #55276 (Azat Khuzhin).
  • S3 上に構築された ReplicatedMergeTree において、ゼロコピーを使用していない場合に detached パーティションを削除できなかったバグを修正 #55309 (alesapin)。
  • MergeSortingPartialResultTransform で発生するクラッシュを修正(remerge 後にチャンクが 0 個になることが原因)#55335Azat Khuzhin)。
  • 共有例外をスローしていたことが原因で、エラー時に CreatingSetsTransform で発生していたデータレースを修正しました #55338 (Azat Khuzhin)。
  • trash の最適化を一定の範囲で修正 #55353 (Alexey Milovidov)。
  • StorageHDFS のリークを修正 #55370 (Azat Khuzhin)。
  • cast 演算子での配列のパース処理を修正 #55417 (Anton Popov)
  • OR フィルターを含むクエリでの仮想カラムによるフィルタリングを修正 #55418 (Azat Khuzhin)。
  • MongoDB 接続の問題を修正 #55419Nikolay Degterinsky)。
  • MySQL インターフェイスにおけるブール値の表現を修正 #55427 (Serge Klochkov)。
  • MySQL テキストプロトコルにおける DateTime のフォーマットと LowCardinality(Nullable(T)) 型の報告を修正 #55479Serge 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).
  • ODBC 経由で MS SQL Server と連携する際に発生する 'Invalid cursor state' エラーを修正 #55558 (vdimir).
  • 最大実行時間と'break' オーバーフロー モードを修正 #55577 (Alexander Gololobov)。
  • 循環エイリアスが原因の QueryNormalizer のクラッシュを修正 #55602 (vdimir)。
  • 誤った最適化を無効にし、テストを追加 #55609Alexey Milovidov)。
  • #52352#55621 のマージ(Alexey Milovidov)。
  • 小数の誤ったソートを防ぐためのテストを追加 #55662 (Amos Bird)。
  • グロブを含まない URL を使用する S3 および Azure の Cluster 関数のプログレスバーを修正しました #55666 (Kruglov Pavel)。
  • OR フィルタを含むクエリにおける仮想カラムによるフィルタリングを修正 (再投稿) #55678 (Azat Khuzhin).
  • Iceberg ストレージに関する修正および改善 #55695 (Kruglov Pavel)。
  • CreatingSetsTransform (v2) におけるデータ競合を修正 #55786 (Azat Khuzhin)。
  • precise_float_parsing が true の場合に、不正な文字列を float としてパースしようとしたときに例外をスローするように変更 #55861 (李扬)。
  • CTE にステートフル関数が含まれている場合は述語プッシュダウンを無効化する #55871 (Raúl Marín)。
  • クエリから FORMAT が削除されてしまっていた normalize ASTSelectWithUnionQuery を修正 #55887 (flynn)。
  • Native ORC 入力フォーマットで発生し得るセグフォールトを修正しました #55891 (Kruglov Pavel)。
  • 疎なカラムを含む場合のウィンドウ関数の動作を修正。 #55895 (János Benjamin Antal).
  • 修正: StorageNull がサブカラムをサポートするようになりました #55912 (FFish)。
  • Replicated テーブルの mutate/merge で発生した再試行可能なエラーをエラーログに書き出さないようにしました #55944 (Azat Khuzhin).
  • SHOW DATABASES LIMIT <N> を修正しました #55962 (Raúl Marín)。
  • アンダースコアを含むフィールドを持つ自動生成 Protobuf スキーマを修正 #55974 (Kruglov Pavel)。
  • 非デフォルトのスケール使用時の dateTime64ToSnowflake64() を修正 #55983Robert Schulze)。
  • Arrow の辞書カラムの入出力を修正 #55989 (Kruglov Pavel).
  • AvroConfluent での schema registry からのスキーマ取得処理を修正 #55991 (Kruglov Pavel)。
  • Buffer テーブルでの ALTER と INSERT の同時実行時に発生する 'Block structure mismatch' エラーを修正 #55995 (Michael Kolupaev).
  • least_used JBOD ポリシーにおける空き容量の誤った計上を修正 #56030 (Azat Khuzhin).
  • テーブル関数内でサブクエリを評価する際にスカラー値が見つからなくなる問題を修正 #56057 (Amos Bird)。
  • http_write_exception_in_output_format=1 設定時に誤ったクエリ結果が返される問題を修正 #56135 (Kruglov Pavel)。
  • 設定変更後に使用されるフォールバック JSON->JSONEachRow のスキーマキャッシュを修正 #56172 (Kruglov Pavel)。
  • odbc-bridge にエラーハンドラを追加 #56185 (Yakov Olkhovskiy).

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

後方互換性のない変更

  • デフォルトの Prometheus ハンドラから status_info 設定オプションとディクショナリのステータス情報を削除しました。 #54090 (Alexey Milovidov).
  • 実験的な parts メタデータキャッシュをコードベースから削除しました。 #54215 (Alexey Milovidov).
  • デフォルトで input_format_json_try_infer_numbers_from_strings を有効にしないようにしました。これにより、サンプルデータに数値のように見える文字列が含まれている場合に発生しうる解析エラーを避けるため、JSON 形式で文字列から数値を推論しない挙動がデフォルトになります。 #55099 (Kruglov Pavel).

新機能

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

パフォーマンスの向上

  • S3 からの読み込みを高速化するため、デフォルトでプリフェッチを有効にしました。 #53709 (Alexey Milovidov).
  • FINAL を付けたクエリで不要な場合、単独のパーツでは PK とバージョン列を暗黙的に読み込まないようにしました。 #53919 (Duc Canh Le).
  • 定数キーを使った GROUP BY を最適化します。https://github.com/ClickHouse/ClickHouse/pull/53529 の後、_file / _path をキーとする GROUP BY を含むクエリが最適化されます。#53549Kruglov Pavel)。
  • Decimal カラムのソート性能を改善。ORDER BY 句に Decimal カラムが含まれている場合の MergeTree への挿入性能を改善。データがすでにソート済み、またはほぼソート済みの場合のソート性能を改善。 #35961 (Maksim Kita).
  • 巨大なクエリの解析パフォーマンスを改善。#51224 を修正。#51469 (frinkr)。
  • COUNT(DISTINCT ...) および各種 uniq 系集約関数を、GROUP BY を含むサブクエリから選択されている場合に count へ書き換える最適化。 #52082 #52645 (JackyWoo).
  • mmap/mremap/munmap への手動呼び出しを削除し、この処理をすべて jemalloc に委譲することで、パフォーマンスがわずかに向上します。 #52792 (Nikita Taranov).
  • NATS を使用している際に CPU 使用率が高くなる問題を修正しました。 #54399 (Vasilev Pyotr).
  • datetime 引数付きで toString を実行するための専用命令を別途用意しているため、datetime 以外の引数に対してはパフォーマンスを少し向上させるとともに、一部のコードをよりクリーンにできます。#53680 のフォローアップです。#54443Yarik Briukhovetskyi)。
  • std::stringstream に JSON 要素をシリアライズする代わりに、この PR ではシリアライズ結果を直接 ColumnString に格納するようにしています。 #54613 (lgbo)。
  • ビューを介して参照されている MergeTree テーブルから、対応する順序でデータを読み取れるようにする ORDER BY 最適化を有効にしました。 #54628 (Vitaly Baranov).
  • GeneratorJSONPath を再利用し、いくつかの shared pointer を削除することで JSON 関連の SQL 関数を改善しました。 #54735 (lgbo).
  • Keeper はパフォーマンス向上のため、リクエストのフラッシュをバッチ化して行おうとします。 #53049 (Antonio Andelic)。
  • INFILE 'glob_expression' を使用する場合、clickhouse-client がファイルを並列処理するようになりました。これにより #54218 がクローズされました。 #54533Max K.)。
  • 主キー列の型が IN 関数の右辺の列の型と異なる場合でも、IN 関数で主キーを使用できるようにしました。例: SELECT id FROM test_table WHERE id IN (SELECT '5')#48936 をクローズしました。 #54544 (Maksim Kita)。
  • Hash JOIN は、内部バッファを縮小しようとする際に、利用可能な最大メモリ(max_bytes_in_join で設定)の約半分を消費します。 #54584 (vdimir)。
  • array join で max_block_size を尊重し、OOM が発生する可能性を回避するようにしました。#54290 をクローズしました。#54664李扬)。
  • s3 テーブル関数で HTTP 接続を再利用できるようにしました。 #54812 (Michael Kolupaev).
  • MergeTreeRangeReader::Stream::ceilRowsToCompleteGranules における線形探索を二分探索に置き換え。 #54869 (usurai).

実験的機能

  • Annoy インデックスの作成は、設定項目 max_threads_for_annoy_index_creation を使用して並列化できるようになりました。 #54047 (Robert Schulze).
  • 分散テーブルを介した parallel replicas は、すべてのレプリカから読み取らないようになりました。 #54199 (Igor Nikonov).

改善

  • MergeTree データパーツ内のファイル名やカラム名が長くなる場合に、それらを名前のハッシュ値に置き換えられるようにしました。これにより、一部の状況で発生する File name too long エラーを回避できます。 #50612 (Anton Popov).
  • メタデータのパースに失敗した場合、JSON 形式のデータを JSONEachRow としてパースします。これにより、実際の形式が JSONEachRow であっても、拡張子が .json のファイルを読み取ることができるようになります。#45740 をクローズしました。#54405Kruglov Pavel)。
  • HTTP クエリの実行中に例外が発生した場合、有効な JSON/XML を出力するようになりました。この挙動は設定 http_write_exception_in_output_format で有効/無効を切り替えられます(デフォルトは有効)。 #52853 (Kruglov Pavel).
  • information_schema.tables ビューに新しいフィールド data_length が追加され、ディスク上のデータのおおよそのサイズを表示できるようになりました。これは Amazon QuickSight によって生成されるクエリを実行するために必要があります。 #55037 (Robert Schulze).
  • MySQL インターフェイスにプリペアドステートメントの最小限の実装が追加され、MySQL コネクタ経由で Tableau Online から ClickHouse への接続ができるようになりました。 #54115 (Serge Klochkov)。注意: プリペアドステートメントの実装はかなり最小限であり、現在は引数バインドをまだサポートしていません。この特定の Tableau Online のユースケースでは必要ないためです。Tableau Online の包括的なテストを行ったうえで問題が見つかった場合には、必要に応じてフォローアップとして実装される予定です。
  • regexp_tree 辞書で、case-insensitive(大文字小文字を区別しない)および dot-all のマッチングモードをサポートしました。 #50906 (Johann Gan).
  • Keeper の改良: createIfNotExists コマンドを追加。 #48855 (Konstantin Bogdanov).
  • 整数型推論の精度を向上し、#51236 を修正。#53003Chen768959)。
  • 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 形式での一部の特殊なチャンク構成からも読み取れるようにしました。 #54370 (Arthur Passos).
  • MySQL との互換性のために stddevPop 関数に STD エイリアスを追加。#54274 をクローズ。#54382Nikolay Degterinsky)。
  • MySQL との互換性のために addDate 関数を、一貫性のために subDate 関数を追加。#54275 を参照してください。#54400Nikolay Degterinsky)。
  • system.detached_partsmodification_time を追加しました。 #54506 (Azat Khuzhin).
  • 引数「max_substring」に 0 より大きい値が指定された場合に、関数「splitBy*()」が残りの文字列(存在する場合)を結果配列に含めるかどうか(Python/Spark のセマンティクス)を制御する設定 splitby_max_substrings_includes_remaining_string を追加しました。デフォルトの動作は変更されていません。 #54518 (Robert Schulze)。
  • Int64/UInt64 フィールドに対する整数型の推論を改善。#53003 の継続。配列の配列のようなネストした型や map/tuple のような関数にも対応するようになりました。Issue: #51236#54553Kruglov Pavel)。
  • スカラーに対する乗算・除算・剰余演算の配列演算を追加しました。5 * [5, 5][5, 5] * 5 のように、どちらの順序でも利用でき、両方のケースが可能です。 #54608 (Yarik Briukhovetskyi)。
  • keeper-clientrm コマンドにオプションの version 引数を追加して、削除をより安全に行えるようにしました。 #54708 (János Benjamin Antal).
  • Buffer テーブル使用時にデータ損失を招く可能性があるため、systemd によるサーバーの強制終了を無効化。 #54744 (Azat Khuzhin).
  • システムテーブル system.functions にフィールド is_deterministic を追加しました。このフィールドは、(まったく同じ入力が与えられた場合に)関数の結果が 2 回の呼び出し間で一定かどうかを示します。 #54766 #55035 (Robert Schulze)。
  • スキーマ information_schema 内のビューを、MySQL の同等のビューとの互換性がより高くなるように変更・拡張し、Tableau Online から ClickHouse へ接続できるレベルまで対応しました。より具体的には、1. フィールド information_schema.tables.table_type の型を Enum8 から String に変更しました。2. ビュー information_schema.table にフィールド table_commenttable_collation を追加しました。3. ビュー information_schema.key_column_usage および referential_constraints を追加しました。4. information_schema ビュー内の大文字エイリアスを、実際の大文字カラムに置き換えました。 #54773 (Serge Klochkov)。
  • クエリキャッシュは、nowrandomStringdictGet のような非決定的関数を含むクエリの結果をキャッシュしようとした場合、エラーを返すようになりました。以前の「結果をキャッシュしないが、そのことを通知しない」という挙動と比べて、これによりユーザーの混乱や意外な挙動が減ります。 #54801 (Robert Schulze)。
  • file/s3/url/... ストレージに対して materialized/ephemeral/alias などの特殊カラムを禁止し、ファイルから ephemeral カラムへの挿入処理を修正しました。#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 が修正される。#54895Amos Bird)。
  • 接続リセットにより失敗した場合に、バックアップの S3 操作を再試行するようにしました。 #54900 (Vitaly Baranov).
  • 設定の最大値が最小値より小さい場合に出力される例外メッセージをより正確にしました。 #54925 (János Benjamin Antal).
  • LIKEmatch およびその他の正規表現マッチング関数で、バイナリマッチにフォールバックすることで非 UTF-8 の部分文字列を含むパターンとのマッチが可能になりました。例えば、string LIKE '\xFE\xFF%' を使用して BOM を検出できます。これにより #54486 が解決されました。#54942Alexey Milovidov)。
  • ContextLockWaitMicroseconds プロファイルイベントを追加しました。 #55029 (Maksim Kita).
  • Keeper はログレベルを動的に調整できるようになりました。 #50372 (helifu).
  • MySQL との互換性のために timestamp 関数を追加しました。 #54275 をクローズしました。 #54639 (Nikolay Degterinsky).

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

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

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

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

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

後方互換性のない変更

  • 動的ディスクに名前がある場合は、ディスク関数の引数で disk = disk(name = 'disk_name', ...) のように指定する必要があります。以前のバージョンでは disk = disk_<disk_name>(...) のように指定できましたが、これはサポートされなくなりました。 #52820 (Kseniia Sumarokova).
  • clickhouse-benchmark は、--concurrency を 1 より大きい値で指定した場合、接続を並列に確立するようになりました。以前は、ヨーロッパから米国への 1000 個の同時接続で実行した場合には実用的ではありませんでした。高レイテンシの接続に対する QPS を正しく計算するようになりました。後方互換性のない変更として、clickhouse-benchmark の JSON 出力オプションは削除されました。このオプションを使用していた場合は、ワークアラウンドとして system.query_log から JSON 形式でデータを抽出することもできます。 #53293 (Alexey Milovidov).
  • system.text_log から microseconds 列が、system.metric_log から milliseconds 列が削除されました。これらは event_time_microseconds 列が存在するため冗長だからです。 #53601 (Alexey Milovidov).
  • メタデータキャッシュ機能を非推奨としました。これは実験的機能であり、私たち自身はこれまで一度も使用していません。また、この機能は危険です: #51182system.merge_tree_metadata_cache システムテーブルを削除しました。メタデータキャッシュ自体はこのバージョンではまだ利用可能ですが、近いうちに削除される予定です。これにより #39197 がクローズされます。 #51303 (Alexey Milovidov).
  • TLS 接続での 3DES サポートを無効化しました。 #52893 (Kenji Noguchi).

新機能

  • zip/7z/tar アーカイブからの直接インポートをサポート。例: file('*.zip :: *.csv')#50321nikitakeba)。
  • trace_type = 'MemorySample' の場合に system.trace_log にカラム ptr を追加しました。このカラムにはメモリアロケーションのアドレスが含まれます。割り当てられたが未解放のメモリを含むフレームグラフを構築できる関数 flameGraph を追加しました。#38391 の再実装です。#45322Nikolai Kochetov)。
  • テーブル関数 azureBlobStorageCluster を追加しました。サポートされる機能セットは、テーブル関数 s3Cluster のものと非常に似ています。 #50795 (SmitaRKulkarni)。
  • clusterclusterAllReplicasremoteremoteSecure をテーブル名を指定せずに使用できるようにしました(issue #50808)。#50848Yangkuan Liu)。
  • Kafka コンシューマの監視用システムテーブル。 #50999 (Ilya Golshtein)。
  • max_sessions_for_user 設定を追加しました。 #51724 (Alexey Gerasimchuck).
  • Spark の to_utc_timestamp/from_utc_timestamp と同様に動作する新しい関数 toUTCTimestamp/fromUTCTimestamp を追加。 #52117 (KevinyhZou).
  • ClickHouse のテーブル構造を CapnProto/Protobuf 形式のスキーマに変換する新しい関数 structureToCapnProtoSchema / structureToProtobufSchema を追加しました。テーブル構造から自動生成されたスキーマを使用することで、外部のフォーマット用スキーマなしで CapnProto/Protobuf 形式のデータを入出力できるようになりました(設定 format_capn_proto_use_autogenerated_schema / format_protobuf_use_autogenerated_schema で制御)。また、設定 output_format_schema によって、入出力時に使用される自動生成スキーマをエクスポートできるようにしました。 #52278 (Kruglov Pavel).
  • system.query_log に新しいフィールド query_cache_usage が追加され、クエリキャッシュが使用されたかどうか、またどのように使用されたかを示すようになりました。 #52384 (Robert Schulze)。
  • 新しい関数 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).
  • データを一切読み取らず、常に dummy という名前の UInt8 型カラムを持ち、その値が 0 の 1 行だけを返す入力フォーマット One を追加しました。これは system.one と同様です。file/S3/URL/HDFS などのテーブル関数で、データを読み取ることなくファイルを一覧表示するために、_file / _path 仮想カラムと組み合わせて使用できます。#53209Kruglov 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.clusterscluster 列のエイリアスとして 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 条件と各カラムの最小値 / 最大値に基づいて、行グループ(ファイルを構成するチャンク)がスキップされます。特に、ファイルがおおよそあるカラムでソートされている場合、そのカラムの狭い範囲でフィルタリングするクエリは、はるかに高速になります。 #52951 (Michael Kolupaev).
  • Parquet で小さな行グループをまとめて一括処理することで、読み取りを最適化しました。#53069 をクローズ。#53281Kruglov Pavel)。
  • ほとんどの入力フォーマットにおいて、ファイルからの count の計算を最適化しました。Closes #44334. #53637 (Kruglov Pavel).
  • url/file/hdfs テーブル関数で読み込みを行う前に、ファイル/パスでのフィルタリングを行えるようにしました。 #53529 (Kruglov Pavel).
  • AArch64、PowerPC、SystemZ、RISC-V での JIT コンパイルを有効化。#38217Maksim Kita)。
  • countDistinctIfcount_distinct_implementation で書き換えるための設定 rewrite_count_distinct_if_with_count_distinct_implementation を追加しました。 #30642 をクローズ。 #46051flynn)。
  • マージ前の変換処理を並列化することで、uniq および uniqExact 集約関数の状態のマージ処理を高速化しました。 #50748 (Jiebin Sun).
  • 可変長キーを多数使用する場合の nullable な文字列キーに対する集約処理のパフォーマンスを最適化しました。 #51399 (LiuNeng).
  • preimage を用いた時間フィルタ最適化を行うパスを Analyzer に追加しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上での SSB のパフォーマンス実験では、この変更により experimental analyzer 有効時の QPS の幾何平均が 8.5% 向上することが確認されています。 #52091 (Zhiguo Zhou)。
  • uniqExact(COUNT DISTINCT)関数において、すべてのハッシュセットが単一レベル構造である場合のマージ処理を最適化しました。 #52973 (Jiebin Sun)。
  • Join テーブルエンジン:すべてのカラムを含むハッシュ結合用データ構造をクローンしないようにしました。 #53046 (Duc Canh Le).
  • Apache Arrow ライブラリを使用せずにネイティブな ORC 入力フォーマットを実装し、パフォーマンスを向上させました。 #53324 (李扬).
  • ダッシュボードはサーバーにデータを圧縮するよう指示します。これは、低速なインターネット回線で長い時間範囲のデータを扱う場合に有用です。たとえば、86400 個のポイントを持つ 1 つのチャートは、未圧縮の場合 1.5 MB ですが、br で圧縮すると 60 KB になります。 #53569Alexey 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 経由で渡された場合には、この重複排除が内部で行われるようになりました。#53452Alexander Gololobov)。
  • file/s3/url/hdfs/azure 関数での count 実行時に備えて、ファイル内の行数をキャッシュします。キャッシュは use_cache_for_count_from_files の設定で有効/無効を切り替えられます(デフォルトで有効)。https://github.com/ClickHouse/ClickHouse/pull/53637 の継続です。#53692Kruglov Pavel)。
  • より慎重なスレッド管理により、多数のファイルを扱う S3 テーブル関数の処理速度が約 25% 以上向上しました。 #53668 (pufit).

改善

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

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

  • ClickHouse バイナリから動的リンカーへのシンボルの公開を行わないようにしました。これにより #43933 が修正される可能性があります。#47475Alexey Milovidov)。
  • clickhouse-keeper-client のシンボリックリンクを clickhouse-server パッケージに追加。 #51882 (Mikhail f. Shiryaev)。
  • SQL 2016 への準拠状況を報告するために https://github.com/elliotchance/sqltest を CI に追加しました。#52293Alexey Milovidov)。
  • PRQL を 0.9.3 にアップグレードしました。 #53060Maximilian Roos)。
  • CI チェックのシステムテーブルが ClickHouse Cloud にエクスポートされるようになりました。 #53086 (Alexey Milovidov).
  • コンパイラのプロファイルデータ (-ftime-trace) が ClickHouse Cloud にアップロードされます。#53100Alexey 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 でメインプロセスに適切な環境変数 (ENV) パラメータが渡されることを確認するテストを追加。#53457Mikhail f. Shiryaev)。
  • CMake におけるファイル管理を再編成し、重複の発生を防ぎます。たとえば、indexHint.cppdbms_sourcesclickhouse_functions_sources の両方で重複しています。 #53621 (Amos Bird)。
  • Snappy を 1.1.10 にアップグレードしました。 #53672 (李扬).
  • いくつかの依存関係を整理して一部の重複を削除することで、CMake ビルドをわずかに改善しました。各コミットには、行った変更内容の簡潔な説明が含まれています。 #53759 (Amos Bird).

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

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

ClickHouse リリース 23.7, 2023-07-27

後方互換性のない変更

  • NAMED COLLECTION アクセスタイプ(エイリアス USE NAMED COLLECTIONNAMED COLLECTION USAGE)を追加しました。この PR は、このアクセスタイプがデフォルトで無効になっているため(親アクセスタイプである NAMED COLLECTION ADMIN もデフォルトで無効であるため)、後方互換性のない変更です。#50277 で提案されました。使用を許可するには GRANT NAMED COLLECTION ON collection_name TO user または GRANT NAMED COLLECTION ON * TO user を使用してください。これらの権限を付与できるようにするには、設定ファイルで named_collection_admin が必要です(以前は named_collection_control という名前であり、エイリアスとして残ります)。#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 内に位置指定カラムを作成するプロジェクション(例: projection p (select * order by 1, 4))があり、これはテーブルの PK では許可されず、挿入/マージ時にクラッシュを引き起こす可能性があります。アップデートの前に、そのようなプロジェクションは削除してください。#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> セクションの暗号化コーデックを使用して暗号化されます。 #50986 (Roman Vasin).
  • Grace Hash Join アルゴリズムが FULL JOIN および RIGHT JOIN にも適用可能になりました。#49483#51013lgbo)。
  • よりグレースフルに終了できるよう、SYSTEM STOP LISTEN クエリを追加しました。#47972 をクローズします。#51016Nikolay Degterinsky)。
  • input_format_csv_allow_variable_number_of_columns オプションを追加しました。 #51273 (Dmitry Kardymon).
  • もう一つ地味な機能として、Spark や MySQL と同様に substring_index 関数を追加しました。 #51472 (李扬)。
  • jemalloc のビンごとの統計情報を表示するためのシステムテーブル jemalloc_bins を追加しました。例: SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10。ぜひ活用してください。 #51674 (Alexander Gololobov)。
  • 各カラムの前に、そのカラムのデフォルト値を使用するかどうかを示すフラグ用の追加バイトを挿入する RowBinaryWithDefaults フォーマットを追加。 #50854 をクローズ。 #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 ヘッダーにピークメモリ使用量の統計情報を追加しました。 #51946 (Dmitry Kardymon).
  • 文字列内の部分列を検索するための新しい hasSubsequence 関数(CaseInsensitive および UTF8 バージョンを含む)を追加しました。 #52050 (Dmitry Kardymon).
  • PostgreSQL 互換性のために groupArray のエイリアスとして array_agg を追加しました。#52100 をクローズ。### ユーザー向け変更に関するドキュメント項目。#52135 (flynn).
  • 集約関数 any の互換性エイリアスとして any_value を追加しました。#52140 をクローズします。#52147flynn)。
  • BigQuery との互換性を持たせるために、集約関数 array_concat_agg を追加しました。これは groupArrayArray のエイリアスです。 #52139 をクローズ。 #52149flynn)。
  • length 関数の別名として OCTET_LENGTH を追加し、#52153 をクローズ。#52176FFFFFFFHHHHHHH)。
  • 複数行文字列から最初の行を抽出する firstLine 関数を追加しました。これにより#51172 が解決されました。#52209Mikhail Koviazin)。
  • Interval データ型に対して KQL スタイルのフォーマットを実装しました。これは Kusto クエリ言語との互換性のためにのみ必要です。 #45671 (ltrk2)。
  • クエリ SYSTEM FLUSH ASYNC INSERT QUEUE を追加し、保留中のすべての非同期挿入を宛先テーブルにフラッシュできるようにしました。サーバー側設定 async_insert_queue_flush_on_shutdown(デフォルトは true)を追加し、グレースフルシャットダウン時に非同期挿入キューをフラッシュするかどうかを制御できるようにしました。async_insert_threads 設定はサーバー側設定になりました。 #49160 (Anton Popov)。
  • PostgreSQL 互換性のために、current_database のエイリアスと新しい関数 current_schemas を追加しました。 #51076 (Pedro Riera)。
  • 関数 today(別名 curdate / current_date)および now(別名 current_timestamp)にエイリアスを追加しました。 #52106 (Lloyd-Pottiger).
  • 非同期挿入で async_deduplication_token をサポートするようになりました。 #52136 (Han Fei).
  • URL エンジンで URI のパス部分のエンコード/デコードを無効化できる新しい設定 disable_url_encoding を追加しました。 #52337 (Kruglov Pavel)。

パフォーマンスの向上

  • デフォルトでスパースシリアル化形式を自動的に選択するようにします。これによりパフォーマンスが向上します。この形式はバージョン 22.1 以降でサポートされています。この変更の後、22.1 より古いバージョンへのダウングレードができない場合があります。ダウングレードには ratio_of_defaults_for_sparse_serialization=0.9375 を設定する必要がある場合があります 55153。MergeTree テーブルに対して ratio_of_defaults_for_sparse_serialization = 1 の設定を行うことで、スパースシリアル化形式の使用を無効にできます。#49631Alexey Milovidov)。
  • move_all_conditions_to_prewhereenable_multiple_prewhere_read_steps の設定をデフォルトで有効化しました。 #46365 (Alexander Gololobov).
  • メモリアロケータを調整することで、一部のクエリのパフォーマンスを向上させます。 #46416 (Azat Khuzhin).
  • MergeTreeReadPool と同様に、MergeTreePrefetchedReadPool でも固定サイズのタスクを使用するようにしました。また、今後は S3 リクエストにもコネクションプールを使用します。 #49732 (Nikita Taranov).
  • 結合の右側へのプッシュダウンを拡張。#50532 (Nikita Taranov)。
  • ハッシュテーブルのサイズを事前に確保して grace_hash join を改善(再投稿)。 #50875 (lgbo)。
  • OpenedFileCache 内でのロック待ちが、場合によっては目に見えて遅延として現れることがあります。このロック競合を避けるため、複数のサブマップ(それぞれが独自のロックを持つ)にシャーディングしました。 #51341 (Nikita Taranov)。
  • 主キー列を含む条件は、PREWHERE チェーンの末尾に移動します。これは、主キー列を含む条件は主キー解析に利用される可能性が高く、PREWHERE での追加的なフィルタリング効果は小さいと考えられるためです。 #51958 (Alexander Gololobov)。
  • String 型に対する COUNT(DISTINCT) を、SipHash をインライン展開することで高速化しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上で OnTime を用いて行った性能実験では、この変更によりクエリ Q8 の QPS が 11.6% 向上し、他のクエリには影響しないことが確認されました。 #52036 (Zhiguo Zhou).
  • デフォルトで allow_vertical_merges_from_compact_to_wide_parts を有効にしました。これにより、マージ処理中のメモリ使用量が削減されます。 #52295 (Alexey Milovidov)。
  • プライマリキーを無効にしてしまう誤ったプロジェクション解析を修正しました。この問題は query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1 の場合にのみ発生します。この修正により #48823 が解決されます。また、#51173 も解決されます。#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 句に含まれるカラムのサイズのみが考慮されます。そうでない場合は、クエリ内のすべてのカラムが考慮されます。 #52606 (Nikita Taranov)。

改善点

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

実験的機能

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

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

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

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

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

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

後方互換性のない変更

  • fs キャッシュから do_not_evict_index_and_mark_files 機能を削除しました。この機能はかえって状況を悪化させるだけでした。#51253 (Kseniia Sumarokova).
  • 実験的機能である LIVE VIEW に対する ALTER のサポートを削除しました。#51287 (Alexey Milovidov).
  • http_max_field_value_sizehttp_max_field_name_size のデフォルト値を 128 KiB に引き下げました。#51163 (Mikhail f. Shiryaev).
  • CPU に関連する CGroups メトリクスを 1 つのメトリクス CGroupMaxCPU に統合し、使いやすさを向上させました。Normalized CPU 使用率メトリクスは、制限が設定されている場合には総 CPU 数ではなく CGroups の制限値に対して正規化されるようになります。これにより #50836 が解決されます。#50835 (Alexey Milovidov).

新機能

  • 関数 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 互換ポート経由でクライアントが接続されている場合に、SHOW COLUMNS SQL ステートメントを変更して MySQL 相当の型を表示するための新しい設定 use_mysql_types_in_show_columns を追加しました。#49577Thomas Panetti)。
  • clickhouse-client"--host""--port""--user" などの代わりに接続文字列で呼び出せるようになりました。#50689Alexey Gerasimchuck)。
  • 設定 session_timezone を追加しました。これは、タイムゾーンが明示的に指定されていない場合にセッションのデフォルトタイムゾーンとして使用されます。#44149Andrey Zvonov)。
  • コーデック DEFLATE_QPL は、設定 "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 が解決されるはずです。 #50107 (Alexander Tokmakov).
  • CROSS JOIN に対してフィルタのプッシュダウンを行うようにしました。 #50605 (Han Fei).
  • グローバルオブジェクトの代わりにスレッドローカルな timer_id を使用することで、QueryProfiler 有効時のパフォーマンスを改善しました。 #48778 (Jiebin Sun).
  • CapnProto 入出力フォーマットを書き直し、パフォーマンスを改善しました。カラム名と CapnProto フィールドの対応付けを大文字小文字を区別しないようにし、ネストした構造体フィールドの読み書きを修正しました。 #49752 (Kruglov Pavel).
  • 並列スレッドにおける Parquet の書き込み性能を最適化しました。 #50102 (Hongbin Ma).
  • MATERIALIZED VIEW の処理およびブロックが 1 つだけのストレージに対しては、parallelize_output_from_storages を無効化しました。 #50214 (Azat Khuzhin).
  • PR #46558 をマージしました。ブロックがすでにソートされている場合は、ソート時のブロックの並べ替えを回避します。 #50697 (Alexey MilovidovMaksim Kita).
  • system.zookeeper テーブルからの読み取りを高速化するため、ZooKeeper への複数の list リクエストを並列に実行するようにしました。 #51042 (Alexander Gololobov).
  • タイムゾーン用 DateTime ルックアップテーブルの初期化を高速化しました。これにより、特にデバッグビルドのように重い場合でも、clickhouse-client の起動・接続時間が短縮されるはずです。 #51347 (Alexander Gololobov).
  • 同期的な HEAD リクエストが原因で発生していたデータレイクの低速化を修正しました。(大量のファイルがある Iceberg/Deltalake/Hudi で遅くなる問題に関連します。) #50976 (Kseniia Sumarokova).
  • 右側の GLOBAL JOIN テーブルからすべてのカラムを読み込まないようにしました。 #50721 (Nikolai Kochetov).

実験的機能

  • アナライザで parallel replicas をサポートしました。 #50441 (Raúl Marín).
  • ゼロコピー複製の場合に、レプリカ間で負荷をより均等に分散するため、大規模なマージ/ミューテーションの実行前にランダムなスリープを挿入しました。 #51282 (alesapin).
  • シャードが 1 つしかなく、基盤のテーブルが ReplicatedMergeTree の場合、Replicated データベースを介して ALTER PARTITION クエリおよびミューテーションをレプリケートしないようにしました。 #51049 (Alexander Tokmakov).

改善

  • "too many parts" のしきい値を、より現代的な環境に即した値となるよう緩和しました。長時間実行される INSERT クエリに対するバックプレッシャーを復活させました。 #50856 (Alexey Milovidov).
  • CIDR ::ffff:0:0/96(IPv4 マップドアドレス)に対して、IPv6 アドレスから IPv4 アドレスへのキャストを許可します。#49759Yakov 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).
  • CSV/TSV/CustomSeparated フォーマットにおいて、設定 input_format_csv_skip_trailing_empty_linesinput_format_tsv_skip_trailing_empty_linesinput_format_custom_skip_trailing_empty_lines により末尾の空行をスキップできるようにしました(デフォルトでは無効)。#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" は、一度しか指定できなくなりました。 #50966 (Alexey Gerasimchuck).
  • クラスタ内バックアップの際にパーツの同一性を確認するため、system.partshash_of_all_files を使用します。 #50997Vitaly Baranov)。
  • システムテーブル zookeeper_connectionconnected_time は、接続が確立された時刻(標準フォーマット)を示し、確立された接続セッションの継続時間(秒単位)を示す session_uptime_elapsed_seconds 列が追加されました。 #51026 (郭小龙).
  • file/s3/hdfs/url テーブル関数のプログレスバーを、ソースデータのチャンクサイズを利用し、各スレッドで合計サイズを増分的にカウントすることで改善しました。*Cluster 関数向けのプログレスバーも修正しました。これにより #47250 がクローズされます。#51088Kruglov Pavel)。
  • Progress バーを改善するため、TCP プロトコルの Progress パケットに total_bytes_to_read を追加。 #51158 (Kruglov Pavel).
  • ファイルシステムキャッシュを利用したディスク上のデータパーツのチェックを改善。 #51164 (Anton Popov).
  • fs キャッシュにおいて current_elements_num が正しくない場合がある問題を修正。 #51242 (Kseniia Sumarokova).

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

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

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

  • 実行可能辞書の読み込みステータスを正しく報告するように修正 #48775 (Anton Kozlov).
  • スキップインデックスおよびプロジェクションに対するミューテーションの適切な処理 #50104 (Amos Bird).
  • 可動部分の整理 #50489 (vdimir)。
  • 集約関数における IP 型のハッシュの後方互換性を修正 #50551 (Yakov Olkhovskiy).
  • Log ファミリーテーブルが TRUNCATE 後に誤った行数を返す問題を修正 #50585 (flynn).
  • uniqExact の並列マージ処理におけるバグを修正 #50590 (Nikita Taranov)。
  • 最近の grace hash join の変更をリバート #50699 (vdimir)。
  • クエリキャッシュ: ColumnConst から ColumnVector<char8_t> への不正なキャストを修正 #50704 (Robert Schulze).
  • 未知の操作を含むログを Keeper に保存しないようにしました #50751Antonio Andelic)。
  • DateTime64 に対する SummingMergeTree のサポート #50797 (Jordi Villar)。
  • const でないタイムゾーン用の互換性設定を追加 #50834 (Robert Schulze)。
  • キャッシュエントリ内の LDAP パラメータのハッシュ処理を修正 #50865 (Julian Maicher)。
  • Parquet 形式で、例外を送出する代わりに String から big integer をパースするフォールバックを行うよう変更 #50873 (Kruglov Pavel).
  • バックアップの書き込み中にロックファイルを過剰にチェックしてしまう問題を修正 #50889 (Vitaly Baranov)。
  • read-in-order が有効な場合は projection を適用しないようにしました。 #50923 (Nikolai Kochetov)。
  • Azure Blob Storage イテレータにおけるレースコンディションを修正 #50936 (SmitaRKulkarni)。
  • CreatingSets における sort_description の誤った伝播を修正 #50955 (Nikita Taranov)。
  • Iceberg v2 のオプションメタデータ解析を修正 #50974 (Kseniia Sumarokova).
  • MaterializedMySQL: 空テーブルのオーバーライド時に括弧を保持するようにしました #50977 (Val Doroshchuk).
  • BackupCoordinationStageSync::setError() 内で発生するクラッシュの問題を修正 #51012 (Vitaly Baranov)。
  • ColumnLowCardinality 辞書における copy-on-write の微妙な不具合を修正 #51064 (Michael Kolupaev).
  • 安全な IV の生成 #51086 (Salvatore Mesoraca).
  • サブクエリを含む SELECT に対してクエリキャッシュが正しく機能していなかった問題を修正 #51132 (Robert Schulze).
  • 定数 Nullable 値との比較を行う Set インデックスを修正しました。 #51205 (Nikolai Kochetov).
  • s3 および s3Cluster 関数のクラッシュを修正 #51209 (Nikolay Degterinsky)。
  • コンパイル済みの式で発生するクラッシュを修正 #51231 (LiuNeng).
  • URL 切り替え時の StorageURL における use-after-free を修正 #51260 (Michael Kolupaev)。
  • パラメータ化されたビューのチェックを更新しました #51272 (SmitaRKulkarni)。
  • バックアップへの同一ファイルの複数回書き込みを修正 #51299 (Vitaly Baranov).
  • ActionsDAG で発生する fuzzer の失敗を修正 #51301Alexey Milovidov)。
  • transform 関数から不要な処理を削除 #51350 (Alexey Milovidov).

ClickHouse リリース 23.5, 2023-06-08

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

  • マークとプライマリキーをデフォルトで圧縮します。これによりコールドクエリの処理時間が大幅に短縮されます。アップグレードに関する注意事項: 圧縮されたマークおよびプライマリキーのサポートはバージョン 22.9 で追加されました。圧縮マークまたはプライマリキーを有効にした場合、あるいはそれらがデフォルトで有効になっているバージョン 23.5 以降をインストールした場合、バージョン 22.8 以前へダウングレードすることはできません。また、サーバー設定ファイルの <merge_tree> セクションで compress_marks および compress_primary_key 設定を指定することで、圧縮マークやプライマリキーを明示的に無効化することもできます。アップグレードに関する注意事項: 22.9 より前のバージョンからアップグレードする場合は、すべてのレプリカを一度にアップグレードするか、アップグレード前に圧縮を無効にするか、あるいは圧縮マークがサポートされているもののデフォルトでは有効になっていない中間バージョン (例: 23.3) を経由してアップグレードしてください。#42587 (Alexey Milovidov).
  • ローカルオブジェクトストレージが S3 オブジェクトストレージと一貫して動作するようにし、append に関する問題を修正します (#48465 をクローズ)、さらに独立したストレージとして設定可能にします。この変更は後方互換性がありません。ローカルオブジェクトストレージ上のキャッシュが、以前のバージョンとは互換性がないためです。#48791 (Kseniia Sumarokova).
  • 実験的機能であった「in-memory data parts」は削除されました。データ形式自体は引き続きサポートされますが、関連する設定は no-op (何もしない) となり、代わりに compact または wide パーツが使用されます。これにより #45409 がクローズされます。#49429 (Alexey Milovidov).
  • 設定 parallelize_output_from_storagesinput_format_parquet_preserve_order のデフォルト値を変更しました。これにより、ファイル (例: CSV や Parquet) から読み込む際に ClickHouse が行の順序を並べ替えることが可能になり、多くの場合に性能が大きく向上します。従来の順序維持の動作を復元するには、parallelize_output_from_storages = 0, input_format_parquet_preserve_order = 1 を使用してください。#49479 (Michael Kolupaev).
  • プロジェクションを本番運用レベルにしました。optimize_use_projections 設定を追加し、SELECT クエリに対してプロジェクションを選択するかどうかを制御できるようにしました。設定 allow_experimental_projection_optimization は廃止され、何の効果も持ちません。#49719 (Alexey Milovidov).
  • joinGet を非決定的 (同様に dictGet も) としてマークしました。これにより、追加の設定なしでミューテーション内で使用できるようになります。#49843 (Azat Khuzhin).
  • groupArray の戻り値は Nullable にはなりえない」という変更をリバートしました (Nullable 型上の groupArray / groupArrayLast / groupArraySample に対するバイナリ互換性が壊れ、TOO_LARGE_ARRAY_SIZE または CANNOT_READ_ALL_DATA が発生する可能性が高いため)。#49971 (Azat Khuzhin).
  • 設定 enable_memory_bound_merging_of_aggregation_results がデフォルトで有効になりました。22.12 より前のバージョンからアップデートする場合は、アップデートが完了するまでこのフラグを false に設定することを推奨します。#50319 (Nikita Taranov).

新機能

  • ストレージエンジン AzureBlobStorage と azureBlobStorage テーブル関数を追加しました。サポートされている機能群は、S3 ストレージエンジン/テーブル関数のものと非常によく似ています [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni).
  • ネイティブの ClickHouse Keeper CLI クライアントを追加しました。clickhouse keeper-client として利用できます。#47414pufit
  • 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 をクローズ。#50000Nikolay 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_limitmerges_mutations_memory_usage_to_ram_ratio を導入しています。この上限に達した場合、ClickHouse は新しいマージまたはミューテーションタスクをスケジュールしません。また、バックグラウンドタスクの現在のメモリ使用量を監視できるようにするため、MergesMutationsMemoryTracking メトリクスも導入しました。#46089 の再提出です。#48774 をクローズします。#48787Dmitry Novik)。
  • Function dotProduct が配列でも利用できるようになりました。 #49050 (FFFFFFFHHHHHHH).
  • MySQL との互換性を向上させるため、SHOW INDEX ステートメントのサポートを追加。 #49158 (Robert Schulze).
  • テーブル関数 url に仮想カラム _file および _path のサポートを追加。- テーブル関数 url のエラーメッセージを改善。- #49231 を解決。- #49232 を解決。#49356Ziyi Tan)。
  • users.xml ファイルに grants フィールドを追加し、ユーザーに付与する権限を指定できるようにしました。 #49381 (pufit)。
  • Grace ハッシュ結合アルゴリズムの採用により FULL/RIGHT JOIN をサポートしました。 #49483 (lgbo).
  • WITH FILL 修飾子は、ソートの接頭辞ごとに補間をグループ化します。use_with_fill_by_sorting_prefix 設定によって制御されます(デフォルトで有効)。#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_format_csv_trim_whitespaces オプションを追加しました。 #50215 (Alexey Gerasimchuk).
  • regexp ツリー辞書に対する dictGetAll 関数で、複数のマッチに対応する値を配列として返せるようにしました。 #50254 をクローズしました。 #50255Johann Gan)。
  • 日付または日時を直近の土曜日または日曜日に切り上げるための toLastDayOfWeek 関数を追加しました。 #50315 (Victor Krasnov)。
  • ignore_data_skipping_indices を指定することでスキップインデックスを無視できるように。 #50329 (Boris Kuschel).
  • ユーザー単位のメモリ情報および ProfileEvents を表示するための system.user_processes テーブルと SHOW USER PROCESSES クエリを追加。 #50492 (János Benjamin Antal).
  • テーブル、データベース、テーブル関数、および辞書のシークレットを表示するためのサーバー設定およびフォーマット設定 display_secrets_in_show_and_select を追加。ユーザーがどのシークレットを表示できるかを制御する権限 displaySecretsInShowAndSelect を追加。 #46528 (Mike Kot).
  • DATABASE に属するすべてのテーブルに対して ROW POLICY を設定できるようにしました。 #47640 (Ilya Golshtein).

パフォーマンスの向上

  • マークおよびプライマリキーをデフォルトで圧縮します。これによりコールドクエリの実行時間が大幅に短縮されます。アップグレードに関する注意事項: 圧縮マークおよびプライマリキーのサポートはバージョン 22.9 で追加されました。圧縮マークまたはプライマリキーを有効にした場合、あるいは圧縮マークおよびプライマリキーがデフォルトで有効になっているバージョン 23.5 以降をインストールした場合、バージョン 22.8 以前にダウングレードすることはできません。また、サーバー設定ファイルの <merge_tree> セクションで compress_marks および compress_primary_key 設定を指定することで、圧縮マークまたはプライマリキーを明示的に無効化することもできます。 #42587 (Alexey Milovidov)。
  • 新しい設定 s3_max_inflight_parts_for_one_file は、1 つのファイルの範囲で、マルチパートアップロードリクエストによって同時にアップロードされるパーツ数の上限を設定します。 #49961 (Sema Checherinda)。
  • 複数のファイルから読み出す場合、各ファイルに対する並列パース用スレッド数を減らします。 #42192 を解決します。 #46661SmitaRKulkarni)。
  • 通常の読み取りよりも少ない granule を読み取れる場合にのみ、集約プロジェクションを使用してください。クエリがテーブルの主キーにはヒットするが、プロジェクションにはヒットしない場合に役立ちます。 #49150 を修正。 #49417Nikolai Kochetov)。
  • 何も挿入されない場合は、ANY ハッシュ結合でブロックを保持しないようにしました。 #48633 (vdimir)。
  • JIT コンパイル時の集約コンビネータ -If の不具合を修正し、集約関数に対する JIT コンパイルを有効化しました。#48120 をクローズ。#49083Igor Nikonov)。
  • リモートテーブルからの読み取りでは、タスクスティーリングが機能するように、(パート全体を読むのではなく)より小さなタスクを使用します。* タスクサイズは読み取るカラムのサイズによって決定されます * S3 から読み取る際には常に 1MB のバッファを使用します * キャッシュセグメントの境界は 1MB に揃えられているため、小さなタスクでも十分なサイズとなり、断片化も防げるはずです。 #49287 (Nikita 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 はメモリ使用量が従来比で約 1/2.6 になり、約 2 倍高速になりました)。 #49380 (Azat Khuzhin).
  • system.query_log および system.query_thread_log テーブルに対して、適切な場合には LowCardinality を適用して最適化しました。これにより、これらのテーブルに対するクエリがより高速になります。 #49530 (Alexey Milovidov)。
  • ローカルの Parquet ファイルを読み込む際のパフォーマンスが、並列読み込みにより向上しました。 #49539 (Michael Kolupaev)。
  • 特定のシナリオ、特に小さい左テーブルと大きい右テーブルを結合する場合に、RIGHT/FULL JOIN のパフォーマンスを最大 2 倍まで向上しました。 #49585 (lgbo).
  • Rust で LTO を有効にすることで、BLAKE3 の性能を 11% 向上させました。 #49600 (Azat Khuzhin)。これにより、C++ と同等の性能になりました。
  • system.opentelemetry_span_log の構造を最適化しました。適切な箇所では LowCardinality を使用するようにしました。このテーブルは全般的にあまり良い設計ではなく(よく使われる属性に対しても Map 型を使用しています)が、多少はマシになります。#49647Alexey Milovidov)。
  • grace_hash 結合でハッシュテーブルのサイズを事前に予約するようにしました。 #49816 (lgbo)。
  • uniqExactIf 状態の並列マージに対応。#49885 をクローズ。#50285flynn)。
  • Keeper の改良: Keeper に CheckNotExists リクエストを追加し、Replicated テーブルのパフォーマンスを向上させました。 #48897 (Antonio Andelic).
  • Keeper のパフォーマンスを改善: 処理中に同一リクエストを 2 回シリアライズしないようにし、大きなリクエストのデシリアライズ結果をキャッシュするようにしました。新しい coordination 設定 min_request_size_for_cache で制御されます。 #49004 (Antonio Andelic)。
  • マージ対象のパーツを選択する際、多くのパーティションにマージ対象が存在しない場合に発生する ZooKeeper の List リクエスト数を削減しました。 #49637 (Alexander Tokmakov).
  • FS キャッシュのロック処理を再設計 #44985 (Kseniia Sumarokova)。
  • 自明な COUNT 最適化が可能な場合は pure parallel replicas を無効化。 #50594 (Raúl Marín).
  • Iceberg スキーマ推論において、すべてのキーに対して HEAD リクエストを送信せず、データの読み取りに使用されるキーに対してのみ送信するようにしました。 #50203 (Kruglov Pavel).
  • enable_memory_bound_merging_of_aggregation_results はデフォルトで有効です。 #50319 (Nikita Taranov).

実験的機能

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

改善

  • BACKUP コマンドは、バックアップ作成時に暗号化ディスク上のデータを復号しません。代わりに、データはバックアップ内に暗号化されたまま保存されます。そのようなバックアップは、同じ(またはそれを拡張した)暗号化キーのリストを持つ暗号化ディスクにのみ復元できます。 #48896 (Vitaly Baranov).
  • ATTACH PARTITION FROM および REPLACE PARTITION FROM の FROM 句で一時テーブルを使用できるようになりました。 #49436 (Roman Vasin).
  • MergeTree テーブル向けに async_insert 設定を追加しました。これはクエリレベルの async_insert 設定と同じ意味を持ち、特定のテーブルに対して非同期インサートを有効にします。注意: clickhouse-client からの INSERT クエリには適用されないため、その場合はクエリレベルの設定を使用してください。#49122Anton Popov)。
  • クオータ作成ステートメントのパラメータでサイズ接尾辞をサポートしました。 #49087 (Eridanus).
  • first_valuelast_value が NULL を受け付けるように拡張。 #46467 (lgbo)。
  • extractKeyValuePairs のエイリアスとして str_to_mapmapFromString を追加し、https://github.com/clickhouse/clickhouse/issues/47185 をクローズ。 #49466 (flynn).
  • メモリ使用量および利用可能量に関する非同期メトリクス向けに CGroup バージョン 2 への対応を追加しました。これにより #37983 がクローズされました。#45999sichenzhao)。
  • Cluster テーブル関数は、利用不能なシャードを常にスキップするようにしました。 #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 をクローズできる可能性があります。 #48932 (wangxiaobo).
  • MongoDB に Array データ型を追加し、#48598 をクローズ。 #48983Nikolay Degterinsky)。
  • テーブルへの Interval データ型の保存をサポートしました。 #49085 (larryluogit).
  • 明示的なウィンドウフレームの定義がなくても ntile ウィンドウ関数を使用できるようにしました: ntile(3) OVER (ORDER BY a)#46763 をクローズしました。 #49093vdimir)。
  • 多くの未完了の mutation が既に存在するテーブルに対して、mutation を生成する ALTER クエリ(ALTER UPDATEALTER DELETEALTER MODIFY COLUMN など)を遅延させる、またはスローするための設定(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 辞書の接続オプションを有効にしました。例: 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_sizeoutdated_part_loading_thread_pool_queue_size の各設定によって制御されます。 #49317Nikita Mikhaylov)。
  • ブロック間で辞書を共有している場合、LowCardinality カラムの処理済みデータのサイズを過大評価しないようにしました。これにより #49322 がクローズされました。あわせて #48745 も参照してください。 #49323Alexey Milovidov)。
  • Parquet writer は、OUTFILE 経由で呼び出された場合に、妥当な 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 にアタッチ。#49527Dmitry Novik)。
  • クエリ内で同じクエリパラメータが複数回使用されている場合のパラメータ付きビューの動作を修正。 #49556 (Azat Khuzhin).
  • クエリコンテキスト内で直近に送信されたProfileEventsスナップショットに割り当てられたメモリを解放する。フォローアップ #47564#49561Dmitry Novik)。
  • 関数「makeDate」に、MySQL 互換のオーバーロード(year と 年内通算日 を引数に取るもの)が追加されました。 #49603 (Robert Schulze).
  • RegExpTreeDictionarydictionary テーブル関数をサポートしました。 #49666 (Han Fei).
  • 重み付きフェアな IO スケジューリングポリシーを追加しました。サーバーを再起動することなく、実行時に IO スケジューリング階層を更新できる動的リソースマネージャーを追加しました。 #49671 (Sergei Trifonov).
  • GCS へのマルチパートアップロード後に compose リクエストを追加しました。これにより、マルチパートアップロードでアップロードされたオブジェクトに対してコピー操作を使用できるようになります。異なるサイズのパートから作成されたオブジェクトでは compose リクエストが失敗する可能性があるため、s3_strict_upload_part_size を何らかの値に設定することを推奨します。#49693 (Antonio Andelic)。
  • extractKeyValuePairs 関数について: 「ベストエフォート」なパースロジックを改善し、key_value_delimiter を値の有効な一部として扱えるようにしました。これにより分岐が単純化され、処理がわずかに高速になる可能性もあります。 #49760 (Arthur Passos).
  • system.processors_profile_loginitial_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 ファイルから辞書と関数を読み込めるようになりました。以前のバージョンでは、設定ファイル内の dictionaries_config または user_defined_executable_functions_config を編集する必要がありました。これらは *.xml ファイルを前提としていたためです。 #49812 (Alexey Milovidov).
  • Kafka テーブルエンジンでエイリアス列が使用可能になりました。 #49824 (Aleksandr Musorin).
  • extractKeyValuePairs によって生成されるペアの最大数を制限する設定を追加しました。これはメモリの過剰消費を防ぐための安全策です。 #49836 (Arthur Passos).
  • IN 演算子の引数が要素数 1 のタプルであるという、やや特殊なケースをサポートしました。 #49844 (MikhailBurdukov).
  • bitHammingDistance 関数が String および FixedString データ型をサポートするようになりました。#48827 をクローズしました。 #49858 (flynn)。
  • OS X 上のクライアントでのタイムアウトリセットエラーを修正。 #49863 (alekar).
  • bitCount 関数で UInt128、Int128、UInt256、Int256 などの大きな整数型をサポートしました。これにより、大きなビットマスクに対するハミング距離を AI アプリケーション向けに計算できるようになります。 #49867 (Alexey Milovidov).
  • 暗号化ディスクでキー ID の代わりに使用するフィンガープリント。これにより暗号化ディスクの構成が簡素化されます。 #49882 (Vitaly Baranov).
  • PostgreSQL に UUID データ型を追加し、#49739 をクローズ。 #49894Nikolay Degterinsky)。
  • 関数 toUnixTimestampDate および Date32 を引数として受け取れるようになりました。 #49989 (Victor Krasnov).
  • 辞書ではサーバーメモリのみを課金対象とするようにしました。 #49995 (Azat Khuzhin).
  • サーバーでは、MySQL 互換性のために SQL_AUTO_IS_NULL などの SQL_* 設定を no-op(効果を持たない設定)として扱えるようになります。これにより #49927 が解決されます。#50013Alexey 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 設定を追加しました。クラスタとしての compute group は、他の compute group からは見えません。 #50186 (Yangkuan Liu).
  • LIMIT n を指定できるにもかかわらず PostgreSQL が全てのデータを読み込んでしまう問題を修正しました。 #50187 (Kseniia Sumarokova).
  • サブクエリを含むクエリ向けに新しいプロファイルイベント(QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries)を追加しました。#50204 (Azat Khuzhin)。
  • users.xml ファイルに roles フィールドを追加し、設定ファイルから GRANT を伴うロールを指定できるようにしました。 #50278 (pufit)。
  • 非同期メトリクスで CGroupCpuCfsPeriodCGroupCpuCfsQuota を報告するようにしました。- サーバー起動時に cgroup v2 のメモリ制限を考慮するようにしました。 #50379 (alekar)。
  • SIGINT と同様に動作するよう SIGQUIT 用のシグナルハンドラを追加しました。#50298 をクローズします。#50435Nikolay Degterinsky)。
  • JSON のパースがオブジェクトのサイズが大きすぎるために失敗した場合、デバッグできるように最後に処理した位置を出力するようにしました。 #50474 (Valentin Alexeev).
  • 可変長の Decimal をサポートしました。Closes #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&#95;UTILS=1" を明示的に指定した場合にのみビルドされるようになりました。これにより、典型的な開発ビルドにおけるリンク時間が短縮されます。 #49620 (Robert Schulze).
  • 将来の誤削除を避けるため、idxd-config のビルド定義を別の CMake ファイルに切り出しました。 #49651 (jasperzhu)。
  • master ブランチで有効になっている analyzer を使用する CI チェックを追加。フォローアップ #49562#49668Dmitry Novik)。
  • LLVM/clang 16 に切り替え。 #49678 (Azat Khuzhin).
  • ClickHouse を clang-17 でビルドできるようにしました。 #49851 (Alexey Milovidov). #50410 (Alexey Milovidov).
  • ClickHouse は、他の CMake プロジェクトに統合しやすくなりました。 #49991 (Amos Bird). (ただし、そのような統合は強く非推奨です - Alexey Milovidov)。
  • #47151 の後に発生する、余分な QEMU ログ出力が行われる問題を修正します。詳細は https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless_tests__release__databasereplicated__[3_4].html を参照してください。#50442Mikhail f. Shiryaev)。
  • ClickHouse は Linux RISC-V カーネル 6.1.22 上で動作するようになりました。これにより #50456 がクローズされました。 #50457 (Alexey Milovidov)。
  • 内部で使用している protobuf を v3.18 に更新(誤検知された CVE-2022-1941 を修正)。 #50400 (Robert Schulze).
  • 内部で使用している libxml2 を v2.10.4 に更新(誤って報告された CVE-2023-28484 および CVE-2023-29469 を解消)。#50402 (Robert Schulze)。
  • c-ares を v1.19.1 に更新(誤検知と判定された CVE-2023-32067、CVE-2023-31130、CVE-2023-31147)。 #50403 (Robert Schulze)。
  • libgsasl における誤って報告されていた CVE-2022-2469 を修正。 #50404 (Robert Schulze).

バグ修正(公式安定版リリースでユーザーから見て明らかな不具合)

  • ActionsDAG: 誤った最適化の問題を修正 #47584 (Salvatore Mesoraca)。
  • Keeper での並行スナップショットを正しく処理するようにしました #48466 (Antonio Andelic)。
  • MergeTreeMarksLoader が DataPartStorage の代わりに DataPart を保持するように変更されました #48515 (SmitaRKulkarni).
  • シーケンス状態を修正 #48603 (Ilya Golshtein)。
  • 以前の失敗時におけるバックアップ/リストアの同時実行チェック #48726 (SmitaRKulkarni).
  • 存在しない ZooKeeper パスのテーブルをアタッチしても ReadonlyReplica メトリクスが増加しない問題を修正 #48954 (wangxiaobo)。
  • 一部の箇所で、捕捉されない例外に対して std::terminate が呼び出されてしまう可能性があった問題を修正 #49112 (Kruglov Pavel)。
  • 複数の StorageJoin を含むクエリで発生していたキーが見つからないエラーを修正 #49137 (vdimir)。
  • nullable な primary key 使用時に誤ったクエリ結果が返される問題を修正 #49172 (Duc Canh Le)。
  • ビッグエンディアン環境での reinterpretAs*() の動作を修正 #49198Suzy Wang)。
  • (実験的ゼロコピー レプリケーション)ゼロコピーのパーツのロックをよりアトミックに行う #49211 (alesapin).
  • Outdated parts の読み込み時に発生するレースコンディションを修正 #49223 (Alexander Tokmakov)。
  • すべてのキー値が null の場合に、GROUP BY で ROLLUP を使用すると誤った結果が返される問題を修正 #49282 (Shuai li).
  • SHARDS を使用する HASHED 辞書の load_factor の計算を修正 #49319 (Azat Khuzhin)。
  • エイリアス列に圧縮 CODEC を設定できないようにしました #49363 (Timur Solodovnikov).
  • 既存のパートディレクトリを削除する処理におけるバグを修正 #49365 (alesapin)。
  • HMAC 使用時の GCS の挙動を正しく修正 #49390 (Antonio Andelic).
  • remote() からの読み取り時にサブクエリセットが構築されないファジング関連のバグを修正 #49425Alexander Gololobov)。
  • shutdown_wait_unfinished_queries 設定を反転 #49427 (Konstantin Bogdanov)。
  • (実験的 zero-copy レプリケーション) 別の zero-copy バグを修正 #49473 (alesapin)。
  • PostgreSQL データベース設定を修正 #49481 (Mal Curtis)。
  • s3Cluster の引数を正しく処理するように修正 #49490 (Antonio Andelic)。
  • TraceCollector のデストラクタ内のバグを修正。 #49508 (Yakov Olkhovskiy).
  • 短いシーク時に動作しなくなる AsynchronousReadIndirectBufferFromRemoteFS の問題を修正 #49525 (Michael Kolupaev)。
  • 辞書の読み込み順序を修正 #49560 (Alexander Tokmakov).
  • Object('json') 列のデータ型を変更できないようにしました #49563Nikolay Degterinsky)。
  • ストレステストの不具合を修正 (Logical error: Expected 7134 >= 11030) #49623 (Kseniia Sumarokova).
  • DISTINCT のバグを修正 #49628Alexey Milovidov)。
  • 修正:ソートされていない列に 0 値が含まれる場合の ORDER 句での DISTINCT の挙動 #49636 (Igor Nikonov)。
  • fuzzer を用いた UBSan により検出された大きな整数のオフバイワンエラーを修正 #49645 (Alexey Milovidov)。
  • 再起動後の sparse columns からの読み取り処理を修正 #49660 (Anton Popov)。
  • fibers 使用時の SpanHolder::finish() 内の assert を修正 #49673 (Kruglov Pavel)。
  • 疎な引数を取る短絡評価関数およびミューテーションを修正 #49716 (Anton Popov).
  • インクリメンタルバックアップに追記されるファイルの書き込み処理を修正 #49725 (Vitaly Baranov).
  • Object 型カラムを含むテーブルで lightweight delete mutation を実行した際に発生していた "There is no physical column _row_exists in table" エラーを修正しました。 #49737 (Alexander Gololobov).
  • randomStringUTF8(uneven number)における msan の問題を修正 #49750 (Robert Schulze)。
  • 集約関数 kolmogorovSmirnovTest を修正 #49768 (FFFFFFFHHHHHHH)。
  • ネイティブプロトコルにおける設定エイリアスを修正 #49776 (Azat Khuzhin).
  • 単一要素のタプル配列に対する arrayMap を修正 #49789 (Anton Popov).
  • クエリ単位の I/O およびバックアップのスロットリング設定を修正 #49797 (Azat Khuzhin)。
  • プロファイル定義での NULL の設定を修正 #49831Vitaly 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 を修正しました #49930Aleksandr Musorin)。
  • protobuf における IPv6 のエンコードを修正 #49933 (Yakov Olkhovskiy)。
  • テキストフォーマットにおける Nullable の誤ったパースに起因する可能性のある論理エラーを修正 #49960 (Kruglov Pavel)。
  • より互換性の高い Parquet ファイルを生成できるようにするため、setting output_format_parquet_compliant_nested_types を追加しました #50001 (Michael Kolupaev)。
  • ストレステスト「Not enough space to add ...」の論理エラーを修正 #50021 (Kseniia Sumarokova)。
  • ReplicatedMergeTree の attach スレッドでのテーブル起動時に発生するデッドロックを回避 #50026Antonio Andelic)。
  • fibers 使用時の SpanHolder::finish() のアサートを修正(試行 2) #50034 (Kruglov Pavel)。
  • DDL における OpenTelemetry コンテキストのシリアライゼーションに対して適切なエスケープ処理を追加 #50045 (Azat Khuzhin)。
  • 壊れたプロジェクションパーツの報告処理を修正 #50052 (Amos Bird).
  • JIT コンパイル時の != NaN の不具合修正 #50056 (Maksim Kita)
  • 引数なしの Replicated データベースの場合に発生するクラッシュを修正 #50058 (Azat Khuzhin).
  • multiIf と定数条件および nullable 引数の組み合わせで発生するクラッシュを修正 #50123 (Anton Popov).
  • 日付関連キーに対する無効なインデックス解析を修正 #50153 (Amos Bird)。
  • ORDER BY 列が存在しない場合は ORDER BY 句を変更できないようにしました #50154 (Han Fei).
  • バイナリ演算子に null の定数引数が含まれている場合にインデックス解析が壊れていた問題を修正 #50177 (Amos Bird)。
  • clickhouse-client: --query--queries-file の同時使用を禁止 #50210 (Alexey Gerasimchuk).
  • INTO OUTFILE 拡張(APPEND / STDOUT)および WATCH EVENTS における未定義動作(UB)を修正 #50216 (Azat Khuzhin)。
  • CustomSeparatedIgnoreSpaces フォーマットで行末の空白がスキップされる問題を修正 #50224 (Kruglov Pavel)。
  • Iceberg メタデータの解析を修正 #50232 (Kseniia Sumarokova)。
  • WITH 句内の入れ子になった分散 SELECT を修正 #50234 (Azat Khuzhin).
  • Keyed SipHash における MSan の問題を修正 #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() が呼び出されたときにクラッシュが発生する問題を修正 #50334Val 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 ステートメントを追加しました。#48017Robert Schulze)。
  • SYSTEM SYNC REPLICA クエリに LIGHTWEIGHT および PULL 修飾子を追加しました。LIGHTWEIGHT バージョンはフェッチと drop-range のみを待機し(マージおよびミューテーションは無視します)、PULL バージョンは ZooKeeper から新しいエントリを取得しますが、その完了は待機しません。#47794 を修正しました。#48085Alexander Tokmakov)。
  • Kafka の DefaultPartitioner との互換性を持たせるために kafkaMurmurHash 関数を追加。#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李扬)。
  • PrettyJSONEachRow フォーマットを追加し、改行区切りかつ 4 スペースインデントの整形済み JSON を出力できるようにしました。 #48898 (Kruglov Pavel).
  • Parquet ファイルのメタデータを読み取るための ParquetMetadata 入力フォーマットを追加しました。 #48911 (Kruglov Pavel).
  • 文字列からキーと値のペアを抽出するための extractKeyValuePairs 関数を追加しました。入力文字列にはノイズが含まれていてもかまわず(例: ログファイル / キーと値のペア形式で 100% 整形されている必要はありません)、アルゴリズムは関数に渡された引数に一致するキーと値のペアを探します。現時点では、この関数は次の引数を受け取ります: data_column(必須)、key_value_pair_delimiter(デフォルトは :)、pair_delimiters(デフォルトは \space \, \;)、および quoting_character(デフォルトは二重引用符)。 #43606Arthur Passos)。
  • 関数 replaceOne()、replaceAll()、replaceRegexpOne() および replaceRegexpAll() は、非定数のパターンおよび置換引数でも呼び出せるようになりました。#46589Robert 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 のセットがメモリ内に構築されます。パーツが多い場合、これによって大量のメモリと CPU を消費し(OOM を引き起こす可能性もあります)、負荷が高くなります。この問題への解決策として、現在 mutation タスクによって構築中のセットを短期間だけ保持するキャッシュを導入しました。同じ mutation の別のタスクが並行して実行されている場合は、そのキャッシュ内のセットを検索し、構築完了を待って再利用できます。#46835 (Alexander Gololobov).
  • ALTER TABLE クエリを適用する際、必要な場合にのみ依存関係をチェックするようにしました。#48062 (Raúl Marín).
  • 関数 mapUpdate を最適化しました。#48118 (Anton Popov).
  • ローカルレプリカへの内部クエリは、明示的に送信され、その結果のデータはループバックインターフェイス経由で受信されるようになりました。設定 prefer_localhost_replica は並列レプリカに対しては適用されません。これはスケジューリングを改善し、コードをよりクリーンにするための変更です。イニシエータは読み取りプロセスの調整と結果のマージのみを担当し、他のすべての副次クエリはデータの読み取りを行い、その間イニシエータはリクエストに継続的に応答します。注: ループバックインターフェイスの使用は必ずしも高パフォーマンスではありませんが、そうしないと一部のレプリカがタスク不足で待たされ、結果としてクエリ実行のさらなる遅延や利用可能なリソースを使い切れない状況につながる可能性があります。コーディネータの初期化はさらに遅延実行されるようになりました。すべての受信リクエストには読み取りアルゴリズムに関する情報が含まれており、最初のリクエスト到着時にその情報を用いてコーディネータを初期化します。もし任意のレプリカが別のアルゴリズムで読み取りを行うことを決定した場合は、例外がスローされ、クエリは中止されます。#48246 (Nikita Mikhaylov).
  • use_skip_indexes=0 の設定によりスキップインデックスが無効化されている場合、スキップインデックスの解析のみに使用される IN 句右辺のサブクエリに対しては、セットを構築しないようにしました。以前はこれがクエリのパフォーマンスに悪影響を与える可能性がありました。#48299 (Anton Popov).
  • FROM file(...) を読み込んだ直後からクエリ処理を並列化するようにしました。#38755 に関連します。#48525 (Igor Nikonov). クエリ処理は、任意のデータソースから読み込んだ直後から並列化されます。影響を受けるデータソースは、主に 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).
  • クエリキャッシュでユーザーごとのクオータを定義できるようになりました。 #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).
  • ソケットへの非同期接続と非同期書き込みを追加しました。シャード間での接続確立およびクエリ/外部テーブルの送信を非同期化しました。コードを fiber を用いてリファクタリングしました。#46931 をクローズします。この PR の後、デフォルトの connect_timeout_with_failover_ms を増やすことが可能になります(https://github.com/ClickHouse/ClickHouse/issues/5188)。#47229Kruglov Pavel)。
  • zookeeper の代替として、設定セクション keeper / keeper_server をサポートしました。 #34766#34767 をクローズ。 #35113李扬)。
  • ClickHouse テーブルをソースとする辞書に対して、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).
  • クエリが kill された場合や制限を超えた場合には、Keeper への接続を再試行し続けないようにしました。 #47985 (Raúl Marín).
  • BSONEachRow で Enum 型の入出力をサポートし、すべてのマップキー型を許可し、出力時の余分な計算を回避します。 #48122 (Kruglov Pavel).
  • ORC/Arrow/Parquet フォーマットで、より多くの ClickHouse データ型をサポートしました: Enum(8|16)、(U)Int(128|256)、Decimal256(ORC 用)。また、Int32 値から IPv4 を読み取れるようにしました(ORC は IPv4 を Int32 として出力しており、これまでは読み戻せませんでした)。さらに、ORC におけるバイナリデータからの Nullable(IPv6) の読み取りを修正しました。 #48126 (Kruglov Pavel).
  • テーブル system.storage_policies に列 perform_ttl_move_on_insertload_balancing を追加し、列 volume_type のデータ型を Enum8 に変更しました。 #48167 (lizhuoyu5)。
  • 一時テーブルやシステムテーブルも含め、すべてのテーブルおよびデータベースをバックアップする BACKUP ALL コマンドのサポートを追加しました。#48189 (Vitaly Baranov)。
  • 関数 mapFromArrays は、入力として Map 型をサポートします。 #48207 (李扬)。
  • 一部の SHOW PROCESSLIST の出力がソートされるようになりました。 #48241 (Robert Schulze).
  • リモート IO/ローカル IO/バックアップに対するクエリ単位/サーバー単位の帯域幅制限(サーバー設定: max_remote_read_network_bandwidth_for_server, max_remote_write_network_bandwidth_for_server, max_local_read_bandwidth_for_server, max_local_write_bandwidth_for_server, max_backup_bandwidth_for_server、設定: max_remote_read_network_bandwidth, max_remote_write_network_bandwidth, max_local_read_bandwidth, max_local_write_bandwidth, max_backup_bandwidth)。 #48242Azat Khuzhin)。
  • CapnProto フォーマットでサポートする型を拡張: Map、(U)Int(128|256)、Decimal(128|256)。入出力時の整数の相互変換を許可。 #48257 (Kruglov Pavel)。
  • 通常の挙動では CURRENT_WRITE_BUFFER_IS_EXHAUSTED 例外をスローしないようにしました。 #48288 (Raúl Marín).
  • KeeperMap テーブル上で行われる操作に対して追加の保証を強制する新しい設定 keeper_map_strict_mode を追加しました。#48293Antonio Andelic)。
  • シンプルディクショナリの主キー型がネイティブの符号なし整数型であることを検証するための設定 check_dictionary_primary_key を、互換性のために追加しました(チェックを無効にするには check_dictionary_primary_key = false を設定します)。 #48335 (lizhuoyu5).
  • KeeperMap に対する mutation は不要なため、レプリケートしないようにしました。 #48354 (Antonio Andelic).
  • 無名タプルを Protobuf 形式内のネストされた Message として読み書きできるようにしました。タプル要素と Message フィールドは位置で対応付けられます。 #48390 (Kruglov Pavel).
  • 新しいプランナーで additional_table_filters および additional_result_filter の設定をサポートします。また、additional_result_filter のドキュメントエントリを追加します。 #48405 (Dmitry Novik)。
  • parseDateTime は、フォーマット文字列 '%f'(小数秒)に対応しました。 #48420 (Robert Schulze).
  • formatDateTime() におけるフォーマット文字列 "%f" は、フォーマット対象に小数秒部がない場合、現在は "000000" を出力します。以前の挙動(ゼロ 1 桁)を復元するには、設定 "formatdatetime_f_prints_single_zero = 1" を有効にしてください。 #48422 (Robert Schulze).
  • KeeperMap では DELETE と TRUNCATE をレプリケートしないようにしました。 #48434 (Antonio Andelic).
  • generateRandom 関数で有効な Decimal 型および Bool 型の値を生成するようにしました。 #48436 (Kruglov Pavel)。
  • SELECT クエリの式リストで末尾のカンマを許可するようにしました。たとえば SELECT a, b, c, FROM table のように記述できます。#37802 をクローズしました。 #48438Nikolay Degterinsky)。
  • 環境変数 CLICKHOUSE_USER および CLICKHOUSE_PASSWORD を、クライアントパラメータ --user および --password で上書きできるようにしました。#38909 をクローズ。#48440Nikolay Degterinsky)。
  • 再試行可能なエラーが発生した場合に MergeTree テーブルでデータパーツの読み込みを再試行するようにしました。 #48442 (Anton Popov)。
  • arrayMinarrayMaxarrayDifference 関数で DateDate32DateTimeDateTime64 データ型をサポートしました。 #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 でスキーマ推論が機能するようにした。Closes #47599. #48679 (flynn).
  • ReplicatedMergeTreereplicated_max_mutations_in_one_entry 設定を追加し、1 つの MUTATE_PART エントリあたりの mutation コマンド数に上限を設けられるようにしました(デフォルトは 10000)。 #48731 (Alexander Tokmakov)。
  • AggregateFunction 型では、未使用の arena のバイト数を read_bytes に含めないようにしました。 #48745 (Raúl Marín).
  • MySQL 辞書ソースと named collection 使用時に、一部の MySQL 関連設定が正しく処理されない問題を修正。#48402 をクローズ。 #48759Kseniia Sumarokova)。
  • ユーザーが max_single_part_upload_size を非常に大きな値に設定した場合、AWS S3 SDK に起因するバグが原因でクラッシュが発生する可能性があります。この変更により #47679 が修正されました。#48816Alexey Milovidov)。
  • RabbitMQ のデータ競合を修正(レポート)、コードをリファクタリング。 #48845Kseniia Sumarokova)。
  • system.parts および system.part_log にエイリアス namepart_name を追加。#48718 をクローズ。#48850sichenzhao)。
  • 関数 "arrayDifferenceSupport()"、"arrayCumSum()" および "arrayCumSumNonNegative()" で、広い整数型 (U)Int128/256 の入力配列がサポートされるようになりました。 #48866 (cluster)。
  • clickhouse-client の複数行履歴にはパディングが入らなくなりました。これにより、貼り付け操作がより自然になります。 #48870 (Joanna Hulboj)。
  • LXC 内で ClickHouse を実行し、LXCFS を使用しているというまれなケース向けに、わずかな改善を実装しました。LXCFS には問題があり、/proc 内のファイルを読み取る際に、まれに「Transport endpoint is not connected」というエラーを返すことがあります。このエラーは ClickHouse のサーバーログに正しく記録されていました。今回、この問題に対処するため、ファイルを再度開くようにする追加のワークアラウンドを導入しました。これはごく小さな変更です。#48922 (Real)。
  • プリフェッチのメモリ使用量の計測を改善。CI でプリフェッチ設定をランダムに変更。#48973 (Kseniia Sumarokova).
  • GCS のネイティブコピー操作用ヘッダーを正しく設定しました。 #48981 (Antonio Andelic).
  • コマンドラインで設定名を指定する際に、アンダースコアではなくダッシュを使用できるようにしました。たとえば --max_threads の代わりに --max-threads を使用できます。さらに、-- の代わりに のような Unicode のダッシュ文字もサポートします。これは、他社のチームとやり取りしていて、そのチームのマネージャーが MS Word からコードをコピー&ペーストした場合などに便利です。 #48985 (alekseygolub).
  • SSL ユーザー証明書による認証が失敗した場合に、パスワード認証へフォールバックするようにしました。 #48974 をクローズしました。 #48989 (Nikolay Degterinsky)。
  • 埋め込みダッシュボードを改善し、#46671 をクローズ。 #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 の軽微なハイライト表示に関する不具合を修正 #47610Natasha Murashkina)。
  • LLVM の libc++ に存在したバグを修正し、サイズが INT_MAX を超えるパートを S3 にアップロードするとクラッシュしていた問題を解消しました #47693 (Azat Khuzhin).
  • sparkbar 関数のオーバーフローを修正 #48121 (Vladimir C)。
  • S3 におけるレースコンディションを修正 #48190 (Anton Popov).
  • 一貫性のない動作があるため、集約関数の JIT を無効化 #48195 (Alexey Milovidov)。
  • ALTER のフォーマットを軽微に修正 #48289 (Natasha Murashkina).
  • RabbitMQ における CPU 使用量の問題を修正(23.2 で #44404 により悪化していた) #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).
  • 辞書に依存する分散テーブルを読み込む際に発生する起動エラーを修正しました #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).
  • ハッシュ辞書用の並列ローダー使用時に未処理例外が発生する問題を修正 #48571 (Azat Khuzhin)。
  • groupArray 集約関数が、NULL を許容する型で空の結果に対しても正しく動作します #48593 (lgbo)。
  • ACL 使用時に、ノードがスキーム auth 付きで作成されないことがある Keeper のバグを修正しました。 #48595 (Aleksei Filatov).
  • IPv4 と UInt の比較演算子を許可 #48611 (Yakov Olkhovskiy)。
  • キャッシュに起因する可能性のあるエラーを修正 #48636Kseniia Sumarokova)。
  • 空のデータに対する非同期挿入で、例外がスローされなくなりました。 #48663 (Anton Popov).
  • RENAME TABLE が失敗した場合にテーブルの依存関係を修正する #48683Azat Khuzhin)。
  • 主キーに重複するカラムが含まれている場合(これはプロジェクションに対してのみ発生し得ます)、以前のバージョンではバグを引き起こす可能性がありました #48838Amos Bird)。
  • ZooKeeper における send_thread/receive_thread の join 時のレースコンディションを修正 #48849 (Alexander Gololobov)。
  • zero copy replication で無視されている detached part を削除しようとした際に発生する予期しない part name エラーを修正 #48862 (Michael Lex).
  • Date32 型の Parquet/Arrow 列が Date32 型の列として読み込まれない問題を修正 #48864 (Kruglov Pavel)。
  • 行ポリシーが設定され、名前にドットを含む列を持つテーブルから選択するときに発生する UNKNOWN_IDENTIFIER エラーを修正 #48976 (Kruglov Pavel)。
  • 空の Nullable 文字列による集計を修正 #48999 (LiuNeng)。

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

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

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

新機能

  • parallel_replicas_custom_keyparallel_replicas_custom_key_filter_type の設定を使用して、レプリカ間で処理を分割する新しいモードを追加しました。クラスタが複数のレプリカを持つ単一のシャードで構成されている場合、最大 max_parallel_replicas 個までがランダムに選択され、シャードとして扱われます。各シャードに対して、対応するフィルタがイニシエータ側のクエリに追加され、その後シャードに送信されます。クラスタが複数のシャードで構成されている場合、任意のキーを定義できる点を除き、sample_key と同様に動作します。#45108Antonio 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 は、もはや必須ではありません。#46241Kseniia 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 をクローズ。 #47071 (chen).
  • HTTP インターフェイス用の URL パラメータ wait_end_of_query および buffer_size に対応する設定 http_wait_end_of_queryhttp_response_buffer_size を追加しました。これにより、プロファイルでこれらの設定を変更できるようになりました。 #47108 (Vladimir C)。
  • Atomic データベースから削除されたが、まだ完全には削除されていないテーブルを表示する system.dropped_tables テーブルを追加しました。 #47364 (chen).
  • MySQL 互換性のため、positionCaseInsensitive のエイリアスとして INSTR を追加。#47529 をクローズ。 #47535flynn)。
  • 固定精度で数値を文字列に変換できる toDecimalString 関数を追加しました。 #47838 (Andrey Zvonov)。
  • MergeTree の設定 max_number_of_mutations_for_replica を追加しました。これは、レプリカごとのパーツのミューテーション数を指定した値に制限します。0 を指定すると、レプリカごとのミューテーション数に制限がないことを意味します(ただし、実行自体は他の設定によって制約される場合があります)。 #48047 (Vladimir C)。
  • 2つの配列からマップを作成できる Map 関連関数 mapFromArrays を追加しました。 #31125 (李扬)。
  • Parquet/ORC/Arrow の出力フォーマットで圧縮方式を制御できるようにし、より多くの圧縮入力形式をサポートしました。これにより #13541 が解決されました。 #47114 (Kruglov Pavel).
  • ネイティブプロトコルに SSL ユーザー証明書による認証を追加。#47077 をクローズ。#47596Nikolay Degterinsky)。
  • parseDateTime 用に *OrNull() および *OrZero() バリアントを追加し、MySQL 互換のためのエイリアス str_to_date を追加しました。 #48000 (Robert Schulze).
  • MySQL との互換性を高めるため、「LIKE」「IN」「MOD」などの演算子に類似する REGEXP 演算子を追加しました #47869 (Robert Schulze)。

パフォーマンスの向上

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

実験的機能

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

改善

  • input_format_json_ignore_unknown_keys_in_named_tuple をデフォルトで有効にしました。 #46742 (Kruglov Pavel)。
  • MATERIALIZED VIEW(マテリアライズドビュー)への push 時に発生したエラーを無視できるようにしました(新しい設定 materialized_views_ignore_errors を追加しました。デフォルトは false ですが、ログを常に system.*_log テーブルにフラッシュするために true に設定されています)。 #46658 (Azat Khuzhin).
  • 分散送信のファイルキューをメモリ上で追跡する。#45491 (Azat Khuzhin).
  • 現在では、HTTP プロトコル経由のすべてのクエリのレスポンスに、X-ClickHouse-Query-IdX-ClickHouse-Timezone ヘッダーが追加されるようになりました。以前は SELECT クエリに対してのみ追加されていました。 #46364 (Anton Popov).
  • MongoDB 外部テーブル: host:port の列挙を含む URI 経由でのレプリカセットへの接続サポートと、MongoDB 辞書における readPreference オプションのサポート。URI の例: mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary。 #46524 (artem-yadr)。
  • この改善はユーザーからは見えない形で行われます。クエリプランに基づいてプロジェクション解析を再実装しました。旧バージョンと新バージョンを切り替えるための設定項目 query_plan_optimize_projection=1 を追加しました。#44963 を修正しました。#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 を追加しました(デフォルトで有効です)。#46990Kruglov Pavel)。
  • range 関数で IPv4 を許可し、IP 範囲を生成できるようにしました。 #46995 (Yakov Olkhovskiy).
  • あるボリューム/ディスクから別のボリューム/ディスクへパーツを移動できない場合に出力される例外メッセージを改善しました。 #47032 (alesapin).
  • JSONType 関数で Bool 型をサポートしました。以前は bool 値に対して誤って Null 型が返されていました。 #47046 (Anton Popov).
  • _request_body パラメータを使用して、あらかじめ定義した HTTP クエリを設定します。 #47086 (Constantine Peresypkin)。
  • Enter キー押下時に組み込み UI の SQL エディタで自動インデントを行うようにしました。 #47113 (Alexey Korepanov).
  • 'sudo' を使用して自己解凍を行う場合、展開されたファイルの uid および gid を実行ユーザーに設定しようとします。 #47116 (Yakov Olkhovskiy)。
  • 以前は、repeat 関数の第 2 引数は符号なし整数型のみを受け付けており、-1 のような値は指定できませんでした。この挙動は Spark の同名関数とは異なっていました。このアップデートでは、repeat 関数の挙動を Spark の関数と揃えるように変更しました。これにより、負の整数を含む同じ型の入力を受け付けるようになりました。更新後の実装の正しさを検証するために、広範なテストを実施しています。#47134KevinyhZou)。注記: このチェンジログのエントリは ChatGPT によって書き直されました。
  • スタックトレースから ::__1 部分を削除し、スタックトレース内で std::basic_string<char, ...String として表示します。 #47171 (Mike Kot).
  • リプレイ攻撃を防ぐために interserver モードを再実装しました(この変更は以前のサーバーとも後方互換性があります)。 #47213 (Azat Khuzhin).
  • 正規表現グループの認識精度を向上し、regexp_tree 辞書を改善しました。 #47218 (Han Fei).
  • Keeper の改善: Keeper が使用するリソースをクリーンアップするための新しい 4LW コマンド clrs を追加 (例: 未使用メモリの解放)。 #47256 (Antonio Andelic)。
  • コーデック DoubleDelta(bytes_size)Gorilla(bytes_size)FPC(level, float_size) にオプション引数を追加しました。これにより、clickhouse-compressor でカラム型を指定せずにこれらのコーデックを使用できるようになります。これらのコーデック使用時に clickhouse-compressor で発生しうる異常終了や算術エラーを修正しました。修正: https://github.com/ClickHouse/ClickHouse/discussions/47262#47271Kruglov Pavel)。
  • runningDifference 関数に big int 型のサポートを追加しました。#47194 をクローズしました。#47322Nikolay Degterinsky)。
  • 有効期限付きの S3 認証情報に対し有効期限の猶予時間を設け、一部のエッジケースで発生する ExpiredToken エラーを回避できるようにしました。これは expiration_window_seconds 設定で制御でき、デフォルトは 120 秒です。 #47423 (Antonio Andelic)。
  • Avro フォーマットで Decimals 型と Date32 型をサポートするようにしました。 #47434 (Kruglov Pavel).
  • Ordinary から Atomic への変換が中断されていることが検出された場合はサーバーを起動せず、トラブルシューティング手順を含む、よりわかりやすいエラーメッセージを出力するようにしました。 #47487 (Alexander Tokmakov)。
  • system.opentelemetry_span_log に新しいカラム kind を追加しました。このカラムには OpenTelemetry で定義されている SpanKind の値が格納されます。#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 の場合に再現)。#47732Kseniia Sumarokova)。
  • Decimal パラメータに関連するコードのエラー処理が改善され、より情報量の多いエラーメッセージが出力されるようになりました。これまでは、不正な Decimal パラメータが指定された場合に生成されるエラーメッセージが不明瞭であったり、有用でないことがありました。この更新により、出力されるエラーメッセージが改善され、より詳細で有用な情報が提供されるようになったため、Decimal パラメータに関連する問題を特定して修正しやすくなりました。 #47812 (Yu Feng)。注:この変更ログのエントリは ChatGPT によって書き直されています。
  • パラメータ exact_rows_before_limit は、リミットに達する前に返された行数を rows_before_limit_at_least が正確に反映できるようにするために使用されます。このプルリクエストでは、クエリが複数シャードにまたがる分散処理やソート処理を含む場合に発生していた問題に対処しています。今回の更新以前は、これらのケースは意図したとおりに動作していませんでした。#47874 (Amos Bird)。
  • ThreadPools メトリクスの内部観測。 #47880 (Azat Khuzhin).
  • WriteBufferFromS3Microseconds および WriteBufferFromS3RequestsErrors のプロファイルイベントを追加しました。 #47885 (Antonio Andelic)。
  • ClickHouse のインストールに --link および --noninteractive (-y) オプションを追加。#47750 をクローズ。#47887Nikolay Degterinsky)。
  • 利用不可能な依存テーブルを持つマテリアライズドビューにアタッチする際に発生していた UNKNOWN_TABLE 例外を修正しました。これはバックアップから状態を復元する際に役立つ可能性があります。 #47975 (MikhailBurdukov).
  • 暗号化ディスク構成にオプションの path が追加されていない場合の不具合を修正。 #47981 (Kseniia Sumarokova).
  • パラメータ化ビューにおける CTE サポートの実装: スカラ値サブクエリを評価する際にクエリパラメータを許可するように更新しました。 #48065 (SmitaRKulkarni)。
  • 大きな整数型 (U)Int128/(U)Int256、任意のキー型を持つ Map、および任意の精度(3 および 6 に限定されない)の DateTime64 をサポート。 #48119 (Kruglov Pavel).
  • 行形式の入力フォーマットで未知の enum 値によるエラーをスキップできるようにしました。 #48133 (Alexey Milovidov).

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

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

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

  • フォーマットパーサーがリセットされる問題を修正し、Kafka の不正メッセージ処理に関するテストを追加 #45693Kruglov Pavel)。
  • Keeper におけるデータサイズの計算を修正 #46086 (Antonio Andelic)。
  • ReplicatedMergeTree テーブルおよび Atomic データベースに対する DROP TABLE クエリの自動リトライ処理に存在したバグを修正しました。まれに、DROP の実行中に ZooKeeper セッションが期限切れとなり、ZooKeeper 上で同じパスを持つ新しいレプリケーテッドテーブルが並行して作成された場合に、Can't get data for node /zk_path/log_pointerThe specified key does not exist というエラーが発生することがありました。 #46384 (Alexander Tokmakov)。
  • クエリの正規化中に発生していた誤ったエイリアスの再帰処理を修正し、一部のクエリが実行できなかった問題を解消しました。 #46609 (Raúl Marín).
  • バイナリ形式での IPv4/IPv6 のシリアライズ/デシリアライズを修正 #46616 (Kruglov Pavel)。
  • ActionsDAG: 最適化時に and の結果を変更しない #46653 (Salvatore Mesoraca).
  • クライアントが異常終了した場合のクエリキャンセル処理を改善 #46681 (Alexander Tokmakov)。
  • 集約最適化時の算術演算を修正 #46705 (Duc Canh Le).
  • JSONEachRow スキーマ推論時に発生しうる clickhouse-local の異常終了を修正 #46731 (Kruglov Pavel).
  • 期限切れのロールを変更する処理を修正 #46772 (Vitaly Baranov)。
  • 複数ステップにまたがって結合された PREWHERE 列の集約処理を修正 #46785 (Alexander Gololobov).
  • HTTP 読み込みバッファでファイルサイズを取得する際に initial range を使用するようにしました。この変更がないと、一部のリモートファイルを処理できませんでした。 #46824 (Antonio Andelic).
  • URL テーブル使用時の誤った進行状況バーを修正 #46830Antonio Andelic)。
  • maxIntersections 関数での MSan 報告を修正 #46847 (Alexey Milovidov).
  • Map データ型のバグを修正 #46856Alexey Milovidov)。
  • LIKE パターンにクォート不能な文字がクォートされた状態で含まれている場合に、一部の LIKE 検索で誤った結果が返される問題を修正 #46875 (Robert Schulze).
  • 修正 - WITH FILL が、Filling Transform による空ブロック処理時にアボートを引き起こす問題を修正 #46897 (Yakov Olkhovskiy)。
  • JSON 内の文字列からの日付および int 型の推論を修正 #46972 (Kruglov Pavel)。
  • フェッチ時のゼロコピーレプリケーションにおけるディスク選択のバグを修正 #47010 (alesapin)。
  • systemd サービス定義のタイプミスを修正 #47051 (Palash Goel)。
  • CROSS JOIN で algorithm = auto を使用した際に発生する NOT_IMPLEMENTED エラーを修正 #47068 (Vladimir C)。
  • 'part_type' が実験的機能である 'InMemory' モードに設定されている場合に、'ReplicatedMergeTree' テーブルが類似した 2 件のデータの挿入に失敗する問題を修正します。#47121 (liding1992).
  • 外部辞書 / library-bridge: エラー「unknown library method 'extDict_libClone'」を修正 #47136alex filatov)。
  • LIMIT を伴う Grace Hash 結合における競合状態を修正 #47153 (Vladimir C).
  • 実際のカラムに対する PREWHERE サポートを修正 #47154 (Azat Khuzhin)。
  • Query Status で発生する可能性のあるデッドロックを修正 #47161 (Kruglov Pavel)。
  • デッドロックを引き起こすため、同じ Join テーブルに対する INSERT SELECT を禁止しました #47260 (Vladimir C)。
  • min_age_to_force_merge_seconds によるマージで、すでにマージ済みのパーティションをスキップするようにしました #47303 (Antonio Andelic).
  • find_first_not_symbols に対して期待どおりに動作するよう find_first_symbols を修正しました #47304 (Arthur Passos).
  • CSV における大きな数値の型推論を修正 #47410 (Kruglov Pavel)。
  • エイリアス付きの式に対する論理式オプティマイザを無効化しました。 #47451 (Nikolai Kochetov).
  • decodeURLComponent のエラーを修正 #47457 (Alexey Milovidov)。
  • projection を含む EXPLAIN グラフを修正 #47473 (flynn).
  • クエリパラメータの不具合を修正 #47488Alexey Milovidov)。
  • パラメータ化ビュー:バグを修正。 #47495 (SmitaRKulkarni).
  • データフォーマット用ファザーと、それに対応する修正。 #47519 (Alexey Milovidov).
  • DateTime64 の単調性チェックを修正。#47526Antonio Andelic)。
  • Nullable LowCardinality 列における「block structure mismatch」を修正 #47537 (Nikolai Kochetov).
  • Apache Parquet のバグに対する根本的な修正 #45878 #47538 (Kruglov Pavel)。
  • ドキュメントサイズが不正な場合に BSONEachRow の並列パースが失敗する問題を修正 #47540 (Kruglov Pavel).
  • SYSTEM FLUSH DISTRIBUTED 実行時に system.distribution_queue 内のエラーを保持するようにしました #47541 (Azat Khuzhin).
  • BSONEachRow フォーマットで重複列をチェックするようにしました #47609 (Kruglov Pavel)。
  • ムーブ操作中のゼロコピーロック待機の問題を修正 #47631 (alesapin)。
  • パーティション単位の集約を修正 #47634 (Nikita Taranov)。
  • BSONEachRow フォーマットにおけるタプルを配列としてシリアル化する処理のバグを修正 #47690 (Kruglov Pavel)。
  • polygonsSymDifferenceCartesian のクラッシュを修正 #47702 (pufit)。
  • ストレージ File からの、zlib および gzip で圧縮されたファイルの読み取りを修正 #47796 (Anton Popov)。
  • PostgreSQL の空クエリ検出を改善 (pgx Go 言語ドライバ向け) #47854 (Azat Khuzhin).
  • LowCardinality 型の DateTime 単調性チェックを修正 #47860 (Antonio Andelic)。
  • RESTORE ASYNC では backup_threads ではなく restore_threads を使用するようにしました #47861 (Azat Khuzhin)。
  • 投影を含む ReplicatedMergeTree テーブルでの DROP COLUMN の問題を修正 #47883 (Antonio Andelic)。
  • Replicated データベース復旧の修正 #47901 (Alexander Tokmakov).
  • HTTP における冗長すぎる警告メッセージに対するホットフィックス #47903 (Alexander Tokmakov)。
  • catboostEvaluate 内で発生する "Field value too long" の問題を修正 #47970 (Robert Schulze).
  • #36971 を修正: Watchdog: 子プロセスが終了した場合に非ゼロの終了コードで終了するようにする #47973Коренберг Марк)。
  • "index file cidx is unexpectedly long" エラーの修正 #48010 (SmitaRKulkarni).
  • MaterializedPostgreSQL のクエリを修正し、属性(replica-identity)を取得できるようにしました #48015 (Solomatov Sergei)。
  • parseDateTime(): UB(符号付き整数オーバーフローによる未定義動作)を修正 #48019 (Robert Schulze).
  • スキーマの再利用を避けるため、Avro のレコードには一意の名前を使用するようにしました #48057 (Kruglov Pavel)。
  • Keeper において TCP/HTTP ソケットのタイムアウトが正しく設定されるように修正 #48108 (Antonio Andelic)。
  • Avro フォーマットでのヌルポインタへのメンバー呼び出しが発生する可能性を修正 #48184 (Kruglov Pavel).

ClickHouse リリース 23.2, 2023-02-23

後方互換性のない変更

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

新機能

  • S3 上の Iceberg テーブルストアにアクセスするために、StorageIceberg とテーブル関数 iceberg を追加しました。 #45384 (flynn).
  • ストレージの設定で storage_policy の代わりに SETTINGS disk = '<disk_name>' を使用できるようにし、さらに SETTINGS disk = disk(type=s3, ...) によるディスクの明示的な作成も可能にしました。#41976 (Kseniia Sumarokova)。
  • system.part_logProfileEvents カウンタを利用できるようにしました。#38614 (Bharat Nallan).
  • 既存の ReplacingMergeTree エンジンを拡張し、重複データの挿入を許可できるようにしました。これにより、1つの MergeTree エンジンで ReplacingMergeTreeCollapsingMergeTree の両方の機能を活用できます。削除されたデータはクエリ実行時には返されませんが、ディスクから物理的に削除されるわけではありません。#41005youennL-cs)。
  • generateULID 関数を追加し、#36536 をクローズ。 #44662Nikolay Degterinsky)。
  • corrMatrix 集約関数を追加し、各列ペア間の相関を計算します。さらに、集約関数 covarSampcovarPopcorr と類似しているため、あわせて covarSampMatrixcovarPopMatrix も追加しました。@alexey-milovidov により #44587 がクローズされました。 #44680 (FFFFFFFHHHHHHH).
  • ランダムに配列を並べ替える 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 を追加。#40945Arthur Passos)。
  • arrayPartialSort 関数と arrayPartialReverseSort 関数を追加しました。#46296 (Joanna Hulboj).
  • 新しい HTTP パラメータ client_protocol_version により、Native フォーマットを使用する HTTP レスポンスのクライアントプロトコルバージョンを設定できるようになりました。 #40397#46360 (Geoff Genz)。
  • Spark の関数 REGEXP_EXTRACT との互換性のため、新しい関数 regexpExtract を追加しました。既存の関数 extract と類似しています。 #46469 (李扬).
  • 新しい関数 JSONArrayLength を追加しました。最外層の JSON 配列内の要素数を返します。入力された JSON 文字列が不正な場合は NULL を返します。 #46631 (李扬).

パフォーマンスの向上

  • 導入されたロジックは、PREWHERE 条件が複数の条件(cond1 AND cond2 AND ...)の論理積で構成されている場合に動作します。同じカラムを読み取る必要がある条件同士をステップとしてグループ化します。各ステップの後に、全体の条件の対応する部分が計算され、その結果行がフィルタリングされる場合があります。これにより、次のステップで読み取る行数を減らすことができ、I/O 帯域を節約し、計算量を削減できます。このロジックは現時点ではデフォルトで無効です。回帰がないことが確認され次第、将来のリリースでデフォルトで有効化される予定のため、テスト用途での利用が強く推奨されます。これは 2 つの設定で制御できます: "enable_multiple_prewhere_read_steps" と "move_all_conditions_to_prewhere" です。 #46140 (Alexander Gololobov)。
  • テーブルのパーティションキーと GROUP BY キーが互換性がある場合に、パーティションを個別に集約できるオプションが追加されました。設定 allow_aggregate_partitions_independently で制御されます。適用可能なケースが限られているため(詳細はドキュメントを参照してください)、デフォルトでは無効になっています。 #45364 (Nikita Taranov)。
  • Compact 形式のパーツに対して Vertical merge アルゴリズムを使用できるようにしました。これにより、ClickHouse サーバーはバックグラウンド処理時に使用するメモリを大幅に削減できます。#46084 をクローズしました。#45681 #46282 (Anton Popov)。
  • バッチリーダーを使用することで Parquet リーダーを最適化。 #45878 (LiuNeng).
  • Linux の非同期サブシステム io_uring に基づく新しい local_filesystem_read_method の方式 io_uring を追加し、デフォルトの pread 方式と比較して、ほぼあらゆるケースで読み取りパフォーマンスを向上させました。 #38456 (Saulius Valatka)。
  • 論理的に等価である場合、引数として if 式を取る集約関数を書き換えます。たとえば、avg(if(cond, col, null))avgIf(cond, col) に書き換えることができます。これはパフォーマンスの向上に役立ちます。 #44730 (李扬)。
  • AVX-512 命令を使用して lower/upper 関数のパフォーマンスを向上しました。 #37894 (yaqi-zhao).
  • SMT を無効化した状態でコア数が 32 以上のシステムにおいて、ClickHouse がコア数の半分しか使用しないという制約を解除しました(BIOS で Hyper-Threading を無効化した場合)。 #44973 (Robert Schulze)。
  • 関数 multiIf をカラムナ実行に対応させることでパフォーマンスを向上し、2.3倍高速化しました。 #45296 (李扬).
  • position 関数で、検索文字列が空文字列の場合の高速パスを追加しました。 #45382 (李扬).
  • query_plan_remove_redundant_sorting 最適化をデフォルトで有効にしました。この最適化は #45420 で実装されました。#45567Igor Nikonov)。
  • HTTP インターフェイスを使用する大規模クエリのパフォーマンスを向上させるため、HTTP Transfer Encoding のチャンクサイズを拡大しました。 #45593 (Geoff Genz).
  • 多数の Array / Map / Nested カラムを持つテーブルを読み取る短い SELECT クエリのパフォーマンスを改善しました。 #45630 (Anton Popov).
  • 大きな整数値および Decimal 型のフィルタリング性能を改善。 #45949 (李扬)。
  • この変更により、ColumnNullable(UInt8) からフィルタを取得する際のオーバーヘッドを効果的に削減し、クエリ全体のパフォーマンスを向上させることができます。この変更の影響を評価するために、TPC-H ベンチマークを用い、カラム型を非 NULL 型から NULL 許容型に変更したうえで、そのクエリの QPS をパフォーマンス指標として計測しました。 #45962 (Zhiguo Zhou)。
  • _part_partition_id の仮想カラムを LowCardinality(String) 型にしました。#45964 をクローズします。#45975flynn)。
  • スケールが変わらない場合の Decimal 変換のパフォーマンスを改善しました。 #46095 (Alexey Milovidov).
  • 読み取り時のデータプリフェッチ量を増やせるようにしました。 #46168 (Kseniia Sumarokova).
  • arrayExists(x -> x = 1, arr)has(arr, 1) に書き換えることで、パフォーマンスが 1.34 倍向上します。 #46188 (李扬)。
  • リモートディスク以外での vertical merge による過剰なメモリ使用量を修正しました。リモートディスクでは max_insert_delayed_streams_for_parallel_write 設定が適用されるようにしました。#46275 (Nikolai Kochetov).
  • zstd を v1.5.4 に更新しました。パフォーマンスと圧縮率が若干改善されています。異なるバージョンの ClickHouse を実行しているレプリカがある場合、説明付きで Data after merge/mutation is not byte-identical to data on another replicas. のような妥当なエラーメッセージが表示されることがあります。これらのメッセージは想定内であり、心配する必要はありません。#46280 (Raúl Marín)。
  • #39737 に起因する性能劣化を修正。#46309Alexey Milovidov)。
  • replicas_status ハンドルは、レプリケーションキューが大きい場合でも高速に応答します。 #46310 (Alexey Milovidov).
  • 集約関数 sum、単項算術関数、および比較関数に AVX-512 のサポートを追加。 #37870 (zhao zhou)。
  • マークの分布および読み取り処理全体の調整に関するコードを書き直し、パフォーマンスを最大限に向上させました。これにより #34527 が解決されました。#43772Nikita 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 付きのクエリに対して、ソートキーの式を where 句から prewhere に移動して最適化できるようにサポート。 #38893. #38950 (hexiaoting).
  • バックアップ用の新しいメトリクスを追加しました: num_processed_files と processed_files_size は、実際に処理されたファイルの数とサイズを表します。 #42244 (Aleksandr)。
  • サーバ間の DNS エラー発生時に再試行処理を追加しました。 #43179 (Anton Kozlov).
  • Keeper の改善: 予期しないディスク空き容量不足の問題を回避するため、ディスク上の領域を事前に確保するようになりました。Keeper の Raft ログファイルの最大サイズを指定する設定 max_log_file_size を導入しました。 #44370 (Antonio Andelic).
  • 読み取り専用のレプリカにおける replica delay API ロジックの挙動を最適化しました。 #45148 (mateng915).
  • 空のパスワードが間違っている場合には、clickhouse-client で対話的にパスワードを要求するようにしました。#46702 をクローズしました。#46730Nikolay Degterinsky)。
  • Float* 型以外のカラムで Gorilla 圧縮が使用されている場合、それを不審なものとしてマークします。 #45376 (Robert Schulze).
  • マージを実行しているレプリカの名前を postpone_reason 列に表示するようにしました。 #45458 (Frank Chen)。
  • part_log に例外のスタックトレースを保存。 #45459 (Frank Chen).
  • regexp_tree 辞書が改善され、https://github.com/ua-parser/uap-core と互換性を持つようになりました。#45631Han Fei)。
  • SYSTEM SYNC REPLICA のチェック方法を更新し、#45508 #45648 を解決しました(SmitaRKulkarni)。
  • 設定 replication_alter_partitions_sync の名前を alter_sync に変更しました。 #45659 (Antonio Andelic).
  • generateRandom テーブル関数とエンジンが LowCardinality データ型をサポートするようになりました。これはテストに有用で、例えば INSERT INTO table SELECT * FROM generateRandom() LIMIT 1000 のようなクエリを書けます。これは #45590 をデバッグするために必要です。#45661Alexey Milovidov)。
  • 実験的なクエリ結果キャッシュは、よりモジュール性の高い設定オプションを提供するようになりました。 #45679 (Robert Schulze).
  • "query result cache" を "query cache" に名称変更しました。 #45682 (Robert Schulze).
  • SYSTEM SYNC FILE CACHE コマンドを追加。これにより sync システムコールが実行される。#8921#45685 (DR)。
  • 新しい S3 設定 allow_head_object_request を追加しました。この PR により、https://github.com/ClickHouse/ClickHouse/pull/45288 で導入された、HeadObject の代わりに GetObjectAttributes リクエストを使用する挙動をオプション化し(デフォルトでは無効)、切り替え可能にしました。#45701Vitaly Baranov)。
  • 接続名に基づいて接続設定を上書きできる機能を追加しました(つまり、各接続ごとにパスワードを保存しておく必要はなくなり、すべてを ~/.clickhouse-client/config.xml にまとめて記述できるようになりました。また、接続ごとに異なる履歴ファイルを使用することもでき、これも有用な場合があります)。#45715Azat Khuzhin)。
  • Arrow 形式: duration 型をサポートしました。#45669 をクローズ。#45750 (flynn).
  • キャッシュ動作の調査を改善するために、Query Cache のログ出力を拡充しました。 #45751 (Robert Schulze).
  • クエリキャッシュのサーバーレベルの設定が、実行時に動的に変更できるようになりました。 #45758 (Robert Schulze).
  • テーブル関数の引数を名前付きコレクションで指定した場合に、ログ内のパスワードをマスクするようにしました。 #45774 (Vitaly Baranov).
  • 内部の S3 クライアントを改善し、さまざまな種類の URL に対してリージョンとリダイレクトを正しく判別できるようにしました。 #45783 (Antonio Andelic).
  • generateRandom 関数に Map、IPv4、IPv6 型のサポートを追加しました。主にテスト用途に有用です。 #45785 (Raúl Marín).
  • IP 型で empty/notEmpty をサポート。 #45799 (Yakov Olkhovskiy).
  • カラム num_processed_files は 2 つのカラム、num_files(BACKUP 用)と files_read(RESTORE 用)に分割されました。カラム processed_files_size は 2 つのカラム、total_size(BACKUP 用)と bytes_read(RESTORE 用)に分割されました。 #45800 (Vitaly Baranov)。
  • MySQL 互換性のために SHOW ENGINES クエリのサポートを追加しました。 #45859 (Filatenkov Artur).
  • 難読化ツールによるクエリの扱いを改善しました。 #45867 (Raúl Marín).
  • 境界値 65535 (2149-06-06) の Date 型への変換時の挙動を改善。 #46042 #45914 (Joanna Hulboj).
  • DROP TABLE 時に参照の依存関係をチェックするための設定 check_referential_table_dependencies を追加しました。この PR は #38326 を解決しました。 #45936Vitaly Baranov)。
  • 引数が Null の場合に Null を返すように tupleElement を修正しました。#45894 をクローズ。#45952flynn)。
  • S3 ワイルドカードに一致するファイルが 1 件も存在しない場合にエラーをスローするようにしました。#45587 をクローズ。#45957 (chen).
  • クラスター状態のデータを使用して、バックアップ/リストア処理の同時実行を確認します。 #45982 (SmitaRKulkarni).
  • ClickHouse Client:あいまい検索に対して「exact」マッチングを使用するようにし、大文字・小文字を正しく無視しつつ、SQL クエリのマッチングにより適したアルゴリズムを採用しました。 #46000Azat Khuzhin)。
  • 誤ったビュー作成構文 CREATE View X TO Y AS SELECT を禁止しました。 #4331 をクローズしました。 #46043flynn)。
  • Log ストレージファミリーで storage_policy を設定できるようにしました。#43421 をクローズ。#46044flynn)。
  • 結果が空のときの JSONColumns フォーマットを改善。#46024 をクローズ。#46053 (flynn)。
  • SipHash128 の参照実装を追加しました。 #46065 (Salvatore Mesoraca).
  • mmap を使用して割り当て時間とバイト数を記録する新しいメトリクスを追加しました。#46068 (李扬).
  • 現在、leftPadrightPadleftPadUTF8rightPadUTF8 のような関数では、2 番目の引数 length は UInt8|16|32|64|128|256 でなければなりません。これは ClickHouse ユーザーにとっては制約が厳しすぎるうえに、arrayResizesubstring などの他の類似関数との一貫性もありません。#46103李扬)。
  • デバッグビルドにおいて、結果の統計量が NaN となる場合の welchTTest 関数内のアサーションを修正しました。他の類似関数との動作を統一しました。従来の動作が扱いづらかったため、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 のエイリアスです。指定されたフォーマット文字列に従って時刻を整形します。フォーマット文字列は定数式である必要があるため、1 つの結果列に対して複数のフォーマットを指定することはできません。(formatDateTime へのリンクを参照)。 #46302Jake 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.databases」の動作と一致するようになります。 #46435 (Robert Schulze).
  • distribution_queue テーブルに last_exception_time 列を追加しました。 #46564Aleksandr)。
  • パラメータ化ビューでのパラメータ付き IN 句のサポート。 #46583 (SmitaRKulkarni).
  • サーバー起動時に名前付きコレクションを読み込まず、代わりに初回アクセス時に読み込むようにしました。 #46607 (Kseniia Sumarokova).

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

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

バグ修正(公式安定版リリースにおけるユーザーにとって目に見える誤動作)

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

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

ClickHouse リリース 23.1

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

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

新機能

  • 正規表現ツリーを走査してキーを抽出するための辞書ソースです。User-Agent の解析に使用できます。 #40878 (Vage Ogannisian). #43858 (Han Fei).
  • パラメータ化ビュー機能を追加し、View テーブルエンジンでクエリパラメータを指定できるようにしました。これにより #40907 が解決されました。 #41687SmitaRKulkarni)。
  • 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 関数に適切な実装を追加しました(フォーマットのリファクタリングに伴う副次的な改善)。#42777 (Kruglov Pavel).
  • CapnProto フォーマットで StructList として Nested テーブルの読み書きをサポートします。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 をクローズしました。#44953Kruglov Pavel)。

実験的機能

  • テキスト検索を効率化するため、新しいセカンダリインデックスの種類として実験的な倒立インデックスを追加しました。 #38667 (larryluogit).
  • 実験的なクエリ結果キャッシュを追加しました。 #43797 (Robert Schulze).
  • I/O リクエスト向けに拡張可能かつ構成可能なスケジューリングサブシステムを追加しました(まだ I/O コード本体とは統合されていません)。 #41840 (Sergei Trifonov). この機能は現時点では何もしません。お楽しみください。
  • Replicated データベースの障害レプリカのメタデータを削除する SYSTEM DROP DATABASE REPLICA を追加しました。 #41794 を解決します。 #42807 (Alexander Tokmakov).

パフォーマンスの向上

  • MergeTree テーブルの起動時に非アクティブなパーツを読み込まないようにしました。 #42181 (Anton Popov).
  • 多数の小さなファイルを対象としたストレージ S3 およびテーブル関数 s3 からの読み取り時のレイテンシを改善しました。これにより、ストレージ S3 から読み取る際に、設定 remote_filesystem_read_methodremote_filesystem_read_prefetch が有効になるようになりました。 #43726 (Anton Popov)。
  • Parquet/ORC ファイル内の struct フィールドの読み取りを最適化しました。必要なフィールドのみを読み込みます。 #44484 (lgbo).
  • HTTP インターフェイス経由のクエリで、二段階集約アルゴリズムが誤って無効化されていました。これを再度有効化したことで、パフォーマンスが大幅に向上しました。 #45450 (Nikolai Kochetov).
  • StorageFile に対して mmap サポートを追加しました。これにより、clickhouse-local のパフォーマンスが向上するはずです。 #43927 (pufit)。
  • HashedDictionary にシャーディング対応を追加し、並列読み込みを可能にしました(シャード数に応じてほぼ線形にスケーリング)。 #40003 (Azat Khuzhin).
  • クエリのパースを高速化しました。 #42284 (Raúl Marín)。
  • exprLowCardinality 列である場合、OR チェーン expr = x1 OR ... OR expr = xN は常に expr IN (x1, ..., xN) に置き換えられます。この場合、optimize_min_equality_disjunction_chain_length の設定は無視されます。 #42889 (Guo Wangyang)。
  • ThreadStatus 関連のコードを最適化し、パフォーマンスをわずかに向上させました。 #43586 (Zhiguo Zhou).
  • 列単位の三値論理評価を、自動ベクトル化により最適化しました。このマイクロベンチマークのパフォーマンステストにおいて、ICX デバイス (Intel Xeon Platinum 8380 CPU) 上で 最大 21 倍性能向上が観測されました。#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)。
  • ハッシュテーブルのサイズ予測に対する最適化は、キャッシュされたハッシュテーブルのサイズが十分に大きい場合にのみ適用されるようになりました(しきい値は経験的に決定され、ハードコードされています)。 #44455Nikita 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 をクローズしました。#43998Nikolay 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_parsingsupports_parallel_formatting を追加し、より詳細な状態確認ができるようにしました。 #45499 (Anton Popov).
  • CustomSeparated/Template フォーマットでの CSV フィールドの読み取り処理を改善。 #42352 および #39620 をクローズ。 #43332Kruglov Pavel)。
  • クエリの経過時間の測定方法を統一。 #43455 (Raúl Marín).
  • SELECT クエリに仮想カラムが含まれている場合に、テーブル関数 file/hdfs/s3 が挿入テーブルの構造を自動的に利用する処理を改善しました。これにより、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)。#43947Azat Khuzhin)。
  • テキスト形式向けのスキーマ推論をリファクタリングし、改善しました。推論結果の型を Nullable にするかどうかを制御する新しい設定 schema_inference_make_columns_nullable を追加しました(デフォルトで有効)。 #44019 (Kruglov Pavel).
  • PROXYv1 プロトコルのサポートを強化。#44135 (Yakov Olkhovskiy)。
  • クリーンアップスレッドが実行した最新のパーツチェックに関する情報を system.parts テーブルに追加します。 #44244 (Dmitry Novik)。
  • 読み取り専用モードでの INSERT に対してテーブル関数を無効にする。 #44290 (SmitaRKulkarni).
  • CleanupThread の 1 回のイテレーションで処理されるパーツ数を制限できるようにするため、simultaneous_parts_removal_limit 設定を追加しました。 #44461 (Dmitry Novik)。
  • クエリで仮想列のみが必要な場合は、ReadBufferFromS3 を初期化しないでください。この対応は #44246 に役立つ可能性があります。 #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).
  • 非同期 INSERT の重複排除を改善:ユーザーが非同期 INSERT を重複して実行した場合、Keeper へ問い合わせる前にメモリ内で重複排除を行うようにしました。 #44682 (Han Fei).
  • Input/output 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 をクローズ。#44832 (flynn)。
  • バックグラウンドのクリーンアップ処理と同時にパーツのマージが行われていることが原因で発生する system.errors へのエラー報告を抑止しました。 #44874 (Raúl Marín).
  • Distributed async INSERT 用のメトリクスを最適化および修正しました。 #44922 (Azat Khuzhin).
  • 同時バックアップおよびリストアを禁止する設定を追加し、#43891 を解決しました。実装内容: * Context で BackupWorker が作成される際に読み取り・設定される、同時バックアップおよびリストアを禁止するサーバーレベルの設定を追加しました。* 設定はデフォルトで true です。* バックアップまたはリストアを開始する前に、他のバックアップやリストアが実行中でないかを確認するチェックを追加しました。内部リクエストについては、backup_uuid を使用して自ノードからのものかどうかを確認します。#45072 (SmitaRKulkarni)。
  • システムログ用に <storage_policy> 設定パラメータを追加しました。#45320 (Stig Bakken)。

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

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

バグ修正

  • ドメイン IP 型 (IPv4, IPv6) をネイティブ型に置き換えました。 #43221 (Yakov Olkhovskiy)。これにより、コード内で欠けていた一部の実装が自動的に補われます。
  • バックアップ処理中にミューテーションが強制終了された場合の挙動を修正しました。 #45351 (Vitaly Baranov).
  • Invalid number of rows in Chunk という例外メッセージを修正しました。#41404#42126Alexander Gololobov)。
  • ソート後に式を評価した際に未初期化の値が使用される可能性があった問題を修正。 #43386 #43635 をクローズ(Kruglov Pavel)。
  • 集約コンビネータにおける NULL の扱いを改善し、あまり一般的でない最適化である optimize_rewrite_sum_if_to_count_if を使用した際に発生しうるセグメンテーションフォルト/論理エラーを修正しました。これにより、#43758 がクローズされました。#43813Kruglov Pavel)。
  • CREATE USER/ROLE クエリにおける settings 制約を修正。 #43993 (Nikolay Degterinsky).
  • テーブルメタデータ内の EPHEMERAL カラムに、パースできないデフォルト値が設定されていたバグを修正しました。 #44026 (Yakov Olkhovskiy).
  • 互換性設定から取得した不正なバージョンの解析処理を修正。 #44224 (Kruglov Pavel)
  • 日時型からの interval 減算の動作を、加算時と同様にしました。 #44241 (ltrk2).
  • ビュー結果の最大サイズに関する制限を撤廃しました。 #44261 (lizhuoyu5).
  • do_not_evict_index_and_mrk_files=1 のときにキャッシュ内で発生しうる論理エラーを修正しました。#42142 をクローズ。#44268Kseniia Sumarokova)。
  • ライトスルーキャッシュにおいて、キャッシュ書き込みが本来は中断されるべきでない状況で早期に中断されてしまう可能性があった問題を修正(誤った前提によりキャッシュ処理が停止してしまうことがあった)。 #44289 (Kseniia Sumarokova).
  • LowCardinality と一緒に、定数引数を取る関数 IN が定数引数として使用された場合に発生する可能性のあったクラッシュを修正しました。#44221 を修正します。#44346Nikolai Kochetov)。
  • パラメトリックな集約関数の複雑なパラメータ(配列など)に対するサポートの不具合を修正しました。これにより #30975 がクローズされました。この変更より前は、集約関数 sumMapFiltered は分散クエリで使用できませんでした。 #44358 (Alexey 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 型の読み込みを修正。#44400Kruglov 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)。
  • 設定ファイル内で profile settings constraints の後に profile settings を記述すると、constraints が効かなくなっていました。 #44411 (Konstantin Bogdanov).
  • データを含む EXPLAIN AST INSERT クエリを実行した際に発生する SYNTAX_ERROR を修正しました。#44207 をクローズしました。 #44413save-my-heart)。
  • CSV フォーマットで CRLF を含む bool 値を読み取る処理を修正。Closes #44401. #44442 (Kruglov Pavel).
  • LowCardinality 辞書上で and/or/if/multiIf 関数を実行しないようにし、その結果型が LowCardinality にならないようにしました。これは一部のケースで Illegal column ColumnLowCardinality エラーを引き起こす可能性がありました。この変更により #43603 を修正しました。#44469Kruglov Pavel)。
  • 設定 max_streams_for_merge_tree_reading で mutation を修正しました。 #44472 (Anton Popov)。
  • ASTSelectQuery::formatImpl において、GROUPING SETS 使用時に発生し得るヌルポインタ逆参照の問題を修正しました(#43049)。#44479Robert Schulze)。
  • 設定に基づいて、テーブル関数の引数、CAST 関数の引数、および JSONAsObject のスキーマ推論における型を検証するようにしました。 #44501 (Kruglov Pavel)。
  • LowCardinality と定数列を組み合わせた IN 関数の問題を修正し、#44503 をクローズ。#44506Duc Canh Le)。
  • CREATE TABLE 文における DEFAULT 式の正規化処理で発生していたバグを修正しました。関数 in の第 2 引数(または演算子 IN の右辺引数)が、CREATE クエリの実行時にその評価結果に置き換えられてしまうことがありました。#44496 を修正。#44547Alexander Tokmakov)。
  • WITH ROLLUPWITH CUBEWITH TOTALS を含む場合、プロジェクションは動作しません。以前のバージョンでは、プロジェクションの使用をスキップする代わりに、クエリが例外をスローしていました。これにより #44614 がクローズされました。また、#42772 もクローズされました。#44615Alexey Milovidov)。
  • 非同期ブロックがクリーンアップされなかったのは、関数 get all blocks sorted by time が非同期ブロックを取得していなかったことが原因です。 #44651 (Han Fei).
  • サブクエリを伴う JOINUNION、および 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 をクローズ。#44716Vladimir C)。
  • シャットダウン中(TraceCollector の破棄時)に発生する可能性のあるクラッシュを修正しました。#44757 に対応。#44758Nikolai Kochetov)。
  • 分散クエリ処理で発生しうるクラッシュを修正しました。totals または extremes を含むクエリが空の結果を返し、Distributed テーブルとローカルテーブルとの間で型が不一致な場合にクラッシュが発生する可能性がありました。#44738 を修正しました。#44760Nikolai Kochetov)。
  • フェッチ時の fsync(min_compressed_bytes_to_fsync_after_fetch)およびミューテーション時の小さいファイル(ttl.txt, columns.txt)に対する fsync(min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge)の挙動を修正。 #44781 (Azat Khuzhin).
  • ディスク間でパーツが移動されている状況で system.parts または system.parts_columns テーブルをクエリすると、まれにレースコンディションが発生する可能性がありました。#41145 で導入された問題です。#44809Alexey Milovidov)。
  • プロジェクションの最適化を有効にした場合に発生する可能性のある Context has expired エラーを修正しました。これは、実行時にコンテキストを使用する dictHas / dictGet などの特定の関数を含むクエリで再現できます。#44844 を修正。#44850Nikolai Kochetov)。
  • リモート fs から LowCardinality 辞書を読み込む際に発生する可能性がある Cannot read all data エラーを修正。 #44709 を解決。 #44875Nikolai Kochetov)。
  • ハードウェアモニターのセンサー値を読み取れない場合でも、ログに完全な例外メッセージを出力するのではなく、無視するようにしました。 #44895 (Raúl Marín).
  • 計算された INSERT の遅延時間が設定値を超えた場合には、max_delay_to_insert の値を使用します。 #44902 に関連。 #44916Igor Nikonov)。
  • UNION を含むクエリで発生する Different order of columns in UNION subquery エラーを修正。 #44866 を解決。 #44920 (Nikolai Kochetov)。
  • INSERT の遅延が正しく計算されない場合があり、その結果、正しい値ではなく常に max_delay_to_insert 設定値が遅延として使用されてしまう可能性がありました。単純な式 max_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold) を使用することで、しきい値を超えた parts 数に比例して遅延が増加するようにしました。#44902 をクローズしました。#44954Igor Nikonov)。
  • ワイドパートに lightweight delete mask がある場合の 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).
  • FileLog ストレージで発生する可能性がある cannot-read-all-data エラーを修正。#45051#38257 をクローズ。#45057Kseniia Sumarokova)。
  • クエリに GROUPING SETS が含まれている場合、メモリ効率の良い集計(distributed_aggregation_memory_efficient 設定)は無効になります。 #45058 (Nikita Taranov)。
  • update_field が指定されている場合の更新時に、RANGE_HASHED dictionary がレンジ列をプライマリキーの一部として扱うように修正します。#44588 をクローズします。#45061Maksim Kita)。
  • ネストされたラムダ内で LowCardinality をキャプチャした引数に対して発生するエラー Cannot capture column を修正しました。 #45028 を修正。 #45065Nikolai Kochetov)。
  • minmax/count プロジェクションが使用されている場合に、additional_table_filters により誤ったクエリ結果となっていた問題(追加のフィルタが適用されていなかった)を修正しました。 #45133 (Nikolai Kochetov).
  • histogram 関数が負の値を受け付けていたバグを修正しました。#45147 (simpleton)。
  • StorageJoin におけるカラムの誤った NULL 許容設定を修正し、#44940 をクローズ。#45184Vladimir C)。
  • background_fetches_pool_size 設定のリロード処理(実行時に値を増加させる場合)を修正。 #45189 (Raúl Marín).
  • KV エンジン(例: KeeperMap、EmbeddedRocksDB)上の SELECT クエリで、キーに対して IN を使用する際に、サブクエリが異なる型を返す場合でも正しく処理できるようにしました。 #45215 (Antonio Andelic)。
  • 一部のケースでの SEMI JOIN と join_use_nulls の論理エラーを修正し、#45163#45209 をクローズ。#45230Vladimir C)。
  • S3 からの読み取り時に発生する heap-use-after-free を修正。 #45253 (Kruglov Pavel).
  • Avro の Union 型が ['null', Nested type] の場合のバグを修正し、#45275 をクローズしました。bytes 型を誤って Float 型と推論してしまうバグを修正しました。#45276 (flynn)。
  • ストレージエンジン Merge を使用するテーブルで明示的な PREWHERE を使用しようとした際に、それが許可されていない場合は適切な例外をスローするようにしました。 #45319 (Antonio Andelic).
  • WSL1 Ubuntu 上で自己解凍型の ClickHouse が展開に失敗する問題を修正しました。原因は不整合があり、/proc/self/maps が 32 ビットファイルの inode を報告する一方で、stat は 64 ビットの inode を報告していたためです。 #45339 (Yakov Olkhovskiy)。
  • Distributed テーブルの起動時のレースコンディションを修正(async INSERT のファイルが複数回処理される可能性があった問題)。 #45360 (Azat Khuzhin).
  • ListObject リクエストが失敗した場合に、ストレージ S3 およびテーブル関数 s3 から読み取る際にクラッシュが発生する可能性がある問題を修正しました。 #45371 (Anton Popov).
  • 不正な構造の辞書(例: XML 設定内の型が誤っている場合)が存在する場合に発生していた SELECT ... FROM system.dictionaries 例外を修正。#45399Aleksei Filatov)。
  • INSERT INTO ... SELECT * FROM s3Cluster クエリで挿入先テーブルの構造が使用される場合の s3Cluster のスキーマ推論を修正しました。 #45422 (Kruglov Pavel).
  • HTTP を使用した JSON/BSONEachRow のパースにおいて、データ中の値ではなく一部のカラムにデフォルト値が使用されてしまう可能性があったバグを修正しました。 #45424 (Kruglov Pavel).
  • テキストソースからの IP 型の型付きパース時に発生していたバグ(コード: 632. DB::Exception: Unexpected data ... after parsed IPv6 value ...)を修正しました。 #45425 (Yakov Olkhovskiy).
  • close #45297 空の正規表現に対するチェックを追加。#45428 (Han Fei).
  • (特に分散クエリで発生しがちな)クエリのハングを修正。 #45448 (Azat Khuzhin).
  • ThreadPool::schedule からの例外発生時に、allow_asynchronous_read_from_io_pool_for_merge_tree が有効な場合に発生し得たデッドロックを修正しました。 #45481 (Nikolai Kochetov).
  • DETACH 後にテーブルが使用中のままになる可能性があった問題を修正。 #45493 (Azat Khuzhin).
  • クエリがキャンセルされ、その実行中に並列パースが行われている場合にまれに発生する異常終了を修正しました。 #45498 (Anton Popov).
  • Distributed テーブルの作成とそのテーブルへの INSERT の間に発生する race(競合状態)を修正(テーブルへの INSERT 実行中に CANNOT_LINK が発生する可能性があった)。#45502 (Azat Khuzhin).
  • キャッシュポリシーの getter に適切なデフォルト値(SLRU)を追加。 #45514 をクローズ。 #45524Kseniia Sumarokova)。
  • ミューテーションでの array join の使用を禁止します #42637 #44447 (SmitaRKulkarni)。
  • エイリアス付きテーブル名およびカラムトランスフォーマーと組み合わせた修飾付きアスタリスクに関する不具合を修正。#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年の変更履歴