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

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 段階へ移行しました。#72294Pavel Kruglov)。さらに、この変更を含むすべての修正を 24.11 にもバックポートしました。
  • Iceberg data storage フォーマットのスキーマ進化機能により、ユーザーはテーブルのスキーマを柔軟に変更できます。カラム順序やカラム名、単純な型の拡張は、内部的に透過的に変更されます。#69445Daniil Ivanik)。
  • Iceberg REST Catalog との統合: Iceberg という名前の新しいデータベースエンジンにより、Iceberg REST Catalog 全体を 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 として、またその逆に ReplicatedMergeTree テーブルを MergeTree としてアタッチできるクエリを追加しました:ATTACH TABLE ... AS REPLICATED および ATTACH TABLE ... AS NOT REPLICATED#65401Kirill)。
  • HTTP レスポンスヘッダーをカスタマイズできる新しい設定 http_response_headers が追加されました。例えば、データベースに保存されている画像をブラウザで直接表示させることができます。これにより #59620 がクローズされました。#72656Alexey Milovidov)。
  • DateTime64 を秒単位の精度を持つ Int64 値に変換する関数 toUnixTimestamp64Second を追加しました。これにより、日付が Unix エポックより前の場合に負の値を返せるようになります。 #70597 (zhanglistar). #73146 (Robert Schulze).
  • 新しい設定 enforce_index_structure_match_on_partition_manipulation を追加し、ソーステーブルのプロジェクションとセカンダリインデックスのセットがターゲットテーブルのそれらの部分集合である場合に ATTACH を許可できるようにしました。 #70602 をクローズしました。 #70603 (zwy991114)。
  • 構文 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).
  • translate 関数は、from 引数が to 引数より多くの文字を含む場合に、文字の削除をサポートするようになりました。例: SELECT translate('clickhouse', 'clickhouse', 'CLICK') は、現在 CLICK を返します。#71441shuai.xu)。

実験的機能

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

パフォーマンスの向上

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

改善

  • allow_experimental_join_condition 設定を削除し、非等値条件がデフォルトで許可されるようにしました。 #69910 (Vladimir Cherkasov)。
  • サーバー設定ファイル(users.xml)の内容がクライアントにも適用されるようになりました。date_time_output_format などのフォーマット設定に便利です。 #71178 (Michael Kolupaev)。
  • サーバー/ユーザーのメモリ使用量に応じて、GROUP BY / ORDER BY を自動的にディスクへオフロードします。max_bytes_ratio_before_external_group_by / max_bytes_ratio_before_external_sort クエリ設定で制御できます。#71406Azat 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)。
  • クエリで UNION [ALL] を使用した CREATE MATERIALIZED VIEW が利用できるようになりました。挙動は JOIN を用いたマテリアライズドビューと同様で、SELECT 式内の最初のテーブルだけが挿入のトリガーとして機能し、他のすべてのテーブルは無視されます。ただし、最初のテーブルへの参照が複数ある場合(例: 自身との UNION)には、それらはすべて挿入されたデータブロックとして処理されます。 #72347 (alesapin).
  • ClickHouse を辞書のソースとして使用する場合のソースクエリ検証を追加しました。 #72548 (Alexey Katsman)。
  • ClickHouse が設定の再読み込み時にも ZooKeeper の変更を認識できるようにしました。 #72593 (Azat Khuzhin).
  • キャッシュされたマークのメモリ使用量の推定を改善し、キャッシュ全体のメモリ使用量を削減しました。 #72630 (Antonio Andelic).
  • 新しい StartupScriptsExecutionState メトリクスを追加しました。このメトリクスは 3 つの値を取り、0 = スタートアップスクリプトがまだ完了していない、1 = スタートアップスクリプトが正常に実行された、2 = スタートアップスクリプトが失敗した、を表します。このメトリクスは、特にベース構成のリリース後に、クラウド環境でスタートアップスクリプトが正常に実行されているかどうかを把握するために必要です。#72637Miс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)。
  • 関数 toFloat64/touInt32 などで 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 において、このメタデータを最後に使用していたテーブルが削除された後にのみ、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 値のシリアル化を修正。#71923Pavel 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 が、すでに単一パーツにマージ済みの同じパーティションを繰り返しマージしようとして行き詰まり、複数パーツを持つパーティションをマージしない問題を修正しました。 #72209 (Christoph Wurm).
  • 疎なカラムを処理する際に、まれに発生していた SimpleSquashingChunksTransform のクラッシュを修正しました。 #72226 (Vladimir Cherkasov).
  • GraceHashJoin におけるデータレースを修正しました。これが原因で、結合結果から一部の行が欠落する可能性がありました。 #72233 (Nikita Taranov)。
  • enable_block_number_column 設定が有効な場合の、マテリアライズド _block_number カラムを使用する ALTER DELETE クエリの問題を修正しました。 #72261 (Anton Popov).
  • ColumnDynamic::dumpStructure() が同時に呼び出される場合(例: ConcurrentHashJoin コンストラクタ内)に発生していたデータ競合を修正しました。 #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 の不正な形式を修正。#72567Konstantin Bogdanov)。
  • 要素が 1 つだけの glob パターン({file} など)の解析を修正しました。 #72572 (Konstantin Bogdanov)。
  • ARRAY JOIN を含む分散クエリにおいて、フォロワーサーバー向けのクエリ生成を修正しました。これにより #69276 を解決します。#72608Dmitry Novik)。
  • DateTime64DateTime64IN 演算が結果を返さないバグを修正。 #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 でスローされる例外を修正。 #72759Andrey Zvonov)。
  • enable_block_number_column 設定が有効な場合に、マテリアライズド _block_number 列を持つミューテーションの不具合を修正しました。 #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 バンドルの一部になりました。これにより次の課題が解決されます: #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)。
  • (サブクエリを含む)ミューテーションクエリ全体を、実行前に検査するようにしました。これにより、誤って無効なクエリを実行してしまい、有効なミューテーションをブロックする不要なミューテーションが蓄積されることを防ぎます。#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 ストレージ、dictionary テーブル関数、または辞書自体に対する直接の SELECT によって辞書からデータを直接取得する場合、辞書に対する 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)で user/password(ユーザー名 / パスワード)を設定できる機能を追加しました。 #70725 (Azat Khuzhin).
  • ORDER BY WITH FILL 演算子において staleness 句をサポートしました。 #71151 (Mikhail Artemenko).
  • 各認証方式ごとに個別の有効期限を持てるようにし、ユーザーエンティティからは削除しました。 #70090 (Arthur Passos).
  • 新しい関数 parseDateTime64, parseDateTime64OrNull, parseDateTime64OrZero を追加しました。既存の parseDateTime(およびそのバリアント)と比較して、これらは DateTime ではなく DateTime64 型の値を返します。 #71581 (kevinyhzou).

パフォーマンスの向上

  • パート内の粒度が一定である場合のインデックス粒度値に対するメモリ使用量を最適化しました。パートに対して常に一定の粒度を選択できる設定(use_const_adaptive_granularity)を追加し、その場合にメモリ使用量が常に最適化されるようにしました。これにより、共有ストレージ上に数兆行規模の大きなワークロードがある場合でも、データパートのメタデータ(インデックス粒度の値)によるメモリ使用量の継続的な増加を防ぐことができます。#71786Anton Popov)。
  • join_algorithm = 'parallel_hash' 使用時には、並列処理のためにスレッド間で分配する際に、入力ブロックの列をコピーしないようにしました。 #67782 (Nikita Taranov).
  • 互いに交差しないパーツに対する Replacing マージアルゴリズムの最適化。 #70977 (Anton Popov).
  • metrics および system.detached_parts において、readonly ディスクおよび write-once ディスク上の detached parts を一覧表示しないようにしました。 #71086 (Alexey Milovidov).
  • 重い非同期メトリクスをデフォルトでは計算しないようにしました。この機能は #40332 で導入されましたが、ごく一部の顧客にしか必要とされない重いバックグラウンドジョブを常時走らせるのは好ましくありません。#71087Alexey Milovidov)。
  • plain_rewritable ディスクの場合は、ディレクトリを一覧表示するときにオブジェクトストレージ API を呼び出さないでください。コスト効率が悪くなる可能性があります。代わりに、ファイル名の一覧をメモリに保持してください。このアプローチのトレードオフとして、初回ロード時間とファイル名を保持するために必要なメモリが増加します。 #70823 (Julia Kartseva).
  • クリティカルセクションを短縮することで、system.query_metric_log の収集間隔におけるパフォーマンスと精度を改善しました。 #71473 (Pablo Marcos).
  • 仮想行を生成することで順序どおりの読み込みを最適化し、特に複数のパーツが存在する場合のマージソート中に読み取る必要があるデータ量を削減しました。 #62125 (Shichao Jin).
  • サーバー設定 async_load_system_database を追加しました。これにより、system データベースの読み込みが完了していなくてもサーバーを起動できるようになります。system テーブルが多数存在する場合に、ClickHouse の起動をより高速化するのに役立ちます。#69847Sergei Trifonov)。
  • clickhouse-compressor--threads パラメーターを追加し、データを並列に圧縮できるようにしました。 #70860 (Alexey Milovidov).
  • prewarm_mark_cache という設定を追加しました。これにより、テーブルへの挿入、マージ、パーツのフェッチ時およびテーブルの起動時に、マークが 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 に対しては anyLastRespectNullslastValueRespectNulls というエイリアスも追加しました。これにより、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 年以上の期間にまたがるアップグレードをサポートしていないため、ノードを作成するのではなく、例外をスローしてユーザーに段階的にアップグレードするよう求めるべきです。#71385 (Miсhael Stetsyuk)。
  • ホストごとのダッシュボード Overview (host)Cloud overview (host) を高度なダッシュボードに追加しました。 #71422 (alesapin).
  • clickhouse-local はデフォルトで暗黙の SELECT を使用しており、電卓として利用できます。暗黙の SELECT モードにおける構文ハイライトを改善しました。 #71620 (Alexey Milovidov).
  • コマンドラインアプリケーションでは、複数ステートメントでも構文がハイライト表示されます。 #71622 (Alexey Milovidov).
  • コマンドラインアプリケーションは、エラー時に非ゼロの終了コードを返すようになります。以前のバージョンでは、disks アプリケーションはエラー時にも終了コード 0 を返し、他のアプリケーションもエラーコード 256(PARTITION_ALREADY_EXISTS)および 512(SET_NON_GRANTED_ROLE)に対して終了コード 0 を返していました。 #71623 (Alexey Milovidov)。
  • ユーザー/グループが ID で指定された場合、clickhouse su は失敗していました。このパッチにより、UID:GID 形式の指定も受け付けるように修正されました。 #71626 (Mikhail f. Shiryaev).
  • filesystem_cache_prefer_bigger_buffer_size 設定により、ファイルシステムキャッシュのメモリバッファサイズ拡大を無効化できるようにしました。 #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 秒に設定。 #71817 (Kseniia Sumarokova).
  • history 期間中に 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).
  • 同じ zk path を持つ別のレプリカが存在する場合でも、system drop replica zkpath を実行できるようにしました。 #70642 (MikhailBurdukov).
  • AggregateFunctionGroupArraySorted のクラッシュおよびメモリリークを修正。 #70820 (Michael Kolupaev).
  • URL エンジンで、ユーザー指定ヘッダーにより Content-Type を上書きできるようにした。 #70859 (Artem Iurin).
  • StorageS3Queue の論理エラー「Cannot create a persistent node in /processed since it already exists」を修正しました。 #70984 (Kseniia Sumarokova).
  • 特定の状況下で名前付きセッションが終了せず、ハングし続ける問題を修正しました。 #70998 (Márcio Martins).
  • projection の lightweight delete の 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 フォーマットにおいて、フォーマット設定が無視される問題を修正。 #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 column からの LowCardinality 辞書のデシリアライズ時に発生する可能性のあるエラー「Cannot read all data」を修正します。#71299 (Pavel Kruglov).
  • クライアントにおける並列出力フォーマットのクリーンアップが不完全だった問題を修正。 #71304 (Raúl Marín).
  • 名前付きコレクションで不足していたエスケープ解除処理を追加しました。この修正がないと clickhouse-server は起動できません。 #71308 (MikhailBurdukov).
  • ネイティブプロトコル経由で空ブロックを含む非同期挿入の問題を修正。 #71312 (Anton Popov).
  • 誤ったワイルドカード権限を付与した場合にASTのフォーマットが不整合になる問題を修正 #71309#71332pufit)。
  • std::terminate の発生を避けるため、データパーツのデストラクタに try/catch を追加しました。 #71364 (alesapin).
  • JSON の型ヒントで疑わしい型や実験的な型を検査するようにしました。 #71369 (Pavel Kruglov).
  • Linux 以外の OS でもメモリワーカースレッドを起動するようにしました(#71051 の修正)。#71384Alexandre Snarskii)。
  • Variant カラムを含む Chunk で発生する「Invalid number of rows」エラーを修正。 #71388 (Pavel Kruglov).
  • 古い PostgreSQL バージョンで列 "attgenerated" が存在しないエラーを修正し、#60651 を修正。#713960xMihalich)。
  • サーバーログをスパムしないように、失敗した認証試行は ERROR レベルではなく DEBUG レベルで記録されるようになりました。 #71405 (Robert Schulze).
  • 誤った引数(例: NULL)を渡した場合に mongodb テーブル関数がクラッシュする問題を修正しました。#71426 (Vladimir Cherkasov)。
  • optimize_rewrite_array_exists_to_has 有効時に発生するクラッシュを修正。 #71432 (Raúl Marín).
  • max_insert_delayed_streams_for_parallel_write 設定の INSERT 時の使用方法を修正しました。以前は正しく動作しておらず、複数のパーティションにデータを書き込む INSERT において、高いメモリ使用量を引き起こす可能性がありました。 #71474 (Anton Popov).
  • WHERE 句内に arrayJoin が現れる可能性がある場合に発生しうる、旧アナライザでの 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 型に対して、ワイドパートにおけるカウント用カラムのサイズを修正しました。#71526 (Pavel Kruglov).
  • マテリアライズドビュー内のクエリが CTE とともに IN を使用している場合を Analyzer が正しく処理できるよう修正。#65598 をクローズ。#71538Maksim Kita)。
  • 制約内で UDF を使用した際にクラッシュしないようにしました。 #71541 (Raúl Marín).
  • 範囲外の場合、bitShift 関数でエラーをスローするのではなく、0 またはデフォルトの文字を返すようにしました。 #71580 (Pablo Marcos).
  • 特定のエンジンと併用したマテリアライズドビュー使用時に発生するサーバークラッシュを修正。 #71593 (Pervakov Grigorii).
  • 定数配列へのエイリアスを含むネストしたデータ構造に対して array join を行うと、ヌルポインタ参照が発生していました。これにより #71677 が解決されました。#71678Alexey Milovidov)。
  • 空のタプルで ALTER を実行すると発生する LOGICAL_ERROR を修正。これにより #71647 が解決されます。#71679Amos 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)。
  • WHERE 句で DateTime64 型の主キーに対して 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)。
  • MergeTree テーブルの ORDER BY で、最初の引数が定数のバイナリ単調関数を使用した場合に発生する 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] の順序であるべきところ、誤った順序で記述してしまうバグがありました。#71991 (Han 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 が stderr に "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 が解決されます。さらに、1つのクエリ内で SETTINGS 句が連続して2回指定されている場合の動作を変更しました。対応するサブクエリに最も近い SETTINGS 句が優先されます。以前のバージョンでは、より外側の SETTINGS 句が内側よりも優先される場合がありました。 #68614 (Alexey Milovidov).
  • デフォルトで [PRE]WHERE 句に含まれるフィルタ条件の並べ替えが許可されるようになりました。これは allow_reorder_prewhere_conditionsfalse に設定することで無効化できます。 #70657 (Nikita Taranov).
  • ライセンスが非互換な idxd-config ライブラリを削除しました。これに伴い、実験的な Intel DeflateQPL コーデックも削除されました。 #70987 (Alexey 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 をクローズします。 #69091 (tuanpach)。
  • 新しいシステムテーブル system.query_metric_log を追加しました。これは、個々のクエリごとに system.events テーブルから取得したメモリおよびメトリクス値の履歴を保持し、定期的にディスクにフラッシュします。 #66532 (Pablo Marcos)。
  • 簡単な SELECT クエリは、暗黙の SELECT を使用して電卓スタイルの式を有効にする形で記述できます(例: ch "1 + 2")。これは新しい設定項目 implicit_select によって制御されます。 #68502 (Alexey Milovidov)。
  • フォーマット変換のためのショートカットとして --copy モードを clickhouse local でサポートしました #68503#68583Denis Hananein)。
  • /merges パスで利用できる、マージを可視化するための組み込み HTML ページを追加しました。 #70821 (Alexey Milovidov).
  • arrayUnion 関数のサポートを追加しました。 #68989 (Peter Nguyen)。
  • パラメータ付き SQL エイリアスを許可。#50665Anton 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)
  • WITH ... INSERT 形式の CTE をサポートするようになりました。以前は INSERT ... WITH ... のみをサポートしていました。 #70593 (Shichao Jin).
  • MongoDB 連携: すべての MongoDB 型のサポート、MongoDB 側での WHERE および ORDER BY ステートメントのサポート、MongoDB でサポートされない式に対する制限。なお、新しい連携はデフォルトで無効になっているため、使用するにはサーバー設定で <use_legacy_mongodb_integration>false に設定してください。#63279 (Kirill Nikiforov)。
  • カスタム設定が現在のプロファイル内に見つからない場合に、例外をスローせずにデフォルト値を返す新しい関数 getSettingOrDefault が追加されました。 #69917 (Shankar).

実験的機能

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

パフォーマンスの向上

  • IDiskIObjectStorage をリファクタリングしてパフォーマンスを向上しました。plain および plain_rewritable オブジェクトストレージ上のテーブルがより高速に初期化されます。#68146 (Alexey Milovidov, Julia Kartseva)。plain_rewritable ディスク上でファイルまたはディレクトリの存在確認を行う際、コスト効率が悪くなり得るため LIST オブジェクトストレージ API を呼び出さないようにしました。#70852 (Julia Kartseva)。plain_rewritable ディスクにおけるオブジェクトストレージ HEAD API のリクエスト数を削減しました。#70915 (Julia Kartseva)。
  • データを直接スパースカラムにパースする機能を追加しました。 #69828 (Anton Popov).
  • 欠損値が多いフォーマット(例: JSONEachRow)の解析パフォーマンスを改善しました。 #69875 (Anton Popov).
  • Parquet の row group の並列読み取りと、シングルスレッドモードでの row group の先読みをサポートします。#69862 (LiuNeng).
  • pointInPolygon に minmax インデックスのサポートを追加。#62085 (JackyWoo)。
  • Parquet ファイルの読み取り時にブルームフィルターを使用します。 #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 関数のパフォーマンスを向上。#71042kevinyhzou)。
  • ブロッキング I/O を扱う際に、サーバー全体でページキャッシュからのノンブロッキング読み取りを無効化しないようにしました。特定のファイルシステム(例: tmpfs)のみが preadv2 システムコールをサポートしておらず、他はサポートしている場合に、これがパフォーマンス低下を引き起こしていました。 #70299 (Antonio Andelic).
  • ALTER TABLE .. REPLACE PARTITION は、他のパーティションで発生している mutation や merge の完了を待機しなくなりました。 #59138 (Vasily Nemkov).
  • Keeper から ACL を同期するときには検証を行わないようにしました。作成時には既に検証されています。本来はそれほど問題にはなりませんが、ユーザーが数万、あるいはそれ以上作成されている環境では、不要なハッシュ検証によってサーバー起動中に(Keeper からすべてを同期するため)、処理が完了するまでに長時間かかる場合があります。#70644Raúl Marín)。

改善

  • CREATE TABLE AS は、PRIMARY KEYORDER BY、およびそれらに類似する句(MergeTree テーブルのもの)をコピーします。#69739 (sakulali)。
  • Keeper で 64-bit XID のサポートを追加しました。use_xid_64 設定値で有効化できます。#69908Antonio 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).
  • 関数 replace で空の needle を許可し、PostgreSQL と同じ動作にしました。#69918zhanglistar)。
  • 関数 replaceRegexp* で空の検索パターンを使用できるようにしました。 #70053 (zhanglistar).
  • data/database_name/ ディレクトリ内のテーブルに対するシンボリックリンクは、デフォルトディスク上の store/... ディレクトリではなく、ストレージポリシーに応じてテーブルデータの実際のパスを指すように作成されるようになりました。 #61777 (Kirill).
  • JSON から Enum フィールドをパースする際、整数値を表す文字列は対応する Enum 要素として解釈されます。これにより #65119 が解決されました。 #66801 (scanhex12)。
  • 空文字列を対象とする TRIMLEADING または TRAILING を、何もしない操作として扱うようにしました。 #67792 をクローズ。 #68455Peter Nguyen)。
  • cast(timestamp as String) の Spark との互換性を改善しました。 #69179 (Wenzheng Liu).
  • enable_analyzertrue に設定されている場合、定数式の計算には常に新しいアナライザーを使用します。定数式に対して 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"} のいずれかであり、かつカラム名やディクショナリの属性名など、あいまいさを引き起こしうる場合。 - 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 がクローズされました。#69856 (Alexey Milovidov)。
  • system.replicas テーブルに新しいカラム readonly_duration を追加しました。アラートで、実際の readonly レプリカと sentinel レプリカを区別できるようにするために必要です。 #69871 (Miсhael Stetsyuk).
  • join_output_by_rowlist_perkey_rows_threshold 設定の型を符号なし整数型に変更しました。 #69886 (kevinyhzou)。
  • OpenTelemetry のスパンログを拡張し、クエリ設定を含めるようにしました。 #70011 (sharathks118).
  • 高階配列関数でラムダ式の結果型が期待される型と異なる場合の診断情報を追加しました。 #70093 (ttanay).
  • Keeper の改善: クラスター変更時のロックを軽減。 #70275 (Antonio Andelic).
  • SHOW GRANTS コマンドに WITH IMPLICITFINAL キーワードを追加しました。暗黙的な権限付与に関する軽微なバグを修正しました(#70094)。 #70293 (pufit)。
  • 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).
  • クラウドストレージがバッチ削除 (batch delete)をサポートしているかどうかを判別するアプローチを変更しました。 #70786 (Vitaly Baranov)。
  • ネイティブリーダーでの Parquet page v2 のサポート。#70807 (Arthur Passos)。
  • テーブルに storage_policydisk の両方が設定されているかどうかを確認するチェックを追加しました。disk 設定を使用している場合に、新しいストレージポリシーが既存のものと互換性があるかどうかを確認するチェックも追加しました。 #70839 (Kirill)。
  • system.s3_queue_settingssystem.azure_queue_settings を追加。 #70841 (Kseniia Sumarokova).
  • 関数 base58Encodebase58Decode は、FixedString 型の引数を受け取れるようになりました。例:SELECT base58Encode(toFixedString('plaintext', 9));#70846Faizan Patel)。
  • パートログのすべてのエントリタイプに partition カラムを追加しました。以前は一部のエントリに対してのみ設定されていました。これにより #70819 が解決されました。#70848Alexey Milovidov)。
  • system.part_logMergeStart および MutateStart イベントを追加し、マージの分析と可視化に役立つようにしました。 #70850 (Alexey Milovidov).
  • マージ元ソースパーツ数に関するプロファイルイベントを追加しました。これにより、本番環境で MergeTree のファンアウトを監視できます。#70908Alexey Milovidov)。
  • バックグラウンドでのファイルシステムキャッシュへのダウンロードが再度有効になりました。 #70929 (Nikita Taranov).
  • プロフェッショナル用途専用として、Trivial という名前の新しいマージセレクタアルゴリズムを追加しました。これは Simple マージセレクタよりも性能が劣ります。#70969 (Alexey Milovidov)。
  • アトミックな CREATE OR REPLACE VIEW のサポートを追加。 #70536 (tuanpach)
  • 集約関数 windowFunnelstrict_once モードを追加し、複数の条件に一致する場合に同一イベントが複数回カウントされるのを防ぎました。 #21835 をクローズ。 #69738 (Vladimir Cherkasov).

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

  • グローバルコンテキストオブジェクトで設定の更新を適用するようにしました。これにより、#62308 のような問題が修正されます。#62944Amos Bird)。
  • ReadSettings がユーザーが設定した値を使用せず、デフォルト値のみが使用されていた問題を修正しました。 #65625 (Kseniia Sumarokova).
  • 符号付き引数を使用する際の sumMapFiltered における型不一致の問題を修正。#58408 (Chen768959)。
  • オプションのタイムゾーン引数が渡された場合における、toHour 系の変換関数の単調性の問題を修正しました。 #60264 (Amos Bird).
  • Merge テーブルに対する supportsPrewhere チェックを緩和しました。これにより #61064 を修正しました。このチェックは #60082 において過度に厳格化されていました。#61091Amos Bird)。
  • concurrent_threads_soft_limit_num の制限を正しく適用できるように、use_concurrency_control 設定の扱いを修正しました。これにより、以前は正しく機能していなかった同時実行制御がデフォルトで有効になります。#61473 (Sergei Trifonov)。
  • IS NULL チェックが(NOT などの)他の関数の内部にある場合に誤った結果を招く可能性のある、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 実行後に発生する無限ループを修正しました。 #69293 (MikhailBurdukov).
  • ストレージエンジン S3Queue において、processing_threads_num のデフォルト値を CPU コア数に戻しました。 #69384 (Kseniia Sumarokova).
  • ネストされた repeated フィールドを持つ 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 の場合に maxMapState が 'Bad get' をスローしていた不具合を修正。 #69787 (Michael Kolupaev).
  • useDefaultImplementationForLowCardinalityColumns をオーバーライドして true を返すようにし、LowCardinality カラムに対する getSubcolumn を修正しました。 #69831 (Miсhael Stetsyuk).
  • 分散テーブルの DROP が失敗した場合に発生する、恒久的にブロックされた分散送信の問題を修正しました。 #69843 (Azat Khuzhin).
  • WITH FILL と NaN キーを含む、キャンセルできないクエリを修正します。これにより #69261 がクローズされます。#69845Alexey Milovidov)。
  • 旧互換値を使用するアナライザーのデフォルトを修正。 #69895 (Raúl Marín).
  • 古いテーブルの DROP 処理中に実行される CREATE OR REPLACE VIEW において、依存関係をチェックしないようにしました。以前は、再作成されるビューに依存するテーブルが存在する場合、CREATE OR REPLACE クエリが失敗していました。#69907 (Pavel Kruglov)。
  • Decimal 関連の修正。#69730 を解決。#69978Arthur Passos)。
  • これで、パラメータ化されたビューでも DEFINER/INVOKER を利用できるようになりました。 #69984 (pufit).
  • ビューの DEFINER 句のパースを修正。 #69985 (pufit).
  • Date または Date32 引数を持つクエリの結果がタイムゾーン設定によって変化する可能性があった不具合を修正しました。 #70036 (Yarik Briukhovetskyi).
  • ネストされたビューと WHERE 句を含むクエリで発生する Block structure mismatch エラーを修正します。#66209 を修正。#70054Nikolai Kochetov)。
  • tuple 関数を評価する際に、異なる名前付きタプル間で列を再利用しないようにしました。これにより #70022 を修正しました。#70103Amos Bird)。
  • 範囲内のリテラルを置換する際に誤った LOGICAL_ERROR が発生していた問題を修正。 #70122 (Pablo Marcos).
  • Nullable(Nothing) 型を持つテーブルが作成されないようにするため、ALTER TABLE MODIFY COLUMN/QUERY の実行時に Nullable(Nothing) 型をチェックするようにしました。 #70123 (Pavel Kruglov).
  • 不正な JOIN ... ON * クエリに対して適切なエラーメッセージを出力するようにし、#68650 をクローズ。#70124Vladimir Cherkasov)。
  • スキップインデックス使用時に誤った結果が返る問題を修正。 #70127 (Raúl Marín).
  • ColumnObject/ColumnTuple の decompress メソッドにおけるデータレースを修正し、解放後ヒープ使用 (heap use after free) が発生しうる問題を防止しました。 #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)。
  • INTERSECT を含む 2 つの SELECT 文を使ってマテリアライズドビューを作成する際に発生するヌルポインタデリファレンスの不具合を修正しました。例: CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);#70264 (Konstantin Bogdanov).
  • スタートアップスクリプトでグローバル設定を変更しないでください。以前は、スタートアップスクリプト内で設定を変更すると、その設定がグローバル設定として変更されていました。 #70310 (Antonio Andelic)。
  • Dynamic 型に対する ALTER 操作で、max_types パラメータを小さくした際にサーバークラッシュを引き起こす可能性があった問題を修正。 #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)。
  • パートに行がない場合は、vertical マージのためにそのパートをプリフェッチしないようにしました。 #70452 (Antonio Andelic).
  • lambda 関数を使用した WHERE 句で発生していたクラッシュを修正。 #70464 (Raúl Marín).
  • セカンダリレプリカ上で、データベース Replicated を使用しており、かつテーブル関数のソースが利用できない場合に、CREATE ... AS table_function(...) によるテーブル作成が行えない問題を修正。#70511Kseniia Sumarokova)。
  • wait_for_async_insert=1 の場合、非同期インサートのすべての出力を無視します。 #62644 をクローズします。 #70530 (Konstantin Bogdanov).
  • system.remote_data_paths からシャドウディレクトリを走査する際に frozen_metadata.txt を無視するようにしました。 #70590 (Aleksei Filatov).
  • アラインされていないメモリ上でステートフルなウィンドウ関数を作成してしまう問題を修正しました。 #70631 (Raúl Marín).
  • Array 型の列を空でないデフォルト式付きで追加した後に発生する、SELECT クエリやマージ処理におけるまれなクラッシュを修正しました。 #70695 (Anton Popov).
  • INSERT INTO TABLE FUNCTION s3 がクエリ設定を尊重するようになりました。 #70696 (Vladimir Cherkasov).
  • サポートされていないフィールドのスキップが有効な場合に、Protobuf スキーマ推論時に発生する無限再帰を修正。#70697 (Raúl Marín).
  • enable_named_columns_in_function_tuple をデフォルトで無効化しました。 #70833 (Raúl Marín).
  • S3Queue テーブルエンジンの設定 processing_threads_num が、サーバー上の CPU コア数から算出された場合に有効に機能しない問題を修正しました。 #70837 (Kseniia Sumarokova).
  • 集約状態での名前付きタプル引数を正規化しました。これにより、#69732 が修正されます。 #70853 (Amos Bird)。
  • 2 レベルのハッシュテーブルにおける負のゼロが原因の論理エラーを修正しました。これにより #70973 が解決されます。#70979Alexey Milovidov)。
  • 分散レプリカおよび並列レプリカでの limit bylimit 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。そのようなクエリを使用している可能性は非常に低いですが、それでもこの変更は潜在的に後方互換性がないものとしてマークする必要があります。 #68435Alexey Milovidov)。
  • 設定 print_pretty_type_names が有効な場合、SHOW CREATE TABLE ステートメント、formatQuery 関数、clickhouse-client および clickhouse-local のインタラクティブモードにおいて、Tuple データ型を見やすい形式で出力するようになりました。以前のバージョンでは、この設定は DESCRIBE クエリと toTypeName にのみ適用されていました。この変更により #65753 がクローズされました。 #68492Alexey Milovidov)。
  • Replicated データベースでテーブルを作成する際に、UUID を明示的に指定することを許可しないようにしました。また、Replicated データベース内の *MergeTree テーブルに対して、Keeper パスおよびレプリカ名を明示的に指定することも許可しないようにしました。これにより、新しい設定 database_replicated_allow_explicit_uuid が導入され、database_replicated_allow_replicated_engine_arguments の型が Bool から UInt64 に変更されました。 #66104Alexander Tokmakov)。

新機能

  • ユーザーが一つだけでなく複数の認証方法を持てるようにします。認証方法を、最後に追加された方法にリセットできるようにします。24.8 のインスタンスを動かしつつ、しばらくの間 24.9 のインスタンスも併用したい場合は、その期間中は互換性の問題を避けるために max_authentication_methods_per_user = 1 に設定しておくことを推奨します。#65277 (Arthur Passos)。
  • ATTACH PARTITION ALL FROM のサポートを追加。#61987Kirill Nikiforov)。
  • input_format_json_empty_as_default 設定を追加しました。この設定を有効にすると、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; #67805sunny)。
  • 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 クライアント向けコマンドラインアプリケーションに cpmv コマンドを追加しました。#69034 (Mikhail Artemenko).
  • 関数 arrayAUC に引数 scale(デフォルト: true)を追加し、正規化処理をスキップできるようにしました(issue #69609)。 #69717gabrielmcg44)。

実験的機能

  • 設定 input_format_try_infer_variants を追加しました。これにより、テキストフォーマットのスキーマ推論時に、列/配列要素に対して複数の候補となる型が存在する場合に Variant 型を推論できるようになります。 #63798 (Shaun Struwig).
  • JSON 列の型コンテンツをより詳細に調査するために、集約関数 distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes を追加しました。 #68463 (Kruglov Pavel).
  • コンシステントハッシュにより並列レプリカ間でマークの分配単位を決定する新しいアルゴリズムを導入しました。さまざまな読み取りパターンに応じて異なる数のマークを選択することで、パフォーマンスを向上させます。 #68424 (Nikita Taranov).
  • 以前は、並列レプリカのアナウンス処理におけるパーツ重複排除ロジックの計算量は O(n^2) であり、多数のパーツ(またはパーティション)を持つテーブルでは無視できない時間がかかる可能性がありました。この変更により、計算量は O(n*log(n)) になります。 #69596 (Alexander Gololobov).
  • 更新可能なマテリアライズドビューの改善: テーブル全体を上書きするのではなく既存テーブルに行を追加するための append モード(... 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 使用率を最大化するため、uniq 集約関数で group by キーにより集約する際に並列マージを追加しました。#68441 (Jiebin Sun).
  • ユーザーが ORC 出力フォーマットで文字列列に対して辞書エンコードを有効化できるようにするため、設定 output_format_orc_dictionary_key_size_threshold を追加しました。これにより、出力される ORC ファイルサイズが削減され、読み取りパフォーマンスが大幅に向上します。#68591 (李扬).
  • ノードとその配下のすべてのサブツリーを削除する新しい Keeper リクエスト RemoveRecursive を導入しました。#69332 (Mikhail Artemenko).
  • ベクター類似性インデックスを持つテーブルへの挿入パフォーマンスを、ベクターインデックスへのデータ追加を並列化することで高速化しました。#69493 (flynn).
  • 適応的な書き込みバッファサイズを使用することで、JSON への挿入時のメモリ使用量を削減しました。ワイドパート内の 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)' として出力されていた問題も修正しました。 #52503 (Alexey Milovidov)。
  • CPU 使用量の算出において、システム全体のメトリクスではなく cgroup 固有のメトリクスを使用するよう変更しました。 #62003 (Nikita Taranov).
  • リモート S3 ディスク向けの I/O スケジューリングは、bandwidth_limit によるスロットリングの問題を解消するため、(S3 リクエスト全体ではなく)HTTP ソケットストリーム単位で行われるようになりました。 #65182 (Sergei Trifonov)。
  • 関数 upperUTF8lowerUTF8 は以前、キリル文字のみ大文字化/小文字化に対応していました。この制限は解消され、任意の言語の文字に対して大文字化/小文字化を行えるようになりました。例: SELECT upperUTF8('Süden') は現在 SÜDEN を返します。 #65761 (李扬).
  • projection を持つテーブルで lightweight delete が実行される場合、これまでは lightweight delete が行われようとしたときに例外を送出する(デフォルト)か、projection を削除するかの 2 つの選択肢しかありませんでしたが、新たに lightweight delete を実行したうえで projection を再構築するという第 3 のオプションが追加されました。 #66169 (jsc0218).
  • 2 つのオプション(dns_allow_resolve_names_to_ipv4dns_allow_resolve_names_to_ipv6)が追加され、接続を IP ファミリーごとにブロックできるようになりました。 #66895 (MikhailBurdukov)
  • clickhouse-client で Ctrl-Z を無視するかどうかを設定可能にしました(ignore_shell_suspend)。 #67134 (Azat Khuzhin).
  • JSON 出力フォーマットにおける UTF-8 検証を改善しました。結果データ内の特定のバイト列に対しても、有効な JSON が生成されることを保証します。#67938 (mwoenker).
  • マージおよびミューテーション用のプロファイルイベントを追加し、より詳細な解析が行えるようにしました。 #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' のときに、文字列から日時を誤って推論してしまうコーナーケースを避けるため、より厳密になりました。#68382Kruglov Pavel)。
  • 辞書から named collections 用の古いコードを削除し、DDL で作成された named collections を辞書で使用できるようにする新しいコードに置き換えました。#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 イメージのエントリーポイント内で 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 エンジンで、pg のデータベース名に「-」が含まれている場合のテーブルアタッチ時の問題を修正しました。 #62730 (takakawa).
  • 実験的かつ完全にサポート対象外の MaterializedPostgreSQL エンジンにおいて、adnum の順序が乱れている場合の生成列に関するエラーを修正しました #63161。実験的かつ完全にサポート対象外の MaterializedPostgreSQL において、テーブルに生成列が存在する場合の、nextval 式をデフォルトとする id 列に関するエラーを修正しました。[a-z1-9-] 以外の記号を含む publication を DROP する際のエラーを修正しました。 #67664 (Kruglov Kirill)。
  • 左側テーブルの Nullable 列をサポートするよう Storage Join を拡張し、#61247 をクローズ。#66926vdimir)。
  • IN 演算子に Decimal() への変換が含まれている場合に、parallel replicas 使用時(クエリの分散実行時も同様)に誤ったクエリ結果が返る問題を修正。新しい analyzer によって導入されたバグ。 #67234 (Igor Nikonov).
  • ALTER MODIFY ORDER BY によりメタデータの不整合が発生する問題を修正しました。 #67436 (iceFireser)。
  • 関数 fromModifiedJulianDay の上限値を修正します。本来は 9999-12-31 であるべきところを、誤って 9999-01-01 に設定していました。#67583PHO)。
  • インデックスがタプルの先頭にない場合の IN クエリの不具合を修正。 #67626 (Yarik Briukhovetskyi).
  • RoleCache の有効期限の扱いを修正。#67748Vitaly Baranov)。
  • ビューへのフラッシュの遅さにより window view でブロックが欠落する問題を修正。 #67983 (Raúl Marín)
  • 不正な日付フォーマットに起因する MSan の問題を修正。 #68105 (JackyWoo).
  • Parquet ファイル内のデータ型が要求された型と大きく異なる場合(例: ... FROM file('a.parquet', Parquet, 'x String') だが、ファイル側では x Int64)に、Parquet のフィルタリング処理がクラッシュする不具合を修正しました。この修正を適用していない場合は、回避策として input_format_parquet_filter_push_down = 0 を使用してください。 #68131 (Michael Kolupaev)。
  • lag/lead で、#67091 によって導入されたクラッシュを修正。#68262lgbo)。
  • クエリがキャンセルされた際に 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 に変換されており、その結果、エラーや誤ったクエリ結果を引き起こす可能性がありました。#68323Shankar)。
  • クエリ SYSTEM SYNC REPLICA で欠落していた同期レプリカモードを修正しました。 #68326 (Duc Canh Le).
  • キー条件の不具合を修正。#68354Han Fei)。
  • LDAP 外部ユーザーディレクトリで使用されているロールを削除または名前を変更するとクラッシュする問題を修正。 #68355 (Andrey Zvonov).
  • system.view_refreshes の Progress 列で値が 1 を超えてしまう問題を修正 #68377#68378megao)。
  • 正規表現のフラグを正しく処理するようにしました。 #68389 (Han Fei).
  • PostgreSQL スタイルのキャスト演算子(::)が、SQL スタイルの 16 進数およびバイナリ文字列リテラル(例:SELECT x'414243'::String)に対しても正しく動作するようになりました。これにより、#68324 が解決されました。#68482Alexey Milovidov)。
  • https://github.com/ClickHouse/ClickHouse/pull/68131 へのマイナーなパッチ。#68494Chang chen)。
  • #68239 整数 n を指定した SAMPLE n の不具合を修正。#68499Denis Hananein)。
  • mann-whitney-utest において、2 つの分布のサイズが等しくない場合のバグを修正。 #68556 (Han Fei)。
  • 予期しない再起動後、破損パーツに覆われているパーツの処理が異常で ReplicatedMergeTree のレプリケーションを開始できない問題を修正。 #68584 (baolin).
  • 空の配列またはタプルに関数 sipHash64KeyedsipHash128KeyedsipHash128ReferenceKeyed を適用した際に発生していた LOGICAL_ERROR を修正。 #68630 (Robert Schulze)。
  • 複数カラムにインデックスを作成した場合、フルテキストインデックスが誤ったカラムをフィルタリングしてしまうことがありました。これは、異なるカラム間で row_id をリセットしていなかったためです。再現手順は tests/queries/0_stateless/03228_full_text_with_multi_col.sql にあります。この修正がないと問題が発生します。#68644 (siyuan)。
  • replica_name 中の無効な文字 '\t' および '\n' を修正し、Replicated テーブル作成時に LogEntry 内の「source replica」が誤ってパースされる問題を解消しました。Issue #68640 で言及。#68645 (Zhigao Hong)。
  • 分散テーブルに、バージョン 24.3 までは利用可能だった仮想カラム _table_database を再度追加しました。 #68672 (Anton Popov).
  • Variant 列の permutation 中に発生する可能性のあるエラー 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).
  • レプリケーテッド MergeTree を作成し、カラムを ALTER してから MODIFY STATISTICS を実行した際に発生していた論理エラーを修正。 #68820 (Han Fei).
  • アナライザにおけるサブクエリからの動的サブカラム解決処理を修正。 #68824 (Kruglov Pavel).
  • DeltaLake における複合型メタデータの解析を修正。#68739 をクローズ。#68836Kseniia Sumarokova)。
  • 非同期挿入において、テーブルのメタデータが(ALTER ADD/MODIFY COLUMN クエリによって)挿入後からテーブルへのフラッシュ前の間に変更された場合でも正しく動作するように修正しました。 #68837 (Anton Popov)。
  • array に空のタプルを渡したときに発生していた予期しない例外を修正。これにより #68618 が修正されました。 #68848Amos Bird)。
  • 純粋なメタデータのみの mutation コマンドの解析を修正。 #68935 (János Benjamin Antal).
  • anyHeavy の状態をマージする際に誤った結果が生じる可能性があった問題を修正。 #68950 (Raúl Marín).
  • 設定 optimize_functions_to_subcolumns が有効な場合のマテリアライズドビューへの書き込みを修正しました。 #68951 (Anton Popov).
  • const Dynamic 列メソッドでは serializations キャッシュを使用しないでください。集計中に未初期化の値の使用や、さらにはレースコンディションを引き起こす可能性があります。 #68953 (Kruglov Pavel).
  • JSON 型のパース時に、一部のケースでデフォルトとして null を挿入すべきところでパースエラーが発生していた問題を修正。 #68955 (Kruglov Pavel).
  • 一部の圧縮レスポンスで Content-Encoding ヘッダーが送信されない問題を修正。 #64802#68975 (Konstantin Bogdanov)。
  • パスが誤って連結されて // が含まれてしまうケースがあったため、パスの正規化によってこの問題を解決しました。 #69066 (Yarik Briukhovetskyi)。
  • 空の async insert が発生した場合に論理エラーが起きる問題を修正しました。 #69080 (Han Fei).
  • クエリキャンセル時に clickhouse-client の進行状況表示で発生していたデータレースを修正しました。 #69081 (Sergei Trifonov).
  • コサイン距離を距離関数として使用した場合に、実験的なベクトル類似度インデックスが利用されない不具合を修正。 #69090 (flynn)。
  • この変更では、初回の作成処理中にサーバー障害が発生した後に Replicated データベースを再作成しようとするとエラーが発生する可能性があった問題に対処します。 #69102 (Miсhael Stetsyuk)。
  • input_format_csv_try_infer_numbers_from_strings = 1 のときに、文字列から 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 式が失われてしまう可能性がありました。#69147Kruglov Pavel)。
  • 式から宛先型への変換時に、Values フォーマットの設定が反映されるようにしました。 #69149 (Kruglov Pavel).
  • 読み取り専用ユーザーで clickhouse-client --queries-file が動作するよう修正しました(以前は readonly モードで Cannot modify 'log_comment' setting in readonly mode により失敗していました)。 #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 型を primary key として安全でない型としてマークしました。 #69311 (Kruglov Pavel).
  • アクセスエンティティの依存関係の復元処理を改善。 #69346 (Vitaly Baranov).
  • 挿入用の接続を取得する際に、すべての接続試行が失敗した場合に発生していた未定義動作を修正。 #69390 (Pablo Marcos)。
  • #69135 をクローズ。cross join で結合済みデータを再利用しようとしているが、これは現時点の ClickHouse では起こり得ない。そのため、have_compressedreuseJoinedData に残しておく方が良い。#69404lgbo)。
  • パラメータとしてスパースカラムが渡された場合に、materialize() 関数がカラム全体を返すようにしました。 #69429 (Alexander Gololobov).
  • 関数 sqidDecode で発生していた LOGICAL_ERROR を修正しました(#69450)。#69451Robert Schulze)。
  • バージョン 24.6 における s3queue の問題に対する簡易的な修正、または Replicated データベースを使ったクエリの作成。 #69454 (Kseniia Sumarokova).
  • INSERT INTO ... SELECTCREATE TABLE AS SELECT クエリでのスカッシュ処理によりメモリ消費量が過大になっていた問題を修正しました。 #69469 (Yarik Briukhovetskyi).
  • テーブル名にドットが含まれている場合でも、SHOW COLUMNSSHOW INDEX ステートメントが正しく動作するようになりました。#69514 (Salvatore Mesoraca)。
  • overflow モードが throw 以外に設定されたクエリに対するクエリキャッシュの使用はできなくなりました。これにより、途中で打ち切られた不正確なクエリ結果がクエリキャッシュに保存されてしまう可能性のある状況を防ぎます。(issue #67476)。#69549Robert Schulze)。
  • prewhere への移動時に条件の元の順序を維持するようになりました。以前は順序が変わることがあり、順序が重要な場合にクエリが失敗する可能性がありました。 #69560 (Kruglov Pavel)。
  • ZNOAUTH エラー発生後に Keeper の複数リクエストの前処理を修正。 #69627 (Antonio Andelic).
  • 新しいレプリカを作成する際、DatabaseReplicated で TTL に WHERE 句を指定した場合に発生していた可能性のある 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 で表されます。 #63898 (FFish).
  • 以前のバージョンでは、LowCardinality データ型に対して、そのデータ型名に WithDictionary を付ける代替構文を使用することができました。これは初期のワーキング実装であり、ドキュメント化も公開もされていませんでした。現在、この構文は非推奨となりました。この構文を使用している場合は、テーブルに対して ALTER を実行し、データ型名を LowCardinality に変更する必要があります。 #66842 (Alexey Milovidov).
  • 分散先テーブルと組み合わせて使用されるストレージ Buffer における論理エラーを修正しました。これは後方互換性のない変更です。分散先テーブルと Buffer を使用しているクエリで、対象テーブルがクエリ内に複数回(例: セルフジョイン)登場する場合、それらのクエリは動作しなくなる可能性があります。 #67015 (vdimir).
  • 以前のバージョンでは、Gamma 関数に基づく乱数分布関数(Chi-Squared、Student、Fisher など)を、ゼロに近い負の引数で呼び出すと、計算が非常に長引くか無限ループに陥る可能性がありました。新しいバージョンでは、これらの関数をゼロまたは負の引数で呼び出すと、例外がスローされます。これにより #67297 が解決されました。 #67326 (Alexey Milovidov).
  • システムテーブル text_log がデフォルトで有効になりました。これは以前のバージョンとの完全な互換性を保っていますが、ローカルディスクのディスク使用量がわずかに増加することに気付くかもしれません(このシステムテーブルが占有するディスク容量はごくわずかです)。 #67428 (Alexey Milovidov).
  • 以前のバージョンでは、arrayWithConstant は非常に大きな配列を生成するよう要求された場合に遅くなる可能性がありました。新しいバージョンでは、配列あたり 1 GB に制限されました。これにより #32754 が解決されました。 #67741 (Alexey Milovidov).
  • REPLACE 修飾子のフォーマットを修正しました(括弧の省略を禁止)。 #67774 (Azat Khuzhin).
  • #68349 でバックポート済み: Dynamic 型を再実装しました。動的データ型の上限に達した場合でも、新しい型は String にキャストされるのではなく、バイナリエンコードされたデータ型情報を持つ特別なデータ構造にバイナリ形式で保存されます。これにより、Dynamic カラムに一度でも挿入された任意の型を、サブカラムとして読み出すことができるようになりました。 #68132 (Kruglov Pavel).

新機能

  • 特定のエンジンにおけるマージ処理時のプロジェクションおよび OPTIMIZE DEDUPLICATE クエリの挙動を制御するために、新たな MergeTree 設定 deduplicate_merge_projection_mode を追加しました。サポートされるオプションは、throw(*MergeTree エンジンでプロジェクションが完全にはサポートされていない場合に例外をスローする)、drop(一貫した形でマージできない場合にマージ中のプロジェクションを削除する)、rebuild(プロジェクションを最初から再構築する。これは高コストな処理です)です。#66672jsc0218)。
  • 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)。
  • 左テーブルと右テーブルの両方のカラムを含む不等号条件(例: t1.y < t2.y)で使用できる JOIN strictness のバリアントをさらにサポートしました(LEFT/RIGHT SEMI/ANTI/ANY JOIN など。設定 allow_experimental_join_condition を参照)。#64281lgbo)。
  • さまざまなエンジン(FileURLS3AzureBlobStorageHDFS)に対して Hive 形式のパーティショニングを解釈します。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 ストレージエンジンを追加し、オフセットを Kafka にコミットする代わりに Keeper に保存できるようにしました。これにより、キューからの消費に対して、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).
  • plain_rewritable ディスクディレクトリのメタデータを、オブジェクトストレージ内の MergeTree データとは分離して __meta レイアウトに保存するようにしました。plain_rewritable ディスクをフラットなディレクトリ構造に移行しました。#65751 (Julia Kartseva).
  • String/Array/Map/Variant/Dynamic 型に対して、すべてのサブカラム用に必要なメモリを事前に確保することで、INSERT クエリで発生するカラムの squashing(結合)処理を改善しました。#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 の設定は enable_analyzer に名称変更されました。古い名前はエイリアスとして残されています。これは、Analyzer がもはやベータ版ではなく、本番利用が正式にサポートされるようになったことを意味します。 #66438 (Nikita Mikhaylov).
  • 日時のスキーマ推論を改善しました。現在は、日時に小数部がある場合にのみ DateTime64 が使用され、それ以外の場合は通常の DateTime が使用されます。Date/DateTime の推論は、特に date_time_input_format='best_effort' の場合に、コーナーケースで文字列から日時を誤って推論してしまうことを避けるため、より厳密になりました。#68382Kruglov Pavel)。
  • ClickHouse サーバーは新しい設定項目 max_keep_alive_requests をサポートするようになりました。サーバーへの keep-alive HTTP 接続に対しては keep_alive_timeout と連動して動作します。アイドルタイムアウトがまだ発生していない場合でも、その接続を通じて処理されたリクエスト数が max_keep_alive_requests を超えると、その接続はサーバーによってクローズされます。 #61793 (Nikita Taranov)。
  • 高度なダッシュボードにおける各種改善。これにより #67697 がクローズされました。これにより #63407 がクローズされました。これにより #51129 がクローズされました。これにより #61204 がクローズされました。#67701Alexey Milovidov)。
  • Distributed テーブルを作成する際に REMOTE への GRANT は不要で、Distributed エンジンへの GRANT だけで十分です。 #65419 (jsc0218).
  • keeper 用のログを上書きできるよう、Docker イメージで明示的に指定しないようにしました。 #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#67177vdimir)。
  • 設定ファイルから 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")#67391sakulali)。
  • Functions 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 を返します(以前は例外をスローしていました)。 #67399 (Robert Schulze).
  • KeeperMap で、タイムアウトまたは接続断により失敗した Keeper へのリクエストを自動的に再試行するようにしました。 #67448 (Antonio Andelic).
  • ClickHouse の再起動後でもスタックトレースを適切に解析およびシンボル解決できるよう、Aarch64 Linux ビルドに -no-pie オプションを追加しました。 #67916 (filimonov).
  • マージおよびミューテーション向けのプロファイルイベントを追加し、内部状態の把握を容易にしました。 #68015 (Anton Popov).
  • レプリケートされていない MergeTree 用の不要なログを削除しました。 #68238 (Daniil Ivanik).

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

  • 統合テストのフレークチェックで、テスト内の問題をより多く発見しテストの信頼性を高めるため、各テストケースを複数回実行するようになりました。同一の環境でテストケースを複数回実行するために pytest-repeat ライブラリを使用しています。テストに合格させるには、テストケースの最後にテーブルやそのほかのエンティティをクリーンアップすることが重要です。必要なコンテナを一度だけ起動すればよいため、この繰り返し実行のほうが pytest を複数回実行するよりもはるかに高速です。#66986Ilya Yatsishin)。
  • ClickHouse の開発で CLion を利用できるようにしました。以前のバージョンでは、CLion はキー入力のたびに 1 分ほどフリーズしていました。これにより #66994 がクローズされます。#66995Alexey Milovidov)。
  • getauxval: 新しい Linux カーネルで ASLR のエントロピーが高いことにより、sanitizer の再実行時にクラッシュする問題を回避しました。#67081Raúl Marín)。
  • クライアントコードの一部を単一のファイルに切り出し、デバッグビルドであっても可能な限り高い最適化レベルを適用しました。これにより #65745 がクローズされます。#67215Nikita 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)。
  • 細工されたクエリにより hopEndhopStarttumbleEndtumbleStart を通じてサーバーがクラッシュしていた NULL ポインタ参照の問題を修正しました。 #68098 (Salvatore Mesoraca)。
  • サブクエリを使用したフィルタリング時に一部の system テーブルで発生していた Not-ready Set の問題を修正しました。 #66018 (Michael Kolupaev).
  • ALTER ADD COLUMN クエリ実行後にサブカラムを読み取る際の不具合を修正しました。 #66243 (Anton Popov).
  • PostgreSQL などのエンジンを使用する外部データベースに送信されるクエリ内のブール値リテラルを修正しました。 #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)。
  • inter-server secret 用の cluster() を修正し、以前と同様に initial user を保持するようにしました。 #66364 (Azat Khuzhin)。
  • null を含む Array フィールドを Array(Variant) に変換する際に発生する可能性のある実行時エラーを修正。 #66727 (Kruglov Pavel).
  • Context::getDDLWorker においてまれに発生するデッドロックの修正。 #66843 (Alexander Gololobov).
  • 不完全な DROP 操作の後に KeeperMap テーブルを作成する処理を修正しました。 #66865 (Antonio Andelic).
  • s3_plain_rewritable ディスクへのリストア中に発生する破損したパーツに関するエラーを修正。 #66881 (Vitaly Baranov).
  • まれなケースで、ディスク上の予期しない projection により、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 ではこの設定が有効な場合に誤って許可されていました。 #66980 (vdimir)。
  • numbers から読み取る際、max_rows_to_read の上限が設定されていると、誤って例外がスローされる可能性がありました。これにより #66992 がクローズされました。 #66996Alexey Milovidov)。
  • lagInFrame および leadInFrame のウィンドウ関数に対して適切な型変換を追加し、msan テストを修正。 #67091 (Yakov Olkhovskiy).
  • TRUNCATE DATABASE が DROP DATABASE クエリと同様にレプリケーションを停止してしまっていた問題を修正しました。 #67129 (Alexander Tokmakov).
  • clickhouse-local でクライアントコンテキストを分離して使用するようにしました。 #67133 (Vitaly Baranov)。
  • 1 シャードのみの構成で Distributed テーブル経由で 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&#95;format&#95;max&#95;bytes&#95;to&#95;read&#95;for&#95;schema&#95;inference の誤った使用方法を修正しました。 #67157 (Kruglov Pavel).
  • GROUP BY で単一の Nullable キーを使用している際に例外が発生した場合に、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 に非決定的関数が指定されているもう一つのケースを修正しました。 #67395 (Nikolai Kochetov).
  • (k=2)=(k=2)has([1,2,3], k) のようなやや特殊な条件でクエリが誤動作してしまう bloom_filter インデックスの問題を修正しました。 #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 ON 句内で NULL を含むタプルを使う一部のクエリが誤った結果を返す問題を修正しました。 #67538 (vdimir).
  • 削除不可のキャッシュが満杯の場合における FileCache::freeSpaceRatioKeepingThreadFunc() の冗長な再スケジュールを修正。 #67540 (Kseniia Sumarokova).
  • HTTP インターフェイス経由でのストリーム系エンジン(Kafka、RabbitMQ、NATS)への挿入処理を修正。 #67554 (János Benjamin Antal).
  • 小さい DateTime64 値に対して誤った結果を返していた関数 toStartOfWeek の不具合を修正しました。 #67558 (Yarik Briukhovetskyi).
  • 再帰CTEを使用するビュー作成の不具合を修正。 #67587 (Yakov Olkhovskiy).
  • ファイルシステムキャッシュで発生する Logical error: 'file_offset_of_buffer_end &lt;= 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)。
  • Tuples および Maps を引数に取る if 関数で、実験的な Variant 型と設定 use_variant_as_common_type を有効にした際に発生しうる論理エラー「Unexpected return type from if」を修正しました。 #67687 (Kruglov Pavel).
  • Linux カーネルのバグにより、クエリが TimerDescriptor::drain 内でハングする場合があります。この問題の修正により #37686 がクローズされました。 #67702Alexey Milovidov)。
  • RESTORE ON CLUSTER コマンドの完了時の挙動を修正しました。 #67720 (Vitaly Baranov).
  • ロード中に CANNOT_SCHEDULE_TASK が発生した場合に辞書がハングする問題を修正。 #67751 (Azat Khuzhin).
  • c に対して Bloom filter インデックスがある場合の SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1 のようなクエリが、正しく動作するようになりました。 #67781 (jsc0218).
  • 一部のクエリで、キーおよびフィルタなしの集約に対して誤った集約結果が返される問題を修正しました。 #67419#67804vdimir)。
  • ALTER 文の ADD/MODIFY COLUMN で、実験的または疑わしいデータ型を検証するようにしました。 #67911 (Kruglov Pavel).
  • 分散クエリでの定数畳み込み後の DateTime64 のパースを修正し、#66773 をクローズしました。#67920vdimir)。
  • 述語内に非決定的関数が含まれている場合に count() が不正な結果を返す問題を修正。 #67922 (János Benjamin Antal).
  • 使用可能な CPU 数が制限されているコンテナ化環境において、最大スレッド数のソフトリミットの計算を修正しました。 #67963 (Robert Schulze).
  • ClickHouse は、checksums.txt には存在するがディスク上には存在しない projection があっても、そのパーツを破損しているとは見なさなくなりました。 #68003 (alesapin).
  • 新しい analyzer を用いた mutation において、変更されていないパーツをスキップする処理を修正しました。以前は analyzer を有効にしていると、述語上は影響しないはずの mutation によって、そのパーツ内のデータが書き換えられてしまう可能性がありました。 #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 の不足していた同期レプリカモードを修正。 #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).
  • マテリアライズドビューに対する重複排除の動作を変更しました。次のような多くのケースが修正されています。- 宛先テーブルで、データが 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).
  • クライアント設定で accept_invalid_certificate をサポートし、自己署名証明書で動作するサーバーに対して、クライアントがセキュアな TCP で接続できるようにしました。対応する openSSL クライアント設定 verificationMode=none + invalidCertificateHandler.name=AcceptCertificateHandler の省略形として利用できます。#65238 (peacewalker122).
  • system.errors テーブルからのエラー値の履歴を保持し、定期的にディスクへフラッシュする system.error_log を追加。#65381 (Pablo Marcos).
  • 集約関数 groupConcat を追加。arrayStringConcat( groupArray(column), ',') とほぼ同じです。2 つのパラメータ(文字列の区切り文字と処理する要素数)を受け取ることができます。#65451 (Yarik Briukhovetskyi).
  • Azure Queue ストレージを追加。#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).
  • プロジェクションを持つテーブルで LIGHTWEIGHT DELETE が発生した場合、ユーザーは例外を投げる(デフォルト)か、プロジェクションを削除するかを選択できます。#65594 (jsc0218).
  • すべての detached(切り離された)テーブルに関する主要な情報を含む system テーブルを追加。#65400 (Konstantin Morozov).

実験的機能

  • Variant データ型のバイナリシリアル化を変更しました。単一のバリアントのみ、または NULL 値のみを持つグラニュールで同じ判別子を繰り返し書き込まないようにするため、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 サブカラムの読み取りを修正しました。以前は、Dynamic 型の max_types パラメータが ALTER 文によって Memory テーブルで変更された場合、その後のサブカラムの読み取りで誤った結果が返される可能性がありました。 #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).
  • join(parallel_hash アルゴリズム)で作成されるハッシュテーブルのサイズを収集してキャッシュするようにしました。この情報は、後続のクエリ実行においてハッシュテーブルを事前確保するために使用され、ハッシュテーブルのリサイズにかかる時間を削減します。 #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).
  • パターンがメタ文字、パターンクラス、フラグ、グルーピング文字などを含まない単純なものである場合、replaceRegexpAllreplaceRegexpOne 関数が大幅に高速になりました(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' を実行してください。 #58970 (Alexey Milovidov).
  • clickhouse-client または clickhouse-local がクラッシュした場合にスタックトレースと診断情報を出力するようになりました。 #61109 (Alexander Tokmakov).
  • SHOW INDEX | INDEXES | INDICES | KEYS の結果は、以前はプライマリキーのカラム名でソートされていました。この動作は直感的ではなかったため、現在はプライマリキーを構成するカラムのプライマリキー内での位置順でソートされるようになりました。 #61131 (Robert Schulze)。
  • マテリアライズドビューに対する重複排除の動作を変更し、次のような多くのケースを修正しました。- 宛先テーブル上で、データが 2 つ以上のブロックに分割され、それらのブロックが並行して挿入されたときに重複として扱われてしまうケース。- MV の宛先テーブル上で、集約処理により異なる入力データから同一の結果データが頻繁に生成されることで、同一ブロックが重複排除されてしまうケース。- MV の宛先テーブル上で、異なる MV から来た同一ブロックが重複排除されてしまうケース。 #61601 (Sema Checherinda).
  • パーティション化された DeltaLake データの読み取りをサポートしました。データ本体ではなくメタデータを読み取ることで DeltaLake のスキーマを推論します。 #63201 (Kseniia Sumarokova)。
  • Composable Protocols において、TLS レイヤーは certificateFileprivateKeyFile パラメータのみを受け付けます。 https://clickhouse.com/docs/operations/settings/composable-protocols#63985 (Anton Ivashkin)。
  • WHERE 句の評価で主キーを使用する SELECT クエリの数を示すプロファイルイベント SelectQueriesWithPrimaryKeyUsage を追加しました。 #64492 (0x01f).
  • StorageS3Queue に関連する修正と改善。サーバー上の物理 CPU コア数に応じて s3queue_processing_threads_num のデフォルト値を自動的に決定するように変更(以前のデフォルト値である 1 の代わり)。s3queue_loading_retries のデフォルト値を 10 に設定。system.s3queue の exception カラムで発生しうる曖昧な「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 設定を追加。 #65046 (Kseniia Sumarokova).
  • パラメータ化されたビュー関数でエイリアスをサポート(新しい analyzer のみ)。 #65190 (Kseniia Sumarokova).
  • Azure Blob Storage のログ内に含まれるアカウントキーをマスクするよう更新しました。 #65273 (SmitaRKulkarni).
  • フィルター式が PARTITION BY 式の一部である場合における IN 述語のパーティションプルーニング。#65335Eduard Karacharov)。
  • arrayMin/arrayMax は、比較可能なあらゆるデータ型に適用可能になりました。 #65455 (pn)。
  • cgroups v2 におけるメモリ使用量の計測を改善し、ページキャッシュが占める分を除外するようにしました。 #65470 (Nikita Taranov).
  • EmbeddedRocksDB テーブルに挿入するためにチャンクをシリアライズする際、行ごとにフォーマット設定を作成しないようにしました。 #65474 (Duc Canh Le).
  • clickhouse-local のプロンプトを :) のみに短縮しました。getFQDNOrHostName() は macOS では実行に時間がかかり、そもそも clickhouse-local のプロンプトにホスト名を表示する必要もないためです。 #65510 (Konstantin Bogdanov).
  • 低性能な仮想マシン上での per-CPU arenas に関する jemalloc のメッセージ出力を抑制しました。 #65532 (Alexey Milovidov).
  • デフォルトでファイルシステムキャッシュのバックグラウンドダウンロードを無効化しました。バックグラウンドダウンロードスレッドを使用すると、バッファはクエリコンテキスト内で確保される一方で、メモリの解放がクエリコンテキスト外で実行されるため、メモリ制限超過が発生する可能性のある問題を修正した後に、再度有効化する予定です。加えて、バックグラウンドワーカーがダウンロードするデータの最大サイズを定義するための個別の設定を追加する必要があります(現在は max_file_segment_size によって制限されていますが、これは大きすぎる可能性があります)。 #65534Kseniia Sumarokova)。
  • ClickHouse が設定を再読み込みする間隔を指定できる新しい設定オプション <config_reload_interval_ms> を追加しました。 #65545 (alesapin)。
  • ClickHouse のデータ型向けにバイナリエンコーディングを実装し、その仕様をドキュメントに追加しました。Dynamic binary serialization でこれを使用し、設定で RowBinaryWithNamesAndTypes および Native フォーマットでも利用できるようにしました。 #65546 (Kruglov Pavel).
  • サーバー設定項目 compiled_expression_cache_sizecompiled_expression_cache_elements_sizesystem.server_settings に表示されるようになりました。 #65584 (Robert Schulze).
  • x509 の SubjectAltName 拡張に基づくユーザー識別のサポートを追加。 #65626 (Anton Kozlov)。
  • clickhouse-local は、設定ファイル内の max_server_memory_usagemax_server_memory_usage_to_ram_ratio の値を使用します。また、clickhouse-server と同様に、デフォルトでシステムメモリの 90% を最大メモリ使用量として設定します。#65697Alexey 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 で名前付きコレクションを制御可能にしました。 #65973 (Alexey Milovidov).
  • Azure 関連のプロファイルイベントを改善しました。 #65999 (alesapin).
  • ライターのタイムゾーンを用いた ORC ファイルの読み取りをサポート。 #66025 (kevinyhzou).
  • PostgreSQL への接続を制御するための設定を追加しました。設定 postgresql_connection_attempt_timeout は、接続 URL の connect_timeout パラメータに渡される値を指定します。設定 postgresql_connection_pool_retries は、PostgreSQL エンドポイントへの接続を確立するための再試行回数を指定します。#66232 (Dmitry Novik)。
  • system.processors_profile_log における input_wait_elapsed_us / elapsed_us の値の不正確さを軽減しました。 #66239 (Azat Khuzhin).
  • ファイルシステムキャッシュ向けの ProfileEvents を改善。#66249zhukai)。
  • レプリケートされたストレージで名前付きコレクションを管理する際に、クエリ内の ON CLUSTER 句を無視できるようにする設定を追加しました。 #66288 (MikhailBurdukov)。
  • 関数 generateSnowflakeID では、大規模クラスタでの ID の重複を防ぐために、マシンID をパラメータとして指定できるようになりました。 #66374 (ZAWA_ll).
  • インタラクティブモードでの Ctrl+Z によるサスペンドを無効化しました。これはよくある落とし穴であり、ほとんどのユーザーにとっては期待される動作ではありません。ターミナルアプリケーションをバックグラウンドにサスペンドできることを便利だと感じるのは、ごく一部の極めて特殊なパワーユーザーだけかもしれませんが、私はそのようなユーザーを知りません。#66511Alexey Milovidov)。
  • 辞書における主キーの型を検証するオプションを追加しました。このオプションがない場合、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).
  • MySQL の NULL フィールドを ClickHouse の NOT NULL フィールドにマッピングする TABLE OVERRIDE を指定して MaterializedMySQL(サポート対象外の実験的機能)を使用した際に発生していたクラッシュを修正しました。 #54649 (Filipp Ozinov).
  • PREWHERE 式がどの列も読み込まず、テーブルが adaptive index granularity を使用していない(非常に古いテーブル)場合に発生する論理エラーを修正。 #59173 (Alexander Gololobov).
  • クエリのキャンセル時に使用されるキャンセルバッファに関するバグを修正。 #64478 (Sema Checherinda).
  • columns.txt が存在しない場合に、メタデータから parts カラムを補完する処理を修正。 #64757 (Azat Khuzhin).
  • ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY でクラッシュが発生する問題を修正しました。 #64957 (pufit).
  • AccessControl の破棄時に発生するクラッシュを修正: 明示的なシャットダウン処理を追加。 #64993 (Vitaly Baranov)。
  • 関数 uniq* の引数にある単射関数を再帰的に除去するように修正しました。これは以前は正しく動作していましたが、新しいアナライザーでは動作しなくなっていました。#65140Duc Canh Le)。
  • CTE を使用したクエリで予期しないプロジェクション名が付与される問題を修正。#65267wudidapaopao)。
  • 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 を無効にしてください。#65505Nikolai Kochetov)。
  • Index out of bound for blob metadata という例外が、list バッチ内のすべてのファイルがフィルタ処理により除外された場合に発生していた問題を修正しました。 #65523 (Kseniia Sumarokova).
  • projection の重複排除マージにおける NOT_FOUND_COLUMN_IN_BLOCK エラーを修正。 #65573 (Yakov Olkhovskiy).
  • MergeJoin のバグを修正しました。疎シリアライゼーションのカラムが、必要な変換が実行されていないにもかかわらず、ネストされた型のカラムとして扱われてしまう可能性がありました。 #65632 (Nikita Taranov).
  • 互換性レベル '23.4' が正しく適用されていなかったバグを修正しました。 #65737 (cw5121).
  • NULL 値を許容するフィールドを含む ODBC テーブルを修正。 #65738 (Rodolphe Dugé de Bernonville).
  • 致命的なエラー発生時に発生し得る TCPHandler のデータレースを修正しました。 #65744 (Kseniia Sumarokova).
  • parseDateTime 関数の %F および %D プレースホルダに関する不正な例外を修正。 #65768 (Antonio Andelic).
  • PostgreSQL から読み取るクエリの場合、ClickHouse クエリが終了したら内部の PostgreSQL クエリをキャンセルします。そうしないと、内部の PostgreSQL クエリが終了するまで ClickHouse クエリをキャンセルできません。 #65771 (Maksim Kita).
  • 古いアナライザーと dictGetOrDefault を併用している場合の短絡評価ロジックのバグを修正。 #65802 (jsc0218)。
  • EmbeddedRocksDB での TTL 書き込みにより SST ファイルが破損するバグを修正しました。 #65816 (Duc Canh Le).
  • 関数 bitTestbitTestAllbitTestAny は、指定されたビットインデックスが範囲外の場合にエラーを返すようになりました #65818 (Pablo Marcos)。
  • join_any_take_last_row の設定は、ハッシュ結合を使用するすべてのクエリでサポートされます。 #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).
  • SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE をタイムアウトが 0 のときに正しく処理するよう修正。 #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).
  • Column _size は S3 engine および S3 table function では、アーカイブ自体のサイズではなく、アーカイブ内のファイルサイズを表します。 #65993 (Daniil Ivanik).
  • analyzer における動的サブカラムの解決を修正し、動的サブカラムの読み取り時にカラム全体を読み込まないようにしました。 #66004 (Kruglov Pavel).
  • from_env に対する replace オーバーライド使用時の設定のマージ処理を修正。 #66034 (Azat Khuzhin).
  • シャットダウン中に GRPCServer がハングする可能性がある問題を修正しました。 #66061 (Vitaly Baranov)。
  • LowCardinality の非定数引数を取る関数 has におけるいくつかのケースを修正しました。 #66088 (Anton Popov).
  • groupArrayIntersect の修正。merge() 関数内で誤った動作をしていました。数値データおよび汎用データに対する deserialise() の動作も修正しました。 #66103 (Yarik Briukhovetskyi).
  • unbin/unhex の実装における固定バッファのバッファオーバーフロー不具合を修正しました。 #66106 (Nikita Taranov).
  • #64760 で導入された merge-filters 最適化を無効化しました。これは、最適化によって 2 つのフィルター式がマージされる際にショートサーキット評価が行われないと、例外が発生する可能性があるためです。#66126Nikolai Kochetov)。
  • Avro 仕様で現在は許可されている負のブロックサイズの配列としてエンコードされた Avro ファイルを、サーバーがパースできなかった問題を修正しました。#66130Serge 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 または Azure Blob Storage へのコピー時のエラー報告を修正。#66295 (Vitaly Baranov).
  • watchdog がアンリンク(ローテーション)されたログファイルのディスクリプタを保持しないようにしました。 #66334 (Aleksei Filatov).
  • logicalexpressionoptimizerpass が定数の論理型情報を失ってしまう不具合を修正。 #66344 (pn).
  • group_by_use_nulls=true および新しいアナライザーの使用時に発生する Column identifier is already registered エラーを修正。 #66400 (Nikolai Kochetov).
  • 外部エンジン(PostgreSQL など)のテーブルを結合およびフィルタするクエリで、過度に積極的なフィルタプッシュダウンにより誤った結果が返る可能性がある問題を修正しました。今後は、外部テーブルとの外部結合の場合、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 の第1引数として使用されていると発生していた Method getResultType is not supported for QUERY query node エラーを修正しました。 #66655 (Nikolai Kochetov).
  • variant サブカラムの読み取り中に発生する可能性のある PARAMETER_OUT_OF_BOUND エラーを修正。 #66659 (Kruglov Pavel)。
  • カラム削除後にまれに発生するマージ処理がハングする問題を修正しました。 #66707 (Raúl Marín).
  • リモートソースからの INSERT SELECT 時のアサーション isUniqTypes を修正しました。 #66722 (Sema Checherinda)。
  • PrometheusRequestHandler の論理エラーを修正。 #66621 (Vitaly Baranov)。
  • fuzzer によって検出された indexHint 関数名の大文字小文字の問題を修正。#66286 (Anton Popov)。
  • 'create table b empty as a' の AST のフォーマットを修正。 #64951 (Michael Kolupaev).

ClickHouse リリース 24.6, 2024-07-01

後方互換性のない変更

  • データベースとテーブルの非同期ロードをデフォルトで有効化しました。async_load_databases については config.xml を参照してください。この変更は完全に互換性がありますが、動作の違いを生む可能性があります。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項演算の数学関数(powatan2max2min2hypot)で Decimal 型の引数をサポートしました。 #64582 (Mikhail Gorshkov).
  • SQL 関数 parseReadableSize(および OrNullOrZero の各バリアント)を追加しました。 #64742 (Francisco J. Jurado Moreno)。
  • サーバー設定 max_table_num_to_throwmax_database_num_to_throw を追加し、CREATE クエリで作成されるデータベースおよびテーブルの数を制限します。 #64781 (Xu Jia)。
  • s3 / file / hdfs / url / azureBlobStorage などのファイル系ストレージに _time 仮想カラムを追加。 #64947 (Ilya Golshtein)。
  • 新しい関数 base64URLEncodebase64URLDecodetryBase64URLDecode を追加しました。 #64991 (Mikhail Gorshkov).
  • 新しい関数 editDistanceUTF8 を追加しました。この関数は 2 つの UTF-8 文字列間の編集距離を計算します。#65269LiuNeng)。
  • カスタム HTTP ハンドラーで独自のレスポンスヘッダーをサポートできるように、http_response_headers 設定を追加しました。 #63562 (Grigorii).
  • クエリ結果を無限ループで返すための新しいテーブル関数 loop を追加しました。 #63452 (Sariel)。テスト用途に有用です。
  • system.query_logused_privilegesmissing_privileges という 2 つの新しいカラムを追加しました。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).

実験的機能

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

パフォーマンスの向上

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

改善

  • システムテーブルに対して SHOW CREATE TABLE を実行すると、そのテーブルが何のために必要なのかを説明する、テーブルごとに固有の便利なコメントが表示されるようになりました。 #63788 (Nikita Mikhaylov).
  • 関数 round(), roundBankers(), floor(), ceil() および trunc() の第2引数(scale)は、定数である必要がなくなり、非 const の値を指定できるようになりました。 #64798 (Mikhail Gorshkov)。
  • 新しいディスクを追加した際に、Distributed テーブルのストレージポリシーをホットリロードできるようにしました。#58285 (Duc Canh Le).
  • 高負荷状態のサービスでスレッドをスケジューリングする際に、MergeTree インデックス解析中に発生する可能性のあるデッドロックを回避しました。 #59427 (Sean Haynes).
  • S3 プロキシのサポートおよびトンネリングに関する軽微なコーナーケースの修正をいくつか行いました。 #63427 (Arthur Passos).
  • io_uring の再送に関する可視性を向上させました。プロファイルイベント名を IOUringSQEsResubmits から IOUringSQEsResubmitsAsync に変更し、新しいイベント IOUringSQEsResubmitsSync を追加しました。#63699Tomer 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 テーブルをレプリケーテッドテーブルに変換できないようにしました。 #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_rps および s3_max_put_rps で定義された 1 秒あたりのリクエスト数のレート制限と、ディスクのスロットリング制限に達することなく送信可能な現在利用可能なリクエスト数を反映します。メトリクスは、制限が設定されている各ディスクごとに定義されます。#65050Sergei Trifonov)。
  • Poco::ThreadPool 用のグローバルトレースコレクターを初期化(Keeper などで必要)。#65239 (Kseniia Sumarokova).
  • bcrypt_hash でユーザーを作成する際にバリデーションを追加しました。#65242Raú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).
  • サポートされていないストレージに対しては、マテリアライズドビューであってもトランザクションを無効化しました。 #64918 (alesapin).
  • 旧アナライザにおける QUALIFY 句の使用を禁止しました。旧アナライザは QUALIFY を無視していたため、ミューテーションで意図しないデータ削除が発生しうる問題がありました。 #65356 (Dmitry Novik)。

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

  • Apache ORC ライブラリのバグが修正されました: すべてのプラットフォームにおける符号なし型および ARM 上の Int8 について、書き込み時の ORC 統計量の計算が正しく行われるようになりました。 #64563 (Michael Kolupaev)。
  • ClickHouse における CSV 形式の Tuple の処理および解釈の動作を、元の挙動に戻しました。この変更により、実質的に https://github.com/ClickHouse/ClickHouse/pull/60994 はリバートされ、その挙動は output_format_csv_serialize_tuple_into_separate_columnsinput_format_csv_deserialize_separate_columns_into_tupleinput_format_csv_try_infer_strings_from_quoted_tuples といった一部の設定でのみ有効になります。#65170Nikita Mikhaylov)。
  • 特定の状況において、ユーザーが必要な権限付与なしにデフォルトデータベースに対する自分の権限を昇格できてしまう権限エラーを修正しました。 #64769 (pufit)。
  • UniqInjectiveFunctionsEliminationPass と uniqCombined が原因のクラッシュが発生する問題を修正。 #65188 (Raúl Marín).
  • セッション終了時にダイジェスト不一致を引き起こしていた ClickHouse Keeper のバグを修正しました。 #65198 (Aleksei Filatov)。
  • Distinct コンビネータに対して正しいメモリアラインメントを使用するよう修正しました。以前は、このコンビネータを使用した際に、不正なメモリ割り当てが原因でクラッシュが発生する可能性がありました。 #65379 (Antonio Andelic)。
  • DISTINCT とウィンドウ関数でクラッシュが発生する問題を修正。 #64767 (Igor Nikonov).
  • IN 句および indexHint() 使用時に 'set' スキップインデックスが動作しない問題を修正しました。 #62083Michael Kolupaev)。
  • パラメータ化ビューの値を代入する際に関数を実行できるようにしました。 #63502 (SmitaRKulkarni).
  • Parquet のメモリトラッキングを修正しました。 #63584 (Michael Kolupaev)。
  • Tuple(Map(LowCardinality(String), String), ...) 型の列読み取りの不具合を修正しました。 #63956 (Anton Popov)。
  • 異なる型(expression と function)からなる循環エイリアスに対して発生する Cyclic aliases エラーを修正しました。 #63993 (Nikolai Kochetov).
  • この修正により、クエリパイプライン内の各ビューごとに、正しい definer を持つ適切に再定義されたコンテキストが使用されます。 #64079 (pufit)。
  • Fix analyzer: INTERPOLATE 使用時に発生していた "Not found column" エラーを修正しました。 #64096 (Yakov Olkhovskiy).
  • ファイルが存在するディスクとは異なる認証情報を使用する S3 バケットへのバックアップ作成の問題を修正しました。 #64153 (Antonio Andelic).
  • クエリキャッシュは、異なるデータベースに対する同一の2つのクエリを、別のものとして扱うようになりました。以前の動作では、テーブルの読み取り権限が不足している場合でも、その制限を回避するために悪用されるおそれがありました。 #64199 (Robert Schulze).
  • StatusFile 内の ~WriteBufferFromFileDescriptor で、捕捉されない例外によりプロセスがアボートする可能性のある問題を修正。 #64206 (Kruglov Pavel)。
  • ARRAY JOIN を使用する分散クエリで発生していた duplicate alias エラーを修正しました。 #64226 (Nikolai Kochetov).
  • 文字列から整数への意図しない 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).
  • Nullable キーを持つテーブルに対する ORDER BY ... NULLS FIRST / LAST 句使用時の optimize_read_in_order の挙動を修正しました。 #64483 (Eduard Karacharov).
  • GLOBAL IN へのエイリアスを使用するクエリで発生する Expression nodes list expected 1 projection names および Unknown expression or identifier エラーを修正。 #64517 (Nikolai Kochetov).
  • GROUP BY キーに定数CTEを含む分散クエリで発生していた 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).
  • 新しいアナライザで、常に真となる 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 に対するサブクエリを用いる(実験的な)非等値結合を修正しました。 #64775 (lgbo).
  • plain_rewritable ディスク上のローカルキャッシュで発生していたクラッシュを修正。#64778 (Julia Kartseva)。
  • Keeper の修正: mntr コマンドが zk_latest_snapshot_size の正しい値を返すように修正。 #64784 (Antonio Andelic).
  • Nested 列による ARRAY JOIN を含む分散クエリで発生する Cannot find column エラーを修正しました。#64755 の問題を解決。#64801Nikolai Kochetov)。
  • SLRU キャッシュポリシーのメモリリークを修正。 #64803 (Kseniia Sumarokova).
  • S3 からデータを読み取るクエリ、HTTP プロトコル経由のクエリ、非同期 INSERT など、いくつかの種類のクエリで発生する可能性があった不正確なメモリトラッキングを修正しました。 #64844 (Anton Popov).
  • PREWHERE を使用してマテリアライズドビューからデータを読み取るクエリで、マテリアライズドビューのカラムの型がソーステーブルと異なる場合に発生する Block structure mismatch エラーを修正しました。#64611 を修正。#64855Nikolai Kochetov)。
  • サブクエリ付きの TTL を持つテーブル + レプリケートされたデータベース + 並列レプリカ + analyzer の組み合わせで、まれに発生するクラッシュを修正しました。発生頻度は非常に低いものの、サブクエリ付きの TTL の使用は避けてください。 #64858 (alesapin).
  • 大きな削除バッチ処理時に blob_storage_logDelete イベントが重複して記録される問題を修正しました。 #64924 (vdimir).
  • [Zoo]Keeper からの設定インクルードを含む構成で、サーバー起動後に発生する可能性があった [Zoo]Keeper の Session moved to another server エラーを修正しました。 #64986 (Alexander Tokmakov).
  • https://github.com/ClickHouse/ClickHouse/pull/54211 でパラメータ付き VIEW に対して正しく動作していなかった ALTER MODIFY COMMENT クエリを修正。#65031 (Nikolay Degterinsky)。
  • cluster_secure_connection パラメータが有効な場合の DatabaseReplicated における host_id の扱いを修正しました。以前は、このパラメータが有効化されていても、DatabaseReplicated によってクラスター内で作成されるすべての接続が安全な接続になっていませんでした。#65054Nikolay Degterinsky)。
  • StorageMerge に対する PREWHERE 最適化後に発生していた Not-ready Set エラーを修正。 #65057 (Nikolai Kochetov)。
  • ファイルライクなストレージで確定済みバッファへの書き込みを避けるようにしました。 #65063 (Kruglov Pavel).
  • 循環エイリアスが存在する場合にクエリの実行時間が無限になる可能性のある問題を修正。#64849 を修正。 #65081 (Nikolai Kochetov).
  • 新しい analyzer での INTERPOLATE (alias) を使用したリモートクエリで発生する Unknown expression identifier エラーを修正。#64636 を修正。#65090Nikolai Kochetov)。
  • 集約処理の外側に算術演算をプッシュダウンする最適化を修正しました。新しいアナライザでは、この最適化が1回だけしか適用されていませんでした。 #65104 (Dmitry Novik).
  • 新しいアナライザーにおける集約関数名の書き換え処理を修正。 #65110 (Dmitry Novik)。
  • クライアントソケットからリクエストボディ(またはその一部)を読み取る際に受信タイムアウトが発生した場合、200 OK ではなく 5xx を返すようにしました。 #65118 (Julian Maicher).
  • ヘッジリクエストで発生する可能性のあるクラッシュを修正。 #65206 (Azat Khuzhin).
  • Hashed および Hashed_Array 辞書のショートサーキット評価におけるバグを修正しました。このバグにより、未初期化の数値が読み出され、さまざまなエラーを引き起こす可能性がありました。 #65256 (jsc0218).
  • このPRでは、定数(IN 演算子の第2引数)の型が、IN 演算子の型変換処理の間じゅう常に保持・参照されるようにします。そうしないと、型情報が失われて一部の変換(たとえば 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 および trivial 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 を持つテーブルは壊れます。アップグレード前にこれらのインデックスを必ず削除し、アップグレード後に再作成してください。#62884 (Robert Schulze).
  • 関数 neighbor, runningAccumulate, runningDifferenceStartingWithFirstValue, runningDifference の使用は、エラーを招きやすいため非推奨となりました。代わりに適切なウィンドウ関数を使用すべきです。これらを再度有効にするには、allow_deprecated_error_prone_window_functions = 1 を設定するか、compatibility = '24.4' 以下を設定してください。#63132 (Nikita Taranov).
  • 多数のカラムが存在し、多くのデータベースまたはテーブルに SHOW TABLES 権限が付与されていない場合でも、system.columns からのクエリがより高速に動作するようになりました。以前のバージョンでは、対応するテーブルに SHOW TABLES を付与せずに個々のカラムに SHOW COLUMNS を付与した場合、system.columns テーブルにはそれらのカラムが表示されていましたが、新バージョンではそのテーブル全体がスキップされますので注意してください。クエリを低速化していた「Access granted」と「Access denied」のトレースログメッセージを削除しました。#63439 (Alexey Milovidov).

新機能

  • application/x-www-form-urlencoded 形式で単一レコードを読み書きするための Form フォーマットを追加しました。 #60199 (Shaun Struwig)。
  • CROSS JOIN での圧縮を可能にしました。 #60459 (p1rattttt).
  • サイズが制限を超えた場合、一時ファイル内で CROSS JOIN を実行できるようにしました。 #63432 (p1rattttt).
  • 左テーブルと右テーブル両方のカラムを含む不等条件(例: t1.y < t2.y)を用いた JOIN をサポートするようになりました。有効化するには、SET allow_experimental_join_condition = 1 を実行します。#60920lgbo)。
  • Map では、キーとして Float32Float64Array(T)Map(K, V)Tuple(T1, T2, ...) を使用できるようになりました。これにより #54537 がクローズされました。#59318李扬)。
  • RocksDB の組み込み memtable に依存する代わりに SST ファイルを作成して取り込むことで、EmbeddedRocksDB への一括ロード機能を導入しました。これにより、特に 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#60887Constantine Peresypkin)。
  • これまで、S3 ストレージと s3 テーブル関数は、tarball、zip、7z などのアーカイブファイルからの SELECT をサポートしていませんでしたが、現在では、S3 上のアーカイブ内ファイルを順に処理できるようになりました。 #62259 (Daniil Ivanik)。
  • 条件関数 clamp をサポートしました。 #62377 (skyoct).
  • NPy 出力形式を追加。#62430豪肥肥)。
  • TSVRaw の同義語として Raw フォーマットを追加。 #63394 (Unalian).
  • バージョン 7 の UUID(タイムスタンプベースでランダム要素を含む)を生成する新しい SQL 関数 generateUUIDv7 を追加しました。さらに、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 に対して認証できるようサポートしました。設定ファイルで use_workload_identity パラメータが有効になっている場合、認証には Workload Identity が使用されます。 #57881Vinay Suryadevara)。
  • TTL 情報を system.parts_columns テーブルに追加しました。 #63200 (litlig).

実験的機能

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

パフォーマンスの改善

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

改善

  • clickhouse-local と、そのショートカットである clickhouse および ch で、クエリ文字列またはクエリを含むファイルを位置引数として指定して実行できるようにしました。例: ch "SELECT 1", ch --param_test Hello "SELECT {test:String}", ch query.sql。これにより #62361 がクローズされました。 #63081Alexey 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 ... のように記述できます。#63803Alexey Milovidov)。
  • Regexp フォーマット向けの例外メッセージを改善。 #63804 (Alexey Milovidov).
  • Values 形式で末尾のカンマを許容するようになりました。たとえば、次のクエリが使用できます: INSERT INTO test (a, b, c) VALUES (4, 5, 6,);#63810 (Alexey Milovidov)。
  • RabbitMQ が破損したメッセージに nack を返すようにしました。#45350 をクローズしました。#60312Kseniia Sumarokova)。
  • デバッグ情報の解釈中に、(サンプリングクエリプロファイラ使用時などの)非同期スタックのアンワインド処理で発生していたクラッシュを修正しました。これにより #60460 がクローズされました。 #60468 (Alexey Milovidov)。
  • ディスクとストレージの場合で、S3 エラー 'no key' のメッセージを区別しました。 #61108 (Sema Checherinda).
  • プログレスバーは、system.zerossystem.zeros_mt からの LIMIT 句を含む単純なクエリでも動作し(すでに system.numbers および system.numbers_mt では動作しています)、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 を修正。#63013Azat Khuzhin)。
  • YAML ファイルで include_from がサポートされました。ただし、代わりに config.d を使用することを推奨します。#63106Eduard 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_logbuild_idALIAS 列を追加しました。これは #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)を無効化します。#63942Azat Khuzhin)。
  • AWS Lambda 環境で ClickHouse を使用する場合にも、例外処理が正しく機能するようになりました。著者: Alexey Coolnev#64014Alexey 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 発生時のアンワインド処理を修正しました(signal 用スタックが小さいことが原因)。#64058 (Azat Khuzhin).

バグ修正

  • デフォルトで enable_vertical_final 設定を無効にしました。この機能にはバグがあるため、使用しないでください: #64543#64544Alexander Tokmakov)。
  • 複数シャード環境でのバックアップ作成処理を修正 #57684 (Vitaly Baranov).
  • CREATE クエリのカラムリストからマテリアライズドビュー (MV) の内部テーブルへ projections / indexes / primary key を渡す処理を修正 #59183Azat Khuzhin)。
  • boundRatio の誤ったマージを修正 #60532 (Tao Wang)。
  • const な low-cardinality 列に対して一部の関数を呼び出すとクラッシュする問題を修正 #61966 (Michael Kolupaev)。
  • adaptive granularity を使用していないテーブルで FINAL を使用したクエリが誤った結果を返す問題を修正 #62432 (Duc Canh Le).
  • メモリコントローラー用の cgroups v2 サポートの検出処理を改善 #62903 (Robert Schulze)。
  • クライアントにおける外部テーブルの後続利用を修正 #62964 (Azat 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 ヘッダーを修正 #63377Andrey Zvonov)。
  • グループ化クエリで WITH ROLLUP と LowCardinality 型を使用する際に発生するデバッグアサートを修正 #63398 (Raúl Marín).
  • group_by_use_nulls に関する細かな修正 #63405 (vdimir)。
  • テーブルメタデータからプロジェクションが削除されているが、パート側には依然としてプロジェクションが残っている場合のプロジェクションパートのバックアップ/リストアを修正しました #63426 (Kseniia Sumarokova).
  • MySQL 辞書ソースを修正 #63481 (vdimir)。
  • データがない場合に AsyncInsertFlush で QueryFinish を挿入 #63483 (Raúl Marín).
  • 修正: system.query_log において used_dictionaries が空になっていた問題 #63487 (Eduard Karacharov).
  • MergeTreePrefetchedReadPool の安全性を向上 #63513 (Antonio Andelic).
  • Sentry を有効化した状態で終了時に発生していたクラッシュを修正(Sentry より先に OpenSSL が破棄されることが原因) #63548 (Azat Khuzhin).
  • Keyed hashing を使用する Array および Map のサポートを修正 #63628 (Salvatore Mesoraca)。
  • Parquet および(おそらく)StorageMerge 向けフィルタープッシュダウン処理を修正 #63642 (Michael Kolupaev).
  • ZooKeeper パスが既に存在する場合は Replicated への変換を行わないようにした #63670 (Kirill)。
  • Analyzer: ビューが必要な列のみを読み込むように改善 #63688 (Maksim Kita).
  • Analyzer: WINDOW の再定義を禁止 #63694 (Dmitry Novik).
  • 実験的な Replicated データベースにおいて flatten_nested に不具合がありました。 #63695 (Nikolai Kochetov).
  • #63653 #63722 を修正しました (Nikolai Kochetov)。
  • Array(Nothing) から Map(Nothing, Nothing) へキャストできるようにした #63753 (Nikolai Kochetov).
  • partial_merge 結合における ILLEGAL_COLUMN エラーを修正 #63755 (vdimir)。
  • 修正: ウィンドウ関数における冗長な distinct を削除 #63776 (Igor Nikonov).
  • SYSTEM UNLOAD PRIMARY KEY の使用時に発生し得るクラッシュを修正 #63778 (Raúl Marín)。
  • 重複した循環エイリアスを含むクエリを修正。#63791 (Nikolai Kochetov).
  • TokenIterator を本来あるべき通り遅延評価(lazy)にしました #63801 (Alexey Milovidov).
  • S3 URI の endpoint_subpath 設定を追加 #63806 (Julia Kartseva).
  • ParallelReadBuffer でのデッドロックを修正 #63814 (Antonio Andelic)。
  • JOIN フィルターのプッシュダウンにおける等価列の問題を修正 #63819 (Maksim Kita)。
  • Lazy データベースにおいて DROP 実行後にすべてのディスクからデータを削除するようにしました。 #63848 (MikhailBurdukov).
  • 並列レプリカと新しいアナライザを使用してマテリアライズドビュー (MV) から読み取る際に誤った結果が返される問題を修正しました #63861 (Nikita Taranov)。
  • keeper-client の find_super_nodes および find_big_family コマンドに関する修正 #63862 (Alexander Gololobov)。
  • Lambda 実行名を更新 #63864 (Nikolai Kochetov).
  • CPU/Real プロファイラが原因の SIGSEGV を修正 #63865 (Azat Khuzhin)。
  • EXPLAIN CURRENT TRANSACTION クエリを修正 #63926Anton Popov)。
  • アナライザーを修正: 無限再帰状態(turtles all the way down)を解消… #63930 (Yakov Olkhovskiy).
  • plain_rewritable ディスクに対して一部の ALTER TABLE コマンドを許可するようにした #63933Julia Kartseva)。
  • 分散環境での再帰CTEに関する修正 #63939Maksim 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 テーブルに対して、設定 final = 1 が指定されたクエリの解析を修正しました。 #64037 (Nikolai Kochetov).
  • recoverLostReplica に不足していた設定を追加 #64040 (Raúl Marín)。
  • アナライザーを使用して SQL のセキュリティアクセスチェックを修正 #64079 (pufit)。
  • アナライザーを修正: DAG では補間式のみを使用するように変更 #64096 (Yakov Olkhovskiy).
  • Azure バックアップが(非ネイティブコピーの場合に)max_upload_part_size ではなく 1 MiB(読み取りバッファサイズ)単位でマルチパートブロックを書き込んでいた問題を修正 #64117 (Kseniia Sumarokova).
  • バックアップコピー時のフォールバック処理を正しく行うよう修正 #64153 (Antonio Andelic).
  • CREATE TABLE をマテリアライズドビューとして実行する際に発生する 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 がクローズされました。#62114 (Alexey Milovidov).
  • 実験的機能であるレプリカからの並列読み取り用の max_parallel_replicas を、0 に設定できないようにしました(0 には意味がないため)。#60140 をクローズしました。#61201 (Kruglov Pavel).
  • 非推奨となった LIVE VIEW 機能の一部である INSERT WATCH クエリのサポートを削除しました。#62382 (Alexey Milovidov).
  • optimize_monotonous_functions_in_order_by 設定を削除しました。#63004 (Raúl Marín).
  • Replicated データベースエンジンから experimental タグを削除しました。現在は Beta 段階です。#62937 (Justin de Guzman).

新機能

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

パフォーマンスの向上

  • 同値集合を用いた 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 クエリに対するミューテーションのオーバーヘッドを削減 (v2)。 #60856 (Azat Khuzhin).
  • PODArray でより頻繁に呼び出される関数が、強制的にインライン展開されるようになりました。 #61144 (李扬)
  • 必須列をすべて読み込み終えた時点でオブジェクトの残りの部分をスキップして JSON の解析を高速化。 #62210 (lgbo).
  • file/s3/hdfs/url/... テーブル関数におけるファイルからの単純な INSERT SELECT クエリを改善。並列パースに使用されるスレッド数を制御するための個別の max_parsing_threads 設定を追加。#62404 (Kruglov Pavel).
  • 関数 to_utc_timestampfrom_utc_timestamp は、約 2 倍高速になりました。#62583 (KevinyhZou)。
  • parseDateTimeOrNullparseDateTimeOrZeroparseDateTimeInJodaSyntaxOrNullparseDateTimeInJodaSyntaxOrZero 関数は、入力の大半がパース不能な値である場合に、従来より大幅に高速 (10倍〜1000倍) に実行されるようになりました。 #62634 (LiuNeng)。
  • system.query_cache に対する SELECT クエリは、クエリキャッシュに多数のエントリ(例: 100,000 件超)が含まれている場合に、これまでよりも目に見えて高速になりました。 #62671 (Robert Schulze).
  • ファイルシステムキャッシュでの競合を低減(パート3):空き領域の予約を試行する際に、ロックなしでファイルシステムからの削除を実行。 #61163 (Kseniia Sumarokova).
  • ファイルシステムキャッシュの動的なサイズ変更を高速化しました。 #61723 (Kseniia Sumarokova).
  • INVALIDATE_QUERY を使用する辞書ソースは、起動時に 2 回再読み込みされなくなりました。#62050 (vdimir)。
  • 主キーを含むブール式の後ろに冗長な = 1 または = 0 が追加された場合に、プライマリインデックスが使用されない問題を修正しました。例えば、SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 は、本来プライマリインデックスを使用できるにもかかわらず、いずれもフルテーブルスキャンを行ってしまいます。 #62142 (josh-hildred).
  • system.remote_data_paths からのチャンクを、全結果を 1 つの大きなチャンクに蓄積するのではなく、チャンクのストリームとして返すようにしました。これにより、メモリ使用量を抑えつつ、途中経過を表示し、クエリをキャンセルできるようになります。 #62613 (Alexander Gololobov).

実験的機能

  • azure_allow_parallel_part_upload 設定で制御される Azure Blob Storage 向けの並列書き込みバッファをサポートしました。 #62534 (SmitaRKulkarni).
  • ユーザ空間ページキャッシュが静的 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)も利用可能になりました。#61409Austin Kothig)。
  • date_trunc にナノ秒、マイクロ秒、ミリ秒の単位を追加しました。 #62335 (Misz606)。
  • 証明書を再読み込みする際に、証明書チェーンも再読み込みするようにしました。 #61671 (Pervakov Grigorii).
  • レプリカパスにアクティブなレプリカが存在する場合は、そのレプリカパスに対するテーブルの ATTACH を許可しないことで、エラー #60432 の発生を防ぐようにしました。#61876Arthur Passos)。
  • clickhouse-localinput のサポートを実装。 #61923 (Azat Khuzhin).
  • strictnessANYJoin テーブルエンジンは、再読み込み後も結果が一貫するようになりました。同じキーを持つ複数行が挿入された場合、最初の行が優先されます(以前は、テーブル読み込み時にランダムに選択されていました)。#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 テーブルが test_tbl(a Int32, b Int32, c Int32) のように 3 カラムで定義されているにもかかわらず、テキストファイルの最初の行に 2 フィールドしかない場合、この状況では入力フィールド数は 2 に再設定されます。その後、テキストファイルの次の行に 3 フィールドが存在しても、3 番目のフィールドは読み取られず、デフォルト値の 0 が設定されてしまいますが、これは正しくありません。#62086KevinyhZou)。
  • CREATE AS はテーブルのコメントをコピーします。 #62117 (Pablo Marcos)。
  • テーブル zookeeper にクエリの進行状況を追加。#62152JackyWoo)。
  • トレースコレクタ(Real と CPU)をサーバー全体で有効化できるようにしました。 #62189 (alesapin).
  • 設定 lightweight_deletes_sync を追加しました(デフォルト値: 2 - すべてのレプリカが同期的に処理を完了するまで待機)。これは設定 mutations_sync に似ていますが、軽量削除の動作にのみ影響します。 #62195 (Anton Popov).
  • カスタム設定の値を解析する際に、ブール値と整数を区別するようにしました: SET custom_a = true; SET custom_b = 1;#62206 (Vitaly Baranov).
  • AWS PrivateLink インターフェイスエンドポイント経由での S3 アクセスに対応しました。#60021#31074#53761 がクローズされました。#62208Arthur Passos)。
  • 存在しない場合は、clickhouse-client で UDF 用のディレクトリを作成しなくなりました。これにより #59597 が解決されました。#62366Alexey Milovidov)。
  • クエリキャッシュは、システムテーブル(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_msmax_delay_to_insert 設定を参照)。#62420Sergei 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_logevent_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).
  • 単一のテーブルを利用する複数のコンシューマからのログメッセージを区別できるようにするため、librdkafka(多くのバグで悪名高い C 言語ライブラリ)のクライアント識別子をログメッセージに追加しました。 #62813 (János Benjamin Antal)。
  • Replicated データベースの ZooKeeper パスで、特殊マクロ {uuid} および {database} を使用できるようにしました。 #62818 (Vitaly Baranov).
  • HTTP リクエストで異なる認証スキームでもクォータキーを使用できるようにしました。 #62842 (Kseniia Sumarokova).
  • clickhouse client および clickhouse local のコマンドライン引数 --help による出力の冗長性を減らしました。従来の出力は今後、--help --verbose によって生成されます。 #62973 (Yarik Briukhovetskyi)。
  • log_bin_use_v1_row_events は MySQL 8.3 で削除され、これに合わせて実験的な MaterializedMySQL エンジンを調整しました #60479#63101Eugene Klimov)。著者: Nikolay Yankin。

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

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

  • クォーラム挿入トランザクションの取り消し時に発生するロジックエラーを修正。#61953Han Fei)。
  • COUNT(*) で FILTER 句を使用した場合に発生するパーサーエラーを修正 #61357 (Duc Canh Le)。
  • group_by_use_nulls、grouping sets、analyzer、materialize/constant における論理エラーを修正 #61567 (Kruglov Pavel)。
  • 移動済みパーツを削除する前にマージをキャンセルするように変更 #61610 (János Benjamin Antal).
  • Apache Arrow における abort の問題を修正 #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 関数を組み合わせた場合の正しい修正 #61957Nikita Mikhaylov)。
  • Row Policy に式がない場合に Engine Merge がクラッシュする #61971Ilya 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 修飾子を含むクエリ向けの Parts Splitter を修正 #62268Nikita Taranov)。
  • Analyzer: パラメータ化ビューへのエイリアス解決を修正 #62274 (Dmitry Novik).
  • Analyzer: 親スコープからの名前解決を修正 #62281 (Dmitry Novik)。
  • nullable な非ネイティブ数値カラムに対する argMax を修正 #62285 (Raúl Marín)。
  • Ordinary データベースにおけるマテリアライズドビューの BACKUP および RESTORE の動作を修正 #62295 (Vitaly Baranov).
  • Context 内のスカラーにおけるデータ競合を修正 #62305 (Kruglov Pavel)。
  • マテリアライズドビューの主キーを修正 #62319 (Murat Khairulin).
  • マルチスレッドの INSERT パイプラインをサポートしていないテーブルに対しては構築しないようにしました #62333 (vdimir)。
  • 分散クエリで位置指定引数を扱う analyzer を修正 #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 を修正 #62451 (Nikita Taranov)。
  • ネストされたラムダ式のキャプチャを修正。 #62462 (Nikolai Kochetov).
  • 再帰型を含む Protobuf 読み込み時のクラッシュを回避 #62506 (Raúl Marín).
  • 1 つのパーティションを自身に移動する処理で発生していたバグを修正 #62524 (helifu)。
  • LIMIT句におけるスカラーサブクエリを修正 #62567 (Nikolai Kochetov)。
  • 実験的かつサポート対象外の Hive エンジンで発生していたセグメンテーションフォルトを修正しました。そもそもこのエンジンはあまり気に入っていませんが #62578Nikolay Degterinsky)。
  • groupArraySorted のメモリリークを修正 #62597 (Antonio Andelic)。
  • largestTriangleThreeBuckets のクラッシュを修正 #62646 (Raúl Marín).
  • より高い解像度向けに tumble[Start,End] と hop[Start,End] を修正 #62705 (Jordi Villar)。
  • argMin/argMax コンビネータの状態を修正 #62708 (Raúl Marín).
  • キャッシュロック競合の最適化によりキャッシュ内の一時データ処理が失敗する問題を修正 #62715 (Kseniia Sumarokova)。
  • 関数 mergeTreeIndex で発生するクラッシュを修正 #62762Anton Popov)。
  • fix: update: ネストされたマテリアライズド列: サイズチェックの修正 #62773 (Eliot Hautefeuille).
  • analyzer を使用した CTE で FINAL 修飾子が考慮されない問題を修正 #62811 (Duc Canh Le)。
  • 関数 formatRowJSON フォーマットおよび HTTP インターフェイス使用時にクラッシュする問題を修正 #62840 (Anton Popov)。
  • Azure: エンドポイントオブジェクトからの最終 URL の構築処理を修正 #62850 (Daniel Pozo Escalona).
  • GCD コーデックを修正 #62853 (Nikita Taranov).
  • ハイパーレクタングルにおける LowCardinality(Nullable) キーの問題を修正 #62866 (Amos 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).
  • キャッシュ内の一時データで未処理例外により終了してしまう問題を修正 #62998 (Kseniia 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 ハンドシェイク用のサーバー名を設定 #63122 (Alexander Gololobov)。
  • MongoDB のワイヤプロトコルバージョンチェックで、データベース名 "config" の代わりにユーザー指定のデータベースを使用するようにした #63126 (Alexander Gololobov)。

ClickHouse 24.3 LTS リリース, 2024-03-27

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

  • allow_experimental_analyzer 設定はデフォルトで有効になっており、クエリ解析を互換性と機能面がより充実した新しい実装に切り替えます。「analyzer」機能は experimental ではなく beta とみなされます。従来の動作に戻したい場合は、compatibility24.2 に設定するか、allow_experimental_analyzer 設定を無効にしてください。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 を使用する方がユーザーの期待に合致します。Parquet/ORC/Arrow は lz4 や zstd を含む多くの圧縮方式をサポートしており、ClickHouse はそれらすべての圧縮方式をサポートしています。一部の性能の劣るツールは、高速な lz4 圧縮方式をサポートしていないため、デフォルトでは zstd を設定しています。これは output_format_parquet_compression_methodoutput_format_orc_compression_methodoutput_format_arrow_compression_method という設定で制御されます。Parquet と ORC についてはデフォルトを zstd に変更しましたが、Arrow については変更していません(低レベル用途向けであることを重視しているためです)。#61817Alexey Milovidov)。
  • 新しい 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 リリースからアップグレードする前に、インメモリデータパーツが存在しないことをまず確認してください。インメモリデータパーツが存在する場合は、最初にそれらを無効化し、その後インメモリデータパーツがなくなるまで待ってからアップグレードを続行してください。#61127 (Alexey 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 のブロッカーを解消するために必要な変更です。#60888Nikita Mikhaylov)。
  • ユーティリティ clickhouse-copier は GitHub 上の別リポジトリ https://github.com/ClickHouse/copier に移動されました。バンドルには同梱されなくなりましたが、引き続き個別にダウンロードして利用できます。これにより、次の issue がクローズされます: #60734 これにより、次の issue がクローズされます: #60540 これにより、次の issue がクローズされます: #60250 これにより、次の issue がクローズされます: #52917 これにより、次の issue がクローズされます: #51140 これにより、次の issue がクローズされます: #47517 これにより、次の issue がクローズされます: #47189 これにより、次の issue がクローズされます: #46598 これにより、次の issue がクローズされます: #40257 これにより、次の issue がクローズされます: #36504 これにより、次の issue がクローズされます: #35485 これにより、次の issue がクローズされます: #33702 これにより、次の issue がクローズされます: #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 が禁止されているのと同様ですが、SimpleAggregateFunction が禁止される理由は、それらが比較不能なためです)。これらを許可するには allow_suspicious_primary_key を使用してください。 #61399 (Azat Khuzhin).
  • Ordinary データベースエンジンは非推奨になりました。サーバーがこれを使用している場合、clickhouse-client で警告が表示されます。この変更により #52229 がクローズされました。#56942shabroo)。

新機能

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

パフォーマンスの向上

  • 不要で高コストなメモリコピーを省くために、dotProduct 関数を最適化しました。#60928Robert Schulze)。
  • 256ビット整数の出力を30倍高速化。 #61100 (Raúl Marín).
  • テーブルのプライマリキーにほとんど役に立たないカラムが含まれている場合は、それらをメモリに保持しないでください。これは、新しい設定 primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns によって制御され、デフォルト値は 0.9 です。つまり、複合プライマリキーにおいて、あるカラムの値が全体の少なくとも 90% の行で変化する場合、そのカラム以降のカラムはメモリに読み込まれません。 #60255 (Alexey Milovidov)。
  • 複数の Nullable 列を扱う場合のシリアライズ済み集約メソッドの性能を向上しました。 #55809 (Amos Bird).
  • Lazy が 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 による進捗を妨げることです。 #61543Alexey Milovidov)。
  • 単一の値に対する IN 演算子を最適化する新しい analyzer パスを追加しました。 #61564 (LiuNeng).
  • DNSResolver は、解決済み IP アドレスの集合をシャッフルし、AWS S3 の複数エンドポイントを一様に利用できるようにします。 #60965 (Sema Checherinda)。

実験的機能

  • Azure Blob Storage 向けの並列読み取りをサポートしました。これにより、実験的な Azure オブジェクトストレージのパフォーマンスが向上します。 #61503 (SmitaRKulkarni).
  • S3 と同様に、Azure Blob Storage 向けの非同期 WriteBuffer を追加しました。これにより、実験的な Azure オブジェクトストレージのパフォーマンスが向上します。 #59929 (SmitaRKulkarni).
  • Azure Blob Storage を使用する際、バックアップ I/O にマネージド ID を使用するようにしました。さらに、存在しないコンテナを ClickHouse が作成しようとするのを防ぐための設定を追加しました。コンテナの作成にはストレージアカウントレベルでの権限が必要です。 #61785 (Daniel Pozo Escalona).
  • 並列レプリカで IN 句のサブクエリを使用できるようにする設定 parallel_replicas_allow_in_with_subquery = 1 を追加しました。 #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 クエリの結果など、結果セットに単一の値しか含まれない場合、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 設定を上書きできるようにしました。 #61832 (Azat Khuzhin).
  • プロセッサのプロファイリング(ソートや集約などに費やした時間と入出力バイト数)をデフォルトで有効化。 #61096 (Azat Khuzhin).
  • Filesystem データベースで、フォーマット拡張子のないファイルをサポートしました。 #60795 (Kruglov Pavel).
  • すべてのフォーマット名の大文字・小文字を区別しないようにしました。たとえば、Tsv でも TSV でも tsv でも、あるいは rowbinary でも同じように扱われます。#60420豪肥肥)。今後もできれば正しく表記していただけるとありがたいです(例: JSON 😇 であって Json 🤮 ではなく)が、お好みの表記でも問題ありません。
  • distributed_ddl_output_mode 設定に none_only_active モードを追加しました。 #60340 (Alexander Tokmakov).
  • 高度なダッシュボードで、複数系列の折れ線グラフの配色がわずかに改善されました。 #60391 (Alexey Milovidov).
  • Advanced ダッシュボードでは、スクロールしてもコントロールが常に表示されるようになりました。これにより、上までスクロールし直さずに新しいチャートを追加できます。 #60692 (Alexey Milovidov).
  • マテリアライズドビューに対して MODIFY COLUMN クエリを実行する際は、すべてのカラムが存在することを確認するために内部テーブルの構造を確認してください。 #47427 (sunny)。
  • String 型と Enum 型は、配列、UNION クエリ、条件式など、同じコンテキストで使用できます。これにより #60726 が解決されました。#60727Alexey Milovidov)。
  • クエリ処理のための外部データの構造内で Enum を宣言できるようにしました(これはクエリに対して提供できる、その場で作成される一時テーブルです)。 #57857Duc Canh Le)。
  • マージ対象のパーツを選択する際に軽量削除行を考慮し、生成されるパーツのディスクサイズをより正確に見積もれるようにしました。 #58223 (Zhuo Qiu).
  • より多くのシステムテーブルのカラムにコメントを追加しました。https://github.com/ClickHouse/ClickHouse/pull/58356 の続きです。#59016Nikita Mikhaylov)。
  • これにより PREWHERE で仮想カラムを使用できるようになりました。_part_offset のような非定数の仮想カラムに対して有効です。#59033Amos Bird)。仮想カラムの全体的な使い勝手が向上しました。PREWHERE で仮想カラムを使用することが許可されるようになりました(_part_offset のような非定数の仮想カラムに対して有効です)。また、設定 describe_include_virtual_columns を有効にした DESCRIBE クエリにおいて、カラムのコメントとして仮想カラムの組み込みドキュメントを参照できるようになりました。#60205Anton Popov)。
  • 固定キーを使用する代わりに、オブジェクトストレージがオブジェクト削除可否を判定するためのキーを生成するようになりました。 #59495 (Sema Checherinda).
  • オブジェクトストレージタイプとして「local_blob_storage」の代わりに「local」を許可できるようにした。 #60165 (Kseniia Sumarokova).
  • DETACH/サーバーシャットダウン時および SYSTEM FLUSH DISTRIBUTED 実行時に、Distributed エンジンの保留中の INSERT ブロックを並列でフラッシュするようにしました(並列実行は、そのテーブルにマルチディスクポリシーが設定されている場合にのみ機能します(現状の Distributed エンジン内のテーブルはすべてこれに該当します))。 #60225 (Azat Khuzhin).
  • マージ時に read-through キャッシュを強制するための設定を追加しました。 #60308 (Kseniia Sumarokova).
  • MySQL 互換プロトコルの改善。Issue #57598 では、トランザクション処理に関する挙動の違いが指摘されています。アクティブなトランザクションが存在しない状態で発行された COMMIT/ROLLBACK 文が、MySQL の挙動とは異なりエラーとして報告されていました。#60338PapaToemmsn)。
  • substring 関数に新しいエイリアス byteSlice が追加されました。 #60494 (Robert Schulze).
  • あいまいさを減らすため、サーバー設定 dns_cache_max_size の名称を dns_cache_max_entries に変更しました。 #60500 (Kirill Nikiforov).
  • SHOW INDEX | INDEXES | INDICES | KEYS は、もはやプライマリキー列でソートしなくなりました(この動作は直感的ではありませんでした)。#60514Robert Schulze)。
  • Keeper の改善点: データ損失を防ぐため、不正なスナップショットが検出された場合は起動時に異常終了するようにしました。 #60537 (Antonio Andelic).
  • tzdata を 2024a に更新しました。 #60768 (Raúl Marín).
  • 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 を解決しました。#60886Zach Naimon)。
  • null を最大値または最小値として扱えるように、full-sorting merge join アルゴリズム向けのフラグを追加しました。これにより、Apache Spark などの他の SQL システムと動作の互換性を持たせることができます。 #60896 (loudongfeng).
  • clickhouse-clientclickhouse-local で、ファイル拡張子から出力フォーマットを自動判別できるようにしました。 #61036 (豪肥肥).
  • Linux の cgroup 値が変更された場合に、実行時にメモリ制限を更新するようになりました。 #61049 (Han Fei).
  • 誤って追加漏れとなっていた関数 toUInt128OrZero を追加しました(このミスは https://github.com/ClickHouse/ClickHouse/pull/945 に関連しています)。互換性エイリアスである FROM_UNIXTIMEDATE_FORMAT(これらは ClickHouse 固有のものではなく、MySQL 互換性のためだけに存在します)を、SQL 互換エイリアスに求められるとおり、大文字小文字を区別しないようにしました。 #61114Alexey Milovidov)。
  • アクセスチェックを改善し、対象ユーザーが(より広い権限に包含されているだけで)取り消し対象の権限自体は個別には保持していない場合でも、その権限を取り消せるようにしました。例: GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;#61115pufit)。
  • Nullable 列に対する has() 関数の動作を修正(#60214 を修正)。#61249Mikhail Koviazin)。
  • 現在、サブツリー <include from_zk="/path" merge="true"> に対する設定の置換で、属性 merge="true" を指定できるようになりました。
    この属性が指定されている場合、ClickHouse はサブツリーを既存の設定とマージします。指定されていない場合のデフォルト動作は、新しい内容を設定に追記することです。 #61299 (alesapin)。
  • 仮想メモリマッピング用の非同期メトリクス VMMaxMapCountVMNumMaps を追加。 #60662 をクローズ。 #61354Tuan Pham Anh)。
  • 一時データを作成するすべての箇所で temporary_files_codec 設定を使用するようにしました。たとえば、外部メモリでのソートや外部メモリでの GROUP BY などです。以前は partial_merge JOIN アルゴリズムでのみ機能していました。 #61456 (Maksim Kita)。
  • クエリパースの複雑さを制限できる新しい設定 max_parser_backtracks を追加。 #61502Alexey Milovidov)。
  • ファイルシステムキャッシュの動的リサイズ時の競合を軽減。 #61524 (Kseniia Sumarokova).
  • 今後書き換えられる予定のため、StorageS3 queue の sharded モードを禁止しました。 #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 混在クラスタにおける浮動小数点の集約関数状態の不整合を修正 #60610 (Harry Lee).

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

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

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

  • MergeTree において finished_mutations_to_keep=0 の動作を修正(ドキュメントでは 0 はすべてを保持することを意味するとされているため)#60031Azat 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 メタデータ型の扱いを修正 #60396Kseniia Sumarokova)。
  • mapContainsKeyLike における論理エラー「Cannot capture column because it has incompatible type」を修正 #60451Kruglov 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).
  • intDiv の decimal 型および date 型の引数に対する処理を修正 #60672 (Yarik Briukhovetskyi).
  • 修正: ALTER MODIFY クエリで CTE を展開 #60682 (Yakov Olkhovskiy).
  • Atomic/Ordinary 以外のデータベースエンジン(例: Memory)向けの system.parts を修正 #60689 (Azat Khuzhin)。
  • パラメータ化ビューで発生する "Invalid storage definition in metadata file" エラーを修正 #60708 (Azat Khuzhin).
  • CompressionCodecMultiple のバッファオーバーフローを修正 #60731 (Alexey Milovidov).
  • SQL/JSON から無効な値を除去 #60738 (Alexey Milovidov).
  • 集約関数 quantileGK から不正なアサーションを削除 #60740 (李扬)。
  • streams を 1 に設定して insert-select および insert_deduplication_token のバグを修正 #60745Jordi 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 の再設定を修正 #61233 (Antonio Andelic)。
  • S3 エンジンにおける session_token の扱いを修正 #61234 (Kruglov Pavel).
  • 集約関数 uniqExact が誤った結果を返す可能性のある問題を修正 #61257 (Anton Popov)。
  • SHOW DATABASE のバグを修正 #61269 (Raúl Marín)。
  • RabbitMQ ストレージの MATERIALIZED 列に関する論理エラーを修正 #61320 (vdimir).
  • CREATE OR REPLACE DICTIONARY を修正 #61356 (Vitaly 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).
  • restore プールでのキューイングを許可 #61475 (Nikita Taranov)。
  • UUID を使用して system.parts を読み取る際の不整合を修正。 #61479 (Dan Wu).
  • ALTER QUERY MODIFY SQL SECURITY を修正 #61480 (pufit)。
  • ウィンドウビュー(実験的機能)で発生していたクラッシュを修正 #61526 (Alexey Milovidov)。
  • 非ネイティブ整数値を扱う repeat の不具合を修正 #61527 (Antonio Andelic).
  • クライアントの-s引数を修正 #61530 (Mikhail f. Shiryaev)。
  • arrayPartialReverseSort のクラッシュを修正 #61539 (Raúl Marín)。
  • const position を指定した文字列検索の不具合を修正 #61547 (Antonio Andelic).
  • DateTime64 で使用したときにエラーが発生していた addDays を修正 #61561 (Shuai li).
  • JSONExtract で LowCardinality 型の入力を不許可にする #61617 (Julia Kartseva)。
  • 重複排除を伴う非同期挿入に対する system.part_log の修正 #61620 (Antonio Andelic)。
  • system.parts での Non-ready set 例外を修正。#61666Nikolai Kochetov)。
  • REPLACE_RANGE における actual_part_name を修正 (Entry actual part isn't empty yet) #61675 (Alexander Tokmakov).
  • 不正な UTF-8 に関する multiSearchAllPositionsCaseInsensitiveUTF8 の sanitizer からのレポートを修正 #61749pufit)。
  • Nullable カラムで RANGE フレームがサポートされていないという不具合を修正。 #61766 (YuanLiu).

ClickHouse リリース 24.2, 2024-02-29

後方互換性のない変更

  • ネストした型内の疑わしい/実験的なデータ型を検証するようにしました。以前は、Array/Tuple/Map のようなネストした型内では、そのような型(JSON を除く)を検証していませんでした。#59385Kruglov Pavel)。
  • スレッド数とブロックサイズに対する妥当性チェックを追加しました。#60138Raúl Marín)。
  • デフォルトでは指数表記の浮動小数点数を推論しないようにしました。以前の動作を復元する設定 input_format_try_infer_exponent_floats を追加しました(デフォルトは無効)。#59476 をクローズします。#59500Kruglov Pavel)。
  • ALTER 操作を丸括弧で囲めるようにしました。括弧の出力は設定 format_alter_operations_with_parentheses で制御できます。デフォルトでは、フォーマット済みクエリにおいて括弧は出力されます。これは、フォーマット済みの ALTER 操作をメタデータ(例: ミューテーション)として一部の箇所に保存しているためです。この新しい構文により、ALTER 操作がリストで終わる一部のクエリが明確になります。例: ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c は、旧構文では正しくパースできません。新しい構文では、クエリ ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) は明確です。旧バージョンはこの新しい構文を読み取れないため、新しい構文を使用すると、単一のクラスター内で新旧バージョンの ClickHouse を混在させている場合に問題が発生する可能性があります。#59532János Benjamin Antal)。
  • マテリアライズドビューに関するセキュリティ問題を修正しました。この問題により、ユーザーは必要な権限なしにテーブルへ挿入できていました。この修正では、ユーザーがマテリアライズドビューだけでなく、その背後にあるすべてのテーブルへの挿入権限も持っているかを検証します。これは、以前は動作していた一部のクエリが、現在は Not enough privileges で失敗し得ることを意味します。この問題に対処するため、本リリースではビュー向けの新機能として SQL セキュリティを導入しています https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security#54901 #60439pufit)。

新機能

  • ビューやマテリアライズドビューで定義者ユーザーを指定できる新しい構文を追加しました。これにより、基礎となるテーブルに対して明示的に権限を付与しなくても、ビューからの SELECT/INSERT を実行できるようになります。つまり、ビュー側で権限をカプセル化できるようになります。 #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。#58486Julia Kartseva)。
  • 連続したログイン失敗回数に対する上限クォータを設定できるようにしました。 #54737 (Alexey Gerasimchuck).
  • 新しい集約関数 groupArrayIntersect#49862 のフォローアップ。#59598Yarik Briukhovetskyi)。
  • AzureBlobStorage のバックアップおよびリストアをサポート。 #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).
  • DNS に関する問題のデバッグに役立つ system.dns_cache テーブルを実装しました。 #59856 (Kirill Nikiforov)。
  • コーデック LZ4HC は、新たに圧縮レベル 2 をサポートするようになりました。これは、以前の最小レベルである 3 より高速ですが、その代わり圧縮率は低くなります。以前のバージョンでは、LZ4HC(2) 以下の指定はすべて LZ4HC(3) と同一でした。著者: Cyan4973#60090Alexey Milovidov)。
  • system.dns_cache テーブルを実装しました。DNS 関連の問題のデバッグに役立ちます。新しいサーバー設定 dns_cache_max_size を追加しました。 #60257 (Kirill Nikiforov)。
  • merge テーブル関数で、merge(['db_name', ] 'tables_regexp') のような単一引数版をサポートしました。 #60372 (豪肥肥)。
  • 負の位置引数をサポートします。#57736 をクローズします。#58292flynn)。
  • user キーを使用して、config 内の特定の S3 設定ごとに許可するユーザーのセットを指定できるようにしました。 #60144 (Antonio Andelic)。
  • テーブル関数 mergeTreeIndex を追加しました。MergeTree テーブルの index ファイルおよび marks ファイルの内容を表し、テーブルの内部構造を調査する用途で使用できます。構文: mergeTreeIndex(database, table, [with_marks = true])。ここで database.table は、MergeTree エンジンを持つ既存のテーブルです。#58140Anton Popov)。

実験的機能

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

パフォーマンスの向上

  • Primary keyのメモリ使用量が少なくなりました。 #60049 (Alexey Milovidov).
  • プライマリキーおよび一部のその他の操作におけるメモリ使用量を改善しました。 #60050 (Alexey Milovidov)。
  • テーブルのプライマリキーは、最初のアクセス時に遅延ロードでメモリに読み込まれます。これは、新しい MergeTree の設定 primary_key_lazy_load によって制御され、デフォルトで有効になっています。これにはいくつかの利点があります。- 使用されないテーブルについてはロードされないこと。- メモリが不足している場合、サーバ起動時ではなく最初の使用時に例外がスローされること。これにはいくつかの欠点もあります。- プライマリキーのロードにかかるレイテンシが、接続を受け付ける前ではなく最初のクエリ時に発生するため、理論的には「thundering herd」問題を引き起こす可能性があること。これにより #11188 がクローズされました。 #60093Alexey Milovidov)。
  • ベクトル検索用のベクトル化距離関数。 #58866 (Robert Schulze).
  • ベクトル検索に有用なベクトル化関数 dotProduct#60202Robert 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 フォーマットで、ブロックが 100 万を超える単一の数値のみで構成されている場合、読みやすい形式の数値がテーブルの右側に表示されます。 #60379 (rogeryk)。
  • 設定 split_parts_ranges_into_intersecting_and_non_intersecting_finalsplit_intersecting_parts_ranges_into_layers_final を追加しました。これらの設定は、FINAL を伴うクエリ向けの最適化を無効化するために必要であり、デバッグ用途にのみ必要です。#59705Maksim Kita)。実際にはそれだけではなく、パフォーマンスを犠牲にする代わりにメモリ使用量を抑えるためにも利用できます。
  • 設定名 extract_kvp_max_pairs_per_rowextract_key_value_pairs_max_pairs_per_row に変更しました。この設定名に含まれていた不要な省略表現は https://github.com/ClickHouse/ClickHouse/pull/43606 で導入されたものです。この設定に関するドキュメントを修正しました。#59683Alexey Milovidov)。#59960jsc0218)。
  • DEFAULT または MATERIALIZED 式を持つカラムに対して ALTER COLUMN MATERIALIZE を実行した場合、処理が本来のセマンティクスどおりに動作するようになりました。 #58023 (Duc Canh Le).
  • MUTATION 実行中に発生するエラーに対して指数バックオフ処理を有効化しました。これにより、CPU 使用率、メモリ使用量、およびログファイルサイズを削減できます。 #58036 (MikhailBurdukov).
  • InitialQuery プロファイルイベントをカウントするための改善を追加。 #58195 (Unalian)。
  • storage_configurationvolume_priority を定義できるようになりました。 #58533 (Andrey Zvonov).
  • T64 コーデックで Date32 型のサポートを追加。 #58738 (Hongbin Ma).
  • 複数の要素を含む型で末尾のカンマを許可しました。 #59119 (Aleksandr Musorin).
  • Distributed テーブルエンジンの設定を(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 上の)cgroup の制限に基づいて計算されます。以前は、/sys/fs/cgroup/memory.max(cgroup v2 用)の設定がハードコードされていました。その結果、/sys/fs/cgroup/my/nested/group/memory.max のようなネストされたグループ(階層)に対して設定された cgroup v2 のメモリリミットは無視されていました。この問題はすでに修正されています。v1 のメモリリミットの動作は変更されていません。#59435Robert Schulze)。
  • INSERT 実行時に、PK/プロジェクション/セカンダリインデックスの計算に費やされた時間を計測できるよう、新しいプロファイルイベントを追加しました。 #59436 (Nikita Taranov).
  • S3QueueOrdered モードにおいて、作成時に設定 s3queue_last_processed_path を使用して開始位置を指定できるようにしました。 #59446 (Kseniia Sumarokova).
  • clickhouse-localsystem.tables でもシステムテーブルのコメントが利用できるようになりました。 #59493 (Nikita Mikhaylov).
  • system.zookeeper テーブル: 以前は結果全体をメモリ上に蓄積し、1 つの大きなチャンクとして返していました。この変更により、system.zookeeper から多数の行を読み取る際のメモリ消費を削減し、中間進捗(これまでに読み込まれた行数)を表示できるようにし、結果セットが大きい場合でも接続タイムアウトに達するのを回避できるようになります。 #59545 (Alexander Gololobov).
  • これにより、ダッシュボードは URL の #hash の圧縮状態と非圧縮状態の両方を解釈できるようになりました(後方互換性の維持)。#59124 の続きです。#59548 (Amos Bird)。
  • Intel QPL(コーデック DEFLATE_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 から作成された名前付きコレクションの挙動を統一しました。 #59710 (Pervakov Grigorii).
  • merge_max_block_size_bytes が十分に小さい値に設定されていて、テーブルに幅の広い行(文字列やタプル)を含む場合、バックグラウンドマージが無限ループに陥る可能性がありました。この挙動は修正されました。https://github.com/ClickHouse/ClickHouse/pull/59340 のフォローアップです。 #59812Nikita 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 の改善: ディスク関連の操作での失敗時のリトライ処理を追加。 #59980 (Antonio Andelic).
  • 新しい設定 backups.remove_backup_files_after_failure を追加しました: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>#60002Vitaly Baranov)。
  • GCP が HTTP エラーコード GATEWAY_TIMEOUT を伴う Internal Error を返した場合に備えて、S3 ファイルの 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_columns および mysql_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 にいくつかのファジングを追加しました。#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 もファジング対象とするようになりました。#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 におけるダイジェスト計算を修正 #59439Antonio Andelic)。
  • デバッグシンボルを含まないバイナリのスタックトレースを修正 #59444 (Azat Khuzhin).
  • カラム固有設定がある場合の ASTAlterCommand::formatImpl を修正... #59445 (János Benjamin Antal).
  • Analyzer により SELECT * FROM [...] ORDER BY ALL を修正 #59462zhongyuankai)。
  • 分散クエリのキャンセル中に発生する可能性のある未捕捉例外を修正 #59487 (Azat Khuzhin).
  • 複合型に対して、MAXpermutation と同じルールを使用するように変更しました #59498Raú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)。
  • 定数シャーディングキーを持つ分散テーブルを修正 #59606Vitaly Baranov)。
  • WingFuzz で検出された KQL の問題を修正 #59626 (Yong Wang)。
  • AsynchronousBoundedReadBuffer で発生するエラー「Read beyond last offset」を修正 #59630 (Vitaly Baranov)。
  • RewriteSumFunctionWithSumAndCountVisitor で関数エイリアスを保持 #59658Raú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 の読み取り時のクラッシュを修正 #59928Maksim Kita)。
  • ReplicatedMergeTree の無効な metadata_version の修正 #59946 (Maksim Kita)。
  • StorageDistributed のデータレースを修正 #59987 (Nikita Taranov)。
  • Docker: オプションが有効な場合にのみ初期化スクリプトを実行するように変更 #59991 (jktng)
  • SQLite への INSERT 文におけるシングルクォートの扱いを修正(シングルクォートをバックスラッシュではなく、シングルクォートを重ねてエスケープするように変更)#60015 (Azat Khuzhin).
  • arrayFold のいくつかの論理エラーを修正 #60022Raúl Marín)。
  • カラムエイリアスを削除してしまっていた optimize_uniq_to_count を修正 #60026 (Raúl Marín).
  • S3Queue テーブル削除時に発生する可能性のある例外を修正 #60036 (Kseniia Sumarokova).
  • 単一リテラルに対する NOT の書式を修正 #60042 (Raú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 NULLS および IGNORE 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 型にキャストできるようにしました #60160Robert Schulze)。
  • system.s3queue_log を修正 #60166 (Kseniia Sumarokova)。
  • Nullable な集約関数名を持つ arrayReduce を修正 #60188 (Raúl Marín).
  • S3Queue の機密情報を非表示化 #60233 (Kseniia Sumarokova).
  • HTTP 例外コードを修正。#60252Austin 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).
  • 次の 2 つのバグが修正されるまで、Kusto 方言は無効化されています: #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 の場合に 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 設定で制御されます。 #58561 (Kruglov Pavel)。
  • 時系列データを季節成分、トレンド成分、残差成分に分解する関数 seriesDecomposeSTL を追加しました。 #57078 (Bhavna Jindal).
  • MaterializedMySQL 向けに MySQL Binlog クライアントを導入: binlog 接続 1 つで複数のデータベースを扱えるようになりました。 #57323 (Val Doroshchuk)。
  • Intel QuickAssist Technology (QAT) は、ハードウェアアクセラレーションされた圧縮および暗号化機能を提供します。ClickHouse に新しい圧縮コーデック ZSTD_QAT が追加され、zstd 圧縮に QAT を利用できるようになりました。このコーデックは Intel's QATlibInte'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)。
  • テーブルにアタッチできるマテリアライズドビューの数を制限する設定 max_materialized_views_size_for_table を追加。 #58068 (zhongyuankai).
  • clickhouse-format の改善点:INSERT クエリでの VALUES 句のサポート、コメントのサポート(出力するには --comments を使用)、長いクエリのみを複数行に整形するための --max_line_length オプションのサポート。#58246 (vdimir)。
  • clickhouse-localsystem.parts を含むすべての system テーブルをアタッチします。これにより #58312 が解決されます。#58359Alexey Milovidov)。
  • 関数 transform における Enum データ型サポートの追加。これにより #58241 がクローズされました。#58360Alexey Milovidov)。
  • テーブル system.database_engines を追加。#58390Bharat Nallan)。データベースエンジンをコードベース内で独立して登録できるようにする。#58365Bharat Nallan)。インタプリタを独立して登録できるようにする。#58443Bharat Nallan)。
  • SYSTEM SYNC REPLICA LIGHTWEIGHT クエリに FROM <Replicas> 修飾子を追加しました。FROM 修飾子を使用することで、指定されたソースレプリカ、および ZooKeeper に存在しないレプリカや source_replica が空のレプリカに対してのみ、フェッチおよび drop-range を待機するようになります。 #58393 (Jayme Bird).
  • 設定 update_insert_deduplication_token_in_dependent_materialized_views を追加しました。この設定により、依存するマテリアライズドビューへの挿入時に、テーブル識別子を用いて INSERT の重複排除トークンを更新できるようになりました。#59165 をクローズ。#59238 (Maksim Kita)。
  • 非同期メトリクスを更新する SYSTEM RELOAD ASYNCHRONOUS METRICS ステートメントを追加しました。主にテストや開発用途で役立ちます。 #53710 (Robert Schulze).

パフォーマンスの向上

  • 並列レプリカのためのコーディネーションが、より高い並列性とキャッシュ局所性を実現するように書き換えられました。数百のレプリカにおける線形スケーラビリティについてテスト済みです。さらに、順序どおりの読み取りもサポートされました。#57968Nikita Taranov)。
  • HTTP ベースの送信バッファリングを ClickHouse ネイティブのバッファに置き換え。インターフェイス向けにバイト数を計測するメトリクスを追加。#56064 (Yakov Olkhovskiy).
  • 分散クエリでは、uniqExact の大規模な集約状態が並列にマージされます。 #59009 (Nikita Taranov)。
  • MergeTree テーブル読み込み後のメモリ使用量を削減。#59290 (Anton Popov).
  • バーティカルマージ時のメモリ使用量を削減。 #59340 (Anton Popov).
  • Keeper の起動時に大量のメモリを消費してしまうケースを、さらに多くの状況で回避できるようにしました。 #58455 (Antonio Andelic).
  • Keeper の改善: 保存ノードのメモリ使用量を削減。 #59002 (Antonio Andelic).
  • よりキャッシュ効率に優れた最終実装。挙動変更に関する注意: 以前は、FINAL 修飾子を持ち、単一ストリーム(例: max_threads = 1)で読み取るクエリは、ORDER BY 句が明示的に指定されていなくてもソートされた出力を生成していました。enable_vertical_final = true の場合(デフォルトで有効)、これはもはや保証されません。#54366Duc Canh Le)。
  • たとえば S3 からの読み取りに使用される ReadBufferFromIStream において、不要なコピー処理を回避しました。#56961 (Nikita Taranov)。
  • 入力が Array(Map) / Array(Array(Num)) / Array(Array(String)) / Array(BigInt) / Array(Decimal) の場合に、arrayElement 関数を最適化しました。以前の実装では不要なメモリアロケーションが多く発生していました。この最適化により、とくに入力型が Array(Map) の場合に最大で約 6 倍の高速化が見込めます。 #56403 (李扬).
  • コンパクトパーツから複数のサブカラムを読み込む際、カラムを1回だけ読み取るようにした。 #57631 (Kruglov Pavel).
  • sum(column + constant) 関数の AST を書き換えます。これは Analyzer における最適化パスとして利用できます #57853Jiebin Sun)。
  • 関数 match の評価で、スキップインデックス ngrambf_v1 および tokenbf_v1 が利用されるようになりました。 #57882 (凌涛).
  • 関数 match の評価にインバーテッドインデックスが利用されるようになりました。 #58284 (凌涛)。
  • MergeTree の FINAL は、同じ non-L0 パーツ内にある行を比較しなくなりました。 #58142 (Duc Canh Le).
  • iota 呼び出し(配列を連番で埋める処理)の高速化。 #58271 (Raúl Marín)。
  • 数値以外の型に対する MIN/MAX の高速化。#58334 (Raúl Marín)。
  • フィルターの組み合わせ(マルチステージ PREWHERE など)を、BMI2/SSE イントリンシックを用いて最適化 #58800Zhiguo 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 上での MySQL / MariaDB 連携を有効化。これにより #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.server_settings において、未ドキュメントだった boolean 型カラム is_hot_reloadable を、NoYesIncreaseOnlyDecreaseOnly の値を取る Enum8 型カラム changeable_without_restart に置き換えました。また、このカラムについてもドキュメント化しました。 #58029 (skyoct).
  • クラスタ検出でユーザー名とパスワードの設定をサポートするようにし、#58063 を解決しました。#58123vdimir)。
  • ALTER TABLE ... PART でクエリパラメータをサポートしました。 #58297 (Azat Khuzhin).
  • Kafka テーブル向けのコンシューマーをオンデマンドで作成しつつ、最後の利用から一定期間(kafka_consumers_pool_ttl_ms)は保持するようにしました。これにより、system.kafka_consumers の統計に関する問題(Kafka テーブルから誰も読み取らない場合にコンシューム処理が行われず、その結果、メモリが解放されずにリークし続け、テーブルのデタッチが遅くなる問題)が修正されます。また、この PR により system.kafka_consumers の統計が再びデフォルトで有効になります。 #58310 (Azat Khuzhin).
  • sparkbar のエイリアスとして sparkBar を追加しました。 #58335 (凌涛)。
  • アップロード後に GCSComposeObject リクエストを送信しないようにする。 #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 辞書内のインデックス型をより細かく制御するための設定を追加しました。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)が追加され、サーバーのシャットダウン時に、実行中のすべてのバックアップおよびリストアの完了を待つか、ただちにキャンセルするかを制御できるようになりました。#58804Vitaly Baranov)。
  • AvroフォーマットでZSTDコーデックをサポートしました。#58735 をクローズ。 #58805 (flynn).
  • MySQL インターフェイスで net_write_timeout および net_read_timeout 設定がサポートされるようになりました。net_write_timeout は ClickHouse のネイティブ設定である send_timeout に、同様に net_read_timeoutreceive_timeout にマッピングされます。MySQL の sql_select_limit 設定が、ステートメント全体が大文字で記述されている場合にのみ設定可能だった問題を修正しました。#58835 (Serge Klochkov).
  • 同じ名前の dictionary と table を作成しようとして競合が発生した場合に出力される例外メッセージを改善しました。 #58841 (Yarik Briukhovetskyi).
  • カスタムディスク(SQL から作成したもの)の場合は、サーバー設定で filesystem_caches_path(すべてのファイルシステムキャッシュに共通のディレクトリプレフィックス)または custom_cached_disks_base_directory(カスタムディスクから作成されたファイルシステムキャッシュ専用の共通ディレクトリプレフィックス)のいずれかが指定されていることを確認してください。custom_cached_disks_base_directory はカスタムディスクに対して filesystem_caches_path よりも優先され、前者が存在しない場合にのみ filesystem_caches_path が使用されます。ファイルシステムキャッシュ設定の path は必ずそのディレクトリ配下である必要があり、そうでない場合はディスクの作成を防ぐために例外がスローされます。これは、古いバージョンで作成されたディスクが存在し、その後サーバーをアップグレードした場合には影響しません。この場合、サーバーが正常に起動できるように、例外はスローされません。custom_cached_disks_base_directory はデフォルトのサーバー設定に /var/lib/clickhouse/caches/ として追加されています。#57825 をクローズ。#58869Kseniia Sumarokova)。
  • MySQL インターフェイスが SHOW WARNINGS / SHOW COUNT(*) WARNINGS クエリに対応しましたが、返される結果は常に空集合です。#58929 (Serge 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 であることに注意してください。 #59170 (Azat Khuzhin).
  • 実験的な _block_number カラムにおいて、ALTERmerge を複雑に組み合わせた場合に論理エラーを引き起こす可能性があるバグを修正しました。#56202 を修正し、#58601 を置き換えます。#59295alesapin)。
  • Play UI が JSON 内で例外が返された場合にそれを正しく認識できるようになりました。#52853 への調整です。#59303Alexey Milovidov)。
  • /binary HTTP ハンドラーでは、クエリ文字列内で user と host を指定でき、必要に応じて password も指定できます。#59311Alexey Milovidov)。
  • 圧縮インメモリテーブルに対するバックアップをサポートします。この変更により #57893 がクローズされます。#59315Alexey Milovidov)。
  • BACKUP および RESTORE クエリで FORMAT 句がサポートされるようになりました。 #59338 (Vitaly Baranov).
  • 関数 concatWithSeparator は、これまで StringFixedString 型の引数のみをサポートしていましたが、任意の引数型をサポートするようになりました。たとえば、SELECT concatWithSeparator('.', 'number', 1)number.1 を返すようになりました。 #59341Robert Schulze)。

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

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

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

  • ネストされた LowCardinality 用の結合キーの変換を追加 #51550 (vdimir)。
  • flatten_nested=1 の場合、すべての Array(Tuple) ではなく、ネイティブな Nested 型のみをフラット化するようにしました #56132 (Kruglov Pavel)。
  • 挿入時にプロジェクションと aggregate_functions_null_for_empty 設定の組み合わせで発生するバグを修正しました。 #56944 (Amos Bird)。
  • 古くなったプロファイル UUID に起因する可能性のある例外を修正しました #57263 (Vasily Nemkov)。
  • StreamingFormatExecutor における読み取りバッファーの処理を修正 #57438Kruglov Pavel)。
  • ビューへのプッシュ時に、ターゲットテーブルが削除済みの MV を無視するようにしました #57520 (Kruglov Pavel)。
  • ALTER_METADATA と MERGE_PARTS 間で発生し得るレースコンディションを排除しました #57755 (Azat Khuzhin)。
  • ROLLUP を伴う GROUP BY での式順序に関するバグを修正 #57786 (Chen768959).
  • 廃止された「zero-copy」レプリケーション機能に対する修正: 壊れた detached part を含むレプリカを削除した際に失われていた blob の問題を修正 #58333Alexander Tokmakov)。
  • ユーザーが user_files_path 内のシンボリックリンクを利用できるようにしました #58447 (Duc Canh Le)。
  • graphite テーブルに agg 関数が存在しない場合に発生していたクラッシュを修正 #58453 (Duc Canh Le)。
  • マテリアライズドビューで複数回の読み取りを行えるようにするため、StorageKafka からの読み取りを遅延させました #58477 (János Benjamin Antal)。
  • パーツ同士が交差してしまうおかしなケースを修正 #58482 (Alexander Tokmakov)。
  • LIMIT のみのクエリで MergeTreePrefetchedReadPool を無効化 #58505 (Maksim Kita)。
  • 復元中も通常のデータベースを有効化 #58520 (Jihyuk Bok).
  • ORC/Parquet/... 向けの Apache Hive スレッドプールによる読み取り処理を修正。 #58537 (sunny).
  • system.backup_logbase_backup_name カラム内に含まれる認証情報をマスクする #58550Daniel Pozo Escalona)。
  • ミリ秒およびマイクロ秒単位の値の丸めに対応した toStartOfInterval #58557Yarik Briukhovetskyi)。
  • ConcurrentHashJoin での max_joined_block_rows の無効化 #58595 (vdimir).
  • 旧アナライザでの Nullable を使った JOIN を修正 #58596 (vdimir)。
  • makeDateTime64: 非定数の fraction 引数を許可するように変更 #58597 (Robert Schulze).
  • インラインフレームのシンボル化中に発生し得る NULL ポインタ逆参照を修正 #58607 (Azat Khuzhin)。
  • 再作成されたユーザーやロール切り替え時のクエリキャッシュエントリの分離性を改善 #58611 (Robert Schulze).
  • 投影の最適化時に不正になっていたパーティションキー解析を修正 #58638 (Amos Bird).
  • クエリキャッシュ: ユーザーごとのクォータの問題を修正 #58731 (Robert Schulze).
  • 並列ウィンドウ関数のストリームパーティショニングを修正 #58739 (Dmitry Novik)。
  • addBatchLookupTable8 内で例外スロー時に destroy が二重に呼び出される問題を修正 #58745 (Raúl Marín)。
  • シャットダウン中に Keeper がリクエストを処理しないようにする #58765 (Antonio Andelic)。
  • SlabsPolygonIndex::find におけるヌルポインタ逆参照を修正 #58771 (Yarik Briukhovetskyi)。
  • LowCardinality(Nullable) カラム用の JSONExtract 関数を修正 #58808 (vdimir)。
  • CREATE および DROP によって大量のテーブルを作成・削除する際に、メモリ使用量が想定外に増加してしまう問題の修正。 #58831 (Maksim Kita).
  • マテリアライズドビュー(MV)における複数 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).
  • 実験的な inverted index 向けの修正(本番環境では使用しないでください):inverted index に対する DROP INDEX が、永続化領域から関連するすべてのファイルを削除するようになりました #59040 (mochi)。
  • query_factories_info におけるデータレースを修正 #59049 (Kseniia Sumarokova)。
  • 「Too many redirects」エラーに対する再試行を無効化 #59099 (skyoct).
  • 未起動のデータベースのシャットダウン時に発生するデッドロックを修正 #59137 (Sergei Trifonov).
  • 修正: 分散クエリにおける LIMIT BYLIMIT の扱い #59153 (Igor Nikonov).
  • toString の NULL 許容タイムゾーン値で発生するクラッシュを修正 #59190 (Yarik Briukhovetskyi)。
  • 不正なファイルパスが指定された場合に Iceberg メタデータで発生する異常終了を修正 #59275 (Kruglov Pavel).
  • Rust ターゲットの select で使用するアーキテクチャ名を修正 #59307 (p1rattttt).
  • 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 年の変更履歴