後方互換性を持たない変更
- ストレージ
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 のエポックである 2010-11-04 (UNIX エポックから 1288834974657 ミリ秒) を渡すこともできます。古い conversion functions は非推奨であり、移行期間後に削除される予定です。それでも使用する場合は、設定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).- バイナリ数学関数 (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 文字列間の edit distance を計算する新しい関数
editDistanceUTF8を追加。 #65269 (LiuNeng). - カスタム HTTP ハンドラーでカスタムレスポンスヘッダーをサポートするため、
http_response_headers設定を追加。 #63562 (Grigorii). - クエリ結果を無限ループで返せるようにする新しい table function
loopを追加。 #63452 (Sariel). これはテストに役立ちます。 system.query_logに 2 つの追加カラムused_privilegesとmissing_privilegesを導入。used_privilegesにはクエリ実行中にチェックされた権限が格納され、missing_privilegesには不足している必要な権限が格納されます。 #64597 (Alexey Katsman).- 有効にすると長い table (デフォルトでは 50 行) の末尾にカラム名を表示する setting
output_format_pretty_display_footer_column_namesを追加。表示対象となる最小行数のしきい値は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).- Parquet バイナリを ClickHouse のカラムへ直接読み込めるネイティブ Parquet リーダーを追加しました。これは設定
input_format_parquet_use_native_readerで制御され、デフォルトでは無効です。 #60361 (ZhiHong Zhang). - クエリの絞り込み条件で MergeTree テーブルの厳密な範囲を選択できる場合に、部分的な単純 count 最適化をサポートしました。#60463 (Amos Bird) 。
- 複数スレッドの chunk を単一の transform に集約することで、マルチスレッド
INSERTの最大メモリ使用量を削減しました。#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).
- リモートファイルシステム上のデータについて、vertical merge 中の先読みを有効化しました。これにより、データがリモートファイルシステムに保存されているテーブルでの vertical merge のレイテンシが改善されます。 #64314 (Anton Popov).
- パフォーマンスを向上させるため、
ColumnSparse::filterのisDefaultに対する冗長な呼び出しを削減しました。#64426 (Jiebin Sun) 。 - 複数の非同期
getChildrenリクエストを送ることで、keeper-client のfind_super_nodesおよびfind_big_familyコマンドを高速化しました。#64628 (Alexander Gololobov) 。 - Nullable の数値型引数に対する関数
least/greatestを改善しました。#64668 (KevinyhZou) 。 - クエリプラン内で、連続する 2 つのフィルタリングステップをマージできるようになりました。これにより、フィルタ条件を親ステップからプッシュダウンできる場合のフィルタプッシュダウン最適化が向上します。 #64760 (Nikolai Kochetov).
- vertical final 実装における不適切な最適化を削除し、vertical final アルゴリズムをデフォルトで再び有効にしました。#64783 (Duc Canh Le) 。
- フィルタ式からALIASノードを削除しました。これにより、
PREWHEREを使用するクエリ (新しいアナライザ使用時) のパフォーマンスがわずかに向上します。#64793 (Nikolai Kochetov) 。 - OpenSSLのセッションキャッシュを再度有効にしました。 #65111 (Robert Schulze).
- INSERT 時のスキップ索引および統計情報のマテリアライズを無効化する設定 (
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 format で Tuples を処理・解釈する際の挙動を元に戻しました。この変更により、実質的に 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) 。 - ユーザーのconfigで指定した設定は、object storage上の
MergeTreeにおけるマージおよびミューテーションには影響しません。 #64456 (alesapin). - object storage において、非標準の error コード
TotalQpsLimitExceededを再試行可能な error としてサポートしました。#64520 (Sema Checherinda). - オープンソース版と ClickHouse Cloud 版の両方で、高度なダッシュボードを更新し、‘最大同時ネットワーク接続数’のチャートを追加しました。#64610 (Thom O’Connor) 。
zeros_mtとgenerateRandomの進捗レポートを改善しました。#64804 (Raúl Marín).- サンプリングが現在有効かどうかを示す非同期メトリック
jemalloc.profile.activeを追加しました。これは prof.active に加えて使われる有効化の仕組みで、呼び出し元スレッドでサンプリングを行うには両方が有効である必要があります。#64842 (Unalian). allow_experimental_join_conditionの「important」マークを削除しました。このマークにより、バージョンが混在するクラスターで分散クエリが正常に実行できなくなる可能性がありました。#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) 。filetable function でも、ファイルディスクリプタに対してmax_read_buffer_size設定が適用されるようにしました。#64532 (Azat Khuzhin).- 未対応のストレージでは、materialized view であってもトランザクションを無効にしました。#64918 (alesapin).
- 古いアナライザでの
QUALIFY句の使用を禁止しました。古いアナライザはQUALIFYを無視していたため、ミューテーションで予期しないデータ削除につながる可能性がありました。#65356 (Dmitry Novik).
バグ修正 (正式な安定版リリースにおけるユーザーに影響する不具合)
- 「set」スキップ索引が IN および indexHint() で機能しない問題を修正しました。 #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).
- アナライザの修正: INTERPOLATE 使用時に発生していた “Not found column” エラーを修正しました。#64096 (Yakov Olkhovskiy)。
- MaterializedView としての CREATE TABLE で発生する LOGICAL_ERROR を防止しました。 #64174 (Raúl Marín).
- query cache は、異なるデータベースに対する2 つの同一クエリを、別個のものとして扱うようになりました。以前の動作では、テーブルの読み取り権限がなくても、それを回避できる可能性がありました。 #64199 (Robert Schulze)。
- StatusFile の ~WriteBufferFromFileDescriptor で、捕捉されない例外が発生した際にプロセスが異常終了する可能性がある問題を修正しました。#64206 (Kruglov Pavel)
- ARRAY JOIN を含む分散クエリで発生する重複した alias エラーを修正しました。 #64226 (Nikolai Kochetov).
- 文字列から整数への accurateCast の予期しない動作を修正しました。 #64255 (wudidapaopao).
- いずれかのORグループに相互排他的なアトムが含まれる場合のCNFの簡約処理を修正しました。#64256 (Eduard Karacharov) 。
- Query Tree のサイズ検証の不具合を修正しました。#64377 (Dmitry Novik) 。
- 修正: PREWHERE 使用時の Buffer table における不正なキャストによる論理エラー。#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).
- GROUP BY キーに定数 CTE がある分散クエリで発生する Cannot find column エラーを修正しました。 #64519 (Nikolai Kochetov).
- フォーマッタが奇数文字数を生成し、末尾の文字が 0 の場合に、function formatDateTimeInJodaSyntax の出力が正しくなるよう修正しました。たとえば、SELECT formatDateTimeInJodaSyntax(toDate(‘2012-05-29’), ‘D’) は、以前は 15 を返していましたが、現在は正しく 150 を返します。#64614 (LiuNeng)。
- すでに -If コンビネータが使用されている場合は、集約の書き換えを行わないようにしました。 #64638 (Dmitry Novik).
- float の型推論を修正 (バッファが小さい場合、つまり —max_read_buffer_size 1 のとき) 。#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)。
- mixed join 条件に含まれる Set に対する、サブクエリを伴う不等価 join (experimental) の問題を修正しました。 #64775 (lgbo).
- plain_rewritable ディスク上のローカル cache で発生していたクラッシュを修正しました。#64778 (Julia Kartseva)。
- Nested カラムによって ARRAY JOIN を含む分散クエリで「Cannot find column」エラーが発生する問題を修正しました。#64755 を修正。#64801 (Nikolai Kochetov)。
- slru cache ポリシーにおけるメモリリークを修正しました。 #64803 (Kseniia Sumarokova).
- 複数種類のクエリでメモリ追跡が不正確になる可能性があった問題を修正しました: S3 から何らかのデータを読み取るクエリ、HTTPプロトコル経由のクエリ、非同期挿入。 #64844 (Anton Popov).
- PREWHERE を使用して materialized view から読み取るクエリで、materialized view のカラム型がソーステーブルと異なる場合に発生する Block structure mismatch error を修正しました。Fixes #64611. #64855 (Nikolai Kochetov).
- テーブルで、サブクエリ + Replicatedデータベース + 並列レプリカ + アナライザを伴う有効期限 (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).
- File系ストレージで、確定済みのバッファに書き込まないようにしました。 #65063 (Kruglov Pavel).
- 循環する別名がある場合にクエリ実行時間が無限になる可能性を修正しました。#64849 の修正。#65081 (Nikolai Kochetov)。
- INTERPOLATE (alias) (新しいアナライザ) を使用するリモートクエリで発生する Unknown expression identifier エラーを修正しました。#64636 を修正。#65090 (Nikolai Kochetov) 。
- 集約処理の外へ算術演算を押し出す最適化を修正しました。新しいアナライザでは、この最適化が一度しか適用されていませんでした。#65104 (Dmitry Novik)。
- 新しいアナライザでのaggregate function名の書き換えを修正しました。#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)。