ClickHouse リリース 22.12、2022-12-15。 プレゼンテーション , ビデオ
Caution - Warning
このリリースには 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 つの特殊なケースを除き、非互換バージョンを含むすべてのバージョンで書き込まれたデータを正しく読み取れます。非互換バージョンが、実際に null 文字で終わる文字列を含む状態を保存していた場合、新しいバージョンでは影響を受ける集約関数の状態を読み取る際に末尾の '\0' を取り除きます。たとえば、非互換バージョンが anyState('abrac\0dabra\0') の状態を state_column に保存した場合、新しいバージョンでは anyMerge(state_column) の結果が 'abrac\0dabra' と表示されます。この問題は、非互換バージョンが古いバージョンまたは新しいバージョンと同じクラスター内で稼働している場合、分散クエリにも影響します。 #43038 (Alexander Tokmakov , Raúl Marín ). 注: すべての公式 ClickHouse ビルドには、すでにこのパッチが含まれています。これは非公式なサードパーティ製ビルドには必ずしも当てはまらないため、そのようなビルドの使用は避けてください。
新機能
BSONEachRow 入出力フォーマットを追加しました。このフォーマットでは、ClickHouse は各行を個別の BSON ドキュメントとしてフォーマット/解析し、各カラムをカラム名をキーとする単一の BSON フィールドとしてフォーマット/解析します。#42033 (mark-polokhov ).
grace_hash JOINアルゴリズムを追加しました。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 (李扬 ).
固定精度の十進数演算向けに multiplyDecimal および divideDecimal 関数を追加しました。#42438 (Andrey Zvonov ) 。
現在移動中のパーツの一覧を確認できるsystem.movesテーブルを追加しました。#42660 (Sergei Trifonov ).
ClickHouse Keeper 向けの埋め込み Prometheus エンドポイントのサポートを追加しました。#43087 (Antonio Andelic ) 。
区切り文字として _ を使用できる数値リテラルをサポートしました。たとえば、1_000_000 です。#43925 (jh0x ).
cutURLParameter 関数の第2パラメータとして Array を使用できるようになりました。これにより、複数のパラメータをまとめて削除できます。#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 ) 。
実験的機能
パフォーマンス改善
設定 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 は、バックグラウンド I/O プールから MergeTree テーブルを読み取る機能を有効にします。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 が adaptive granularity を考慮していませんでした。fat rows でも読み取り行数が減少せず (merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read では行われていた処理) 、その結果、リモート filesystem 使用時にメモリ使用量が高くなる可能性がありました。#43965 (Nikolai Kochetov )。
マージするパーツを選択する際の ZooKeeper または ClickHouse Keeper への list リクエスト数を最適化しました。以前は、場合によっては数千件のリクエストが発生していました。#43647 を修正しました。#43675 (Alexander Tokmakov )。
max_size_to_preallocate_for_aggregation の値が小さすぎる場合、この最適化はスキップされるようになりました。この設定のデフォルト値は 10^8 に引き上げられました。#43945 (Nikita Taranov )。
古いデータパーツのクリーンアップを行わないようにして、server のシャットダウンを高速化しました。これは https://github.com/ClickHouse/ClickHouse/pull/41145 以降は不要になっていたためです。#43760 (Sema Checherinda )。
enable_memory_bound_merging_of_aggregation_results が設定されている場合、イニシエーターでの merging は、ローカル aggregation 結果の merging と同じメモリ制約アプローチを使用するようになりました。#40879 (Nikita Taranov )。
Keeper の改善: replication と並列に logs を disk に同期するようになりました。#43450 (Antonio Andelic )。
Keeper の改善: リクエストがこれまでより頻繁に batching されるようになりました。batching は新しい設定 max_requests_quick_batch_size で制御できます。#43686 (Antonio Andelic )。
改善点
参照依存関係を実装し、バックアップから復元する際に正しい順序でテーブルを作成できるようにしました。 #43834 (Vitaly Baranov ) 。
起動時の読み込み中に発生する失敗を回避するため、CREATE クエリ内の UDFs を置換するようになりました。さらに、UDFs はカラムの DEFAULT 式としても使用できるようになりました。#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 table function / engine からの読み込み時に進捗バーを表示。 #43454 (Kseniia Sumarokova ).
進捗バーに、読み込まれた行数と書き込まれた行数の両方が表示されるようになりました。#43496 (Ilya Yatsishin ).
filesystemAvailable および関連する関数で、disk 名を指定する省略可能な引数を 1 つサポートするようになり、filesystemFree は filesystemUnreserved に変更されました。#35076 をクローズしました。#42064 (flynn ).
LDAPとのインテグレーション: search_limit のデフォルト値を 256 に引き上げ、LDAP server の設定オプションを追加して、この値を任意の値に変更できるようにしました。Closes: #42276 . #42461 (Vasily Nemkov ).
機密情報を例外メッセージからも削除できるようにしました (設定ファイルの query_masking_rules を参照) 。#41418 を解決しました。#42940 (filimonov ).
MySQLとの互換性向上のため、SHOW FULL TABLES ... のようなクエリをサポートしました。#43910 (Filatenkov Artur ) 。
Keeper の改善: ノードを手動でリーダーに割り当てられる 4lw コマンド rqld を追加しました。#43026 (JackyWoo ) 。
クエリから、Distributed 非同期 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 ) 。
現在のスタック、profile event 名、および増分値とともに、trace_type = 'ProfileEvent' の profile events を増分ごとに 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 ).
ビルド/テスト/パッケージングの改善
バグ修正 (正式な stable または prestable リリースでユーザーに影響する不具合)
非同期挿入の使用時にデッドロックを引き起こす可能性があるバグを修正しました。#43233 (Anton Popov ).
AST レベルの最適化 optimize_normalize_count_variants における一部の誤ったロジックを修正しました。 #43873 (Duc Canh Le ) 。
レプリカ間でチェックサムが一致しない場合 (例: アップグレード時のデータフォーマット変更が原因) に、mutation の進行が止まる問題を修正しました。 #36877 (nvartolomei ).
hdfsCluster table function で機能していなかった 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 と materialized view の drop の間で発生していた (論理的な) 競合状態を修正しました。これは、INSERT と同時に materialized view が drop された場合に発生していたもので、実行開始時点ではその MV が insert の依存関係として存在していたものの、insert chain がアクセスしようとした時点では table がすでに drop されており、その結果 UNKNOWN_TABLE または TABLE_IS_DROPPED の例外が発生して insertion が停止していました。この変更により、依存関係が失われている場合はこれらの例外を回避し、insert をそのまま継続するようになりました。#43161 (AlfVII ).
未初期化メモリにつながる可能性があった quantiles 関数の未定義動作を修正しました。fuzzer によって発見されました。これにより #44066 をクローズします。#44067 (Alexey Milovidov ).
CompressionCodecDelta に、非圧縮サイズがゼロの場合の追加チェックが加えられました。#43255 (Nikita Taranov ) 。
配列内のデータ不整合による問題を回避するため、Parquet の配列をフラット化します。こうした不正なファイルは Apache Iceberg によって生成されることがあります。#43297 (Arthur Passos ).
関数の短絡実行を使用した際に LowCardinality カラムから不正な型変換が行われる問題を修正しました。 #43311 (Kruglov Pavel ).
Merge engine を使用するテーブルにおける、prewhere 最適化付きの SAMPLE BY を使用したクエリを修正しました。 #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 (Experimental Feature) で、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 における hour/minute の date_diff の不具合を修正。#42742 をクローズ。#43466 (zzsmdfj ).
マージ/ミューテーションに起因する不正確なメモリ計上を修正しました。 #43516 (Azat Khuzhin ).
toString(enum) を含む条件における主キーの解析を修正しました。#43596 (Nikita Taranov )。このエラーは @tisonkun によって報告されました。
パーティションのアタッチ完了後に、clickhouse-copier が Keeper 内のステータスと attach_is_done を更新する際の整合性を確保しました。 #43602 (lzydmxy ).
Replicated データベース (実験的機能) の失われたレプリカを復旧する際には、2 つのテーブル名をアトミックに入れ替える必要が生じる場合があります (EXCHANGE を使用) 。以前は 2 つの RENAME クエリを使おうとしていましたが、これは明らかに失敗し、さらにデータベースレプリカの復旧プロセス全体も失敗させていました。 #43628 (Nikita Mikhaylov ).
s3Cluster 関数で NOT_FOUND_COLUMN_IN_BLOCK エラーがスローされるケースを修正しました。#43534 をクローズしました。#43629 (chen ).
同じキー名を持ちながらネストレベルの異なる配列を含むJSON objectのパース中に発生する可能性がある論理エラー Array sizes mismatched を修正しました。#43569 をクローズしました。#43693 (Kruglov Pavel ).
集約キーに ALIAS カラムが含まれる分散 GROUP BY で、発生する可能性のあった例外を修正しました。#43709 (Nikita Taranov ) 。
ゼロコピーレプリケーション (実験的機能) が有効になって使用されている場合に、プロジェクションが破損する可能性がある不具合を修正しました。#43764 (alesapin ).
AWS S3 内の非常に大きな S3 オブジェクトで multipart upload を使用する際の不具合を修正しました。 #43824 (ianton-ru ).
ON CLUSTER を指定した ALTER ... RESET SETTING の不具合を修正しました。これまでは 1 つのレプリカにしか適用されないことがありました。#43843 を修正しました。#43848 (Elena Torró ).
右辺に Join テーブルエンジンを使用し、USING を用いる JOIN で発生する論理エラーを修正しました。#43963 (Vladimir C )。Join テーブルエンジンでキーの順序が誤っていた不具合を修正しました。#44012 (Vladimir C )。
Keeper の修正: Raft 用のサーバー間通信用ポートがすでに使用されている場合、例外を送出するようにしました。#43984 (Antonio Andelic ).
サブクエリから不要なカラムがプルーニングされる場合の ORDER BY の位置引数 (例: ORDER BY 1, 2) を修正しました。#43964 をクローズしました。#43987 (Kseniia Sumarokova ) 。
サブクエリにHAVINGは含まれているものの、実際の集約がない場合に発生していた例外を修正しました。#44051 (Nikita Taranov ) 。
S3 multipart upload における競合状態を修正しました。この競合状態により、バックアップから復元する際に、エラー Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR) が発生する可能性がありました。 #44065 (Vitaly Baranov ).
ClickHouse リリース 22.11 (2022-11-17) 。プレゼンテーション 、ビデオ
後方互換性を持たない変更
新機能
ClickHouse Keeper とのセッションが失われた際に、ReplicatedMergeTree への INSERT 中の再試行をサポートします。耐障害性の向上に加え、Keeper が再起動した場合 (たとえばアップグレード時) でも、INSERT 中にユーザーへエラーを返さないようにし、より良いユーザー体験を提供することを目的としています。 #42607 (Igor Nikonov ).
S3 上のテーブルに限定した、読み取り専用のHudiおよびDeltaLakeテーブルエンジンを追加しました。#41054 (Daniil Rubin , Kseniia Sumarokova ).
テーブル関数 hudi と deltaLake を追加しました。#43080 (flynn ) 。
複合的な時間インターバルのサポート。1. Intervals に対して、加算、減算、符号反転の各操作が利用可能になりました。Intervals の型が異なる場合は、それらの型からなる Tuple に変換されます。2. インターバルのタプルを Date/DateTime フィールドに加算したり、そこから減算したりできます。3. 異なる型の Intervals のパースを追加しました。例: INTERVAL '1 HOUR 1 MINUTE 1 SECOND'。#42195 (Nikolay Degterinsky ).
ファイルシステムおよび S3 における再帰的なディレクトリ走査で ** glob をサポートしました。#36316 を解決します。#42376 (SmitaRKulkarni ).
書き込み1回・複数回読み取りの操作向けに、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 と同様の 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 ).
任意の構造の named collections、アクセス種別、および system.named_collections に対する汎用的な実装を追加しました。 #43147 (Kseniia Sumarokova ) 。
パフォーマンス改善
実験的機能
改善点
ビルド/テスト/パッケージングの改善
バグ修正 (正式な stable または prestable リリースでユーザーに影響する不具合)
ClickHouse リリース 22.10 (2022-10-25) 。プレゼンテーション 、ビデオ
後方互換性を持たない変更
新機能
構成可能なプロトコル設定が追加されました。これにより、プロトコルごとに異なるリッスンホストを設定できるようになりました。PROXYv1 などのプロトコルラッパーは、他の任意のプロトコル (TCP、セキュアな TCP、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 ).
format_json_object_each_row_column_for_object_name 設定を追加し、JSONObjectEachRow フォーマットでオブジェクト名をカラムの値として書き込み・解析できるようにしました。#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 ) 。
実験的機能
パフォーマンス改善
「パーツが多すぎる」のしきい値を緩和しました。これにより #6551 がクローズされます。平均パーツサイズが十分大きい場合 (少なくとも 10 GiB) 、ClickHouse は 1 つのパーティション内でより多くのパーツを許可するようになりました。これにより、ディスクシェルフやオブジェクトストレージを使用して、単一サーバー上の単一テーブルの単一パーティションに最大 PB 規模のデータを格納できます。 #42002 (Alexey Milovidov ).
必要なスタックサイズを小さくするため、演算子優先順位要素パーサーを実装しました。 #34892 (Nikolay Degterinsky ).
DISTINCT in order 最適化で、データストリームのソート特性を活用するようにしました。この改善により、適用可能な場合は DISTINCT で順序付き読み取りが有効になります (以前は DISTINCT のカラムに対して ORDER BY を指定する必要がありました) 。 #41014 (Igor Nikonov ).
ColumnVector: AVX512VBMI を使用して UInt8 の索引を最適化しました。 #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 capabilities を追加しました。これは Graviton 2+、Azure、GCP のインスタンスでサポートされています。clang-15 で つい最近 利用可能になったものです。 #41778 (Daniel Kutenin ).
文字列比較時に、一方の argument が空の定数文字列である場合の性能を改善しました。 #41870 (Jiebin Sun ).
一部のケースで Aggregate State を共有できるよう、ColumnAggregateFunction の insertFrom を最適化しました。 #41960 (flynn ).
azure_blob_storage disk への書き込みを高速化しました (buffer サイズごとに 1 block 書き込むのではなく、max_single_part_upload_size に従います) 。この非効率性は #41754 で言及されていました。 #42041 (Kseniia Sumarokova ).
無駄を避けるため、process list と query_log 内のスレッド ID を一意にしました。 #42180 (Alexey Milovidov ).
要求された read range が cache 設定 bypass_cache_threashold で定義されたしきい値を超える場合、cache を完全にスキップできるようにしました (cache へのダウンロードと cache 済みデータの読み取りの両方をスキップします) 。これを有効にするには enable_bypass_cache_with_threshold を有効化する必要があります。 #42418 (Han Shukai ). これは低速なローカル disk で役立ちます。
改善点
設定 allow_implicit_no_password を追加: allow_no_password と併用すると、IDENTIFIED WITH no_password が明示的に指定されていない限り、パスワードなしのユーザーを作成できないようになります。 #41341 (Nikolay Degterinsky ).
埋め込み Keeper は常にバックグラウンドで起動するため、ClickHouse はクォーラムに達していなくても起動できるようになりました。 #40991 (Antonio Andelic ).
以前の接続の有効期限が切れた場合に、新しい ZooKeeper への connection の再確立をより迅速に行えるようにしました。従来は、デフォルトで毎分実行される task があったため、table がその間 readonly 状態になる可能性がありました。 #41092 (Nikita Mikhaylov ).
これで、プロジェクションをゼロコピー レプリケーションと併用できるようになりました (ゼロコピー レプリケーションは本番環境向けの機能ではありません) 。 #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 を変更できるようになりました。たとえば、ユーザーがまれにしかデータを挿入せず、デフォルト設定を調整するための server 設定にアクセスできない場合です。#40668 (Nikita Mikhaylov ).
リモートfilesystemからの読み取りを改善し、reads/writes 用のthreadpoolサイズを設定可能にしました。#41070 をクローズしました。#41011 (Kseniia Sumarokova ).
WindowTransform/arratReduce*/initializeAggregation/aggregate functions のバージョニングで、combinator のあらゆる組み合わせがサポートされるようになりました。以前は ForEach/Resample/Map のような combinator はこれらの箇所では動作せず、使用すると State function ... inserts results into non-state column のような例外が発生していました。 #41107 (Kruglov Pavel ).
復号に失敗した場合 (たとえば、誤った秘密鍵で復号した場合) に、例外をスローする代わりに NULL を返す関数 tryDecrypt を追加しました。 #41206 (Duc Canh Le ).
各ディスクで予約によって確保されていない容量を確認できるよう、system.disks テーブルに unreserved_space カラムを追加しました。#41254 (filimonov ) 。
テーブル関数の引数で S3 認証ヘッダーを使用できるようにしました。 #41261 (Kseniia Sumarokova ).
Keeper および内部 ZooKeeper クライアントで MultiRead をサポートしました (これは ZooKeeper プロトコルの拡張機能で、ClickHouse Keeper でのみ利用可能です) 。#41410 (Antonio Andelic ) 。
IN 演算子で、小数型を浮動小数点リテラルと比較できるようサポートを追加しました。#41544 (liang.huang ).
cache 設定で、1TB などの読みやすいサイズ指定を使用できるようにしました。#41688 (Kseniia Sumarokova ).
ClickHouse は、cache が非同期に更新されるまでの一定期間 (デフォルトでは 15 秒間) 、古い DNS エントリを cache してしまうことがありました。この間も ClickHouse は接続の確立を試み、エラーを発生させることがありました。この挙動は修正されました。#41707 (Nikita Mikhaylov ) 。
clickhouse-client/clickhouse-local に、fzf 風ユーティリティ (fzf/sk) による対話的な履歴検索を追加しました (なお、FZF_DEFAULT_OPTS/SKIM_DEFAULT_OPTIONS を使用して動作をさらに設定できます) 。 #41730 (Azat Khuzhin ).
無効な証明書を使用しているセキュアサーバーに接続するクライアントは、'–accept-certificate' フラグを指定した場合にのみ続行できるようにしました。 #41743 (Yakov Olkhovskiy ).
既存の関数 tryBase64Decode と同様の tryBase58Decode 関数を追加しました。#41824 (Robert Schulze ) 。
異なる主キーを持つパーティションに置き換える際のフィードバックを改善しました。#34798 を修正しました。#41838 (Salvatore ).
並列パースを修正: セグメンテータが max_block_size をチェックするようになりました。これにより、並列パース時に LIMIT が小さい場合に発生していたメモリの過剰割り当てが解消されました。 #41852 (Vitaly Baranov ).
システムテーブルに対する SELECT 中に発生して無視された場合、"TABLE_IS_DROPPED" Exception は 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が正しく反映されるようになり、数値をタイムスタンプとして日時を推論しなくなりました。Closes #41389 Closes #42206 . #41912 (Kruglov Pavel ).
perform_ttl_move_on_insert = false で insert する際に表示される紛らわしい警告を削除しました。#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 ) 。
Date32 引数を date_diff 関数で使用できるようにしました。開始日が Unix epoch より前、終了日が Unix epoch より後の場合に、date_diff 関数で DateTime64 引数を使用すると発生していた問題を修正しました。#42308 (Roman Vasin ) 。
大きなパーツを Minio にアップロードする際、'Complete Multipart Upload' に時間がかかることがあります。Minio は 10 秒ごとにハートビートを送信します (https://github.com/minio/minio/pull/7198 を参照) 。しかし、既定の送受信タイムアウトが 5 秒に設定 されているため、ClickHouse はそれより前にタイムアウトします。#42321 (filimonov ) 。
Decimal などの複合型において、集約状態型の CAST がまれに無効になる問題を修正しました。これにより #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 )。
ビルド/テスト/パッケージングの改善
バグ修正 (正式な stable または prestable リリースでユーザーに影響する不具合)
大きな整数型の LowCardinality に対して、適切な集約方法を選択するようにしました。#42342 (Duc Canh Le ).
web ディスクに対するいくつかの修正。 #41652 (Kseniia Sumarokova ).
config に 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 ).
22.9 では、20.3 以前のバージョンで作成され、その後一度も変更されていない ReplicatedMergeTree テーブルが起動に失敗することがありましたが、修正されました。#41742 を修正。 #41796 (Alexander Tokmakov ).
何らかの理由でバッチ送信に失敗すると、自動的に復旧できず、適時に処理されない場合はデータが蓄積していきます。また、出力されるエラーメッセージもどんどん長くなり、その結果、HTTPスレッドがブロックされます。 #41813 (zhongyuankai ).
compressed marks 設定での compact パーツの不具合を修正。 #41783 および #41746 を修正。 #41823 (alesapin )。
古いバージョンのReplicated databaseには、[Zoo]Keeper内に特別なマーカーがありません。特別なマークの代わりに、そのノードに何らかの不明なデータが含まれているかどうかだけを確認する必要があります。 #41875 (Nikita Mikhaylov ).
fs cache で発生する可能性がある例外を修正しました。 #41884 (Kseniia Sumarokova ).
S3テーブル関数におけるuse_environment_credentialsを修正しました。 #41970 (Kseniia Sumarokova ).
破損した part の detach 時に発生し、ReplicatedMergeTree table のレプリケーション開始を妨げる可能性があった "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 ).
設定 "enable_extended_results_for_datetime_functions = 1" を有効にした場合に、拡張範囲の先頭 (1900年1月) で SQL 関数 toLastDayOfMonth が正しく動作しない問題を修正しました。 - 設定 "enable_extended_results_for_datetime_functions = 1" を有効にした場合に、拡張範囲の末尾 (2299年12月) で SQL 関数 "toRelativeWeekNum()" が正しく動作しない問題を修正しました。 - 不要な索引演算を避けることで、SQL 関数 "toISOYear()"、"toFirstDayNumOfISOYearIndex()"、および "toYearWeekOfNewyearMode()" のパフォーマンスを改善しました。 #42084 (Roman Vasin ).
各テーブルの fetches の最大数が、誤って 8 に設定されていましたが、プールサイズはそれより大きくなる場合がありました。現在は、テーブルの fetches の最大数がプールサイズと同じになっています。#42090 (Nikita Mikhaylov ).
テーブルの依存関係を壊さずにドロップできるかどうかを確認する前に、テーブルがシャットダウンされ、Dictionary がデタッチされることがありましたが、この問題を修正しました。#41982 を修正しました。#42106 (Alexander Tokmakov ).
ファイルシステムキャッシュ使用時に remote_filesystem_read_method=read で発生する深刻な非効率を修正しました。#42125 をクローズしました。#42129 (Kseniia Sumarokova ).
use_hedged_requests = 0 の場合に分散クエリで発生する可能性があるタイムアウト例外を修正しました。 #42130 (Azat Khuzhin ).
runningDifference 関数を Date32 型で使用した際に発生する、関数内部の軽微なバグを修正しました。以前は Date が使われていたため、Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>' のような論理エラーを引き起こす可能性がありました。#42143 (Alfred Xu ).
base backup から 4GB を超えるファイルを再利用する際の問題を修正。 #42146 (Azat Khuzhin ).
ソートキーの先頭カラムに関数が含まれていると、DISTINCT in order が LOGICAL_ERROR で失敗する問題を修正しました。 #42186 (Igor Nikonov ).
projections と aggregate_functions_null_for_empty 設定に関する不具合を修正しました。この不具合は非常にまれで、サーバー設定で aggregate_functions_null_for_empty を有効にしている場合にのみ発生します。これにより #41647 をクローズします。#42198 (Alexey Milovidov ) 。
Buffer テーブルに対する read in order desc での読み取りを修正しました。#42236 (Duc Canh Le ).
デフォルトプロファイルで background_pool_size 設定はされているものの、background_merges_mutations_concurrency_ratio が設定されていない場合に ClickHouse が起動しなくなるバグを修正しました。 #42315 (nvartolomei ).
ALTER UPDATE で、テーブルのスキーマと異なるカラムを持つアタッチされた part に対して操作すると、ディスク上に無効な columns.txt メタデータが作成される可能性がありました。そのような part からの読み取りは、エラーで失敗したり、無効なデータを返したりすることがありました。#42161 を修正しました。#42319 (Nikolai Kochetov ).
additional_table_filters の設定は Distributed ストレージには適用されていませんでした。#41692 を修正しました。#42322 (Nikolai Kochetov ).
クエリの終了/キャンセル時に発生するデータ競合を修正しました。これにより #42346 がクローズされます。#42362 (Alexey Milovidov ).
これは、日付/時刻関数におけるリグレッションを引き起こした #40217 を取り消すものです。 #42367 (Alexey Milovidov ).
偽となる条件での JOIN における assert cast を修正し、#42380 をクローズしました。 #42407 (Vladimir C ).
Decimalデータ型の処理におけるバッファオーバーフローを修正しました。これにより、#42451 をクローズします。#42465 (Alexey Milovidov ).
AggregateFunctionQuantile は、UInt128 カラムでも正しく動作するようになりました。従来は quantile state が 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) 。 プレゼンテーション , ビデオ
後方互換性を持たない変更
ReplicatedMergeTree テーブルがある場合、20.3 以前から 22.9 以降へアップグレードする際は、中間バージョンを経由する必要があります。そうしないと、新バージョンのサーバーは起動しません。#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 を追加しました。- 有効にすると、すべての JSON フォーマットで UTF-8 シーケンスを検証する新しい設定 input_format_json_validate_utf8 を追加しました。デフォルトでは無効です。この設定は出力フォーマット JSON/JSONCompact/JSONColumnsWithMetadata には影響しない点に注意してください。これらは常に UTF-8 シーケンスを検証します (これは互換性のための例外です) 。- String カラム内の数値を解析できるようにする新しい設定 input_format_json_read_numbers_as_strings を追加しました。この設定はデフォルトで無効です。- 小数を二重引用符付きで出力できる新しい設定 output_format_json_quote_decimals を追加しました。デフォルトでは無効です。- データのインポート時に二重引用符で囲まれた小数を解析できるようにしました。#40910 (Kruglov Pavel ).
DESCRIBE TABLE クエリでクエリパラメータをサポートしました。#40952 (Nikita Taranov ).
Parquet Time32/64 を DateTime64 に変換する形でサポートしました。Parquet time32/64 は午前 0 時からの経過時間を表すのに対し、DateTime32/64 は実際の Unix timestamp を表します。変換では単に 0 からのオフセットを加えます。#41333 (Arthur Passos ).
Apache Datasketches の集合演算を実装しました。#39919 (Fangyuan Deng ). 注: Apache Datasketches を使う意味はありません。ClickHouse より劣っており、他のシステムとのインテグレーションでのみ意味があります。
テキストフォーマット (CSV, TSV) の読み取り中に、指定したファイルへエラーを記録できるようにしました。#40516 (zjial ).
実験的機能
パフォーマンス改善
マークと主キーの圧縮を実装。#34437 をクローズ。#37693 (zhongyuankai ).
threadpool を使って marks を事前に読み込めるようになりました。設定 load_marks_asynchronously (デフォルト: 0) で制御されます。#40821 (Kseniia Sumarokova ).
S3 上の仮想ファイルシステムでは、AWS でのパフォーマンス向上のため、複数のパスプレフィックスに分散されたランダムなオブジェクト名を使用するようになりました。#40968 (Alexey Milovidov ) 。
単一レベルの集約結果の生成時に max_block_size の値を考慮するようになりました。これにより、後続のクエリプランのステップをより多くのスレッドで実行できるようになります。 #39138 (Nikita Taranov ).
aggregation における hash table の処理を高速化するために、software prefetch を使用します。設定 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 パーツのミューテーション実行時にメモリ使用量が過大になる問題を修正しました。 #41122 (lthaooo ).
ARM で vectorscan ライブラリを有効にし、regexp の評価を高速化しました。#41033 (Robert Schulze ) 。
regexp の評価を高速化する多数のパフォーマンス最適化を含む vectorscan 5.4.8 にアップグレードしました。#41270 (Robert Schulze ) 。
VFS (S3 など) でローカルのファイルシステムキャッシュがスキップされてしまう誤ったフォールバックが、同時実行数が非常に高い場合に発生していた問題を修正しました。#40420 (Kseniia Sumarokova ).
行ポリシーのフィルタが常に false の場合、データをまったく読み取らずに即座に空の結果を返すようになりました。これにより #24012 がクローズされました。#40740 (Amos Bird ).
Float データ型に対する並列ハッシュ JOIN は最適でない場合がありました。改善しました。 #41183 (Alexey Milovidov ).
改善
ビルド/テスト/パッケージングの改善
バグ修正
ClickHouse リリース 22.8、2022-08-18。 プレゼンテーション , ビデオ
後方互換性を持たない変更
Date32 と DateTime64 の対応範囲を拡張し、西暦 1900 年から 2299 年までの日付をサポートするようにしました。以前のバージョンでサポートされていた範囲は、西暦 1925 年から 2283 年までに限られていました。実装では、ユリウス暦からグレゴリオ暦への歴史的な移行を考慮するのではなく、プロレプティック・グレゴリオ暦 (ISO 8601 :2004 (clause 3.2.1 The Gregorian calendar) に準拠) を使用しています。この変更は、範囲外の引数に対する実装依存の挙動に影響します。たとえば、以前のバージョンで 1899-01-01 の値が 1925-01-01 に切り詰められていた場合、新しいバージョンでは 1900-01-01 に切り詰められます。また、インターバルは実装依存の起点から数えられるため、INTERVAL 3 QUARTER を渡した場合の toStartOfInterval による丸めの挙動も、最大で 1 四半期分変わります。#28216 をクローズし、#38393 を改善します。#39425 (Roman Vasin )。
関連するすべての Dictionary ソース が remote_url_allow_hosts 設定に従うようになりました。これはすでに HTTP、Cassandra、Redis では対応済みでしたが、今回 ClickHouse、MongoDB、MySQL、PostgreSQL にも追加されました。ホストのチェックは、DDL から作成された辞書に対してのみ行われます。#39184 (Nikolai Kochetov )。
ビルド済みの ClickHouse x86 バイナリでは、AVX 命令をサポートする CPU が必要になりました。つまり、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 )。
ネイティブプロトコルで Quota キーを設定できるようになりました (Yakov Olkhovsky ) 。
設定 exact_rows_before_limit (0/1) を追加しました。有効にすると、ClickHouse は rows_before_limit_at_least 統計の正確な値を返しますが、その代わりに limit より前のデータをすべて読み取る必要があります。これにより #6613 をクローズします。#25333 (kevin wan )。
s3Cluster テーブル関数を使った、Distributed および Replicated エンジンのテーブルに対する並列 distributed insert select をサポートしました #34670 。#39107 (Nikita Mikhaylov )。
text formats からのスキーマ推論を制御する新しい設定を追加しました: - input_format_try_infer_dates - 文字列から日付を推論します。 - input_format_try_infer_datetimes - 文字列から DateTime 型を推論します。 - 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 parameter を追加しました。#37285 (Roman Vasin ) 。
非圧縮 cache と marks cache に SLRU cache ポリシーを追加。(Kseniia Sumarokova ). #34651 (alexX512 ). ローカル cache 機能と cache アルゴリズムを分離。 #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 ).
DISTINCT を ORDER BY と同じ順序で処理: 入力ストリームのソート記述に基づいてソート方法を決定します。入力ストリームがすでにソート済みの場合は、ソートをスキップします。#38719 (Igor Nikonov )。メモリ使用量を (大幅に) 改善し、クエリ実行時間を短縮しました。さらに、DISTINCT のカラムが ORDER BY のカラムと一致する場合、最終的な distinct に DistinctSortedChunkTransform を使用しますが、EXPLAIN PIPELINE ではこれを DistinctSortedStreamTransform に改名します → これによりメモリ使用量が大幅に改善されます。加えて、DistinctSortedChunkTransform のホットループ内にある不要な割り当てを削除しました。#39432 (Igor Nikonov )。ソート記述が DISTINCT カラムに適用可能な場合にのみ DistinctSortedTransform を使用し、それ以外の場合は通常の DISTINCT 実装にフォールバックします。これにより、DistinctSortedTransform の実行中に必要なチェックを減らせます。#39528 (Igor Nikonov )。修正: DistinctSortedTransform がソートを活用できていませんでした。clearing_columns が誤って検出されていたため (常に空) 、HashSet が一度もクリアされていませんでした。その結果、実質的には通常の DISTINCT (DistinctTransform) として動作していました。この修正により、メモリ使用量が大幅に削減されます。#39538 (Igor Nikonov ).
cluster および同様のテーブル関数の実行時にリモートテーブルの structure を取得する際は、ローカルノードが最優先で使用されるようになりました。 #39440 (Mingliang Pan ).
AVX512VBMI2 compress store により、数値カラムでのフィルタリングを最適化しました。#39633 (Guo Wangyang )。AVX512 VBMI2 を備えたシステムでは、この PR により SSB ベンチマーククエリ 3.1、3.2、3.3 (SF=100) のパフォーマンスが約 6% 向上します。Intel Icelake Xeon 8380 * 2 socket でテストしました。#40033 (Robert Schulze ).
マルチスレッド環境における関数式を用いた索引解析を最適化しました。 #39812 (Guo Wangyang ) 。
複雑なクエリの最適化: 登録済みの UDF がない場合は、UDF の AST を走査しないようにしました。#40069 (Raúl Marín ) 。CurrentMemoryTracker の alloc と free を最適化しました。#40078 (Raúl Marín ) 。
Base58のエンコード/デコードを改善しました。#39292 (Andrey Zvonov ) 。
SSE/AVX/AVX512 向けの bytes から bits へのマスク変換を改善。 #39586 (Guo Wangyang ).
改善
#35788 のような最適化では count(not null columns) が count() として扱われるため、AggregateFunction 型と state 表現を正規化しました。これにより、分散インタープリタで Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported というエラーが発生して混乱を招く可能性があります。 #39420 (Amos Bird )。同一の state を持つ関数は、materialized view で相互に置き換えて使用できます。
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 を扱う際に、サブ秒の duration と slot size を利用できるようになりました。#37951 (Andrey Zvonov ).
EmbeddedRocksDB テーブルにおける LEFT SEMI および LEFT ANTI direct join への対応を追加しました。#38956 (Vladimir C ) 。
fsync操作の profile events を追加しました。#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 ) 。
外部 aggregation が有効な場合に、集約プロジェクションのビルドを修正しました。このケースはまれで、設定変更で簡単に回避できるため、改善として扱っています。これにより #39667 を修正します。 #39671 (Amos Bird ).
型 Map の引数に対してハッシュ関数を実行できるようにしました。 #39685 (Anton Popov ).
スタックトレース内のアドレスを隠すための設定パラメーターを追加しました。セキュリティがわずかに向上する可能性はありますが、一般的には有害であり、使用すべきではありません。 #39690 (Alexey Milovidov ).
AggregateFunctionDistinct のプレフィックスサイズを変更し、ネストされた関数データのメモリセグメントが適切にアラインされるようにしました。#39696 (Pxl ).
clickhouse-diagnostic ツールに渡す認証情報が適切にエスケープされるようになりました。#39707 (Dale McDiarmid ) 。
ClickHouse Keeper の改善: 終了時に snapshot を作成するようになりました。これは設定 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キーを認識しつつ、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 以降) 。これは、Cloud のパフォーマンスを正しく比較するために必要です。この動作は、新しい --client-side-time コマンドラインオプションで変更できます。--randomize コマンドラインオプションを、--randomize 1 から引数なしの形式に変更しました。#40193 (Alexey Milovidov ).
クエリの複雑さの制限が設定され、その上限に達した場合のためのカウンター (ProfileEvents) を追加しました (overflow_mode = break と throw にはそれぞれ別のカウンターがあります) 。たとえば、max_rows_to_read に対して read_overflow_mode = 'break' を設定している場合、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)() の使用時に、pattern cache のメモリ消費量が継続的に増加する問題を防止しました。#40264 (Robert Schulze ) 。
ビルド/テスト/パッケージングの改善
バグ修正
ClickHouse リリース 22.7、2022-07-21。 プレゼンテーション 、ビデオ
アップグレードに関する注意
デフォルトで設定 enable_positional_arguments を有効化しました。これにより、1、2 を SELECT 句への参照として使う SELECT ... ORDER BY 1, 2 のようなクエリを実行できます。以前の動作に戻す必要がある場合は、この設定を無効にしてください。 #38204 (Alexey Milovidov ) 。
デフォルトで format_csv_allow_single_quotes を無効化しました。 #37096 を参照してください。 (Kruglov Pavel ) 。
Ordinary データベースエンジンと、*MergeTree テーブル向けの古いストレージ定義構文は非推奨になりました。デフォルトでは、Ordinary engine を使った新しい database は作成できません。system database が Ordinary engine の場合、server の起動時に自動的に 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 join アルゴリズムを追加しました。詳細は #33582 を参照してください。#35363 (Vladimir C ) 。
full sorting merge join アルゴリズムが追加されました。#35796 (Vladimir C ) 。
NATS での pub/sub を可能にする NATS テーブルエンジンを実装しました。#32388 をクローズしました。#37171 (tchepavel ). (Kseniia Sumarokova )
table function mongodb を実装しました。MongoDB ストレージ / table function への書き込みに対応しました。 #37213 (aaapetrenko ). (Kseniia Sumarokova )
SQLInsert 出力フォーマットを追加しました。#38441 をクローズしました。#38477 (Kruglov Pavel ) 。
設定 additional_table_filters が導入されました。この設定を使用すると、読み取り直後に適用される、table に対する追加の filter 条件を指定できます。Example: 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'}。クエリ結果に対する追加の filter 条件を指定する設定 additional_result_filter も導入されました。#37918 を解決しました。#38475 (Nikolai Kochetov ).
ClickHouse のバージョン間における設定変更の情報を含む compatibility 設定と 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 ).
リモートストレージに対するIO操作を制限するためのオプション max_remote_read_network_bandwidth_for_server と max_remote_write_network_bandwidth_for_server を追加しました。#39095 (Sergei Trifonov ).
ROLLUP、CUBE、GROUPING SETS の場合に集約キーのカラムを 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の検索文字列引数を受け取れるようになりました。#39167 (Robert Schulze ) 。
外部ファイルのインポート時に、zstd のデコードにおける最大メモリ使用量を設定するための zstd_window_log_max 設定を追加しました。#35693 をクローズしました。#37015 (wuxiaobai24 ).
send_logs_source_regexp 設定を追加しました。指定した正規表現に一致するログソース名のサーバーテキストログを送信します。空の場合は、すべてのソースを意味します。#39161 (Amos Bird ).
Hive テーブルで ALTER をサポートしました。 #38214 (lgbo ).
isNullable 関数をサポートしました。この関数は、argument が 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 ).
パフォーマンス改善
改善
ビルド/テスト/パッケージングの改善
バグ修正 (公式の安定版またはプレ安定版リリースでユーザーに影響する不具合)
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 バージョンを実行している場合、またはクラスター内で AArch64 と amd64 を混在させている場合に、256 ビットには収まるものの 64 ビットには収まらない固定長型の複数キーを GROUP BY に使う分散クエリを実行し、その結果サイズが非常に大きいと、アップグレード中はこれらのクエリ結果のデータが完全には集計されません。回避策: ローリングアップグレードではなく、ダウンタイムを伴うアップグレードを行ってください。
新機能
実験的機能
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 ) 。
wide パーツの読み取り時に、必要なカラムのマークだけを読み込むようになりました。#36879 (Anton Kozlov ).
スパースカラム (MergeTree テーブルで実験的な設定 ratio_of_defaults_for_sparse_serialization により有効化可能) が集約関数の引数として使用される場合の、集約処理のパフォーマンスを改善しました。#37617 (Anton Popov ).
引数が2つの関数 COALESCE を最適化しました。#37666 (Anton Popov ) 。
条件が 1 つしかない multiIf は、より高性能な関数 if に置き換えます。 #37695 (Anton Popov ).
dictGetDescendants、dictGetChildren 関数のパフォーマンスを改善し、クエリ実行中は関数呼び出しごとではなくクエリごとに、一時的な親子階層の索引を作成するようにしました。HIERARHICAL 属性に BIDIRECTIONAL を指定できるようになり、Dictionary が親から子への索引をメモリ内で保持するため、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 への insert のパフォーマンスを改善。 #35762 (Maksim Kita ).
テーブル数が非常に多い場合に、バックグラウンドでの過剰な CPU 使用を修正しました。 #38028 (Maksim Kita ).
動的ディスパッチによりnot関数のパフォーマンスを改善しました。#38058 (Maksim Kita ).
LIKE 関数や MATCH 関数などで使用される re2 パターンの内部キャッシュを最適化しました。#37544 (Robert Schulze ) 。
AVX-512 命令を使用し、オールインワンのfilterビットマスク生成関数を改善。 #37588 (yaqi-zhao ).
Hiveインテグレーションエンジンの読み取り方式に threadpool を適用しました。これにより、読み取りが大幅に高速化されます。 #36328 (李扬 ).
読み取るすべてのカラムがパーティションキーである場合、Hiveファイルを実際には読み取らずに、ファイルの行番号に基づいてカラムを構築します。 #37103 (lgbo ).
Hive ファイルのキャッシュで複数のディスクに対応。 #37279 (lgbo ).
クエリごとの最大 cache 使用量を制限することで、cache プールの汚染を効果的に防止できます。関連 issue 。#37859 (Han Shukai ) 。
現在、ClickHouse はすべてのリモートファイルをローカル cache に直接ダウンロードしています (たとえ一度しか読み取られない場合でも) 。そのため、ローカルハードディスクで頻繁に IO が発生します。状況によっては、こうした IO は不要であり、かえって性能低下を招く可能性があります。以下の図に示すように、SSB Q1-Q4 を実行した際には、cache が逆に性能悪化の要因となっています。 #37516 (Han Shukai ) 。
S3 から読み取る際に、_file や _path などの仮想カラムを使ってファイル一覧を絞り込めるようにしました。これは #37174 、#23494 に対応するものです。#37356 (Amos Bird ).
関数 CompressedWriteBuffer::nextImpl() では、データの insert 時に頻繁に発生する不要な 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 でのスタックトレース収集を修正。#37044 をクローズ。#15638 をクローズ。#37797 (Maksim Kita ).
クライアントは、接続に成功するまで、DNS 名前解決で返されたすべての IP アドレスを順に試行します。 #37273 (Yakov Olkhovskiy ) 。
Arrow/Parquet/ORC フォーマットで、Binary の代わりに String type を使用できるようになりました。この PR では、そのために 3 つの新しい設定 output_format_arrow_string_as_string、output_format_parquet_string_as_string、output_format_orc_string_as_string が導入されました。すべての設定のデフォルト値は false です。#37327 (Kruglov Pavel ) 。
input_format_max_rows_to_read_for_schema_inference 設定が、glob 内のすべてのファイルから読み取る全行数に対して適用されるようになりました。従来は、input_format_max_rows_to_read_for_schema_inference 設定が glob 内の各ファイルに個別に適用されていたため、NULL が非常に多い場合、各ファイルの先頭 input_format_max_rows_to_read_for_schema_inference 行を読み取っても何も取得できないことがありました。あわせて、この設定のデフォルト値も 25000 に引き上げました。#37332 (Kruglov Pavel ).
個別の CLUSTER 権限 (および、後方互換性のためデフォルト値が false の access_control_improvements.on_cluster_queries_require_cluster_grant 設定ディレクティブ) を追加しました。#35767 (Azat Khuzhin ) 。
hdfsCluster でのスキーマ推論のサポートが追加されました。#35812 (Nikita Mikhaylov ) 。
volume 内のディスク (マルチディスク構成) 向けに、least_used ロードバランシングアルゴリズムを実装。 #36686 (Azat Khuzhin ).
send_progress_in_http_headers=0 の場合、HTTPエンドポイントが X-ClickHouse-Summary ヘッダーで完全な統計情報を返すように変更しました (以前はすべて 0 を返していました) 。 - 進捗が事前に送信されていた場合 (send_progress_in_http_headers=1) 、HTTPエンドポイントが X-ClickHouse-Exception-Code ヘッダーを返すように変更しました - TIMEOUT_EXCEEDED エラー時に、HTTPエンドポイントが HTTP_INTERNAL_SERVER_ERROR (500) ではなく HTTP_REQUEST_TIMEOUT (408) を返すように変更しました。 #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 ).
これで、分片にローカルレプリカがある場合は、ローカルプランと、すべてのリモートレプリカから読み取るためのプランを作成します。これらは、読み取りを調整する共通のイニシエーターによって管理されます。#37204 (Nikita Mikhaylov ).
設定オプション "mark_cache_size" が明示的に設定されていない場合でも、サーバーの起動を中止しないようにしました。 #37326 (Robert Schulze ) 。
カラム宣言で、型の直後に NULL/NOT NULL を指定できるようになりました。 #37337 (Igor Nikonov ).
file segment PARTIALLY_DOWNLOADED の読み取りバッファの取得を最適化しました。 #37338 (xiedeyantu ).
ストレステストで発生する問題を修正するため、短絡関数の処理を改善しました。 #37384 (Kruglov Pavel ).
#37395 をクローズ。#37415 (Memo ) 。
ゼロコピーレプリケーションにおける part の fetch 中に発生する、きわめてまれなデッドロックを修正しました。#37423 を修正しました。#37424 (metahys ).
不明なデータフォーマットでストレージが作成されないようにしました。#37450 (Kruglov Pavel ) 。
global_memory_usage_overcommit_max_wait_microseconds のデフォルト値を 5 秒に設定。OOM 例外メッセージに OvercommitTracker に関する情報を追加。MemoryOvercommitWaitTimeMicroseconds プロファイルイベントを追加。#37460 (Dmitry Novik ) 。
clickhouse-client で CPU 時間に -0.0 が表示されないようにしました。これは丸め誤差によって発生することがあります。これにより #38003 をクローズします。これにより #38038 をクローズします。#38064 (Alexey Milovidov )。
Play UI: ページを横方向にスクロールしても、コントロールが固定されたままになりました。これにより、テーブルの横幅が広く、右端まで大きくスクロールしている場合でも、快適に編集できます。CaspianDB の Maksym Tereshchenko によって提案された機能です。#37470 (Alexey Milovidov ).
play.html のクエリ div を、20% の高さを超えて拡張できるように修正しました。非常に長いクエリでは textarea 要素を拡張できると便利ですが、現状では div の高さが固定されているため、拡張した textarea が下にある data div を隠してしまいます。この修正により、textarea 要素を拡張すると data div もそれに合わせて上下に移動するため、拡張した textarea に隠れなくなります。あわせて、ユーザーがクエリ textarea のサイズを調整しても、クエリボックスの幅は 100% のまま維持されます。#37488 (guyco87 ).
書き込まれたパーツ (挿入されたものまたはマージされたもの) の種類を introspection するための 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) により期限切れになったカラムを書き込まないようになりました (以前は、part の最初の merge/optimize のときにだけ、有効期限 (TTL) により期限切れになったカラムは書き込まれず、それ以外では書き込まれていました) 。#37570 (Azat Khuzhin ).
LowCardinality または スパースなカラムがある場合、その他の関数 dumpColumnStructure の結果がより正確になりました。以前のバージョンでは、これらの関数は結果を返す前に引数をフルカラムに変換していました。これは #6935 に対応するために必要です。 #37633 (Alexey Milovidov ).
clickhouse-keeper: ウォッチでは一意のセッションIDのみを保存するようにしました。 #37641 (Azat Khuzhin ).
"Cannot write to finalized buffer" が発生する可能性がある問題を修正しました。 #37645 (Azat Khuzhin ).
Google Cloud Storage ではサポートされていない複数オブジェクト削除呼び出しを無効にするため、DiskS3 に support_batch_delete 設定を追加しました。 #37659 (Fred Wulff ).
ODBC bridge で接続プーリングを無効化するオプションを追加しました。 #37705 (Anton Kozlov ) 。
関数 dictGetHierarchy、dictIsIn、dictGetChildren、dictGetDescendants で、ディクショナリ内の Nullable な HIERARCHICAL 属性がサポートされるようになりました。#35521 を修正しました。#37805 (Maksim Kita )。
system.build_options テーブルに BoringSSL のバージョン関連情報を追加。 #37850 (Bharat Nallan ).
clickhouse-server は、サーバー起動時に delete_tmp ディレクトリを削除するようになりました。#26503 を修正しました。#37906 (alesapin )。
タイムアウト後に破損したデタッチされたパーツをクリーンアップしました。#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 ).
ビルド/テスト/パッケージングの改善
バグ修正
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 ).
新機能
実験的機能
配列向けに L1、L2、Linf、Cosine の距離関数と、L1、L2、Linf のノルム関数を実装しました。
#37033 (qieqieplus ). 注意: これらの関数は今後リネームされる予定です。
WindowView の WATCH クエリを改善しました: 1. fire_condition シグナルを呼び出すことで、クエリ結果の返却レイテンシを削減。2. isCancelled() の確認頻度を上げることで、クエリのキャンセル操作 (ctrl-c) を高速化。 #37226 (vxider ).
ファイルシステムキャッシュの削除に関するイントロスペクションを追加しました。 #36802 (Han Shukai ).
SQL 向けに新しい hash function wyHash64 を追加しました。 #36467 (olevino ).
replicated databases の改善: 現在は同期が非同期で行われるため、Replicated database 内の table メタデータを同期できる SYSTEM SYNC DATABASE REPLICA クエリを追加しました。 #35944 (Nikita Mikhaylov ).
リモートファイルシステムキャッシュの改善: cache からの読み取りを改善しました。 #37054 (Kseniia Sumarokova ). SYSTEM DROP FILESYSTEM CACHE クエリを改善し、<path> オプションおよび FORCE オプションを追加しました。 #36639 (Kseniia Sumarokova ).
半構造化データの改善: 型 Object(...) のカラムを Object(Nullable(...)) に CAST できるようにしました。 #36564 (awakeljw ).
並列レプリカの改善: localhost レプリカでクエリを実行する場合はローカルインタープリターを作成します。一方、複数のレプリカでクエリを実行する場合は、レプリカがコーディネーターと通信するための connection が存在することを前提にしています。今回の改善により、localhost レプリカも同一プロセス内で直接コーディネーターと通信できるようになりました。 #36281 (Nikita Mikhaylov ).
パフォーマンス改善
avg、sum 集約関数を GROUP BY 式なしで使用する場合のパフォーマンスを改善しました。#37257 (Maksim Kita ).
動的ディスパッチを用いて、単項算術関数 (bitCount、bitNot、abs、intExp2、intExp10、negate、roundAge、roundDuration、roundToExp2、sign) のパフォーマンスを改善しました。#37289 (Maksim Kita ).
ソートカラムのコンパレータを JIT コンパイルすることで、ORDER BY、MergeJoin、MergeTree への insert のパフォーマンスを改善しました。#34469 (Maksim Kita ).
system.asynchronous_metric_log の構造を変更しました。使用容量は約 10 分の 1 になります。これにより #36357 をクローズします。event_time_microseconds フィールドは不要なため削除されました。#36360 (Alexey Milovidov ).
wide パーツの読み取り時に、必要なカラムの marks のみをロードするようにしました。#36879 (Anton Kozlov ).
mutex のスコープを狭めることで、ファイルディスクリプタ cache のパフォーマンスを改善しました。#36682 (Anton Kozlov ).
path に globs が含まれ、マッチした directory に大量のファイルがある場合の、ストレージ File および table function file からの読み取りパフォーマンスを改善しました。#36647 (Anton Popov ).
input format HiveText に並列パースを適用しました。これにより、ローカルファイルの読み取り時に HiveText のパースが 2 倍高速になる可能性があります。#36650 (李扬 ).
デフォルトの HashJoin は右側 table の行の insert に対してスレッドセーフではないため、これを単一スレッドで実行します。右側 table が大きい場合、CPU 使用率が低く、join 処理が非常に遅くなります。#36415 (lgbo ).
select countDistinct(a) from t を select count(1) from (select a from t groupBy a) に rewrite できるようにしました。#35993 (zhanglistar ).
OR LIKE chain を multiMatchAny に変換します。十分に動作するという確信が得られた段階で有効化します。#34932 (Daniel Kutenin ).
インライン化により、一部の関数のパフォーマンスを改善しました。#34544 (Daniel Kutenin ).
readBig で不要な memcpy を回避するためのブランチを追加しました。これによりパフォーマンスが多少改善されます。#36095 (jasperzhu ).
optimize_aggregation_in_order 向けに、部分的な GROUP BY key を実装しました。#35111 (Azat Khuzhin ).
改善
ビルド/テスト/パッケージングの改善
バグ修正
ClickHouse リリース 22.4、2022-04-19。プレゼンテーション 、ビデオ
後方互換性を持たない変更
INSERTクエリでは、FORMAT の後に SETTINGS を指定できなくなりました (そのようなクエリを受け入れるための互換性設定 allow_settings_after_format_in_insert はありますが、デフォルトでは OFF です) 。 #35883 (Azat Khuzhin ).
関数 yandexConsistentHash (Konstantin "kostik" Oblakov による consistent hash アルゴリズム) は、kostikConsistentHash に名前が変更されました。古い名前は互換性維持のため、alias として残されています。この変更自体は後方互換ですが、今後の release でこの alias が削除される可能性があるため、アプリ内でこの関数を使用している箇所を更新することを推奨します。 #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 ) 。
insertクエリ中の書き込みバイト数を制限する新しい種類のクォータ WRITTEN BYTES をサポートしました。#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 を導入しました (出力 Protobuf で、すべてのレコードを repeated messages として表現します) 。 #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 ).
Replicated database でクラスターシークレットを指定できるようになりました。#35333 (Nikita Mikhaylov ) 。
server の起動時に、利用可能なメモリやディスク容量、最大スレッド数などを確認する基本チェックを追加しました。 #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 ).
すべての書き込み操作で リモートファイルシステムキャッシュ に書き込めるようにしました。system.remote_filesystem_cache テーブルを追加しました。drop remote filesystem cache クエリを追加しました。system.remote_data_paths テーブルで S3 メタデータの イントロスペクション を追加しました。#34021 をクローズしました。モード read_from_filesystem_cache_if_exists_otherwise_bypass_cache を追加し、merges 向けの cache オプションを追加しました (merges ではデフォルトで有効で、同名のクエリ設定でも有効にできます) 。cache 関連の設定名を変更しました (remote_fs_enable_cache -> enable_filesystem_cache など) 。#35475 (Kseniia Sumarokova ).
パーツのメタデータを RocksDB に保存するオプションを追加しました。MergeTree のパーツ loading プロセスを高速化し、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 ).
aggregation 中に使用される hash table のサイズが収集されるようになり、後続のクエリで hash table のリサイズを回避するために利用されます。#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 storage への multipart upload を並列化しました。#35343 (Sergei Trifonov ).
URL storage engine は、endpoint が HTTP Range をサポートしている場合、複数の chunk を並列にダウンロードするようになりました。さらに、max_download_threads と max_download_buffer_size という2つの設定が追加され、単一のクエリがファイルのダウンロードに使用できるスレッドの最大数と、各スレッドが処理できる最大バイト数を制御できます。#35150 (Antonio Andelic ).
複数のスレッドを使用して S3 から object をダウンロードするようになりました。ダウンロードは max_download_threads と max_download_buffer_size の設定で制御できます。#35571 (Antonio Andelic ).
HDFS とやり取りする際の mutex のスコープを狭めました。#35292 に関連。#35646 (shuchaome ).
テーブル単位の 有効期限 (TTL) が変更された場合にのみ mutations が必要になるようにしました。#35953 (Azat Khuzhin ).
改善
スキーマ推論に複数の改善を加えました。いくつかの調整とヒューリスティクスにより、CSV、TSV、TSVRaw データフォーマットで数値、文字列、Array、Tuple、Map を判別できるようにしました。これらのヒューリスティクスの使用を有効/無効にする CSV フォーマット用の設定 input_format_csv_use_best_effort_in_schema_inference を追加しました。これが無効な場合は、すべてを文字列として扱います。TSV/TSVRaw フォーマット用にも同様の設定 input_format_tsv_use_best_effort_in_schema_inference を追加しました。これらの設定はデフォルトで有効です。- Values フォーマットのスキーマ推論で Map のサポートを追加しました。- 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 でスキーマ推論時のカラム名を指定できるようにしました。- Nullable カラムの扱いに関して、ORC/Arrow/Parquet フォーマットのスキーマ推論を修正しました。以前は推論されたすべての型が Nullable ではなかったため、データから Nullable カラムを読み取れませんでしたが、現在は修正され、推論されるすべての型は常に Nullable になります (スキーマを読むだけでは、そのカラムが Nullable かどうかを判断できないためです) 。- CSV のエスケープ規則を使用する Template フォーマットでのスキーマ推論を修正しました。#35582 (Kruglov Pavel ).
フォーマット JSONAsObject の並列パースとスキーマ推論を追加しました。 #35592 (Anton Popov ).
s3Cluster テーブル関数で自動スキーマ推論がサポートされました。s3 と s3Cluster のシグネチャを揃えました。#35544 (Nikita Mikhaylov ) 。
hdfsCluster でのスキーマ推論のサポートが追加されました。#35602 (Nikita Mikhaylov ) 。
JSON入力フォーマットで、bool値を数値として推論・解析できる新しい設定 input_format_json_read_bools_as_numbers を追加しました。これはデフォルトで有効になっています。@alexey-milovidov の提案によるものです。#35735 (Kruglov Pavel ) 。
TSKV および JSONEachRow フォーマットのスキーマ推論におけるカラム順を改善し、#35640 をクローズしました。TSKV および JSONEachRow フォーマットのスキーマ推論で空の行を読み取っても、スキーマ推論を停止しないようにしました。#35724 (Kruglov Pavel ).
ORC、Arrow、Parquet ファイルからデータを読み取る際に、ClickHouse でカラム名の大文字・小文字を区別しないマッチングを使用できるようにする設定 input_format_orc_case_insensitive_column_matching、input_format_arrow_case_insensitive_column_matching、input_format_parquet_case_insensitive_column_matching を追加しました。#35459 (Antonio Andelic ) 。
クライアントが TCP または HTTP 経由のセキュアな接続を使用しているかどうかを示す is_secure カラムが system.query_log に追加されました。#35705 (Antonio Andelic ).
これにより、低リソースのマシン (16コア未満) の場合、kafka_num_consumers を物理コア数より多く設定できるようになりました。#35926 (alesapin ).
engine=Kafka テーブルの監視用に、基本的なメトリクスをいくつか追加しました。 #35916 (filimonov ) 。
MergeTreeエンジンファミリーでは、存在しない設定に対する ALTER TABLE ... RESET SETTING が許可されなくなりました。#35816 を修正しました。#35884 (alesapin ) 。
これで、Array 型および Nullable 型に対する一部の ALTER MODIFY COLUMN クエリは、ミューテーションなしでメタデータレベルで実行できるようになりました。たとえば、Array(Enum8('Option1'=1)) を Array(Enum8('Option1'=1, 'Option2'=2)) に変更する場合です。#35882 (alesapin ).
クエリの実行中であることをユーザーに示すため、砂時計アイコンにアニメーションを追加しました。 #35860 (peledni ).
ALTER TABLE t DETACH PARTITION (ALL) に対応。 #35794 (awakeljw ).
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 ).
ビルド/テスト/パッケージングの改善
Functional tests にランダム化設定の次のバッチを追加しました。#35047 (Kruglov Pavel ).
ストレステストに後方互換性チェックを追加しました。#25088 をクローズしました。#27928 (Kruglov Pavel ).
パッケージビルドを nfpm に移行しました - release スクリプトを非推奨化し、packages/build に移行 - clickhouse/binary-builder イメージですべてをビルド - cmake にシンボルストリッピングを追加 (todo: use prefix/lib/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 ).
各イメージのビルド task を識別するためのラベルを追加しました。#35583 (Mikhail f. Shiryaev ).
Python コードに black フォーマッタを適用し、コミットごとのチェックを追加しました。#35466 (Mikhail f. Shiryaev ).
alpine イメージをクリーンな Dockerfile を使うように作り直しました。ubuntu と alpine の両方のイメージをビルドするスクリプトを tests/ci に追加しました。clickhouse-keeper イメージを追加しました (cc @nikitamikhaylov)。PullRequestCI にビルドチェックを追加しました。ReleaseCI に job を追加しました。MasterCI に job を追加し、マージされた各 PR ごとに clickhouse/clickhouse-server:head と clickhouse/clickhouse-keeper:head のイメージをビルドして push するようにしました。#35211 (Mikhail f. Shiryaev ).
CI の stress-test レポートを修正し、開始された stress test の情報を含む 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 ).
バグ修正
ClickHouse リリース v22.3-lts、2022-03-17。プレゼンテーション 、ビデオ
後方互換性を持たない変更
arrayCompact 関数が他の高階関数と同様に動作するように変更しました。ラムダ関数の結果ではなく、元の配列に対してコンパクションを実行します。arrayCompact で複雑なラムダ関数を使用している場合は、arrayCompact の引数を arrayMap でラップすることで以前の動作に戻せます。#34010 #18535 #14778 をクローズしました。#34795 (Alexandre Snarskii )。
関数 toDatetime のオーバーフロー時における実装依存の動作を変更しました。ラップアラウンドする代わりに、datetime でサポートされる直近の最小値または最大値の時点に飽和されます。この変更は、意図せず古い動作に依存している可能性があるため、「backward incompatible」として明示しています。#32898 (HaiBo Li )。
関数 cast(value, 'IPv4')、cast(value, 'IPv6') が、toIPv4、toIPv6 関数と同じように動作するようにしました。関数 toIPv4、toIPv6 に不正な IP アドレスが渡された場合の動作も変更され、無効な IP アドレスがこれらの関数に渡されると例外が発生するようになりました。以前はこれらの関数はデフォルト値を返していました。関数 IPv4StringToNumOrDefault、IPv4StringToNumOrNull、IPv6StringToNumOrDefault、IPv6StringOrNull、toIPv4OrDefault、toIPv4OrNull、toIPv6OrDefault、toIPv6OrNull を追加しました。不正なアドレスに対して IPv4StringToNum、toIPv4、toIPv6 がデフォルト値を返すことに以前のロジックが依存していた場合は、IPv4StringToNumOrDefault 、toIPv4OrDefault 、toIPv6OrDefault を使用する必要があります。setting cast_ipv4_ipv6_default_on_conversion_error も追加しました。この setting が有効な場合、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 (李扬 )。
Array 向けに startsWith および endsWith 関数を実装しました。#33982 をクローズしました。#34368 (usurai )。
Map データ型向けに 3 つの関数を追加しました: 1. mapReplace(map1, map2) - map1 内のキーに対応する値を、map2 内の対応するキーの値で置き換えます。さらに、map1 に存在しないキーは map2 から追加します。2. mapFilter 3. mapMap。mapFilter と mapMap は高階関数で、2 つの argument を受け取ります。最初の argument は k, v のペアを argument に取るラムダ関数で、2 番目の argument は Map 型のカラムです。#33698 (hexiaoting )。
CLICKHOUSE_USER および CLICKHOUSE_PASSWORD 環境変数から、clickhouse-client のデフォルトのユーザー名とパスワードを取得できるようにしました。#34538 をクローズしました。#34947 (DR )。
実験的機能
半構造化データ (現時点では JSON のみ) の保存をサポートする新しいデータ型 Object(<schema_format>) を追加しました。この型にはデータが文字列として書き込まれます。その後、半構造化データのフォーマットに従ってすべてのパスが抽出され、それぞれの値をすべて格納できる最適な型の個別のカラムとして書き込まれます。これらのカラムは、元データ内のパスに一致する名前でクエリできます。たとえば data.key1.key2 や、キャスト演算子を使った data.key1.key2::Int64 のように指定できます。
database_replicated_allow_only_replicated_engine 設定を追加しました。有効な場合、Replicated データベース内では Replicated テーブル、またはステートレスエンジンを使用するテーブルのみ作成できます。#35214 (Nikolai Kochetov )。なお、Replicated データベースは引き続き実験的機能です。
パフォーマンス改善
ソートの最適化により、MergeTree テーブルへの insert のパフォーマンスを改善しました。実運用に近い benchmark では、最大 2 倍の改善が確認されています。#34750 (Maksim Kita ).
URL および S3 から Parquet、ORC、Arrow ファイルを読み取る際のカラム pruning。 #34163 をクローズしました。#34849 (Kseniia Sumarokova ).
Hive から Parquet、ORC、Arrow ファイルを読み取る際のカラム pruning。#34954 (lgbo ).
パフォーマンス改善の達人による多数の最適化。大きな IN 句を含む queries の処理パフォーマンスを改善しました。ソースが ClickHouse の場合の direct Dictionary のパフォーマンスを改善しました。detectCharset 、detectLanguageUnknown 関数のパフォーマンスを改善しました。#34888 (Maksim Kita ).
より多くの batching を活用することで、any aggregate function のパフォーマンスを改善しました。#34760 (Raúl Marín ).
clickhouse-keeper のパフォーマンスを複数改善しました。ロックの削減 #35010 (zhanglistar )、完全コピーの代わりに snapshot の読み書きをストリーミング化することで memory usage を削減 #34584 (zhanglistar )、RAFT 実装における Log ストアの compaction の最適化 #34534 (zhanglistar )、内部データ structure のバージョン管理 #34486 (zhanglistar ).
改善
テーブル関数で非同期挿入を使えるようにしました。#34864 を修正しました。#34866 (Anton Popov ).
関数 dictGetHierarchy、dictIsIn、dictGetChildren、dictGetDescendants の key 引数に対する暗黙的な型キャスト。#34970 をクローズしました。#35027 (Maksim Kita ).
EXPLAIN AST クエリでは、AST を Graphviz フォーマットのグラフとして出力できます: EXPLAIN AST graph = 1 SELECT * FROM system.parts。 #35173 (李扬 ).
S3 table function または table engine で大きなファイルを書き込んだ際、AWS SDK のバグにより、ファイルの Content-Type が誤って application/xml に設定されていました。これにより #33964 がクローズされます。#34433 (Alexey Milovidov ) 。
制限的な row policy を少し変更し、簡単なケースでは許可的なポリシーよりも使いやすい代替手段にしました。特定のテーブルに制限的なポリシーしか存在しない場合 (許可的なポリシーがない場合) でも、ユーザーは一部の行を参照できます。また、SHOW CREATE ROW POLICY では、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 ).
table function view() で、設定 parallel_distributed_insert_select による分散 INSERT SELECT クエリをサポートしました。#35132 (Azat Khuzhin ).
AggregateFunction を伴う Buffer への INSERT 時のメモリ追跡が、より正確になりました。#35072 (Azat Khuzhin ) 。
Linuxカーネルにバグがある場合でも、クエリプロファイラでゼロ除算が発生しないようにしました。#34787 をクローズしました。#35032 (Alexey Milovidov ).
Keeper の設定に対する整合性チェックをさらに追加しました。localhost と非ローカルサーバーの混在が許可されなくなったほか、internal raft port と keeper client port の値が同一でないことを確認するチェックも追加されました。#35004 (alesapin ).
現在、ユーザーがシステムテーブルの設定を変更すると、大量のログが出力され、ClickHouse が毎分テーブル名を変更してしまいます。これにより #34929 が修正されます。#34949 (Nikita Mikhaylov ) 。
Hive metastore clientで接続プールを使用するようにしました。 #34940 (lgbo ).
新しいテーブルエンジンがこれをサポートしていない場合 (つまり、エンジンが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 )。
ユーザーがデータスキッピングインデックス名を誤って入力した場合に、ヒントを表示するようにしました。Closes #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 をサポートするようになりました (MySQL データベースのテーブルをカンマ区切りで指定するリストで、MaterializedMySQL データベースエンジンによってレプリケートされます。デフォルト値: 空のリスト。これは、すべてのテーブルがレプリケートされることを意味します) 。#32977 で言及されています。#34487 (zzsmdfj ).
分散テーブルに対するINSERT操作のOpenTelemetryスパンログを改善しました。#34480 (Frank Chen ) 。
ClickHouse Keeper で、サーバー間で znode の ctime と mtime が一貫するようにしました。#33441 (小路 ).
ビルド/テスト/パッケージングの改善
バグ修正 (公式の安定版またはプレ安定版リリースでユーザーに影響する不具合)
ClickHouse リリース v22.2、2022-02-17。 プレゼンテーション 、ビデオ
アップグレードに関する注意
FINAL を使用するクエリにデータスキッピングインデックスを適用すると、不正確な結果になる可能性があります。このリリースでは、FINAL を使用するクエリではデータスキッピングインデックスをデフォルトで無効化しました (新しい設定 use_skip_indexes_if_final が導入されており、デフォルトでは無効です) 。#34243 (Azat Khuzhin ).
新機能
実験的機能
テキスト分類用の関数として、言語および文字セットの検出を追加しました。#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 の data types をサポートしました (実験的機能) 。#18091 、#21536 、#26361 を修正しました。#33429 (zzsmdfj ) 。
PROJECTION がデフォルトで有効な場合に発生するさまざまな問題を修正しました。各問題は個別のコミットで説明されています。これは #33678 に対応するものです。これにより #34273 を修正しました。#34305 (Amos Bird ) 。
パフォーマンス改善
改善
clickhouse-client で、インラインデータを含むクエリの非同期挿入がサポートされました。#34267 (Anton Popov ) 。
関数 dictGet、dictHas では、キー引数と辞書キーの構造が異なる場合、キー引数が辞書キーの構造に暗黙的にキャストされます。#33672 (Maksim Kita ).
range_hashed Dictionary の改善。複数の attribute がある場合の読み込み時間のパフォーマンスを改善しました。attribute を持たない Dictionary を作成できるようになりました。インターバル start と end が Nullable 型の場合に、戦略を指定するオプション convert_null_range_bound_to_open を追加しました。デフォルト値は true です。#29791 をクローズしました。範囲型として Float、Decimal、DateTime64、Int128、Int256、UInt128、UInt256 を指定できるようになりました。RangeHashedDictionary で、Int64 型の範囲を超える範囲値がサポートされました。#28322 をクローズしました。範囲ルックアップの種類として min、max を指定するオプション range_lookup_strategy を追加しました。デフォルトは 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ストレージ / テーブル関数の使用時に、globs で見つからない (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 ).
Dictionary の PRIMARY KEY を PRIMARY KEY (id, value) 形式でも解析できるようにしました。従来は PRIMARY KEY id, value のみサポートしていました。#34135 を修正しました。#34141 (Maksim Kita ).
生成される要素数を制限するための、splitByChar のオプションの引数。close #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') を返す EXPLAIN AST CREATE FUNCTION クエリをサポートしました。#33819 (李扬 ).
Map(Key, Value) から Array(Tuple(Key, Value)) へのCASTのサポートを追加しました。#33794 (Maksim Kita ) 。
Bool データ型にいくつかの改善と修正を加えました。#33244 を修正しました。#33737 (Kruglov Pavel ) 。
OpenTelemetry の trace-id をビッグエンディアン順でパースして保存する。 #33723 (Frank Chen ).
fromUnixTimestamp64 ファミリー関数の改善。Int64 に変換可能な任意の整数値を受け入れられるようになりました。これにより、#14648 が解決されました。#33505 (Andrey Zvonov ) 。
起こり得る問題 (たとえば #16947 で見つかったもの) を避けるため、_shard_num を定数として再実装する代わりに (#7624 を参照) 、shardNum() 関数として再実装しました (seee #27020 ) 。 #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 ).
UUID データ型の hex 関数および bin 関数への対応を追加しました。#32170 (Frank Chen ).
名前にドットを含むサブカラムの読み取りを修正しました。特に、要素名にドットが含まれる場合の Nested カラムの読み取りが修正されました (例: Nested(`keys.name` String, `keys.id` UInt64, values UInt64)) 。#34228 (Anton Popov ).
VALUES を使ってテーブルに insert する際に、parallel_view_processing = 0 が機能しない問題を修正しました。 - query_views_log の view_duration_ms が materialized view に対して正しく設定されない問題を修正しました。 #34067 (Raúl Marín ).
ZooKeeperから取得したテーブル構造のパースを修正: 現在は、ZooKeeperのメタデータを正規形にしたうえでローカルのメタデータと比較します。これにより、正規化された関数名がClickHouseのバージョン間で変わる場合にも対応できます。 #33933 (sunny ).
LDAP とのやり取りに備え、一部の文字を適切にエスケープするようにしました。#33401 (IlyaTsoi ).
ビルド/テスト/パッケージングの改善
バグ修正 (公式の安定版またはプレ安定版リリースでユーザーに影響する不具合)
allow_experimental_parallel_reading_from_replicas を max_parallel_replicas が 1 の場合に使用した際のアサーションを修正しました。これにより #34525 が修正されます。#34613 (Nikita Mikhaylov ) 。
空の配列の読み取り中にまれに発生する不具合を修正しました。これにより、Data compressed with different methods error が発生することがありました。この問題は、配列の大半が空で、かつ ORDER BY … DESC による逆方向の読み取りを行う場合に再現することがありますが、必ず発生するわけではありません。このエラーが発生する可能性はきわめて低いです。#34327 (Anton Popov ).
小さい型の整数値を丸めた場合に round/roundBankers の結果が誤っていた問題を修正しました。#33267 をクローズしました。 #34562 (李扬 ).
S3 または HDFS から複数のファイルを読み取っている際、クエリのキャンセルがすぐに反映されないことがありました。#34301 を修正。#34397 に関連。#34539 (Dmitry Novik ).
optimize_aggregation_in_order = 1 かつ distributed_aggregation_memory_efficient = 0 の場合に発生する例外 Chunk should have AggregatedChunkInfo in MergingAggregatedTransform を修正しました。#34526 の修正です。#34532 (Anton Popov ).
索引解析における整数と浮動小数点数の比較を修正しました。これまでは、誤って一部の granule の読み込みがスキップされることがありました。#34493 を修正しました。 #34528 (Anton Popov ).
URL engine の圧縮対応を修正しました。 #34524 (Frank Chen ).
ファイルのスキーマ自動検出において発生する可能性があるエラー '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 ) 。
UDFs のアクセス権限が、本来あるべきグローバルレベルではなく、データベースレベルでチェックされていました。#34281 を修正しました。#34404 (Maksim Kita ).
engine Memory のデータベースに対する SHOW CREATE DATABASE クエリの結果に表示される、誤ったエンジン構文を修正しました。これにより #34335 をクローズします。 #34345 (alexey-milovidov ).
レプリケーションキューの状態破損や "交差するパーツ" エラーにつながる可能性がある、ごくまれな競合状態をいくつか修正しました。#34297 (tavplubix ).
進行状況バーの幅を修正しました。誤って文字数の整数に丸められていました。#34275 (alexey-milovidov ).
サーバー間通信における current_user/current_address のクライアント情報フィールドを修正しました (このパッチ以前は、current_user/current_address に前のクエリの値が引き継がれていました) 。#34263 (Azat Khuzhin ).
optimize_aggregation_in_order=1 使用時に、クエリ処理中の特定の Exception によって発生するメモリリークを修正しました。 #34234 (Azat Khuzhin ).
実行中のクエリ数を示す metric Query を修正しました。ここ数回のリリースでは、この値は常に 0 でした。#34224 (Anton Popov ).
テーブル関数 s3 のスキーマ推論を修正しました。#34186 (Kruglov Pavel ) 。
HDFS、S3、URL ストレージエンジンで、追加の接続が発生する可能性のある、まれで軽微な競合状態を修正しました。 #34172 (alesapin ).
S3 のようなリモートファイルシステムにデータを格納する MergeTree 系テーブルエンジンで、LowCardinality カラムの読み取り中にまれに "Cannot read all data" エラーが発生する不具合を修正しました (s3 上の仮想ファイルシステムは実験的機能であり、本番環境での利用には対応していません) 。 #34139 (alesapin ).
ネイティブプロトコルの変更時に発生する、分散テーブルへの insert の不具合を修正しました。最後の変更はバージョン 22.1 で行われたため、そのバージョンへのアップグレード後に分散テーブルへの insert が失敗する場合がありました。 #34132 (Anton Popov ).
#33960 で導入された File テーブルエンジンで発生する可能性のあるデータ競合を修正しました。#34111 をクローズします。#34113 (Kruglov Pavel ).
ZooKeeper 接続が失われたあと、きわめてまれに "交差するパーツ" エラーを引き起こす可能性のある軽微な競合状態を修正しました。 #34096 (tavplubix ).
Native フォーマット使用時の非同期挿入を修正しました。 #34068 (Anton Popov ).
レプリケーション対応のアクセスストレージと、clickhouse-server に組み込まれた Keeper の両方を使用している場合にサーバーが起動できなくなる不具合を修正しました。デフォルトユーザーの設定ではなく、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 の filter 引数を正しく処理できていませんでした。これにより #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 クエリを実行した際に発生する 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 ).
CREATE TEMPORARY TABLE AS SELECT を名前付きHTTPセッション内でクエリした場合に、現在のデータベースを正しく判定するよう修正しました。これは非常にまれなユースケースです。これにより #8340 をクローズします。#33676 (alexey-milovidov ).
ソート、LIMIT BY、ARRAY JOIN、ラムダ関数を含む一部のクエリを許可しました。これにより #7462 が解決されました。#33675 (alexey-milovidov )。
"ゼロコピー レプリケーション" (開発中の機能であり、本番環境では使用すべきではありません) のバグを修正し、TTL move の際にデータが重複する問題を解消しました。#33643 。#33642 (alesapin ).
(optimize_aggregation_in_order = 1 の場合に) GroupingAggregatedTransform で Chunk should have AggregatedChunkInfo が発生する問題を修正しました。 #33637 (Azat Khuzhin ).
テーブルに名前にドットを含む Nested カラムがあり、そのデフォルト値が生成される場合 (たとえば、insert 時にそのカラムが指定されていないとき) に発生することがある 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 ) 。
問題 #18206 を修正。#33977 (Vitaly Baranov ) 。
このPRにより、同じユーザーディレクトリのリスト内で複数のLDAPストレージを使用できるようになりました。以前は動作していましたが、LDAPテストが無効化されていたため、この機能が壊れていました (これらのテストはtestflowsテストの一部です) 。 #33574 (Vitaly Baranov ).
ClickHouse リリース v22.1 (2022-01-18) 。 プレゼンテーション , ビデオ
アップグレードに関する注意
関数 left と right は、以前はパーサー内で実装されていましたが、このバージョンで完全な機能を備えるようになりました。left または right 関数を別名なしで使用する distributed queries は、クラスター内に異なるバージョンの clickhouse-server が混在している場合、例外をスローすることがあります。クラスターのアップグレード中にこのエラーが発生した場合は、すべてのノードが同じバージョンになるよう、クラスター全体のアップグレードを完了してください。また、この問題を回避するために、クエリ内のカラムに別名 (AS something) を追加することもできます。#33407 (alexey-milovidov ).
このバージョン以降、scalar サブクエリによるリソース使用量が完全に計上されるようになりました。この変更により、scalar サブクエリで読み取られた行が query_log に記録されるようになりました。scalar サブクエリが cached されている場合 (繰り返し使用される場合や、複数の行に対して呼び出される場合) 、読み取られた行は 1 回だけカウントされます。この変更により、scalar サブクエリの実行中でもクエリを 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 table engine を実装しました。これにより、#29245 を実装しています。#31104 (taiyang-li ) 。
集約関数 cramersV、cramersVBiasCorrected、theilsU、contingency を追加しました。これらの関数は、カテゴリ値間の依存関係 (関連性の尺度) を計算します。いずれの関数も、実装にクロス集計 (値の組に対するヒストグラム) を用いています。相関係数に似ていますが、任意の離散値 (数値である必要はありません) に対して使用できます。 #33366 (alexey-milovidov ) 。初期実装は Vanyok-All-is-OK と antikvist によるものです。
指定したクラスター内の多数のノードから、s3Cluster と同様に HDFS 上のファイルを並列に処理できるテーブル関数 hdfsCluster を追加しました。#32400 (Zhichang Yu ) 。
AWS S3 をバックエンドとするディスクと同様に、Azure Blob Storage をバックエンドとするディスクのサポートを追加しました。#31505 (Jakub Kuklis ).
すべてのVIEW種別で、CREATE VIEW での COMMENT を許可。 #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 ) 。
decodeURLComponent とは少し異なる関数 decodeURLFormComponent を追加しました。#10298 をクローズしました。#33451 (SuperDJY ).
プレーン/タグ付きメトリクス向けに GraphiteMergeTree のロールアップルールを分割できるようにしました (オプションの rule_type フィールド) 。 #33494 (Michail Safronov ).
パフォーマンス改善
実験的機能
サンプルキーを使わずに、分散クエリ実行時に分片内の複数のレプリカから並列に読み取れるようになりました。これを有効にするには、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 ).
共有データ用 zero-copy マークの ZooKeeper パスを変更しました。なお、"zero-copy replication" は非本番向けの機能 (開発初期段階) であり、いずれにしても使用すべきではありません。ただし、すでに使用している場合は、この変更に注意してください。 #32061 (ianton-ru ).
WINDOW VIEW の watchクエリで Events 句をサポートしました。 #32607 (vxider ).
clickhouse-keeper で、明示的な数字ハッシュを持つ ACL の問題を修正しました。これにより ZooKeeper と一貫した動作になり、生成された digest は常に受け入れられます。 #33249 (小路 ). #33246 .
パーツを detach した際に PROJECTION が予期せず削除される問題を修正しました。 #32067 (Amos Bird ).
改善
ビルド/テスト/パッケージングの改善
バグ修正 (公式の安定版またはプレ安定版リリースでユーザーに影響する不具合)
フォーマットのパースに関する複数の修正です。これは、clickhouse-server が攻撃者に書き込みアクセスを許す状態で公開されている場合に該当します。具体的には、細工された Native フォーマットの入力データにより、未初期化メモリの読み取りやクラッシュが発生する可能性があります。これは、clickhouse-server が攻撃者に書き込みアクセスを許す状態で公開されている場合に該当します。 #33050 (Heena Bansal ). Apache Avro binary format における Apache Avro ユニオン型の索引が範囲外になる問題を修正しました。 #33022 (Harry Lee ). Native format で LowCardinality データをデシリアライズする際に発生する、LowCardinality データでの null ポインタ逆参照を修正しました。 #33021 (Harry Lee ).
ClickHouse Keeper ハンドラーが、レスポンス送信時に操作を正しく削除するよう修正されました。#32988 (JackyWoo ).
クォータの計算でオフバイワンによる誤計算が発生する可能性があり、クォータの上限に達していないにもかかわらず、上限を超えたと判定されていました。これにより #31174 を修正しました。 #31656 (sunny ).
String から IPv4 または IPv6 への CAST と、その逆方向の変換を修正しました。変換に失敗した場合の error メッセージを修正しました。#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 型が含まれている場合に、Apache Arrow フォーマットで発生するセグメンテーション違反を修正しました。#33507 をクローズしました。#33529 (Kruglov Pavel ).
ビューに対して、クエリ本体の外で指定されたoffsetおよびlimit設定が誤って適用されることがありました。修正 #33289 #33518 (hexiaoting ).
デフォルトでネストされた LowCardinality カラムを持つテーブルへの挿入時に発生する可能性がある例外 Block structure mismatch を修正しました。#33028 を修正します。#33504 (Nikolai Kochetov )。
DDL を使用して作成した場合の range_hashed の range min 属性および range max 属性の Dictionary expression を修正しました。#30809 を修正。#33478 (Maksim Kita ).
同時実行のDROPがある場合に、materialized view へのINSERTで発生する可能性があるuse-after-freeを修正しました (Azat Khuzhin ) 。
Linux kernel のバグを回避するため、EOF を超えて読み取ろうとしないようにしました。このバグはカーネル (3.14..5.9) で再現可能で、index_granularity_bytes=0 が必要です (つまり、アダプティブインデックス粒度を無効にする必要があります) 。 #33372 (Azat Khuzhin ).
コマンド SYSTEM SUSPEND と SYSTEM ... THREAD FUZZER でアクセス制御が欠けていました。修正済みです。著者: Kevin Michel。#33333 (alexey-milovidov ).
COMMENT が辞書の system.tables および system.dictionaries に表示されない不具合を修正しました。Dictionary エンジンのコメントを変更できるようにしました。#33251 をクローズしました。#33261 (Maksim Kita ).
有効な設定 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 )。デフォルト以外のスキーマを持つテーブルに対する MaterializedPostgreSQL の detach/attach (レプリケーションからの削除 / 追加) を修正。#29535 で見つかった問題。#33179 (Kseniia Sumarokova )。MaterializedPostgreSQL データベースの DROP を修正。#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 table functionを修正しました。#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 が発生した場合の未定義動作を修正しました (つまり、クライアントが途中で中断した場合です。たとえば timeout 0.15s curl -Ss -F 's=@t.csv;' '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 ) 。
materialized view で発生する例外 Single chunk is expected from view inner query (LOGICAL_ERROR) を修正しました。#31419 を修正。#32862 (Nikolai Kochetov ) 。
リモートfilesystemからの非同期読み取りにおける遅延seekの最適化を修正しました。#32803 をクローズしました。#32835 (Kseniia Sumarokova ).
MergeTree テーブルエンジンで、実行中の mutation が多すぎる場合やメモリ消費量が多い場合に、一部の mutation がサイレントにスキップされることがありましたが、修正されました。#17882 を修正しました。#32814 (tavplubix ).
MV ブロックの処理時にスカラーサブクエリ cache を再利用しないようにしました。これにより、スカラークエリがソーステーブルを参照する場合のバグは修正されますが、その代わりに MV 定義内のすべてのスカラーサブクエリが各ブロックごとに計算されるようになります。 #32811 (Raúl Marín ).
MySQL engine を使用する database が MySQL server に接続できない場合、Server が起動に失敗することがありましたが、この問題を修正しました。#14441 を修正。#32802 (tavplubix ).
fuzzBits 関数の使用時に発生するクラッシュを修正し、#32737 をクローズしました。#32755 (SuperDJY ).
Kafka/RabbitMQ 上で、GROUP BY (list of columns) (これは GROUP BY tuple(...) として解析されます) を使用した MV において発生するエラー 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 ).
materialized view の格納先が JOIN または SET テーブルである場合に発生する LOGICAL_ERROR 例外を修正しました。 #32669 (Raúl Marín ).
Google Cloud Storage への multipart upload を使用して S3 に挿入すると、abort がトリガーされる可能性があります。 #32504 . #32649 (vdimir ).
チャネルの作成を遅らせることで、RabbitMQ ストレージの起動時に発生し得る例外を修正しました。 #32584 (Kseniia Sumarokova ).
並行するDROP TABLEとINSERTの際のテーブルのライフタイム (use-after-freeが発生する可能性) を修正しました。#32572 (Azat Khuzhin ) 。
CustomSeparated、Template、Regexp、MsgPack、JSONAsString フォーマットでの非同期 INSERT を修正しました。以前は、これらのフォーマットでの非同期 INSERT ではデータをまったく読み込めませんでした。#32530 (Kruglov Pavel ).
分散テーブルでのgroupBitmapAnd関数の不具合を修正しました。#32529 (minhthucdao ).
fuzzer によって発見された JOIN のクラッシュを修正し、#32458 を解決しました。 #32508 (vdimir ).
Apache Arrow でカラムが重複するケースへの適切な対応。 #32507 (Dmitriy Mokhnatkin ).
一部のテーブルでカラム名が ALL または DISTINCT になっている場合にエラーを引き起こしていた、分散クエリでの曖昧なクエリフォーマットの問題を修正しました。これにより #32391 をクローズします。 #32490 (alexey-milovidov ).
まだマテリアライズされていないスキップインデックスを使用しようとした際に、クエリが失敗する問題を修正しました。#32292 および #30343 を修正しました。#32359 (Anton Popov ).
同じカラムに 2 つを超える行ポリシーがある場合に、同じセッションで 2 回目以降のクエリから select クエリが壊れる不具合を修正しました。#31606 。#32291 (SuperDJY ) 。
DateTime64 への小数を含む Unix timestamp の変換を修正しました。負の Unix timestamp (1970-01-01 より前) では、小数部の扱いが逆になっていました。 #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 ) 。