ClickHouse Cloud 向け v24.6 変更ログ
v24.6 リリースに基づき、ClickHouse Cloud サービスに関係する変更点を記載します。
後方互換性のない変更
- ストレージ
S3QueueのOrderedモードにおける並列処理を再設計しました。s3queue_processing_threads_numまたはs3queue_total_shards_num設定を使用していた場合、この PR は 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 のエポック(UNIX エポックから 1288834974657 ミリ秒、すなわち 2010-11-04)など、別のエポックを引数として渡すこともできます。旧来の変換関数は非推奨となっており、移行期間後に削除されます。それでも引き続きそれらを使用する場合は、設定allow_deprecated_snowflake_conversion_functionsを有効にしてください。#64948(Robert Schulze)。
新機能
- 空のタプルをサポートしました。 #55061 (Amos Bird).
- Hilbert Curve のエンコードおよびデコード関数を追加しました。 #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 つの UTF8 文字列間の 編集距離 を計算する新しい関数
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' スキップインデックスが動作しない問題を修正。 #62083 (Michael Kolupaev)。
- テーブルが adaptive granularity を使用していない場合に、FINAL を使用したクエリが誤った結果を返す問題を修正。#62432 (Duc Canh Le)。
- パラメータ化ビューの値を代入する際に関数を実行できるようにした。#63502 (SmitaRKulkarni)。
- Parquet メモリトラッキングを修正しました。#63584 (Michael Kolupaev)。
- 分散クエリの結果でデータが欠落するまれなケースを修正しました。#63691 (vdimir)。
- Tuple(Map(LowCardinality(String), String), ...) 型の列の読み取り処理を修正しました。#63956 (Anton Popov).
- 未修飾の COLUMNS マッチャーの解決処理を修正。入力カラムの順序を保持し、不明な識別子の使用を禁止。#63962 (Dmitry Novik)。
- 異なる型(式と関数)の循環エイリアスで発生する
Cyclic aliasesエラーを修正。#63993 (Nikolai Kochetov)。 - この修正では、クエリパイプライン内の各ビューごとに正しい definer が設定されるよう、適切に再定義されたコンテキストを使用します。#64079 (pufit)。
- Fix analyzer: INTERPOLATE 使用時に発生していた "Not found column" エラーを修正。#64096 (Yakov Olkhovskiy).
- CREATE TABLE を MaterializedView として実行した際の 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)。
- クエリツリーのサイズ検証を修正。#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 キー内の列が見つからないエラーを修正しました。#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).
- 新しいアナライザーにおいて常に true となる 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)。
- 混合結合条件に含まれる集合に対してサブクエリを用いた非等値結合(実験的機能)を修正。 #64775 (lgbo).
- plain_rewritable ディスク上のローカルキャッシュで発生していたクラッシュを修正。#64778 (Julia Kartseva)。
- Nested 列に対する ARRAY JOIN を含む分散クエリで発生する「Cannot find column」エラーを修正。#64755 の不具合を修正。#64801 (Nikolai Kochetov)。
- SLRU キャッシュポリシーのメモリリークを修正。#64803 (Kseniia Sumarokova).
- S3 からデータを読み取るクエリ、HTTP プロトコル経由のクエリ、非同期 insert を行うクエリなど、いくつかの種類のクエリで発生する可能性があった誤ったメモリトラッキングを修正しました。#64844 (Anton Popov).
- ソーステーブルとは異なる型の列を持つマテリアライズドビューから PREWHERE を使用して読み取るクエリで発生していた Block 構造の不一致エラーを修正しました。#64611 を修正。#64855(Nikolai Kochetov)。
- テーブルにサブクエリを含む TTL とレプリケートされたデータベース、parallel replicas、analyzer が組み合わさった場合にまれに発生するクラッシュを修正しました。発生頻度は非常に低いですが、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)。
- ファイルライクなストレージで確定済みバッファへの書き込みを回避。 #65063 (Kruglov Pavel).
- 循環エイリアスが存在する場合にクエリの実行時間が無限になる可能性がある問題を修正。#64849 を解決。#65081 (Nikolai Kochetov)。
- INTERPOLATE(エイリアス)(新しいアナライザ)を用いたリモートクエリで発生する "Unknown expression identifier" エラーを修正。#64636 を修正。#65090(Nikolai Kochetov)。
- 集約処理から算術演算を外側に押し出す最適化を修正しました。新しいアナライザーでは、この最適化が一度しか適用されていませんでした。#65104 (Dmitry Novik)。
- 新しいアナライザーでの集約関数名の書き換えを修正。#65110 (Dmitry Novik)。
- クライアントソケットからリクエストボディ(の一部)を読み取っている際に受信タイムアウトが発生した場合、200 OK ではなく 5xx で応答するようにしました。#65118 (Julian Maicher)。
- ヘッジリクエストでクラッシュする可能性のある問題を修正。#65206 (Azat Khuzhin)。
- Hashed および Hashed_Array 辞書のショートサーキット評価におけるバグを修正しました。このバグにより未初期化の数値が読み込まれ、さまざまなエラーの原因となる可能性がありました。#65256 (jsc0218)。
- このPRでは、定数(IN演算子の第2引数)の型が、IN演算子の型変換処理の全過程を通して常に参照可能であることを保証します。そうしないと、型情報が失われることで、DateTime から Date への変換など、一部の変換が失敗する可能性があります。fix (#64487)。#65315 (pn)。