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

2024年の変更履歴

目次

ClickHouse リリース v24.12、2024-12-19
ClickHouse リリース v24.11、2024-11-26
ClickHouse リリース v24.10、2024-10-31
ClickHouse リリース v24.9、2024-09-26
ClickHouse リリース v24.8 LTS、2024-08-20
ClickHouse リリース v24.7、2024-07-30
ClickHouse リリース v24.6、2024-07-01
ClickHouse リリース v24.5、2024-05-30
ClickHouse リリース v24.4、2024-04-30
ClickHouse リリース v24.3 LTS、2024-03-26
ClickHouse リリース v24.2、2024-02-29
ClickHouse リリース v24.1、2024-01-30
2023 年の変更履歴

ClickHouse リリース 24.12(2024-12-19)。プレゼンテーションビデオ

下位互換性のない変更

  • 関数 greatest および least は、これまでは引数のいずれかが NULL の場合に NULL を返していましたが、今後は NULL の入力値を無視します。たとえば、SELECT greatest(1, 2, NULL) は 2 を返します。これにより PostgreSQL と互換性のある動作になりますが、NULL を返す MySQL との互換性は失われます。以前の動作を維持したい場合は、設定 least_greatest_legacy_null_behavior(デフォルト: false)を true に設定してください。 #65519 #73344 (kevinyhzou).
  • 新しい MongoDB 連携機能がデフォルトになりました。レガシー MongoDB ドライバ(Poco ドライバをベースとしたもの)を引き続き使用したいユーザーは、サーバー設定 use_legacy_mongodb_integration を有効にできます。 #73359 (Kirill Nikiforov.

新機能

  • JSON/Dynamic/Variant 型を experimental 機能から beta に移行しました。 #72294 (Pavel Kruglov)。この変更および関連するすべての修正を 24.11 にもバックポートしました。
  • Iceberg data storage 形式のスキーマ進化機能により、ユーザーはテーブルのスキーマを柔軟に変更できます。カラムの順序やカラム名、単純な型の拡張などは、内部的に変更可能です。#69445 (Daniil Ivanik)。
  • Iceberg REST Catalog との統合: Iceberg という新しいデータベースエンジンを導入し、カタログ全体を ClickHouse に統合できるようにしました。 #71542 (Kseniia Sumarokova).
  • MergeTree テーブルのプライマリキー索引用キャッシュを追加しました(テーブル設定 use_primary_key_cache で有効化可能)。プライマリキー索引でレイジーロードとキャッシュの両方が有効な場合、プライマリキー索引は常にメモリ上に保持するのではなく、Mark キャッシュと同様にオンデマンドでキャッシュへロードされます。データパーツの insert / merge / fetch 時およびテーブルの再起動時にプライマリキー索引を事前ウォームアップする機能を追加しました(設定 prewarm_primary_key_cache で有効化可能)。これにより、共有ストレージ上の巨大なテーブルのメモリ使用量を削減でき、1 千兆行を超えるテーブルでテスト済みです。 #72102 (Anton Popov). #72750 (Alexander Gololobov).
  • 指定したテーブル、またはテーブルが指定されていない場合はすべてのテーブルについて、すべてのパーツのプライマリキーインデックスをロードする SYSTEM LOAD PRIMARY KEY コマンドを実装しました。これはベンチマークに役立ち、クエリ実行時の追加レイテンシーを防ぐのに有用です。 #66252 #67733 (ZAWA_ll).
  • MergeTree テーブルを ReplicatedMergeTree として、またその逆にもアタッチできるクエリを追加しました。ATTACH TABLE ... AS REPLICATED および ATTACH TABLE ... AS NOT REPLICATED#65401 (Kirill).
  • 新しい設定 http_response_headers により、HTTP レスポンスヘッダーをカスタマイズできるようになりました。たとえば、データベースに保存されている画像をブラウザに画像として表示させることができます。これにより #59620 が解決されました。 #72656Alexey Milovidov)。
  • DateTime64 を秒単位の固定精度の Int64 値に変換する関数 toUnixTimestamp64Second を追加しました。これにより、日時が Unix エポックより前の場合に負の値を返せるようになりました。 #70597 (zhanglistar). #73146 (Robert Schulze).
  • 新しい設定 enforce_index_structure_match_on_partition_manipulation を追加し、ソーステーブルの PROJECTION およびセカンダリ索引の集合がターゲットテーブルのそれらの集合の部分集合である場合に ATTACH を許可するようにしました。#70602 をクローズ。#70603zwy991114)。
  • ALTER USER {ADD|MODIFY|DROP SETTING}、ALTER USER {ADD|DROP PROFILE} の構文を追加しました。同様の構文が ALTER ROLE および ALTER PROFILE にも追加されています。これにより、設定のセット全体をすべて置き換える代わりに、個別に変更できるようになりました。 #72050 (pufit).
  • arrayPRAUC 関数を追加しました。この関数は Precision-Recall 曲線の AUC(Area Under the Curve)を計算します。 #72073 (Emmanuel)。
  • 配列型向けに indexOfAssumeSorted 関数を追加しました。非減少順(昇順)にソートされた配列に対する検索を最適化します。効果が現れるのは、非常に大きな配列(10万要素超)の場合です。 #72517 (Eric Kurbanov)。
  • 集約関数 groupConcat で、第 2 引数として区切り文字を任意に指定できるようになりました。 #72540 (Yarik Briukhovetskyi)。
  • from 引数に含まれる文字が to 引数より多い場合に、余分な文字の削除をサポートするように translate 関数が拡張されました。例: SELECT translate('clickhouse', 'clickhouse', 'CLICK') は、CLICK を返すようになりました。 #71441 (shuai.xu).

実験的機能

  • MergeTree の新しい設定 allow_experimental_reverse_key が追加され、MergeTree のソートキーで降順ソートをサポートするようになりました。これは時系列分析、特に TopN クエリに有用です。使用例: ENGINE = MergeTree ORDER BY (time DESC, key) - time フィールドを降順にソートします。 #71095 (Amos Bird)。

パフォーマンスの向上

  • JOIN の並べ替え。クエリプランで inner(ビルド)側として扱う JOIN の片側のテーブルを選択できるオプションを追加しました。これは query_plan_join_swap_table で制御され、auto に設定可能です。このモードでは、ClickHouse は行数が最も少ないテーブルを選択しようとします。 #71577 (Vladimir Cherkasov)。
  • join_algorithm 設定が default に設定されている場合(該当する場合)、parallel_hash アルゴリズムが使用されるようになりました。parallel_hash が使用できない場合には、従来の 2 つの方式(direct および hash)が引き続き使用候補となります。 #70788 (Nikita Taranov).
  • WHEREON の式から共通部分を抽出し、JOIN 時に使用されるハッシュテーブルの数を削減するオプションを追加しました。これは、JOIN の ON 条件が、異なる OR 句内で AND で結合された共通部分を含んでいる場合に有効です。optimize_extract_common_expressions = 1 で有効化できます。 #71537 (János Benjamin Antal).
  • SELECT において、インデックスが作成されているカラムが LowCardinality(String) に CAST されている場合でもインデックスを使用できるようにしました。これは、一部のテーブルが String 型のカラムを持ち、別のテーブルが LowCardinality(String) 型のカラムを持つような Merge テーブルに対してクエリを実行する場合などに発生し得ます。 #71598 (Yarik Briukhovetskyi).
  • 並列レプリカを用いたクエリ実行時に local プランが有効な場合、ワーカー側では索引解析を実行しません。コーディネーターは、自身(クエリの発行元)側での索引解析に基づき、ワーカーが読み取る範囲を選択します。これにより、並列レプリカを用いる短時間のクエリでも、単一ノードのクエリと同等の低レイテンシーで実行できます。 #72109 (Igor Nikonov)。
  • オブジェクトストレージディスク向けに clickhouse disks remove --recursive のメモリ使用量を削減しました。 #67323 (Kirill)。
  • #57631 で導入された、コンパクトなパーツ内の単一カラムに対するサブカラム読み取りの最適化を復元しました。これは誤って削除されていました。#72285Pavel Kruglov)。
  • コンパレータ内の呼び出しをデバーチャル化することで、LowCardinality(String) カラムのソートを高速化しました。 #72337 (Alexander Gololobov).
  • 一部の単純なデータ型に対して argMin/argMax 関数を最適化しました。 #72350 (alesapin)。
  • メモリトラッカーにおける共有ロックの利用を最適化し、ロック競合を低減することで、CPU コア数が非常に多いシステムでのパフォーマンスを向上します。 #72375 (Jiebin Sun)。
  • 新しい設定 use_async_executor_for_materialized_views を追加。materialized view のクエリを非同期かつ必要に応じてマルチスレッドで実行することで、INSERT 中の materialized view の処理を高速化できる一方、より多くのメモリを消費する可能性がある。 #72497 (alesapin)。
  • 集約関数の状態(データ型 AggregateFunction および分散クエリ内)のデシリアライズ処理の性能を向上しました。フォーマット RowBinary のパース性能もわずかに向上しました。 #72818 (Anton Popov).
  • テーブルのキー順に、パラレルレプリカでの読み取り時のレンジを分割することで、読み取り時のメモリ消費を削減しました。 #72173 (JIaQi).
  • 挿入バッチ内のパーティションキーの値が単一の場合、MergeTree への挿入を高速化しました。 #72348 (alesapin).
  • バックアップから復元する際に、テーブルの作成を並列で実行できるようにしました。このPR以前は、RESTORE コマンドは常に単一スレッドでテーブルを作成していたため、多数のテーブルを含むバックアップの場合は遅くなる可能性がありました。 #72427 (Vitaly Baranov)。
  • マークキャッシュが大きい場合、それを削除するのに目立って時間がかかることがあります。この処理の間、コンテキストミューテックスを保持していると、多くの他の処理がブロックされ、新しいクライアント接続ですらミューテックスが解放されるまで確立できません。そもそも同期のためにこのミューテックスを保持しておく必要はなく、shared_ptr を介してキャッシュへのローカル参照を持つだけで十分です。 #72749 (Alexander Gololobov)。

改善点

  • allow_experimental_join_condition 設定を削除し、非等値条件がデフォルトで許可されるようにしました。 #69910 (Vladimir Cherkasov).
  • サーバー設定ファイル(users.xml)で定義された Settings がクライアント側にも適用されるようになりました。date_time_output_format などのフォーマット用 Settings に便利です。 #71178 (Michael Kolupaev).
  • サーバー/USER のメモリ使用量に応じて、GROUP BY / ORDER BY 処理を自動的にディスクベースに切り替えます。max_bytes_ratio_before_external_group_by / max_bytes_ratio_before_external_sort クエリ設定で制御できます。#71406 (Azat Khuzhin)。
  • 新しいキャンセルロジックを追加しました: CancellationChecker は開始されたすべてのクエリのタイムアウトを監視し、タイムアウトに達したクエリを停止します。 #69880 (Yarik Briukhovetskyi).
  • Object 型から JSON 型への ALTER をサポートし、非推奨となった Object 型から簡単に移行できるようにしました。 #71784 (Pavel Kruglov).
  • Enum に定義されていない値を Set で許可しました。#72662 を修正。 #72686zhanglistar)。
  • Enum データ型で LIKE などの文字列検索演算子をサポートし、#72661 を実装しました。 #72732zhanglistar)。
  • 一部の意味のない ALTER USER クエリが受け付けられていました。#71227 を修正しました。#71286Arthur Passos)。
  • 分散 INSERT ... SELECT のクエリプランを構築する際に、設定 prefer_locahost_replica を考慮するようにしました。 #72190 (filimonov).
  • Azure が Iceberg 仕様に違反し、誤って Iceberg v1 を Iceberg v2 とラベル付けしていました。この問題はここで説明されています。Azure Iceberg Writer は、仕様に反する Iceberg メタデータファイル(およびマニフェストファイル)を作成します。その結果、(Azure がそのように書いているため)v2 リーダーで v1 Iceberg 形式のメタデータを読み取ろうとしており、さらにマニフェストファイル内に対応するフィールドが作成されていなかった場合にエラーを発生させるようにしました。#72277Daniil Ivanik)。
  • CREATE MATERIALIZED VIEW のクエリで UNION [ALL] を使用できるようになりました。動作は JOIN を使用した materialized view と同じで、SELECT 式内の最初のテーブルだけが挿入のトリガーとして機能し、他のすべてのテーブルは無視されます。ただし、最初のテーブルへの参照が複数ある場合(たとえば、自身との UNION など)の場合は、それらすべてが挿入されたデータブロックとして処理されます。 #72347 (alesapin).
  • ClickHouse を Dictionary のソースとして使用する場合のソースクエリ検証を追加しました。 #72548 (Alexey Katsman).
  • ClickHouse が設定の再読み込み時にも ZooKeeper の変更を確実に検知できるようにしました。 #72593 (Azat Khuzhin).
  • キャッシュされたマークのメモリ使用量の推定をより適切にし、キャッシュ全体のメモリ使用量を削減。 #72630 (Antonio Andelic).
  • 新しい StartupScriptsExecutionState メトリクスを追加しました。このメトリクスは次の 3 つの値を取ります: 0 = スタートアップスクリプトがまだ完了していない、1 = スタートアップスクリプトが正常に実行された、2 = スタートアップスクリプトの実行が失敗した。Cloud において、特にベース構成へのリリース後にスタートアップスクリプトが正常に実行されているかどうかを把握する必要があるため、このメトリクスが必要です。 #72637 (Miсhael Stetsyuk)。
  • 新しい MergeTreeIndexGranularityInternalArraysTotalSize メトリクスを system.metrics に追加しました。このメトリクスは、大規模なデータセットを持ち、高い
  • レプリケーテッドテーブルの作成時にリトライ処理を追加。 #72682 (Vitaly Baranov).
  • 非アクティブなパーツも含めた合計バイト数をカウントできるよう、system.tablestotal_bytes_with_inactive を追加しました。 #72690 (Kai Zhu).
  • MergeTree の設定を system.settings_changes に追加しました。 #72694 (Raúl Marín).
  • notEmpty 関数で JSON 型をサポートしました。 #72741 (Pavel Kruglov)。
  • GCS S3 エラー AuthenticationRequired の解析に対応しました。 #72753 (Vitaly Baranov)。
  • 関数 ifNull および coalesceDynamic 型をサポートしました。 #72772 (Pavel Kruglov).
  • 関数 toFloat64touInt32 などで Dynamic をサポートしました。 #72989 (Pavel Kruglov).
  • S3 リクエスト用の設定 http_max_fieldshttp_max_field_name_sizehttp_max_field_value_size を追加し、バックアップの作成や復元時に S3 API レスポンスを解析する際にこれらを使用するようにしました。 #72778 (Vitaly Baranov).
  • Storage S3(Azure)Queue において、このメタデータを使用している最後のテーブルが削除された後にのみ、ClickHouse Keeper 内のテーブルメタデータを削除するように変更しました。 #72810 (Kseniia Sumarokova).
  • JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount プロファイルイベントを追加しました。 #72842 (Vladimir Cherkasov)。
  • MergeTree のソートキーおよびスキップ索引でサブカラムをサポートしました。 #72644 (Pavel Kruglov).

バグ修正(公式安定版リリースにおけるユーザーに見える不具合)

  • MergeTree で、パーツを detached ディレクトリへ移動する操作が(オブジェクトストレージ上での操作が原因で)失敗した後に、パーツ同士が交差する可能性があった問題を修正しました。 #70476 (Azat Khuzhin).
  • テーブル名が長すぎる場合のエラー検知を修正し、許容される最大長を示す診断メッセージを出力するようにしました。新しい関数 getMaxTableNameLengthForDatabase を追加しました。 #70810 (Yarik Briukhovetskyi)。
  • clickhouse-library-bridge(このプログラムは安全ではないライブラリを実行できるようにします)のクラッシュ後に発生していたゾンビプロセスの問題を修正しました。 #71301 (MikhailBurdukov).
  • plain_rewritable ディスクでディレクトリの作成に失敗した際に、トランザクションのロールバック中に発生していた NoSuchKey エラーを修正しました。 #71439 (Julia Kartseva).
  • Pretty JSON フォーマットにおける Dynamic 値のシリアル化を修正。 #71923 (Pavel Kruglov).
  • File/S3/URL/HDFS/Azure エンジンの CREATE クエリに、自動的に推論されたフォーマット名を追加しました。以前はサーバーを再起動するたびにフォーマット名が推論され、指定されたデータファイルが削除されていると、サーバー起動時にエラーが発生していました。 #72108 (Pavel Kruglov).
  • 古いアナライザを使用している場合に JOIN ON 句の式内で UDF を使用すると発生するバグを修正。 #72179 (Raúl Marín)。
  • StorageObjectStorage のいくつかの小さなバグを修正します。use_hive_partitioning をデフォルトで有効にする必要があります。 #72185 (Yarik Briukhovetskyi)。
  • min_age_to_force_merge_on_partition_only が、すでに 1 つのパーツにマージ済みの同じパーティションを繰り返しマージしようとしてハングし、複数のパーツを持つパーティションをマージしない問題を修正。 #72209 (Christoph Wurm)。
  • まれなケースですが、スパースなカラムを処理する際に発生していた SimpleSquashingChunksTransform のクラッシュを修正しました。 #72226 (Vladimir Cherkasov).
  • GraceHashJoin 内のデータレースを修正しました。これにより、結合結果から一部の行が欠落する可能性がありました。 #72233 (Nikita Taranov).
  • enable_block_number_column 設定が有効な場合における、マテリアライズドされた _block_number カラムを含む ALTER DELETE クエリの問題を修正しました。 #72261 (Anton Popov).
  • ConcurrentHashJoin のコンストラクタ内などで ColumnDynamic::dumpStructure() が並行して呼び出された場合に発生していたデータレースを修正しました。 #72278 (Nikita Taranov)。
  • ORDER BY ... WITH FILL で重複したカラムがある場合に生じる可能性がある LOGICAL_ERROR を修正。 #72387 (Vladimir Cherkasov).
  • optimize_functions_to_subcolumns を適用した後、複数の箇所で発生していた型の不一致を修正しました。 #72394 (Anton Popov).
  • AWS_CONTAINER_AUTHORIZATION_TOKEN_PATH の代わりに AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE を使用するようにしました。#71074 を修正。 #72397Konstantin Bogdanov)。
  • BACKUP DATABASE db EXCEPT TABLES db.table クエリのパースに失敗する問題を修正しました。 #72429 (Konstantin Bogdanov).
  • 空の Variant を作成できないようにしました。#72454 (Pavel Kruglov).
  • system.merges における result_part_path の無効な形式を修正。 #72567 (Konstantin Bogdanov)。
  • 要素が 1 つだけのグロブ({file} など)の解析処理を修正しました。 #72572 (Konstantin Bogdanov).
  • ARRAY JOIN を含む分散クエリにおいて、フォロワーサーバー向けのクエリ生成を修正しました。#69276 を修正します。 #72608Dmitry Novik)。
  • DateTime64 型同士の IN 演算(DateTime64 IN DateTime64)で結果が返らないバグを修正しました。 #72640 (Yarik Briukhovetskyi).
  • flatten_nested=0 で作成されたテーブルを持つ Replicated データベースに新しいレプリカを追加する際に発生していたメタデータの不整合を修正しました。 #72685 (Alexander Tokmakov).
  • Keeper の内部通信向けの高度な SSL 構成を修正。 #72730 (Antonio Andelic)。
  • S3Queue の unordered モードで、tracked_files_limit の設定値が S3 のファイル出現頻度よりも小さい場合に発生していた「No such key」エラーを修正しました。 #72738 (Kseniia Sumarokova).
  • ローカルに該当ユーザーが存在しない場合に RemoteQueryExecutor でスローされる例外を修正。 #72759 (Andrey Zvonov).
  • マテリアライズされた _block_number カラムを持つミューテーションの不具合を修正しました(enable_block_number_column 設定が有効な場合)。 #72854 (Anton Popov).
  • バックアップ内に空のファイルが含まれている場合でも、プレーンな書き換え可能ディスクでのバックアップ/リストアが正しく動作するよう修正しました。 #72858 (Kseniia Sumarokova).
  • DistributedAsyncInsertDirectoryQueue における挿入のキャンセルを適切に行えるよう修正しました。 #72885 (Antonio Andelic).
  • 誤ったデータをスパースなカラムにパースする際にクラッシュする不具合を修正しました(enable_parsing_to_custom_serialization 設定を有効にしている場合に発生する可能性があります)。#72891 (Anton Popov).
  • バックアップ復元時にクラッシュが発生する可能性のあった問題を修正。 #72947 (Kseniia Sumarokova).
  • ON 句に不等号を用いた複雑な条件が含まれている場合に発生する可能性があった parallel_hash JOIN メソッドのバグを修正しました。 #72993 (Nikita Taranov).
  • JSON のパース時にはデフォルトのフォーマット設定を使用して、不正なデシリアライズを防ぎます。#73043 (Pavel Kruglov)。
  • サポートされていないストレージを使用するトランザクションで発生していたクラッシュを修正。 #73045 (Raúl Marín).
  • MemoryTrackingMemoryResident の差分が増え続ける場合に、メモリトラッキングが過大評価される可能性があった問題を修正しました。 #73081 (Azat Khuzhin).
  • Tuple のパース中に重複した JSON キーをチェックするようになりました。以前はこれにより、パース中に論理エラー Invalid number of rows in Chunk が発生する可能性がありました。 #73082 (Pavel Kruglov).

ビルド/テスト/パッケージングの改善

  • これまで /utils フォルダに格納され、ソースからの手動コンパイルが必要だった小さなユーティリティはすべて、メインの ClickHouse バンドルに統合されました。これにより次の issue が解決されました: #72404#72426Nikita Mikhaylov)。
  • 22.3 で導入された /etc/systemd/system/clickhouse-server.service の削除処理を廃止しました。#39323#72259Mikhail f. Shiryaev)。
  • メモリ/CPU 制限によりコンパイルが失敗するのを避けるため、大きな翻訳単位を分割しました。#72352Yakov Olkhovskiy)。
  • OSX: ICU サポート付きでビルドし、照合順序、文字セット変換、その他のローカライゼーション機能を有効にしました。#73083Raúl Marín)。

ClickHouse リリース 24.11(2024-11-26)。プレゼンテーション動画

後方互換性のない変更

  • システムテーブル generate_series および generateSeries を削除しました。これらは誤って追加されていました: #59390#71091Alexey Milovidov)。
  • StorageExternalDistributed を削除しました。#70600 をクローズします。#71176flynn)。
  • テーブルエンジン Kafka、NATS、RabbitMQ は、SOURCES 階層内でそれぞれ専用の権限でカバーされるようになりました。これらのエンジン種別でテーブルを作成するデフォルト以外のデータベースユーザーには、該当する権限を追加してください。#71250Christoph Wurm)。
  • 実行前に、完全な mutation クエリ(サブクエリを含む)を検証するようになりました。これにより、誤って無効なクエリを実行してしまい、有効な mutation をブロックする不要な mutation が蓄積されることを防ぎます。#71300Christoph Wurm)。
  • ファイルシステムキャッシュの設定項目 skip_download_if_exceeds_query_cachefilesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit に改名しました。#71578Kseniia Sumarokova)。
  • deltaSumTimestamp における Enum および UInt128UInt256 引数のサポートを削除しました。また、deltaSumTimestamp の第2引数(「timestamp」)としての Int8UInt8Int16UInt16 のサポートも削除しました。#71790Alexey Milovidov)。
  • Dictionary storage、dictionary テーブル関数、または Dictionary 自体への直接 SELECT により dictionary からデータを直接取得する場合、Dictionary に対する SELECT 権限または dictGet 権限のいずれかがあれば十分になりました。これは ACL 回避を防ぐこれまでの試み(https://github.com/ClickHouse/ClickHouse/pull/57362 および https://github.com/ClickHouse/ClickHouse/pull/65359)と整合するものであり、後者を後方互換にします。[#72051](https://github.com/ClickHouse/ClickHouse/pull/72051)([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。

実験的機能

  • すべての実験的/ベータ機能を無効化するグローバルスイッチとして allow_feature_tier を実装しました。#71841 #71145 (Raúl Marín).
  • JSON サブカラム用ファイルで特殊記号がエスケープされていないことにより発生し得る No such file or directory エラーを修正しました。#71182 (Pavel Kruglov).
  • String から JSON への ALTER をサポートしました。この PR では、JSON 型および Dynamic 型のシリアライゼーションを新しいバージョン V2 に変更しています。古いバージョン V1 も、merge_tree_use_v1_object_and_dynamic_serialization を有効化することで引き続き使用できます(アップグレード時に、問題なくバージョンをロールバックできるようにするために利用できます)。#70442 (Pavel Kruglov).
  • JSON 文字列からのシリアライズ/デシリアライズを通じて、Map/Tuple/Object から新しい JSON への単純な CAST を実装しました。#71320 (Pavel Kruglov).
  • 予期しない結果を招く可能性があるため、デフォルトでは ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY に Variant/Dynamic 型を使用できないようにしました。#69731 (Pavel Kruglov).
  • 混乱を避けるため、min/max 関数で Dynamic/Variant 型の使用を禁止しました。#71761 (Pavel Kruglov).

新機能

  • ワークロードおよびリソース管理を記述するための SQL 構文を追加しました。 https://clickhouse.com/docs/operations/workload-scheduling. #69187 (Sergei Trifonov).
  • 新しいデータ型 BFloat16 を追加しました。これは、8 ビットの指数部と符号部、および 7 ビットの仮数部をもつ 16 ビット浮動小数点数を表します。これにより #44206 および #49937 が解決されます。 #64712 (Alexey Milovidov).
  • 現在のユーザー/ロールに特定の権限が付与されているかどうか、また対応するテーブル/カラムがメモリ内に存在するかどうかを確認する CHECK GRANT クエリを追加しました。 #68885 (Unalian).
  • iceberg[S3;HDFS;Azure]Cluster, deltaLakeCluster, hudiCluster テーブル関数を追加しました。 #72045 (Mikhail Artemenko).
  • http_handlers(dynamic_query_handler / predefined_query_handler)でユーザー名/パスワードを設定できるようにしました。 #70725 (Azat Khuzhin).
  • ORDER BY WITH FILL 演算子における staleness 句のサポートを追加しました。 #71151 (Mikhail Artemenko).
  • 各認証方式に独自の有効期限を持たせられるようにし、USER エンティティからは削除しました。 #70090 (Arthur Passos).
  • 新しい関数 parseDateTime64, parseDateTime64OrNull, parseDateTime64OrZero を追加しました。既存の関数 parseDateTime(およびそのバリエーション)と比較して、DateTime ではなく DateTime64 型の値を返します。 #71581 (kevinyhzou).

パフォーマンスの改善

  • パーツにおいて粒度が一定である場合、インデックス粒度の値に対するメモリ使用量を最適化しました。パーツに対して常に一定の粒度を選択できる機能(use_const_adaptive_granularity 設定)を追加し、メモリ上で常に最適化されるようにしました。これにより、大規模なワークロード(共有ストレージ上で数兆行規模)において、データパーツのメタデータ(インデックス粒度の値)によるメモリ使用量が継続的に増加することを防げます。 #71786 (Anton Popov)。
  • join_algorithm = 'parallel_hash' の場合、並列処理のためにスレッド間で分配する際に、入力ブロック内のカラムをコピーしなくなりました。 #67782 (Nikita Taranov)。
  • 互いに交差しないパーツに対して Replacing マージアルゴリズムを最適化しました。 #70977 (Anton Popov).
  • metrics および system.detached_parts で、読み取り専用ディスクおよび write-once ディスク上のデタッチされたパーツを一覧表示しないようにしました。 #71086 (Alexey Milovidov).
  • 重い非同期メトリクスはデフォルトでは計算しないようにしました。この機能は #40332 で導入されましたが、特定の一社のためだけに必要な重いバックグラウンドジョブを持つのは好ましくありません。#71087Alexey Milovidov)。
  • plain_rewritable ディスクについて: ディレクトリを一覧表示する際にオブジェクトストレージ API を呼び出さないようにします。これはコスト効率が悪くなる可能性があるためです。代わりに、ファイル名のリストをメモリ内に保持します。その代償として、初期ロード時間の増加と、ファイル名を保持するために必要なメモリ量の増加が発生します。#70823Julia Kartseva)。
  • クリティカルリージョンを縮小することで、system.query_metric_log の収集間隔におけるパフォーマンスと精度を改善しました。 #71473 (Pablo Marcos).
  • 仮想行を生成して読み取り順序を最適化し、特に複数のパーツが存在する場合にマージソート時の読み取りデータ量を削減。 #62125 (Shichao Jin).
  • サーバー設定 async_load_system_database を追加しました。これにより、システムデータベースの読み込みが完了していなくてもサーバーを起動できるようになります。システムテーブルが多数ある場合でも、ClickHouse をより高速に起動するのに役立ちます。 #69847 (Sergei Trifonov).
  • clickhouse-compressor--threads パラメータを追加し、データを並列に圧縮できるようにしました。 #70860 (Alexey Milovidov).
  • prewarm_mark_cache という設定を追加しました。これにより、挿入、マージ、パーツのフェッチ、およびテーブルの起動時に、mark を mark cache にロードできるようになります。 #71053 (Anton Popov).
  • MergeTree テーブルエンジンファミリーでのメモリフットプリントを削減するため、メモリ上の index_granularity 配列を縮小しました。 #71595 (alesapin).
  • ディスクを介さない読み取りに対してファイルシステムキャッシュ設定 boundary_alignment を無効化し、キャッシュを利用するスタンドアロンのリモートファイルからの読み取り性能を向上させました。 #71827 (Kseniia Sumarokova).
  • SELECT * FROM table LIMIT ... のようなクエリでは、実際には使用されない場合でも、以前はパートの索引が読み込まれていました。 #71866 (Alexander Gololobov)。
  • parallel_replicas_local_plan をデフォルトで有効にしました。クエリの起点ノード側で完全なローカルプランを構築することで、リソース消費を抑えつつ parallel replicas のパフォーマンスを向上させ、より多くのクエリ最適化を適用できる余地が生まれます。 #70171 (Igor Nikonov).

改善点

  • ファイルを引数として指定し、ch queries.sql のように ClickHouse を実行できるようになりました。 #71589 (Raúl Marín).
  • Vertical フォーマット(クエリの末尾を \G で終えると有効になるフォーマット)は、次のような Pretty フォーマットの機能を備えました: - 数値の千の位ごとの桁区切りのハイライト - 読み取りやすい数値チップの表示 #71630 (Alexey Milovidov).
  • クラスター内の他のノードに、クエリの発行元から外部ユーザーロールをプッシュできるようにしました。外部認証基盤(LDAP など)にアクセスできるのが発行元ノードだけの場合に便利です。 #70332 (Andrey Zvonov).
  • 集約関数 any に対して anyRespectNullsfirstValueRespectNullsanyValueRespectNulls のエイリアスを追加しました。さらに、集約関数 anyLast に対して anyLastRespectNulls および lastValueRespectNulls のエイリアスも追加しました。これにより、anyLast_respect_nullsStateIf の代わりに SELECT anyLastRespectNullsStateIf のように、キャメルケースのみを用いた、アンダースコアとの混在がないより自然な構文を使用できるようになります。 #71403 (Peter Nguyen).
  • date_time_utc 設定パラメータを追加し、JSON ログのフォーマットで RFC 3339/ISO8601 形式の UTC 日時をサポートできるようにしました。 #71560 (Ali)。
  • S3 エンドポイントでのユーザー認証向けに新しいヘッダータイプ(access_header)を追加しました。これにより、優先度が最も低いアクセスヘッダーを取得でき、その値は、他のソース(たとえばテーブルスキーマや名前付きコレクション)から取得される access_key_id によって上書きされるようになりました。 #71011 (MikhailBurdukov)。
  • 定数配列と定数としてキャプチャされた引数を持つ高階関数は、定数を返すようになりました。 #58400 (Alexey Milovidov).
  • クエリプランのステップ名(EXPLAIN PLAN json=1)およびパイプラインのプロセッサ名(EXPLAIN PIPELINE compact=0,graph=1)に、一意の ID がサフィックスとして付与されるようになりました。これにより、プロセッサプロファイラーの出力および OpenTelemetry トレースを、EXPLAIN の出力と紐付けることができます。 #63518 (qhsong).
  • Azure Blob Storage への書き込み後にオブジェクトが存在するかどうかを確認するオプションを追加しました。この動作は check_objects_after_upload を設定することで制御できます。 #64847 (Smita Kulkarni).
  • clickhouse-local でデフォルトのデータベースとして Atomic を使用するようにしました。 #50647 の項目 1 と 5 に対応します。 #44817 をクローズします。 #68024Alexey Milovidov)。
  • 例外は、エラーをクライアントに通知するために HTTP プロトコルに違反します。 #68800 (Sema Checherinda)。
  • replica_dir を作成し、DDLWorker でレプリカをアクティブとしてマークすることで、分散 DDL クエリを実行しているホストをレポートできるようにしました。 #69658 (tuanpach).
  • distributed_ddl_output_mode が *_only_active に設定されている場合、データベースに対する ON CLUSTER クエリではアクティブなレプリカのみを待機するようにしました。 #69660 (tuanpach).
  • ON CLUSTER バックアップおよびリストアのエラー処理とキャンセル動作を改善しました: - あるホストでバックアップまたはリストアが失敗した場合、他のホスト上のバックアップ/リストアも自動的にキャンセルされます - 一部のホストが失敗し、他のホストが処理を継続している状況でも、不可解なエラーが出力されないようにしました - あるホストでバックアップまたはリストアがキャンセルされた場合、他のホスト上のバックアップ/リストアも自動的にキャンセルされます - test_disallow_concurrency に関する問題を修正し、同時実行の無効化がより適切に動作するようにしました - バックアップおよびリストアが ZooKeeper 切断に対して、これまでよりもはるかに堅牢になりました。 #70027 (Vitaly Baranov).
  • ストレージ S3Queue で一部の設定に対する ALTER TABLE ... MODIFY/RESET SETTING ... をサポートしました。 #70811 (Kseniia Sumarokova).
  • サーバー証明書の再読み込み手順と同様に、クライアント証明書も再読み込みできるようにしました。 #70997 (Roman Antonov).
  • クライアント履歴サイズを設定可能にし、デフォルト値を増やしました。 #71014 (Jiří Kozlovský).
  • Parquet ネイティブリーダーで Boolean 型をサポート。 #71055 (Arthur Passos)。
  • S3 とやり取りする際に、"Malformed message" など、より多くの種類のエラーをリトライ対象としました。 #71088 (Alexey Milovidov).
  • 一部のS3関連メッセージのログレベルを下げました。 #71090 (Alexey Milovidov).
  • スペースを含む名前の HDFS ファイルへの書き込みをサポートしました。 #71105 (exmy).
  • レプリケートされたテーブル、辞書、およびビューの数を制限する設定を追加しました。 #71179 (Kirill).
  • AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE が利用可能な場合は、AWS_CONTAINER_AUTHORIZATION_TOKEN の代わりに AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE を使用するようにしました。#71074 を修正します。#71269Konstantin Bogdanov)。
  • ReplicatedMergeTree の再起動スレッドから metadata_version ZooKeeper ノードの作成処理を削除しました。このノードを作成する必要があるシナリオは、ユーザーが 20.4 より前のバージョンから 24.10 より後のバージョンへ直接アップグレードした場合のみです。ClickHouse は 1 年以上の期間をまたぐアップグレードをサポートしていないため、ノードを作成するのではなく、例外をスローしてユーザーに段階的なアップグレードを求めるべきです。#71385Miсhael Stetsyuk)。
  • 高度なダッシュボードにホスト単位のダッシュボード Overview (host)Cloud overview (host) を追加。 #71422 (alesapin).
  • clickhouse-local はデフォルトで暗黙の SELECT を使用しており、計算機として利用できます。暗黙の SELECT モードにおける構文ハイライトを改善しました。 #71620 (Alexey Milovidov)。
  • コマンドラインアプリケーションで、複数の文を含むクエリでも構文がハイライト表示されます。 #71622 (Alexey Milovidov).
  • コマンドラインアプリケーションは、エラー発生時に 0 以外の終了コードを返すようになりました。以前のバージョンでは、disks アプリケーションはエラー発生時でも終了コード 0 を返しており、他のアプリケーションも、エラー 256(PARTITION_ALREADY_EXISTS)および 512(SET_NON_GRANTED_ROLE)の場合に終了コード 0 を返していました。 #71623 (Alexey Milovidov).
  • user/group が ID で指定されている場合に clickhouse su が失敗していました。このパッチで UID:GID 形式も受け付けるようになりました。 #71626 (Mikhail f. Shiryaev).
  • filesystem_cache_prefer_bigger_buffer_size 設定により、filesystem cache におけるメモリバッファ拡張を無効化できるようにしました。 #71640 (Kseniia Sumarokova).
  • ファイルシステムキャッシュのバックグラウンドダウンロード時の最大ファイルセグメントサイズを制御するための個別設定 background_download_max_file_segment_size を追加しました。 #71648 (Kseniia Sumarokova).
  • JSON 型のパースをわずかに改善しました: JSON パスに対応する現在のブロックに複数の型の値が含まれている場合、専用のベストエフォート順序で型を試し、最適な型を選択するようにしました。 #71785 (Pavel Kruglov)。
  • 以前は、system.asynchronous_metrics から読み取る際、並行して実行されている更新処理が完了するまで待機していました。システムに高い負荷がかかっている場合、この処理には長時間かかる可能性があります。この変更により、これまでに収集された値を常に読み取れるようになりました。 #71798 (Alexander Gololobov).
  • S3Queue および AzureQueue: polling_max_timeout_ms を 10 分、polling_backoff_ms を 30 秒に設定。#71817Kseniia Sumarokova)。
  • history 期間の 1 回の期間内に HostResolver を 3 回更新するようにしました。#71863 (Sema Checherinda).
  • 高度なダッシュボードの HTML ページに、system.dashboards テーブル内のダッシュボードを選択するためのドロップダウンセレクターを追加しました。#72081 (Sergei Trifonov)。
  • 認証後にデフォルトデータベースが存在するかを確認するようにしました。#71097 を修正。 #71140Konstantin Bogdanov)。

バグ修正(公式安定版でのユーザーに見える不具合)

  • ATTACH PART クエリの実行時に重複排除されたパーツが、attaching_ プレフィックスが付いたままになることはなくなりました。 #65636 (Kirill).
  • IN 関数で DateTime64 型の精度が失われるバグを修正しました。 #67230 (Yarik Briukhovetskyi)。
  • ORDER BY ... WITH FILLIGNORE/RESPECT NULLS を指定した関数を使用する際に起こり得る論理エラーを修正しました。 #57609 をクローズしました。 #68234Vladimir Cherkasov)。
  • メモリ制限に達した場合、Native フォーマットでの非同期挿入においてまれに発生していた論理エラーを修正しました。 #68965 (Anton Popov)。
  • EPHEMERAL カラムに対する CREATE TABLE 文の COMMENT を修正しました。 #70458 (Yakov Olkhovskiy).
  • LowCardinality(Nullable) を使用した JSONExtract 関数における論理エラーを修正。 #70549 (Pavel Kruglov)。
  • 同じ ZooKeeper パス (zk path) を持つ別のレプリカが存在する場合に、system drop replica がその zk パスを削除できるようにしました。 #70642 (MikhailBurdukov).
  • AggregateFunctionGroupArraySorted におけるクラッシュおよびメモリリークを修正。 #70820 (Michael Kolupaev).
  • URL エンジンで、ユーザー指定ヘッダーにより Content-Type を上書きできるようにしました。 #70859 (Artem Iurin)。
  • StorageS3Queue で発生していた論理エラー「既に存在するため /processed に永続ノードを作成できません」を修正。 #70984 (Kseniia Sumarokova).
  • 特定の状況下で、名前付きセッションが終了せず、無期限にハングし続ける問題を修正しました。 #70998 (Márcio Martins).
  • PROJECTION における論理削除の rebuild オプションで _row_exists カラムを考慮していなかった不具合を修正しました。 #71089 (Shichao Jin).
  • Oracle Linux UEK 6.10 上での実行時に発生する AT_* is out of range 問題を修正。 #71109 (Örjan Fors)。
  • 予期しないレースコンディションにより、system.query_metric_log に誤った値が記録される不具合を修正。 #71124 (Pablo Marcos).
  • quantileExactWeightedInterpolated の集約関数名の不整合を修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/69619 で導入されました。cc @Algunenano. #71168 (李扬).
  • 関数比較で Dynamic を使用した場合に発生する bad_weak_ptr 例外を修正。 #71183 (Pavel Kruglov).
  • 読み込む 7z ファイルがローカルマシン上にあることを確認します。 #71184 (Daniil Ivanik).
  • HTTP および Async Inserts 経由の Native フォーマットで format 設定が無視されていた問題を修正。 #71193 (Pavel Kruglov).
  • use_query_cache = 1 を設定して実行した SELECT クエリでも、システムテーブル名がリテラルとして現れる場合に拒否されることがなくなりました。例えば SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true; は現在は問題なく動作します。 #71254 (Robert Schulze)。
  • enable_filesystem_cache=1 を指定した状態で、ストレージ構成のディスクにキャッシュ設定がない場合にメモリ使用量が増加していた不具合を修正しました。 #71261 (Kseniia Sumarokova).
  • Dynamic カラムからの LowCardinality Dictionary デシリアライズ時に発生する可能性のある「Cannot read all data」エラーを修正しました。 #71299 (Pavel Kruglov).
  • クライアントにおける並列出力フォーマットで、クリーンアップが不完全になる問題を修正。 #71304 (Raúl Marín)。
  • Named Collection で不足していたエスケープ解除処理を追加しました。この修正がない場合、clickhouse-server を起動できません。 #71308 (MikhailBurdukov).
  • ネイティブプロトコル経由で空ブロックを伴う非同期インサートを修正。 #71312 (Anton Popov)。
  • 誤ったワイルドカードを用いて権限を付与した際の AST フォーマットの不整合を修正。#71309#71332pufit)。
  • データパーツのデストラクタに try/catch を追加して、std::terminate の発生を防ぎます。 #71364 (alesapin).
  • JSON 型ヒント内の疑わしい型や実験的な型をチェック。 #71369 (Pavel Kruglov).
  • Linux以外のOSでもメモリワーカースレッドを起動するようにした(#71051 を修正)。#71384Alexandre Snarskii)。
  • Variant 型のカラムを含む Chunk で発生するエラー "Invalid number of rows in Chunk" を修正。 #71388 (Pavel Kruglov)。
  • 古い PostgreSQL バージョンで「column "attgenerated" does not exist」というエラーが発生する問題を修正し、#60651 を解決しました。#71396 (0xMihalich)。
  • サーバーログがスパム的に出力されるのを避けるため、認証失敗の試行は、これまでの ERROR レベルではなく DEBUG レベルでログ出力されるようになりました。 #71405 (Robert Schulze).
  • mongodb テーブル関数に誤った引数(例: NULL)を渡した際にクラッシュが発生する不具合を修正。 #71426 (Vladimir Cherkasov).
  • optimize_rewrite_array_exists_to_has によるクラッシュの問題を修正。 #71432 (Raúl Marín).
  • INSERT 時における max_insert_delayed_streams_for_parallel_write 設定の扱いを修正しました。以前は正しく動作しておらず、複数のパーティションにデータを書き込む INSERT でメモリ使用量が過大になる可能性がありました。 #71474 (Anton Popov).
  • arrayJoin が WHERE 条件内に現れる可能性がある場合に発生しうる Argument for function must be constant(旧アナライザ)エラーを修正。 https://github.com/ClickHouse/ClickHouse/pull/65414 以降のリグレッション。 #71476Nikolai Kochetov)。
  • カラム数が 0 の場合に SortCursor がクラッシュしないようにしました(旧アナライザ)。 #71494 (Raúl Marín).
  • 初期化されていない ORC データにより発生する Date32 型の範囲外エラーを修正しました。詳細については https://github.com/apache/incubator-gluten/issues/7823 を参照してください。 #71500 (李扬)。
  • Dynamic 型および JSON 型に対して、wide part におけるカラムサイズの計算を修正。 #71526 (Pavel Kruglov).
  • materialized view 内のクエリが CTE と組み合わせて IN を使用している場合の Analyzer の不具合を修正。#65598 をクローズ。#71538Maksim Kita)。
  • CONSTRAINT 内で UDF を使用した場合にクラッシュする問題を修正しました。 #71541 (Raúl Marín).
  • bitShift 関数で範囲外となった場合にエラーをスローする代わりに、0 またはデフォルト文字を返すようにしました。 #71580 (Pablo Marcos).
  • 特定のエンジンを使用する materialized view の利用時にサーバーがクラッシュする問題を修正しました。 #71593 (Pervakov Grigorii).
  • 定数配列へのエイリアスを含むネストしたデータ構造での array join により、ヌルポインタ参照が発生していました。これにより#71677がクローズされました。#71678 (Alexey Milovidov)。
  • 空のタプルを指定して ALTER を実行した際に発生する LOGICAL_ERROR を修正しました。これにより #71647 が解決されます。 #71679 (Amos Bird)。
  • NOT IN 演算子が使用されている場合、パーティションカラムに対する述語内の定数集合を変換しないようにしました。 #71695 (Eduard Karacharov).
  • より分かりやすくするため、docker init スクリプト失敗時のログメッセージを修正。 #71734 (Андрей)。
  • LowCardinality(Nullable) から Dynamic への CAST を修正しました。これにより、以前は Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable というエラーが発生する可能性がありました。 #71742 (Pavel Kruglov).
  • DateTime64 型の主キーに対する WHERE 条件で toDayOfWeek 関数により発生する例外を修正。 #71849 (Yakov Olkhovskiy).
  • スパースカラムにパースした後のデフォルト値の補完処理を修正しました。 #71854 (Anton Popov).
  • 分散テーブル上で入力が ALIAS の場合に GROUPING 関数で発生していたエラーを修正し、#68602 をクローズ。#71855Vladimir Cherkasov)。
  • allow_experimental_join_condition を使用した場合に発生する可能性があったクラッシュを修正。#71693 をクローズ。#71857Vladimir Cherkasov)。
  • WITH TIES 句を使用した SELECT 文で、十分な行数が返らないことがある問題を修正しました。 #71886 (wxybear)。
  • arrayWithConstant の評価でカラムが配列サイズ制限を超えていると誤判定され、その結果発生していた TOO_LARGE_ARRAY_SIZE 例外を修正しました。 #71894 (Udi).
  • clickhouse-benchmark が、1 秒を超える時間がかかるクエリに対して誤ったメトリクスを報告していました。 #71898 (Alexey Milovidov).
  • clickhouse-client における進捗インジケーターと進捗テーブル間のデータレースを修正しました。この問題は FROM INFILE を使用した場合に表面化します。INSERT クエリの実行中にキーストロークをフックし、進捗テーブルの表示を切り替えられるようにしました。 #71901 (Julia Kartseva).
  • クラスタの自動検出に補助的な Keeper を使用するようにしました。 #71911 (Anton Ivashkin).
  • 24.6 で不具合が発生していた system.s3/azure_queue_log の rows_processed カラムを修正しました。#69975 をクローズ。#71946Kseniia Sumarokova)。
  • s3 / s3Cluster 関数が不完全な結果を返したり、例外を送出したりする場合がある問題を修正しました。これは、s3 の URI でグロブパターン(pattern/* のような)を使用し、かつキー pattern/ を持つ空オブジェクトが存在している場合(そのようなオブジェクトは S3 コンソールによって自動的に作成されます)に発生していました。あわせて、設定 s3_skip_empty_files のデフォルト値を false から true に変更しました。#71947Nikita Taranov)。
  • clickhouse-client の構文ハイライトで発生していたクラッシュを修正しました。#71864 をクローズしました。#71949 (Nikolay Degterinsky)。
  • ORDER BY 句で、最初の引数が定数であるバイナリ単調関数を使用した MergeTree テーブルで発生する Illegal type エラーを修正。#71941 を修正。#71966Nikolai Kochetov)。
  • サブクエリ内で使用される EXPLAIN AST では、SELECT クエリのみが許可されます。その他の種類のクエリを使用すると、論理エラー('Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery' または Inconsistent AST formatting)が発生します。 #71982 (Pavel Kruglov).
  • clickhouse-client でレコードを挿入する際、クライアントはサーバーからカラム定義を取得します。しかし、その定義を書き込む順序に不具合がありました。本来は [statistics, ttl, settings] の順であるべきでした。#71991Han Fei)。
  • format_alter_commands_with_parentheses が有効な場合の MOVE PARTITION ... TO TABLE ... の ALTER コマンドのフォーマットを修正しました。 #72080 (János Benjamin Antal).
  • 並列レプリカを使用するクエリにおける RIGHT / FULL JOIN を修正しました。これにより、RIGHT JOIN は並列レプリカで実行できるようになり(右側テーブルの読み取りが分散されます)が、FULL JOIN はノード間で並列化できず、ローカルでのみ実行されます。 #71162 (Igor Nikonov).
  • 制限されたシステムコールにより、Docker コンテナ内の ClickHouse が標準エラー出力に「get_mempolicy: Operation not permitted」と出力してしまう問題を修正しました。 #70900 (filimonov).
  • attach スレッドではなく再起動スレッドで ZooKeeper 内の metadata_version レコードを修正するようにしました。 #70297 (Miсhael Stetsyuk).
  • これはサポート対象外で、今後完全に削除される予定の「zero-copy」レプリケーションに対する修正です。zero-copy レプリケーションを使用する ReplicatedMergeTree において、その blob を使用しているノードが存在する場合には、その blob を削除しないようにしました。 #71186 (Antonio Andelic)。
  • サポート対象外であり、今後完全に削除される予定の「zero-copy」レプリケーションに対する修正です。Keeper が利用不能な場合のデータ損失を防ぐため、パーツを zero-copy ディスクへ移動する前に zero-copy 共有ロックを取得するようにしました。 #71845 (Aleksei Filatov)。

ClickHouse リリース 24.10(2024-10-31)。プレゼンテーション動画

後方互換性のない変更

  • サブクエリがかっこで囲まれている UNION を含むクエリチェーンにおいて、FORMAT の前に SETTINGS を記述できるようにしました。これにより #39712 が解決されます。クエリ内で SETTINGS 句が連続して 2 回指定されている場合の動作を変更しました。対応するサブクエリに対しては、最も近い SETTINGS 句が優先されます。以前のバージョンでは、最も外側の SETTINGS 句が内側より優先される場合がありました。 #68614Alexey Milovidov)。
  • [PRE]WHERE 句のフィルター条件の並べ替えが、デフォルトで許可されるようになりました。これは allow_reorder_prewhere_conditionsfalse に設定することで無効化できます。 #70657Nikita Taranov)。
  • ライセンス上の互換性がない idxd-config ライブラリを削除しました。これに伴い、実験的な Intel DeflateQPL コーデックも削除されました。 #70987Alexey Milovidov)。

新機能

  • ワイルドカード付きプレフィックスに対するアクセス権を付与できるようになりました。GRANT SELECT ON db.table_pefix_* TO user#65311pufit)。
  • クエリの実行中にスペースキーを押すと、クライアントに詳細なメトリクスを含むリアルタイムのテーブルが表示されます。clickhouse-client では、新しい --progress-table オプションを使用してこれをグローバルに有効化できます。新しい --enable-progress-table-toggle--progress-table オプションに関連付けられており、Ctrl+Space キーを押すことで進行状況テーブルの描画を切り替えます。#63689 (Maria Khristenko), #70423 (Julia Kartseva)。
  • ETag とファイルパスから生成したハッシュをキャッシュキーとして使用し、オブジェクトストレージのテーブルエンジンおよびデータレイクで読み取りファイルをキャッシュできるようにしました。 #70135 (Kseniia Sumarokova).
  • CREATE TABLE ... CLONE AS ... クエリでテーブルを作成できるようになりました。これにより、元のテーブルのスキーマをクローンし、その後すべてのパーティションを新しく作成したテーブルにアタッチします。この機能は MergeTree ファミリーのテーブルでのみ利用可能です。 #65015 をクローズ。 #69091tuanpach)。
  • 新しい system テーブル system.query_metric_log を追加しました。このテーブルには、個々のクエリに対して system.events テーブルから取得したメモリ使用量およびメトリクス値の履歴が含まれ、定期的にディスクに書き出されます。 #66532 (Pablo Marcos)。
  • 暗黙の SELECT を用いることで、ch "1 + 2" のような電卓スタイルの式を実行するシンプルな SELECT クエリを記述できます。この挙動は新しい設定 implicit_select によって制御されます。#68502Alexey Milovidov)。
  • clickhouse local で、フォーマット変換を行うためのショートカットとして --copy モードがサポートされました #68503#68583Denis Hananein)。
  • /merges パスで利用可能な、マージ処理を可視化するための組み込みの HTML ページを追加しました。 #70821 (Alexey Milovidov)。
  • arrayUnion 関数のサポートを追加しました。 #68989 (Peter Nguyen)。
  • パラメータ付き SQL エイリアスを許可。 #50665 (Anton Kozlov).
  • 新しい集約関数 quantileExactWeightedInterpolated は、quantileExactWeighted に基づく補間付きのバージョンです。すでに quantileExactInterpolatedWeighted があるのに、なぜ新たに quantileExactWeightedInterpolated が必要なのかと疑問に思う人もいるかもしれません。理由は、新しい関数の方が古いものよりも精度が高いためです。これは Spark との互換性を確保するためのものです。 #69619 (李扬)。
  • 新しい関数 arrayElementOrNull。配列のインデックスが範囲外の場合や Map のキーが見つからない場合には NULL を返します。 #69646 (李扬)。
  • config.xml ファイル内の新しい message_regexp および message_regexp_negative フィールドを通じて正規表現を指定し、ログをフィルタリングできるようにしました。ログのフィルタリングは、開発者にとって最も直感的な体験となるよう、整形済みでカラー付けされていないテキストに対して適用されます。 #69657 (Peter Nguyen).
  • RIPEMD160 関数を追加しました。文字列の RIPEMD-160 暗号学的ハッシュを計算する関数です。例: SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))37F332F68DB77BD9D7EDD4969571AD671CF9DD3B を返します。 #70087 (Dergousov Maxim).
  • HDFS 上の Iceberg テーブルの読み込みをサポートしました。 #70268 (flynn).
  • これまで INSERT ... WITH ... のみをサポートしていましたが、WITH ... INSERT 形式の CTE もサポートするようになりました。 #70593 (Shichao Jin).
  • MongoDB 連携機能: すべての MongoDB 型のサポート、MongoDB 側での WHERE および ORDER BY 文のサポート、MongoDB がサポートしない式を使用できないようにする制限を追加しました。新しい連携機能はデフォルトでは無効になっているため、使用するにはサーバー設定で <use_legacy_mongodb_integration>false に設定してください。#63279Kirill Nikiforov)。
  • 現在のプロファイルにカスタム設定が見つからない場合でも、例外を発生させずにデフォルト値を返すための新しい関数 getSettingOrDefault が追加されました。 #69917 (Shankar)。

Experimental feature

  • リフレッシャブルmaterialized view は本番環境で利用可能になりました。 #70550 (Michael Kolupaev)。また、リフレッシャブルmaterialized view は Replicated データベースでもサポートされるようになりました。 #60669 (Michael Kolupaev)。
  • Parallel replicas は experimental から beta に移行されました。parallel replicas アルゴリズムの動作を制御する関連設定が再設計されています。概要をおさらいすると、ClickHouse には複数のレプリカを用いた並列読み取りのための 4 種類のアルゴリズムがあり、これは parallel_replicas_mode 設定で切り替えます。デフォルト値は read_tasks です。加えて、トグルスイッチ型の設定 enable_parallel_replicas が追加されました。 #63151 (Alexey Milovidov), (Nikita Mikhaylov)。
  • Dynamic 内部の型に対して関数を実行することで、ほとんどの関数で Dynamic 型をサポートしました。 #69691 (Pavel Kruglov)。
  • RowBinary フォーマットにおいて、input_format_binary_read_json_as_string/output_format_binary_write_json_as_string 設定により、JSON 型をバイナリ文字列として読み書きできるようにしました。 #70288 (Pavel Kruglov)。
  • Native フォーマットで、JSON カラムを単一の String カラムとしてシリアライズ/デシリアライズできるようにしました。出力には output_format_native_write_json_as_string 設定を使用します。入力では、カラムデータの前にシリアライズバージョン 1 を指定します。 #70312 (Pavel Kruglov)。
  • MergeTree テーブル向けに、特別な(experimental)マージセレクターモードを導入しました。これは、パーツ数の上限に近いパーティションに対して、より積極的にマージを行うものです。この動作は MergeTree レベルの設定 merge_selector_use_blurry_base によって制御されます。 #70645 (Nikita Mikhaylov)。
  • Avro の Union 型と ClickHouse の Variant 型との間で、汎用的なシリアライズ/デシリアライズを実装しました。これにより #69713 が解決されます。 #69712 (Jiří Kozlovský)。

パフォーマンスの向上

  • IDiskIObjectStorage をリファクタリングしてパフォーマンスを向上させました。plain および plain_rewritable オブジェクトストレージ上のテーブルの初期化が高速になります。#68146Alexey MilovidovJulia Kartseva)。plain_rewritable ディスク上でファイルまたはディレクトリの存在を判定する際、コスト効率が悪くなり得るため、LIST オブジェクトストレージ API を呼び出さないようにしました。#70852Julia Kartseva)。plain_rewritable ディスクでのオブジェクトストレージ HEAD API リクエストの回数を削減しました。#70915Julia Kartseva)。
  • データを直接スパースカラムにパースできる機能を追加しました。 #69828 (Anton Popov).
  • 欠損値が多いフォーマット(例: JSONEachRow)のパース処理の性能を改善しました。 #69875 (Anton Popov).
  • Parquet の row group の並列読み取りと、シングルスレッドモードにおける row group のプリフェッチをサポートしました。 #69862 (LiuNeng).
  • pointInPolygon に対して minmax 索引をサポートしました。 #62085 (JackyWoo).
  • Parquet ファイルの読み込み時に Bloom フィルターを使用するようになりました。 #62966 (Arthur Passos).
  • ロックフリーなパーツのリネームにより、INSERT が(パーツロックにより)SELECT に影響しないようにしました(通常の状況で fsync_part_directory を有効にした場合、INSERT と並列に実行される SELECT の QPS が 2 倍に向上し、高負荷時にはさらに効果が大きくなります)。なお、現時点では ReplicatedMergeTree のみが対象です。 #64955 (Azat Khuzhin).
  • materialize ttlttl_only_drop_parts を考慮し、有効期限 (TTL) を再計算してパーツを空のパーツに置き換えることで削除する際に、必要なカラムだけを読み取るようにしました。 #65488 (Andrey Zvonov).
  • ThreadPool 内でのスレッド生成処理を最適化し、ロック競合を最小限に抑えました。スレッド生成はクリティカルセクションの外で行われるようになり、高負荷時のジョブスケジューリングやスレッド管理で発生する遅延を回避します。これにより、高い同時実行負荷下でも ClickHouse の応答性が大きく向上します。 #68694 (filimonov)。
  • ORC から LowCardinality 文字列カラムを読み取れるようにしました。 #69481 (李扬)。
  • part_logquery_views_logfilesystem_cache_log などのシステムログにおける ProfileEventsLowCardinality を使用します。 #70152 (Alexey Milovidov).
  • fromUnixTimestamp/toUnixTimestamp 関数のパフォーマンスを改善しました。 #71042 (kevinyhzou)。
  • ブロッキング I/O から読み込む場合でも、サーバー全体でページキャッシュからの非ブロッキング読み取りを無効化しないようにしました。これは、単一のファイルシステム(例: tmpfs)のみが preadv2 システムコールをサポートしておらず、他のファイルシステムはサポートしている場合に、パフォーマンスの低下を招いていました。 #70299 (Antonio Andelic).
  • ALTER TABLE .. REPLACE PARTITION は、他のパーティションで発生する mutation や merge をこれ以上待機しなくなりました。 #59138 (Vasily Nemkov).
  • Keeper から ACL を同期する際には検証を行わないようにしました。作成時に検証されるためです。本来は大きな問題にはなりませんが、ユーザーが何万件、あるいはそれ以上作成されている環境では、不要なハッシュ検証によりサーバー起動時(Keeper からすべてを同期するタイミング)に長時間を要する可能性があります。 #70644 (Raúl Marín)。

改善点

  • CREATE TABLE AS は、PRIMARY KEYORDER BY などの句(MergeTree テーブルのもの)をコピーするようになりました。 #69739 (sakulali)。
  • Keeper で 64 ビット XID をサポートできるようになりました。use_xid_64 設定値で有効化できます。 #69908 (Antonio Andelic)。
  • Bool 型設定のコマンドライン引数は、引数に値が指定されていない場合に true と見なされます(例: clickhouse-client --optimize_aggregation_in_order --query "SELECT 1")。 #70459 (davidtsuk).
  • ほとんどいっぱいのディスクへの挿入を防止するため、ユーザーレベルの設定 min_free_disk_bytes_to_perform_insert および min_free_disk_perform_to_throw_insert を追加しました。 #69755 (Marco Vilas Boas)。
  • 設定に関する組み込みドキュメントは、ウェブサイト上のドキュメントよりも必ず詳細かつ完全なものになります。これは、ウェブサイトのドキュメントをソースコードから常に自動生成するようにするための第一歩です。これには長期的に次のような利点があります。- すべての設定が必ず含まれること、- デフォルト値が古くなる心配がないこと、- ClickHouse の各バージョンごとにこのドキュメントを生成できること、- インターネット接続がなくてもサーバー自身がドキュメントを表示できること、です。ウェブサイト上のドキュメントをソースコードから生成するようにしました。#70289 (Alexey Milovidov)。
  • 関数 replaceneedle に空文字列を指定できるようにし、PostgreSQL と同じ動作になりました。 #69918 (zhanglistar).
  • 関数 replaceRegexp* で needle に空文字列を指定できるようにしました。 #70053 (zhanglistar).
  • data/database_name/ ディレクトリ内のテーブルに対するシンボリックリンクは、デフォルトディスク上の store/... ディレクトリではなく、ストレージポリシーに基づきテーブルデータの実際のパスを指すように作成されるようになりました。 #61777 (Kirill).
  • JSON から Enum フィールドをパースする際、整数値を表す文字列は、対応する Enum 要素として解釈されるようになりました。これにより #65119 がクローズされました。 #66801 (scanhex12).
  • TRIMLEADING または TRAILING に空文字列を指定した場合は、変更を伴わない no-op として扱うようにしました。#67792 をクローズ。#68455Peter Nguyen)。
  • cast(timestamp as String) における Spark との互換性を改善。#69179Wenzheng Liu)。
  • enable_analyzertrue に設定されている場合、定数式の計算には常に新しい analyzer が使用されるようになりました。定数式に対して SELECT クエリを使用することなく、executable テーブル関数の引数を計算できるようになりました。 #69292 (Dmitry Novik)。
  • 識別子に特殊文字を含めることを禁止する設定 enable_secure_identifiers を追加しました。 #69411 (tuanpach).
  • SHOW CREATE TABLE クエリ結果における識別子のクオート挙動を定義するために show_create_query_identifier_quoting_rule を追加しました。設定可能な値は次のとおりです: - user_display: 識別子がキーワードである場合。 - when_necessary: 識別子が {"distinct", "all", "table"} のいずれかであり、かつ曖昧さを招く可能性がある場合(カラム名や Dictionary 属性名など)。 - always: 常に識別子をクオートします。 #69448 (tuanpach)。
  • アクセスエンティティの依存関係の復元を改善 #69563 (Vitaly Baranov)。
  • clickhouse-client やその他の CLI アプリケーションを実行した際、サーバーが過負荷で起動が遅くなり、その間に SELECT のようなクエリを入力し始めると、以前のバージョンでは、ウェルカムメッセージを出力する前に端末エコーの残りの内容が表示されてしまい、ClickHouse local version 24.10.1.1. ではなく SELECTClickHouse local version 24.10.1.1. のように表示されていました。この問題はすでに修正済みです。これにより #31696 がクローズされました。#69856Alexey Milovidov)。
  • system.replicas テーブルに新しいカラム readonly_duration を追加しました。アラートで実際の読み取り専用レプリカとセンチネルレプリカを区別できるようにするためです。 #69871 (Miсhael Stetsyuk)。
  • join_output_by_rowlist_perkey_rows_threshold SETTING の型を符号なし整数に変更しました。 #69886 (kevinyhzou).
  • OpenTelemetry のスパンログを拡張し、クエリ設定を含めるようにしました。 #70011 (sharathks118).
  • ラムダの結果型が想定外の場合に、高階配列関数の診断情報を追加しました。 #70093 (ttanay).
  • Keeper の改善: クラスター変更時のロック回数を削減。 #70275 (Antonio Andelic)。
  • SHOW GRANTS コマンドに WITH IMPLICIT および FINAL キーワードを追加しました。暗黙的な権限付与に関する軽微なバグを修正しました: #70094#70293pufit)。
  • MergeTree の設定において compatibility を考慮するようにしました。compatibility の値はサーバー起動時に default プロファイルから取得され、それに応じて MergeTree のデフォルト設定が変更されます。その後に compatibility 設定を変更しても、MergeTree の設定には影響しません。 #70322 (Nikolai Kochetov).
  • サーバー間通信中にエラーが発生した場合に、大きな HTTP レスポンスボディがログに大量出力されないようにしました。 #70487 (Vladimir Cherkasov)。
  • 一度に移動可能なパーツ数の上限を制御するための新しい設定 max_parts_to_move を追加しました。 #70520 (Vladimir Cherkasov).
  • 特定のログメッセージの出力頻度を制限しました。 #70601 (Alexey Milovidov).
  • PART 修飾子付きの CHECK TABLE がクライアントで正しくフォーマットされていませんでした。 #70660 (Alexey Milovidov)。
  • Parquet ネイティブ writer でカラム索引およびオフセット索引の書き込みをサポート。 #70669 (LiuNeng).
  • DateTime64 について、マイクロ秒とタイムゾーンを joda 構文でパースできるようになりました(「joda」は日付と時刻のための一般的な Java ライブラリであり、「joda 構文」はそのライブラリの書式スタイルを指します)。 #70737 (kevinyhzou)。
  • クラウドストレージがバッチ削除をサポートしているかどうかを判定する方法を変更しました。 #70786 (Vitaly Baranov)。
  • ネイティブリーダーにおける Parquet ページ v2 のサポート。 #70807 (Arthur Passos).
  • テーブルに storage_policydisk の両方が設定されているかをチェックする機能を追加しました。disk SETTING を使用している場合に、新しいストレージポリシーが既存のポリシーと互換性があるかをチェックする機能も追加しました。#70839 (Kirill)。
  • system.s3_queue_settingssystem.azure_queue_settings を追加しました。 #70841 (Kseniia Sumarokova).
  • 関数 base58Encodebase58Decode は、FixedString 型の引数を受け取れるようになりました。例: SELECT base58Encode(toFixedString('plaintext', 9));#70846 (Faizan Patel).
  • part log のすべてのエントリ種別に partition カラムを追加しました。以前は一部のエントリにのみ設定されていました。これにより #70819 が解決されました。#70848Alexey Milovidov)。
  • マージ処理の分析と可視化を行いやすくするために、MergeStart および MutateStart イベントを system.part_log に追加しました。 #70850 (Alexey Milovidov).
  • マージされたソースパーツ数に関するプロファイルイベントを追加しました。これにより、本番環境での MergeTree のファンアウトを監視できます。 #70908 (Alexey Milovidov).
  • バックグラウンドでのファイルシステムキャッシュへのダウンロード機能が再度有効化されました。 #70929 (Nikita Taranov).
  • プロフェッショナル用途向けのみ使用可能な新しいマージセレクタアルゴリズム Trivial を追加しました。これは Simple マージセレクタよりも性能が低いアルゴリズムです。 #70969 (Alexey Milovidov)。
  • CREATE OR REPLACE VIEW のアトミックなサポート。 #70536 (tuanpach)
  • 集約関数 windowFunnelstrict_once モードを追加し、1つのイベントが複数の条件に一致する場合に複数回カウントされないようにしました。#21835 を解決。 #69738 (Vladimir Cherkasov)。

バグ修正(公式安定版リリースにおけるユーザーに影響する誤動作)

  • グローバルコンテキストオブジェクトに構成の更新を適用します。これにより、#62308 のような問題が解決されます。 #62944 (Amos Bird)。
  • ReadSettings でデフォルト値のみが使用され、ユーザーが設定した値が反映されていなかった問題を修正しました。#65625 (Kseniia Sumarokova).
  • 符号付き引数を使用した場合に sumMapFiltered で発生していた型不一致の問題を修正。 #58408 (Chen768959).
  • オプションのタイムゾーン引数が渡された場合における toHour 類似変換関数の単調性を修正。 #60264 (Amos Bird).
  • Merge テーブルに対する supportsPrewhere のチェックを緩和しました。この変更により #61064 が修正されます。チェックは #60082 で過度に厳格化されていました。#61091 (Amos Bird)。
  • concurrent_threads_soft_limit_num 制限が正しく適用されるように、use_concurrency_control SETTING の処理を修正しました。これにより、以前は正しく動作していなかった並行実行制御がデフォルトで有効になります。 #61473 (Sergei Trifonov).
  • NOT などの他の関数内で IS NULL チェックが行われている場合に誤った結果を招く可能性があった JOIN ON 節の誤った最適化を修正しました。#67915 を修正しました。#68049Vladimir Cherkasov)。
  • テーブルの CREATE クエリを無効にしてしまうような ALTER クエリの実行を防止しました。 #68574 (János Benjamin Antal).
  • negate-)および NOT 関数におけるタプルと配列に対する AST のフォーマットの不整合を修正しました。 #68600 (Vladimir Cherkasov).
  • デシリアライズ中に不完全な型が Dynamic に挿入されてしまう不具合を修正しました。これにより Parameter out of bound エラーが発生する可能性がありました。 #69291 (Pavel Kruglov).
  • 本番環境での使用は推奨されない実験的機能であるゼロコピー レプリケーション: ゼロコピーを用いた ReplicatedMergeTree で restore replica 実行後に発生する無限ループを修正。#69293MikhailBurdukov)。
  • ストレージ S3Queue において、processing_threads_num のデフォルト値を CPU コア数と同じ値に戻しました。 #69384 (Kseniia Sumarokova).
  • ネストされた繰り返しフィールドを持つ protobuf をネストされたカラムにデシリアライズ/シリアライズする際に、try/catch フローを経由しないようにしました(#41971 を修正)。#69556Eliot Hautefeuille)。
  • PostgreSQL エンジンで FixedString 型カラムへの挿入時に発生していたクラッシュを修正。 #69584 (Pavel Kruglov)。
  • create view t as (with recursive 42 as ttt select ttt); を実行するとクラッシュしてしまう不具合を修正しました。 #69676 (Han Fei).
  • 値の型が DateTime64 の場合に 'Bad get' 例外をスローしていた maxMapState を修正しました。 #69787 (Michael Kolupaev).
  • useDefaultImplementationForLowCardinalityColumns をオーバーライドして true を返すようにすることで、LowCardinality カラムに対する getSubcolumn を修正しました。 #69831 (Miсhael Stetsyuk).
  • 分散テーブルの DROP が失敗した場合に、分散送信が永続的にブロックされる問題を修正。 #69843 (Azat Khuzhin).
  • NaN キーを含む WITH FILL 付きのクエリがキャンセルできない問題を修正しました。これにより #69261 が解決しました。 #69845 (Alexey Milovidov).
  • 古い互換性値を使用している場合のアナライザーのデフォルト値を修正。 #69895 (Raúl Marín).
  • 古いテーブルを DROP する際には、CREATE OR REPLACE VIEW 実行時に依存関係をチェックしないようにしました。以前は、再作成される VIEW に依存するテーブルが存在すると、CREATE OR REPLACE クエリが失敗していました。 #69907 (Pavel Kruglov)。
  • Decimal に関する変更。#69730 を修正。#69978Arthur Passos)。
  • DEFINER/INVOKER がパラメータ付きビューでも動作するようになりました。 #69984 (pufit).
  • VIEW の definer のパース処理を修正しました。 #69985 (pufit).
  • Date または Date32 引数を含むクエリの結果がタイムゾーンによって変わる不具合を修正しました。 #70036 (Yarik Briukhovetskyi).
  • ネストされたビューと WHERE 条件を含むクエリで発生する Block structure mismatch エラーを修正し、#66209 を解決しました。#70054Nikolai Kochetov)。
  • tuple 関数を評価する際に、異なる名前付きタプル間で同じカラムを再利用しないようにしました。これにより #70022 が修正されました。 #70103 (Amos Bird)。
  • 範囲内のリテラルを置き換える際に LOGICAL_ERROR が誤って発生していた問題を修正。 #70122 (Pablo Marcos).
  • ALTER TABLE MODIFY COLUMN/クエリの実行中に Nullable(Nothing) 型をチェックし、そのようなデータ型を持つテーブルが作成されるのを防ぐようになりました。 #70123 (Pavel Kruglov)。
  • 不正なクエリ JOIN ... ON * に対して適切なエラーメッセージを出力するようにしました。#68650 をクローズしました。 #70124 (Vladimir Cherkasov)。
  • スキップ索引により誤った結果が返される問題を修正。 #70127 (Raúl Marín).
  • ColumnObject/ColumnTuple の decompress メソッドにおけるデータレースを修正しました。この問題により、解放後のヒープ領域を使用してしまう可能性がありました。 #70137 (Pavel Kruglov)。
  • Dynamic 型を使用した ALTER COLUMN でハングする可能性があった問題を修正しました。 #70144 (Pavel Kruglov).
  • ClickHouse は、より多くの種類のエラーを再試行可能なエラーとして扱うようになり、そのようなエラーが発生してもデータパーツを破損としてマークしないようになりました。 #70145 (alesapin).
  • JSON サブカラムの Dynamic 型作成時に max_types パラメータが正しく使用されるようにしました。 #70147 (Pavel Kruglov).
  • bcrypt パスワード認証メソッドを使用しているユーザーで、system.query_log にパスワードが表示されてしまう問題を修正。#70148 (Nikolay Degterinsky).
  • ネイティブインターフェイス(InterfaceNativeSendBytes)のイベントカウンターを修正しました。 #70153 (Yakov Olkhovskiy)。
  • JSON カラムに関連して発生しうるクラッシュを修正しました。 #70172 (Pavel Kruglov)。
  • arrayMin と arrayMax に関する複数の問題を修正。 #70207 (Raúl Marín).
  • JSON 型パーサーが設定 allow_simdjson を尊重するようになりました。 #70218 (Pavel Kruglov).
  • 2つのSELECT文と INTERSECT を含む materialized view を作成する際に発生していたヌルポインタ参照を修正しました。例: CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);#70264Konstantin Bogdanov)。
  • 起動スクリプトでグローバル設定を変更しないでください。以前のバージョンでは、起動スクリプト内で設定を変更すると、その設定がグローバルに適用されていました。#70310Antonio Andelic)。
  • Dynamic 型に対して max_types パラメータを減らす ALTER を行うとサーバがクラッシュする可能性があった問題を修正しました。 #70328 (Pavel Kruglov).
  • 不正な WITH FILL の使用により発生していたクラッシュを修正しました。 #70338 (Raúl Marín).
  • SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf で発生する可能性があった use-after-free を修正しました。 #70358 (Azat Khuzhin).
  • GROUP BY で JSON サブオブジェクトのサブカラムを使用すると発生していたクラッシュを修正。 #70374 (Pavel Kruglov).
  • 行を含まないパーツについては、垂直マージ時のプリフェッチを行わないようにしました。 #70452 (Antonio Andelic).
  • WHERE 句でラムダ関数を使用した場合に発生するクラッシュを修正。 #70464 (Raúl Marín).
  • データベース Replicated 上で、セカンダリレプリカ側でテーブル関数のソースが利用できない場合に CREATE ... AS table_function(...) によるテーブル作成が正しく動作しない問題を修正しました。 #70511 (Kseniia Sumarokova)。
  • wait_for_async_insert=1 の場合、非同期挿入時のすべての出力を無視するようにしました。 #62644 をクローズ。 #70530Konstantin Bogdanov)。
  • system.remote_data_paths からシャドウディレクトリを走査する際に frozen_metadata.txt を無視するようになりました。 #70590 (Aleksei Filatov).
  • アラインされていないメモリ上で状態付きウィンドウ関数を作成する際の不具合を修正。 #70631 (Raúl Marín).
  • 非空のデフォルト式を持つ Array 型のカラムを追加した後に、SELECT クエリやマージ処理でまれに発生していたクラッシュを修正しました。 #70695 (Anton Popov).
  • テーブル関数 s3 への INSERT がクエリ設定を反映するようになりました。 #70696 (Vladimir Cherkasov).
  • サポートされていないフィールドをスキップする設定が有効になっている場合に、protobuf スキーマの推論時に発生していた無限再帰を修正しました。 #70697 (Raúl Marín).
  • デフォルトで enable_named_columns_in_function_tuple を無効化しました。 #70833 (Raúl Marín).
  • サーバーの CPU コア数から自動的に決定された場合に、S3Queue テーブルエンジンの設定 processing_threads_num が有効になっていなかった問題を修正。 #70837 (Kseniia Sumarokova).
  • 集計状態における名前付きタプル引数を正規化するようにしました。これにより、#69732 が修正されました。 #70853 (Amos Bird)。
  • 2 レベルのハッシュテーブルにおける負のゼロに起因する論理エラーを修正しました。これにより #70973 が解決されました。#70979Alexey Milovidov)。
  • 分散および並列レプリカ環境での limit by および limit with ties を修正。 #70880 (Nikita Taranov).

ClickHouse リリース 24.9(2024-09-26)プレゼンテーション動画

後方互換性のない変更

  • a[b].c のような式が、名前付きタプルに対して、また任意の式からの名前付き添字(例: expr().name)に対してサポートされるようになりました。これは JSON を処理する際に有用です。この変更により #54965 がクローズされます。以前のバージョンでは、expr().name 形式の式は tupleElement(expr(), name) としてパースされ、クエリアナライザは対応するタプル要素ではなくカラム name を検索していました。一方、新しいバージョンでは tupleElement(expr(), 'name') として解釈されるように変更されています。ほとんどの場合、以前のバージョンは正しく動作していませんでしたが、この変更が非互換性を引き起こし得る非常に特殊なシナリオは考えられます。例えば、タプル要素の名前を、そのタプル要素自身の名前とは異なる名前のカラムまたは別名に保存している場合です: SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a。そのようなクエリを実際に使用している可能性は極めて低いと考えられますが、この変更は潜在的に後方互換性のない変更としてマークする必要があります。 #68435 (Alexey Milovidov)。
  • 設定 print_pretty_type_names が有効な場合、SHOW CREATE TABLE 文、formatQuery 関数、および clickhouse-clientclickhouse-local の対話モードにおいて、Tuple データ型が Pretty 形式で出力されるようになりました。以前のバージョンでは、この設定は DESCRIBE クエリと toTypeName にのみ適用されていました。この変更により #65753 がクローズされます。 #68492 (Alexey Milovidov)。
  • Replicated データベースでテーブルを作成する際に、UUID を明示的に指定することはできなくなりました。また、Replicated データベース内の *MergeTree テーブルについて、Keeper パスおよびレプリカ名を明示的に指定することも禁止されました。これにより、新しい設定 database_replicated_allow_explicit_uuid が導入され、database_replicated_allow_replicated_engine_arguments の型が Bool から UInt64 に変更されます。 #66104 (Alexander Tokmakov)。

新機能

  • 1人のユーザーに対して、1つだけでなく複数の認証方法を利用できるようにしました。認証方法は、最後に追加された方法にリセットできるようになりました。しばらくの間、一部のインスタンスを 24.8 で、別のインスタンスを 24.9 で稼働させたい場合は、その期間中の潜在的な非互換性を避けるために、max_authentication_methods_per_user = 1 に設定しておくことを推奨します。#65277Arthur Passos)。
  • ATTACH PARTITION ALL FROM のサポートを追加しました。 #61987 (Kirill Nikiforov).
  • input_format_json_empty_as_default SETTING を追加しました。有効にすると、JSON 入力内の空のフィールドをデフォルト値として扱います。#59339 をクローズしました。 #66782Alexis Arnaud)。
  • 文字列の一部を別の文字列で置換する関数 overlay および overlayUTF8 を追加しました。例: SELECT overlay('Hello New York', 'Jersey', 11)Hello New Jersey を返します。 #66933 (李扬)。
  • パーティションにおける論理削除のサポートを追加しました DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr; #67805 (sunny).
  • Interval データ型について、異なる単位(秒や分など)の値同士を比較できるようにし、その際には最小スーパータイプに変換してから比較するようになりました。 #68057 (Yarik Briukhovetskyi).
  • CREATE 文で IF NOT EXISTS の動作をデフォルトにする create_if_not_exists 設定を追加しました。 #68164 (Peter Nguyen)。
  • Azure およびローカル環境から Iceberg テーブルを読み取れるようにしました。 #68210 (Daniil Ivanik).
  • クエリキャッシュのエントリをタグで削除できるようになりました。たとえば、SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc' で作成されたエントリは、SYSTEM DROP QUERY CACHE TAG 'abc' によって削除できます。 #68477 (Michał Tabaszewski).
  • 名前付きコレクション用のストレージ暗号化を追加。 #68615 (Pablo Marcos)。
  • URL テーブルエンジンに仮想カラム _headers を追加しました。#65026 をクローズしました。#68867flynn)。
  • 利用可能なプロジェクションを管理するための system.projections テーブルを追加。 #68901 (Jordi Villar).
  • Spark 互換性のため、新しい関数 arrayZipUnaligned を追加しました(Spark では arrays_zip という名前)。これは元の arrayZip を拡張したもので、未整列の配列を扱うことができます。 #69030 (李扬)。
  • Keeper クライアントのコマンドラインアプリケーションに cp/mv コマンドを追加し、ノードのアトミックなコピー/移動を行えるようにしました。 #69034 (Mikhail Artemenko).
  • 関数 arrayAUC に、正規化処理をスキップできる引数 scale(デフォルト: true)を追加しました(issue #69609)。 #69717gabrielmcg44)。

実験的機能

  • テキストフォーマットでスキーマ推論を行う際、カラム/配列要素に対して複数の型が候補となる場合に Variant 型を推論できるようにする input_format_try_infer_variants SETTING を追加しました。 #63798 (Shaun Struwig).
  • JSON カラムの型の内容をより良く解析するための集約関数 distinctDynamicTypes / distinctJSONPaths / distinctJSONPathsAndTypes を追加しました。 #68463 (Kruglov Pavel).
  • コンシステントハッシュにより並列レプリカ間でマークの分配単位を決定する新しいアルゴリズムを導入しました。異なる読み取りパターンに対して異なる数のマークを選択することで、パフォーマンスを向上させます。 #68424 (Nikita Taranov).
  • これまで並列レプリカのアナウンス処理におけるパート重複排除ロジックのアルゴリズムの計算量は O(n^2) であり、多数のパート(またはパーティション)を持つテーブルでは無視できない時間がかかることがありました。この変更により計算量は O(n*log(n)) になります。 #69596 (Alexander Gololobov).
  • リフレッシャブルmaterialized view の改善: 既存テーブル全体を上書きするのではなく行を追加するアペンドモード(... REFRESH EVERY 1 MINUTE APPEND ...)、再試行(デフォルトでは無効で、クエリの SETTINGS セクションで設定)、現在実行中のリフレッシュが完了するまで待機する SYSTEM WAIT VIEW <name> クエリ、およびいくつかの不具合修正を追加しました。 #58934 (Michael Kolupaev).
  • 新しい(実験的な)統計情報の種別として min_max を追加しました。これは数値カラムに対する範囲述語、例えば x < 100 の推定をサポートします。 #67013 (JackyWoo).
  • Variant/Dynamic カラムに対する castOrDefault を改善し、内部型同士が全く変換不可能な場合でも動作するようにしました。 #67150 (Kruglov Pavel).
  • MaterializedPostgreSQL を通じてカラムのサブセットのレプリケーションが利用可能になりました。 #33748 を解決しました。 #69092 (Kruglov Kirill).

パフォーマンスの改善

  • Hive パーティショニングに対して、必要なファイルのみを読み込むように実装しました。#68963 (Yarik Briukhovetskyi).
  • LEFT または INNER ハッシュ JOIN においてテーブルキーが高密度な場合に、右テーブルをキーで並べ替えることで JOIN のパフォーマンスを改善しました。#60341 (kevinyhzou).
  • 行のリストを遅延的に追加することで、ALL JOIN のパフォーマンスを改善しました。#63677 (kevinyhzou).
  • 再起動を高速化するために、ブート処理中にファイルシステムキャッシュのメタデータを非同期にロードするようにしました(load_metadata_asynchronously 設定で制御)。#65736 (Daniel Pozo Escalona).
  • 関数 array および map を最適化し、いくつかの一般的なケースを大幅に高速に処理できるようにしました。#67707 (李扬).
  • 特にカラムに NULL が含まれていない場合に、ORC 文字列の読み取りに対して軽微な最適化を行うことで高速化しました。#67794 (李扬).
  • マージ処理のステップのスケジューリングにかかるオーバーヘッドを削減することで、マージ全体のパフォーマンスを改善しました。#68016 (Anton Popov).
  • プロファイルが設定されておらず、クレデンシャルも設定されておらず、かつ IMDS が利用できない場合(たとえばクラウド環境外のマシンからパブリックバケットに対してクエリを実行している場合)に、S3 へのリクエストを高速化しました。これにより #52771 がクローズされます。#68082 (Alexey Milovidov).
  • 一部のパフォーマンス改善のために、RowInputFormatWithNamesAndTypes においてフォーマットリーダーの仮想関数呼び出しを排除しました。#68437 (李扬).
  • CPU 使用率を最大化するため、group by キーで集約する際に uniq 集約関数に対して並列マージを追加しました。#68441 (Jiebin Sun).
  • ユーザーが ORC 出力フォーマットで文字列カラムに対して辞書エンコーディングを有効化できるように、output_format_orc_dictionary_key_size_threshold 設定を追加しました。これにより出力される ORC ファイルサイズが削減され、読み取りパフォーマンスが大幅に向上します。#68591 (李扬).
  • ノードとそのすべての部分木を削除する新しい Keeper リクエスト RemoveRecursive を導入しました。#69332 (Mikhail Artemenko).
  • ベクトル類似性索引を持つテーブルへの挿入時に、ベクトル索引へのデータ追加を並列化することで、挿入パフォーマンスを高速化しました。#69493 (flynn).
  • 適応的な書き込みバッファサイズを使用することで、JSON への INSERT のメモリ使用量を削減しました。wide パートの JSON カラムによって作成される多数のファイルは少量のデータしか含まないことが多く、それらに対して 1MB のバッファを割り当てるのは意味がありません。#69272 (Kruglov Pavel).
  • クエリが不要に大量のスレッドを生成しないようにするため、並行ハッシュ JOIN のスレッドプールにスレッドを返さないようにしました。#69406 (Duc Canh Le).

改善点

  • CREATE TABLE AS は、PRIMARY KEY や ORDER BY などの句をコピーするようになりました。現在は MergeTree ファミリーのテーブルエンジンに対してのみ対応しています。 #69076 (sakulali).
  • 小さなエンティティのパース処理に関連するコードベースの一部を強化しました。次の(軽微な)バグが見つかり、修正されました: - DeltaLake テーブルが Bool 型でパーティション分割されている場合、パーティション値が常に false として解釈されてしまう不具合; - ExternalDistributed テーブルが、指定されたアドレスのうち単一の分片しか使用していなかった不具合; max_threads 設定などの値が auto(N) ではなく 'auto(N)' として出力されていた不具合。#52503Alexey Milovidov)。
  • CPU 使用量の算出には、システム全体のメトリクスではなく cgroup 固有のメトリクスを使用するよう変更。 #62003 (Nikita Taranov).
  • リモートの S3 ディスクに対する I/O スケジューリングは、bandwidth_limit による帯域制限の問題を解決するため、(S3 リクエスト全体ではなく)HTTP ソケットストリームのレベルで行われるようになりました。 #65182 (Sergei Trifonov).
  • 関数 upperUTF8lowerUTF8 は以前、キリル文字のみを大文字化・小文字化できました。この制限は解消され、任意の言語の文字を大文字化・小文字化できるようになりました。例: SELECT upperUTF8('Süden') は、現在は SÜDEN を返します。 #65761 (李扬).
  • プロジェクションを持つテーブルで論理削除が発生する場合、これまでは(デフォルトでは)例外をスローするか、論理削除の際にプロジェクションを削除するかのいずれかをユーザーが選択する必要がありましたが、新たに第三の選択肢として、論理削除を実行した後にプロジェクションを再構築できるようになりました。 #66169 (jsc0218).
  • IP ファミリに基づいて接続をブロックできるようにするため、2 つのオプション(dns_allow_resolve_names_to_ipv4dns_allow_resolve_names_to_ipv6)が追加されました。#66895 (MikhailBurdukov)。
  • clickhouse-client で Ctrl-Z を無視する動作(ignore_shell_suspend)を設定可能にしました。 #67134 (Azat Khuzhin).
  • JSON 出力フォーマットにおける UTF-8 検証を改善しました。結果データに特定のバイト列が含まれている場合でも、有効な JSON が生成されることを保証します。 #67938 (mwoenker).
  • マージおよびミューテーションの解析性を高めるために、profile events を追加しました。 #68015 (Anton Popov).
  • ODBC: サーバー設定から http_max_tries を取得するように変更しました。 #68128 (Rodolphe Dugé de Bernonville).
  • X.509 の SubjectAltName 拡張におけるユーザー識別でワイルドカードをサポート。 #68236 (Marco Vilas Boas).
  • 日時スキーマの推論を改善しました。DateTime64 は日時に小数部分がある場合にのみ使用され、それ以外の場合は通常の DateTime が使用されるようになりました。Date/DateTime の推論はこれまでより厳密になり、特に date_time_input_format='best_effort' の場合に、コーナーケースで文字列から誤って日時を推論してしまうことを防ぎます。 #68382 (Kruglov Pavel).
  • 辞書における named collection 関連の旧コードを削除し、DDL で作成された named collection を辞書で利用できる新しいコードに置き換えました。#60936 をクローズし、#36890 をクローズしました。#68412Kseniia Sumarokova)。
  • 外部 HTTP 認証器には、デフォルト設定だった HTTP/1.0 の代わりに HTTP/1.1 を使用するようにしました。 #68456 (Aleksei Filatov).
  • スレッドプールの内部観察のための新しいメトリクス群を追加し、スレッドプールのパフォーマンスと動作に関するより深い知見を得られるようにしました。 #68674 (filimonov).
  • Values フォーマットを使用した非同期インサート時にクエリパラメータをサポートしました。 #68741 (Anton Popov).
  • dateTrunctoStartOfIntervalDate32 をサポートするようになりました。 #68874 (LiuNeng).
  • system.processors_profile_logplan_step_name および plan_step_description カラムを追加。 #68954 (Alexander Gololobov)。
  • 組み込み辞書でスペイン語をサポート。 #69035 (Vasily Okunev).
  • 短い障害情報メッセージに CPU アーキテクチャを追加しました。 #69037 (Konstantin Bogdanov).
  • リトライ中に新しい Keeper 接続を確立できない場合、クエリがより早期に失敗するようになりました。 #69148 (Raúl Marín).
  • DatabaseFactory を更新し、ユーザー定義のデータベースエンジンでも引数、設定、およびテーブルのオーバーライドを指定できるようにしました(StorageFactory と同様)。#69201 (NikBarykin).
  • すべての外部テーブルエンジンおよびテーブル関数を Null エンジンに置き換えるリストアモード(restore_replace_external_engines_to_nullrestore_replace_external_table_functions_to_null の各設定)は、テーブルに SETTINGS がある場合に失敗していました。現在は、この場合にテーブル定義から SETTINGS を削除するようになり、そのようなテーブルもリストアできるようになりました。 #69253 (Ilya Yatsishin).
  • CLICKHOUSE_PASSWORD が、ClickHouse イメージの entrypoint スクリプトで XML 用に正しくエスケープされるようになりました。 #69301 (aohoyd).
  • arrayZip/arrayZipUnaligned に空の引数を許可しました。これは https://github.com/ClickHouse/ClickHouse/pull/65887 における concat と同様の挙動です。Gluten CH Backend における Spark 互換性を確保するための変更です。#69576 (李扬)。
  • Keeper の内部通信に対して、より高度な SSL オプション(例: パスフレーズ付き秘密鍵)をサポート。 #69582 (Antonio Andelic).
  • 多数のパーツやパーティションを持つ大きなテーブルでは、インデックス解析に無視できない時間がかかることがあります。この変更により、その段階で重いクエリを中断できるようになります。 #69606 (Alexander Gololobov).
  • gcs テーブル関数で機密情報をマスク。 #69611 (Vitaly Baranov).
  • 行数を減らすマージ時に projection を再構築するようにしました。 #62364 (cangyin).

バグ修正(公式安定版リリースにおけるユーザー影響のある不具合)

  • 実験的かつサポート対象外の MaterializedPostgreSQL エンジンにおいて、PostgreSQL の dbname に "-" が含まれている場合のテーブルのアタッチ処理を修正。 #62730 (takakawa)。
  • 実験的であり完全に非サポートの MaterializedPostgreSQL エンジンにおいて、adnum の順序付けが壊れている場合の生成カラムに関するエラーを修正しました #63161。同じく実験的で完全に非サポートの MaterializedPostgreSQL エンジンにおいて、テーブル内に生成カラムが存在する場合に、デフォルト値として nextval 式を使用する id カラムで発生していたエラーを修正しました。さらに、[a-z1-9-] 以外の文字を含むパブリケーションを削除する際のエラーを修正しました #67664 (Kruglov Kirill)。
  • 左側テーブルの Nullable カラムをサポートするように Storage Join を修正。#61247 をクローズ。#66926 (vdimir)。
  • IN 演算子に Decimal() への変換が含まれている場合に、parallel replicas(およびクエリの分散実行)で誤ったクエリ結果が返される問題を修正しました。このバグは新しいアナライザーによって導入されました。 #67234 (Igor Nikonov).
  • ALTER MODIFY ORDER BY によりメタデータの不整合が発生する不具合を修正しました。 #67436 (iceFireser)
  • 関数 fromModifiedJulianDay の上限値を修正しました。本来は 9999-12-31 とすべきところを、誤って 9999-01-01 に設定していました。 #67583 (PHO)。
  • IN クエリで、タプル内で索引が先頭にない場合に発生する不具合を修正しました。 #67626 (Yarik Briukhovetskyi).
  • RoleCache の有効期限処理を修正。 #67748 (Vitaly Baranov).
  • VIEW へのフラッシュが遅いために、WindowView でブロックが欠落する問題を修正。 #67983 (Raúl Marín)。
  • 不正な日付形式が原因で発生していた MSan の問題を修正しました。 #68105 (JackyWoo)
  • ファイル内のデータ型が要求された型と大きく異なる場合(例: ... FROM file('a.parquet', Parquet, 'x String') だが、ファイル側は x Int64 の場合)に、Parquet フィルタリングがクラッシュする問題を修正しました。この修正が適用されていない場合は、回避策として input_format_parquet_filter_push_down = 0 を使用してください。 #68131 (Michael Kolupaev).
  • #67091 で発生していた lag/lead のクラッシュを修正。 #68262 (lgbo)。
  • クエリがキャンセルされた際に発生する Postgres のクラッシュを修正しました。 #68288 (Kseniia Sumarokova).
  • https://github.com/ClickHouse/ClickHouse/pull/61984 の後も、schema_inference_make_columns_nullable=0 によって Parquet/Arrow フォーマットでカラムが Nullable になる場合がありました。この変更は後方互換性がなく、ユーザーは動作の変化に気付きました。この PR により、schema_inference_make_columns_nullable=0 は以前と同様に動作するようになり(Nullable カラムは推論されません)、さらにこの設定に新しい値 auto を導入します。auto は、データに null 許容に関する情報がある場合にのみカラムを Nullable にします。#68298 (Kruglov Pavel)。
  • #50868 を修正しました。分散クエリ内のネストされたサブクエリから返される小さな DateTime64 定数値が誤って Null に変換されてしまう問題があり、その結果としてエラーが発生したり、クエリ結果が不正確になる可能性がありました。#68323 (Shankar)。
  • クエリ SYSTEM SYNC REPLICA で欠落していた同期レプリカモードを修正。 #68326 (Duc Canh Le).
  • キー条件におけるバグを修正。 #68354 (Han Fei).
  • LDAP 外部ユーザーディレクトリで使用されているロールを削除または名前を変更するとクラッシュする問題を修正。 #68355 (Andrey Zvonov).
  • system.view_refreshes の Progress カラムで値が 1 を超えてしまう不具合を修正しました #68377#68378 (megao)。
  • regexp フラグを正しく処理するようにしました。 #68389 (Han Fei)。
  • PostgreSQL形式のキャスト演算子(::)が、SQL形式の16進およびバイナリ文字列リテラルに対しても正しく動作するようになりました(例:SELECT x'414243'::String)。これにより #68324 が解決されました。 #68482 (Alexey Milovidov)。
  • https://github.com/ClickHouse/ClickHouse/pull/68131 に対する軽微なパッチ。#68494Chang chen)。
  • #68239 整数 n を指定した場合の SAMPLE n を修正。#68499Denis Hananein)。
  • 2 つの分布のサイズが等しくない場合の mann-whitney-utest のバグを修正。 #68556 (Han Fei).
  • 予期しない再起動後に、破損したパーツに覆われているパーツの処理が異常となり、ReplicatedMergeTree のレプリケーションを開始できなくなる問題を修正しました。 #68584 (baolin).
  • 空の配列またはタプルに対して関数 sipHash64KeyedsipHash128KeyedsipHash128ReferenceKeyed を適用した際に発生していた LOGICAL_ERROR を修正しました。 #68630 (Robert Schulze).
  • Full text index が複数のカラムに対して作成された場合に誤ったカラムをフィルタリングしてしまうことがありました。原因は、異なるカラム間で row_id をリセットしていなかったためで、再現手順は tests/queries/0_stateless/03228_full_text_with_multi_col.sql にあります。 #68644 (siyuan).
  • Replicated テーブルを作成する際に、replica_name に無効な文字 '\t' および '\n' が含まれていると、LogEntry 内の 'source replica' が正しく解釈されない問題を修正しました。GitHub issue #68640 で報告されています。#68645Zhigao Hong)。
  • 分散テーブルに仮想カラム _table_database を再度追加しました。これらはバージョン 24.3 まで利用可能でした。 #68672 (Anton Popov).
  • Variant カラムの並べ替え処理中に発生する可能性のある Size of permutation (0) is less than required (...) エラーを修正。 #68681 (Kruglov Pavel).
  • 新しい JSON カラムに関連して発生する可能性のある DB::Exception: Block structure mismatch in joined block stream: different columns: エラーが発生する問題を修正。#68686 (Kruglov Pavel)。
  • sipHash(64/128)Keyed 関数で、配列をキーとする Map をハッシュ化する際のマテリアライズされた定数キーに関する問題を修正しました。#68731Salvatore Mesoraca)。
  • ColumnsDescription::toString が各カラムを同一の IAST::FormatState オブジェクトを使ってフォーマットするようにしました。これにより、ディスクおよび ZooKeeper に書き込まれるカラムのメタデータが一貫した形式になります。 #68733 (Miсhael Stetsyuk)。
  • GROUPING SETS における集約結果のマージ処理を修正。 #68744 (Nikolai Kochetov).
  • ReplicatedMergeTree テーブルを作成し、カラムに対して ALTER を行った後に MODIFY STATISTICS を実行すると発生していた論理エラーを修正しました。 #68820 (Han Fei).
  • analyzer におけるサブクエリ由来の動的サブカラムの解決処理を修正。 #68824 (Kruglov Pavel).
  • DeltaLake における複合型メタデータの解析処理を修正。#68739 をクローズ。#68836Kseniia Sumarokova)。
  • ALTER ADD/MODIFY COLUMN クエリによって、挿入は完了しているがテーブルへのフラッシュ前のタイミングでテーブルのメタデータが変更された場合に発生する非同期挿入の問題を修正しました。 #68837 (Anton Popov).
  • array に空のタプルを渡したときに予期しない例外が発生していた問題を修正しました。これにより #68618 が解決されます。 #68848 (Amos Bird)。
  • 純粋なメタデータのみを対象とする MUTATIONS コマンドのパースを修正。 #68935 (János Benjamin Antal).
  • anyHeavy ステートのマージ中に誤った結果が生じる可能性があった問題を修正。 #68950 (Raúl Marín).
  • optimize_functions_to_subcolumns 設定を有効にしている場合の materialized view への書き込みを修正しました。 #68951 (Anton Popov).
  • const Dynamic カラムのメソッドで serializations cache を使用しないようにしました。これを使用すると、集計中に未初期化の値が使われたり、レースコンディションが発生したりする可能性がありました。 #68953 (Kruglov Pavel).
  • JSON 型のパース時に、一部のケースでデフォルトとして null を挿入すべき場面で発生していたパースエラーを修正。 #68955 (Kruglov Pavel)。
  • 一部の圧縮レスポンスで Content-Encoding ヘッダーが送信されない不具合を修正。 #64802#68975 (Konstantin Bogdanov)。
  • パスが誤って連結されて // が含まれてしまうケースがあったため、パスの正規化によりこの問題を解消しました。 #69066 (Yarik Briukhovetskyi).
  • 非同期挿入が空の場合に発生する論理エラーを修正。 #69080 (Han Fei).
  • clickhouse-client において、クエリのキャンセル中に発生する進捗表示のデータレースを修正しました。 #69081 (Sergei Trifonov).
  • コサイン距離を距離関数として使用した場合に、ベクトル類似度索引(現在は実験的機能)が利用されていなかった不具合を修正しました。 #69090 (flynn)。
  • この変更は、初回の作成処理中にサーバー障害が発生した後に、再度 Replicated データベースを作成しようとするとエラーになる可能性があった問題に対処します。 #69102 (Miсhael Stetsyuk).
  • input_format_csv_try_infer_numbers_from_strings = 1 の場合でも、CSV で String から Bool 型を推論しないようにしました。これは、文字列から bool 値を読み取ることを許可していないためです。#69109 (Kruglov Pavel).
  • --multiquery が有効な場合に、クライアント側で発生していた EXPLAIN AST INSERT クエリのパースエラーを修正しました。 #69123 (wxybear).
  • サブクエリ内の UNION 句が、並列レプリカを使用するクエリで正しく処理されず、LOGICAL_ERROR Duplicate announcement received for replica が発生する原因となっていました。 #69146 (Igor Nikonov).
  • s3Cluster における structure 引数の伝播処理を修正しました。以前は、s3Cluster 内のレプリカにクエリを送信する際に、カラムの DEFAULT 式が失われてしまう場合がありました。 #69147 (Kruglov Pavel).
  • 式を宛先の型に変換する際に、Values フォーマットの設定を反映するようにしました。 #69149 (Kruglov Pavel).
  • clickhouse-client --queries-file が読み取り専用ユーザーで動作しない問題を修正しました(以前は readonly モードで log_comment SETTING を変更できず失敗していました)。 #69175 (Azat Khuzhin).
  • 先に終了したプロセスにパイプされた場合の clickhouse-client におけるデータレースを修正しました。 #69186 (vdimir)。
  • JSON/Dynamic 型に対する uniq および GROUP BY が誤った結果を返す問題を修正しました。 #69203 (Kruglov Pavel).
  • 非同期挿入時の INFILE のフォーマット検出を修正しました。FORMAT 句でフォーマットが明示的に定義されていない場合、INFILE のファイル拡張子から自動的に検出されるようになりました。 #69237 (Julia Kartseva)。
  • この issue 以降、本番環境では、metadata_version ノードの値が 0 のままであり、かつ対応するテーブルの metadata ノードのバージョンとは一致していないテーブルレプリカが多数存在する状態になっていました。このため、そのようなレプリカでは alter クエリが失敗していました。 #69274 (Miсhael Stetsyuk)。
  • Fields 周りの問題を回避するため、Dynamic 型を主キーとしては安全でない型としてマークしました。 #69311 (Kruglov Pavel).
  • アクセスエンティティ間の依存関係の復元処理を改善。 #69346 (Vitaly Baranov).
  • 挿入用の接続の取得がすべて失敗した場合に発生していた未定義動作を修正しました。 #69390 (Pablo Marcos).
  • #69135 をクローズしました。cross join で結合済みデータを再利用しようとしていますが、現時点の ClickHouse ではそのようなケースは発生しません。reuseJoinedData 内で have_compressed を保持しておく方がよいです。#69404lgbo)。
  • materialize() 関数が、スパースなカラムを引数に取った場合に完全なカラムを返すようにしました。 #69429 (Alexander Gololobov).
  • 関数 sqidDecode で発生していた LOGICAL_ERROR を修正(#69450)。#69451Robert Schulze)。
  • 24.6 における s3queue の問題、または DATABASE REPLICATED を使用した CREATE クエリに対する簡易的な修正。 #69454 (Kseniia Sumarokova).
  • INSERT INTO ... SELECT または CREATE TABLE AS SELECT クエリでの squashing 処理によりメモリ消費が過大になっていた問題を修正しました。 #69469 (Yarik Briukhovetskyi).
  • テーブル名にドットを含む場合でも、SHOW COLUMNS および SHOW INDEX 文が正しく動作するようになりました。 #69514 (Salvatore Mesoraca)。
  • overflow モードが throw 以外に設定されたクエリに対するクエリキャッシュの使用は、禁止されました。これにより、途中で切り詰められた不正確なクエリ結果がクエリキャッシュに保存されてしまう可能性のある状況を防止します (issue #67476). #69549 (Robert Schulze).
  • prewhere への移動時にも条件の元の順序を保持するように修正しました。以前は順序が変わることがあり、順序が重要な場合にクエリが失敗する可能性がありました。 #69560 (Kruglov Pavel).
  • ZNOAUTH エラー発生後の Keeper におけるマルチリクエストの前処理を修正。 #69627 (Antonio Andelic).
  • DatabaseReplicated で新しいレプリカを作成する際に、WHERE 句を含む有効期限 (TTL) が原因で発生する可能性があった METADATA_MISMATCH を修正しました。 #69736 (Nikolay Degterinsky).
  • StorageS3(Azure)Queue の設定項目 tracked_file_ttl_sec を修正しました。tracked_file_ttl_sec というキー名で keeper に書き込んでいましたが、tracked_files_ttl_sec として読み出しており、これはタイプミスでした。 #69742 (Kseniia Sumarokova)。
  • gethyperrectangleforrowgroup で tryconvertfieldtotype を使用するよう変更。 #69745 (Miсhael Stetsyuk).
  • "Fix prewhere without columns and without adaptive index granularity (almost w/o anything)"' の変更をリバートしました。これらの変更をリバートしたことにより、古い ClickHouse リリース(おそらく 2021 年以前)で生成されたデータパーツを読み取る際に、エラーが発生する可能性があります。 #68897 (Alexander Gololobov).

ClickHouse リリース 24.8 LTS、2024-08-20。プレゼンテーション動画

後方互換性のない変更

  • clickhouse-clientclickhouse-local のデフォルトが、単一クエリモードではなくマルチクエリモードになりました。例えば、以前は clickhouse-client -q "SELECT 1; SELECT 2" を実行するには --multiquery(または -n)を付ける必要がありましたが、現在はそのまま動作します。--multiquery/-n スイッチは不要になりました。マルチクエリ文内の INSERT クエリは、その FORMAT 句に基づいて特別に扱われます。FORMAT が VALUES(最も一般的なケース)の場合、INSERT 文の終端はクエリ末尾のセミコロン ; で表されます。それ以外の FORMAT(例: CSVJSONEachRow)の場合、INSERT 文の終端はクエリ末尾の 2 つの改行 \n\n で表されます。#63898FFish)。
  • 以前のバージョンでは、LowCardinality データ型に対して、データ型名に WithDictionary を付与することで代替構文を使用することができました。これは初期の暫定的な実装であり、ドキュメント化も一般公開もされていませんでした。現在、この構文は非推奨になりました。この構文を使用している場合は、テーブルに対して ALTER を実行し、データ型名を LowCardinality に変更する必要があります。#66842Alexey Milovidov)。
  • 分散先テーブルと組み合わせて使用されるストレージ Buffer における論理エラーを修正しました。これは後方互換性のない変更です。分散先テーブルと共に Buffer を使用するクエリは、そのテーブルがクエリ中に複数回登場する場合(例: 自己結合)、動作しなくなる可能性があります。#67015vdimir)。
  • 以前のバージョンでは、ガンマ関数に基づく乱数分布(カイ二乗、スチューデント、フィッシャーなど)の関数をゼロに近い負の引数で呼び出した場合、計算に非常に長い時間がかかる、または無限ループに陥ることがありました。新しいバージョンでは、これらの関数をゼロまたは負の引数で呼び出すと、例外がスローされます。これにより #67297 が解決されました。#67326Alexey Milovidov)。
  • システムテーブル text_log がデフォルトで有効になりました。これは以前のバージョンとの互換性を完全に維持していますが、ローカルディスク上のディスク使用量がわずかに増加していることに気付くかもしれません(このシステムテーブルはごく少量のディスク容量しか使用しません)。#67428Alexey Milovidov)。
  • 以前のバージョンでは、非常に大きな配列の生成を要求した場合、arrayWithConstant が遅くなることがありました。新しいバージョンでは、1 つの配列あたり 1 GB に制限されます。これにより #32754 が解決されました。#67741Alexey Milovidov)。
  • REPLACE 修飾子のフォーマットを修正しました(かっこを省略できないようにしました)。#67774Azat Khuzhin)。
  • #68349 でバックポート済み: Dynamic 型を再実装しました。動的データ型の上限に達した場合、新しい型は String にキャストされるのではなく、バイナリ形式でデータ型がバイナリエンコードされた特別なデータ構造に保存されます。これにより、かつて Dynamic カラムに挿入されたあらゆる型を、サブカラムとして読み出すことが可能になりました。#68132Kruglov Pavel)。

新機能

  • 特定のエンジンでのマージ処理および OPTIMIZE DEDUPLICATE クエリ時のプロジェクションを制御するために、新しい MergeTree 設定 deduplicate_merge_projection_mode を追加しました。サポートされるオプションは、throw(*MergeTree エンジンでプロジェクションが完全にはサポートされていない場合に例外をスロー)、drop(一貫してマージできない場合にマージ中のプロジェクションを削除)、rebuild(プロジェクションをゼロから再構築する。これはコストの高い処理です)です。 #66672 (jsc0218).
  • S3 テーブルエンジンに _etag 仮想カラムを追加し、#65312 を修正。 #65386skyoct)。
  • クエリキャッシュにタグ付け用(ネームスペース)のメカニズムを追加しました。同じクエリでも異なるタグが付いている場合、クエリキャッシュでは別物として扱われます。例: SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def' は、異なるクエリキャッシュエントリとして保存されます。 #68235 (sakulali)。
  • LEFT/RIGHT SEMI/ANTI/ANY JOIN など、より多くの JOIN strictness の種類で、左テーブルと右テーブルの両方のカラムを参照する不等号条件(例: t1.y < t2.y)をサポートしました(allow_experimental_join_condition 設定を参照)。#64281 (lgbo).
  • Hive スタイルのパーティショニングを、FileURLS3AzureBlobStorageHDFS といった異なるエンジンで解釈できるようにしました。Hive スタイルのパーティショニングでは、データをパーティションごとのサブディレクトリに整理することで、大規模データセットに対するクエリおよび管理を効率化します。現時点では、対応する名前とデータを持つ仮想カラムを作成するのみです。後続の PR で、適切なデータフィルタリング(パフォーマンス向上)が導入される予定です。#65997Yarik Briukhovetskyi)。
  • Spark 互換性のために関数 printf を追加(既存の関数 format も引き続き使用可能)。 #66257 (李扬)。
  • テストに役立つよう、外部エンジンおよび外部テーブル関数を Null エンジンに置き換えるためのオプション restore_replace_external_engines_to_nullrestore_replace_external_table_functions_to_null を追加しました。これは RESTORE および明示的なテーブル作成時に有効です。 #66536 (Ilya Yatsishin).
  • 関数 readWKTLineString を使用して、WKT 形式の MULTILINESTRING ジオメトリを読み込めるようになりました。 #67647 (Jacob Reckhard)。
  • 新しいテーブル関数 fuzzQuery を追加しました。この関数は、指定したクエリ文字列にランダムなバリエーションを加えることができます。例: SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;#67655 (pufit)。
  • すべての切り離されたパーティションを削除するクエリ ALTER TABLE ... DROP DETACHED PARTITION ALL を追加しました。 #67885 (Duc Canh Le).
  • 新しい設定 rows_before_aggregation を有効にすると、クエリ応答に統計情報 rows_before_aggregation_at_least が追加されます。この統計情報は、集約前に読み取られた行数を表します。分散クエリのコンテキストでは、limit なしで group bymax の集約関数を使用している場合、rows_before_aggregation_at_least はクエリによって対象となった行数を反映できます。 #66084 (morning-color).
  • Join テーブルに対する OPTIMIZE クエリをサポートし、メモリ使用量を削減できるようにしました。 #67883 (Duc Canh Le).
  • URL に &run=1 を追加すると、Play でクエリを即時実行できるようになりました #66457 (Aleksandr Musorin)。

実験的機能

  • 新しい JSON データ型を実装しました。 #66444 (Kruglov Pavel).
  • 新しい TimeSeries テーブルエンジンを追加しました。 #64183 (Vitaly Baranov).
  • オフセットを Kafka にコミットするのではなく Keeper に保存する、新しい実験的な Kafka ストレージエンジンを追加しました。これにより、キューからの消費に対する ClickHouse テーブルへのコミットがアトミックになります。 #57625 (János Benjamin Antal).
  • 並列レプリカに対して、(読み取りカラムサイズに依存するという意味で)アダプティブな読み取りタスクサイズ計算方式を使用するようにしました。 #60377 (Nikita Taranov).
  • 統計タイプ count_min(count-min sketch)を追加しました。これは col = 'val' のような等価述語に対する選択性推定を提供します。サポートされるデータ型は string、date、datetime、および数値型です。 #65521 (JackyWoo).

パフォーマンスの改善

  • 設定 optimize_functions_to_subcolumns をデフォルトで有効化しました。 #68053 (Anton Popov).
  • オブジェクトストレージ内の MergeTree データとは別に、plain_rewritable ディスクディレクトリのメタデータを __meta レイアウトに保存するようにしました。また、plain_rewritable ディスクをフラットなディレクトリ構造に移行しました。 #65751 (Julia Kartseva).
  • すべてのサブカラム向けに必要なメモリを事前に確保することで、String/Array/Map/Variant/Dynamic 型に対するカラムの「squashing」(INSERT クエリで発生する処理)を改善しました。 #67043 (Kruglov Pavel).
  • SYSTEM FLUSH LOGS を高速化し、シャットダウン時にログをフラッシュするようにしました。 #67472 (Sema Checherinda).
  • マージ処理のスケジューリングステップのオーバーヘッドを削減することで、マージの全体的なパフォーマンスを改善しました。 #68016 (Anton Popov).
  • DROP DATABASE クエリにおけるテーブル削除を高速化し、database_catalog_drop_table_concurrency のデフォルト値を 16 に引き上げました。 #67228 (Nikita Mikhaylov).
  • ORC 書き込み時に配列カラムに対して過剰な容量を割り当てないようにしました。Array カラムの場合、パフォーマンスが 15% 向上しました。 #67879 (李扬).
  • 非レプリケートな MergeTree テーブルに対するミューテーションを大幅に高速化しました。 #66911 #66909 (Alexey Milovidov).

改善点

  • allow_experimental_analyzer の Setting は enable_analyzer にリネームされました。古い名前はエイリアスとして引き続き利用できます。これは、Analyzer がもはやベータ版ではなく、本番利用が想定された正式な機能になったことを意味します。 #66438 (Nikita Mikhaylov)。
  • 日付・時刻のスキーマ推論を改善しました。日時値に小数部がある場合にのみ DateTime64 を使用し、それ以外では通常の DateTime を使用します。Date/DateTime の推論はこれまでより厳密になり、とくに date_time_input_format='best_effort' の場合には、特殊なケースで文字列を日付・時刻として推論してしまうことを避けるようになりました。 #68382 (Kruglov Pavel).
  • ClickHouse server は新しい設定項目 max_keep_alive_requests をサポートするようになりました。サーバーへの keep-alive HTTP 接続に対しては、keep_alive_timeout と組み合わせて動作します。アイドルタイムアウトがまだ経過していなくても、その接続経由で処理されたリクエスト数が max_keep_alive_requests を超えた場合、その接続はサーバーによって切断されます。 #61793 (Nikita Taranov)。
  • 高度なダッシュボードにさまざまな改善を行いました。これにより #67697 をクローズしました。これにより #63407 をクローズしました。これにより #51129 をクローズしました。これにより #61204 をクローズしました。 #67701Alexey Milovidov)。
  • 分散テーブルを作成する際に REMOTE への権限付与は不要になりました。Distributed エンジンへの権限付与だけで十分です。 #65419 (jsc0218).
  • Docker イメージ内で keeper 向けのログを明示的に渡さないようにし、上書きできるようにしました。 #65564 (Azat Khuzhin).
  • BACKUP および RESTORE クエリ向けに use_same_password_for_base_backup 設定を導入し、パスワード保護されたアーカイブに対する増分バックアップの作成およびそこからの復元を可能にしました。 #66214 (Samuele).
  • ATTACH クエリでは async_load_databases を無視するようにしました(以前は、テーブルがアタッチされる前に ATTACH クエリの実行が完了して返ってしまう可能性がありました)。 #66240 (Azat Khuzhin).
  • リソース不足により拒否された接続に対するログとメトリクスを追加しました。 #66410 (Alexander Tokmakov).
  • MongoDB エンジンで UUID 型を正しくサポートするようにしました。 #66671 (Azat Khuzhin).
  • レプリケーションラグおよび復旧時間に関するメトリクスを追加。 #66703 (Miсhael Stetsyuk).
  • DiskS3NoSuchKeyErrors メトリクスを追加しました。 #66704 (Miсhael Stetsyuk)。
  • すべてのテーブルエンジンで COMMENT 句を使用できるようにしました。 #66832 (Joe Lynch)。
  • 関数 mapFromArrays は、最初の引数として Map(K, V) 型を受け取れるようになりました。たとえば、SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb']) は動作するようになり、{('a',4):'aa',('b',4):'bb'} を返します。さらに、1 番目の引数が Array の場合、実際の配列要素が NULL でない限り、Array(Nullable(T))Array(LowCardinality(Nullable(T))) 型も使用できるようになりました。 #67103 (李扬).
  • clickhouse-local の設定を ~/.clickhouse-local から読み込むようになりました。 #67135 (Azat Khuzhin).
  • input_format_orc_read_use_writer_time_zone 設定を input_format_orc_reader_timezone にリネームし、ユーザーが読み取り側のタイムゾーンを設定できるようにしました。 #67175 (kevinyhzou).
  • HTTP 接続直後にピア側によってすぐにリセットされた場合に発生する Socket is not connected エラーのログレベルを下げ、#34218 をクローズしました。 #67177 (vdimir).
  • 設定ファイルから system.dashboards のダッシュボードを読み込めるようにしました(設定されると、デフォルトのダッシュボードプリセットを上書きします)。 #67232 (Azat Khuzhin).
  • SQL におけるウィンドウ関数は、一般的にスネークケースで記述されます。ClickHouse では camelCase を使用しているため、新しいエイリアスとして denseRank()percentRank() が作成されました。これらの新しい関数は、元の dense_rank()percent_rank() 関数とまったく同じように呼び出すことができます。スネークケースと camelCase の両方の構文が引き続き使用可能です。各関数に対する新しいテストも追加されました。これにより #67042 がクローズされました。 #67334 (Peter Nguyen)。
  • 設定ファイルが .xml.yml.yaml 以外の場合に、その形式を自動判別します。ファイルが < で始まる場合は XML、それ以外の場合は YAML と見なされます。これは、パイプから設定ファイルを渡すときに便利です: clickhouse-server --config-file <(echo "hello: world")#67391 (sakulali).
  • 関数 formatDateTimeformatDateTimeInJodaSyntax は、format パラメータを省略可能として扱うようになりました。指定されていない場合、フォーマット文字列 %Y-%m-%d %H:%i:%s および yyyy-MM-dd HH:mm:ss が既定値として使用されます。例: SELECT parseDateTime('2021-01-04 23:12:34') は、現在は DateTime 値 2021-01-04 23:12:34 を返します(以前は例外がスローされていました)。#67399Robert Schulze)。
  • KeeperMap で、タイムアウトや接続断により失敗した Keeper リクエストを自動的に再試行するようにしました。 #67448 (Antonio Andelic)。
  • Aarch64 Linux 向けビルドで -no-pie を有効化し、ClickHouse 再起動後でもスタックトレースを適切に解析およびシンボル解決できるようにしました。 #67916 (filimonov).
  • マージおよびミューテーションの挙動をより詳細に把握できるよう、profile events を追加しました。 #68015 (Anton Popov).
  • レプリカなしの MergeTree における不要なログ出力を削除。#68238Daniil Ivanik)。

ビルド/テスト/パッケージングの改善

  • 統合テストに対するフレークチェックが、テスト内のさらなる問題を検出して信頼性を高めるために、各テストケースを複数回実行するようになりました。同一の環境でテストケースを複数回実行するために pytest-repeat ライブラリを使用しています。テストケースを成功させるには、テストケースの最後にテーブルやその他のエンティティをクリーンアップすることが重要です。必要なコンテナを一度だけ起動すればよいため、pytest を複数回実行するよりも、繰り返し実行の方がはるかに高速です。#66986 (Ilya Yatsishin)。
  • ClickHouse で CLion を使用できない問題を解消しました。以前のバージョンでは、CLion がキー入力のたびに 1 分程度フリーズしていました。この変更により #66994 が解決されます。#66995 (Alexey Milovidov)。
  • 新しい Linux カーネルにおける高い ASLR エントロピーが原因で、sanitizer による再実行時に発生していた getauxval のクラッシュを回避しました。#67081 (Raúl Marín)。
  • クライアントコードの一部を単一のファイルに抽出し、デバッグビルドであっても可能な限り高いレベルの最適化をそれらに適用しました。これにより #65745 が解決されます。#67215 (Nikita Mikhaylov)。

不具合修正

  • 実験的な Variant データ型にのみ適用されます。Variant 型と AggregateFunction 型を組み合わせた場合に発生していたクラッシュを修正しました。 #67122 (Kruglov Pavel).
  • 接続が存在しない場合に DistributedAsyncInsert がクラッシュしていた問題を修正。 #67219 (Pablo Marcos).
  • tuple() 引数を使用した場合に uniq および uniqTheta がクラッシュする不具合を修正。#67303 をクローズ。#67306flynn)。
  • #66026 を修正。ReplaceTableNodeToDummyVisitor において、未解決のテーブル関数引数を走査しないようにしました。#67522Dmitry Novik)。
  • JSONMergePatch 関数で発生する可能性のあったスタックオーバーフローを修正しました。この関数名は、以前の名前が誤っていたため jsonMergePatch から JSONMergePatch に変更しましたが、互換性のため以前の名前も引き続き利用可能です。この関数内でのエラー診断を改善しました。これにより #67304 が解決されました。#67756Alexey Milovidov)。
  • 特別に作成されたクエリによってトリガーされ、hopEnd、hopStart、tumbleEnd、tumbleStart を介してサーバーがクラッシュしていた NULL ポインタ逆参照を修正しました。 #68098 (Salvatore Mesoraca)。
  • サブクエリを使用してフィルタリングする際に、一部の system テーブルで Not-ready Set が発生する問題を修正しました。 #66018 (Michael Kolupaev).
  • ALTER ADD COLUMN クエリの後のサブカラムの読み取り処理を修正しました。 #66243 (Anton Popov).
  • 外部データベースエンジン(PostgreSQL など)に送信されるクエリ内の boolean リテラルの扱いを修正しました。 #66282 (vdimir).
  • 別名付きの JOIN ON 式を含むクエリの整形を修正しました。例えば、... JOIN t2 ON (x = y) AS e ORDER BY x... JOIN t2 ON ((x = y) AS e) ORDER BY x のように整形されるべきです。 #66312 (vdimir)。
  • cluster() のサーバー間シークレットに関する動作を修正し、従来どおり元のユーザーを保持するようにしました。 #66364 (Azat Khuzhin).
  • null を含む Array フィールドを Array(Variant) に変換する際に発生する可能性があった実行時エラーを修正。 #66727 (Kruglov Pavel).
  • Context::getDDLWorker でまれに発生するデッドロックを修正しました。 #66843 (Alexander Gololobov).
  • 不完全な DROP 後に KeeperMap テーブルを作成できない問題を修正。#66865 (Antonio Andelic)。
  • s3_plain_rewritable ディスクへリストアする際に発生していた「Broken part」エラーを修正。 #66881 (Vitaly Baranov).
  • まれに、ディスク上の予期しないプロジェクションが原因で、ClickHouse がパーツを破損していると誤認してしまうことがありました。この問題は既に修正済みです。 #66898 (alesapin).
  • スキーマ推論におけるフォーマットの誤検出を修正し、Format {} doesn't support schema inference. という論理エラーが発生し得る問題を解消しました。 #66899 (Kruglov Pavel).
  • 並列レプリカ使用時のクエリキャンセル時に発生する可能性のあるデッドロックを修正。 #66905 (Nikita Taranov).
  • database_replicated_allow_heavy_create が設定されている場合でも、CREATE AS SELECT を禁止するようにしました。23.12 では無条件に禁止されていましたが、未リリースの 24.7 ではこの SETTING が有効な場合に誤って許可されていました。 #66980 (vdimir).
  • max_rows_to_read 制限が設定されている場合に、numbers からの読み取り時に誤って例外がスローされることがありました。これにより #66992 がクローズされました。 #66996 (Alexey Milovidov)。
  • lagInFrame および leadInFrame ウィンドウ関数に適切な型変換を追加し、msan テストを修正。 #67091 (Yakov Olkhovskiy).
  • 以前は TRUNCATE DATABASE が DROP DATABASE クエリと同様にレプリケーションを停止してしまう問題がありましたが、これを修正しました。 #67129 (Alexander Tokmakov).
  • clickhouse-local で独立したクライアントコンテキストを使用するようにしました。 #67133 (Vitaly Baranov)。
  • 1 分片のみを持つ Distriburted テーブル上の Merge テーブルから読み取るクエリで発生していた Cannot convert column because it is non constant in source stream but must be constant in result. エラーを修正。 #67146 (Nikolai Kochetov).
  • enable_order_by_all 無効時および並列レプリカ環境(分散クエリを含む)における ORDER BY all の動作を正しくしました。 #67153 (Igor Nikonov).
  • スキーマキャッシュにおける input_format_max_bytes_to_read_for_schema_inference の誤った使用を修正。 #67157 (Kruglov Pavel)。
  • 単一の Nullable キーでの GROUP BY 中に例外が発生した場合に、count distinct のメモリリークが発生する問題を修正。 #67171 (Jet He).
  • OUTER JOIN を INNER JOIN に変換する最適化で発生していたエラーを修正しました。これにより #67156 および #66447 がクローズされます。このバグは https://github.com/ClickHouse/ClickHouse/pull/62907 の変更で導入されました。#67178Maksim Kita)。
  • エラー Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported を修正。optimize_rewrite_aggregate_function_with_if 最適化が原因だったバグ。#67112 を修正。#67229Nikolai Kochetov)。
  • 関数 IN の左辺として空のタプルを使用した場合にクエリがハングする不具合を修正。 #67295 (Duc Canh Le).
  • 未知のフィールドをスキップする際にスタックオーバーフローを引き起こす、非常に深くネストされた JSON データを作成できてしまう問題がありました。この修正により #67292 がクローズされました。#67324Alexey Milovidov)。
  • 起動時に発生した例外の後に ReplicatedMergeTree テーブルを再アタッチする処理を修正。 #67360 (Antonio Andelic).
  • Aggregator において、スレッドグループからの誤ったデタッチ処理により発生していたセグメンテーションフォルトを修正。 #67385 (Antonio Andelic).
  • PK に非決定的関数が指定されているもう 1 つのケースを修正しました。 #67395 (Nikolai Kochetov).
  • bloom_filter 索引が、(k=2)=(k=2)has([1,2,3], k) のようなやや奇妙な条件を含むクエリを失敗させてしまう問題を修正しました。 #67423 (Michael Kolupaev).
  • アーカイブでない場合に :: を含むファイル名や URI を正しく解析できるようにしました。 #67433 (Antonio Andelic).
  • WriteBuffer がキャンセルされた場合に、~WriteBufferFromS3 内のタスクの待機処理を修正。 #67459 (Kseniia Sumarokova).
  • RESTORE 実行中に一時パートディレクトリが削除されないように保護するようにしました。 #67491 (Vitaly Baranov)。
  • ネストされた短絡評価関数の実行を修正しました。 #67520 (Kruglov Pavel).
  • Logical error: Expected the argument №N of type T to have X rows, but it has 0 を修正しました。このエラーは、新しいアナライザ使用時に、GROUP BY 句内に定数式を含むリモートクエリで発生する可能性がありました。 #67536 (Nikolai Kochetov)。
  • NULL を含むタプルでの JOIN を修正: 新しい analyzer を使用した場合、JOIN ON 句内のタプルに NULL を含む一部のクエリで誤った結果が返されていました。 #67538 (vdimir).
  • 退避不可のキャッシュが満杯になっている場合に、FileCache::freeSpaceRatioKeepingThreadFunc() が不要に再スケジュールされる問題を修正。 #67540 (Kseniia Sumarokova)。
  • HTTP インターフェイス経由でのストリーム系エンジン(Kafka、RabbitMQ、NATS)への挿入に関する不具合を修正。 #67554 (János Benjamin Antal).
  • 小さい DateTime64 値に対して誤った結果を返していた関数 toStartOfWeek を修正しました。 #67558 (Yarik Briukhovetskyi).
  • 再帰CTEを使用するVIEWの作成を修正。 #67587 (Yakov Olkhovskiy).
  • filesystem cache における Logical error: 'file_offset_of_buffer_end <= read_until_position' の不具合を修正しました。#57508 をクローズ。#67623Kseniia Sumarokova)。
  • #62282 を修正しました。convertFieldToString() の呼び出しを削除し、データ型ごとのシリアライズ処理コードを追加しました。パラメータ値がデータ型インスタンスを返す関数または式である場合、複数のデータ型に対するパラメータ化されたビューの置換が正しく動作していませんでした。#67654Shankar)。
  • percent_rank で発生していたクラッシュを修正しました。percent_rank のデフォルトのフレームタイプは range unbounded preceding and unbounded following に変更されました。IWindowFunction のデフォルトのウィンドウフレームが考慮されるようになり、SQL 内でウィンドウフレームが定義されていないウィンドウ関数も、適切に異なる WindowTransfomer に振り分けられるようになりました。 #67661 (lgbo).
  • UNION を使用する SQL UDF の再読み込みの問題を修正しました。以前は、サーバーを再起動すると UDF が無効になってしまうことがありました。 #67665 (Antonio Andelic)。
  • 実験的な Variant 型を使用し、Tuples および Maps を引数に取る if 関数で use_variant_as_common_type 設定を有効にしている場合に発生し得る論理エラー「Unexpected return type from if」を修正しました。 #67687 (Kruglov Pavel).
  • Linux カーネルのバグにより、クエリが TimerDescriptor::drain 内でハングする可能性がありました。これにより #37686 がクローズされました。 #67702 (Alexey Milovidov)。
  • RESTORE ON CLUSTER コマンドの完了動作を修正しました。 #67720 (Vitaly Baranov).
  • 読み込み中に CANNOT_SCHEDULE_TASK が発生した場合に Dictionary がハングする不具合を修正。 #67751 (Azat Khuzhin).
  • c 列にブルームフィルター索引がある場合の SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1 のようなクエリが、正しく動作するようになりました。 #67781jsc0218)。
  • 集計キーおよびフィルターなしの集計を行う一部のクエリで誤った集計結果が返される問題を修正しました。#67419 をクローズ。#67804vdimir)。
  • ALTER の ADD/MODIFY COLUMN で、実験的または疑わしいデータ型を検証するようにしました。 #67911 (Kruglov Pavel).
  • 分散クエリにおける定数畳み込み後の DateTime64 パースを修正し、#66773 をクローズしました。#67920vdimir)。
  • 述語内に非決定論的関数が含まれている場合に count() の結果が誤ることがあった問題を修正。 #67922 (János Benjamin Antal).
  • 使用可能な CPU 数が制限されているコンテナ化環境において、スレッド数の最大ソフトリミットの計算を修正しました。 #67963 (Robert Schulze).
  • checksums.txt には存在するがディスク上には存在しない PROJECTION について、ClickHouse はそのパーツが破損しているとは見なさなくなりました。 #68003 (alesapin)。
  • 新しいアナライザー使用時の、未変更パーツをスキップする処理を修正しました。以前はアナライザーが有効な場合、述語に基づけばこのパーツには影響しないはずのミューテーションであっても、そのパーツ内のデータが書き換えられてしまう可能性がありました。 #68052 (Anton Popov)。
  • OFFSET を使用するサブクエリでソートを削除してしまう誤った最適化を除去しました。#67906 を修正。#68099Graham Campbell)。
  • 集約プロジェクションの最適化において発生する Block structure mismatch in AggregatingStep stream: different types エラーの修正を試みました。 #68107 (Nikolai Kochetov).
  • クエリのキャンセル時に発生する Postgres のクラッシュの修正を試みました。 #68288 (Kseniia Sumarokova).
  • クエリ SYSTEM SYNC REPLICA で sync replica モードが欠落していた問題を修正。#68326 (Duc Canh Le).

ClickHouse リリース 24.7(2024-07-30)。プレゼンテーション資料動画

後方互換性のない変更

  • Replicated データベースで CRATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ... を使用することを禁止しました。#63963 (vdimir).
  • clickhouse-keeper-client は、ls '/hello/world' のような文字列リテラル内のパスのみを受け付け、ls /hello/world のような裸のパス文字列は受け付けません。#65494 (Alexey Milovidov).
  • メトリクス KeeperOutstandingRequetsKeeperOutstandingRequests にリネームされました。#66206 (Robert Schulze).
  • system.functions テーブルから is_deterministic フィールドを削除しました。#66630 (Alexey Milovidov).
  • 関数 tuple は、クエリ内で名前付きタプルの構築を試みるようになりました(enable_named_columns_in_function_tuple で制御)。タプルから名前を抽出する関数 tupleNames を導入しました。#54881 (Amos Bird).
  • Materialized Views に対する重複排除の動作を変更しました。次のような多数のケースを修正しました: - 宛先テーブル上: データが 2 つ以上のブロックに分割され、並列挿入時にそのブロックが重複と見なされるケース。 - MV の宛先テーブル上: 集約処理により、異なる入力データに対しても MV が同じデータを頻繁に生成する結果、同一ブロックが重複排除されるケース。 - MV の宛先テーブル上: 異なる MV から来た同一ブロックが重複排除されるケース。#61601 (Sema Checherinda).
  • 関数 bitShiftLeft および bitShitfRight は、シフト位置が範囲外の場合にエラーを返すようになりました。#65838 (Pablo Marcos).

新機能

  • full_sorting_join アルゴリズムでの ASOF JOIN をサポートしました。#55051 (vdimir)。
  • clickhouse-client で JWT 認証をサポートしました(ClickHouse Cloud でのみ利用可能)。#62829 (Konstantin Bogdanov)。
  • SQL 関数 changeYear, changeMonth, changeDay, changeHour, changeMinute, changeSecond を追加しました。たとえば、SELECT changeMonth(toDate('2024-06-14'), 7) は日付 2024-07-14 を返します。#63186 (cucumber95)。
  • 起動スクリプトを導入しました。これにより、起動段階で事前設定されたクエリを実行できます。#64889 (pufit)。
  • クライアントが自己署名証明書で稼働しているサーバーにセキュアな TCP で接続できるようにするため、クライアント設定で accept_invalid_certificate をサポートしました。これは、対応する openSSL クライアント設定 verificationMode=none + invalidCertificateHandler.name=AcceptCertificateHandler の省略形として利用できます。#65238 (peacewalker122)。
  • テーブル system.errors に含まれるエラー値の履歴を保持し、定期的にディスクへフラッシュする system.error_log を追加しました。#65381 (Pablo Marcos)。
  • 集約関数 groupConcat を追加しました。arrayStringConcat( groupArray(column), ',') とほぼ同等です。文字列の区切り文字と、処理する要素数という 2 つのパラメータを受け取ることができます。#65451 (Yarik Briukhovetskyi)。
  • AzureQueue ストレージを追加しました。#65458 (Kseniia Sumarokova)。
  • Parquet ファイルにページ索引を書き込むかどうかを制御するための新しい設定を追加しました。#65475 (lgbo)。
  • コンソール(有効な場合)へのログレベルを制御するための logger.console_log_level サーバー設定を導入しました。#65559 (Azat Khuzhin)。
  • テーブル関数 file で、ディレクトリパスの末尾にワイルドカード * を自動的に付加するようにしました。#66019 (Zhidong (David) Guo)。
  • 非対話モードのクライアントに --memory-usage オプションを追加しました。#66393 (vdimir)。
  • clickhouse-disks 用の対話型クライアントを作成し、ローカルディレクトリからローカルディスクを追加できるようにしました。#64446 (Daniil Ivanik)。
  • プロジェクションを持つテーブルで論理削除が行われる場合、ユーザーは(デフォルトの)例外を投げるか、あるいはプロジェクションを DROP するかを選択できるようになりました。#65594 (jsc0218)。
  • すべてのデタッチされたテーブルに関する主要な情報を持つ system テーブルを追加しました。#65400 (Konstantin Morozov)。

実験的機能

  • Variant データ型のバイナリシリアライズ形式を変更しました。単一の variant しか持たない、または NULL 値のみを持つ granule について、同じ discriminator を複数回書き込まないようにするために compact モードを追加しました。デフォルトで有効な MergeTree の設定 use_compact_variant_discriminators_serialization を追加しました。なお、Variant 型は依然として実験的であり、シリアライゼーションにおける後方互換性のない変更は許容されます。 #62774 (Kruglov Pavel).
  • clickhouse-keeper のオンディスクのバックエンドストレージをサポートしました。 #56626 (Han Fei).
  • JSONExtract 関数をリファクタリングし、実験的な Dynamic 型を含む、より多くの型をサポートしました。 #66046 (Kruglov Pavel).
  • Variant および Dynamic のサブカラム向けに null map サブカラムをサポートしました。 #66178 (Kruglov Pavel).
  • 変更された Memory テーブルからの Dynamic サブカラムの読み取りを修正しました。以前は、Memory テーブルで ALTER によって Dynamic 型の max_types パラメータが変更された場合、その後のサブカラム読み取りが誤った結果を返す可能性がありました。 #66066 (Kruglov Pavel).
  • カスタムキーを用いた parallel replicas の使用時に cluster_for_parallel_replicas をサポートしました。これにより、MergeTree テーブルでカスタムキーと parallel replicas を組み合わせて使用できるようになります。 #65453 (Antonio Andelic).

パフォーマンスの改善

  • int から string への変換アルゴリズムを、より高速なもの(変更を加えた amdn/itoa から、変更を加えた jeaiii/itoa へ)に置き換えました。#61661 (Raúl Marín)。
  • parallel_hash アルゴリズムで join によって作成されるハッシュテーブルのサイズを収集してキャッシュするようにしました。この情報は、後続のクエリ実行時にハッシュテーブルの事前確保に利用され、ハッシュテーブルのリサイズにかかる時間を削減します。#64553 (Nikita Taranov)。
  • バッファリングを利用することで、ORDER BY で主キーを指定し、高い選択性を持つ条件を含む WHERE 句を持つクエリを最適化しました。これは設定 read_in_order_use_buffering(デフォルトで有効)によって制御され、クエリのメモリ使用量が増加する可能性があります。#64607 (Anton Popov)。
  • plain_rewritable メタデータの読み込みパフォーマンスを改善しました。#65634 (Alexey Milovidov)。
  • 読み取り専用ディスク上でテーブルをアタッチする際に、古いパーツをロードしないことで、使用するリソースを削減しました。#65635 (Alexey Milovidov)。
  • Set インデックスに対して minmax ハイパーレクタングルをサポートしました。#65676 (AntiTopQuark)。
  • 古いパーツのプライマリインデックスをアンロードして、総メモリ使用量を削減しました。#65852 (Anton Popov)。
  • replaceRegexpAll および replaceRegexpOne 関数が、パターンが単純(メタ文字・パターンクラス・フラグ・グルーピング文字などを含まない)な場合に大幅に高速化されました(Taiyang Li 氏に感謝します)。#66185 (Robert Schulze)。
  • S3 リクエスト: クエリの再試行時間を短縮し、バックアップの再試行回数を増やしました。クエリについては 8.5 分で 100 回の再試行、バックアップリストアについては 1.2 時間で 1000 回の再試行を行います。#65232 (Sema Checherinda)。
  • クエリプランの LIMIT 最適化をサポートしました。PostgreSQL ストレージおよびテーブル関数に対する LIMIT のプッシュダウンをサポートしました。#65454 (Maksim Kita)。
  • ZooKeeper の負荷分散を改善しました。fallback_session_lifetime に関係なく、最適なノードが利用可能になるまで現在のセッションが期限切れにならないようになり、AZ(アベイラビリティゾーン)対応のバランシングを追加しました。#65570 (Alexander Tokmakov)。
  • DatabaseCatalog が、最大で database_catalog_drop_table_concurrency 個のスレッドを使用してテーブルをより高速に削除するようになりました。#66065 (Sema Checherinda)。

改善点

  • ZooKeeper の負荷分散を改善しました。fallback_session_lifetime が設定されていても、最適なノードが利用可能になるまで現在のセッションは失効しません。AZ を考慮したバランシングのサポートを追加しました。 #65570 (Alexander Tokmakov)。
  • optimize_trivial_insert_select 設定はデフォルトで無効になっています。ほとんどのケースでは有益です。とはいえ、もし INSERT SELECT が遅くなったりメモリ使用量が増加している場合は、この設定を再度有効化するか、SET compatibility = '24.6' を実行してください。 #58970Alexey Milovidov)。
  • clickhouse-client または clickhouse-local がクラッシュした場合に、スタックトレースおよび診断情報を出力します。 #61109 (Alexander Tokmakov)。
  • SHOW INDEX | INDEXES | INDICES | KEYS の結果は、以前はプライマリキーのカラム名でソートされていました。これは直感的ではないため、現在はプライマリキーを構成するカラムの位置順でソートされるようになりました。 #61131 (Robert Schulze)。
  • Materialized Views の重複排除の動作を変更しました。次のような多くのケースに対応しています: - 宛先テーブルで: データが 2 つ以上のブロックに分割され、それらのブロックが並列に挿入される場合に、そのブロックが重複として扱われてしまう。 - MV の宛先テーブルで: 集約処理の結果、異なる入力データに対しても MV がしばしば同一の結果データを生成し、その同一ブロックが重複排除される。 - MV の宛先テーブルで: 異なる MV から来た同一のブロックが重複排除される。 #61601 (Sema Checherinda).
  • パーティション化された DeltaLake データの読み取りをサポート。データ本体ではなくメタデータを読み取ることで DeltaLake スキーマを推論。 #63201 (Kseniia Sumarokova).
  • Composable protocols において、TLS レイヤーでは certificateFileprivateKeyFile パラメータのみが受け付けられていました。 https://clickhouse.com/docs/operations/settings/composable-protocols#63985Anton Ivashkin)。
  • WHERE 句の評価に主キーを使用する SELECT クエリの数を示すプロファイルイベント SelectQueriesWithPrimaryKeyUsage を追加しました。 #64492 (0x01f).
  • StorageS3Queue に関連する修正と改善。サーバー上の物理 CPU コア数に応じて s3queue_processing_threads_num のデフォルト値を自動的に決定するように変更(以前のデフォルト値である 1 の代わり)。s3queue_loading_retries のデフォルト値を 10 に設定。system.s3queue の例外カラムで「Uncaught exception」という曖昧な表示になり得る問題を修正。MEMORY_LIMIT_EXCEEDED 例外が発生した場合にリトライ回数を増やさないように変更。ファイルのコミット処理を、テーブルへの挿入が完全に終了した後の段階に移動し、挿入されていない状態でファイルがコミットされてしまうことを防止。コミットおよびフラッシュのタイミングをより細かく制御できるように、s3queue_max_processed_files_before_commits3queue_max_processed_rows_before_commits3queue_max_processed_bytes_before_commits3queue_max_processing_time_sec_before_commit の各設定を追加。#65046Kseniia Sumarokova)。
  • パラメータ化された VIEW 関数でエイリアスをサポートしました(新しいアナライザーのみ)。 #65190 (Kseniia Sumarokova).
  • azureBlobStorage のログでアカウントキーがマスクされるように更新。#65273SmitaRKulkarni)。
  • PARTITION BY 式の一部となっているフィルタ式を含む IN 述語に対して、パーティション・プルーニングを行うようにしました。 #65335 (Eduard Karacharov).
  • arrayMin/arrayMax は、比較可能なすべてのデータ型に適用可能になりました。 #65455 (pn)。
  • cgroups v2 におけるメモリアカウンティングを改善し、ページキャッシュが占有している分を除外するようにしました。 #65470 (Nikita Taranov)。
  • EmbeddedRocksDB テーブルに挿入するために chunk をシリアライズする際に、各行ごとにフォーマット設定を作成しないようにしました。 #65474 (Duc Canh Le).
  • clickhouse-local のプロンプトを :) だけになるように短縮しました。getFQDNOrHostName() は macOS 上で時間がかかりすぎるうえ、そもそも clickhouse-local のプロンプトにホスト名は不要です。#65510Konstantin Bogdanov)。
  • 低スペックの仮想マシン上で、jemalloc が CPU ごとの arena に関するメッセージを出力しないようにしました。 #65532 (Alexey Milovidov)。
  • デフォルトでファイルシステムキャッシュのバックグラウンドダウンロードを無効化しました。バックグラウンドダウンロードスレッドを使用すると、メモリの解放がクエリコンテキストの外側で行われる一方で(バッファの割り当てはクエリコンテキスト内で行われる)、その結果として「Memory limit exceeded」が発生する可能性がある問題を修正した後に、再度有効化する予定です。また、バックグラウンドワーカーがダウンロードできる最大サイズを定義するための個別の設定を追加する必要があります(現在は max_file_segment_size によって制限されていますが、これは大きすぎる可能性があります)。 #65534 (Kseniia Sumarokova)。
  • <config_reload_interval_ms> という新しい設定オプションを追加し、ClickHouse が設定を再読み込みする間隔を指定できるようにしました。 #65545 (alesapin)。
  • ClickHouse のデータ型向けにバイナリエンコーディングを実装し、その仕様をドキュメントに追加しました。Dynamic binary serialization でこれを利用し、RowBinaryWithNamesAndTypes フォーマットおよび Native フォーマットで設定(settings)から利用できるようにしました。#65546 (Kruglov Pavel).
  • サーバー設定 compiled_expression_cache_size および compiled_expression_cache_elements_sizesystem.server_settings に表示されるようになりました。 #65584 (Robert Schulze)。
  • x509 の SubjectAltName 拡張に基づくユーザー識別のサポートを追加しました。 #65626 (Anton Kozlov)。
  • clickhouse-local は、設定ファイル内で指定された max_server_memory_usage および max_server_memory_usage_to_ram_ratio に従います。また、clickhouse-server と同様に、デフォルトでシステムメモリ合計の 90% を最大メモリ使用量として設定します。 #65697 (Alexey Milovidov)。
  • ファイルを ClickHouse にバックアップするスクリプトを追加。 #65699 (Alexey Milovidov)。
  • PostgreSQL ソースでのクエリキャンセルをサポート。 #65722 (Maksim Kita).
  • 分散クエリにおいて、allow_experimental_analyzer がクエリの発行元によって制御されるようにしました。これにより、バージョンが混在するクラスタ環境での互換性と動作の正しさが保証されます。 #65777 (Nikita Mikhaylov)。
  • Keeper で cgroup の CPU 制限を考慮するようにしました。 #65819 (Antonio Andelic).
  • 空の引数でも concat 関数を使用できるようにしました(:) select concat();)。 #65887 (李扬).
  • clickhouse-local で named collections を制御できるようになりました。 #65973 (Alexey Milovidov).
  • Azure 関連のプロファイルイベントを改善。 #65999 (alesapin).
  • ORC ファイルを、書き込み時のタイムゾーンを使用して読み取ることをサポートしました。 #66025 (kevinyhzou).
  • PostgreSQL への接続を制御するための設定を追加しました。postgresql_connection_attempt_timeout 設定は、接続 URL の connect_timeout パラメータに渡す値を指定します。postgresql_connection_pool_retries 設定は、PostgreSQL エンドポイントへの接続を確立する際の再試行回数を指定します。#66232Dmitry Novik)。
  • system.processors_profile_log 内の input_wait_elapsed_us / elapsed_us の値の不正確さを軽減しました。 #66239 (Azat Khuzhin).
  • ファイルシステムキャッシュ用のProfileEventsを改善しました。 #66249 (zhukai).
  • レプリケートストレージで名前付きコレクションの管理を行う際に、クエリ内の ON CLUSTER 句を無視するための設定を追加しました。 #66288 (MikhailBurdukov).
  • 関数 generateSnowflakeID では、大規模クラスター環境における衝突を防ぐために、マシンIDをパラメーターとして指定できるようになりました。 #66374 (ZAWA_ll).
  • インタラクティブモードで Ctrl+Z によるサスペンドを無効化しました。これはよくある落とし穴であり、ほとんどすべてのユーザーにとって想定された動作ではありません。端末アプリケーションをバックグラウンドにサスペンドできることを便利だと感じるような、かなり特殊なパワーユーザーもごく一部にはいるかもしれませんが、私自身はそのような人を一人も知りません。 #66511 (Alexey Milovidov)。
  • Dictionaries におけるプライマリキー型を検証するためのオプションを追加しました。このオプションがない場合、simple レイアウトでは任意のカラム型が自動的に UInt64 に変換されます。 #66595 (MikhailBurdukov)。

バグ修正(公式安定版でユーザーが認識できる不具合)

  • CREATE/REPLACE/RENAME/EXCHANGE クエリにおいて循環依存関係を検出し、循環依存関係がある場合は例外をスローするようにしました。以前は、このような循環依存関係がサーバーの起動時にデッドロックを引き起こす可能性がありました。また、依存関係の作成処理に関するいくつかのバグも修正しました。 #65405 (Kruglov Pavel)。
  • 関数呼び出しにおいて LowCardinality カラムのサイズが予期せず変化してしまう問題を修正しました。 #65298 (Raúl Marín)。
  • maxIntersections で発生していたクラッシュを修正。 #65689 (Raúl Marín).
  • 再起動後にユーザー定義で設定した VALID UNTIL 句がリセットされてしまう問題を修正しました。 #66409 (Nikolay Degterinsky)。
  • SHOW MERGES の残り時間のカラムを修正。 #66735 (Alexey Milovidov)。
  • Query was cancelled が clickhouse-client で 2 回出力されることがありました。この問題を修正しました。 #66005 (Nikita Mikhaylov).
  • MaterializedMySQL(サポート対象外の実験的機能)を使用し、MySQL の NULL フィールドを ClickHouse の NOT NULL フィールドにマッピングする TABLE OVERRIDE を用いた場合に発生していたクラッシュを修正しました。 #54649 (Filipp Ozinov)。
  • PREWHERE 式がカラムを一切読み込まず、かつテーブルに adaptive index granularity が存在しない(非常に古いテーブル)場合に発生する論理エラーを修正しました。 #59173 (Alexander Gololobov).
  • クエリのキャンセル時に使用されるキャンセルバッファの不具合を修正しました。 #64478 (Sema Checherinda).
  • columns.txt が存在しない場合の、メタデータからパーツのカラムを補完する処理を修正。 #64757 (Azat Khuzhin).
  • ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY を実行するとクラッシュする不具合を修正しました。 #64957 (pufit).
  • AccessControl 破棄時のクラッシュを修正: 明示的なシャットダウン処理を追加。 #64993 (Vitaly Baranov)。
  • 関数 uniq* の引数に含まれる単射関数を再帰的に削除するようにしました。以前は正しく動作していましたが、新しいアナライザーで動作しなくなっていました。 #65140 (Duc Canh Le).
  • CTE を使用したクエリで、予期しない PROJECTION 名が付く問題を修正しました。 #65267 (wudidapaopao).
  • 直接クエリまたは Dictionary テーブルエンジン経由で Dictionary にアクセスする際に、dictGet 権限を必須としました。 #65359 (Joe Lynch).
  • 増分バックアップ利用時のユーザーごとの S3 認証を修正しました。 #65481 (Antonio Andelic).
  • read-in-order 最適化が有効になっている場合に、FINAL を含むクエリでは non-intersecting-parts 最適化を無効化しました。以前は、これによりクエリ結果が不正になる可能性がありました。この修正がマージされるまでの回避策としては、do_not_merge_across_partitions_select_finalsplit_parts_ranges_into_intersecting_and_non_intersecting_final を無効化してください。 #65505 (Nikolai Kochetov)。
  • リストバッチ内のすべてのファイルがフィルタ条件によって除外された場合に、Index out of bound for blob metadata という例外が発生する問題を修正しました。 #65523 (Kseniia Sumarokova)。
  • projection の重複排除マージ時に発生していた NOT_FOUND_COLUMN_IN_BLOCK エラーを修正。 #65573 (Yakov Olkhovskiy).
  • MergeJoin のバグを修正しました。スパースシリアライゼーションのカラムが、必要な変換が行われていないにもかかわらず、そのネストされた型のカラムとして扱われてしまう場合がありました。 #65632 (Nikita Taranov).
  • 互換性レベル「23.4」が正しく適用されない不具合を修正しました。 #65737 (cw5121).
  • Nullable フィールドを含む ODBC テーブルの不具合を修正。 #65738 (Rodolphe Dugé de Bernonville).
  • 致命的なエラー発生時に発生する可能性があった TCPHandler のデータレースを修正。 #65744 (Kseniia Sumarokova).
  • %F および %D プレースホルダーを使用した関数 parseDateTime で誤った例外が発生する問題を修正しました。 #65768 (Antonio Andelic).
  • PostgreSQL からデータを読み出すクエリに対して、ClickHouse のクエリが終了したら内部の PostgreSQL クエリをキャンセルするように変更しました。そうしない場合、内部の PostgreSQL クエリが終了するまで ClickHouse のクエリをキャンセルできません。 #65771 (Maksim Kita).
  • old analyzer と dictGetOrDefault を使用している場合のショートサーキットロジックの不具合を修正しました。 #65802 (jsc0218)。
  • EmbeddedRocksDB で有効期限 (TTL) 付きの書き込みを行うと壊れた SST ファイルが生成されるバグを修正しました。 #65816 (Duc Canh Le).
  • 関数 bitTestbitTestAllbitTestAny は、指定されたビットインデックスが範囲外の場合にエラーを返すようになりました #65818Pablo Marcos)。
  • join_any_take_last_row SETTING がハッシュ結合を使用する任意のクエリでサポートされるようになりました。 #65820 (vdimir).
  • IS NULL チェックを含む JOIN 条件の処理を改善しました(たとえば ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) )ON a <=> b に書き換えます)。また、IS NULL 以外の条件も含まれている場合に発生していた誤った最適化を修正しました。 #65835 (vdimir).
  • S3Queue で発生していたメモリ使用量が増加し続ける問題を修正。 #65839 (Kseniia Sumarokova).
  • arrayAUC における同値(タイ)の扱いを修正し、sklearn と一致させました。 #65840 (gabrielmcg44).
  • MySQL サーバープロトコルの TLS 接続における潜在的な問題を修正しました。 #65917 (Azat Khuzhin).
  • MySQL クライアントプロトコルにおける TLS 接続の不具合を修正しました。 #65938 (Azat Khuzhin).
  • タイムアウトが 0 の場合における SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE の扱いを修正。 #65941 (Azat Khuzhin).
  • input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples という、結果のスキーマを変更しうる設定をスキーマ推論キャッシュに新たに追加しました。これにより、これらの設定を変更した場合でもスキーマ推論の結果が誤ったものになることを防ぎます。 #65980 (Kruglov Pavel).
  • S3 engine と S3 table function における Column _size は、アーカイブ自体のサイズではなく、アーカイブ内のファイルサイズを表します。 #65993 (Daniil Ivanik).
  • analyzer における動的サブカラム解決の不具合を修正し、動的サブカラムの読み取り時にカラム全体を読み込まないようにしました。 #66004 (Kruglov Pavel).
  • from_env における replace オーバーライド使用時の設定マージを修正。 #66034 (Azat Khuzhin).
  • シャットダウン時に GRPCServer がハングする可能性のあった問題を修正。 #66061 (Vitaly Baranov).
  • 関数 has において、非定数の LowCardinality 引数を取る場合の不具合を複数修正しました。 #66088 (Anton Popov).
  • groupArrayIntersect を修正しました。merge() 関数で誤った動作をする問題がありました。また、数値データおよび汎用データに対する deserialise() の動作も修正しました。 #66103 (Yarik Briukhovetskyi).
  • unbin/unhex 実装におけるバッファオーバーフローの不具合を修正しました。 #66106 (Nikita Taranov).
  • #64760 で導入された merge-filters 最適化を無効にしました。最適化が 2 つのフィルタ式をマージし、短絡評価を適用しない場合に例外が発生する可能性があります。#66126Nikolai Kochetov)。
  • サーバーが、負のブロックサイズの配列としてエンコードされた Avro ファイルをパースできなかった問題を修正しました。これは現在の Avro 仕様では許可されています。 #66130 (Serge Klochkov).
  • ZooKeeper クライアントのバグを修正しました。ZooKeeper からハードウェアエラーを受信した後、セッションが使用不能な状態に陥ったままになることがありました。例えば、これは ClickHouse Keeper の「soft memory limit」が原因で発生する可能性があります。#66140 (Alexander Tokmakov)。
  • SumIfToCountIfVisitor と符号付き整数に関連する問題を修正。#66146 (Raúl Marín)。
  • 分散クエリで、まれに結果からデータが欠落する問題を修正しました。 #66174 (vdimir).
  • StorageDeltaLake におけるメタデータフィールドの解析順序を修正。 #66211 (Kseniia Sumarokova).
  • distributed_ddl_output_modenone_only_active モード使用時に TIMEOUT_EXCEEDED をスローしないようにしました。 #66218 (Alexander Tokmakov).
  • 索引を使用できない場合の system.numbers_mt に対する LIMIT の扱いを修正。 #66231 (János Benjamin Antal)。
  • Docker などのコンテナでサーバーが動作している場合に、cgroups v2 で指定された使用可能な CPU コア数の最大値を ClickHouse サーバーが正しく検出できるように修正しました。より具体的には、コンテナはしばしば名前が空の root cgroup 内でプロセスを実行しますが、その場合、ClickHouse は cgroups v2 によって設定された CPU 制限を無視していました。 #66237 (filimonov)。
  • 制約内で IN を使用するサブクエリを用いた場合に発生する Not-ready set エラーを修正しました。 #66261 (Nikolai Kochetov).
  • S3 または AzureBlobStorage へのコピー時のエラー報告を修正しました。 #66295 (Vitaly Baranov).
  • watchdog がリンク解除された(ローテーション済みの)ログファイルのファイルディスクリプタを保持しないようにしました。#66334 (Aleksei Filatov)。
  • logicalexpressionoptimizerpass が定数の論理型を失うバグを修正。 #66344 (pn)。
  • group_by_use_nulls=true と新しい analyzer の使用時に発生する Column identifier is already registered エラーを修正。 #66400 (Nikolai Kochetov).
  • PostgreSQL などの外部エンジンのテーブルを JOIN およびフィルタ条件とともに利用するクエリにおいて、過度に積極的なフィルタプッシュダウンが原因で誤った結果が返る可能性がある問題を修正しました。今後は、外部テーブルとの外部結合の場合、WHERE 句の条件は外部データベースへ送信されなくなります。 #66402 (vdimir).
  • クロス結合で不足していたカラムのマテリアライゼーションを追加しました。 #66413 (lgbo).
  • 新しいアナライザーを有効にした環境で、GROUP BY キーに定数式を含むクエリを実行した際に発生する Cannot find column エラーを修正しました。 #66433 (Nikolai Kochetov).
  • 配列のネストレベルが不正な場合に Npy フォーマットからのインポート中に発生しうる論理エラーを防止し、他の種類のエラーに対するテストを修正しました。 #66461 (Yarik Briukhovetskyi)。
  • 述語に非決定的関数が含まれている場合に count() の結果が誤っていた問題を修正。 #66510 (Duc Canh Le).
  • Allocator::realloc におけるメモリ使用量を正しくトラッキングするように修正しました。 #66548 (Antonio Andelic).
  • 空のタプルをハッシュ化する際に未初期化メモリを読み込んでしまう不具合を修正。 #66562 (Alexey Milovidov).
  • WINDOW を含むクエリで無効な結果が返されることがある問題を修正しました。これは、PARTITION カラムがスパースシリアライゼーションを使用しており、かつウィンドウ関数が並列実行される場合に発生する可能性がありました。 #66579 (Nikolai Kochetov).
  • ローカルストレージ内の名前付きコレクションを削除できない不具合を修正。 #66599 (János Benjamin Antal).
  • ColumnTuple::insertManyFromcolumn_length が更新されない不具合を修正。 #66626 (lgbo).
  • (column IS NULL) を含むクエリで発生する Unknown identifier および Column is not under aggregate function エラーを修正しました。このバグは、無効化された analyzer の場合にのみ #65088 によって誘発されていました。#66654Nikolai Kochetov)。
  • 新しいアナライザー使用時に、スカラサブクエリが IN 演算子の最初の引数として使用されている場合に発生していた Method getResultType is not supported for QUERY query node エラーを修正しました。#66655 (Nikolai Kochetov).
  • Variant サブカラムの読み取り時に発生する可能性のある PARAMETER_OUT_OF_BOUND エラーを修正しました。 #66659 (Kruglov Pavel).
  • DROP COLUMN 後にマージ処理がまれに停止したままになることがある不具合を修正。 #66707 (Raúl Marín)。
  • リモートソースからの INSERT SELECT 実行時に発生していた isUniqTypes アサーションを修正。 #66722 (Sema Checherinda).
  • PrometheusRequestHandler の論理エラーを修正しました。 #66621 (Vitaly Baranov)。
  • indexHint 関数の fuzzer によって検出されたケースを修正しました。 #66286 (Anton Popov)。
  • 'create table b empty as a' の AST フォーマットを修正しました。 #64951 (Michael Kolupaev).

ClickHouse 24.6 リリース(2024-07-01)。プレゼンテーション動画

後方互換性のない変更

  • データベースとテーブルの非同期ロードがデフォルトで有効になりました。config.xml 内の async_load_databases を参照してください。この変更は機能的には完全に互換性がありますが、動作に違いが生じる可能性があります。以前のバージョンと同様に async_load_databases が false の場合、すべてのテーブルがロードされるまでサーバーは接続を受け付けません。新バージョンと同様に async_load_databases が true の場合、サーバーはすべてのテーブルがロードされる前に接続を受け付けることができます。まだロードされていないテーブルに対してクエリが実行された場合、そのテーブルのロード完了まで待機し、それにはかなりの時間を要する可能性があります。この挙動は、サーバーが負荷分散環境下の大規模な分散システムの一部である場合に影響を与え得ます。前者の場合、ロードバランサーは接続拒否を受け取り、別のサーバーへ素早くフェイルオーバーできます。後者の場合、ロードバランサーはまだテーブルをロード中のサーバーに接続し、そのクエリのレイテンシーは高くなります。さらに、待機状態のクエリが多数蓄積すると、それらが同時に処理を開始する「thundering herd」問題を引き起こす可能性があります。これは高負荷な分散バックエンドでのみ差異を生む可能性があります。この問題を回避するには、async_load_databases の値を false に設定してください。 #57695Alexey Milovidov)。
  • MergeTree テーブルに対して replace_long_file_name_to_hash 設定がデフォルトで有効になりました。 #64457Anton Popov)。この設定は完全に互換性があり、アップグレード時に追加の操作は不要です。この新しいデータ形式は 23.9 以降のすべてのバージョンでサポートされています。この設定を有効にすると、23.8 以前のバージョンへのダウングレードはできなくなります。
  • 一部の不正なクエリは、パースのより早い段階で失敗するようになりました。注: 文字列リテラルなしで kql テーブル関数に渡されたインライン KQL 式(実験的な Kusto 言語)のサポートを無効化しました。例えば kql('garbage | trash')kql($$garbage | trash$$) を書くべきところで kql(garbage | trash) と書くケースです。この機能は意図せず導入されており、本来存在すべきではありませんでした。 #61500Alexey Milovidov)。
  • ストレージ S3QueueOrdered モードにおける並列処理を再設計しました。この PR は、s3queue_processing_threads_num または s3queue_total_shards_num 設定を使用していた場合、Ordered モードに対して後方互換性がありません。設定 s3queue_total_shards_num は削除されました。以前は s3queue_allow_experimental_sharded_mode が有効な場合にのみ使用が許可されていましたが、これは現在非推奨です。新しい設定 s3queue_buckets が追加されました。 #64349Kseniia Sumarokova)。
  • 新しい関数 snowflakeIDToDateTime, snowflakeIDToDateTime64, dateTimeToSnowflakeID, dateTime64ToSnowflakeID が追加されました。既存の関数 snowflakeToDateTime, snowflakeToDateTime64, dateTimeToSnowflake, dateTime64ToSnowflake と異なり、新しい関数は generateSnowflakeID 関数と互換性があります。すなわち、generateSnowflakeID によって生成された Snowflake ID を受け取り、generateSnowflakeID と同じ型(UInt64)の Snowflake ID を生成します。さらに、新しい関数は generateSnowflakeID と同様に UNIX エポック(1970-01-01)をデフォルトとします。必要に応じて、Twitter/X のエポックである 2010-11-04(UNIX エポックからの経過ミリ秒 1288834974657 など)、別のエポックを渡すこともできます。古い変換関数は非推奨となり、移行期間後に削除されます。引き続き使用する必要がある場合は、allow_deprecated_snowflake_conversion_functions 設定を有効にしてください。 #64948Robert Schulze)。

新機能

  • ClickHouse Keeper で名前付きコレクションを保存できるようにしました。 #64574 (Kseniia Sumarokova).
  • 空タプルをサポートしました。 #55061 (Amos Bird)。
  • Hilbert 曲線のエンコードおよびデコード関数を追加しました。 #60156 (Artem Mustafin).
  • hilbertEncode を用いた索引解析をサポートしました。 #64662 (Artem Mustafin).
  • 関数 readWKTLineString による WKT 形式の LINESTRING ジオメトリの読み取りをサポートしました。 #62519 (Nikita Mikhaylov).
  • 別ディスク上のパーツをアタッチできるようにしました。 #63087 (Unalian).
  • Twitter 形式の Snowflake ID を生成するための新しい SQL 関数 generateSnowflakeID を追加しました。 #63577 (Danila Puzov)。
  • merge_workloadmutation_workload の設定を追加し、マージ処理、ミューテーション処理、およびその他のワークロード間でのリソースの利用と共有を制御できるようにしました。 #64061 (Sergei Trifonov)。
  • = 演算子で IPv4 型と IPv6 型を比較できるようになりました。 #64292 (Francisco J. Jurado Moreno).
  • 2 項演算の数学関数 (pow, atan2, max2, min2, hypot) で Decimal 型の引数をサポートしました。 #64582 (Mikhail Gorshkov).
  • SQL 関数 parseReadableSize(および OrNullOrZero のバリアント)を追加しました。 #64742 (Francisco J. Jurado Moreno).
  • CREATE クエリで作成できるデータベースまたはテーブルの数を制限するためのサーバー設定 max_table_num_to_throw および max_database_num_to_throw を追加しました。 #64781 (Xu Jia).
  • s3 / file / hdfs / url / azureBlobStorage などのファイルライクなストレージに _time 仮想カラムを追加。 #64947 (Ilya Golshtein).
  • 新しい関数 base64URLEncodebase64URLDecodetryBase64URLDecode が追加されました。 #64991 (Mikhail Gorshkov).
  • 2つのUTF-8文字列間の編集距離を計算する新しい関数 editDistanceUTF8 を追加しました。 #65269 (LiuNeng)。
  • カスタム HTTP ハンドラーでカスタムレスポンスヘッダーをサポートできるように、http_response_headers 設定を追加しました。 #63562 (Grigorii).
  • クエリ結果を無限ループで返すための新しいテーブル関数 loop を追加しました。 #63452 (Sariel)。テスト用途に便利です。
  • system.query_log に 2 つのカラム used_privilegesmissing_privileges が追加されました。used_privileges にはクエリの実行中に確認された権限が格納され、missing_privileges には必要な権限のうち不足しているものが格納されます。 #64597 (Alexey Katsman).
  • 設定 output_format_pretty_display_footer_column_names を追加しました。この設定を有効にすると、行数の多いテーブル(デフォルトでは 50 行以上)の末尾にカラム名が表示されます。表示の対象となる最小行数のしきい値は、output_format_pretty_display_footer_column_names_min_rows によって制御されます。 #65144 (Shaun Struwig).

実験的機能

  • 型「number of distinct values」の統計情報を導入。#59357 (Han Fei).
  • ReplicatedMergeTree で統計情報をサポート。#64934 (Han Fei).
  • Replicated データベースに「replica group」が設定されている場合、すべてのグループのレプリカを含むクラスタを自動的に作成。#64312 (Alexander Tokmakov).
  • 範囲フィルタを使用する際に、動的な分片を持つ並列レプリカによるクエリの並列化方法を制御できるように、parallel_replicas_custom_key_range_lowerparallel_replicas_custom_key_range_upper の設定を追加。#64604 (josh-hildred).

パフォーマンス改善

  • PRIMARY KEY で設定された順序を維持したまま、サイズ最適化のために挿入時に行を再配置できる機能を追加しました。この挙動は設定項目 optimize_row_order(デフォルトではオフ)で制御されます。 #63578 (Igor Markelov)。
  • Parquet のバイナリを ClickHouse のカラムに直接読み込めるネイティブな Parquet リーダーを追加しました。input_format_parquet_use_native_reader という設定で制御されます(既定では無効です)。#60361ZhiHong Zhang)。
  • クエリのフィルタ条件が MergeTree テーブルから厳密な範囲を選択できる場合に、部分的な trivial count の最適化をサポートしました。 #60463 (Amos Bird)。
  • マルチスレッド INSERT において、複数スレッドからの chunk を単一の transform で集約することで、最大メモリ使用量を削減しました。#61047 (Yarik Briukhovetskyi)。
  • 固定的なメモリ割り当てを使用し、余分なバッファの割り当てを回避することで、Azure オブジェクトストレージ使用時のメモリ使用量を削減しました。 #63160 (SmitaRKulkarni).
  • ColumnNullable::size における仮想関数呼び出しの回数を削減しました。 #60556 (HappenLee).
  • 正規表現引数が1文字のときの splitByRegexp の処理を高速化。 #62696 (Robert Schulze).
  • 使用されているキーの最小値と最大値を追跡することで、8-bit および 16-bit キーを用いる集約を高速化しました。これにより、検証が必要なセルの数を削減できます。 #62746 (Jiebin Sun)。
  • 左辺が LowCardinality で右辺が定数の集合である場合の IN 演算子を最適化しました。 #64060 (Zhiguo Zhou).
  • ConcurrentHashJoin 内のハッシュテーブルの初期化と破棄にスレッドプールを使用します。 #64241 (Nikita Taranov).
  • スパースなカラムを持つテーブルにおける縦方向マージを最適化しました。 #64311 (Anton Popov).
  • 垂直マージ処理中にリモートファイルシステムからデータをプリフェッチできるようにしました。これにより、データをリモートファイルシステムに保存しているテーブルの垂直マージのレイテンシが改善されます。 #64314 (Anton Popov)。
  • ColumnSparse::filterisDefault への冗長な呼び出しを削減して、パフォーマンスを改善しました。 #64426 (Jiebin Sun).
  • 複数の非同期 getChildren リクエストを発行することで、find_super_nodes および find_big_family の keeper-client コマンドを高速化しました。 #64628 (Alexander Gololobov).
  • Nullable な数値型引数を取る least/greatest 関数を改善しました。 #64668 (KevinyhZou).
  • クエリプラン内の連続する 2 つのフィルタリングステップを 1 つにマージできるようにしました。これにより、フィルター条件を親ステップからプッシュダウンできる場合に、フィルタープッシュダウン最適化が改善されます。 #64760 (Nikolai Kochetov).
  • vertical final の実装における不具合のある最適化を削除し、vertical final アルゴリズムをデフォルトで再度有効にしました。 #64783 (Duc Canh Le).
  • フィルター式から ALIAS ノードを削除しました。これにより、新しいアナライザ使用時の PREWHERE を含むクエリのパフォーマンスがわずかに向上します。 #64793 (Nikolai Kochetov)。
  • OpenSSL のセッションキャッシュを再有効化。 #65111 (Robert Schulze).
  • 挿入時にスキップ索引および統計のマテリアライズを無効化するための設定(materialize_skip_indexes_on_insert および materialize_statistics_on_insert)を追加しました。 #64391 (Anton Popov).
  • 割り当てられたメモリサイズを使用して行グループのサイズを計算し、単一スレッドモードにおける Parquet writer のピークメモリ使用量を削減しました。 #64424 (LiuNeng).
  • スパースカラムのイテレータを改善し、size の呼び出し回数を削減。 #64497 (Jiebin Sun).
  • Azure Blob Storage へのバックアップ時にサーバーサイドコピーを使用するよう条件を更新。 #64518 (SmitaRKulkarni).
  • 多数のスキップ索引を持つテーブルに対する垂直マージ処理のメモリ使用量を最適化しました。 #64580 (Anton Popov).

改善

  • systemテーブルに対して SHOW CREATE TABLE を実行すると、そのテーブルがなぜ必要なのかを説明する、各テーブル固有の非常に便利なコメントが表示されるようになりました。 #63788 (Nikita Mikhaylov).
  • 関数 round(), roundBankers(), floor(), ceil() および trunc() の第2引数(scale)には、定数以外の値も指定できるようになりました。 #64798 (Mikhail Gorshkov).
  • 新しいディスクを追加した際に Distributed テーブルの storage policy をホットリロードできるようにしました。 #58285 (Duc Canh Le).
  • 高負荷状態のサービスにおけるスレッドスケジューリング時に発生しうる、MergeTree の索引解析でのデッドロックを回避しました。 #59427 (Sean Haynes).
  • S3 プロキシのサポートおよびトンネリングに関するいくつかの軽微なコーナーケースを修正しました。 #63427 (Arthur Passos).
  • io_uring の再送の可視性を向上。プロファイルイベント IOUringSQEsResubmits の名前を IOUringSQEsResubmitsAsync に変更し、新しいイベント IOUringSQEsResubmitsSync を追加。 #63699 (Tomer Shafir).
  • メタデータストレージ用ディスクの空き容量を確保するための新しい設定項目 metadata_keep_free_space_bytes を追加しました。 #64128 (MikhailBurdukov)。
  • plain_rewritable メタデータストレージによって作成および削除されるディレクトリ数と、ローカルとリモートの対応関係を保持するインメモリマップ内のエントリ数を追跡するメトリクスを追加しました。 #64175 (Julia Kartseva).
  • クエリキャッシュは、同一のクエリであっても設定が異なる場合は別のものとして扱うようになりました。これにより、limitadditional_table_filters などの異なる設定がクエリ結果に影響するケースでの堅牢性が向上します。 #64205 (Robert Schulze)。
  • オブジェクトストレージで、非標準的なエラーコード QpsLimitExceeded を再試行可能なエラーとして扱うようにしました。 #64225 (Sema Checherinda).
  • このテーブル用の ZooKeeper パスがすでに存在する場合、MergeTree テーブルを ReplicatedMergeTree テーブルに変換することを禁止しました。 #64244 (Kirill).
  • 平均的な出力ブロックのバイト数を制御するための新しい設定 input_format_parquet_prefer_block_bytes を追加し、input_format_parquet_max_block_size のデフォルト値を 65409 に変更しました。 #64427 (LiuNeng).
  • no_proxy 環境変数および ClickHouse のプロキシ設定で指定されたホストに対しては、プロキシをバイパスできるようにしました。 #63314 (Arthur Passos).
  • Keeper を起動する際には、グローバルスレッドプール内のスレッド数が常に十分に確保されるようにしました。 #64444 (Duc Canh Le).
  • ユーザーの設定ファイルに由来する設定は、オブジェクトストレージ上の MergeTree に対するマージおよびミューテーションには影響しません。 #64456 (alesapin).
  • オブジェクトストレージで、非標準エラーコード TotalQpsLimitExceeded を再試行可能なエラーとして扱えるようにしました。 #64520 (Sema Checherinda).
  • オープンソース版および ClickHouse Cloud 版の両方で Advanced Dashboard を更新し、「Maximum concurrent network connections」のチャートを含めるようにしました。 #64610 (Thom O'Connor).
  • zeros_mtgenerateRandom の進捗報告を改善。 #64804 (Raúl Marín).
  • サンプリングが現在有効かどうかを示すために、非同期メトリック jemalloc.profile.active を追加しました。これは prof.active に加えて使用される有効化の仕組みであり、呼び出しスレッドがサンプリングを行うには両方が有効である必要があります。 #64842 (Unalian).
  • allow_experimental_join_condition の重要マークを削除しました。このマークにより、バージョンが混在したクラスタにおいて分散クエリが正常に実行されない可能性がありました。 #65008 (Nikita Mikhaylov)。
  • サーバー側の非同期メトリクス DiskGetObjectThrottler* および DiskGetObjectThrottler* を追加しました。これらは、ディスク設定 s3_max_get_rpss3_max_put_rps で定義された 1 秒あたりのリクエスト数のレート制限と、ディスクでスロットリングの上限に達することなく送信できる現在のリクエスト可能数を反映します。メトリクスは、上限が設定されている各ディスクごとに定義されます。 #65050 (Sergei Trifonov).
  • Poco::ThreadPool 用のグローバルなトレースコレクタを初期化(Keeper などで必要)。#65239 (Kseniia Sumarokova)。
  • ユーザー作成時の bcrypt_hash のバリデーションを追加しました。 #65242 (Raúl Marín)。
  • PREWHERE の処理中および処理後に読み取られた行数を計測するためのプロファイルイベントを追加。 #64198 (Nikita Taranov)。
  • 並列レプリカ利用時の EXPLAIN PLAN にクエリを出力。 #64298 (vdimir).
  • allow_deprecated_functionsallow_deprecated_error_prone_window_functions に名前変更しました。 #64358 (Raúl Marín).
  • file テーブル関数において、ファイルディスクリプタにも max_read_buffer_size の設定が適用されるようにしました。 #64532 (Azat Khuzhin).
  • 未対応のストレージに対しては、materialized view であってもトランザクションを無効化するようにしました。 #64918 (alesapin).
  • 旧アナライザでの QUALIFY 句の使用を禁止しました。旧アナライザは QUALIFY を無視していたため、ミューテーションで予期しないデータ削除が発生する可能性がありました。 #65356 (Dmitry Novik).

バグ修正(公式安定版リリースにおけるユーザーにとって目に見える不具合)

  • Apache ORC ライブラリのバグを修正しました: すべてのプラットフォームにおける符号なし型および ARM 上の Int8 について、書き込み時の ORC 統計値の計算を修正しました。 #64563 (Michael Kolupaev).
  • CSV 形式における Tuple の扱いと解釈を、従来の ClickHouse の動作に戻しました。この変更により、実質的に https://github.com/ClickHouse/ClickHouse/pull/60994 は取り消され、次のいくつかの設定でのみ利用可能となります: output_format_csv_serialize_tuple_into_separate_columnsinput_format_csv_deserialize_separate_columns_into_tuple、および input_format_csv_try_infer_strings_from_quoted_tuples#65170 (Nikita Mikhaylov)。
  • 特定の状況下で、必要な GRANT がないにもかかわらず、ユーザーが default データベース上で自身の権限を昇格できてしまう権限エラーを修正しました。 #64769 (pufit).
  • UniqInjectiveFunctionsEliminationPass と uniqCombined が原因のクラッシュを修正しました。 #65188 (Raúl Marín).
  • セッション終了時に発生するダイジェスト不一致の原因となっていた ClickHouse Keeper のバグを修正しました。 #65198 (Aleksei Filatov)。
  • Distinct コンビネータに対して正しいメモリアライメントを行うようにしました。以前は、このコンビネータの使用時に不正なメモリ割り当てが行われ、クラッシュが発生する可能性がありました。 #65379 (Antonio Andelic).
  • DISTINCT とウィンドウ関数の併用時にクラッシュが発生する問題を修正しました。 #64767 (Igor Nikonov)。
  • 'set' スキップ索引が IN 句および indexHint() 使用時に正しく動作しなかった問題を修正しました。 #62083 (Michael Kolupaev).
  • パラメータ化されたビューの値を代入する際に関数を実行できるようになりました。 #63502 (SmitaRKulkarni)。
  • Parquet におけるメモリトラッキングを修正しました。 #63584 (Michael Kolupaev).
  • Tuple(Map(LowCardinality(String), String), ...) 型のカラムの読み込み処理を修正しました。 #63956 (Anton Popov)。
  • 異なる種類(式と関数)のエイリアス間で循環参照が発生した場合の Cyclic aliases エラーを修正しました。 #63993 (Nikolai Kochetov).
  • この修正により、クエリパイプライン内の各ビューについて、適切な定義者を持つ正しい再定義済みコンテキストが使用されるようになります。 #64079 (pufit).
  • analyzer を修正: INTERPOLATE を使用時に発生していた「Not found column」エラーを修正しました。 #64096 (Yakov Olkhovskiy)。
  • ファイルを格納しているディスクとは異なる認証情報を持つ S3 バケットにバックアップを作成できない問題を修正しました。 #64153 (Antonio Andelic).
  • クエリキャッシュは、異なるデータベースに対する同一内容のクエリを別のものとして区別するようになりました。以前の挙動には、テーブルの読み取り権限が不足している場合でも、その制限を回避するために悪用されうる問題がありました。 #64199 (Robert Schulze)。
  • StatusFile 内の ~WriteBufferFromFileDescriptor で捕捉されない例外が発生した際にプロセスが異常終了する可能性があった問題を修正。 #64206 (Kruglov Pavel).
  • ARRAY JOIN を含む分散クエリで発生していた duplicate alias エラーを修正しました。 #64226 (Nikolai Kochetov).
  • string から integer への想定外の accurateCast が行われる問題を修正。 #64255 (wudidapaopao).
  • OR グループ内に相互に排他的なアトムが含まれている場合の CNF の単純化を修正しました。 #64256 (Eduard Karacharov).
  • Query Tree のサイズ検証を修正。 #64377 (Dmitry Novik).
  • PREWHERE を含む Buffer テーブルで発生する Logical error: Bad cast の問題を修正。 #64388 (Nikolai Kochetov).
  • blob_storage_log をオブジェクトストレージ上に保存している場合の再帰的なロギングを防止しました。 #64393 (vdimir)。
  • デフォルト式を持つテーブルに対する CREATE TABLE AS クエリにおける不具合を修正しました。 #64455 (Anton Popov).
  • optimize_read_in_order が Nullable 型のキーを持つテーブルでの ORDER BY ... NULLS FIRST / LAST 句に対して正しく動作するように修正しました。 #64483 (Eduard Karacharov).
  • エイリアス付きの GLOBAL IN を含むクエリで発生していた Expression nodes list expected 1 projection names および Unknown expression or identifier エラーを修正しました。 #64517 (Nikolai Kochetov).
  • 定数 CTE を GROUP BY キーに含む分散クエリで発生していた Cannot find column エラーを修正。 #64519 (Nikolai Kochetov).
  • バックアップからの復元処理が、まだ復元されていない definer を持つ MV の作成によって妨げられている場合に発生するクラッシュループを修正しました。 #64595 (pufit).
  • フォーマッタが生成する文字列の長さが奇数で、かつ最後の文字が 0 の場合に、関数 formatDateTimeInJodaSyntax の出力が正しくなるよう修正しました。たとえば、SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D') は、以前は 15 を返していましたが、現在は正しく 150 を返します。 #64614 (LiuNeng).
  • -If コンビネータがすでに使用されている場合は、集約の書き換えを行わないようにしました。 #64638 (Dmitry Novik)。
  • float 型の型推論を修正(バッファが小さい場合。具体的には --max_read_buffer_size 1 のとき)。 #64641 (Azat Khuzhin).
  • 式を用いた有効期限 (TTL) が正しく動作しなくなる可能性のあった不具合を修正しました。 #64694 (alesapin).
  • 新しい analyzer において、常に真となる WHERE および PREWHERE 式が削除されてしまう問題を修正。 #64695 (Nikolai Kochetov).
  • startsWithendsWithmatchmultiSearchAny の結果を使ってフィルタリングする際に、トークンベースのテキストインデックス(ngrambffull_text)が不要な部分を過剰に除去してしまう問題を修正しました。 #64720 (Eduard Karacharov)。
  • UTF8::computeWidth 関数における ANSI CSI エスケープシーケンス処理の誤動作を修正しました。 #64756 (Shaun Struwig)。
  • サブクエリ間で ORDER BY / LIMIT BY が誤って削除されてしまう不具合を修正しました。 #64766 (Raúl Marín).
  • 混在した結合条件に含まれる Set に対するサブクエリを用いた不等結合(experimental)を修正。 #64775 (lgbo).
  • plain_rewritable ディスク上のローカルキャッシュで発生していたクラッシュを修正。 #64778 (Julia Kartseva).
  • Keeper の修正:mntr コマンドで zk_latest_snapshot_size に対して正しい値を返すように修正。 #64784 (Antonio Andelic).
  • Nested カラムを対象にした ARRAY JOIN を含む分散クエリで発生していた Cannot find column エラーを修正しました。#64755 を解決。 #64801 (Nikolai Kochetov).
  • SLRU キャッシュポリシーで発生していたメモリリークを修正。 #64803 (Kseniia Sumarokova).
  • S3 からデータを読み取るクエリ、HTTP プロトコル経由のクエリ、非同期挿入など、いくつかの種類のクエリでメモリトラッキングが正しく行われない可能性があった問題を修正しました。 #64844 (Anton Popov).
  • materialized view がソーステーブルとは異なる型のカラムを持つ場合に、その materialized view から PREWHERE 付きで読み取るクエリで発生していた Block structure mismatch エラーを修正しました。 #64611 を修正しました。 #64855 (Nikolai Kochetov)。
  • TTL を設定したテーブルで、サブクエリ + レプリケートされたデータベース + 並列レプリカ (parallel replicas) + analyzer を組み合わせた場合に、まれにクラッシュする不具合を修正しました。発生頻度は非常に低いですが、TTL とサブクエリの併用は行わないでください。 #64858 (alesapin).
  • 大規模なバッチ削除時に blob_storage_logDelete イベントが重複して記録される問題を修正。 #64924 (vdimir).
  • 設定ファイルに [Zoo]Keeper からの include が含まれている場合に、サーバー起動後に発生することがあった [Zoo]Keeper の Session moved to another server エラーを修正しました。#64986 (Alexander Tokmakov).
  • パラメーター化された VIEW に対して正しく動作していなかった ALTER MODIFY COMMENT クエリを修正しました https://github.com/ClickHouse/ClickHouse/pull/54211#65031 (Nikolay Degterinsky)。
  • cluster_secure_connection パラメータが有効な場合の DatabaseReplicated における host_id の扱いを修正しました。以前は、このパラメータが有効であっても、DatabaseReplicated によってクラスター内で作成されるすべての接続がセキュアなものになっていませんでした。 #65054 (Nikolay Degterinsky)。
  • StorageMerge での PREWHERE 最適化後に発生する Not-ready Set エラーを修正。 #65057 (Nikolai Kochetov).
  • File-like ストレージで finalized バッファへの書き込みを行わないように修正。 #65063 (Kruglov Pavel).
  • 循環エイリアスがある場合にクエリが無限に実行され続ける可能性がある問題を修正。 #64849 を修正。 #65081Nikolai Kochetov)。
  • INTERPOLATE (alias) を含むリモートクエリで Unknown expression identifier エラーが発生する問題を修正しました(new analyzer)。#64636 を修正。#65090Nikolai Kochetov)。
  • 集計処理の外側に算術演算を押し出す最適化を修正しました。新しいアナライザーでは、この最適化が一度しか適用されていませんでした。 #65104 (Dmitry Novik).
  • 新しいアナライザーでの集約関数名の書き換え処理を修正。 #65110 (Dmitry Novik).
  • クライアントソケットからリクエストボディ(の一部)を読み取っている最中に受信タイムアウトが発生した場合、200 OK ではなく 5xx を返すようにしました。 #65118 (Julian Maicher).
  • ヘッジリクエストで発生し得るクラッシュを修正。 #65206 (Azat Khuzhin).
  • Hashed および Hashed_Array Dictionary におけるショートサーキット評価のバグを修正し、未初期化の数値が読み出されてさまざまなエラーが発生する可能性があった問題を解消しました。 #65256 (jsc0218).
  • この PR は、IN 演算子の型変換処理中に、定数(IN 演算子の 2 番目のパラメータ)の型情報が常に保持されるようにします。そうしないと、型情報が失われることで、DateTime から Date への変換のように、一部の変換が失敗する可能性があります。この不具合を修正します(#64487)。#65315pn)。

ビルド/テスト/パッケージングの改善

  • LLVM XRay のサポートを追加。#64592 #64837 (Tomer Shafir).
  • S3/HDFS/Azure ストレージ実装を、IObjectStorage で動作する単一クラスに統合。同様に *Cluster、データレイクおよび Queue ストレージについても統合。#59767 (Kseniia Sumarokova).
  • MergeTreeData および DataPart への依存を取り除くために、data part writer をリファクタリング。#63620 (Alexander Gololobov).
  • KeyCondition とキー解析をリファクタリングし、PartitionPruner と単純な COUNT の最適化を改善。これは #60463 から分離されたもの。#61459 (Amos Bird).
  • すべての関数が正しいサイズのカラムで呼び出されていることを検証するアサーションを導入。#63723 (Raúl Marín).
  • ClickHouse サーバーデーモンを起動するために rc init スクリプトを使用する場合、network サービスを必須とするように変更。#60650 (Chun-Sheng, Li).
  • いくつかの遅いテストの規模を縮小。#64387 #64452 (Raúl Marín).
  • keeper-bench を使用して ZooKeeper のログをリプレイ実行。#62481 (Antonio Andelic).

ClickHouse リリース 24.5(2024-05-30)。プレゼンテーション動画

後方互換性のない変更

  • 「inverted indexes」を、より技術色が薄くユーザーフレンドリーな名称である「full-text indexes」に名称変更しました。これにより内部のテーブルメタデータも変更され、既存の(実験的な)inverted indexes を持つテーブルは利用できなくなります。アップグレード前にそのような索引を必ず DROP し、アップグレード後に再度作成してください。#62884Robert Schulze)。
  • 関数 neighborrunningAccumulaterunningDifferenceStartingWithFirstValuerunningDifference の使用は非推奨になりました(エラーを起こしやすいため)。代わりに適切なウィンドウ関数を使用する必要があります。これらを再度有効にするには、allow_deprecated_error_prone_window_functions = 1 を設定するか、compatibility = '24.4' 以下を設定してください。#63132Nikita Taranov)。
  • system.columns からのクエリは、多数のカラムが存在し、かつ多くのデータベースまたはテーブルに SHOW TABLES の権限が付与されていない場合でも、より高速に動作するようになります。以前のバージョンでは、対応するテーブルに SHOW TABLES を付与せずに個々のカラムに SHOW COLUMNS を付与した場合、system.columns テーブルにはこれらのカラムが表示されていましたが、新しいバージョンではそのテーブル全体をスキップすることに注意してください。また、クエリを遅くしていたトレースログメッセージ「Access granted」と「Access denied」を削除しました。#63439Alexey Milovidov)。

新機能

  • application/x-www-form-urlencoded 形式の単一レコードを読み書きするための Form フォーマットを追加しました。 #60199 (Shaun Struwig).
  • CROSS JOIN で圧縮を有効にできるようになりました。 #60459 (p1rattttt).
  • サイズが上限を超える場合に、一時ファイル上で CROSS JOIN を実行できるようになりました。 #63432 (p1rattttt).
  • 左表および右表の両方のカラムを含む不等条件での JOIN をサポートします(例: t1.y < t2.y)。有効化するには、SET allow_experimental_join_condition = 1 を実行します。 #60920 (lgbo)。
  • Map のキーとして Float32Float64Array(T)Map(K, V) および Tuple(T1, T2, ...) を使用できるようになりました。#54537 をクローズ。#59318 (李扬)。
  • EmbeddedRocksDB に対して、RocksDB の組み込み memtable に依存するのではなく、SST ファイルを作成して取り込むことでバルクロード機能を導入しました。これにより、特に StorageEmbeddedRocksDB テーブルへの長時間実行される insert クエリにおいて、インポート速度が向上します。さらに、EmbeddedRocksDB テーブル用の設定を導入しました。 #59163 #63324 (Duc Canh Le)。
  • input_format_tsv_crlf_end_of_line という設定を使用することで、TSV 形式で CRLF をパースできるようになりました。 #56257 をクローズ。 #59747Shaun Struwig)。
  • 省略されたフィールドに NULL 値を強制的に設定する新しい設定 input_format_force_null_for_omitted_fields#60887 (Constantine Peresypkin)。
  • 以前は、S3 ストレージおよび s3 テーブル関数は、tarball、zip、7z などのアーカイブファイルからの SELECT をサポートしていませんでした。現在は、S3 内のアーカイブに含まれるファイルを順次走査できるようになりました。 #62259 (Daniil Ivanik)。
  • 条件関数 clamp をサポート。 #62377 (skyoct).
  • NPy 出力フォーマットを追加しました。#62430 (豪肥肥).
  • Raw フォーマットを TSVRaw の同義語として扱うようにした。#63394 (Unalian)。
  • 新しい SQL 関数 generateUUIDv7 を追加し、バージョン 7 UUID(ランダムな成分を持つタイムスタンプベースの UUID)を生成できるようにしました。さらに、UUID からバイト列を抽出する新しい関数 UUIDToNum と、バージョン 7 UUID からタイムスタンプ成分を抽出する新しい関数 UUIDv7ToDateTime を追加しました。 #62852 (Alexey Petrunyaka)。
  • Linux および macOS 上で、プログラムの stdout が圧縮拡張子を持つファイルにリダイレクトされている場合、何も行わないのではなく、対応する圧縮方式で出力を圧縮するようにしました(INTO OUTFILE と同様の動作になります)。 #63662 (v01dXYZ).
  • アタッチされたテーブルが多数ある場合の警告メッセージを変更し、テーブル、ビュー、およびディクショナリを区別できるようにしました。 #64180 (Francisco J. Jurado Moreno).
  • ClickHouse サーバーの azureBlobStorage 関数で Azure Workload Identity を使用して Azure Blob Storage への認証を行えるようにしました。config で use_workload_identity パラメータが設定されている場合、認証には workload identity が使用されます。#57881Vinay Suryadevara)。
  • system.parts_columns テーブルに有効期限 (TTL) に関する情報を追加。 #63200 (litlig).

実験的機能

  • 事前にすべての型を把握していなくても、任意の型の値を保存できる Dynamic データ型を実装しました。Dynamic 型は allow_experimental_dynamic_type 設定を有効にすると利用できます。参考: #54864#63058Kruglov Pavel)。
  • MySQL への接続なしで MaterializedMySQL データベースを作成できるようにしました。#63397Kirill)。
  • ある DDL タスクが同じエラーで連続して max_retries_before_automatic_recovery 回(デフォルトでは 100 回)以上失敗した場合に、Replicated データベースのレプリカを自動的に lost とマークし、リカバリを開始するようにしました。また、エントリ実行の初期段階で例外がスローされた場合に DDL エントリがスキップされてしまう可能性があったバグも修正しました。#63549Alexander Tokmakov)。
  • StorageS3Queue において、s3queue_tracked_file_ttl_secs3queue_traked_files_limit に処理に失敗したファイルも含めてカウントするようにしました。#63638Kseniia Sumarokova)。

パフォーマンスの改善

  • ファイルシステムキャッシュでの競合をさらに削減しました (パート4)。バックグラウンドで追加のエビクションを行うことで(keep_free_space_size(elements)_ratio によって制御)、ファイルシステムキャッシュが上限まで埋まらないようにできます。これにより、クエリのための空き領域予約(tryReserve メソッド)へのプレッシャーが軽減されます。また、可能な限りロックフリーな方法で実行されるため、通常のキャッシュ利用をブロックしないはずです。 #61250 (Kseniia Sumarokova).
  • 新しく作成された PROJECTION ブロックのマージを INSERT 実行中にスキップするようにしました。 #59405 (Nikita Taranov).
  • 文字列関数 ...UTF8 について、入力文字列がすべて ASCII 文字であれば ASCII として処理するようにしました。https://github.com/apache/doris/pull/29799 から着想を得ています。全体として 1.07~1.62 倍の高速化が得られました。ピークメモリ使用量も一部のケースで減少している点に注意してください。 #61632 (李扬).
  • StorageS3 における選択 ({}) グロブのパフォーマンスを改善しました。 #62120 (Andrey Zvonov).
  • HostResolver が各 IP アドレスを複数回保持していました。リモートホストが複数の IP を持ち、何らかの理由(例えばファイアウォールルール)で一部の IP へのアクセスのみ許可され、一部は禁止されている場合、禁止された IP のレコードのうち最初のものだけが失敗としてマークされ、それ以外の禁止 IP も各試行ごとに選択されて失敗し得る状態でした。この問題を修正しても、120 秒ごとに DNS キャッシュが破棄され、IP が再び選択され得る状態になっていました。 #62652 (Anton Ivashkin).
  • 多数のカラムがある場合に、マージ時のソートを 2 倍高速化し、メモリ使用量を制御するための新しい設定 prefer_merge_sort_block_bytes を追加しました。 #62904 (LiuNeng).
  • clickhouse-local の起動がより高速になりました。以前のバージョンでは、誤って一時ディレクトリを削除していませんでしたが、現在は削除されます。これにより #62941 が解決されます。 #63074 (Alexey Milovidov).
  • 新しいアナライザーに対するマイクロ最適化を行いました。 #63429 (Raúl Marín).
  • DateTimeDateTime64 と比較する場合にも索引の解析が機能するようになりました。これにより #63441 が解決されます。 #63443 #63532 (Alexey Milovidov).
  • set の索引について、不要なデータを削除することで、若干(約 1.5 倍)高速化しました。 #64098 (Alexey Milovidov).
  • ファイルシステムキャッシュへの書き込み時にデータをコピーしないようにしました。 #63401 (Kseniia Sumarokova).
  • Azure Blob Storage を用いたバックアップで multicopy を使用するようになりました。 #64116 (alesapin).
  • 異なるコンテナ間でも Azure 向けの native copy を使用できるようにしました。 #64154 (alesapin).
  • Azure 向けの native copy を最終的に有効化しました。 #64182 (alesapin).

改良点

  • clickhouse-local と、そのショートカットである clickhouse および ch で、位置引数としてクエリまたはクエリを記述したファイルを指定して実行できるようにしました。例: ch "SELECT 1", ch --param_test Hello "SELECT {test:String}", ch query.sql。これにより #62361 がクローズされました。 #63081 (Alexey Milovidov)。
  • ローカルおよび Azure (azure_blob_storage) のオブジェクトストレージで plain_rewritable メタデータを有効にしました。 #63365 (Julia Kartseva).
  • 英語スタイルの Unicode 引用符(例: “Hello”、'world')をサポートしました。一般的にはあまり望ましくない仕様ですが、Google Docs のようなワードプロセッサでクエリを入力する場合には役立ちます。これにより #58634 が解決されました。#63381Alexey Milovidov)。
  • INSERT クエリのカラムリストで末尾のカンマを使用できるようにしました。例えば、INSERT INTO test (a, b, c, ) VALUES ... のように記述できます。 #63803 (Alexey Milovidov)。
  • Regexp フォーマットの例外メッセージを改善。 #63804 (Alexey Milovidov)。
  • Values フォーマットで末尾のコンマも許可されるようになりました。例えば、次のクエリが実行可能です: INSERT INTO test (a, b, c) VALUES (4, 5, 6,);#63810 (Alexey Milovidov)。
  • RabbitMQ が破損したメッセージに対して nack を送信するようにしました。Closes #45350. #60312 (Kseniia Sumarokova).
  • サンプリングクエリプロファイラの使用時など、非同期スタックのアンワインド処理中にデバッグ情報を解釈している際に発生していたクラッシュを修正しました。これにより #60460 が解決されます。 #60468 (Alexey Milovidov)。
  • ディスクの場合とストレージの場合で、S3 エラー 'no key' に対して異なるメッセージを出力するようにしました。 #61108 (Sema Checherinda).
  • プログレスバーは、system.zerossystem.zeros_mtsystem.numbers および system.numbers_mt ではすでに対応済み)からの LIMIT を伴う単純なクエリや、generateRandom テーブル関数に対しても動作するようになります。さらに、レコードの総数が max_rows_to_read 制限を超える場合は、より早いタイミングで例外をスローします。これにより #58183 がクローズされました。 #61823 (Alexey Milovidov)。
  • YAML 設定での「Merge Key」サポート(YAML の少し風変わりな機能なので、気にしなくて構いません)。 #62685 (Azat Khuzhin).
  • Replicated ソースで非決定的関数が使用された場合のエラーメッセージを改善しました。 #62896 (Grégoire Pineau).
  • remote から使用される Distributed over Distributed 用の interserver secret を修正。 #63013 (Azat Khuzhin).
  • YAML ファイルで include_from をサポートしました。ただし、代わりに config.d を使用することを推奨します #63106 (Eduard Karacharov)。
  • skim の候補から選択した後でも、ターミナルの既存の入力内容が保持されるようになりました。 #63261 (FlameFactory).
  • フィールドの幅(Pretty フォーマットや visibleWidth 関数において)が、ANSI エスケープシーケンスを正しく無視するようになりました。 #63270 (Shaun Struwig)。
  • 必要に応じて、エラーコード NUMBER_OF_ARGUMENTS_DOESNT_MATCH の使用箇所を、より正確なエラーコードに置き換えました。 #63406 (Yohann Jardin).
  • os_userclient_hostname が、clickhouse-client でのコマンドライン補完用クエリにおいて正しく設定されるようになりました。これにより #63430 が解決されました。 #63433 (Alexey Milovidov)。
  • max_block_size が 0 の場合は、デフォルト値に自動的に補正されるようにしました。 #63587 (Antonio Andelic).
  • バイナリの変更を検出した際に名前を自動的に変更できるようにするため、trace_log テーブルに build_id の ALIAS カラムを追加しました。これは #52086 への対応です。#63656Zimu Li)。
  • オブジェクトストレージディスクでの truncate 操作を有効化しました。 #63693 (MikhailBurdukov).
  • キーワードリストの読み込みはサーバーのリビジョンに依存するようになり、古いバージョンの ClickHouse サーバーでは無効化されます。CC @azat。 #63786 (Nikita Mikhaylov)。
  • ClickHouse のディスクは、実際のメタデータフォーマットバージョンを取得するためにサーバー設定を読み取るようになりました。 #63831 (Sema Checherinda).
  • stdout が TTY でない場合に Pretty フォーマットの制限(output_format_pretty_max_rows/output_format_pretty_max_value_width)を無効にするようにしました。 #63942 (Azat Khuzhin).
  • ClickHouse を AWS Lambda 内で使用する場合でも例外処理が機能するようになりました。作者: Alexey Coolnev#64014 (Alexey Milovidov)。
  • HTTP 経由で渡された無効な圧縮データに対しては、CORRUPTED_DATA ではなく CANNOT_DECOMPRESS をスローするようにしました。 #64036 (vdimir).
  • Pretty フォーマットで単一の大きな数値に表示されるツールチップが、Nullable および LowCardinality でも動作するようになりました。これにより #61993 がクローズされました。 #64084 (Alexey Milovidov)。
  • インデックスを用いたパーツフィルタリング処理の周辺で、メトリクス、ログ、スレッド名を追加。 #64130 (Alexey Milovidov).
  • ATTACH 時には allow_suspicious_primary_key を無視し、ALTER 時に検証するようにしました。 #64202 (Azat Khuzhin).

ビルド/テスト/パッケージングの改善

  • ClickHouse は clang-18 でビルドするようになりました。clang-tidy-18 による多くの新しいチェックを有効化しました。#60469 (Alexey Milovidov).
  • ClickHouse の新しいプラットフォームとして、loongarch64 を実験的にサポートしました。#63733 (qiangxuhui).
  • Dockerfile は https://github.com/docker-library/official-images/pull/15846 にて Docker 公式ライブラリによるレビューを受けました。#63400 (Mikhail f. Shiryaev).
  • CI の各ビルドについて、各翻訳単位に含まれるすべてのシンボル情報を CI データベースに収集するようにしました。これにより #63494 がクローズされます。#63495 (Alexey Milovidov).
  • Apache Datasketches ライブラリを更新しました。これにより #63858 が解消されます。#63923 (Alexey Milovidov).
  • バイナリをクロスコンパイルする際に、aarch64 Linux 向けの GRPC サポートを有効化しました。#64072 (alesapin).
  • aarch64 上での SIGSEGV 発生時のスタックアンワインドを修正しました(シグナル用スタックが小さいことが原因)。#64058 (Azat Khuzhin).

不具合修正

  • デフォルトで enable_vertical_final 設定を無効化しました。この機能にはバグがあるため、使用しないでください。#64543#64544 (Alexander Tokmakov)。
  • 複数の分片を使用している場合にバックアップが作成できない問題を修正 #57684 (Vitaly Baranov)。
  • CREATE クエリのカラムリストから MV の内部テーブルへのプロジェクション/索引/プライマリキーの受け渡しを修正しました #59183 (Azat Khuzhin).
  • boundRatio の誤ったマージを修正 #60532 (Tao Wang)。
  • 一部の関数を const な低カーディナリティカラムに対して呼び出すとクラッシュする問題を修正 #61966 (Michael Kolupaev)。
  • テーブルが adaptive granularity を使用していない場合に、FINAL 付きクエリが誤った結果を返す問題を修正 #62432 (Duc Canh Le)。
  • メモリコントローラ用の cgroups v2 サポート検出を改善 #62903 (Robert Schulze)。
  • クライアントでの外部テーブル再利用時の不具合を修正しました #62964Azat Khuzhin)。
  • untuple と未解決ラムダに起因するクラッシュを修正。 #63131 (Raúl Marín)。
  • 接続受け付けのためのサーバーの早すぎる待受開始を修正 #63181 (alesapin)。
  • DROP PART コマンド実行後に再起動した際の、交差しているパーツの問題を修正 #63202 (Han Fei)。
  • 起動時に SQL セキュリティのデフォルト設定が正しく読み込まれるよう修正しました #63209 (pufit).
  • JOIN フィルタプッシュダウン時の filter join に関する不具合を修正 #63234 (Maksim Kita).
  • AzureObjectStorage::listObjects の無限ループを修正 #63257 (Julia Kartseva).
  • CROSS JOIN が join_algorithm 設定を無視する不具合 #63273 (vdimir).
  • WriteBufferToFileSegment および StatusFile の finalize 処理の不具合を修正 #63346 (vdimir).
  • まれなケースで、ALTER の後に実行される SELECT クエリで発生する論理エラーを修正 #63353 (alesapin)。
  • session_timezone を使用して X-ClickHouse-Timezone ヘッダーを修正 #63377 (Andrey Zvonov)。
  • WITH ROLLUP を使用したグルーピングと LowCardinality 型の併用時に発生するデバッグアサーションを修正。 #63398 (Raúl Marín).
  • group_by_use_nulls に関する軽微な修正 #63405 (vdimir)。
  • テーブルメタデータからプロジェクションが削除されているが、パーツ側には依然としてプロジェクションが含まれている場合の、プロジェクションパーツのバックアップ/リストア処理を修正しました #63426 (Kseniia Sumarokova)。
  • MySQL の Dictionary ソースを修正しました #63481 (vdimir).
  • データなしの AsyncInsertFlush で QueryFinish を挿入 #63483 (Raúl Marín).
  • Fix: system.query_log の used_dictionaries が空になる不具合を修正 #63487 (Eduard Karacharov).
  • MergeTreePrefetchedReadPool の安全性を向上しました #63513 (Antonio Andelic).
  • Sentry を有効化している場合に、終了時に発生するクラッシュを修正(OpenSSL が Sentry より先に破棄されていたことが原因)#63548 (Azat Khuzhin).
  • Keyed ハッシュにおける Array および Map のサポートを修正 #63628 (Salvatore Mesoraca)。
  • Parquet および(場合によっては)StorageMerge に対するフィルタープッシュダウンの不具合を修正 #63642 (Michael Kolupaev)。
  • ZooKeeper パスが既に存在する場合は Replicated への変換を行わないようにしました #63670 (Kirill).
  • Analyzer: VIEW が必要なカラムのみを読み込むようになりました #63688 (Maksim Kita)。
  • Analyzer: WINDOW の再定義を禁止 #63694 (Dmitry Novik).
  • flatten_nested は experimental な Replicated データベースで正常に動作していませんでした。 #63695 (Nikolai Kochetov).
  • #63653 #63722 を修正(Nikolai Kochetov)。
  • Array(Nothing) から Map(Nothing, Nothing) へのキャストを許可しました #63753 (Nikolai Kochetov)。
  • partial_merge join における ILLEGAL_COLUMN エラーを修正 #63755 (vdimir)。
  • 修正: ウィンドウ関数における冗長な DISTINCT を削除 #63776 (Igor Nikonov)。
  • SYSTEM UNLOAD PRIMARY KEY でクラッシュが発生する可能性のあった問題を修正しました #63778 (Raúl Marín)。
  • 循環するエイリアスが重複していたクエリを修正しました。 #63791 (Nikolai Kochetov)。
  • TokenIterator を、本来意図されていたとおり遅延評価にした #63801 (Alexey Milovidov).
  • S3 URI の endpoint_subpath 設定を追加 #63806Julia Kartseva)。
  • ParallelReadBuffer におけるデッドロックを修正 #63814 (Antonio Andelic)。
  • JOIN フィルタのプッシュダウンにおける等価カラムの処理を修正 #63819 (Maksim Kita)。
  • Lazy データベースで DROP を実行した後に、すべてのディスクからデータを削除するようにしました。 #63848 (MikhailBurdukov).
  • parallel replicas と new analyzer を使用している MV からの読み取り時に誤った結果が返る問題を修正 #63861 (Nikita Taranov)。
  • keeper-client の find_super_nodes および find_big_family コマンドの不具合を修正 #63862 (Alexander Gololobov)。
  • lambda の実行名を更新 #63864 (Nikolai Kochetov)。
  • CPU/Real profiler によって発生する SIGSEGV を修正 #63865 (Azat Khuzhin)。
  • EXPLAIN CURRENT TRANSACTION クエリを修正。#63926Anton Popov)。
  • analyzer を修正: “turtles all the way down...” 状態になっていた問題を修正。 #63930 (Yakov Olkhovskiy)。
  • plain_rewritable ディスクで一部の ALTER TABLE コマンドが使用できるようになりました #63933 (Julia Kartseva)。
  • 分散クエリにおける再帰CTEの修正 #63939 (Maksim Kita).
  • Analyzer: COLUMNS の解決ロジックを修正 #63962 (Dmitry Novik).
  • analyzer 使用時の LIMIT BY と skip_unused_shards #63983 (Nikolai Kochetov)。
  • 一部の不要なコード(experimental Kusto)に対する修正 #63992 (Yong Wang)。
  • 信頼できないバイナリ入力を、より安全な方法でデシリアライズするようにしました #64024 (Robert Schulze).
  • MergeTree ファミリー以外のテーブルを対象とする Distributed テーブルに対し、SETTING final = 1 を指定したクエリの解析を修正。 #64037 (Nikolai Kochetov)。
  • recoverLostReplica に不足していた設定を追加 #64040 (Raúl Marín)。
  • analyzer を用いた SQL のセキュリティアクセスチェックの不具合を修正しました #64079 (pufit)。
  • Fix analyzer: DAG では interpolate 式のみが使用されるように修正 #64096 (Yakov Olkhovskiy).
  • Azure バックアップで、非ネイティブコピーの場合に max_upload_part_size ではなく読み取りバッファサイズである 1 MiB 単位でマルチパートブロックを書き込むように修正しました #64117 (Kseniia Sumarokova)。
  • バックアップコピー時のフォールバック処理を正しく行うよう修正 #64153 (Antonio Andelic).
  • CREATE TABLE を materialized view として作成する際に発生する LOGICAL_ERROR を防止 #64174 (Raúl Marín).
  • Query Cache: 異なるデータベースに対する同一のクエリを別のクエリとして扱うようにしました #64199 (Robert Schulze)。
  • Keeper において text_log を無視するようにしました #64218 (Antonio Andelic).
  • 論理エラーを修正: prewhere 句を使用する Buffer テーブルでの不正なキャスト。 #64388 (Nikolai Kochetov).

ClickHouse リリース 24.4(2024-04-30)。プレゼンテーション動画

アップグレードに関する注意事項

  • clickhouse-odbc-bridgeclickhouse-library-bridge は、現在は別々のパッケージになっています。これにより #61677 がクローズされました。 #62114Alexey Milovidov)。
  • レプリカからの実験的な並列読み取りで使用される max_parallel_replicas を、意味をなさないため 0 に設定できないようにしました。#60140 をクローズ。 #61201Kruglov Pavel)。
  • 非推奨の LIVE VIEW 機能の一部である INSERT WATCH クエリのサポートを削除しました。 #62382Alexey Milovidov)。
  • optimize_monotonous_functions_in_order_by 設定を削除しました。 #63004Raúl Marín)。
  • Replicated データベースエンジンから experimental タグを削除しました。現在はベータ段階です。 #62937Justin de Guzman)。

新機能

  • 再帰 CTE をサポートしました。#62074Maksim Kita)。
  • QUALIFY 句をサポートしました。#47819 をクローズしました。#62619Maksim Kita)。
  • テーブルエンジンに対する権限付与が可能になり、既存ユーザーの挙動には影響しないようになりました。#60117jsc0218)。
  • INSERT 操作をサポートし、ローカルにメタデータを保存する必要がない書き換え可能な S3 ディスクを追加しました。主なユースケースは system テーブル用です。#61116Julia Kartseva)。
  • クライアントでの入力中のシンタックスハイライトが、(以前のレキサーレベルではなく)構文レベルで動作するようになりました。#62123Alexey Milovidov)。
  • DROP TABLE a, b, c のように、複数テーブルを同時に削除することをサポートしました。#58705zhongyuankai)。
  • ALTER MODIFY SETTING による memory テーブルの設定変更をサポートしました。例: ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;#62039zhongyuankai)。
  • HTTP インターフェイスに role クエリパラメータを追加しました。これは SET ROLE x と同様に動作し、ステートメントが実行される前にロールを適用します。HTTP インターフェイスでは複数ステートメントが許可されず、SET ROLE x とステートメント本体を同時に送信できないという制限を、この方法で回避できます。?role=x&role=y のように複数ロールを指定することも可能で、これは SET ROLE x, y と同等です。#62669Serge Klochkov)。
  • テーブルのプライマリキーによるメモリ使用量を解放するための SYSTEM UNLOAD PRIMARY KEY を追加しました。#62738Pablo Marcos)。
  • system.text_logvalue1, value2, ..., value10 カラムを追加しました。これらのカラムには、メッセージのフォーマットに使用された値が格納されます。#59619Alexey Katsman)。
  • 挿入時に割り当てられた、ブロック内での元の行番号を保持する永続仮想カラム _block_offset を追加しました。カラム _block_offset の永続化は、MergeTree の設定 enable_block_offset_column によって有効化できます。パーツの最小ブロック番号または mutation バージョンのいずれかを含む仮想カラム _part_data_version を追加しました。永続仮想カラム _block_number は、もはや実験的とは見なされません。#60676Anton Popov)。
  • JSON 入力フォーマットで不正なエスケープシーケンスを保存できるようにするための設定 input_format_json_throw_on_bad_escape_sequence を追加しました。これを無効にすると、不正なエスケープシーケンスを許容して保存できます。#61889Kruglov Pavel)。

パフォーマンスの改善

  • 等価な Set を用いた JOIN フィルターのプッシュダウンの改善。 #61216 (Maksim Kita)。
  • JOIN の後のフィルタが常にデフォルト値の行だけを除外する場合に、OUTER JOININNER JOIN に変換する最適化を適用します。この最適化は query_plan_convert_outer_join_to_inner_join 設定で制御でき、デフォルトで有効になっています。 #62907 (Maksim Kita).
  • AWS S3 向けの改善。クライアントはサーバーにヘッダー 'Keep-Alive: timeout=X' を送信する必要があります。クライアントがそのヘッダーを含むサーバーからのレスポンスを受信した場合は、サーバーから送られてきた値を使用しなければなりません。また、接続クローズ時の競合状態を避けるため、クライアント側では期限切れ間近の接続は使用しない方が望ましいです。#62249 (Sema Checherinda)。
  • SELECT クエリに対する mutation のオーバーヘッドを削減 (v2)。 #60856 (Azat Khuzhin)。
  • PODArray 内でより頻繁に呼び出される関数が、強制的にインライン展開されるようになりました。 #61144 (李扬)。
  • 必要なカラムをすべて読み終えた時点でオブジェクトの残りの部分をスキップすることで、JSON のパースを高速化しました。 #62210 (lgbo).
  • file/s3/hdfs/url/... テーブル関数からの単純な INSERT SELECT のパフォーマンスを改善しました。並列パースに使用するスレッド数を制御するために、個別の max_parsing_threads SETTING を追加しました。 #62404 (Kruglov Pavel).
  • 関数 to_utc_timestampfrom_utc_timestamp が約 2 倍高速化されました。 #62583 (KevinyhZou).
  • Functions parseDateTimeOrNullparseDateTimeOrZeroparseDateTimeInJodaSyntaxOrNull および parseDateTimeInJodaSyntaxOrZero は、入力にほとんど解析不能な値が含まれている場合に、従来より大幅に(10倍〜1000倍)高速に動作するようになりました。 #62634 (LiuNeng)。
  • system.query_cache に対する SELECT 文が、クエリキャッシュに多数のエントリ(例: 100,000 件超)が含まれている場合に、これまでより顕著に高速化されました。 #62671 (Robert Schulze)。
  • ファイルシステムキャッシュの競合をさらに削減(パート3):空き容量の予約を試みる際にロックを取得せずに、ファイルシステムからの削除を実行するよう変更しました。 #61163 (Kseniia Sumarokova)。
  • ファイルシステムキャッシュの動的なサイズ変更を高速化しました。 #61723 (Kseniia Sumarokova).
  • INVALIDATE_QUERY を使用する Dictionary のソースが、起動時に 2 回再読み込みされることがなくなりました。 #62050 (vdimir).
  • 主キーを含むブール式の後に冗長な = 1 または = 0 が追加されると、プライマリインデックスが使用されなくなる問題を修正しました。例えば、SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1 および SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 の両方が、本来はプライマリインデックスを利用できるにもかかわらず全表スキャンを実行していました。 #62142 (josh-hildred).
  • system.remote_data_paths から結果全体を 1 つの大きな chunk に蓄積するのではなく、chunk のストリームを返すようにしました。これにより、メモリ消費を抑えつつ、途中経過の表示やクエリのキャンセルが可能になります。 #62613 (Alexander Gololobov).

実験的機能

  • azure_allow_parallel_part_upload 設定により、Azure Blob Storage 向けの並列書き込みバッファをサポートしました。#62534 (SmitaRKulkarni)
  • Userspace page cache が静的 Web ストレージ(disk(type = web))でも動作するようになりました。クライアント設定 use_page_cache_for_disks_without_file_cache=1 を使用して有効化できます。#61911 (Michael Kolupaev)
  • Variant 型で Bool および数値のバリアント値を疑わしいものとして扱わないようにしました。#61999 (Kruglov Pavel)
  • パース処理を用いて、String から Variant への変換を改善しました。#62005 (Kruglov Pavel)
  • JSONExtract 関数での Variant のサポートを追加しました。#62014 (Kruglov Pavel)
  • Variant を比較可能としてマークし、主キーで使用できるようにしました。#62693 (Kruglov Pavel)

改善

  • 利便性のため、SELECT * FROM numbers()SELECT * FROM system.numbers と同様に、制限なしで動作します。 #61969 (YenchangChan).
  • Kafka 設定に対して、コンシューマー用/プロデューサー用の個別タグを導入しました。これにより、コンシューマー用プロパティがプロデューサーインスタンスに、またその逆が指定されている場合に、librdkafka(多くのバグを含む品質の低い C ライブラリ)から出力される警告(例: Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance)を回避できます。Closes: #58983#58956Aleksandr Musorin)。
  • 関数 date_diffage は、結果をマイクロ秒精度ではなくナノ秒精度で計算するようになりました。また、これらの関数では unit パラメータの値として nanosecond(または nanosecondsns)も指定できるようになりました。 #61409 (Austin Kothig)。
  • date_trunc にナノ秒、マイクロ秒、ミリ秒単位を追加しました。 #62335 (Misz606).
  • 証明書の再読み込み時に証明書チェーンも再読み込みするようにしました。 #61671 (Pervakov Grigorii).
  • そのレプリカパスにアクティブなレプリカが存在する場合はテーブルを ATTACH できないようにして、エラー #60432 の発生を防ぐようにしました。 #61876 (Arthur Passos)。
  • clickhouse-local において input のサポートを実装しました。 #61923 (Azat Khuzhin).
  • strictnessANYJoin テーブルエンジンは、再読み込み後も結果が一貫するようになりました。同じキーを持つ複数の行が挿入された場合、最初の行が優先されるようになりました(以前は、テーブルのロード時にランダムに選択されていました)。close #51027#61972 (vdimir)。
  • Apache Arrow スキーマから Nullable カラム型を自動推論します。 #61984 (Maksim Kita).
  • 集計時の集約状態の並列マージをキャンセルできるようにしました。例: uniqExact#61992 (Maksim Kita)。
  • system.keywords をサジェストの生成に使用し、内部処理のあらゆる箇所でも同様に利用するようにしました。 #62000 (Nikita Mikhaylov).
  • ReplicatedMergeTree に対する OPTIMIZE FINAL は、現在進行中のマージ処理が完了するのを待ってから、最終マージのスケジューリングを再試行するようになりました。これにより、通常の MergeTree の動作により近い挙動になります。 #62067 (Nikita Taranov).
  • Hive のテキストファイルからデータを読み取る際、これまでは Hive テキストファイルの最初の行を使って入力フィールド数をその行のフィールド数に合わせて調整していましたが、最初の行のフィールド数が Hive テーブルで定義されたカラム数と一致しない場合がありました。例えば Hive テーブルが 3 カラムを持つように test_tbl(a Int32, b Int32, c Int32) と定義されているのに、テキストファイルの最初の行にはフィールドが 2 つしかない場合です。この状況では、入力フィールド数は 2 にリサイズされてしまい、その後の行に 3 フィールドが存在しても 3 つ目のフィールドが読み取られず、デフォルト値の 0 が設定されてしまいますが、これは正しくありませんでした。#62086 (KevinyhZou).
  • CREATE AS はテーブルコメントをコピーします。 #62117 (Pablo Marcos).
  • zookeeper テーブルにクエリの進行状況を追加しました。 #62152 (JackyWoo)。
  • トレースコレクター(Real および CPU)をサーバー全体で有効化できるようにしました。 #62189 (alesapin).
  • 設定 lightweight_deletes_sync を追加しました(デフォルト値: 2 - すべてのレプリカが同期的に完了するまで待機)。この設定は mutations_sync に似ていますが、論理削除の動作のみに影響します。 #62195 (Anton Popov).
  • カスタム設定の値を解析する際に、ブール値と整数を区別するようにしました。SET custom_a = true; SET custom_b = 1; #62206Vitaly Baranov)。
  • AWS Private Link Interface エンドポイントを介した S3 アクセスに対応しました。 #60021#31074#53761 をクローズしました。 #62208 (Arthur Passos)。
  • UDF 用のディレクトリが存在しない場合に、clickhouse-client がそれを作成しないようにしました。これにより #59597 が解決されました。#62366Alexey Milovidov)。
  • クエリキャッシュは、system テーブル(system.*information_schema.*INFORMATION_SCHEMA.*)に対するクエリ結果をキャッシュしなくなりました。 #62376 (Robert Schulze).
  • MOVE PARTITION TO TABLE クエリは、パーツ数の上限を超えることを避けるために、実行が遅延されたり、TOO_MANY_PARTS 例外をスローしたりする場合があります。同じ INSERT クエリに対して適用されるものと同一の設定および制限が適用されます(max_parts_in_totalparts_to_delay_insertparts_to_throw_insertinactive_parts_to_throw_insertinactive_parts_to_delay_insertmax_avg_part_size_for_too_many_partsmin_delay_to_insert_ms および max_delay_to_insert の各設定を参照)。 #62420 (Sergei Trifonov).
  • macOS におけるデフォルトのインストールディレクトリを /usr/bin から /usr/local/bin に変更しました。これは、macOS El Capitan (2015) で導入された Apple の System Integrity Protection により、sudo を使用しても /usr/bin への書き込みを行えないためです。 #62489 (haohang)。
  • transform 関数が常に最初に一致した値を返すようにしました。 #62518 (Raúl Marín)。
  • システムテーブル blob_storage_log に不足していた hostname カラムを追加しました。 #62456 (Jayme Bird).
  • 他の system テーブルとの整合性を保つため、system.backup_log にカラム event_time が追加されました。 #62541 (Jayme Bird)。
  • テーブル system.backup_log は、他の _log テーブルエンジンと同様に、event_date, event_time を「default」ソートキーとして持つようになりました。 #62667 (Nikita Mikhaylov).
  • RESTORE 実行時にテーブルの DEFAULT 式が評価されないようにしました。 #62601 (Vitaly Baranov).
  • S3 ストレージおよびバックアップにも、S3 ディスクと同じデフォルトの keep-alive 設定が必要になりました。 #62648 (Sema Checherinda).
  • 単一のテーブルを利用する複数のコンシューマからのログメッセージを識別できるようにするため、多数のバグで悪名高い C ライブラリである librdkafka のクライアント識別子をログメッセージに追加しました。 #62813 (János Benjamin Antal).
  • Replicated データベースの ZooKeeper パスで {uuid} および {database} という特殊なマクロを使用できるようにしました。 #62818 (Vitaly Baranov)。
  • HTTP リクエストで、別の認証スキームを使用する場合でも quota key を利用できるようにしました。 #62842 (Kseniia Sumarokova).
  • clickhouse clientclickhouse local におけるコマンドライン引数 --help の出力をより簡潔にしました。これまでの詳細な出力は、今後は --help --verbose によって生成されます。 #62973 (Yarik Briukhovetskyi).
  • log_bin_use_v1_row_events は MySQL 8.3 で削除されたため、それに対応して実験的な MaterializedMySQL エンジンを調整しました #60479#63101Eugene Klimov)。作者: Nikolay Yankin。

ビルド/テスト/パッケージングの改善

バグ修正(公式安定版リリースにおけるユーザーに見える不具合)

  • クォーラム挿入トランザクションを取り消す際に発生していた論理エラーを修正。 #61953 (Han Fei).
  • FILTER 句を伴う COUNT(*) 使用時のパーサーエラーを修正 #61357 (Duc Canh Le)。
  • group_by_use_nulls と grouping sets、analyzer、materialize/constant の組み合わせ時に発生する論理エラーを修正。 #61567 (Kruglov Pavel).
  • 移動済みパーツを削除する前にマージをキャンセルする #61610 (János Benjamin Antal).
  • Apache Arrow で発生していた異常終了を修正 #61720 (Kruglov Pavel).
  • 特定のディスクに対応する正しいパス上で convert_to_replicated フラグを検索するようにしました #61769 (Kirill).
  • distributed_foreground_insert/distributed_background_insert_batch において発生する可能性のある接続のデータ競合を修正 #61867 (Azat Khuzhin)。
  • 行入力フォーマットでスキップ可能にするため、CANNOT_PARSE_ESCAPE_SEQUENCE エラーをパースエラーとしてマークするようにしました #61883 (Kruglov Pavel)。
  • http_wait_end_of_query が使用されている場合の HTTP 出力フォーマットにおける例外メッセージの書き出しを修正しました #61951 (Kruglov Pavel)。
  • LowCardinality と JSONExtact 関数の併用時の問題を正しく修正しました #61957 (Nikita Mikhaylov).
  • Row Policy に式が設定されていない場合に Engine Merge がクラッシュする不具合 #61971 (Ilya Golshtein).
  • WriteBufferAzureBlobStorage のデストラクタで発生する未処理例外を修正 #61988 (SmitaRKulkarni).
  • ReplicatedMergeTree でカラム定義のない CREATE TABLE 文の処理を修正 #62040 (Azat Khuzhin)。
  • 複合シャーディングキー使用時の optimize_skip_unused_shards_rewrite_in を修正 #62047 (Azat Khuzhin)。
  • ReadWriteBufferFromHTTP がリダイレクト時に Host ヘッダーを正しく設定するよう修正 #62068 (Sema Checherinda).
  • 外部テーブルでデータ型 Bool をパースできない問題を修正 #62115 (Duc Canh Le)。
  • Analyzer: クエリパラメータ解決の不具合を修正 #62186 (Dmitry Novik).
  • 読み取り専用モードでのパーツ復元を修正 #62207 (Vitaly Baranov).
  • SQL UDF を含む索引定義でクラッシュが発生する問題を修正 #62225 (vdimir)。
  • analyzer 使用時に generateRandom で NULL が乱数シードとして使用される問題を修正。 #62248 (Nikolai Kochetov).
  • Distinct Transform で const カラムを正しく扱うようにしました #62250 (Antonio Andelic)。
  • FINAL 修飾子付きクエリのパーツスプリッタを修正しました #62268 (Nikita Taranov).
  • Analyzer: パラメータ化された VIEW に対するエイリアスの解決を修正 #62274 (Dmitry Novik)。
  • Analyzer: 親スコープからの名前解決の不具合を修正 #62281 (Dmitry Novik).
  • Nullable な非ネイティブ数値カラムに対する argMax を修正 #62285 (Raúl Marín).
  • Ordinary データベースにおける materialized view の BACKUP および RESTORE の不具合を修正 #62295 (Vitaly Baranov)。
  • Context 内のスカラー値で発生するデータレースを修正 #62305 (Kruglov Pavel)。
  • materialized view のプライマリキーを修正 #62319 (Murat Khairulin).
  • マルチスレッド挿入パイプライン非対応のテーブルに対しては構築しないようにしました #62333 (vdimir).
  • 分散クエリにおける位置引数の処理を行うアナライザーを修正 #62362 (flynn)。
  • analyzer における Merge エンジンでの additional_table_filters によるフィルタープッシュダウンを修正 #62398 (Kruglov Pavel)。
  • analyzer を使用する GLOBAL IN テーブルクエリを修正。 #62409 (Nikolai Kochetov).
  • パーティション書き込み時に S3/HDFS/Azure 向けエンジンで truncate_on_insert / create_new_file_on_insert 設定が正しく反映されるようにしました #62425 (Kruglov Pavel).
  • AzureBlobStorage 用のバックアップ復元パスを修正。#62447 (SmitaRKulkarni)。
  • SimpleSquashingChunksTransform を修正 #62451Nikita Taranov)。
  • ネストされたラムダのキャプチャを修正。 #62462 (Nikolai Kochetov).
  • protobuf の再帰型を読み取る際のクラッシュを回避 #62506 (Raúl Marín)。
  • 1つのパーティションを同一パーティションへ移動する操作に関するバグを修正 #62524 (helifu)。
  • LIMIT におけるスカラーサブクエリの不具合を修正 #62567 (Nikolai Kochetov).
  • 実験的かつサポート対象外で、そもそもあまり気に入っていない Hive エンジンで発生していたセグメンテーションフォールトを修正しました。 #62578 (Nikolay Degterinsky).
  • groupArraySorted 関数におけるメモリリークを修正 #62597 (Antonio Andelic)。
  • largestTriangleThreeBuckets 関数におけるクラッシュを修正 #62646 (Raúl Marín)。
  • より大きな分解能に対する tumble[Start,End] および hop[Start,End] の動作を修正 #62705Jordi Villar)。
  • argMin/argMax コンビネータの状態を修正しました #62708 (Raúl Marín)。
  • キャッシュロック競合の最適化により一時データのキャッシュが失敗していた問題を修正 #62715 (Kseniia Sumarokova)。
  • mergeTreeIndex 関数で発生するクラッシュを修正 #62762 (Anton Popov).
  • 修正: 更新: ネストされたマテリアライズドカラム: サイズチェックの不具合を修正 #62773 (Eliot Hautefeuille).
  • analyzer を使用した CTE において FINAL 修飾子が適用されない問題を修正 #62811 (Duc Canh Le)。
  • JSON フォーマットと HTTP インターフェースの使用時に formatRow 関数で発生するクラッシュを修正 #62840 (Anton Popov)。
  • Azure: エンドポイントオブジェクトから最終的な URL を組み立てる処理を修正 #62850 (Daniel Pozo Escalona).
  • GCD コーデックの不具合を修正 #62853 (Nikita Taranov)。
  • ハイパーレクタングルにおける LowCardinality(Nullable) キーの不具合を修正 #62866Amos Bird)。
  • 入力値が UInt32 を超える場合に、joda 構文使用時の fromUnixtimestamp が正しく動作するよう修正 #62901 (KevinyhZou)。
  • sum(Nullable) に対して optimize_rewrite_aggregate_function_with_if を無効化しました #62912 (Raúl Marín)。
  • ソーステーブル側のカラム型が異なる StorageBuffer に対する PREWHERE を修正。 #62916 (Nikolai Kochetov).
  • キャッシュキー用ディレクトリの作成失敗時の処理を一時データキャッシュが誤って行っていた問題を修正しました #62925 (Kseniia Sumarokova)。
  • gRPC: IPv6 ピアとの接続時に発生するクラッシュを修正 #62978 (Konstantin Bogdanov).
  • レプリケートフェッチ中に発生する可能性のある CHECKSUM_DOESNT_MATCH(およびその他)を修正 #62987 (Azat Khuzhin)。
  • キャッシュ内の一時データに関連して発生する未捕捉例外による異常終了を修正しました #62998Kseniia Sumarokova)。
  • optimize_rewrite_aggregate_function_with_if の暗黙的な型変換を修正 #62999 (Raúl Marín).
  • ~RestorerFromBackup で未処理の例外が発生する問題を修正 #63040 (Vitaly Baranov)。
  • セカンダリクエリの GROUP BY キーからサーバー定数を削除しないようにしました。#63047 (Nikolai Kochetov)。
  • abs 関数の単調性を誤判定していた問題を修正 #63097 (Duc Canh Le)。
  • MongoDB エンジンでの SSL ハンドシェイクに使用するサーバー名を設定 #63122Alexander Gololobov)。
  • MongoDB ワイヤプロトコルのバージョンチェックにおいて、"config" の代わりにユーザーが指定した db を使用するように変更 #63126 (Alexander Gololobov)。

ClickHouse 24.3 LTS リリース(2024-03-27)。プレゼンテーション動画

アップグレード時の注意事項

  • allow_experimental_analyzer SETTING はデフォルトで有効になっており、クエリ解析を互換性と機能の完全性に優れた新しい実装に切り替えます。この "analyzer" 機能は、experimental ではなく beta と見なされます。従来の動作に戻したい場合は、compatibility24.2 に設定するか、allow_experimental_analyzer SETTING を無効にしてください。YouTube の動画も参照してください。
  • 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 を使用するほうがユーザーの期待に合致します。
  • 新しい ClickHouse バージョンでは、関数 geoDistancegreatCircleDistancegreatCircleAngle は、すべての引数が Float64 の場合、内部計算および戻り値の型として 64 ビットの倍精度浮動小数点数型を使用します。これにより #58476 が解決されます。以前のバージョンでは、これらの関数は常に Float32 を使用していました。geo_distance_returns_float64_on_float64_argumentsfalse に設定するか、compatibility24.2 以前に設定することで、従来の動作に切り替えることができます。#61848Alexey Milovidov)。Geet Patel との共同作業。
  • メモリ内データパーツの旧式機能はバージョン 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)。
  • system.zookeeper テーブルにおいて、実際にはマイクロ秒単位で計測されていることを反映するため、カラム名を duration_ms から duration_microseconds に変更しました。 #60774 (Duc Canh Le).
  • クエリレベルの設定 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)。
  • ユーティリティ clickhouse-copier は GitHub 上の別リポジトリに移動されました: https://github.com/ClickHouse/copier。バンドルには同梱されなくなりましたが、引き続き個別にダウンロードして利用できます。これにより次の Issue がクローズされます: #60734 #60540 #60250 #52917 #51140 #47517 #47189 #46598 #40257 #36504 #35485 #33702 #26702
  • MySQL との互換性を高めるため、互換エイリアス locate はデフォルトで引数 (needle, haystack[, start_pos]) を受け付けるようになりました。以前の挙動である (haystack, needle, [, start_pos]) は、function_locate_has_mysql_compatible_argument_order = 0 を設定することで復元できます。 #61092 (Robert Schulze).
  • MergeTree テーブルの ORDER BY 句で SimpleAggregateFunction を使用することを、デフォルトで禁止しました(AggregateFunction と同様に禁止されますが、いずれも比較不能であることが理由です)。これらを許可するには allow_suspicious_primary_key を使用してください。 #61399 (Azat Khuzhin).
  • Ordinary データベースエンジンは非推奨になりました。サーバーがこれを使用している場合、clickhouse-client で警告が表示されます。この変更により #52229 がクローズされました。#56942shabroo)。

新機能

  • バックアップの読み書きで tar をサポートしました(zip に加えて)。#59535josh-hildred)。
  • S3 Express バケットをサポートしました。#59965Nikita Taranov)。
  • 別のディスクからパーツをアタッチできるようにしました(ハードリンクではなくコピーを使用)。#60112Unalian)。
  • サイズ上限付きの Memory テーブルを追加しました。min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep, max_rows_to_keep の各設定で制御します。#60612Jake Bamrah)。
  • 待機中クエリと実行中クエリの個数に対する制限を分離しました。async_load_databases により待機しているクエリ数を制限する新しいサーバー設定 max_waiting_queries を追加しました。既存の実行中クエリ数の上限は、待機中クエリをカウントしなくなりました。#61053Sergei Trifonov)。
  • パーサーに含まれるすべてのキーワードを格納するテーブル system.keywords を追加しました。主に、より良いファジングおよびシンタックスハイライトのために使用されます。#51808Nikita Mikhaylov)。
  • ATTACH PARTITION ALL をサポートしました。#61107Kirill Nikiforov)。
  • 新しい関数 getClientHTTPHeader を追加しました。これにより #54665 がクローズされます。@lingtaolf との共同作業です。#61820Alexey Milovidov)。
  • generate_series をテーブル関数として追加しました(既存の numbers 関数に対する PostgreSQL 互換の別名)。この関数は、自然数の等差数列を持つテーブルを生成します。#59390divanik)。
  • topK/topkWeighed 用のモードを追加し、値の個数とその誤差を返せるようにしました。#54508UnamedRus)。
  • DateTime または DateTime64 の値に対してミリ秒成分を返す関数 toMillisecond を追加しました。#60281Shaun Struwig)。
  • clickhouse-server 向けに HTTP リダイレクトハンドラを設定可能にしました。たとえば、/ を Play UI へリダイレクトさせることができます。#60390Alexey Milovidov)。

性能改善

  • 不要でコストの高いメモリコピーを回避するよう、関数 dotProduct を最適化しました。 #60928 (Robert Schulze)。
  • 256ビット整数の出力処理が30倍高速化されました。 #61100 (Raúl Marín).
  • テーブルのプライマリキーにほとんど有用でないカラムが含まれている場合、それらをメモリに保持しないようにできます。これは新しい設定 primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns によって制御され、デフォルト値は 0.9 です。これは、複合プライマリキーにおいて、あるカラムの値が全体の少なくとも 0.9 の割合で変化する場合、その後ろに続くカラムはロードされないことを意味します。 #60255 (Alexey Milovidov)。
  • 複数の Nullable カラムが関与する場合のシリアライズされた集約メソッドのパフォーマンスを改善しました。 #55809 (Amos Bird).
  • ALL JOIN のパフォーマンスを改善するために、JSON 出力を遅延生成するようにしました。 #58278 (LiuNeng).
  • AWS S3 などの外部サービスへの HTTP/HTTPS 接続を、すべてのユースケースで再利用できるようにしました。レスポンスが 3xx や 4xx の場合でも接続は再利用されます。 #58845 (Sema Checherinda).
  • 集約関数 argMin / argMax / any / anyLast / anyHeavy および ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1 クエリに対する改善。#58640Raúl Marín)。
  • カラムフィルタに対する軽微な最適化。場合によってはピークメモリ使用量を元の 44% まで削減できます。 #59698 (李扬)。
  • 結果型の基になる型が数値の場合、multiIf 関数が列指向で実行されるようにしました。#60384 (李扬)。
  • ミューテックスの性能を向上(ほぼ2倍高速化)。 #60823 (Azat Khuzhin).
  • 分散クエリの完了時に複数の接続を並行してドレインできるようにしました。 #60845 (lizhuoyu5).
  • Nullable な数値型または Nullable な文字列型のカラム間でのデータ移動を最適化し、一部のマイクロベンチマークにおける性能を向上しました。 #60846 (李扬).
  • ファイルシステムキャッシュに対する操作が、ロック競合の影響を受けにくくなりました。 #61066 (Alexey Milovidov).
  • 誤ったコンパイラ最適化を防ぐことで ARRAY JOIN およびその他の JOIN を最適化しました。#61074 をクローズ。#61075李扬)。
  • 構文エラーを含むクエリにおいて、正規表現付きの COLUMNS マッチャーが含まれている場合、正規表現は本来一度だけコンパイルされるべきところを、パーサのバックトラッキングのたびに毎回コンパイルされていました。これは根本的な誤りでした。コンパイル済みの正規表現は AST に格納されていました。しかし AST の A は "abstract" を意味しており、重量級オブジェクトを含むべきではありません。AST の一部はパース中に作成されたり破棄されたりし得て、その過程には多数のバックトラッキングも含まれます。これによりパース側での低速化を招き、その結果、読み取り専用ユーザーによる DoS 攻撃を許してしまう可能性があります。しかし、より本質的な問題は、これによりファザー(fuzzer)の進捗が妨げられることです。 #61543 (Alexey Milovidov).
  • 単一値に対する IN 演算子の最適化を行う新しいアナライザーパスを追加しました。 #61564 (LiuNeng).
  • DNSResolver は解決済み IP アドレスの Set をシャッフルし、複数の AWS S3 エンドポイントを均等に利用できるようにします。 #60965 (Sema Checherinda).

実験的機能

  • Azure Blob Storage に対する並列読み取りをサポートしました。これにより、実験的な Azure オブジェクトストレージのパフォーマンスが向上します。 #61503 (SmitaRKulkarni).
  • Azure Blob Storage 向けに、S3 と同様の非同期 WriteBuffer を追加しました。これにより、実験的な Azure オブジェクトストレージのパフォーマンスが向上します。 #59929 (SmitaRKulkarni).
  • Azure Blob Storage を使用する際、バックアップ I/O にマネージド ID を使用するようにしました。ClickHouse が存在しないコンテナを作成しようとするのを防ぐための設定を追加しました。このコンテナの作成にはストレージアカウントレベルの権限が必要です。 #61785 (Daniel Pozo Escalona).
  • parallel_replicas_allow_in_with_subquery = 1 という設定を追加しました。これにより、IN 句のサブクエリを並列レプリカで使用できるようになります。 #60950 (Nikolai Kochetov).
  • ゼロコピー レプリケーションに対する変更です。テーブルが削除される場合、そのテーブルに関連するすべてのゼロコピー用ロックを削除する必要があり、これらのロックを含むディレクトリも削除しなければなりません。 #57575 (Sema Checherinda).

改善点

  • MergeTree をデフォルトのテーブルエンジンとして使用するようにしました。 #60524 (Alexey Milovidov)
  • output_format_pretty_row_numbers をデフォルトで有効にしました。使い勝手が向上します。 #61791 (Alexey Milovidov).
  • 以前のバージョンでは、Pretty フォーマットの一部で、数値の見た目があまり「きれい」ではありませんでした。 #61794 (Alexey Milovidov)。
  • SHOW CREATE TABLE クエリの結果のように、結果セット内に値が 1 つしかない場合は、Pretty フォーマットで長い値が切り詰められなくなりました。 #61795 (Alexey Milovidov).
  • clickhouse-local と同様に、clickhouse-client でも --format オプションの同義語として --output-format オプションが利用できるようになりました。これにより #59848 がクローズされました。 #61797 (Alexey Milovidov)。
  • stdout がターミナルであり、かつ出力フォーマットが指定されていない場合、clickhouse-client および同様のツールは、インタラクティブモードと同様に、デフォルトで PrettyCompact を使用します。clickhouse-clientclickhouse-local は、入力および出力フォーマットに関するコマンドライン引数を一貫した方法で処理します。これにより #61272 が解決されました。 #61800 (Alexey Milovidov)。
  • 可読性を向上させるため、Pretty フォーマットで桁グループをアンダースコアで区切って表示できるようになりました。これは新しい設定 output_format_pretty_highlight_digit_groups によって制御できます。 #61802 (Alexey Milovidov)。
  • SYSTEM FLUSH DISTRIBUTED で初期の INSERT SETTINGS を上書きできるようにしました。 #61832 (Azat Khuzhin).
  • ソートや集約などにおける処理時間および入出力バイト数のプロセッサプロファイリングを、デフォルトで有効化しました。 #61096 (Azat Khuzhin).
  • Filesystem データベースで拡張子のないファイルをサポートしました。 #60795 (Kruglov Pavel).
  • すべてのフォーマット名を大文字・小文字を区別しないようにしました。たとえば、Tsv でも TSV でも tsv でも、さらには rowbinary でも同じです。 #60420豪肥肥)。今後もできれば正しい表記で書いてもらえるとありがたいです。たとえば JSON 😇 であって Json 🤮 ではなく、という具合に。ただし、実際にはお好みの綴りで書いていただいて構いません。
  • distributed_ddl_output_mode SETTING に none_only_active モードを追加しました。 #60340 (Alexander Tokmakov).
  • 高度なダッシュボードで、複数系列グラフの色設定がわずかに改善されました。 #60391 (Alexey Milovidov).
  • Advanced ダッシュボードでは、スクロールしてもコントロールが常に表示されるようになりました。これにより、ページの上部までスクロールし直さずに新しいチャートを追加できます。 #60692 (Alexey Milovidov).
  • materialized view に対して MODIFY COLUMN クエリを実行する際、すべてのカラムが存在することを確認するために、内部テーブルの構造をチェックするようになりました。 #47427 (sunny).
  • String 型と Enum 型は、配列、UNION クエリ、条件式など、同じコンテキストで使用できるようになりました。これにより、#60726 が解決されました。#60727Alexey Milovidov)。
  • クエリ処理のための外部データの構造内で Enum を宣言できるようにしました(クエリ専用に即座に用意できる一時テーブルです)。 #57857 (Duc Canh Le)。
  • マージするパーツを選択する際に論理削除された行を考慮し、結果として生成されるパーツのディスクサイズをより正確に見積もるようにしました。 #58223 (Zhuo Qiu)。
  • より多くの system テーブルのカラムにコメントを追加しました。これは https://github.com/ClickHouse/ClickHouse/pull/58356 の継続です。 #59016 (Nikita Mikhaylov)。
  • PREWHERE で仮想カラムを使用できるようになりました。これは _part_offset のような非 const な仮想カラムに対して有用です。#59033 (Amos Bird)。仮想カラムの全体的な使い勝手が改善されました。PREWHERE で仮想カラムを使用することが許可されました(_part_offset のような非 const な仮想カラムに対して有用です)。仮想カラムに関する組み込みドキュメントが、describe_include_virtual_columns 設定を有効にした DESCRIBE クエリ内で、カラムのコメントとして利用できるようになりました。#60205 (Anton Popov)。
  • 固定のキーを使用する代わりに、オブジェクトストレージがオブジェクト削除の可否を判定するためのキーを生成するようになりました。 #59495 (Sema Checherinda).
  • オブジェクトストレージのタイプとして "local_blob_storage" の代わりに "local" を許可しました。 #60165 (Kseniia Sumarokova).
  • DETACH / サーバーシャットダウン時および SYSTEM FLUSH DISTRIBUTED 実行時に、Distributed engine の保留中の INSERT ブロックを並列フラッシュできるようにしました(並列処理は、テーブルにマルチディスクポリシーが設定されている場合にのみ有効です(現時点では Distributed engine のすべてのテーブルがこれに該当します))。 #60225 (Azat Khuzhin).
  • マージ処理でリードスルーキャッシュを強制的に利用するための設定を追加しました。 #60308 (Kseniia Sumarokova)。
  • MySQL 互換プロトコルの改善。Issue #57598 では、トランザクション処理に関する挙動の相違が指摘されています。トランザクションがアクティブでない状態で COMMIT/ROLLBACK を発行すると、MySQL の挙動とは異なりエラーとして報告されていました。#60338PapaToemmsn)。
  • 関数 substring に新しい別名 byteSlice が追加されました。#60494Robert Schulze)。
  • サーバー設定 dns_cache_max_sizedns_cache_max_entries に名称変更し、曖昧さを減らしました。 #60500 (Kirill Nikiforov).
  • SHOW INDEX | INDEXES | INDICES | KEYS は、もはやプライマリキーのカラムによるソートを行わなくなりました(これは直感的ではありませんでした)。 #60514 (Robert Schulze)。
  • Keeper の改善: 無効なスナップショットが検出された場合には、データ損失を防ぐため起動処理を中止するようにしました。 #60537 (Antonio Andelic).
  • tzdata を 2024a に更新しました。 #60768 (Raúl Marín)。
  • 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)。
  • MySQL の構文で一般的に使用される START TRANSACTION 構文のサポートを追加し、https://github.com/ClickHouse/ClickHouse/discussions/60865 を解決しました。 #60886 (Zach Naimon)。
  • full-sorting merge join アルゴリズムで NULL を最大値/最小値として扱えるようにするフラグを追加しました。これにより、Apache Spark のような他の SQL システムと動作を互換にできます。 #60896 (loudongfeng).
  • clickhouse-clientclickhouse-local で、ファイル拡張子から出力フォーマットを自動検出できるようになりました。 #61036 (豪肥肥).
  • Linux の CGroups の値が変更された場合に、実行時のメモリ制限を更新するようにしました。 #61049 (Han Fei).
  • 関数 toUInt128OrZero を、誤って見落としていたため追加しました(この誤りは https://github.com/ClickHouse/ClickHouse/pull/945 に関連しています)。互換性エイリアスである FROM_UNIXTIMEDATE_FORMAT(これらは ClickHouse ネイティブのものではなく、MySQL 互換性のためにのみ存在します)について、SQL 互換エイリアスとして期待されるとおり大文字小文字を区別しないようにしました。 #61114 (Alexey Milovidov)。
  • アクセスチェックが改善され、対象ユーザーがそもそもその権限や付与権限(GRANT 権限)を持っていない場合でも、未保有の権限を REVOKE できるようになりました。例: GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;#61115 (pufit)。
  • Nullable カラムに対する has() 関数の不具合を修正しました(#60214)。 #61249Mikhail Koviazin)。
  • 現在、サブツリー <include from_zk="/path" merge="true"> に対する設定の置換処理で、属性 merge="true" を指定できるようになりました。この属性が指定されている場合、ClickHouse はそのサブツリーを既存の設定とマージし、指定されていない場合のデフォルト動作は、新しい内容を設定に追記することになります。 #61299 (alesapin)。
  • 仮想メモリマッピング用の非同期メトリクス VMMaxMapCountVMNumMaps を追加。#60662 を解決。#61354Tuan Pham Anh)。
  • 一時データを作成するすべての箇所(たとえば外部メモリソートや外部メモリによる GROUP BY)で temporary_files_codec 設定が使用されるようになりました。以前は partial_merge JOIN アルゴリズムでのみ適用されていました。 #61456 (Maksim Kita)。
  • クエリの構文解析の複雑さを制限できる新しい設定 max_parser_backtracks を追加しました。 #61502 (Alexey Milovidov).
  • ファイルシステムキャッシュを動的にリサイズする際のコンテンションを減らしました。 #61524 (Kseniia Sumarokova).
  • StorageS3 queue のシャーディングモードは、今後実装を書き換える予定のため無効化しました。 #61537 (Kseniia Sumarokova).
  • タイプミスを修正: use_leagcy_max_leveluse_legacy_max_level に変更しました。 #61545 (William Schoeffel)。
  • system.blob_storage_log 内の重複したエントリの一部を削除しました。 #61622 (YenchangChan).
  • MySQL 互換性のためのエイリアスとして current_user 関数を追加しました。 #61770 (Yarik Briukhovetskyi).
  • 混在した x86-64 / ARM クラスターにおける浮動小数点の集約関数状態の不整合を修正 #60610Harry Lee)。

ビルド/テスト/パッケージングの改良

  • リアルタイムクエリプロファイラが AArch64 でも動作するようになりました。以前のバージョンでは、プログラムがシステムコール内で時間を消費していない場合にのみ動作していました。#60807 (Alexey Milovidov)。
  • ClickHouse のバージョン情報が Docker ラベルに追加されました。#54224 をクローズします。#60949 (Nikolay Monkov)。
  • prqlc を 0.11.3 にアップグレードしました。#60616 (Maximilian Roos)。
  • clickhouse-local に汎用的なクエリテキスト fuzzer を追加しました。#61508 (Alexey Milovidov)。

バグ修正(公式安定版リリースにおけるユーザーから見て明らかな不具合)

  • MergeTree における finished_mutations_to_keep=0 の挙動を修正(ドキュメントでは 0 を指定するとすべてを保持するとされている) #60031 (Azat Khuzhin).
  • FINAL 最適化に何らかの不具合があり、その内容について著者は次のように述べています: "PartsSplitter invalid ranges for the same part". #60041 (Maksim Kita).
  • 実験的機能でサポート対象外である Apache Hive に不具合がありました。 #60262 (shanfengp).
  • 実験的な parallel replicas 機能の改善: parallel replicas の構成が変更された場合に再解析を強制するようにしました #60362 (Raúl Marín).
  • 新しいディスク構成オプションにおける plain metadata 型の利用を修正しました #60396 (Kseniia Sumarokova)。
  • mapContainsKeyLike で発生する論理エラー 'Cannot capture column because it has incompatible type' を修正しました #60451 (Kruglov Pavel).
  • CREATE TABLE においてスカラーサブクエリを評価しないようにしました。 #60464 (Nikolai Kochetov).
  • 多くの行がエラーによりスキップされる場合に並列パースで発生するデッドロックを修正 #60516 (Kruglov Pavel)。
  • 実験的な KQL(Kusto)サポートに不具合があり、max_query_size_for_kql_compound_operator を修正しました: #60534 (Yong Wang)。
  • Keeper に対する修正: コミットログ待機時のタイムアウトを追加 #60544 (Antonio Andelic).
  • 日付型については数値形式のヒントを出力しないようにしました #60577 (Raúl Marín).
  • フィルタで非決定的関数を使用する場合の MergeTree からの読み取りを修正 #60586 (Kruglov Pavel)。
  • 互換性設定で不正な値型が指定された場合に発生する論理エラーを修正 #60596 (Kruglov Pavel).
  • fix(prql): パニックハンドラーをより堅牢に #60615 (Maximilian Roos).
  • Decimal および Date 型の引数に対する intDiv を修正。 #60672 (Yarik Briukhovetskyi)。
  • Fix: ALTER MODIFY クエリ内の CTE を展開するよう修正 #60682 (Yakov Olkhovskiy).
  • 非 Atomic/Ordinary データベースエンジン(例: Memory)における system.parts を修正。 #60689 (Azat Khuzhin).
  • パラメータ化された VIEW で発生する「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 の複数の不具合を修正 #61203 (Raúl Marín).
  • スタンドアロンバイナリ版 Keeper の再構成を修正 #61233Antonio Andelic)。
  • S3 エンジンでの session_token の扱いを修正 #61234 (Kruglov Pavel).
  • 集約関数 uniqExact で発生する可能性がある誤った結果を修正しました #61257 (Anton Popov)。
  • SHOW DATABASE コマンドのバグを修正。#61269Raúl Marín)。
  • RabbitMQ ストレージにおける MATERIALIZED カラム使用時の論理エラーを修正 #61320 (vdimir)。
  • CREATE OR REPLACE DICTIONARY を修正しました #61356Vitaly Baranov)。
  • 外部 ON CLUSTER を使用する ATTACH クエリを修正しました。 #61365 (Nikolay Degterinsky)。
  • Nullable キーに対する連続キーの最適化を修正 #61393 (Anton Popov).
  • 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 を読み取る際に生じていた不整合を修正しました。 #61479 (Dan Wu)。
  • ALTER QUERY MODIFY SQL SECURITY の不具合を修正しました #61480pufit)。
  • window view(実験的機能)におけるクラッシュを修正 #61526 (Alexey Milovidov).
  • repeat が非ネイティブの整数型で正しく動作しない問題を修正 #61527 (Antonio Andelic).
  • クライアントの -s 引数の問題を修正 #61530 (Mikhail f. Shiryaev).
  • arrayPartialReverseSort におけるクラッシュを修正 #61539Raúl Marín)。
  • const 位置指定での文字列検索の不具合を修正 #61547 (Antonio Andelic).
  • DateTime64 型で使用した場合にエラーを引き起こしていた addDays を修正 #61561 (Shuai li).
  • JSONExtract に対する LowCardinality 型の入力を禁止 #61617 (Julia Kartseva)。
  • 重複排除を伴う非同期挿入時の system.part_log を修正 #61620 (Antonio Andelic)。
  • system.parts で発生する Non-ready set 例外を修正しました。 #61666 (Nikolai Kochetov).
  • REPLACE_RANGE における actual_part_name の不具合を修正(Entry actual part isn't empty yet#61675Alexander Tokmakov)。
  • 不正な UTF-8 を対象とする multiSearchAllPositionsCaseInsensitiveUTF8 におけるサニタイザーレポートを修正しました #61749 (pufit)。
  • Nullable カラムで RANGE フレームがサポートされていなかった問題を修正。 #61766 (YuanLiu).

ClickHouse リリース 24.2(2024-02-29)。プレゼンテーション動画

後方互換性のない変更

  • ネストした型における疑わしい/実験的な型を検証するようにしました。これまでは、Array/Tuple/Map のようなネストした型では(JSON を除き)そのような型を検証していませんでした。#59385 (Kruglov Pavel).
  • スレッド数およびブロックサイズに対する健全性チェックを追加しました。#60138 (Raúl Marín).
  • デフォルトでは指数表記の浮動小数点数を推論しないようにしました。以前の挙動を復元するための input_format_try_infer_exponent_floats 設定を追加しました(デフォルトでは無効)。#59476 をクローズします。#59500 (Kruglov Pavel).
  • ALTER 操作を丸括弧で囲めるようにしました。括弧を出力するかどうかは format_alter_operations_with_parentheses 設定で制御できます。デフォルトでは、整形済みクエリにおいて括弧が出力されます。これは、整形済みの ALTER 操作を(たとえば mutation などの)メタデータとして格納している箇所があるためです。この新しい構文により、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 が同一クラスタ内で混在している場合に、新構文の利用が問題を引き起こす可能性があります。#59532 (János Benjamin Antal).
  • materialized view に関するセキュリティ問題を修正しました。この問題により、必要な権限がないにもかかわらずテーブルへの挿入が可能になっていました。修正では、ユーザーが materialized view だけでなく、その基盤となるすべてのテーブルへの挿入権限も持っていることを検証します。これは、以前は動作していた一部のクエリが、現在は Not enough privileges で失敗し得ることを意味します。この問題に対処するため、本リリースでは VIEW 向けの SQL セキュリティという新機能を導入しました https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security。[#54901](https://github.com/ClickHouse/ClickHouse/pull/54901) #60439 (pufit).

新機能

  • view / materialized view で definer USER を指定できる新しい構文を追加しました。これにより、背後のテーブルに対して明示的に権限を付与しなくても、VIEW から SELECT / INSERT を実行できるようになります。つまり、VIEW が権限(GRANT)をカプセル化します。 #54901 #60439 (pufit).
  • file/s3/hdfs/url/azureBlobStorage エンジンでスキーマ推論を行う際、ファイルフォーマットが不明な場合に自動検出を試みるようにしました。#50576 をクローズしました。#59092Kruglov Pavel)。
  • 非同期挿入タイムアウトの自動調整機能を実装しました。次の設定項目が追加されました: async_insert_poll_timeout_ms、async_insert_use_adaptive_busy_timeout、async_insert_busy_timeout_min_ms、async_insert_busy_timeout_max_ms、async_insert_busy_timeout_increase_rate、async_insert_busy_timeout_decrease_rate。 #58486 (Julia Kartseva)。
  • 連続ログイン失敗の最大回数に対してQUOTAを設定できるようになりました。 #54737 (Alexey Gerasimchuck).
  • 新しい集約関数 groupArrayIntersect#49862 のフォローアップ。 #59598Yarik Briukhovetskyi)。
  • AzureBlobStorage の Backup & Restore をサポート。#50747 を解決。#56988SmitaRKulkarni)。
  • ユーザーは、format_template_row の代替として format_schema_rows_template を使用し、クエリ内でテンプレート文字列を直接指定できるようになりました。#31363 を解決。#59088Shaun Struwig)。
  • 異なる種類の MergeTree テーブルを Replicated エンジンへ自動変換する機能を実装しました。テーブルのデータディレクトリ(/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)内に空の convert_to_replicated ファイルを作成すると、次回サーバー起動時にそのテーブルが自動的に変換されます。 #57798 (Kirill)。
  • 空のパーティションに対応する ZooKeeper ノードを削除するクエリ ALTER TABLE table FORGET PARTITION partition を追加しました。 #59507 (Sergei Trifonov)。これはエキスパートレベルの機能です。
  • NATS テーブルエンジンで JWT クレデンシャルファイルのサポートを追加。 #59543 (Nickolaj Jepsen)。
  • system.dns_cache テーブルを実装しました。DNS の問題のデバッグに役立ちます。 #59856 (Kirill Nikiforov).
  • codec LZ4HC は、新たにレベル 2 を指定できるようになりました。これは、これまでの最小レベルである 3 よりも高速に動作しますが、その分圧縮率は低下します。以前のバージョンでは、LZ4HC(2) 以下の指定はすべて LZ4HC(3) と同一の挙動でした。Author: Cyan4973#60090 (Alexey Milovidov)。
  • system.dns_cache テーブルを実装しました。これは DNS の問題のデバッグに有用です。新しいサーバー設定項目 dns_cache_max_size を追加しました。 #60257 (Kirill Nikiforov)。
  • merge テーブル関数で、merge(['db_name', ] 'tables_regexp') のような単一引数形式をサポートしました。 #60372 (豪肥肥).
  • 負の位置引数をサポートしました。#57736 をクローズしました。#58292 (flynn)。
  • user キーを使用して、設定ファイル内の特定の S3 設定ごとに許可されるユーザーの集合を指定できるようにしました。 #60144 (Antonio Andelic).
  • テーブル関数 mergeTreeIndex を追加しました。これは MergeTree テーブルの索引ファイルおよびマークファイルの内容を表します。内部構造の確認(イントロスペクション)に使用できます。構文: mergeTreeIndex(database, table, [with_marks = true])。ここで database.tableMergeTree エンジンを使用する既存のテーブルです。#58140Anton Popov)。

実験的機能

  • Tukey のフェンスアルゴリズムを使用して系列データ内の外れ値を検出する関数 seriesOutliersDetectTukey を追加しました。#58632Bhavna Jindal)。この挙動は次回のパッチリリースで変更される予定であることに注意してください。
  • 各行に対して Variant 型名を持つ Enum を返す関数 variantType を追加しました。#59398Kruglov Pavel)。
  • parallel replicas(analyzer 使用時のみ)で LEFT JOINALL INNER JOIN、および単純なサブクエリをサポートしました。新しい設定 parallel_replicas_prefer_local_join により、ローカルの JOIN 実行(デフォルト)と GLOBAL JOIN のどちらを使用するかを選択できます。すべてのテーブルは cluster_for_parallel_replicas 内のすべてのレプリカ上に存在している必要があります。新しい設定 min_external_table_block_size_rows および min_external_table_block_size_bytes は、一時テーブルに送信される小さなブロックをまとめるために使用されます(analyzer 使用時のみ)。#58916Nikolai Kochetov)。
  • 新しいレプリカの追加または復旧中に、Replicated データベースでのテーブルの同時作成を許可しました。#59277Konstantin Bogdanov)。
  • Variant 値に対する比較演算子と、Variant カラムへの適切な Field の挿入を実装しました。デフォルトでは、類似した Variant 型を持つ Variant 型の作成を許可しません(設定 allow_suspicious_variant_types を有効にした場合のみ許可)。#59996 をクローズ。#59850 をクローズ。#60198Kruglov Pavel)。
  • CTE を使用する parallel replicas における JOIN(analyzer 未使用時)を無効化しました。#59239Raúl Marín)。

パフォーマンスの向上

  • プライマリキーで使用されるメモリ量が少なくなります。 #60049 (Alexey Milovidov).
  • プライマリキーおよびその他の一部の操作でのメモリ使用量を削減しました。 #60050 (Alexey Milovidov).
  • テーブルの主キーは、最初のアクセス時にメモリに遅延ロードされます。これは、新しい MergeTree の設定 primary_key_lazy_load によって制御されており、デフォルトで有効になっています。これにはいくつかの利点があります: - 使用されていないテーブルについてはロードされないこと; - メモリが不足している場合、サーバー起動時ではなく最初の使用時に例外がスローされること。一方で、いくつかの欠点もあります: - 主キーのロードにかかるレイテンシが、接続を受け付ける前ではなく最初のクエリ時に発生するため、理論上は「thundering-herd」問題を引き起こす可能性があること。これにより #11188 が解決されました。 #60093 (Alexey Milovidov)。
  • ベクトル検索で使用するベクトル化された距離関数。 #58866 (Robert Schulze).
  • ベクトル検索向けのベクトル化関数 dotProduct を追加しました。 #60202 (Robert Schulze)。
  • dictGetOrDefault 関数にショートサーキット機能を追加しました。#52098 をクローズしました。#57767jsc0218)。
  • Keeper の改善: latest_logs_cache_size_thresholdcommit_logs_cache_size_threshold により制御されるメモリ内キャッシュに保持するログ量を制限しました。 #59460 (Antonio Andelic)。
  • Keeper の改善: データノードのサイズをさらに削減。 #59592 (Antonio Andelic)。
  • 結果型が Float*/Decimal*/*Int* の場合の if 関数における分岐ミスを引き続き最適化し、https://github.com/ClickHouse/ClickHouse/pull/57885 のフォローアップを行いました。 #59148 (李扬)。
  • 入力の型が Map の場合に if 関数を最適化し、最大約 10 倍の高速化を実現しました。 #59413 (李扬)。
  • Int8 型に対して strict aliasing を実装し(UInt8 型および他のすべての整数型では既に実装済み)、パフォーマンスを向上しました。 #59485 (Raúl Marín).
  • bigint および big decimal 型に対する条件付き sum/avg のパフォーマンスを、ブランチミスの削減により最適化しました。 #59504 (李扬).
  • アクティブなミューテーションがある状態での SELECT のパフォーマンスを改善。 #59531 (Azat Khuzhin).
  • AVX2 で関数 isNotNull を最適化しました。 #59621 (李扬)。
  • ソート済みまたはほぼソートされたデータ向けの ASOF JOIN のパフォーマンスを改善しました。 #59731 (Maksim Kita).
  • async_insert_max_data_size の以前のデフォルト値は 1 MB で、小さすぎることが判明しました。新しい値は 10 MiB になります。 #59536 (Nikita Mikhaylov)。
  • RESTORE コマンドの実行時に、バックアップからテーブルのメタデータを読み取る処理で複数スレッドを使用するようにしました。 #60040 (Vitaly Baranov)。
  • StorageBuffer に 1 つを超える分片(num_layers > 1)がある場合、バックグラウンドでのフラッシュ処理は複数スレッドで全ての分片に対して同時に実行されるようになりました。 #60111 (alesapin).

改善点

  • 出力フォーマットが Pretty フォーマットで、ブロックが 1 つの数値のみから成り、その値が 100 万を超える場合、テーブルの右側に読みやすい形式の数値が表示されます。 #60379 (rogeryk).
  • split_parts_ranges_into_intersecting_and_non_intersecting_finalsplit_intersecting_parts_ranges_into_layers_final の設定を追加しました。これらの設定は、FINAL を伴うクエリに対する最適化を無効化するためのもので、本来はデバッグ用途のみを想定しています。 #59705 (Maksim Kita)。実際にはそれだけでなく、パフォーマンスを犠牲にする代わりにメモリ使用量を抑えることもできます。
  • extract_kvp_max_pairs_per_row という設定を extract_key_value_pairs_max_pairs_per_row にリネーム。不必要な省略が設定名に含まれていたという問題は、https://github.com/ClickHouse/ClickHouse/pull/43606 で導入されていた。この設定に関するドキュメントを修正。#59683 (Alexey Milovidov). #59960 (jsc0218).
  • DEFAULT または MATERIALIZED 式を持つカラムに対して ALTER COLUMN MATERIALIZE を実行した場合、セマンティクスどおりに正確に動作するようになりました。 #58023 (Duc Canh Le).
  • ミューテーション処理中のエラー時に指数バックオフロジックを有効化しました。これにより CPU 使用率、メモリ使用量、およびログファイルサイズが削減されます。 #58036 (MikhailBurdukov).
  • InitialQuery プロファイルイベントのカウントを改善。#58195Unalian)。
  • storage_configurationvolume_priority を指定できるようにしました。 #58533 (Andrey Zvonov).
  • T64 コーデックに Date32 型のサポートを追加。#58738Hongbin Ma)。
  • 複数の要素を持つ型で末尾のカンマを許可するようにしました。 #59119 (Aleksandr Musorin).
  • 分散テーブルエンジンの設定は、サーバーの設定ファイル内で指定できるようになりました(MergeTree の設定と同様)。例えば、<distributed> <flush_on_detach>false</flush_on_detach> </distributed> のように指定します。 #59291 (Azat Khuzhin).
  • system.zookeeper を読み取る際に、切断やセッション有効期限切れを再試行するようになりました。これは、特にフォルトインジェクションによる切断が発生している状況で、system.zookeeper テーブルから多数の行を読み取る場合に有用です。 #59388 (Alexander Gololobov).
  • input_format_values_interpret_expressions=0 の場合、先頭にゼロが付いた数値を 8 進数として解釈しなくなりました。 #59403 (Joanna Hulboj).
  • 起動時および設定ファイルが変更されるたびに、ClickHouse は合計メモリトラッカーに設定されているハードメモリ制限を更新します。これらの制限は、さまざまなサーバー設定および(Linux 上の)cgroups の制限に基づいて計算されます。以前は、/sys/fs/cgroup/memory.max(cgroups v2 用)の設定がハードコードされていました。その結果、/sys/fs/cgroup/my/nested/group/memory.max のようなネストされたグループ(階層)に対して設定された cgroup v2 のメモリ制限は無視されていました。この問題は修正されました。v1 のメモリ制限の動作は変わっていません。#59435Robert Schulze)。
  • INSERT 実行時に、PK/PROJECTION/セカンダリインデックスの計算に要した時間を観測できる新しいプロファイルイベントを追加しました。 #59436 (Nikita Taranov).
  • Ordered モードの S3Queue に対して、作成時に設定 s3queue_last_processed_path を使用して開始点を定義できるようにしました。 #59446 (Kseniia Sumarokova).
  • clickhouse-localsystem.tables でもシステムテーブルに対するコメントを利用できるようにしました。 #59493 (Nikita Mikhaylov)。
  • system.zookeeper テーブル: 以前は結果全体をメモリ上に蓄積し、1 つの大きな chunk として返していました。この変更により、system.zookeeper から多数の行を読み取る際のメモリ消費を抑え、中間的な進捗(これまでに読み取られた行数)を表示できるようになり、結果セットが大きい場合の接続タイムアウトも回避できるようになります。 #59545 (Alexander Gololobov).
  • ダッシュボードが、URL の #hash 部分の圧縮済み状態と未圧縮状態の両方を理解できるようになりました(後方互換性のため)。#59124 の継続。#59548Amos Bird)。
  • codec DEFLATE_QPL で使用されている Intel QPL を v1.3.1 から v1.4.0 に更新しました。また、ポーリングのタイムアウト機構のバグも修正しました。いくつかのケースで、タイムアウトが発生した際にタイムアウトが正しく機能せず、IAA と CPU が同じバッファを同時に処理してしまうことがあることを確認しました。現時点では、IAA コーデックのステータスが QPL_STS_BEING_PROCESSED ではないことを確認してから SW コーデックにフォールバックするようにしています。#59551 (jasperzhu)。
  • ClickHouse Cloud では、アップグレードが自動的かつシームレスに行われるため、サーバーバージョンに関する警告を表示しないようにしました。 #59657 (Alexey Milovidov).
  • 自己解凍後、一時バイナリはコピーされるのではなく移動されるようになりました。 #59661 (Yakov Olkhovskiy).
  • Apple macOS におけるスタックのアンワインド処理を修正しました。これにより #53653 が解決します。#59690Nikita Mikhaylov)。
  • max_parser_depth 設定を誤って非常に大きな値に設定してしまった場合でも、パーサーでスタックオーバーフローを検出するようにしました。これにより #59622 が解決します。 #59697Alexey Milovidov)。 #60434
  • Kafka ストレージにおける XML および SQL から作成された named collection の挙動を統一しました。 #59710 (Pervakov Grigorii).
  • merge_max_block_size_bytes が十分に小さく設定されており、テーブルに横に長い行(文字列やタプル)が含まれている場合、バックグラウンドマージが無限ループに陥って進まなくなることがありました。この問題を修正しました。https://github.com/ClickHouse/ClickHouse/pull/59340 のフォローアップです。 #59812 (Nikita Mikhaylov)。
  • CREATE TABLE で明示的に指定されている場合は、replica_path で uuid を許可するようにしました。 #59908 (Azat Khuzhin)。
  • system.tables システムテーブルに ReplicatedMergeTree テーブル用のカラム metadata_version を追加しました。 #59942 (Maksim Kita).
  • Keeper の改善: Prometheus には Keeper 関連のメトリクスおよびイベントのみを送信するようにしました。 #59945 (Antonio Andelic).
  • ダッシュボードは、アップグレード後に system テーブルの構造が変更されていても、異なる ClickHouse バージョンにまたがるメトリクスを表示します。 #59967 (Alexey Milovidov)。
  • ファイルからAZ情報を読み込めるようになりました。 #59976 (Konstantin Bogdanov).
  • 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>#60002 (Vitaly Baranov)。
  • S3 ファイルのコピー時に、GCP が GATEWAY_TIMEOUT HTTP エラーコード付きの Internal Error を返した場合、GCP 経由のコピーからバッファへのコピーにフォールバックするようにしました。 #60164 (Maksim Kita).
  • ULIDStringToDateTime の短絡実行。 #60211 (Juan Madurga).
  • system.backups および system.backup_log テーブルに query_id カラムを追加しました。error カラムにエラーのスタックトレースを追加しました。 #60220 (Maksim Kita).
  • MySQL ポート経由の接続では、QuickSight をそのまま利用できるようにするため、prefer_column_name_to_alias = 1 の設定が自動的に有効になりました。加えて、mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns の各設定もデフォルトで有効になり、こちらも MySQL 接続にのみ影響します。これにより、より多くの BI ツールとの互換性が向上します。#60365 (Robert Schulze)。
  • JavaScript コード内のレースコンディションを修正し、チャートが重なって二重に表示される不具合を解消しました。 #60392 (Alexey Milovidov).

ビルド/テスト/パッケージングの改善

  • カバレッジ収集とイントロスペクションを行うビルドおよびテストを追加しました。#56102 の継続です。 #58792 (Alexey Milovidov)。
  • CMake のクロスコンパイル用ツールチェーン変数が設定されている場合に、corrosion-cmake 内の Rust ツールチェーンを更新するようにしました。 #59309 (Aris Tritas)。
  • ASTLiterals に対していくつかの fuzzing を追加しました。 #59383 (Raúl Marín)。
  • ClickHouse コンテナ起動時に毎回 initdb スクリプトを実行したい場合は、環境変数 CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS を設定する必要があります。 #59808 (Alexander Nikolaev)。
  • 汎用的な ClickHouse コンポーネント(server/client など)を無効化する機能を削除しましたが、ODBC や keeper など追加のライブラリを必要とする一部のコンポーネントについては、引き続き無効化可能なままとしました。 #59857 (Azat Khuzhin)。
  • Query fuzzer がクエリ内の SETTINGS を fuzzing するようにしました。 #60087 (Alexey Milovidov)。
  • clang-19(master)で ClickHouse をビルドするためのサポートを追加しました。 #60448 (Alexey Milovidov)。

バグ修正(公式安定版リリースにおけるユーザーに見える不具合)

  • TTL WHERE で発生する「Non-ready set」エラーの不具合を修正しました。 #57430 (Nikolai Kochetov).
  • quantilesGK 関数のバグを修正 #58216 (李扬)。
  • Decimal 引数に対する intDiv の不正な動作を修正しました #59243 (Yarik Briukhovetskyi)。
  • FixedString 入力に対する translate の不具合を修正 #59356 (Raúl Marín).
  • Keeper におけるダイジェスト計算の不具合を修正 #59439 (Antonio Andelic)。
  • デバッグシンボルを含まないバイナリのスタックトレースを修正 #59444 (Azat Khuzhin).
  • カラム固有の設定を指定した場合の ASTAlterCommand::formatImpl を修正しました。 #59445 (János Benjamin Antal).
  • Analyzer を用いて SELECT * FROM [...] ORDER BY ALL を修正しました #59462 (zhongyuankai).
  • 分散クエリのキャンセル時に発生し得る捕捉されない例外を修正 #59487 (Azat Khuzhin).
  • 複合型に対する MAX のルールを permutation と揃えました #59498 (Raúl Marín).
  • update_insert_deduplication_token_in_dependent_materialized_views を渡したときのコーナーケースを修正。 #59544 (Jordi Villar)。
  • 空の値に対して arrayElement / map を適用した際の結果が誤っていた問題を修正 #59594 (Raúl Marín)。
  • 空の状態をマージする際に topK がクラッシュする不具合を修正 #59603 (Raúl Marín)。
  • 定数シャーディングキーを持つ分散テーブルの問題を修正 #59606 (Vitaly Baranov)。
  • WingFuzz により発見された KQL の不具合を修正 #59626 (Yong Wang)。
  • AsynchronousBoundedReadBuffer で発生していた "Read beyond last offset" エラーを修正 #59630 (Vitaly Baranov)。
  • RewriteSumFunctionWithSumAndCountVisitor で関数エイリアスを維持する #59658 (Raúl Marín).
  • 初期クエリ以外のクエリにおける開始時刻を修正 #59662 (Raúl Marín).
  • minmax スキップ索引の引数の型を検証するようにしました #59733 (Anton Popov)。
  • FixedString 型を入力とする leftPad / rightPad 関数を修正 #59739 (Raúl Marín)。
  • 関数 countMatches における AST fuzzer 関連の問題を修正 #59752 (Robert Schulze)。
  • RabbitMQ: ack も nack も行われないメッセージが発生する不具合を修正 #59775 (Kseniia Sumarokova).
  • StorageURL がクエリの一部を単一スレッドで実行していた問題を修正 #59833 (Michael Kolupaev).
  • S3Queue: 未初期化の値を修正 #59897 (Kseniia Sumarokova).
  • 括弧で囲まれたパーティション式の構文解析を修正 #59901 (János Benjamin Antal)。
  • HTTP 経由で使用した場合の JSONColumnsWithMetadata フォーマットで発生するクラッシュを修正 #59925 (Kruglov Pavel)。
  • Analyzer で返り値が変わってしまう場合には sum を count に書き換えないようにしました #59926 (Azat Khuzhin).
  • UniqExactSet の読み取り時のクラッシュを修正 #59928 (Maksim Kita)。
  • ReplicatedMergeTree における無効な metadata_version の修正 #59946 (Maksim Kita).
  • StorageDistributed のデータレースを修正 #59987 (Nikita Taranov)。
  • Docker: オプションが無効な場合ではなく有効な場合に init スクリプトを実行するように修正 #59991 (jktng)。
  • SQLite 向けの、シングルクォートを含む INSERT 文を修正(シングルクォートをバックスラッシュではなくクォートでエスケープするように変更)#60015Azat Khuzhin)。
  • arrayFold のいくつかの論理エラーを修正。 #60022 (Raúl Marín)。
  • optimize_uniq_to_count がカラムエイリアスを削除してしまう不具合を修正。 #60026 (Raúl Marín).
  • S3Queue テーブルを DROP する際に発生しうる例外を修正 #60036 (Kseniia Sumarokova)。
  • 単一のリテラルに対する NOT の書式を修正。#60042Raúl Marín)。
  • DDLLogEntry でハードコードされた 4096 の代わりに、コンテキストからの max_query_size を使用するように変更 #60083 (Kruglov Pavel)。
  • table という名前のテーブルを含むクエリのフォーマットの不整合を修正。構造が線形でない場合の UNION ALLINTERSECTEXCEPT を含むクエリの誤ったフォーマットを修正。これにより #52349 がクローズされた。SYSTEM ... DROP FILESYSTEM CACHESYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEWSYSTEM ENABLE/DISABLE FAILPOINT を含む SYSTEM クエリの誤ったフォーマットを修正。パラメータ化された DDL クエリのフォーマットを修正。DESCRIBE FILESYSTEM CACHE クエリのフォーマットを修正。SET param_...(パラメータを設定するクエリ)の誤ったフォーマットを修正。CREATE INDEX クエリの誤ったフォーマットを修正。CREATE USER および類似クエリのフォーマットの不整合を修正。CREATE SETTINGS PROFILE のフォーマットの不整合を修正。ALTER ... MODIFY REFRESH の誤ったフォーマットを修正。フレームオフセットが式だった場合のウィンドウ関数のフォーマットの不整合を修正。plus などの演算子を実装する関数の後に使用された場合の RESPECT NULLSIGNORE NULLS のフォーマットの不整合を修正。SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM ... の極端に悪いフォーマットを修正。GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS を含む無効なクエリのフォーマットの不整合を修正。GRANT CURRENT GRANTS のフォーマットの不整合を修正。CREATE TABLE (... COLLATE) のフォーマットの不整合を修正。さらに、サブクエリ内の EXPLAIN の誤ったフォーマットを修正(#60102)。ラムダ関数の誤ったフォーマットを修正(#60012)。将来この種のひどいフォーマットを見逃さないようにチェックを追加。#60095Alexey Milovidov)。
  • サブクエリ内の EXPLAIN 出力の書式の不整合を修正 #60102 (Alexey Milovidov)。
  • Nullable 使用時に発生する cosineDistance のクラッシュを修正 #60150 (Raúl Marín)。
  • 文字列表現の bool 値を bool 型にキャストできるようにしました #60160 (Robert Schulze)。
  • system.s3queue_log を修正 #60166 (Kseniia Sumarokova)。
  • Nullable な集約関数名を指定した場合の arrayReduce の不具合を修正 #60188 (Raúl Marín)。
  • S3Queue の機密情報をマスク #60233 (Kseniia Sumarokova).
  • HTTP の例外コードを修正。 #60252 (Austin Kothig).
  • S3Queue:バグを修正(不安定だったテスト test_storage_s3_queue/test.py::test_shards_distributed も併せて修正) #60282 (Kseniia Sumarokova).
  • IPv6 を扱うハッシュ関数における未初期化値の使用および誤った結果を修正 #60359 (Kruglov Pavel)。
  • null 引数の処理に関する OptimizeDateOrDateTimeConverterWithPreimageVisitor を修正 #60453 (Raúl Marín)。
  • KQL または PRQL 方言を使用するクライアントのいずれかから送信された分散テーブルクエリがレプリカ上で実行できなかった軽微なバグを修正しました。 #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).

ClickHouse 24.1 リリース(2024-01-30)。プレゼンテーション動画

後方互換性のない変更

  • 設定 print_pretty_type_names がデフォルトで有効になりました。旧来の挙動を維持したい場合は、この設定を無効にするか、SET compatibility = '23.12' を実行してください。 #57726 (Alexey Milovidov).
  • MergeTree の設定 clean_deleted_rows は非推奨となり、もはや効果を持ちません。OPTIMIZE に対する CLEANUP キーワードは、デフォルトでは許可されません(allow_experimental_replacing_merge_with_cleanup が有効化されている場合を除く)。#58316 (Alexander Tokmakov).
  • 関数 reverseDNSQuery は利用できなくなりました。これにより #58368 がクローズされます。 #58369 (Alexey Milovidov).
  • 設定ファイル内のアクセス制御を改善するため、さまざまな変更が有効になりました。これらの変更は挙動に影響するため、access_control_improvements セクションの config.xml を確認してください。確信が持てない場合は、設定ファイル内の値を前バージョンと同じに保ってください。 #58584 (Alexey Milovidov).
  • NaN 値を扱う際の sumMapFiltered の動作が改善されました。NaN 値は(ランダムではなく)末尾に配置され、任意の値とは異なるものとして扱われます。また、-00 と等しいものとして扱われるようになりました。0 の値は破棄されるため、-0 の値も破棄されます。 #58959 (Raúl Marín).
  • 関数 visibleWidth はドキュメントに記載されているとおりに動作するようになります。以前のバージョンでは、lengthUTF8 関数と同様に、文字列のシリアライズ後のコードポイント数を数えるだけで、ゼロ幅文字や結合文字、全角文字、タブ、削除文字を考慮していませんでした。今後はこれらを考慮した挙動に変更されています。旧来の挙動を維持したい場合は、function_visible_width_behavior0 に設定するか、compatibility23.12 以下に設定してください。 #59022 (Alexey Milovidov).
  • Kusto 方言は、次の 2 つのバグが修正されるまで無効化されています: #59037 および #59036#59305 (Alexey Milovidov). Kusto を使用しようとすると、必ず例外が発生します。
  • FINAL 修飾子のより効率的な実装により、max_threads = 1 の場合であっても順序が維持されることは、もはや保証されません。これまでの挙動に依存している場合は、enable_vertical_final を 0 に設定するか、compatibility23.12 に設定してください。

新機能

  • 他のデータ型のユニオンを表す Variant データ型を実装しました。型 Variant(T1, T2, ..., TN) は、この型の各行は T1T2、…、TN のいずれか、またはいずれでもない値(NULL 値)を持つことを意味します。Variant 型は allow_experimental_variant_type 設定を有効にすると利用可能です。参考: #54864#58047Kruglov Pavel)。
  • 特定の設定(現在は min_compress_block_sizemax_compress_block_size)は、カラム単位で指定できるようになり、対応するテーブルレベルの設定よりも優先されます。例: CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();#55201Duc Canh Le)。
  • quantileDD 集約関数と、それに対応する quantilesDD および medianDD を追加しました。これは DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf に基づいています。### ユーザー向け変更に関するドキュメントエントリ。#56342Srikanth Chekuri)。
  • 任意の種類のメタデータ型を用いた任意の種類のオブジェクトストレージを構成できるようにしました。#58357 (Kseniia Sumarokova).
  • distributed_ddl_output_modenull_status_on_timeout_only_activethrow_only_active のモードを追加し、非アクティブなレプリカを待つ必要がなくなりました。 #58350 (Alexander Tokmakov).
  • 部分配列を計算するための関数 arrayShingles を追加しました。例えば、arrayShingles([1, 2, 3, 4, 5], 3)[[1,2,3],[2,3,4],[3,4,5]] を返します。 #58396 (Zheng Miao).
  • IDNA 標準に従って国際化ドメイン名を ASCII 表現に変換する際に有用な関数 punycodeEncodepunycodeDecodeidnaEncodeidnaDecode を追加しました。 #58454 (Robert Schulze)。
  • 文字列の類似度を計算する関数 dramerauLevenshteinDistancejaroSimilarityjaroWinklerSimilarity を追加しました。 #58531 (Robert Schulze).
  • 出力圧縮レベルを変更するための output_format_compression_level と、出力の圧縮方式が zstd の場合に圧縮ウィンドウサイズを明示的に設定し、ロングレンジモードを有効化するための output_format_compression_zstd_window_log という 2 つの設定を追加しました。これは INTO OUTFILE およびテーブル関数 fileurlhdfss3azureBlobStorage への書き込み時に適用されます。#58539 (Duc Canh Le).
  • 出力先がターミナルでない場合は、Pretty フォーマットでの ANSI エスケープシーケンスを自動的に無効化するようにしました。また、output_format_pretty_color 設定に新たに auto モードを追加しました。#58614 (Shaun Struwig)。
  • Sqids をデコードする sqidDecode 関数を追加しました。 #58544 (Robert Schulze)。
  • JSON 入力フォーマットで Bool 値を String 値として読み取れるようになりました。これは、デフォルトで有効な input_format_json_read_bools_as_strings SETTING によって制御されます。 #58561 (Kruglov Pavel).
  • 時系列データを季節性成分、トレンド成分、および残差成分に分解する関数 seriesDecomposeSTL を追加しました。 #57078 (Bhavna Jindal).
  • MaterializedMySQL 向けの MySQL Binlog Client を導入: 1 つの binlog 接続で複数のデータベースを扱えるようにしました。 #57323 (Val Doroshchuk)。
  • Intel QuickAssist Technology (QAT) は、ハードウェアアクセラレーションによる圧縮および暗号処理を提供します。ClickHouse に、新しい圧縮コーデック ZSTD_QAT が追加され、zstd 圧縮に QAT を利用できるようになりました。このコーデックは Intel's QATlibIntel's QAT ZSTD Plugin を使用します。現時点では、ハードウェアで高速化されるのは圧縮のみです(QAT を初期化できなかった場合はソフトウェアによるフォールバックが行われます)。伸長処理は常にソフトウェアで実行されます。#57509 (jasperzhu)。
  • S3 ディスク用にオブジェクトストレージのキーを生成する新しい方式を実装しました。キーのフォーマットは、ディスク定義内の key_template オプションを用いて、re2 正規表現構文で定義できるようになりました。 #57663 (Sema Checherinda)。
  • テーブル system.dropped_tables_parts には、system.dropped_tables テーブルのパーツ(DROP されたが、まだ物理的には削除されていないテーブル)が含まれます。 #58038 (Yakov Olkhovskiy).
  • テーブルに紐付けられる materialized view の数を制限する設定 max_materialized_views_size_for_table を追加しました。 #58068 (zhongyuankai).
  • clickhouse-format の改良: VALUES を使用した INSERT クエリのサポート、コメントのサポート(出力するには --comments を使用)、長いクエリに対してのみ複数行フォーマットを行うための --max_line_length オプションのサポート。 #58246 (vdimir)。
  • system.parts を含むすべての system テーブルを clickhouse-local でアタッチできるようにしました。これにより #58312 がクローズされます。#58359Alexey Milovidov)。
  • 関数 transformEnum データ型をサポートするようになりました。これにより #58241 がクローズされました。#58360Alexey Milovidov)。
  • テーブル system.database_engines を追加。 #58390 (Bharat Nallan)。データベースエンジンをコードベース内で個別に登録可能に。 #58365 (Bharat Nallan)。インタープリタを個別に登録可能に。 #58443 (Bharat Nallan)。
  • SYSTEM SYNC REPLICA LIGHTWEIGHT クエリ向けに FROM &lt;Replicas&gt; 修飾子を追加しました。FROM 修飾子を使用すると、指定されたソースレプリカに加えて、ZooKeeper 上に存在しないレプリカや source_replica が空のレプリカに対してのみ、フェッチおよび drop-range の完了を待機するようになります。#58393 (Jayme Bird)。
  • update_insert_deduplication_token_in_dependent_materialized_views SETTING を追加しました。この SETTING により、依存する materialized view への INSERT 時に、テーブル識別子を用いて INSERT の重複排除トークンを更新できるようになります。#59165 をクローズします。 #59238 (Maksim Kita)。
  • 非同期メトリクスを更新する SYSTEM RELOAD ASYNCHRONOUS METRICS ステートメントを追加しました。主にテストや開発時の利用に役立ちます。 #53710 (Robert Schulze)。

パフォーマンスの改善

  • 並列レプリカのコーディネーションが、より高い並列性とキャッシュ局所性を実現するように書き換えられました。数百のレプリカにおいて線形にスケールすることが検証されています。また、順序どおりに読み取ることもサポートしました。#57968 (Nikita Taranov)。
  • HTTP の送信バッファリングを、ネイティブ ClickHouse バッファに置き換えました。インターフェイスごとのバイト数を計測するメトリクスを追加しました。 #56064 (Yakov Olkhovskiy).
  • 分散クエリでは、uniqExact の大きな集約状態が並列にマージされるようになりました。 #59009 (Nikita Taranov).
  • MergeTree テーブルからの読み取り後のメモリ使用量を削減しました。 #59290 (Anton Popov).
  • vertical マージにおけるメモリ使用量を削減しました。 #59340 (Anton Popov).
  • より多くのケースで Keeper の起動時に大量のメモリを消費しないようにしました。 #58455 (Antonio Andelic).
  • Keeper の改善: 保存ノードに対して Keeper が使用するメモリ量を削減。 #59002 (Antonio Andelic).
  • よりキャッシュ効率の高い最終実装となりました。動作変更に関する注意: 以前は、単一ストリームで読み取りを行う(例: max_threads = 1FINAL 修飾子付きクエリは、明示的に ORDER BY 句を指定しなくてもソートされた出力を生成していました。enable_vertical_final = true の場合(これはデフォルトで有効です)、この挙動はもはや保証されません。#54366Duc Canh Le)。
  • ReadBufferFromIStream(S3 からの読み取りなどに使用される)での不要なコピー処理を回避しました。 #56961 (Nikita Taranov)。
  • 入力が Array(Map)/Array(Array(Num))/Array(Array(String))/Array(BigInt)/Array(Decimal) の場合に、arrayElement 関数を最適化しました。以前の実装では、必要以上に多くのメモリアロケーションを行っていました。この最適化により、とくに入力型が Array(Map) の場合に、最大で約 6 倍の高速化が得られます。 #56403 (李扬).
  • コンパクトなパーツから1つのカラムに含まれる複数のサブカラムを読み取る際、そのカラムの読み取りを1回にまとめました。 #57631 (Kruglov Pavel).
  • sum(column + constant) 関数の AST を書き換えました。Analyzer の最適化パスとして利用可能です #57853 (Jiebin Sun)。
  • 関数 match の評価時に、スキッピングインデックス ngrambf_v1 および tokenbf_v1 を利用するようになりました。 #57882 (凌涛).
  • 関数 match の評価に反転インデックスが利用されるようになりました。 #58284 (凌涛)。
  • MergeTree FINAL は、同じ L0 以外のパーツ内の行同士を比較しません。 #58142 (Duc Canh Le)。
  • iota 呼び出し(配列を連番で埋める処理)を高速化。 #58271 (Raúl Marín).
  • 非数値型に対する MIN/MAX の高速化。 #58334 (Raúl Marín).
  • BMI2/SSE の intrinsics を利用して、フィルターの組み合わせ(マルチステージ PREWHERE など)を最適化しました #58800 (Zhiguo Zhou)。
  • clickhouse-local が使用するスレッド数を 1 つ減らしました。 #58968 (Alexey Milovidov).
  • Nullable型での multiIf 関数のパフォーマンスを改善しました。 #57745 (KevinyhZou).
  • 未使用の jemalloc ページを解放する SYSTEM JEMALLOC PURGE を追加し、プロファイラが有効な場合に jemalloc プロファイルを制御する SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILE を追加しました。Keeper には jemalloc 関連の 4LW コマンドを追加しました。jemalloc の統計情報をダンプする jmst、およびプロファイラが有効な場合に jemalloc プロファイルを制御する jmfpjmepjmdp です。 #58665 (Antonio Andelic).
  • S3 へのバックアップ時のメモリ使用量を削減しました。 #58962 (Vitaly Baranov).

改善点

  • すべての system テーブルのカラムにコメント(簡潔な説明)を追加しました。これにはいくつか理由があります。- system テーブルは頻繁に利用しており、開発者にとって特定のカラムの目的や意味を理解するのが非常に難しい場合があります。- system テーブルは(新規追加や既存の変更を含めて)頻繁に変更されるため、それらに関するドキュメントは常に古くなりがちです。例えば、system.parts のドキュメントページを参照してください。多くのカラムが記載されていません。- 最終的には、ClickHouse 自体からドキュメントを直接生成できるようにしたいと考えています。 #58356Nikita Mikhaylov)。
  • サブクエリにエイリアスを付けなくても PASTE JOIN を使用するクエリを実行できるようにしました。 #58654 (Yarik Briukhovetskyi).
  • macOS での MySQLMariaDB 統合を有効化。これにより #21191 がクローズされました。 #46316 (Alexey Milovidov) (Robert Schulze)。
  • max_rows_in_set_to_optimize_join を既定で無効にしました。 #56396 (vdimir).
  • ON CLUSTER DDL クエリおよび Replicated データベースエンジンにおいて、ホスト名の解決を回避できるようにする <host_name> 構成パラメータを追加しました。これにより、クラスタ定義の変更があった場合にキューが詰まって停止する可能性が軽減されます。 #57573 をクローズしました。 #57603Nikolay Degterinsky)。
  • ファイルシステムキャッシュ用の load_metadata_threads を 16 に増やし、サーバーの起動時間を短縮しました。 #57732 (Alexey Milovidov)。
  • マージ/ミューテーションのスループットを制限できる機能を追加しました(max_mutations_bandwidth_for_server / max_merges_bandwidth_for_server)。#57877Azat Khuzhin)。
  • system テーブル system.server_settings 内のドキュメント化されていなかった (boolean) カラム is_hot_reloadable を、NoYesIncreaseOnlyDecreaseOnly の値を取りうる (Enum8) カラム changeable_without_restart に置き換えました。また、このカラムについてもドキュメント化しました。 #58029 (skyoct).
  • クラスターディスカバリでユーザー名とパスワードの設定に対応し、#58063 をクローズ。 #58123 (vdimir)。
  • ALTER TABLE ... PART でクエリパラメータのサポートを追加。 #58297 (Azat Khuzhin)。
  • Kafka テーブル向けのコンシューマをオンデマンドで作成し(ただし最後に使用されてから kafka_consumers_pool_ttl_ms で指定された一定期間は保持する)ことで、system.kafka_consumers の統計情報に関する問題(誰も Kafka テーブルから読み取っていない場合にはコンシュームされず、その結果、メモリリークが発生し、テーブルの detach が遅くなる)を修正します。また、この PR によって system.kafka_consumers の統計情報が再度デフォルトで有効化されます。 #58310 (Azat Khuzhin).
  • sparkbar の別名として sparkBar を追加。 #58335 (凌涛).
  • GCS へのアップロード後に ComposeObject リクエストを送信しないようにしました。 #58343 (Azat Khuzhin).
  • 構成 XML で名前にドットを含むキーを正しく処理できるようにしました。 #58354 (Azat Khuzhin).
  • 関数 format が定数引数に対して定数を返すようにしました。これにより #58355 が解決されました。 #58358Alexey Milovidov)。
  • max_execution_timemax_estimated_execution_time を切り離すための設定 max_estimated_execution_time を追加。 #58402 (Zhang Yifan).
  • 無効なデータベースエンジン名が指定された場合にヒントを表示するようになりました。 #58444 (Bharat Nallan).
  • Arrow Dictionary における索引の型をより細かく制御するための設定を追加しました。Arrow の推奨に従い、デフォルトで符号付き整数型の索引を使用するようにしました。#57401 をクローズ。#58519Kruglov Pavel)。
  • #58575 を実装し、Docker イメージ実行時に CLICKHOUSE_PASSWORD_FILE 環境変数をサポートしました。#58583Eyal Halpern Shalev)。
  • 多数のストリームを使用してデータを読み込む必要がある一部のクエリを実行すると、以前は "Paste JOIN requires sorted tables only" というエラーが発生していました。現在は、そのようなケースではストリーム数が 1 に縮小されるようになりました。 #58608 (Yarik Briukhovetskyi).
  • INVALID_IDENTIFIER エラー時のメッセージを改善。 #58703 (Yakov Olkhovskiy).
  • normalizeQuery での符号付き数値リテラルの処理を改善。 #58710 (Salvatore Mesoraca)。
  • MySQL の Point データ型をサポート。 #58721 (Kseniia Sumarokova).
  • Float32 カラムと const 文字列を比較する際、文字列を Float64 ではなく Float32 として読み取るようにしました。 #58724 (Raúl Marín).
  • S3 互換性を向上し、ECloud EOS ストレージのサポートを追加。 #58786 (xleoken).
  • KILL QUERY によってバックアップ/リストアをキャンセルできるようになりました。このPRでは、実行中のバックアップおよびリストアが system.processes に表示されるようにもなりました。さらに、サーバー設定に新しい設定項目 shutdown_wait_backups_and_restores(デフォルト=true)が追加され、サーバーのシャットダウン時に、実行中のすべてのバックアップおよびリストアの完了を待つか、それらをキャンセルするかを選択できるようになりました。 #58804 (Vitaly Baranov)。
  • Avro 形式で ZSTD コーデックをサポートしました。#58735 をクローズしました。#58805flynn)。
  • MySQL インターフェースで net_write_timeoutnet_read_timeout の設定がサポートされました。net_write_timeout は ClickHouse のネイティブな設定である send_timeout に、同様に net_read_timeoutreceive_timeout に変換されます。MySQL の sql_select_limit 設定を、ステートメント全体が大文字の場合にしか設定できなかった問題を修正しました。#58835 (Serge Klochkov)。
  • 同じ名前のDictionaryとテーブルを作成しようとして競合が発生した場合の例外メッセージを、よりわかりやすいものにしました。 #58841 (Yarik Briukhovetskyi).
  • カスタムディスク(SQL から作成されたもの)の場合は、サーバー設定で必ず filesystem_caches_path(すべてのファイルシステムキャッシュに共通のディレクトリプレフィックス)または custom_cached_disks_base_directory(カスタムディスクから作成されたファイルシステムキャッシュにのみ共通のディレクトリプレフィックス)のいずれかを指定してください。custom_cached_disks_base_directory はカスタムディスクに対して filesystem_caches_path よりも優先され、custom_cached_disks_base_directory が存在しない場合にのみ filesystem_caches_path が使用されます。ファイルシステムキャッシュの設定項目 path は必ずそのディレクトリ配下である必要があり、そうでない場合はディスクの作成を防ぐために例外がスローされます。これは、古いバージョンで作成されたディスクが存在し、その後サーバーをアップグレードした場合には影響せず、その場合はサーバーが正常に起動できるように例外はスローされません。custom_cached_disks_base_directory はデフォルトのサーバー設定に /var/lib/clickhouse/caches/ として追加されました。#57825 をクローズ。#58869Kseniia Sumarokova)。
  • MySQL インターフェースが SHOW WARNINGS / SHOW COUNT(*) WARNINGS クエリに対応しましたが、返される結果は常に空の結果セットです。#58929Serge Klochkov)。
  • 並列分散 INSERT SELECT を実行する際に、利用できないレプリカをスキップするようにしました。 #58931 (Alexander Tokmakov).
  • 構造化ログの JSON 形式を有効にした際に、ログレベルを数値ではなく、人間が読みやすい単語(文字列表現)で表示するようにしました。 #58936 (Tim Liou).
  • MySQL インターフェイスで、データ型エイリアスにより CAST(x AS SIGNED) および CAST(x AS UNSIGNED) 文がサポートされました。SIGNED は Int64 を、UNSIGNED は UInt64 を表します。これにより、Looker Studio などの BI ツールとの互換性が向上します。 #58954 (Serge Klochkov)。
  • Docker コンテナ内の作業ディレクトリをデータパスに変更。 #58975 (cangyin).
  • Azure Blob Storage 向けの設定項目 azure_max_unexpected_write_error_retries を追加しました。これは、azure セクション配下の設定ファイルからも指定できます。 #59001 (SmitaRKulkarni)。
  • 破損したデータレイクテーブルが存在していてもサーバーを起動できるようにしました。 #58625 をクローズしました。 #59080Kseniia Sumarokova)。
  • Iceberg テーブルエンジンでスキーマの進化を無視し、テーブル作成時にユーザーが指定したスキーマ、またはテーブル作成時にメタデータから解析された最新のスキーマを使用してすべてのデータを読み取れるようにしました。これは、デフォルトでは無効になっている iceberg_engine_ignore_schema_evolution という設定で行われます。この設定を有効にすると、進化したスキーマがある場合でもすべてのデータファイルが同じスキーマで読み取られるため、結果が不正確になる可能性がある点に注意してください。 #59133 (Kruglov Pavel).
  • 読み取り専用/一度だけ書き込み可能なストレージに対する可変操作(INSERT/ALTER/OPTIMIZE/...)を禁止し、適切な TABLE_IS_READ_ONLY エラーを返すようにして(不要な残りデータが発生しないようにする)。一度だけ書き込み可能なディスク上での CREATE/ATTACH 時に、format_version.txt などの不要なファイルが残らないようにする。ReplicatedMergeTree に対する DROP を(MergeTree と同様に)無視する。s3_plainMetadataStorageFromPlainObjectStorage::iterateDirectory)でのディレクトリ走査処理を修正。読み取り専用ディスクは web、一度だけ書き込み可能なディスクは s3_plain であることに注意。#59170Azat Khuzhin)。
  • 実験的な _block_number カラムにおいて、ALTERmerge を複雑に組み合わせて実行した際に論理エラーを引き起こす可能性があったバグを修正しました。#56202 を解決し、#58601 を置き換えます。#59295alesapin)。
  • Play UI が JSON 内で例外が返されていることを認識できるようになりました。 #52853 への調整。 #59303Alexey Milovidov)。
  • /binary HTTP ハンドラーで、クエリ文字列内で user、host、および任意で password を指定できるようになりました。 #59311 (Alexey Milovidov).
  • 圧縮インメモリテーブルに対するバックアップをサポートしました。これにより #57893 が解決されました。 #59315 (Alexey Milovidov)。
  • BACKUP および RESTORE クエリで FORMAT 句が利用可能になりました。 #59338 (Vitaly Baranov).
  • 関数 concatWithSeparator は、これまでは String および FixedString 型の引数のみをサポートしていましたが、任意の型の引数をサポートするようになりました。たとえば、SELECT concatWithSeparator('.', 'number', 1)number.1 を返します。 #59341 (Robert Schulze)。

ビルド/テスト/パッケージングの改善

  • clickhouse バイナリのエイリアスを改善し(引数に応じて ch / clickhouseclickhouse-local または clickhouse になります)、新しいエイリアス向けに bash 補完を追加しました。#58344 (Azat Khuzhin).
  • すべての設定変更が設定変更履歴に反映されていることを検証するために、CI に settings の変更チェックを追加しました。#58555 (Kruglov Pavel).
  • stateful テストで、S3 から直接アタッチされたテーブルを使用するようにしました。#58791 (Alexey Milovidov).
  • fuzzer.log 全体を、最後の 100k 行だけではなくアーカイブとして保存するようにしました。tail -n 100000 により、テーブル定義を含む行が削除されてしまうことがよくあります。例: #58821 (Dmitry Novik).
  • Aarch64 を搭載した macOS 上で Rust を有効化しました(これにより、クライアントで skim を用いたファジー検索と PRQL 言語が利用可能になります。ただし、darwin 上で ClickHouse をホストしている人はほとんどいないと思われるため、主にクライアントのファジー検索のためと言えるでしょう)。#59272 (Azat Khuzhin).
  • x86_64 と ARM が混在するクラスタにおける集約の問題を修正しました。#59132 (Harry Lee).

バグ修正(公式安定版リリースにおけるユーザー影響のある不具合)

  • ネストされた LowCardinality に対する結合キーの変換を追加 #51550 (vdimir).
  • flatten_nested=1 の場合に実際の Nested 型のみをフラット化し、すべての Array(Tuple) をフラット化しないようにしました #56132 (Kruglov Pavel)。
  • 挿入時の PROJECTION と aggregate_functions_null_for_empty 設定に関するバグを修正しました。 #56944 (Amos Bird).
  • 古くなったプロファイル UUID が原因で発生する可能性があった例外を修正しました #57263 (Vasily Nemkov)。
  • StreamingFormatExecutor での読み取りバッファの取り扱いを修正 #57438 (Kruglov Pavel)。
  • ビューへのプッシュ処理中に、対象テーブルが削除されているマテリアライズドビューを無視するようにしました #57520 (Kruglov Pavel).
  • ALTER_METADATA と MERGE_PARTS の間で発生しうるレースコンディションを解消しました #57755 (Azat Khuzhin)。
  • ROLLUP を伴う GROUP BY における式の順序のバグを修正 #57786 (Chen768959)。
  • 廃止された「ゼロコピー」レプリケーション機能に関する修正:壊れた detached パーツを含むレプリカを削除した後に BLOB が失われる不具合を修正 #58333 (Alexander Tokmakov)。
  • user_files_path 内のシンボリックリンクをユーザーが利用できるようにしました #58447 (Duc Canh Le)。
  • graphite テーブルに集約関数が存在しない場合に発生していたクラッシュを修正。 #58453 (Duc Canh Le)。
  • materialized view での複数回の読み取りを可能にするため、StorageKafka からの読み取りを遅延させるようにしました #58477 (János Benjamin Antal)。
  • パーツが交差する異常なケースを修正 #58482 (Alexander Tokmakov)。
  • LIMIT 句のみのクエリで MergeTreePrefetchedReadPool を無効化 #58505 (Maksim Kita).
  • 復元処理中でも ordinary データベースを有効化 #58520 (Jihyuk Bok)。
  • ORC/Parquet/... に対する Apache Hive のスレッドプール読み取りを修正しました。 #58537 (sunny).
  • system.backup_logbase_backup_name カラムに含まれる認証情報を非表示化 #58550 (Daniel Pozo Escalona)。
  • ミリ秒およびマイクロ秒単位の値の丸めにおける toStartOfInterval の修正 #58557 (Yarik Briukhovetskyi)。
  • ConcurrentHashJoin で max_joined_block_rows を無効化。#58595 (vdimir)。
  • 旧アナライザーにおける Nullable を使用した JOIN を修正。#58596 (vdimir)。
  • makeDateTime64: 非定数の fraction 引数を許可 #58597 (Robert Schulze).
  • インラインフレームのシンボル化中に発生する可能性のある NULL デリファレンスを修正 #58607 (Azat Khuzhin)。
  • 再作成されたユーザーやロール切り替え時のクエリキャッシュエントリの分離性を改善 #58611 (Robert Schulze).
  • PROJECTION の最適化を行う際に、パーティションキー解析が正しく機能していなかった問題を修正。 #58638 (Amos Bird).
  • クエリキャッシュ: ユーザー単位の QUOTA を修正 #58731 (Robert Schulze).
  • 並列ウィンドウ関数におけるストリームのパーティション分割を修正 #58739 (Dmitry Novik)。
  • addBatchLookupTable8 において、例外スロー時に発生していた destroy の二重呼び出しを修正 #58745 (Raúl Marín)。
  • シャットダウン中は Keeper でリクエストを処理しないように修正 #58765 (Antonio Andelic).
  • SlabsPolygonIndex::find におけるヌルポインタ参照を修正 #58771Yarik Briukhovetskyi)。
  • LowCardinality(Nullable) カラムに対する JSONExtract 関数の不具合を修正 #58808 (vdimir)。
  • CREATE および DROP で非常に多くのテーブルを作成・削除する際に発生していた、メモリ使用量が予期せず増加し続ける問題を修正しました。 #58831 (Maksim Kita).
  • マテリアライズドビュー(mv)における multiple read file ログの保存 #58877János Benjamin Antal)。
  • S3 のアクセスキー ID に制限を追加。 #58900 (MikhailBurdukov).
  • suggestions 読み込み中に clickhouse-local がクラッシュする可能性があった問題を修正 #58907 (Kruglov Pavel)。
  • indexHint 使用時にクラッシュする問題を修正 #58911 (Dmitry Novik)。
  • サーバー再起動時にヘッダーが失われる StorageURL を修正 #58933 (Michael Kolupaev)。
  • Analyzer: 挿入ブロックを用いたストレージ置換を修正 #58958 (Yakov Olkhovskiy).
  • ReadBufferFromZipArchive のシーク処理を修正 #58966 (Michael Kolupaev).
  • 実験的な反転インデックス(本番環境では使用しないでください)に対する修正:反転インデックスに対する DROP INDEX により、永続ストレージから関連するすべてのファイルが削除されるようになりました #59040 (mochi)。
  • query_factories_info で発生するデータレースを修正 #59049 (Kseniia Sumarokova).
  • "Too many redirects" エラー発生時の再試行を無効化 #59099 (skyoct).
  • 未起動のデータベースのシャットダウン時に発生するデッドロックを修正 #59137 (Sergei Trifonov)。
  • 修正: 分散クエリにおける LIMIT BY と LIMIT #59153 (Igor Nikonov).
  • toString において Nullable なタイムゾーンを指定した場合に発生するクラッシュを修正 #59190 (Yarik Briukhovetskyi)。
  • 不正なファイルパスにより Iceberg メタデータで発生する異常終了を修正 #59275 (Kruglov Pavel)。
  • Rust ターゲットの select で使用するアーキテクチャ名を修正 #59307p1rattttt)。
  • IN 句内のサブクエリを含む system.tables へのクエリで発生する「not-ready set」に関する論理エラーを修正。 #59351 (Nikolai Kochetov).

2023 年の変更履歴

  • 目次
  • ClickHouse リリース 24.12(2024-12-19)。プレゼンテーション、ビデオ
  • ClickHouse リリース 24.11(2024-11-26)。プレゼンテーション、動画
  • ClickHouse リリース 24.10(2024-10-31)。プレゼンテーション、動画
  • ClickHouse リリース 24.9(2024-09-26)プレゼンテーション、動画
  • ClickHouse リリース 24.8 LTS、2024-08-20。プレゼンテーション、動画
  • ClickHouse リリース 24.7(2024-07-30)。プレゼンテーション資料、動画
  • ClickHouse 24.6 リリース(2024-07-01)。プレゼンテーション、動画
  • ClickHouse リリース 24.5(2024-05-30)。プレゼンテーション、動画
  • ClickHouse リリース 24.4(2024-04-30)。プレゼンテーション、動画
  • ClickHouse 24.3 LTS リリース(2024-03-27)。プレゼンテーション、動画
  • ClickHouse リリース 24.2(2024-02-29)。プレゼンテーション、動画
  • ClickHouse 24.1 リリース(2024-01-30)。プレゼンテーション、動画
  • 2023 年の変更履歴