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

目次

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。 プレゼンテーションビデオ

後方互換性を持たない変更

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

実験的機能

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

パフォーマンス向上

  • JOIN の並べ替え。クエリプランで内部 (build) テーブルとして使う JOIN 側を選択できるオプションが追加されました。これは 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 時に使用されるハッシュテーブルの数を減らすためのオプションを追加しました。これは、JOIN ON 条件の異なる OR 部分内の AND に共通部分がある場合に有効です。optimize_extract_common_expressions = 1 で有効にできます。#71537 (János Benjamin Antal).
  • SELECT で、索引付きカラムが LowCardinality(String) に CAST される場合でも索引を使用できるようになりました。これは、一部のテーブルでは String、別のテーブルでは LowCardinality(String) が使われている Merge テーブルに対してクエリを実行する場合に起こりえます。 #71598 (Yarik Briukhovetskyi).
  • 並列レプリカでローカルプランが有効な場合のクエリ実行では、ワーカー側で索引解析を行いません。コーディネーターは、自身側 (クエリのイニシエーター上) で行った索引解析に基づいて、各ワーカーが読み取る範囲を選択します。これにより、並列レプリカを使用する短いクエリでも、単一ノードのクエリと同程度の低レイテンシーで実行できます。 #72109 (Igor Nikonov).
  • オブジェクトストレージディスクに対する clickhouse disks remove --recursive のメモリ使用量が削減されました。 #67323 (Kirill).
  • #57631 の、compact パーツ内の単一カラムのサブカラム読み取りに関する最適化を復活させました。これは誤って削除されていました。#72285 (Pavel Kruglov) 。
  • コンパレータ内の呼び出しの脱仮想化により、LowCardinality(String) カラムのソートを高速化しました。#72337 (Alexander Gololobov) 。
  • 一部の単純なデータ型向けに、関数 argMin/argMax を最適化しました。 #72350 (alesapin).
  • memory tracker で共有ロックを使うようにロック処理を最適化し、CPU 数が非常に多いシステムでのロック競合を減らして性能を向上させました。#72375 (Jiebin Sun).
  • 新しい設定 use_async_executor_for_materialized_views を追加しました。materialized view のクエリ実行を非同期で、場合によってはマルチスレッドで行います。これにより、INSERT 時の view 処理を高速化できる可能性がありますが、メモリ消費量も増えます。#72497 (alesapin).
  • aggregate functions の state のデシリアライゼーション (データ型 AggregateFunction および distributed queries におけるもの) の性能が改善されました。フォーマット RowBinary のパース性能もわずかに向上しました。#72818 (Anton Popov) 。
  • 並列レプリカによる読み取りで、テーブルのキー順に範囲を分割し、読み取り時のメモリ使用量を削減します。 #72173 (JIaQi).
  • 挿入バッチ内のパーティションキーが単一の値である場合の MergeTree への挿入を高速化しました。 #72348 (alesapin).
  • バックアップからの復元時に、テーブル作成の並列実行に対応しました。このPR以前は、RESTORE コマンドでは常に1つのスレッドでテーブルを作成していたため、多数のテーブルを含むバックアップでは処理が遅くなる可能性がありました。#72427 (Vitaly Baranov).
  • mark cache が大きい場合、drop に時間がかかって目立つことがあります。この間 Context の mutex を保持すると、他の多くの処理が妨げられ、解放されるまで新しいクライアント connection すら確立できなくなります。しかも、この mutex を保持することは実際には同期のために必要なく、shared ptr を介して cache へのローカル参照を持っていれば十分です。#72749 (Alexander 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 クエリ設定で制御されます。#71406 (Azat Khuzhin).
  • 新しいキャンセルロジックを追加しました。CancellationChecker は、開始されたすべてのクエリのタイムアウトを確認し、タイムアウトに達するとクエリを停止します。#69880 (Yarik Briukhovetskyi).
  • Object から JSON への ALTER をサポートし、非推奨の Object 型から簡単に移行できるようになりました。#71784 (Pavel Kruglov) 。
  • Enum に存在しない未知の値も Set で許可するようにしました。#72662 を修正しました。#72686 (zhanglistar).
  • Enum データ型で文字列検索演算子 (例: LIKE) をサポートし、#72661 を実装しました。#72732 (zhanglistar).
  • 意味のないALTER USERクエリがいくつか通ってしまっていました。#71227 を修正しました。#71286 (Arthur Passos).
  • 分散 INSERT ... SELECT のプラン構築時に、prefer_locahost_replica が考慮されるようになりました。#72190 (filimonov).
  • Azure は Iceberg の仕様に違反し、Iceberg v1 を誤って Iceberg v2 として扱っていました。この問題はこちらで説明されています。Azure Iceberg Writer は、仕様に反する Iceberg metadata files (およびマニフェストファイル) を作成します。その結果、v1 の Iceberg フォーマットのメタデータを v2 リーダーで読み込もうとしており (Azure がそのような形式で書き込むため) 、さらに、対応するフィールドがマニフェストファイルに作成されていない場合のエラーも追加しました。#72277 (Daniil Ivanik).
  • これにより、クエリ内で UNION [ALL] を使用した CREATE MATERIALIZED VIEW が可能になりました。動作は JOIN を含むマテリアライズドビューの場合と同じで、insert のトリガーとして機能するのは SELECT 式内の最初の table のみで、他のすべての table は無視されます。ただし、最初の table への参照が複数ある場合 (たとえば、自身との UNION) 、それらはすべて挿入された block の data として処理されます。 #72347 (alesapin).
  • Dictionary のソースとして ClickHouse を使用する際のソースクエリ検証を追加しました。 #72548 (Alexey Katsman).
  • 設定の再読み込み時に ClickHouse が ZooKeeper の変更を認識できるようにしました。 #72593 (Azat Khuzhin).
  • キャッシュされたマークのメモリ使用量の見積もり精度を向上し、キャッシュ全体のメモリ使用量を削減しました。#72630 (Antonio Andelic) 。
  • 新しいStartupScriptsExecutionStateメトリクスを追加しました。このメトリクスは 3 つの値を取ります: 0 = 起動スクリプトがまだ完了していない、1 = 起動スクリプトが正常に実行された、2 = 起動スクリプトの実行に失敗した。このメトリクスが必要なのは、クラウドで起動スクリプトが正常に実行されているかどうかを把握する必要があるためです。特に、ベース構成のリリース後に重要です。 #72637 (Miсhael Stetsyuk).
  • 新しい MergeTreeIndexGranularityInternalArraysTotalSize メトリクスを system.metrics に追加しました。このメトリクスは、高い 影響を受けやすい大規模なデータセットを抱えるインスタンスを特定するために必要です
  • レプリケートテーブルの作成時に再試行を追加しました。#72682 (Vitaly Baranov) 。
  • 非アクティブなパーツの総バイト数をカウントするため、system.tablestotal_bytes_with_inactive を追加しました。#72690 (Kai Zhu) 。
  • system.settings_changes に MergeTree の設定を追加しました。#72694 (Raúl Marín) 。
  • notEmpty 関数で JSON 型をサポートしました。#72741 (Pavel Kruglov).
  • GCS S3 エラー AuthenticationRequired のパースに対応しました。#72753 (Vitaly Baranov) 。
  • ifNull および coalesce 関数で Dynamic 型をサポートしました。#72772 (Pavel Kruglov) 。
  • 関数 toFloat64/touInt32/etc. で 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 profile events を追加しました。#72842 (Vladimir Cherkasov) 。
  • MergeTree のソートキーおよびスキップ索引でサブカラムをサポートしました。 #72644 (Pavel Kruglov).

バグ修正 (公式安定版リリースでユーザーに影響する不具合)

  • MergeTree で発生する可能性がある交差するパーツを修正しました (オブジェクトストレージ上の操作が原因で、パーツをデタッチされたディレクトリに移動する処理が失敗した後に発生する可能性があります) 。#70476 (Azat Khuzhin) 。
  • テーブル名が長すぎる場合のエラー検出を修正しました。最大長を示す診断メッセージを追加しました。新しい関数 getMaxTableNameLengthForDatabase を追加しました。 #70810 (Yarik Briukhovetskyi).
  • clickhouse-library-bridge のクラッシュ後にゾンビプロセスが残ってしまう問題を修正しました (このプログラムは安全でないライブラリを実行するためのものです) 。#71301 (MikhailBurdukov).
  • plain_rewritable disk でディレクトリの作成に失敗した場合に、トランザクションのロールバック中に NoSuchKey error が発生する問題を修正しました。#71439 (Julia Kartseva) 。
  • Pretty JSON フォーマットでの Dynamic 値のシリアライゼーションを修正しました。#71923 (Pavel Kruglov).
  • File/S3/URL/HDFS/Azure エンジンの CREATEクエリに、推論されたフォーマット名を追加。従来は、サーバーが再起動されるたびにフォーマット名が推論されていたため、指定したデータファイルが削除されていると、サーバーの起動時にエラーが発生していました。#72108 (Pavel Kruglov).
  • 古いアナライザで、JOIN ON 式で UDF を使用した際に発生するバグを修正しました。#72179 (Raúl Marín).
  • StorageObjectStorage の軽微なバグをいくつか修正しました。use_hive_partitioning をデフォルトで有効にするようにしました。#72185 (Yarik Briukhovetskyi).
  • min_age_to_force_merge_on_partition_only で、すでに単一のパーツにマージ済みの同じパーティションに対して繰り返しマージを試みて処理が止まり、複数のパーツを持つパーティションがマージされない不具合を修正しました。#72209 (Christoph Wurm) 。
  • スパースなカラムの処理中に、まれに発生していた SimpleSquashingChunksTransform のクラッシュを修正しました。#72226 (Vladimir Cherkasov).
  • GraceHashJoin におけるデータ競合を修正しました。この問題により、JOIN の出力で一部の行が欠落する可能性がありました。#72233 (Nikita Taranov) 。
  • 実体化された _block_number カラムを使用する ALTER DELETE クエリを修正しました (設定 enable_block_number_column が有効な場合) 。 #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 を修正。#72397 (Konstantin Bogdanov).
  • BACKUP DATABASE db EXCEPT TABLES db.table クエリのパース時に発生していた不具合を修正しました。#72429 (Konstantin Bogdanov) 。
  • 空の Variant を作成できないようにしました。#72454 (Pavel Kruglov) 。
  • system.merges における result_part_path の不正なフォーマットを修正しました。#72567 (Konstantin Bogdanov) 。
  • 1 つの要素 ({file} など) を含むグロブのパースに関する不具合を修正しました。 #72572 (Konstantin Bogdanov).
  • ARRAY JOIN を含む分散クエリにおいて、フォロワーサーバー向けのクエリ生成を修正しました。#69276 を修正。#72608 (Dmitry Novik).
  • DateTime64 IN DateTime64 が何も返さない不具合を修正しました。#72640 (Yarik Briukhovetskyi).
  • flatten_nested=0 で作成されたテーブルを含む Replicated データベースに新しいレプリカを追加した際に発生していた、メタデータの不整合を修正しました。#72685 (Alexander Tokmakov) 。
  • Keeperの内部通信用の高度なSSL設定の不具合を修正しました。#72730 (Antonio Andelic) 。
  • S3Queue の順不同モードで、tracked_files_limit 設定が S3 ファイルの出現頻度より小さい場合に発生する “No such key” エラーを修正しました。 #72738 (Kseniia Sumarokova).
  • ユーザーがローカルに存在しない場合に、RemoteQueryExecutor で発生する例外を修正しました。 #72759 (Andrey Zvonov).
  • マテリアライズされた _block_number カラムを伴うミューテーションを修正しました (設定 enable_block_number_column が有効な場合) 。 #72854 (Anton Popov).
  • バックアップ内に空ファイルがある場合に、通常の書き換え可能なディスクでのバックアップ/復元が正しく動作するよう修正しました。#72858 (Kseniia Sumarokova).
  • DistributedAsyncInsertDirectoryQueue で insert のキャンセルが適切に行われるようにしました。 #72885 (Antonio Andelic).
  • スパース カラムへの不正なデータのパース時に発生していたクラッシュを修正しました (設定 enable_parsing_to_custom_serialization が有効な場合に発生する可能性があります) 。#72891 (Anton Popov).
  • バックアップの復元時に発生する可能性があるクラッシュを修正しました。 #72947 (Kseniia Sumarokova).
  • parallel_hash JOIN メソッドで、ON 句に不等式フィルターを含む複雑な条件があるクエリで発生する可能性があったバグを修正しました。#72993 (Nikita Taranov) 。
  • JSON のパース時にデフォルトのフォーマット設定を使用し、デシリアライズの不具合を防止します。#73043 (Pavel Kruglov).
  • 未対応のストレージでのトランザクションによりクラッシュする問題を修正しました。 #73045 (Raúl Marín).
  • メモリ追跡が過大に見積もられる可能性がある問題を修正しました (MemoryTrackingMemoryResident の差が増え続ける場合) 。#73081 (Azat Khuzhin).
  • Tuple のパース時に、重複した JSON キーをチェックするようになりました。従来は、これによりパース中に論理エラー Invalid number of rows in Chunk が発生する可能性がありました。#73082 (Pavel Kruglov) 。

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

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

ClickHouse リリース 24.11 (2024-11-26) 。プレゼンテーションビデオ

後方互換性を持たない変更

  • システムテーブル generate_seriesgenerateSeries を削除しました。これらは #59390 で誤って追加されていました。#71091 (Alexey Milovidov).
  • StorageExternalDistributed を削除しました。#70600 をクローズします。#71176 (flynn).
  • テーブルエンジン Kafka、NATS、RabbitMQ は、SOURCES 階層内でそれぞれ独自の grants によって管理されるようになりました。これらのエンジンタイプでテーブルを作成するデフォルト以外のデータベースユーザーには、grants を追加してください。#71250 (Christoph Wurm).
  • 実行前に、mutation クエリ全体 (subqueries を含む) をチェックするようになりました。これにより、無効なクエリを誤って実行して、有効な mutations を妨げる不要な mutations が蓄積するのを防ぎます。#71300 (Christoph Wurm).
  • ファイルシステムキャッシュ設定 skip_download_if_exceeds_query_cache の名前を filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit に変更しました。#71578 (Kseniia Sumarokova).
  • deltaSumTimestamp における EnumUInt128UInt256 argument のサポートを削除しました。また、deltaSumTimestamp の 2 番目の (“timestamp”) argument について、Int8UInt8Int16UInt16 のサポートも削除しました。#71790 (Alexey Milovidov).
  • Dictionary ストレージ、dictionary table function、または dictionary 自体に対する直接の SELECT を使用して dictionary から直接データを取得する場合、dictionary に対する SELECT 権限または dictGet 権限があれば十分になりました。これは、ACL バイパスを防ぐためのこれまでの取り組み (https://github.com/ClickHouse/ClickHouse/pull/57362 および https://github.com/ClickHouse/ClickHouse/pull/65359) との整合性を保つものです。また、後者の変更を後方互換にするものでもあります。#72051 (Nikita Mikhaylov).

実験的機能

  • allow_feature_tier を、すべての Experimental / ベータ機能を無効化するグローバルスイッチとして実装しました。 #71841 #71145 (Raúl Marín).
  • JSON subcolumn のファイル内で特殊文字がエスケープされていないことにより発生する可能性がある 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]ClusterdeltaLakeClusterhudiCluster の table function を追加しました。 #72045 (Mikhail Artemenko).
  • http_handlers (dynamic_query_handler/predefined_query_handler 用) で user/password を設定できるようにしました。 #70725 (Azat Khuzhin).
  • ORDER BY WITH FILL 演算子で staleness clause をサポートしました。 #71151 (Mikhail Artemenko).
  • 各 authentication method に個別の有効期限を設定できるようにし、user entity からは削除しました。 #70090 (Arthur Passos).
  • 新しい関数 parseDateTime64parseDateTime64OrNullparseDateTime64OrZero を追加しました。既存の parseDateTime 関数 (およびその派生) と比べて、これらは DateTime ではなく DateTime64 型の値を返します。 #71581 (kevinyhzou).

パフォーマンス向上

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

改善

  • ch queries.sql のように、ファイルを引数に指定して ClickHouse を使用できるようにしました。#71589 (Raúl Marín) 。
  • Verticalフォーマット (クエリの末尾を \G で終えた場合にも有効) で、以下のような Pretty フォーマットの機能が利用できるようになりました。たとえば、- 数値の3桁区切りを強調表示すること。 - 読みやすい数値の補足を表示すること。 #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) が追加されました。これにより、最も低い優先度のアクセスヘッダーを取得できるようになり、このヘッダーはほかの任意のソース (たとえば、テーブルのスキーマや named collection) からの access_key_id によって上書きされます。#71011 (MikhailBurdukov).
  • 定数配列と定数のキャプチャ引数を持つ高階関数は、定数を返すようになります。#58400 (Alexey Milovidov) 。
  • クエリプランのステップ名 (EXPLAIN PLAN json=1) とパイプラインのプロセッサ名 (EXPLAIN PIPELINE compact=0,graph=1) の末尾に、一意の ID が接尾辞として付与されるようになりました。これにより、プロセッサの Profiler 出力や OpenTelemetry traces を explain の出力と対応付けられます。#63518 (qhsong) 。
  • Azure Blob Storage への書き込み後にオブジェクトが存在するかどうかを確認するオプションが追加されました。この動作は設定 check_objects_after_upload で制御されます。 #64847 (Smita Kulkarni).
  • clickhouse-local で、デフォルトで Atomic database を使用するようにしました。#50647 の項目 1 と 5 に対処しています。#44817 をクローズしました。#68024 (Alexey Milovidov).
  • クライアントにエラーを通知するため、Exception は HTTPプロトコルを中断します。 #68800 (Sema Checherinda) 。
  • replica_dir を作成し、DDLWorker でレプリカをアクティブとしてマークすることで、distributed DDL queries を実行中のホストが報告されるようになりました。#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 の代わりに、利用可能であれば AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE を使用します。#71074 を修正します。#71269 (Konstantin 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 アプリケーションはエラー時にゼロを返しており、他のアプリケーションもエラー 256 (PARTITION_ALREADY_EXISTS) および 512 (SET_NON_GRANTED_ROLE) でゼロを返していました。#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 type のパースをわずかに改善: JSON path の現在の block に複数の型の値が含まれている場合、特別な best-effort 順序で型を試し、最適な型を選択するようにしました。#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 を修正しました。#71140 (Konstantin Bogdanov).

バグ修正 (公式安定版リリースでユーザーに影響する不具合)

  • ATTACH PART クエリ中に重複排除されたパーツが、attaching_ プレフィックス付きのまま残ることはなくなりました。 #65636 (Kirill).
  • IN 関数で DateTime64 の精度が失われる問題を修正しました。#67230 (Yarik Briukhovetskyi) 。
  • ORDER BY ... WITH FILLIGNORE/RESPECT NULLS を伴う関数を使用した際に発生する可能性のある論理エラーを修正し、#57609 をクローズしました。#68234 (Vladimir 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 engine で、ユーザー指定の header による Content-Type の上書きを可能にしました。#70859 (Artem Iurin) 。
  • StorageS3Queue のロジックエラー “/processed に永続ノードを作成できません。すでに存在します” を修正しました。#70984 (Kseniia Sumarokova) 。
  • 特定の状況で、名前付きセッションが閉じられず、いつまでも残り続けてしまう問題を修正しました。#70998 (Márcio Martins).
  • projection の論理削除における rebuild オプションで、_row_exists カラムが考慮されていなかった不具合を修正しました。 #71089 (Shichao Jin).
  • Oracle Linux UEK 6.10 で実行した際に発生する AT_* is out of range 問題を修正しました。 #71109 (Örjan Fors).
  • 予期しないレースコンディションにより system.query_metric_log の値が誤っていた問題を修正しました。#71124 (Pablo Marcos).
  • quantileExactWeightedInterpolated の集約関数名の不一致を修正しました。この不具合は https://github.com/ClickHouse/ClickHouse/pull/69619 で持ち込まれました。cc @Algunenano. #71168 (李扬).
  • Dynamic を使った関数比較で発生する bad_weak_ptr 例外を修正しました。 #71183 (Pavel Kruglov).
  • 読み取る 7z ファイルがローカルマシン上にあることを確認するようにしました。#71184 (Daniil Ivanik).
  • HTTP および非同期 INSERT 経由の Native format で、フォーマット設定が無視される不具合を修正しました。 #71193 (Pavel Kruglov) 。
  • use_query_cache = 1 を設定して実行する SELECT クエリで、system table の名前がリテラルとして含まれていても拒否されなくなりました。たとえば、SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true; が動作するようになりました。#71254 (Robert Schulze).
  • enable_filesystem_cache=1 が有効で、ストレージ構成内のディスクにキャッシュ構成がない場合にメモリ使用量が増加するバグを修正しました。#71261 (Kseniia Sumarokova) 。
  • Dynamic カラムから LowCardinality Dictionary をデシリアライズする際に発生する可能性のあるエラー “Cannot read all data” を修正しました。 #71299 (Pavel Kruglov).
  • クライアントでの並列出力フォーマットのクリーンアップが不完全だった問題を修正しました。 #71304 (Raúl Marín).
  • named collections に、不足していたアンエスケープ処理を追加しました。この修正がないと、clickhouse-server が起動できません。#71308 (MikhailBurdukov).
  • ネイティブプロトコル経由で空のブロックを含む非同期 INSERT の問題を修正しました。#71312 (Anton Popov).
  • 誤ったワイルドカード権限を付与する際のASTフォーマットの不整合を修正しました #71309#71332 (pufit).
  • std::terminate を回避するため、data parts のデストラクタに try/catch を追加。 #71364 (alesapin).
  • JSON 型ヒント内の疑わしい型および実験的な型のチェック。 #71369 (Pavel Kruglov).
  • Linux 以外の OS でも memory worker thread を起動するように修正 (#71051 を修正) 。#71384 (Alexandre Snarskii) 。
  • Variant カラムにおける「Chunk 内の行数が無効です」エラーを修正しました。#71388 (Pavel Kruglov).
  • 古い PostgreSQL バージョンで発生していた、カラム “attgenerated” が存在しないというエラーを修正しました。 #60651#71396 (0xMihalich).
  • サーバーログの過剰な出力を避けるため、認証の失敗は ERROR ではなく DEBUG レベルで記録されるようになりました。#71405 (Robert Schulze).
  • 不正な引数 (例: NULL) を渡した際に mongodb テーブル関数がクラッシュする問題を修正しました。#71426 (Vladimir Cherkasov) 。
  • optimize_rewrite_array_exists_to_has に起因するクラッシュを修正しました。 #71432 (Raúl Marín).
  • insert における設定 max_insert_delayed_streams_for_parallel_write の使用方法を修正しました。以前は正しく動作しておらず、その結果、複数のパーティションにデータを書き込む insert でメモリ使用量が増大する可能性がありました。#71474 (Anton Popov).
  • WHERE 条件に arrayJoin が見かけ上含まれる場合に発生する可能性があるエラー Argument for function must be constant (旧アナライザ) を修正しました。https://github.com/ClickHouse/ClickHouse/pull/65414 後のリグレッションです。#71476 (Nikolai Kochetov).
  • SortCursor でカラム数が 0 の場合にクラッシュしないよう修正しました (旧アナライザ) 。 #71494 (Raúl Marín).
  • 未初期化の ORC データが原因で発生していた Date32 の範囲外エラーを修正しました。詳細については、https://github.com/apache/incubator-gluten/issues/7823 を参照してください。 #71500 (李扬).
  • Dynamic 型および JSON 型の wide パーツにおけるカラムサイズの算出を修正しました。#71526 (Pavel Kruglov).
  • materialized view 内のクエリで、CTE と組み合わせて IN を使用した場合のアナライザの修正。#65598 をクローズ。#71538 (Maksim Kita).
  • 制約内で UDF を使用した際に発生するクラッシュを回避しました。#71541 (Raúl Marín) 。
  • bitShift関数では、範囲外の場合、エラーをスローする代わりに 0 またはデフォルトの文字を返すようにしました。#71580 (Pablo Marcos) 。
  • 特定のエンジンで materialized view を使用した際に発生するサーバークラッシュを修正しました。 #71593 (Pervakov Grigorii).
  • 定数配列へのエイリアスを含むネストされたデータ構造に対する Array join により、ヌルポインタの逆参照が発生していました。これにより #71677 がクローズされます。#71678 (Alexey Milovidov).
  • 空のタプルに対してALTERを実行した際に発生するLOGICAL_ERRORを修正しました。これにより #71647 が修正されます。#71679 (Amos Bird).
  • NOT IN 演算子の場合、パーティションカラムに対する述語内の定数セットを変換しないようにしました。#71695 (Eduard Karacharov).
  • docker 初期化スクリプトの失敗時ログメッセージを、よりわかりやすくなるよう修正しました。#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 をクローズしました。#71855 (Vladimir Cherkasov).
  • allow_experimental_join_condition を使用した際に発生する可能性のあるクラッシュを修正し、#71693 をクローズしました。 #71857 (Vladimir 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 をクローズしました。#71946 (Kseniia Sumarokova).
  • s3/s3Cluster 関数が不完全な結果を返したり、例外をスローしたりすることがある問題を修正しました。これは、s3 URI で glob パターン (pattern/* など) を使用し、かつキー pattern/ を持つ空のオブジェクトが存在する場合に発生していました (このようなオブジェクトは S3 Console によって自動的に作成されます) 。また、設定 s3_skip_empty_files のデフォルト値も false から true に変更されました。 #71947 (Nikita Taranov).
  • clickhouse-client の構文ハイライトで発生するクラッシュを修正しました。#71864 をクローズしました。#71949 (Nikolay Degterinsky) 。
  • 最初の引数が定数の場合に、ORDER BY に二項単調関数を含む MergeTree テーブルで発生する Illegal type エラーを修正しました。#71941#71966 (Nikolai 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 を並列レプリカで実行できるようになりました (右側の table の読み取りは分散されます) 。FULL JOIN はノード間で並列化できないため、ローカルで実行されます。#71162 (Igor Nikonov).
  • 制限されたシステムコールにより、Dockerコンテナー内の ClickHouse が stderr に “get_mempolicy: Operation not permitted” と出力していた問題を修正しました。 #70900 (filimonov).
  • ZooKeeper 内の metadata_version レコードは、attach スレッドではなく再起動スレッドで修正するようにしました。 #70297 (Miсhael Stetsyuk).
  • これは、サポートされておらず今後完全に削除される予定の”zero-copy”レプリケーションに対する修正です。zero-copy レプリケーションを使用する ReplicatedMergeTree で、そのブロブを使用しているノードがある場合は、ブロブを削除しないようにしました。#71186 (Antonio Andelic) 。
  • これは、サポートされておらず今後完全に削除される “zero-copy” レプリケーションに対する修正です。Keeper が利用できない場合に起こり得るデータ損失を防ぐため、パートを zero-copy disk に移動する前に zero-copy shared lock を取得するようにしました。#71845 (Aleksei Filatov) 。

ClickHouse リリース 24.10 (2024-10-31) 。プレゼンテーションビデオ

後方互換性を持たない変更

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

実験的機能

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

パフォーマンス向上

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

改善

  • CREATE TABLE AS は、PRIMARY KEYORDER BY などの句 (MergeTree テーブル) もコピーするようになりました。 #69739 (sakulali).
  • Keeper で 64 ビット XID をサポートするようになりました。use_xid_64 設定値で有効にできます。#69908 (Antonio Andelic) 。
  • Bool 設定のコマンドライン引数では、引数に値が指定されていない場合は true が設定されます (例: clickhouse-client --optimize_aggregation_in_order --query "SELECT 1") 。#70459 (davidtsuk) 。
  • 空き容量がほとんどないディスクへの挿入を防ぐため、ユーザーレベル設定 min_free_disk_bytes_to_perform_insert および min_free_disk_perform_to_throw_insert が追加されました。#69755 (Marco Vilas Boas) 。
  • 設定の埋め込みドキュメントは、Web サイト上のドキュメントよりもさらに詳細かつ完全なものになります。これは、Web サイトのドキュメントを常にソースコードから自動生成するようにするための最初の一歩です。これには長期的な意味があります: - すべての設定が確実に含まれる; - デフォルト値が廃止されたままになることがない; - このドキュメントを ClickHouse の各バージョンごとに生成できる; - このドキュメントは、インターネット接続がなくてもサーバー自身で表示できる。Web サイト上のドキュメントをソースコードから生成する。#70289 (Alexey Milovidov).
  • 関数 replace で空の needle を許可し、PostgreSQL と同じ挙動にしました。#69918 (zhanglistar) 。
  • 関数 replaceRegexp* で空の needle を使用できるようにしました。 #70053 (zhanglistar).
  • data/database_name/ directory 内のテーブル用シンボリックリンクは、デフォルトの disk 上の store/... directory ではなく、storage policy に応じてテーブルデータの実際の path を指すように作成されるようになりました。#61777 (Kirill).
  • JSON から Enum フィールドをパースする際、整数を表す文字列は対応する Enum 要素として解釈されます。これにより #65119 が解決されました。#66801 (scanhex12).
  • 空文字列に対して LEADING または TRAILING を指定した TRIM を no-op として許可しました。#67792 をクローズしました。#68455 (Peter 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"} のいずれかであり、かつ曖昧さが生じる可能性がある場合: カラム名、Dictionary の属性名。 - always: 識別子を常にクォートします。 #69448 (tuanpach).
  • アクセスエンティティ間の依存関係の復元を改善 #69563 (Vitaly Baranov).
  • clickhouse-client やその他の CLI アプリケーションを実行した際、server の過負荷によって起動が遅くなっている状態で、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 の span ログにクエリ設定も含まれるよう改善。 #70011 (sharathks118).
  • ラムダの結果型が想定外の場合に、高階 array functions に関する診断情報を追加しました。 #70093 (ttanay).
  • Keeper の改善: クラスター変更時のロックを削減。#70275 (Antonio Andelic) 。
  • SHOW GRANTS コマンドに WITH IMPLICIT および FINAL キーワードを追加しました。暗黙的な権限付与に関する軽微なバグを修正しました: #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) 。
  • CHECK TABLEPART 修飾子が、クライアントで誤ってフォーマットされていました。#70660 (Alexey Milovidov).
  • Parquetネイティブライターで、カラム索引とオフセット索引を書き込めるようになりました。 #70669 (LiuNeng).
  • joda syntaxで、マイクロ秒およびタイムゾーンを含むDateTime64のパースをサポート (“joda”は日付と時刻で広く使われているJavaライブラリで、“joda syntax”はそのライブラリの書式スタイルです) 。 #70737 (kevinyhzou).
  • cloud storage がバッチ削除をサポートしているかどうかを判定する方法を変更しました。#70786 (Vitaly Baranov) 。
  • nativeリーダーで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));. #70846 (Faizan Patel).
  • part log のすべてのエントリタイプに partition カラムを追加しました。以前は、一部のエントリでのみ設定されていました。これにより #70819 がクローズされます。#70848 (Alexey Milovidov) 。
  • マージの分析や可視化に役立つ MergeStart および MutateStart イベントを system.part_log に追加しました。 #70850 (Alexey Milovidov).
  • マージ元のパーツ数に関するプロファイルイベントを追加しました。これにより、本番環境で MergeTree のファンアウトを監視できるようになりました。 #70908 (Alexey Milovidov).
  • ファイルシステムキャッシュへのバックグラウンドダウンロードが再度有効になりました。#70929 (Nikita Taranov) 。
  • 専門用途専用の新しい merge selector アルゴリズム Trivial を追加しました。これは Simple merge selector よりも性能が劣ります。#70969 (Alexey Milovidov) 。
  • アトミックな CREATE OR REPLACE VIEW のサポート。 #70536 (tuanpach)
  • 1 つのイベントが複数の条件に一致する場合でも同じイベントを複数回カウントしないよう、集約関数 windowFunnelstrict_once モードを追加しました。#21835 をクローズ。#69738 (Vladimir Cherkasov).

バグ修正 (公式安定版リリースでユーザーに影響する不具合)

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

ClickHouse リリース 24.9 (2024-09-26) 。プレゼンテーションビデオ

後方互換性を持たない変更

  • a[b].c のような式が名前付きTupleでサポートされるようになり、さらに expr().name のように任意の式に対する名前付き添字もサポートされるようになりました。これは JSON の処理に便利です。これにより #54965 がクローズされます。以前のバージョンでは、expr().name 形式の式は tupleElement(expr(), name) として解析され、クエリアナライザは対応するTuple要素ではなく name というカラムを探していましたが、新しいバージョンでは tupleElement(expr(), 'name') に変更されました。以前のバージョンは多くの場合そもそも動作していませんでしたが、この変更によって非互換性が生じる非常にまれなケースは考えられます。たとえば、Tuple要素名をカラムまたはエイリアスに保存していて、その名前がTuple要素自体の名前と異なっていた場合です: SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a。このようなクエリを使っていた可能性はきわめて低いものの、それでもこの変更は後方互換性を損なう可能性があるものとして扱う必要があります。#68435 (Alexey Milovidov).
  • 設定 print_pretty_type_names を有効にすると、SHOW CREATE TABLE ステートメント、formatQuery 関数、および clickhouse-clientclickhouse-local の対話型モードで、Tuple データ型が Pretty 形式で出力されます。以前のバージョンでは、この設定は DESCRIBE クエリと toTypeName にのみ適用されていました。これにより #65753 がクローズされます。#68492 (Alexey Milovidov).
  • Replicated database で table を作成する際に UUID を明示的に指定することはできなくなりました。また、Replicated databases 内の *MergeTree table では、Keeper path とレプリカ名を明示的に指定することもできなくなりました。これにより新しい設定 database_replicated_allow_explicit_uuid が導入され、database_replicated_allow_replicated_engine_arguments の型が Bool から UInt64 に変更されます #66104 (Alexander Tokmakov).

新機能

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

実験的機能

  • input_format_try_infer_variants 設定を追加しました。これにより、カラム/配列要素に複数の候補となる型がある場合、テキストフォーマットのスキーマ推論時に Variant 型を推論できるようになります。 #63798 (Shaun Struwig).
  • JSON column type の内容をより適切に introspection するための aggregate functions distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes を追加しました。 #68463 (Kruglov Pavel).
  • consistent hash によって、並列レプリカ間で marks の分配単位を決定する新しいアルゴリズムを追加しました。パフォーマンス向上のため、読み取りパターンごとに選択される marks 数が異なります。 #68424 (Nikita Taranov).
  • これまで、並列レプリカの announcement 処理における part deduplication ロジックの計算量は O(n^2) で、多数の part (またはパーティション) を持つ table では無視できない時間がかかることがありました。この変更により、計算量は O(n*log(n)) になります。 #69596 (Alexander Gololobov).
  • リフレッシャブルmaterialized view の改善: テーブル全体を上書きする代わりに既存の table に行を追加する append モード (... REFRESH EVERY 1 MINUTE APPEND ...) 、再試行 (デフォルトでは無効で、クエリの SETTINGS セクションで設定) 、現在実行中の refresh を待機する SYSTEM WAIT VIEW <name> クエリ、その他の修正。 #58934 (Michael Kolupaev).
  • 新しい (実験的な) STATISTICS の type として min_max を追加しました。これは、数値カラムに対する範囲 predicate (例: x < 100) の推定をサポートします。 #67013 (JackyWoo).
  • Variant/Dynamic カラムに対する castOrDefault を改善し、内部の型がまったく変換できない場合でも動作するようにしました。 #67150 (Kruglov Pavel).
  • MaterializedPostgreSQL を通じて、カラムの一部のみをレプリケーションできるようになりました。#33748 をクローズします。 #69092 (Kruglov Kirill).

パフォーマンス改善

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

改善

  • CREATE TABLE AS で、PRIMARY KEY、ORDER BY、および同様の句もコピーされるようになりました。現時点では、MergeTree family のテーブルエンジンでのみサポートされています。#69076 (sakulali).
  • 小さなエンティティのパースに関連するコードベースの一部を堅牢化しました。次の (軽微な) バグが見つかり、修正されました: - DeltaLake テーブルが Bool でパーティション分割されている場合、パーティション値が常に false と解釈されていた; - ExternalDistributed テーブルが、指定されたアドレス内の1つの分片しか使用していなかった; max_threads 設定などの値が、auto(N) ではなく 'auto(N)' として出力されていた。 #52503 (Alexey Milovidov).
  • CPU 使用量の算定には、システム全体のメトリクスではなく、cgroup 固有のメトリクスを使用するようにしました。#62003 (Nikita Taranov) 。
  • リモート S3 ディスクの IO スケジューリングは、bandwidth_limit によるスロットリングの問題を解消するため、S3 リクエスト全体ではなく HTTP ソケットストリーム単位で行われるようになりました。#65182 (Sergei Trifonov).
  • 関数 upperUTF8lowerUTF8 は、これまでキリル文字しか大文字 / 小文字に変換できませんでした。この制限は解消され、任意の言語の文字を大文字 / 小文字に変換できるようになりました。例: SELECT upperUTF8('Süden')SÜDEN を返すようになりました。#65761 (李扬).
  • プロジェクションを含むテーブルで論理削除が発生する場合、これまでは、論理削除の実行時に例外を発生させる (デフォルト) か、プロジェクションを削除するかのいずれかを選択できましたが、新たに、論理削除をそのまま実行したうえで後からプロジェクションを再構築するという第3の選択肢が追加されました。#66169 (jsc0218).
  • 接続に使用する IP ファミリーを制限できるように、2 つのオプション (dns_allow_resolve_names_to_ipv4dns_allow_resolve_names_to_ipv6) が追加されました。#66895 (MikhailBurdukov).
  • clickhouse-client で Ctrl-Z を無視する設定 (ignore_shell_suspend) を可能にしました。 #67134 (Azat Khuzhin).
  • JSON出力フォーマットにおけるUTF-8の検証を改善しました。これにより、結果データに特定のバイト列が含まれる場合でも、有効なJSONが生成されます。#67938 (mwoenker) 。
  • マージとミューテーション向けのプロファイルイベントが追加され、内部状態をより詳しく把握できるようになりました。#68015 (Anton Popov).
  • ODBC: サーバー設定から http_max_tries を取得。#68128 (Rodolphe Dugé de Bernonville) 。
  • X.509 SubjectAltName 拡張機能でのユーザー識別にワイルドカード対応を追加しました。 #68236 (Marco Vilas Boas).
  • date time のスキーマ推論を改善しました。DateTime64 は、date time に小数部がある場合にのみ使用され、それ以外では通常の DateTime が使用されるようになりました。Date/DateTime の推論もより厳密になり、特に date_time_input_format='best_effort' の場合に、文字列から date time が誤って推論されることがある境界ケースを避けられるようになりました。#68382 (Kruglov Pavel).
  • Dictionaries 内の named collections の古いコードを削除し、DDL で作成した named collections を Dictionaries で使える新しいコードに置き換えました。#60936 および #36890 をクローズしました。#68412 (Kseniia Sumarokova).
  • 外部 HTTP 認証器で、既定で設定されている HTTP/1.0 の代わりに HTTP/1.1 を使用するようにしました。 #68456 (Aleksei Filatov).
  • スレッドプールのイントロスペクション向けの新しいメトリクス一式が追加され、スレッドプールのパフォーマンスと挙動をより深く把握できるようになりました。#68674 (filimonov).
  • フォーマット Values を使用する非同期 INSERT でクエリパラメータをサポート。 #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 connectionを確立できない場合、クエリはより早く失敗するようになります。 #69148 (Raúl Marín).
  • Database Factory を更新し、ユーザー定義のデータベースエンジンで引数、設定、テーブルのオーバーライドを指定できるようにしました (StorageFactory と同様) 。 #69201 (NikBarykin).
  • すべての external table engine と関数を Null エンジンに置き換える復元モード (restore_replace_external_engines_to_nullrestore_replace_external_table_functions_to_null 設定) は、テーブルに SETTINGS があると失敗していました。現在はこの場合、table definition から設定を削除するようになり、そのようなテーブルも復元できるようになりました。#69253 (Ilya Yatsishin) 。
  • ClickHouseイメージのエントリポイントで、CLICKHOUSE_PASSWORD が 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 table function での機密情報のマスキング。 #69611 (Vitaly Baranov).
  • 行数が減るマージに対して projection を再構築します。#62364 (cangyin).

バグ修正 (公式安定版リリースでユーザーに影響する不具合)

  • pg dbname に ”-” が含まれる場合に、実験的かつ未サポートの MaterializedPostgreSQL エンジンでテーブルを Attach する際の不具合を修正しました。 #62730 (takakawa).
  • 実験的で一切サポートされていない MaterializedPostgreSQL エンジンにおいて、adnum の並び順が壊れている場合に生成カラムで発生するエラーを修正しました #63161。実験的で一切サポートされていない MaterializedPostgreSQL において、テーブルに生成カラムがある場合、デフォルト値として nextval 式を持つ id カラムで発生するエラーを修正しました。[a-z1-9-] 以外の記号を含む publication の削除時に発生するエラーを修正しました。#67664 (Kruglov Kirill).
  • 左側テーブルの Nullable カラムをサポートするように Storage Join を改善し、#61247 をクローズしました。 #66926 (vdimir).
  • IN 演算子に Decimal() への変換が含まれている場合、並列レプリカ (クエリも分散する) でクエリ結果が誤る問題。これは新しいアナライザの導入によって入り込んだバグです。#67234 (Igor Nikonov).
  • alter modify order by によってメタデータの不整合が生じる問題を修正しました。#67436 (iceFireser) 。
  • 関数 fromModifiedJulianDay の上限値を修正しました。本来は 9999-12-31 であるべきところ、誤って 9999-01-01 に設定されていました。#67583 (PHO).
  • IN クエリで、索引がタプルの先頭にない場合の不具合を修正しました。#67626 (Yarik Briukhovetskyi).
  • RoleCache の有効期限の処理を修正しました。#67748 (Vitaly Baranov) 。
  • view への flush の遅延により発生していた、window view における block の欠落を修正しました。#67983 (Raúl Marín).
  • 誤った日付フォーマットが原因で発生していたMSanの問題を修正しました。 #68105 (JackyWoo).
  • ファイル内のデータ型が要求された型と大きく異なる場合に、Parquet のフィルタリングで発生していたクラッシュを修正しました (例: ... FROM file('a.parquet', Parquet, 'x String') と指定していても、ファイル内では x Int64 になっている場合) 。この修正がない場合は、回避策として input_format_parquet_filter_push_down = 0 を使用してください。#68131 (Michael Kolupaev).
  • #67091 で導入された lag/lead のクラッシュを修正しました。#68262 (lgbo).
  • クエリがキャンセルされた際のPostgresのクラッシュ問題の修正を試行。 #68288 (Kseniia Sumarokova).
  • https://github.com/ClickHouse/ClickHouse/pull/61984 の後も、schema_inference_make_columns_nullable=0 を指定していても、Parquet/Arrow フォーマットではカラムが Nullable として推論されることがありました。この変更は後方互換性がなく、ユーザーにも挙動の変化として認識されていました。この PR では、schema_inference_make_columns_nullable=0 が以前どおりに動作するよう修正し (Nullable カラムは推論されません) 、あわせてこの設定に新しい値 auto を導入しています。これにより、データに nullability の情報がある場合にのみ、カラムが Nullable になります。 #68298 (Kruglov Pavel).
  • #50868 を修正しました。分散クエリ内のネストされたサブクエリが返す小さな DateTime64 の定数値が誤って NULL に変換され、エラーや誤ったクエリ結果を招く可能性がありました。#68323 (Shankar).
  • クエリ SYSTEM SYNC REPLICA で同期レプリカモードが欠落していた問題を修正しました。#68326 (Duc Canh Le) 。
  • キー条件の不具合を修正しました。#68354 (Han Fei) 。
  • LDAP の外部ユーザーディレクトリで使用されているロールを削除または名前変更した際に発生するクラッシュを修正しました。#68355 (Andrey Zvonov) 。
  • system.view_refreshes の Progress カラムの値が 1 を超えてしまう問題を修正しました #68377#68378 (megao).
  • 正規表現フラグが正しく処理されるように修正。 #68389 (Han Fei).
  • PostgreSQLスタイルのキャスト演算子 (::) は、SQLスタイルの16進数リテラルや binary string リテラル (例: SELECT x'414243'::String) に対しても正しく動作します。これにより #68324 が修正されました。#68482 (Alexey Milovidov) 。
  • https://github.com/ClickHouse/ClickHouse/pull/68131 に対する軽微な修正。#68494 (Chang chen) 。
  • n が整数の場合の SAMPLE n に関する #68239 を修正しました。#68499 (Denis Hananein) 。
  • 2つの分布のサイズが等しくない場合に mann-whitney-utest で発生するバグを修正しました。#68556 (Han Fei) 。
  • 予期しない再起動後、covered-by-broken part の異常な処理により ReplicatedMergeTree のレプリケーションを開始できなくなる問題を修正しました。 #68584 (baolin).
  • 関数 sipHash64KeyedsipHash128Keyed、または sipHash128ReferenceKeyed を空の配列やタプルに適用したときに発生していた LOGICAL_ERROR を修正しました。 #68630 (Robert Schulze) 。
  • 複数のカラムに索引を付ける際、テキスト索引が誤ったカラムを除外してしまうことがありました。これは、異なるカラム間で row_id がリセットされていなかったためです。再現手順は tests/queries/0_stateless/03228_full_text_with_multi_col.sql にあります。この問題を修正しました。#68644 (siyuan).
  • Replicated テーブルの作成時に、replica_name 内の無効な文字 ‘\t’ および ‘\n’ によって LogEntry 内の ‘source replica’ が誤ってパースされる問題を修正しました。issue #68640 で言及されています。#68645 (Zhigao Hong).
  • 仮想カラム _table_database が分散テーブルで再び利用できるようになりました。これらはバージョン 24.3 までは利用可能でした。#68672 (Anton Popov).
  • Variant カラムの並べ替え処理中に発生する可能性がある Size of permutation (0) is less than required (...) エラーを修正しました。 #68681 (Kruglov Pavel).
  • 新しいJSONカラムで発生する可能性のあるエラー DB::Exception: Block structure mismatch in joined block stream: different columns: を修正しました。#68686 (Kruglov Pavel).
  • 関数 sipHash(64/128)Keyed で、Array をキーに持つ Map をハッシュ化する際の、マテリアライズ済み定数キーに関する問題を修正しました。#68731 (Salvatore Mesoraca).
  • ColumnsDescription::toString が、各カラムを同じ IAST::FormatState object を使ってフォーマットするようにしました。これにより、カラムメタデータが一貫した形式でディスクとZooKeeperに書き込まれるようになります。#68733 (Miсhael Stetsyuk).
  • grouping sets における集計データのマージを修正しました。#68744 (Nikolai Kochetov).
  • replicated merge tree を作成し、カラムを変更した後に modify statistics を実行した際に発生する論理エラーを修正しました。 #68820 (Han Fei).
  • アナライザで、サブクエリ由来の動的サブカラムの解決に関する不具合を修正しました。#68824 (Kruglov Pavel) 。
  • Delta Lake における複合型メタデータのパースを修正しました。#68739 をクローズしました。#68836 (Kseniia Sumarokova)。
  • 挿入後、テーブルへのフラッシュ前にテーブルのメタデータが (ALTER ADD/MODIFY COLUMNクエリによって) 変更された場合に、非同期挿入が正しく動作しない問題を修正しました。#68837 (Anton Popov).
  • 配列内に空の tuple を渡した際に予期しない例外が発生する問題を修正しました。これにより #68618 が修正されます。 #68848 (Amos Bird).
  • メタデータのみを扱う mutation コマンドのパースを修正しました。#68935 (János Benjamin Antal) 。
  • anyHeavy の state のマージ時に、誤った結果が生じる可能性がある問題を修正しました。#68950 (Raúl Marín) 。
  • 設定 optimize_functions_to_subcolumns が有効な場合のmaterialized viewへの書き込みの問題を修正しました。#68951 (Anton Popov) 。
  • const Dynamic カラムのメソッドではシリアライゼーション cache を使用しないようにしました。これにより、集計中に未初期化の値が使用されたり、レースコンディションが発生したりする可能性がありました。 #68953 (Kruglov Pavel).
  • JSON typeのパース時に、一部のケースでnullをデフォルト値として挿入すべき場合に発生していたパースエラーを修正しました。#68955 (Kruglov Pavel) 。
  • 一部の圧縮レスポンスで Content-Encoding が送信されない不具合を修正。 #64802. #68975 (Konstantin Bogdanov).
  • path の連結が誤って行われ、// が含まれてしまうケースがありましたが、path の正規化によってこの問題を解決しました。#69066 (Yarik Briukhovetskyi) 。
  • 空の非同期 INSERT 時に発生する論理エラーを修正しました。#69080 (Han Fei).
  • クエリのキャンセル時にclickhouse-clientで発生していた進捗表示のデータ競合を修正しました。#69081 (Sergei Trifonov) 。
  • 距離関数にコサイン距離を使用した場合に、ベクトル類似度索引 (現在はExperimental) が利用されない不具合を修正しました。#69090 (flynn).
  • この変更により、初回作成処理中にサーバー障害が発生した後、Replicated database を再度作成しようとするとエラーになる可能性がある問題が修正されました。 #69102 (Miсhael Stetsyuk).
  • input_format_csv_try_infer_numbers_from_strings = 1 の場合、文字列から bool 値を読み取ることは許可していないため、CSV では String から Bool 型を推論しないようにしました。 #69109 (Kruglov Pavel).
  • --multiquery が有効な場合にクライアント側で発生する explain ast insert クエリのパースエラーを修正しました。 #69123 (wxybear).
  • 並列レプリカを使用するクエリで、サブクエリ内のUNION句が正しく処理されず、LOGICAL_ERROR Duplicate announcement received for replica が発生していました。#69146 (Igor Nikonov).
  • s3Cluster における structure 引数の伝播の不具合を修正しました。以前は、s3Cluster でクエリをレプリカに送信する際に、カラムの DEFAULT 式が失われることがありました。#69147 (Kruglov Pavel).
  • 式から宛先型への変換時に、Values format のフォーマット設定を尊重する。 #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型でのFix uniqおよびGROUP BYの誤った結果を修正しました。 #69203 (Kruglov Pavel).
  • 非同期挿入における INFILE のフォーマット検出を修正しました。FORMAT 句でフォーマットが明示的に指定されていない場合は、INFILE ファイルの拡張子から検出できます。#69237 (Julia Kartseva).
  • この issue 以降、本番環境では、metadata_version ノードの値が 0 で、かつ対応するテーブルの metadata ノードのバージョンとも一致しないテーブルのレプリカがかなり存在していました。このため、そのようなレプリカでは alter クエリが失敗していました。#69274 (Miсhael Stetsyuk) 。
  • Fields に関する問題を回避するため、Dynamic 型を安全でない主キー型としてマーク。 #69311 (Kruglov Pavel).
  • アクセスエンティティの依存関係の復元処理を改善しました。 #69346 (Vitaly Baranov).
  • 挿入処理用の接続取得時に、すべての接続試行が失敗した場合に発生する未定義動作を修正しました。 #69390 (Pablo Marcos).
  • #69135 をクローズしました。cross join で結合済みデータの再利用を試みることはありますが、現時点の ClickHouse ではその状況は発生しません。そのため、reuseJoinedDatahave_compressed を残しておくほうが適切です。 #69404 (lgbo).
  • materialize() 関数で、パラメータがスパースカラムの場合にフルカラムを返すようにしました。 #69429 (Alexander Gololobov).
  • 関数 sqidDecode における LOGICAL_ERROR を修正しました (#69450) 。#69451 (Robert Schulze) 。
  • 24.6 における s3queue の問題、または Replicated データベースでの CREATEクエリに対する迅速な修正。 #69454 (Kseniia Sumarokova).
  • INSERT INTO ... SELECT または CREATE TABLE AS SELECT クエリで、まとめる処理によりメモリ消費量が過度に高くなるケースを修正しました。#69469 (Yarik Briukhovetskyi) 。
  • SHOW COLUMNS 文と SHOW INDEX 文は、テーブル名にドットが含まれている場合でも、正しく動作するようになりました。#69514 (Salvatore Mesoraca) 。
  • overflow mode != ‘throw’ のクエリで query cache を使用することは、現在禁止されています。これにより、切り捨てられた不正確なクエリ結果が query cache に保存されるおそれがある状況を防げます。 (issue #67476) 。#69549 (Robert Schulze) 。
  • prewhere への移動時に、条件の元の順序が保持されるようにしました。以前は順序が変わることがあり、順序が重要な場合にクエリが失敗する可能性がありました。#69560 (Kruglov Pavel).
  • ZNOAUTH エラー後の Keeper のマルチリクエスト前処理を修正しました。#69627 (Antonio Andelic) 。
  • 新しいレプリカの作成時に、DatabaseReplicated で WHERE 句付きの有効期限 (TTL) によって発生する可能性があった METADATA_MISMATCH を修正しました。#69736 (Nikolay Degterinsky) 。
  • StorageS3(Azure)Queue の設定 tracked_file_ttl_sec を修正しました。これまではキー tracked_file_ttl_sec で Keeper に書き込んでいましたが、読み込み時には tracked_files_ttl_sec として扱っており、これはタイプミスでした。#69742 (Kseniia Sumarokova).
  • gethyperrectangleforrowgroup で tryconvertfieldtotype を使うように修正しました。#69745 (Miсhael Stetsyuk) 。
  • “カラムがなく、かつアダプティブインデックス粒度もない prewhere を修正 (ほぼ何もない状態) ”’ を元に戻しました。 この差し戻しにより、古い CH リリース (おそらく 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 の論理エラーを修正しました。これは後方互換性のない変更です。クエリ内でそのテーブルが複数回使われている場合 (たとえば self-join) 、分散宛先テーブルに対して Buffer を使用するクエリが動作しなくなる可能性があります。#67015 (vdimir).
  • 以前のバージョンでは、ゼロに近い負の argument を指定して、ガンマ関数に基づくランダム分布の関数 (Chi-Squared、Student、Fisher など) を呼び出すと、計算に長時間かかるか、無限ループに陥ることがありました。新しいバージョンでは、これらの関数をゼロまたは負の argument で呼び出すと例外が発生します。これにより #67297 を解決します。#67326 (Alexey Milovidov).
  • システムテーブル text_log がデフォルトで enabled になりました。これは以前のバージョンと完全に互換性がありますが、ローカル disk の使用量がわずかに増えたことに気付く場合があります (この システムテーブル が使用する disk 領域はごくわずかです) 。#67428 (Alexey Milovidov).
  • 以前のバージョンでは、arrayWithConstant は非常に大きな Array を生成しようとすると低速になることがありました。新しいバージョンでは、1 つの Array あたり 1 GB に制限されています。これにより #32754 を解決します。#67741 (Alexey Milovidov).
  • REPLACE modifier のフォーマットを修正しました (括弧の省略を禁止) 。#67774 (Azat Khuzhin).
  • #68349 にバックポート: Dynamic 型を再実装しました。動的データ型の上限に達すると、新しい型は String に CAST されず、データ型をバイナリ encoded したバイナリ形式の特別なデータ構造に格納されるようになりました。これにより、これまでに Dynamic カラムに挿入されたどの型でも サブカラム として読み取れるようになりました。#68132 (Kruglov Pavel).

新機能

  • マージ時 (特定のエンジン向け) および OPTIMIZE DEDUPLICATE クエリにおけるプロジェクションの扱いを制御するための新しい MergeTree 設定 deduplicate_merge_projection_mode が追加されました。サポートされるオプションは、throw (プロジェクションが *MergeTree engine で完全にサポートされていない場合に例外をスロー) 、drop (プロジェクション自体を整合性を保ってマージできない場合、マージ中にプロジェクションを削除) 、rebuild (プロジェクションをゼロから再構築。高コストな処理) です。#66672 (jsc0218).
  • S3テーブルエンジンに _etag 仮想カラムを追加しました。#65312 を修正しました。#65386 (skyoct) 。
  • クエリキャッシュに、タグ付け (ネームスペース) の仕組みが追加されました。タグが異なる同じクエリは、クエリキャッシュでは別のものとして扱われます。例: SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def' は、クエリキャッシュ内に異なるエントリを作成するようになりました。#68235 (sakulali).
  • 左右両方のテーブルのカラムを含む不等号条件に対して、より多くの JOIN strictness (LEFT/RIGHT SEMI/ANTI/ANY JOIN) をサポートしました。たとえば t1.y < t2.y です (設定 allow_experimental_join_condition を参照) 。#64281 (lgbo).
  • FileURLS3AzureBlobStorageHDFS などの各種エンジンで Hive スタイルのパーティション化を解釈できるようになりました。Hive スタイルのパーティション化では、データをパーティション化されたサブディレクトリに整理するため、大規模なデータセットのクエリや管理を効率化できます。現時点では、適切な名前とデータを持つ仮想カラムが作成されるだけです。後続の PR では、適切なデータフィルタリング (パフォーマンス向上) が導入されます。#65997 (Yarik Briukhovetskyi).
  • Spark との互換性のために printf 関数を追加しました (既存の format 関数も利用できます) 。 #66257 (李扬).
  • テストに役立つよう、外部エンジンと external table_functions を 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 by または max 集約関数を使用した場合、rows_before_aggregation_at_least がクエリの対象となった行数を反映することがあります。 #66084 (morning-color).
  • メモリ使用量を削減するため、Join テーブルに対する OPTIMIZE クエリをサポートしました。#67883 (Duc Canh Le) 。
  • URL に &run=1 を追加すると、play でクエリをすぐに実行できるようになりました #66457 (Aleksandr Musorin).

実験的機能

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

パフォーマンス改善

  • 設定 optimize_functions_to_subcolumns はデフォルトで有効になりました。#68053 (Anton Popov).
  • plain_rewritable disk のディレクトリメタデータを、object storage 内の MergeTree データとは分離して __meta layout に保存するようにしました。あわせて、plain_rewritable disk をフラットなディレクトリ構造に移行しました。#65751 (Julia Kartseva).
  • すべての サブカラムs に必要なメモリを事前に確保することで、String/Array/Map/Variant/Dynamic types に対するカラムをまとめる処理 (INSERT クエリで発生) を改善しました。#67043 (Kruglov Pavel).
  • SYSTEM FLUSH LOGS を高速化し、シャットダウン時にログを flush するようにしました。#67472 (Sema Checherinda).
  • merges のスケジューリング処理にかかるオーバーヘッドを削減し、merges 全体のパフォーマンスを改善しました。#68016 (Anton Popov).
  • DROP DATABASE クエリでの tables の削除を高速化し、database_catalog_drop_table_concurrency のデフォルト値を 16 に引き上げました。#67228 (Nikita Mikhaylov).
  • ORC 書き込み時に array column に対して過剰な容量を割り当てないようにしました。Array カラムではパフォーマンスが 15% 向上します。#67879 (李扬).
  • non-replicated MergeTree の mutations を大幅に高速化しました #66911 #66909 (Alexey Milovidov).

改善点

  • 設定 allow_experimental_analyzer の名称が enable_analyzer に変更されました。古い名称はエイリアスとして維持されています。これは、アナライザがもはやベータではなく、完全に本番利用向けとなったことを意味します。#66438 (Nikita Mikhaylov) 。
  • date time のスキーマ推論を改善しました。DateTime64 は日時に小数部が含まれる場合にのみ使用され、それ以外では通常の DateTime が使用されるようになりました。Date/DateTime の推論は、特に date_time_input_format='best_effort' の場合に、コーナーケースで文字列から日時が推論されるのを避けるため、より厳密になりました。#68382 (Kruglov Pavel).
  • ClickHouse server が、新しい設定 max_keep_alive_requests をサポートするようになりました。server への keep-alive HTTP connection では、これは keep_alive_timeout と連動して動作します。つまり、アイドルタイムアウトがまだ期限切れでなくても、その connection 経由で処理されたリクエスト数がすでに max_keep_alive_requests を超えている場合、その connection は server によって閉じられます。#61793 (Nikita Taranov).
  • 高度なダッシュボードの各種改善。#67697 を修正。#63407 を修正。#51129 を修正。#61204 を修正。#67701 (Alexey Milovidov).
  • 分散テーブルの作成時には、REMOTE に対する権限は不要で、Distributed engine に対する権限があれば十分です。#65419 (jsc0218).
  • オーバーライドできるように、DockerイメージではKeeper用のログを明示的に渡さないようにしました。 #65564 (Azat Khuzhin).
  • BACKUP および RESTORE クエリ向けに use_same_password_for_base_backup 設定が導入され、パスワード保護されたアーカイブに対する差分バックアップの作成と、そこからの復元が可能になりました。#66214 (Samuele).
  • ATTACH クエリでは async_load_databases を無視するようにしました (従来は、テーブルのアタッチが完了する前に ATTACH が返る可能性がありました) 。 #66240 (Azat Khuzhin).
  • リソース不足により拒否された接続に関するログとメトリクスを追加しました。#66410 (Alexander Tokmakov) 。
  • MongoDB engineで UUID 型を適切にサポート。#66671 (Azat Khuzhin) 。
  • レプリケーションラグと復旧時間のメトリクスを追加。#66703 (Miсhael Stetsyuk).
  • DiskS3NoSuchKeyErrors メトリクスを追加。#66704 (Miсhael Stetsyuk) 。
  • COMMENT 句が、すべてのテーブルエンジンで機能するようになりました。 #66832 (Joe Lynch)。
  • 関数 mapFromArrays が第 1 引数として 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_zoneinput_format_orc_reader_timezone に改名し、ユーザーがリーダーのタイムゾーンを設定できるようにしました。 #67175 (kevinyhzou).
  • Socket is not connected エラーについて、接続直後に HTTP 接続がピアによってリセットされた場合のレベルを引き下げ、#34218 をクローズしました。#67177 (vdimir) 。
  • system.dashboards のダッシュボードを設定から読み込めるようにしました (設定すると、デフォルトのダッシュボードプリセットを上書きします) 。#67232 (Azat Khuzhin) 。
  • SQLのwindow functionは、従来はスネークケースが使われています。ClickHouse では camelCase を採用しているため、新たに別名 denseRank()percentRank() が追加されました。これらの新しい関数は、元の dense_rank() および percent_rank() 関数とまったく同じように呼び出せます。スネークケースと camelCase の両方の構文を引き続き使用できます。さらに、各関数に対する新しいテストも追加されました。これにより #67042 がクローズされました。 #67334 (Peter Nguyen).
  • .xml.yml.yaml 以外の場合は、設定ファイルのフォーマットを自動検出します。ファイルが < で始まっていれば XML、そうでなければ YAML と判断される可能性があります。これは、パイプ経由で設定ファイルを渡す場合に便利です: clickhouse-server --config-file <(echo "hello: world")#67391 (sakulali).
  • 関数 formatDateTime および formatDateTimeInJodaSyntax では、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 を返すようになりました (以前は Exception が発生していました) 。#67399 (Robert Schulze).
  • KeeperMap で、タイムアウトまたは接続切断によって発生した Keeper リクエストを自動的に再試行するようになりました。#67448 (Antonio Andelic) 。
  • Aarch64 Linux ビルドに -no-pie を追加し、ClickHouse の再起動後でもスタックトレースの適切な内部調査とシンボル化を可能にしました。#67916 (filimonov).
  • マージおよびミューテーションの内部診断を強化するため、profile events を追加しました。 #68015 (Anton Popov).
  • 非レプリケートのMergeTreeに関する不要なログを削除しました。#68238 (Daniil Ivanik).

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

  • 結合テストの flaky check で、テスト内の問題をさらに見つけて信頼性を高めるために、各テストケースを複数回実行するようにしました。同一環境で同じテストケースを繰り返し実行するために、pytest-repeat ライブラリを使用しています。これをパスするには、各テストケースの最後でテーブルやその他のエンティティをクリーンアップすることが重要です。必要なコンテナーは 1 回しか起動しないため、この繰り返し実行方式は pytest を複数回実行するより大幅に高速です。#66986 (Ilya Yatsishin).
  • ClickHouse で CLion を使えるようにしました。以前のバージョンでは、CLion はキー入力のたびに 1 分ほどフリーズしていました。これにより #66994 をクローズします。#66995 (Alexey Milovidov).
  • getauxval: 新しい Linux カーネルで ASLR エントロピーが高いことにより、sanitizer の再実行時にクラッシュする問題を回避しました。#67081 (Raúl Marín).
  • クライアントコードの一部を 1 つのファイルに切り出し、デバッグビルドでも可能な限り高いレベルの最適化を適用しました。これにより #65745 をクローズします。#67215 (Nikita Mikhaylov).

不具合修正

  • ExperimentalなVariantデータ型にのみ該当します。Variant + AggregateFunction型でクラッシュする問題を修正しました。#67122 (Kruglov Pavel) 。
  • connection が空の場合に DistributedAsyncInsert がクラッシュする問題を修正しました。 #67219 (Pablo Marcos).
  • tuple() 引数での uniq および uniqTheta のクラッシュを修正しました。#67303 をクローズします。#67306 (flynn).
  • #66026 を修正しました。ReplaceTableNodeToDummyVisitor で、未解決のテーブル関数の引数を走査しないようにしました。#67522 (Dmitry Novik).
  • JSONMergePatch 関数の潜在的なスタックオーバーフローを修正しました。以前の名前が誤っていたため、この関数名を jsonMergePatch から JSONMergePatch に変更しました。以前の名前も互換性のため引き続き使用できます。関数内のエラー診断も改善しました。これにより #67304 をクローズします。 #67756 (Alexey Milovidov).
  • 特別に細工されたクエリによってトリガーされ、hopEnd、hopStart、tumbleEnd、tumbleStart を介してサーバーをクラッシュさせる NULL ポインタ逆参照の不具合を修正しました。#68098 (Salvatore Mesoraca).
  • 一部のシステムテーブルで、サブクエリによるフィルタリング時に発生する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() を修正 (従来どおり初期ユーザーを保持) 。#66364 (Azat Khuzhin).
  • NULL を含む Array フィールドを Array(Variant) に変換する際に発生する可能性のある実行時エラーを修正しました。#66727 (Kruglov Pavel).
  • Context::getDDLWorker でまれに発生するデッドロックの修正。 #66843 (Alexander Gololobov).
  • 不完全な drop の後に KeeperMap テーブルを作成できない問題を修正しました。#66865 (Antonio Andelic).
  • s3_plain_rewritable ディスクへの復元中に、破損した part が原因で発生するエラーを修正しました。#66881 (Vitaly Baranov) 。
  • まれに、ディスク上に予期しないプロジェクションがあることで、ClickHouse がパーツを破損していると判断することがありました。現在は修正されています。#66898 (alesapin).
  • 論理エラー「Format doesn’t support schema inference」を引き起こす可能性があった、スキーマ推論における無効なフォーマット検出の不具合を修正しました。#66899 (Kruglov Pavel) 。
  • 並列レプリカでのクエリのキャンセル時に発生する可能性があるデッドロックを修正。 #66905 (Nikita Taranov).
  • database_replicated_allow_heavy_create が設定されている場合でも、create as select を禁止するようにしました。23.12 では無条件で禁止されていましたが、未リリースの 24.7 ではこの設定により誤って許可されていました。#66980 (vdimir).
  • numbers からの読み取り時に、max_rows_to_read 制限が設定されていると、誤って例外が発生することがありました。これにより #66992 がクローズされます。#66996 (Alexey Milovidov).
  • lagInFrame および leadInFrame ウィンドウ関数に適切な型変換を追加し、msan テストを修正しました。 #67091 (Yakov Olkhovskiy).
  • TRUNCATE DATABASE で、DROP DATABASE クエリであるかのようにレプリケーションが停止されてしまう不具合を修正しました。#67129 (Alexander Tokmakov) 。
  • clickhouse-local では、別個のクライアントコンテキストを使用するようになりました。#67133 (Vitaly Baranov) 。
  • Merge テーブルから、分片が 1 つしかない Distriburted テーブル経由で読み込むクエリで発生するエラー 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).
  • スキーマ cache における input_format_max_bytes_to_read_for_schema_inference の不適切な使用を修正しました。 #67157 (Kruglov Pavel) 。
  • 単一の Nullable キーによる group by の実行中に例外が発生した場合の count distinct におけるメモリリークを修正しました。#67171 (Jet He) 。
  • 最適化処理において、OUTER JOIN が INNER JOIN に変換されてしまう不具合を修正しました。これにより #67156 をクローズします。これにより #66447 をクローズします。この不具合は https://github.com/ClickHouse/ClickHouse/pull/62907 で導入されました。#67178 (Maksim Kita)。
  • エラー Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported を修正しました。この不具合は、optimize_rewrite_aggregate_function_with_if 最適化によって発生していました。#67112 を修正。#67229 (Nikolai Kochetov) 。
  • function IN の左辺に空のタプルを使用した場合に、クエリがハングする問題を修正しました。#67295 (Duc Canh Le).
  • 不明なフィールドをスキップする際にスタックオーバーフローを引き起こす、非常に深くネストした JSON データを作成できてしまう状態でした。これにより #67292 はクローズされます。 #67324 (Alexey Milovidov)。
  • 起動時に例外が発生した後、ReplicatedMergeTree テーブルをアタッチできない問題を修正しました。#67360 (Antonio Andelic).
  • Aggregator で thread group から誤ってデタッチしていたことが原因で発生していたセグメンテーションフォルトを修正しました。 #67385 (Antonio Andelic).
  • PK に非決定論的関数が指定されている場合の別のケースも修正しました。 #67395 (Nikolai Kochetov).
  • bloom_filter 索引で、(k=2)=(k=2)has([1,2,3], k) のようなやや特殊な条件を含むクエリが壊れる問題を修正しました。#67423 (Michael Kolupaev) 。
  • アーカイブでない場合に、:: を含むファイル名/URIを正しく解析する。 #67433 (Antonio Andelic).
  • WriteBuffer がキャンセルされた場合に、~WriteBufferFromS3 でのタスク待機を修正しました。#67459 (Kseniia Sumarokova).
  • RESTORE中に一時partディレクトリが削除されないよう保護しました。 #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 を修正: 新しいアナライザで、JOIN ON 句のタプル内に NULL を含む一部のクエリが誤った結果を返していました。 #67538 (vdimir).
  • エビクション不可の cache がいっぱいの場合に、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 <= read_until_position' を修正しました。#57508 をクローズしました。#67623 (Kseniia Sumarokova).
  • #62282 を修正しました。convertFieldToString() の呼び出しを削除し、データ型ごとのシリアライゼーションコードを追加しました。パラメーター値が、データ型のインスタンスを返す関数または式である場合、複数のデータ型でパラメーター化ビューの置換が正しく機能していませんでした。#67654 (Shankar)。
  • percent_rank のクラッシュを修正しました。percent_rank のデフォルトのフレームタイプを range unbounded preceding and unbounded following に変更しました。IWindowFunction のデフォルトのウィンドウフレームが考慮されるようになり、SQL でウィンドウフレームが定義されていないウィンドウ関数も、適切に異なる WindowTransfomers に配置できるようになりました。#67661 (lgbo) 。
  • UNION を含む SQL UDFs の再読み込みを修正しました。これまでは、サーバーを再起動すると UDF が無効になることがありました。#67665 (Antonio Andelic).
  • 実験的な Variant 型と有効化された設定 use_variant_as_common_type のもとで、if 関数で Tuples および Maps を使用した際に発生する可能性がある論理エラー “Unexpected return type from if” を修正しました。 #67687 (Kruglov Pavel).
  • Linuxカーネルのバグにより、クエリが TimerDescriptor::drain でハングすることがあります。この修正により #37686 をクローズします。#67702 (Alexey Milovidov) 。
  • RESTORE ON CLUSTER コマンドの補完を修正しました。#67720 (Vitaly Baranov) 。
  • 読み込み中に CANNOT_SCHEDULE_TASK が発生した場合に Dictionary がハングする問題を修正しました。#67751 (Azat Khuzhin) 。
  • c に bloom filter 索引がある場合でも、SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1 のようなクエリが正しく動作するようになりました。 #67781 (jsc0218) 。
  • キーを伴わない集約とフィルタを含む一部のクエリで、集約結果が誤る問題を修正し、#67419 をクローズしました。#67804 (vdimir).
  • ALTER ADD/MODIFY COLUMN において、実験的または問題のあるデータ型を検証。 #67911 (Kruglov Pavel).
  • 分散クエリでの定数畳み込み後に発生するDateTime64のパースを修正し、#66773 をクローズしました。 #67920 (vdimir).
  • 述語に非決定論的関数が含まれる場合に count() の結果が誤っていた問題を修正しました。#67922 (János Benjamin Antal) 。
  • 使用可能な CPU 数が制限されるコンテナ化環境において、スレッド数のソフト上限の最大値の計算を修正しました。#67963 (Robert Schulze) 。
  • 現在、disk 上に projection が存在せず、checksums.txt には存在する場合でも、ClickHouse はその part を破損しているとは見なしません。 #68003 (alesapin).
  • 新しいアナライザを使用するミューテーションで、未変更のパーツがスキップされない問題を修正しました。従来は、アナライザが有効な場合、predicate によればそのパーツがミューテーションの対象でなくても、パーツ内のデータがミューテーションによって書き換えられることがありました。 #68052 (Anton Popov).
  • OFFSET を使用するサブクエリでのソートを削除する誤った最適化を廃止しました。#67906 を修正しました。#68099 (Graham 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).
  • Metric KeeperOutstandingRequetsKeeperOutstandingRequests にリネームされました。#66206 (Robert Schulze).
  • system.functions テーブルから is_deterministic フィールドを削除しました。#66630 (Alexey Milovidov).
  • 関数 tuple は、クエリ内で名前付き Tuple を構築しようとするようになりました (enable_named_columns_in_function_tuple で制御) 。Tuple から名前を取り出すための関数 tupleNames を導入しました。#54881 (Amos Bird).
  • materialized view の重複排除の仕組みを変更しました。たとえば、次のような多くのケースを修正しました。- 宛先テーブル: データが 2 つ以上の block に分割され、それらの block が並列に挿入されると重複と見なされる。- MV の宛先テーブル: 集約の実行により、異なる入力データに対しても MV が同一データを生成することがあり、その結果、同一の block が重複排除される。- MV の宛先テーブル: 異なる MV から来た同一の block が重複排除される。#61601 (Sema Checherinda).
  • 関数 bitShiftLeft および bitShitfRight は、範囲外の shift 位置に対してエラーを返すようになりました #65838 (Pablo Marcos).

新機能

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

実験的機能

  • Variant データ型のバイナリシリアライゼーションを変更し、単一の 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 サブカラムを読み取る際の不具合を修正しました。従来は、Memory テーブル内の Dynamic 型の max_types パラメータを alter で変更すると、その後のサブカラム読み取りで誤った結果が返ることがありました。#66066 (Kruglov Pavel).
  • カスタムキーによる並列レプリカを使用する際の cluster_for_parallel_replicas のサポートを追加しました。これにより、MergeTree テーブルでカスタムキーを使った並列レプリカを利用できます。#65453 (Antonio Andelic).

パフォーマンス改善

  • int から string への変換アルゴリズムを、より高速なものに置き換えました (修正版 amdn/itoa から修正版 jeaiii/itoa へ) 。 #61661 (Raúl Marín).
  • join (parallel_hash アルゴリズム) で作成されるハッシュテーブルのサイズを収集して cache するようになりました。この情報は、後続のクエリ実行時にハッシュテーブルの領域を事前確保し、ハッシュテーブルのリサイズにかかる時間を削減するために使用されます。 #64553 (Nikita Taranov).
  • バッファリングを利用することで、ORDER BY 主キーと、高い選択性の条件を含む WHERE を持つクエリを最適化しました。これは設定 read_in_order_use_buffering (デフォルトで有効) で制御され、クエリのメモリ使用量が増加する可能性があります。 #64607 (Anton Popov).
  • plain_rewritable メタデータの読み込み性能を改善しました。 #65634 (Alexey Milovidov).
  • 古いパーツを読み込まないことで、読み取り専用 disk 上でテーブルを Attach する際のリソース使用量を削減しました。 #65635 (Alexey Milovidov).
  • Set 索引に対する minmax hyperrectangle をサポートしました。 #65676 (AntiTopQuark).
  • 総メモリ使用量を削減するため、古いパーツのプライマリインデックスをアンロードするようにしました。 #65852 (Anton Popov).
  • パターンが自明、つまりメタ文字、パターンクラス、フラグ、グループ化文字などを含まない場合、関数 replaceRegexpAllreplaceRegexpOne が大幅に高速化されました。 (Taiyang Li に感謝します。) #66185 (Robert Schulze).
  • S3 リクエスト: クエリの再試行時間を短縮し、backups の再試行回数を増やしました。クエリでは 8.5 分・100 回の再試行、バックアップ復元では 1.2 時間・1000 回の再試行となります。 #65232 (Sema Checherinda).
  • クエリプランの LIMIT 最適化をサポートしました。PostgreSQL storage と table function に対する LIMIT pushdown をサポートしました。 #65454 (Maksim Kita).
  • ZooKeeper のロードバランシングを改善しました。fallback_session_lifetime にかかわらず、最適なノードが利用可能になるまで現在の session は期限切れになりません。AZ 対応のバランシングもサポートしました。 #65570 (Alexander Tokmakov).
  • DatabaseCatalog で、最大 database_catalog_drop_table_concurrency 個の thread を使用してテーブルをより高速に drop できるようになりました。 #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).
  • materialized view における重複排除の動作を変更しました。修正されたケースは多数あり、たとえば次のようなものです。 - 宛先テーブル上: データが 2 個以上の block に分割された場合、それらの block が並列に挿入されると重複と見なされる。 - MV の宛先テーブル上: 同一の block が重複排除される。これは、aggregation の実行によって、異なる入力データに対しても MV が同一の結果データを生成することがよくあるために発生する。 - MV の宛先テーブル上: 異なる MV に由来する同一の block が重複排除される。 #61601 (Sema Checherinda).
  • パーティション化された Delta Lake データの読み取りをサポート。データではなくメタデータを読み取ることで Delta Lake のスキーマを推論します。#63201 (Kseniia Sumarokova).
  • コンポーザブルプロトコルのTLSレイヤーでは、certificateFileprivateKeyFile の各パラメータのみを受け付けていました。 https://clickhouse.com/docs/operations/settings/composable-protocols. #63985 (Anton Ivashkin).
  • WHERE 句の評価に主キーを使用する SELECT クエリの数を示すプロファイルイベント SelectQueriesWithPrimaryKeyUsage を追加しました。#64492 (0x01f).
  • StorageS3Queue 関連の修正と改善。s3queue_processing_threads_num のデフォルト値を、従来の 1 ではなく、サーバー上の物理 CPU コア数に応じて決定するようにしました。s3queue_loading_retries のデフォルト値を 10 に設定しました。system.s3queue の exception カラムに表示される曖昧な “Uncaught exception” を修正しました。MEMORY_LIMIT_EXCEEDED 例外では再試行回数を増やさないようにしました。ファイルが挿入されていないのにコミットされるのを防ぐため、ファイルのコミットを、テーブルへの挿入が完全に完了した後の段階に移しました。コミットと flush のタイミングをより適切に制御できるよう、設定 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).
  • パラメータ化ビュー関数で別名をサポート (新しいアナライザのみ) 。#65190 (Kseniia Sumarokova).
  • azureBlobStorage のログでアカウントキーをマスクするように更新しました。#65273 (SmitaRKulkarni).
  • フィルタ式が PARTITION BY 式の一部である場合の IN 述語に対するパーティションプルーニング。 #65335 (Eduard Karacharov).
  • arrayMin/arrayMax は、比較可能なすべてのデータ型に適用可能になりました。#65455 (pn).
  • cgroups v2 のメモリ使用量の計測を改善し、page cache が占める分を除外するようにしました。#65470 (Nikita Taranov) 。
  • EmbeddedRocksDB テーブルに挿入するために chunk をシリアライズする際、行ごとにフォーマット設定を作成しないようにしました。 #65474 (Duc Canh Le).
  • clickhouse-local のプロンプトを :) のみにしました。getFQDNOrHostName() は macOS では時間がかかりすぎるうえ、そもそも clickhouse-local のプロンプトにホスト名は不要です。#65510 (Konstantin Bogdanov) 。
  • 低スペックの仮想マシンで、per-CPUアリーナに関するjemallocのメッセージを表示しないようにしました。 #65532 (Alexey Milovidov).
  • デフォルトでファイルシステムキャッシュのバックグラウンドダウンロードを無効にしました。バックグラウンドダウンロードスレッドを使用すると、バッファはクエリコンテキスト内で確保される一方、メモリの解放はクエリコンテキスト外で行われるため、“Memory limit exceeded” が発生する可能性がある問題を修正したら、再度有効に戻します。さらに、バックグラウンドワーカーのダウンロード最大サイズを定義する個別の設定を追加する必要があります (現在は max_file_segment_size で制限されていますが、これは大きすぎる可能性があります) 。 #65534 (Kseniia Sumarokova).
  • 設定に新しいオプション <config_reload_interval_ms> を追加し、ClickHouse が設定を再読み込みする頻度を指定できるようにしました。#65545 (alesapin).
  • ClickHouseのデータ型向けのバイナリエンコーディングを実装し、その仕様をドキュメントに追加しました。これをDynamicのバイナリシリアライゼーションで使用し、設定によりRowBinaryWithNamesAndTypesおよびNativeフォーマットでも使用できるようにしました。#65546 (Kruglov Pavel).
  • サーバー設定 compiled_expression_cache_sizecompiled_expression_cache_elements_size が、system.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% に設定します。#65697 (Alexey Milovidov).
  • ファイルをClickHouseにバックアップするためのスクリプトを追加しました。#65699 (Alexey Milovidov) 。
  • クエリのキャンセルに対応した PostgreSQL ソース。 #65722 (Maksim Kita).
  • 分散クエリにおいて、allow_experimental_analyzer がイニシエーターによって制御されるようにしました。これにより、バージョンが混在するクラスターでの運用時の互換性と正しさが確保されます。#65777 (Nikita Mikhaylov) 。
  • Keeper で cgroup の CPU 制限が考慮されるようになりました。 #65819 (Antonio Andelic).
  • 空の引数でも concat 関数を使用できるようになりました :) select concat();#65887 (李扬).
  • clickhouse-local で named collections を制御可能にしました。#65973 (Alexey Milovidov) 。
  • Azure 関連のプロファイルイベントを改善。#65999 (alesapin) 。
  • 書き込み時のタイムゾーンに基づく ORC ファイルの読み取りをサポートしました。#66025 (kevinyhzou).
  • PostgreSQL への接続を制御するための設定を追加しました。設定 postgresql_connection_attempt_timeout は、接続 URL の connect_timeout パラメーターに渡す値を指定します。設定 postgresql_connection_pool_retries は、PostgreSQL エンドポイントへの接続確立を試みる再試行回数を指定します。 #66232 (Dmitry Novik) 。
  • system.processors_profile_log における input_wait_elapsed_us/elapsed_us の精度を向上しました。#66239 (Azat Khuzhin).
  • ファイルシステムキャッシュ向けのProfileEventsを改善しました。#66249 (zhukai).
  • レプリケートストレージでの named collection 管理クエリにおいて、ON CLUSTER 句を無視するための設定を追加しました。 #66288 (MikhailBurdukov).
  • 関数 generateSnowflakeID で、大規模なクラスターでの衝突を防ぐため、マシン ID をパラメータとして指定できるようになりました。#66374 (ZAWA_ll).
  • 対話型モードでの Ctrl+Z によるサスペンドを無効化しました。これはよくある落とし穴であり、ほとんどのユーザーにとって期待される動作ではありません。端末アプリケーションをバックグラウンドにサスペンドできることを歓迎するようなごく一部の筋金入りのパワーユーザーはいるのかもしれませんが、私はそういう人を知りません。 #66511 (Alexey Milovidov).
  • Dictionaries で主キーの型を検証するオプションを追加しました。このオプションがない場合、simple layout ではどのカラム型も暗黙的に UInt64 に変換されます。#66595 (MikhailBurdukov).

バグ修正 (公式安定版リリースでユーザーに影響する不具合)

  • CREATE/REPLACE/RENAME/EXCHANGE クエリの循環依存関係をチェックし、循環依存がある場合は例外を送出するようにしました。以前は、このような循環依存関係により、server の起動時にデッドロックが発生する可能性がありました。あわせて、依存関係の作成に関するいくつかの不具合も修正しました。#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) 。
  • clickhouse-client で Query was cancelled が 2 回表示される場合がありましたが、この問題は修正されました。#66005 (Nikita Mikhaylov) 。
  • MaterializedMySQL (サポート対象外の実験的機能) で、MySQLのNULLフィールドをClickHouseのNOT NULLフィールドにマップするTABLE OVERRIDEを使用した際に発生していたクラッシュを修正しました。#54649 (Filipp Ozinov) 。
  • PREWHERE 式がどのカラムも読み込まず、かつテーブルにアダプティブインデックス粒度がない場合 (非常に古いテーブル) に発生していた論理エラーを修正しました。 #59173 (Alexander Gololobov).
  • クエリのキャンセル時に発生するキャンセルバッファの不具合を修正しました。#64478 (Sema Checherinda).
  • メタデータからパーツのカラムを補完する不具合を修正 (columns.txt が存在しない場合) 。 #64757 (Azat Khuzhin).
  • ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY で発生するクラッシュを修正しました。#64957 (pufit) 。
  • AccessControl の破棄時に発生するクラッシュを修正: 明示的なシャットダウンを追加。 #64993 (Vitaly Baranov).
  • 関数 uniq* の引数に含まれる単射関数を再帰的に除去するようにしました。これは以前は正しく動作していましたが、新しいアナライザで機能しなくなっていました。#65140 (Duc Canh Le).
  • CTE を含むクエリで、予期しないプロジェクション名になる問題を修正しました。#65267 (wudidapaopao) 。
  • ダイレクトクエリまたは Dictionary table engine 経由で Dictionary にアクセスする場合、dictGet 権限が必要になりました。#65359 (Joe Lynch).
  • 増分バックアップにおけるユーザー固有のS3認証を修正。#65481 (Antonio Andelic) 。
  • read-in-order 最適化が有効な場合、FINAL を含むクエリでは non-intersecting-parts 最適化を無効化しました。これにより、クエリ結果が不正になる可能性がありました。回避策として、この修正がマージされるまで、do_not_merge_across_partitions_select_finalsplit_parts_ranges_into_intersecting_and_non_intersecting_final を無効にしてください。#65505 (Nikolai Kochetov).
  • リストバッチ内のすべてのファイルが除外された場合に、例外 Index out of bound for blob metadata が発生する問題を修正しました。#65523 (Kseniia Sumarokova) 。
  • プロジェクションの重複排除マージにおける NOT_FOUND_COLUMN_IN_BLOCK を修正しました。#65573 (Yakov Olkhovskiy) 。
  • MergeJoin の不具合を修正しました。必要な変換が行われていないにもかかわらず、スパースシリアライゼーション内のカラムが、そのネストされた型のカラムとして扱われる可能性がありました。#65632 (Nikita Taranov) 。
  • 互換性レベル ‘23.4’ が適切に適用されていなかった不具合を修正しました。#65737 (cw5121).
  • Nullable フィールドを含む odbc テーブルを修正しました。 #65738 (Rodolphe Dugé de Bernonville) 。
  • 致命的なエラー発生時に起こり得たTCPHandlerのデータ競合を修正しました。#65744 (Kseniia Sumarokova).
  • 関数 parseDateTime%F および %D プレースホルダー使用時に発生する不正な例外を修正しました。 #65768 (Antonio Andelic) 。
  • PostgreSQL から読み込むクエリでは、ClickHouse クエリが完了した時点で内部の PostgreSQL クエリをキャンセルするようにしました。これにより、従来は内部の PostgreSQL クエリが終了するまでキャンセルできなかった ClickHouse クエリをキャンセルできるようになります。#65771 (Maksim Kita) 。
  • 古いアナライザとdictGetOrDefaultを使用した際の短絡評価ロジックのバグを修正しました。 #65802 (jsc0218).
  • 有効期限 (TTL) を指定した EmbeddedRocksDB への書き込みで 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 serverプロトコルを使用したTLS接続で起こり得る問題を修正しました。 #65917 (Azat Khuzhin).
  • MySQLクライアントプロトコルのTLS接続で発生する可能性がある問題を修正しました。#65938 (Azat Khuzhin) 。
  • タイムアウトをゼロに設定した場合の SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE の処理を修正しました。#65941 (Azat Khuzhin) 。
  • 結果のスキーマが変わる可能性があるため、不足していた設定 input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples をスキーマ推論cacheに追加しました。これにより、これらの設定が変更された際にスキーマ推論の結果が不正になるのを防ぎます。 #65980 (Kruglov Pavel).
  • S3エンジンおよびS3テーブル関数のカラム _size は、アーカイブ自体ではなく、アーカイブ内のファイルのサイズを表します。#65993 (Daniil Ivanik) 。
  • アナライザでの動的サブカラムの解決を修正し、動的サブカラムの読み取り時にカラム全体を読み込まないようにしました。#66004 (Kruglov Pavel).
  • replace オーバーライドを伴う from&#95;env の設定マージを修正しました。#66034 (Azat Khuzhin) 。
  • シャットダウン中に GRPCServer がハングする可能性がある不具合を修正しました。 #66061 (Vitaly Baranov).
  • 関数 has で、非定数の LowCardinality 引数を伴ういくつかのケースを修正しました。#66088 (Anton Popov) 。
  • groupArrayIntersect の修正。merge() 関数での動作に不具合がありました。あわせて、数値データおよび一般データに対する deserialise() の動作も修正しました。#66103 (Yarik Briukhovetskyi).
  • unbin/unhex の実装におけるバッファオーバーフローのバグを修正しました。#66106 (Nikita Taranov) 。
  • #64760 で導入された merge-filters 最適化を無効化しました。この最適化で 2 つのフィルタ式がマージされ、短絡評価が適用されない場合、例外が発生する可能性があります。#66126 (Nikolai Kochetov).
  • 負の block size でエンコードされた配列を含む Avro ファイルをserverがparseできずに失敗していた問題を修正しました。これは現在、Avro 仕様で許可されています。#66130 (Serge Klochkov).
  • ZooKeeper clientのバグを修正しました。ZooKeeperからハードウェアエラーを受信した後、セッションが使用不能な状態のままになってしまうことがありました。たとえば、これはClickHouse Keeperの”ソフトメモリ制限”が原因で発生する可能性があります。 #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 などのコンテナー内でサーバーが動作している場合に、ClickHouse server が cgroups v2 で指定された使用可能な CPU コアの最大数を正しく検出できるよう修正しました。具体的には、コンテナーではプロセスが名前のない空の root cgroup で実行されることがよくあります。この場合、ClickHouse は cgroups v2 で設定された CPU 制限を無視していました。#66237 (filimonov).
  • 制約内で IN を含むサブクエリを使用した際に発生する Not-ready set エラーを修正しました。#66261 (Nikolai Kochetov) 。
  • S3 または AzureBlobStorage へのコピー時のエラー報告を修正しました。#66295 (Vitaly Baranov).
  • watchdog が、リンク解除された (ローテーション済みの) ログファイルのディスクリプタを保持し続けないようにしました。#66334 (Aleksei Filatov) 。
  • logicalexpressionoptimizerpass が定数の論理型を失ってしまう不具合を修正しました。#66344 (pn).
  • 新しいアナライザでgroup_by_use_nulls=trueを使用した際に発生するColumn identifier is already registeredエラーを修正しました。#66400 (Nikolai Kochetov).
  • 過度に積極的な filter pushdown により、外部 table engine (PostgreSQL など) に対して join と filter を行う queries で誤った結果が返される可能性があった問題を修正しました。今後は、external table との outer join の場合、where 句の conditions は外部 database に送信されません。#66402 (vdimir).
  • cross join で不足していたカラムの実体化を追加しました。#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).
  • ローカルストレージ内の named collections の削除に関する不具合を修正しました。#66599 (János Benjamin Antal).
  • ColumnTuple::insertManyFromcolumn_length が更新されない問題を修正。 #66626 (lgbo).
  • (column IS NULL). を含むクエリで発生する Unknown identifier および Column is not under aggregate function エラーを修正しました。このバグは、アナライザを無効化した場合に限り #65088 によって引き起こされていました。#66654 (Nikolai 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).
  • indexHint 関数に関する、fuzzer で見つかった不具合を修正しました。#66286 (Anton Popov) 。
  • ‘create table b empty as a’ の AST のフォーマットを修正しました。#64951 (Michael Kolupaev) 。

ClickHouse リリース 24.6 (2024-07-01) 。プレゼンテーションビデオ

後方互換性を持たない変更

  • デフォルトで database と table の非同期ロードが有効になりました。config.xml の async_load_databases を参照してください。この変更自体は完全に互換性がありますが、動作の違いが生じる可能性があります。以前のバージョンと同様に async_load_databases が false の場合、すべての table がロードされるまで server は接続を受け付けません。新しいバージョンと同様に async_load_databases が true の場合、すべての table がロードされる前でも server は接続を受け付けることができます。まだロードされていない table に対してクエリが実行されると、その table の loading が完了するまで待機し、かなり時間がかかることがあります。これは、load balancer 配下の大規模な分散システムの一部として動作している server の挙動に影響する可能性があります。前者では、load balancer は接続拒否を受け取り、すばやく別の server に failover できます。後者では、load balancer はまだ table をロード中の server に接続できてしまい、クエリの latency が高くなります。さらに、待機中のクエリが多数たまると、それらが同時に processing を開始した際に「thundering herd」問題を引き起こす可能性があります。こうした違いが問題になるのは、高負荷の分散 backend に限られます。この問題を避けるには、async_load_databases の値を false に設定してください。#57695 (Alexey Milovidov).
  • MergeTree table では、setting replace_long_file_name_to_hash がデフォルトで enabled になりました。#64457 (Anton Popov). この setting は完全に互換性があるため、upgrade 時に必要な actions はありません。新しい data フォーマットは 23.9 以降のすべての version でサポートされています。この setting を有効にすると、23.8 以前の version には downgrade できなくなります。
  • 一部の無効なクエリは、より早い段階のパース時に失敗するようになります。注: 文字列リテラルなしでインライン KQL 式 (experimental な Kusto 言語) を kql table function に渡した場合のサポートを無効にしました。たとえば kql('garbage | trash')kql($$garbage | trash$$) ではなく、kql(garbage | trash) とした場合です。この機能は意図せず導入されたものであり、本来存在すべきではありません。#61500 (Alexey Milovidov).
  • storage S3QueueOrdered モードにおける並列 processing を見直しました。この PR は、s3queue_processing_threads_num または s3queue_total_shards_num setting を使用していた場合、Ordered モードでは後方互換性がありません。setting s3queue_total_shards_num は削除されました。以前は s3queue_allow_experimental_sharded_mode の下でのみ使用可能でしたが、これは現在非推奨です。新しい設定として s3queue_buckets が追加されました。#64349 (Kseniia Sumarokova).
  • 新しい関数 snowflakeIDToDateTimesnowflakeIDToDateTime64dateTimeToSnowflakeIDdateTime64ToSnowflakeID が追加されました。既存の関数 snowflakeToDateTimesnowflakeToDateTime64dateTimeToSnowflakedateTime64ToSnowflake とは異なり、新しい関数は generateSnowflakeID と互換性があります。つまり、generateSnowflakeID によって生成された snowflake ID を受け取り、generateSnowflakeID と同じ型 (すなわち UInt64) の snowflake ID を生成します。さらに、新しい関数は generateSnowflakeID と同様に、デフォルトで UNIX epoch (つまり 1970-01-01) を使用します。必要に応じて、別の epoch、たとえば Twitter/X の epoch である 2010-11-04 (つまり UNIX epoch から 1288834974657 ミリ秒) を渡すこともできます。古い conversion functions は非推奨となり、移行期間後に削除されます。引き続き使用する場合は、setting allow_deprecated_snowflake_conversion_functions を有効にしてください。#64948 (Robert Schulze).

新機能

  • ClickHouse Keeper に named collections を保存できるようになりました。#64574 (Kseniia Sumarokova) 。
  • 空のタプルに対応しました。#55061 (Amos Bird).
  • ヒルベルト曲線のエンコード/デコード関数を追加しました。#60156 (Artem Mustafin) 。
  • hilbertEncode に対する索引解析のサポートを追加しました。 #64662 (Artem Mustafin) 。
  • 関数 readWKTLineString を使用して、WKT フォーマットの LINESTRING ジオメトリを読み取る機能が追加されました。#62519 (Nikita Mikhaylov) 。
  • 別のディスク上のパーツをアタッチできるようになりました。 #63087 (Unalian).
  • TwitterスタイルのSnowflake IDを生成する新しいSQL関数 generateSnowflakeID を追加しました。#63577 (Danila Puzov) 。
  • マージ、ミューテーション、その他のワークロード間でのリソースの利用と共有を制御するための merge_workload および mutation_workload 設定を追加しました。#64061 (Sergei Trifonov) 。
  • = 演算子を使用した IPv4 型と IPv6 型の比較をサポートしました。#64292 (Francisco J. Jurado Moreno) 。
  • 二項数学関数 (pow、atan2、max2、min2、hypot) が Decimal 型の引数をサポートするようになりました。#64582 (Mikhail Gorshkov) 。
  • SQL関数parseReadableSize (OrNullおよびOrZeroのVariantを含む) を追加しました。 #64742 (Francisco J. Jurado Moreno).
  • CREATE クエリでデータベースまたはテーブルの数を制限するためのサーバー設定 max_table_num_to_throwmax_database_num_to_throw を追加しました。#64781 (Xu Jia) 。
  • file系ストレージ (s3/file/hdfs/url/azureBlobStorage) に _time 仮想カラムを追加しました。#64947 (Ilya Golshtein) 。
  • 新しい関数 base64URLEncodebase64URLDecodetryBase64URLDecode を追加しました。#64991 (Mikhail Gorshkov) 。
  • 2 つの UTF8 文字列間の編集距離を計算する新しい関数 editDistanceUTF8 を追加しました。#65269 (LiuNeng) 。
  • カスタムHTTPハンドラーでカスタムレスポンスヘッダーをサポートする http_response_headers 設定を追加しました。#63562 (Grigorii) 。
  • クエリ結果を無限ループで返せるようにする新しいテーブル関数 loop が追加されました。#63452 (Sariel)。これはテストに便利です。
  • system.query_log に、used_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 データベースに「レプリカグループ」が設定されている場合、すべてのグループのレプリカを含むクラスターを自動的に作成します。#64312 (Alexander Tokmakov).
  • 動的な分片を使用する並列レプリカで範囲フィルターを使用する際に、クエリの並列化方法を制御するための設定 parallel_replicas_custom_key_range_lowerparallel_replicas_custom_key_range_upper を追加しました。#64604 (josh-hildred).

パフォーマンス改善

  • PRIMARY KEY で定められた順序を保ったまま、サイズを最適化するために insert 時に行を並べ替えられるようになりました。これは設定 optimize_row_order (デフォルトではオフ) で制御されます。#63578 (Igor Markelov) 。
  • Parquet バイナリを ClickHouse のカラムへ直接読み込めるネイティブな Parquet リーダーを追加しました。これは設定 input_format_parquet_use_native_reader で制御されます (デフォルトでは無効) 。#60361 (ZhiHong Zhang) 。
  • クエリのフィルタ条件で MergeTree テーブルの正確な範囲を選択できる場合に、partial trivial count 最適化をサポートしました。 #60463 (Amos Bird).
  • 単一の transform に複数スレッドの chunk を集約することで、マルチスレッド INSERT の最大メモリ使用量を削減しました。 #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) 。
  • vertical merge中のリモートファイルシステム上のデータのプリフェッチを有効にしました。これにより、データがリモートファイルシステムに保存されているテーブルでのvertical mergeのレイテンシが改善されます。 #64314 (Anton Popov).
  • ColumnSparse::filterisDefault への冗長な呼び出しを減らし、パフォーマンスを向上。 #64426 (Jiebin Sun).
  • 複数の非同期 getChildren リクエストを実行することで、keeper-client の find_super_nodes および find_big_family コマンドを高速化しました。#64628 (Alexander Gololobov) 。
  • 関数 least/greatest における Nullable 数値型の引数を改善しました。 #64668 (KevinyhZou).
  • クエリプランにおいて、連続する 2 つのフィルタリングステップを統合できるようにしました。これにより、フィルタ条件を親ステップからプッシュダウンできる場合、filter-push-down 最適化が向上します。 #64760 (Nikolai Kochetov).
  • vertical final 実装の問題のある最適化を削除し、vertical final アルゴリズムをデフォルトで再び有効にしました。 #64783 (Duc Canh Le).
  • フィルタ式からALIASノードを削除しました。これにより、PREWHERE を含むクエリ (新しいアナライザ使用時) のパフォーマンスがわずかに改善されます。 #64793 (Nikolai Kochetov).
  • OpenSSL のセッションキャッシュを再度有効化。 #65111 (Robert Schulze).
  • INSERT 時のスキップ索引および統計情報のマテリアライズを無効にする設定 (materialize_skip_indexes_on_insertmaterialize_statistics_on_insert) が追加されました。#64391 (Anton Popov).
  • 割り当てられたメモリサイズを基に行グループのサイズを計算し、シングルスレッドモードでの Parquet writer のピークメモリを削減しました。#64424 (LiuNeng) 。
  • スパースカラムのイテレータを改善し、size の呼び出し回数を削減しました。#64497 (Jiebin Sun) 。
  • Azure blob storage へのバックアップでサーバー側コピーを使用するよう、条件を修正しました。#64518 (SmitaRKulkarni) 。
  • 多数のスキップ索引を持つテーブルにおける垂直マージのメモリ使用量を最適化しました。 #64580 (Anton Popov).

改善

  • システムテーブルに対して実行したSHOW CREATE TABLEで、各テーブルに固有の非常に便利なコメントが表示されるようになりました。このコメントには、そのテーブルがなぜ必要なのかが説明されています。#63788 (Nikita Mikhaylov).
  • 関数 round(), roundBankers(), floor(), ceil()trunc() の第2引数 (scale) に非定数を指定できるようになりました。#64798 (Mikhail Gorshkov) 。
  • 新しいdiskを追加した際に、Distributedテーブルのstorage policyをホットリロードできるようになりました。#58285 (Duc Canh Le) 。
  • 過負荷状態のサービスでスレッドをスケジュールする際に、MergeTree の索引解析中に起こり得るデッドロックを回避します。 #59427 (Sean Haynes).
  • S3 プロキシのサポートとトンネリングにおける、いくつかの細かなコーナーケースの修正。 #63427 (Arthur Passos).
  • io_uring の再サブミットの可視性を向上。profile event IOUringSQEsResubmitsIOUringSQEsResubmitsAsync に改名し、新たに IOUringSQEsResubmitsSync を追加しました。#63699 (Tomer Shafir).
  • メタデータストレージ用ディスクの空き容量を確保するための新しい設定 metadata_keep_free_space_bytes が追加されました。#64128 (MikhailBurdukov).
  • plain_rewritable メタデータストレージが作成・削除したディレクトリ数と、ローカルからリモートへのインメモリマップ内のエントリ数を追跡するメトリクスを追加しました。#64175 (Julia Kartseva) 。
  • query cache では、同一のクエリでも設定が異なる場合は別のクエリとして扱われるようになりました。これにより、異なる設定 (たとえば 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版の両方で、高度なダッシュボードを更新し、‘ネットワークの同時接続数の最大値’のグラフを追加しました。#64610 (Thom O’Connor).
  • zeros_mtgenerateRandom に関する進捗レポートを改善しました。#64804 (Raúl Marín) 。
  • サンプリングが現在有効かどうかを示す非同期メトリクス jemalloc.profile.active を追加しました。これは prof.active に加わる有効化の仕組みであり、呼び出し元のスレッドがサンプリングを行うには、その両方が有効である必要があります。 #64842 (Unalian).
  • allow_experimental_join_condition の重要扱いを解除しました。この指定により、異なるバージョンが混在するクラスターでは、分散クエリが正常に実行されないことがありました。#65008 (Nikita Mikhaylov).
  • DiskGetObjectThrottler* および DiskGetObjectThrottler* というサーバーの非同期メトリクスが追加されました。これらは、ディスク設定 s3_max_get_rpss3_max_put_rps で定義された 1 秒あたりのリクエスト数のレート制限と、ディスクでスロットリング制限に達することなく現在送信できるリクエスト数を反映します。これらのメトリクスは、制限が設定されているすべてのディスクごとに定義されます。#65050 (Sergei Trifonov).
  • (Keeper などで必要な) Poco::ThreadPool 向けのグローバル trace collector を初期化しました。#65239 (Kseniia Sumarokova).
  • bcrypt_hash を使用してユーザーを作成する際のバリデーションを追加しました。#65242 (Raúl Marín) 。
  • PREWHERE の実行中および実行後に読み取られた行数に関する profile events を追加しました。#64198 (Nikita Taranov) 。
  • 並列レプリカ使用時に、EXPLAIN PLAN でクエリを表示します。 #64298 (vdimir).
  • allow_deprecated_functionsallow_deprecated_error_prone_window_functions に名称変更しました。#64358 (Raúl Marín).
  • file テーブル関数でも、ファイルディスクリプタに対して max_read_buffer_size 設定が尊重されるようになりました。#64532 (Azat Khuzhin).
  • materialized view であっても、サポートされていないストレージではトランザクションを無効化します。 #64918 (alesapin).
  • 古いアナライザでの QUALIFY 句の使用を禁止しました。古いアナライザは QUALIFY を無視していたため、ミューテーションで予期しないデータ削除が発生する可能性がありました。#65356 (Dmitry Novik).

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

  • Apache ORC ライブラリのバグを修正しました。書き込み時の ORC 統計情報の計算について、すべてのプラットフォームでの符号なし型と ARM での Int8 に関する問題を修正しました。#64563 (Michael Kolupaev) 。
  • ClickHouse の従来の動作、すなわち CSVフォーマットでの Tuple の解釈方法に戻しました。この変更により、実質的に https://github.com/ClickHouse/ClickHouse/pull/60994 は取り消され、以下のいくつかの設定でのみ利用可能になります: output_format_csv_serialize_tuple_into_separate_columns, input_format_csv_deserialize_separate_columns_into_tuple および input_format_csv_try_infer_strings_from_quoted_tuples#65170 (Nikita Mikhaylov).
  • 特定の状況において、必要なgrantsがないにもかかわらず、ユーザーがdefaultデータベースで権限を昇格できてしまうpermission errorを修正しました。 #64769 (pufit).
  • UniqInjectiveFunctionsEliminationPass と uniqCombined に起因するクラッシュを修正しました。#65188 (Raúl Marín) 。
  • セッションのクローズ時にダイジェストの不一致が発生する ClickHouse Keeper のバグを修正しました。#65198 (Aleksei Filatov) 。
  • Distinct combinator で正しいメモリアラインメントを使用するよう修正しました。以前は、この combinator を使用すると、不正なメモリ割り当てが原因でクラッシュする可能性がありました。#65379 (Antonio Andelic).
  • DISTINCT とウィンドウ関数の使用時に発生するクラッシュを修正しました。 #64767 (Igor Nikonov).
  • IN および indexHint() 使用時に ‘set’ スキップ索引が機能しない問題を修正しました。 #62083 (Michael Kolupaev).
  • パラメーター化ビューの値を割り当てる際に、関数を実行できるようにしました。 #63502 (SmitaRKulkarni).
  • Parquet のメモリ使用量の追跡を修正しました。#63584 (Michael Kolupaev) 。
  • Tuple(Map(LowCardinality(String), String), ...) のカラムの読み取りに関する不具合を修正しました。#63956 (Anton Popov).
  • 異なる種類 (式と関数) の循環別名で発生する Cyclic aliases エラーを修正しました。#63993 (Nikolai Kochetov) 。
  • この修正により、クエリパイプライン内の各ビューで、正しい DEFINER を持つ適切に再定義されたコンテキストが使用されるようになります。#64079 (pufit).
  • アナライザ修正: INTERPOLATE 使用時の “Not found column” エラーを修正しました。 #64096 (Yakov Olkhovskiy) 。
  • ファイルを含むディスクとは異なる認証情報を持つS3バケットへのバックアップ作成の不具合を修正しました。 #64153 (Antonio Andelic).
  • クエリキャッシュでは、異なるデータベースに対する同一の 2 つのクエリが、別個のものとして扱われるようになりました。以前の動作では、テーブルの読み取り権限がなくても、それを回避できる可能性がありました。#64199 (Robert Schulze).
  • StatusFile の ~WriteBufferFromFileDescriptor で、未捕捉の例外により abort が発生する可能性がある問題を修正しました。#64206 (Kruglov Pavel).
  • ARRAY JOIN を使用した分散クエリで発生する duplicate alias エラーを修正しました。#64226 (Nikolai Kochetov).
  • string から integer への accurateCast で発生する予期しない問題を修正しました。 #64255 (wudidapaopao).
  • いずれかの OR グループに相互排他的なアトムが含まれる場合の CNF 簡約の問題を修正しました。 #64256 (Eduard Karacharov).
  • Query Tree のサイズ検証の不具合を修正しました。#64377 (Dmitry Novik) 。
  • PREWHERE を使用した Buffer テーブルで発生する Logical error: Bad cast を修正しました。#64388 (Nikolai Kochetov) 。
  • オブジェクトストレージに保存されている blob_storage_log で、再帰的なログ記録が発生しないようにしました。 #64393 (vdimir).
  • デフォルト式が定義されたテーブルに対する CREATE TABLE AS クエリの問題を修正しました。 #64455 (Anton Popov).
  • 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 combinator がすでに使用されている場合は、集約を書き換えないようにしました。#64638 (Dmitry Novik) 。
  • float の型推論を修正しました (バッファサイズが小さい場合、つまり --max_read_buffer_size 1 のとき) 。#64641 (Azat Khuzhin) 。
  • 式を含むTTLが正常に動作しなくなる可能性のある不具合を修正しました。 #64694 (alesapin).
  • 常に true となる 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)。
  • 混合JOIN条件内のSetに対する、サブクエリを含む不等価JOINを修正 (実験的) 。 #64775 (lgbo).
  • plain_rewritable disk 上のローカル cache におけるクラッシュを修正しました。#64778 (Julia Kartseva) 。
  • Keeperの修正: mntr コマンドで zk_latest_snapshot_size の正しい値を返すように修正しました。 #64784 (Antonio Andelic).
  • NestedカラムによるARRAY JOINを含む分散クエリで、Cannot find columnエラーが発生する問題を修正しました。#64755#64801 (Nikolai Kochetov)。
  • slru cache policyにおけるメモリリークを修正しました。#64803 (Kseniia Sumarokova) 。
  • 複数の種類のクエリで、メモリ使用量の追跡が不正確になる可能性があった問題を修正しました: S3 からデータを読み取るクエリ、HTTPプロトコル経由のクエリ、非同期挿入。 #64844 (Anton Popov).
  • materialized view のカラムの型がソーステーブルと異なる場合に、materialized view から PREWHERE を使って読み取るクエリで発生する Block structure mismatch エラーを修正しました。#64611 を修正。#64855 (Nikolai Kochetov) 。
  • テーブルで、有効期限 (TTL) にサブクエリを使用し、データベースに Replicated を使用し、並列レプリカとアナライザを有効にしている場合に発生する、まれなクラッシュを修正しました。非常にまれではありますが、サブクエリを含む TTL は使用しないでください。 #64858 (alesapin).
  • 削除対象のバッチが大きい場合に、blob_storage_logDelete イベントが重複する問題を修正しました。 #64924 (vdimir).
  • 設定に[Zoo]Keeperからのincludeがある場合、サーバー起動後に発生する可能性があった[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 によって作成されたクラスター内のすべての接続がセキュアになっていませんでした。 #65054 (Nikolay Degterinsky).
  • StorageMerge の PREWHERE 最適化後に発生していた Not-ready Set エラーを修正しました。#65057 (Nikolai Kochetov) 。
  • File系ストレージで finalize 済みのバッファへ書き込まないように修正しました。#65063 (Kruglov Pavel).
  • 循環する別名がある場合に、クエリ実行時間が無限になる可能性がある問題を修正しました。修正対象: #64849#65081 (Nikolai Kochetov) 。
  • INTERPOLATE (alias) を使用するリモートクエリで発生していた Unknown expression identifier エラーを修正しました (新しいアナライザ) 。#64636 を修正。#65090 (Nikolai Kochetov) 。
  • 算術演算を集約の外へ移動する処理の不具合を修正しました。新しいアナライザでは、最適化が一度しか適用されていませんでした。#65104 (Dmitry Novik).
  • 新しいアナライザにおける集約関数名の書き換えを修正しました。#65110 (Dmitry Novik) 。
  • クライアントソケットからリクエストボディ (の一部) を読み取っている際に受信タイムアウトが発生した場合、200 OK ではなく 5xx を返すようにしました。#65118 (Julian Maicher) 。
  • ヘッジドリクエストで発生する可能性があるクラッシュを修正しました。 #65206 (Azat Khuzhin).
  • Hashed および Hashed_Array Dictionary の短絡評価におけるバグを修正しました。このバグにより、未初期化の数値を読み取ってしまい、さまざまなエラーを引き起こす可能性がありました。 #65256 (jsc0218).
  • この PR により、IN operator の型変換処理中に、constant (IN operator の第 2 パラメータ) の型が常に参照できるようになります。そうでない場合、型情報が失われることで、DateTime から Date への変換のように、一部の変換が失敗する可能性があります。これにより (#64487) が修正されます。#65315 (pn).

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

  • LLVM XRay のサポートを追加。 #64592 #64837 (Tomer Shafir).
  • s3/hdfs/azure のストレージ実装を、IObjectStorage を扱う単一のクラスに統合。*Cluster、データレイク、Queue ストレージについても同様。 #59767 (Kseniia Sumarokova).
  • MergeTreeData と DataPart への依存を取り除くため、データパートライターをリファクタリング。 #63620 (Alexander Gololobov).
  • PartitionPruner と trivial count 最適化を改善するため、KeyCondition とキー解析をリファクタリング。これは #60463 から切り離された変更です。 #61459 (Amos Bird).
  • すべての関数が正しいサイズのカラムで呼び出されることを検証するためのアサーションを導入。 #63723 (Raúl Marín).
  • rc init スクリプトを使用して ClickHouse server デーモンを起動する際、network service を必須に変更。 #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」に名称変更しました。これに伴い内部のテーブルメタデータも変更されるため、既存の (experimental な) 転置索引を持つテーブルは互換性が失われます。アップグレード前にそのような索引を drop し、アップグレード後に再作成してください。#62884 (Robert Schulze).
  • 関数 neighborrunningAccumulaterunningDifferenceStartingWithFirstValuerunningDifference の使用は非推奨になりました (エラーを招きやすいためです) 。代わりに適切なウィンドウ関数を使用してください。再度有効にするには、allow_deprecated_error_prone_window_functions = 1 を設定するか、compatibility = '24.4' 以下を設定してください。#63132 (Nikita Taranov).
  • SHOW TABLES 権限が付与されていないデータベースやテーブルが多い場合でも、カラム数が多ければ system.columns へのクエリはより高速に動作します。以前のバージョンでは、対応するテーブルに SHOW TABLES を付与せずに個々のカラムへ SHOW COLUMNS を付与すると、system.columns テーブルにはそれらのカラムが表示されていましたが、新しいバージョンではそのテーブル全体をスキップするようになります。クエリを遅くしていた trace log messages の「Access granted」と「Access denied」も削除しました。#63439 (Alexey Milovidov).

新機能

  • 単一のレコードを application/x-www-form-urlencoded フォーマットで読み書きするための Form フォーマットが追加されました。 #60199 (Shaun Struwig).
  • CROSS JOINで圧縮を行えるようになりました。#60459 (p1rattttt).
  • サイズが制限を超えた場合に、CROSS JOIN を一時ファイル上で実行できるようになりました。#63432 (p1rattttt) 。
  • 左側と右側の両方のtableのカラムを含む不等条件でのjoinをサポートしました。たとえば t1.y < t2.y です。有効にするには、SET allow_experimental_join_condition = 1 を設定します。#60920 (lgbo).
  • 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 を修正しました。#59747 (Shaun Struwig) 。
  • 省略されたフィールドに NULL 値を強制的に設定する新しい設定 input_format_force_null_for_omitted_fields#60887 (Constantine Peresypkin).
  • これまで、S3ストレージとs3テーブル関数では、tarballs、zip、7z などのアーカイブファイル内のファイルを SELECT できませんでした。現在は、S3 上のアーカイブ内のファイルを順に処理できるようになりました。#62259 (Daniil Ivanik).
  • 条件付き関数 clamp をサポート。 #62377 (skyoct).
  • NPy 出力フォーマットを追加。#62430 (豪肥肥).
  • RawTSVRaw の同義語として使用できるようになりました。#63394 (Unalian).
  • ランダムな要素を含むタイムスタンプベースの UUID、すなわちバージョン 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 server の azureBlobStorage 関数で、Azure Workload identity を使用して Azure blob storage に認証するためのサポートを追加しました。config で use_workload_identity parameter が設定されている場合、認証には workload identity が使用されます。#57881 (Vinay Suryadevara) 。
  • system.parts_columns テーブルに有効期限 (TTL) 情報を追加しました。#63200 (litlig).

実験的機能

  • あらかじめすべての型を把握していなくても、任意の型の値を格納できる Dynamic データ型を実装しました。Dynamic 型は設定 allow_experimental_dynamic_type で利用できます。参照: #54864. #63058 (Kruglov Pavel).
  • MySQL への接続なしで MaterializedMySQL データベースを作成できるようになりました。#63397 (Kirill).
  • Replicated データベースのレプリカで、同じエラーにより DDL タスクが連続して max_retries_before_automatic_recovery 回 (デフォルトは 100 回) を超えて失敗した場合、そのレプリカを自動的に失われたものとしてマークし、復旧を開始するようにしました。あわせて、エントリ実行の初期段階で例外が発生した際に DDL エントリがスキップされることがあるバグも修正しました。#63549 (Alexander Tokmakov).
  • StorageS3Queue で、失敗したファイルも s3queue_tracked_file_ttl_sec および s3queue_traked_files_limit の集計対象に含めるようにしました。#63638 (Kseniia Sumarokova).

パフォーマンス改善

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

改善

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

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

  • ClickHouse は clang-18 でビルドされるようになりました。clang-tidy-18 の新しい check も多数有効になっています。#60469 (Alexey Milovidov)。
  • ClickHouse の新しいプラットフォームとして、loongarch64 の実験的サポートを追加しました。#63733 (qiangxuhui)。
  • Dockerfile が、https://github.com/docker-library/official-images/pull/15846 で Docker 公式ライブラリによるレビュー対象となりました。#63400 (Mikhail f. Shiryaev)。
  • 各 translation unit 内のすべてのシンボルに関する情報を、CI の各 build ごとに CI database に収集するようになりました。これにより #63494 はクローズされます。#63495 (Alexey Milovidov)。
  • Apache Datasketches ライブラリを更新しました。これにより #63858 が解決されます。#63923 (Alexey Milovidov)。
  • binary のクロスコンパイル時に、aarch64 Linux 向けの GRPC サポートを有効にしました。#64072 (alesapin)。
  • aarch64 で SIGSEGV 発生時の unwind を修正しました (signal 用スタックが小さいことが原因) 。#64058 (Azat Khuzhin)。

バグ修正

  • デフォルトで enable_vertical_final 設定を無効にしました。この機能にはバグがあるため、使用しないでください: #64543#64544 (Alexander Tokmakov).
  • 複数の分片を使用する場合のバックアップ作成を修正 #57684 (Vitaly Baranov).
  • CREATE クエリのカラム一覧から MV の内部テーブルにプロジェクション/索引/主キーが渡されるよう修正 #59183 (Azat Khuzhin).
  • boundRatio の誤ったマージを修正 #60532 (Tao Wang).
  • const の low-cardinality カラムに対して一部の関数を呼び出した際に発生するクラッシュを修正 #61966 (Michael Kolupaev).
  • テーブルで適応的粒度を使用していない場合に、FINAL を使用するクエリが誤った結果を返す不具合を修正 #62432 (Duc Canh Le).
  • メモリコントローラーに対する cgroups v2 サポートの検出を改善 #62903 (Robert Schulze) 。
  • クライアントでの外部テーブルの継続利用に関する不具合を修正 #62964 (Azat Khuzhin).
  • untuple と未解決のラムダに起因するクラッシュを修正 #63131 (Raúl Marín).
  • server が接続待ち受けを早すぎる段階で開始する問題を修正 #63181 (alesapin).
  • DROP PART コマンド後の再起動時に発生する交差するパーツを修正 #63202 (Han Fei).
  • 起動時に SQL security のデフォルト設定を正しく読み込む #63209 (pufit).
  • JOIN filter push down における filter join の修正 #63234 (Maksim Kita).
  • AzureObjectStorage::listObjects で発生する無限ループを修正 #63257 (Julia Kartseva) 。
  • CROSS join で join_algorithm 設定が無視される #63273 (vdimir).
  • WriteBufferToFileSegment と StatusFile の finalize 処理を修正 #63346 (vdimir).
  • まれに発生する、ALTER 後の SELECT クエリでの論理エラーを修正 #63353 (alesapin).
  • session_timezone を使用する X-ClickHouse-Timezone ヘッダーの不具合を修正 #63377 (Andrey Zvonov).
  • WITH ROLLUP と LowCardinality 型を使用するグループ化で発生するデバッグアサートを修正 #63398 (Raúl Marín).
  • group_by_use_nulls の軽微な修正 #63405 (vdimir).
  • projection が table メタデータから削除されている一方で、part には projection が残っている場合の backup/restore を修正 #63426 (Kseniia Sumarokova).
  • MySQL Dictionary ソースを修正 #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 における filter pushdown を修正 #63642 (Michael Kolupaev).
  • zookeeper の path がすでに存在する場合は、Replicated への変換を防止 #63670 (Kirill).
  • アナライザ: ビューが必要なカラムのみを読み取るようになりました #63688 (Maksim Kita).
  • アナライザ: WINDOW の再定義を禁止 #63694 (Dmitry Novik).
  • flatten_nested は実験的な Replicated データベースで不具合がありました。 #63695 (Nikolai Kochetov).
  • 修正 #63653 #63722 (Nikolai Kochetov).
  • Array(Nothing) から Map(Nothing, Nothing) へのキャストを許可 #63753 (Nikolai Kochetov).
  • partial_merge joinでの ILLEGAL_COLUMN を修正 #63755 (vdimir).
  • 修正: ウィンドウ関数における不要な distinct を削除 #63776 (Igor Nikonov).
  • SYSTEM UNLOAD PRIMARY KEY 実行時に発生する可能性のあるクラッシュを修正 #63778 (Raúl Marín).
  • 重複する循環エイリアスがあるクエリを修正しました。 #63791 (Nikolai Kochetov).
  • TokenIterator を本来あるべき遅延評価に変更 #63801 (Alexey Milovidov).
  • endpoint_subpath の S3 URI 設定を追加 #63806 (Julia Kartseva).
  • ParallelReadBuffer のデッドロックを修正しました #63814 (Antonio Andelic) 。
  • JOIN filter push down における等価カラムの修正 #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 profiler が原因の SIGSEGV を修正しました #63865 (Azat Khuzhin).
  • EXPLAIN CURRENT TRANSACTION クエリを修正 #63926 (Anton Popov).
  • アナライザを修正: 下までずっと亀が続いている… #63930 (Yakov Olkhovskiy).
  • plain_rewritable ディスクで特定の ALTER TABLE コマンドを許可 #63933 (Julia Kartseva).
  • 再帰CTEの分散実行に関する修正 #63939 (Maksim Kita) 。
  • アナライザ: COLUMNS の解決の不具合を修正 #63962 (Dmitry Novik).
  • アナライザでの LIMIT BY および skip_unused_shards #63983 (Nikolai Kochetov).
  • いくつかの不要なコード (Experimental Kusto) に対する修正 #63992 (Yong Wang).
  • 信頼できないバイナリ入力のデシリアライズをより安全に行う #64024 (Robert Schulze).
  • MergeTree family 以外のテーブルに対する分散テーブルで、設定 final = 1 のクエリのクエリ分析を修正しました。#64037 (Nikolai Kochetov).
  • recoverLostReplica に不足していた設定を追加 #64040 (Raúl Marín).
  • アナライザにおける SQL security のアクセスチェックを修正 #64079 (pufit).
  • アナライザを修正: DAG では interpolate 式のみを使用するようにしました #64096 (Yakov Olkhovskiy).
  • Azure backup で、max_upload_part_size ではなく 1 MiB (読み取りバッファサイズ) ごとにマルチパートブロックを書き込んでいた問題を修正しました (非ネイティブコピー時) #64117 (Kseniia Sumarokova).
  • バックアップのコピー中に正しくフォールバックするように修正 #64153 (Antonio Andelic).
  • materialized view としての CREATE TABLE で発生する LOGICAL_ERROR を防止 #64174 (Raúl Marín).
  • Query Cache: 異なるデータベースに対する同一のクエリを別個のものとして扱う #64199 (Robert Schulze).
  • Keeper で text_log を無視するようにしました #64218 (Antonio Andelic).
  • 修正 ロジックエラー: prewhere を使用した Buffer table での不正な CAST。 #64388 (Nikolai Kochetov).

ClickHouseリリース 24.4 (2024-04-30) 。 プレゼンテーション, ビデオ

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

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

新機能

  • 再帰 CTE をサポートしました。#62074 (Maksim Kita).
  • QUALIFY 句をサポートしました。#47819 をクローズします。#62619 (Maksim Kita).
  • テーブルエンジンを権限付与の対象にできるようになりました。既存ユーザーの動作には影響しません。#60117 (jsc0218).
  • INSERT 操作をサポートし、ローカルに保存されたメタデータを必要としない、書き換え可能な S3 ディスクを追加しました。#61116 (Julia Kartseva). 主なユースケースはシステムテーブルです。
  • クライアントで入力中のシンタックスハイライトが、構文レベルで動作するようになりました (以前は字句解析レベルで動作していました) 。#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 と同様に動作し、ステートメントの実行前にロールを適用します。これにより、複数のステートメントが許可されておらず、SET ROLE x とステートメント自体を同時に送信できないという HTTP インターフェイスの制限を回避できます。この方法では複数のロールを設定することもでき、たとえば ?role=x&role=ySET ROLE x, y と等価です。#62669 (Serge Klochkov).
  • テーブルの主キーが使用するメモリを解放するための SYSTEM UNLOAD PRIMARY KEY を追加しました。#62738 (Pablo Marcos).
  • system.text_logvalue1, value2, …, value10 カラムを追加しました。これらのカラムには、メッセージの整形に使用された値が格納されます。#59619 (Alexey Katsman).
  • insert 時に割り当てられた block 内での元の行番号を格納する永続仮想カラム _block_offset を追加しました。カラム _block_offset の永続化は、MergeTree setting enable_block_offset_column で有効にできます。また、part の最小 block 番号または mutation バージョンを含む仮想カラム _part_data_version も追加しました。永続仮想カラム _block_number は、もはや Experimental とは見なされません。#60676 (Anton Popov).
  • 設定 input_format_json_throw_on_bad_escape_sequence を追加しました。これを無効にすると、JSON入力フォーマットで不正なエスケープシーケンスを保存できます。#61889 (Kruglov Pavel).

パフォーマンス改善

  • 等価な Set を使用した JOIN フィルタのプッシュダウン改善。#61216 (Maksim Kita).
  • JOIN 後のフィルタが常にデフォルト値を除外する場合、OUTER JOIN を INNER JOIN に変換する最適化を適用します。この最適化は設定 query_plan_convert_outer_join_to_inner_join で制御でき、デフォルトで有効になっています。#62907 (Maksim Kita).
  • AWS S3 向けの改善。クライアントはヘッダー ‘Keep-Alive: timeout=X’ をサーバーに送信する必要があります。クライアントがそのヘッダーを含むレスポンスをサーバーから受信した場合は、サーバーから返された値を使用する必要があります。また、接続クローズの競合を避けるため、クライアントでは有効期限が近い接続は使用しないほうが望ましいです。 #62249 (Sema Checherinda).
  • SELECTにおけるmutationsのオーバーヘッドを削減 (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) 。
  • 関数 parseDateTimeOrNullparseDateTimeOrZeroparseDateTimeInJodaSyntaxOrNull、および parseDateTimeInJodaSyntaxOrZero は、入力にparseできない値が大半を占める場合、実行速度が大幅に向上しました (10倍~1000倍) 。#62634 (LiuNeng)。
  • system.query_cache に対する SELECT は、クエリキャッシュに多数のエントリ (たとえば 100,000 件を超える数) が含まれている場合、目に見えて高速になりました。#62671 (Robert Schulze) 。
  • ファイルシステムキャッシュでの競合を低減 (その3) : 領域予約の試行時に、ロックを取得せずにファイルシステムからの削除を実行するようにしました。#61163 (Kseniia Sumarokova).
  • ファイルシステムキャッシュの動的なリサイズを高速化しました。 #61723 (Kseniia Sumarokova).
  • INVALIDATE_QUERY を使用する Dictionary ソースは、起動時に 2 回読み込まれなくなりました。#62050 (vdimir).
  • 主キーを含むブール式の後に冗長な = 1 または = 0 を付けた場合、プライマリインデックスが使用されない問題を修正しました。たとえば、SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 は、本来プライマリインデックスを使用できるにもかかわらず、どちらもテーブル全体のスキャンを実行していました。 #62142 (josh-hildred).
  • system.remote_data_paths から、結果全体を1つの大きなchunkに蓄積するのではなく、chunkのストリームを返すようにしました。これにより、メモリ使用量を削減し、途中の進捗を表示し、クエリをキャンセルできるようになります。#62613 (Alexander Gololobov).

実験的機能

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

改善

  • 利便性向上のため、SELECT * FROM numbers() は、制限なしで SELECT * FROM system.numbers と同様に動作するようになりました。 #61969 (YenchangChan) 。
  • Kafka 設定に consumer 用と producer 用の個別のタグを導入しました。これにより、consumer のプロパティが producer インスタンスに指定されている、またはその逆であることを示す librdkafka からの警告 (バグの非常に多い出来の悪い C ライブラリ) を回避できます (例: Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance) 。Closes: #58983#58956 (Aleksandr Musorin) 。
  • 関数 date_diffage は、結果をマイクロ秒精度ではなくナノ秒精度で計算するようになりました。また、unit parameter に指定可能な値として nanosecond (または nanosecondsns) もサポートされるようになりました。#61409 (Austin Kothig) 。
  • date_trunc にナノ秒、マイクロ秒、ミリ秒の単位を追加しました。#62335 (Misz606) 。
  • 証明書の再読み込み時に、証明書チェーンも再読み込みするようにしました。 #61671 (Pervakov Grigorii) 。
  • そのレプリカパスにアクティブなレプリカが存在する場合はテーブルをアタッチできないようにし、エラー #60432 の発生防止を図ります。#61876 (Arthur Passos) 。
  • clickhouse-localinput をサポートしました。#61923 (Azat Khuzhin) 。
  • strictness ANYJoin テーブルエンジンは、再読み込み後も整合性が保たれるようになりました。同じキーを持つ複数の行が挿入された場合は、最初に挿入された行が優先されます (以前は、テーブルの読み込み時にランダムに選択されていました) 。#51027 をクローズ。#61972 (vdimir).
  • Apache Arrow スキーマから Nullable 型のカラムを自動的に推論するようになりました。#61984 (Maksim Kita) 。
  • 集約時に集約状態の並列マージをキャンセルできるようになりました。例: uniqExact#61992 (Maksim Kita).
  • system.keywords を使って候補を補完し、内部のすべての箇所でもそれらを使うようにしました。 #62000 (Nikita Mikhaylov).
  • OPTIMIZE FINALReplicatedMergeTree に対して、現在実行中のマージが完了するまで待機し、その後 final マージのスケジュールを再度試みるようになりました。これにより、通常の MergeTree の動作により近くなります。#62067 (Nikita Taranov) 。
  • Hive テキストファイルからデータを読み取る際、入力フィールド数の調整に Hive テキストファイルの先頭行が使われますが、先頭行のフィールド数が定義された Hive テーブルと一致しないことがあります。たとえば、Hive テーブルが test_tbl(a Int32, b Int32, c Int32) のように 3 つのカラムを持つよう定義されている一方で、テキストファイルの先頭行には 2 つのフィールドしかない場合、入力フィールド数は 2 に調整されます。その結果、次の行に 3 つのフィールドがあっても 3 番目のフィールドは読み取られず、誤ってデフォルト値 0 が設定されてしまいます。 #62086 (KevinyhZou).
  • CREATE AS でテーブルのコメントもコピーされるようになりました。#62117 (Pablo Marcos) 。
  • zookeeper テーブルにクエリ進捗を追加しました。#62152 (JackyWoo) 。
  • サーバー全体で trace collector (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 プライベートリンクのインターフェイスエンドポイント経由での S3 へのアクセスをサポートしました。#60021#31074、および #53761 をクローズしました。#62208 (Arthur Passos).
  • clickhouse-client で、UDF 用のディレクトリが存在しない場合に作成しないようにしました。これにより #59597 がクローズされます。#62366 (Alexey Milovidov) 。
  • クエリキャッシュは、システムテーブル (system.*, information_schema.*, INFORMATION_SCHEMA.*) に対するクエリ結果をキャッシュしなくなりました。#62376 (Robert Schulze) 。
  • MOVE PARTITION TO TABLE クエリは、パーツ数の上限超過を防ぐため、遅延されることや TOO_MANY_PARTS Exception をスローすることがあります。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 の各設定を参照) 。 #62420 (Sergei Trifonov).
  • macOS でのデフォルトのインストールディレクトリを /usr/bin から /usr/local/bin に変更しました。これは、macOS El Capitan (2015) で導入された Apple の System Integrity Protection によって、sudo を使用しても /usr/bin に書き込めないためです。 #62489 (haohang).
  • transform が常に最初に一致した値を返すようにしました。#62518 (Raúl Marín) 。
  • 不足していた hostname カラムがシステムテーブル blob_storage_log に追加されました。#62456 (Jayme Bird) 。
  • 他のシステムテーブルとの整合性を保つため、system.backup_logevent_time カラムが追加されました。#62541 (Jayme Bird).
  • テーブル system.backup_log のデフォルトのソートキーが、ほかの _log テーブルエンジンと同様に event_date, event_time になりました。 #62667 (Nikita Mikhaylov).
  • RESTORE の実行中に、table の DEFAULT expression が評価されないようにしました。#62601 (Vitaly Baranov).
  • S3ストレージとバックアップにも、S3 disk と同じデフォルトの keep alive 設定が必要です。#62648 (Sema Checherinda) 。
  • 単一のテーブルに対する複数のコンシューマーからのログメッセージを区別できるよう、ログメッセージに librdkafka’s (悪名高く、バグも多いあの C ライブラリ) のクライアント識別子を追加しました。#62813 (János Benjamin Antal) 。
  • Replicated database の ZooKeeper パスで、特別なマクロ {uuid}{database} を使えるようになりました。#62818 (Vitaly Baranov) 。
  • HTTPリクエストで、異なる認証スキームのクォータキーを使用できるようにしました。 #62842 (Kseniia Sumarokova).
  • clickhouse clientclickhouse local のコマンドライン引数 --help の出力を簡潔化しました。従来の出力は、現在は --help --verbose で表示されます。#62973 (Yarik Briukhovetskyi).
  • MySQL 8.3 で log_bin_use_v1_row_events が削除されたため、それに対応するよう実験的な MaterializedMySQL エンジンを調整しました #60479#63101 (Eugene Klimov)。 著者: Nikolay Yankin。

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

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • クォーラム insert トランザクションの取り消し時に発生する論理エラーを修正しました。#61953 (Han Fei) 。
  • FILTER句付きでCOUNT(*)を使用した際に発生するパーサーエラーを修正 #61357 (Duc Canh Le).
  • group_by_use_nulls + grouping sets + アナライザ + materialize/constant での論理エラーを修正 #61567 (Kruglov Pavel).
  • 移動済みのパーツを削除する前にマージをキャンセル #61610 (János Benjamin Antal).
  • Apache Arrowでのクラッシュを修正 #61720 (Kruglov Pavel).
  • 特定のdiskに対応する正しいpathで convert_to_replicated フラグを検索するよう修正しました #61769 (Kirill).
  • distributed_foreground_insert/distributed_background_insert_batch における接続関連のデータレースの可能性を修正 #61867 (Azat Khuzhin).
  • 行入力フォーマットでスキップできるように、CANNOT_PARSE_ESCAPE_SEQUENCE エラーをパースエラーとして扱う #61883 (Kruglov Pavel).
  • HTTP で http_wait_end_of_query を使用した際に、例外メッセージが出力フォーマットに書き込まれてしまう問題を修正 #61951 (Kruglov Pavel).
  • LowCardinality と JSONExtact 関数の併用に関する適切な修正 #61957 (Nikita Mikhaylov).
  • Row Policy に式がない場合、Engine Merge でクラッシュ #61971 (Ilya Golshtein).
  • WriteBufferAzureBlobStorage のデストラクタで発生する未捕捉例外を修正 #61988 (SmitaRKulkarni).
  • カラム定義のない ReplicatedMergeTree の CREATE TABLE を修正 #62040 (Azat Khuzhin).
  • 複合シャーディングキー向けの optimize_skip_unused_shards_rewrite_in の修正 #62047 (Azat Khuzhin).
  • ReadWriteBufferFromHTTP がリダイレクト時に正しい host ヘッダーを設定するよう修正 #62068 (Sema Checherinda).
  • external table でデータ型 Bool を解析できない問題を修正 #62115 (Duc Canh Le).
  • アナライザ: クエリパラメータの解決処理を修正 #62186 (Dmitry Novik).
  • readonly 時のパーツ復元を修正 #62207 (Vitaly Baranov).
  • SQL UDF を含む索引定義で発生するクラッシュを修正 #62225 (vdimir).
  • アナライザ使用時に generateRandom の NULL ランダムシードに関する問題を修正しました。#62248 (Nikolai Kochetov) 。
  • Distinct Transfom内でconstカラムを正しく処理 #62250 (Antonio Andelic) 。
  • FINAL 修飾子を含むクエリに対する Parts Splitter の不具合を修正 #62268 (Nikita Taranov).
  • アナライザ: パラメータ化ビューに対する別名の解決を修正 #62274 (Dmitry Novik).
  • アナライザ: 親スコープでの名前解決を修正 #62281 (Dmitry Novik).
  • Nullable の非ネイティブ数値カラムにおける argMax の不具合を修正 #62285 (Raúl Marín).
  • Ordinaryデータベースにおけるmaterialized viewのBACKUPおよびRESTOREを修正 #62295 (Vitaly Baranov).
  • Context 内の scalar のデータ競合を修正 #62305 (Kruglov Pavel).
  • materialized viewの主キーを修正 #62319 (Murat Khairulin).
  • サポートされていないテーブルに対しては、マルチスレッド insert パイプラインを構築しないようにしました #62333 (vdimir).
  • 分散クエリで位置引数を使用する場合のアナライザを修正 #62362 (flynn).
  • アナライザのMergeエンジンで、additional_table_filters からのフィルタプッシュダウンを修正 #62398 (Kruglov Pavel).
  • アナライザ使用時の 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).
  • あるパーティションを同一のパーティションへ移動する際のバグを修正 #62524 (helifu).
  • LIMIT 内のスカラーサブクエリの問題を修正 #62567 (Nikolai Kochetov).
  • 私たち自身も別に気に入っているわけではない、実験的かつサポート対象外の Hive engine のセグメンテーションフォールトを修正しました #62578 (Nikolay Degterinsky).
  • groupArraySortedのメモリリークを修正 #62597 (Antonio Andelic).
  • largestTriangleThreeBuckets におけるクラッシュを修正 #62646 (Raúl Marín).
  • より大きな解像度での tumble[Start,End] および hop[Start,End] を修正 #62705 (Jordi Villar).
  • argMin/argMax combinator のステートを修正 #62708 (Raúl Marín).
  • cache ロック競合の最適化により、cache 内の一時データの処理が失敗していた問題を修正 #62715 (Kseniia Sumarokova).
  • 関数 mergeTreeIndex のクラッシュを修正しました #62762 (Anton Popov) 。
  • 修正: 更新: ネストされたマテリアライズドカラム: サイズチェックの不具合修正 #62773 (Eliot Hautefeuille).
  • アナライザを使用したCTEでFINAL修飾子が反映されない問題を修正 #62811 (Duc Canh Le) 。
  • HTTP インターフェイス使用時の JSON フォーマットで、関数 formatRow がクラッシュする問題を修正 #62840 (Anton Popov).
  • Azure: endpoint オブジェクトから最終的な URL を生成する際の不具合を修正 #62850 (Daniel Pozo Escalona).
  • GCD コーデックを修正 #62853 (Nikita Taranov).
  • hyperrectangle における 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) 。
  • cache 内の一時データで、cache キーのディレクトリ作成失敗を誤って処理していた問題を修正 #62925 (Kseniia Sumarokova).
  • gRPC: IPv6接続時のクラッシュを修正 #62978 (Konstantin Bogdanov).
  • レプリケートされたフェッチ時に発生する可能性がある CHECKSUM_DOESNT_MATCH (およびその他のエラー) を修正 #62987 (Azat Khuzhin) 。
  • cache 内の一時データの処理中に未捕捉の例外で終了する問題を修正 #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 wire protocol のバージョンチェックで、“config” ではなくユーザー指定の db を使用するようにしました #63126 (Alexander Gololobov).

ClickHouse リリース 24.3 LTS、2024-03-27。 プレゼンテーションビデオ

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

  • 設定 allow_experimental_analyzer はデフォルトで有効になっており、クエリ分析は、互換性と機能の充実度に優れた新しい実装に切り替わります。機能 “analyzer” は experimental ではなくベータと見なされるようになりました。以前の動作に戻すには、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 では変更していません (Arrow は低レベル用途が重視されているためです) 。#61817 (Alexey Milovidov).
  • 新しい ClickHouse バージョンでは、関数 geoDistancegreatCircleDistancegreatCircleAngle は、すべての引数が Float64 の場合、内部計算および戻り値の型に 64 ビット倍精度浮動小数点データ型を使用するようになります。これにより #58476 が修正されます。以前のバージョンでは、これらの関数は常に Float32 を使用していました。geo_distance_returns_float64_on_float64_argumentsfalse に設定するか、compatibility24.2 以下に設定すると、以前の動作に戻すことができます。#61848 (Alexey 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/59915 のブロックを解消するために必要だった https://github.com/ClickHouse/ClickHouse/pull/59699 の続きです。#60888 (Nikita Mikhaylov).
  • ユーティリティ clickhouse-copier は、GitHub 上の別のrepositoryに移動されました: https://github.com/ClickHouse/copier。これはバンドルには含まれなくなりましたが、引き続き個別にダウンロードできます。これにより #60734 をクローズします。これにより #60540 をクローズします。これにより #60250 をクローズします。これにより #52917 をクローズします。これにより #51140 をクローズします。これにより #47517 をクローズします。これにより #47189 をクローズします。これにより #46598 をクローズします。これにより #40257 をクローズします。これにより #36504 をクローズします。これにより #35485 をクローズします。これにより #33702 をクローズします。これにより #26702 をクローズします。
  • MySQL との互換性を高めるため、互換エイリアス locate はデフォルトで引数 (needle, haystack[, start_pos]) を受け付けるようになりました。従来の動作 (haystack, needle[, start_pos]) は、function_locate_has_mysql_compatible_argument_order = 0 を設定することで復元できます。 #61092 (Robert Schulze).
  • デフォルトで、MergeTree テーブルの ORDER BY での SimpleAggregateFunction の使用を禁止しました (AggregateFunction と同様に、比較できないため禁止されます。許可するには allow_suspicious_primary_key を使用してください) 。#61399 (Azat Khuzhin).
  • Ordinary データベースエンジンは非推奨です。サーバーでこれを使用している場合、clickhouse-client に警告が表示されます。これにより #52229 がクローズされます。#56942 (shabroo).

新機能

  • zip に加え、tar 形式でのバックアップの読み書きをサポートしました。#59535 (josh-hildred).
  • S3 Express bucket のサポートを実装しました。#59965 (Nikita Taranov).
  • 別の disk からパーツを Attach できるようになりました (ハードリンクではなくコピーを使用) 。#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 を table function として追加しました (既存の numbers 関数に対する PostgreSQL 互換の alias) 。この関数は、自然数の等差数列からなるテーブルを生成します。#59390 (divanik).
  • 値の出現回数とその誤差を返す topK/topkWeighed のサポートモードを追加しました。#54508 (UnamedRus).
  • DateTime または DateTime64 の値に対してミリ秒の部分を返す関数 toMillisecond を追加しました。#60281 (Shaun Struwig).
  • clickhouse-server の HTTP リダイレクトハンドラーを設定できるようになりました。たとえば、/ を Play UI にリダイレクトできます。#60390 (Alexey Milovidov).

パフォーマンスの改善

  • 不要かつコストの高いメモリコピーを省けるよう、関数 dotProduct を最適化しました。#60928 (Robert Schulze) 。
  • 256ビット整数の出力が30倍高速化されました。#61100 (Raúl Marín) 。
  • テーブルの主キーにほとんど役に立たないカラムが含まれている場合、それらをメモリに保持しないでください。これは、新しい設定 primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns によって制御され、デフォルト値は 0.9 です。これは次のことを意味します。複合主キーでは、あるカラムの値が全体の少なくとも 0.9 の割合で変化する場合、その後に続くカラムは読み込まれません。#60255 (Alexey Milovidov).
  • 複数の Nullable カラムが関係する場合の、シリアライズされた集約メソッドのパフォーマンスを改善。#55809 (Amos Bird).
  • ALL JOIN のパフォーマンス向上のため、JSON 出力を遅延生成するようにしました。#58278 (LiuNeng) 。
  • 外部サービス (AWS S3 など) との HTTP/HTTPS 接続を、あらゆるユースケースで再利用できるようにしました。レスポンスが 3xx または 4xx の場合でも同様です。#58845 (Sema Checherinda).
  • 集約関数 argMin / argMax / any / anyLast / anyHeavy と、ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1 クエリの改善。#58640 (Raú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 の一部はパース中に作成・破棄されることがあり、その際には大量のバックトラッキングも発生します。これによりパース処理が遅くなり、その結果、readonly ユーザーによる DoS が可能になっていました。しかし最大の問題は、これがファザーの進展を妨げていたことです。#61543 (Alexey Milovidov).
  • 単一の値に対するIN演算子を最適化する新しいアナライザパスを追加しました。#61564 (LiuNeng).
  • DNSResolver は、AWS S3 の複数のエンドポイントを均等に利用できるよう、名前解決で得られた IP アドレスのセットをシャッフルします。 #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).
  • parallel_replicas_allow_in_with_subquery = 1 という設定を追加し、並列レプリカで IN 句内のサブクエリを使用できるようにしました。 #60950 (Nikolai Kochetov).
  • 「zero-copy」レプリケーションに関する変更: テーブルが削除されたとき、そのテーブルに関連するすべての zero-copy ロックも削除する必要があります。これらのロックを含むディレクトリも削除する必要があります。 #57575 (Sema Checherinda).

改善点

  • デフォルトのテーブルエンジンとして MergeTree を使用。#60524 (Alexey Milovidov)
  • デフォルトで output_format_pretty_row_numbers を有効にしました。ユーザビリティが向上します。 #61791 (Alexey Milovidov).
  • 前のバージョンでは、Pretty フォーマットの一部の数値表示があまり Pretty ではありませんでした。#61794 (Alexey Milovidov) 。
  • Pretty formatsでは、結果セット内の唯一の値が長い場合、SHOW CREATE TABLEクエリの結果のようなケースでも切り詰められなくなりました。#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).
  • 高度なダッシュボードでは、スクロールしてもコントロールが常に表示されたままになりました。これにより、上までスクロールしなくても新しいグラフを追加できます。#60692 (Alexey Milovidov).
  • materialized view に対して MODIFY COLUMN クエリを実行する際は、すべてのカラムが存在することを確認できるよう、内部テーブルの構造を確認してください。#47427 (sunny).
  • String型とEnumは、配列、UNION クエリ、条件式などの同じコンテキストで使用できるようになりました。これにより #60726 を解決しました。#60727 (Alexey Milovidov) 。
  • クエリ処理向けに、外部データの構造で Enum を宣言できるようになりました (これはクエリに指定できる一時テーブルです) 。 #57857 (Duc Canh Le).
  • マージ対象のパーツを選択する際に論理削除された行も考慮するようになり、結果のパーツのディスクサイズをより適切に見積もれるようになりました。 #58223 (Zhuo Qiu).
  • さらに多くのシステムテーブルで、カラムにコメントを追加しました。https://github.com/ClickHouse/ClickHouse/pull/58356 の続きです。#59016 (Nikita Mikhaylov) 。
  • これで、PREWHERE で仮想カラムを使用できるようになりました。_part_offset のような非定数の仮想カラムでは特に有効です。#59033 (Amos Bird). 仮想カラムの全体的な使い勝手が向上しました。これで、PREWHERE で仮想カラムを使用できるようになりました (_part_offset のような非定数の仮想カラムでは特に有効です) 。また、describe_include_virtual_columns 設定を有効にした DESCRIBE クエリでは、カラムのコメントとして仮想カラムの組み込みドキュメントが表示されるようになりました。#60205 (Anton Popov).
  • 定数のキーを使用する代わりに、オブジェクトストレージがオブジェクトを削除できるかどうかを判定するためのキーを生成するようになりました。 #59495 (Sema Checherinda).
  • “local_blob_storage” の代わりに、オブジェクトストレージの種別として “local” を指定できるようになりました。#60165 (Kseniia Sumarokova).
  • DETACH/サーバー停止時および SYSTEM FLUSH DISTRIBUTED で、Distributed engine の保留中の INSERT ブロックを並列に flush するようになりました (並列化が有効なのは、テーブルにマルチディスクポリシーがある場合のみです。現時点では、Distributed engine のすべてがこれに該当します) 。 #60225 (Azat Khuzhin).
  • マージに対してリードスルー cache を強制する設定を追加しました。#60308 (Kseniia Sumarokova) 。
  • MySQL互換プロトコルの改善です。issue #57598 では、トランザクション処理に関する挙動の違いについて言及されています。トランザクションがアクティブでない状態で COMMIT/ROLLBACK を発行すると、MySQL の挙動とは異なり、エラーとして報告されます。#60338 (PapaToemmsn) 。
  • 関数 substring に、新たな別名 byteSlice が追加されました。 #60494 (Robert Schulze) 。
  • あいまいさを減らすため、サーバー設定 dns_cache_max_size の名称を dns_cache_max_entries に変更しました。#60500 (Kirill Nikiforov) 。
  • SHOW INDEX | INDEXES | INDICES | KEYS は、主キーのカラム順ではソートされなくなりました (直感的ではなかったためです) 。#60514 (Robert Schulze) 。
  • Keeper の改善: データ損失を防ぐため、無効なスナップショットが検出された場合は起動時に中止するようにしました。 #60537 (Antonio Andelic) 。
  • tzdata を 2024a に更新。#60768 (Raúl Marín) 。
  • Keeper の改善: Keeper の設定で leadership_expiry_ms をサポート。#60806 (Brokenice0415) 。
  • 設定 input_format_try_infer_exponent_floats にかかわらず、JSON フォーマットでは常に指数表記の数値を推論するようになりました。JSON オブジェクトから named Tuples を推論する際に、あいまいなパスで例外を発生させる代わりに String 型を使用できるようにする設定 input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects を追加しました。#60808 (Kruglov Pavel).
  • MySQLで一般的に使われる START TRANSACTION 構文のサポートを追加し、https://github.com/ClickHouse/ClickHouse/discussions/60865 を解決しました。#60886 (Zach Naimon) 。
  • full-sorting merge join アルゴリズムで、NULL を最大値/最小値として扱えるようにするフラグを追加しました。これにより、Apache Spark などの他の SQL システムと互換性のある動作が可能になります。 #60896 (loudongfeng).
  • clickhouse-clientclickhouse-local で、ファイル拡張子から出力フォーマットを検出できるようになりました。#61036 (豪肥肥).
  • Linux の CGroups の値が変更された際に、runtime のメモリ制限を更新するようにしました。#61049 (Han Fei) 。
  • 誤って見落としていた関数 toUInt128OrZero を追加しました (この問題は https://github.com/ClickHouse/ClickHouse/pull/945 に関連しています) 。互換性のための別名 FROM_UNIXTIME および DATE_FORMAT (これらは ClickHouse ネイティブではなく、MySQL 互換性のためだけに存在します) について、SQL 互換の別名として想定どおり、大文字と小文字を区別しないようにしました。#61114 (Alexey Milovidov).
  • アクセスチェックが改善され、対象ユーザーがその権限を取り消すための権限付与も持っていない場合には、保有していない権限でも取り消せるようになりました。例: GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
  • Nullable カラムに対する has() 関数の不具合を修正 (#60214 を修正) 。#61249 (Mikhail Koviazin) 。
  • これにより、サブツリー <include from_zk="/path" merge="true"> の設定substitutionsで、attribute merge="true" を指定できるようになりました。このattributeが指定されている場合、ClickHouse はサブツリーを既存のconfigurationにマージします。指定されていない場合のデフォルトの動作では、新しい内容がconfigurationに追加されます。 #61299 (alesapin).
  • 仮想メモリマッピング向けの非同期メトリクス VMMaxMapCountVMNumMaps を追加しました。#60662 をクローズしました。#61354 (Tuan Pham Anh) 。
  • 一時データを作成するすべての箇所で、たとえば外部メモリのソートや外部メモリの GROUP BY でも、temporary_files_codec 設定が使用されるようになりました。以前は partial_merge JOIN アルゴリズムでのみ機能していました。#61456 (Maksim Kita).
  • クエリのパースの複雑さを制限できる新しい設定 max_parser_backtracks を追加しました。 #61502 (Alexey Milovidov).
  • ファイルシステムキャッシュの動的なリサイズ時の競合が減少しました。 #61524 (Kseniia Sumarokova) 。
  • StorageS3 キューの分片モードを無効化しました。今後書き直されるためです。#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 でも動作するようになりました。以前のバージョンでは、プログラムがシステムコール内で時間を消費しない場合にのみ動作していました。 #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 はすべてを保持することを意味するとされているため) #60031 (Azat Khuzhin).
  • FINAL の最適化に不具合があり、著者はこれを次のように説明しています: “PartsSplitter invalid ranges for the same part”。 #60041 (Maksim Kita).
  • Apache Hive に問題がありました。これは Experimental であり、サポート対象外です。 #60262 (shanfengp).
  • 実験的な並列レプリカの改善: 並列レプリカに変更があった場合は再解析を強制 #60362 (Raúl Marín).
  • 新しいdisks設定オプションにおけるplain metadata typeの使用を修正 #60396 (Kseniia Sumarokova) 。
  • mapContainsKeyLike における論理エラー ‘型に互換性がないためカラムをキャプチャできません’ の修正を試みました #60451 (Kruglov Pavel).
  • CREATE TABLEでのスカラーサブクエリの計算を回避しました。#60464 (Nikolai Kochetov) 。
  • エラーによって多数の行がスキップされる場合に、並列パースで発生するデッドロックを修正 #60516 (Kruglov Pavel).
  • 実験的な KQL (Kusto) サポートに不具合があり、max_query_size_for_kql_compound_operator を修正しました: #60534 (Yong Wang).
  • Keeper の不具合修正: コミットログの待機時にタイムアウトを追加 #60544 (Antonio Andelic).
  • 日付型には数値のヒントを出力しない #60577 (Raúl Marín).
  • フィルター内に非決定論的関数がある場合の MergeTree からの読み取りを修正 #60586 (Kruglov Pavel).
  • 互換性設定値の型が不正な場合に発生する論理エラーを修正 #60596 (Kruglov Pavel).
  • fix(prql): 堅牢なパニックハンドラー #60615 (Maximilian Roos).
  • decimal および date 引数での intDiv を修正 #60672 (Yarik Briukhovetskyi).
  • 修正: 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 のバグを修正 #60745 (Jordi Villar).
  • 未サポートのマルチパートアップロード操作では、カスタムメタデータヘッダーを設定できないようにしました #60748 (Francisco J. Jurado Moreno).
  • toStartOfIntervalを修正 #60763 (Andrey Zvonov).
  • arrayEnumerateRanked で発生するクラッシュを修正しました #60764 (Raúl Marín).
  • INSERT SELECT JOIN で input() を使用した際に発生するクラッシュを修正 #60765 (Kruglov Pavel).
  • サブクエリで allow_experimental_analyzer の値が異なる場合にクラッシュする問題を修正 #60770 (Dmitry Novik).
  • S3 の読み取り時の再帰処理を削除 #60849 (Antonio Andelic).
  • HashedDictionaryParallelLoader で、エラー時にハングする可能性がある問題を修正 #60926 (vdimir).
  • Replicated database (実験的機能) での非同期RESTOREを修正 #60934 (Antonio Andelic).
  • ネイティブプロトコル経由でLogテーブルに非同期 INSERTする際のデッドロックを修正 #61055 (Anton Popov).
  • RangeHashedDictionary における dictGetOrDefault のデフォルト引数の遅延実行の不具合を修正 #61196 (Kruglov Pavel).
  • groupArraySorted に関する複数のバグを修正しました #61203 (Raúl Marín).
  • スタンドアロンバイナリでの Keeper の再構成を修正 #61233 (Antonio Andelic).
  • S3 engine における session_token の使用を修正 #61234 (Kruglov Pavel).
  • 集約関数 uniqExact が誤った結果を返す可能性がある問題を修正しました #61257 (Anton Popov).
  • show database のバグを修正 #61269 (Raúl Marín).
  • MATERIALIZEDカラムを使用する RabbitMQ ストレージにおける論理エラーを修正 #61320 (vdimir).
  • CREATE OR REPLACE DICTIONARY の不具合を修正 #61356 (Vitaly Baranov).
  • external ON CLUSTER を使用した ATTACH クエリを修正 #61365 (Nikolay Degterinsky).
  • Nullableキー向けの連続キー最適化を修正 #61393 (Anton Popov).
  • actions DAG split の不具合を修正 #61458 (Raúl Marín).
  • 失敗した RESTORE の終了処理を修正 #61466 (Vitaly Baranov) 。
  • 互換性設定使用時に async_insert_use_adaptive_busy_timeout を正しく無効化 #61468 (Raúl Marín) 。
  • リストアプールでのキューイングを許可 #61475 (Nikita Taranov).
  • UUID を使用して system.parts を読み込む際の不整合を修正しました。#61479 (Dan Wu) 。
  • ALTER QUERY MODIFY SQL SECURITY の不具合を修正 #61480 (pufit).
  • window view (実験的機能) でのクラッシュを修正 #61526 (Alexey Milovidov).
  • repeat で非ネイティブ整数を使用した場合の不具合を修正 #61527 (Antonio Andelic).
  • クライアントの-s引数の不具合を修正 #61530 (Mikhail f. Shiryaev).
  • arrayPartialReverseSort のクラッシュを修正しました #61539 (Raúl Marín).
  • const位置指定での文字列検索を修正 #61547 (Antonio Andelic).
  • DateTime64 で addDays を使用した際にエラーが発生する問題を修正 #61561 (Shuai li).
  • JSONExtract で LowCardinality の入力型を使用できないようにしました #61617 (Julia Kartseva) 。
  • 重複排除を有効にした非同期 INSERT の system.part_log を修正 #61620 (Antonio Andelic).
  • system.parts で発生する Non-ready set 例外を修正しました。#61666 (Nikolai Kochetov) 。
  • REPLACE_RANGE における actual_part_name を修正 (Entry actual part isn't empty yet) #61675 (Alexander Tokmakov).
  • 不正な UTF-8 に対する multiSearchAllPositionsCaseInsensitiveUTF8 の sanitizer レポートの問題を修正 #61749 (pufit).
  • Nullable カラムで RANGE フレームがサポートされていなかった問題を修正しました。#61766 (YuanLiu).

ClickHouse リリース 24.2 (2024-02-29) 。プレゼンテーションビデオ

後方互換性を持たない変更

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

新機能

  • view/materialized view で definer user を指定できる新しい構文が追加されました。これにより、基になるテーブルに対する明示的な権限がなくても、view から select/insert を実行できます。つまり、View が権限を内包する形になります。#54901 #60439 (pufit).
  • file/s3/hdfs/url/azureBlobStorage エンジンでフォーマットが不明な場合、スキーマ推論時にファイルフォーマットを自動的に検出するようにしました。#50576 をクローズしました。#59092 (Kruglov Pavel) 。
  • 非同期挿入タイムアウトの自動調整機能を実装しました。次の設定が追加されました: async_insert_poll_timeout_ms, async_insert_use_adaptive_busy_timeout, async_insert_busy_timeout_min_ms, async_insert_busy_timeout_max_ms, async_insert_busy_timeout_increase_rate, async_insert_busy_timeout_decrease_rate。#58486 (Julia Kartseva)。
  • 連続ログイン失敗の最大回数に対するクォータを設定できるようになりました。#54737 (Alexey Gerasimchuck) 。
  • 新しい集約関数 groupArrayIntersect を追加しました。関連: #49862#59598 (Yarik Briukhovetskyi) 。
  • AzureBlobStorage のバックアップとリストアをサポートしました。#50747 を解決しました。#56988 (SmitaRKulkarni).
  • ユーザーは теперь、format_template_row の代替として format_schema_rows_template を使い、クエリ内でテンプレート文字列を直接指定できるようになりました。#31363 をクローズしました。#59088 (Shaun Struwig).
  • さまざまな種類の MergeTree テーブルをレプリケーション対応エンジンに自動変換する機能を実装しました。テーブルのデータディレクトリ (/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#60090 (Alexey Milovidov) 。
  • DNS の問題のデバッグに役立つ system.dns_cache テーブルを実装しました。新しいサーバー設定 dns_cache_max_size を追加しました。#60257 (Kirill Nikiforov).
  • merge テーブル関数が単一引数版 merge(['db_name', ] 'tables_regexp') に対応しました。#60372 (豪肥肥).
  • 負の位置引数をサポートしました。#57736 をクローズ。#58292 (flynn) 。
  • config で user キーを使用して、特定の S3 設定ごとに許可するユーザーのセットを指定できるようになりました。 #60144 (Antonio Andelic).
  • テーブル関数 mergeTreeIndex が追加されました。これは、MergeTree テーブルの索引ファイルおよびマークファイルの内容を表します。内部診断に使用できます。構文: mergeTreeIndex(database, table, [with_marks = true])。ここで database.table は、MergeTree エンジンを持つ既存のテーブルです。#58140 (Anton Popov).

実験的機能

  • Tukey のフェンスアルゴリズムを使用して時系列データの外れ値を検出する関数 seriesOutliersDetectTukey を追加しました。#58632 (Bhavna Jindal)。なお、この動作は次のパッチリリースで変更される予定です。
  • 各行について Variant 型の型名に対応する Enum を返す関数 variantType を追加しました。#59398 (Kruglov Pavel)。
  • 並列レプリカで 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 は、一時テーブル向けに送信される小さな block をまとめるために使用されます (アナライザ使用時のみ) 。#58916 (Nikolai Kochetov)。
  • 新しいレプリカの追加時または復旧時に、Replicated database で table を同時に作成できるようにしました。#59277 (Konstantin Bogdanov)。
  • Variant 値に対する比較 operator と、Variant カラムへの適切な Field の挿入を実装しました。デフォルトでは、類似した Variant 型を含む Variant type の作成は許可されません (設定 allow_suspicious_variant_types を有効にすると許可されます) 。#59996 をクローズしました。#59850 をクローズしました。#60198 (Kruglov Pavel)。
  • CTE を含む並列レプリカの JOIN を無効化しました (アナライザなし) 。#59239 (Raúl Marín)。

パフォーマンスの改善

  • 主キーのメモリ使用量が少なくなります。#60049 (Alexey Milovidov) 。
  • 主キーやそのほか一部の操作のメモリ使用量を改善しました。#60050 (Alexey Milovidov) 。
  • テーブルの主キーは、最初にアクセスされたときに遅延的にメモリへ読み込まれます。これは新しい MergeTree 設定 primary_key_lazy_load で制御され、デフォルトで有効です。これにはいくつかの利点があります: - 使用されないテーブルでは読み込まれません; - メモリが不足している場合、サーバー起動時ではなく初回使用時に例外が発生します。これにはいくつかの欠点もあります: - 主キー読み込みのレイテンシは、接続を受け付ける前ではなく最初のクエリ時に発生します; 理論上は、これによって thundering herd 問題が生じる可能性があります。これにより #11188 がクローズされます。 #60093 (Alexey Milovidov).
  • ベクトル検索で使用されるベクトル化距離関数。 #58866 (Robert Schulze).
  • ベクトル検索に役立つベクトル化関数 dotProduct#60202 (Robert Schulze) 。
  • dictGetOrDefault 関数に短絡評価を追加しました。#52098 をクローズしました。#57767 (jsc0218) 。
  • 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 型のパフォーマンスを向上させました (UInt8 とその他すべての整数型ではすでに実装されています) 。#59485 (Raúl Marín) 。
  • 分岐ミスを減らすことで、bigint 型および big decimal 型に対する条件付き sum/avg のパフォーマンスを最適化しました。 #59504 (李扬).
  • 進行中の mutation がある場合の 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 に 2 つ以上の分片 (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 を伴うクエリの最適化を無効にするためのもので、デバッグ用途でのみ必要です。#59705 (Maksim Kita)。実際にはそれだけでなく、パフォーマンスを犠牲にする代わりに、メモリ使用量を削減することもできます。
  • 設定 extract_kvp_max_pairs_per_rowextract_key_value_pairs_max_pairs_per_row に改名しました。この問題 (設定名に不要な略語が含まれていたこと) は、https://github.com/ClickHouse/ClickHouse/pull/43606 で持ち込まれました。この設定のドキュメントを修正しました。#59683 (Alexey Milovidov). #59960 (jsc0218).
  • DEFAULT または MATERIALIZED 式を持つカラムに対する ALTER COLUMN MATERIALIZE の実行が、セマンティクスにより正確に従うようになりました。#58023 (Duc Canh Le).
  • mutation 中にエラーが発生した場合の指数バックオフ ロジックを有効化しました。これにより、CPU 使用量、メモリ使用量、ログファイルのサイズが削減されます。 #58036 (MikhailBurdukov).
  • InitialQuery Profile Event をカウントできるよう改善しました。#58195 (Unalian) 。
  • storage_configurationvolume_priority を指定できるようになりました。#58533 (Andrey Zvonov).
  • T64 codec が 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 の場合、先頭に 0 が付いた数値は 8 進数として解釈されないようになりました。#59403 (Joanna Hulboj) 。
  • 起動時および設定ファイルが変更されるたびに、ClickHouse は total memory tracker のハードメモリ制限を更新します。これらの制限は、さまざまなサーバー設定と cgroups の制限 (Linux 上) に基づいて計算されます。以前は、/sys/fs/cgroup/memory.max (cgroups v2 用) がハードコードされていました。その結果、ネストされたグループ (階層) に対して設定された cgroup v2 のメモリ制限、たとえば /sys/fs/cgroup/my/nested/group/memory.max は無視されていました。これは修正されました。v1 のメモリ制限の動作は変更されていません。#59435 (Robert Schulze).
  • INSERT 時に PK/プロジェクション/セカンダリ索引の計算にかかる時間を把握するため、新しいプロファイルイベントが追加されました。#59436 (Nikita Taranov) 。
  • 作成時に設定 s3queue_last_processed_path を使って、Ordered モードの S3Queue の開始位置を指定できるようになりました。 #59446 (Kseniia Sumarokova).
  • システムテーブルのコメントも、clickhouse-localsystem.tables で参照できるようにしました。#59493 (Nikita Mikhaylov) 。
  • system.zookeeper table: これまでは結果全体をメモリに蓄積し、1つの大きな chunk として返していました。この変更により、system.zookeeper から多数の行を読み取る際のメモリ消費を削減できるほか、途中の Progress (これまでに何行読み取られたか) を表示できるようになり、結果セットが大きい場合に connection timeout に達するのを回避できます。#59545 (Alexander Gololobov).
  • ダッシュボードで、URL の #hash の圧縮・非圧縮の両方の状態を解釈できるようになりました (後方互換性) 。 #59124 の続きです。 #59548 (Amos Bird).
  • Intel QPL (DEFLATE_QPL codec で使用) を v1.3.1 から v1.4.0 に更新しました。あわせて、ポーリングのタイムアウト機構に関するバグも修正しました。一部のケースではタイムアウトが正しく機能しないことが確認されており、タイムアウトが発生すると、IAA と CPU がバッファを同時実行で処理してしまう可能性がありました。現時点では、IAA codec のステータスが QPL_STS_BEING_PROCESSED ではないことを確認してから、SW codec にフォールバックするようにしています。 #59551 (jasperzhu).
  • ClickHouse Cloud では、サーバーバージョンに関する警告を表示しません。ClickHouse Cloud ではシームレスなアップグレードが自動的に行われるためです。#59657 (Alexey Milovidov) 。
  • 自己展開後、一時バイナリはコピーされるのではなく移動されるようになりました。 #59661 (Yakov Olkhovskiy).
  • Apple macOS上でのスタックアンワインディングを修正しました。これにより、#53653 がクローズされます。 #59690 (Nikita Mikhaylov).
  • ユーザーが max_parser_depth 設定を非常に大きな値に誤設定していた場合でも、パーサーでスタックオーバーフローを検出するようにしました。これにより #59622 がクローズされます。 #59697 (Alexey Milovidov). #60434
  • Kafka ストレージにおいて、XML と SQL で作成された名前付きコレクションの動作を統一しました。#59710 (Pervakov Grigorii) 。
  • merge_max_block_size_bytes が十分に小さく、かつテーブルにサイズの大きい行 (文字列または Tuple) が含まれている場合、background merges が無限ループに陥ることがありました。この挙動は修正されました。https://github.com/ClickHouse/ClickHouse/pull/59340 のフォローアップです。#59812 (Nikita Mikhaylov).
  • CREATE TABLE で明示的に指定されている場合は、replica_path で uuid を許可する。 #59908 (Azat Khuzhin).
  • system.tables システムテーブルに、ReplicatedMergeTree テーブルの metadata_version カラムを追加しました。#59942 (Maksim Kita).
  • Keeperの改善: Prometheus向けに送信するメトリクス/イベントをKeeper関連のもののみにしました。#59945 (Antonio Andelic).
  • アップグレード後にシステムテーブルの構造が変わっても、ダッシュボードには異なる ClickHouse バージョン間のメトリクスが表示されます。 #59967 (Alexey Milovidov).
  • ファイルからAZ情報を読み込めるようになりました。 #59976 (Konstantin Bogdanov).
  • Keeper の改善: Disk 関連の操作が失敗した際の再試行を追加しました。#59980 (Antonio Andelic) 。
  • 新しい設定項目 backups.remove_backup_files_after_failure を追加: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>#60002 (Vitaly Baranov) 。
  • GCP が GATEWAY_TIMEOUT HTTP エラーコードで Internal Error を返した場合に備え、S3 ファイルの GCP フォールバックをバッファコピーに複製するようにしました。#60164 (Maksim Kita).
  • ULIDStringToDateTime の短絡実行をサポート。 #60211 (Juan Madurga).
  • テーブル system.backups および system.backup_logquery_id カラムが追加されました。error カラムにエラーのスタックトレースが追加されました。#60220 (Maksim Kita).
  • MySQLポート経由の接続では、QuickSightをそのまま利用できるよう、設定 prefer_column_name_to_alias = 1 が自動的に適用されるようになりました。また、設定 mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns もデフォルトで有効になり、これらも MySQL 接続にのみ影響します。これにより、より多くのBIツールとの互換性が向上します。#60365 (Robert Schulze).
  • JavaScript コード内のレースコンディションを修正し、チャートが同じ位置に重なって重複表示される問題を解消しました。#60392 (Alexey Milovidov) 。

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

  • introspection を用いたカバレッジ収集付きのビルドとテストを追加しました。#56102 の続きです。#58792 (Alexey Milovidov).
  • CMake のクロスコンパイル用 toolchain 変数が設定されている場合、corrosion-cmake の Rust toolchain を更新するようにしました。#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のダイジェスト計算を修正 #59439 (Antonio Andelic).
  • デバッグシンボルを含まないバイナリのスタックトレースを修正 #59444 (Azat Khuzhin).
  • カラム固有の設定における ASTAlterCommand::formatImpl を修正… #59445 (János Benjamin Antal).
  • アナライザでの SELECT * FROM [...] ORDER BY ALL を修正 #59462 (zhongyuankai).
  • 分散クエリのキャンセル時に発生する可能性がある未捕捉の例外を修正 #59487 (Azat Khuzhin).
  • MAX が複合型でも permutation と同じ規則に従うようにしました #59498 (Raúl Marín).
  • update_insert_deduplication_token_in_dependent_materialized_views を渡す際のコーナーケースを修正しました #59544 (Jordi Villar).
  • 空の値に対する arrayElement / map の不正な結果を修正 #59594 (Raúl Marín) 。
  • 空のステートをマージする際のtopKのクラッシュを修正 #59603 (Raúl Marín).
  • シャーディングキーが定数の分散テーブルを修正 #59606 (Vitaly Baranov).
  • WingFuzz が発見した KQL の問題を修正しました #59626 (Yong Wang).
  • AsynchronousBoundedReadBuffer の “Read beyond last offset” エラーを修正 #59630 (Vitaly Baranov).
  • RewriteSumFunctionWithSumAndCountVisitor で関数エイリアスを保持 #59658 (Raúl Marín).
  • 初回以外のクエリでクエリ開始時刻を修正 #59662 (Raúl Marín).
  • minmax スキッピングインデックスの引数の型を検証 #59733 (Anton Popov).
  • FixedString 入力での leftPad / rightPad 関数の不具合を修正 #59739 (Raúl Marín).
  • 関数 countMatches の AST fuzzer に関する問題を修正 #59752 (Robert Schulze).
  • RabbitMQ: ack も nack もされていないメッセージが発生する問題を修正 #59775 (Kseniia Sumarokova).
  • StorageURL でクエリ実行の一部が単一スレッドで行われてしまう問題を修正 #59833 (Michael Kolupaev) 。
  • S3Queue: 未初期化の値の問題を修正 #59897 (Kseniia Sumarokova).
  • 括弧で囲まれたパーティション式のパースを修正 #59901 (János Benjamin Antal).
  • HTTP 経由の JSONColumnsWithMetadata フォーマットで発生するクラッシュを修正 #59925 (Kruglov Pavel).
  • アナライザで返り値が異なる場合は、sum を count に書き換えない #59926 (Azat Khuzhin).
  • UniqExactSet の読み取り時に発生するクラッシュを修正 #59928 (Maksim Kita).
  • ReplicatedMergeTree における無効な metadata_version の修正 #59946 (Maksim Kita).
  • StorageDistributed のデータ競合を修正 #59987 (Nikita Taranov).
  • Docker: オプションが無効時ではなく有効時に init スクリプトを実行する #59991 (jktng).
  • SQLite への INSERT でシングルクォートを含む場合の問題を修正 (バックスラッシュではなくクォートでシングルクォートをエスケープするように変更) #60015 (Azat Khuzhin).
  • arrayFold の複数の論理エラーを修正しました #60022 (Raúl Marín).
  • optimize&#95;uniq&#95;to&#95;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 クエリの誤ったフォーマットを修正しました。これには、SYSTEM ... DROP FILESYSTEM CACHESYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEWSYSTEM ENABLE/DISABLE FAILPOINT が含まれます。パラメータ化された DDL クエリのフォーマットを修正しました。DESCRIBE FILESYSTEM CACHE クエリのフォーマットを修正しました。SET param_... (パラメータを設定するクエリ) の誤ったフォーマットを修正しました。CREATE INDEX クエリの誤ったフォーマットを修正しました。CREATE USER および類似のクエリで、フォーマットの不整合を修正しました。CREATE SETTINGS PROFILE のフォーマットの不整合を修正しました。ALTER ... MODIFY REFRESH の誤ったフォーマットを修正しました。frame オフセットが expression である場合の window functions のフォーマットの不整合を修正しました。operator を実装する関数 (plus など) の後で RESPECT NULLS および IGNORE NULLS を使用した場合のフォーマットの不整合を修正しました。SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM ... のひどいフォーマットを修正しました。GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS を含む無効なクエリで、フォーマットの不整合を修正しました。GRANT CURRENT GRANTS のフォーマットの不整合を修正しました。CREATE TABLE (... COLLATE) のフォーマットの不整合を修正しました。さらに、subqueries 内の EXPLAIN の誤ったフォーマットも修正しました (#60102) 。ラムダ関数の誤ったフォーマットを修正しました (#60012) 。今後こうしたひどいケースを見逃さないようにするための check を追加しました。#60095 (Alexey Milovidov)。
  • 副問い合わせ内の explain のフォーマットの不一致を修正 #60102 (Alexey Milovidov).
  • Nullable 使用時に発生する cosineDistance のクラッシュを修正 #60150 (Raúl Marín).
  • 文字列表現の bool を実際の bool 値にキャストできるようにしました #60160 (Robert Schulze).
  • system.s3queue_logの不具合を修正 #60166 (Kseniia Sumarokova).
  • Nullable な集約関数名に対する arrayReduce を修正 #60188 (Raúl Marín).
  • S3Queue の機密情報を隠す #60233 (Kseniia Sumarokova).
  • HTTP例外コードを修正しました。#60252 (Austin Kothig).
  • S3Queue: バグを修正 (不安定だった test_storage_s3_queue/test.py::test_shards_distributed も修正) #60282 (Kseniia Sumarokova).
  • IPv6対応のハッシュ関数で、未初期化値の使用と不正な結果を修正 #60359 (Kruglov Pavel).
  • null 引数での OptimizeDateOrDateTimeConverterWithPreimageVisitor を修正 #60453 (Raúl Marín).
  • KQL または PRQL dialect のクライアントから送信された分散テーブルクエリがレプリカで実行されなかった軽微な不具合を修正しました。#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 setting clean_deleted_rows は非推奨で、現在はまったく効果がありません。OPTIMIZE に対する CLEANUP キーワードは、デフォルトでは許可されなくなりました (allow_experimental_replacing_merge_with_cleanup が有効な場合を除く) 。#58316 (Alexander Tokmakov).
  • 関数 reverseDNSQuery は利用できなくなりました。これにより #58368 はクローズされます。#58369 (Alexey Milovidov).
  • 設定ファイル内のアクセス制御を改善するための各種変更を有効にしました。これらの変更は動作に影響するため、config.xmlaccess_control_improvements セクションを確認してください。判断に迷う場合は、設定ファイル内の値を前のバージョンのままにしておいてください。#58584 (Alexey Milovidov).
  • NaN 値に対する sumMapFiltered の動作を改善しました。NaN 値は今後、ランダムではなく末尾に配置され、他のどの値とも異なるものとして扱われます。-00 と等しいものとして扱われるようになりました。0 値は破棄されるため、-0 値も破棄されます。#58959 (Raúl Marín).
  • 関数 visibleWidth はドキュメントどおりに動作するようになります。以前のバージョンでは、lengthUTF8 関数と同様に、文字列のシリアライゼーション後のコードポイントを単純に数えるだけで、幅ゼロ文字、結合文字、全角文字、タブ、削除文字は考慮されていませんでした。今回、それに合わせて動作が変更されました。従来の動作を維持したい場合は、function_visible_width_behavior0 に設定するか、compatibility23.12 以下に設定してください。#59022 (Alexey Milovidov).
  • Kusto dialect は、次の 2 つの不具合が修正されるまで無効化されています: #59037 および #59036#59305 (Alexey Milovidov). Kusto を使用しようとすると、例外が発生します。
  • FINAL modifier のより効率的な実装では、max_threads = 1 の場合でも順序が保持される保証はなくなりました。従来の動作に依存していた場合は、enable_vertical_final を 0 に設定するか、compatibility23.12 に設定してください。

新機能

  • 他のデータ型のユニオンを表す Variant データ型を実装しました。型 Variant(T1, T2, ..., TN) は、この型の各行の値が T1T2、…、TN のいずれかの型、またはそのどれにも属さない (NULL 値) ことを意味します。Variant 型は、設定 allow_experimental_variant_type を有効にすると利用できます。Reference: #54864. #58047 (Kruglov 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();#55201 (Duc Canh Le).
  • quantileDD 集約関数、および対応する quantilesDDmedianDD を追加しました。これは DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf に基づいています。 ### ユーザー向け変更のドキュメント項目。 #56342 (Srikanth Chekuri).
  • 任意の種類のオブジェクトストレージを、任意の種類のメタデータ型で設定できるようにしました。 #58357 (Kseniia Sumarokova).
  • 非アクティブなレプリカを待たずに済む distributed_ddl_output_modenull_status_on_timeout_only_active および throw_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) 。
  • 出力圧縮レベルを変更するための 2 つの設定 output_format_compression_level と、出力の圧縮 method が zstd の場合に、圧縮ウィンドウサイズを明示的に設定し、zstd 圧縮の長距離モードを有効にするための output_format_compression_zstd_window_log が追加されました。これは INTO OUTFILE および table function 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 Client を導入: 1 つの binlog 接続で複数のデータベースに対応。 #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).
  • テーブルに紐付けられた materialized view の数を制限するため、max_materialized_views_size_for_table 設定を追加しました。 #58068 (zhongyuankai).
  • clickhouse-format の改善: VALUES を使用した INSERT クエリをサポートし、コメントのサポートを追加 (出力するには --comments を使用) 、さらに長いクエリのみを複数行で整形する --max_line_length オプションをサポートしました。 #58246 (vdimir).
  • clickhouse-local で、system.parts を含むすべてのシステムテーブルを Attach できるようになりました。これにより #58312 はクローズされます。#58359 (Alexey Milovidov).
  • 関数 transformEnum データ型がサポートされました。これにより #58241 がクローズされました。#58360 (Alexey Milovidov).
  • テーブル system.database_engines を追加しました。#58390 (Bharat Nallan) 。コードベース内でデータベースエンジンを個別に登録できるようにしました。#58365 (Bharat Nallan) 。インタープリタを個別に登録できるようにしました。#58443 (Bharat Nallan) 。
  • SYSTEM SYNC REPLICA LIGHTWEIGHT クエリに FROM <Replicas> 修飾子を追加しました。FROM 修飾子により、指定したソースレプリカに対する fetches と drop-ranges のみを待機対象とし、あわせて zookeeper に存在しないレプリカ、または source_replica が空のレプリカについても待機するようになります。#58393 (Jayme Bird).
  • 設定 update_insert_deduplication_token_in_dependent_materialized_views が追加されました。この設定により、依存する materialized view への insert 時に、table 識別子を使って挿入の重複排除トークンを更新できるようになります。#59165 をクローズしました。#59238 (Maksim Kita).
  • 非同期メトリクスを更新するステートメント SYSTEM RELOAD ASYNCHRONOUS METRICS を追加しました。主にテストや開発用途で役立ちます。 #53710 (Robert Schulze).

パフォーマンスの改善

  • 並列レプリカ向けの協調処理が、より高い並列性と cache の局所性を実現できるように書き直されました。数百のレプリカで線形なスケーラビリティを示すこともテストで確認されています。さらに、順序どおりの読み取りにも対応しました。 #57968 (Nikita Taranov).
  • HTTP の送信バッファリングを、ClickHouse ネイティブのバッファに置き換えました。インターフェイスごとのバイト数を計測するメトリクスを追加しました。 #56064 (Yakov Olkhovskiy).
  • uniqExact の大きな集約状態は、分散クエリで並列にマージされるようになりました。#59009 (Nikita Taranov).
  • MergeTree テーブルの読み取り後のメモリ使用量を削減。#59290 (Anton Popov) 。
  • 垂直マージにおけるメモリ使用量を低減。#59340 (Anton Popov).
  • より多くのケースで、Keeper の起動時に大量のメモリを消費しないようにしました。 #58455 (Antonio Andelic).
  • Keeper の改善: 保存済みノードに対する Keeper のメモリ使用量を削減。#59002 (Antonio Andelic) 。
  • cache により適した final の実装。挙動の変更に関する注意: 以前は、単一ストリームで読み取る FINAL 修飾子付きクエリ (例: max_threads = 1) では、ORDER BY 句を明示的に指定しなくても、ソート済みの出力が生成されていました。これは enable_vertical_final = true の場合は、もはや保証されません (これはデフォルトで true です) 。#54366 (Duc Canh Le).
  • たとえば S3 からの読み取りに使われる ReadBufferFromIStream で、余分なコピーを回避するようにしました。#56961 (Nikita Taranov) 。
  • 入力が Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal) の場合の array element function を最適化しました。従来の実装では、必要以上に多くの割り当てが発生していました。この最適化により、特に入力型が Array(Map) の場合、最大で約 6 倍の高速化が得られます。 #56403 (李扬).
  • compact パーツで1つのカラムから複数のサブカラムを読み取る際に、カラムを一度だけ読み込むようにしました。 #57631 (Kruglov Pavel).
  • sum(column + constant) 関数のASTを書き換えるようにしました。これはアナライザの最適化パスとして利用できます #57853 (Jiebin Sun).
  • 関数 match の評価で、skipping indices 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) 。
  • BMI2/SSE のインストリンシクスを用いて、フィルタの組み合わせ (多段階 PREWHERE など) を最適化しました #58800 (Zhiguo Zhou) 。
  • clickhouse-local で使用するスレッド数を1つ減らしました。#58968 (Alexey Milovidov) 。
  • Nullable 型の場合の multiIf 関数のパフォーマンスを改善しました。#57745 (KevinyhZou) 。
  • 未使用の jemalloc ページをパージするための SYSTEM JEMALLOC PURGE と、Profiler が有効な場合に jemalloc の profile を制御するための SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILE を追加しました。さらに、Keeper に jemalloc 関連の 4LW コマンドも追加しました。jmst は jemalloc の統計をダンプし、jmfpjmepjmdp は、Profiler が有効な場合に jemalloc の profile を制御します。#58665 (Antonio Andelic).
  • S3 へのバックアップ時のメモリ消費量を削減。 #58962 (Vitaly Baranov).

改善

  • システムテーブルのすべてのカラムにコメント (簡単な説明) を追加しました。これにはいくつか理由があります: - システムテーブルは頻繁に使われますが、特定のカラムの役割や意味を開発者が理解するのが非常に難しいことがあります。 - システムテーブルは頻繁に変更されており (新しいものの追加や既存のものの変更) 、そのドキュメントは常に古くなりがちです。たとえば、system.parts のドキュメントページを見てください。多くのカラムが抜けています - 将来的には、ClickHouse から直接ドキュメントを生成できるようにしたいと考えています。 #58356 (Nikita 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 をクローズしました。#57603 (Nikolay Degterinsky).
  • ファイルシステムキャッシュでは load_metadata_threads を 16 に増やしました。これにより、サーバーの起動が速くなります。#57732 (Alexey Milovidov).
  • マージ/ミューテーションのスロットリング機能を追加 (max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server)。#57877 (Azat Khuzhin).
  • system table system.server_settings にある未文書化の (boolean) カラム is_hot_reloadable は、設定可能な値 NoYesIncreaseOnlyDecreaseOnly を持つ (Enum8) カラム changeable_without_restart に置き換えられました。あわせて、このカラムの説明も追加されました。#58029 (skyoct).
  • Cluster discovery でユーザー名とパスワードを設定できるようになり、#58063 をクローズしました。#58123 (vdimir).
  • ALTER TABLE ... PART でクエリパラメータをサポートするようになりました。 #58297 (Azat Khuzhin).
  • Kafkaテーブル用のコンシューマーをオンデマンドで作成するようにしました (ただし、最後に使用されてから一定期間は kafka_consumers_pool_ttl_ms に従って保持されます) 。これにより、system.kafka_consumers の統計に関する問題 (Kafkaテーブルを誰も読み取っていない場合はコンシュームが行われず、その結果、継続的なメモリリークやテーブルの detach の遅延につながる) が修正されるはずです。また、この PR により、system.kafka_consumers の統計が再びデフォルトで有効になります。#58310 (Azat Khuzhin).
  • sparkBarsparkbar のエイリアスとしました。 #58335 (凌涛).
  • GCS へのアップロード後に ComposeObject リクエストを送信しないようにしました。#58343 (Azat Khuzhin) 。
  • 設定XMLにおいて、名前にドットを含むキーを正しく処理するようにしました。 #58354 (Azat Khuzhin).
  • 関数 format が、定数引数に対して定数を返すようにしました。これにより #58355 をクローズします。#58358 (Alexey Milovidov).
  • 設定 max_estimated_execution_time を追加し、max_execution_timemax_estimated_execution_time を区別できるようにしました。#58402 (Zhang Yifan) 。
  • 無効なデータベースエンジン名が使用された際に、ヒントを表示するようにしました。#58444 (Bharat Nallan).
  • Arrow Dictionary 内の索引型をより適切に制御できるよう、設定を追加しました。Arrow の推奨に従い、デフォルトでは索引に符号付き整数型を使用します。#57401 をクローズしました。#58519 (Kruglov Pavel).
  • Docker イメージの実行時に CLICKHOUSE_PASSWORD_FILE 環境変数をサポートする #58575 を実装しました。#58583 (Eyal 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 カラムと定数文字列を比較する際、文字列を Float64 ではなく Float32 として読み取るようにした。 #58724 (Raúl Marín).
  • S3との互換性を改善し、ECloud EOSストレージのサポートを追加しました。 #58786 (xleoken).
  • KILL QUERY でバックアップ / 復元をキャンセルできるようになりました。この PR により、実行中のバックアップと復元が system.processes に表示されるようになりました。また、サーバー構成に新しい設定 shutdown_wait_backups_and_restores (default=true) も追加されました。これにより、サーバーのシャットダウン時に、実行中のすべてのバックアップと復元の完了を待つか、それらを単にキャンセルするかを選べるようになりました。#58804 (Vitaly 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とテーブルを同じ名前で作成しようとして競合した場合の例外メッセージを改善。 #58841 (Yarik Briukhovetskyi).
  • カスタム (SQL から作成された) ディスクについては、サーバー設定で filesystem_caches_path (すべてのファイルシステムキャッシュに共通のディレクトリプレフィックス) または custom_cached_disks_base_directory (カスタムディスクから作成されたファイルシステムキャッシュのみに共通のディレクトリプレフィックス) のいずれかが指定されていることを確認してください。カスタムディスクでは custom_cached_disks_base_directoryfilesystem_caches_path より優先され、前者がない場合は後者が使用されます。ファイルシステムキャッシュ設定の path はそのディレクトリ内になければならず、そうでない場合は例外がスローされ、ディスクは作成されません。これは古いバージョンで作成され、その後サーバーがアップグレードされたディスクには影響しません。この場合、サーバーが正常に起動できるよう、例外はスローされません。custom_cached_disks_base_directory は、デフォルトのサーバー設定に /var/lib/clickhouse/caches/ として追加されました。#57825 をクローズしました。#58869 (Kseniia Sumarokova) 。
  • MySQL インターフェイスで SHOW WARNINGS/SHOW COUNT(*) WARNINGS クエリとの互換性が追加されましたが、返される結果は常に空の結果セットです。#58929 (Serge Klochkov) 。
  • 並列分散 INSERT SELECT の実行時に、使用できないレプリカをスキップするようになりました。#58931 (Alexander Tokmakov).
  • jsonで構造化ログのフォーマットを有効にした際に、単語で表した説明的なログレベルを表示するようにしました。#58936 (Tim Liou).
  • MySQL インターフェイスで、データ型の別名として Int64 に SIGNED、UInt64 に UNSIGNED を指定し、CAST(x AS SIGNED) および CAST(x AS UNSIGNED) ステートメントをサポートするようになりました。これにより、Looker Studio などの BI ツールとの互換性が向上します。 #58954 (Serge Klochkov).
  • Dockerコンテナー内で、作業ディレクトリをデータパスに変更しました。 #58975 (cangyin) 。
  • Azure Blob Storage向けの設定 azure_max_unexpected_write_error_retries を追加しました。これは、設定ファイルの azure セクションでも設定できます。#59001 (SmitaRKulkarni).
  • 破損したデータレイクテーブルがあってもサーバーを起動できるようにしました。#58625 をクローズしました。#59080 (Kseniia Sumarokova).
  • Iceberg テーブルエンジンでスキーマの進化を無視し、テーブル作成時にユーザーが指定したスキーマ、またはテーブル作成時にメタデータから解析された最新のスキーマを使用して、すべてのデータを読み取れるようになりました。これは、デフォルトで無効になっている設定 iceberg_engine_ignore_schema_evolution によって制御されます。この設定を有効にすると、スキーマが進化した場合でもすべての data files が同じスキーマで読み取られるため、結果が不正確になる可能性がある点に注意してください。#59133 (Kruglov Pavel).
  • read-only/write-once ストレージでの変更操作 (INSERT/ALTER/OPTIMIZE/…) を、適切な TABLE_IS_READ_ONLY エラーで禁止するようにしました (不要な残骸を避けるため) 。CREATE/ATTACH 時に、write-once disk (format_version.txt) に残骸が残らないようにしました。ReplicatedMergeTree に対する DROP を無視するようにしました (MergeTree と同様) 。s3_plain の走査処理 (MetadataStorageFromPlainObjectStorage::iterateDirectory) を修正しました。read-only は web disk、write-once は s3_plain である点に注意してください。#59170 (Azat Khuzhin).
  • 複雑なALTERmergeの組み合わせにおいて論理エラーを引き起こす可能性があった、実験的な_block_numberカラムの不具合を修正しました。#56202 を修正します。#58601 を置き換えます。#59295 (alesapin).
  • JSON 内で返された例外を Play UI が認識できるようになりました。#52853 への対応。#59303 (Alexey Milovidov).
  • /binary HTTPハンドラーでは、クエリ文字列で user、host、および必要に応じて password を指定できるようになりました。#59311 (Alexey Milovidov) 。
  • 圧縮されたインメモリtableのbackupsをサポートしました。これにより #57893 がクローズされました。#59315 (Alexey Milovidov).
  • BACKUP および RESTORE クエリで FORMAT 句がサポートされるようになりました。#59338 (Vitaly Baranov) 。
  • 関数 concatWithSeparator は、任意の型の引数をサポートするようになりました (これまでは String および FixedString 型の引数のみをサポートしていました) 。たとえば、SELECT concatWithSeparator('.', 'number', 1)number.1 を返すようになりました。#59341 (Robert Schulze).

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

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

バグ修正 (正式な安定版リリースでユーザーに影響する不具合)

  • ネストされた LowCardinality に対する結合キーの変換を追加 #51550 (vdimir).
  • flatten_nested=1 の場合、すべての Array(Tuple) ではなく、本来の Nested 型のみをフラット化 #56132 (Kruglov Pavel).
  • projections と、挿入時の aggregate_functions_null_for_empty 設定に関するバグを修正しました。#56944 (Amos Bird) 。
  • 古い profile UUID が原因で発生する可能性のある例外を修正しました #57263 (Vasily Nemkov).
  • StreamingFormatExecutor における読み取りバッファ処理を修正 #57438 (Kruglov Pavel).
  • ビューへのプッシュ時に、ターゲットテーブルが削除された MV は無視する #57520 (Kruglov Pavel).
  • ALTER_METADATA と MERGE_PARTS の間で発生しうる競合状態を解消しました #57755 (Azat Khuzhin).
  • ROLLUP を伴う GROUP BY における式の順序の不具合を修正 #57786 (Chen768959).
  • 廃止された “zero-copy” レプリケーション機能に関する修正: 壊れたデタッチされたパーツを持つレプリカを削除したあとにブロブが失われる問題を修正 #58333 (Alexander Tokmakov).
  • user_files_path でユーザーがシンボリックリンクを使用できるようにしました #58447 (Duc Canh Le).
  • Graphite テーブルに agg 関数がない場合に発生するクラッシュを修正 #58453 (Duc Canh Le).
  • materialized view で複数回読み取れるようにするため、StorageKafka からの読み取りを遅延 #58477 (János Benjamin Antal).
  • 交差するパーツが発生する厄介なケースを修正 #58482 (Alexander Tokmakov).
  • LIMIT のみのクエリでは MergeTreePrefetchedReadPool を無効化 #58505 (Maksim Kita).
  • 復元中に通常のデータベースを有効にする #58520 (Jihyuk Bok).
  • Apache Hive における ORC/Parquet/… の読み取り用 threadpool を修正 #58537 (sunny).
  • system.backup_logbase_backup_name カラム内の認証情報を非表示にする #58550 (Daniel Pozo Escalona).
  • ミリ秒・マイクロ秒の値の丸めにおける toStartOfInterval #58557 (Yarik Briukhovetskyi).
  • ConcurrentHashJoin における max_joined_block_rows を無効化 #58595 (vdimir).
  • 旧アナライザでのNullableを使ったjoinを修正 #58596 (vdimir).
  • makeDateTime64: 非定数の fraction 引数を許可 #58597 (Robert Schulze).
  • インラインフレームのシンボル化中に起こりうるNULLポインタ逆参照を修正 #58607 (Azat Khuzhin).
  • ユーザーの再作成時やロール切り替え時におけるクエリキャッシュエントリの分離を改善 #58611 (Robert Schulze).
  • プロジェクション最適化時に壊れていたパーティションキーの解析を修正 #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での複数読み取りファイルログストレージ #58877 (János Benjamin Antal).
  • S3 のアクセスキー ID に関する制限。#58900 (MikhailBurdukov) 。
  • 候補の読み込み中に clickhouse-local で発生する可能性があるクラッシュを修正 #58907 (Kruglov Pavel).
  • indexHint 使用時に発生するクラッシュを修正 #58911 (Dmitry Novik).
  • サーバーの再起動時に StorageURL がヘッダー情報を保持しない問題を修正 #58933 (Michael Kolupaev).
  • アナライザ: 挿入ブロックでのストレージ置換を修正 #58958 (Yakov Olkhovskiy).
  • ReadBufferFromZipArchive の seek の不具合を修正 #58966 (Michael Kolupaev) 。
  • 実験的な転置索引の修正 (本番環境では使用しないでください) : 転置索引に対する DROP INDEX で、永続ストレージから関連するすべてのファイルが削除されるようになりました #59040 (mochi).
  • query_factories_info におけるデータ競合を修正 #59049 (Kseniia Sumarokova).
  • “Too many redirects” エラー時の再試行を無効化 #59099 (skyoct).
  • 未起動のデータベースのシャットダウン時に発生するデッドロックを修正 #59137 (Sergei Trifonov).
  • 修正: 分散クエリにおける LIMIT BY と LIMIT の不具合 #59153 (Igor Nikonov).
  • toString で Nullable な timezone によって発生するクラッシュを修正 #59190 (Yarik Briukhovetskyi).
  • 不正なファイルパスに起因するIcebergメタデータの異常終了を修正 #59275 (Kruglov Pavel).
  • Rustターゲットの選択時のアーキテクチャ名を修正 #59307 (p1rattttt).
  • IN 句内のサブクエリを使って system.tables をクエリする際の「not-ready set」に関する論理エラーを修正しました。#59351 (Nikolai Kochetov).
最終更新日 2026年6月10日