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

Cloud 向け V24.5 変更履歴

v24.5 リリースに基づく ClickHouse Cloud サービスに関する変更点をまとめています。

互換性を破る変更

  • 実際にはマイクロ秒精度であることを反映するため、system.zookeeper テーブル内のカラム名を duration_ms から duration_microseconds に変更しました。#60774 (Duc Canh Le)。

  • max_parallel_replicas を 0 に設定することを禁止しました。これは意味をなさず、0 に設定すると予期しない論理エラーを引き起こす可能性があるためです。#60140 をクローズ。#61201 (Kruglov Pavel)。

  • 実験的機能である LIVE VIEW の一部である INSERT WATCH クエリのサポートを削除しました。#62382 (Alexey Milovidov)。

  • 関数 neighborrunningAccumulaterunningDifferenceStartingWithFirstValuerunningDifference の利用は非推奨になりました(エラーを起こしやすいため)。代わりに適切なウィンドウ関数を使用する必要があります。これらを再度有効化するには、allow_deprecated_error_prone_window_functions=1 を設定してください。#63132 (Nikita Taranov)。

下位互換性のない変更

  • 新しい ClickHouse バージョンでは、関数 geoDistance、greatCircleDistance、greatCircleAngle は、すべての引数が Float64 の場合、内部計算および戻り値の型として 64 ビット倍精度浮動小数点数型を使用します。これにより Issue #58476 が解決されます。以前のバージョンでは、これらの関数は常に Float32 を使用していました。従来の動作に切り替えるには、geo_distance_returns_float64_on_float64_arguments を false に設定するか、compatibility を 24.2 以前に設定してください。 #61848 (Alexey Milovidov)。

  • system.columns へのクエリは、多数のカラムが存在し、かつ多くのデータベースまたはテーブルに SHOW TABLES 権限が付与されていない場合でも、より高速に動作するようになります。以前のバージョンでは、対応するテーブルに SHOW TABLES を付与せずに個々のカラムに対して SHOW COLUMNS を付与した場合、system.columns テーブルにはこれらのカラムが表示されていましたが、新しいバージョンではそのテーブル全体がスキップされますので注意してください。クエリを遅くしていた "Access granted" および "Access denied" のトレースログメッセージを削除しました。 #63439 (Alexey Milovidov)。

  • largestTriangleThreeBuckets でクラッシュする問題を修正しました。これによりこの関数の動作が変更され、与えられた系列内の NaN を無視するようになります。そのため、結果セットは以前のバージョンと異なる場合があります。 #62646 (Raúl Marín)。

新機能

  • 新規に作成されたサービスでは、新しいアナライザーがデフォルトで有効になります。

  • DROP TABLE a, b, c; のように、複数のテーブルを同時に削除することをサポートします。 #58705 (zhongyuankai)。

  • ユーザーは、input_format_tsv_crlf_end_of_line という設定を使用することで、TSV 形式で CRLF の行末をパースできるようになりました。Closes #56257. #59747 (Shaun Struwig).

  • Table engine は新たに GRANT 対象になりましたが、既存ユーザーの利用には影響しません。 #60117 (jsc0218).

  • application/x-www-form-urlencoded フォーマットで単一レコードの読み書きを行うための Form Format を追加。#60199 (Shaun Struwig)。

  • CROSS JOIN で圧縮を行えるようになりました。 #60459 (p1rattttt)。

  • 省略されたフィールドに NULL 値を強制的に設定する新しい設定 input_format_force_null_for_omitted_fields を追加。#60887 (Constantine Peresypkin)。

  • 左表および右表の両方のカラムを参照する不等条件(例: t1.y < t2.y)を使用した JOIN をサポートしました。有効化するには、SET allow_experimental_join_condition = 1 を実行します。#60920 (lgbo)。

  • 新しい関数 getClientHTTPHeader を追加し、#54665 をクローズ。@lingtaolf との共同作業。#61820 (Alexey Milovidov)。

  • 利便性のため、SELECT * FROM numbers() は SELECT * FROM system.numbers と同様に、制限なく動作します。 #61969 (YenchangChan)。

  • ALTER MODIFY SETTING を使用して memory テーブルの設定を変更できるようになりました。ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;. #62039 (zhongyuankai).

  • Analyzer が再帰 CTE をサポートするようになりました。 #62074 (Maksim Kita)。

  • 以前は、S3 ストレージおよび S3 テーブル関数ではアーカイブファイルからの SELECT をサポートしていませんでした。S3 上のアーカイブ内のファイルを走査できるソリューションを実装しました。#62259 (Daniil Ivanik)。

  • 条件関数 clamp のサポート。 #62377 (skyoct).

  • npy 出力フォーマットを追加しました。 #62430 (豪肥肥)。

  • Analyzer が QUALIFY 句をサポート。Closes #47819. #62619 (Maksim Kita).

  • HTTP インターフェイスに role クエリパラメーターを追加しました。これは SET ROLE x と同様に動作し、文が実行される前にロールを適用します。これにより、HTTP インターフェイスでは複数の文が許可されておらず、SET ROLE x と対象の文を同時に送信できないという制限を回避できます。この方法で複数のロールを設定することも可能です。たとえば、?role=x&amp;role=ySET ROLE x, y と同等になります。 #62669 (Serge Klochkov)。

  • SYSTEM UNLOAD PRIMARY KEY を追加。 #62738 (Pablo Marcos)。

  • バージョン 7 の UUID、つまりランダム成分を含むタイムスタンプベースの UUID を生成するために、単調性とパフォーマンスのトレードオフが異なる generateUUIDv7generateUUIDv7ThreadMonotonicgenerateUUIDv7NonMonotonic という SQL 関数を追加しました。さらに、UUID からバイトを抽出する新しい関数 UUIDToNum と、バージョン 7 の UUID からタイムスタンプ部分を抽出する新しい関数 UUIDv7ToDateTime を追加しました。 #62852 (Alexey Petrunyaka)。

  • Raw を TSVRaw の同義語として追加。#63394 (Unalian)。

  • サイズが上限を超えた場合に、一時ファイル上でクロス結合を実行できるようにしました。 #63432 (p1rattttt)。

パフォーマンスの改善

  • INSERT 時に新しく作成されたプロジェクションブロックのマージをスキップするようにしました。#59405 (Nikita Taranov)。

  • SELECT に対する mutation のオーバーヘッドを削減しました (v2)。#60856 (Azat Khuzhin)。

  • 等価 Set を用いた JOIN に対するフィルタプッシュダウンを改善しました。#61216 (Maksim Kita)。

  • 単一値に対する最適化のための新しいアナライザパスを追加しました。#61564 (LiuNeng)。

  • 文字列関数 XXXUTF8 を、入力文字列がすべて ASCII 文字である場合には「ASCII として」処理するようにしました。apache/doris#29799 から着想を得ています。全体として 1.07x〜1.62x の速度向上が得られました。いくつかのケースではピークメモリ使用量も減少しています。#61632 (李扬)。

  • 高速な Parquet エンコーダ (output_format_parquet_use_custom_encoder) をデフォルトで有効化しました。#62088 (Michael Kolupaev)。

  • 必要なフィールドをすべて読み終えた後、残りのフィールドをスキップすることで JSONEachRowRowInputFormat を改善しました。#62210 (lgbo)。

  • 関数 splitByChar および splitByRegexp の速度を大幅に向上させました。#62392 (李扬)。

  • file/s3/hdfs/url/... テーブル関数を用いたファイルからの単純な INSERT SELECT クエリを改善しました。並列パースで使用するスレッド数を制御するために、専用の max_parsing_threads 設定を追加しました。#62404 (Kruglov Pavel)。

  • 設定 azure_allow_parallel_part_upload により管理される AzureBlobStorage 向けの並列書き込みバッファをサポートしました。#62534 (SmitaRKulkarni)。

  • 関数 to_utc_timestamp と from_utc_timestamp が約 2 倍高速になりました。#62583 (KevinyhZou)。

  • 入力に解析不能な値が主に含まれる場合、関数 parseDateTimeOrNull、parseDateTimeOrZero、parseDateTimeInJodaSyntaxOrNull、および parseDateTimeInJodaSyntaxOrZero が大幅に高速化されました (10〜1000 倍)。#62634 (LiuNeng)。

  • 失敗時に、IP ごとに 1 つのレコードのみを保持するように HostResolver の動作を変更しました。#62652 (Anton Ivashkin)。

  • 多数のカラムがある場合のマージ時のメモリ使用量を制御し、ソートを 2 倍高速化するための新しい設定 prefer_merge_sort_block_bytes を追加しました。#62904 (LiuNeng)。

  • QueryPlan において、JOIN 後のフィルタが常にデフォルト値をフィルタする場合に OUTER JOIN を INNER JOIN に変換する最適化を追加しました。この最適化は設定 query_plan_convert_outer_join_to_inner_join で制御でき、デフォルトで有効です。#62907 (Maksim Kita)。

  • optimize_rewrite_sum_if_to_count_if をデフォルトで有効にしました。#62929 (Raúl Marín)。

  • 新しいアナライザに対するマイクロ最適化を行いました。#63429 (Raúl Marín)。

  • DateTime を DateTime64 と比較する場合にも索引の解析が動作するようにしました。これにより #63441 が解決されます。#63443 (Alexey Milovidov)。

  • 不要なデータを削除することで、Set 型の索引をわずかに (約 1.5 倍) 高速化しました。#64098 (Alexey Milovidov)。

改善点

  • optimize_monotonous_functions_in_order_by 設定を削除し、この設定は実質的に no-op(無効)となります。 #63004 (Raúl Marín).

  • Map は、キーとして Float32、Float64、Array(T)、Map(K,V)、Tuple(T1, T2, ...) を使用できるようになりました。#54537 をクローズ。#59318 (李扬)。

  • S3 と同様に AzureBlobStorage 用の非同期 WriteBuffer を追加しました。 #59929 (SmitaRKulkarni)。

  • 枠を保持したままカラム幅を変更できる複数行文字列。#59940 (Volodyachan)。

  • RabbitMQ が破損したメッセージに nack を返すようにしました。Closes #45350. #60312 (Kseniia Sumarokova).

  • toStartOfInterval(..., INTERVAL ... WEEK) 関数が週の最初の日として扱う曜日に影響する設定 first_day_of_week を追加しました。これにより、週の最初の日をデフォルトで日曜日とみなす toStartOfWeek 関数との一貫性が保たれます。 #60598 (Jordi Villar).

  • 永続的な仮想カラム _block_offset を追加しました。このカラムには、挿入時に割り当てられたブロック内での元の行番号が保存されます。カラム _block_offset の永続化は、enable_block_offset_column を設定することで有効化できます。パーツの最小ブロック番号またはパーツのミューテーションバージョンのいずれかを保持する仮想カラム _part_data_version を追加しました。永続的な仮想カラム _block_number は、もはや実験的機能とは見なされません。#60676 (Anton Popov)。

  • 関数 date_diff と age は、結果をこれまでのマイクロ秒精度ではなくナノ秒精度で計算するようになりました。また、単位パラメータの値としてナノ秒(nanosecond / nanoseconds / ns)も指定できるようになりました。#61409 (Austin Kothig)。

  • マージ時に、ワイドパーツではマークが読み込まれなくなりました。 #61551 (Anton Popov)。

  • output_format_pretty_row_numbers をデフォルトで有効化します。ユーザビリティが向上するためです。 #61791 (Alexey Milovidov)。

  • プログレスバーは、system.zerossystem.zeros_mt からの LIMIT を含む単純なクエリ(system.numbers および system.numbers_mt ではすでに対応済み)や、generateRandom テーブル関数でも動作するようになります。副次的な効果として、レコードの総数が max_rows_to_read の制限より大きい場合には、より早い段階で例外をスローします。これにより #58183 がクローズされます。 #61823 (Alexey Milovidov)。

  • TRUNCATE ALL TABLES を追加。 #61862 (豪肥肥)。

  • 設定 input_format_json_throw_on_bad_escape_sequence を追加しました。これを無効にすると、JSON 入力フォーマットで不正なエスケープシーケンスの保存を許可します。 #61889 (Kruglov Pavel)。

  • 警告メッセージ内の「a」を「the」に修正しました。Atomic エンジンは 1 つしかないため、「to a new Atomic engine」ではなく「to the new Atomic engine」であるべきです。 #61952 (shabroo)。

  • クォーラム挿入トランザクションのロールバック時の論理エラーを修正。#61953 (Han Fei)。

  • Apache Arrow スキーマから Nullable カラム型を自動推論します。 #61984 (Maksim Kita)。

  • 集約処理中に、集約状態の並列マージを中断できるようにしました。例: uniqExact。 #61992 (Maksim Kita)。

  • INVALIDATE_QUERY を使用する Dictionary の source は、起動時に二重に再読み込みされなくなりました。 #62050 (vdimir).

  • ReplicatedMergeTree に対する OPTIMIZE FINAL は、現在アクティブなマージ処理が完了するまで待機し、その後に最終マージのスケジューリングを再試行するようになりました。これにより、通常の MergeTree の動作により近い挙動になります。 #62067 (Nikita Taranov)。

  • Hive テキストファイルからデータを読み取る際、最初の行を使用して入力フィールド数を決定しますが、最初の行のフィールド数が Hive テーブルの定義と一致しない場合があります。例えば、Hive テーブルが test_tbl(a Int32, b Int32, c Int32) のように 3 列を持つように定義されている一方で、テキストファイルの最初の行にはフィールドが 2 つしかない場合です。この状況では、入力フィールド数が 2 にリサイズされてしまい、テキストファイルの次の行が 3 つのフィールドを持っていたとしても、3 番目のフィールドは読み取られず、デフォルト値の 0 が設定されてしまいます。これは正しくありません。#62086 (KevinyhZou)。

  • クライアントで入力中の構文ハイライトは、これまでの lexer レベルではなく、構文レベルで動作するようになります。 #62123 (Alexey Milovidov)。

  • 主キーを含むブール式の後ろに余分な = 1 または = 0 が追加された場合に、プライマリインデックスが使用されない問題を修正します。たとえば、本来はプライマリインデックスを使用できるにもかかわらず、SELECT * FROM &lt;table&gt; WHERE &lt;primary-key&gt; IN (&lt;value&gt;) = 1SELECT * FROM &lt;table&gt; WHERE &lt;primary-key&gt; NOT IN (&lt;value&gt;) = 0 のいずれもテーブル全体のフルスキャンが行われていました。#62142 (josh-hildred)。

  • 設定 lightweight_deletes_sync(デフォルト値: 2 - すべてのレプリカが同期するまで待機)を追加しました。これは設定 mutations_sync と類似していますが、論理削除の動作のみに影響します。 #62195 (Anton Popov)。

  • カスタム設定の値をパースする際に、ブール値と整数値を区別して扱うようにしました: SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).

  • AWS PrivateLink インターフェイスエンドポイント経由の S3 へのアクセスをサポートしました。#60021、#31074 および #53761 をクローズ。#62208 (Arthur Passos)。

  • クライアントはサーバーにヘッダー 'Keep-Alive: timeout=X' を送信する必要があります。クライアントがそのヘッダー付きのレスポンスをサーバーから受信した場合は、サーバー側が指定した値を使用しなければなりません。接続クローズ時のレースコンディションを避けるため、クライアントは有効期限が近い接続は使用しない方が望ましいです。 #62249 (Sema Checherinda)。

  • date_trunc にナノ秒・マイクロ秒・ミリ秒の単位を追加しました。 #62335 (Misz606)。

  • クエリキャッシュは、システムテーブル(system.、information_schema.、INFORMATION_SCHEMA.*)に対するクエリの結果をキャッシュしなくなりました。 #62376 (Robert Schulze)。

  • MOVE PARTITION TO TABLE クエリは、パーツ数の上限を超えないようにするために、遅延されたり、TOO_MANY_PARTS 例外がスローされたりする場合があります。同じ設定および制限が、INSERT クエリの場合と同様に適用されます(max_parts_in_total、parts_to_delay_insert、parts_to_throw_insert、inactive_parts_to_throw_insert、inactive_parts_to_delay_insert、max_avg_part_size_for_too_many_parts、min_delay_to_insert_ms および max_delay_to_insert 設定を参照)。 #62420 (Sergei Trifonov)。

  • transform が常に最初に一致したものを返すようにしました。 #62518 (Raúl Marín)。

  • RESTORE の実行中にテーブルの DEFAULT 式を評価しないようにしました。 #62601 (Vitaly Baranov).

  • 異なる認証方式を用いる HTTP リクエストでも QUOTA キーを利用できるようにしました。#62842 (Kseniia Sumarokova)。

  • ユーザーの valid_until に達したらセッションを終了するようにしました。 #63046 (Konstantin Bogdanov).