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

v24.2 変更履歴

ClickHouse リリースタグ: 24.2.2.15987

後方互換性のない変更

  • ネストされた型内にある疑わしい/実験的な型を検証するようにしました。これまでは、Array/Tuple/Map のようなネストされた型内では(JSON を除き)そのような型を検証していませんでした。#59385 (Kruglov Pavel)。
  • ソート句 ORDER BY ALL(v23.12 で導入された)は ORDER BY * に置き換えられました。以前の構文は、all というカラムを持つテーブルでは誤りの原因になりやすいものでした。#59450Robert Schulze)。
  • スレッド数とブロックサイズに対するサニティチェックを追加しました。 #60138 (Raúl Marín).
  • クエリレベルの設定 async_insertdeduplicate_blocks_in_dependent_materialized_views が同時に有効になっている場合、受け付けた INSERT クエリを拒否します。この挙動は設定 throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert によって制御され、デフォルトで有効になっています。これは https://github.com/ClickHouse/ClickHouse/pull/59699 の継続対応であり、https://github.com/ClickHouse/ClickHouse/pull/59915 をアンブロックするために必要なものです。 #60888 (Nikita Mikhaylov)。
  • Utility clickhouse-copier は GitHub 上の別リポジトリに移動されました: https://github.com/ClickHouse/copier。バンドルには同梱されなくなりましたが、引き続き個別のダウンロードとして利用可能です。これにより次の issue がクローズされます: #60734 #60540 #60250 #52917 #51140 #47517 #47189 #46598 #40257 #36504 #35485 #33702 #26702 ### ユーザー向け変更に関するドキュメントエントリ。#61058 (Nikita Mikhaylov).
  • MySQL との互換性を高めるために、関数 locate はデフォルトで引数 (needle, haystack[, start_pos]) を受け取るようになりました。以前の動作である (haystack, needle, [, start_pos]) は、function_locate_has_mysql_compatible_argument_order = 0 を設定することで復元できます。#61092 (Robert Schulze).
  • メモリ内データパーツの旧形式はバージョン 23.5 から非推奨となり、バージョン 23.10 以降はサポートされていません。今回、残っていたコードが削除されました。#55186 および #45409 の継続作業です。メモリ内データパーツは、バージョン 23.5 より前で、かつ MergeTree テーブルに対して対応する SETTINGS を明示的に指定して手動で有効化した場合にのみ利用可能だったため、これを使用している可能性は低いと考えられます。メモリ内データパーツが存在するかを確認するには、次のクエリを実行します。SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type。メモリ内データパーツの使用を無効化するには、ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT を実行します。古い ClickHouse リリースからアップグレードする前に、メモリ内データパーツが存在しないことを必ず確認してください。メモリ内データパーツが存在する場合には、まずそれらを無効化し、その後メモリ内データパーツがなくなるまで待ってからアップグレードを続行してください。#61127Alexey Milovidov)。
  • デフォルトで、MergeTree テーブルの ORDER BY における SimpleAggregateFunction を禁止しました(AggregateFunction と同様に禁止されますが、比較不可能であるためです)。これらを許可するには allow_suspicious_primary_key を使用してください。 #61399 (Azat Khuzhin).
  • ClickHouse は、通常は UTF-8 を格納する String データ型に任意のバイナリデータを保持できます。一方、Parquet/ORC/Arrow の String は UTF-8 のみをサポートします。そのため、ClickHouse の String データ型に対して、Arrow のデータ型として String と Binary のどちらを使用するかを選択できます。これは output_format_parquet_string_as_stringoutput_format_orc_string_as_stringoutput_format_arrow_string_as_string の設定で制御されます。Binary の方がより正確かつ互換性がありますが、デフォルトで String を使用することで、多くの場合ユーザーの期待に沿う動作になります。Parquet/ORC/Arrow は lz4 や zstd を含む多くの圧縮方式をサポートしており、ClickHouse はそれらすべての圧縮方式をサポートしています。一部のツールでは、高速な lz4 圧縮方式がサポートされていないため、デフォルトでは zstd を使用するように設定しています。これは output_format_parquet_compression_methodoutput_format_orc_compression_methodoutput_format_arrow_compression_method の設定で制御されます。Parquet と ORC についてはデフォルトを zstd に変更しましたが、Arrow については変更していません(低レベル用途を想定しているためです)。#61817Alexey Milovidov)。
  • マテリアライズドビューのセキュリティ問題を修正しました。この問題により、ユーザーが必要な権限なしにテーブルへ挿入できてしまっていました。今回の修正では、ユーザーがマテリアライズドビューだけでなく、その背後にあるすべてのテーブルへの挿入権限も持っていることを検証します。これにより、以前は成功していた一部のクエリが、Not enough privileges(権限が不足しています)というエラーで失敗する可能性があります。この問題に対処するため、本リリースではビューに対する SQL セキュリティの新機能を導入しています https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security#54901 (pufit)

新機能

  • 値の件数とその誤差を返す Topk/topkweighed モードをサポート。 #54508 (UnamedRus).
  • ビュー/マテリアライズドビューで DEFINER ユーザーを指定できる新しい構文を追加しました。これにより、基盤となるテーブルに対する明示的な権限付与なしに、ビューからの SELECT/INSERT を実行できるようになりました。 #54901 (pufit).
  • さまざまな種類の MergeTree テーブルを Replicated エンジンに自動変換する機能を実装しました。テーブルのデータディレクトリ(/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)内に空の convert_to_replicated ファイルを作成すると、次回サーバー起動時に該当テーブルが自動的に変換されます。 #57798 (Kirill)。
  • テーブル関数 mergeTreeIndex を追加しました。MergeTree テーブルのインデックスおよびマークファイルの内容を表すテーブル関数であり、テーブルの内部構造を確認する用途に使用できます。構文: mergeTreeIndex(database, table, [with_marks = true])。ここで database.tableMergeTree エンジンを持つ既存のテーブルです。 #58140 (Anton Popov).
  • file/s3/hdfs/url/azureBlobStorage エンジンでファイル形式が不明な場合、スキーマ推論中にファイル形式を自動検出するようにしました。#50576 をクローズしました。#59092Kruglov Pavel)。
  • テーブル関数として generate_series を追加しました。この関数は、自然数の等差数列からなるテーブルを生成します。 #59390 (divanik)。
  • 空のパーティションに対応する ZooKeeper ノードを削除するクエリ ALTER TABLE table FORGET PARTITION partition を追加しました。 #59507 (Sergei Trifonov).
  • バックアップを tar アーカイブとして読み書きできるようになりました。 #59535 (josh-hildred).
  • 新しい集約関数 'groupArrayIntersect' を追加しました。関連: #49862#59598Yarik Briukhovetskyi)。
  • system.dns_cache テーブルを実装しました。これは DNS の問題をデバッグする際に役立ちます。 #59856 (Kirill Nikiforov).
  • S3Express バケットのサポートを追加しました。 #59965 (Nikita Taranov).
  • コーデック LZ4HC は、新たにレベル 2 をサポートするようになりました。これは、以前の最小レベルである 3 より高速ですが、その分圧縮率は低くなります。以前のバージョンでは、LZ4HC(2) 以下は LZ4HC(3) と同じでした。作者: Cyan4973#60090Alexey Milovidov)。
  • system.dns_cache テーブルを実装しました。DNS の問題をデバッグする際に役立ちます。新しいサーバー設定 dns_cache_max_size を追加しました。 #60257 (Kirill Nikiforov).
  • DateTime または DateTime64 型の値に対してミリ秒の部分を返す関数 toMillisecond を追加しました。 #60281 (Shaun Struwig)。
  • merge テーブル関数に、merge(['db_name', ] 'tables_regexp') のような 1 引数版をサポートしました。 #60372 (豪肥肥)。
  • すべてのフォーマット名で大文字・小文字を区別しないようにしました。たとえば Tsv、TSV、tsv、さらには rowbinary でも同様に扱われます。#60420 (豪肥肥)。
  • ビュー/マテリアライズドビューに定義者(definer)ユーザーを指定できる新しい構文を追加しました。これにより、背後のテーブルに対して明示的な権限を付与しなくても、ビューからの SELECT/INSERT を実行できるようになります。 #60439 (pufit).
  • StorageMemory(メモリエンジン)に min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep, max_rows_to_keep の4つのプロパティを追加 - 今回の変更を反映するテストを追加 - memory.md ドキュメントを更新 - テーブルパラメータの境界値にアクセスできるようにするため、テーブルの context プロパティを MemorySink に追加。#60612Jake Bamrah)。
  • DateTime または DateTime64 型の値に対してミリ秒部分を返す関数 toMillisecond を追加しました。 #60649Robert Schulze)。
  • 待機中のクエリ数と実行中のクエリ数に対して、個別の上限を導入しました。async_load_databases により待機状態になっているクエリ数を制限する新しいサーバー設定 max_waiting_queries を追加しました。実行中クエリ数に対する既存の上限では、待機中のクエリはカウントされなくなりました。 #61053 (Sergei Trifonov)。
  • ATTACH PARTITION ALL のサポートを追加しました。#61107 (Kirill Nikiforov).

パフォーマンスの向上

  • SELECT 句の GROUP BY キーに対する min/max/any/anyLast 集約関数を除去します。 #52230 (JackyWoo).
  • 複数の [nullable] カラムが関係する場合のシリアル化集約メソッドのパフォーマンスを改善しました。これは抽象化の整合性を損なうことのない、#51399 の汎用バージョンです。#55809Amos Bird)。
  • ALL JOIN のパフォーマンスを改善するため、JOIN 出力を遅延構築するようにしました。 #58278 (LiuNeng).
  • 集約関数 ArgMin / ArgMax / any / anyLast / anyHeavy および ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1 クエリが改善されました。#58640Raúl Marín)。
  • 分岐予測ミスを減らすことで、bigint 型および big decimal 型に対する条件付き sum/avg 集計のパフォーマンスを最適化。 #59504 (李扬).
  • アクティブな mutation がある場合の SELECT クエリのパフォーマンスを改善。 #59531 (Azat Khuzhin).
  • カラムフィルタに対する軽微な最適化。内部的なデータ型が数値ではないフィルター対象のカラムについては、result_size_hint = -1 を用いたフィルタリングを回避します。これにより、場合によってはピークメモリを元の 44% まで削減できます。#59698李扬)。
  • Primary key のメモリ消費量が少なくなります。 #60049 (Alexey Milovidov)。
  • プライマリキーおよびその他の一部の操作でのメモリ使用量を改善しました。 #60050 (Alexey Milovidov).
  • テーブルの主キーは、初回アクセス時に遅延的にメモリへロードされます。これは、新しい MergeTree の設定項目 primary_key_lazy_load によって制御されており、デフォルトで有効になっています。これにはいくつかの利点があります: - 使用されていないテーブルについてはロードされないこと; - メモリが不足している場合、サーバー起動時ではなく初回の使用時に例外がスローされること。これにはいくつかの欠点もあります: - 接続を受け付ける前ではなく、最初のクエリ実行時に主キーをロードする待ち時間が発生するため、理論上は「thundering herd」問題(スパイク的な負荷集中)を引き起こす可能性があります。これにより #11188 がクローズされました。#60093 (Alexey Milovidov)。
  • ベクトル検索向けのベクトル化関数 dotProduct#60202 (Robert Schulze).
  • テーブルの主キーにほとんど役に立たないカラムが含まれている場合、それらをメモリに保持する必要はありません。これは新しい設定 primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns によって制御され、デフォルト値は 0.9 です。つまり、複合主キーにおいて、あるカラムの値が全行の少なくとも 90% で変化する場合、そのカラム以降のカラムはメモリに読み込まれません。 #60255 (Alexey Milovidov)。
  • result_type の基になる型が数値型の場合に、multiIf 関数を列方向に実行するようにしました。#60384 (李扬)。
  • Fig 1 に示すように、"&&" を "&" に置き換えることで SIMD コードが生成される可能性があります。 image Fig 1. '&&'(左)と '&'(右)からコンパイルされたコード。#60498 (Zhiguo Zhou)。
  • ミューテックスがより高速に(ほぼ2倍)(以前は ThreadFuzzer の影響で遅かった)。 #60823 (Azat Khuzhin).
  • 接続のドレイン処理を prepare から work へ移し、複数の接続を並列でドレインできるようにしました。 #60845 (lizhuoyu5).
  • nullable な数値または文字列に対する insertManyFrom を最適化。#60846李扬)。
  • 不要でコストの高いメモリコピーを省くように dotProduct 関数を最適化しました。 #60928 (Robert Schulze).
  • ファイルシステムキャッシュに対する操作が、ロック競合の影響を受けにくくなりました。 #61066 (Alexey Milovidov).
  • ColumnString::replicate を最適化し、memcpySmallAllowReadWriteOverflow15Impl が組み込みの memcpy による最適化置き換えを受けないようにしました。#61074 をクローズしました。ColumnString::replicate は x86-64 上で 2.46 倍に高速化されました。#61075李扬)。
  • 256ビット整数の出力を30倍高速化。 #61100 (Raúl Marín).
  • 構文エラーを含むクエリに COLUMNS マッチャーと正規表現が含まれている場合、本来は 1 度だけコンパイルされるべき正規表現が、パーサーのバックトラッキングのたびにコンパイルされていました。これは本質的な誤りでした。コンパイル済みの正規表現は AST に格納されていました。しかし AST の A は「abstract(抽象)」を意味しており、重量級オブジェクトを含むべきではありません。AST の一部は、パース中に作成および破棄される可能性があり、その過程で多数のバックトラッキングが発生し得ます。これによってパース側が遅くなり、その結果、読み取り専用ユーザーでも DoS を引き起こせてしまいます。しかし主な問題は、これが fuzzer の進捗を妨げることです。 #61543 (Alexey Milovidov)。

改善

  • マテリアライズドビューに対して MODIFY COLUMN クエリを実行する際は、内部テーブルの構造を確認し、すべてのカラムが存在していることを保証してください。 #47427 (sunny).
  • パーサーが扱うすべてのキーワードを含むテーブル system.keywords を追加しました。主に、ファジングおよびシンタックスハイライトを改善するために使用されます。 #51808 (Nikita Mikhaylov).
  • analyzer を使用する parameterized view に対して、CREATE PARAMETERIZED VIEW を解析しないためのサポートを追加しました。既存の parameterized view のロジックをリファクタリングし、CREATE PARAMETERIZED VIEW を解析対象から除外しました。 #54211 (SmitaRKulkarni).
  • Ordinary データベースエンジンは非推奨となりました。サーバーがこれを使用している場合、clickhouse-client で警告が表示されます。これにより #52229 がクローズされました。#56942shabroo)。
  • テーブルに関連するすべてのゼロコピー・ロックは、そのテーブルをドロップするときに必ず解放する必要があります。これらのロックを格納しているディレクトリも削除しなければなりません。 #57575 (Sema Checherinda).
  • dictGetOrDefault 関数に短絡評価機能を追加。#52098 をクローズ。#57767jsc0218)。
  • 外部テーブルの構造内で Enum 型を宣言できるようにしました。 #57857 (Duc Canh Le).
  • DEFAULT または MATERIALIZED 式を持つカラムに対して ALTER COLUMN MATERIALIZE を実行した場合、正しい値が書き込まれるようになりました。すなわち、デフォルト値が設定されている既存パーツにはデフォルト値が、非デフォルト値が設定されている既存パーツには非デフォルト値が書き込まれます。以前は、すべての既存パーツに対してデフォルト値が書き込まれていました。 #58023 (Duc Canh Le).
  • バックオフロジック(例: 指数バックオフ)を有効にしました。これにより、CPU 使用率、メモリ使用量、およびログファイルサイズを削減できます。 #58036 (MikhailBurdukov).
  • マージ対象のパーツを選択する際に、軽量削除行を考慮するようにしました。 #58223 (Zhuo Qiu).
  • storage_configurationvolume_priority を定義できるようになりました。 #58533 (Andrey Zvonov)。
  • T64 コーデックに Date32 型のサポートを追加。#58738Hongbin Ma)。
  • この PR により、レスポンスが 3xx や 4xx の場合でも、すべてのユースケースで http/https 接続を再利用できるようになりました。 #58845 (Sema Checherinda)。
  • 追加のシステムテーブルのカラムにコメントを追加しました。https://github.com/ClickHouse/ClickHouse/pull/58356 の続きです。 #59016Nikita Mikhaylov)。
  • これで PREWHERE で仮想カラムを使用できるようになりました。_part_offset のような const でない仮想カラムに対しては有用です。#59033Amos Bird)。
  • Distributed テーブルエンジンの設定は(MergeTree の設定と同様に)、サーバーの設定ファイル内で指定できるようになりました。例として、<distributed> <flush_on_detach>false</flush_on_detach> </distributed> を使用できます。 #59291 (Azat Khuzhin)。
  • Keeper の改善: latest_logs_cache_size_threshold および commit_logs_cache_size_threshold によって制御される、一定量のログのみをメモリ上にキャッシュするようにしました。 #59460 (Antonio Andelic)。
  • 固定キーを使用する代わりに、オブジェクトストレージはオブジェクト削除可否を判定するためのキーを生成するようになりました。 #59495 (Sema Checherinda).
  • 指数表記の浮動小数点数をデフォルトでは自動推論しないように変更しました。以前の動作を復元するための設定 input_format_try_infer_exponent_floats を追加しました(デフォルトは無効)。#59476 をクローズ。#59500Kruglov Pavel)。
  • ALTER 操作を丸括弧で囲めるようになりました。丸括弧の出力は、format_alter_operations_with_parentheses の設定で制御できます。デフォルトでは、整形済みクエリでは丸括弧が出力されます。これは、一部の箇所で整形済みの ALTER 操作をメタデータとして保存しているためです(例:mutations)。新しい構文により、ALTER 操作がリストで終わる一部のクエリがより明確になります。例えば、ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c は旧構文では正しく構文解析できません。新しい構文では、ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) というクエリは明確です。古いバージョンでは新しい構文を読み取ることができないため、新しい構文を使用すると、新旧バージョンの ClickHouse を同一クラスタ内で混在させている場合に問題が発生する可能性があります。 #59532János Benjamin Antal)。
  • Intel QPL(コーデック DEFLATE_QPL で使用)を v1.3.1 から v1.4.0 に更新しました。また、ポーリングタイムアウト機構のバグも修正しました。いくつかのケースでは、タイムアウトが発生しても正しく動作せず、その結果、タイムアウト時に IAA と CPU が同じバッファを同時に処理してしまうことがあることを確認しました。当面は、IAA コーデックのステータスが QPL_STS_BEING_PROCESSED ではないことを確認したうえで、SW コーデックにフォールバックするようにするのが望ましいです。#59551 (jasperzhu)。
  • libhdfs3 に位置指定付き pread を追加しました。libhdfs3 で位置指定読み取りを行うには、hdfs.h 内の hdfsPread 関数を次のように使用してください。tSize hdfsPread(hdfsFS fs, hdfsFile file, void * buffer, tSize length, tOffset position);#59624M1eyu)。
  • ユーザーが max_parser_depth 設定を極端に大きな値に誤設定していたとしても、パーサーでスタックオーバーフローを検出するようにしました。これにより #59622 が解決されました。 #59697 (Alexey Milovidov).
  • Kafka ストレージにおいて、XML および SQL で作成された named collection の挙動を統一しました。 #59710 (Pervakov Grigorii).
  • CREATE TABLE 文で UUID が明示的に指定されている場合は、replica_path で UUID を許可するようにしました。 #59908 (Azat Khuzhin).
  • ReplicatedMergeTree テーブル用の metadata_version 列を system.tables システムテーブルに追加しました。 #59942 (Maksim Kita)。
  • Keeper の改善: Disk 関連の操作失敗時にリトライ処理を追加。 #59980 (Antonio Andelic).
  • 新しい設定 backups.remove_backup_files_after_failure を追加しました: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>#60002Vitaly Baranov)。
  • RESTORE コマンドの実行時に、バックアップ内のテーブルメタデータの読み取りに複数スレッドを使用するようにしました。 #60040 (Vitaly Baranov).
  • StorageBuffer にシャードが 1 つを超えて存在する場合(num_layers > 1)、バックグラウンドフラッシュは複数スレッドで全シャードに対して同時に実行されるようになりました。 #60111 (alesapin).
  • user キーを使用して、config 内の特定の S3 設定ごとにユーザーを指定できるようにしました。 #60144 (Antonio Andelic)。
  • GCP が HTTP エラーコード GATEWAY_TIMEOUT とともに Internal Error を返した場合に、S3 file GCP フォールバックでバッファコピーに切り替えるようにしました。 #60164 (Maksim Kita).
  • オブジェクトストレージタイプとして、local_blob_storage の代わりに local を使用できるようにしました。 #60165 (Kseniia Sumarokova).
  • Variant 値に対する比較演算子を実装し、Variant カラムへの適切な Field の挿入を実装しました。デフォルトでは、類似したバリアント型を含む Variant 型の作成を許可しないようにしました(設定 allow_suspicious_variant_types によって許可可能)。#59996 をクローズ。#59850 をクローズ。#60198Kruglov Pavel)。
  • 仮想カラムの全体的な使い勝手を改善しました。PREWHERE で仮想カラムを使用できるようになりました(_part_offset のような非定数の仮想カラムに対して有用です)。また、DESCRIBE クエリで設定 describe_include_virtual_columns を有効にすると、カラムのコメントとして仮想カラムに関する組み込みドキュメントが表示されるようになりました。 #60205 (Anton Popov).
  • ULIDStringToDateTime のショートサーキット評価を追加。#60211 (Juan Madurga).
  • テーブル system.backupssystem.backup_logquery_id カラムを追加しました。error カラムにエラーのスタックトレースを追加しました。 #60220 (Maksim Kita).
  • DETACH/サーバーシャットダウン時および SYSTEM FLUSH DISTRIBUTED 実行時に、Distributed エンジンの保留中の INSERT ブロックを並列にフラッシュできるようにしました(並列化は、そのテーブルに対してマルチディスクポリシーが設定されている場合にのみ機能します。これは現在の Distributed エンジンではすべてのテーブルに当てはまります)。 #60225 (Azat Khuzhin).
  • joinRightColumnsSwitchNullability におけるフィルタ設定の不備を修正し、#59625 を解決しました。#60259 (lgbo).
  • マージ時にリードスルーキャッシュを強制する設定を追加しました。 #60308 (Kseniia Sumarokova)。
  • Issue #57598 では、トランザクション処理の挙動の違いが言及されています。トランザクションがアクティブでない状態で COMMIT/ROLLBACK を発行すると、MySQL の挙動とは異なりエラーとして報告されます。#60338PapaToemmsn)。
  • distributed_ddl_output_mode 設定に none_only_active モードを追加しました。 #60340 (Alexander Tokmakov).
  • MySQL ポート経由の接続では、QuickSight をアウトオブボックスでサポートするため、設定 prefer_column_name_to_alias = 1 が自動的に有効化されるようになりました。さらに、設定 mysql_map_string_to_text_in_show_columns および mysql_map_fixed_string_to_text_in_show_columns もデフォルトで有効になり、こちらも MySQL 接続のみに影響します。これにより、より多くの BI ツールとの互換性が向上します。 #60365 (Robert Schulze).
  • 出力フォーマットが Pretty 形式で、ブロックが単一の数値のみで構成され、その値が 100 万を超える場合、テーブルの右側に読みやすい表記の数値が出力されます。例: ┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘#60379rogeryk)。
  • clickhouse-server 用の HTTP リダイレクトハンドラーを設定できるようになりました。たとえば、/ を Play UI にリダイレクトさせることができます。 #60390 (Alexey Milovidov)。
  • 高度なダッシュボードで、マルチライングラフの配色をわずかに改善しました。 #60391 (Alexey Milovidov)。
  • チャートが重なって表示される原因となっていた JavaScript コード内のレースコンディションを修正。 #60392 (Alexey Milovidov)。
  • ユーザーが max_parser_depth 設定を誤って非常に大きな値にしていた場合でも、パーサーでスタックオーバーフローを検出するようにしました。これにより #59622 が解消されました。 #60434Alexey Milovidov)。
  • 関数 substring に新しいエイリアス byteSlice が追加されました。 #60494 (Robert Schulze).
  • あいまいさを減らすため、サーバー設定 dns_cache_max_size の名称を dns_cache_max_entries に変更しました。#60500Kirill Nikiforov)。
  • SHOW INDEX | INDEXES | INDICES | KEYS は、これまで直感的ではないことにプライマリキー列でソートしていましたが、そのようなソートは行われなくなりました。 #60514 (Robert Schulze)。
  • Keeper の改善: データ損失を回避するため、不正なスナップショットが検出された場合には起動中に起動を中止するようにしました。 #60537 (Antonio Andelic).
  • MergeTree の読み取りスプリット範囲を交差するものと交差しないものに分割するフォルトインジェクションを追加し、merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability 設定で制御できるようにしました。 #60548 (Maksim Kita)。
  • Advanced ダッシュボードでは、スクロールしてもコントロールが常に表示されるようになりました。これにより、先頭までスクロールしなくても新しいチャートを追加できます。 #60692 (Alexey Milovidov)。
  • String 型と Enum 型は、配列、UNION クエリ、条件式など、同じコンテキストで使用できます。これにより #60726 が解決されました。#60727Alexey Milovidov)。
  • tzdata を 2024a に更新。 #60768 (Raúl Marín).
  • Filesystem データベースで、フォーマット拡張子のないファイルをサポート。 #60795 (Kruglov Pavel).
  • Keeper の改善: Keeper の設定で leadership_expiry_ms をサポートしました。 #60806 (Brokenice0415).
  • 設定 input_format_try_infer_exponent_floats に関係なく、JSON 形式内の指数表記の浮動小数点数を常に推論するようにしました。JSON オブジェクトからの named Tuple 推論時に例外を投げる代わりに、あいまいなパスに対して String 型を使用できるようにする設定 input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects を追加しました。 #60808 (Kruglov Pavel).
  • SMJ で null を最大値または最小値として扱えるフラグを追加しました。これにより、Apache Spark などの他の SQL システムとの動作互換性を確保できます。 #60896 (loudongfeng).
  • ClickHouse のバージョン情報が Docker ラベルに追加されました。#54224 をクローズします。#60949Nikolay Monkov)。
  • IN 句のサブクエリが並列レプリカで動作するようにする設定 parallel_replicas_allow_in_with_subquery = 1 を追加しました。 #60950 (Nikolai Kochetov)。
  • DNSResolver は解決済み IP アドレスの集合をシャッフルします。 #60965 (Sema Checherinda).
  • clickhouse-clientclickhouse-local で、ファイル拡張子から出力フォーマットを自動検出できるようにしました。 #61036 (豪肥肥).
  • メモリ制限の更新を定期的にチェックするようにしました。 #61049 (Han Fei).
  • プロセッサのプロファイリング(ソートや集約などにおける処理時間、入出力バイト数)をデフォルトで有効化。 #61096 (Azat Khuzhin).
  • 誤って追加し忘れていた関数 toUInt128OrZero を追加しました(このミスは https://github.com/ClickHouse/ClickHouse/pull/945 に関連しています)。互換性エイリアスである FROM_UNIXTIME および DATE_FORMAT(これらは ClickHouse ネイティブの機能ではなく、MySQL との互換性のためにのみ存在します)について、SQL 互換エイリアスとして想定どおり、大文字小文字を区別しないようにしました。 #61114Alexey Milovidov)。
  • アクセスチェックを改善し、対象ユーザーが当該権限をすでに保持していない場合でも、そのユーザーがその権限を付与する権限も持っていないときには、保持していない権限を取り消せるようにしました。例: ```sql GRANT SELECT ON . TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • 前回の最適化でのエラーを修正: https://github.com/ClickHouse/ClickHouse/pull/59698。最初のフィルタ済みカラムが最小サイズになるようにするため、break を削除。cc @jsc0218。 #61145 (李扬)。
  • Nullable 列に対する has() 関数の動作を修正(#60214 を修正)。 #61249Mikhail Koviazin)。
  • 現在、サブツリー <include from_zk="/path" merge="true"> を用いる設定の置換において、属性 merge="true" を指定できるようになりました。
    この属性が指定されている場合、ClickHouse はサブツリーを既存の設定とマージし、指定されていない場合は、デフォルト動作として新しい内容を設定に追加します。 #61299 (alesapin)。
  • 仮想メモリマッピング向けの非同期メトリクス VMMaxMapCount と VMNumMaps を追加。#60662 をクローズ。#61354Tuan Pham Anh)。
  • 一時データを作成するすべての箇所、たとえば外部メモリソートや外部メモリ GROUP BY で設定 temporary_files_codec を使用するようにしました。以前は partial_merge JOIN アルゴリズムでのみ有効でした。 #61456 (Maksim Kita)。
  • 重複していたチェック containing_part.empty() を削除。このチェックはすでにここで行われています: https://github.com/ClickHouse/ClickHouse/blob/1296dac3c7e47670872c15e3f5e58f869e0bd2f2/src/Storages/MergeTree/MergeTreeData.cpp#L6141#61467William Schoeffel)。
  • クエリ解析の複雑さを制限できる新しい設定 max_parser_backtracks を追加しました。#61502Alexey Milovidov)。
  • ファイルシステムキャッシュの動的リサイズ時のコンテンションを削減しました。 #61524 (Kseniia Sumarokova).
  • StorageS3 キューの sharded モードは、今後再実装予定のため使用不可としました。 #61537 (Kseniia Sumarokova).
  • タイプミスを修正:use_leagcy_max_leveluse_legacy_max_level に変更。 #61545 (William Schoeffel)。
  • blob_storage_log 内の重複したエントリをいくつか削除しました。 #61622 (YenchangChan).
  • MySQL との互換性確保のためのエイリアスとして current_user 関数を追加しました。 #61770 (Yarik Briukhovetskyi).
  • Azure Blob Storage を使用する場合、バックアップの I/O には managed identity を使用できるようにしました。ストレージ アカウント レベルでの権限を必要とする、存在しないコンテナを ClickHouse が作成しようとするのを防ぐための設定を追加しました。 #61785 (Daniel Pozo Escalona).
  • 以前のバージョンでは、Pretty フォーマットの一部の数値があまりきれいに表示されていませんでした。 #61794 (Alexey Milovidov)。
  • SHOW CREATE TABLE クエリの結果のように、結果セット内に 1 つしか値がない場合、Pretty 形式における長い値は切り捨てられません。#61795Alexey Milovidov)。
  • clickhouse-local と同様に、clickhouse-client でも --format オプションのエイリアスとして --output-format オプションを指定できるようになりました。これにより #59848 が解決されました。#61797Alexey Milovidov)。
  • もし stdout が端末であり、かつ出力フォーマットが指定されていない場合、clickhouse-client および類似ツールは、インタラクティブモードと同様に、デフォルトで PrettyCompact を使用します。clickhouse-clientclickhouse-local は、入力および出力フォーマットのコマンドライン引数を一貫した方法で処理します。この変更により #61272 がクローズされました。#61800 (Alexey Milovidov)。
  • Pretty 形式で桁区切りにアンダースコアを付けて、可読性を向上させました。これは新しい設定 output_format_pretty_highlight_digit_groups によって制御されます。 #61802 (Alexey Milovidov).

バグ修正(公式安定版リリースで発生するユーザーから見える不具合)

  • Decimal 型引数に対する intDiv のバグを修正 #59243 (Yarik Briukhovetskyi)。
  • wingfuzz により検出された kql の問題を修正 #59626 (Yong Wang)。
  • AsynchronousBoundedReadBuffer で発生する「Read beyond last offset」エラーを修正 #59630 (Vitaly Baranov)。
  • rabbitmq: ack も nack も行われないメッセージが発生する問題を修正 #59775 (Kseniia Sumarokova).
  • analyzer における、const および LowCardinality に対する GROUP BY const を含む関数実行の処理を修正しました #59986Azat Khuzhin)。
  • DateTime64 のスケール変換処理を修正 #60004 (Yarik Briukhovetskyi)。
  • SQLite への INSERT 文でシングルクオートを含む場合の処理を修正(バックスラッシュではなくクオートでシングルクオートをエスケープするよう変更)#60015 (Azat Khuzhin)。
  • optimize_uniq_to_count がカラムエイリアスを削除してしまう問題を修正 #60026 (Raúl Marín)。
  • ドキュメントでは 0 はすべてを保持すると記載されているため、MergeTree に対する finished_mutations_to_keep=0 の動作を修正 #60031 (Azat Khuzhin)。
  • s3queue テーブルの DROP 時に発生する可能性がある例外を修正 #60036 (Kseniia Sumarokova)。
  • PartsSplitter で同一パートに対して無効な範囲が生成される問題 #60041 (Maksim Kita).
  • DDLLogEntry でハードコードされた 4096 を使用する代わりに、コンテキストから取得した max_query_size を使用するように変更 #60083Kruglov Pavel)。
  • クエリフォーマットの不整合を修正 #60095 (Alexey Milovidov).
  • サブクエリ内の EXPLAIN のフォーマットの不整合を修正 #60102 (Alexey Milovidov).
  • Nullable 使用時の cosineDistance のクラッシュを修正 #60150 (Raúl Marín)。
  • 文字列表現のブール値を真の bool 型にキャストできるようにしました #60160 (Robert Schulze).
  • system.s3queue_log を修正しました #60166 (Kseniia Sumarokova)。
  • NULL を許容する集約関数名を指定した arrayReduce を修正 #60188 (Raúl Marín).
  • 事前フィルタリング(PK、パーティションプルーニング)時のアクションの実行を修正 #60196 (Azat Khuzhin).
  • s3queue の機密情報をマスクする #60233 (Kseniia Sumarokova).
  • ORDER BY ALLORDER BY * に置き換える」変更を元に戻す #60248Robert Schulze)。
  • Azure Blob Storage:エンドポイントおよびプレフィックスに関する不具合を修正 #60251 (SmitaRKulkarni)。
  • HTTP 例外コードを修正。 #60252 (Austin Kothig)
  • LRUResource Cache のバグを修正(Hive キャッシュ) #60262 (shanfengp).
  • s3queue: バグを修正(不安定だったテスト test_storage_s3_queue/test.py::test_shards_distributed も修正) #60282 (Kseniia Sumarokova).
  • IPv6 を扱うハッシュ関数での未初期化値の使用と不正な結果を修正 #60359 (Kruglov Pavel).
  • 並列レプリカが変更された場合に再解析を強制するようにしました #60362 (Raúl Marín)。
  • 新しいディスク構成オプションでのプレーンメタデータ型の扱いを修正 #60396 (Kseniia Sumarokova)。
  • 意味がないために max_parallel_replicas を 0 に設定できないようにしました #60430 (Kruglov Pavel).
  • mapContainsKeyLike で発生する論理エラー 'Cannot capture column because it has incompatible type' の修正を試みました #60451 (Kruglov Pavel)。
  • null 引数が指定された場合の OptimizeDateOrDateTimeConverterWithPreimageVisitor の修正 #60453 (Raúl Marín)。
  • CREATE TABLE でのスカラーサブクエリの計算を可能な限り回避するようにしました。 #60464 (Nikolai Kochetov).
  • #59674 をマージ。#60470Alexey Milovidov)。
  • s3Cluster 内のキーを正しく検証するよう修正 #60477 (Antonio Andelic).
  • エラーにより多数の行がスキップされる場合に、並列パースで発生するデッドロックを修正 #60516 (Kruglov Pavel)。
  • KQL の複合演算子に対する max_query_size を修正: #60534 (Yong Wang).
  • Keeper の修正: コミットログ待機時にタイムアウトを追加 #60544 (Antonio Andelic).
  • system.numbers からの読み取り行数を削減 #60546JackyWoo)。
  • 日付型に対して数値のヒントを出力しないようにしました #60577 (Raúl Marín)。
  • フィルタで非決定的関数を使用する場合の MergeTree からの読み取りを修正 #60586 (Kruglov Pavel)。
  • 互換性設定に不正な値型が指定された場合の論理エラーを修正 #60596 (Kruglov Pavel).
  • 混在する x86-64 / ARM クラスターにおける集約関数の状態の不整合を修正 #60610 (Harry Lee).
  • fix(prql): より堅牢なパニックハンドラ #60615 (Maximilian Roos).
  • 10進数および日付の引数に対する intDiv を修正 #60672 (Yarik Briukhovetskyi)。
  • Fix: ALTER MODIFY クエリで CTE を展開 #60682 (Yakov Olkhovskiy).
  • Atomic/Ordinary 以外のデータベースエンジン(例:Memory)向けの system.parts を修正 #60689 (Azat Khuzhin).
  • パラメータ化ビューで「Invalid storage definition in metadata file」エラーが発生する問題を修正 #60708 (Azat Khuzhin).
  • CompressionCodecMultiple でのバッファオーバーフローを修正 #60731Alexey Milovidov)。
  • SQL/JSON から不正な値を除去 #60738 (Alexey Milovidov).
  • 集約関数 quantileGK における誤ったサニタイズチェックを削除しました。#60740 (李扬)。
  • streams を 1 に設定することで insert-select と insert_deduplication_token のバグを修正しました #60745 (Jordi Villar)。
  • サポート対象外のマルチパートアップロード操作でカスタムメタデータヘッダーを設定できないようにした #60748 (Francisco J. Jurado Moreno)。
  • toStartOfInterval 関数を修正 #60763 (Andrey Zvonov)。
  • arrayEnumerateRanked で発生していたクラッシュを修正 #60764 (Raúl Marín)。
  • INSERT SELECT JOIN で input() を使用した際にクラッシュする問題を修正 #60765 (Kruglov Pavel)。
  • サブクエリ内で allow_experimental_analyzer に異なる値が指定された場合に発生するクラッシュを修正 #60770 (Dmitry Novik).
  • S3 からの読み込み時の再帰処理を削除 #60849 (Antonio Andelic)。
  • HashedDictionaryParallelLoader でエラーによりハングする可能性がある問題を修正 #60926 (vdimir)。
  • Replicated データベースにおける非同期 RESTORE を修正 #60934 (Antonio Andelic).
  • ネイティブプロトコル経由で Log テーブルへの非同期挿入時に発生するデッドロックを修正 #61055 (Anton Popov)。
  • RangeHashedDictionary における dictGetOrDefault のデフォルト引数の遅延実行の問題を修正 #61196 (Kruglov Pavel)。
  • groupArraySorted の複数のバグを修正 #61203Raúl Marín)。
  • スタンドアロンバイナリ版 Keeper の再構成を修正 #61233 (Antonio Andelic)。
  • S3 エンジンでの session_token の使用方法を修正 #61234 (Kruglov Pavel)。
  • 集約関数 uniqExact が誤った結果を返す可能性のある問題を修正 #61257 (Anton Popov)。
  • SHOW DATABASE のバグを修正 #61269 (Raúl Marín).
  • MATERIALIZED カラムを使用する RabbitMQ ストレージでの論理エラーを修正 #61320 (vdimir)。
  • CREATE OR REPLACE DICTIONARY の動作を修正 #61356 (Vitaly Baranov)。
  • 外部 ON CLUSTER を使用する ATTACH クエリを修正 #61365 (Nikolay Degterinsky)。
  • Actions DAG の分割に関する問題を修正 #61458 (Raúl Marín).
  • 失敗した RESTORE の終了時の処理を修正 #61466 (Vitaly Baranov).
  • 互換性設定を使用した場合に async_insert_use_adaptive_busy_timeout が正しく無効化されるように修正しました #61468 (Raúl Marín).
  • リストアプールでのキューイングを許可 #61475 (Nikita Taranov)。
  • UUID を使用して system.parts を読み取る際のバグを修正 (issue 61220)。 #61479 (Dan Wu).
  • ウィンドウビューで発生していたクラッシュを修正 #61526 (Alexey Milovidov)。
  • 非ネイティブ整数型での repeat の動作を修正 #61527 (Antonio Andelic)。
  • クライアントの -s 引数の問題を修正 #61530 (Mikhail f. Shiryaev).
  • arrayPartialReverseSort におけるクラッシュを修正。#61539 (Raúl Marín)。
  • const position を使った文字列検索を修正 #61547Antonio Andelic)。
  • datetime64 型で使用した場合にエラーが発生していた addDays を修正 #61561Shuai li)。
  • 重複排除付きの非同期挿入に対応できるように system.part_log を修正 #61620 (Antonio Andelic)。
  • system.parts の Non-ready セットを修正。 #61666 (Nikolai Kochetov)。