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 関数
generateUUIDv7、generateUUIDv7ThreadMonotonic、generateUUIDv7NonMonotonicを追加しました。さらに、UUID からバイト列を抽出する新しい関数UUIDToNumと、バージョン 7 UUID からタイムスタンプ成分を抽出する新しい関数UUIDv7ToDateTimeを追加しました。 #62852 (Alexey Petrunyaka)。 -
RawをTSVRawの同義語として追加しました。 #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). -
MapでFloat32、Float64、Array(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_diffとageは、結果をマイクロ秒精度ではなくナノ秒精度で計算するようになりました。また、unitパラメータの値として、ナノ秒(nanosecond/nanoseconds/ns)を指定できるようになりました。 #61409 (Austin Kothig). -
マージ時に、wide パーツではマークが読み込まれなくなりました。 #61551 (Anton Popov).
-
output_format_pretty_row_numbersをデフォルトで有効化しました。これによりユーザビリティが向上します。 #61791 (Alexey Milovidov). -
system.zeros、system.zeros_mt(system.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>) = 1とSELECT * 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)。