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

Cloud 向け v24.5 の変更履歴

v24.5 リリースに基づく ClickHouse Cloud サービスに関する変更点です。

互換性に影響する変更

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

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

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

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

後方互換性のない変更

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

  • 多数のカラムが存在し、かつ多くのデータベースまたはテーブルに対して SHOW TABLES 権限が付与されていない場合、system.columns へのクエリはより高速になります。以前のバージョンでは、対応するテーブルに対して 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; のように、複数テーブルを同時に DROP することをサポートしました。 #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).

  • 左右両方のテーブルのカラムを含む不等号条件での JOIN をサポートしました。例: t1.y < t2.y。有効化するには SET allow_experimental_join_condition = 1 を実行します。 #60920 (lgbo).

  • 新しい関数 getClientHTTPHeader を追加しました。これにより #54665 がクローズされます。@lingtaolf との共同作業です。 #61820 (Alexey Milovidov).

  • 利便性向上のため、SELECT * FROM numbers()SELECT * FROM system.numbers と同様に、LIMIT なしで動作するようになりました。 #61969 (YenchangChan).

  • ALTER MODIFY SETTING による Memory テーブル設定の変更をサポートしました。例: ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;#62039 (zhongyuankai).

  • アナライザが再帰 CTE をサポートしました。 #62074 (Maksim Kita).

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

  • 条件付き関数 clamp のサポートを追加しました。 #62377 (skyoct).

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

  • アナライザが QUALIFY 句をサポートしました。Closes #47819. #62619 (Maksim Kita).

  • HTTP インターフェイスに role クエリパラメータを追加しました。これは SET ROLE x と同様に、ステートメントが実行される前にロールを適用します。HTTP インターフェイスでは複数ステートメントが許可されておらず、SET ROLE x とクエリ本体を同時に送信できないという制約がありましたが、この機能により回避できます。?role=x&role=y のように複数ロールを設定することも可能で、これは SET ROLE x, y と等価です。 #62669 (Serge Klochkov).

  • SYSTEM UNLOAD PRIMARY KEY を追加しました。 #62738 (Pablo Marcos).

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

  • RawTSVRaw の同義語として追加しました。 #63394 (Unalian)。

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

パフォーマンスの改善

  • INSERT 時に新しく作成された projection ブロックのマージをスキップします。#59405 (Nikita Taranov).

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

  • 等価集合を用いた JOIN フィルタのプッシュダウンを改善します。#61216 (Maksim Kita).

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

  • 入力文字列がすべて ASCII 文字の場合、文字列関数 XXXUTF8 を 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).

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

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

  • JOIN 後のフィルタが常にデフォルト値を除外する場合に、QueryPlan が 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).

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

  • DateTime と DateTime64 を比較する場合でもインデックス解析が機能するようになりました。これにより issue #63441 が解決されます。#63443 (Alexey Milovidov).

  • 不要なデータを削除することで、型 set のインデックスの速度をわずかに (約 1.5 倍) 向上させました。#64098 (Alexey Milovidov).

改良点

  • optimize_monotonous_functions_in_order_by 設定を削除しました。この設定は実質的に何もしない(no-op)状態になりつつあります。 #63004 (Raúl Marín).

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

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

  • 枠線の保持および列幅の変更に対応した複数行文字列を追加しました。 #59940 (Volodyachan).

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

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

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

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

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

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

  • system.zerossystem.zeros_mtsystem.numbers および system.numbers_mt ではすでに動作していました)、および generateRandom テーブル関数に対する LIMIT を含む単純なクエリでもプログレスバーが動作するようになりました。さらに、総レコード数が 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 を使用する辞書ソースが、起動時に 2 回リロードされないようになりました。 #62050 (vdimir).

  • ReplicatedMergeTree に対する OPTIMIZE FINAL は、現在アクティブなマージの完了を待ってから、最終マージのスケジュールを再試行するようになりました。これにより、通常の MergeTree の動作により近づきます。 #62067 (Nikita Taranov).

  • Hive テキストファイルからデータを読み込む際、これまでは 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 <table> WHERE <primary-key> IN (<value>) = 1SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 はどちらも、本来はプライマリインデックスを使用できるにもかかわらず、フルテーブルスキャンを実行していました。 #62142 (josh-hildred).

  • 設定 lightweight_deletes_sync を追加しました(デフォルト値: 2 - すべてのレプリカを同期的に待機)。これは mutations_sync 設定と似ていますが、lightweight delete の動作のみに影響します。 #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 テーブルに対するクエリ結果(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 key を許可しました。 #62842 (Kseniia Sumarokova).

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