Cloud 向け V24.6 変更履歴
v24.6 リリースに基づく、ClickHouse Cloud サービスに関係する変更点です。
後方互換性のない変更
- ストレージ
S3QueueのOrderedモードにおける並列処理を再設計しました。この PR は、s3queue_processing_threads_numまたはs3queue_total_shards_numの設定を使用していた場合、Ordered モードとの後方互換性がなくなります。s3queue_total_shards_num設定は削除されました。以前はs3queue_allow_experimental_sharded_modeが有効な場合にのみ使用可能でしたが、この設定は今回非推奨となりました。新しい設定としてs3queue_bucketsが追加されました。#64349(Kseniia Sumarokova)。 - 新しい関数
snowflakeIDToDateTime、snowflakeIDToDateTime64、dateTimeToSnowflakeID、dateTime64ToSnowflakeIDが追加されました。既存の関数snowflakeToDateTime、snowflakeToDateTime64、dateTimeToSnowflake、dateTime64ToSnowflakeと異なり、新しい関数はgenerateSnowflakeID関数と互換性があります。つまり、generateSnowflakeIDによって生成された Snowflake ID を受け取り、generateSnowflakeIDと同じ型(UInt64)の Snowflake ID を生成します。さらに、新しい関数は、generateSnowflakeIDと同様に UNIX エポック(いわゆる 1970-01-01)をデフォルトとします。必要に応じて、別のエポック(例: Twitter/X のエポック 2010-11-04、UNIX エポックからの 1288834974657 ミリ秒)を指定できます。既存の変換関数は非推奨となり、移行期間後に削除されます。引き続きそれらを使用するには、allow_deprecated_snowflake_conversion_functions設定を有効化してください。#64948(Robert Schulze)。
新機能
- 空のタプルをサポートしました。 #55061 (Amos Bird).
- Hilbert 曲線のエンコードおよびデコード関数を追加しました。 #60156 (Artem Mustafin).
hilbertEncodeに対する索引解析のサポートを追加しました。 #64662 (Artem Mustafin).- 関数
readWKTLineStringを使用して、WKT 形式のLINESTRINGジオメトリを読み取ることをサポートしました。 #62519 (Nikita Mikhaylov). - Twitter スタイルの Snowflake ID を生成するための新しい SQL 関数
generateSnowflakeIDを追加しました。 #63577 (Danila Puzov). =演算子を使用してIPv4型とIPv6型を比較することをサポートしました。 #64292 (Francisco J. Jurado Moreno).- 2 項の数学関数 (pow, atan2, max2, min2, hypot) で Decimal 型引数をサポートしました。 #64582 (Mikhail Gorshkov).
- SQL 関数
parseReadableSize(OrNullおよびOrZeroバリアントを含む) を追加しました。 #64742 (Francisco J. Jurado Moreno). - ファイル系ストレージ (s3/file/hdfs/url/azureBlobStorage) に
_time仮想カラムを追加しました。 #64947 (Ilya Golshtein). - 新しい関数
base64URLEncode、base64URLDecode、tryBase64URLDecodeを導入しました。 #64991 (Mikhail Gorshkov). - 2 つの UTF-8 文字列間の編集距離を計算する新しい関数
editDistanceUTF8を追加しました。 #65269 (LiuNeng). - カスタム HTTP ハンドラーで任意のレスポンスヘッダーを設定できるようにする
http_response_headers設定を追加しました。 #63562 (Grigorii). - クエリ結果を無限ループで返すことをサポートする新しいテーブル関数
loopを追加しました。 #63452 (Sariel). これはテストに便利です。 system.query_logに 2 つのカラムused_privilegesとmissing_privilegesを追加しました。used_privilegesにはクエリ実行中にチェックされた権限が格納され、missing_privilegesには不足している必須権限が含まれます。 #64597 (Alexey Katsman).- 設定
output_format_pretty_display_footer_column_namesを追加しました。有効化すると、長いテーブル (デフォルトでは 50 行) の末尾にカラム名が表示されます。行数のしきい値はoutput_format_pretty_display_footer_column_names_min_rowsによって制御されます。 #65144 (Shaun Struwig).
パフォーマンスの向上
- #60459 (24.5) で導入された CROSS JOIN における性能劣化を修正。#65243 (Nikita Taranov)。
- io_uring の再送信に関する可視性を向上。プロファイルイベント IOUringSQEsResubmits を IOUringSQEsResubmitsAsync に改名し、新たに IOUringSQEsResubmitsSync を追加。#63699 (Tomer Shafir)。
- すべての関数が正しいサイズのカラムで呼び出されていることを検証するアサーションを導入しました。#63723 (Raúl Marín)。
PRIMARY KEYで設定された順序を維持しつつ、サイズ最適化のために挿入時に行を並べ替えられる機能を追加しました。これは設定項目optimize_row_orderによって制御されます(デフォルトではオフ)。 #63578 (Igor Markelov).- ClickHouse のカラムに Parquet バイナリを直接読み込めるネイティブな Parquet リーダーを追加しました。これは設定
input_format_parquet_use_native_reader(デフォルトでは無効)で制御されます。 #60361 (ZhiHong Zhang)。 - クエリフィルターが MergeTree テーブルから正確な範囲を選択できる場合に、単純カウントの部分的な最適化をサポートします。 #60463 (Amos Bird).
- 複数スレッドの
INSERTの最大メモリ使用量を、複数スレッドのチャンクを単一の transform 内で集約することで削減しました。 #61047 (Yarik Briukhovetskyi). - 固定的なメモリ割り当てを行い、余分なバッファの割り当てを避けることで、Azure オブジェクト ストレージ使用時のメモリ使用量を削減しました。 #63160 (SmitaRKulkarni).
ColumnNullable::sizeにおける仮想関数呼び出しの回数を削減しました。 #60556 (HappenLee).- 正規表現引数が1文字の場合に
splitByRegexpを高速化しました。 #62696 (Robert Schulze)。 - 使用されたキーの最小値と最大値を追跡することで、8 ビットおよび 16 ビットキーでの集計を高速化します。これにより、確認が必要なセルの数を減らすことができます。 #62746 (Jiebin Sun).
- 左辺が
LowCardinality、右辺が定数の集合である場合のIN演算子を最適化しました。 #64060 (Zhiguo Zhou). ConcurrentHashJoin内のハッシュテーブルを初期化および破棄する際にスレッドプールを使用します。 #64241 (Nikita Taranov).- スパースなカラムを持つテーブルでの縦方向のマージを最適化。 #64311 (Anton Popov).
- 垂直マージ時にリモートファイルシステムからデータをプリフェッチできるようにしました。これにより、データがリモートファイルシステムに保存されているテーブルでの垂直マージのレイテンシが改善されます。 #64314 (Anton Popov).
ColumnSparse::filterのisDefaultへの冗長な呼び出しを削減し、パフォーマンスを向上させました。 #64426 (Jiebin Sun).find_super_nodesとfind_big_familyの keeper-client コマンドを、複数の非同期getChildrenリクエストを発行することで高速化しました。 #64628 (Alexander Gololobov).- NULL 許容の数値型引数に対して、関数
least/greatestの動作を改善。 #64668 (KevinyhZou). - クエリプランにおける連続する二つのフィルタリングステップを結合できるようにしました。これにより、親ステップからフィルター条件をプッシュダウンできる場合に、フィルタープッシュダウン最適化が向上します。 #64760 (Nikolai Kochetov).
- vertical final の本実装から誤った最適化を削除し、デフォルトで vertical final アルゴリズムを再度有効化しました。 #64783 (Duc Canh Le).
- フィルター式から ALIAS ノードを削除し、新しいアナライザーを用いた
PREWHEREを含むクエリのパフォーマンスをわずかに向上させました。#64793 (Nikolai Kochetov). - OpenSSL セッションキャッシュを再度有効化しました。 #65111 (Robert Schulze).
- 挿入時のスキップインデックスおよび統計情報のマテリアライズを無効化する設定(
materialize_skip_indexes_on_insertおよびmaterialize_statistics_on_insert)を追加しました。 #64391 (Anton Popov). - 割り当てられたメモリサイズに基づいて行グループのサイズを計算し、シングルスレッドモードにおける Parquet ライターのピークメモリ使用量を削減しました。 #64424 (LiuNeng).
- 疎なカラムのイテレータを改善し、
sizeの呼び出し回数を削減しました。 #64497 (Jiebin Sun). - Azure Blob Storage へのバックアップでサーバーサイドコピーを使用するように条件を更新しました。 #64518 (SmitaRKulkarni).
- 多数のスキップインデックスを持つテーブルに対する縦方向マージ時のメモリ使用量を最適化しました。 #64580 (Anton Popov).
改善
- ClickHouse が CSV 形式の Tuple を処理および解釈する従来の動作に戻しました。この変更により、実質的に ClickHouse/ClickHouse#60994 をリバートし、次の設定でのみ利用可能になりました: output_format_csv_serialize_tuple_into_separate_columns、input_format_csv_deserialize_separate_columns_into_tuple、および input_format_csv_try_infer_strings_from_quoted_tuples。#65170 (Nikita Mikhaylov)。
- システムテーブルに対して
SHOW CREATE TABLEを実行すると、各テーブルが何のために存在するのかを説明する、そのテーブル固有のとても便利なコメントが表示されるようになりました。 #63788 (Nikita Mikhaylov). round(),roundBankers(),floor(),ceil(),trunc()関数の第2引数(scale)に、非定数も指定できるようになりました。 #64798 (Mikhail Gorshkov)。- サービスが飽和している状態でスレッドをスケジューリングする際に、MergeTree インデックス解析中に発生しうるデッドロックを回避しました。 #59427 (Sean Haynes).
- S3 プロキシのサポートおよびトンネリングに関する、いくつかの軽微なコーナーケースの修正。 #63427 (Arthur Passos)。
plain_rewritableメタデータストレージによって作成および削除されたディレクトリ数と、ローカルとリモートを対応付けるインメモリマップ内のエントリ数を追跡するメトリクスを追加。 #64175 (Julia Kartseva)。- クエリキャッシュは、設定が異なる同じクエリを別のクエリとして扱うようになりました。これにより、
limitやadditional_table_filtersなど、異なる設定がクエリ結果に影響する場合でも、堅牢性が向上します。 #64205 (Robert Schulze). - オブジェクトストレージで、非標準エラーコード
QpsLimitExceededを再試行可能なエラーとしてサポートしました。 #64225 (Sema Checherinda). - 出力ブロックの平均バイト数を制御するための新しい設定
input_format_parquet_prefer_block_bytesを追加し、input_format_parquet_max_block_sizeのデフォルト値を 65409 に変更しました。 #64427 (LiuNeng)。 - オブジェクトストレージ上の
MergeTreeに対するマージおよびミューテーションには、ユーザーの設定ファイルにおける設定は影響しません。 #64456 (alesapin). - オブジェクトストレージにおいて、非標準のエラーコード
TotalQpsLimitExceededを再試行可能なエラーとしてサポートしました。 #64520 (Sema Checherinda). - オープンソース版および ClickHouse Cloud 版の両方の Advanced Dashboard を更新し、「Maximum concurrent network connections」のチャートを追加しました。 #64610 (Thom O'Connor).
zeros_mtとgenerateRandomの進捗レポートを改善。 #64804 (Raúl Marín).- サンプリングが現在有効かどうかを示すために、非同期メトリック
jemalloc.profile.activeを追加しました。これはprof.activeに加えて使用される有効化手段であり、呼び出しスレッドがサンプリングを実行するには両方が有効である必要があります。 #64842 (Unalian). allow_experimental_join_conditionの「重要」マークを削除しました。このマークが原因で、異なるバージョンが混在するクラスタで分散クエリが正常に実行されない場合がありました。 #65008 (Nikita Mikhaylov).- サーバーの非同期メトリクス
DiskGetObjectThrottler*およびDiskGetObjectThrottler*を追加しました。これらは、ディスク設定s3_max_get_rpsおよびs3_max_put_rpsで定義された 1 秒あたりのリクエスト数に対するレート制限と、ディスクのスロットリング上限に達することなく現在送信可能なリクエスト数を反映します。メトリクスは、制限が設定されているすべてのディスクごとに定義されます。 #65050 (Sergei Trifonov)。 bcrypt_hashを使用したユーザー作成時の検証を追加。 #65242 (Raúl Marín).PREWHEREの処理中および処理後に読み取られた行数を示す profile events を追加しました。 #64198 (Nikita Taranov)。- 並列レプリカ使用時に
EXPLAIN PLANでクエリを出力するようにしました。 #64298 (vdimir). allow_deprecated_functionsをallow_deprecated_error_prone_window_functionsに名称変更しました。 #64358 (Raúl Marín).fileテーブル関数において、ファイルディスクリプタにもmax_read_buffer_size設定が適用されるようにしました。 #64532 (Azat Khuzhin).- マテリアライズドビューに対しても、サポートされていないストレージではトランザクションを無効化しました。 #64918 (alesapin).
- 旧アナライザーでは
QUALIFY句の使用を禁止しました。旧アナライザーはQUALIFYを無視していたため、ミューテーションにおいて予期しないデータ削除が発生する可能性がありました。 #65356 (Dmitry Novik)。
バグ修正(公式の安定版リリースにおけるユーザーにとって目に見える誤動作)
- IN と indexHint() の使用時に 'set' skip index が動作しない問題を修正。#62083 (Michael Kolupaev).
- テーブルが adaptive granularity を使用していない場合に、FINAL 句を使用するクエリが誤った結果を返す問題を修正。#62432 (Duc Canh Le)。
- パラメータ化された VIEW の値を代入する際に関数を実行できるようにしました。#63502 (SmitaRKulkarni)。
- Parquet のメモリ使用量トラッキングを修正しました。#63584(Michael Kolupaev)
- 分散クエリの結果からデータが欠落するまれなケースを修正。#63691 (vdimir)。
- Tuple(Map(LowCardinality(String), String), ...) 型カラムの読み取りを修正しました。#63956 (Anton Popov)。
- 未修飾の COLUMNS matcher の解決を修正し、入力カラムの順序を保持するとともに、不明な識別子の使用を禁止しました。#63962 (Dmitry Novik)。
- 異なる型(式および関数)の循環エイリアスに対して発生する Cyclic aliases エラーを修正。#63993 (Nikolai Kochetov)。
- この修正により、クエリパイプライン内の各ビューごとに、正しい definer を持つよう適切に再定義されたコンテキストが使用されるようになります。#64079 (pufit)。
- アナライザーの修正: INTERPOLATE 使用時に発生していた "Not found column" エラーを修正しました。#64096 (Yakov Olkhovskiy).
- MaterializedView としての CREATE TABLE 実行時に LOGICAL_ERROR が発生しないようにした。#64174 (Raúl Marín)。
- クエリキャッシュは、異なるデータベースに対する同一の2つのクエリを、別個のものとして扱うようになりました。以前の動作では、テーブルの読み取り権限がない場合でも、それを回避する手段として悪用される可能性がありました。#64199 (Robert Schulze)。
- StatusFile 内の ~WriteBufferFromFileDescriptor で、捕捉されない例外発生時に異常終了する可能性があった問題を修正しました。#64206 (Kruglov Pavel)。
- ARRAY JOIN を含む分散クエリで発生するエイリアスの重複エラーを修正。#64226 (Nikolai Kochetov)。
- string から integer への想定外の accurateCast を修正。#64255 (wudidapaopao)。
- OR グループのいずれかに互いに排他的な原子が含まれている場合の CNF の簡約処理を修正しました。#64256 (Eduard Karacharov)。
- Query Tree のサイズ検証を修正。#64377 (Dmitry Novik)
- PREWHERE を使用する Buffer テーブルで発生する不正なキャストによる論理エラーを修正。#64388 (Nikolai Kochetov)。
- デフォルト式を含むテーブルに対する CREATE TABLE AS クエリの不具合を修正しました。#64455 (Anton Popov)。
- Nullable キーを持つテーブルでの ORDER BY ... NULLS FIRST / LAST に対する optimize_read_in_order の動作を修正しました。#64483 (Eduard Karacharov)。
- GLOBAL IN にエイリアスを使用したクエリで発生していた「Expression nodes list expected 1 projection names」および「Unknown expression or identifier」エラーを修正しました。#64517 (Nikolai Kochetov)
- 定数CTEを含む分散クエリで、GROUP BYキー内のカラムに対して発生していた「Cannot find column」エラーを修正。#64519 (Nikolai Kochetov)。
- フォーマッタが文字数を奇数個生成し、かつ最後の文字が 0 となる場合の関数
formatDateTimeInJodaSyntaxの出力を修正しました。たとえば、SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')は、これまでの 15 ではなく、正しく 150 を返すようになりました。#64614 (LiuNeng)。 - -If コンビネータがすでに使用されている場合、集約処理を書き換えないようにしました。#64638 (Dmitry Novik)
- 小さいバッファの場合(例: --max_read_buffer_size 1)における float の型推論を修正。#64641 (Azat Khuzhin)。
- 式付き TTL が動作しなくなる可能性のあるバグを修正。#64694 (alesapin).
- 新しい analyzer において、常に真となる WHERE および PREWHERE 式の削除処理を修正。#64695 (Nikolai Kochetov)。
- startsWith、endsWith、match、multiSearchAny の結果でフィルタリングする際に、トークンベースのテキストインデックス(ngrambf、full_text)によってテキストの一部が過剰に削除されてしまう問題を修正しました。#64720(Eduard Karacharov)。
- UTF8::computeWidth 関数における ANSI CSI エスケープの誤った動作を修正しました。#64756 (Shaun Struwig)。
- サブクエリ間で ORDER BY / LIMIT BY 句が誤って削除されてしまうケースを修正。#64766 (Raúl Marín)。
- 混在した結合条件内の Set に対してサブクエリを用いる非等値結合を(実験的に)修正。#64775 (lgbo)。
- plain_rewritable ディスク上のローカルキャッシュで発生していたクラッシュを修正。#64778 (Julia Kartseva)。
- Nested カラムに対する ARRAY JOIN を含む分散クエリで発生する "Cannot find column" エラーを修正。#64755 を修正。#64801 (Nikolai Kochetov).
- SLRU キャッシュポリシーのメモリリークを修正。#64803 (Kseniia Sumarokova)。
- S3 からデータを読み取るクエリ、HTTP プロトコル経由のクエリ、非同期挿入など、いくつかの種類のクエリで発生しうるメモリトラッキングの不具合を修正しました。#64844 (Anton Popov)。
- materialized view から PREWHERE 句を用いて読み取るクエリで、materialized view 側のカラムの型がソーステーブルと異なる場合に発生する Block structure mismatch エラーを修正しました。Fixes #64611. #64855 (Nikolai Kochetov)。
- テーブルにサブクエリ付きの有効期限 (TTL) が設定されており、データベースがレプリケートされていて、並列レプリカとアナライザが有効な場合にごくまれに発生するクラッシュを修正しました。非常にまれなケースですが、有効期限 (TTL) とサブクエリを組み合わせて使用しないでください。 #64858 (alesapin).
- ClickHouse/ClickHouse#54211 で、パラメータ化された VIEW に対して動作しなくなっていた ALTER MODIFY COMMENT クエリを修正。#65031 (Nikolay Degterinsky).
- cluster_secure_connection パラメータが有効な場合の DatabaseReplicated における host_id を修正しました。これまでは、パラメータが有効化されていても、DatabaseReplicated によってクラスタ内で作成されるすべての接続がセキュア接続になっていませんでした。#65054 (Nikolay Degterinsky)。
- StorageMerge 用 PREWHERE 最適化後に発生する Not-ready Set エラーを修正。#65057 (Nikolai Kochetov)。
- ファイルライクなストレージでは finalized バッファへの書き込みを回避。 #65063 (Kruglov Pavel)。
- 循環エイリアスが存在する場合にクエリが無限に実行されてしまう可能性のある問題を修正しました。#64849 を修正。#65081 (Nikolai Kochetov)。
- INTERPOLATE (alias) を使用したリモートクエリで発生する Unknown expression identifier エラーを修正しました (new analyzer)。#64636 を修正しました。#65090 (Nikolai Kochetov)。
- 集約から算術演算を外に押し出す最適化を修正しました。新しい analyzer では、その最適化が一度しか適用されていませんでした。#65104 (Dmitry Novik)。
- 新しいアナライザーにおける集約関数名の書き換えを修正。#65110 (Dmitry Novik)
- クライアントソケットからリクエストボディ(の一部)を読み取っている間に受信タイムアウトが発生した場合、200 OK ではなく 5xx を返すようにしました。#65118 (Julian Maicher).
- ヘッジされたリクエストでクラッシュが発生する可能性のある問題を修正。#65206 (Azat Khuzhin)。
- Hashed および Hashed_Array Dictionary のショートサーキット評価におけるバグを修正しました。このバグにより未初期化の数値が読み込まれ、さまざまなエラーが発生する可能性がありました。 #65256 (jsc0218)。
- このPRでは、
IN演算子の型変換処理中に、定数(IN演算子の第2引数)の型情報が常に保持されていることを保証します。そうしない場合、型情報が失われることで、DateTimeからDateへの変換など、一部の変換が失敗する可能性があります。修正 (#64487)。#65315 (pn)。