破壊的変更
- duration がマイクロ秒精度である実態に合わせて、system.zookeeper テーブルのカラム名を duration_ms から duration_microseconds に変更しました。#60774 (Duc Canh Le).
- max_parallel_replicas に 0 を設定できないようにしました。0 は意味をなさず、設定すると予期しない論理エラーを引き起こす可能性があるためです。Closes #60140. #61201 (Kruglov Pavel).
- INSERT WATCH クエリ (実験的な LIVE VIEW 機能の一部) のサポートを削除しました。#62382 (Alexey Milovidov).
- 関数 neighbor、runningAccumulate、runningDifferenceStartingWithFirstValue、runningDifference の使用は非推奨になりました (エラーを招きやすいため) 。代わりに適切な window functions を使用してください。再度有効にするには、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;のように、複数のtableを同時にdropできるようになりました。 #58705 (zhongyuankai). - 設定 input_format_tsv_crlf_end_of_line を使用することで、TSVフォーマットで CRLF を解析できるようになりました。#56257 をクローズしました。 #59747 (Shaun Struwig)。
- テーブルエンジンにも権限を付与できるようになりましたが、既存ユーザーの挙動には影響しません。 #60117 (jsc0218)。
- application/x-www-form-urlencodedフォーマットで単一レコードを読み書きするためのFormフォーマットを追加しました。#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 と同様に、制限なしで動作するようになりました。 #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テーブル関数では、アーカイブファイルからの読み取りに対応していませんでした。S3 上のアーカイブ内のファイルを順に処理できるようにするソリューションを作成しました。#62259 (Daniil Ivanik)。
- 条件関数 clamp のサポートを追加。#62377 (skyoct) 。
- npy出力フォーマットを追加しました。 #62430 (豪肥肥) 。
- アナライザでQUALIFY句をサポートしました。#47819 をクローズしました。#62619 (Maksim Kita) 。
-
HTTPインターフェイスにロール用のクエリパラメータが追加されました。これは
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、すなわちランダムな部分を含むタイムスタンプベースの UUID を生成する SQL 関数
generateUUIDv7、generateUUIDv7ThreadMonotonic、generateUUIDv7NonMonotonic(単調性と性能のトレードオフがそれぞれ異なる) を追加しました。あわせて、UUID からバイト列を抽出する新しい関数UUIDToNumと、バージョン 7 UUID から timestamp component を抽出する新しい関数UUIDv7ToDateTimeも追加しました。#62852 (Alexey Petrunyaka) 。 - TSVRaw の別名として Raw を追加しました。 #63394 (Unalian).
- サイズが制限を超えた場合に、一時ファイル上でクロス結合を実行できるようになりました。#63432 (p1rattttt) 。
パフォーマンス改善
- INSERT 時に、新しく作成された projection ブロックのマージをスキップします。 #59405 (Nikita Taranov).
- SELECT に対する mutations のオーバーヘッドを削減しました (v2) 。 #60856 (Azat Khuzhin).
- 等価集合を用いた JOIN フィルタのプッシュダウンを改善しました。 #61216 (Maksim Kita).
- 単一値の IN を最適化する新しいアナライザパスを追加しました。 #61564 (LiuNeng).
- 入力文字列がすべて ASCII 文字の場合、文字列関数 XXXUTF8 を ASCII として処理するようにしました。apache/doris#29799 に着想を得ています。全体で 1.07 倍から 1.62 倍高速化しています。なお、一部のケースではピークメモリ使用量も減少しています。 #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 後の filter が常にデフォルト値を除外する場合、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).
- 新しいアナライザに対するマイクロ最適化を行いました。 #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 するようにしました。これにより #45350 は解決されます。 #60312 (Kseniia Sumarokova).
- 関数 toStartOfInterval(…, INTERVAL … WEEK) が週の開始日として扱う日付に影響する設定 first_day_of_week を追加しました。これにより、週の開始日をデフォルトで日曜日とする関数 toStartOfWeek との一貫性を確保できます。 #60598 (Jordi Villar).
- 挿入時に割り当てられたブロック内での元の行番号を保持する永続仮想カラム _block_offset を追加しました。カラム _block_offset の永続化は、enable_block_offset_column を設定することで有効にできます。part の最小ブロック番号または mutation バージョンを含む仮想カラム _part_data_version を追加しました。永続仮想カラム _block_number は、もはや Experimental とは見なされません。 #60676 (Anton Popov).
- 関数 date_diff と age は、結果をマイクロ秒精度ではなくナノ秒精度で計算するようになりました。また、unit パラメータで指定できる値として nanosecond (または nanoseconds、ns) もサポートされるようになりました。 #61409 (Austin Kothig).
- マージ中は、wide パーツでは marks を読み込まないようになりました。 #61551 (Anton Popov).
- output_format_pretty_row_numbers をデフォルトで有効にしました。使い勝手が向上するためです。 #61791 (Alexey Milovidov).
- system.zeros、system.zeros_mt、および generateRandom テーブル関数に対する LIMIT 付きの単純なクエリでも、プログレスバーが機能するようになりました (system.numbers と system.numbers_mt ではすでに機能しています) 。さらに、レコード総数が 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 engine は 1 つしかないため、“to a new Atomic engine” ではなく “to the new Atomic engine” とするべきです。 #61952 (shabroo).
- クォーラム INSERT トランザクションを取り消す際の論理エラーを修正しました。 #61953 (Han Fei).
- Apache Arrow のスキーマから Nullable カラム型を自動的に推論します。 #61984 (Maksim Kita).
- aggregation 中に aggregate states の並列 merge をキャンセルできるようにしました。例: uniqExact。 #61992 (Maksim Kita).
- INVALIDATE_QUERY を使用する Dictionary ソースは、起動時に 2 回再読み込みされることがなくなりました。 #62050 (vdimir).
- ReplicatedMergeTree に対する OPTIMIZE FINAL は、現在実行中のマージが完了するまで待機し、その後 final merge のスケジュールを再試行するようになりました。これにより、通常の MergeTree の動作により近いものになります。 #62067 (Nikita Taranov).
- Hive テキストファイルからデータを読み取る際、入力フィールド数の調整に Hive テキストファイルの最初の行が使われますが、最初の行のフィールド数が、定義された Hive テーブルと一致しないことがあります。たとえば、Hive テーブルが test_tbl(a Int32, b Int32, c Int32) のように 3 カラムで定義されていても、テキストファイルの最初の行には 2 フィールドしかない場合があります。この場合、入力フィールドは 2 に調整されるため、その次の行に 3 フィールドあっても 3 番目のフィールドは読み取られず、代わりにデフォルト値 0 が設定されてしまいます。これは正しくありません。 #62086 (KevinyhZou).
- クライアントで入力中のシンタックスハイライトが、構文レベルで機能するようになりました (以前は字句解析レベルで動作していました) 。 #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 設定に似ていますが、影響するのは論理削除の動作のみです。 #62195 (Anton Popov).
- カスタム設定の値をパースする際に、ブール値と整数を区別するようにしました: SET custom_a = true; SET custom_b = 1;. #62206 (Vitaly Baranov).
- AWS プライベートリンクのインターフェイスエンドポイント経由での S3 アクセスをサポートしました。これにより #60021、#31074、#53761 は解決されます。 #62208 (Arthur Passos).
- クライアントはサーバーにヘッダー ‘Keep-Alive: timeout=X’ を送信する必要があります。クライアントがそのヘッダー付きのレスポンスをサーバーから受信した場合、クライアントはサーバーから返された値を使用する必要があります。また、接続クローズの競合を避けるため、クライアントは有効期限切れが近い connection を使用しないほうが望ましいです。 #62249 (Sema Checherinda).
- date_trunc に nano・micro・Milliseconds の単位を追加しました。 #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 key を許可しました。 #62842 (Kseniia Sumarokova).
- ユーザーの valid_until に達した時点でセッションを終了します。 #63046 (Konstantin Bogdanov).