目次
ClickHouse リリース v24.11、2024-11-26
ClickHouse リリース v24.10、2024-10-31
ClickHouse リリース v24.9、2024-09-26
ClickHouse リリース v24.8 LTS、2024-08-20
ClickHouse リリース v24.7、2024-07-30
ClickHouse リリース v24.6、2024-07-01
ClickHouse リリース v24.5、2024-05-30
ClickHouse リリース v24.4、2024-04-30
ClickHouse リリース v24.3 LTS、2024-03-26
ClickHouse リリース v24.2、2024-02-29
ClickHouse リリース v24.1、2024-01-30
2023年の変更履歴
ClickHouse リリース 24.12、2024-12-19。 プレゼンテーション、ビデオ
後方互換性を持たない変更
- 関数
greatestとleastは、以前は引数のいずれかが NULL の場合に NULL を返していましたが、現在は NULL の入力値を無視するようになりました。たとえば、SELECT greatest(1, 2, NULL)は 2 を返すようになっています。これにより PostgreSQL との互換性は確保されますが、一方で NULL を返す MySQL との互換性は失われます。以前の動作を維持するには、設定least_greatest_legacy_null_behavior(デフォルト:false) をtrueに設定してください。#65519 #73344 (kevinyhzou). - 新しい MongoDB インテグレーションがデフォルトになりました。従来の MongoDB ドライバー (Poco ドライバー ベース) を使用したいユーザーは、サーバー設定
use_legacy_mongodb_integrationを有効にできます。#73359 (Kirill Nikiforov.
新機能
JSON/Dynamic/Variant型を実験的機能からベータへ移行しました。#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 つの代替手段 (directとhash) も引き続き検討されます。#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.tablesにtotal_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_fields、http_max_field_name_size、http_max_field_value_sizeを追加し、バックアップの作成時または復元時に S3 API のレスポンスをパースする際にこれらを使用するようにしました。#72778 (Vitaly Baranov). - このメタデータを使用する最後のテーブルが削除された後にのみ、Storage S3(Azure)Queue の keeper 内のテーブルメタデータを削除するようにしました。#72810 (Kseniia Sumarokova).
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCountprofile events を追加しました。#72842 (Vladimir Cherkasov) 。- MergeTree のソートキーおよびスキップ索引でサブカラムをサポートしました。 #72644 (Pavel Kruglov).
バグ修正 (公式安定版リリースでユーザーに影響する不具合)
- MergeTree で発生する可能性がある交差するパーツを修正しました (オブジェクトストレージ上の操作が原因で、パーツをデタッチされたディレクトリに移動する処理が失敗した後に発生する可能性があります) 。#70476 (Azat Khuzhin) 。
- テーブル名が長すぎる場合のエラー検出を修正しました。最大長を示す診断メッセージを追加しました。新しい関数
getMaxTableNameLengthForDatabaseを追加しました。 #70810 (Yarik Briukhovetskyi). clickhouse-library-bridgeのクラッシュ後にゾンビプロセスが残ってしまう問題を修正しました (このプログラムは安全でないライブラリを実行するためのものです) 。#71301 (MikhailBurdukov).plain_rewritabledisk でディレクトリの作成に失敗した場合に、トランザクションのロールバック中に NoSuchKey error が発生する問題を修正しました。#71439 (Julia Kartseva) 。PrettyJSON フォーマットでの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_hashJOIN メソッドで、ON句に不等式フィルターを含む複雑な条件があるクエリで発生する可能性があったバグを修正しました。#72993 (Nikita Taranov) 。- JSON のパース時にデフォルトのフォーマット設定を使用し、デシリアライズの不具合を防止します。#73043 (Pavel Kruglov).
- 未対応のストレージでのトランザクションによりクラッシュする問題を修正しました。 #73045 (Raúl Marín).
- メモリ追跡が過大に見積もられる可能性がある問題を修正しました (
MemoryTrackingとMemoryResidentの差が増え続ける場合) 。#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_seriesとgenerateSeriesを削除しました。これらは #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におけるEnum、UInt128、UInt256argument のサポートを削除しました。また、deltaSumTimestampの 2 番目の (“timestamp”) argument について、Int8、UInt8、Int16、UInt16のサポートも削除しました。#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]Cluster、deltaLakeCluster、hudiClusterの 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).
- 新しい関数
parseDateTime64、parseDateTime64OrNull、parseDateTime64OrZeroを追加しました。既存のparseDateTime関数 (およびその派生) と比べて、これらはDateTimeではなくDateTime64型の値を返します。 #71581 (kevinyhzou).
パフォーマンス向上
- パーツで粒度が一定の場合の、索引粒度の値に対するメモリ使用量を最適化しました。パーツで常に一定の粒度を選択できるようにする機能 (設定
use_const_adaptive_granularity) を追加しました。これにより、メモリ使用量を常に最適化しやすくなります。これは、大規模なワークロード (共有ストレージに数兆行ある場合) において、データパーツのメタデータ (索引粒度の値) によるメモリ使用量の増加を抑えるのに役立ちます。#71786 (Anton Popov). - 並列処理のためにスレッド間へ分配する際、
join_algorithm = 'parallel_hash'では入力ブロックのカラムをコピーしないようになりました。#67782 (Nikita Taranov) 。 - 交差のないパーツ向けに
Replacingmergeアルゴリズムを最適化しました。#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に、別名anyRespectNulls、firstValueRespectNulls、anyValueRespectNullsを追加しました。さらに、集約関数anyLastに対して、別名anyLastRespectNullsとlastValueRespectNullsも追加しました。これにより、たとえば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で、デフォルトでAtomicdatabase を使用するようにしました。#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 FILLでIGNORE/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_conditionsをfalseに設定することで無効にできます。#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ý)。
パフォーマンス向上
- パフォーマンス向上のため、
IDiskとIObjectStorageをリファクタリングしました。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 ttlでttl_only_drop_partsが尊重されるようになりました。必要なカラムだけを読み込んで有効期限 (TTL) を再計算し、パーツを空のパーツに置き換えることで削除します。#65488 (Andrey Zvonov).- ロック競合を最小限に抑えるため、ThreadPool におけるスレッド作成を最適化しました。高負荷時のジョブスケジューリングやスレッド管理の遅延を回避するため、スレッド作成はクリティカルセクションの外で行われるようになりました。これにより、高い同時実行負荷がかかった状況でも ClickHouse の応答性が大幅に向上します。#68694 (filimonov).
ORCからLowCardinality文字列カラムを読み込めるようになりました。#69481 (李扬) 。part_log、query_views_log、filesystem_cache_logなどのシステムログでは、ProfileEventsにLowCardinalityを使用します。#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 KEY、ORDER 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_analyzerがtrueに設定されている場合、定数式の計算には常に新しいアナライザを使用します。定数式の計算に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 TABLEのPART修飾子が、クライアントで誤ってフォーマットされていました。#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_policyとdiskの両方が設定されているかどうかを確認するチェック。disk設定を使用している場合に、新しいストレージポリシーが古いストレージポリシーと互換性があるかどうかを確認するチェックを追加しました。#70839 (Kirill). system.s3_queue_settingsとsystem.azure_queue_settingsを追加。 #70841 (Kseniia Sumarokova).- 関数
base58Encodeとbase58Decodeが、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を追加しました。これはSimplemerge selector よりも性能が劣ります。#70969 (Alexey Milovidov) 。 - アトミックな
CREATE OR REPLACE VIEWのサポート。 #70536 (tuanpach) - 1 つのイベントが複数の条件に一致する場合でも同じイベントを複数回カウントしないよう、集約関数
windowFunnelにstrict_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) 。 useDefaultImplementationForLowCardinalityColumnsがtrueを返すようにオーバーライドし、LowCardinalityカラムでのgetSubcolumnを修正しました。#69831 (Miсhael Stetsyuk) 。- 分散テーブルのDROPに失敗した場合に、分散送信が恒久的にブロックされる不具合を修正しました。#69843 (Azat Khuzhin) 。
- NaN キーを含む WITH FILL 句付きクエリがキャンセルできない問題を修正しました。これにより #69261 をクローズしました。#69845 (Alexey Milovidov).
- 古い互換性設定値が使われている場合のアナライザのデフォルトを修正しました。 #69895 (Raúl Marín).
- 古いテーブルをDROPする際、CREATE OR REPLACE VIEW で依存関係をチェックしないようにしました。これまでは、再作成されるビューに依存するテーブルがあると、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_threads_numが有効にならない問題を修正しました。#70837 (Kseniia Sumarokova). - 集約状態内の named tuple 引数を正規化しました。これにより #69732 が修正されました。 #70853 (Amos Bird).
- 二段階ハッシュテーブルにおいて、負のゼロが原因で発生していた論理エラーを修正しました。これにより #70973 はクローズされます。#70979 (Alexey Milovidov).
- 分散環境および並列レプリカでの
limit by、limit 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-clientとclickhouse-localの対話型モードで、Tupleデータ型が Pretty 形式で出力されます。以前のバージョンでは、この設定はDESCRIBEクエリとtoTypeNameにのみ適用されていました。これにより #65753 がクローズされます。#68492 (Alexey Milovidov). Replicateddatabase で 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). - 関数
arrayとmapを最適化し、よくある一部のケースを大幅に高速処理できるようにしました。 #67707 (李扬). - 特にカラムに NULL が含まれない場合の ORC 文字列読み取りについて、軽微な最適化を行いました。 #67794 (李扬).
- マージ処理の各ステップのスケジューリングに伴うオーバーヘッドを削減し、マージ全体の性能を改善しました。 #68016 (Anton Popov).
- プロファイルが設定されておらず、認証情報も設定されておらず、さらに IMDS が利用できない場合 (たとえば、クラウド外のマシンから公開バケットをクエリする場合) の S3 へのリクエストを高速化しました。これにより #52771 をクローズします。 #68082 (Alexey Milovidov).
RowInputFormatWithNamesAndTypesのフォーマットリーダーで仮想呼び出しを排除し、性能を改善しました。 #68437 (李扬).- CPU 使用率を最大化するため、キーで group by して集約する際に
uniqaggregate 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). - 関数
upperUTF8とlowerUTF8は、これまでキリル文字しか大文字 / 小文字に変換できませんでした。この制限は解消され、任意の言語の文字を大文字 / 小文字に変換できるようになりました。例:SELECT upperUTF8('Süden')はSÜDENを返すようになりました。#65761 (李扬). - プロジェクションを含むテーブルで論理削除が発生する場合、これまでは、論理削除の実行時に例外を発生させる (デフォルト) か、プロジェクションを削除するかのいずれかを選択できましたが、新たに、論理削除をそのまま実行したうえで後からプロジェクションを再構築するという第3の選択肢が追加されました。#66169 (jsc0218).
- 接続に使用する IP ファミリーを制限できるように、2 つのオプション (
dns_allow_resolve_names_to_ipv4とdns_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). dateTruncとtoStartOfIntervalがDate32をサポート。 #68874 (LiuNeng).system.processors_profile_logにplan_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_null、restore_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).
gcstable 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).
- 関数
sipHash64Keyed、sipHash128Keyed、または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_ERRORDuplicate 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 をクローズしました。
crossjoin で結合済みデータの再利用を試みることはありますが、現時点の ClickHouse ではその状況は発生しません。そのため、reuseJoinedDataにhave_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-clientとclickhouse-localのデフォルトが、単一クエリモードではなくマルチクエリモードになりました。たとえば、clickhouse-client -q "SELECT 1; SELECT 2"がそのまま動作するようになり、以前のように--multiquery(または-n) を追加する必要はありません。--multiquery/-nスイッチは廃止されました。マルチクエリのステートメント内の INSERT クエリは、FORMAT 句に応じて特別に扱われます。FORMAT がVALUES(最も一般的なケース) の場合、INSERT ステートメントの終端はクエリ末尾のセミコロン;です。それ以外の FORMAT (CSVやJSONEachRowなど) の場合、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). File、URL、S3、AzureBlobStorage、HDFSなどの各種エンジンで Hive スタイルのパーティション化を解釈できるようになりました。Hive スタイルのパーティション化では、データをパーティション化されたサブディレクトリに整理するため、大規模なデータセットのクエリや管理を効率化できます。現時点では、適切な名前とデータを持つ仮想カラムが作成されるだけです。後続の PR では、適切なデータフィルタリング (パフォーマンス向上) が導入されます。#65997 (Yarik Briukhovetskyi).- Spark との互換性のために
printf関数を追加しました (既存のformat関数も利用できます) 。 #66257 (李扬). - テストに役立つよう、外部エンジンと external table_functions を
Nullエンジンに置き換えるためのオプションrestore_replace_external_engines_to_nullとrestore_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_rewritabledisk のディレクトリメタデータを、object storage 内の MergeTree データとは分離して__metalayout に保存するようにしました。あわせて、plain_rewritabledisk をフラットなディレクトリ構造に移行しました。#65751 (Julia Kartseva).- すべての サブカラムs に必要なメモリを事前に確保することで、
String/Array/Map/Variant/Dynamictypes に対するカラムをまとめる処理 (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-aliveHTTPconnection では、これは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_zoneをinput_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
KeeperOutstandingRequetsはKeeperOutstandingRequestsにリネームされました。#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 関数
changeYear、changeMonth、changeDay、changeHour、changeMinute、changeSecondを追加しました。たとえば、SELECT changeMonth(toDate('2024-06-14'), 7)は日付2024-07-14を返します。 #63186 (cucumber95). - 起動時に事前設定されたクエリを実行できる起動スクリプトを導入しました。 #64889 (pufit).
- 自己署名証明書を使用するサーバーへセキュア TCP 経由でクライアントが接続できるようにするため、クライアント設定の
accept_invalid_certificateをサポートしました。これは、対応するopenSSLクライアント設定verificationMode=none+invalidCertificateHandler.name=AcceptCertificateHandlerの簡略指定として使用できます。 #65238 (peacewalker122). system.errorsテーブルの 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).
- パターンが自明、つまりメタ文字、パターンクラス、フラグ、グループ化文字などを含まない場合、関数
replaceRegexpAllとreplaceRegexpOneが大幅に高速化されました。 (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レイヤーでは、
certificateFileとprivateKeyFileの各パラメータのみを受け付けていました。 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_commit、s3queue_max_processed_rows_before_commit、s3queue_max_processed_bytes_before_commit、s3queue_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_sizeとcompiled_expression_cache_elements_sizeが、system.server_settingsに表示されるようになりました。#65584 (Robert Schulze) 。 - x509 SubjectAltName 拡張機能に基づくユーザー識別をサポートしました。#65626 (Anton Kozlov) 。
clickhouse-localは、設定ファイルのmax_server_memory_usageとmax_server_memory_usage_to_ram_ratioを尊重します。また、clickhouse-serverと同様に、デフォルトで最大メモリ使用量をシステムメモリの 90% に設定します。#65697 (Alexey Milovidov).- ファイルをClickHouseにバックアップするためのスクリプトを追加しました。#65699 (Alexey Milovidov) 。
- クエリのキャンセルに対応した PostgreSQL ソース。 #65722 (Maksim Kita).
- 分散クエリにおいて、
allow_experimental_analyzerがイニシエーターによって制御されるようにしました。これにより、バージョンが混在するクラスターでの運用時の互換性と正しさが確保されます。#65777 (Nikita Mikhaylov) 。 - Keeper で cgroup の CPU 制限が考慮されるようになりました。 #65819 (Antonio Andelic).
- 空の引数でも
concat関数を使用できるようになりました:) select concat();。 #65887 (李扬). clickhouse-localで named collections を制御可能にしました。#65973 (Alexey Milovidov) 。- Azure 関連のプロファイルイベントを改善。#65999 (alesapin) 。
- 書き込み時のタイムゾーンに基づく ORC ファイルの読み取りをサポートしました。#66025 (kevinyhzou).
- PostgreSQL への接続を制御するための設定を追加しました。設定
postgresql_connection_attempt_timeoutは、接続 URL のconnect_timeoutパラメーターに渡す値を指定します。設定postgresql_connection_pool_retriesは、PostgreSQL エンドポイントへの接続確立を試みる再試行回数を指定します。 #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) 。
- ダイレクトクエリまたは
Dictionarytable engine 経由で Dictionary にアクセスする場合、dictGet権限が必要になりました。#65359 (Joe Lynch). - 増分バックアップにおけるユーザー固有のS3認証を修正。#65481 (Antonio Andelic) 。
read-in-order最適化が有効な場合、FINALを含むクエリではnon-intersecting-parts最適化を無効化しました。これにより、クエリ結果が不正になる可能性がありました。回避策として、この修正がマージされるまで、do_not_merge_across_partitions_select_finalとsplit_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).
- 関数
bitTest、bitTestAll、bitTestAnyは、指定したビット位置が範囲外の場合にエラーを返すようになりました #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_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_modeのnone_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::insertManyFromでcolumn_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). MergeTreetable では、settingreplace_long_file_name_to_hashがデフォルトで enabled になりました。#64457 (Anton Popov). この setting は完全に互換性があるため、upgrade 時に必要な actions はありません。新しい data フォーマットは 23.9 以降のすべての version でサポートされています。この setting を有効にすると、23.8 以前の version には downgrade できなくなります。- 一部の無効なクエリは、より早い段階のパース時に失敗するようになります。注: 文字列リテラルなしでインライン KQL 式 (experimental な Kusto 言語) を
kqltable function に渡した場合のサポートを無効にしました。たとえばkql('garbage | trash')やkql($$garbage | trash$$)ではなく、kql(garbage | trash)とした場合です。この機能は意図せず導入されたものであり、本来存在すべきではありません。#61500 (Alexey Milovidov). - storage
S3QueueのOrderedモードにおける並列 processing を見直しました。この PR は、s3queue_processing_threads_numまたはs3queue_total_shards_numsetting を使用していた場合、Ordered モードでは後方互換性がありません。settings3queue_total_shards_numは削除されました。以前はs3queue_allow_experimental_sharded_modeの下でのみ使用可能でしたが、これは現在非推奨です。新しい設定としてs3queue_bucketsが追加されました。#64349 (Kseniia Sumarokova). - 新しい関数
snowflakeIDToDateTime、snowflakeIDToDateTime64、dateTimeToSnowflakeID、dateTime64ToSnowflakeIDが追加されました。既存の関数snowflakeToDateTime、snowflakeToDateTime64、dateTimeToSnowflake、dateTime64ToSnowflakeとは異なり、新しい関数は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 は非推奨となり、移行期間後に削除されます。引き続き使用する場合は、settingallow_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_throwとmax_database_num_to_throwを追加しました。#64781 (Xu Jia) 。- file系ストレージ (s3/file/hdfs/url/azureBlobStorage) に
_time仮想カラムを追加しました。#64947 (Ilya Golshtein) 。 - 新しい関数
base64URLEncode、base64URLDecode、tryBase64URLDecodeを追加しました。#64991 (Mikhail Gorshkov) 。 - 2 つの UTF8 文字列間の編集距離を計算する新しい関数
editDistanceUTF8を追加しました。#65269 (LiuNeng) 。 - カスタムHTTPハンドラーでカスタムレスポンスヘッダーをサポートする
http_response_headers設定を追加しました。#63562 (Grigorii) 。 - クエリ結果を無限ループで返せるようにする新しいテーブル関数
loopが追加されました。#63452 (Sariel)。これはテストに便利です。 system.query_logに、used_privilegesとmissing_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_lowerとparallel_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::filterのisDefaultへの冗長な呼び出しを減らし、パフォーマンスを向上。 #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_insertとmaterialize_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
IOUringSQEsResubmitsをIOUringSQEsResubmitsAsyncに改名し、新たにIOUringSQEsResubmitsSyncを追加しました。#63699 (Tomer Shafir). - メタデータストレージ用ディスクの空き容量を確保するための新しい設定
metadata_keep_free_space_bytesが追加されました。#64128 (MikhailBurdukov). plain_rewritableメタデータストレージが作成・削除したディレクトリ数と、ローカルからリモートへのインメモリマップ内のエントリ数を追跡するメトリクスを追加しました。#64175 (Julia Kartseva) 。- query cache では、同一のクエリでも設定が異なる場合は別のクエリとして扱われるようになりました。これにより、異なる設定 (たとえば
limitやadditional_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_mtとgenerateRandomに関する進捗レポートを改善しました。#64804 (Raúl Marín) 。- サンプリングが現在有効かどうかを示す非同期メトリクス
jemalloc.profile.activeを追加しました。これは prof.active に加わる有効化の仕組みであり、呼び出し元のスレッドがサンプリングを行うには、その両方が有効である必要があります。 #64842 (Unalian). allow_experimental_join_conditionの重要扱いを解除しました。この指定により、異なるバージョンが混在するクラスターでは、分散クエリが正常に実行されないことがありました。#65008 (Nikita Mikhaylov).DiskGetObjectThrottler*およびDiskGetObjectThrottler*というサーバーの非同期メトリクスが追加されました。これらは、ディスク設定s3_max_get_rpsとs3_max_put_rpsで定義された 1 秒あたりのリクエスト数のレート制限と、ディスクでスロットリング制限に達することなく現在送信できるリクエスト数を反映します。これらのメトリクスは、制限が設定されているすべてのディスクごとに定義されます。#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_functionsをallow_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). -Ifcombinator がすでに使用されている場合は、集約を書き換えないようにしました。#64638 (Dmitry Novik) 。- float の型推論を修正しました (バッファサイズが小さい場合、つまり
--max_read_buffer_size 1のとき) 。#64641 (Azat Khuzhin) 。 - 式を含むTTLが正常に動作しなくなる可能性のある不具合を修正しました。 #64694 (alesapin).
- 常に true となる
WHEREおよびPREWHERE式が削除されてしまう問題を修正しました (新しいアナライザ向け) 。#64695 (Nikolai Kochetov) 。 startsWith、endsWith、match、multiSearchAnyの結果によるフィルタリング時に、トークンベースのテキスト索引 (ngrambf、full_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_rewritabledisk 上のローカル 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_logでDeleteイベントが重複する問題を修正しました。 #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).
rcinit スクリプトを使用して ClickHouse server デーモンを起動する際、networkservice を必須に変更。 #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). - 関数
neighbor、runningAccumulate、runningDifferenceStartingWithFirstValue、runningDifferenceの使用は非推奨になりました (エラーを招きやすいためです) 。代わりに適切なウィンドウ関数を使用してください。再度有効にするには、allow_deprecated_error_prone_window_functions = 1を設定するか、compatibility = '24.4'以下を設定してください。#63132 (Nikita Taranov). SHOW TABLES権限が付与されていないデータベースやテーブルが多い場合でも、カラム数が多ければsystem.columnsへのクエリはより高速に動作します。以前のバージョンでは、対応するテーブルにSHOW TABLESを付与せずに個々のカラムへSHOW COLUMNSを付与すると、system.columnsテーブルにはそれらのカラムが表示されていましたが、新しいバージョンではそのテーブル全体をスキップするようになります。クエリを遅くしていた 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型では、キーとして
Float32、Float64、Array(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 (豪肥肥).RawをTSVRawの同義語として使用できるようになりました。#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_identityparameter が設定されている場合、認証には 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).
DateTimeとDateTime64を比較した場合でも、索引解析が機能するようになりました。これにより #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.zeros、system.zeros_mt(system.numbersとsystem.numbers_mtではすでに機能しています) 、およびgenerateRandomtable 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_userとclient_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-bridgeとclickhouse-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=yはSET ROLE x, yと等価です。#62669 (Serge Klochkov). - テーブルの主キーが使用するメモリを解放するための
SYSTEM UNLOAD PRIMARY KEYを追加しました。#62738 (Pablo Marcos). system.text_logにvalue1,value2, …,value10カラムを追加しました。これらのカラムには、メッセージの整形に使用された値が格納されます。#59619 (Alexey Katsman).- insert 時に割り当てられた block 内での元の行番号を格納する永続仮想カラム
_block_offsetを追加しました。カラム_block_offsetの永続化は、MergeTree settingenable_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_timestampとfrom_utc_timestampが、約2倍高速になりました。#62583 (KevinyhZou) 。 - 関数
parseDateTimeOrNull、parseDateTimeOrZero、parseDateTimeInJodaSyntaxOrNull、および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>) = 1とSELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0は、本来プライマリインデックスを使用できるにもかかわらず、どちらもテーブル全体のスキャンを実行していました。 #62142 (josh-hildred). system.remote_data_pathsから、結果全体を1つの大きなchunkに蓄積するのではなく、chunkのストリームを返すようにしました。これにより、メモリ使用量を削減し、途中の進捗を表示し、クエリをキャンセルできるようになります。#62613 (Alexander Gololobov).
実験的機能
azure_allow_parallel_part_upload設定で制御される、Azure Blob Storage 向けの並列書き込みバッファをサポートしました。#62534 (SmitaRKulkarni).- ユーザー空間 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_diffとageは、結果をマイクロ秒精度ではなくナノ秒精度で計算するようになりました。また、unitparameter に指定可能な値としてnanosecond(またはnanoseconds、ns) もサポートされるようになりました。#61409 (Austin Kothig) 。 date_truncにナノ秒、マイクロ秒、ミリ秒の単位を追加しました。#62335 (Misz606) 。- 証明書の再読み込み時に、証明書チェーンも再読み込みするようにしました。 #61671 (Pervakov Grigorii) 。
- そのレプリカパスにアクティブなレプリカが存在する場合はテーブルをアタッチできないようにし、エラー #60432 の発生防止を図ります。#61876 (Arthur Passos) 。
clickhouse-localでinputをサポートしました。#61923 (Azat Khuzhin) 。- strictness
ANYのJoinテーブルエンジンは、再読み込み後も整合性が保たれるようになりました。同じキーを持つ複数の行が挿入された場合は、最初に挿入された行が優先されます (以前は、テーブルの読み込み時にランダムに選択されていました) 。#51027 をクローズ。#61972 (vdimir). - Apache Arrow スキーマから Nullable 型のカラムを自動的に推論するようになりました。#61984 (Maksim Kita) 。
- 集約時に集約状態の並列マージをキャンセルできるようになりました。例:
uniqExact。 #61992 (Maksim Kita). system.keywordsを使って候補を補完し、内部のすべての箇所でもそれらを使うようにしました。 #62000 (Nikita Mikhaylov).OPTIMIZE FINALはReplicatedMergeTreeに対して、現在実行中のマージが完了するまで待機し、その後 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_PARTSException をスローすることがあります。INSERTクエリと同じ設定および制限が適用されます (max_parts_in_total、parts_to_delay_insert、parts_to_throw_insert、inactive_parts_to_throw_insert、inactive_parts_to_delay_insert、max_avg_part_size_for_too_many_parts、min_delay_to_insert_ms、max_delay_to_insertの各設定を参照) 。 #62420 (Sergei Trifonov).- 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_logにevent_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 clientとclickhouse localのコマンドライン引数--helpの出力を簡潔化しました。従来の出力は、現在は--help --verboseで表示されます。#62973 (Yarik Briukhovetskyi).- MySQL 8.3 で
log_bin_use_v1_row_eventsが削除されたため、それに対応するよう実験的なMaterializedMySQLエンジンを調整しました #60479。 #63101 (Eugene Klimov)。 著者: Nikolay Yankin。
ビルド/テスト/パッケージングの改善
- Rust の依存関係をベンダリングし、Rust コード (ちょっとした機能のために、半分ノリで使っているもの) を、C++ と同様に、無理なくビルドできるようにしました。 #62297 (Raúl Marín).
- ClickHouse は現在、BoringSSL ではなく OpenSSL 3.2 を使用しています。#59870 (Robert Schulze) 。OpenSSL は互換性に優れる一方で、全体としてエンジニアリング文化はあまり良くない点に注意してください (たとえば、こちらでパッチを当てる必要があった sanitizer のレポートが複数あることや、生成ファイルを含む複雑なビルドシステムなど) 。
- ストレステストでは 1/2 の確率で DROP クエリを無視し、Memory/JOIN テーブルのアップグレードチェックでは DROP を無視する代わりに TRUNCATE を使用するようにしました。#61476 (Kruglov Pavel).
- Keeper の Docker イメージから、/etc/clickhouse-keeper および /var/log/clickhouse-keeper のボリュームを削除。#61683 (Tristan).
- アナライザがデフォルトで有効になったことで不要となったすべての問題に対するテストを追加。 Closes: #55794 Closes: #49472 Closes: #44414 Closes: #13843 Closes: #55803 Closes: #48308 Closes: #45535 Closes: #44365 Closes: #44153 Closes: #42399 Closes: #27115 Closes: #23162 Closes: #15395 Closes: #15411 Closes: #14978 Closes: #17319 Closes: #11813 Closes: #13210 Closes: #23053 Closes: #37729 Closes: #32639 Closes: #9954 Closes: #41964 Closes: #54317 Closes: #7520 Closes: #36973 Closes: #40955 Closes: #19687 Closes: #23104 Closes: #21584 Closes: #23344 Closes: #22627 Closes: #10276 Closes: #19687 Closes: #4567 Closes: #17710 Closes: #11068 Closes: #24395 Closes: #23416 Closes: #23162 Closes: #25655 Closes: #11757 Closes: #6571 Closes: #4432 Closes: #8259 Closes: #9233 Closes: #14699 Closes: #27068 Closes: #28687 Closes: #28777 Closes: #29734 Closes: #61238 Closes: #33825 Closes: #35608 Closes: #29838 Closes: #35652 Closes: #36189 Closes: #39634 Closes: #47432 Closes: #54910 Closes: #57321 Closes: #59154 Closes: #61014 Closes: #61950 Closes: #55647 Closes: #61947. #62185 (Nikita Mikhaylov).
- アナライザによって不要になった、または修正済みの issue に対応するテストをさらに追加しました。クローズ: #58985 クローズ: #59549 クローズ: #36963 クローズ: #39453 クローズ: #56521 クローズ: #47552 クローズ: #56503 クローズ: #59101 クローズ: #50271 クローズ: #54954 クローズ: #56466 クローズ: #11000 クローズ: #10894 クローズ: https://github.com/ClickHouse/ClickHouse/issues/448 クローズ: #8030 クローズ: #32139 クローズ: #47288 クローズ: #50705 クローズ: #54511 クローズ: #55466 クローズ: #58500 クローズ: #39923 クローズ: #39855 クローズ: #4596 クローズ: #47422 クローズ: #33000 クローズ: #14739 クローズ: #44039 クローズ: #8547 クローズ: #22923 クローズ: #23865 クローズ: #29748 クローズ: #4222。#62457 (Nikita Mikhaylov).
- OpenSSL が動的リンクされている場合に発生するビルドエラーを修正しました (注: これは通常サポートされておらず、必要になるのは IBM の s390x プラットフォームのみです) 。 #62888 (Harry Lee).
バグ修正 (正式な安定版リリースでユーザーに影響する不具合)
- クォーラム 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 ではなくベータと見なされるようになりました。以前の動作に戻すには、compatibilityを24.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_string、output_format_orc_string_as_string、output_format_arrow_string_as_stringで制御されます。Binary のほうがより正確で互換性も高い一方、多くの場合はデフォルトで String を使うほうがユーザーの期待に合っています。Parquet/ORC/Arrow は、lz4 や zstd を含む多くの圧縮方式をサポートしています。ClickHouse はそれらすべての圧縮方式をサポートしています。一部の性能の低いツールでは高速なlz4圧縮方式がサポートされていないため、デフォルトはzstdにしています。これは、設定output_format_parquet_compression_method、output_format_orc_compression_method、output_format_arrow_compression_methodで制御されます。Parquet と ORC ではデフォルトをzstdに変更しましたが、Arrow では変更していません (Arrow は低レベル用途が重視されているためです) 。#61817 (Alexey Milovidov). - 新しい ClickHouse バージョンでは、関数
geoDistance、greatCircleDistance、greatCircleAngleは、すべての引数が Float64 の場合、内部計算および戻り値の型に 64 ビット倍精度浮動小数点データ型を使用するようになります。これにより #58476 が修正されます。以前のバージョンでは、これらの関数は常に Float32 を使用していました。geo_distance_returns_float64_on_float64_argumentsをfalseに設定するか、compatibilityを24.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_insertとdeduplicate_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-clientとclickhouse-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-clientとclickhouse-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で、attributemerge="true"を指定できるようになりました。このattributeが指定されている場合、ClickHouse はサブツリーを既存のconfigurationにマージします。指定されていない場合のデフォルトの動作では、新しい内容がconfigurationに追加されます。 #61299 (alesapin). - 仮想メモリマッピング向けの非同期メトリクス
VMMaxMapCountとVMNumMapsを追加しました。#60662 をクローズしました。#61354 (Tuan Pham Anh) 。 - 一時データを作成するすべての箇所で、たとえば外部メモリのソートや外部メモリの GROUP BY でも、
temporary_files_codec設定が使用されるようになりました。以前はpartial_mergeJOIN アルゴリズムでのみ機能していました。#61456 (Maksim Kita). - クエリのパースの複雑さを制限できる新しい設定
max_parser_backtracksを追加しました。 #61502 (Alexey Milovidov). - ファイルシステムキャッシュの動的なリサイズ時の競合が減少しました。 #61524 (Kseniia Sumarokova) 。
- StorageS3 キューの分片モードを無効化しました。今後書き直されるためです。#61537 (Kseniia Sumarokova) 。
use_leagcy_max_levelをuse_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_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 JOIN、ALL INNER JOIN、および単純なサブクエリをサポートしました (アナライザ使用時のみ) 。新しい設定parallel_replicas_prefer_local_joinでは、ローカルJOIN実行 (デフォルト) とGLOBAL JOINのどちらを使用するかを選択できます。すべてのテーブルはcluster_for_parallel_replicasのすべてのレプリカ上に存在している必要があります。新しい設定min_external_table_block_size_rowsとmin_external_table_block_size_bytesは、一時テーブル向けに送信される小さな block をまとめるために使用されます (アナライザ使用時のみ) 。#58916 (Nikolai Kochetov)。 - 新しいレプリカの追加時または復旧時に、
Replicateddatabase で table を同時に作成できるようにしました。#59277 (Konstantin Bogdanov)。 Variant値に対する比較 operator と、Variantカラムへの適切な Field の挿入を実装しました。デフォルトでは、類似した Variant 型を含むVarianttype の作成は許可されません (設定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_thresholdとcommit_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_finalとsplit_intersecting_parts_ranges_into_layers_finalが追加されました。これらの設定は、FINALを伴うクエリの最適化を無効にするためのもので、デバッグ用途でのみ必要です。#59705 (Maksim Kita)。実際にはそれだけでなく、パフォーマンスを犠牲にする代わりに、メモリ使用量を削減することもできます。 - 設定
extract_kvp_max_pairs_per_rowをextract_key_value_pairs_max_pairs_per_rowに改名しました。この問題 (設定名に不要な略語が含まれていたこと) は、https://github.com/ClickHouse/ClickHouse/pull/43606 で持ち込まれました。この設定のドキュメントを修正しました。#59683 (Alexey Milovidov). #59960 (jsc0218). DEFAULTまたはMATERIALIZED式を持つカラムに対するALTER COLUMN MATERIALIZEの実行が、セマンティクスにより正確に従うようになりました。#58023 (Duc Canh Le).- mutation 中にエラーが発生した場合の指数バックオフ ロジックを有効化しました。これにより、CPU 使用量、メモリ使用量、ログファイルのサイズが削減されます。 #58036 (MikhailBurdukov).
InitialQueryProfile Event をカウントできるよう改善しました。#58195 (Unalian) 。storage_configurationでvolume_priorityを指定できるようになりました。#58533 (Andrey Zvonov).T64codec が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-localのsystem.tablesで参照できるようにしました。#59493 (Nikita Mikhaylov) 。 system.zookeepertable: これまでは結果全体をメモリに蓄積し、1つの大きな chunk として返していました。この変更により、system.zookeeperから多数の行を読み取る際のメモリ消費を削減できるほか、途中の Progress (これまでに何行読み取られたか) を表示できるようになり、結果セットが大きい場合に connection timeout に達するのを回避できます。#59545 (Alexander Gololobov).- ダッシュボードで、URL の #hash の圧縮・非圧縮の両方の状態を解釈できるようになりました (後方互換性) 。 #59124 の続きです。 #59548 (Amos Bird).
- Intel QPL (
DEFLATE_QPLcodec で使用) を 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_TIMEOUTHTTP エラーコードでInternal Errorを返した場合に備え、S3 ファイルの GCP フォールバックをバッファコピーに複製するようにしました。#60164 (Maksim Kita). ULIDStringToDateTimeの短絡実行をサポート。 #60211 (Juan Madurga).- テーブル
system.backupsおよびsystem.backup_logにquery_idカラムが追加されました。errorカラムにエラーのスタックトレースが追加されました。#60220 (Maksim Kita). - MySQLポート経由の接続では、QuickSightをそのまま利用できるよう、設定
prefer_column_name_to_alias = 1が自動的に適用されるようになりました。また、設定mysql_map_string_to_text_in_show_columnsとmysql_map_fixed_string_to_text_in_show_columnsもデフォルトで有効になり、これらも MySQL 接続にのみ影響します。これにより、より多くのBIツールとの互換性が向上します。#60365 (Robert Schulze). - JavaScript コード内のレースコンディションを修正し、チャートが同じ位置に重なって重複表示される問題を解消しました。#60392 (Alexey Milovidov) 。
ビルド/テスト/パッケージングの改善
- 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_uniq_to_countでカラムのエイリアスが削除されてしまう問題を修正 #60026 (Raúl Marín).- ドロップ時にS3Queueテーブルで発生する可能性のある例外を修正 #60036 (Kseniia Sumarokova).
- 単一リテラル使用時の NOT のフォーマットを修正 #60042 (Raúl Marín).
- DDLLogEntry で、ハードコードされた 4096 ではなく、コンテキストの max_query_size を使用する #60083 (Kruglov Pavel).
tableという名前のテーブルを含むクエリで、フォーマットの不整合を修正しました。UNION ALL、INTERSECT、EXCEPTを含むクエリで、構造が線形でない場合の誤ったフォーマットを修正しました。これにより #52349 をクローズします。SYSTEMクエリの誤ったフォーマットを修正しました。これには、SYSTEM ... DROP FILESYSTEM CACHE、SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW、SYSTEM 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.xmlのaccess_control_improvementsセクションを確認してください。判断に迷う場合は、設定ファイル内の値を前のバージョンのままにしておいてください。#58584 (Alexey Milovidov). - NaN 値に対する
sumMapFilteredの動作を改善しました。NaN 値は今後、ランダムではなく末尾に配置され、他のどの値とも異なるものとして扱われます。-0も0と等しいものとして扱われるようになりました。0 値は破棄されるため、-0値も破棄されます。#58959 (Raúl Marín). - 関数
visibleWidthはドキュメントどおりに動作するようになります。以前のバージョンでは、lengthUTF8関数と同様に、文字列のシリアライゼーション後のコードポイントを単純に数えるだけで、幅ゼロ文字、結合文字、全角文字、タブ、削除文字は考慮されていませんでした。今回、それに合わせて動作が変更されました。従来の動作を維持したい場合は、function_visible_width_behaviorを0に設定するか、compatibilityを23.12以下に設定してください。#59022 (Alexey Milovidov). Kustodialect は、次の 2 つの不具合が修正されるまで無効化されています: #59037 および #59036。#59305 (Alexey Milovidov).Kustoを使用しようとすると、例外が発生します。FINALmodifier のより効率的な実装では、max_threads = 1の場合でも順序が保持される保証はなくなりました。従来の動作に依存していた場合は、enable_vertical_finalを 0 に設定するか、compatibilityを23.12に設定してください。
新機能
- 他のデータ型のユニオンを表す Variant データ型を実装しました。型
Variant(T1, T2, ..., TN)は、この型の各行の値がT1、T2、…、TNのいずれかの型、またはそのどれにも属さない (NULL値) ことを意味します。Variant 型は、設定allow_experimental_variant_typeを有効にすると利用できます。Reference: #54864. #58047 (Kruglov Pavel). - 一部の設定 (現時点では
min_compress_block_sizeとmax_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集約関数、および対応するquantilesDDとmedianDDを追加しました。これは DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf に基づいています。 ### ユーザー向け変更のドキュメント項目。 #56342 (Srikanth Chekuri).- 任意の種類のオブジェクトストレージを、任意の種類のメタデータ型で設定できるようにしました。 #58357 (Kseniia Sumarokova).
- 非アクティブなレプリカを待たずに済む
distributed_ddl_output_modeのnull_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 表現に変換するのに役立つ関数
punycodeEncode、punycodeDecode、idnaEncode、idnaDecodeを追加しました。#58454 (Robert Schulze) 。 - 文字列の類似度関数
dramerauLevenshteinDistance、jaroSimilarity、jaroWinklerSimilarityを追加しました。#58531 (Robert Schulze) 。 - 出力圧縮レベルを変更するための 2 つの設定
output_format_compression_levelと、出力の圧縮 method がzstdの場合に、圧縮ウィンドウサイズを明示的に設定し、zstd 圧縮の長距離モードを有効にするためのoutput_format_compression_zstd_window_logが追加されました。これはINTO OUTFILEおよび table functionfile、url、hdfs、s3、azureBlobStorageへの書き込み時に適用されます。#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 QATlib と Inte’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).- 関数
transformでEnumデータ型がサポートされました。これにより #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 indicesngrambf_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 の統計をダンプし、jmfp、jmep、jmdpは、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 CLUSTERDDLクエリおよび 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は、設定可能な値No、Yes、IncreaseOnly、DecreaseOnlyを持つ (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). sparkBarをsparkbarのエイリアスとしました。 #58335 (凌涛).GCSへのアップロード後にComposeObjectリクエストを送信しないようにしました。#58343 (Azat Khuzhin) 。- 設定XMLにおいて、名前にドットを含むキーを正しく処理するようにしました。 #58354 (Azat Khuzhin).
- 関数
formatが、定数引数に対して定数を返すようにしました。これにより #58355 をクローズします。#58358 (Alexey Milovidov). - 設定
max_estimated_execution_timeを追加し、max_execution_timeとmax_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_timeoutはreceive_timeoutに変換されます。MySQL のsql_select_limit設定を、ステートメント全体が大文字の場合にしか設定できなかった問題を修正しました。#58835 (Serge Klochkov). - Dictionaryとテーブルを同じ名前で作成しようとして競合した場合の例外メッセージを改善。 #58841 (Yarik Briukhovetskyi).
- カスタム (SQL から作成された) ディスクについては、サーバー設定で
filesystem_caches_path(すべてのファイルシステムキャッシュに共通のディレクトリプレフィックス) またはcustom_cached_disks_base_directory(カスタムディスクから作成されたファイルシステムキャッシュのみに共通のディレクトリプレフィックス) のいずれかが指定されていることを確認してください。カスタムディスクではcustom_cached_disks_base_directoryがfilesystem_caches_pathより優先され、前者がない場合は後者が使用されます。ファイルシステムキャッシュ設定の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 はwebdisk、write-once はs3_plainである点に注意してください。#59170 (Azat Khuzhin). - 複雑な
ALTERとmergeの組み合わせにおいて論理エラーを引き起こす可能性があった、実験的な_block_numberカラムの不具合を修正しました。#56202 を修正します。#58601 を置き換えます。#59295 (alesapin). - JSON 内で返された例外を Play UI が認識できるようになりました。#52853 への対応。#59303 (Alexey Milovidov).
/binaryHTTPハンドラーでは、クエリ文字列で 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_logのbase_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).