2022年の変更履歴
ClickHouse リリース 22.12, 2022-12-15
注記
このリリースには不具合のある systemd サービスコメントが含まれており、一部の Linux ディストリビューションではアップグレード時に ClickHouse のインストールが壊れてしまう可能性があります。systemd サービスが /run/systemd ディレクトリの所有者権限を変更してしまい、その結果として以降のすべての systemd 操作が失敗します。このバージョンへのアップグレードはスキップし、代わりにより新しいバージョンの ClickHouse へアップグレードすることを推奨します。
詳細については GitHub 上のこの issue を参照してください: https://github.com/ClickHouse/ClickHouse/issues/48285
アップグレード時の注意事項
String引数を取るmin,max,any*,argMin,argMax集約関数の状態の (非)直列化における後方互換性の問題を修正しました。この非互換性は 22.9、22.10、22.11 ブランチに影響します(それぞれ 22.9.6、22.10.4、22.11.2 以降で修正済み)。22.3、22.7、22.8 ブランチの一部のマイナーリリースも影響を受けます: 22.3.13...22.3.14(22.3.15 以降で修正)、22.8.6...22.8.9(22.8.10 以降で修正)、22.7.6 以降(22.7 では修正されません。22.7.* から 22.8.10 以降へのアップグレードを推奨します)。影響のあるバージョンを一度も使用していないユーザーには、このリリースノートは関係しません。非互換なバージョンでは、上記の集約関数の状態を読み取る際に、文字列の末尾に余分な'\0'を付加します。例えば、古いバージョンがanyState('foobar')の状態をstate_columnに保存していた場合、非互換なバージョンはanyMerge(state_column)で'foobar\0'を出力します。また、非互換なバージョンは、末尾の'\0'なしでこれらの集約関数の状態を書き込みます。修正を含む新しいバージョンは、1 つのコーナーケースを除き、非互換バージョンを含むすべてのバージョンが書き込んだデータを正しく読み取ることができます。非互換なバージョンが、実際にヌル文字で終わる文字列を含む状態を保存していた場合、新しいバージョンは、該当する集約関数の状態を読み取る際に末尾の'\0'を削除します。例えば、非互換なバージョンがanyState('abrac\0dabra\0')の状態をstate_columnに保存していた場合、新しいバージョンはanyMerge(state_column)で'abrac\0dabra'を出力します。この問題は、非互換なバージョンが古いバージョンまたは新しいバージョンと同一クラスタ内で動作している場合の分散クエリにも影響します。#43038(Alexander Tokmakov, Raúl Marín)。注: すべての公式 ClickHouse ビルドにはすでにパッチが含まれています。非公式なサードパーティビルドについてはそうとは限らないため、使用を避けるべきです。
新機能
BSONEachRow入出力フォーマットを追加しました。このフォーマットでは、ClickHouse は各行を個別の BSON ドキュメントとしてフォーマット/パースし、各カラムはカラム名をキーとする 1 つの BSON フィールドとしてフォーマット/パースします。#42033 (mark-polokhov)。grace_hashJOIN アルゴリズムを追加しました。SET join_algorithm = 'grace_hash'で有効にできます。 #38191 (BigRedEye、Vladimir C)。- ユーザーの作成および変更時に使用するパスワードの複雑性ルールとチェックを構成できるようにしました。 #43719 (Nikolay Degterinsky).
- ログ内の機密情報をマスクし、クエリ
SHOW CREATE TABLEとSELECT FROM system.tablesの出力に含まれる秘匿すべき部分もマスクします。また、#41418 を解決します。#43227(Vitaly Baranov)。 GROUP BY ALL構文を追加しました: #37631. #42265 (刘陶峰).FROM table SELECT column構文を追加しました。 #41095 (Nikolay Degterinsky).- Spark SQL との互換性のため、関数
concatWithSeparatorと、そのエイリアスであるconcat_wsを追加しました。concatAssumeInjectiveと同様に GROUP BY の最適化を有効にするバリアントとして、関数concatWithSeparatorAssumeInjectiveを追加しました。 #43749 (李扬)。 - 固定精度の 10 進数演算用に
multiplyDecimalおよびdivideDecimal関数を追加しました。 #42438 (Andrey Zvonov). - 現在移動中のパーツの一覧を保持する
system.movesテーブルを追加しました。 #42660 (Sergei Trifonov)。 - ClickHouse Keeper 向けの組み込み Prometheus エンドポイントのサポートを追加しました。 #43087 (Antonio Andelic).
- 数値リテラルでアンダースコア
_を区切り文字として使用できるようにしました(例:1_000_000)。 #43925 (jh0x). cutURLParameter関数の第 2 引数として配列を使用できるようにしました。これにより複数のパラメータを削除できます。 #6827 をクローズしました。 #43788(Roman Vasin)。system.data_skipping_indicesテーブルにインデックス式を格納する列を追加。 #43308 (Guillaume Tassery)。- システムテーブル
databasesに列engine_fullを追加し、ユーザーがシステムテーブルを介してデータベースのエンジン定義全体にアクセスできるようにしました。 #43468 (凌涛). - 新しいハッシュ関数 xxh3 が追加されました。また、ライブラリの更新により、ARM アーキテクチャ上での
xxHash32とxxHash64のパフォーマンスが向上しました。#43411(Nikita Taranov)。 - MergeTree の設定に対して制約を定義できるようになりました。例えば、ユーザーによる
storage_policyの上書きを禁止できます。 #43903 (Sergei Trifonov)。 - 新しい設定項目
input_format_json_read_objects_as_stringsを追加し、すべての JSON 入力形式でネストされた JSON オブジェクトをStringとしてパースできるようにしました。この設定はデフォルトで無効になっています。 #44052 (Kruglov Pavel).
Experimental Feature
- 非同期挿入に対する重複排除をサポートしました。この変更以前は、複数の小さな挿入が 1 つの挿入バッチ内に共存していたため、非同期挿入では重複排除がサポートされていませんでした。#38075 を解決しました。#43304(Han Fei)。
- 実験的な Annoy インデックス(ベクトル類似性検索)に対してコサイン距離をサポートしました。#42778(Filatenkov Artur)。
CREATE / ALTER / DROP NAMED COLLECTIONクエリを追加しました。#43252(Kseniia Sumarokova)。この機能は開発中であり、バージョン 22.12 の時点ではこれらのクエリはまだ有効ではありません。このチェンジログの項目は、混乱を避けるためだけに追加されています。named collection へのデフォルトのアクセス権を、configで定義されたユーザーのみに制限しました。これらを表示できるようにするには、show_named_collections = 1を設定する必要があります。#43325(Kseniia Sumarokova)。system.named_collectionsテーブルが導入されました。#43147(Kseniia Sumarokova)。
パフォーマンスの改善
max_streams_for_merge_tree_readingとallow_asynchronous_read_from_io_pool_for_merge_treeの設定を追加しました。max_streams_for_merge_tree_readingは MergeTree テーブルに対する読み取りストリーム数を制限します。allow_asynchronous_read_from_io_pool_for_merge_treeは、MergeTreeテーブルから読み取るためのバックグラウンド I/O プールを有効にします。これは、max_streams_to_max_threads_ratioまたはmax_streams_for_merge_tree_readingと併用した場合、I/O ボトルネックとなるクエリのパフォーマンスを向上させる可能性があります。#43260(Nikolai Kochetov)。高レイテンシなストレージ、少ない CPU 数、大量のデータパーツといった条件では、最大で 100 倍のパフォーマンス向上が見込めます。- 設定
merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystemがアダプティブグラニュラリティを考慮していませんでした。幅の広い(列数の多い)行が読み取り行数を減らさず(merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_readでは行われていたように)、リモートファイルシステム使用時に高いメモリ使用量を引き起こす可能性がありました。#43965(Nikolai Kochetov)。 - マージ対象のパーツを選択する際に ZooKeeper または ClickHouse Keeper への
listリクエスト数を最適化しました。以前は状況によっては数千件のリクエストを発行することがありました。#43647 を修正しました。#43675(Alexander Tokmakov)。 max_size_to_preallocate_for_aggregationの値が小さすぎる場合は、最適化をスキップするようになりました。この設定のデフォルト値は10^8に引き上げられました。#43945(Nikita Taranov)。- 古いデータパーツのクリーンアップを行わないようにして、サーバーのシャットダウンを高速化しました。これは https://github.com/ClickHouse/ClickHouse/pull/41145 以降は不要であるためです。#43760(Sema Checherinda)。
- イニシエーター側でのマージは、
enable_memory_bound_merging_of_aggregation_resultsが設定されている場合、ローカル集約結果のマージと同じメモリ制限付きアプローチを使用するようになりました。#40879(Nikita Taranov)。 - Keeper の改善: レプリケーションと並行してログをディスクへ同期するようになりました。#43450(Antonio Andelic)。
- Keeper の改善: リクエストをより頻繁にバッチングするようになりました。バッチングは新しい設定
max_requests_quick_batch_sizeで制御できます。#43686(Antonio Andelic)。
改善
- バックアップからの復元時に参照関係の依存性を実装し、それに基づいてテーブルを正しい順序で作成するようにしました。 #43834 (Vitaly Baranov).
- 起動時の読み込み中の失敗を回避するため、
CREATEクエリ内の UDF を置き換えるようにしました。さらに、列のDEFAULT式として UDF を使用できるようになりました。 #43539 (Antonio Andelic)。 - 次のクエリにおけるパーツ削除の方法を変更しました:TRUNCATE TABLE、ALTER TABLE DROP PART、ALTER TABLE DROP PARTITION。これらのクエリは、古いパーツを覆う空のパーツを作成するようになりました。これにより、TRUNCATE クエリは追加の排他ロック取得を伴わずに動作し、同時実行中の読み取りがロックされなくなります。また、これらすべてのクエリで耐久性も実現しました。リクエストが成功した場合、その後にパーツが「復活」して現れることはありません。なお、原子性はトランザクションスコープの場合にのみ達成されます。#41145(Sema Checherinda)。
SET param_xクエリでは、パラメータ値を手動で文字列にシリアライズする必要がなくなりました。たとえば、これまでのSET param_a = '[\'a\', \'b\']'というクエリは、SET param_a = ['a', 'b']のように記述できるようになりました。 #41874 (Nikolay Degterinsky)。- クライアントで STDIN から読み込む際、進行状況表示に読み取った行数を表示するようにしました。#43423 をクローズ。#43442(Kseniia Sumarokova)。
- S3 テーブル関数やエンジンから読み込む際にプログレスバーを表示するようにしました。 #43454 (Kseniia Sumarokova).
- 進捗バーには読み取り行数と書き込み行数の両方が表示されます。 #43496 (Ilya Yatsishin).
filesystemAvailableおよび関連する関数がディスク名を指定する 1 つのオプション引数をサポートするようになり、filesystemFreeはfilesystemUnreservedに変更されました。#35076 をクローズ。#42064(flynn)。- LDAP 連携:
search_limitのデフォルト値を 256 に増やし、任意の値に変更できるようにするための LDAP サーバー設定オプションを追加しました。修正: #42276。#42461 (Vasily Nemkov)。 - 例外メッセージからも機密情報を削除できるようにしました(設定ファイル内の
query_masking_rulesを参照)。#41418 を解決します。#42940(filimonov)。 - MySQL 互換性のために
SHOW FULL TABLES ...などのクエリをサポートしました。 #43910 (Filatenkov Artur). - Keeper の改良: ノードをリーダーとして手動で指定できる 4lw コマンド
rqldを追加。 #43026 (JackyWoo). - クエリで指定された接続タイムアウト設定を Distributed async INSERT に適用できるようにしました。 #43156 (Azat Khuzhin).
unhex関数がFixedString引数をサポートするようになりました。 issue42369。 #43207 (DR)。- TTL ルールに従い、完全に期限切れとなったパーツが優先的に削除されます(#42869 を参照)。#43222(zhongyuankai)。
- clickhouse-client の CPU 負荷インジケータを、より高精度かつ応答性の高いものにしました。 #43307 (Sergei Trifonov).
- ストレージ
S3およびテーブル関数s3で、Parquet、Arrow、ORC形式のネストされた型のサブカラムの読み取りをサポートしました。 #43329 (chen). system.partsテーブルにtable_uuid列を追加。 #43404 (Azat Khuzhin).- 非対話モードでローカルで処理された行数を表示するためのクライアントオプション(
--print-num-processed-rows)を追加しました。 #43407 (jh0x). - クエリプランに対して
aggregation-in-order最適化を実装しました。これはデフォルトで有効ですが、optimize_aggregation_in_order(デフォルトでは無効)が有効な場合にのみ機能します。以前の AST ベースのバージョンを使用するには、query_plan_aggregation_in_order = 0を設定してください。#43592(Nikolai Kochetov)。 trace_type = 'ProfileEvent'のプロファイルイベントを、各インクリメントのたびに、その時点のスタック、プロファイルイベント名、およびインクリメント値とともにsystem.trace_logに記録できるようにしました。これは設定trace_profile_eventsを有効にすることで利用でき、クエリのパフォーマンスの調査に使用できます。 #43639 (Anton Popov).- RowBinary フォーマットで使用される文字列のサイズを制限するための新しい設定
input_format_max_binary_string_sizeを追加しました。 #43842 (Kruglov Pavel). - ClickHouse がリモート HTTP サーバーにリクエストを送信し、サーバーがエラーを返した場合、例外メッセージ内に表示される数値の HTTP ステータスコードが正しく表示されていませんでした。 #43919 をクローズ。 #43920(Alexey Milovidov)。
- 複数の JOIN に対する最適化が行われている場合でも、クエリのエラーを正しく報告できるようにしました。 #43583 (Salvatore).
ビルド/テスト/パッケージングの改善
- systemd との連携により、サービスが実際に起動し、リクエストを処理する準備が整ったことを systemd に正しく通知するようになりました。 #43400 (Коренберг Марк).
- OpenSSL FIPS Module を使用して、OpenSSL を用いて ClickHouse をビルドするためのオプションを追加しました。このビルドタイプはセキュリティ検証のためのテストが行われておらず、サポート対象外です。 #43991 (Boris Kuschel).
- 以前の PR で実装された新しい
DeflateQpl圧縮コーデックにアップグレードしました(詳細: https://github.com/ClickHouse/ClickHouse/pull/39494)。このパッチは以下の点でコーデックを改善します: 1. Intel® Query Processing Library (QPL) の QPL v0.2.0 から QPL v0.3.0 への更新 2. QPL v0.3.0 における QPL のビルド問題を修正するための CMake ファイルの改善 3. QPL v0.2.0 で行っていた実行時ロード(dlopen)ではなく、ビルド時に QPL ライブラリを libaccel-config とリンク 4. CompressionCodecDeflateQpl.cpp におけるログ出力の問題を修正。 #44024 (jasperzhu).
バグ修正(公式 stable または prestable リリースにおけるユーザーから見える誤動作)
- 非同期インサートの使用時にデッドロックが発生する可能性のある不具合を修正しました。 #43233 (Anton Popov).
- AST レベルの最適化
optimize_normalize_count_variantsにおける一部の誤ったロジックを修正しました。#43873 (Duc Canh Le)。 - チェックサムがレプリカ間で一致しない場合(例:アップグレードに伴うデータ形式の変更によって発生)、ミューテーションが進行しなくなる問題を修正。 #36877 (nvartolomei).
hdfsClusterテーブル関数で機能していなかったskip_unavailable_shardsの最適化を修正しました。 #43236 (chen).?ワイルドカードのS3対応を修正。#42731 をクローズ。#43253 (chen)。- 配列に
Nullable要素が含まれている場合に、arrayFirstOrNullとarrayLastOrNull関数が正しく動作せず null を返してしまう問題を修正しました。 #43274 (Duc Canh Le). - Kafka テーブルに関連する
UserTimeMicroseconds/SystemTimeMicrosecondsの誤った計測を修正。#42791 (Azat Khuzhin). webディスクで例外を抑制しないように修正しました。webディスクのリトライ処理を修正しました。 #42800 (Azat Khuzhin).- INSERT とマテリアライズドビューの削除の間で発生する(論理的な)レースコンディションを修正しました。レースコンディションは、INSERT と同時にマテリアライズドビューが削除された場合に発生していました。このとき、実行開始時点では INSERT の依存先としてマテリアライズドビューが存在しているものの、insert チェーンがそのテーブルへアクセスしようとする時点ではすでにテーブルが削除されており、その結果として
UNKNOWN_TABLEまたはTABLE_IS_DROPPED例外が発生し、挿入処理が停止していました。この変更以降は、依存先がなくなっている場合にはこれらの例外を回避し、そのまま INSERT を継続するようにしました。 #43161 (AlfVII)。 quantiles関数における未定義動作を修正しました。この問題は未初期化メモリにつながる可能性があり、fuzzer によって検出されました。この修正により #44066 がクローズされます。#44067(Alexey Milovidov)。- 非圧縮サイズがゼロの場合の追加チェックが
CompressionCodecDeltaに追加されました。#43255(Nikita Taranov)。 - Parquet の配列をフラット化して、配列内の不整合なデータによる問題を回避します。これらの不正なファイルは Apache Iceberg によって生成されることがあります。 #43297 (Arthur Passos).
- ショートサーキット関数実行時に発生していた、
LowCardinalityカラムからの誤った型キャストを修正。 #43311 (Kruglov Pavel). Mergeエンジンを使用するテーブルに対して、SAMPLE BYを含むクエリの PREWHERE 最適化を修正しました。 #43315 (Antonio Andelic).- ストレージポリシーが変更された場合でもテーブルを読み込めるように、
MergeTreeData内のformat_versionファイルの内容を確認および比較するようにしました。 #43328 (Antonio Andelic)。 Bufferテーブルへの INSERT 時に発生し得る(発生する可能性はきわめて低い)"No column to rollback" という論理的なエラーを修正。 #43336 (Azat Khuzhin).allow_function_parametersが設定されている場合に、パーサーが無制限の数の丸括弧を 1 つの関数として解析できてしまうバグを修正。 #43350 (Nikolay Degterinsky).MaterializeMySQL(実験的機能)では DDL:drop table t1, t2をサポートし、MySQL の DROP DDL のほとんどと互換性があります。 #43366 (zzsmdfj).session_log(実験的機能):設定プロファイルが不整合な状態になっているという、ごくまれなケースにおいて、session_logエントリの作成に失敗するためにログインできない問題を修正しました。 #42641 (Vasily Nemkov)。- 関数
if/multiIfで発生する可能性のあるCannot create non-empty column with type Nothingエラーを修正。 #43356 をクローズ。 #43368(Kruglov Pavel)。 - 行レベルフィルタで列のデフォルト値を使用した場合に発生するバグを修正しました。 #43387 (Alexander Gololobov).
DISTINCT+LIMIT BY+LIMITを含むクエリで、期待より少ない行数しか返されない場合がある問題を修正。#43377 を解決。#43410(Igor Nikonov)。Nullable(Decimal(...))に対するsumMapの不具合を修正。 #43414 (Azat Khuzhin).- macOS での時/分単位に対する
date_diffの動作を修正。#42742 をクローズ。#43466(zzsmdfj)。 - マージ/ミューテーションに起因するメモリ使用量の誤った計上を修正しました。 #43516 (Azat Khuzhin).
toString(enum)を含む条件を扱うプライマリキー解析の不具合を修正しました。 #43596 (Nikita Taranov)。この不具合は @tisonkun によって発見されました。- パーティションのアタッチ完了後に、Keeper 内のステータスおよび
attach_is_doneをclickhouse-copierが更新する処理の整合性を確保しました。 #43602 (lzydmxy). Replicatedデータベース(実験的機能)の失われたレプリカを復旧する際に、2 つのテーブル名をアトミックに入れ替える必要がある状況が発生することがあります(EXCHANGEを使用)。以前は 2 つのRENAMEクエリを使用しようとしていましたが、これは明らかにうまくいかず、そのうえデータベースレプリカの復旧プロセス全体を失敗させていました。 #43628 (Nikita Mikhaylov)。s3Cluster関数がNOT_FOUND_COLUMN_IN_BLOCKエラーをスローしてしまう問題を修正します。#43534 をクローズします。#43629(chen)。- 同じキー名を持つがネストレベルが異なる配列を含む JSON オブジェクトをパースする際に発生する可能性のある論理エラー
Array sizes mismatchedを修正。#43569 をクローズ。#43693(Kruglov Pavel)。 - 集約キーの中に
ALIAS列が含まれる分散GROUP BYで発生する可能性があった例外を修正しました。#43709 (Nikita Taranov)。 - ゼロコピーレプリケーション(実験的機能)が有効化され使用されている場合に、プロジェクションが破損する可能性のあるバグを修正。 #43764 (alesapin).
- AWS S3 において、非常に大きなオブジェクトに対してマルチパートアップロードを使用するよう修正しました。 #43824 (ianton-ru).
ON CLUSTERと併用したALTER ... RESET SETTINGの問題を修正しました。1 つのレプリカにしか適用されない可能性がありました。#43843 を修正します。#43848(Elena Torró)。USING句を使用している場合に、右辺でJoinテーブルエンジンを用いた JOIN に発生する論理エラーを修正。 #43963 (Vladimir C)。Joinテーブルエンジンにおけるキー順序が誤っていたバグを修正。 #44012 (Vladimir C)。- Keeper 修正: Raft 用のインターサーバーポートがすでに使用中の場合は例外をスローするようにしました。 #43984 (Antonio Andelic).
- サブクエリで不要なカラムが削除される場合に、
ORDER BY 1, 2のような ORDER BY の位置指定引数が正しく動作するよう修正しました。#43964 をクローズしました。#43987(Kseniia Sumarokova)。 - 副問い合わせに HAVING 句は含まれているものの、実際の集約を含んでいない場合に発生していた例外を修正しました。 #44051 (Nikita Taranov).
- S3 のマルチパートアップロードにおける競合状態を修正しました。この競合状態により、バックアップからのリストア中に
Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR)というエラーが発生する可能性がありました。 #44065 (Vitaly Baranov)。
ClickHouse リリース 22.11, 2022-11-17
後方互換性のない変更
JSONExtractファミリーの関数は、指定された型への変換を試みるようになりました。 #41502 (Márcio Martins)
新機能
- ClickHouse Keeper とのセッションが失われた場合に、ReplicatedMergeTree への INSERT 実行中のリトライをサポートするようになりました。耐障害性の向上に加え、ユーザーエクスペリエンスの改善、具体的には Keeper が再起動された場合(たとえばアップグレードによる再起動など)でも、INSERT 実行中のユーザーにエラーを返さないことを目的としています。 #42607 (Igor Nikonov)。
HudiとDeltaLakeのテーブルエンジンを追加しました。読み取り専用で、S3 上にあるテーブルにのみ使用できます。 #41054 (Daniil Rubin, Kseniia Sumarokova).- テーブル関数
hudiとdeltaLakeを追加しました。 #43080 (flynn). - 複合時間間隔のサポート。1. Interval に対して加算、減算、符号反転の各演算が利用可能になりました。Interval の型が異なる場合、それらの型の Tuple に変換されます。2. Interval の Tuple を Date/DateTime フィールドに加算または減算できるようになりました。3. 異なる型を含む Interval の解析を追加しました。たとえば
INTERVAL '1 HOUR 1 MINUTE 1 SECOND'のような形式です。 #42195(Nikolay Degterinsky)。 - ファイルシステムおよび S3 の再帰的なディレクトリ走査用に
**グロブパターンのサポートを追加しました。#36316 を解決します。#42376(SmitaRKulkarni)。 - write-once-read-many 操作向けの
s3_plainディスクタイプを導入しました。s3_plainディスク向けにMergeTreeテーブルのATTACHを実装しました。 #42628 (Azat Khuzhin). - 適用された行レベルポリシー情報を
system.query_logに追加しました。 #39819 (Vladimir Chebotaryov). - ClickHouse Keeper でスナップショットを手動作成するための 4 文字コマンド
csnpを追加しました。さらに、特定のノードの Raft 情報(例:最後に作成されたスナップショットのインデックス、最後にコミットされたログのインデックス)を取得するためのlgifを追加しました。 #41766 (JackyWoo)。 - Apache Spark と同様の
ascii関数を追加しました: https://spark.apache.org/docs/latest/api/sql/#ascii。 #42670(李扬)。 - モジュロ演算に基づき常に非負の結果を返す関数
pmodを追加しました。 #42755 (李扬)。 - 関数
formatReadableDecimalSizeを追加。#42774(Alejandro)。 - Apache Spark や Impala の
rand関数と類似した関数randCanonicalを追加しました。この関数は、[0, 1) 区間で一様分布に従う、互いに独立同分布な疑似乱数値を生成します。#43124 (李扬)。 - 関数
displayNameを追加し、#36770 を解決しました。#37681(hongbin)。 - パーティション全体に対してのみ古いパーツを最適化するための
min_age_to_force_merge_on_partition_only設定を追加。 #42659 (Antonio Andelic). - 任意の構造化された名前付きコレクション、アクセス型、および
system.named_collectionsに対する汎用実装を追加しました。#43147(Kseniia Sumarokova)。
パフォーマンスの改善
- 文字列プレフィックスに対する条件であれば、
match関数がインデックスを利用できるようになりました。これにより #37333 がクローズされました。#42458(clarkcaoliu)。 - AND および OR 演算子が連続している場合の処理を高速化しました。#42214(Zhiguo Zhou)。
LineAsString入力フォーマットに対して並列パースをサポートしました。これによりパフォーマンスがわずかに向上します。これにより #42502 がクローズされました。#42780(Kruglov Pavel)。- ClickHouse Keeper のパフォーマンス改善: 複数の異なるノードが未コミット状態を持つケースで、コミット処理の性能を向上しました。フォロワーノードが十分な速度で同期に追いつけないケースの改善に役立ちます。#42926(Antonio Andelic)。
NOT LIKE 'prefix%'のような条件でプライマリインデックスを利用できるようになりました。#42209(Duc Canh Le)。
実験的機能
- 他の型の内部で
Object型をサポートしました(例:Array(JSON))。#36969(Anton Popov)。 - MaterializedMySQL において、MySQL binlog の SAVEPOINT イベントを無視するようにしました。#42931(zzsmdfj)。MaterializedMySQL 内での SAVEPOINT クエリも無視するようにしました。#43086(Stig Bakken)。
改善
- 小さな
LIMITを指定した単純なクエリでは、読み取る行数の推定値が正しく算出されるようになり、しきい値が正しくチェックされます。これにより #7071 がクローズされました。#42580(Han Fei)。 - INSERT VALUES クエリでインタラクティブなパラメータをサポートしました。 #43077 (Nikolay Degterinsky).
system.table_functionsに新しいフィールドallow_readonlyを追加し、readonly モードでテーブル関数を使用できるようにしました。 #42414 を解決します。Implementation: * システムテーブルsystem.table_functionsに新しいフィールドallow_readonlyを追加しました。 * 新しいフィールドallow_readonlyを使用して、readonly モードでテーブル関数を使用できるように更新しました。Testing: * filesystem 向けのテスト tests/queries/0_stateless/02473_functions_in_readonly_mode.sh を追加しました。Documentation: * Table Functions に関する英語ドキュメントを更新しました。 #42708 (SmitaRKulkarni).system.asynchronous_metricsに組み込みドキュメントが追加されました。このドキュメントは Prometheus にもエクスポートされます。cacheディスクに関するメトリクスで発生していたエラーを修正しました ― それらが、すべてのcacheディスクではなく、任意の 1 つのキャッシュディスクだけに対して計算されていました。これにより #7644 がクローズされました。 #43194 (Alexey Milovidov)。- スロットリングアルゴリズムをトークンバケット方式に変更しました。 #42665 (Sergei Trifonov).
system.query_logと/var/log/clickhouse-server/*.logの両方およびエラーメッセージ内で、パスワードおよびシークレットキーがマスクされるようになりました。 #42484 (Vitaly Baranov).- 取得されたパーツに対して、レプリケーション遅延の増大を防ぐため、他のパーツでカバーされている部分を削除するようにしました。 #39737 (Azat Khuzhin).
/dev/ttyが利用可能な場合、clickhouse-client および clickhouse-local の進捗は STDERR に書き込まず、端末に直接表示されます。これにより、STDERR がファイルにリダイレクトされている場合でも進捗を確認でき、そのファイルが端末のエスケープシーケンスで汚されることがありません。進捗は--progress falseで無効にできます。これにより #32238 がクローズされました。 #42003(Alexey Milovidov)。- Base64 符号化関数に
FixedString型入力のサポートを追加。 #42285 (ltrk2). system.detached_partsにbytes_on_diskとpathカラムを追加しました。#42264 をクローズします。#42303(chen)。- テーブル関数で挿入テーブルの構造を利用する処理を改善しました。
use_structure_from_insertion_table_in_table_functions設定に新しい値2が追加され、この値を指定すると ClickHouse が挿入テーブルの構造を利用できるかどうかを自動的に判定するようになりました。#40028 をクローズ。#42320(Kruglov Pavel)。 INSERT FROM INFILEで進捗が表示されない問題を修正。#42548 をクローズ。#42634 (chen)。- 関連する関数で返されるトークン数の上限を指定できるようにするため、関数
tokensをリファクタリング(デフォルトでは無効)。 #42673 (李扬)。 formatDateTime関数およびFROM_UNIXTIME関数でDate32型の引数を使用できるようにしました。 #42737 (Roman Vasin)- tzdata を 2022f に更新。メキシコは、米国国境付近を除き今後はサマータイム(DST)を採用しません: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html。チワワ州は 2022-10-30 から通年で UTC-6 に移行します。フィジーもサマータイムの適用を終了しました。詳細は https://github.com/google/cctz/pull/235 および https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209 を参照してください。 #42796 (Alexey Milovidov)。
- 非同期挿入用の
FailedAsyncInsertQueryイベントメトリクスを追加。 #42814(Krzysztof Góralski)。 - クエリプランにおいて
read-in-order最適化を実装しました。これはデフォルトで有効になっています。以前の AST ベースのバージョンを使用するには、query_plan_read_in_order = 0を設定してください。#42829 (Nikolai Kochetov)。 - S3 へのバックアップ時に、S3 のマルチパートアップロードのパート数上限(最大 10 000 個)に達してエラーが発生するのを避けるため、アップロードパートのサイズを指数関数的に大きくするようにしました。 #42833 (Vitaly Baranov).
- マージタスクが継続的にビジー状態でディスク容量が不足していると、完全に期限切れとなったパーツを選択して削除できず、その結果としてディスク容量が不足したままになります。私の考えでは、パーツ全体が期限切れになった場合、TTL を正常に実行するための前提条件として追加のディスク容量を要求すべきではありません。#42869 (zhongyuankai).
oss関数とOSSテーブルエンジンを追加(ユーザーにとって便利)。ossは S3 と完全に互換性があります。 #43155 (zzsmdfj).system.asynchronous_metricsテーブル用に収集する OS 関連情報のエラー報告を改善しました。 #43192 (Alexey Milovidov).INFORMATION_SCHEMAテーブルを変更し、ClickHouse が MySQL 互換プロトコルを使用して自身に接続できるようにしました。エイリアスではなく列を追加しました(#9769 に関連)。これにより、さまざまな MySQL クライアントとの互換性が向上します。#43198(Filatenkov Artur)。- Power BI が MySQL プロトコル経由で接続する際の互換性を確保するため、いくつかの関数を追加しました #42612(Filatenkov Artur)。
- 変更時のダッシュボードの使い勝手を向上 #42872 (Vladimir C).
ビルド/テスト/パッケージングの改善
- 各 pull request および master への各 commit ごとに SQLancer を実行するようにしました。SQLancer は、論理バグの自動検出に特化したオープンソースのファジングツールです。#42397 (Ilya Yatsishin).
- zlib-ng を最新バージョンに更新しました。#42463 (Boris Kuschel).
- Jepsen を用いた ClickHouse server のテストをサポートしました。ちなみに、すでに ClickHouse Keeper を Jepsen でテストするサポートはありました。この pull request により、そのサポートが Replicated テーブルに拡張されます。#42619 (Antonio Andelic).
- clang-tidy の結果キャッシュに https://github.com/matus-chochlik/ctcache を使用します。#42913 (Mikhail f. Shiryaev).
- 修正前は、ユーザー定義の設定ファイルは RPM によって
$file.rpmsaveとして保存されていました。この PR でこの挙動を修正し、パッケージによってユーザーのファイルが置き換えられないようにします。#42936 (Mikhail f. Shiryaev). - Ubuntu Docker イメージからいくつかのライブラリを削除しました。#42622 (Alexey Milovidov).
バグ修正(公式の stable または prestable リリースにおけるユーザーから見て分かる誤動作)
- エイリアスの AST をクローンするように normaliser を更新しました。これにより #42452 が解決しました。実装内容: * 置き換える際にエイリアス AST をクローンするよう、QueryNormalizer を更新しました。以前は同じものを単に代入していたため、同じ親が再度挿入されることになり、LogicalExpressinsOptimizer で例外が発生していました。 * このバグは新しい analyser(allow_experimental_analyzer)では発生しないため、それについての変更はありません。この問題に対するテストを追加しました。#42827 (SmitaRKulkarni).
Lazyデータベースのテーブルをバックアップする際の競合状態を修正。 #43104 (Vitaly Baranov).skip_unavailable_shardsの修正:s3Clusterテーブル関数で動作していなかった問題を修正しました。 #43131 (chen)。s3Clusterにおけるスキーマ推論を修正し、hdfsClusterを改善しました。 #41979 (Kruglov Pavel)- URL テーブルエンジン / テーブル関数から読み取る際の再試行処理を修正しました(再試行可能なエラーが必要以上に多く再試行される可能性があり、再試行不可能なエラーはコード内のアサーション失敗を引き起こしていました)。 #42224 (Kseniia Sumarokova).
- DNS および c-ares 関連のセグメンテーションフォルトが報告され、修正されました。 #42234 (Arthur Passos)。
- PK 解析(単調性チェック)中に発生する可能性のある
LOGICAL_ERRORArguments of 'plus' have incorrect data typesを修正しました。最初の引数が定数である単調な二項関数に対する PK 解析の誤りを修正しました。 #42410 (Nikolai Kochetov). - Nullable 内に含めることができないキー型に対するキー解析の誤りを修正しました。これにより #42456 が解決されます。#42469(Amos Bird)。
- 設定名のタイプミスを修正し、
input_format_csv_use_best_effort_in_schema_inference設定使用時にスキーマ推論キャッシュが誤って利用されていた問題を修正しました。#41735 をクローズ。#42536(Kruglov Pavel)。 - データ型が
LowCardinalityの場合に誤ったヘッダーでSetを作成してしまう問題を修正。 #42460 をクローズ。 #42579(flynn)。 (U)Int128と(U)Int256の値がPREWHEREで正しくチェックされるようになりました。 #42605 (Antonio Andelic).- セグメンテーションフォールトを引き起こす可能性のあった functions パーサーのバグを修正。 #42724 (Nikolay Degterinsky)。
truncate tableにおけるロック機構を修正しました。 #42728 (flynn).- ファイルが存在しない場合(または、最終的に同じエラーが発生する可能性のある
OPTIMIZE TABLE FINAL実行時)にwebディスクで発生しうるクラッシュを修正しました。 #42767 (Azat Khuzhin). system.session_logにおけるauth_typeのマッピングを、列挙値にSSL_CERTIFICATEを含めることで修正しました。 #42782 (Miel Donkers)。- ASAN ビルド時に Create User クエリパーサで発生する stack-use-after-return を修正。 #42804 (Nikolay Degterinsky).
- シンボルが 16 バイト境界をまたいでいた場合の
lowerUTF8/upperUTF8の動作を修正しました(文字列が 16 バイトより長い場合に非常によく発生するケース)。 #42812 (Azat Khuzhin). - 不正な形式の入力が与えられた場合の誤動作を防ぐため、LZ4 伸長ルーチンに追加の境界チェックを導入しました。 #42868 (Nikita Taranov)。
- クエリキャンセル時にまれに発生する可能性のあったハングを修正。 #42874 (Azat Khuzhin).
- 複数の OR 条件を含むハッシュ結合での誤った動作を修正し、#42832 をクローズ。 #42876(Vladimir C)。
- 'three table join' に対して
select if asを実行するとヌルポインタが生成されます。例えば、次の SQL クエリです: #42883 (zzsmdfj)。 - Cluster Discovery における MemorySanitizer のレポートを修正し、#42763 をクローズ。#42905(Vladimir C)。
- 空文字列の場合の DateTime スキーマの推論を改善。 #42911 (Kruglov Pavel).
- Projection を使用できるにもかかわらず、実際には利用可能な projection が存在しない場合にまれに発生していた NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。これにより #42771 が修正されます。このバグは https://github.com/ClickHouse/ClickHouse/pull/25563 にて導入されたものです。#42938(Amos Bird)。
- テーブルに DATETIME 型が含まれている場合の
PostgreSQLデータベースエンジンでの ATTACH TABLE を修正しました。#42817 をクローズ。#42960(Kseniia Sumarokova)。 - lambda の構文解析を修正。#41848 をクローズ。#42979(Nikolay Degterinsky)。
- NULL 許可キーがハイパー長方形の中間に現れる場合に、キーの解析を誤る問題を修正します。これにより #43111 が修正されます。 #43133 (Amos Bird)。
- 細工された集約関数状態のデシリアライズ処理における複数のバッファーオーバーリードを修正しました。 #43159 (Raúl Marín).
- NULL および const Nullable 引数が指定された場合の
if関数の動作を修正。#43069 をクローズ。#43178(Kruglov Pavel)。 - 'best effort' アルゴリズムで DateTime をパースする際に発生する10進数演算のオーバーフローを修正。#43061 をクローズ。#43180(Kruglov Pavel)。
git-importツールによって生成されるindentフィールドの値が誤って計算されていました。詳しくは https://clickhouse.com/docs/getting-started/example-datasets/github/ を参照してください。 #43191(Alexey Milovidov)。- サブクエリやキャストと組み合わせた
Interval型での予期しない挙動を修正しました。 #43193 (jh0x).
ClickHouse リリース 22.10, 2022-10-25
後方互換性のない変更
- キャッシュ関連コマンドの名前を変更しました:
show caches->show filesystem caches,describe cache->describe filesystem cache。 #41508 (Kseniia Sumarokova)。 LIVE VIEWに対するWITH TIMEOUTセクションのサポートを削除しました。これにより #40557 がクローズされます。 #42173 (Alexey Milovidov)。- クライアントのプロンプトにおける
{database}マクロのサポートを削除しました。データベースが未指定の場合に正しく表示されず、USEステートメントでも更新されていませんでした。これにより #25891 がクローズされます。 #42508 (Alexey Milovidov)。
新機能
- コンポーズ可能なプロトコル設定が追加されました。これにより、プロトコルごとに異なる待ち受けホストを設定できるようになりました。PROXYv1 などのプロトコルラッパーは、他の任意のプロトコル(TCP、TCP secure、MySQL、Postgres)の上に重ねて設定できます。 #41198 (Yakov Olkhovskiy)。
- バックアップ先の新しい種別として
S3を追加しました。既存のパスおよびデータ構造をそのまま利用する S3 への BACKUP をサポートします。 #42333 (Vitaly Baranov), #42232 (Azat Khuzhin). - 指定した分布に従う乱数を生成するための関数(
randUniform、randNormal、randLogNormal、randExponential、randChiSquared、randStudentT、randFisherF、randBernoulli、randBinomial、randNegativeBinomial、randPoisson)を追加しました。これにより #21834 が解決されました。 #42411 (Nikita Mikhaylov)。 - ClickHouse Keeper の改善点: スナップショットを S3 にアップロードするサポートを追加しました。S3 に関する情報は
keeper_server.s3_snapshot内で定義できます。 #41342 (Antonio Andelic)。 - 正規分布に従う観測値からなる複数のグループに対して統計的検定を行い、すべてのグループの平均が同じかどうかを判定するための集約関数
analysisOfVariance(anova) を追加しました。元の PR は #37872。#42131(Nikita Mikhaylov)。 - 設定
max_temporary_data_on_disk_size_for_user/max_temporary_data_on_disk_size_for_queryを使用して、ディスク上に保存される一時データの容量を制限できるようにしました。 #40893 (Vladimir C). JSONObjectEachRowフォーマットでオブジェクト名をカラム値として書き込みおよび解析できるようにする設定format_json_object_each_row_column_for_object_nameを追加しました。#41703(Kruglov Pavel)。- SQL に BLAKE3 ハッシュ関数を追加。 #33435 (BoloniniD).
- 関数
javaHashは整数型にも対応するようになりました。 #41131 (JackyWoo)。 - ON CLUSTER DDL に対する OpenTelemetry のサポートを追加(
distributed_ddl_entry_format_versionを 4 に設定する必要があります)。#41484 (Frank Chen). - システムテーブル
asynchronous_insert_logを追加しました。非同期インサート(wait_for_async_insert=0の fire-and-forget モードでのクエリ結果を含む)に関する情報を保持し、より高度なインサイト取得を可能にします。 #42040 (Anton Popov). - HTTP プロトコルに対する非標準的な拡張である HTTP の
Accept-Encodingヘッダーに、lz4、bz2、snappy圧縮方式のサポートを追加。 #42071 (Nikolay Degterinsky). - Morton Coding (ZCurve) のエンコード/デコード関数を追加。 #41753 (Constantine Peresypkin).
SET setting_name = DEFAULTをサポートするようになりました。 #42187 (Filatenkov Artur).
実験的機能
allow_experimental_analyzer設定のもとで、クエリ解析およびプランニング用の新しいインフラストラクチャを追加しました。#31796(Maksim Kita)。- Kusto Query Language の初期実装を追加しました。まだ使用しないでください。#37961(Yong Wang)。
パフォーマンスの改善
- 「Too many parts」しきい値を緩和しました。これにより #6551 がクローズされます。平均パートサイズが十分に大きい(少なくとも 10 GiB)場合、ClickHouse は 1 つのパーティション内により多くのパートを許可するようになりました。これにより、ディスクシェルフやオブジェクトストレージを利用することで、単一サーバー上の単一テーブルの単一パーティションにペタバイト単位のデータを保持することが可能になります。#42002(Alexey Milovidov)。
- 必要なスタックサイズを小さくするため、演算子優先順位用の要素パーサーを実装しました。#34892(Nikolay Degterinsky)。
DISTINCT in order最適化において、データストリームのソート特性を活用するようにしました。この改善により、該当する場合には DISTINCT に対して順序付き読み取りが可能になります(以前は DISTINCT 内のカラムに対して ORDER BY を指定する必要がありました)。#41014(Igor Nikonov)。- ColumnVector: UInt8 インデックスを AVX512VBMI で最適化しました。#41247(Guo Wangyang)。
ThreadGroupStatus::mutexのロック競合を最適化しました。ICX デバイス(Intel Xeon Platinum 8380 CPU、80 コア、160 スレッド)上での SSB(Star Schema Benchmark)のパフォーマンス実験では、この変更により、すべてのサブケースにおける QPS の幾何平均が 2.95 倍 向上することが示されました。#41675(Zhiguo Zhou)。- AArch64 ビルドに
ldapr機能を追加しました。これは Graviton 2+、Azure および GCP インスタンスでサポートされています。clang-15 に 最近 追加されたものです。#41778(Daniel Kutenin)。 - 文字列比較において、一方の引数が空の定数文字列である場合のパフォーマンスを改善しました。#41870(Jiebin Sun)。
- いくつかのケースで Aggregate State を共有できるように、ColumnAggregateFunction の
insertFromを最適化しました。#41960(flynn)。 azure_blob_storageディスクへの書き込みを高速化しました(各バッファサイズごとにブロックを書き込むのではなく、max_single_part_upload_sizeを尊重するようにしました)。この非効率性は #41754 で指摘されていました。#42041(Kseniia Sumarokova)。- 無駄を避けるため、process list と query_log 内のスレッド ID を一意にしました。#42180(Alexey Milovidov)。
- 要求された読み取り範囲がキャッシュ設定
bypass_cache_threasholdで定義されたしきい値を超える場合に、キャッシュを完全にスキップ(キャッシュへのダウンロードおよびキャッシュデータの読み取りの両方を行わない)することをサポートしました(enable_bypass_cache_with_thresholdの有効化が必要)。#42418(Han Shukai)。これはローカルディスクが遅い場合に有効です。
改善
- 設定
allow_implicit_no_passwordを追加しました。allow_no_passwordと組み合わせることで、IDENTIFIED WITH no_passwordが明示的に指定されていない限り、パスワードなしのユーザーを作成することを禁止します。 #41341 (Nikolay Degterinsky). - Embedded Keeper は常にバックグラウンドで起動するようになり、ClickHouse はクォーラムを達成しなくても起動できるようになります。 #40991 (Antonio Andelic).
- 以前の接続が期限切れになった場合に、新しい ZooKeeper への接続を再確立する処理を、より即応的になるよう改善しました。以前は、デフォルトで毎分実行されるタスクがあり、そのためテーブルがその間およそ1分間読み取り専用状態になる可能性がありました。 #41092 (Nikita Mikhaylov)。
- これで、プロジェクションをゼロコピー レプリケーション(zero-copy replication は本番環境向けではない機能です)と併用できるようになりました。 #41147 (alesapin).
- サブクエリ内での
(EXPLAIN SELECT ...)構文をサポートしました。SELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col)のようなクエリが有効になりました。#40630 (Vladimir C)。 async_insert_max_data_sizeまたはasync_insert_busy_timeout_msをクエリごとのスコープで変更できるようにしました。たとえば、ユーザーがデータをまれにしか挿入せず、デフォルト設定を調整するためのサーバー設定にアクセスできない場合などに役立ちます。 #40668 (Nikita Mikhaylov).- リモートファイルシステムからの読み取り処理を改善し、読み取り/書き込み用のスレッドプールサイズを設定可能にしました。 #41070 をクローズしました。 #41011(Kseniia Sumarokova)。
- WindowTransform/arratReduce*/initializeAggregation/aggregate 関数のバージョン管理において、すべてのコンビネータの組み合わせをサポートしました。以前は、
ForEach/Resample/Mapのようなコンビネータはこれらの箇所では動作せず、使用するとState function ... inserts results into non-state columnのような例外が発生していました。 #41107 (Kruglov Pavel). - 復号に失敗した場合(例: 誤ったキーで復号した場合)に例外をスローする代わりに NULL を返す
tryDecrypt関数を追加しました。 #41206 (Duc Canh Le). - 各ディスクごとの予約されていない空き容量を確認できるように、
system.disksテーブルにunreserved_spaceカラムを追加しました。 #41254 (filimonov). - テーブル関数の引数で S3 の Authorization ヘッダーをサポートしました。 #41261 (Kseniia Sumarokova).
- Keeper および内部 ZooKeeper クライアントで MultiRead のサポートを追加しました(ZooKeeper プロトコルの拡張であり、ClickHouse Keeper でのみ利用可能です)。 #41410 (Antonio Andelic).
- IN 演算子で decimal 型と浮動小数点リテラルを比較するためのサポートを追加。 #41544 (liang.huang).
- キャッシュ設定で、
1TBのような人間が読みやすいサイズ指定を許可します。 #41688 (Kseniia Sumarokova)。 - ClickHouse は、キャッシュが非同期に更新されるまでの一定期間(デフォルトでは 15 秒間)、古い DNS エントリをキャッシュしてしまう可能性がありました。この期間中でも、ClickHouse は接続の確立を試みてエラーを発生させることがありました。この挙動は修正されました。 #41707 (Nikita Mikhaylov)。
clickhouse-client/clickhouse-local向けに、fzfやskのようなユーティリティを用いたインタラクティブな履歴検索を追加しました(動作をさらに細かく設定するにはFZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONSを使用できます)。 #41730 (Azat Khuzhin).- 無効な証明書を提示するセキュアサーバーへの接続を続行できるクライアントを、'--accept-certificate' フラグを指定した場合にのみ許可するようにしました。 #41743 (Yakov Olkhovskiy).
- 既存の関数
tryBase64Decodeと同様の関数tryBase58Decodeを追加。 #41824 (Robert Schulze). - 異なるプライマリキーを持つパーティションを置き換える場合のフィードバックを改善しました。#34798 を修正しました。#41838(Salvatore)。
- 並列パースを修正しました。segmentator が
max_block_sizeを確認するようになりました。これにより、並列パース時かつ LIMIT が小さい場合に発生していたメモリの過剰割り当てが解消されました。 #41852 (Vitaly Baranov)。 TABLE_IS_DROPPED例外が system テーブルに対する SELECT クエリの実行中に発生し、かつ無視された場合には、その例外をsystem.errorsに追加しないようにしました。 #41908 (AlfVII).- オプション
enable_extended_results_for_datetime_functionsを改善し、関数toStartOfDay、toStartOfHour、toStartOfFifteenMinutes、toStartOfTenMinutes、toStartOfFiveMinutes、toStartOfMinuteおよびtimeSlotが戻り値の型として DateTime64 を返すようにしました。 #41910 (Roman Vasin)。 - テキストフォーマットに対する
DateTime型推論を改善しました。これにより、date_time_input_format設定が考慮され、数値をタイムスタンプとして扱って日時を推論しようとしなくなりました。 #41389 をクローズしました。 #42206 をクローズしました。 #41912(Kruglov Pavel)。 perform_ttl_move_on_insert= false のときに挿入を行う際に出ていた紛らわしい警告を削除しました。 #41980 (Vitaly Baranov)。- ユーザーが
count(*)と同様にcountState(*)を書けるようにしました。これにより #9338 がクローズされました。#41983(Amos Bird)。 rankCorrのサイズのオーバーフローを修正。 #42020 (Duc Canh Le).- より使いやすいレポートのために、Sentry の設定で任意の文字列を環境名として指定できるオプションを追加しました。 #42037 (Nikita Mikhaylov)。
- CSV からの範囲外の Date 値のパース処理を修正。 #42044 (Andrey Zvonov).
parseDataTimeBestEffortは、日付と時刻の間にカンマを含む形式をサポートするようになりました。 #42038 をクローズしました。 #42049 (flynn).ReplicatedMergeTreeにおけるステイル(stale)レプリカの復旧プロセスを改善しました。失われたレプリカが、正常なレプリカには存在しない一部のパーツを保持しているものの、それらのパーツが正常なレプリカのレプリケーションキュー上では将来的に生成される予定になっている場合、失われたレプリカはそれらのパーツを切り離さずに保持するようになりました。 #42134 (Alexander Tokmakov)。date_diff関数でDate32型の引数を使用できるようにしました。開始日時が Unix エポックより前で終了日時が Unix エポックより後の場合にDateTime64型の引数を使用すると発生していたdate_diff関数の不具合を修正しました。 #42308 (Roman Vasin).- Minio に大きなパートをアップロードする際、'Complete Multipart Upload' に時間がかかる場合があります。Minio は 10 秒ごとにハートビートを送信します(https://github.com/minio/minio/pull/7198 を参照)。しかし ClickHouse では送信/受信タイムアウトがデフォルトで 5 秒に設定されているため、その前にタイムアウトしてしまいます。#42321(filimonov)。
- Decimal などの複合型を含む集計状態型に対して、ごくまれに不正なキャストが行われる問題を修正しました。これにより #42408 が修正されました。 #42417 (Amos Bird).
dateName関数でDate32型の引数を使用できるようにしました。 #42554 (Roman Vasin).- インデックス解析時に、NULL リテラルを含むフィルタが使用されるようになりました。#34063。#41842 (Amos Bird)。
- 範囲内のすべてのパーツが指定した閾値より古い場合に、それらのパーツをマージします。閾値は
min_age_to_force_merge_secondsで設定できます。この変更により #35836 がクローズされます。 #42423(Antonio Andelic)。これは、ロジックの大部分を実装した @fastio による #39550i の続きです。 allow_experimental_analyzer設定のもとで利用されるクエリ解析およびプランニング用の新しいインフラストラクチャを追加しました。 #31796 (Maksim Kita).- 切断された keeper 接続からの復旧にかかる時間を短縮しました。 #42541 (Raúl Marín).
ビルド/テスト/パッケージングの改善
- テーブル定義用のファザー(fuzzer)を追加しました。#40096(Anton Popov)。これは、今年これまでで最大の ClickHouse テストまわりの進展です。
- ClickHouse Cloud サービスのベータ版をリリースしました:https://console.clickhouse.cloud/。これは ClickHouse を利用する最も簡単な方法です(単一コマンドでのインストールよりもわずかに簡単です)。
- AST Fuzzer に
WHERE句生成のサポートを追加し、ORDER BYおよびWHERE句を追加・削除できるようにしました。#38519(Ilya Yatsishin)。 - Aarch64 バイナリは、2016 年にリリースされた ARMv8.2 以上を必要とするようになりました。特に、ARM LSE、すなわちネイティブなアトミック操作を利用できるようになります。また、古い ARMv8.0 ハードウェア(例:Raspberry Pi 4)向けにバイナリをコンパイルできるようにするため、CMake のビルドオプション "NO_ARMV81_OR_HIGHER" を追加しました。#41610(Robert Schulze)。
- Musl で ClickHouse をビルドできるようにしました(既にサポートしていましたが壊れていた部分を、小規模な変更で修正)。#41987(Alexey Milovidov)。
- インストール時に、存在しないファイルに対して
sedコマンドを実行して「ファイルが見つかりません」エラーになることを避けるため、$CLICKHOUSE_CRONFILEファイルのチェックを追加しました。#42081(Chun-Sheng, Li)。 - 新しいタイムゾーン変更に対応するため、cctz を
2022eに更新しました。パレスチナでの切り替えは、現在は土曜日の 02:00 になりました。ウクライナの 3 つのゾーンを 1 つに簡素化しました。ヨルダンとシリアは +02/+03 と DST の組み合わせから、通年 +03 に切り替えました。(https://data.iana.org/time-zones/tzdb/NEWS)。これにより #42252 がクローズされます。#42327(Alexey Milovidov)。#42273(Dom Del Nano)。 - BLAKE3 ハッシュ関数ライブラリを例として、ClickHouse に Rust コードのサポートを追加しました。#33435(BoloniniD)。
バグ修正(公式 stable または prestable リリースにおけるユーザーから見える誤動作)
- 大きな整数型を扱う
LowCardinalityで正しい集約メソッドを選択するようにした。 #42342 (Duc Canh Le). webディスクに関する複数の不具合修正。 #41652 (Kseniia Sumarokova).https_portが設定に存在しない場合に docker run コマンドが失敗する不具合を修正します。 #41693 (Yakov Olkhovskiy).- サーバーのシャットダウン時や
SYSTEM STOP MERGESクエリ実行時にミューテーションが正しくキャンセルされず、キャンセル処理に長時間かかる可能性がありましたが、この問題は修正されました。 #41699 (Alexander Tokmakov). ORDER BYまたはGROUP BYで、ソートキーのプレフィックスに含まれる列を単調関数でラップし、かつ「read in order」最適化(設定optimize_read_in_orderおよびoptimize_aggregation_in_order)を有効にしている場合に、クエリ結果が誤ったものになる問題を修正しました。 #41701 (Anton Popov).optimize_monotonous_functions_in_order_by設定が有効な状態でMergeテーブルに対するSELECTを実行した際に発生しうるクラッシュを修正。#41269 を解決。#41740(Nikolai Kochetov)。- 極めてまれなケースですが、あるパートを破損としてdetachした直後にレプリカが再起動された場合に発生し得る「Part ... intersects part ...」エラーを修正しました。 #41741 (Alexander Tokmakov).
- 軽量削除で使用するために予約されているカラム名
_row_existsを持つ MergeTree テーブルの作成または変更を許可しないようにしました。#41716 を修正。#41763(Jianmei Zhang)。 - 一部の HTTP レスポンスで CORS ヘッダーが欠落する不具合を修正。 #41792 (Frank Chen).
- 20.3 以前のバージョンで作成され、一度も
ALTERされていないReplicatedMergeTreeテーブルは、22.9 では起動に失敗する可能性がありましたが、この問題は修正されました。#41742 を修正。#41796 (Alexander Tokmakov)。 - バッチ送信が何らかの理由で失敗すると、自動的に復旧することはできません。適切に処理されない場合はデータが蓄積し、出力されるエラーメッセージがどんどん長くなって、HTTP スレッドがブロックされてしまいます。 #41813 (zhongyuankai).
- compressed marks 設定を使用している compact parts を修正。 #41783 および #41746 を修正。 #41823(alesapin)。
- 古いバージョンの Replicated データベースには、[Zoo]Keeper 内に特別なマーカーがありません。特別なマークの有無ではなく、そのノードに何らかの不明なデータが含まれているかどうかだけを確認する必要があります。#41875(Nikita Mikhaylov)。
- fs キャッシュで発生する可能性のある例外を修正。 #41884 (Kseniia Sumarokova).
- S3 テーブル関数の
use_environment_credentialsを修正。 #41970 (Kseniia Sumarokova). ReplicatedMergeTreeテーブルのレプリケーション開始を妨げる可能性があった、壊れたパーツのデタッチ時の「Directory already exists and is not empty」エラーを修正しました。 #40957 を解決します。 #41981 (Alexander Tokmakov)。toDateTime64は、負の整数および浮動小数点数の引数に対して同一の出力を返すようになりました。 #42025 (Robert Schulze)。azure_blob_storageへの書き込みを修正。#41754 を一部解決。#42034(Kseniia Sumarokova)。- 特定の
bzip2ファイルにおけるbzip2デコード処理の問題を修正。#42046 (Nikolay Degterinsky)。 - 拡張範囲の開始(1900 年 1 月)において、設定
enable_extended_results_for_datetime_functions = 1有効時の SQL 関数toLastDayOfMonthを修正しました。- 拡張範囲の終了(2299 年 12 月)において、設定 "enable_extended_results_for_datetime_functions = 1" 有効時の SQL 関数 "toRelativeWeekNum()" を修正しました。- 不要なインデックス計算を避けることで、SQL 関数 "toISOYear()"、"toFirstDayNumOfISOYearIndex()" および "toYearWeekOfNewyearMode()" のパフォーマンスを改善しました。#42084 (Roman Vasin)。 - 各テーブルごとのフェッチの最大サイズが誤って 8 に設定されており、プールサイズの方が大きくなる可能性がありました。現在は、テーブルごとのフェッチ最大サイズはプールサイズと同じ値になりました。 #42090 (Nikita Mikhaylov).
- テーブル間の依存関係を壊さずにテーブルを削除できるかどうかをチェックする前に、テーブルがシャットダウンされ、ディクショナリがデタッチされてしまうことがありましたが、これを修正しました。 #41982 を修正。 #42106 (Alexander Tokmakov)。
remote_filesystem_read_method=readとファイルシステムキャッシュ使用時に発生していた重大な非効率性を修正。#42125 をクローズ。#42129 (Kseniia Sumarokova)。- use_hedged_requests = 0 の分散クエリで発生し得るタイムアウト例外を修正。 #42130 (Azat Khuzhin).
Date32型と併用した場合におけるrunningDifference関数内部の軽微なバグを修正しました。以前はDate型が使用されており、Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'のような論理エラーを引き起こす可能性がありました。 #42143 (Alfred Xu).- ベースバックアップからの 4GB 超ファイルの再利用に関する不具合を修正。#42146 (Azat Khuzhin).
- ソート順での DISTINCT が、ソートキーの先頭列に関数を含む場合に LOGICAL_ERROR で失敗します。 #42186 (Igor Nikonov).
aggregate_functions_null_for_empty設定に関連するプロジェクションのバグを修正しました。このバグは非常にまれで、サーバーの設定ファイルでaggregate_functions_null_for_emptyを有効にした場合にのみ発生します。これにより #41647 が解決されます。#42198(Alexey Milovidov)。Bufferテーブルからの降順での読み取り処理を修正。 #42236 (Duc Canh Le).- デフォルトプロファイルで
background_pool_size設定が行われている一方でbackground_merges_mutations_concurrency_ratioが設定されていない場合に、ClickHouse が起動しなくなる不具合を修正。 #42315 (nvartolomei). - テーブルスキーマと異なるカラムを持つパーツがアタッチされた状態で、そのパーツに対して
ALTER UPDATEを実行すると、ディスク上のcolumns.txtメタデータが不正な状態になることがありました。そのようなパーツから読み取ろうとすると、エラーで失敗するか、不正なデータが返される可能性がありました。#42161 を修正しました。#42319(Nikolai Kochetov)。 additional_table_filtersの設定がDistributedストレージに対して適用されていませんでした。#41692 を修正しました。 #42322 (Nikolai Kochetov).- クエリの終了/キャンセル処理時のデータレースを修正しました。これにより #42346 がクローズされます。 #42362 (Alexey Milovidov)。
- これは、日付/時刻関数にリグレッションを導入した #40217 を差し戻します。#42367(Alexey Milovidov)。
- 偽 (falsy) 条件での join における assert cast を修正し、#42380 をクローズしました。#42407 (Vladimir C)。
- Decimal データ型の処理で発生していたバッファオーバーフローを修正しました。これにより #42451 がクローズされました。 #42465 (Alexey Milovidov).
AggregateFunctionQuantileは、UInt128列に対して正しく動作するようになりました。以前は、分位点の状態がUInt128列をInt128として解釈していたため、誤った結果につながる可能性がありました。 #42473 (Antonio Andelic).- Float32 以外のカラムに対する
Annoyインデックスへの INSERT 時に発生していた bad_cast アサーションを修正。Annoyインデックスは実験的な機能です。 #42485 (Robert Schulze). - Date または DateTime 型と 128 または 256 ビット整数との算術演算で、未初期化のメモリ領域が参照されていました。 #42453. #42573 (Alexey Milovidov).
- サーバーのアップグレード中に、パーティションキーにエイリアス関数名が含まれている場合に発生していた予期しないテーブルのロードエラーを修正。 #36379 (Amos Bird).
ClickHouse リリース 22.9, 2022-09-22
後方互換性のない変更
- 20.3 以前から 22.9 以降へのアップグレードは、
ReplicatedMergeTreeテーブルが 1 つでも存在する場合、中間バージョンを経由して実施する必要があります。そうでない場合、新バージョンのサーバーは起動しません。 #40641 (Alexander Tokmakov). - 関数
accurate_Castおよびaccurate_CastOrNullを削除しました(これらは名前にアンダースコアが入る点でaccurateCastおよびaccurateCastOrNullと異なり、cast_keep_nullable設定値の影響も受けません)。これらの関数はドキュメント化されておらず、テストもされておらず、使用もされておらず、必要でもありませんでした。コードの一般化の過程でたまたま残っていたものです。 #40682 (Alexey Milovidov). - すべての新しいテーブル関数がドキュメント化されることを保証するテストを追加しました。#40649 を参照してください。テーブル関数
MeiliSearchをmeilisearchにリネームしました。 #40709 (Alexey Milovidov). - すべての新しい関数がドキュメント化されることを保証するテストを追加しました。#40649 を参照してください。関数
lemmatize、synonyms、stemは誤って大文字小文字を区別しない動作になっていました。現在は大文字小文字を区別します。 #40711 (Alexey Milovidov). - セキュリティおよび安定性の観点から、catboost モデルはもはや ClickHouse サーバー内で評価されません。代わりに、評価は clickhouse-library-bridge 内で実行されます。これは catboost ライブラリをロードし、HTTP を介してサーバープロセスと通信する別プロセスです。 #40897 (Robert Schulze).
- YAML 設定ファイルの解釈を、より一般的な慣習に沿ったものにしました。 #41044 (Vitaly Baranov).
新機能
insert_quorum = 'auto'をサポートし、過半数を自動的に使用できるようにしました。 #39970 (Sachin).- ClickHouse server に組み込みダッシュボードを追加しました。これは、ClickHouse の機能を使って 1% の労力で 90% の成果を達成する方法を示すデモプロジェクトです。 #40461 (Alexey Milovidov).
- 新しい設定制約の書き込み種別
changeable_in_readonlyを追加しました。 #40631 (Sergei Trifonov). INTERSECT DISTINCTとEXCEPT DISTINCTをサポートしました。 #40792 (Duc Canh Le).- 新しい入出力フォーマット
JSONObjectEachRowを追加しました。フォーマットJSON/JSONCompact/JSONColumnsWithMetadataのインポートをサポートします。新しい設定input_format_json_validate_types_from_metadataを追加し、メタデータ中のデータ型がヘッダーのデータ型と一致するかどうかをチェックするかを制御できるようにしました。新しい設定input_format_json_validate_utf8を追加しました。これを有効にすると、すべてのJSONフォーマットで UTF-8 シーケンスが検証されます(デフォルトでは無効)。この設定は出力フォーマットJSON/JSONCompact/JSONColumnsWithMetadataには影響せず、これらは常に UTF-8 シーケンスを検証します(互換性のための例外です)。新しい設定input_format_json_read_numbers_as_stringsを追加し、String 列内の数値をパースできるようにしました(デフォルトでは無効)。新しい設定output_format_json_quote_decimalsを追加し、10 進数を二重引用符で囲んで出力できるようにしました(デフォルトでは無効)。また、データインポート時に、二重引用符で囲まれた 10 進数をパースできるようにしました。 #40910 (Kruglov Pavel). - DESCRIBE TABLE クエリでクエリパラメータの使用をサポートしました。 #40952 (Nikita Taranov).
- Parquet の Time32/64 を DateTime64 に変換することでサポートしました。Parquet の Time32/64 は真夜中からの経過時間を表し、DateTime32/64 は実際の Unix タイムスタンプを表します。変換は単に
0からのオフセットを行います。 #41333 (Arthur Passos). - Apache Datasketches に対する集合演算を実装しました。 #39919 (Fangyuan Deng). 注意: Apache Datasketches を使用する意味はなく、ClickHouse より劣っています。他システムとの連携用途でのみ意味があります。
- テキストフォーマット(
CSV、TSV)読み取り時に、指定したファイルへエラーを記録できるようにしました。 #40516 (zjial).
実験的機能
Annoyに基づく ANN(近似最近傍)インデックスを追加しました。 #40818 (Filatenkov Artur). #37215 (VVMak).- 新しいストレージエンジン
KeeperMapを追加しました。これは ClickHouse Keeper または ZooKeeper をキーバリューストアとして使用します。 #39976 (Antonio Andelic). このストレージエンジンは、少量のメタデータを保存することを目的としています。 - インメモリデータパーツの改善として、完全に処理された WAL ファイルを削除するようにしました。 #40592 (Azat Khuzhin).
パフォーマンスの向上
marksとプライマリキーの圧縮を実装し、#34437 をクローズ。#37693(zhongyuankai)。- スレッドプールを使用してマークを事前に読み込めるようにしました。
load_marks_asynchronously設定項目(デフォルト値: 0)で制御されます。#40821(Kseniia Sumarokova)。 - S3 上の仮想ファイルシステムは、AWS でのパフォーマンスを向上させるため、オブジェクト名をランダム化し、複数のパスプレフィックスに分散させて使用するようになります。 #40968 (Alexey Milovidov).
- 単一レベルの集約結果を生成する際に
max_block_sizeの値を考慮するようになりました。これにより、以下のクエリプランのステップをより多くのスレッドで実行できるようになります。 #39138 (Nikita Taranov). - ソフトウェア・プリフェッチは、ハッシュテーブルを用いる集計処理での操作を高速化するために使用されます。設定
enable_software_prefetch_in_aggregationで制御されており、デフォルトで有効です。 #39304 (Nikita Taranov)。 WHERE句を適用した後にソートキーの一部のカラムが常に定数となる場合のoptimize_read_in_orderのサポートを改善しました。例えば、tableのストレージ定義がMergeTree ORDER BY (a, b)の場合のSELECT ... FROM table WHERE a = 'x' ORDER BY a, bのようなクエリです。#38715 (Anton Popov)。- ソートの前に、
full_sorting_joinの結合済みストリーム同士を互いの内容に基づいてフィルタリングするようにしました。 #39418 (Vladimir C). - 空のリテラルの処理をスキップすることで、LZ4 の展開を最適化しました。 #40142 (Nikita Taranov).
- 可能な場合は、
clickhouse-serverのメモリを経由してコピーするのではなく、ネイティブなcopyを使用してバックアップ処理を高速化しました。 #40395 (alesapin). - 各 INSERT ブロックごとにストレージスナップショットを取得しないようにしました(パフォーマンスがわずかに向上します)。 #40638 (Azat Khuzhin).
- 複数の
Nullable引数を取る集約関数向けにバッチ処理を実装しました。 #41058 (Raúl Marín)。 - UniquesHashSet(たとえばディスクからの
uniqStateの読み取り)を高速化しました。 #41089 (Raúl Marín). - 非常に多くの列を持つテーブルで、compact parts の mutation を実行する際の大きなメモリ使用量を修正しました。 #41122 (lthaooo).
- ARM 上で vectorscan ライブラリを有効化し、正規表現の評価を高速化します。 #41033 (Robert Schulze).
- vectorscan を 5.4.8 にアップグレードし、正規表現(regexp)評価を高速化する多くのパフォーマンス最適化を取り込みました。 #41270 (Robert Schulze).
- 非常に高い並列度での動作時に、VFS(S3 など)に対してローカルファイルシステムキャッシュをスキップしてしまっていた誤ったフォールバック動作を修正しました。 #40420 (Kseniia Sumarokova).
- 行ポリシーのフィルタが常に false の場合、データを一切読み込まずに直ちに空の結果を返します。これにより #24012 が解決されました。#40740(Amos Bird)。
- Float データ型に対する並列ハッシュ JOIN が最適ではない場合がありました。改善しました。 #41183 (Alexey Milovidov).
改善
- 起動時および ATTACH の呼び出し時には、
ReplicatedMergeTreeテーブルは ZooKeeper への接続が確立され、セットアップが完了するまで読み取り専用になります。 #40148 (Antonio Andelic)。 enable_extended_results_for_datetime_functionsオプションを追加しました。このオプションを有効にすると、引数が Date32 または DateTime64 の場合、toStartOfYear、toStartOfISOYear、toStartOfQuarter、toStartOfMonth、toStartOfWeek、toMonday、toLastDayOfMonth 関数の結果を Date 型ではなく Date32 型で返します。それ以外の場合は従来どおり Date 型の結果が返されます。互換性のため、デフォルト値は '0' です。#41214(Roman Vasin)。- セキュリティおよび安定性の観点から、CatBoost モデルはもはや ClickHouse サーバー内で評価されなくなりました。代わりに、評価は catboost ライブラリを読み込み、HTTP 経由でサーバープロセスと通信する、clickhouse-library-bridge という別プロセス内で行われるようになりました。関数
modelEvaluate()はcatboostEvaluate()に置き換えられました。 #40897 (Robert Schulze). #39629 (Robert Schulze). - ディスク上の一時データ向けメトリクスをさらに追加し、#40206 をクローズ。#40239(Vladimir C)。
- 設定オプション
warning_supress_regexpを追加して #40330 をクローズ。#40548(Vladimir C)。 - kafka_num_consumers の制限を無効化できる設定を追加。#40331 をクローズ。#40670(Kruglov Pavel)。
DELETE ...クエリでSETTINGSをサポートしました。#41533(Kseniia Sumarokova)。- S3 ObjectStorage 向けに、S3 API コール単位で分割された詳細な S3 プロファイルイベント
DiskS3*。 #41532 (Sergei Trifonov)。 system.asynchronous_metricsにNumberOfDetachedPartsとNumberOfDetachedByUserPartsという 2 つの新しいメトリクスを追加。 #40779 (Sema Checherinda).- ODBC および JDBC テーブルで CONSTRAINT の利用を許可。 #34551 (Alexey Milovidov).
- 元のクエリ内に複数回出現していない場合は、クエリのフォーマット時に
SETTINGSを複数回出力しないように修正しました。 #38900 (Raúl Marín). - スレッド間のトレーシングにおける OpenTelemetry コンテキストの伝播を改善しました。 #39010 (Frank Chen).
- ClickHouse Keeper:
interserver_listen_hostが指定されている場合にのみ Keeper にリスナーを追加するようにしました。 #39973 (Antonio Andelic). - エラー発生後の Replicated ユーザーアクセスストレージの復旧を改善。 #39977 (Vitaly Baranov).
EmbeddedRocksDBに TTL サポートを追加しました。 #39986 (Lloyd-Pottiger)。clickhouse-obfuscatorにスキーマ推論を追加し、--structure引数の指定が不要になりました。 #40120 (Nikolay Degterinsky)。Arrowフォーマットの辞書機能を改善・修正しました。 #40173 (Kruglov Pavel).Date32、DateTime64、Dateをより狭い型により自然に変換。正常な範囲外の値は、上限または下限の正常値に切り詰めて扱います。 #40217 (Andrey Zvonov).View上のMergeテーブルがインデックスを使用できなかった問題を修正しました。 #40233 (Duc Canh Le).- JSON サーバーログ用のカスタムキー名。 #40251 (Mallik Hassan).
- 関数
throwIfがスローする例外に対して、カスタムエラーコードを設定できるようになりました。 #40319 (Robert Schulze)。 - スキーマ推論キャッシュを改善し、スキーマが変わりうる format 設定を考慮するようにしました。 #40414 (Kruglov Pavel).
DateをDateTimeおよびDateTime64としてパースできるようにしました。#36949 で提案された機能拡張を実装したものです。#40474(Alexey Milovidov)。2022-08-22 01:02:03.456のようなDateTime64を含むStringからDateおよびDate32への変換を許可します。2022-08-22 01:02:03のようなDateTimeを含むStringからDate32への変換を許可します。これにより #39598 が解決されます。 #40475(Alexey Milovidov)。- Parquet 形式でのネストされたデータ構造サポートを改善 #40485 (Arthur Passos).
- Avro からの Array(Record) をフラット化された Nested テーブルとして読み取ることをサポートしました。 #40534 (Kruglov Pavel).
EmbeddedRocksDBに読み取り専用モードのサポートを追加。#40543 (Lloyd-Pottiger)。- URL テーブルエンジンの圧縮方式パラメータを検証するようにしました。 #40600 (Frank Chen)。
- ファイル名の後にクエリ文字列が存在する場合の
urlテーブル関数/エンジンに対するフォーマット検出を改善しました。#40315 をクローズ。#40636(Kruglov Pavel)。 GROUPING SETが使用されている場合は projection を無効にします。誤った結果が生成される問題がありました。この変更により #40635 が修正されます。#40726(Amos Bird)。- テーブル定義で使用された場合にメタデータを破損させる可能性があった
APPLYカラムトランスフォーマの誤った形式を修正しました。これにより #37590 が解決されました。#40727(Amos Bird)。 formatDateTimeでタイムゾーンオフセットをフォーマットするための%z記述子をサポートしました。 #40736 (Cory Levy)。clickhouse-clientの対話モードで、.と/が「直前に実行したコマンドを再実行」として解釈されるようになりました。 #40750 (Robert Schulze).- MySQL データベースエンジンおよび MySQL テーブル関数への MySQL タイムアウトの受け渡しに関する問題を修正しました。 #34168 をクローズしました。 #40751(Kseniia Sumarokova)。
- ファイルシステムキャッシュ用のディレクトリにステータスファイルを作成し、キャッシュディレクトリが異なるサーバーやキャッシュ間で共有されないようにします。 #40820 (Kseniia Sumarokova).
EmbeddedRocksDBストレージにDELETEおよびUPDATEのサポートを追加しました。 #40853 (Antonio Andelic).- ClickHouse Keeper:長時間に及ぶコミット処理中のシャットダウンを修正し、許可されるリクエストサイズを拡大。#40941(Antonio Andelic)。
- WriteBufferFromS3 のレースコンディションを修正し、TSA アノテーションを追加。 #40950 (Kseniia Sumarokova).
- group_by_use_nulls を使用する grouping sets は、キー列のみを Nullable に変換する必要があります。 #40997 (Duc Canh Le).
- 分散テーブルに対する INSERT の可観測性を改善。#41034(Frank Chen)。
- S3 とのやり取りに関する、より低レベルなメトリクスを追加。 #41039 (mateng915)。
- HTTP リダイレクト後の Location ヘッダーでの相対パスをサポート。#40985 をクローズ。#41162(Kruglov Pavel)。
- サーバーを再起動することなく、HTTP ハンドラーの変更をその場で適用できるようにしました。 #41177 (Azat Khuzhin).
- ClickHouse Keeper:シャットダウン時にアクティブなセッションを適切に終了するようにしました。 #41215 (Antonio Andelic)。これにより、「table is read-only」エラーが発生する時間が短縮されます。
- clickhouse-client/local で SQL クエリを自動的にコメントアウトできる機能を追加 (
Alt-#、readline と同様)。 #41224 (Azat Khuzhin). - 設定
do_no_evict_index_and_mark_filesを 1 と 0 の間で切り替えた際に発生するキャッシュの不整合を修正。 #41330 (Kseniia Sumarokova). - ユーザーがサイズ 256 を超える FixedString 型のカラムを作成できないようにする設定
allow_suspicious_fixed_string_typesを追加しました。 #41495 (Duc Canh Le). system.partsにhas_lightweight_deleteを追加しました。 #41564 (Kseniia Sumarokova).
ビルド/テスト/パッケージングの改善
- すべての設定にドキュメントの記載を必須化しました。 #40644 (Alexey Milovidov).
- すべての既存メトリクスに対してドキュメント作成を必須化しました。 #40645 (Alexey Milovidov).
- すべてのプロファイルイベントカウンタに対してドキュメント作成を必須とし、不足していたものにはドキュメントを追加しました。 #40646 (Alexey Milovidov).
- 一部の依存関係を修正し、最小構成の
clickhouse-localビルドを可能にしました。 #40460 (Alexey Milovidov)。サイズは 50 MiB 未満です。 - テストでの SQL 関数カバレッジを計測してレポートします。 #40593. #40647 (Alexey Milovidov).
- すべての MergeTree 設定についてドキュメント化を義務付けました。 #40648 (Alexey Milovidov).
- 高レベルな統一サーバーコンポーネント用の組み込みリファレンスドキュメントのプロトタイプ。#40649(Alexey Milovidov)。
- 変更されたパフォーマンステストに含まれるすべてのクエリを確認し、変更されたクエリが漏れなくテストされていることを確認します。 #40322 (Nikita Taranov)。
- TGZ パッケージを修正。 #40681 (Mikhail f. Shiryaev).
- デバッグシンボルを修正。 #40873 (Azat Khuzhin).
- CI 設定を拡張し、x86 SSE2 のみを対象としたビルドを作成するようにしました。古いハードウェアや組み込みハードウェアで有用です。 #40999 (Robert Schulze)。
- llvm/clang 15 に切り替え。 #41046 (Azat Khuzhin).
- #40938 の続き。
Loggersクラスにおける ODR 違反を修正。#40398、#40937 を修正。#41060(Dmitry Novik)。 - GitHub のリリースアセットに macOS バイナリを追加しました。これにより #37718 が修正されました。#41088(Mikhail f. Shiryaev)。
- c-ares ライブラリが ClickHouse のビルドシステムに同梱されるようになりました。#41239 (Robert Schulze)
- メインの ClickHouse コードから
dlopenを削除しました。ただし、dlopenは library-bridge と odbc-bridge には残っています。 #41428 (Alexey Milovidov). dlopenをメインの ClickHouse バイナリでは許可しないでください。有害であり安全ではありません。当社では使用していませんが、一部のライブラリでは「プラグイン」を実装するために使用される場合があります。制御不能で危険なサードパーティ製ライブラリをプロセスのアドレス空間に読み込むという古くからの手法は正気の沙汰ではないため、断固として推奨しません。#41429(Alexey Milovidov)。- deb パッケージに
sourceフィールドを追加し、nfpmを更新しました。 #41531 (Mikhail f. Shiryaev) - 社内開発DWARFパーサーにおけるDWARF-5のサポート。 #40710 (Azat Khuzhin).
- テスト用のフォールトインジェクションを ZooKeeper クライアントに追加 #30498 (Alexander Tokmakov)。
- debug および tsan 構成向けに、S3 ストレージを使用した stateless テストを追加 #35262 (Kseniia Sumarokova).
- S3 上でのストレステストを試行 #36837 (alesapin)。
clang-tidyでconcurrency-mt-unsafeを有効化 #40224(Alexey Milovidov)。
バグ修正
- AWS SDK のバグ による潜在的なデータ損失を修正しました。このバグは、ClickHouse を S3 上で使用している場合にのみ発生します。#40506(alesapin)。このバグは AWS SDK で 5 年間未解決のままでしたが、我々の報告によりクローズされました。
- Native 形式の悪意のあるデータがクラッシュを引き起こす可能性がありました。 #41441 (Alexey Milovidov)。
- 集約関数
categorialInformationValueのプロパティ定義に誤りがあり、実行時にヌルポインタのデリファレンスが発生する可能性がありました。これにより #41443 が解決されました。#41449(Alexey Milovidov)。 - Apache
ORCフォーマットでデータを書き込むと、バッファーオーバーランが発生するおそれがあります。 #41458 (Alexey Milovidov)。 - Array of Nullable 型が引数として使用されている場合の
encryptおよびcontingency関数におけるメモリ安全性の問題を修正しました。これにより #41004 が解決されます。#40195(Alexey Milovidov)。 - 'not_processed' が null でない場合に MergeJoin で発生するバグを修正。 #40335 (liql2007).
IN演算子で小数の精度が失われた場合に誤った結果が返される問題を修正しました。関連: #41125。#41130(Vladimir C)。- 複数階層の
Nested列における欠落列の補完処理を修正しました。 #37152 (Anton Popov). - Ordinary(非推奨)データベース向けの
SYSTEM UNFREEZEクエリを修正。https://github.com/ClickHouse/ClickHouse/pull/36424 に対する修正。#38262(Vadim Volodin)。 - WITH 句によって導入された未使用の存在しないカラムを修正します。これにより #37812 が修正されます。#39131(Amos Bird)。
- ウィンドウ関数を含むクエリにおける ORDER BY の解析を修正。#38741 および #24892 を修正。#39354(Dmitry Novik)。
- 集約関数を対象とする WINDOW ORDER BY/PARTITION BY 式を計算しようとしたときに発生する
Unknown identifier (aggregate-function)例外を修正しました。 #39762 (Vladimir Chebotaryov). - 設定
max_analyze_depthによって、1つのクエリあたりの解析の深さを制限しました。これにより、異常に多くのサブクエリを含むクエリで解析時間が指数関数的に膨れ上がることを防ぎます。 #40334 (Vladimir C). - MergeTree エンジンファミリーのカラム TTL に関するまれなバグを修正しました: 縦方向マージが繰り返し行われた場合に、
Cannot unlink file ColumnName.bin ... No such file or directory.というエラーが発生することがありました。 #40346 (alesapin)。 - IPv4 と IPv6 の両方が存在する場合は、それぞれに対して DNS エントリを使用します。 #40353 (Maksim Kita).
- Hadoop から Snappy で圧縮されたファイルを読み取れるようにしました。 #40482 (Kruglov Pavel).
- 可変次元の配列を含む
Object型(実験的機能)の値を解析中にクラッシュする問題を修正しました。 #40483 (Duc Canh Le). input_format_tsv_skip_first_lines設定を修正。 #40491 (mini4).- MaterializedPostgreSQL データベース/テーブルエンジンの起動時に発生するバグ(レースコンディション)を修正しました。#40262。relcache_callback_list スロットの上限に達した際に発生するエラーを修正しました。#40511 (Maksim Buren)。
- DateTime64 の解析中に発生する可能性がある 'Decimal math overflow' エラーを修正。 #40546 (Kruglov Pavel).
- 軽量な削除行を含むパーツの縦方向マージを修正。 #40559 (Alexander Gololobov).
- 圧縮を有効にした URL テーブルエンジンへのデータ書き込み時に発生していたセグメンテーションフォルトを修正。 #40565 (Frank Chen).
- Map と併用した arrayElement 関数で、論理エラー
'Invalid Field get from type UInt64 to type String'が発生する可能性のあった問題を修正。 #40572 (Kruglov Pavel). - ファイルシステムキャッシュにおける起こりうるレースコンディションを修正。 #40586 (Kseniia Sumarokova).
MergeTreeテーブルにおいて、影響を受けないパーティションに対するミューテーションをスキップする処理を削除しました。この機能は元々正しく動作しておらず、完了済みミューテーションが復活してしまう可能性があったためです。 #40589 (Alexander Tokmakov).- 実行時に既に使用中の gRPC ポートを設定に追加すると、ClickHouse サーバーがクラッシュします。 #40597 (何李夫)。
base58Encode / base58Decodeにおける先頭の 0 および '1' の扱いを修正しました。 #40620 (Andrey Zvonov).- keeper-fix: スナップショットのインストール中にログへアクセスする際に発生する競合状態を修正。 #40627 (Antonio Andelic).
- toFixedString 関数の短絡評価の挙動を修正しました。#40622 を部分的に解決します。#40628(Kruglov Pavel)。
- SQLite の int8 カラムを ClickHouse の int64 カラムに変換する際の不具合を修正。#40639 を修正。#40642(Barum Rho)。
- 再帰的な
Bufferテーブルで発生していたスタックオーバーフローを修正しました。これにより #40637 がクローズされます。#40643(Alexey Milovidov)。 ProcessListに新しいクエリを挿入する際にメモリ確保が発生します。これらの確保処理中にメモリ制限に達した場合、ProcessList::mutexがすでに取得されているため、OvercommitTrackerを使用できません。#40611 を修正。#40677(Dmitry Novik)。- marks 読み取り中に max_read_buffer_size=0 の場合に発生する LOGICAL_ERROR を修正。 #40705 (Azat Khuzhin).
- クエリコンテキストなしに Kafka などからマテリアライズドビューへプッシュする際のメモリリークを修正。 #40732 (Azat Khuzhin).
- CSV スキーマ推論で発生しうる「Attempt to read after eof」エラーを修正。#40746(Kruglov Pavel)。
- ライトスルーキャッシュの論理エラー「File segment completion can be done only by downloader」を修正。#40748 をクローズ。#40759(Kseniia Sumarokova)。
- GROUPING 関数の結果が SQL や他の DBMS と同じになるようにしました。 #40762 (Dmitry Novik).
/etc/hostsにおける名前解決でhost_regexp機能が正しく動作していないことが #40595 で報告されました。この問題は修正されました。#40769(Arthur Passos)。- Log ファミリーの増分バックアップを修正。 #40827 (Vitaly Baranov).
- ゼロコピーレプリケーションで潜在的なデータ損失を引き起こす可能性がある、極めてまれなバグを修正。 #40844 (alesapin).
- 同じ set 式が異なるカラムから構築された場合にキー条件解析がクラッシュする問題を修正。 #40850 (Duc Canh Le).
- ネストされた JSON オブジェクトのスキーマ推論を修正。 #40851 (Kruglov Pavel).
- 空でも削除されていなかったファイルシステムキャッシュファイル用の3桁プレフィックスディレクトリを修正。#40797 をクローズ。 #40867 (Kseniia Sumarokova).
- レプリカへの接続失敗時に未処理の DNS_ERROR が発生する問題を修正。 #40881 (Robert Coelho).
- サブクエリで不要なカラムを削除する際のバグを修正。 #40884 (luocongkai).
- リモート読み取りバッファにおける余分なメモリ割り当てを修正。 #40896 (Kseniia Sumarokova).
- データベースの削除権限が明示的に取り消されていたユーザーでもデータベースを削除できてしまっていた問題を修正しました。 #40906 (Nikita Mikhaylov).
- ClickHouse Keeper 向けの修正: 書き込みリクエスト内のパスを、Keeper の内部システムノードのパスと正しく比較するようにしました。 #40918 (Antonio Andelic)。
- WriteBufferFromS3 のデッドロックを修正しました。 #40943 (Kseniia Sumarokova).
DESCRIBE TABLE url()およびその他のDESCRIBE TABLE <table_function>()に対するアクセス権を修正。 #40975 (Vitaly Baranov).WITH GROUPING SETSに対する誤ったパーサーロジックを削除しました。これによりヌルポインタ参照が発生する可能性がありました。 #41049 (Duc Canh Le).- ClickHouse Keeper の修正: シャットダウン中に発生する可能性のあるセグメンテーションフォールトを修正。 #41075 (Antonio Andelic).
- 集約関数コンビネータにおけるセグメンテーションフォルト、use-heap-after-free、およびメモリリークの可能性を修正。#40848 をクローズ。 #41083 (Kruglov Pavel).
- Window Views を使用して
query_views_logを修正。 #41132 (Raúl Marín). - デフォルトで optimize_monotonous_functions_in_order_by を無効化し、次の問題を緩和します: #40094。#41136(Denny Crane)。
- データベースエンジンを Ordinary から Atomic に自動変換する際に発生していた「possible deadlock avoided」エラーを修正しました。 #41146 (Alexander Tokmakov).
- ブロックが空の場合に SortedBlocksWriter で発生する SIGSEGV を修正(
optimize_aggregation_in_orderとjoin_algorithm=autoを使用した場合に発生する可能性がある)。 #41154 (Azat Khuzhin). array joinを使用している場合に trivial count の最適化が有効だと、クエリ結果が誤ったものになる問題を修正しました。これにより #39431 が修正されます。 #41158(Denny Crane)。- GetPriorityForLoadBalancing::getPriorityFunc() で発生する stack-use-after-return の不具合を修正。 #41159 (Azat Khuzhin)。
- 位置引数に関する例外「Positional argument out of bounds」を修正。#40634 をクローズ。#41189(Kseniia Sumarokova)。
- バックグラウンドでの破損したデタッチ済みパーツのクリーンアップ処理を修正。 #41190 (Kseniia Sumarokova).
- 多数の
CROSS JOINとWHEREを含む場合に指数関数的になっていたクエリ書き換えを修正し、#21557 をクローズしました。 #41223 (Vladimir C)。 - ライトスルーキャッシュで発生し得た論理エラーを修正しました。この問題は、必要なすべての種類の例外が適切に処理されていなかったために発生していました。 #41208 をクローズします。 #41232(Kseniia Sumarokova)。
- system.filesystem_cache_log 内の String 型ログエントリを修正。 #41233 (jmimbrero)。
- サブクエリで
OFFSET句を使用し、外側のクエリでWHERE句を使用した場合に誤った結果が返される可能性があった問題を修正しました。#40416 を修正。#41280(Alexander Tokmakov)。 query_plan_optimize_primary_keyが有効な場合に発生しうる誤ったクエリ結果が返される不具合を修正しました。#40599 を修正。#41281 (Nikolai Kochetov)。- lowerUTF8/upperUTF8 において、無効なシーケンスが他の行に影響しないようにしました。 #41286 (Azat Khuzhin).
- 型が
Objectのカラムを含むALTER <table> ADD COLUMNクエリの不具合を修正。 #41290 (Anton Popov). distributed_ddl.pathが設定に存在しない場合にsystem.distributed_ddl_queueから選択すると発生する「No node」エラーを修正しました。#41096 を解決します。 #41296(young scott)。- ディスクオブジェクトストレージで誤って
Expected relative pathという論理エラーが発生する問題を修正。関連: #41246。#41297(Kseniia Sumarokova)。 - MsgPack 形式で UUID を挿入する前に列の型チェックを追加しました。 #41309 (Kruglov Pavel).
async_insert設定を有効にした非同期挿入時に、Object型のカラムへ不正なデータを挿入すると発生する可能性があったクラッシュを修正しました。これは、非同期挿入のすべてのバッチ内の JSON が不正でパース不能な場合に発生し得ました。#41336 (Anton Popov)。- async_socket_for_remote/use_hedged_requests と並列での KILL による潜在的なデッドロックを修正。 #41343 (Azat Khuzhin).
- デフォルトで optimize_rewrite_sum_if_to_count_if を無効化し、次の問題を緩和します: #38605 #38683。 #41388 (Denny Crane)。
- 22.8 以降、データベースが
Replicatedで、かつクラスタ名とデータベース名が同一の場合には、ON CLUSTER句は無視されていました。このため、Replicatedデータベースに対するDROP PARTITION ON CLUSTERが予期しない動作をしていました。現在は修正されており、ON CLUSTER句は、データベースレベルでレプリケーションされるクエリに対してのみ無視されるようになりました。#41299 を修正。#41390(Alexander Tokmakov)。 - クエリのキャンセル(
KILL QUERYまたはサーバーのシャットダウン)時に発生しうるハングやデッドロックを修正。 #41467 (Azat Khuzhin). - JBOD 機能使用時にサーバーがクラッシュする可能性のあった問題を修正しました。これにより #41365 が解決されました。#41483(Amos Bird)。
- nullable な FixedString から String への変換処理を修正。 #41541 (Duc Canh Le).
- 誤った集約状態が groupBitmap* に渡された場合にクラッシュが発生しないようにしました。 #41563 (Raúl Marín).
ORDER BYを含み、1500 <= LIMIT <= max_block_sizeの条件を満たすクエリで、先頭から一部の行が欠落した不正な結果が返されることがありました。#41182 を修正しました。#41576(Nikolai Kochetov)。- マテリアライズドビュー使用時の X-ClickHouse-Summary における読み取りバイト数/行数を修正。 #41586 (Raúl Marín).
OFFSETを含むクエリで発生する可能性のあるpipeline stuck例外を修正しました。enable_optimize_predicate_expression = 0かつWHERE句に常に偽となる条件式がある場合にこのエラーが確認されました。#41383 を修正しました。#41588(Nikolai Kochetov)。
ClickHouse リリース 22.8, 2022-08-18
後方互換性のない変更
Date32とDateTime64の範囲を拡張し、西暦 1900 年から 2299 年までの日付をサポートするようにしました。以前のバージョンでは、サポートされる期間は西暦 1925 年から 2283 年までのみでした。この実装では、ユリウス暦からグレゴリオ暦への歴史的な移行を考慮するのではなく、(ISO 8601:2004(3.2.1 節「グレゴリオ暦」)に準拠した)プロレプティック・グレゴリオ暦を使用しています。この変更は、範囲外引数に対する実装依存の動作に影響します。例えば、以前のバージョンでは1899-01-01の値は1925-01-01に切り詰められていましたが、新しいバージョンでは1900-01-01に切り詰められます。INTERVAL 3 QUARTERを渡した場合、toStartOfIntervalによる丸めの動作も最大で 1 四半期分変わります。これは、間隔が実装依存の時点から数えられているためです。#28216 をクローズし、#38393 を改善しました。 #39425(Roman Vasin)。- 関連するすべての辞書ソースが
remote_url_allow_hosts設定に従うようになりました。これはすでに HTTP、Cassandra、Redis では行われており、今回 ClickHouse、MongoDB、MySQL、PostgreSQL が追加されました。ホストは DDL から作成された辞書に対してのみチェックされます。 #39184(Nikolai Kochetov)。 - 事前ビルドされた ClickHouse x86 バイナリは、AVX 命令のサポートを必要とするようになりました。つまり、2011 年にリリースされた Intel Sandy Bridge / AMD Bulldozer 以降の CPU が必要です。 #39000(Robert Schulze)。
- リモートファイルシステムキャッシュを組み合わせ可能にし、特定のファイル(idx、mrk など)を削除対象から除外できるようにし、古いキャッシュバージョンを削除しました。これにより、Azure blob storage ディスク上、Local ディスク上、StaticWeb ディスク上などにキャッシュを構成できるようになりました。この PR はキャッシュ設定が変更され、キャッシュが動作するようにするには設定ファイルを更新する必要があるため、後方互換性がないものとマークされています。新しい設定でも古いキャッシュは引き続き使用されます。サーバーは古いキャッシュ設定のままでも問題なく起動します。https://github.com/ClickHouse/ClickHouse/issues/36140 をクローズ。https://github.com/ClickHouse/ClickHouse/issues/37889 をクローズ。 (Kseniia Sumarokova)。 #36171)
新機能
- MergeTree テーブルに対する SQL 標準の
DELETE FROM構文と、MergeTree ファミリー向けの軽量な削除実装をサポートしました。#37893 (Jianmei Zhang) (Alexander Gololobov)。注意: この新機能により ClickHouse が HTAP DBMS になるわけではありません。 - 対話モードで
SET param_abc = 'def'のようにクエリパラメータを設定でき、ネイティブプロトコル経由で設定値として転送できるようになりました。#39906 (Nikita Taranov)。 - ネイティブプロトコルでクオータキーを設定できるようになりました。(Yakov Olkhovsky)。
- 設定
exact_rows_before_limit(0/1) を追加しました。有効化すると、rows_before_limit_at_least統計に対して厳密な値を返しますが、その代償として、LIMIT より前のデータをすべて読み取る必要があります。これにより #6613 がクローズされました。#25333 (kevin wan)。 DistributedエンジンおよびReplicatedエンジンを持つテーブルに対し、s3Clusterテーブル関数を用いた並列分散 INSERT SELECT をサポートしました。#34670。#39107 (Nikita Mikhaylov)。- テキストフォーマットからのスキーマ推論を制御する新しい設定を追加しました: -
input_format_try_infer_dates- 文字列から日付を推論しようとします。 -input_format_try_infer_datetimes- 文字列から日時を推論しようとします。 -input_format_try_infer_integers-Float64の代わりにInt64を推論しようとします。 -input_format_json_try_infer_numbers_from_strings- JSON フォーマットにおいて、JSON 文字列から数値を推論しようとします。#39186 (Kruglov Pavel)。 - JSON 形式のログ出力を提供するオプションを追加しました。ログ解析ツールでのインジェストおよびクエリを容易にするためのものです。#39277 (Mallik Hassan)。
- 長時間実行および継続的なクエリの実行中に現在時刻を取得できる関数
nowInBlockを追加しました。#39522 をクローズします。注意:now64InBlockおよびtodayInBlock関数は存在しません。#39533 (Alexey Milovidov)。 executable()テーブル関数に対して設定を指定できるようにしました。#39681 (Constantine Peresypkin)。- データベースエンジンを
OrdinaryからAtomicに自動変換する機能を実装しました。flagsディレクトリに空のconvert_ordinary_to_atomicファイルを作成すると、次回のサーバー起動時にすべてのOrdinaryデータベースが自動的に変換されます。#39546 を解決します。#39933 (Alexander Tokmakov)。 SELECT ... INTO OUTFILE '...' AND STDOUTをサポートしました。#37490。#39054 (SmitaRKulkarni)。PrettyMonoBlock,PrettyNoEscapesMonoBlock,PrettyCompactNoEscapes,PrettyCompactNoEscapesMonoBlock,PrettySpaceNoEscapes,PrettySpaceMonoBlock,PrettySpaceNoEscapesMonoBlockフォーマットを追加しました。#39646 (Kruglov Pavel)。
パフォーマンスの向上
- メモリ効率を重視した集約結果のマージ処理におけるメモリ使用量を改善しました。 #39429 (Nikita Taranov).
- クエリによって生成される同時実行スレッドの総数を制限するための並行制御ロジックを追加しました。 #37558 (Sergei Trifonov)。高 QPS 時のパフォーマンスを、全クエリで使用されるスレッド総数を制限することで向上させるために、
concurrent_threads_soft_limitパラメータを追加しました。 #37285 (Roman Vasin)。 - 非圧縮キャッシュおよびマークキャッシュに
SLRUキャッシュポリシーを追加しました。(Kseniia Sumarokova)。#34651 (alexX512)。ローカルキャッシュ機能とキャッシュアルゴリズムを分離しました。#38048 (Han Shukai)。 - Intel® In-Memory Analytics Accelerator (Intel® IAA) は、次世代の Intel® Xeon® Scalable プロセッサ(「Sapphire Rapids」)で利用可能なハードウェアアクセラレータです。その目的は、データの圧縮・伸長やフィルタリングといった分析で一般的な処理を高速化することです。ClickHouse には、新たに Intel® IAA のオフロード技術を活用して高性能な DEFLATE 実装を提供する「DeflateQpl」圧縮コーデックが追加されました。このコーデックは、ハードウェアアクセラレータへのアクセス、あるいはハードウェアアクセラレータが利用できない場合のソフトウェアフォールバックへのアクセスを抽象化する Intel® Query Processing Library (QPL) を使用します。DEFLATE は一般的に、ClickHouse のデフォルトコーデックである LZ4 よりも高い圧縮率を実現し、その結果、ディスク I/O の削減およびメインメモリ使用量の低減につながります。#36654(jasperzhu)。#39494(Robert Schulze)。
ORDER BYを伴うDISTINCT: 入力ストリームのソート記述に基づいてソート方法を推論し、入力ストリームがすでにソート済みであればソートをスキップします。#38719(Igor Nikonov)。メモリ使用量を(大幅に)削減し、クエリの実行時間を短縮し、DISTINCT列がORDER BY列と一致する場合の最終 DISTINCT にDistinctSortedChunkTransformを使用しますが、EXPLAIN PIPELINE内ではこれをDistinctSortedStreamTransformにリネームします → これによりメモリ使用量が大幅に削減され、さらにDistinctSortedChunkTransformのホットループ内で不要なアロケーションを削除します。#39432(Igor Nikonov)。DistinctSortedTransformは、ソート記述が DISTINCT 列に適用可能な場合にのみ使用し、それ以外の場合は通常の DISTINCT 実装にフォールバックします。これにより、DistinctSortedTransform実行中に行うチェックを減らすことができます。#39528(Igor Nikonov)。修正:DistinctSortedTransformがソートの利点を活かせていませんでした。clearing_columnsが常に空として誤検出されていたため、HashSet が一度もクリアされませんでした。その結果、実質的には通常のDISTINCT(DistinctTransform)として動作していました。この修正によりメモリ使用量が大幅に削減されます。#39538(Igor Nikonov)。clusterや同様のテーブル関数を実行する際、リモートテーブルの構造を取得するためにローカルノードを最優先で使用するようになりました。 #39440 (Mingliang Pan).- AVX512VBMI2 の圧縮ストアを使用して数値カラムでのフィルタリングを最適化しました。#39633(Guo Wangyang)。AVX512 VBMI2 を搭載したシステムでは、この PR により SSB ベンチマーククエリ 3.1、3.2、3.3(SF=100)において約 6% のパフォーマンス向上が見られます。Intel Icelake Xeon 8380 × 2 ソケット構成でテスト済みです。#40033(Robert Schulze)。
- マルチスレッド環境における関数式を用いたインデックスの解析を最適化しました。 #39812 (Guo Wangyang).
- 複雑なクエリ向けの最適化:登録されている UDF がない場合は AST を走査しないようにしました。 #40069 (Raúl Marín). CurrentMemoryTracker の割り当ておよび解放を最適化しました。 #40078 (Raúl Marín).
- Base58 エンコード/デコードを改善しました。 #39292 (Andrey Zvonov).
- SSE/AVX/AVX512 向けのバイトからビットマスクへの変換処理を改善。 #39586 (Guo Wangyang)。
改善
AggregateFunction型とその状態表現を正規化します。これは、#35788 のような最適化によってcount(not null columns)がcount()として扱われ、その結果、分散インタープリタが次のエラーを発生させる可能性があるためです:Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported。#39420(Amos Bird)。同一の状態を持つ関数は、マテリアライズドビューで相互に置き換えて使用できます。system.backupsテーブルを再設計して簡素化し、internalカラムを削除するとともに、ユーザーが操作 ID を設定できるようにし、num_files、uncompressed_size、compressed_size、start_time、end_timeカラムを追加しました。 #39503 (Vitaly Baranov).Replicatedデータベースの DDL クエリ結果テーブルの構造を改善しました(シャード名とレプリカ名用の個別カラム、よりわかりやすいステータス)。distributed_ddl_entry_format_versionが 3(デフォルト値)に設定されている場合、CREATE TABLE ... ON CLUSTERクエリは最初にイニシエーター側で正規化されるようになりました。これは、クエリで指定されたクラスタにイニシエーターが属していない場合、ON CLUSTERクエリが動作しない場合があることを意味します。#37318、#39500 を修正。- データベースがReplicatedであり、クラスタ名がデータベース名と同じである場合は、ON CLUSTER句を無視するようにしました。#35570 に関連。-Replicatedデータベースエンジンに対するその他の軽微な修正。-Replicatedデータベースの起動時にメタデータの一貫性をチェックし、ローカルメタデータと Keeper 上のメタデータが不一致の場合にはレプリカのリカバリを開始します。#24880 を解決。#37198(Alexander Tokmakov)。- 進捗報告(
X-ClickHouse-Summary)に result_rows と result_bytes を追加しました。 #39567 (Raúl Marín)。 - MergeTree の主キー解析を改善。 #25563 (Nikolai Kochetov).
timeSlotsが DateTime64 に対応しました。DateTime64 を使用する場合、サブセカンド精度の継続時間とスロットサイズを利用できます。 #37951 (Andrey Zvonov).EmbeddedRocksDBテーブルに対するLEFT SEMIおよびLEFT ANTI直接結合のサポートを追加しました。 #38956 (Vladimir C)。- fsync 操作用のプロファイルイベントを追加。 #39179 (Azat Khuzhin).
- 通常の関数
file(path[, default])に第2引数を追加し、ファイルが存在しない場合に返される値を指定できるようにしました。 #39218 (Nikolay Degterinsky). - HTTP 経由での読み取り処理にいくつかの細かな修正を加え、200 OK が返された場合に部分コンテンツを再試行できるようにしました。 #39244 (Kseniia Sumarokova)。
- クエリ
CREATE TEMPORARY TABLE ... (<list of columns>) AS ...がサポートされるようになりました。 #39462 (Kruglov Pavel). - カスタム TLD で
!/*(感嘆符/アスタリスク)をサポートするようにしました(cutToFirstSignificantSubdomainCustom()/cutToFirstSignificantSubdomainCustomWithWWW()/firstSignificantSubdomainCustom())。#39496(Azat Khuzhin)。 - NATS への TLS 接続のサポートを追加しました。#39525 を実装。#39527(Constantine Peresypkin)。
clickhouse-obfuscator(テストおよび負荷生成のためのデータベース難読化ツール)に、事前学習済みモデルを扱うための新しい--saveおよび--loadパラメータが追加されました。これにより #39534 が解決されました。 #39541(Alexey Milovidov)。- 再起動時のログローテーションの不正な動作を修正。 #39558 (Nikolay Degterinsky).
- 外部集約が有効な場合の集計プロジェクションの構築処理を修正しました。ケース自体はまれであり、設定を変更することで容易に回避できるため、改善としてマークしています。この修正により #39667 が解決されます。 #39671 (Amos Bird)。
Map型の引数を持つハッシュ関数を実行できるようにしました。 #39685 (Anton Popov).- スタックトレース内のアドレスを非表示にするための設定パラメータを追加しました。セキュリティがわずかに向上する可能性はありますが、一般的には有害であり、使用すべきではありません。#39690(Alexey Milovidov)。
- ネストされた関数データのメモリセグメントが適切にアラインされるように、AggregateFunctionDistinct のプレフィックスサイズを変更。 #39696 (Pxl).
clickhouse-diagnosticツールに渡される認証情報が正しくエスケープされるようにしました。 #39707 (Dale McDiarmid).- ClickHouse Keeper の改善: 終了時にスナップショットを作成するようにしました。これは設定項目
keeper_server.create_snapshot_on_exitで制御でき、デフォルト値はtrueです。 #39755 (Antonio Andelic)。 row_policy_filterとadditional_filterに対する主キーの解析をサポートします。これにより、#37454 で報告された問題などの修正にも役立ちます。 #39826 (Amos Bird)。- Play UI における 2 つのユーザビリティ問題を修正: - 余計なボーダー半径とマージンのせいで iPad 上でピクセル単位で正確に表示されていなかった問題を修正; - 最初のクエリ実行後に進行状況が表示されなかった問題を修正。これにより #39957 がクローズされます。これにより #39960 がクローズされます。 #39961 (Alexey Milovidov)。
- Play UI: 行番号の表示を追加し、クリック時のセル選択を可能にし、テーブルセルにヒステリシスを導入。 #39962 (Alexey Milovidov).
- Play UI: textarea 内で Tab キー入力を認識しつつ、同時にフォーカスのタブ移動を妨げないようにしました。 #40053 (Alexey Milovidov).
- クライアントはサーバー側で計測した経過時間を表示するようになります。これは、リモートデータセンター間で ClickHouse サービスの性能を比較する際に重要です。これにより #38070 が解決されます。背景となる経緯については こちら も参照してください。#39968(Alexey Milovidov)。
parseDateTime64BestEffortUS、parseDateTime64BestEffortUSOrNull、parseDateTime64BestEffortUSOrZero関数を追加し、#37492 をクローズしました。#40015(Tanya Bragin)。system.processors_profile_logを、入力行数などより多くの情報を記録できるよう拡張しました。 #40121 (Amos Bird).clickhouse-benchmarkで、利用可能な場合はデフォルトでサーバー側の時間を表示するようにしました(ClickHouse バージョン 22.8 以降)。これはクラウド間のパフォーマンスを正しく比較するために必要です。この動作は新しい--client-side-timeコマンドラインオプションで変更できます。--randomizeコマンドラインオプションを、--randomize 1から引数なしの形式に変更しました。 #40193 (Alexey Milovidov).- クエリの複雑性制限が設定され、その制限に達した場合にカウントするカウンタ(ProfileEvents)を追加しました(
overflow_modeがbreakの場合とthrowの場合で個別のカウンタ)。たとえば、read_overflow_mode = 'break'でmax_rows_to_readを設定している場合、OverflowBreakカウンタの値を見ることで、不完全な結果を判別できます。 #40205 (Alexey Milovidov). - "Memory limit exceeded" エラー発生時のメモリ使用量の計測を修正(以前は [peak] メモリ使用量に、失敗したメモリ割り当ても含めていました)。#40249 (Azat Khuzhin)。
- ファイルシステムキャッシュ用のメトリクス
FilesystemCacheSizeとFilesystemCacheElementsを追加しました。 #40260 (Kseniia Sumarokova). - Hadoop のセキュアな RPC 転送(
hadoop.rpc.protection=privacyおよびhadoop.rpc.protection=integrity)をサポート。 #39411 (michael1589)。 - 関数 multi(Fuzzy)Match(Any|AllIndices|AnyIndex)() の使用時にパターンキャッシュのメモリ消費が継続的に増加しないようにしました。 #40264 (Robert Schulze).
ビルド/テスト/パッケージングの改善
- ClickFiddle: 読み書きモードで ClickHouse の各バージョンをテストするための新しいツール(Igor Baliuk)。
- ClickHouse バイナリが自己解凍形式になりました #35775 (Yakov Olkhovskiy, Arthur Filatenkov)。
- 最近のタイムゾーン変更をサポートするため、tzdata を 2022b に更新しました。https://github.com/google/cctz/pull/226 を参照してください。チリの 2022 年の夏時間(DST)の開始は、9 月 4 日から 9 月 11 日に延期されました。イランは 2022-09-21 に標準時へ戻した後、DST(夏時間)の適用を恒久的に廃止する予定です。1977 年における Asia/Tehran の歴史的タイムゾーンに関する修正も含まれています。イランが標準時を採用したのは 1946 年ではなく 1935 年です。1977 年には 03-21 23:00 から 10-20 24:00 まで DST を実施しており、1978 年の切り替えは 03-20 と 10-20 ではなく 03-24 と 08-05 に行われました。また、1979 年春の切り替えは 03-21 ではなく 05-27 でした(https://data.iana.org/time-zones/tzdb/NEWS)。(Alexey Milovidov)。
- 以前のパッケージは、
systemd.serviceファイルを/etcにインストールしていました。そこにあるファイルはconfとしてマークされており、削除も自動更新も行われません。このPRでそれらをクリーンアップします。 #39323 (Mikhail f. Shiryaev)。 - LSan が正しく動作するようにしました。 #39430 (Azat Khuzhin).
- TSAN は clang-14 では問題があります(https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540)ので、ここでは TSAN バイナリを clang-15 でビルドします。#39450(Mikhail f. Shiryaev)。
- ClickHouse のツールを個別の実行可能プログラムとしてビルドするオプションを削除しました。これにより #37847 を修正しました。#39520(Alexey Milovidov)。
- s390x(ビッグエンディアン)向けビルドのための細かな準備作業。 #39627 (Harry Lee)。 #39656 (Harry Lee)。s390x 向け BitHelpers におけるエンディアン問題を修正。 #39656 (Harry Lee)。ClickHouse ではサポートされていない s390x アーキテクチャ向けに、SipHash に関連するコードの一部を実装。 #39732 (Harry Lee)。ClickHouse ではサポートされていない s390x アーキテクチャ向けの Coordination スナップショットコードで発生していたエンディアン問題を修正。 #39931 (Harry Lee)。ClickHouse ではサポートされていない s390x アーキテクチャ向けの Codec コードにおけるエンディアン問題を修正。 #40008 (Harry Lee)。ClickHouse ではサポートされていない s390x アーキテクチャ向けに、ReadHelpers および WriteHelpers のコードでビッグエンディアンのバイナリデータを読み書きする際のエンディアン問題を修正。 #40179 (Harry Lee)。
clang-16(trunk)でのビルドをサポートしました。これにより #39949 がクローズされました。#40181(Alexey Milovidov)。- RISC-V 64 向けビルドを CI で実行できるように準備します。これは #40141 に対応するものです。#40197(Alexey Milovidov)。
- 関数登録用マクロインターフェイス(
FUNCTION_REGISTER*)を簡素化し、registerFunctions.cpp でextern関数を追加・呼び出すステップを不要にしました。これにより、新しい関数のインクリメンタルビルドも高速化されます。 #38615 (Li Yin)。 - Docker: 現在では、Docker イメージ内の entrypoint.sh は、マルチディスク構成のために設定で指定されたすべてのフォルダに対して
chownを実行します #17717。#39121(Nikita Mikhaylov)。
バグ修正
CapnProto入力フォーマットで発生しうるセグメンテーションフォールトを修正しました。このバグは kiojj によって発見され、ClickHouse バグバウンティ プログラム を通じて報告されました。#40241(Kruglov Pavel)。- 配列の添字演算子が誤った動作をする極めてまれなケースを修正しました。これにより #28720 がクローズされました。#40185(Alexey Milovidov)。
- 暗号化関数の引数チェックが不十分だった問題を修正しました(query fuzzer により検出)。これにより #39987 が解決されます。#40194(Alexey Milovidov)。
ENGINE = Setで複数カラムを持つテーブルに対してIN演算子を使用した場合に、カラムの順序が誤ってしまうことがある不具合を修正しました。これにより #13014 が修正されます。 #40225 (Alexey Milovidov)。- 暗号化ディスクからの読み取り時のシーク処理を修正しました。このPRは #38381 を解決します。#39687(Vitaly Baranov)。
- 結合プラン内の重複カラムを修正。ついに #26809 を解決。#40009(Vladimir C)。
- 異なる日付/時刻型を含む ORDER BY WITH FILL を伴う SELECT クエリがハングする問題を修正しました。 #37849 (Yakov Olkhovskiy).
- projection の ORDER BY に一致する ORDER BY の動作を修正しました(これまでは単にソートされていない結果を返していました)。 #38725 (Azat Khuzhin).
GROUP BY文で、テーブルのカラムまたは式と名前が衝突してしまう場合には関数を最適化しないようにしました。#37032 を修正。#39103(Anton Kozlov)。- RENAME TABLE 実行後にログに誤ったテーブル名が出力される問題を修正。これにより #38018 が修正されます。 #39227(Amos Bird)。
- クエリを最適化する際の列プルーニング時における位置引数を修正しました。 #38433 をクローズ。 #39293 (Kseniia Sumarokova).
- Protobuf/CapnProto フォーマットにおいて、空メッセージの場合に発生し、スキーマ推論により空の
Tuple型カラムが作成されてしまっていた不具合を修正しました。#39051 をクローズしました。Protobuf および CapnProto フォーマットのスキーマ推論時に、サポートされていない型のフィールドをスキップできるようにする 2 つの新しい設定input_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inferenceを追加しました。#39357(Kruglov Pavel)。 - (Window View は実験的な機能です)
CREATE WINDOW VIEW .. ON CLUSTER ... INNERで発生していたセグメンテーションフォルトを修正しました。#39363 をクローズしました。#39384(Kseniia Sumarokova)。 insert into関数をキャンセルした場合の WriteBuffer の finalize を修正しました(以前のバージョンではstd::terminateを引き起こす可能性がありました)。 #39458 (Kruglov Pavel)。- 疎シリアライズ形式における
Object型カラムの保存処理を修正。 #39464 (Anton Popov). - プロジェクション使用時に発生する可能性のある「Not found column in block」という例外を修正しました。これにより #39469 がクローズされました。#39470(小路)。
- マテリアライズドビューを伴う DROP と INSERT 間の競合状態で発生する例外を修正。 #39477 (Azat Khuzhin).
- Apache Avro ライブラリのバグ: Avro フォーマットにおけるデータレースおよびヒープバッファオーバーフロー発生の可能性を修正。#39094 および #33652 をクローズ。#39498(Kruglov Pavel)。
O_DIRECTが有効な場合(min_bytes_to_use_direct_ioの設定で有効化)、local_filesystem_read_method='pread_threadpool'設定時の非同期読み取りでまれに発生していた不具合を修正しました。 #39506 (Anton Popov).- (FreeBSD のみ)FreeBSD 環境で ClickHouse 起動時に発生していた "Code: 49. DB::Exception: FunctionFactory: the function name '' is not unique. (LOGICAL_ERROR)" を修正しました。 #39551 (Alexander Gololobov).
splitByCharに最近追加された引数「maxsplit」が正しく動作していなかった不具合を修正しました。 #39552 (filimonov)。enable_optimize_predicate_expression有効時の ASOF JOIN におけるバグを修正し、#37813 をクローズ。#39556(Vladimir C)。ON CLUSTERまたはReplicatedデータベースおよびReplicatedMergeTreeを用いたCREATE/DROP INDEXクエリの動作を修正しました。以前はすべてのレプリカで実行されており、エラーや DDL キューの滞留の原因となっていました。#39511 を修正。#39565(Alexander Tokmakov)。- JOIN を伴うプッシュダウン処理で発生する「column not found」エラーを修正し、#39505 をクローズ。#39575(Vladimir C)。
- 誤っていた
REGEXP_REPLACEのエイリアスを修正しました。これにより https://github.com/ClickHouse/ClickBench/issues/9 が解決されます。#39592(Alexey Milovidov)。 - 指数減衰ウィンドウ関数における減衰の基準点を、ウィンドウ内の最後の値に固定しました。以前は、減衰は
exp((t - curr_row_t) / decay_length)という式で計算されており、これはウィンドウの右側の境界がCURRENT ROWでない場合には正しくありませんでした。これをexp((t - last_row_t) / decay_length)に変更しました。ROWS BETWEEN (smth) AND CURRENT ROWを指定したウィンドウでは、結果に変更はありません。#39593(Vladimir Chebotaryov)。 - オペランドのスケールに基づいて検出できる Decimal の除算時のオーバーフローを修正。 #39600 (Andrey Zvonov)。
- 設定
output_format_arrow_string_as_stringとoutput_format_arrow_low_cardinality_as_dictionaryを併用した場合に正しく動作するよう修正。#39624 をクローズ。#39647(Kruglov Pavel)。 - 分散テーブルの読み取り時におけるデフォルトデータベースの解決処理のバグを修正しました。 #39674 (Anton Kozlov).
- (廃止予定の Ordinary データベースでのみ)
SELECTクエリがmmapI/O 用のキャッシュを使用していて、データベースエンジンにOrdinaryを用い、かつ削除されたテーブルと同じ名前の新しいテーブルが作成された場合に、削除済みテーブルのデータを読み取ってしまうことがありました。この問題は修正されています。 #39708 (Alexander Tokmakov). - 発生する可能性のあるエラー
Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinalityを修正しました。#38460 を解決します。#39716(Arthur Passos)。 - JSON 形式の
metaセクション内のフィールド名が誤って二重にエスケープされていました。この修正により #39693 がクローズされました。#39747(Alexey Milovidov)。 - タプルと演算子
INを使用した誤ったインデックス解析を修正しました。これにより、誤ったクエリ結果が返される可能性がありました。 #39752 (Anton Popov). EmbeddedRocksDBテーブルでパラメータを用いたキーによるフィルタリングが機能するよう修正。 #39757 (Antonio Andelic).- ARRAY JOIN の最適化によって発生していた
Invalid number of columns in chunk pushed to OutputPortエラーを修正しました。 #39164 の不具合を修正。 #39799(Nikolai Kochetov)。 - Linux カーネルのバグに対するワークアラウンドです。
local_filesystem_read_method=pread_threadpoolを使用してCANNOT_READ_ALL_DATA例外を解消します。このバグは、man によると Linux カーネルのバージョン 5.9 と 5.10 のみに影響していました。#39800(Anton Popov)。 - (NFS のみ) root-squash が有効なボリュームに対する NFS 上の mkdir の不具合を修正。#39898 (Constantine Peresypkin).
- DETACH/DROP 時に Prometheus メトリクスから辞書を削除します。 #39926 (Azat Khuzhin).
- StorageFile における仮想カラムを含む読み取り処理を修正。#39907 をクローズ。#39943(flynn)。
- フェッチ時の過剰なメモリ使用を修正しました。#39915 を修正。#39990(Nikolai Kochetov)。
- (実験的機能)
hashIdがクラッシュする問題と、salt パラメータが使用されていなかった問題を修正。 #40002 (Raúl Marín)。 - 特定の組み合わせで定数列と非定数列を使用した場合に、
EXCEPTおよびINTERSECT演算子がクラッシュする可能性がありました。 #40020 (Duc Canh Le)。 - INSERT が遅すぎる、またはマージ/ミューテーションに時間がかかりすぎる場合に発生していた "Part directory doesn't exist" および "
tmp_<part_name>... No such file or directory" エラーを修正しました。さらに、パーツのフェッチの前回の試行が失敗したにもかかわらずtmp-fetch_<part_name>ディレクトリがクリーンアップされていなかった場合に、ログにエラーや警告が一切出力されないままレプリケーションキューのエントリがスタックする可能性があった問題も修正しました。 #40031 (Alexander Tokmakov). Valuesフォーマットにおけるタプル配列の解析に関するまれな不具合を修正。 #40034 (Anton Popov).- ArrowColumn 形式の Dictionary(X) および Dictionary(Nullable(X)) を、それぞれ ClickHouse の LowCardinality(X) および LowCardinality(Nullable(X)) に変換するロジックを修正しました。 #40037 (Arthur Passos).
- タスクスケジューリングの失敗時に S3 への書き込みで発生し得るデッドロックを修正。 #40070 (Maksim Kita).
- collectFilesToSkip() のバグを修正し、再計算が必要なインデックスに対して正しいファイル拡張子(.idx または .idx2)を付与して誤ったハードリンクを回避しました。#39896 を修正。#40095(Jianmei Zhang)。
- 逆引き DNS 解決に関する修正。 #40134 (Arthur Passos)。
Array(UInt32)に対するarrayDifferenceの予期しない結果を修正。 #40211 (Duc Canh Le).
ClickHouse リリース 22.7, 2022-07-21
アップグレードに関する注意事項
- 設定
enable_positional_argumentsをデフォルトで有効化しました。これにより、SELECT ... ORDER BY 1, 2のようなクエリが使用できるようになります。ここでの 1, 2 は SELECT 句への参照です。以前の動作に戻す必要がある場合は、この設定を無効にしてください。 #38204(Alexey Milovidov)。 format_csv_allow_single_quotesをデフォルトで無効化しました。#37096 を参照してください。(Kruglov Pavel)。Ordinaryデータベースエンジンと、*MergeTreeテーブル向けの旧来のストレージ定義構文は非推奨となりました。デフォルトでは、Ordinaryエンジンを使用する新しいデータベースを作成することはできません。systemデータベースがOrdinaryエンジンを使用している場合、サーバー起動時に自動的にAtomicに変換されます。旧動作を維持するための設定(allow_deprecated_database_ordinaryおよびallow_deprecated_syntax_for_merge_tree)はありますが、これらの設定は将来のリリースで削除される可能性があります。 #38335(Alexander Tokmakov)。- デフォルトでカンマ区切りの結合(カンマ JOIN)を INNER JOIN に書き換えるようにしました(デフォルト値として
cross_to_inner_join_rewrite = 2を設定)。以前の動作にするにはcross_to_inner_join_rewrite = 1を設定してください。 #39326(Vladimir C)。互換性の問題が発生した場合は、この設定を元に戻すことができます。
新機能
- ウィンドウ関数を含む式をサポートしました。 #19857 をクローズしました。 #37848(Dmitry Novik)。
EmbeddedRocksDBテーブル向けに新しいdirect結合アルゴリズムを追加しました。#33582、#35363 を参照してください(Vladimir C)。- 完全なソートマージジョインアルゴリズムを追加しました。 #35796 (Vladimir C).
- NATS テーブルエンジンを実装しました。これにより、NATS を使った pub/sub が可能になります。 #32388 をクローズします。 #37171 (tchepavel). (Kseniia Sumarokova)
- テーブル関数
mongodbを実装し、MongoDBストレージ/テーブル関数への書き込みを可能にしました。 #37213 (aaapetrenko). (Kseniia Sumarokova) SQLInsert出力フォーマットを追加しました。#38441 をクローズ。#38477(Kruglov Pavel)。- 設定
additional_table_filtersを導入。この設定を使用すると、テーブルに対して追加のフィルタ条件を指定でき、読み取り後ただちに適用されます。例:select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}。クエリ結果に対する追加のフィルタ条件を指定する設定additional_result_filterを導入。#37918 をクローズしました。#38475 (Nikolai Kochetov)。 compatibility設定と、ClickHouse のバージョンをまたいだ設定変更に関する情報を含むsystem.settings_changesシステムテーブルを追加します。#35972 をクローズしました。 #38957(Kruglov Pavel)。- 関数
translate(string, from_string, to_string)とtranslateUTF8(string, from_string, to_string)を追加しました。いくつかの文字を別の文字に変換する関数です。 #38935 (Nikolay Degterinsky)。 parseTimeDelta関数をサポートしました。;-+,:を区切り文字として使用でき、例えば1yr-2moや2m:6sのように指定できます。SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds')。#39071(jiahui-97)。CREATE TABLE ... EMPTY AS SELECTクエリを追加しました。SELECT クエリからテーブル構造を自動的に推論しますが、テーブル作成後にデータは挿入されません。#38049 を解決しました。#38272(Alexander Tokmakov)。- リモートストレージでの I/O 操作を制限するためのオプション
max_remote_read_network_bandwidth_for_serverおよびmax_remote_write_network_bandwidth_for_serverを追加しました。#39095(Sergei Trifonov)。 - ROLLUP、CUBE、GROUPING SETS の場合に集約キー列を NULL 許容(Nullable)にできるようにする
group_by_use_nulls設定を追加しました。#37359 をクローズ。#38642(Dmitry Novik)。 - データエクスポート時に圧縮レベルを指定できる機能を追加しました。 #38907 (Nikolay Degterinsky)。
systemデータベースからのSELECTに明示的な権限付与を必須とするオプションを追加しました。詳細:#38970(Vitaly Baranov)。- 関数
multiMatchAny、multiMatchAnyIndex、multiMatchAllIndicesおよびそれらのファジー版は、非 const のパターン配列引数を受け取れるようになりました。 #38485 (Robert Schulze)。SQL 関数multiSearchAllPositionsは、非 const の needle 引数を受け取れるようになりました。 #39167 (Robert Schulze)。 - 外部ファイルインポート時の zstd デコードにおける最大メモリ使用量を設定できるようにするため、設定項目
zstd_window_log_maxを追加しました。 #35693 をクローズしました。 #37015(wuxiaobai24)。 send_logs_source_regexp設定を追加しました。指定した正規表現に一致するログソース名のサーバーテキストログを送信します。空文字列の場合はすべてのソースが対象です。 #39161 (Amos Bird)。Hiveテーブルに対するALTERをサポート。 #38214 (lgbo).isNullable関数をサポートしました。この関数は引数が Nullable かどうかを判定し、1 または 0 を返します。#38611 をクローズしました。#38841(lokax)。- Base58 エンコード/デコードを行う関数を追加しました。 #38159 (Andrey Zvonov).
- Play UI にチャート表示を追加。#38197 (Alexey Milovidov)。
- 配列およびタプルの両方に対して、L2 距離の二乗およびノルム関数を追加しました。 #38545 (Julian Gilyadov).
- SQL 経由で
urlテーブル関数 / ストレージに HTTP ヘッダーを渡せるようにしました。#37897 をクローズしました。#38176(Kseniia Sumarokova)。 - パッケージに
clickhouse-diagnosticsバイナリを追加。#38647 (Mikhail f. Shiryaev)。
実験的機能
- 単一のクエリをトランザクション内で実行するための新しい設定
implicit_transactionを追加しました。クエリが成功した場合は COMMIT、失敗した場合は ROLLBACK を使用して、トランザクションの開始と終了の両方を自動的に処理します。#38344(Raúl Marín)。
パフォーマンスの向上
- ソート済み列に対する
DISTINCTの最適化。DISTINCT対象の列で入力ストリームがソートされている場合、専用のDISTINCT変換を使用します。この最適化は pre-distinct、final distinct、またはその両方に適用できます。初期実装は @dimarub2000 によるものです。#37803(Igor Nikonov)。 - バッチ版の
BinaryHeapを使用して、ORDER BY、MergeTreeのマージ、およびウィンドウ関数のパフォーマンスを改善。 #38022 (Maksim Kita)。 FINALを含むクエリの並列実行性を向上 #36396 (Nikita Taranov)。- #35616 で導入されていた、結合における大きなパフォーマンス劣化を修正しました。ssb クエリのような一般的な結合クエリが、ほぼ 3 か月もの間 10 倍も遅くなっていたにもかかわらず、誰からも報告されなかったのは興味深い点です。#38052(Amos Bird)。
- Intel hyperscan ライブラリから vectorscan への移行を行いました。これにより、非 x86 プラットフォームにおける多くの文字列マッチング処理が高速化されます。 #38171 (Robert Schulze).
- 集約後に実行されるクエリプランステップの並列度を向上させました。 #38295 (Nikita Taranov).
JSON型カラムへのデータ挿入性能を改善しました。 #38320 (Anton Popov).- HashTable における挿入および検索を最適化しました。 #38413 (Nikita Taranov).
- #32493 による性能低下を修正。#38417(Alexey Milovidov)。
- SIMD 命令を使用した数値型カラムとの結合処理の性能を改善しました。 #37235 (zzachimed). #38565 (Maksim Kita).
- 配列に対する Norm 関数および Distance 関数の実行速度が 1.2~2 倍向上しました。 #38740 (Alexander Gololobov)。
- LZ4 伸長に対して、AVX-512 VBMI で最適化された
copyOverlap32Shuffleを追加しました。これにより、LZ4 伸長のパフォーマンスが向上しました。 #37891 (Guo Wangyang). ORDER BY (a, b)は、ORDER BY a, bと同じ利点をすべて享受できます。 #38873 (Igor Nikonov)。- ベンチマークをより安定させるために、ブランチを 32 バイト境界に揃えました。 #38988 (Guo Wangyang)。これにより、Intel 環境で平均して 1~2% の性能向上が得られます。
- Executable UDF、Executable 辞書、および Executable テーブルでは、サブプロセスの終了待ちの際に発生していた 1 秒の無駄な待ち時間がなくなりました。 #38929 (Constantine Peresypkin)。
- すべてのカラムを選択しないクエリに対する
system.stack_traceテーブルへのアクセスを最適化しました。 #39177 (Azat Khuzhin). - LowCardinality 引数に対する isNullable / isConstant / isNull / isNotNull のパフォーマンスを改善しました。 #39192 (Kruglov Pavel).
- ウィンドウ関数での ORDER BY の処理を最適化しました。 #34632 (Vladimir Chebotarev).
- テーブル
system.asynchronous_metric_logは、ストレージ効率がさらに最適化されました。これにより #38134 がクローズされました。YouTube 動画 も参照してください。#38428(Alexey Milovidov)。
改善
- SQL 標準準拠の CREATE INDEX および DROP INDEX 構文をサポートしました。 #35166 (Jianmei Zhang).
- INSERT クエリに対してもプロファイルイベントの送信をサポートしました(以前は SELECT クエリのみが対象でした)。#37391 (Azat Khuzhin)。
- 完全マテリアライズドプロジェクションに対して順序集約(
optimize_aggregation_in_order)を実装しました。 #37469 (Azat Khuzhin). - Kerberos 初期化に使用していた subprocess 実行を削除。新しい統合テストを追加。#27651 をクローズ。#38105(Roman Vasin)。
-
- 設定
multiple_joins_try_to_keep_original_namesを追加し、複数の JOIN の書き換え時に識別子名が書き換えられないようにしました。#34697 をクローズ。#38149(Vladimir C)。
- 設定
- トレースビジュアライザーの UX を改善。 #38169 (Sergei Trifonov).
- AArch64 向けにスタックトレースの収集とクエリプロファイラを有効化。 #38181 (Maksim Kita).
- SQL のユーザー定義関数を読み込む際に、
user_definedディレクトリ内のシンボリックリンクをスキップしないようにしました。#38042 をクローズしました。#38184(Maksim Kita)。 store/内のサブディレクトリをバックグラウンドでクリーンアップする処理を追加しました。場合によっては、clickhouse-server がstore/内に不要なサブディレクトリ(たとえばテーブル作成に失敗した場合など)を残してしまい、これらのディレクトリが削除されないことがありました。#33710 を修正しました。#38265(Alexander Tokmakov)。DESCRIBE CACHEクエリを追加し、設定ファイルからキャッシュ設定を表示できるようにしました。SHOW CACHESクエリを追加し、利用可能なファイルシステムキャッシュの一覧を表示できるようにしました。#38279 (Kseniia Sumarokova).system drop filesystem cacheに対するアクセスチェックを追加し、ON CLUSTER をサポート。#38319(Kseniia Sumarokova)。- 21.3 から 22.3 へのアップグレード時における PostgreSQL データベースエンジンの非互換の問題を修正しました。 #36659 をクローズしました。 #38369(Kseniia Sumarokova)。
filesystemAvailableなどの関数がclickhouse-localでも動作するようになりました。これによって #38423 が解決されました。#38424 (Alexey Milovidov).revision関数を追加しました。 #38555 (Azat Khuzhin)。- GCS のプロキシトンネル経由での利用を修正。#38726 (Azat Khuzhin).
- clickhouse client / local で
\i fileをサポート(psql の\iと同様)。 #38813 (Kseniia Sumarokova). EXPLAIN ASTに新しいオプションoptimize = 1が追加されました。有効にすると書き換え後の AST を表示し、そうでない場合は元のクエリの AST を表示します。デフォルトでは無効です。#38910(Igor Nikonov)。- カラム一覧で末尾のカンマを許可。#38425 をクローズ。#38440(chen)。
parallel_hashJOIN メソッドのバグ修正およびパフォーマンス改善。 #37648 (Vladimir C).- Hadoop セキュア RPC 転送(
hadoop.rpc.protection=privacyおよびhadoop.rpc.protection=integrity)をサポートしました。 #37852 (Peng Liu). - struct 型のサポートを
StorageHiveに追加。 #38118 (lgbo). - S3 の単一オブジェクトは、現在は
RemoveObjectRequestで削除されるようになりました。GCP ではremoveFileIfExistsを使用できず、その結果remove機能のおよそ半分が事実上動作しない問題がありましたが、これに対する互換性を実装しました。GCS がサポートしていないDeleteObjectsS3 API を自動的に検出するようになりました。これにより、設定で明示的にsupport_batch_delete=0を指定しなくても GCS を使用できるようになります。#37882(Vladimir Chebotarev)。 - 基本的な ClickHouse Keeper 関連の監視データ(ProfileEvents および CurrentMetrics 経由)を公開。 #38072 (lingpeng0314).
- PostgreSQL エンジン接続で
auto_closeオプションをサポートしました。#31486 をクローズ。#38363(Kseniia Sumarokova)。 - テーブル関数のカラム宣言で
NULL修飾子を使用可能にしました。#38816(Kruglov Pavel)。 - シャットダウン中に発生する無害な
TABLE_IS_READ_ONLYエラーを回避するため、シャットダウン前にmutations_finalizing_taskを無効化します。 #38851 (Raúl Marín)。 - 非推奨の Ordinary データベースを使用している場合に、INSERT クエリが存在していても、ALTER クエリの後に続く SELECT クエリで発生していた不要な待機が発生しないようにしました。 #38864 (Azat Khuzhin).
EXPLAIN ASTに新しいオプションrewriteが追加されました。有効にすると書き換え後の AST を表示し、無効の場合は元のクエリの AST を表示します。デフォルトでは無効です。 #38910 (Igor Nikonov)。- 予期される場合には、Zookeeperの「Node exists」例外を system.errors に報告しないようにしました。 #38961 (Raúl Marín)。
clickhouse-keeper: リアルタイムダイジェストの計算および検証のサポートを追加。デフォルトでは無効になっています。 #37555 (Antonio Andelic).clickhouse-extract-from-configツールのキー内で、*または{expr1, expr2, expr3}のような glob パターンを指定できるようにしました。 #38966 (Nikita Mikhaylov).- clearOldLogs: 並行削除時に KEEPER_EXCEPTION を報告しないようにしました。 #39016 (Raúl Marín).
- clickhouse-keeper の改善:keeper サーバーに関するメタ情報をディスク上に永続化します。 #39069 (Antonio Andelic)。これにより、すべての keeper ノードを同時にシャットダウンまたは再起動する場合の運用が容易になります。
- ファイルシステムキャッシュ使用時にディスク容量が不足しても、例外を送出せずに処理を継続するようにしました。 #39106 (Kseniia Sumarokova).
- k8s から送信される SIGTERM シグナルの処理。 #39130 (Timur Solodovnikov).
merge_algorithmカラム(Undecided、Horizontal、Vertical)を system.part_log に追加しました。 #39181 (Azat Khuzhin).- ディスクが回転ディスクでない場合に
system.errorsのカウンターを増やさないようにしました。 #39216 (Raúl Marín). system.query_log内のINSERTクエリに対するメトリクスresult_bytesは、挿入されたバイト数を示します。以前は誤った値が記録されており、result_rowsと同じ値が保存されていました。#39225(Ilya Yatsishin)。- clickhouse-client における CPU 使用率メトリクスが、よりわかりやすい形式で表示されるようになりました。 #38756 を修正しました。 #39280(Sergei Trifonov)。
- サーバー起動時のファイルシステムキャッシュの初期化で例外を再スローし、エラーメッセージを改善。 #39386 (Kseniia Sumarokova).
- OpenTelemetry は、デフォルトでは Processors スパンを収集しなくなりました(数が多すぎるため)。Processors スパンの収集を有効にするには、
opentelemetry_trace_processors設定を有効化してください。 #39170 (Ilya Yatsishin). - 関数
multiMatch[Fuzzy](AllIndices/Any/AnyIndex)で、needle 引数が空の場合でも論理エラーを発生させないようにしました。 #39012 (Robert Schulze). - デフォルト引数
x-max-lengthおよびx-overflowを指定せずにRabbitMQキューを宣言できるようにしました。 #39259 (rnbondarenko)。
ビルド/テスト/パッケージングの改善
- ClickHouse に Clang Thread Safety Analysis (TSA) アノテーションを適用。#38068 (Robert Schulze).
- FreeBSD 向けにユニバーサルインストールスクリプトを対応。#39302 (Alexey Milovidov).
s390xプラットフォームでのビルドに向けた準備。#39193 (Harry Lee).jemallocライブラリのバグを修正。#38757 (Azat Khuzhin).- ハードウェアベンチマークが結果の自動アップロードをサポートするようになりました。#38427 (Alexey Milovidov).
- システムテーブル
system.licensesが Mac (Darwin) 上で正しく登録されるようになりました。#38294 (Robert Schulze). all|noarchパッケージをアーキテクチャ依存に変更 - それに関するドキュメントの一部を修正 - aarch64|arm64 パッケージを Artifactory およびリリースアセットにプッシュ - #36443 を修正。#38580 (Mikhail f. Shiryaev).
バグ修正(公式安定版またはプレリリース版におけるユーザーに可視の不具合)
- 19 桁を超えるスケールを持つ
Decimal128/Decimal256の丸め処理を修正しました。 #38027 (Igor Nikonov). - ストレージ
Hive(Integration テーブルエンジン)におけるデータレースが原因のクラッシュを修正しました。 #38887 (lgbo)。 ON CLUSTER句を伴うGRANT ALL ON *.*の実行時にクラッシュが発生する問題を修正しました。この問題は https://github.com/ClickHouse/ClickHouse/pull/35767 によって導入されていました。本修正により #38618 がクローズされます。 #38674 (Vitaly Baranov).{0..10}形式の場合のグロブ展開を正しく行うよう修正しました。 #38498 を解決。現在の実装はシェルの動作に類似しており、その点については @rschu1ze が こちら で言及しています。 #38502(Heena Bansal)。- 定数の map 引数を使用した場合に
mapUpdate、mapFilter関数がクラッシュする不具合を修正しました。#38547 をクローズしました。#38553(hexiaoting)。 - クエリ最適化のための
toHourの単調性情報を修正しました。これが原因で、誤ったインデックス解析に伴う不正確なクエリ結果が発生する可能性がありました。この修正は #38333 を解決します。 #38675 (Amos Bird)。 - s3 ストレージが並列書き込みをサポートしているかどうかの判定処理を修正しました。この不具合により、s3 への並列書き込みが動作していませんでした。 #38792 (chen).
- 並列読み取りバッファを使用する S3 のシーク可能な読み取りを修正しました(クエリ実行時のメモリ使用量に影響していた問題)。#38258 をクローズ。#38802(Kseniia Sumarokova)。
simdjsonを更新しました。これにより、最新の Intel CPU(AVX-512 VBMI 搭載マシン)で発生していたバッファオーバーフローの問題 #38621 が修正されます。 #38838(Alexey Milovidov)。- Vertical merge で発生しうる論理エラーを修正。#38859(Maksim Kita)。
- 秒単位を使用する設定プロファイルを修正。#38896(Raúl Marín)。
- NULL 許容のパーティションキーがある場合に、パーティションプルーニングが誤って行われる問題を修正しました。注意: おそらく、NULL 許容のパーティションキーは使用していないはずです — これは、そもそも使うべきでないマイナーな機能です。NULL 許容キーはそもそも意味を成さず、この機能はごく一部の非常に特殊なユースケースのためだけに存在します。これにより #38941 が修正されました。#38946 (Amos Bird)。
- フェッチ時の
fsync_part_directoryを改善。 #38993 (Azat Khuzhin). OvercommitTracker内で発生し得るデッドロックを修正し、#37794 を解決。#39030(Dmitry Novik)。- ファイルシステムキャッシュのバグを修正しました。このバグは、キャッシュ容量が上限に達したタイミングと重なるごく稀なケースで発生する可能性がありました。 #39066 をクローズ。 #39070(Kseniia Sumarokova)。
- ウィンドウ式の引数の解釈に関するいくつかのコーナーケースを修正しました(#38538)。また、ウィンドウ式で高階関数を使用できるようにしました(#39112、Dmitry Novik)。
tuple関数内でLowCardinality型を保持するようにしました。以前はLowCardinality型が失われ、作成されたタプルの要素はLowCardinalityの基になる型になっていました。 #39113 (Anton Popov).extremes = 1設定が有効になっている、マテリアライズドビューがアタッチされているテーブルへの INSERT で発生する可能性があるエラーBlock structure mismatchを修正しました。 #29759 および #38729 をクローズしました。 #39125 (Nikolai Kochetov)。optimize_trivial_count_queryとempty_result_for_aggregation_by_empty_setの両方がtrueに設定されている場合に発生する、予期しないクエリ結果の問題を修正しました。この修正で #39140 が解決されました。 #39155 (Amos Bird)。PREWHEREおよび read-in-order 最適化を用いるSELECTクエリで発生していたNot found column Type in blockエラーを修正しました。 #39157 (Yakov Olkhovskiy).- リモートファイルシステムでのハードリンク処理時に発生する、極めてまれなレースコンディションを修正しました。これを再現する唯一の方法は、バックアップを並行実行することです。 #39190 (alesapin).
- (zero-copy replication は本番環境では使用すべきでない実験的機能です)
allow_remote_fs_zero_copy_replicationを使用したインメモリパートのフェッチ処理を修正。 #39214 (Azat Khuzhin)。 - (MaterializedPostgreSQL - 実験的機能)。レプリケーション初期化時に例外が発生した場合に発生する可能性があった、MaterializedPostgreSQL データベースエンジンでのセグメンテーションフォールトを修正しました。#36939 をクローズ。#39272(Kseniia Sumarokova)。
- PostgreSQL データベースエンジンからのテーブルメタデータの誤った取得を修正。 #33502 をクローズ。 #39283 (Kseniia Sumarokova)。
- 集約キーが他の関数でラップされている場合に発生する projection 例外を修正しました。これにより #37151 が解決されます。#37155(Amos Bird)。
- 一部の関数で発生する可能性のあった論理エラー
... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ...を修正しました。クローズ: #37610 クローズ: #37741。#37759(Kruglov Pavel)。 UNIONのサブクエリにおける列順序の誤りを修正(サブセレクト内で列が重複している場合に、誤った結果が生成される可能性がある問題)。 #37887 (Azat Khuzhin).- ドットを含むカラム名に対する MODIFY ALTER COLUMN の誤動作を修正。#37907 をクローズ。#37971(Kruglov Pavel)。
- S3 にデータを格納している
MergeTreeテーブルからのスパース列の読み込みを修正します。 #37978 (Anton Popov). - 設定からレプリカを削除した場合に
Distributedテーブルへの非同期インサートがクラッシュする可能性があった問題を修正。 #38029 (Nikolai Kochetov). - エイリアスなしの CTE を使用した GLOBAL JOIN で発生する「Missing columns」エラーを修正。 #38056 (Azat Khuzhin).
- 後方互換性モードでタプル関数をリテラルとして書き換えるようになりました。 #38096 (Anton Kozlov).
ORDER BY時の出力ブロックに対する不要なメモリ予約を修正。#38127(iyupeng)。- 配列に対する mapped 関数で発生する可能性のある論理エラー
Bad cast from type DB::IColumn* to DB::ColumnNullable*を修正しました。#38006 をクローズしました。#38132(Kruglov Pavel)。 - 部分マージ結合における一時的な名前競合を修正し、#37928 をクローズ。#38135 (Vladimir C).
CREATE TABLE nested_name_tuples (aTuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory;のようなクエリに関する軽微な問題 #38136 (lgbo)。- 入れ子になったショートサーキット関数で、条件が
falseの場合でも引数が評価されてしまうバグを修正しました。 #38040 をクローズ。 #38173(Kruglov Pavel)。 - (Window View は実験的な機能です)誤った構造の WINDOW VIEW で発生する LOGICAL_ERROR を修正しました。 #38205 (Azat Khuzhin).
- OAUTHBEARER リフレッシュコールバックが設定されている場合に発生するクラッシュを修正するため、librdkafka サブモジュールを更新。 #38225 (Rafael Acevedo).
- ProfileEvents が原因で Distributed テーブルへの INSERT がハングしていた問題を修正。 #38307 (Azat Khuzhin).
- PostgreSQL エンジンのリトライ処理を修正。 #38310 (Kseniia Sumarokova).
- PartialSortingTransform における最適化を修正 (SIGSEGV や結果の不整合が発生する可能性があった問題)。 #38324 (Azat Khuzhin).
- PeekableReadBuffer ベースのフォーマットにおける RabbitMQ の問題を修正しました。#38061 をクローズしました。#38356(Kseniia Sumarokova)。
- MaterializedPostgreSQL - 実験的な機能。MaterializedPostgreSQL で発生しうる
Invalid number of rows in Chunkエラーを修正。 #37323 をクローズ。 #38360(Kseniia Sumarokova)。 - 接続文字列の設定で RabbitMQ の構成を修正しました。#36531 をクローズ。#38365(Kseniia Sumarokova)。
- PostgreSQL エンジンが配列の次元サイズを取得する際に PostgreSQL スキーマを使用していなかった問題を修正。#36755 をクローズ。#36772 をクローズ。#38366(Kseniia Sumarokova)。
DISTINCTとLIMITを含む分散クエリで結果が誤る可能性がある問題を修正。 #38282 を修正。 #38371(Anton Popov)。- 0バイトを含むパターンでの countSubstrings() および position() の誤った結果を修正。 #38589 (Robert Schulze).
- これにより、IPv4/IPv6 表現が不正なテーブルに対しても、clickhouse-server を起動し、テーブルのアタッチやデタッチを行うことが可能になりました。Issue #35156 の正式な修正です。#38590(alesapin)。
- 一部の引数が NaN の場合でも
rankCorr関数が正しく動作するようになりました。これにより #38396 が解決されました。#38722(Alexey Milovidov)。 parallel_view_processing=1とoptimize_trivial_insert_select=1を組み合わせて使用した場合の問題を修正しました。ビューへのデータ挿入時のmax_insert_threadsの動作を修正しました。 #38731 (Azat Khuzhin).Mapコンビネータを用いる集約関数において、誤った結果につながる use-after-free を修正しました。 #38748 (Azat Khuzhin).
ClickHouse リリース 22.6, 2022-06-16
後方互換性のない変更
- SQL における8進数リテラルのサポートを削除しました。以前のバージョンでは、それらは Float64 としてパースされていました。 #37765 (Yakov Olkhovskiy).
- 型として
secondsを使用する設定値のパース方法を変更し、浮動小数点値(例:max_execution_time=0.5)をサポートしました。Infinity または NaN の値は例外をスローします。 #37187 (Raúl Marín). - 実験的型
Objectのカラムに対するバイナリシリアライゼーション形式を変更しました。新しい形式はサードパーティクライアントによる実装がより容易です。 #37482 (Anton Popov). - 設定
output_format_json_named_tuples_as_objectsをデフォルトで有効化しました。これにより、JSON フォーマットで名前付きタプルを JSON オブジェクトとしてシリアライズできるようになります。 #37756 (Anton Popov). - 終端がエスケープ記号('\')である LIKE パターンは、SQL 標準に従い、現在は許可されません。 #37764 (Robert Schulze).
- AArch64 CPU を搭載したクラスタ上で異なる ClickHouse バージョンを実行している場合、または 1 つのクラスタで AArch64 と amd64 を混在させており、さらに固定サイズ型で 256 ビット以内だが 64 ビットには収まらない複数キーで GROUP BY を行う分散クエリを使用していて、その結果集合のサイズが非常に大きい場合、ローリングアップグレード中にこれらのクエリを実行すると、結果内のデータが完全には集約されません。回避策: ローリングアップグレードではなく、ダウンタイムを伴うアップグレードを実施してください。
新機能
GROUPING関数を追加しました。これにより、ROLLUP、CUBE、GROUPING SETSを使用するクエリ内のレコードを区別できるようになります。#19426 をクローズしました。#37163(Dmitry Novik)。- 浮動小数点データ圧縮用の新しいコーデックアルゴリズム FPC。#37553(Mikhail Guzov)。
- 新しいカラム指向 JSON フォーマット
JSONColumns、JSONCompactColumns、JSONColumnsWithMetadataを追加。 #36338 および #34509 をクローズ。 #36975(Kruglov Pavel)。 - d3js に基づく OpenTelemetry のトレース可視化ツールを追加しました。 #37810 (Sergei Trifonov).
system.zookeeperテーブルへの INSERT をサポートしました。 #22130 をクローズしました。 #37596(Han Fei)。LIKE、ILIKE、match関数で非定数のパターン引数をサポートしました。#37251 (Robert Schulze)。- 実行可能なユーザー定義関数でパラメータをサポートするようになりました。例:
SELECT test_function(parameters)(arguments)。 #37578 をクローズしました。 #37720(Maksim Kita)。 system.part_logテーブルにmerge_reason列を追加。 #36912 (Sema Checherinda).- Avro フォーマットで Maps および Records 型をサポートしました。Avro フォーマットで null をデフォルト値として挿入できるようにする新しい設定
input_format_avro_null_as_defaultを追加しました。#18925、#37378、および #32899 をクローズ。#37525(Kruglov Pavel)。 - ClickHouse 用に構成された仮想ファイルシステムを調査および操作するための
clickhouse-disksツールを追加。 #36060 (Artyom Yurkov). - H3 の単方向エッジ関数を追加します。#36843 (Bharat Nallan).
- 符号なし整数から hashids を計算する機能を追加しました。#37013(Michael Nutt)。
CREATE USER <user> IDENTIFIED WITH sha256_hashにおいて、SALTを明示的に指定できるようになりました。#37377(Yakov Olkhovskiy)。- CSV/TSV 形式のファイルの先頭から指定した行数をスキップできるようにするため、2 つの新しい設定
input_format_csv_skip_first_lines/input_format_tsv_skip_first_linesを追加しました。 #37537 (Kruglov Pavel)。 showCertificate関数は現在のサーバーの SSL 証明書を表示します。 #37540 (Yakov Olkhovskiy)。- Named Collections 内の Data Dictionaries で HTTP ソースがサポートされるようになりました。 #37581 (Yakov Olkhovskiy).
- 新しいウィンドウ関数
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND])を追加しました。 #37628(Andrey Zvonov)。 ReplicatedMergeTreeテーブルに対するコメント変更機能を実装しました。 #37416 (Vasily Nemkov)。- 対応するテーブルの削除有無にかかわらずバックアップ全体を削除するための
SYSTEM UNFREEZEクエリを追加しました。 #36424 (Vadim Volodin).
実験的機能
WINDOW VIEWに対してPOPULATEを有効にします。#36945 (vxider).WINDOW VIEWに対するALTER TABLE ... MODIFY QUERYをサポートします。#37188 (vxider).- この PR により、
WINDOW VIEWにおけるENGINE構文の挙動が変更され、MATERIALIZED VIEWと同様になります。#37214 (vxider).
パフォーマンスの向上
- ARM NEON 向けの多数の最適化を追加しました #38093 (Daniel Kutenin), (Alexandra Pilipyuk)。注意:ARM CPU を搭載したクラスター上で異なるバージョンの ClickHouse を実行しており、256 ビットには収まるが 64 ビットには収まらない固定サイズ型の複数キーで GROUP BY を行う分散クエリを使用している場合、アップグレード中に集約クエリの結果が誤ったものになります。回避策:ローリングアップグレードではなく、ダウンタイムを伴うアップグレードを実施してください。
- Native、Protobuf、CapnProto、JSONEachRow、TSKV、および WithNames/WithNamesAndTypes というサフィックスを持つすべてのフォーマットについて、カラムのサブセットのみを選択する場合のパフォーマンスとメモリ使用量を改善しました。これらのフォーマットのファイルから一部のカラムのみを選択しても、これまではすべてのカラムが読み込まれ、メモリに保持されていましたが、現在は必要なカラムのみが読み込まれます。この PR により、デフォルトで
input_format_skip_unknown_fieldsが設定されるようになりました。そうしない場合、一部のカラムのみを選択すると例外がスローされてしまうためです。 #37192 (Kruglov Pavel). - JOIN に対して、さらに多くのフィルタをプッシュダウンできるようになりました。 #37472 (Amos Bird)。
- ワイドパーツを読み取る際には、必要なカラムのマークだけをロードするよう最適化しました。 #36879 (Anton Kozlov).
MergeTreeテーブルで実験的設定ratio_of_defaults_for_sparse_serializationを有効化することで使用可能な疎なカラムを、集約関数の引数として使用している場合の集約処理性能を改善しました。#37617 (Anton Popov)。- 2 つの引数を取る
COALESCE関数を最適化。 #37666 (Anton Popov). multiIfに条件が 1 つしかない場合は、より高いパフォーマンスを持つif関数に置き換えます。 #37695 (Anton Popov).dictGetDescendants、dictGetChildren関数のパフォーマンスを向上しました。クエリ実行中に、関数呼び出しごとではなくクエリごとに一時的な親から子への階層インデックスを作成するよう変更しました。HIERARHICAL属性に対してBIDIRECTIONALを指定できるようにし、辞書がメモリ上に親から子へのインデックスを保持することで、dictGetDescendants、dictGetChildren関数がクエリごとに一時インデックスを作成しないようにしました。#32481 をクローズ。#37148(Maksim Kita)。- 集約状態の破棄処理をスレッドプール上で実行できるようになりました。
LIMITを含み、大きな集約状態を扱うクエリでは大きな高速化が得られます。例えばselect uniq(number) from numbers_mt(1e7) group by number limit 100はおよそ 2.5 倍高速になりました。 #37855 (Nikita Taranov). - 単一列でのソート性能を改善。 #37195 (Maksim Kita).
- ソートキューの特殊化により、単一列でのソートのパフォーマンスを向上。 #37990 (Maksim Kita).
- 配列ノルムおよび距離関数のパフォーマンスを 2~4 倍向上させました。 #37394 (Alexander Gololobov).
- 動的ディスパッチを用いて数値比較関数の性能を向上しました。 #37399 (Maksim Kita).
- LIMIT 使用時の ORDER BY のパフォーマンスを改善しました。 #37481 (Maksim Kita).
hasAll関数のパフォーマンスを動的ディスパッチ基盤を用いて改善しました。 #37484 (Maksim Kita).greatCircleAngle、greatCircleDistance、geoDistance関数のパフォーマンスを改善しました。 #37524 (Maksim Kita).- ORDER BY に複数のカラムがある場合の MergeTree への挿入時のパフォーマンスを改善。 #35762 (Maksim Kita).
- テーブルが多数ある場合のバックグラウンドでの過剰な CPU 使用を修正。 #38028 (Maksim Kita).
- 動的ディスパッチを使用して
not関数のパフォーマンスを向上。#38058 (Maksim Kita). - LIKE 関数や MATCH 関数で使用される re2 パターンの内部キャッシュを最適化しました。 #37544 (Robert Schulze)。
- フィルタビットマスク生成関数を AVX-512 命令によるオールインワン実装に改善しました。 #37588 (yaqi-zhao).
- Hive integration engine に read メソッド
threadpoolを適用しました。これにより読み取りが大幅に高速化されます。 #36328 (李扬). - 読み取る列がすべてパーティションキーである場合、Hive ファイルを実際に読み込むことなく、ファイル内の行番号に基づいて列を構築するようにしました。 #37103 (lgbo).
- 複数ディスクでの Hive ファイルキャッシュをサポート。 #37279 (lgbo).
- クエリごとのキャッシュ最大使用量を制限することで、キャッシュプールの汚染を効果的に防止できます。関連 Issue。#37859(Han Shukai)。
- 現在、ClickHouse はすべてのリモートファイルをローカルキャッシュに直接ダウンロードします(1 回しか読み込まれない場合でも同様です)。その結果、ローカルハードディスクへの I/O が頻発します。いくつかのシナリオでは、これらの I/O は必ずしも必要ではなく、かえって性能を悪化させる「最適化」になってしまう可能性があります。以下の図に示すように、SSB Q1〜Q4 を実行した場合、キャッシュによってかえって性能が劣化しています。#37516(Han Shukai)。
- S3 から読み込む際に、
_fileや_pathなどの仮想カラムを使ってファイルのリストを絞り込めるようにしました。これは #37174、#23494 に対応するものです。#37356(Amos Bird)。 - 関数 CompressedWriteBuffer::nextImpl() において、データ挿入時に頻繁に発生する不要な write-copy 処理があります。以下にこのパッチ適用前後の違いを示します。- 変更前: 1. 「working_buffer」を「compressed_buffer」に圧縮する 2. 「out」に write-copy する - 変更後: 「working_buffer」を直接「out」に圧縮する。#37242(jasperzhu)。
改善
- ROLLUP、CUBE、GROUPING SETS で、非標準のデフォルト値を持つ型をサポート。 #37360 をクローズ。 #37667(Dmitry Novik)。
- ARM 上でのスタックトレース収集の問題を修正。Closes #37044。Closes #15638。#37797 (Maksim Kita)。
- クライアントは、接続に成功するまで DNS 解決で得られたすべての IP アドレスに対して接続を試みます。 #37273 (Yakov Olkhovskiy).
- Arrow/Parquet/ORC フォーマットで Binary 型ではなく String 型を使用できるようにします。この PR では、そのための新しい設定
output_format_arrow_string_as_string、output_format_parquet_string_as_string、output_format_orc_string_as_stringを 3 つ導入しています。すべての設定のデフォルト値はfalseです。 #37327 (Kruglov Pavel)。 - グロブ内のすべてのファイルから読み取られる行を合計した全体に対して、設定
input_format_max_rows_to_read_for_schema_inferenceを適用するようにしました。以前は、設定input_format_max_rows_to_read_for_schema_inferenceはグロブ内の各ファイルごとに個別に適用されており、null が非常に多い場合には、各ファイルから最初のinput_format_max_rows_to_read_for_schema_inference行を読み込んでもスキーマを推測できない可能性がありました。また、この設定のデフォルト値を 25000 に引き上げました。 #37332 (Kruglov Pavel). - 個別の
CLUSTER権限(および後方互換性のためのaccess_control_improvements.on_cluster_queries_require_cluster_grant設定ディレクティブ、デフォルトはfalse)を追加しました。#35767(Azat Khuzhin)。 hdfsCluster向けにスキーマ推論のサポートを追加しました。 #35812 (Nikita Mikhaylov).- ボリューム内のディスク(マルチディスク構成)向けに
least_usedロードバランシングアルゴリズムを実装しました。 #36686 (Azat Khuzhin). send_progress_in_http_headers=0のときに(それ以前はすべて 0 を返していた)X-ClickHouse-Summaryヘッダーで完全な統計情報を返すように HTTP エンドポイントを変更。- 進行状況がすでに送信されている場合(send_progress_in_http_headers=1)にX-ClickHouse-Exception-Codeヘッダーを返すように HTTP エンドポイントを変更。-TIMEOUT_EXCEEDEDエラー時にHTTP_INTERNAL_SERVER_ERROR(500) ではなくHTTP_REQUEST_TIMEOUT(408) を返すように HTTP エンドポイントを変更。#36884 (Raúl Marín)。- ユーザーがロール経由で付与された権限を確認できるようにしました。 #36941 (nvartolomei).
- 積分を数値的に計算するのではなく、CDF 関数を使用します。これにより実行速度が向上し、精度も高くなります。これによって #36714 が修正されました。#36953(Nikita Mikhaylov)。
- 関数に
Nothing型のデフォルト実装を追加しました。これにより、引数のいずれかがNothingの場合、ほとんどの関数は型Nothingのカラムを返すようになりました。これは、引数として空配列を受け取るarrayMap/arrayFilterなどの関数で発生していた問題も解決します。以前はselect arrayMap(x -> 2 * x, []);のようなクエリは、ラムダ内の関数が型Nothingを扱えないために失敗していましたが、現在はこのようなクエリは型Array(Nothing)の空配列を返します。さらに、arrayFilter/arrayFillなどの関数で Nullable 型の配列もサポートしました。以前はselect arrayFilter(x -> x % 2, [1, NULL])のようなクエリは失敗していましたが、現在は動作します(ラムダの結果がNULLの場合、その値は結果に含まれません)。#37000 をクローズしました。#37048(Kruglov Pavel)。 - 現在、シャードにローカルレプリカがある場合は、ローカル読み取り用のプランと、すべてのリモートレプリカから読み取るプランの2つを作成します。両方のプランは同じイニシエータを共有しており、そのイニシエータが読み取りを調整します。#37204 (Nikita Mikhaylov)。
- 設定オプション「mark_cache_size」が明示的に設定されていないことを理由にサーバーの起動を中止しないようにしました。 #37326 (Robert Schulze)。
- カラム定義で、型名の直後に
NULL/NOT NULLを指定できるようになりました。 #37337 (Igor Nikonov). - ファイルセグメント PARTIALLY_DOWNLOADED の read buffer の取得を最適化。 #37338 (xiedeyantu).
- ストレステストで発生していた問題を修正するため、短絡評価関数の処理を改善しました。 #37384 (Kruglov Pavel).
- #37395 をクローズします。#37415(Memo)。
- ゼロコピー レプリケーションにおけるパート フェッチ中に極めてまれに発生するデッドロックを修正し、#37423 を解決。#37424(metahys)。
- 不明なデータ形式を使用するストレージは作成できないようにしました。 #37450 (Kruglov Pavel).
global_memory_usage_overcommit_max_wait_microsecondsのデフォルト値を 5 秒に設定しました。OOM 例外メッセージにOvercommitTrackerに関する情報を追加しました。MemoryOvercommitWaitTimeMicrosecondsプロファイルイベントを追加しました。#37460(Dmitry Novik)。- clickhouse-client で
-0.0の CPU 時間を表示しないようにしました。これは丸め誤差により発生することがあります。これにより #38003 がクローズされます。これにより #38038 がクローズされます。 #38064(Alexey Milovidov)。 - Play UI:ページを水平方向にスクロールしてもコントロールがその場に固定されるようになりました。これにより、テーブルが横に長く、右方向へ大きくスクロールしている場合でも快適に編集できます。この機能は CaspianDB の Maksym Tereshchenko によって提案されました。 #37470 (Alexey Milovidov)。
- play.html の query div を、高さ 20% を超えて拡張できるように変更しました。非常に長いクエリの場合、textarea 要素を拡張できると便利ですが、これまでは div の高さが固定のため、textarea を拡張すると下にある data div が隠れてしまっていました。この修正により、textarea 要素を拡張した際に data div が上下に押し出され、拡張された textarea に隠れないようになります。また、ユーザーが query textarea のサイズを調整しても、クエリボックスの幅が常に 100% のままになるようにしています。 #37488 (guyco87).
- 書き込まれた(挿入またはマージされた)パーツの種類を把握できるようにするための
ProfileEvents(Inserted{Wide/Compact/InMemory}Parts、MergedInto{Wide/Compact/InMemory}Parts)を追加しました。system.part_logに列part_typeを追加しました。#37495 を解決しました。#37536(Anton Popov)。 - clickhouse-keeper の改善: 破損したログをタイムスタンプ付きフォルダに移動します。 #37565 (Antonio Andelic).
- 以降のマージでは、TTL により期限切れになった列を書き込まないようにしました(以前は、そのパーツに対する最初の merge/optimize のみが TTL で期限切れになった列を書き込まず、それ以外のマージでは書き込んでいました)。 #37570 (Azat Khuzhin).
- LowCardinality または Sparse カラムが存在する場合の
dumpColumnStructure種々の関数の結果が、より正確になりました。以前のバージョンでは、これらの関数は結果を返す前に引数をフルカラムへ変換していました。この変更は #6935 への回答として必要なものでした。#37633(Alexey Milovidov)。 - clickhouse-keeper: watch 用に一意のセッション ID のみを保存。 #37641 (Azat Khuzhin).
- 発生し得る「Cannot write to finalized buffer」エラーを修正。 #37645 (Azat Khuzhin).
DiskS3向けに設定support_batch_deleteを追加し、Google Cloud Storage がサポートしていない複数オブジェクト削除の呼び出しを無効化できるようにしました。 #37659 (Fred Wulff).- ODBC ブリッジで接続プーリングを無効にするオプションを追加しました。 #37705 (Anton Kozlov).
- 関数
dictGetHierarchy、dictIsIn、dictGetChildren、dictGetDescendantsが、辞書内の NULL を許容するHIERARCHICAL属性をサポートするようになりました。これにより、#35521 がクローズされました。#37805(Maksim Kita)。 system.build_optionsテーブルで BoringSSL のバージョンに関する情報を公開しました。 #37850 (Bharat Nallan).- clickhouse-server はサーバー起動時に
delete_tmpディレクトリを削除するようになりました。これにより #26503 が修正されました。 #37906(alesapin)。 - タイムアウト後に壊れた detached パーツをクリーンアップします。#25195 をクローズします。 #37975 (Kseniia Sumarokova).
- 現在では、MergeTree テーブルエンジンファミリーでは、移動に失敗したパーツは即座に削除されるようになりました。 #37994 (alesapin)。
always_fetch_merged_part設定が ReplicatedMergeTree に対して有効になっている場合、マージ時に他のレプリカ上のパーツを探す頻度が低くなり、[Zoo]Keeper への負荷も軽減されます。 #37995 (alesapin).- GRANT OPTION 付きの暗黙的な権限付与も追加しました。たとえば
GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTIONにより、AはGRANT CREATE VIEW ON test.* TO Bを実行できるようになりました。#38017 (Vitaly Baranov)。
ビルド/テスト/パッケージングの改善
- ビルドに
clang-14と LLVM インフラストラクチャバージョン 14 を使用します。これにより #34681 がクローズされます。#34754(Alexey Milovidov)。注意:clang-14には ThreadSanitizer のバグがあり、CI の動作に悪影響があります。 - 起動時に権限をドロップできるようにしました。これにより Docker イメージが簡素化されます。#36293 をクローズします。#36341(Alexey Milovidov)。
- CI にドキュメントのスペルチェックを追加しました。#37790(Vladimir C)。
- 実行ファイルの整合性チェックに必要な埋め込みハッシュまで削除してしまっていた、過度にアグレッシブな strip 処理を修正しました。#37993(Robert Schulze)。
バグ修正
- 定数文字列型を扱う
SELECT ... INTERSECTおよびEXCEPT SELECTステートメントを修正しました。 #37738 (Antonio Andelic). GROUP BYでAggregateFunctionを使用した場合の動作を修正 (つまり、AggregateFunction型の列をGROUP BYに含めた場合)。 #37093 (Azat Khuzhin).- (experimental WINDOW VIEW) WindowView 内の
addDependencyを修正。バグは #37237 と同様に再現できます。 #37224 (vxider). - ORDER BY ... WITH FILL 機能の一貫性のない動作を修正しました。複数の WITH FILL 列が存在する場合、ORDER BY ... WITH FILL を含むクエリで余分な行が生成されることがありました。#38074 (Yakov Olkhovskiy).
- このPRでは、ドロップされたテーブルに依存関係が追加されることを避けるために、
addDependencyをコンストラクタからstartup()へ移動し、#37237 を修正します。#37243(vxider)。 - カラム形式での欠損値に対するデフォルト値の挿入を修正。これまでは欠損しているカラムに対して、カラム固有のデフォルト値ではなく、型のデフォルト値が埋められていました。 #37253 (Kruglov Pavel).
- (experimental Object type)
Object型カラムへのネストした配列の挿入に関するいくつかのケースを修正しました。 #37305 (Anton Popov). - 集約関数、prewhere、join における定数文字列の競合によって発生する予期しないエラーを修正しました。#36891 をクローズ。#37336(Vladimir C)。
- クエリ内の GROUP/ORDER BY を含むプロジェクションと optimize_aggregation_in_order を修正(以前は最終ソートのみが実行されていたため、結果が正しくありませんでした)。 #37342 (Azat Khuzhin).
- S3 のキー名に含まれる記号が原因のエラーを修正。#33009 を解決。#37344(Vladimir Chebotarev)。
- GROUPING SETS を ROLLUP または CUBE と併用した場合に例外をスローするようにしました。 #37367 (Dmitry Novik).
config.xml(新しい方法)でbackground_pool_size/background_merges_mutations_concurrency_ratioに標準外のより大きな値が指定され、users.xml(非推奨の方法)では指定されていない場合に、マージ処理中の getMaxSourcePartsSizeForMerge 内で発生する LOGICAL_ERROR を修正。#37413 (Azat Khuzhin).- RowBinary フォーマットで UTF-8 の BOM を削除しないようにしました。#37428 (Paul Loyd). #37428 (Paul Loyd).
- clickhouse-keeper のバグ修正: シングルノードクラスタにおける強制リカバリ処理を修正。 #37440 (Antonio Andelic).
- normalizeUTF8 関数の論理的な不具合を修正。#37298 をクローズ。#37443(Maksim Kita)。
- JoinSwitcher における Nullable の LowCardinality 型のキャスト処理を修正し、#37385 をクローズ。#37453(Vladimir C)。
- ORC/Arrow/Parquet フォーマットにおける named tuple の出力を修正しました。 #37458 (Kruglov Pavel).
- GROUPING SETS 使用時の ORDER BY 句における単調関数の最適化を修正。 #37401 を修正。 #37493 (Dmitry Novik)。
- 特定の条件で辞書との JOIN 時に発生していたエラーを修正しました。#37386 をクローズしました。#37530 (Vladimir C)。
GROUPING SETS使用時にはoptimize_aggregation_in_orderを禁止(LOGICAL_ERRORを修正)。#37542(Azat Khuzhin)。- ActionsDAG の誤っていたダンプ情報を修正しました。 #37587 (zhanglistar).
- UNION クエリにおける型変換処理を修正(LOGICAL_ERROR を引き起こす場合がありました)。 #37593 (Azat Khuzhin).
STEP句で負の間隔を使用した場合のWITH FILL修飾子を修正。#37514 を解決。#37600(Anton Popov)。join_use_nulls = 1の場合の joinGet 配列の不正な使用を修正。これにより #37562 を解決します。 #37650 (Amos Bird).- クロス結合での列数不一致を修正し、#37561 をクローズ。#37653(Vladimir C)。
- named collections を使用するよう構成された MySQL データベースで
show create tableを実行した際に発生するセグメンテーションフォルトを修正します。#37683 をクローズします。#37690(Kseniia Sumarokova)。 SETTINGS句を指定せずにストレージを作成した場合に、サーバー再起動時に RabbitMQ Storage が起動できない問題を修正しました。#37463 をクローズしました。 #37691(Kseniia Sumarokova)。- SQL のユーザー定義関数で、read-only モード時の CREATE/DROP を無効化しました。これにより #37280 がクローズされました。#37699 (Maksim Kita).
- 実行可能なユーザー定義関数における Nullable 引数のフォーマットを修正しました。#35897 をクローズしました。#37711 (Maksim Kita).
- 分散クエリで
optimize_monotonous_functions_in_order_byを有効にした際の最適化を修正しました。 #36037 を修正。 #37724(Anton Popov)。 valuesテーブル関数で発生する可能性のある論理エラーInvalid Field get from type UInt64 to type Float64を修正しました。#37602 をクローズします。#37754(Kruglov Pavel)。SchemaReaderコンストラクタ内で例外が発生した場合に、スキーマ推論でセグメンテーションフォルトが発生する可能性があった問題を修正。#37680 をクローズ。#37760(Kruglov Pavel)。- 内部 cast 関数用の設定
cast_ipv4_ipv6_default_on_conversion_errorを修正。 #35156 をクローズ。 #37761 (Maksim Kita)。 - DataTypeDate32 の toString で発生するエラーを修正。 #37775 (LiuNeng).
- clickhouse-keeper の設定項目
dead_session_check_period_msがマイクロ秒(1000 倍)に変換されてしまい、その結果、デッドセッションのクリーンアップが(500ms ではなく)数分後にしか行われない状態になっていました。 #37824 (Michael Lex)。 async_socket_for_remote/use_hedged_requestsが無効な場合に、分散クエリで発生しうる "No more packets are available" エラーを修正。 #37826 (Azat Khuzhin).- (実験的 WINDOW VIEW)WindowView で
ALTER TABLE ... MODIFY QUERYを実行しても、内部のターゲットテーブルを削除しないようにしました。 #37879 (vxider)。 - clickhouse-keeper の Docker イメージ内にある coordination ディレクトリの所有権設定を修正。#37914 を解決。#37915(James Maidment)。
- ディクショナリで、
updateフィールドと{condition}を使用するカスタムクエリを修正しました。 #33746 をクローズします。 #37947(Maksim Kita)。 ORDER BYがWITH FILLの結果に対して後から適用される場合(例: 外側クエリ)に、SELECT ... WITH FILLの結果が誤る可能性がある問題を修正しました。誤った結果は、ORDER BY式に対する最適化が原因でした(#35623)。#37904 をクローズしました。#37959(Yakov Olkhovskiy)。- (実験的機能 WINDOW VIEW)WindowView でターゲットテーブルに挿入する際に不足していたデフォルト列を追加し、#37815 を修正しました。#37965(vxider)。
- コンパイルエラーの原因となっていた過大なスタックフレームを修正しました。 #37996 (Han Shukai)。
- enable_filesystem_query_cache_limit を有効化したときに、"Reserved cache size exceeds the remaining cache size." というエラーをスローするようにしました。 #38004 (xiedeyantu)。
- UNION クエリにおける型変換処理を修正しました(LOGICAL_ERROR が発生する場合がありました)。 #34775 (Azat Khuzhin).
- BackgroundExecutor がビジーな場合、TTL マージが再度スケジュールされないことがあります。 --merges_with_ttl_counter は selectPartsToMerge() 内でインクリメントされます --BackgroundExecutor がビジーな場合、マージタスクは無視されます --merges_with_ttl_counter はデクリメントされません。 #36387 (lthaooo).
normalize_function_namesの設定値が上書きされる問題を修正。 #36937 (李扬).- 指数的時間減衰ウィンドウ関数の不具合を修正。ウィンドウ境界を正しく考慮するようになりました。 #36944 (Vladimir Chebotarev).
- system.projection_parts および system.projection_parts_columns の読み込み時に発生し得る heap-use-after-free エラーを修正しました。これにより #37184 が解決されました。#37185(Amos Bird)。
- Unix エポックより前における
DateTime64の小数点以下の秒の動作を修正しました。 #37697 (Andrey Zvonov). #37039 (李扬).
ClickHouse リリース 22.5, 2022-05-19
アップグレードに関する注意事項
- 今後は、バックグラウンドでのマージ、ミューテーションおよび
OPTIMIZEによってはSelectedRowsおよびSelectedBytesメトリクスは増加しません。これらは(これまでどおり)MergedRowsおよびMergedUncompressedBytesを増加させます。この変更はメトリクスの値にのみ影響し、より適切な値になります。この変更による非互換性はありませんが、メトリクスの変化について疑問に思うかもしれないため、このカテゴリに記載しています。 #37040 (Nikolai Kochetov)。 - BoringSSL モジュールを公式の FIPS 準拠バージョンに更新しました。これにより ClickHouse は FIPS 準拠となります。 #35914 (Meena-Renganathan)。暗号スイート
aes-192-cfb128とaes-256-cfb128は、FIPS 認定版 BoringSSL に含まれていないため削除されました。 users.xmlのデフォルトユーザープロファイルからmax_memory_usage設定を削除しました。これにより、従来の固定 10 GB 制限ではなく、クエリごとに柔軟なメモリ制限を設定できるようになります。- デフォルトで
log_query_threads設定を無効化しました。これは、クエリ実行に参加する各スレッドの統計のログ出力を制御します。非同期読み取りをサポートした後、固有のスレッド ID の総数が多くなりすぎ、query_thread_logへのログ出力が重すぎるものになっていました。 #37077 (Alexey Milovidov)。 - バグのある関数
groupArraySortedを削除しました。 #36822 (Alexey Milovidov)。
新機能
- デフォルトでメモリのオーバーコミットを有効にしました。 #35921 (Dmitry Novik)。
- GROUP BY 句で GROUPING SETS をサポートしました。この実装では GROUPING SETS の並列処理をサポートします。 #33631 (Dmitry Novik)。
system.certificatesテーブルを追加しました。 #37142 (Yakov Olkhovskiy)。h3Line、h3Distance、h3HexRing関数を追加しました。 #37030 (Bharat Nallan)。- 新しい単一バイナリの診断ツール (clickhouse-diagnostics) を追加しました。 #36705 (Dale McDiarmid)。
- 出力フォーマットとして
Prometheusを追加しました #36051。 #36206 (Vladimir C)。 MySQLDump入力フォーマットを追加しました。ダンプ内で 1 つのテーブルに属する INSERT クエリから、すべてのデータを読み取ります。複数のテーブルがある場合、デフォルトでは最初のテーブルからデータを読み取ります。 #36667 (Kruglov Pavel)。- 一時テーブルに対しても、
system.tablesにtotal_rowsおよびtotal_bytesフィールドを表示するようにしました。 #36401。 #36439 (xiedeyantu)。 - クエリレベルの設定で
parts_to_delay_insertとparts_to_throw_insertを上書きできるようにしました。これらが定義されている場合、テーブルレベルの設定より優先されます。 #36371 (Memo)。
実験的機能
- 配列に対する L1、L2、Linf、Cosine 距離関数、および配列に対する L1、L2、Linf ノルム関数を実装しました。 #37033 (qieqieplus)。注意: これらの関数は名称が変更される予定です。
- WindowView における
WATCHクエリを改善しました。1.fire_conditionシグナルを呼び出すことで、クエリ結果の提供までのレイテンシを削減しました。2.isCancelled()をより高頻度にチェックすることで、クエリのキャンセル操作(Ctrl+C)をより高速化しました。 #37226 (vxider)。 - ファイルシステムキャッシュ削除用のイントロスペクション機能を追加しました。 #36802 (Han Shukai)。
- SQL 向けに新しいハッシュ関数
wyHash64を追加しました。 #36467 (olevino)。 - レプリケーテッドデータベースの改善:
SYSTEM SYNC DATABASE REPLICAクエリを追加しました。これにより、現在は非同期で行われている Replicated データベース内部のテーブルメタデータの同期を明示的に実行できます。 #35944 (Nikita Mikhaylov)。 - リモートファイルシステムキャッシュの改善: キャッシュからの読み取りをより効率化しました。 #37054 (Kseniia Sumarokova)。
SYSTEM DROP FILESYSTEM CACHEクエリを改善しました:<path>オプションおよびFORCEオプションを追加しました。 #36639 (Kseniia Sumarokova)。 - 半構造化データの改善: 型
Object(...)のカラムをObject(Nullable(...))にキャストできるようにしました。 #36564 (awakeljw)。 - 並列レプリカの改善: localhost レプリカ上でクエリを実行したい場合にはローカルインタプリタを作成しますが、複数レプリカ上でクエリを実行する場合には、レプリカがコーディネータと通信できるよう接続が存在することに依存していました。これを改善し、localhost レプリカが同一プロセス内でコーディネータと直接通信できるようになりました。 #36281 (Nikita Mikhaylov)。
パフォーマンスの改善
- GROUP BY 式を使用しない場合の
avg、sum集約関数のパフォーマンスを改善。#37257 (Maksim Kita). - 単項算術関数(
bitCount、bitNot、abs、intExp2、intExp10、negate、roundAge、roundDuration、roundToExp2、sign)のパフォーマンスを、動的ディスパッチを用いて改善。#37289 (Maksim Kita). - ORDER BY、MergeJoin、MergeTree への挿入処理において、ソート列コンパレータの JIT コンパイルを用いてパフォーマンスを改善。#34469 (Maksim Kita).
system.asynchronous_metric_logの構造を変更。必要なスペースをおよそ 10 分の 1 に削減します。これにより #36357 がクローズされます。フィールドevent_time_microsecondsは不要なため削除されました。#36360 (Alexey Milovidov).- ワイドパーツを読み込む際、必要な列に対してのみマークをロードするように変更。#36879 (Anton Kozlov).
- ミューテックスのスコープを狭めることで、ファイルディスクリプタキャッシュのパフォーマンスを改善。#36682 (Anton Kozlov).
- パスにグロブを含み、かつ一致したディレクトリに大量のファイルが存在する場合に、ストレージ
Fileおよびテーブル関数fileからの読み取りパフォーマンスを改善。#36647 (Anton Popov). - 入力フォーマット
HiveTextに対して並列パースを適用し、ローカルファイル読み取り時の HiveText パースを最大 2 倍高速化。#36650 (李扬). - デフォルトの
HashJoinは右テーブル行の挿入に関してスレッドセーフではないため、単一スレッドで実行されます。右テーブルが大きい場合、CPU 使用率が低く、結合処理が非常に遅くなります。#36415 (lgbo). select countDistinct(a) from tをselect count(1) from (select a from t groupBy a)に書き換えられるようにする。#35993 (zhanglistar).- OR で連結された LIKE 条件のチェーンを multiMatchAny に変換します。動作に十分な確証が得られた段階で有効化します。#34932 (Daniel Kutenin).
- いくつかの関数について、インライン化によりパフォーマンスを改善。#34544 (Daniel Kutenin).
- 関数
readBigで不要な memcpy を回避する分岐を追加。これにより、ある程度パフォーマンスが向上します。#36095 (jasperzhu). - optimize_aggregation_in_order 用に部分的な GROUP BY キーを実装。#35111 (Azat Khuzhin).
改善
- テーブル関数
file、s3、urlを実行中にパースエラーが発生した場合に、エラーが発生したファイル名を表示するようにしました。 #36314 (Anton Popov). - トップレベルの設定で指定されている場合、実行時にバックグラウンド操作(マージ、ミューテーション、移動およびフェッチ)を実行するスレッド数を増やせるようになりました。 #36425 (Nikita Mikhaylov).
- 1970-01-01 00:00:00 より前の時刻を、時間・分に小数を含むタイムゾーンで生成する日時変換関数は、オーバーフローするのではなく、ゼロに飽和するようになりました。これは https://github.com/ClickHouse/ClickHouse/pull/29953 の続きであり、https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280 に対応するものです。これは実装依存の動作(かつ非常にまれなケース)であり、その互換性を変更しても問題ないため、改善としてマークします。 #36656 (Amos Bird)。
- ログレベル "test" で clickhouse-server を実行している場合に警告を追加しました。ログレベル "test" は最近追加されたものであり、避けることのできない致命的なレベルの深刻なパフォーマンス低下を引き起こすため、本番環境では使用しないでください。#36824 (Alexey Milovidov)。
- CREATE TABLE ステートメントで照合順序をパースし、例外をスローするか無視するようにした。 #35892 をクローズしました。 #36271 (yuuch)。
- オプション
compatibility_ignore_auto_increment_in_create_tableを使用すると、MySQL からの移行を簡素化するために、カラム定義内のAUTO_INCREMENTキーワードを無視できます。 #37178 (Igor Nikonov)。 JSONEachRowにJSONLinesおよびNDJSONのエイリアスを追加。#36303 をクローズ。#36327(flynn)。- 各 Hive テーブルごとにクエリ可能なパーティション数の上限を設け、リソースの過剰消費を回避しました。 #37281 (lgbo).
- 利便性を向上させるため、
h3kRing関数の第 2 引数に対する暗黙の型変換を追加しました。#35432 をクローズ。 #37189 (Maksim Kita)。 - 任意のクエリに対する
clickhouse-localでのINSERT SELECTの進行状況表示と、クライアントでのファイル進行状況表示を修正し、ファイル進行状況の表示をより正確にしました。 #37075 (Kseniia Sumarokova). - パーツ削除中にファイルシステム障害が発生した場合、MergeTree テーブルエンジンファミリーで古いパーツが削除されずに残ってしまう可能性があるバグを修正しました。修正前は、それらのパーツは最初のサーバー再起動時にのみ削除されていました。 #37014 (alesapin)。
- メイン設定で有効化できる行ポリシー処理の新しいモードを実装し、permissive な行ポリシーを持たないユーザーでも行を読み取れるようにしました。 #36997 (Vitaly Baranov).
- Play UI:Nullable 数値はテーブルセル内で右揃えで表示されるようになりました。これにより #36982 がクローズされました。#36988(Alexey Milovidov)。
- Play UI: 結果が1行のみで、かつ列数がある程度多い場合は、結果を縦方向に表示するようにしました。#36811 の継続作業です。#36842(Alexey Milovidov)。
- Play UI の CSS をクリーンアップしました。ピクセル配置をより均一にしました。テーブルセル内に長いコンテンツがある場合の使い勝手を改善しました。 #36569 (Alexey Milovidov).
- 例外発生時に書き込みバッファを確定させ、デストラクタ内では行わないようにしました。これにより次の問題が修正されることを期待しています: #36907。#36979(Kruglov Pavel)。
- #36425 以降、
background_fetches_pool_sizeのような設定は廃止され、トップレベルの config に記述される場合がありますが、ClickHouse はError updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml.のような例外をスローしていました。これは修正されました。#36917(Nikita Mikhaylov)。 - 例外を別のサーバーに送信する際、可能な場合は追加の診断情報も含めるようにしました。 #36872 (tavplubix).
- ハッシュ関数の引数として
Array(Tuple(..))型を使用できるようにしました。 #36812 (Anton Popov). user_defined_path設定を追加しました。 #36753 (Maksim Kita).s3Clusterテーブル関数で cluster マクロの使用を許可。#36726(Vadim Volodin)。clickhouse-client/clickhouse-localにおいて INSERT クエリを正しくキャンセルできるようにしました。 #36710 (Azat Khuzhin).MySQLHandlerで有効なクエリ ID を維持しつつ、クエリをキャンセルできるようにしました。 #36699 (Amos Bird).system.processesにis_all_data_sentカラムを追加し、それに基づいて内部テストにおける堅牢性チェックを改善。 #36649 (Azat Khuzhin).- S3 からの読み取りに要した時間のメトリクスが正しく計算されるようになりました。#35483 をクローズ。#36572(Alexey Milovidov)。
clickhouse-localで実行されている場合、テーブル関数fileでファイルディスクリプタの使用を許可しました。 #36562 (wuxiaobai24).- 数字で始まるタプル要素の名前を許可します。 #36544 (Anton Popov).
- clickhouse-benchmark は環境変数から認証情報を読み取れるようになりました。#36497 (Anton Kozlov).
clickhouse-keeperの改善: クォーラムなしでクラスターを再構成できる force recovery 機能のサポートを追加しました。 #36258 (Antonio Andelic).- JSON オブジェクトに対するスキーマ推論を改善。 #36207 (Kruglov Pavel).
- グロブによるスキーマ推論周辺のコードをリファクタリング。妥当な場合にのみグロブから次のファイルを試すように変更(以前はどのようなエラーでも次のファイルを試していた)。また、#36317 を修正。#36205(Kruglov Pavel)。
- 個別の
CLUSTER権限(および後方互換性のためのaccess_control_improvements.on_cluster_queries_require_cluster_grant設定ディレクティブ、デフォルトはfalse)を追加しました。 #35767 (Azat Khuzhin). - 選択されたクエリが停止する前に必要量のメモリが利用可能になった場合、待機中のすべてのクエリは実行を継続します。現在では、選択されたクエリがキャンセルを認識するより前にメモリが解放された場合は、どのクエリも停止されません。 #35637 (Dmitry Novik)。
- protobuf における Nullable の検出。proto3 では、デフォルト値はワイヤフォーマット上には送信されません。このため、Nullable 列において null とデフォルト値を区別することは容易ではありません。この問題に対処する一般的な方法は、Google wrappers を使用して対象の値を内側のメッセージの中にネストすることです(https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto を参照)。この場合、フィールドが存在しない場合は null 値として解釈され、値が設定されていないフィールドはデフォルト値として解釈され、通常の値を持つフィールドは通常の値として解釈されます。しかし、ClickHouse は Google wrappers をネストしたカラムとして解釈します。そこで、Google wrappers を検出し、上記の説明どおりに解釈するための特別な振る舞いを導入することを提案します。例えば、Nullable カラム
testの値をシリアライズするには、.proto スキーマ内でgoogle.protobuf.StringValue testを使用します。これらの型は、Protobuf におけるいわゆる「well-known types」であり、ライブラリ自体で実装されていることに注意してください。#35149(Jakub Kuklis)。 - 事前定義および静的な HTTP ハンドラー設定で
content_typeを指定できるようになりました。 #34916 (Roman Nikonov). --externalを先行して指定せずにclickhouse-client --fileを使用した場合に、適切に警告するようにしました。#34747 をクローズしました。#34765(李扬)。- MySQL データベースエンジンを改良し、binary(0) データ型に対応しました。 #37232 (zzsmdfj).
- clickhouse-benchmark の JSON レポート出力を改善しました。 #36473 (Tian Xinhui).
- 外部 ClickHouse 辞書のホスト名を解決できない場合に、サーバーが起動できないことがありました。修正しました。#36451。#36463(tavplubix)。
ビルド/テスト/パッケージングの改善
x86_64アーキテクチャ向けのclickhouse-keeperは、musl により静的リンクされ、システムライブラリに依存しなくなりました。 #31833 (Alexey Milovidov).PowerPC64LEアーキテクチャ向けの ClickHouse ビルドが、汎用インストールスクリプトcurl https://clickhouse.com/ | shおよびダイレクトリンクhttps://builds.clickhouse.com/master/powerpc64le/clickhouseから利用可能になりました。 #37095 (Alexey Milovidov).- 互換性向上のため、PowerPC のコード生成を Power8 までに制限しました。これにより #36025 が解決されます。 #36529 (Alexey Milovidov).
- パフォーマンステストを簡素化しました。これにより、実際に活用しやすくなりました。 #36769 (Alexey Milovidov).
- レポート内にエラーがある場合、パフォーマンス比較を失敗させるようにしました。 #34797 (Mikhail f. Shiryaev).
- Arrow に ZSTD サポートを追加しました。これにより #35283 が修正されます。 #35486 (Sean Lafferty).
バグ修正
- URI に
Version IDが存在する場合は抽出し、AWS HTTP URI 向けのリクエストに反映します。#31221 をクローズします。- [x] 存在する場合、URI からVersion IDを抽出し、それを除いて再構成する。- [x] リクエストを用いてAWS HTTP URIオブジェクトを構成する。- [x] ユニットテスト:gtest_s3_uri- [x] インストルメンテーション用コミットを削除。#34571 (Saad Ur Rahman)。 - system.opentelemetry_span_log の attribute.values のエイリアスを keys ではなく values に修正。#37275 (Aleksandr Razumov).
- Nullable(String) から Nullable(Bool/IPv4/IPv6) への変換処理を修正。#37221 をクローズ。#37270(Kruglov Pavel)。
- 実験的機能:
Object型のカラムを含むテーブルにおけるミューテーションの実行を修正しました。UPDATEまたはDELETEクエリのWHERE句でObject型のサブカラムを使用することや、個々のサブカラムを操作する(DROP、MODIFY)ことは、まだ許可されていません。#37205 の問題を修正。#37266(Anton Popov)。 - Kafka ではプロデューサー側で
group.idを設定する必要はありません。コンソールログには、この問題を説明する次の Warning が出力されます:2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance。#37228(Mark Andreev)。 - 実験的機能 (WindowView): まだ発火していないデータが削除される可能性に備えて、実際にブロックが発火した後で
max_fired_watermarkを更新するようにしました。 #37225 (vxider). - LIMIT BY を含む分散クエリで発生する "Cannot create column of type Set" エラーを修正。#37193(Azat Khuzhin)。
- 実験的機能:WindowView の
WATCH EVENTSクエリが、WindowViewSource.h:58で作成される空でない Chunk によって終了されることはなくなりました。 #37182 (vxider). - サブクエリに対して
enable_global_with_statementを有効化し、#37141 をクローズ。#37166(Vladimir C)。 - optimize_skip_unused_shards_rewrite_in の暗黙的な型変換を修正。 #37153 (Azat Khuzhin).
- FixedString 列に対する ILIKE 関数が、誤った結果(本来よりも少ない件数しか一致しない)を返す可能性がありました。 #37117 (Robert Schulze).
AggregateFunction型を持つ列でGROUP BYする場合の挙動を修正。 #37093 (Azat Khuzhin)。- 実験的機能: プレフィックス GROUP BY および *Array 集約関数に対する
optimize_aggregation_in_orderの問題を修正。 #37050 (Azat Khuzhin). - 暗黙的な集約を伴う一部の INSERT SELECT クエリで発生していたパフォーマンス低下の問題を修正しました。#36792 を解決。#37047(tavplubix)。
- 実験的機能:
*Array(groupArrayArray/...)集計関数使用時の順序付きGROUP BY(optimize_aggregation_in_order=1)の修正。 #37046 (Azat Khuzhin). - インデックスの型が UInt8 以外の場合に LowCardinality->ArrowDictionary が不正な出力を生成する問題を修正。#36832 をクローズ。#37043(Kruglov Pavel)。
quantileTDigestにおける無限大 (inf) の問題を修正しました。 #32107 を修正します。 #37021(Vladimir Chebotarev)。- HedgedConnections で max_parallel_replicas != 1 の場合の外部テーブルデータ送信を修正。 #36981 (Kruglov Pavel).
ReplicatedデータベースにおけるTRUNCATEクエリの論理エラーを修正。#33747 を解決。#36976(tavplubix)。- 実験的機能: WindowView でソーステーブルをドロップするとハングする問題を修正。#35678 をクローズ。#36967(vxider)。
- 実験的機能(rocksdb cache):不具合を修正: #36671。#36929(李扬)。
- 実験的機能:WindowView で複数のカラムを使用する際のバグを修正するため、若干異なるスキーマでも
writeIntoWindowViewを呼び出せるようにする変換アクションを追加。#36928(vxider)。 - 低負荷時や再起動時に圧縮ログファイルが破損する可能性のある clickhouse-keeper のバグを修正します。 #36910 (alesapin).
- 定数集約を行うクエリで誤った結果が返される問題を修正しました。これにより #36728 が修正されました。 #36888(Amos Bird)。
- 実験的機能: キャッシュの
current_sizeカウントを修正。#36887(Kseniia Sumarokova)。 - Experimental feature: hop window を用いた window view における発火動作を修正。 #34044. #36861 (vxider).
- 実験的機能: リモートファイルシステム上のキャッシュバッファにおける誤ったキャストを修正。 #36809 (Kseniia Sumarokova).
flatten_nested = 0を指定したテーブル作成処理を修正しました。以前は、サーバー再起動後にフラット化されていないNestedカラムがフラット化されてしまう可能性がありました。#36803(Anton Popov)。- LowCardinality 型を読み込む際に発生していた、リモートファイルシステムからの非同期読み取りに関するいくつかの問題を修正しました。 #36763 (Kseniia Sumarokova).
- 実験的機能: 複数ファイル(グロブを用いたテーブル関数
fileなど)からObject型カラムへの挿入を修正。 #36762 (Anton Popov). - Hedged リクエストにおけるタイムアウトを修正。リモートクエリ送信直後のコネクションハングにより、無期限に待ち続けてしまう可能性がありました。 #36749 (Kruglov Pavel).
- 実験的機能: 分散テーブル上の
groupBitmapAndState/groupBitmapOrState/groupBitmapXorStateのバグを修正。 #36739 (Zhang Yifan). - 実験的機能: PR 内のテスト中に、あるキャッシュクラスが 2 回初期化されていることを発見し、その結果として例外がスローされました。この問題の原因はまだ明確ではありませんが、ClickHouse 内でディスクを繰り返しロードするコード上のロジックが存在しているはずなので、この状況に対しては特別な判定処理を行う必要があります。 #36737 (Han Shukai).
- 幅の広いパーツでの縦方向マージを修正しました。これまで、マージ中に例外
There is no columnがスローされることがありました。 #36707 (Anton Popov). - ポート変更時のサーバーリロードの挙動を修正(クエリコンテキストの既存接続を待たないように変更)。 #36700 (Azat Khuzhin).
- 実験的機能: 以前の PR で、テスト(stateless tests、flaky check(address, actions))がタイムアウトすることを確認しました。さらに、ローカルでテストを実行した場合にも、システムデッドロックが断続的に発生することがあります。この問題は、master の最新のソースコードを使用しても依然として解消されていません。#36697(Han Shukai)。
- 実験的機能: キャッシュ設定が変更された場合のサーバー再起動を修正。 #36685 (Kseniia Sumarokova).
- スキーマ推論で発生する可能性のある heap-use-after-free を修正しました。Closes #36661. #36679 (Kruglov Pavel).
- エンジンが指定されていない場合の
CREATEクエリにおけるクエリ設定の解析を修正しました。この修正により、次の問題が解決されます: https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419。 #36642 (tavplubix)。 - 実験的な機能: 型
Objectを持つワイドパーツのマージを修正。 #36637 (Anton Popov). - EPHEMERAL の後にリテラルではなくデフォルト式が続く場合に発生する format のクラッシュを修正。#36618 をクローズ。#36633(flynn)。
ENGINE = MergeTreeテーブルでINTERPOLATEを使用しているときに発生する可能性のあったMissing column例外を修正。 #36549 (Yakov Olkhovskiy).WHERE句中のリテラルが原因となる結合クエリの潜在的なエラーを修正。#36279 をクローズ。#36542(Vladimir C)。- 未定義動作を引き起こす可能性があった ReadBufferFromEncryptedFile におけるオフセット更新の問題を修正しました。 #36493 (Kseniia Sumarokova).
- Keeper クラスター構成向けのホスト名サニティチェックを修正しました。これらのチェックを有効/無効にするための設定
keeper_server.host_checks_enabledを追加しました。#36492 (Antonio Andelic)。 - GROUP BY での実行可能なユーザー定義関数の使用方法を修正しました。これ以前は、実行可能なユーザー定義関数を GROUP BY 句の式として使用することはできませんでした。#36448 をクローズしました。#36486(Maksim Kita)。
- クライアント側でサーバーからの不明なパケットにより発生する可能性のある例外を修正。 #36481 (Kseniia Sumarokova).
- 実験的機能(
system.session_logは決して使用しないでください。削除予定です):system.session_log テーブルに不足していた enum 値を追加。#36474 をクローズ。#36480(Memo)。 - s3Cluster のスキーマ推論におけるバグを修正しました。このバグが原因で、s3Cluster からの SELECT クエリで全てのデータが読み取られない問題が発生していました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35544 で導入されました。 #36434 (Kruglov Pavel)。
- JOIN および COLUMNS マッチャーにおける nullptr のデリファレンスを修正します。これにより #36416 が解決されます。これは https://github.com/ClickHouse/ClickHouse/pull/36417 向けの変更です。#36430(Amos Bird)。
ClickHouseDictionarySourceにスカラーサブクエリが含まれている場合の辞書のリロード処理を修正しました。 #36390 (lthaooo).- JOIN でのアサーションを修正し、#36199 をクローズ。#36201 (Vladimir C)。
- 特殊な演算子内でエイリアスを含むクエリはパースエラーになっていました(22.1 では動作していませんでした)。例:
SELECT substring('test' AS t, 1, 1)。 #36167(Maksim Kita)。 - 実験的機能: 入れ子の配列を含む複雑な JSON を
Object型のカラムへの挿入を修正しました。 #36077 (Anton Popov). - コンパクトパーツを持つネストされたカラムに対する ALTER DROP COLUMN(例:カラム
n.dが存在する場合のALTER TABLE x DROP COLUMN n)の問題を修正。 #35797 (Azat Khuzhin). - substring 関数で、
offsetとlengthが負の定数でsが非定数の場合に発生する範囲エラーの長さを修正。 #33861 (RogerYK).
ClickHouse リリース 22.4, 2022-04-19
後方互換性のない変更
- INSERT クエリでは FORMAT の後に SETTINGS を指定できなくなりました(そのようなクエリを許可するための互換性設定
allow_settings_after_format_in_insertが用意されていますが、デフォルトでは OFF です)。 #35883 (Azat Khuzhin)。 - 関数
yandexConsistentHash(Konstantin "kostik" Oblakov によるコンシステントハッシュアルゴリズム)はkostikConsistentHashに名前が変更されました。互換性のために古い名前はエイリアスとして残されています。この変更自体は後方互換性がありますが、今後のリリースでこのエイリアスを削除する可能性があります。そのため、アプリケーション内でこの関数の使用箇所を更新することを推奨します。 #35553 (Alexey Milovidov)。
新機能
- ORDER BY ... WITH FILL に INTERPOLATE 拡張機能を追加しました。 #34903 をクローズしました。 #35349(Yakov Olkhovskiy)。
- プロセッサーレベルでのプロファイリング(
log_processors_profiles設定を有効にすると、ClickHouse は実行中およびデータ待機中に各プロセッサーが費やした時間をsystem.processors_profile_logテーブルに書き込みます)。 #34355 (Azat Khuzhin)。 - 関数 makeDate(year, month, day)、makeDate32(year, month, day) を追加しました。 #35628 (Alexander Gololobov)。makeDateTime() および makeDateTime64() を実装しました。 #35934 (Alexander Gololobov)。
WRITTEN BYTESという新しいクォータ種別をサポートし、INSERT クエリで書き込まれるバイト数を制限できるようにしました。 #35736 (Anton Popov).flattenTuple関数を追加しました。入れ子になった名前付きTupleを引数として受け取り、要素が元のTuple内のパスとなるフラットなTupleを返します。例:Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int)。flattenTupleは、型Objectからすべてのパスをそれぞれ別個のカラムとして選択するために使用できます。#35690(Anton Popov)。arrayFirstOrNull、arrayLastOrNull関数を追加しました。 #35238 をクローズしました。 #35414(Maksim Kita)。minSampleSizeContinousとminSampleSizeConversion関数を追加しました。作者は achimbab です。#35360(Maksim Kita)。- 新しい関数 minSampleSizeContinous と minSampleSizeConversion を追加しました。#34354 (achimbab)。
- フォーマット
ProtobufListを導入(すべてのレコードを 1 つの Protobuf メッセージ内の repeated メッセージとして表現)。#16436 をクローズ。#35152(Nikolai Kochetov)。 h3PointDistM、h3PointDistKm、h3PointDistRads、h3GetRes0Indexes、h3GetPentagonIndexes関数を追加しました。 #34568 (Bharat Nallan).toLastDayOfMonth関数を追加しました。この関数は、日付または日時をその月の月末日に切り上げます。 #33501。 #34394(Habibullah Oladepo)。- [Zoo]Keeper クライアント向けの負荷分散設定を追加しました。#29617 をクローズしました。#30325(小路)。
simpleという新しい種類の行ポリシーを追加しました。この PR 以前は、行ポリシーにはpermissiveとrestrictiveの 2 種類がありました。simple行ポリシーは、permissive および restrictive ポリシーで発生していたような副作用なしに、テーブルに新しいフィルター条件を追加します。#35345 (Vitaly Baranov)。- レプリケーテッドデータベースでクラスタ用シークレットを指定できるようになりました。 #35333 (Nikita Mikhaylov).
- サーバーの起動時に、利用可能メモリやディスク空き容量、最大スレッド数などの健全性チェックを追加しました。 #34566 (Sergei Trifonov).
- INTERVAL の改善 –
[MILLI|MICRO|NANO]SECONDと併用可能になりました。toStartOf[Milli|Micro|Nano]second()関数を追加しました。[add|subtract][Milli|Micro|Nano]seconds()関数を追加しました。 #34353 (Andrey Zvonov).
実験的機能
- 単純な
MergeTreeテーブルに対するトランザクションのサポートを追加しました。この機能は非常に実験的であり、本番環境での利用は推奨されません。#22086 の一部です。#24258(tavplubix)。 - フォーマット
JSONEachRowにおける型Objectのスキーマ推論をサポートしました。型Mapのカラムを型Objectのカラムに変換できるようにしました。#35629(Anton Popov)。 - すべての書き込み操作でリモートファイルシステム(FS)キャッシュへの書き込みを許可しました。
system.remote_filesystem_cacheテーブルを追加しました。drop remote filesystem cacheクエリを追加しました。system.remote_data_pathsテーブルによる S3 メタデータのイントロスペクションを追加しました。#34021 をクローズしました。マージ処理に対して、モードread_from_filesystem_cache_if_exists_otherwise_bypass_cacheを追加することでキャッシュオプションを追加しました(マージ処理ではデフォルトで有効で、同名のクエリ設定でも有効化できます)。キャッシュ関連の設定名を変更しました(remote_fs_enable_cache -> enable_filesystem_cacheなど)。#35475(Kseniia Sumarokova)。 - パーツのメタデータを RocksDB に保存するオプションを追加しました。MergeTree のパーツ読み込み処理を高速化し、clickhouse-server の起動を高速化します。この改善により、70万個の MergeTree パーツがある構成で、clickhouse-server の起動時間を 75 分から 20 秒に短縮できました。#32928(李扬)。
パフォーマンスの改善
- 新しいクエリプランの最適化として、可能な場合は
ORDER BYの後に関数を評価します。例として、クエリSELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5では、関数sipHash64はORDER BYとLIMITの後に評価され、その結果およそ 20 倍の高速化が得られます。#35623(Nikita Taranov)。 - 集約中に使用されるハッシュテーブルのサイズを収集し、後続のクエリで利用することで、ハッシュテーブルのリサイズを回避するようにしました。#33439(Nikita Taranov)。
- SIMD 命令(SSE および AVX2)を用いた
hasAll関数の改善。#27653(youennL-cs)。#35723(Maksim Kita)。 - ASOF JOIN のパフォーマンスを改善する複数の変更(1.2 ~ 1.6 倍高速)。さらに、大きな整数型の利用をサポートしました。#34733(Raúl Marín)。
- キーがネイティブ整数の場合の ASOF JOIN のパフォーマンスを改善。#35525(Maksim Kita)。
- S3 ストレージへのマルチパートアップロードの並列化。#35343(Sergei Trifonov)。
- URL ストレージエンジンは、エンドポイントが HTTP Range をサポートしている場合に、複数チャンクを並列にダウンロードするようになりました。新たに 2 つの設定
max_download_threadsとmax_download_buffer_sizeが追加されており、単一クエリがファイルのダウンロードに使用できるスレッド数の上限と、各スレッドが処理できるバイト数の上限を制御します。#35150(Antonio Andelic)。 - S3 からオブジェクトをダウンロードする際に複数スレッドを使用します。ダウンロードは
max_download_threadsおよびmax_download_buffer_size設定で制御できます。#35571(Antonio Andelic)。 - HDFS と対話する際のミューテックスのスコープを縮小しました。#35292 に関連。#35646(shuchaome)。
- テーブル単位の TTL については、変更された場合にのみ mutation を要求するようにしました。#35953(Azat Khuzhin)。
改良
- スキーマ推論を複数の点で改良しました。CSV、TSV、および TSVRaw データフォーマットにおいて、数値、文字列、配列、タプル、マップを判別するために、いくつかの調整とヒューリスティクスを使用します。CSV フォーマット向けに、これらのヒューリスティクスの有効/無効を切り替えるための設定
input_format_csv_use_best_effort_in_schema_inferenceを追加しました。これが無効な場合、すべてを文字列として扱います。TSV/TSVRaw フォーマット向けにも同様の設定input_format_tsv_use_best_effort_in_schema_inferenceを追加しました。これらの設定はデフォルトで有効になっています。- Values フォーマットでのスキーマ推論に Maps のサポートを追加しました。- Values フォーマットのスキーマ推論で発生しうるセグメンテーションフォルトを修正しました。- Arrow/ORC/Parquet フォーマットで、サポートされていない型を持つカラムをスキップできるようにしました。そのための対応する設定input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inferenceを追加しました。これらの設定はデフォルトでは無効です。- Arrow/Parquet フォーマットで、型 Null のカラムを、すべての値が NULL の Nullable カラムに変換できるようにしました。- CSV、TSV、JSONCompactEachRow など、カラム名を含まないフォーマットに対して、設定column_names_for_schema_inferenceによってスキーマ推論時のカラム名を指定できるようにしました。- ORC/Arrow/Parquet フォーマットにおける Nullable カラムの扱いに関するスキーマ推論を修正しました。以前は、推論された型はすべて Nullable ではなく、そのためデータから Nullable カラムを読み込むことができませんでしたが、現在は修正され、推論される型は常に Nullable になりました(スキーマの読み取りだけでは、そのカラムが Nullable かどうかを判断できないため)。- CSV のエスケープルールを用いる Template フォーマットでのスキーマ推論を修正しました。#35582(Kruglov Pavel)。 - フォーマット
JSONAsObject向けに、並列パースとスキーマ推論を追加しました。 #35592 (Anton Popov). s3Clusterテーブル関数に自動スキーマ推論機能のサポートを追加しました。s3とs3Clusterのシグネチャを揃えました。 #35544 (Nikita Mikhaylov).hdfsClusterのスキーマ推論機能のサポートを追加しました。 #35602 (Nikita Mikhaylov)。- 新しい設定
input_format_json_read_bools_as_numbersを追加しました。これにより、JSON 入力フォーマットで bool 値を数値として推論および解釈できるようになります。デフォルトで有効です。@alexey-milovidov による提案です。 #35735 (Kruglov Pavel)。 - TSKV および JSONEachRow フォーマットのスキーマ推論におけるカラム順序を改善し、#35640 を解決しました。TSKV および JSONEachRow フォーマットのスキーマ推論で空行を読み取った場合でも、スキーマ推論を停止しないようにしました。#35724 (Kruglov Pavel)。
input_format_orc_case_insensitive_column_matching、input_format_arrow_case_insensitive_column_matching、およびinput_format_parquet_case_insensitive_column_matchingの設定を追加しました。これにより、ClickHouse が ORC、Arrow、または Parquet ファイルからデータを読み込む際に、カラム名の大文字・小文字を区別せずに照合できるようになります。 #35459 (Antonio Andelic).- クライアントが TCP または HTTP 経由で安全な接続を使用しているかどうかを示す
is_secure列をsystem.query_logに追加しました。 #35705 (Antonio Andelic). - これで、
kafka_num_consumersを、リソースが限られたマシン(16コア未満)の場合でも、物理コア数より大きな値に設定できるようになりました。 #35926 (alesapin)。 - engine=Kafka テーブルの監視用に基本的なメトリクスをいくつか追加しました。 #35916 (filimonov).
- MergeTree エンジンファミリーに対して、存在しない設定に対して
ALTER TABLE ... RESET SETTINGを実行することは許可されなくなりました。#35816 を修正。#35884(alesapin)。 - 一部の
ALTER MODIFY COLUMNクエリでは、ArrayおよびNullable型に対する操作をミューテーションなしでメタデータレベルで実行できるようになりました。たとえば、Array(Enum8('Option1' = 1))からArray(Enum8('Option1' = 1, 'Option2' = 2))への変更などです。#35882(alesapin)。 - クエリが実行中であることをユーザーに示すために、砂時計アイコンにアニメーションを追加しました。 #35860 (peledni).
ALTER TABLE t DETACH PARTITION (ALL)をサポートしました。 #35794 (awakeljw)。- Projection の解析を改善し、
count()のような単純なクエリを最適化しました。 #35788 (Amos Bird). inputテーブル関数を使用した INSERT SELECT でスキーマ推論をサポートしました。スキーマ推論をサポートするテーブル関数からの INSERT SELECT の場合、データから推論するのではなく、挿入先テーブルからスキーマを取得するようにしました。#35639 をクローズしました。#35760(Kruglov Pavel)。- Hive テーブルで
remote_url_allow_hostsの設定が反映されるようにしました。#35743 (李扬)。 - clickhouse-local に
send_logs_levelを実装。#35653 をクローズ。#35716(Kseniia Sumarokova)。 - #35641 をクローズし、明示的なデフォルト式なしで
EPHEMERALカラムを許可。#35706(Yakov Olkhovskiy)。 - 非同期 INSERT のサイズを示すプロファイルイベントカウンタ
AsyncInsertBytesを追加しました。 #35644 (Alexey Milovidov). - JOIN に関するパイプラインの記述を改善しました。 #35612 (何李夫).
- HDFS 設定ファイルの絶対パスを自動的に推定。 #35572 (李扬).
- clickhouse-client のペースト時のパフォーマンスと互換性を改善しました。これにより #35501 に対処しています。 #35541 (Amos Bird).
- 分散クエリにおいて、非常に深くネストしたデータ型をパースする際に、設定
async_socket_for_remoteとuse_hedged_requestsのいずれかが有効になっていると、スタックオーバーフローが発生する可能性がありました(少なくともデバッグビルドでは)。#35509 をクローズします。#35524(Kruglov Pavel)。 system.parts_columnsテーブルにサブカラムのサイズを追加しました。 #35488 (Anton Popov).- クエリプランおよびパイプラインのスキャンノードに明示的なテーブル情報を追加しました。 #35460 (何李夫)。
- サーバーが低番号ポート(例: 443)にバインドできるようにします。ClickHouse のインストールスクリプトはバイナリファイルに
cap_net_bind_serviceを設定します。#35451(Alexey Milovidov)。 INSERT INTO table FROM INFILEで進捗バーが表示されない問題を修正。 #35429 (xiedeyantu).clickhouse-diagnosticsツールに--user、--password、--host、--portの各引数を追加しました。 #35422 (李扬)。- Postgres エンジンで UUID をサポート。#35384 をクローズ。#35403(Kseniia Sumarokova)。
- テーブル関数
s3cluster、HDFSCluster、hiveに対しては、StorageFactory::instance().getSourceAccessType(getStorageTypeName())によって正しいAccessTypeを取得できていませんでした。このPRで修正されました。 #35365 (李扬) - clickhouse-client の
--testmodeオプションを削除し、常に有効になるようにしました。 #35354 (Kseniia Sumarokova)。 - clickhouse-keeper に対する
wchc操作(4文字のコマンド)を許可しないようにしました。 #35320 (zhangyuli1). - 関数
getTypeSerializationStreamsを追加しました。指定された型(列から検出される)について、その型のすべてのシリアライズ用サブストリームのパスを含む配列を返します。この関数は主に開発者向けに役立ちます。 #35290 (李扬)。 portがクラスター設定で指定されていない場合は、デフォルトのサーバーポートが使用されます。これにより、#34769 の問題が解決されます。#34772(Alexey Milovidov)。- Hive Engine で ORC/Parquet ファイルに対して
minmaxインデックスを使用。関連 PR: https://github.com/ClickHouse/arrow/pull/10。#34631(李扬)。 - システムログテーブルで ENGINE 宣言内に COMMENT を指定できるようになりました。 #33768 をクローズしました。 #34536(Maksim Kita)。
- ソートキー順での読み取りかつ
LIMITが指定されている場合に、max_rows_to_readの設定が正しくサポートされるようになりました。以前は、実際にはクエリで読み取る必要のある行数がより少ない場合でも、Limit for rows or bytes to read exceededという例外がスローされることがありました。 #33230 (Anton Popov). - cgroups からは quota と period のみを考慮し、shares は無視する(shares は実際には使用可能なコア数を制限しないため)。 #35815 (filimonov)。
ビルド/テスト/パッケージングの改善
- 機能テストにおけるランダム化設定の次の一連の項目を追加。#35047 (Kruglov Pavel).
- ストレステストに後方互換性チェックを追加。#25088 をクローズ。#27928 (Kruglov Pavel).
- パッケージビルドを
nfpmに移行 -releaseスクリプトを非推奨とし、packages/buildに置き換え - すべてを clickhouse/binary-builder イメージでビルド(クリーンアップ: clickhouse/deb-builder) - CMake にシンボルストリッピングを追加(TODO: use bin_dir/clickhouse/$binary.debug) - DWARF シンボルに関する問題を修正 - Alpine 向け APK パッケージを追加 -alienをadditional_pkgsにリネーム。#33664 (Mikhail f. Shiryaev). - Coverity 向けの夜間スキャンとアップロード処理を追加。#34895 (Boris Kuschel).
clickhouse-keeper用の専用の小さなパッケージを追加。#35308 (Mikhail f. Shiryaev).- podman での実行が失敗していた問題を修正。同じボリュームを 2 回指定していると警告されていた。#35978 (Roman Nikonov).
- contrib/krb5 のビルド設定に軽微な改善を実施。#35832 (Anton Kozlov).
- すべてのイメージに対してビルドタスクを識別するためのラベルを追加。#35583 (Mikhail f. Shiryaev).
- Python コードに
blackフォーマッタを適用し、コミットごとのチェックを追加。#35466 (Mikhail f. Shiryaev). - Alpine イメージをクリーンな Dockerfile を使うように作り直し。tests/ci に Ubuntu と Alpine の両方のイメージをビルドするスクリプトを作成。clickhouse-keeper イメージを追加(cc @nikitamikhaylov)。PullRequestCI にビルドチェックを追加。ReleaseCI にジョブを追加。MasterCI に、マージされた各 PR ごとに
clickhouse/clickhouse-server:headおよびclickhouse/clickhouse-keeper:headイメージをビルドして push するジョブを追加。#35211 (Mikhail f. Shiryaev). - CI におけるストレステストレポートを修正し、開始されたストレステストに関する情報を含む runlog を 1 回だけアップロードするように変更。#35093 (Mikhail f. Shiryaev).
- LLVM 14 の libcxx / libcxxabi へ切り替え。#34906 (Raúl Marín).
- CVE-2018-7485 を軽減するために unixODBC を更新。注: ClickHouse は ODBC 用の独自のアイソレーションレイヤーを実装しているため、この CVE は ClickHouse には該当しない。#35943 (Mikhail f. Shiryaev).
バグ修正
input_format_ipv4_default_on_conversion_errorとinput_format_ipv6_default_on_conversion_errorの設定を追加し、無効な IP アドレス値をデフォルト値としてテーブルに挿入できるようにしました。#35726 をクローズしました。 #35733(Maksim Kita)。- Hive からデータを読み込む際、存在しない列についてはブロックから削除しないようにしました。 #35393 (lgbo).
- マテリアライズドビューの作成時に型チェックを追加。クローズ: #23684。#24896(hexiaoting)。
- INSERT INFILE クエリのフォーマットを修正(欠落していた引用符を追加)。#35886(Azat Khuzhin)。
session_logを無効化しました。ファジングによりメモリ安全性に関する問題が検出されたためです。#35714 を参照してください。#35873(Alexey Milovidov)。- カラム単位の TTL を複数回処理しないようにしました。 #35820 (Azat Khuzhin).
- 複数のパーティションにまたがるデータを含む挿入クエリにおける
Object型カラムへの挿入を修正しました。 #35806 (Anton Popov). -WithNamesフォーマットにおいて、入力に含まれていないカラムのインデックス処理に関するバグを修正しました。このバグにより、カラム数が 256 を超える場合にINCORRECT_NUMBER_OF_COLUMNSエラーが発生していました。#35793 をクローズ。#35803(Kruglov Pavel)。- #35751 を修正。#35799(Nikolay Degterinsky)。
- Snappy 形式データを HDFS から読み取る際の不具合を修正。 #35771 (shuchaome).
- カスタム型から文字列への変換処理で、セグメンテーションフォルトや予期しないエラーメッセージが発生する可能性のあったバグを修正しました。#35752 をクローズ。#35755(Kruglov Pavel)。
- ANY/ALL(サブクエリ)の実装を修正し、#35489 をクローズ。 #35727 (Kseniia Sumarokova).
- clickhouse-local で空でないデータベースを削除できない問題を修正。#35692 をクローズ。#35711(Kseniia Sumarokova)。
- サーバー再起動後にサブクエリを含むマテリアライズドビューを作成する際のバグを修正。サーバー再起動後、基になるテーブルへの挿入を行ってもマテリアライズドビューが更新されない問題がありました。#35511 をクローズ。#35691(Kruglov Pavel)。
- 実験的型
Objectのサブカラムを読み取る際に発生する可能性のあるCan't adjust last granule例外を修正しました。 #35687 (Anton Popov). - JIT コンパイルを用いたビルドをデフォルトで有効にしました。 #35683 (Maksim Kita).
- 実験的な
Object型において、サブカラムが失われる可能性がある問題を修正しました。 #35682 (Anton Popov). - ASOF JOIN キーの null 許容性チェックを修正し、#35565 をクローズ。#35674(Vladimir C)。
- プロジェクションを含むパーツに対するパーツ検証ロジックを修正しました。プロジェクションとメインパーツで型が異なる場合にエラーが発生していました。これは https://github.com/ClickHouse/ClickHouse/pull/33774 の問題と同様です。このバグは @caoyang10 によって修正されました。#35667(Amos Bird)。
format関数に多数の引数が渡されたときにサーバーがクラッシュする問題を修正しました。テストファイルを参照し、クラッシュの再現方法を確認してください。 #35651 (Amos Bird).- 非同期インサートにおけるクォータの扱いを修正。 #35645 (Anton Popov).
- エイリアス付き位置引数を修正。#35600 をクローズ。#35620(Kseniia Sumarokova)。
- URL エンジンでスキーマ推論を行う前に
remote_url_allow_hostsをチェックするようにしました。#35064 をクローズしました。#35619(Kruglov Pavel)。 LowCardinality型のカラムを含む場合のHashJoinの不具合を修正しました。これにより #35548 が解決されました。 #35616 (Antonio Andelic)。- MaterializedPostgreSQL で、メモリ上に収集されたデータを下位テーブルに同期しようとした際に例外が発生した場合に起こり得たセグメンテーションフォルトを修正しました。#35611 をクローズ。#35614(Kseniia Sumarokova)。
- 以前にデタッチしたテーブルがまだ使用中の場合、
ATTACH TABLEクエリに対して設定database_atomic_wait_for_drop_and_detach_synchronouslyが正しく動作していませんでしたが、修正されました。 #35594 (tavplubix). - 名前付きコレクションでの HTTP ヘッダーを修正し、compression_method を追加。 #35273 をクローズ。 #35269 をクローズ。 #35593(Kseniia Sumarokova)。
- S3 エンジンでの仮想カラムの取得を修正。Closes #35411. #35586 (Kseniia Sumarokova).
caseWithExpressionの戻り値型推論を修正しました。ELSE 句の型も正しく考慮されるようになりました。 #35576 (Antonio Andelic).- 39文字を超えるIPv6アドレスの解析を修正。#34022 をクローズ。#35539(Maksim Kita)。
- IN 句における IPv4 および IPv6 アドレスへのキャストを修正。 #35528 を修正。 #35534(Maksim Kita)。
- ショートサーキット関数の評価中に、引数の一つが Nullable な定数である場合に発生するクラッシュを修正。#35497 をクローズ。#35496 をクローズ。#35502(Maksim Kita)。
- 定数引数をとる関数
throwIfで発生していたクラッシュを修正。#35500(Maksim Kita)。 - クライアント接続が不安定になる可能性がある Keeper のバグを修正。このバグは #35031 で導入。#35498(alesapin)。
- 結果列の型が結果のデータ型と異なる場合に、
Logical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.のような論理エラーを引き起こしていた関数ifのバグを修正しました。#35367 をクローズしました。#35476(Kruglov Pavel)。 - MergeTree のバックエンドとして、または個別のテーブルエンジン/関数として S3 を使用する際の過剰なログ出力を修正。 #30559 を修正。 #35434 (alesapin).
- これにより、ゼロコピー・レプリケーション(実験的)で実行されるマージ処理によって、
Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.というメッセージがログに大量出力されることはなくなりました。 #35430 (alesapin)。 - GroupingAggregatedTransform で空のチャンクが発生した場合に、想定される例外をスキップするようにしました。 #35417 (Nikita Taranov).
- Arrow/Parquet/ORC フォーマットにおいて、クエリで不要なカラムの扱いを修正しました。これにより、ファイルにサポートされていない型のカラムが含まれていても、そのカラムをクエリで使用しない場合には、
Unsupported <format> type <type> of an input column <column_name>のようなエラーが発生することを防ぎます。 #35406 (Kruglov Pavel). - リモートファイルシステム向けローカルキャッシュ(実験的機能)のコーナーケースにおける高い同時実行時の不具合を修正。#35381(Kseniia Sumarokova)。キャッシュ内で発生しうるデッドロックを修正。#35378(Kseniia Sumarokova)。
WHERE句で定数との比較を行う場合のパーティションプルーニングを修正しました。カラムと定数の型が異なる場合にオーバーフローが発生する可能性があり、その結果クエリが誤って空の結果を返してしまうことがありました。この修正は #35304 を解決します。#35334(Amos Bird)。- 小さな
max_read_buffer_sizeを使用している場合の TSKV フォーマットのスキーマ推論を修正。 #35332 (Kruglov Pavel). - スパースカラムが有効なテーブルでのミューテーションに関する問題を修正。 #35284 (Anton Popov).
- デフォルトで最終パートの書き込みを遅延しないようにしました(
INSERT中に発生し得るMemory limit exceededの問題を修正するため、S3 への書き込み時にmax_insert_delayed_streams_for_parallel_writeをデフォルト値 1000 で追加し、それ以外の場合は従来どおり無効のままとしました)。#34780(Azat Khuzhin)。
ClickHouse リリース v22.3-lts, 2022-03-17
後方互換性のない変更
arrayCompact関数が他の高階関数と同様に動作するようにしました。ラムダ関数の結果ではなく元の配列に対して圧縮を行います。arrayCompactで複雑なラムダ関数を使用している場合は、arrayCompactの引数をarrayMapでラップすることで以前の挙動を復元できます。#34010 #18535 #14778 をクローズ。#34795(Alexandre Snarskii)。- 関数
toDatetimeのオーバーフロー時の実装依存の動作を変更しました。ラップアラウンドするのではなく、サポートされている最小/最大の日時に飽和するようになります。この変更は、古い動作に意図せず依存している可能性があるため「後方互換性のない」変更として強調されています。#32898(HaiBo Li)。 - 関数
cast(value, 'IPv4')、cast(value, 'IPv6')がtoIPv4、toIPv6関数と同じように動作するようにしました。不正な IP アドレスがtoIPv4、toIPv6関数に渡された場合の動作を変更しました。今後は無効な IP アドレスがこれらの関数に渡されると例外が送出されますが、以前はデフォルト値を返していました。IPv4StringToNumOrDefault、IPv4StringToNumOrNull、IPv6StringToNumOrDefault、IPv6StringOrNull、toIPv4OrDefault、toIPv4OrNull、toIPv6OrDefault、toIPv6OrNull関数を追加しました。以前のロジックで、無効なアドレスに対してIPv4StringToNum、toIPv4、toIPv6がデフォルト値を返すことに依存していた場合は、IPv4StringToNumOrDefault、toIPv4OrDefault、toIPv6OrDefaultを使用する必要があります。設定cast_ipv4_ipv6_default_on_conversion_errorを追加しました。この設定が有効な場合、IP アドレス変換関数は以前と同じように動作します。#22825 をクローズ。#5799 をクローズ。#35156 をクローズ。#35240(Maksim Kita)。
新機能
- リモートファイルシステムに対するローカルキャッシュのサポート。
s3ディスクで有効化できます。#28961 をクローズしました。#33717(Kseniia Sumarokova)。併せて s3 ファイルシステム上でテストスイートを有効化し、既知の問題は解消されたため、本番利用可能な状態に近づいています。 - 新しいテーブル関数
hiveを追加。次のように利用できます:hive('<hive metastore url>', '<hive database>', '<hive table name>', '<columns definition>', '<partition columns>')。例:SELECT * FROM hive('thrift://hivetest:9083', 'test', 'demo', 'id Nullable(String), score Nullable(Int32), day Nullable(String)', 'day')。#34946(lgbo)。 - SSL 経由で接続しているユーザーを、その X.509 証明書により認証する機能をサポート。#31484(eungenue)。
- テーブル関数
file/hdfs/s3/urlへの挿入時のスキーマ推論をサポート。#34732(Kruglov Pavel)。 system.zookeeperテーブルを、パスやlike式による制限なしで読み取れるようになりました。これらの読み取りは ZooKeeper にかなり大きな負荷をかける可能性があるため、この機能を利用するには設定allow_unrestricted_reads_from_keeperを有効にする必要があります。#34609(Sergei Trifonov)。- clickhouse-local で CPU とメモリのメトリクスを表示できるようにしました。#34545 をクローズしました。#34605(李扬)。
- 配列向けの
startsWithおよびendsWith関数を実装。#33982 をクローズしました。#34368(usurai)。 - Map データ型向けに 3 つの関数を追加: 1.
mapReplace(map1, map2)- map1 に存在するキーについて、対応する値を map2 の値で置き換えます。また、map1 に存在しない map2 のキーを追加します。2.mapFilter3.mapMap。mapFilter と mapMap は高階関数であり、2 つの引数を受け取ります。1 つ目の引数は引数として k, v のペアを取るラムダ関数、2 つ目の引数は Map 型のカラムです。#33698(hexiaoting)。 - clickhouse-client のデフォルトのユーザー名およびパスワードを、環境変数
CLICKHOUSE_USERとCLICKHOUSE_PASSWORDから取得できるようにしました。#34538 をクローズしました。#34947(DR)。
実験的機能
- 新しいデータ型
Object(<schema_format>)。半構造化データ(現時点では JSON のみ)の保存をサポートします。データはまず文字列としてこの型に書き込まれます。その後、半構造化データの形式に従ってすべてのパスが抽出され、それぞれの値を保持できる最適な型の個別のカラムとして書き込まれます。これらのカラムは、ソースデータ内のパスに対応する名前でクエリできます。例:data.key1.key2や、キャスト演算子を用いたdata.key1.key2::Int64。 database_replicated_allow_only_replicated_engine設定を追加。この設定が有効な場合、Replicatedデータベース内ではReplicatedテーブル、またはステートレスエンジンを持つテーブルのみ作成できます。#35214(Nikolai Kochetov)。なお、Replicatedデータベース自体はいまだ実験的機能である点に注意してください。
パフォーマンスの改善
MergeTreeテーブルへの挿入時のソート処理を最適化することで性能を改善しました。実運用に近いベンチマークでは最大 2 倍の向上が確認されています。 #34750 (Maksim Kita).- URL および S3 から Parquet、ORC、Arrow ファイルを読み取る際の列プルーニングを実装しました。 #34163 をクローズします。 #34849 (Kseniia Sumarokova).
- Hive から Parquet、ORC、Arrow ファイルを読み取る際の列プルーニングを実装しました。 #34954 (lgbo).
- パフォーマンス・スーパーヒーローによる多数のパフォーマンス最適化を行いました。大きな
IN節を含むクエリの処理性能を改善しました。ソースがClickHouseの場合のdirectディクショナリの性能を改善しました。detectCharset、detectLanguageUnknown関数の性能を改善しました。 #34888 (Maksim Kita). - より多くのバッチ処理を用いることで
any集約関数の性能を改善しました。 #34760 (Raúl Marín). clickhouse-keeperの性能を複数の点で改善しました。ロックの削減 #35010 (zhanglistar)、スナップショットをフルコピーではなくストリーミングで読み書きすることによるメモリ使用量の削減 #34584 (zhanglistar)、RAFT 実装におけるログストアのコンパクションの最適化 #34534 (zhanglistar)、内部データ構造のバージョニング対応 #34486 (zhanglistar) などです。
改善点
- テーブル関数への非同期での INSERT を許可。#34864 を修正。#34866 (Anton Popov).
- 関数
dictGetHierarchy、dictIsIn、dictGetChildren、dictGetDescendantsのキー引数に対する暗黙的な型キャストに対応。#34970 をクローズ。#35027(Maksim Kita)。 EXPLAIN ASTクエリは、Graphviz 形式のグラフとして AST を出力できます:EXPLAIN AST graph = 1 SELECT * FROM system.parts。 #35173 (李扬)。- 大きなファイルを
s3テーブル関数またはテーブルエンジンを使用して書き込んだ際、AWS SDK のバグにより、ファイルの Content-Type が誤ってapplication/xmlに設定されていました。この変更により #33964 がクローズされました。#34433(Alexey Milovidov)。 - 制限的な行ポリシーを一部変更し、簡単なケースでは許可ポリシーのより扱いやすい代替として利用しやすくしました。特定のテーブルに対して制限的ポリシーだけが存在し(許可ポリシーがない場合)、ユーザーはいくつかの行を参照できるようになります。また、
SHOW CREATE ROW POLICYは行ポリシーの定義内で常にAS permissiveまたはAS restrictiveを表示するようになります。 #34596 (Vitaly Baranov)。 - File/S3/HDFS/URL エンジンにおけるグロブパターンを用いたスキーマ推論を改善。エラーが発生した場合は、次のパスでスキーマ推論を試みるようにしました。 #34465 (Kruglov Pavel).
- Play UI は、OS の設定に従って優先されているライト/ダークテーマを正しく検出するようになりました。 #35068 (peledni).
date_time_input_format = 'best_effort_us'を追加しました。#34799 をクローズしました。 #34982(WenYao)。- サーバー設定に、新しい設定項目
allow_plaintext_passwordとallow_no_passwordが追加されました。これらは、一部の環境ではセキュリティ上問題となり得る認証タイプを有効/無効にするためのものです。デフォルトでは有効になっています。 #34738 (Heena Bansal). ArrowフォーマットにおけるDateTime64データ型のサポートを追加し、#8280 と #28574 をクローズしました。#34561(李扬)。- 設定の更新時に
remote_url_allow_hosts(外向き接続のフィルタリング)を再読み込みするようになりました。 #35294 (Nikolai Kochetov). clickhouse-localで--testmodeパラメータをサポートしました。このパラメータにより、機能テストで使用しているテストヒントを解釈できるようになります。 #35264 (Kseniia Sumarokova).- クエリログに
distributed_depthを追加しました。is_initial_queryのより詳細な版と言えるものです #35207 (李扬)。 MySQLおよびPostgreSQLのテーブル関数でremote_url_allow_hostsの設定が反映されるようにしました。 #35191 (Heena Bansal).system.part_logにdisk_nameフィールドを追加しました。 #35178 (Artyom Yurkov)。- リモート URL をクエリするときに、再試行できないエラーは再試行しないようにしました。#35161 をクローズしました。 #35172(Kseniia Sumarokova)。
- テーブル関数
view()において、分散INSERT SELECTクエリ(設定parallel_distributed_insert_select)をサポート。 #35132 (Azat Khuzhin). AggregateFunctionを使用したBufferへのINSERT操作時のメモリトラッキングがより正確になりました。 #35072 (Azat Khuzhin).- Linux カーネルにバグがある場合に、Query Profiler でゼロによる除算が発生しないようにしました。#34787 をクローズ。#35032(Alexey Milovidov)。
- keeper 設定に対する健全性チェックを強化しました。localhost と localhost 以外のサーバーを混在させることはできなくなり、さらに internal raft port と keeper client port が同じ値になっていないかをチェックするようにしました。 #35004 (alesapin)。
- 現在は、ユーザーが system テーブルの設定を変更すると、大量のログが出力され、ClickHouse が 1 分ごとにテーブルの名前を変更してしまいます。この変更により、#34929 が修正されます。#34949(Nikita Mikhaylov)。
- Hive metastore クライアントでコネクションプールを使用する。 #34940 (lgbo).
- 新しいテーブルエンジンがカラムごとの
TTLをサポートしていない場合(つまり、そのエンジンがMergeTreeファミリーに属していない場合)、CREATE TABLE ASで指定されたカラムごとのTTLを無視するようにしました。 #34938 (Azat Khuzhin). ngrambf_v1/tokenbf_v1インデックスでLowCardinality文字列を許可する。#21865 を解決。#34911(Lars Hiller Eidnes)。- ファイルが存在しなくても空の sqlite データベースを開けるようにしました。#33367 をクローズしました。 #34907(Kseniia Sumarokova)。
- FreeBSD 向けメモリ統計機能を実装しました。これは
max_server_memory_usageが正しく動作するために必要です。#34902 (Alexandre Snarskii) - 以前のバージョンでは、
clickhouse-clientのプログレスバーが、理由もなく約 50% まで突然ジャンプすることがありました。この修正により #34324 がクローズされます。#34801(Alexey Milovidov)。 columnXがALIAS列である場合、MergeTreeテーブルエンジンに対するALTER TABLE DROP COLUMN columnXクエリが即時に実行されるようになりました。#34660 を修正。#34786(alesapin)。- ユーザーがデータスキッピングインデックスの名前を誤って入力した場合に、ヒントを表示するようにしました。#29698 をクローズしました。#34764(flynn)。
parallel_distributed_insert_selectでremote()およびcluster()テーブル関数をサポートしました。 #34728 (Azat Khuzhin).- 設定ファイルでの設定が空の場合でも、コマンドラインオプション
--log-file/--errorlog-fileで指定されたロギングをリセットしないようにしました。 #34718 (Amos Bird). - テーブル作成時にのみスキーマを抽出し、サーバーの起動ごとにローカルファイルや外部ソースを読み取ってスキーマを抽出しないようにする。 #34684 (Kruglov Pavel).
- 実行可能な UDF に引数名を指定できるようにしました。これは、
NativeやJSONEachRowのように、引数名がシリアル化の一部となるフォーマットで必要となります。#34604 を解決しました。#34653(Maksim Kita)。 MaterializedMySQL(試験的機能)は、materialized_mysql_tables_list(MaterializedMySQL データベースエンジンがレプリケートする MySQL データベーステーブルのカンマ区切りリスト。デフォルト値: 空のリスト(すべてのテーブルがレプリケートされることを意味します))をサポートするようになりました。#32977 で言及されています。#34487(zzsmdfj)。- 分散テーブルに対する INSERT 操作の OpenTelemetry スパンログを改善しました。#34480(Frank Chen)。
- ClickHouse Keeper 内のサーバー間で znode の
ctimeとmtimeが一致するようにしました。 #33441 (小路)。
ビルド/テスト/パッケージングの改善
- パッケージリポジトリを JFrog Artifactory に移行しました(Mikhail f. Shiryaev)。
- 機能テスト内の一部の設定をランダム化し、より多くの設定の組み合わせがテストされるようにしました。これはテストカバレッジを向上させるための追加のファジング手法です。これにより #32268 がクローズされました。#34092(Kruglov Pavel)。
- CI から PVS-Studio を削除しました。#34680(Mikhail f. Shiryaev)。
- CMake でシンボル情報を削除した(stripped)バイナリをビルドできるようにしました。以前のバージョンでは dh-tools によって行っていました。#35196(alesapin)。
- より小さい「fat-free」な
clickhouse-keeperビルド。#35031(alesapin)。 - https://github.com/ClickHouse/ClickHouse/pull/34685 のような PR に対して、著者およびコミッターとして @robot-clickhouse を使用するようにしました。#34793(Mikhail f. Shiryaev)。
- デバッグ情報の DWARF バージョンを最大 4 に制限しました。社内のスタックシンボライザが DWARF バージョン 5 をパースできないためです。clang-15 で ClickHouse をコンパイルする場合に有用です。#34777(Alexey Milovidov)。
- 不要な複雑さとなっていた
clickhouse-testの Debian パッケージを削除しました。CI ではリポジトリ内のテストを使用しており、Debian パッケージ経由のスタンドアロンテストはもはやサポートされません。#34606(Ilya Yatsishin)。
バグ修正(公式 stable / prestable リリースにおけるユーザー影響のある不具合)
- HDFS 統合に対する修正: 内部バッファのサイズが小さすぎる場合、
HadoopSnappyDecoderの NEED_MORE_INPUT が 1 つの圧縮ブロックに対して複数回(3 回以上)実行されます。これにより、入力データがHadoopSnappyDecoder::buffer内の誤った位置にコピーされてしまいます。#35116(lgbo)。 - ATTACH GRANT ステートメントで廃止された権限を無視するようにしました。この PR は #34815 を修正します。 #34855 (Vitaly Baranov)。
- 名前付きコレクションを使用して作成されたデータベースで、
CREATE TABLEクエリを取得する際に発生する Postgres データベースのセグメンテーションフォルトを修正。#35312 をクローズ。#35313(Kseniia Sumarokova)。 - 部分マージ結合において発生していた重複行バグを修正し、#31009 をクローズ。#35311(Vladimir C)。
- 小さい値の
max_read_buffer_size設定とともに bzip2 圧縮を使用している際に発生しうるAssertion 'position() != working_buffer.end()' failedを修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35047 で発見されました。#35300(Kruglov Pavel)。小さい max_read_buffer_size 設定値で lz4 圧縮を使用している場合に発生する同様の問題を修正しました。#35296(Kruglov Pavel)。小さいmax_read_buffer_size設定値で lzma 圧縮を使用している場合に発生する同様の問題を修正しました。#35295(Kruglov Pavel)。小さいmax_read_buffer_size設定値でbrotli圧縮を使用している場合に発生する問題を修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35047 で発見されました。#35281(Kruglov Pavel)。 JSONEachRowスキーマ推論で起こりうるセグメンテーションフォルトを修正。 #35291 (Kruglov Pavel).- スパースカラムが有効なテーブルに対する
CHECK TABLEクエリを修正しました。#35274(Anton Popov)。 - リモート VFS からの読み取り中に発生した例外により std::terminate が呼び出されないようにしました。 #35257 (Azat Khuzhin).
- 設定からのポート読み取り処理を修正し、#34776 をクローズ。#35193(Vladimir C)。
HAVINGによって空の結果が返された場合に、WITH TOTALSを含むクエリで発生していたエラーを修正しました。これにより #33711 が修正されました。#35186(Amos Bird)。replaceRegexpAllのコーナーケースを修正し、#35117 をクローズしました。#35182(Vladimir C)。INSERT INTO FUNCTION s3(...) FROM ...を使用した場合、スキーマ推論が正しく動作せず、SELECTクエリからではなく S3 ファイルからスキーマを読み取ろうとしていました。 #35176 (Kruglov Pavel).- MaterializedPostgreSQL(実験的機能)の
table overridesにおける partition by などの設定の問題を修正。#35048 をクローズ。#35162(Kseniia Sumarokova)。 - MaterializedPostgreSQL(実験的機能)において、手動で DETACH TABLE を実行した後に、新しいテーブルを ATTACH TABLE してレプリケーションに追加できない問題を修正しました。#33800 をクローズ。#34922 をクローズ。#34315 をクローズ。#35158(Kseniia Sumarokova)。
IN演算子と併用された非単調関数により発生するパーティションプルーニングのエラーを修正しました。この修正により #35136 が解消されました。#35146(Amos Bird)。- YAML 設定を XML に変換する処理での軽微な誤りを修正しました。 #35135 (Miel Donkers).
- 符号付き列および負の値に対する
optimize_skip_unused_shards_rewrite_inの処理を修正。 #35134 (Azat Khuzhin). - 外部ディクショナリの設定オプション
update_lagは、「Unexpected key `update_lag` in dictionary source configuration」というエラーメッセージが表示され、使用できませんでした。#35089(Jason Chu)。 - サーバーシャットダウン時に発生し得るデッドロックを回避。 #35081 (Azat Khuzhin).
optimize_functions_to_subcolumns設定が有効な場合に、関数がサブカラムに最適化された後にエイリアスが失われる不具合を修正。 #33798 をクローズ。 #35079(qieqieplus)。- テーブル関数への非同期挿入が存在する場合における
system.asynchronous_insertsテーブルからの読み取りを修正。 #35050 (Anton Popov). - リモート VFS 上での操作に関連して発生し得た例外
Reading for MergeTree family tables must be done with last position boundaryを修正しました。 #34979 をクローズしました。 #35001(Kseniia Sumarokova)。 - -State 型の集約関数をウィンドウフレーム内で使用した際に発生する予期しない結果を修正。 #34999 (metahys).
- FileLog(実験的機能)で発生する可能性のあるセグメンテーションフォールトを修正。#30749 をクローズ。#34996(Kseniia Sumarokova)。
- まれに発生する可能性のあるエラー
Cannot push block to port which already has dataを修正しました。 #34993 (Nikolai Kochetov). - CSV 内の引用符で囲まれていない日付に対する誤ったスキーマ推論を修正。 #34768 をクローズ。 #34961 (Kruglov Pavel).
- Hive との統合: Hive クエリの
whereでinを使用した場合に予期しない結果が返される問題を修正。 #34945 (lgbo). - 削除対象のチェンジログファイルを検索する際の ClickHouse Keeper のビジーポーリングを回避しました。 #34931 (Azat Khuzhin).
- PostgreSQL からの DateTime64 変換を修正しました。#33364 をクローズしました。#34910(Kseniia Sumarokova)。
- VFS 経由で S3 をバックエンドとする MergeTree テーブルへの
INSERT実行時に発生する可能性があった "Part directory doesn't exist" エラーを修正しました。 #34876 (Azat Khuzhin). CREATE USERなどの DDL を cross replicated cluster 上で実行できるようにしました。 #34860 (Jianmei Zhang).WindowView(実験的機能)で複数列を対象とした GROUP BY のバグを修正。 #34859 (vxider).- クエリに const 列が含まれている場合に S2 関数で失敗が発生する可能性のある問題を修正。 #34745 (Bharat Nallan)。
- クエリが失敗する原因となっていた、定数カラムを含む H3 関数に関するバグを修正。 #34743 (Bharat Nallan).
fsync_part_directoryを有効にし、vertical merge を使用している場合に発生するNo such file or directoryエラーを修正。 #34739 (Azat Khuzhin).ON CLUSTERで使用する場合のシステムクエリRELOAD MODEL、RELOAD FUNCTION、RESTART DISKのシリアル化/出力処理を修正。#34514 をクローズ。#34696(Maksim Kita)。allow_experimental_projection_optimizationをenable_global_with_statementと併せて修正しました(以前はWITH句に複数の式がある場合にStack size too largeエラーが発生する可能性があり、またスカラサブクエリが何度も実行されていましたが、この修正により動作がより最適化されます)。 #34650 (Azat Khuzhin).ReplatedMergeTreeエンジンに対して、他のレプリカがすでにトランザクションログを更新している場合には、mutate 対象パーツの選択を停止するようにしました。 #34633 (Jianmei Zhang).- パーツ移動機能が使用されている場合に、単純な COUNT クエリが誤った結果を返す問題を修正しました #34089。#34385 (nvartolomei)。
- 分散サブクエリにおける
max_query_size制限の不整合を修正。#34078(Chao Ma)。
ClickHouse リリース v22.2, 2022-02-17
アップグレードに関する注意事項
- FINAL を含むクエリに対してデータスキップインデックスを適用すると、誤った結果になる可能性があります。本リリースでは、FINAL を含むクエリに対してはデータスキップインデックスをデフォルトで無効化しました(新しい設定
use_skip_indexes_if_finalが導入されており、デフォルトでは無効になっています)。#34243 (Azat Khuzhin)。
新機能
- Projection は本番利用が可能になりました。
allow_experimental_projection_optimizationをデフォルトで有効化し、この設定を非推奨とします。 #34456 (Nikolai Kochetov)。 File/S3/HDFSエンジンで、挿入時に新しいファイルを作成するためのオプションを追加。HDFSではファイルの上書きを許可する。デフォルトでは、S3のファイルを上書きしようとした場合は例外をスローする。末尾にサフィックスを持つ形式(そのため追記をサポートしないParquetやORCなど)でファイルにデータを追記しようとした場合も、例外をスローする。#31640 をクローズ。#31622 をクローズ。#23862 をクローズ。#15022 をクローズ。#16674 をクローズ。#33302(Kruglov Pavel)。MergeTree/ReplicatedMergeTreeにおいて、ユーザーが独自の重複排除セマンティクスを指定できる設定を追加しました。指定された場合、ブロック ID を生成する際にデータダイジェストの代わりにその値が使用されます。たとえば、各 INSERT 文でこの設定に一意の値を指定することで、同じデータを挿入しても重複排除されないようにできます。これにより次の issue が解決されました: #7461。#32304(Igor Nikonov)。- INSERT 文での
DEFAULTキーワードのサポートを追加しました。#6331 をクローズします。#33141(Andrii Buriachevskyi)。 EPHEMERALカラム指定子をCREATE TABLEクエリで使用可能にしました。#9436 をクローズしました。#34424(yakov-olkhovskiy)。TTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'機能でIF EXISTS句をサポートしました。パーツは、レプリカ上に対象のディスクまたはボリュームが存在する場合にのみ、そのディスクまたはボリュームへ移動されるため、MOVE TTLルールは既存のストレージポリシーに応じてレプリカごとに異なる動作を行えるようになります。#34455 を解決します。#34504(Anton Popov)。- デフォルトのテーブルエンジンを設定し、
ENGINEを指定せずにテーブルを作成できるようにしました。 #34187 (Ilya Yatsishin). - テーブル関数
format(format_name, data)を追加しました。 #34125 (Kruglov Pavel). clickhouse-localにおいて、標準入力で渡された場合でもファイル名に基づいてフォーマットを検出できるようにしました。 #33829 (Kruglov Pavel).valuesテーブル関数にスキーマ推論を追加。#33811 をクローズ。#34017(Kruglov Pavel)。- 設定のリロード時にサーバーの TLS 証明書を動的に再読み込みできるようにしました。 #15764 をクローズしました。 #15765(johnskopis)。 #31257(Filatenkov Artur)。
- ReplicatedMergeTree は、一部のディスクが破損した場合でもデータを復旧できるようになりました。 #13544 (Amos Bird)。
- clickhouse-client におけるフォールトトレラントな接続への対応:
clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4。 #34490 (Kruglov Pavel). #33824 (Filippov Denis). - MySQL 互換性のために
DEGREES関数とRADIANS関数を追加しました。 #33769 (Bharat Nallan)。 h3ToCenterChild関数を追加。 #33313 (Bharat Nallan)。 h3 用の新しい各種関数を追加:edgeLengthKm、exactEdgeLengthKm、exactEdgeLengthM、exactEdgeLengthRads、numHexagons。 #33621 (Bharat Nallan)。- String/FixedString 型からビット部分列を抽出するための関数
bitSliceを追加。#33360 (RogerYK)。 meanZTest集約関数を実装しました。 #33354 (achimbab)。- T検定集約関数に信頼区間を追加。 #33260 (achimbab).
- 関数
addressToLineWithInlinesを追加し、#26211 をクローズ。 #33467(SuperDJY)。 #!と#を 1 行コメントの開始として認識されるようにしました。#34138 をクローズしました。#34230(Aaron Katz)。
実験的機能
- テキスト分類用の関数。言語および文字セットの検出をサポート。#23271 を参照。#33314(Nikolay Degterinsky)。
MemoryTrackerにメモリオーバーコミットを追加。ソフトなメモリ上限を表すメモリ制限用のguaranteed設定を追加。ハードメモリ上限に到達した場合、MemoryTrackerは最もオーバーコミットしているクエリをキャンセルしようとする。新しい設定memory_usage_overcommit_max_wait_microsecondsは、クエリが別のクエリの停止をどの程度の時間待機できるかを指定する。#28375 をクローズ。#31182(Dmitry Novik)。- WindowView でストリームとテーブルの JOIN を有効化。#33729(vxider)。
MaterializedMySQL(実験的機能)でSET、YEAR、TIMEおよびGEOMETRYデータ型をサポート。#18091、#21536、#26361 を修正。#33429(zzsmdfj)。projectionがデフォルトで有効な場合のさまざまな問題を修正。各問題は個別のコミットで説明されている。#33678 に対応するもの。これにより #34273 が修正される。#34305(Amos Bird)。
パフォーマンスの改善
- ソートキーの先頭部分がすでに並び替え済みである場合に
optimize_read_in_orderをサポートするようにしました。例えば、テーブルにORDER BY (a, b)というソートキーがあり、クエリでWHERE a = const ORDER BY bという句を使用している場合、完全なソートを行う代わりに、ソートキーの順序で読み出すことで対応するようになります。 #32748 (Anton Popov). - パーティション分割挿入を行うテーブル関数
URL、S3、File、HDFSのパフォーマンスを改善しました。#34348 をクローズ。#34510(Maksim Kita)。 - clickhouse-keeper のパフォーマンスを複数点で改善。 #34484 #34587 (zhanglistar).
FlatDictionaryが辞書データのロード性能を改善。 #33871 (Maksim Kita).mapPopulateSeries関数のパフォーマンスを改善します。 #33944 をクローズします。 #34318(Maksim Kita)。- ファイルライクなテーブルエンジンにおける仮想カラム
_fileと_pathがLowCardinalityに変更されました ― これにより、複数ファイルに対するクエリが高速になります。#34300 をクローズします。#34317(flynn)。 - データパーツの読み込みを高速化しました。以前は並列化されておらず、設定
part_loading_threadsは有効になっていませんでした。#4699 を参照してください。#34310(alexey-milovidov)。 LineAsStringフォーマットのパフォーマンスを改善しました。これにより、#34303 がクローズされます。#34306(alexey-milovidov)。quantilesExact{Low,High}を、sortの代わりにnth_elementを使用するように最適化しました。 #34287 (Danila Kutenin)。Regexpフォーマットのパフォーマンスをわずかに向上させました。 #34202 (alexey-milovidov).- スカラーサブクエリの解析を一部改善しました。 #34128 (Federico Rodriguez)。
- ORDER BY 句でのタプルを、ORDER BY 句での個別列とほぼ同じくらい高速にします。複数列の ORDER BY 向けには特別な最適化があります:https://github.com/ClickHouse/ClickHouse/pull/10831。これをタプル列にも適用すると有益です。#34060(Amos Bird)。
- マテリアライズドビューの実行時に使用するスカラーサブクエリキャッシュを再設計し、再導入しました。 #33958 (Raúl Marín).
memcmpSmall関数に x86-64 AVX-512 サポートを追加してメモリ比較を高速化することで、ORDER BYの処理性能をわずかに向上させました。これは ClickHouse を自前でコンパイルした場合にのみ有効です。 #33706 (hanqf-git).- キーごとの区間が多数存在する場合の
range_hashed辞書のパフォーマンスを改善しました。 #23821 を修正。 #33516(Maksim Kita)。 - S3 に対して insert および merge を行う場合、可能な限り並列でファイルを書き込みます (TODO: マージ済みか確認する)。 #33291 (Nikolai Kochetov).
clickhouse-keeperのパフォーマンスを改善し、NuRaft ライブラリ内の複数のメモリリークを修正しました。 #33329 (alesapin)。
改善
- インラインデータを含むクエリで、
clickhouse-clientによる非同期インサートをサポートしました。 #34267 (Anton Popov). - 関数
dictGetとdictHasは、辞書のキー構造と異なるキー引数が渡された場合、そのキー引数を辞書のキー構造に暗黙的にキャストします。 #33672 (Maksim Kita)。 range_hashed辞書の改善。複数の attribute がある場合の読み込み時間のパフォーマンスを向上。attribute なしで辞書を作成できるようにした。区間のstartとendがNullable型の場合の戦略を指定するオプションを追加。convert_null_range_bound_to_openのデフォルトはtrue。#29791 をクローズ。範囲型としてFloat,Decimal,DateTime64,Int128,Int256,UInt128,UInt256を指定できるようにした。RangeHashedDictionaryにInt64型を超える範囲値のサポートを追加。#28322 をクローズ。範囲ルックアップの種類を指定するオプションrange_lookup_strategyを追加。min,maxを指定可能で、デフォルトはmin。#21647 をクローズ。割り当て済みバイト数の計算を修正。ComplexKeyHashedDictionaryの場合のsystem.dictionariesにおける型名を修正。#33927 (Maksim Kita)。flat、hashed、hashed_arrayの各ディクショナリで、属性を空のまま作成することがサポートされ、キーの読み取りおよびdictHasの使用にも対応しました。 #33820 を修正しました。 #33918(Maksim Kita)。- 辞書に
DateTime64データ型のサポートを追加しました。 #33914 (Maksim Kita). S3(url, access_key_id, secret_access_key)と、認証情報を明示的に指定して書き込めるようにしました(データフォーマットとテーブル構造は自動検出されます)。 #34503 (Kruglov Pavel).- #34362 で提案されたように、HTTP プロトコルの場合と同様に、出力フォーマットをクライアントへ返す機能を追加しました。#34362 をクローズします。 #34499 (Vitaly Baranov).
- INSERT SELECT クエリの場合にも ProfileEvents の統計を送信し、この種類のクエリについても
clickhouse-clientにクエリメトリクスを表示できるようにしました。 #34498 (Dmitry Novik). - JSONEachRow フォーマットとして
.jsonl拡張子を認識するようにしました。 #34496 (Kruglov Pavel). - clickhouse-local におけるスキーマ推論を改善しました。
clickhouse-local -q "select * from table" < data.formatと書くだけで実行できるようになりました。 #34495 (Kruglov Pavel). CREATE/ALTER/DROP ROW POLICYの権限は、グローバルな*.*に加えて、テーブル単位またはdatabase.*単位でも付与できるようになりました。 #34489 (Vitaly Baranov).s3への任意のサイズのファイルのエクスポートを可能にしました。2 つの新しい設定s3_upload_part_size_multiply_factorとs3_upload_part_size_multiply_parts_count_thresholdを追加しました。今後は、単一のクエリから S3 に対してアップロードされたパート数がs3_upload_part_size_multiply_parts_count_thresholdに達するたびに、s3_min_upload_part_sizeがs3_upload_part_size_multiply_factor倍されます。#34244 を修正しました。 #34422(alesapin)。- URL ストレージ / テーブル関数の使用時に、グロブ指定された URL について、見つからない (404) URL をスキップできるようにしました。あわせて #34359 もクローズしました。 #34392 (Kseniia Sumarokova)。
clickhouse-localのデフォルト入力および出力フォーマットであり、--input-format と --output-format で上書き可能です。 #30631 をクローズ。 #34352(李扬)。clickhouse-formatにmax_query_sizeおよびmax_parser_depthオプションを追加しました。これにより #30528 をクローズしました。#34349(李扬)。- クライアント起動前の入力処理を改善。#34308 への対応です。#34336(Amos Bird)。
- PostgreSQL 互換のために
REGEXP_MATCHESおよびREGEXP_REPLACE関数のエイリアスを追加。#30885 をクローズ。#34334(李扬)。 - 一部のサーバーは、HTTP リクエストに User-Agent ヘッダーが含まれていることを前提としています。HTTP リクエストに、次の形式の
User-Agentヘッダーを追加しました: User-Agent: ClickHouse/VERSION_STRING。 #34330 (Saad Ur Rahman)。 - 一部のケースで
DEADLOCK_AVOIDEDエラーが発生するのを回避するため、TRUNCATEクエリでテーブルロックを取得する前にマージをキャンセルするようにしました。 #34302 を修正。 #34304 (tavplubix)。 - ログ内の "Cancelled merging parts" メッセージはエラーではないため、その重大度を変更しました。これにより #34148 がクローズされました。 #34232 (alexey-milovidov)。
- PostgreSQL 形式のキャスト演算子
::を、[]および.演算子(配列およびタプルのインデックス指定)を使用する式と組み合わせて使用できるようにしました。 #34229 (Nikolay Degterinsky). parseDateTimeBestEffort関数でYYYYMMDD-hhmmss形式を認識するようになりました。これにより #34206 がクローズされます。 #34208 (alexey-milovidov).Regexpフォーマットでのパース時に、行の途中に含まれる改行(キャリッジリターン)を許可しました。これにより #34200 が解決されました。#34205 (alexey-milovidov).- ディクショナリの
PRIMARY KEYをPRIMARY KEY (id, value)としてパースできるようにしました。以前はPRIMARY KEY id, valueのみがサポートされていました。#34135 をクローズしました。#34141(Maksim Kita)。 splitByCharの結果の要素数を制限するオプション引数を追加。#34081 をクローズ。#34140(李扬)。- clickhouse-client の複数行編集時の使い勝手を改善します。これは #31123 のフォローアップです。#34114(Amos Bird)。
MsgPackの入出力フォーマットにUUIDのサポートを追加。#34065 (Kruglov Pavel).- OpenTelemetry 用のトレーシングコンテキストは、gRPC クライアントのメタデータから伝播されるようになりました(この変更は gRPC クライアント-サーバープロトコルに関係します)。 #34064 (andremarianiello)。
ON CLUSTER句を伴うあらゆる種類のSYSTEMクエリをサポートするようになりました。 #34005 (小路)。max_untracker_memory未満のメモリしか使用していないクエリのメモリ使用量の算出を改善しました。 #34001 (Azat Khuzhin).- 小文字と大文字の文字が異なるバイト数で表現される場合の、UTF-8 文字列に対する大文字小文字を区別しない検索の問題を修正しました。例としては
ẞとßがあります。これにより #7334 がクローズされました。#33992(Harry Lee)。 clickhouse-localで標準入力(stdin)からフォーマットとスキーマを自動検出できるようにしました。#33960 (Kruglov Pavel)- 複数のディスクがファイルシステム上で同じパスを使用している誤った設定の場合でも正しく処理できるようにしました。 #29072。 #33905 (zhongyuankai)。
- S3 プロキシを取得する際に、名前解決されたすべての IP アドレスを試行するようにしました。S3 プロキシが使用されることはまれで、主に Yandex Cloud で使用されています。#33862 (Nikolai Kochetov)。
EXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String)クエリをサポートしました。これにより、EXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String')が返されます。 #33819 (李扬).Map(Key, Value)からArray(Tuple(Key, Value))へのキャストのサポートを追加しました。 #33794 (Maksim Kita).Boolデータ型に対して、いくつかの改善と修正を行いました。 #33244 を修正します。 #33737(Kruglov Pavel)。- OpenTelemetry の trace-id をビッグエンディアン順でパースして保存するようにしました。 #33723 (Frank Chen)。
fromUnixTimestamp64ファミリの関数を改良しました。Int64に変換可能な任意の整数値を受け付けるようになりました。これにより次の Issue がクローズされました: #14648。#33505(Andrey Zvonov)。_shard_numの定数ベースの実装をshardNum()関数による実装に置き換えました(#7624、#27020 を参照)。これは、(#16947 で見つかったもののような)潜在的な問題を回避するためです。#33392(Azat Khuzhin)。- Decimal 型と Float 型の二項演算(加算、減算、乗算、除算、least、greatest)をサポート。 #33355 (flynn).
- max_threads の自動検出で cgroups の制限を考慮するようにしました。 #33342 (JaySon).
- clickhouse-keeper に新しい設定
min_session_timeout_msを追加しました。これにより、clickhouse-keeper はクライアントセッションのタイムアウト時間を、min_session_timeout_msとsession_timeout_msの設定に基づいて決定するようになります。 #33288 (JackyWoo). - 関数
hexおよびbinがUUIDデータ型をサポートするようになりました。 #32170 (Frank Chen). - 名前にドットを含むサブカラムの読み込みの不具合を修正しました。特に、要素名にドットが含まれている場合の
Nestedカラムの読み込みを修正しました(例:Nested(`keys.name` String, `keys.id` UInt64, values UInt64))。#34228(Anton Popov)。 VALUESを使用してテーブルに挿入した場合にparallel_view_processing = 0が機能しない問題を修正。 -query_views_logのview_duration_msがマテリアライズドビューに対して正しく設定されない問題を修正。 #34067 (Raúl Marín)- ZooKeeper から取得したテーブル構造の解析処理を修正: ZooKeeper のメタデータをローカルのメタデータと正規形で比較するようにしました。これにより、ClickHouse のバージョン間で正規的な関数名が変更される場合にも対応しやすくなります。 #33933 (sunny).
- LDAP との連携で一部の文字を適切にエスケープするようにしました。 #33401 (IlyaTsoi).
ビルド/テスト/パッケージングの改善
- 非バンドルビルドのサポートを削除。#33690 (Azat Khuzhin).
- テストが、等しい要素に対する非安定ソートの結果に依存しないようにするため、ソート後のデバッグビルドで等しい要素の区間をランダム化する処理を追加し、等しい要素の並び順に依存していた場合の問題を防止。#34393 (Maksim Kita).
- スタイルチェックに詳細な出力を追加。#34289 (Mikhail f. Shiryaev).
- 廃止されたため、
clickhouse-testの Debian パッケージを削除。#33948 (Ilya Yatsishin). - OS 由来のパッケージを誤って使用してしまう可能性を排除し、hermetic(再現可能な)ビルドを強制するために、ビルドシステムに複数の改善を実施。#33695 (Amos Bird).
バグ修正(公式の stable または prestable リリースにおけるユーザーから見える誤動作)
allow_experimental_parallel_reading_from_replicasをmax_parallel_replicasが 1 の場合に使用したときに発生していたアサーションの問題を修正しました。これにより #34525 が解決されます。 #34613 (Nikita Mikhaylov)。- 空の配列を読み取る際にまれに発生し、
Data compressed with different methodsエラーを引き起こす可能性のあったバグを修正しました。これは、ほとんどが空の配列であるデータの場合に再現する可能性がありますが、常に発生するわけではありません。また、ORDER BY ... DESC を用いた降順での逆方向の読み取り時に発生します。このエラーが発生する可能性は極めて低いものです。 #34327 (Anton Popov)。 - 小さい整数型の値を丸める場合に
round/roundBankersが誤った結果を返す問題を修正しました。#33267 をクローズ。#34562(李扬)。 - 複数のファイルを S3 または HDFS から読み込んでいる場合、クエリのキャンセルが即時に行われないことがありました。 #34301 を修正。 #34397 に関連。 #34539(Dmitry Novik)。
- 例外
Chunk should have AggregatedChunkInfo in MergingAggregatedTransformを修正しました(optimize_aggregation_in_order = 1かつdistributed_aggregation_memory_efficient = 0の場合)。#34526 を修正しました。#34532(Anton Popov)。 - インデックス解析時の整数と浮動小数点数の比較を修正しました。以前は、誤って一部のグラニュールの読み取りをスキップしてしまう可能性がありました。#34493 を修正します。#34528(Anton Popov)。
- URL エンジンの圧縮サポートを修正。#34524 (Frank Chen).
- files のスキーマ自動検出で発生する可能性があるエラー 'file_size: Operation not supported' を修正。#34479 (Kruglov Pavel).
- テーブル削除時に発生しうるレースコンディションを修正。 #34416 (Kseniia Sumarokova).
- ショートサーキット評価時の関数実行で発生する可能性のあるエラー
Cannot convert column Function to maskを修正しました。#34171 をクローズします。#34415(Kruglov Pavel)。 - URL ソースからのスキーマ推論時に起こりうるクラッシュを修正しました。 #34147 をクローズしました。 #34405(Kruglov Pavel)。
- UDF のアクセス権限チェックが、本来あるべきグローバルレベルではなくデータベースレベルで行われていました。 #34281 をクローズします。 #34404 (Maksim Kita)。
- エンジンに
Memoryを使用するデータベースに対するSHOW CREATE DATABASEクエリ結果内の誤ったエンジン構文を修正しました。これにより #34335 が解決されました。#34345(alexey-milovidov)。 - レプリケーションキューが破損した状態になったり「intersecting parts」エラーが発生したりする可能性があった、極めてまれなレースコンディションをいくつか修正しました。#34297 (tavplubix).
- プログレスバーの幅を修正しました。文字数単位の整数値に誤って丸められていました。 #34275 (alexey-milovidov)。
- サーバー間通信時の client information フィールド current_user/current_address の扱いを修正しました(このパッチ以前は current_user/current_address が前のクエリから引き継がれたままになっていました)。 #34263 (Azat Khuzhin).
optimize_aggregation_in_order=1を指定したクエリ処理中に特定の例外が発生した場合のメモリリークを修正。 #34234 (Azat Khuzhin).- 実行中のクエリ数を示すメトリクス
Queryを修正しました。最近のいくつかのリリースでは常に 0 になっていました。 #34224 (Anton Popov)。 - テーブル関数
s3のスキーマ推論を修正しました。 #34186 (Kruglov Pavel). HDFS、S3、URLストレージエンジンで発生しうる、追加の接続が確立されることにつながる可能性のある、まれだが無害なレースコンディションを修正しました。 #34172 (alesapin).- S3 のようなリモートファイルシステム上にデータを格納する MergeTree テーブルエンジンファミリーで LowCardinality カラムを読み込む際、まれに「Cannot read all data」というエラーが発生する不具合を修正しました(S3 上の仮想ファイルシステムは本番運用にはまだ準備ができていない実験的機能です)。 #34139 (alesapin).
- ネイティブプロトコルが変更された場合に、Distributed テーブルへの挿入が失敗する問題を修正します。直近の変更はバージョン 22.1 で導入されたため、そのバージョンへアップグレードした後に Distributed テーブルへの挿入が失敗する場合があります。#34132 (Anton Popov)。
Fileテーブルエンジンにおいて、#33960 によって導入された可能性のあるデータレースを修正。#34111 をクローズ。#34113(Kruglov Pavel)。- ZooKeeper 接続喪失後にごくまれに "intersecting parts" エラーが発生し得た軽微なレースコンディションを修正しました。 #34096 (tavplubix).
Nativeフォーマットでの非同期インサートを修正。 #34068 (Anton Popov).- replicated access storage と keeper(clickhouse-server に組み込み)を同時に使用した場合にサーバーが起動できなくなる原因となっていた不具合を修正しました。default user の設定ではなく、keeper ソケットのタイムアウト用として
keeper_server.socket_receive_timeout_secとkeeper_server.socket_send_timeout_secの 2 つの設定を導入しました。#33973 を修正。#33988(alesapin)。 - フッターが破損した ORC ファイルをパースする際に発生していたセグメンテーションフォルトを修正。#33797 をクローズ。#33984(Kruglov Pavel)。
- クエリパラメータ(プリペアドステートメント)からの IPv6 の解析を修正し、IPv6 から文字列への変換も修正。#33928 をクローズ。#33971(Kruglov Pavel)。
- ネストされたタプルの読み取り時に発生するクラッシュを修正。#33838 を解決。#33956(Anton Popov)。
- 分散クエリにおけるリテラル引数付きの関数
arrayおよびtupleの扱いを修正しました。以前はこれによりNot found columns例外がスローされる可能性がありました。 #33938 (Anton Popov). - 集約関数コンビネータ
-Ifが、Nullableのフィルタ引数を正しく処理できていませんでした。この修正により #27073 がクローズされました。 #33920 (alexey-milovidov). - リモートディスク読み取り時に発生しうるレースコンディションを修正しました(S3 上の仮想ファイルシステムは、本番利用にはまだ準備ができていない実験的機能です)。 #33912 (Amos Bird).
- 識別子ではない引数を持つラムダ式を使用して SQL UDF が作成された場合にクラッシュする問題を修正しました。#33866 をクローズしました。 #33868(Maksim Kita)。
- スパースカラムの使用を修正しました(実験的設定
ratio_of_defaults_for_sparse_serializationを有効にすると利用できます)。#33849(Anton Popov)。 SYSTEM RESTORE REPLICAクエリで、レプリカが実際には readonly であるにもかかわらずreplica is not readonlyという論理エラーが発生していた問題を修正しました。#33806 を修正します。#33847(tavplubix)。- 圧縮が有効な場合(デフォルト)に発生する
clickhouse-keeperのメモリリークを修正。 #33840 (Azat Khuzhin). - 共通の型が利用できない場合のインデックス解析を修正。 #33833 (Amos Bird).
JSONEachRowとJSONCompactEachRowのスキーマ推論を修正。 #33830 (Kruglov Pavel).redisソースを使用し大量のキーを扱う外部ディクショナリの利用を修正。 #33804 (Anton Popov).- サーバー側で「Connection reset by peer」エラーを引き起こしていたクライアントのバグを修正。#33309 をクローズ。#33790(Kruglov Pavel)。
- クエリ
INSERT INTO ... VALUES SETTINGS ... (...), ...の構文解析を修正 #33776 (Kruglov Pavel)。 - ワイドフォーマットとプロジェクションを使用するデータパーツ作成時のテーブルチェックのバグを修正。 #33774 (李扬).
- MergeTree における count() と INSERT/マージ/... の間のごく小さなレースコンディションを修正(optimize_trivial_count_query が有効な SELECT で誤った行数が返る可能性がありました)。 #33753 (Azat Khuzhin).
- storage HDFS におけるディレクトリ一覧リクエストが失敗した場合に例外をスローするよう変更しました。 #33724 (LiuNeng).
- テーブルにプロジェクションが含まれている場合のミューテーション処理を修正しました。これにより #33010 および #33275 が解決されました。#33679(Amos Bird)。
- 名前付き HTTP セッション内で
CREATE TEMPORARY TABLE AS SELECTが実行された場合に、現在のデータベースを正しく判定できるようにしました。これは非常にまれなユースケースです。これにより #8340 が解決されました。 #33676 (alexey-milovidov)。 - ソート、
LIMIT BY、ARRAY JOIN、ラムダ関数を含む一部のクエリを許可します。これにより、#7462 がクローズされます。#33675(alexey-milovidov)。 - 「zero copy replication」(現在開発中であり、本番環境では使用すべきでない機能)において、TTL によるデータ移動時にデータが重複してしまう不具合を修正しました。#33643 を修正します。#33642(alesapin)。
optimize_aggregation_in_order = 1の場合におけるGroupingAggregatedTransform内のエラー「Chunk should have AggregatedChunkInfo」を修正しました。#33637 (Azat Khuzhin)。- テーブルにドットを含む名前の
Nestedカラムが存在し、そのカラムに対してデフォルト値が生成される場合(例: 挿入時にそのカラムが指定されていない場合)に発生することがあるBad cast from type ... to DB::DataTypeArrayエラーを修正しました。#28762 の継続対応です。#33588(Alexey Pavlenko)。 lz4ファイルへのエクスポートが修正されました。 #31421 をクローズしました。 #31862 (Kruglov Pavel)。group_by_overflow_modeがany(近似的な GROUP BY)に設定されていて、LowCardinality型の単一列で集約を行った場合に発生する可能性があったクラッシュを修正しました。 #34506 (DR).- gRPC クライアント-サーバー間プロトコル経由での一時テーブルへの挿入を修正しました。#34347 の issue
#2を解決します。#34364(Vitaly Baranov)。 - #19429 の問題を修正。#34225(Vitaly Baranov)。
- Issue #18206 を修正。#33977(Vitaly Baranov)。
- このPRにより、同一のユーザーディレクトリリスト内で複数のLDAPストレージを使用できるようになります。これは以前は動作していましたが、LDAPテストが無効化されていたため(これらはtestflowsテストの一部です)、動作しなくなっていました。 #33574 (Vitaly Baranov).
ClickHouse リリース v22.1, 2022-01-18
アップグレードに関する注意事項
- 関数
leftとrightは、以前はパーサー内で実装されていましたが、現在は完全な機能を備えた関数として実装されています。エイリアスなしでleftまたはright関数を含む分散クエリは、クラスタ内に異なるバージョンの clickhouse-server が含まれている場合に、例外をスローする可能性があります。クラスタをアップグレード中にこのエラーが発生した場合は、すべてのノードが同じバージョンになるように、クラスタ全体のアップグレードを完了してください。また、この問題を回避するには、クエリ内のカラムにエイリアス(AS something)を追加することもできます。 #33407 (alexey-milovidov). - このバージョンから、スカラーサブクエリによるリソース使用量が完全に計上されるようになりました。この変更により、スカラーサブクエリで読み取られた行が query_log に記録されるようになります。スカラーサブクエリがキャッシュされている場合(繰り返し利用、または複数行に対して呼び出される場合)、読み取られた行は 1 回だけカウントされます。この変更により、スカラーサブクエリを実行している間でも、KILL 文でクエリを終了させたり、進捗を報告したりできるようになります。 #32271 (Raúl Marín).
新機能
- 入力フォーマット向けのデータスキーマ自動推論を実装しました。テーブル関数
file、url、s3、hdfsおよびclickhouse-localのパラメータでは、構造を省略(またはautoのみを記述)できるようにしました。テーブルエンジンFile、HDFS、S3、URL、Merge、Buffer、DistributedおよびReplicatedMergeTree(新しいレプリカを追加する場合)に対する CREATE クエリでも、構造を省略できるようにしました。 #32455 (Kruglov Pavel). file/hdfs/s3/urlテーブル関数およびHDFS/S3/URLテーブルエンジン、さらにSELECT INTO OUTFILEとINSERT FROM INFILEにおいて、ファイル拡張子からフォーマットを自動検出するようにしました #33565 (Kruglov Pavel)。#30918 をクローズしました。#33443 (OnePiece)。- サポートを受ける際に使用する診断データ収集ツール。#33175(Alexander Burmak)。
- Zoo/Keeper によるクラスタの自動検出。これにより、すべてのサーバーの設定を変更することなく、クラスタにレプリカを追加できます。 #31442 (vdimir)。
- ClickHouse から Apache Hive にアクセスするための Hive テーブルエンジンを実装しました。これにより、次が実装されます: #29245。 #31104 (taiyang-li)。
- 集計関数
cramersV、cramersVBiasCorrected、theilsU、contingencyを追加しました。これらの関数は、カテゴリカル値同士の依存関係(連関の尺度)を計算します。すべての関数は、実装にクロス集計(値のペアに対するヒストグラム)を用いています。任意の離散値(必ずしも数値である必要はありません)に対する相関係数のようなものと考えることができます。 #33366(alexey-milovidov)。初期実装は Vanyok-All-is-OK と antikvist によるものです。 - テーブル関数
hdfsClusterを追加しました。これにより、指定したクラスタ内の複数ノードから、s3Clusterと同様に HDFS 上のファイルを並列に処理できるようになりました。 #32400 (Zhichang Yu). - AWS S3 をバックエンドとするディスクの場合と同様の方法で、Azure Blob Storage をバックエンドとするディスクのサポートを追加しました。 #31505 (Jakub Kuklis)。
CREATE VIEWでCOMMENTを使用可能にしました(すべての VIEW 種別が対象)。 #31062 (Vasily Nemkov).- 設定が変更された際に、リッスンポートおよびプロトコルを動的に再初期化するようにしました。 #30549 (Kevin Michel).
left、right、leftUTF8、rightUTF8関数を追加しました。負のオフセット(文字列末尾からのオフセット)を指定した場合のsubstringUTF8関数の実装上のエラーを修正しました。#33407 (alexey-milovidov).H3座標系用に新しい関数h3HexAreaKm2、h3CellAreaM2、h3CellAreaRads2を追加。 #33479 (Bharat Nallan).MONTHNAME関数を追加。#33436(usurai)。- 関数
arrayLastを追加し、#33390 をクローズしました。 #33415 では関数arrayLastIndexを追加しました。 #33465(Maksim Kita)。 - 関数
decodeURLFormComponentをdecodeURLComponentとはやや異なる形で追加しました。 #10298 をクローズしました。 #33451(SuperDJY)。 - プレーンなメトリクスとタグ付きメトリクスで
GraphiteMergeTreeのロールアップルールを分割できるようにしました(オプションの rule_type フィールド)。 #33494 (Michail Safronov).
パフォーマンスの改善
- すべての下位テーブルが
PREWHEREをサポートしているMergeエンジンのテーブルに対して、条件をPREWHERE(設定optimize_move_to_prewhere)に移動できるようになりました。 #33300 (Anton Popov). - URL ストレージにおける glob パターンの処理をより効率的にしました。これにより、リトライ付きで数百万件の URL を並列に容易にクエリできるようになりました。 #32866 をクローズ。 #32907 (Kseniia Sumarokova).
- パーサにおける指数関数的バックトラッキングを回避しました。これにより #20158 がクローズされます。 #33481 (alexey-milovidov).
untuple関数の乱用により、クエリ解析の計算量が指数関数的に増大する問題がありました(fuzzer により発見)。これにより #33297 がクローズされます。 #33445 (alexey-milovidov).- 文字列属性を持つディクショナリに対して、割り当てられるメモリ量を削減しました。 #33466 (Maksim Kita).
reinterpret関数のパフォーマンスをわずかに改善しました。 #32587 (alexey-milovidov).- 影響は小さい変更です。極めてまれなケースとして、いくつかのデータパーツがマージされた後に、すべてのレプリカでそのデータパーツが失われた場合、後続のクエリでパーティションプルーニング中にスキップされるパーティション数が少なくなる可能性があります。実質的な影響はほとんどありません。 #32220 (Azat Khuzhin).
- サイズ計算ロジックを最適化することで、
clickhouse-keeperの書き込みパフォーマンスを改善しました。 #32366 (zhanglistar). - 単一パーツの projection のマテリアライズを最適化しました。これにより #31669 がクローズされます。 #31885 (Amos Bird).
- system テーブルのクエリパフォーマンスを改善しました。 #33312 (OnePiece).
- ボリューム間で移動可能な MergeTree パーツの選択を最適化しました。 #33225 (OnePiece).
- 連番キーに対する
sparse_hasheddict のパフォーマンスを修正しました(誤ったハッシュ関数の使用)。 #32536 (Azat Khuzhin).
実験的機能
- 分散クエリにおいて
sample keyを使用しない場合でも、シャード内の複数レプリカからの並列読み取りが可能になりました。この機能を有効化するには、allow_experimental_parallel_reading_from_replicas = 1を設定し、max_parallel_replicasを任意の値に設定します。これにより #26748 がクローズされました。#29279(Nikita Mikhaylov)。 - 疎シリアライゼーションを実装しました。これにより、多数のデフォルト値(ゼロ)を含むカラムに対してディスク使用量を削減し、一部のクエリのパフォーマンスを向上できます。
ratio_for_sparse_serializationを設定することで有効化できます。カラムについて、デフォルト値の数と全値の数の比率がこのしきい値を上回る場合、そのカラムには疎シリアライゼーションが動的に選択されます。シリアライゼーション方式(デフォルトまたは疎)はパーツ内の各カラムごとに固定されますが、パーツ間で異なる場合があります。#22535(Anton Popov)。 - MaterializedMySQL テーブルスキーマをカスタマイズするための "TABLE OVERRIDE" 機能を追加しました。#32325(Stig Bakken)。
EXPLAIN TABLE OVERRIDEクエリを追加しました。#32836(Stig Bakken)。- MaterializedPostgreSQL に対して TABLE OVERRIDE 句をサポートしました。RFC: #31480。#32749(Kseniia Sumarokova)。
- 共有データに対するゼロコピーマークの ZooKeeper パスを変更しました。「ゼロコピーレプリケーション」は本番非対応の機能(開発初期段階)であり、そもそも使用すべきではありません。ただし、もし既に使用している場合は、この変更があることを念頭に置いてください。#32061(ianton-ru)。
- WINDOW VIEW の watch クエリに対して EVENTS 句をサポートしました。#32607(vxider)。
clickhouse-keeperにおける、明示的なダイジェストハッシュを用いた ACL を修正しました。これにより ZooKeeper と挙動が一致し、生成されたダイジェストが常に受け入れられるようになりました。#33249(小路)。#33246。- パーツのデタッチ時に予期せずプロジェクションが削除される問題を修正しました。#32067(Amos Bird)。
改善点
1970-01-01 00:00:00より前の時刻を生成する日時変換関数は、オーバーフローするのではなく、0 に飽和するようになりました。#29953(Amos Bird)。また、日付切り捨て関数の結果が Unix エポック以前になる場合にインデックス解析で発生していたバグも修正されています。- クライアントでリソース使用状況(CPU の合計使用量、RAM の合計使用量、ホストごとの最大 RAM 使用量)を常に表示するようにしました。 #33271 (alexey-milovidov).
Bool型のシリアライズおよびデシリアライズを改善し、値の範囲チェックを追加。 #32984 (Kruglov Pavel).SETクエリまたは HTTP リクエスト内のクエリパラメータを使用して無効な設定が指定された場合、エラーメッセージには、その無効な設定文字列と類似した候補(存在する場合)が含まれます。 #32946 (Antonio Andelic).- clickhouse-client および clickhouse-local の設定名を誤って入力した場合にヒントを表示するようにしました。これにより #32237 がクローズされました。#32841(凌涛)。
- マテリアライズドビューで仮想カラムを使用できるようにしました。 #11210 をクローズ。 #33482 (OnePiece).
- 必要に応じて、clickhouse-keeper で IPv6 を無効化できる設定を追加しました。これにより #33381 がクローズされました。#33450(Wu Xueyang)。
- 現在の Git リビジョンに関する情報を
system.build_optionsに追加。#33431(taiyang-li)。 clickhouse-local:--max_memory_usage_in_clientオプションでメモリを追跡するようにしました。#33341 (Azat Khuzhin).- 関数
intervalLengthSumで負の区間も扱えるようにしました。それらの長さも合計に含まれます。これにより #33323 が解決されました。 #33335(alexey-milovidov)。 LineAsStringは出力フォーマットとして使用できるようになりました。これにより #30919 が解決されました。#33331(Sergei Trifonov)。- クラスター構成で
<secure>1</secure>の代替として<secure/>をサポート。 #33270 をクローズ。 #33330 (SuperDJY)。 - Ctrl+C を 2 回押すと、実行中のクエリの完了を待たずに
clickhouse-benchmarkが即座に終了します。これにより#32586 が解決されました。#33303 (alexey-milovidov)。 parseDateTimeBestEffort関数でミリ秒精度の Unix タイムスタンプをサポートしました。 #33276 (Ben).Arrow/Parquet/ORC形式の外部テーブルからデータを読み込んでいる間でもクエリをキャンセルできるようにしました。大きなファイルかつ設定input_format_allow_seeksが false の場合に、キャンセルできない問題がありました。 #29678 をクローズします。 #33238 (Kseniia Sumarokova)。- テーブルエンジンが
SETTINGS句をサポートしている場合、設定をキーと値のペア形式またはコンフィグ経由で渡せるようにします。MySQL にこのサポートを追加しました。 #33231 (Kseniia Sumarokova). - 必要に応じて Nullable なプライマリキーの使用を正しく禁止するようにしました。これは #32780 に対応するものです。#33218(Amos Bird)。
- まだ何も取得されていない場合に備えて、
PostgreSQL接続にリトライ処理を追加。#33199 をクローズ。#33209(Kseniia Sumarokova)。 - 外部ディクショナリ用の設定キーを検証するようにしました。 #33095。 #33130 (Kseniia Sumarokova)。
clickhouse-local内でプロファイル情報を送信するようにしました。#33093 をクローズしました。#33097 (Kseniia Sumarokova)。- 短絡評価: 関数
throwIfをサポート。 #32969 をクローズ。 #32973(Maksim Kita)。 - (これは非公式ビルドでのみ発生します)。圧縮された Decimal、String、FixedString、Array カラムへのデータ挿入時に発生していたセグメンテーションフォルトを修正しました。これにより #32939 が解決されます。#32940(N. Kolotov)。
- サブクエリを SQL のユーザー定義関数として指定できるようにしました。例:
CREATE FUNCTION test AS () -> (SELECT 1)。 #30755 をクローズしました。 #32758(Maksim Kita)。 - gRPC の圧縮サポートを改善しました #28671。 #32747 (Vitaly Baranov)。
- WAL が無効な場合、サーバーのシャットダウン時またはテーブルのデタッチ時に、すべてのインメモリデータパーツをフラッシュするようにしました。 #32742 (nauta)。
- MySQL の接続タイムアウトを制御できるようにしました(以前は辞書ソースに対してのみサポートされていました)。#16669 を解決しています。従来はデフォルトの
connect_timeoutの値がかなり小さく設定されていましたが、現在は設定可能になりました。#32734 (Kseniia Sumarokova)。 - ストレージ
MongoDB向けにauthSourceオプションのサポートを追加。#32594 をクローズ。#32702(Kseniia Sumarokova)。 genarateRandomテーブル関数でDate32型をサポートしました。 #32643 (nauta).- クエリ種別ごとに同時実行クエリ数を制御するための設定
max_concurrent_select_queriesおよびmax_concurrent_insert_queriesを追加。#3575 をクローズ。#32609(SuperDJY)。 Protobuf形式でデータを読み込む際に、ネストされた構造で列が欠損している場合の扱いを改善しました。https://github.com/ClickHouse/ClickHouse/pull/31988 のフォローアップです。#32531(Vitaly Baranov)。MongoDBエンジンで空のクレデンシャルを許可しました。#26267 をクローズ。#32460(Kseniia Sumarokova)。- 例外を引き起こす可能性のあるウィンドウ関数に対する一部の最適化を無効化しました。 #31535 をクローズしました。 #31620 をクローズしました。 #32453(Kseniia Sumarokova)。
- MongoDB 5.0 への接続をサポートしました。#31483、#32416 をクローズしました(Kseniia Sumarokova)。
Decimal型とFloat型の比較を可能にします。#22626 をクローズ。 #31966 (flynn)。StorageExecutable、StorageExecutablePool、ExecutableDictionary、ExecutablePoolDictionary、ExecutableUserDefinedFunctions向けにcommand_read_timeout、command_write_timeout設定を追加しました。command_read_timeout設定は、コマンドの stdout からデータを読み取る際のタイムアウトをミリ秒単位で制御します。command_write_timeout設定は、コマンドの stdin へデータを書き込む際のタイムアウトをミリ秒単位で制御します。ExecutableUserDefinedFunction、ExecutableDictionary、StorageExecutable向けにcommand_termination_timeout設定を追加しました。ExecutableUserDefinedFunction向けにexecute_direct設定を追加し、デフォルト値は true です。ExecutableDictionary、ExecutablePoolDictionary向けにexecute_direct設定を追加し、デフォルト値は false です。#30957(Maksim Kita)。- ビットマップ集約関数は、範囲外の引数に対してラップアラウンドせず、正しい結果を返すようになりました。 #33127 (DR).
FROM INFILEステートメントを含む誤ったクエリの解析を修正。#33521(Kruglov Pavel)。- パスにグロブが含まれる場合は
S3への書き込みを許可しないようにしました。 #33142 (Kruglov Pavel). - バッチモードで単一クエリを実行する際、
clickhouse-clientで--echoオプションが使用されていませんでした。 #32843 (N. Kolotov). - clickhouse-local で
--databaseオプションを使用できるようにしました。#32797(Kseniia Sumarokova)。 - SQL の通常関数
fileにあった驚くほどひどいコードを修正しました。これによりシンボリックリンクもサポートされるようになりました。#32640(alexey-milovidov)。 - パーツ移動後に
system.parts内のデータパーツのmodification_timeを更新するように修正 #32964。#32965(save-my-heart)。 - 潜在的な問題ではあるが悪用は不可能: 配列のリサイズ時に整数オーバーフローが発生する可能性があります。 #33024 (varadarajkumar).
ビルド/テスト/パッケージングの改善
- ClickHouse の AArch64 (ARM) 版向けにパッケージ、機能テスト、および Docker ビルドを追加。#32911(Mikhail f. Shiryaev)。#32415
- ClickHouse を musl-libc でビルドできるよう準備。デフォルトでは有効になっていない。#33134(alexey-milovidov)。
- FreeBSD 上でインストールスクリプトが動作するように修正。この変更により #33384 がクローズされる。#33418(alexey-milovidov)。
- GitHub Actions のワークフロー向けに
actionlintを追加し、act --listでワークフローファイルを検証して、ワークフロー構文の正当性を確認できるようにした。#33612(Mikhail f. Shiryaev)。 - Nullable な primary key 機能向けのテストを追加。さまざまな型や MergeTree の種類に対するテストに加え、ランダム生成データを用いたテストを追加。#33228(Amos Bird)。
- 不安定なテスト(flaky tests)を Web ブラウザで可視化するためのシンプルなツールを追加。#33185(alexey-milovidov)。
- 共有ビルド向けに hermetic build を有効化。主に開発者向け。#32968(Amos Bird)。
libc++およびlibc++abiを最新バージョンに更新。#32484(Raúl Marín)。- 外部 .NET クライアント(ClickHouse.Client)用の統合テストを追加。#23230(Oleg V. Kozlyuk)。
- git 情報を clickhouse バイナリファイルに埋め込むようにした。これにより、clickhouse バイナリファイルからソースコードのリビジョンを容易に取得できる。#33124(taiyang-li)。
- ConfigProcessor から不要なコードを削除。Yandex 固有のコードはもはや使用されていない。このコードには軽微な欠陥が 1 つ含まれていた。この欠陥は #33032 で Mallik Hassan により報告されており、この変更により #33032 がクローズされる。#33026(alexey-milovidov)。
バグ修正(公式の stable または prestable リリースにおけるユーザーに見える誤動作)
- フォーマットのパース処理に関する複数の修正を行いました。これは、
clickhouse-serverが攻撃者による書き込みアクセスに対して開かれている場合に関連します。Nativeフォーマット向けに特別に細工された入力データによって、未初期化メモリの読み取りやクラッシュが発生する可能性があります。これは、clickhouse-serverが攻撃者による書き込みアクセスに対して開かれている場合に関連します。 #33050 (Heena Bansal)。Apache Avro バイナリフォーマットにおける Apache Avro Union 型のインデックス範囲外アクセスの問題を修正しました。 #33022 (Harry Lee)。NativeフォーマットでLowCardinalityデータをデシリアライズする際に発生する、LowCardinalityデータにおけるヌルポインタ参照を修正しました。 #33021 (Harry Lee)。 - ClickHouse Keeper ハンドラは、応答を送信した際に操作を正しく削除するようになりました。 #32988 (JackyWoo).
- クォータ計算のオフバイワン誤りの可能性: クォータの上限には達していなかったにもかかわらず、上限超過と判定されていた。この修正により #31174 が解決される。#31656(sunny)。
- String 型から IPv4 型または IPv6 型への CAST 処理と、その逆方向の CAST 処理を修正しました。変換失敗時のエラーメッセージを修正しました。 #29224 (Dmitry Novik) #27914 (Vasily Nemkov).
- リモートサーバー上での実行中に発生する
Unknown aggregate function nothingのような例外が発生する問題を修正しました。これにより #16689 が修正されました。 #26074 (hexiaoting). - 分散クエリにおいて、データベースを明示していない
JOINで誤ったデータベースが使用される問題を修正 (修正対象: #10471)。 #33611 (Azat Khuzhin)。 - ファイルへの2回目の挿入後に発生する Apache
Avroフォーマットにおけるセグメンテーションフォールトを修正。#33566 (Kruglov Pavel). - スキーマに
Dictionary型が含まれている場合に発生していた ApacheArrowフォーマットでのセグメンテーションフォールトを修正しました。#33507 がクローズされます。#33529(Kruglov Pavel)。 - クエリ外で指定された
offsetおよびlimitの設定がビューに対して誤って適用される場合があります。#33289 #33518(hexiaoting)をクローズ。 - デフォルトのネストされた
LowCardinality列を持つテーブルへの挿入時に発生する可能性のある例外Block structure mismatchを修正。#33028 を解決。#33504(Nikolai Kochetov)。 - DDL を使用して作成された場合の
range_hashedの range min および range max 属性に対して使用される辞書の式を修正。#30809 をクローズ。#33478(Maksim Kita)。 - 並行して DROP が実行されているマテリアライズドビューへの INSERT で起こり得る use-after-free を修正しました(Azat Khuzhin)。
- EOF を越えて読み込まないようにする(Linux カーネルのバグに対するワークアラウンド)。このバグはカーネル 3.14〜5.9 で再現可能であり、発生には
index_granularity_bytes=0(つまり adaptive index granularity を無効にする設定)が必要です。#33372(Azat Khuzhin)。 SYSTEM SUSPENDおよびSYSTEM ... THREAD FUZZERコマンドはアクセス制御の対象になっていませんでしたが、修正されました。著者: Kevin Michel。 #33333 (alexey-milovidov)。- 辞書の
COMMENTがsystem.tablesやsystem.dictionariesに表示されない問題を修正しました。Dictionaryエンジンのコメントを変更できるようにしました。#33251 をクローズします。#33261(Maksim Kita)。 - 非同期INSERT(
async_insert設定を有効化したもの)をクエリログに記録するようにしました。以前はこの種のクエリはクエリログに記録されていませんでした。#33239 (Anton Popov)。 - 外部データベースに対するクエリで
WHERE 1 = 0式が送信される問題を修正。#33152 をクローズ。#33214(Kseniia Sumarokova)。 - MaterializedPostgreSQL の DDL 検証を修正しました。
materialized_postgresql_allow_automatic_updateの設定を修正しました。#29535 をクローズしました。#33200(Kseniia Sumarokova)。未使用のレプリケーションスロットが常に削除されるようにしました。#26952 で判明。#33187(Kseniia Sumarokova)。デフォルト以外のスキーマを持つテーブルに対する MaterializedPostreSQL の detach/attach(レプリケーションからの削除 / 追加)処理を修正しました。#29535 で判明。#33179(Kseniia Sumarokova)。DROP MaterializedPostgreSQL database の処理を修正しました。#33468(Kseniia Sumarokova)。 - メトリクス
StorageBufferBytesが誤って算出される場合がありました。 #33159 (xuyatian)。 local_filesystem_read_prefetchまたはremote_filesystem_read_prefetchが有効な状態でLowCardinalityカラムを読み取る場合に発生していたInvalid version for SerializationLowCardinality key columnエラーを修正。 #33046 (Nikolai Kochetov).- 空のファイルを読み込む際の
s3テーブル関数の不具合を修正しました。#33008 をクローズ。#33037(Kseniia Sumarokova)。 - cancel_http_readonly_queries_on_client_close の場合の Context リークを修正(サーバーにアップロードされた外部テーブルやその他のリソースがリークしてしまう問題)。 #32982 (Azat Khuzhin).
- カスタム CSV 区切り文字を使用している場合に、
CSVフォーマットでタプルの出力が誤っていた問題を修正。 #32981 (Kruglov Pavel)。 - HA namenode のアドレスを使用できなかった HDFS URL チェックを修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/31042 で導入されました。#32976(Kruglov Pavel)。
- 位置引数でない引数に対して
positional argument out of boundsのような例外がスローされる問題を修正。#31173#event-5789668239 をクローズ。#32961(Kseniia Sumarokova)。 - HTTP クエリから set を構築している最中に予期しない EOF が発生した場合の未定義動作 (UB) を修正(つまり、クライアントが途中で接続を中断した場合。例:
timeout 0.15s curl -Ss -F '[email protected];' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s'かつt.csvが十分大きい場合)。#32955(Azat Khuzhin)。 replaceRegexpAll関数のリグレッションを修正しました。一致した部分文字列が空文字列の場合に、この関数が正しく動作しない問題がありました。これにより #32777 が解決されます。また、#30245 も解決されます。#32945(alexey-milovidov)。ORCフォーマットのストライプ読み取りを修正。 #32929 (kreuzerkrieg)。topKWeightedStateが一部の入力型でエラーになる問題がありました。#32487。#32914(vdimir)。- マテリアライズドビューで発生する例外
Single chunk is expected from view inner query (LOGICAL_ERROR)を修正。#31419 を解決。#32862(Nikolai Kochetov)。 - リモートファイルシステムからの非同期読み取りに対する lazy seek を使用した最適化を修正。 #32803 をクローズ。 #32835(Kseniia Sumarokova)。
MergeTreeテーブルエンジンは、実行中の mutation が多すぎる場合やメモリ消費が高い場合に、一部の mutation をサイレントにスキップしてしまう可能性がありましたが、これを修正しました。 #17882 を修正しました。 #32814 (tavplubix)。- MV ブロックを処理する際にスカラーサブクエリキャッシュを再利用しないようにしました。これにより、スラカーサブクエリがソーステーブルを参照している場合のバグは修正されますが、その代わりに MV 定義内のすべてのスカラーサブクエリが各ブロックごとに計算されることになります。 #32811 (Raúl Marín).
MySQLエンジンを使用するデータベースが MySQL サーバーに接続できない場合に、サーバーが起動に失敗することがある問題を修正しました。Fixes #14441. #32802 (tavplubix).fuzzBits関数の使用時に発生していたクラッシュを修正し、#32737 をクローズ。#32755(SuperDJY)。Kafka/RabbitMQ上での、GROUP BY (列のリスト)(GROUP BY tuple(...)としてパースされる)を使用したマテリアライズドビューにおけるColumn is not under aggregate functionエラーを修正しました。これにより、#32668 および #32744 が修正されました。 #32751(Nikolai Kochetov)。TTL ... DELETE WHERE ...およびTTL ... GROUP BY ...モードを使用するALTER TABLE ... MATERIALIZE TTLクエリを修正。#32695 (Anton Popov)。- テーブルエンジンが
DistributedまたはMergeであり、その基盤となるMergeTreeテーブルのソートキーの先頭部分に単調関数を含む場合のoptimize_read_in_order最適化を修正しました。 #32670 (Anton Popov). - マテリアライズドビューの出力先が JOIN テーブルまたは SET テーブルである場合に発生していた LOGICAL_ERROR 例外を修正しました。 #32669 (Raúl Marín).
- Google Cloud Storage への multipart アップロードを利用した S3 への挿入で、アップロードがアボートされる場合があります。 #32504. #32649 (vdimir).
- チャネル作成を遅延させることで、
RabbitMQストレージの起動時に発生する可能性のあった例外を修正しました。 #32584 (Kseniia Sumarokova). DROP TABLEとINSERTが並列に実行される場合のテーブルのライフタイム管理を修正し、use-after-free が発生する可能性のある問題を防止しました。 #32572 (Azat Khuzhin).CustomSeparated、Template、Regexp、MsgPackおよびJSONAsStringフォーマットを使用した非同期インサートの問題を修正しました。これらのフォーマットを使用した非同期インサートは、以前はデータを一切読み込めていませんでした。 #32530 (Kruglov Pavel)。- 分散テーブル上の
groupBitmapAnd関数を修正。#32529(minhthucdao)。 - fuzzer により検出された JOIN のクラッシュを修正し、#32458 をクローズ。#32508(vdimir)。
- Apache Arrow でカラムが重複する場合の適切な処理。 #32507 (Dmitriy Mokhnatkin).
- 分散クエリにおいて、一部のテーブル列名が
ALLまたはDISTINCTの場合にエラーを引き起こしていた、曖昧なクエリのフォーマットに関する問題を修正しました。これにより #32391 がクローズされます。#32490(alexey-milovidov)。 - まだマテリアライズされていない skipping index を使用しようとするクエリで発生する失敗を修正しました。 #32292 および #30343 を解決します。 #32359(Anton Popov)。
- 同一カラムに 2 つ以上の行ポリシーが存在する場合、同一セッション内の 2 つ目以降のクエリで
SELECTクエリが正しく動作しなくなる問題を修正。 #31606。 #32291 (SuperDJY)。 - 負の unix タイムスタンプ(1970-01-01 より前)に対して小数部が反転してしまっていた、
DateTime64への小数精度付き unix タイムスタンプ変換を修正しました。 #32240 (Ben). - レプリケーションキューの一部のエントリが、
Directory tmp_merge_<part_name>やPart ... (state Deleting) already exists, but it will be deleted soonなどのエラーとともに、temporary_directories_lifetime(デフォルトでは 1 日)にわたってハングすることがありました。この問題は修正されました。#29616 を修正します。 #32201(tavplubix)。 - クライアント/サーバーのクラッシュを引き起こす可能性があった
APPLY lambdaカラムトランスフォーマのパース処理を修正しました。 #32138 (Kruglov Pavel). - 短い文字列に対して末尾に余分なバイトを追加してしまっていた
base64Encodeを修正。 #31797 (Kevin Michel). - ウィンドウ関数に
LowCardinality引数が指定された場合にクラッシュ(または誤った結果)が発生する可能性がある不具合を修正しました。#31114 を修正。#31888(Nikolai Kochetov)。 DROP TABLE system.query_log syncコマンドがハングアップする問題を修正。 #33293 (zhanghuajie)。