ClickHouse リリース 22.12、2022-12-15。 プレゼンテーション, ビデオ
アップグレードに関する注意事項
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_hashJOINアルゴリズムを追加しました。SET join_algorithm = 'grace_hash'で有効化できます。#38191 (BigRedEye、Vladimir C) 。- ユーザーの作成および変更時に、パスワードの複雑さに関するルールやチェックを設定できるようになりました。#43719 (Nikolay Degterinsky) 。
- ログ内の機密情報をマスクし、クエリ
SHOW CREATE TABLEおよびSELECT FROM system.tablesの出力内の機密部分もマスクします。あわせて #41418 も解決します。#43227 (Vitaly Baranov) 。 GROUP BY ALL構文を追加: #37631。#42265 (刘陶峰)。FROM table SELECT column構文が追加されました。 #41095 (Nikolay Degterinsky).- Spark SQLとの互換性のため、関数
concatWithSeparatorと、その別名であるconcat_wsが追加されました。concatAssumeInjectiveと同様に、GROUP BYの最適化を有効にする派生版として、関数concatWithSeparatorAssumeInjectiveも追加されました。#43749 (李扬). - 固定精度の十進数演算向けに
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) 。
実験的機能
- 非同期 INSERT に対する重複排除をサポートしました。これまでは、複数の小さな insert が 1 つのバッチとして挿入されていたため、非同期 INSERT では重複排除をサポートしていませんでした。#38075 を解決します。#43304 (Han Fei)。
- 実験的な Annoy (ベクトル類似度検索) 索引で、コサイン距離をサポートしました。#42778 (Filatenkov Artur)。
CREATE / ALTER / DROP NAMED COLLECTIONクエリを追加しました。#43252 (Kseniia Sumarokova)。この機能は開発中であり、バージョン 22.12 時点ではこれらのクエリはまだ機能しません。この変更履歴エントリは、混乱を避けるためだけに追加されています。名前付きコレクションへのデフォルトアクセスは、config で定義されたユーザーに制限されます。これらを表示するには、show_named_collections = 1を設定する必要があります。#43325 (Kseniia Sumarokova)。system.named_collectionsテーブルが追加されました。#43147 (Kseniia Sumarokova)。
パフォーマンス改善
- 設定
max_streams_for_merge_tree_readingおよびallow_asynchronous_read_from_io_pool_for_merge_treeを追加しました。max_streams_for_merge_tree_readingは MergeTree テーブルの読み取りストリーム数を制限します。allow_asynchronous_read_from_io_pool_for_merge_treeは、バックグラウンド 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).
ビルド/テスト/パッケージングの改善
- systemd とのインテグレーションで、サービスが実際に起動し、リクエストを処理できる状態になったことを systemd に正しく通知するようになりました。#43400 (Коренберг Марк).
- OpenSSL FIPS Module を使用して OpenSSL 対応で ClickHouse をビルドするオプションを追加しました。このビルドタイプはセキュリティ検証のためのテストが行われておらず、サポートもされていません。#43991 (Boris Kuschel).
- 以前の PR で実装された新しい
DeflateQpl圧縮コーデックへアップグレードしました (詳細: https://github.com/ClickHouse/ClickHouse/pull/39494) 。このパッチでは、以下の点でコーデックが改善されています。1. QPL v0.2.0 から QPL v0.3.0 へ更新 Intel® Query Processing Library (QPL) 2. QPL v0.3.0 でのビルド問題を修正するために CMake ファイルを改善 3. QPL v0.2.0 における実行時ロード (dlopen) の代わりに、ビルド時に QPL ライブラリを libaccel-config とリンク 4. CompressionCodecDeflateQpl.cpp のログ出力の問題を修正。#44024 (jasperzhu).
バグ修正 (正式な stable または prestable リリースでユーザーに影響する不具合)
- 非同期挿入の使用時にデッドロックを引き起こす可能性があるバグを修正しました。#43233 (Anton Popov).
- AST レベルの最適化
optimize_normalize_count_variantsにおける一部の誤ったロジックを修正しました。 #43873 (Duc Canh Le) 。 - レプリカ間でチェックサムが一致しない場合 (例: アップグレード時のデータフォーマット変更が原因) に、mutation の進行が止まる問題を修正しました。 #36877 (nvartolomei).
hdfsClustertable 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). Mergeengine を使用するテーブルにおける、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) で、DDLdrop 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) 。プレゼンテーション、ビデオ
後方互換性を持たない変更
JSONExtract関数群は、今後は要求された型への変換を試みるようになります。 #41502 (Márcio Martins).
新機能
- 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) 。
パフォーマンス改善
match関数で、文字列のプレフィックスに対する条件の場合に索引を使用できるようになりました。これにより #37333 が解決されます。#42458 (clarkcaoliu).- AND および OR 演算子が連続する場合の処理を高速化しました。#42214 (Zhiguo Zhou).
LineAsStringinput format の並列パースをサポートしました。パフォーマンス向上はごくわずかです。これにより #42502 が解決されます。#42780 (Kruglov Pavel).- ClickHouse Keeper のパフォーマンス改善: 多数の異なるノードに未コミットの状態がある場合のコミット性能を改善しました。これは、follower ノードが十分な速度で同期できないケースに役立つはずです。#42926 (Antonio Andelic).
NOT LIKE 'prefix%'のような条件でもプライマリインデックスを使用できるようになりました。#42209 (Duc Canh Le).
実験的機能
- 他の型の内部で
Object型をサポート。例:Array(JSON)。 #36969 (Anton Popov). - MaterializedMySQL で MySQL の binlog における SAVEPOINT イベントを無視するようにしました。 #42931 (zzsmdfj). MaterializedMySQL で SAVEPOINT クエリを処理 (無視) するようにしました。 #43086 (Stig Bakken).
改善点
- 小さな
LIMITを持つ単純なクエリについて、読み取る推定行数を適切に判定できるようになり、しきい値も正しく確認されるようになりました。 #7071 をクローズしました。 #42580 (Han Fei). - INSERT VALUES クエリで対話型パラメーターをサポートしました。 #43077 (Nikolay Degterinsky).
system.table_functionsに新しいフィールドallow_readonlyを追加し、readonly モードで table function を使用できるようにしました。#42414 を解決します。実装: * システムテーブルsystem.table_functionsに新しいフィールド allow_readonly を追加しました。 * 新しいフィールド allow_readonly を使用して、readonly モードで table function を使用できるよう更新しました。テスト: * filesystem に対するテストtests/queries/0_stateless/02473_functions_in_readonly_mode.shを追加しました。ドキュメント: * Table Functions の英語ドキュメントを更新しました。#42708 (SmitaRKulkarni)。system.asynchronous_metricsに組み込みドキュメントが追加されました。このドキュメントは Prometheus にもエクスポートされます。cacheディスクに関するメトリクスの不具合を修正しました。これまでは、すべてのcacheディスクではなく、任意の 1 つのcacheディスクについてのみ計算されていました。これにより #7644 はクローズされます。#43194 (Alexey Milovidov)。- スロットリングのアルゴリズムがトークンバケット方式に変更されました。#42665 (Sergei Trifonov) 。
system.query_logと/var/log/clickhouse-server/*.logの両方、およびerrorメッセージ内で、パスワードと秘密鍵をマスクするようになりました。#42484 (Vitaly Baranov).- 取得したパーツに包含されるパーツを削除するようにしました (レプリケーション遅延の増大を防ぐため) 。 #39737 (Azat Khuzhin).
/dev/ttyが利用可能な場合、clickhouse-client および clickhouse-local の進捗は STDERR に書き込まれず、直接ターミナルに表示されます。これにより、STDERR がファイルにリダイレクトされている場合でも進捗を確認でき、ファイルがターミナルのエスケープシーケンスで汚染されることもありません。進捗表示は--progress falseで無効にできます。これにより #32238 はクローズされます。#42003 (Alexey Milovidov) 。- Base64 関数で
FixedString入力をサポートしました。#42285 (ltrk2). system.detached_partsにbytes_on_diskとpathのカラムを追加しました。#42264 をクローズしました。#42303 (chen).- table function における insertion table の structure の利用を改善し、設定
use_structure_from_insertion_table_in_table_functionsに新たな指定可能値2が追加されました。これは、ClickHouse が insertion table の structure を使用できるかどうかを自動的に判定することを意味します。#40028 をクローズしました。#42320 (Kruglov Pavel). - INSERT FROM INFILE で進捗表示がされない問題を修正。 #42548 をクローズ。 #42634 (chen).
- 関連関数で返される最大トークン数を指定できるよう、
tokens関数をリファクタリングしました (デフォルトでは無効) 。#42673 (李扬) 。 formatDateTimeおよびFROM_UNIXTIME関数でDate32型の引数を使用できるようになりました。#42737 (Roman Vasin) 。- tzdata を 2022f に更新しました。メキシコでは、米国との国境付近を除き、今後は DST が廃止されます: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html。チワワ州は 2022-10-30 に通年 UTC-6 に移行します。フィジーでも今後は DST が廃止されます。https://github.com/google/cctz/pull/235 および https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209 を参照してください。#42796 (Alexey Milovidov).
- 非同期 INSERT 向けに
FailedAsyncInsertQueryイベントメトリクスを追加しました。#42814 (Krzysztof Góralski) 。 - クエリプランに基づく
read-in-order最適化を実装しました。これはデフォルトで有効になっています。従来の AST ベースのバージョンを使用するには、query_plan_read_in_order = 0を設定してください。#42829 (Nikolai Kochetov). - S3 へのバックアップで、S3 のマルチパートアップロードにおける最大 10,000 パーツ制限に関するエラーを回避するため、アップロードパートのサイズを指数関数的に増やすようにしました。#42833 (Vitaly Baranov).
- マージタスクが継続的にビジー状態で、ディスク容量も不足している場合、完全に有効期限切れとなったパーツを選択して削除できず、結果としてディスク容量不足が解消されません。私の考えでは、Part 全体の有効期限が切れている場合は、追加のディスク容量を確保しなくても、有効期限 (TTL) を正常に実行できます。 #42869 (zhongyuankai).
oss関数とOSSテーブルエンジンを追加しました (ユーザーにとって便利です) 。oss は S3 と完全に互換性があります。#43155 (zzsmdfj) 。system.asynchronous_metricsテーブルの OS 関連情報の収集におけるエラー報告を改善しました。#43192 (Alexey Milovidov).- ClickHouse が MySQL 互換プロトコルを使って自身に接続できるよう、
INFORMATION_SCHEMAテーブルを変更しました。別名ではなくカラムを追加しています (#9769 関連) 。これにより、各種 MySQL クライアントとの互換性が向上します。#43198 (Filatenkov Artur) 。 - PowerBI が MySQL プロトコルで接続する際の互換性向上のため、いくつかの関数を追加しました #42612 (Filatenkov Artur) 。
- 変更時のDashboardの操作性を向上 #42872 (Vladimir C).
ビルド/テスト/パッケージングの改善
- 各プルリクエストおよび master へのコミットごとに SQLancer を実行するようにしました。SQLancer は、論理バグの自動検出に重点を置いたオープンソースの fuzzer です。#42397 (Ilya Yatsishin).
- zlib-ng を最新版に更新しました。#42463 (Boris Kuschel).
- Jepsen を使った ClickHouse server のテストをサポートしました。なお、Jepsen を使った ClickHouse Keeper のテストはすでにサポートされています。このプルリクエストでは、その対応をレプリケートテーブルにも拡張しています。#42619 (Antonio Andelic).
- clang-tidy の結果のキャッシュに https://github.com/matus-chochlik/ctcache を使用します。#42913 (Mikhail f. Shiryaev).
- この修正前は、ユーザー定義の設定が RPM によって
$file.rpmsaveに保存されていました。このプルリクエストでそれを修正し、パッケージ内のファイルでユーザーのファイルを置き換えないようにしました。#42936 (Mikhail f. Shiryaev). - Ubuntu Docker image から一部のライブラリを削除しました。#42622 (Alexey Milovidov).
バグ修正 (正式な stable または prestable リリースでユーザーに影響する不具合)
- normaliser を更新し、alias AST を複製するようにしました。これにより #42452 を解決します。実装: * 置き換え時に alias AST を複製するよう、QueryNormalizer を更新しました。以前は同じものをそのまま代入していたため、同じ親が再度挿入されることになり、LogicalExpressinsOptimizer で例外が発生していました。 * このバグは新しいアナライザ (
allow_experimental_analyzer) では発生しないため、そちらには変更を加えていません。同内容のテストも追加しました。#42827 (SmitaRKulkarni). Lazyデータベース内のテーブルのバックアップ時に発生する競合状態を修正しました。#43104 (Vitaly Baranov) 。skip_unavailable_shardsの修正:s3Clusterテーブル関数で動作していませんでした。#43131 (chen) 。s3Clusterのスキーマ推論を修正し、hdfsClusterを改善。#41979 (Kruglov Pavel) 。- URL table engine / table function からの読み込み時の再試行を修正しました。 (再試行可能なエラーで必要以上に再試行される場合があり、再試行不可能なエラーではコード内でアサーション失敗が発生していました。) #42224 (Kseniia Sumarokova).
- DNS と c-ares に関連するセグメンテーションフォルトが報告され、修正されました。#42234 (Arthur Passos) 。
- PK 解析 (単調性チェック) で発生する可能性がある
LOGICAL_ERRORArguments of 'plus' have incorrect data typesを修正しました。また、第 1 引数が定数である単調な二項関数に対する不正な PK 解析も修正しました。 #42410 (Nikolai Kochetov). - キー型を Nullable の内部に含められない場合に発生する、誤ったキー解析を修正しました。これにより #42456 が修正されます。#42469 (Amos Bird).
- 設定
input_format_csv_use_best_effort_in_schema_inferenceの使用時にスキーマ推論 cache が不適切に使われる原因となっていた、設定名のタイプミスを修正しました。#41735 をクローズしました。#42536 (Kruglov Pavel). - データ型がLowCardinalityのときに、誤ったヘッダーでSetが作成される不具合を修正しました。#42460 をクローズしました。#42579 (flynn) 。
(U)Int128と(U)Int256の値が、PREWHEREで正しくチェックされるようになりました。#42605 (Antonio Andelic) 。- セグメンテーションフォールトにつながる可能性があった関数パーサーのバグを修正しました。 #42724 (Nikolay Degterinsky).
truncate tableにおけるロックを修正しました。#42728 (flynn) 。- ファイルが存在しない場合に
webディスクで発生し得るクラッシュを修正 (OPTIMIZE TABLE FINALでも、最終的に同じエラーが発生する可能性がありました) 。#42767 (Azat Khuzhin). system.session_logのauth_typeのマッピングを修正し、enum の値にSSL_CERTIFICATEを追加しました。#42782 (Miel Donkers).- ASANビルドにおけるCREATE USERクエリパーサーの stack-use-after-return を修正しました。#42804 (Nikolay Degterinsky) 。
lowerUTF8/upperUTF8で、文字列中の記号が 16 バイト境界をまたぐ場合の問題を修正しました (文字列が 16 バイトを超える場合によく発生します) 。#42812 (Azat Khuzhin) 。- 不正な入力時の誤動作を修正するため、LZ4 の展開ルーチンに追加の境界チェックが加えられました。#42868 (Nikita Taranov) 。
- クエリのキャンセル時にまれに発生するハングを修正しました。 #42874 (Azat Khuzhin).
- 複数の選言を含むハッシュ結合で発生する不正な動作を修正し、#42832 をクローズしました。#42876 (Vladimir C)。
three table joinでif asをselectすると、ヌルポインタが発生します。たとえば、このSQLクエリ: #42883 (zzsmdfj).- Cluster Discovery における memory sanitizer の警告を修正し、#42763 をクローズしました。 #42905 (Vladimir C).
- 空文字列の場合のDateTimeスキーマ推論を改善。#42911 (Kruglov Pavel) 。
- projection を使用できる可能性があるにもかかわらず、利用可能な projection が存在しない場合にまれに発生する NOT_FOUND_COLUMN_IN_BLOCK エラーを修正しました。これにより #42771 が修正されます。このバグは https://github.com/ClickHouse/ClickHouse/pull/25563 で混入しました。#42938 (Amos Bird).
- テーブルに DATETIME データ型が含まれている場合、
PostgreSQLデータベースエンジンでの ATTACH TABLE を修正しました。#42817 をクローズしました。#42960 (Kseniia Sumarokova). - lambda のパースを修正しました。#41848 を修正しました。#42979 (Nikolay Degterinsky).
- Nullable なキーがハイパー直方体の途中に現れる場合に、キー解析が誤って行われる問題を修正しました。これにより #43111 が修正されます。 #43133 (Amos Bird).
- 細工された集約関数の状態のデシリアライズ処理における、複数のバッファ過剰読み取りを修正しました。#43159 (Raúl Marín) 。
- NULL および const Nullable 引数の場合における関数
ifの不具合を修正しました。#43069 をクローズしました。#43178 (Kruglov Pavel) 。 - 「best effort」アルゴリズムで DateTime をパースする際に発生する 10 進数演算のオーバーフローを修正しました。#43061 をクローズします。#43180 (Kruglov Pavel).
git-importツールで生成されるindentフィールドの値が誤って計算されていました。https://clickhouse.com/docs/getting-started/example-datasets/github/ を参照してください。#43191 (Alexey Milovidov).- サブクエリおよび型変換における
Interval型の予期しない動作を修正しました。#43193 (jh0x).
ClickHouse リリース 22.10 (2022-10-25) 。プレゼンテーション、ビデオ
後方互換性を持たない変更
- キャッシュ関連コマンドの名称を変更:
show caches->show filesystem caches,describe cache->describe filesystem cache。 #41508 (Kseniia Sumarokova). LIVE VIEWのWITH TIMEOUTセクションのサポートを廃止しました。これにより #40557 を解消します。 #42173 (Alexey Milovidov).- クライアントのプロンプトにおける
{database}マクロのサポートを廃止しました。database が未指定の場合に正しく表示されず、USEステートメントでも更新されなかったためです。これにより #25891 を解消します。 #42508 (Alexey Milovidov).
新機能
- 構成可能なプロトコル設定が追加されました。これにより、プロトコルごとに異なるリッスンホストを設定できるようになりました。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) 。
実験的機能
allow_experimental_analyzer設定のもとで、クエリ分析とプランニング向けの新しいインフラストラクチャを追加しました。#31796 (Maksim Kita).- Kusto Query Language の初期実装です。使用しないでください。#37961 (Yong Wang).
パフォーマンス改善
- 「パーツが多すぎる」のしきい値を緩和しました。これにより #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 ビルドに
ldaprcapabilities を追加しました。これは Graviton 2+、Azure、GCP のインスタンスでサポートされています。clang-15 で つい最近 利用可能になったものです。 #41778 (Daniel Kutenin). - 文字列比較時に、一方の argument が空の定数文字列である場合の性能を改善しました。 #41870 (Jiebin Sun).
- 一部のケースで Aggregate State を共有できるよう、ColumnAggregateFunction の
insertFromを最適化しました。 #41960 (flynn). azure_blob_storagedisk への書き込みを高速化しました (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)。
ビルド/テスト/パッケージングの改善
- table definition 向けの fuzzer を追加しました #40096 (Anton Popov)。これは今年これまでの ClickHouse テストにおける最大の進展です。
- ClickHouse Cloud service のベータ版がリリースされました: https://console.clickhouse.cloud/。ClickHouse を使う最も簡単な方法であり、単一コマンドでのインストールよりもさらに手軽です。
- AST Fuzzer で WHERE clause の生成をサポートし、ORDER BY と WHERE clause を追加・削除できるようにしました。#38519 (Ilya Yatsishin)。
- Aarch64 binaries では、2016 年にリリースされた ARMv8.2 以降が必須になりました。特に、これにより ARM LSE、つまり native atomic operations を利用できるようになります。あわせて、古い ARMv8.0 ハードウェア (例: Raspberry Pi 4) 向けに binaries をコンパイルできるよう、CMake build option
NO_ARMV81_OR_HIGHERを追加しました。#41610 (Robert Schulze)。 - Musl を使って ClickHouse をビルドできるようにしました (すでにサポートはされていたものの、壊れていたため、その修正に伴う小さな変更です) 。#41987 (Alexey Milovidov)。
- インストール時にファイルが見つからない状態で
sedコマンドを実行してエラーになるのを避けるため、$CLICKHOUSE_CRONFILEファイルのチェックを追加しました。#42081 (Chun-Sheng, Li)。 - 新しい timezone 変更に対応するため、cctz を
2022eに更新しました。Palestine の切り替えは土曜日の 02:00 になりました。Ukraine の 3 つの zones は 1 つに統合されました。Jordan と Syria は、DST ありの +02/+03 から通年 +03 に切り替わりました。(https://data.iana.org/time-zones/tzdb/NEWS)。これにより #42252 はクローズされます。#42327 (Alexey Milovidov)。#42273 (Dom Del Nano)。 - 例として BLAKE3 hash-function library を用い、ClickHouse で Rust コードをサポートしました。#33435 (BoloniniD)。
バグ修正 (正式な 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 時に発生し、
ReplicatedMergeTreetable のレプリケーション開始を妨げる可能性があった “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).
実験的機能
Annoyベースの ANN (近似最近傍) 索引を追加しました。#40818 (Filatenkov Artur). #37215 (VVMak).- ClickHouse Keeper または ZooKeeper をキー・バリュー ストアとして使用する新しいストレージエンジン
KeeperMapを追加しました。#39976 (Antonio Andelic). このストレージエンジンは、少量のメタデータの保存を目的としています。 - インメモリ data part の改善: 完全に処理済みの WAL ファイルを削除するようにしました。#40592 (Azat Khuzhin).
パフォーマンス改善
- マークと主キーの圧縮を実装。#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).
改善
- 起動時および ATTACH 呼び出し時には、
ReplicatedMergeTreeテーブルは、ZooKeeper への接続が確立され、セットアップが完了するまで読み取り専用になります。#40148 (Antonio Andelic) 。 - 引数が Date32 または DateTime64 の場合に、関数 toStartOfYear、toStartOfISOYear、toStartOfQuarter、toStartOfMonth、toStartOfWeek、toMonday、toLastDayOfMonth が Date32 型の結果を返し、それ以外の場合は Date 型の結果を返す
enable_extended_results_for_datetime_functionsオプションを追加しました。互換性のため、デフォルト値は ‘0’ です。#41214 (Roman Vasin). - セキュリティと安定性の観点から、CatBoostモデルは ClickHouse server 内では評価されなくなりました。代わりに、評価は clickhouse-library-bridge で行われるようになりました。これは catboost ライブラリを読み込み、HTTP 経由で server プロセスと通信する別プロセスです。関数
modelEvaluate()はcatboostEvaluate()に置き換えられました。#40897 (Robert Schulze). #39629 (Robert Schulze). - ディスク上の一時データに関するメトリクスを追加し、#40206 をクローズしました。#40239 (Vladimir C).
- 設定オプション
warning_supress_regexpを追加し、#40330 をクローズしました。#40548 (Vladimir C) 。 - kafka_num_consumers の上限を無効にする設定を追加しました。#40331 をクローズしました。#40670 (Kruglov Pavel).
DELETE ...クエリでSETTINGSをサポート。#41533 (Kseniia Sumarokova) 。- S3 ObjectStorage 向けに、S3 API 呼び出しごとの詳細な S3 profile events
DiskS3*を追加。#41532 (Sergei Trifonov) 。 system.asynchronous_metricsに、2 つの新しいメトリクスNumberOfDetachedPartsとNumberOfDetachedByUserPartsが追加されました。#40779 (Sema Checherinda) 。- ODBC および JDBC のテーブルで CONSTRAINT を使えるようにしました。#34551 (Alexey Milovidov) 。
- 元のクエリで
SETTINGSが複数回使われていない場合、クエリのフォーマット時にSETTINGSを複数回出力しないようにしました。#38900 (Raúl Marín). - スレッド間でのトレーシング (OpenTelemetry) コンテキストの伝播を改善しました。#39010 (Frank Chen).
- ClickHouse Keeper:
interserver_listen_hostが指定されている場合にのみ、Keeper に限ってそのリスナーを追加するようにしました。#39973 (Antonio Andelic). - エラー発生後の Replicated user access ストレージの復旧を改善しました。 #39977 (Vitaly Baranov).
EmbeddedRocksDBでの有効期限 (TTL) サポートを追加しました。#39986 (Lloyd-Pottiger) 。clickhouse-obfuscatorにスキーマ推論を追加し、--structure引数が不要になりました。#40120 (Nikolay Degterinsky) 。Arrowフォーマットの Dictionaries を改善し、不具合を修正しました。#40173 (Kruglov Pavel) 。Date32、DateTime64、Dateからより狭い型への変換が、より自然になりました。通常の範囲外の場合は、上限または下限の通常値が使われます。#40217 (Andrey Zvonov) 。View上のMergeテーブルで索引を使用できない問題を修正しました。#40233 (Duc Canh Le) 。- JSON形式のサーバーログのカスタムキー名。 #40251 (Mallik Hassan).
- 関数
throwIfが送出する例外に対して、カスタムのエラーコードを設定できるようになりました。 #40319 (Robert Schulze). - スキーマ推論のcacheを改善し、スキーマを変更しうるフォーマット設定を考慮するようにしました。#40414 (Kruglov Pavel) 。
DateをDateTimeおよびDateTime64としてパースできるようになりました。これは、#36949 で提案された機能強化を実装したものです。#40474 (Alexey Milovidov).Stringから、2022-08-22 01:02:03.456のようなDateTime64形式の値をDateおよびDate32に変換できるようになりました。2022-08-22 01:02:03のような DateTime 形式の String からDate32への変換も可能になりました。これにより #39598 がクローズされます。#40475 (Alexey Milovidov).- Parquetフォーマットにおけるネストされたデータ構造のサポートを強化 #40485 (Arthur Passos).
- Avro で Array(Record) をフラット化されたネストテーブルとして読み込めるようにしました。#40534 (Kruglov Pavel) 。
EmbeddedRocksDBの読み取り専用サポートを追加しました。#40543 (Lloyd-Pottiger) 。- URL table engine の圧縮方式パラメータを検証。#40600 (Frank Chen) 。
- ファイル名の後ろにクエリ文字列がある場合の、url テーブル関数/エンジンでのフォーマット検出を改善しました。#40315 をクローズしました。#40636 (Kruglov Pavel).
- grouping set 使用時はプロジェクションを無効化します。誤った結果が生成される問題を修正しました。これにより #40635 が修正されます。#40726 (Amos Bird) 。
- テーブル定義で使用した場合にメタデータを破損する可能性がある、
APPLYカラム変換子の誤った形式を修正しました。これにより #37590 を修正します。#40727 (Amos Bird). formatDateTimeでタイムゾーンオフセットをフォーマットするための%zディスクリプタをサポートしました。 #40736 (Cory Levy).clickhouse-clientの対話型モードで、.と/は「直前のコマンドを実行する」と解釈されるようになりました。#40750 (Robert Schulze).- MySQL データベースエンジンおよび MySQL テーブル関数に MySQL のタイムアウト設定を渡す際の問題を修正しました。#34168 をクローズしました。#40751 (Kseniia Sumarokova).
- 異なるサーバーやキャッシュ間でキャッシュディレクトリが共有されないように、ファイルシステムキャッシュディレクトリのステータスファイルを作成。 #40820 (Kseniia Sumarokova).
EmbeddedRocksDBストレージでDELETEとUPDATEがサポートされました。#40853 (Antonio Andelic).- ClickHouse Keeper: 長時間のコミット中にシャットダウンできない問題を修正し、許可されるリクエストサイズを拡大。 #40941 (Antonio Andelic).
- WriteBufferFromS3 における競合状態を修正し、TSA アノテーションを追加しました。 #40950 (Kseniia Sumarokova).
- group_by_use_nulls を使用する grouping sets では、Nullable に変換されるのはキーカラムのみになりました。 #40997 (Duc Canh Le).
- 分散テーブルへのINSERTのオブザーバビリティを改善。 #41034 (Frank Chen).
- S3とのやり取りに関する、より低レベルのメトリクス。 #41039 (mateng915).
- HTTP リダイレクト後の Location ヘッダーで相対パスをサポート。 #40985 をクローズ。 #41162 (Kruglov Pavel).
- サーバーを再起動せずに、HTTPハンドラーの変更をその場で適用できるようになりました。#41177 (Azat Khuzhin).
- ClickHouse Keeper: シャットダウン時にアクティブなsessionを適切に終了するようにしました。 #41215 (Antonio Andelic)。これにより、“table is read-only” error が発生する期間が短くなります。
- clickhouse-client/local で SQL クエリを自動でコメントアウトできるようにしました (readline と同様に
Alt-#で操作) 。#41224 (Azat Khuzhin). - 設定
do_no_evict_index_and_mark_filesを 1 から 0、または 0 から 1 に切り替えた後に発生していた cache の非互換性を修正しました。#41330 (Kseniia Sumarokova). - サイズが > 256 の FixedString 型カラムをユーザーが作成できないようにする設定
allow_suspicious_fixed_string_typesを追加しました。#41495 (Duc Canh Le) 。 has_lightweight_deleteを system.parts に追加。 #41564 (Kseniia Sumarokova).
ビルド/テスト/パッケージングの改善
- すべての設定について、ドキュメント記載を必須化しました。#40644 (Alexey Milovidov) 。
- 既存のすべてのメトリクスについて、ドキュメント整備を必須化。 #40645 (Alexey Milovidov).
- すべてのプロファイルイベントカウンターについて、ドキュメントの記載を必須化しました。記載がなかった箇所にはドキュメントを追加しました。 #40646 (Alexey Milovidov).
- 一部の依存関係を修正し、最小構成の
clickhouse-localビルドを可能にしました。#40460 (Alexey Milovidov) 。サイズは50 MiB未満です。 - テストにおけるSQL関数のカバレッジを算出してレポートします。#40593。#40647 (Alexey Milovidov) 。
- すべてのMergeTree設定について、ドキュメント化を必須としました。#40648 (Alexey Milovidov) 。
- 高水準の統一されたサーバーコンポーネント向け埋め込みリファレンスドキュメントのプロトタイプ。 #40649 (Alexey Milovidov).
- 変更された perf テスト内のすべてのクエリを確認し、変更されたクエリがすべてテストされていることを確実にします。#40322 (Nikita Taranov) 。
- TGZ パッケージを修正。 #40681 (Mikhail f. Shiryaev).
- デバッグシンボルを修正。 #40873 (Azat Khuzhin).
- x86のSSE2専用buildを作成するため、CI設定を拡張しました。古いハードウェアや埋め込みハードウェアで役立ちます。#40999 (Robert Schulze).
- llvm/clang 15 に移行しました。#41046 (Azat Khuzhin) 。
- #40938 の続きです。
Loggersクラスの ODR 違反を修正しました。#40398、#40937 も修正しました。#41060 (Dmitry Novik)。 - GitHub のリリースアセットに macOS バイナリを追加し、#37718 を修正しました。#41088 (Mikhail f. Shiryaev) 。
- c-aresライブラリがClickHouseのbuildシステムに同梱されるようになりました。#41239 (Robert Schulze) 。
- ClickHouse のメインコードから
dlopenを削除しました。library-bridge と odbc-bridge には引き続き残っています。#41428 (Alexey Milovidov) 。 - メインの ClickHouse バイナリでは
dlopenを許可しないようにしました。これは有害で安全ではないためです。ClickHouse 自体ではこれを使用していませんが、一部のライブラリでは「プラグイン」の実装に使われることがあります。制御不能で危険な 3rd-party ライブラリをプロセスのアドレス空間に読み込むというこの古いやり方は、まったくもって正気の沙汰ではないため、私たちは断固として推奨しません。#41429 (Alexey Milovidov). - debパッケージに
sourceフィールドを追加し、nfpmを更新しました。#41531 (Mikhail f. Shiryaev) 。 - 独自実装のDWARFパーサーでDWARF-5をサポートしました。#40710 (Azat Khuzhin).
- テスト用のフォールトインジェクションをZooKeeperクライアントに追加 #30498 (Alexander Tokmakov).
- デバッグおよびtsan用に、S3ストレージを使用するステートレステストを追加 #35262 (Kseniia Sumarokova).
- S3 上で stress を試行 #36837 (alesapin).
clang-tidyでconcurrency-mt-unsafeを有効にする #40224 (Alexey Milovidov).
バグ修正
- AWS SDKのバグによって発生する可能性のあるデータ損失を修正しました。このバグがトリガーされるのは、ClickHouse を S3 上で使用している場合に限られます。#40506 (alesapin) 。このバグは AWS SDK で 5 年間未解決のままでしたが、当社の報告を受けてクローズされました。
- Native formatの不正なデータにより、クラッシュが発生する可能性がありました。#41441 (Alexey Milovidov) 。
- 集約関数
categorialInformationValueではプロパティが誤って定義されており、実行時にヌルポインタ参照が発生する可能性がありました。これにより #41443 がクローズされます。#41449 (Alexey Milovidov). - Apache
ORCフォーマットでデータを書き込む際に、バッファオーバーランが発生する可能性があります。#41458 (Alexey Milovidov) 。 - 引数として Nullable の Array を使用した場合に、関数
encryptおよびcontingencyで発生するメモリ安全性の問題を修正しました。これにより #41004 が修正されます。 #40195 (Alexey Milovidov). - MergeJoin で ‘not_processed’ が null ではない場合の不具合を修正しました。 #40335 (liql2007) 。
- IN演算子で小数の精度損失が発生する場合に、結果が不正になる問題を修正しました。ref #41125。#41130 (Vladimir C)。
- 複数レベルを持つ
Nestedカラムで、欠落したカラムの補完を修正しました。#37152 (Anton Popov) 。 - Ordinary (非推奨) データベースに対するSYSTEM UNFREEZEクエリの修正。https://github.com/ClickHouse/ClickHouse/pull/36424 に対する修正です。#38262 (Vadim Volodin).
- WITHステートメントで導入された、未使用の不明なカラムに関する問題を修正しました。これにより #37812 が修正されます。 #39131 (Amos Bird)。
- ウィンドウ関数が存在する場合の ORDER BY におけるクエリ分析を修正しました。#38741 を修正。#24892 を修正。#39354 (Dmitry Novik)。
- ユーザーが集約関数に対して WINDOW の ORDER BY/PARTITION BY 式を計算しようとした際に発生する
Unknown identifier (aggregate-function)例外を修正しました。#39762 (Vladimir Chebotaryov) 。 - 設定
max_analyze_depthにより、1つのクエリに対する analyze の回数を制限しました。これにより、非常に多数のサブクエリを含むクエリで、解析時間が指数関数的に増加するのを防ぎます。 #40334 (Vladimir C). - MergeTreeエンジンファミリーのカラムの有効期限 (TTL) に関するまれなバグを修正しました。繰り返し縦方向マージが行われた場合、エラー
Cannot unlink file ColumnName.bin ... No such file or directory.が発生することがありました。 #40346 (alesapin). - IPv4 と IPv6 の両方が存在する場合は、両方の DNS エントリを使用するようにしました。 #40353 (Maksim Kita).
- Hadoopからsnappy圧縮ファイルを読み取れるようになりました。 #40482 (Kruglov Pavel).
- 可変次元の配列を含む
Object型 (実験的機能) の値のパース中にクラッシュする不具合を修正しました。#40483 (Duc Canh Le) 。 - 設定
input_format_tsv_skip_first_linesの不具合を修正しました。#40491 (mini4) 。 - MaterializedPostgreSQL データベース/テーブルエンジンの起動時に発生するバグ (レースコンディション) を修正しました。#40262。relcache_callback_list slots の上限に達した際に発生する error を修正しました。#40511 (Maksim Buren) 。
- DateTime64 のパース時に発生する可能性があるエラー ‘Decimal math overflow’ を修正しました。 #40546 (Kruglov Pavel).
- 論理削除された行を含むパーツの垂直マージの不具合を修正しました。#40559 (Alexander Gololobov) 。
- 圧縮が有効な場合に、URL table engine へのデータ書き込み時に発生するセグメンテーションフォルトを修正しました。 #40565 (Frank Chen).
- Map を含む arrayElement 関数で発生する可能性のある論理エラー
'Invalid Field get from type UInt64 to type String'を修正しました。#40572 (Kruglov Pavel) 。 - ファイルシステムキャッシュで発生する可能性のある競合状態を修正しました。 #40586 (Kseniia Sumarokova).
- この機能は一度も正しく動作したことがなく、完了済みの mutation が復活するおそれもあったため、
MergeTreeテーブルの影響を受けないパーティションで mutation をスキップする処理を削除しました。#40589 (Alexander Tokmakov) 。 - 実行時に、すでに使用中の gRPC ポートを設定に追加すると、ClickHouse server がクラッシュします。 #40597 (何李夫).
base58Encode / base58Decodeにおける先頭の 0 / ‘1’ の処理を修正しました。#40620 (Andrey Zvonov).- keeper-fix: スナップショットのインストール中にログへアクセスする際の競合状態を修正。 #40627 (Antonio Andelic).
- toFixedString 関数の短絡実行を修正しました。これにより、#40622 が部分的に解決されます。 #40628 (Kruglov Pavel).
- SQLite の int8 カラムを ClickHouse の int64 カラムに変換する際の不具合を修正しました。#40639 を修正。#40642 (Barum Rho) 。
- 再帰的な
Bufferテーブルで発生するスタックオーバーフローを修正しました。これにより #40637 をクローズしました。#40643 (Alexey Milovidov). ProcessListに新しいクエリを挿入する際、割り当てが発生します。これらの割り当て中にメモリ制限に達すると、ProcessList::mutexがすでに取得されているため、OvercommitTrackerは使用できません。#40611 を修正しました。#40677 (Dmitry Novik).- marks の読み取り時に
max_read_buffer_size=0で発生する LOGICAL_ERROR を修正しました。#40705 (Azat Khuzhin). - クエリコンテキストなしで Kafka/… から MVs に書き込む際のメモリリークを修正。#40732 (Azat Khuzhin).
- CSVのスキーマ推論で発生する可能性がある
Attempt to read after eofエラーを修正しました。#40746 (Kruglov Pavel) 。 - write-through cache の論理エラー “ファイルセグメントの完了はダウンローダーのみが実行できる” を修正しました。#40748 をクローズしました。#40759 (Kseniia Sumarokova)。
- GROUPING 関数の結果が、SQL や他の DBMS と同じになるようにしました。#40762 (Dmitry Novik) 。
- #40595 では、
/etc/hostsにおける名前からアドレスへの解決でhost_regexp機能が正しく動作しないことが報告されました。これは修正されました。#40769 (Arthur Passos) 。 - Logファミリーにおける増分バックアップを修正しました。 #40827 (Vitaly Baranov).
- zero-copyレプリケーションで、潜在的なデータ損失を招くおそれのある極めてまれなバグを修正しました。 #40844 (alesapin).
- 異なるカラムから同じ set expression が構築された場合に発生する、key condition の解析時のクラッシュを修正しました。#40850 (Duc Canh Le) 。
- ネストされた JSON オブジェクトにおけるスキーマ推論を修正。#40851 (Kruglov Pavel) 。
- 空の場合に削除されない、ファイルシステムキャッシュファイル用の3桁プレフィックスディレクトリを修正しました。#40797 をクローズします。#40867 (Kseniia Sumarokova).
- レプリカへの接続に失敗した際に発生する未捕捉の DNS_ERROR を修正しました。 #40881 (Robert Coelho).
- サブクエリで不要なカラムを削除する際に発生するバグを修正しました。#40884 (luocongkai).
- リモート読み取りバッファの余分なメモリ割り当てを修正しました。 #40896 (Kseniia Sumarokova).
- データベースのドロップ権限を明示的に取り消されているユーザーでも、依然としてデータベースをドロップできてしまう問題を修正しました。#40906 (Nikita Mikhaylov).
- ClickHouse Keeper の修正: 書き込みリクエスト中のパスを Keeper の内部システムノードのパスと正しく比較するようにしました。 #40918 (Antonio Andelic) 。
- WriteBufferFromS3 のデッドロックを修正。 #40943 (Kseniia Sumarokova).
DESCRIBE TABLE url()およびその他一部のDESCRIBE TABLE <table_function>()のアクセス権を修正しました。#40975 (Vitaly Baranov) 。- nullptr の逆参照を引き起こす可能性がある
WITH GROUPING SETSの誤ったパーサー処理を削除しました。#41049 (Duc Canh Le) 。 - ClickHouse Keeper の修正: Keeper のシャットダウン時に発生する可能性があるセグメンテーションフォルトを修正しました。#41075 (Antonio Andelic) 。
- 集約関数コンビネータにおける、発生しうるセグメンテーションフォールト、解放済みヒープの使用、メモリリークを修正しました。Closes #40848. #41083 (Kruglov Pavel).
- Window views での query_views_log を修正しました。 #41132 (Raúl Marín).
- デフォルトで optimize_monotonous_functions_in_order_by を無効化し、#40094 を緩和しました。#41136 (Denny Crane)。
- データベースエンジンをOrdinaryからAtomicへ自動変換する際に発生する”possible deadlock avoided”エラーを修正しました。#41146 (Alexander Tokmakov) 。
- 空のブロックの場合に SortedBlocksWriter で発生する SIGSEGV を修正しました (
optimize_aggregation_in_orderおよびjoin_algorithm=autoで発生する可能性があります) 。 #41154 (Azat Khuzhin). - array join 使用時に、自明な count 最適化が有効な場合に誤ったクエリ結果が返される問題を修正しました。これにより #39431 を修正します。#41158 (Denny Crane)。
- GetPriorityForLoadBalancing::getPriorityFunc() における stack-use-after-return の問題を修正しました。#41159 (Azat Khuzhin) 。
- 「位置引数が範囲外です」という位置引数の例外を修正。 #40634 をクローズ。 #41189 (Kseniia Sumarokova)。
- 破損したデタッチされたパーツのバックグラウンドクリーンアップを修正しました。#41190 (Kseniia Sumarokova) 。
- WHERE句付きのクロス結合が多数ある場合に、クエリの書き換えが指数関数的に増大する問題を修正し、#21557 をクローズしました。#41223 (Vladimir C).
- 必要な例外の種類がすべて適切に処理されていなかったために発生していた、ライトスルーcacheの潜在的な論理エラーを修正しました。 #41208 をクローズします。 #41232 (Kseniia Sumarokova).
- system.filesystem_cache_log の String 型のログエントリを修正しました。 #41233 (jmimbrero).
- サブクエリ内に
OFFSET句があり、外側のクエリにWHERE句がある場合、誤った結果が返されることがありましたが、修正されました。修正: #40416。#41280 (Alexander Tokmakov). query_plan_optimize_primary_keyが有効な場合に、誤ったクエリ結果が返される可能性がある問題を修正しました。修正対象: #40599。#41281 (Nikolai Kochetov)。- lowerUTF8/upperUTF8 で、無効なシーケンスが他の行に影響を及ぼさないようにしました。#41286 (Azat Khuzhin).
Object型のカラムを含むALTER <table> ADD COLUMNクエリを修正しました。 #41290 (Anton Popov).- config に
distributed_ddl.pathがない場合に、system.distributed_ddl_queueを選択すると発生する “No node” error を修正しました。#41096。 #41296 (young scott). - disk object storage で誤って
Expected relative pathというロジックエラーが発生する問題を修正しました。#41246 に関連しています。#41297 (Kseniia Sumarokova). - MsgPack フォーマットで UUID を挿入する前に、カラム型のチェックを追加しました。#41309 (Kruglov Pavel) 。
- 設定
async_insertが有効な状態で、型Objectのカラムに不正なデータを非同期で insert した後に起こりうるクラッシュを修正しました。これは、非同期 INSERT のすべてのバッチ内の JSON が無効で、解析できなかった場合に発生することがありました。 #41336 (Anton Popov). - async_socket_for_remote/use_hedged_requests と並列 KILL で発生する可能性のあるデッドロックを修正しました。#41343 (Azat Khuzhin).
- デフォルトで optimize_rewrite_sum_if_to_count_if を無効化し、次の問題を緩和します: #38605 #38683。#41388 (Denny Crane) 。
- 22.8 以降、database が
Replicatedで、クラスター名とデータベース名が同じ場合、ON CLUSTER句は無視されます。そのため、DROP PARTITION ON CLUSTERはReplicatedで想定どおりに動作していませんでした。この問題は修正され、現在はデータベースレベルで複製されるクエリに対してのみON CLUSTER句が無視されます。#41299 を修正しました。#41390 (Alexander Tokmakov) 。 - クエリのキャンセル時 (
KILL QUERYまたはサーバーのシャットダウン時) に発生する可能性があるハング/デッドロックを修正しました。 #41467 (Azat Khuzhin). - JBOD機能の使用時に発生する可能性があるサーバーのクラッシュを修正しました。これにより #41365 が修正されます。#41483 (Amos Bird) 。
- nullable fixed string型からstring型への変換を修正しました。 #41541 (Duc Canh Le).
- 誤った集約状態を groupBitmap* に渡した際にクラッシュしないよう修正しました。#41563 (Raúl Marín) 。
ORDER BYと1500 <= LIMIT <= max_block_sizeを指定したクエリで、先頭の行が欠落した不正な結果が返されることがありました。#41182 を修正しました。#41576 (Nikolai Kochetov)。- materialized view 使用時の X-ClickHouse-Summary における読み取りバイト数/行数を修正しました。 #41586 (Raúl Marín).
OFFSETを含むクエリで発生する可能性があるpipeline stuck例外を修正しました。このエラーは、enable_optimize_predicate_expression = 0で、WHERE句に常に偽となる条件がある場合に確認されました。#41383 を修正しています。#41588 (Nikolai Kochetov).
ClickHouse リリース 22.8、2022-08-18。 プレゼンテーション, ビデオ
後方互換性を持たない変更
Date32とDateTime64の対応範囲を拡張し、西暦 1900 年から 2299 年までの日付をサポートするようにしました。以前のバージョンでサポートされていた範囲は、西暦 1925 年から 2283 年までに限られていました。実装では、ユリウス暦からグレゴリオ暦への歴史的な移行を考慮するのではなく、プロレプティック・グレゴリオ暦 (ISO 8601:2004 (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 に
SLRUcache ポリシーを追加。(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 ANTIdirect 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) 。
ビルド/テスト/パッケージングの改善
- ClickFiddle: 読み書きモードでClickHouseの各バージョンをテストできる新しいツール (Igor Baliuk) 。
- ClickHouseバイナリが自己展開形式になりました #35775 (Yakov Olkhovskiy, Arthur Filatenkov).
- 新しいtimezoneの変更に対応するため、tzdata を 2022b に更新しました。https://github.com/google/cctz/pull/226 を参照してください。Chile の 2022 年の DST 開始日は 9 月 4 日から 9 月 11 日に延期されました。Iran は、2022-09-21 に標準時に戻した後、DST の適用を恒久的に終了する予定です。1977 年の Asia/Tehran の過去の time zone に関する修正も含まれています。Iran が標準時を採用したのは 1946 年ではなく 1935 年です。1977 年には 03-21 23:00 から 10-20 24:00 まで DST を実施していました。1978 年の切り替え日は 03-20 と 10-20 ではなく 03-24 と 08-05 でした。また、1979 年春の切り替え日は 03-21 ではなく 05-27 でした (https://data.iana.org/time-zones/tzdb/NEWS) 。(Alexey Milovidov).
- 従来のパッケージでは、systemd.service ファイルが
/etcにインストールされていました。そこにあるファイルはconfとしてマークされるため、削除も自動更新もされません。この PR でそれらが削除されるようになりました。#39323 (Mikhail f. Shiryaev) 。 - LSan が有効に機能するようにした。 #39430 (Azat Khuzhin).
- TSAN は clang-14 で問題があるため (https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540)、ここでは TSAN バイナリを clang-15 でビルドしています。 #39450 (Mikhail f. Shiryaev).
- ClickHouseツールを個別の実行可能プログラムとしてビルドするオプションを削除しました。これにより #37847 が修正されます。#39520 (Alexey Milovidov)。
- s390x (ビッグエンディアン) でのビルドに向けた軽微な準備。 #39627 (Harry Lee). #39656 (Harry Lee). s390x 向けに BitHelpers のエンディアン問題を修正しました。 #39656 (Harry Lee). s390x アーキテクチャ (ClickHouse では未サポート) 向けに、SipHash に関連するコードの一部を実装しました。 #39732 (Harry Lee). s390x アーキテクチャ (ClickHouse では未サポート) 向けの協調スナップショットコードにおけるエンディアン問題を修正しました。 #39931 (Harry Lee). s390x アーキテクチャ (ClickHouse では未サポート) 向けのCodecコードにおけるエンディアン問題を修正しました。 #40008 (Harry Lee). s390x アーキテクチャ (ClickHouse では未サポート) 向けの ReadHelpers および WriteHelpers のコードで、BigEndian バイナリデータの読み書きに関するエンディアン問題を修正しました。 #40179 (Harry Lee).
clang-16(trunk) でのビルドに対応しました。これにより #39949 をクローズしました。#40181 (Alexey Milovidov) 。- CIで実行できるよう、RISC-V 64 buildを準備しました。これは #40141 に対応するものです。#40197 (Alexey Milovidov).
- 関数登録マクロのインターフェイス (
FUNCTION_REGISTER*) を簡素化し、registerFunctions.cpp で extern 関数を追加して呼び出す手順をなくしました。これにより、新しい関数のインクリメンタルビルドも高速化されます。#38615 (Li Yin). - Docker: docker image 内の entrypoint.sh が、マルチディスク構成向けに、設定内で見つかったすべてのフォルダーに対する chown を作成して実行するようになりました #17717。 #39121 (Nikita Mikhaylov) 。
バグ修正
CapnProto入力フォーマットで発生する可能性のあるセグメンテーションフォルトを修正しました。このバグは、kiojj により ClickHouse のバグ報奨金 program を通じて発見・報告されました。#40241 (Kruglov Pavel).- 配列添字演算子の動作が誤るごくまれなケースを修正しました。これにより #28720 をクローズします。#40185 (Alexey Milovidov).
- 暗号化関数における不十分な引数チェックを修正しました (クエリファザーによって検出) 。これにより #39987 がクローズされます。#40194 (Alexey Milovidov).
- 複数のカラムを含む
ENGINE = SetのテーブルでIN演算子を使用した際に、カラムの順序が誤ることがある問題を修正しました。これにより #13014 が修正されます。 #40225 (Alexey Milovidov). - 暗号化されたディスクからの読み取り時のシークを修正しました。このPRで #38381 を修正しました。#39687 (Vitaly Baranov).
- JOIN プラン内の重複カラムを修正しました。ついに #26809 を解決しました。#40009 (Vladimir C).
- 異なる日付/時刻型での ORDER BY WITH FILL を含む SELECT において、クエリがハングする問題を修正しました。 #37849 (Yakov Olkhovskiy).
- プロジェクションの ORDER BY と一致する ORDER BY の不具合を修正 (これまでは単に未ソートの結果を返していました) 。#38725 (Azat Khuzhin) 。
- GROUP BY ステートメント内の関数がテーブルのカラムまたは式のいずれかを隠している場合は、それらを最適化しないようにしました。#37032 を修正しました。#39103 (Anton Kozlov).
- RENAME TABLE 後に logs に誤った table 名が記録される問題を修正しました。この修正は #38018 に対応しています。#39227 (Amos Bird) 。
- クエリの最適化時におけるカラム刈り込みで発生する位置引数の問題を修正しました。#38433 をクローズします。#39293 (Kseniia Sumarokova)。
- Protobuf/CapnProto フォーマットでメッセージが空の場合に、空の
Tuple型を持つカラムを作成できてしまうスキーマ推論のバグを修正しました。#39051 Protobuf および CapnProto フォーマットのスキーマ推論時に、未サポートの型を持つフィールドをスキップできる 2 つの新しい設定input_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inferenceを追加しました。#39357 (Kruglov Pavel). - (Window View は実験的な機能です)
CREATE WINDOW VIEW .. ON CLUSTER ... INNERにおけるセグメンテーションフォルトを修正しました。#39363 をクローズしました。#39384 (Kseniia Sumarokova) 。 - function への insert をキャンセルした際の WriteBuffer の finalize 処理を修正しました (以前のバージョンでは
std::terminateが発生する可能性がありました) 。#39458 (Kruglov Pavel) 。 Object型のカラムのスパースシリアライゼーションでの保存に関する問題を修正しました。 #39464 (Anton Popov)。- プロジェクションの使用時に発生する可能性がある “Not found column in block” 例外を修正しました。これにより #39469 がクローズされます。#39470 (小路).
- materialized view を伴う DROP と INSERT の競合によって発生する例外を修正しました。#39477 (Azat Khuzhin).
- Apache Avro ライブラリのバグ: Avro フォーマットにおけるデータ競合と、ヒープバッファオーバーフローの可能性を修正しました。#39094 をクローズしました。#33652 をクローズしました。#39498 (Kruglov Pavel).
- 非同期読み取り (設定
local_filesystem_read_method='pread_threadpool'使用時) で、O_DIRECTが有効な場合 (min_bytes_to_use_direct_ioを設定して有効化) に発生するまれなバグを修正しました。#39506 (Anton Popov) 。 - (FreeBSD のみ) FreeBSD 上で clickhouse の起動時に発生していた “Code: 49. DB::Exception: FunctionFactory: the function name ” is not unique. (LOGICAL_ERROR)” を修正しました。#39551 (Alexander Gololobov).
- 最近導入された
splitByCharの “maxsplit” 引数が正しく機能していなかった不具合を修正しました。#39552 (filimonov). enable_optimize_predicate_expression使用時の ASOF JOIN のバグを修正し、#37813 をクローズしました。#39556 (Vladimir C) 。ON CLUSTERまたはReplicatedデータベースとReplicatedMergeTreeを使用するCREATE/DROP INDEXクエリを修正しました。以前はすべてのレプリカで実行されていたため、エラーが発生したり、DDL queue が滞留したりしていました。#39511 を修正しました。#39565 (Alexander Tokmakov).- JOIN を伴うプッシュダウン時の “column not found” エラーを修正し、#39505 をクローズしました。#39575 (Vladimir C)。
- 誤った
REGEXP_REPLACEのaliasを修正しました。これにより https://github.com/ClickHouse/ClickBench/issues/9 が修正されます。#39592 (Alexey Milovidov). - 指数減衰ウィンドウ関数の始点を、ウィンドウ内の最後の値に修正しました。以前は減衰を
exp((t - curr_row_t) / decay_length)という式で計算していましたが、ウィンドウの右境界がCURRENT ROWでない場合、この式は正しくありません。これをexp((t - last_row_t) / decay_length)に変更しました。ROWS BETWEEN (smth) AND CURRENT ROWを持つウィンドウでは、結果に変更はありません。#39593 (Vladimir Chebotaryov) 。 - オペランドのスケールに基づいて検出可能な Decimal 除算のオーバーフローを修正しました。 #39600 (Andrey Zvonov).
- 設定
output_format_arrow_string_as_stringとoutput_format_arrow_low_cardinality_as_dictionaryを組み合わせた場合に正しく動作するよう修正しました。#39624 をクローズしました。#39647 (Kruglov Pavel) 。 - 分散テーブルの読み取り時に、デフォルトデータベースの解決処理に関するバグを修正しました。#39674 (Anton Kozlov) 。
- (廃止された Ordinary データベースでのみ) mmap IO 用の cache が使用され、データベースエンジンが Ordinary で、削除された table と同じ名前の新しい table が作成された場合、Select が削除された table のデータを読み取ってしまうことがありました。修正済みです。 #39708 (Alexander Tokmakov).
- 発生する可能性のあるエラー
Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinalityを修正しました。#38460 を修正。#39716 (Arthur Passos) 。 - JSONフォーマットの
metaセクション内のフィールド名が、誤って二重にエスケープされていました。これで #39693 はクローズされます。 #39747 (Alexey Milovidov). - タプルと演算子
INに関する誤った索引解析を修正しました。これにより、誤ったクエリ結果が生じる可能性がありました。#39752 (Anton Popov). EmbeddedRocksDBテーブルで、params を使用してキーでフィルタリングする処理を修正しました。 #39757 (Antonio Andelic).- ARRAY JOIN の最適化が原因で発生していたエラー
Invalid number of columns in chunk pushed to OutputPortを修正しました。#39164 の修正です。#39799 (Nikolai Kochetov)。 - Linuxカーネルのバグに対する回避策です。
local_filesystem_read_method=pread_threadpoolを設定した際のCANNOT_READ_ALL_DATA例外を修正しました。このバグは、man によると、Linuxカーネルのバージョン 5.9 と 5.10 にのみ影響していました。#39800 (Anton Popov). - (NFS のみ) root-squash が有効なボリュームで発生していた NFS の
mkdirの不具合を修正しました。#39898 (Constantine Peresypkin) 。 - DETACH/DROP 時に、Prometheus メトリクスから辞書を削除。 #39926 (Azat Khuzhin).
- 仮想カラム使用時の StorageFile の読み取りを修正しました。#39907 をクローズしました。#39943 (flynn)。
- fetches中のメモリ使用量が過大になる問題を修正。#39915 を修正。#39990 (Nikolai Kochetov).
- (実験的機能)
hashIdのクラッシュと、salt パラメーターが使用されていなかった問題を修正しました。 #40002 (Raúl Marín). - 特定の定数カラムと非定数カラムの組み合わせを使用した場合、
EXCEPTおよびINTERSECT演算子でクラッシュが発生する可能性がありました。#40020 (Duc Canh Le) 。 - 極端に遅い INSERT や長時間にわたる merge/mutation の実行中に発生する “Part ディレクトリが存在しません” および “
tmp_<part_name>… そのようなファイルまたはディレクトリはありません” エラーを修正しました。あわせて、以前の part の fetch の試行が失敗し、tmp-fetch_<part_name>ディレクトリがクリーンアップされなかった場合に、ログにエラーや警告が一切記録されないまま、一部のレプリケーションキューのエントリが滞留する可能性がある問題も修正しました。#40031 (Alexander Tokmakov). - フォーマット
Valuesにおけるタプルの配列のパースで発生するまれなケースを修正しました。 #40034 (Anton Popov). - ArrowColumn フォーマットにおいて、Dictionary(X) および Dictionary(Nullable(X)) から、それぞれ ClickHouse の LowCardinality(X) および LowCardinality(Nullable(X)) への変換を修正しました。 #40037 (Arthur Passos).
- タスクのスケジューリング失敗時に、S3 への書き込み中に発生する可能性があるデッドロックを修正しました。 #40070 (Maksim Kita).
- 再計算対象の索引に正しいファイル拡張子 (
.idxまたはidx2) を追加することで collectFilesToSkip() のバグを修正し、誤ったハードリンクを回避しました。修正: #39896。#40095 (Jianmei Zhang) 。 - 逆引きDNSの名前解決に関する修正。 #40134 (Arthur Passos).
Array(UInt32)に対するarrayDifferenceの予期しない結果を修正しました。 #40211 (Duc Canh Le).
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テーブル向けの古いストレージ定義構文は非推奨になりました。デフォルトでは、Ordinaryengine を使った新しい database は作成できません。systemdatabase がOrdinaryengine の場合、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テーブル向けに、新しいdirectjoin アルゴリズムを追加しました。詳細は #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).
パフォーマンス改善
- ソート済みカラムに対する Distinct の最適化。入力ストリームが distinct 対象のカラムでソートされている場合は、専用の distinct 変換を使用します。この最適化は、pre-distinct、final distinct、またはその両方に適用できます。初期実装は @dimarub2000 によるものです。#37803 (Igor Nikonov) 。
BinaryHeapのバッチ版を使用して、ORDER BY、MergeTreeのマージ、ウィンドウ関数のパフォーマンスを改善しました。 #38022 (Maksim Kita).FINALを使用するクエリの並列実行を強化 #36396 (Nikita Taranov).- #35616 で導入された、join パフォーマンスの重大な低下を修正しました。ssb クエリのような一般的な join クエリが、ほぼ 3 か月もの間 10 倍遅くなっていたにもかかわらず、誰からも報告がなかったのは興味深いことです。 #38052 (Amos Bird).
- Intel hyperscanライブラリからvectorscanに移行し、非x86プラットフォームでの多くの文字列マッチングが高速化されました。 #38171 (Robert Schulze).
- 集約後に実行されるクエリプランの各ステップの並列性が向上しました。 #38295 (Nikita Taranov).
JSON型カラムへの挿入性能を改善しました。#38320 (Anton Popov).- HashTable における挿入とルックアップを最適化。 #38413 (Nikita Taranov).
- #32493 に起因するパフォーマンス低下を修正しました。#38417 (Alexey Milovidov).
- SIMD 命令を使用して、数値カラムの結合処理の性能を改善しました。#37235 (zzachimed). #38565 (Maksim Kita).
- 配列に対する Norm 関数および Distance 関数が 1.2~2 倍高速化されました。#38740 (Alexander Gololobov).
- LZ4 の展開向けに、AVX-512 VBMI で最適化された
copyOverlap32Shuffleを追加しました。つまり、LZ4 の展開性能が向上しました。#37891 (Guo Wangyang) 。 ORDER BY (a, b)は、ORDER BY a, bと同じ利点をすべて活用できます。#38873 (Igor Nikonov) 。- ベンチマークをより安定させるため、分岐を 32B 境界に整列させました。#38988 (Guo Wangyang) 。Intel では平均で 1..2% の性能向上が見込めます。
- 実行可能UDF、実行可能辞書、および実行可能テーブルでは、サブプロセスの終了待ちで1秒を無駄にすることがなくなりました。#38929 (Constantine Peresypkin) 。
- すべてのカラムが選択されていない場合の
system.stack_traceテーブルへのアクセスを最適化しました。#39177 (Azat Khuzhin). - LowCardinality 引数に対する isNullable/isConstant/isNull/isNotNull の性能を改善しました。#39192 (Kruglov Pavel) 。
- window関数におけるORDER BYの処理を最適化。#34632 (Vladimir Chebotarev) 。
- テーブル
system.asynchronous_metric_logは、ストレージ容量をさらに削減できるよう最適化されました。これにより #38134 が解決されます。YouTube ビデオ をご覧ください。#38428 (Alexey Milovidov).
改善
- SQL 標準の CREATE INDEX および DROP INDEX 構文に対応しました。#35166 (Jianmei Zhang) 。
- INSERTクエリについてもプロファイルイベントを送信するようにしました (これまではSELECTのみ対応していました) 。 #37391 (Azat Khuzhin).
- 完全にマテリアライズされたプロジェクションに対して、インオーダー集約 (
optimize_aggregation_in_order) を実装しました。#37469 (Azat Khuzhin) 。 - Kerberos の初期化における subprocess の実行を削除しました。新しいインテグレーションテストを追加しました。#27651 をクローズしました。#38105 (Roman Vasin).
-
- 複数の JOIN の Rewrite で識別子名を書き換えないようにする設定
multiple_joins_try_to_keep_original_namesを追加し、#34697 を修正しました。#38149 (Vladimir C).
- 複数の JOIN の Rewrite で識別子名を書き換えないようにする設定
- trace-visualizer の UX を改善しました。 #38169 (Sergei Trifonov) 。
- AArch64 でのスタックトレース収集とクエリプロファイラを有効化しました。#38181 (Maksim Kita).
- SQLユーザー定義関数の読み込み時に、
user_definedディレクトリ内のシンボリックリンクをスキップしないようにしました。#38042 をクローズ。#38184 (Maksim Kita)。 store/内のサブディレクトリをバックグラウンドでクリーンアップする機能を追加しました。場合によっては、clickhouse-server がstore/内に不要なサブディレクトリを残してしまうことがあり (たとえば、table の作成に失敗した場合) 、それらのディレクトリは削除されないままでした。#33710 を修正しました。#38265 (Alexander Tokmakov) 。- 設定ファイルのcache設定を表示する
DESCRIBE CACHEクエリを追加しました。利用可能なファイルシステムキャッシュの一覧を表示するSHOW CACHESクエリを追加しました。#38279 (Kseniia Sumarokova). system drop filesystem cacheのアクセスチェックを追加しました。ON CLUSTER に対応しました。#38319 (Kseniia Sumarokova) 。- 21.3 から 22.3 へのアップグレード時に発生する PostgreSQL データベースエンジンの非互換性を修正しました。#36659 をクローズしました。#38369 (Kseniia Sumarokova).
filesystemAvailableおよび類似の関数が、clickhouse-localでも使えるようになりました。これにより #38423 がクローズされました。#38424 (Alexey Milovidov).revision関数を追加。#38555 (Azat Khuzhin) 。- プロキシトンネル経由でのGCS利用を修正。 #38726 (Azat Khuzhin).
clickhouse client / localで\i fileをサポート (psql の\iと同様) 。 #38813 (Kseniia Sumarokova).EXPLAIN ASTに新しいオプションoptimize = 1が追加されました。有効にすると、書き換え後の AST が表示され、無効の場合は元のクエリの AST が表示されます。デフォルトでは無効です。#38910 (Igor Nikonov) 。- カラム一覧で末尾のコンマを許可しました。#38425 を解決しました。#38440 (chen).
parallel_hashJOINメソッドのバグ修正とパフォーマンス改善。#37648 (Vladimir C).- Hadoop のセキュアな RPC 転送 (hadoop.rpc.protection=privacy および hadoop.rpc.protection=integrity) をサポート。#37852 (Peng Liu) 。
StorageHiveで struct 型をサポート。 #38118 (lgbo).- S3 の単一オブジェクトは
RemoveObjectRequestで削除されるようになりました。これにより、removeFileIfExistsを使えず、結果としてremove機能のおよそ半分が実質的に動作しなかった GCP との互換性を実装しました。また、GCS ではサポートされていないDeleteObjectsS3 API を自動検出するようになりました。これにより、設定で明示的にsupport_batch_delete=0を指定しなくても GCS を使用できるようになります。 #37882 (Vladimir Chebotarev). - ClickHouse Keeper 関連の基本的な監視データを公開しました (ProfileEvents および CurrentMetrics 経由) 。#38072 (lingpeng0314) 。
- PostgreSQL engine 接続で
auto_closeオプションをサポートしました。#31486 をクローズします。#38363 (Kseniia Sumarokova) 。 - table function のカラム宣言で
NULL修飾子を許可しました。#38816 (Kruglov Pavel) 。 - シャットダウン中に無害な
TABLE_IS_READ_ONLYエラーが発生するのを避けるため、シャットダウン前にmutations_finalizing_taskを無効化しました。#38851 (Raúl Marín) 。 - 非推奨の Ordinary データベースを使用している場合に、INSERT クエリがある状況で、ALTER クエリの後に SELECT クエリが不必要に待機する問題を解消しました。#38864 (Azat Khuzhin).
EXPLAIN ASTに新しいオプションrewriteが追加されました。有効にすると、書き換え後のASTが表示され、無効の場合は元のクエリのASTが表示されます。デフォルトでは無効です。#38910 (Igor Nikonov).- 想定内の場合、system.errors で ZooKeeper の “Node exists” 例外を報告しないようにしました。#38961 (Raúl Marín) 。
clickhouse-keeper: リアルタイムでのダイジェストの計算と検証をサポートしました。デフォルトでは無効です。#37555 (Antonio Andelic) 。clickhouse-extract-from-configツールのキー内で、グロブパターン* or {expr1, expr2, expr3}を指定できるようにしました。#38966 (Nikita Mikhaylov) 。- clearOldLogs: 同時削除時に KEEPER_EXCEPTION を報告しないようにしました。#39016 (Raúl Marín).
- clickhouse-keeper の改善: Keeper サーバーに関するメタ情報をディスクに保存するようにしました。#39069 (Antonio Andelic) 。これにより、すべての Keeper ノードを同時にシャットダウンまたは再起動する場合でも、運用しやすくなります。
- ファイルシステムキャッシュの使用時にディスク容量が不足しても、例外を出さずに処理を継続するようにしました。 #39106 (Kseniia Sumarokova).
- k8s から送られる SIGTERM シグナルの処理。 #39130 (Timur Solodovnikov).
- system.part_log に
merge_algorithmカラム (Undecided、Horizontal、Vertical) を追加。 #39181 (Azat Khuzhin) 。 - ディスクが回転式でない場合、
system.errorsのカウンターを増加させないようにしました。#39216 (Raúl Marín). system.query_logにおけるINSERTクエリのメトリクスresult_bytesは、挿入されたバイト数を示します。以前はこの値が誤っており、result_rowsと同じ値が保存されていました。 #39225 (Ilya Yatsishin).- clickhouse-client の CPU 使用率メトリックが、より見やすく表示されるようになりました。#38756 を修正しました。#39280 (Sergei Trifonov) 。
- サーバー起動時にファイルシステムキャッシュの初期化で発生した例外を再スローするようにし、エラーメッセージも改善しました。 #39386 (Kseniia Sumarokova).
- OpenTelemetry は現在、デフォルトでは Processors スパンを含まないトレースを収集します (数が多すぎるためです) 。Processors スパンの収集を有効にするには、
opentelemetry_trace_processors設定を有効にします。#39170 (Ilya Yatsishin) 。 - 関数
multiMatch[Fuzzy](AllIndices/Any/AnyIndex)- needle 引数が空でも、論理エラーをスローしないようにしました。#39012 (Robert Schulze). - デフォルトの引数
x-max-lengthおよびx-overflowを指定せずにRabbitMQキューを宣言できるようになりました。#39259 (rnbondarenko).
ビルド/テスト/パッケージングの改善
- ClickHouse に Clang Thread Safety Analysis (TSA) のアノテーションを適用しました。#38068 (Robert Schulze).
- 汎用インストールスクリプトを FreeBSD に対応させました。#39302 (Alexey Milovidov).
s390xプラットフォームでのビルドに向けた準備を行いました。#39193 (Harry Lee).jemallocライブラリのバグを修正しました。#38757 (Azat Khuzhin).- ハードウェアベンチマークで、結果の自動アップロードがサポートされるようになりました。#38427 (Alexey Milovidov).
- システムテーブル “system.licenses” が Mac (Darwin) でも正しく設定されるようになりました。#38294 (Robert Schulze).
all|noarchパッケージをアーキテクチャ依存に変更しました。これに伴い一部のドキュメントを修正し、aarch64|arm64 パッケージを Artifactory とリリースアセットにアップロードするようにしました。また、#36443 も修正しました。#38580 (Mikhail f. Shiryaev).
バグ修正 (公式の安定版またはプレ安定版リリースでユーザーに影響する不具合)
Decimal128/Decimal256で、scale が 19 桁を超える場合の丸め処理を修正しました。 #38027 (Igor Nikonov).- ストレージ
Hive(インテグレーション用テーブルエンジン) でのデータ競合が原因で発生していたクラッシュを修正しました。 #38887 (lgbo). - ON CLUSTER を付けて GRANT ALL ON . を実行した際に発生するクラッシュを修正しました。これは https://github.com/ClickHouse/ClickHouse/pull/35767 で壊れていました。これにより #38618 をクローズしました。#38674 (Vitaly Baranov).
{0..10}形式での glob 展開を修正しました。#38498 を修正します。現在の実装は、@rschu1ze が こちら で述べているように、shell の動作に似ています。#38502 (Heena Bansal).- 定数の
mapargument を使用した際にmapUpdate、mapFilter関数がクラッシュする問題を修正しました。#38547 をクローズしました。#38553 (hexiaoting). - クエリ最適化において誤ったクエリ結果 (不正確な索引解析) を引き起こす可能性があった
toHourの単調性情報を修正しました。これにより #38333 が修正されます。#38675 (Amos Bird). - S3 ストレージが並列書き込みをサポートしているかどうかの判定を修正しました。この不具合により、S3 への並列書き込みが機能していませんでした。#38792 (chen).
- 並列読み取りバッファにおける S3 のシーク可能な読み取りを修正しました (クエリ時のメモリ使用量に影響していました) 。 #38258 をクローズしました。 #38802 (Kseniia Sumarokova).
simdjsonを更新しました。これにより、AVX-512 VBMI を備えた最新の Intel CPU 搭載マシンで発生するバッファオーバーフローの問題 #38621 を修正しました。#38838 (Alexey Milovidov) 。- Vertical mergeで発生する可能性のある論理エラーを修正しました。#38859 (Maksim Kita) 。
- Seconds 単位の設定プロファイルの問題を修正しました。#38896 (Raúl Marín) 。
- Nullable なパーティションキーがある場合に、パーティションプルーニングが誤って行われる問題を修正しました。注: おそらく Nullable なパーティションキーは使っていないはずです。これはかなり特殊な機能であり、使うべきではありません。Nullable キーは無意味で、この機能が必要になるのはよほど特殊なユースケースだけです。これにより #38941 を修正しました。 #38946 (Amos Bird).
- fetches における
fsync_part_directoryを改善しました。 #38993 (Azat Khuzhin). OvercommitTracker内で発生する可能性のあるデッドロックを修正しました。#37794 を修正しました。#39030 (Dmitry Novik).- ファイルシステムキャッシュの容量が上限に達したタイミングと重なる、一部のまれなケースで発生する可能性があった不具合を修正しました。Closes #39066. #39070 (Kseniia Sumarokova).
- ウィンドウ式の引数の解釈における一部の境界的なケースを修正しました。#38538 ウィンドウ式で高階関数を使用できるようにしました。#39112 (Dmitry Novik) 。
tuple関数でLowCardinality型が保持されるようになりました。以前はLowCardinality型が失われ、作成されたタプルの要素はLowCardinalityの基底型になっていました。#39113 (Anton Popov).- アタッチされた MATERIALIZED VIEW を持つテーブルへの INSERT で、設定
extremes = 1が有効な場合に発生することがあったエラーBlock structure mismatchを修正しました。#29759 および #38729 を解決しました。#39125 (Nikolai Kochetov). optimize_trivial_count_queryとempty_result_for_aggregation_by_empty_setの両方が true に設定されている場合に、クエリ結果が予期しないものになる問題を修正しました。これにより #39140 が修正されます。#39155 (Amos Bird).PREWHEREおよび read-in-order 最適化を使用した SELECT で発生していたエラーNot found column Type in blockを修正しました。#39157 (Yakov Olkhovskiy) 。- リモートファイルシステムでのハードリンク作成時に発生する、きわめてまれなレースコンディションを修正しました。これを再現する唯一の方法は、バックアップを同時実行することです。#39190 (alesapin).
- (zero-copy レプリケーションは本番環境で使用すべきではない実験的機能です)
allow_remote_fs_zero_copy_replication使用時のインメモリパートのフェッチを修正しました。#39214 (Azat Khuzhin) 。 - (MaterializedPostgreSQL - 実験的機能) 。レプリケーションの初期化時に例外が発生した場合に起こり得た、MaterializedPostgreSQL データベースエンジンのセグメンテーションフォルトを修正しました。#36939 をクローズしました。#39272 (Kseniia Sumarokova)。
- PostgreSQLデータベースエンジンからのテーブルメタデータの誤った取得を修正しました。#33502 をクローズしました。#39283 (Kseniia Sumarokova).
- 集約キーが他の関数でラップされている場合に発生する projection の例外を修正しました。これにより #37151 も修正されます。#37155 (Amos Bird).
- 一部の関数で発生する可能性があった、
... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ...という論理エラーを修正しました。Closes: #37610 Closes: #37741。#37759 (Kruglov Pavel). - UNION のサブクエリで誤っていたカラム順を修正しました (サブセレクト内でカラムが重複している場合、誤った結果になることがありました) 。 #37887 (Azat Khuzhin).
- ドットを含むカラム名での MODIFY ALTER Column の誤った動作を修正しました。#37907 をクローズしました。#37971 (Kruglov Pavel) 。
- S3 にデータを保存する
MergeTreeテーブルからスパースカラムを読み取る際の不具合を修正しました。#37978 (Anton Popov). - 設定からレプリカを削除した際に発生する可能性がある、
Distributedの非同期 INSERT におけるクラッシュを修正しました。#38029 (Nikolai Kochetov). - alias なしの CTE を使用した GLOBAL JOIN で発生する “Missing columns” を修正しました。#38056 (Azat Khuzhin).
- 後方互換性モードで、
tuple関数をリテラルに書き換える。 #38096 (Anton Kozlov). ORDER BY時の出力ブロックに対する不要なメモリ予約を修正しました。#38127 (iyupeng) 。- array mapped functions における
Bad cast from type DB::IColumn* to DB::ColumnNullable*の論理エラーの可能性を修正しました。#38006 をクローズしました。#38132 (Kruglov Pavel). - partial merge join における一時的な名前の競合を修正し、#37928 をクローズしました。#38135 (Vladimir C).
CREATE TABLE nested_name_tuples (aTuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory;のようなクエリに関する軽微な問題。 #38136 (lgbo).- 条件が false でも引数が実行されてしまう、ネストした短絡関数のバグを修正しました。#38040 をクローズします。#38173 (Kruglov Pavel) 。
- (Window View は実験的な機能です) 誤った構造の WINDOW VIEW における LOGICAL_ERROR を修正しました。 #38205 (Azat Khuzhin).
- OAUTHBEARER のリフレッシュコールバックが設定されている場合にクラッシュが発生する問題を修正するため、librdkafka のサブモジュールを更新しました。#38225 (Rafael Acevedo) 。
- ProfileEvents が原因で Distributed への INSERT がハングする問題を修正しました。 #38307 (Azat Khuzhin).
- PostgreSQLエンジンにおける再試行の問題を修正しました。 #38310 (Kseniia Sumarokova).
- PartialSortingTransform の最適化を修正しました (SIGSEGV および誤った結果が返される可能性がある問題) 。 #38324 (Azat Khuzhin).
- PeekableReadBuffer ベースのフォーマットにおける RabbitMQ の問題を修正しました。#38061 をクローズします。#38356 (Kseniia Sumarokova).
- MaterializedPostgreSQL - 実験的機能。MaterializedPostgreSQL で発生する可能性がある
Invalid number of rows in Chunkを修正しました。#37323 をクローズしました。#38360 (Kseniia Sumarokova). - 接続文字列の設定に関する RabbitMQ の設定不備を修正しました。#36531 をクローズしました。#38365 (Kseniia Sumarokova).
- 配列の次元サイズを取得する際に、PostgreSQL engine が PostgreSQL スキーマを使用していなかった不具合を修正しました。#36755 をクローズしました。#36772 をクローズしました。#38366 (Kseniia Sumarokova).
DISTINCTとLIMITを伴う分散クエリで、結果が誤っている可能性がある問題を修正しました。#38282 を修正。#38371 (Anton Popov).- 0バイトを含むパターンでの countSubstrings() および position() の誤った結果を修正しました。 #38589 (Robert Schulze).
- IPv4/IPv6 表現の値が不正なテーブルであっても、clickhouse-server を起動してテーブルを Attach/Detach できるようになりました。問題 #35156 の正式な修正です。#38590 (alesapin).
- 一部の引数が NaN の場合でも、
rankCorr関数は正しく動作するようになりました。これにより #38396 がクローズされました。#38722 (Alexey Milovidov). parallel_view_processing=1とoptimize_trivial_insert_select=1を併用した場合の問題を修正しました。ビューへのプッシュ時におけるmax_insert_threadsの問題を修正しました。#38731 (Azat Khuzhin).Mapコンビネータ付きの集約関数で発生し、誤った結果を招く use-after-free の問題を修正しました。#38748 (Azat Khuzhin) 。
ClickHouse リリース 22.6 (2022-06-16) プレゼンテーション, ビデオ
後方互換性を持たない変更
- SQL での 8 進数リテラルのサポートを削除しました。以前のバージョンでは、これらは Float64 として解析されていました。#37765 (Yakov Olkhovskiy).
- 型に
secondsを使用する設定の解析方法を変更し、浮動小数点値 (例:max_execution_time=0.5) をサポートするようにしました。Infinity または NaN の値は例外をスローします。#37187 (Raúl Marín). - 実験的な型
Objectのカラムに対するバイナリシリアライゼーションのフォーマットを変更しました。新しいフォーマットは、サードパーティ製クライアントで実装しやすくなっています。#37482 (Anton Popov). - 設定
output_format_json_named_tuples_as_objectsをデフォルトで有効にしました。これにより、名前付きタプルを JSON フォーマットで JSON オブジェクトとしてシリアライズできます。#37756 (Anton Popov). - 末尾にエスケープ記号 (’') を含む LIKE パターンは、SQL 標準に従い使用できなくなりました。#37764 (Robert Schulze).
- AArch64 CPU を使用するクラスターで異なる ClickHouse バージョンを実行している場合、またはクラスター内で AArch64 と amd64 を混在させている場合に、256 ビットには収まるものの 64 ビットには収まらない固定長型の複数キーを GROUP BY に使う分散クエリを実行し、その結果サイズが非常に大きいと、アップグレード中はこれらのクエリ結果のデータが完全には集計されません。回避策: ローリングアップグレードではなく、ダウンタイムを伴うアップグレードを行ってください。
新機能
GROUPING関数を追加しました。これにより、ROLLUP、CUBE、またはGROUPING SETSを使用するクエリ内のレコードを識別できるようになります。#19426 をクローズしました。#37163 (Dmitry Novik).- 浮動小数点データの圧縮に対応した新しいcodecアルゴリズム FPC。#37553 (Mikhail Guzov).
- 新しい列指向の JSON フォーマット
JSONColumns、JSONCompactColumns、JSONColumnsWithMetadataを追加。#36338 をクローズ。#34509 をクローズ。#36975 (Kruglov Pavel). - OpenTelemetry トレースを可視化する d3js ベースのツールを追加しました。#37810 (Sergei Trifonov) 。
system.zookeeperテーブルへの INSERT をサポート。#22130 をクローズ。#37596 (Han Fei).LIKE、ILIKE、match関数で、非定数のパターン引数に対応しました。#37251 (Robert Schulze) 。- 実行可能なユーザー定義関数でパラメーターがサポートされるようになりました。例:
SELECT test_function(parameters)(arguments). #37578 をクローズ。#37720 (Maksim Kita). - system.part_log テーブルに
merge_reasonカラムを追加。#36912 (Sema Checherinda) 。 - Avroフォーマットで Map および Record をサポートしました。Avroフォーマットで null をデフォルト値として insert できるようにする新しい設定
input_format_avro_null_as_defaultを追加しました。#18925 をクローズしました。#37378 をクローズしました。#32899 をクローズしました。#37525 (Kruglov Pavel) 。 - ClickHouse 向けに設定された仮想ファイルシステムの調査や操作を行うための
clickhouse-disksツールを追加しました。#36060 (Artyom Yurkov) 。 - H3 の単方向エッジ関数が追加されました。#36843 (Bharat Nallan) 。
- 符号なし整数から hashids を計算できるようにしました。#37013 (Michael Nutt) 。
CREATE USER <user> IDENTIFIED WITH sha256_hashで、SALTを明示的に指定できるようになりました。#37377 (Yakov Olkhovskiy).- CSV/TSVフォーマットで、ファイルの先頭にある指定した行数をスキップできるようにする2つの新しい設定
input_format_csv_skip_first_lines/input_format_tsv_skip_first_linesを追加しました。#37537 (Kruglov Pavel). showCertificate関数で、現在のサーバーのSSL証明書を表示できるようになりました。#37540 (Yakov Olkhovskiy) 。- Named Collections 内の Data Dictionaries で HTTP ソースがサポートされました。#37581 (Yakov Olkhovskiy) 。
- 新しいウィンドウ関数
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND])が追加されました。#37628 (Andrey Zvonov) 。 ReplicatedMergeTreeテーブルのコメントを変更できるようになりました。#37416 (Vasily Nemkov) 。- 対応するテーブルが削除されているかどうかにかかわらず、バックアップ全体を削除する
SYSTEM UNFREEZEクエリが追加されました。#36424 (Vadim Volodin).
実験的機能
WINDOW VIEWでPOPULATEが使えるようになりました。#36945 (vxider).WINDOW VIEWでALTER TABLE ... MODIFY QUERYをサポートしました。#37188 (vxider).- この PR では、
WINDOW VIEWにおけるENGINE構文の動作をMATERIALIZED VIEWと同様に変更しました。#37214 (vxider).
パフォーマンス改善
- ARM NEON 向けに多数の最適化を追加しました #38093(Daniel Kutenin), (Alexandra Pilipyuk) 注: ARM CPU を搭載したクラスターで異なるバージョンの ClickHouse を実行し、256 ビットには収まるものの 64 ビットには収まらない固定長型の複数キーで GROUP BY を行う分散クエリを使用している場合、アップグレード中は集計クエリの結果が不正確になります。回避策: ローリングアップグレードではなく、ダウンタイムを伴うアップグレードを実施してください。
- フォーマット Native、Protobuf、CapnProto、JSONEachRow、TSKV、および接尾辞 WithNames/WithNamesAndTypes を持つすべてのフォーマットで、カラムの一部を選択する際のパフォーマンスとメモリ使用量を改善しました。これまでは、これらのフォーマットのファイルからカラムの一部だけを選択する場合でも、すべてのカラムが読み込まれてメモリに保持されていました。現在は、必要なカラムのみが読み込まれます。この PR では、
input_format_skip_unknown_fieldsがデフォルトで有効になります。これを有効にしないと、カラムの一部を選択した場合に例外がスローされるためです。#37192 (Kruglov Pavel). - これで、JOIN でより多くのフィルタをプッシュダウンできるようになりました。#37472 (Amos Bird) 。
- 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).
ビルド/テスト/パッケージングの改善
- ビルドに
clang-14と LLVM インフラストラクチャのバージョン 14 を使用するようにしました。これにより #34681 がクローズされます。#34754 (Alexey Milovidov)。注:clang-14の ThreadSanitizer には バグ があり、CI の動作に悪影響を及ぼします。 - 起動時に権限を落とせるようにしました。これにより Dockerイメージが簡素化されます。#36293 をクローズします。#36341 (Alexey Milovidov)。
- CI にドキュメントのスペルチェックを追加しました。#37790 (Vladimir C)。
- 実行可能ファイルの整合性確認に必要な埋め込みハッシュまで削除してしまっていた、過剰な strip 処理を修正しました。#37993 (Robert Schulze)。
バグ修正
- 定数文字列型を含む
SELECT ... INTERSECTおよびEXCEPT SELECTステートメントを修正しました。 #37738 (Antonio Andelic). AggregateFunction型のカラムでGROUP BYを行う場合の不具合を修正しました。#37093 (Azat Khuzhin).- (実験的な WINDOW VIEW) WindowView の
addDependencyを修正しました。このバグは #37237 と同様の手順で再現できます。#37224 (vxider). - ORDER BY … WITH FILL 機能の不整合を修正しました。ORDER BY … WITH FILL を含むクエリでは、WITH FILL を指定したカラムが複数ある場合に、余分な行が生成されることがありました。#38074 (Yakov Olkhovskiy).
- このPRでは、依存関係が削除されたテーブルに追加されるのを防ぐため、
addDependencyをコンストラクタからstartup()に移動し、#37237 を修正しました。#37243 (vxider)。 - 列指向フォーマットで、欠損値にデフォルト値を挿入する際の不具合を修正しました。従来は、欠落しているカラムに対して、カラムではなく型のデフォルト値が設定されていました。 #37253 (Kruglov Pavel).
- (実験的な Object 型)
Object型のカラムにネストされた配列を挿入する際の一部のケースを修正しました。#37305 (Anton Popov). - aggregate function、prewhere、および join において、定数文字列の衝突によって発生する予期しない error を修正しました。#36891 をクローズしました。#37336 (Vladimir C).
- クエリ内の GROUP/ORDER BY および optimize_aggregation_in_order に関するプロジェクションの問題を修正しました (以前は最後のソートしか実行されていなかったため、結果が正しくありませんでした) 。 #37342 (Azat Khuzhin).
- S3 のキー名に記号が含まれる場合に発生するエラーを修正しました。#33009 を修正しました。#37344 (Vladimir Chebotarev) 。
- GROUPING SETS を ROLLUP または CUBE と組み合わせて使用した場合に、例外を発生させるようにしました。#37367 (Dmitry Novik) 。
config.xml(新しい方法) で指定され、users.xml(非推奨の方法) では指定されていないbackground_pool_size/background_merges_mutations_concurrency_ratioの値が標準より大きい非標準の値である場合に、マージ処理中の getMaxSourcePartsSizeForMerge で発生する LOGICAL_ERROR を修正しました。 #37413 (Azat Khuzhin).- RowBinary フォーマットで UTF-8 BOM を削除しないよう修正しました。 #37428 (Paul Loyd). #37428 (Paul Loyd).
- clickhouse-keeper のバグ修正: 単一ノードクラスターで強制復旧が機能しない問題を修正。 #37440 (Antonio Andelic).
- normalizeUTF8 関数の論理エラーを修正しました。#37298 をクローズしました。#37443 (Maksim Kita) 。
- JoinSwitcher における Nullable の lowcard への CAST を修正し、#37385 をクローズしました。#37453 (Vladimir C) 。
- ORC/Arrow/Parquet フォーマットにおける名前付きタプルの出力を修正しました。 #37458 (Kruglov Pavel).
- GROUPING SETS 使用時の ORDER BY 句における単調関数の最適化を修正しました。#37401 を修正します。#37493 (Dmitry Novik) 。
- 一部の条件下でDictionaryとのjoin時に発生するエラーを修正しました。#37386 をクローズしました。#37530 (Vladimir C).
GROUPING SETSではoptimize_aggregation_in_orderを禁止 (LOGICAL_ERRORを修正) 。#37542 (Azat Khuzhin) 。- ActionsDAG のダンプ情報の誤りを修正しました。#37587 (zhanglistar) 。
- UNIONクエリにおける型変換を修正しました (LOGICAL_ERRORが発生する場合があります) 。#37593 (Azat Khuzhin) 。
- 負のインターバルを指定した
STEP句におけるWITH FILL修飾子の問題を修正しました。#37514 を修正しました。#37600 (Anton Popov). join_use_nulls = 1のときに発生する不正な joinGet の配列使用を修正しました。これにより #37562 が修正されます。 #37650 (Amos Bird).- cross join におけるカラム数の不一致を修正し、#37561 をクローズしました。 #37653 (Vladimir C).
- named collections で設定された MySQL データベースに対する
show create tableで発生していたセグメンテーションフォルトを修正しました。#37683 をクローズしました。#37690 (Kseniia Sumarokova). - SETTINGS句なしで storage を作成した場合に、サーバー再起動時に RabbitMQ Storage を起動できない問題を修正しました。#37463 をクローズしました。#37691 (Kseniia Sumarokova).
- SQL ユーザー定義関数で、readonly モードでは CREATE/DROP を無効にしました。#37280 を修正しました。#37699 (Maksim Kita)。
- 実行可能なユーザー定義関数における Nullable 引数のフォーマットを修正。 #35897 をクローズ。 #37711 (Maksim Kita).
- 分散クエリで、設定
optimize_monotonous_functions_in_order_byにより有効になる最適化を修正しました。#36037 を修正しています。#37724 (Anton Popov). valuesテーブル関数で発生する可能性のある論理エラーInvalid Field get from type UInt64 to type Float64を修正しました。#37602 をクローズしました。#37754 (Kruglov Pavel).- SchemaReader コンストラクタで例外が発生した場合に、スキーマ推論中に起こり得る segfault を修正しました。#37680 をクローズしました。#37760 (Kruglov Pavel) 。
- 内部CAST関数向けの設定 cast_ipv4_ipv6_default_on_conversion_error を修正しました。#35156 をクローズしました。#37761 (Maksim Kita).
- DatatypeDate32 の toString エラーを修正しました。#37775 (LiuNeng).
- clickhouse-keeper の設定
dead_session_check_period_msがマイクロ秒に変換されており (1000 倍されていたため) 、無効なセッションのクリーンアップが 500ms ではなく数分後にしか行われませんでした。 #37824 (Michael Lex). async_socket_for_remote/use_hedged_requestsが無効な場合に、分散クエリで発生することがある “No more packets are available” を修正しました。#37826 (Azat Khuzhin).- (実験的 WINDOW VIEW) WindowView で
ALTER TABLE ... MODIFY QUERYを実行しても、内部ターゲットテーブルを削除しないようにしました。#37879 (vxider). - clickhouse-keeper Docker image 内の協調ディレクトリの所有権を修正しました。#37914 を修正しました。#37915 (James Maidment).
- Dictionaries で、update フィールドと
{condition}を含むカスタムクエリの不具合を修正しました。#33746 をクローズしました。#37947 (Maksim Kita) 。 ORDER BYをWITH FILLの結果に対して後から適用する必要がある場合 (たとえば外側のクエリ) に、SELECT ... WITH FILLが誤った結果を返す可能性がある問題を修正しました。誤った結果の原因は、ORDER BY式に対する最適化でした (#35623) 。#37904 をクローズしました。 #37959 (Yakov Olkhovskiy).- (実験的な WINDOW VIEW) WindowView でターゲットテーブルにプッシュする際、欠落していたデフォルトカラムを追加し、#37815 の問題を修正しました。#37965 (vxider) 。
- コンパイル失敗の原因となっていた、大きすぎるスタックフレームを修正しました。#37996 (Han Shukai).
- enable_filesystem_query_cache_limit を有効にすると、「予約済み cache サイズが残りの cache サイズを超えています」という例外をスローします。 #38004 (xiedeyantu).
- UNION クエリでの型変換を修正しました (LOGICAL_ERROR が発生する可能性があります) 。#34775 (Azat Khuzhin) 。
- BackgroundExecutor がビジー状態の場合、有効期限 (TTL) の merge が再度スケジュールされないことがあります。—merges_with_ttl_counter は selectPartsToMerge() で増加します。BackgroundExecutor がビジー状態の場合、—merge タスクは無視されます。—merges_with_ttl_counter は減少しません。 #36387 (lthaooo).
- 上書きされた
normalize_function_namesの設定値の不具合を修正しました。#36937 (李扬). - 指数時間減衰ウィンドウ関数を修正。ウィンドウの境界が正しく考慮されるようになりました。#36944 (Vladimir Chebotarev) 。
- system.projection_parts および system.projection_parts_columns の読み取り時に発生する可能性がある、ヒープ使用後解放エラーを修正しました。これにより #37184 が修正されます。#37185 (Amos Bird).
- Unix epoch以前における
DateTime64の小数秒の動作を修正しました。#37697 (Andrey Zvonov). #37039 (李扬).
ClickHouseリリース 22.5、2022-05-19。 プレゼンテーション、ビデオ
アップグレードに関する注意事項
- 今後、バックグラウンドマージ、ミューテーション、および
OPTIMIZEでは、SelectedRowsとSelectedBytesのメトリクスは増加しなくなります。一方で、MergedRowsとMergedUncompressedBytesは、これまでどおり増加します。この変更はメトリクスの値にのみ影響し、より適切な値になるようにするものです。非互換性はありませんが、メトリクスの変化に疑問を持つ可能性があるため、このカテゴリに記載しています。#37040 (Nikolai Kochetov). - BoringSSL モジュールを公式の FIPS 準拠版に更新しました。これにより ClickHouse は FIPS 準拠となります。#35914 (Meena-Renganathan). また、
aes-192-cfb128とaes-256-cfb128は、FIPS 認証版の BoringSSL には含まれていないため削除されました。 users.xmlのデフォルトユーザープロファイルからmax_memory_usage設定を削除しました。これにより、従来の固定的な 10 GB 制限ではなく、クエリごとに柔軟なメモリ制限を設定できるようになります。- デフォルトで
log_query_threads設定を無効にしました。これは、クエリ実行に参加する各スレッドの統計情報のログ出力を制御するものです。非同期読み取りのサポート後、異なるスレッド ID の総数が多くなりすぎ、query_thread_logへのログ出力の負荷が高くなっていました。#37077 (Alexey Milovidov). - バグのある関数
groupArraySortedを削除しました。#36822 (Alexey Milovidov).
新機能
- デフォルトでメモリオーバーコミットを有効化。 #35921 (Dmitry Novik).
- GROUP BY 句での GROUPING SETS をサポート。この実装では、grouping sets を並列に処理できます。 #33631 (Dmitry Novik).
system.certificatesテーブルを追加。 #37142 (Yakov Olkhovskiy).h3Line、h3Distance、h3HexRing関数を追加。 #37030 (Bharat Nallan).- 新しい単一バイナリベースの診断ツール (clickhouse-diagnostics) 。 #36705 (Dale McDiarmid).
- 出力フォーマット
Prometheusを追加。 #36051. #36206 (Vladimir C). MySQLDump入力フォーマットを追加。ダンプ内の 1 つのテーブルに属する INSERT クエリから、すべてのデータを読み取ります。複数のテーブルがある場合、デフォルトでは最初のテーブルからデータを読み取ります。 #36667 (Kruglov Pavel).- 一時テーブルでも、
system.tablesにtotal_rowsとtotal_bytesフィールドを表示。 #36401. #36439 (xiedeyantu). parts_to_delay_insertとparts_to_throw_insertをクエリレベルの設定で上書き可能に。これらが定義されている場合、テーブルレベルの設定より優先されます。 #36371 (Memo).
実験的機能
- 配列向けに L1、L2、Linf、Cosine の距離関数と、L1、L2、Linf のノルム関数を実装しました。 #37033 (qieqieplus). 注意: これらの関数は今後リネームされる予定です。
- WindowView の
WATCHクエリを改善しました: 1.fire_conditionシグナルを呼び出すことで、クエリ結果の返却レイテンシを削減。2.isCancelled()の確認頻度を上げることで、クエリのキャンセル操作 (ctrl-c) を高速化。 #37226 (vxider). - ファイルシステムキャッシュの削除に関するイントロスペクションを追加しました。 #36802 (Han Shukai).
- SQL 向けに新しい 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 functionfileからの読み取りパフォーマンスを改善しました。#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).
改善
- テーブル関数
file、s3、urlの実行中にパースエラーが発生した場合、問題のあるファイル名を表示するようにしました。 #36314 (Anton Popov). - トップレベル設定で指定されている場合、実行時にバックグラウンド操作 (merges、mutations、moves、fetches) を実行するスレッド数を増やせるようになりました。 #36425 (Nikita Mikhaylov).
- これにより、時または分に端数を含む timezone で 1970-01-01 00:00:00 より前の時刻を生成する date time conversion functions は、overflow する代わりに 0 に飽和するようになりました。これは https://github.com/ClickHouse/ClickHouse/pull/29953 の続きであり、https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280 への対応です。これは実装定義の動作であり (しかも非常にまれなケース) 、互換性を壊すことが許容されるため、改善として扱います。 #36656 (Amos Bird).
- log level “test” で clickhouse-server を実行している場合に警告を表示するようにしました。ログレベル “test” は最近追加されたものですが、避けられない、回避不能な、致命的で生命を脅かすレベルの性能低下を引き起こすため、本番環境では使用できません。 #36824 (Alexey Milovidov).
- CREATE TABLE 内の照合順序を解析し、例外をスローするか無視できるようにしました。#35892 をクローズしました。#36271 (yuuch)。
- オプション
compatibility_ignore_auto_increment_in_create_tableでは、MySQL からの移行を容易にするため、カラム宣言内のAUTO_INCREMENTキーワードを無視できます。#37178 (Igor Nikonov) 。 JSONEachRowの別名としてJSONLinesおよびNDJSONを追加しました。#36303 をクローズ。#36327 (flynn).- 各 Hive テーブルでクエリできる最大パーティション数を制限します。リソースの過剰消費を防ぎます。#37281 (lgbo).
- 使い勝手を向上させるため、
h3kRing関数の第2引数に暗黙的な型変換を追加しました。#35432 をクローズしました。#37189 (Maksim Kita)。 clickhouse-localにおけるINSERT SELECTの進捗表示を、あらゆるクエリに対して修正し、クライアントでのファイル進捗表示もより正確にしました。#37075 (Kseniia Sumarokova).- パーツの削除中にファイルシステム障害が発生した場合、MergeTreeテーブルエンジンファミリーで古くなったパーツが取り残される可能性がある不具合を修正しました。修正前は、これらはサーバーの最初の再起動後にのみ削除されていました。#37014 (alesapin).
- メイン設定で有効にできる、行ポリシーの新しい処理モードを実装しました。これにより、許可型の行ポリシーを持たないユーザーでも行を読み取れるようになります。 #36997 (Vitaly Baranov).
- Play UI: Nullable の数値がテーブルセルで右揃えされるようになりました。これで #36982 が解決されます。#36988 (Alexey Milovidov).
- Play UI: 結果が1行だけで、カラム数が数個を超える場合、結果を縦方向に表示します。#36811 の続き。#36842 (Alexey Milovidov).
- Play UI の CSS を整理しました。ピクセルの配置がより均等になりました。table のセル内に長いコンテンツがある場合の使いやすさが向上しました。#36569 (Alexey Milovidov)。
- デストラクタで処理しなくて済むよう、例外発生時に書き込みバッファを確定する。これで次の問題が修正されることを期待: #36907。#36979 (Kruglov Pavel)。
- #36425 以降、
background_fetches_pool_sizeのような設定は廃止され、設定ファイルのトップレベルに記述できるようになりましたが、clickhouse はError updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml.のような例外をスローしていました。この問題は修正されました。#36917 (Nikita Mikhaylov) 。 - 他のサーバーに例外を送信する際、必要に応じて追加の診断情報も送信するようにしました。 #36872 (tavplubix).
- 型
Array(Tuple(..))の引数を持つハッシュ関数を実行できるようになりました。#36812 (Anton Popov) 。 user_defined_path設定が追加されました。#36753 (Maksim Kita) 。s3Clusterテーブル関数でクラスターのマクロを使用できるようにしました。 #36726 (Vadim Volodin).clickhouse-client/clickhouse-localで INSERT クエリを正しくキャンセルできるようにしました。#36710 (Azat Khuzhin) 。MySQLHandlerで適切なクエリ ID を維持したまま、クエリをキャンセルできるようにしました。#36699 (Amos Bird) 。system.processesにis_all_data_sentカラムを追加し、これに基づく内部テストの堅牢性チェックを改善しました。#36649 (Azat Khuzhin) 。- S3 からの読み取りに費やした時間に関するメトリクスが、正しく計算されるようになりました。#35483 をクローズしました。#36572 (Alexey Milovidov)。
- clickhouse-local で実行している場合、テーブル関数 file でファイルディスクリプタを使用できるようにしました。 #36562 (wuxiaobai24).
- 先頭が数字のタプル要素名を許可しました。#36544 (Anton Popov).
- clickhouse-benchmark が環境変数から認証情報を読み取れるようになりました。#36497 (Anton Kozlov) 。
clickhouse-keeperの改善: クォーラムなしでクラスターを再構成できる force recovery のサポートを追加しました。#36258 (Antonio Andelic).- JSON オブジェクトに対するスキーマ推論を改善しました。#36207 (Kruglov Pavel) 。
- globs を使ったスキーマ推論まわりのコードをリファクタリング。妥当な場合にのみ glob 内の次のファイルを試すようにした (以前は、どのような error でも次のファイルを試していた) 。また、#36317 も修正。#36205 (Kruglov Pavel).
- 個別の
CLUSTER権限 (およびaccess_control_improvements.on_cluster_queries_require_cluster_grant設定ディレクティブ。後方互換性のため、デフォルトはfalse) を追加しました。#35767 (Azat Khuzhin) 。 - 選択されたクエリが停止される前に必要な量のメモリを確保できた場合、待機中のすべてのクエリは実行を継続します。選択されたクエリがキャンセルを認識する前にメモリが解放された場合は、どのクエリも停止されなくなりました。 #35637 (Dmitry Novik).
- protobuf における Nullable の検出。proto3 では、デフォルト値は wire 上では送信されません。そのため、Nullable カラムで NULL とデフォルト値を区別するのは簡単ではありません。この問題に対処する標準的な方法は、Google wrappers を使って対象の値を内部メッセージにネストすることです (https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto を参照) 。この場合、フィールド自体が存在しなければ null 値として解釈され、フィールドは存在するが値がない場合はデフォルト値として解釈され、通常の値を持つフィールドは通常の値として解釈されます。しかし、ClickHouse は Google wrappers をネストされたカラムとして解釈します。そこで、Google wrappers を検出し、上記の説明どおりに解釈する特別な動作を導入することを提案します。たとえば、Nullable カラム
testの値をシリアライズするには、.proto スキーマでgoogle.protobuf.StringValue testを使用します。なお、これらの型は Protobuf でいわゆる “well-known types” と呼ばれるもので、ライブラリ自体に実装されています。#35149 (Jakub Kuklis). - 事前定義済みおよび静的HTTPハンドラーの設定で、
content_typeを指定できるようになりました。#34916 (Roman Nikonov) 。 clickhouse-client --fileを、その前に--externalを付けずに使用した場合に、適切な警告を表示する。#34747 をクローズ。#34765 (李扬).- binary(0) データ型に対応するよう、MySQL データベースエンジンを改善しました。#37232 (zzsmdfj).
- clickhouse-benchmark の JSON レポートを改善しました。 #36473 (Tian Xinhui) 。
- 外部 ClickHouse Dictionary のホスト名を名前解決できない場合、server が起動を拒否することがありました。修正しました。#36451 を修正しました。#36463 (tavplubix).
ビルド/テスト/パッケージングの改善
x86_64アーキテクチャ向けのclickhouse-keeperが musl に静的リンクされるようになり、システムライブラリに依存しなくなりました。#31833 (Alexey Milovidov).PowerPC64LEアーキテクチャ向けの ClickHouse ビルドが、ユニバーサルインストールスクリプトcurl https://clickhouse.com/ | shおよび直接リンクhttps://builds.clickhouse.com/master/powerpc64le/clickhouseで利用できるようになりました。#37095 (Alexey Milovidov).- 互換性向上のため、PowerPC のコード生成を Power8 までに制限しました。これにより #36025 をクローズします。#36529 (Alexey Milovidov).
- パフォーマンステストを簡素化しました。これにより活用しやすくなります。#36769 (Alexey Milovidov).
- レポート内にエラーがある場合、パフォーマンス比較を失敗として扱うようにしました。#34797 (Mikhail f. Shiryaev).
- Arrow に ZSTD サポートを追加しました。これにより #35283 を修正します。#35486 (Sean Lafferty).
バグ修正
- URI に
Version IDが含まれている場合はそれを抽出し、AWS HTTP URIにリクエストを追加します。#31221 をクローズしました。 - [x] URI にVersion IDが含まれている場合はそれを抽出し、それを除いて再構成する。 - [x] リクエストを使ってAWS HTTP URIオブジェクトを構成する。 - [x] 単体テスト:gtest_s3_uri- [x] インストルメンテーション関連のコミットを削除する。#34571 (Saad Ur Rahman). - system.opentelemetry_span_log の attribute.values エイリアスが、keys ではなく values を指すように修正しました。#37275 (Aleksandr Razumov) 。
- Nullable(String) から Nullable(Bool/IPv4/IPv6) への変換を修正。#37221 をクローズ。 #37270 (Kruglov Pavel).
- 試験的な機能:
Object型のカラムが存在するテーブルにおけるミューテーション実行を修正しました。UPDATEまたはDELETEクエリのWHERE式でObject型のサブカラムを使用できるようになり、個別のサブカラムの操作 (DROP、MODIFY) も可能になりました。#37205 を修正しました。 #37266 (Anton Popov). - Kafka の producer ステージでは
group.idは不要です。コンソールログには、この問題を示す Warning が表示されます:2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance. #37228 (Mark Andreev). - 実験的機能 (WindowView): まだ発火していないデータが削除されるケースに備え、ブロックが実際に発火した後に
max_fired_watermarkを更新します。 #37225 (vxider). - LIMIT BY を使用した分散クエリにおける “Cannot create column of type Set” の問題を修正しました。 #37193 (Azat Khuzhin).
- 実験的機能:
WindowViewSource.h:58で作成される空でない Chunk によって、WindowViewWATCH EVENTSクエリが終了してしまうことはなくなりました。#37182 (vxider). - サブクエリで
enable_global_with_statementを有効にし、#37141 を解決しました。#37166 (Vladimir C). - optimize_skip_unused_shards_rewrite_in における暗黙的なキャストを修正しました。 #37153 (Azat Khuzhin).
- FixedString カラムに対する ILIKE 関数で、誤った結果が返される可能性がありました (つまり、本来一致するはずのものより少なく一致していました) 。#37117 (Robert Schulze) 。
AggregateFunction型のカラムでGROUP BYする場合の不具合を修正しました。#37093 (Azat Khuzhin) 。- Experimental機能: プレフィックス付き GROUP BY と *Array 集約関数における optimize_aggregation_in_order の不具合を修正しました。 #37050 (Azat Khuzhin) 。
- 暗黙的な集約を伴う一部の INSERT SELECT クエリで発生していたパフォーマンス低下を修正しました。#36792 を修正。 #37047 (tavplubix).
- 実験的機能:
*Array集約関数 (groupArrayArray/…) 使用時の、順序付きGROUP BY(optimize_aggregation_in_order=1) を修正しました。#37046 (Azat Khuzhin) 。 - 索引の型が UInt8 ではない場合に LowCardinality->ArrowDictionary が無効な出力を返す問題を修正しました。#36832 をクローズしました。#37043 (Kruglov Pavel) 。
quantileTDigestにおける infs の問題を修正しました。これにより #32107 を修正しました。#37021 (Vladimir Chebotarev) 。- max_parallel_replicas != 1 の場合の HedgedConnections における外部テーブルデータの送信を修正しました。 #36981 (Kruglov Pavel).
ReplicatedデータベースでのTRUNCATEクエリの論理エラーを修正しました。#33747 に対応しています。#36976 (tavplubix).- 実験的機能: WindowView でソーステーブルを削除した際に処理が停止する問題を修正しました。#35678 をクローズしました。#36967 (vxider)。
- 実験的機能 (rocksdb cache) : 不具合を修正: #36671。#36929 (李扬) 。
- Experimental 機能: WindowView で複数のカラムを使用する際に発生するバグを修正し、変換アクションを追加することで、スキーマがわずかに異なる場合でも
writeIntoWindowViewを呼び出せるようにしました。 #36928 (vxider). - 低負荷時や再起動時に圧縮ログファイルの破損につながる可能性がある ClickHouse Keeper のバグを修正しました。 #36910 (alesapin).
- 定数集約実行時に誤ったクエリ結果が返される問題を修正しました。これにより #36728 が修正されます。 #36888 (Amos Bird).
- 実験的機能: cache の
current_sizeのカウントを修正しました。#36887 (Kseniia Sumarokova). - 実験的機能: hop window を使用する window view での発火の問題を修正 #34044。 #36861 (vxider).
- 実験的機能: remote fs のキャッシュ済みバッファ内における誤った CAST を修正しました。#36809 (Kseniia Sumarokova).
flatten_nested = 0を使用したテーブル作成の不具合を修正しました。従来は、フラット化されていないNestedカラムがサーバーの再起動後にフラット化されてしまうことがありました。#36803 (Anton Popov).- LowCardinality の読み取り時に発生していた、リモートファイルシステムからの非同期読み取りに関するいくつかの問題を修正しました。#36763 (Kseniia Sumarokova) 。
- 実験的機能: 複数のファイルから
Object型のカラムに挿入する際の不具合を修正しました。たとえば、グロブを使用するテーブル関数file経由の場合です。 #36762 (Anton Popov). - Hedged requests のタイムアウトを修正しました。リモートクエリ送信直後に接続がハングすると、待機が永続的に続く可能性がありました。#36749 (Kruglov Pavel) 。
- 実験的機能: 分散テーブル上の
groupBitmapAndState/groupBitmapOrState/groupBitmapXorStateに関するバグを修正しました。 #36739 (Zhang Yifan). - 実験的機能: PR の テスト 中に、ある cache クラスが 2 回初期化されると例外が発生することがわかりました。この問題の原因は明らかではありませんが、ClickHouse には disk を繰り返し読み込むコードロジックがあるはずなので、このケースでは特別な判定を行う必要があります。#36737 (Han Shukai).
- wide パーツでの垂直マージを修正しました。以前は、マージ中に例外
There is no columnが発生することがありました。#36707 (Anton Popov). - ポート変更時のサーバーのリロードを修正 (クエリコンテキスト内の現在の接続を待たない) 。#36700 (Azat Khuzhin).
- 実験的機能: 前回のPRで、テスト (stateless tests、flaky check (address、actions) ) がタイムアウトすることを確認しました。さらに、ローカルでテストすると、システムで不安定なデッドロックが発生することもあります。この問題は、masterの最新のソースコードを使用した場合でも依然として存在します。#36697 (Han Shukai) 。
- 実験的機能: cache 設定の変更時に server が再起動してしまう問題を修正しました。 #36685 (Kseniia Sumarokova).
- スキーマ推論における heap-use-after-free の可能性を修正しました。#36661 をクローズします。#36679 (Kruglov Pavel).
- エンジンが指定されていない場合の
CREATEクエリにおける設定のパースを修正しました。https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419 の修正です。 #36642 (tavplubix). - 実験的機能: 型
Objectの wide パーツのマージに関する不具合を修正しました。#36637 (Anton Popov) 。 - デフォルト式がリテラルではなく、EPHEMERAL の後に続く場合に発生するフォーマットのクラッシュを修正しました。#36618 をクローズしました。#36633 (flynn).
ENGINE = MergeTreeテーブルでINTERPOLATEを使用した際に発生する可能性があったMissing column例外を修正しました。 #36549 (Yakov Olkhovskiy).- joinクエリの
WHERE句内のリテラルに関する潜在的なエラーを修正しました。#36279 をクローズしました。#36542 (Vladimir C). - 未定義動作を引き起こす可能性があった ReadBufferFromEncryptedFile のオフセット更新を修正しました。 #36493 (Kseniia Sumarokova).
- Keeper クラスター設定におけるホスト名の妥当性チェックを修正。これらのチェックを有効/無効にするための
keeper_server.host_checks_enabled設定を追加。#36492 (Antonio Andelic). - GROUP BY での実行可能なユーザー定義関数の使用を修正しました。これまでは、実行可能なユーザー定義関数を GROUP BY の式として使用できませんでした。#36448 をクローズしました。#36486 (Maksim Kita).
- クライアントで、サーバーからの不明なパケットに起因する可能性のある例外を修正しました。#36481 (Kseniia Sumarokova) 。
- 実験的機能 (
system.session_logは絶対に使用しないでください。削除予定です) : system.session_log テーブルに不足していた enum 値を追加しました。#36474 をクローズしました。#36480 (Memo). s3Clusterからのselectですべてのデータが読み込まれなくなる原因となっていた、s3Clusterのスキーマ推論のバグを修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35544 で入りました。 #36434 (Kruglov Pavel).- JOIN および COLUMNS マッチャーでの nullptr の逆参照を修正しました。これにより #36416 を修正します。これは https://github.com/ClickHouse/ClickHouse/pull/36417 に対応するものです。#36430 (Amos Bird).
ClickHouseDictionarySourceにスカラーサブクエリが含まれている場合に、Dictionary の再読み込みが正しく行われない問題を修正しました。 #36390 (lthaooo).- JOIN 内のアサーションを修正し、#36199 を解消しました。#36201 (Vladimir C).
- 特殊な演算子内で別名を含むクエリで、パースエラーが発生していました (22.1で壊れていました) 。例:
SELECT substring('test' AS t, 1, 1). #36167 (Maksim Kita). - 実験的機能: ネストした配列を含む複雑な JSON を
Object型のカラムに挿入する際の不具合を修正しました。 #36077 (Anton Popov). - compact パーツを含むネストされたカラムに対する ALTER DROP COLUMN を修正しました (具体的には、カラム
n.dが存在する場合のALTER TABLE x DROP COLUMN n) 。 #35797 (Azat Khuzhin). offsetとlengthが負の定数で、sが定数ではない場合のsubstring関数における範囲エラーの長さを修正しました。#33861 (RogerYK).
ClickHouse リリース 22.4、2022-04-19。プレゼンテーション、ビデオ
後方互換性を持たない変更
- INSERTクエリでは、FORMAT の後に SETTINGS を指定できなくなりました (そのようなクエリを受け入れるための互換性設定
allow_settings_after_format_in_insertはありますが、デフォルトでは OFF です) 。 #35883 (Azat Khuzhin). - 関数
yandexConsistentHash(Konstantin “kostik” Oblakov による 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 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).
バグ修正
- 無効な IP アドレス値をデフォルト値としてtableにinsertできるようにするため、設定
input_format_ipv4_default_on_conversion_errorおよびinput_format_ipv6_default_on_conversion_errorを追加しました。#35726 をクローズしました。#35733 (Maksim Kita). - Hive からデータを読み取る際、存在しないカラムをブロックから削除しないようにしました。 #35393 (lgbo).
- materialized view の作成時に型チェックを追加しました。解決: #23684。#24896 (hexiaoting) 。
- INSERT INFILE クエリのフォーマットを修正 (引用符の不足) 。 #35886 (Azat Khuzhin).
- ファジングによってメモリ安全性の問題が見つかったため、
session_logを無効化しました。詳しくは #35714 を参照してください。#35873 (Alexey Milovidov) 。 - カラム単位の有効期限 (TTL) が複数回処理されないようにしました。#35820 (Azat Khuzhin) 。
- INSERT クエリに複数のパーティションにまたがるデータが含まれる場合の、
Object型カラムへの挿入を修正しました。#35806 (Anton Popov). - -WithNames フォーマットで、存在しないカラムの索引に関するバグを修正しました。このバグにより、カラム数が 256 を超える場合にエラー
INCORRECT_NUMBER_OF_COLUMNSが発生していました。#35793 をクローズしました。#35803 (Kruglov Pavel). - #35751 を修正。#35799 (Nikolay Degterinsky).
- Snappy フォーマットの HDFS からの読み取りを修正しました。 #35771 (shuchaome).
- カスタム型から文字列への変換において、segfault や想定外のエラーメッセージを引き起こす可能性があった不具合を修正しました。#35752 をクローズしました。#35755 (Kruglov Pavel).
- any/all (サブクエリ) の実装を修正。#35489 をクローズ。#35727 (Kseniia Sumarokova).
- clickhouse-local で空でないデータベースを削除できない不具合を修正しました。#35692 をクローズします。#35711 (Kseniia Sumarokova).
- サーバー再起動後に、サブクエリを含む materialized view の作成で発生していたバグを修正しました。サーバー再起動後、基になるテーブルへの insert を行っても materialized view が更新されない状態でした。#35511 をクローズしました。#35691 (Kruglov Pavel).
- 実験的な型
Objectのサブカラムの読み取り時に発生する可能性があるCan't adjust last granule例外を修正しました。#35687 (Anton Popov). - デフォルトで、JITコンパイル対応のbuildを有効にしました。 #35683 (Maksim Kita).
- 実験的な型
Objectでサブカラムが失われる可能性がある不具合を修正しました。 #35682 (Anton Popov). - ASOF JOIN の結合キーのNULL許容性チェックを修正し、#35565 をクローズしました。#35674 (Vladimir C) 。
- プロジェクションを持つパーツに対するパーツチェックロジックを修正しました。プロジェクションとメインパーツで型が異なる場合にエラーが発生していました。これは https://github.com/ClickHouse/ClickHouse/pull/33774 と同様の問題です。このバグは @caoyang10 によって修正されました。#35667 (Amos Bird).
- 多数の引数が
format関数に渡された際に発生するサーバークラッシュを修正しました。クラッシュの再現方法については、テストファイルを参照してください。 #35651 (Amos Bird). - 非同期挿入使用時のクォータの扱いを修正しました。#35645 (Anton Popov).
- 別名付きの位置引数を修正しました。#35600 をクローズしました。#35620 (Kseniia Sumarokova).
- URL engine でスキーマ推論を行う前に
remote_url_allow_hostsをチェックする。 #35064 をクローズ。 #35619 (Kruglov Pavel). LowCardinality型のカラムが使用される場合のHashJoinを修正しました。これにより #35548 をクローズしました。#35616 (Antonio Andelic).- MaterializedPostgreSQL で、メモリ上に収集されたデータを基になるテーブルへ同期する際に例外が発生した場合に起こり得たセグメンテーションフォールトを修正しました。#35611 をクローズしました。#35614 (Kseniia Sumarokova).
database_atomic_wait_for_drop_and_detach_synchronously設定は、以前デタッチされたテーブルがまだ使用中の場合、ATTACH TABLEクエリで正しく動作していませんでしたが、修正されました。#35594 (tavplubix).- 名前付きコレクションのHTTPヘッダーを修正し、compression_methodを追加しました。#35273 をクローズしました。#35269 をクローズしました。#35593 (Kseniia Sumarokova).
- 仮想カラムを取得する際の S3 engine の不具合を修正しました。#35411 をクローズします。#35586 (Kseniia Sumarokova).
caseWithExpressionの戻り値の型推論を修正しました。これにより、ELSE 分岐の型も正しく考慮されるようになりました。#35576 (Antonio Andelic).- 39文字を超えるIPv6アドレスのパースを修正しました。#34022 を修正。#35539 (Maksim Kita).
- IN句内でのIPv4/IPv6アドレスへのCASTを修正。#35528 を修正。#35534 (Maksim Kita).
- 引数のいずれかがNullable定数である場合に、短絡関数の評価時に発生するクラッシュを修正しました。#35497 をクローズしました。#35496 をクローズしました。#35502 (Maksim Kita).
- 定数引数を持つ関数
throwIfで発生するクラッシュを修正しました。 #35500 (Maksim Kita). - クライアント接続が不安定になるおそれのあるKeeperのバグを修正しました。導入バージョン: #35031。#35498 (alesapin).
- 結果のカラム型と結果のデータ型が異なる場合に、
if関数でLogical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.のような論理エラーを引き起こしていた不具合を修正しました。#35367 をクローズしました。#35476 (Kruglov Pavel). - MergeTree のバックエンドとして、または独立したテーブルエンジン/関数として S3 を使用する際の過剰なログ出力を修正しました。#30559 を修正します。#35434 (alesapin).
- これにより、ゼロコピー レプリケーション (実験的) で実行されるマージで、
Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.というメッセージがログに大量出力されることはなくなります。#35430 (alesapin). - GroupingAggregatedTransform で空の chunk が現れた場合に発生しうる例外を回避するようにしました。#35417 (Nikita Taranov).
- Arrow/Parquet/ORC フォーマットにおいて、クエリで不要なカラムを処理する際の不具合を修正しました。これにより、ファイルに未サポート型のカラムが含まれていても、そのカラムをクエリで使用しない場合に
Unsupported <format> type <type> of an input column <column_name>のようなエラーが発生する可能性を防げます。#35406 (Kruglov Pavel). - 高い並行性で発生する稀なケースにおける、リモートファイルシステム向けローカルcache (実験的機能) の不具合を修正しました。 #35381 (Kseniia Sumarokova)。cacheで発生する可能性のあるデッドロックを修正しました。 #35378 (Kseniia Sumarokova).
WHEREで定数と比較する場合のパーティションプルーニングを修正しました。カラムと定数の型が異なると、オーバーフローが発生する可能性がありました。その結果、クエリが誤って空の結果を返すことがありました。これにより #35304 を修正しました。#35334 (Amos Bird) 。- max_read_buffer_size が小さい場合に、TSKV フォーマットのスキーマ推論を修正しました。#35332 (Kruglov Pavel) 。
- スパースカラムが有効なテーブルにおけるミューテーションの不具合を修正しました。 #35284 (Anton Popov).
- デフォルトでは最終パートの書き込みを遅延しないようにしました (S3 への書き込み向けに、デフォルト値を 1000 にした
max_insert_delayed_streams_for_parallel_writeを追加し、それ以外では従来どおり無効のままとすることで、INSERT中に発生する可能性のあるMemory limit exceededを修正) 。#34780 (Azat Khuzhin).
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を使用する必要があります。settingcast_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.mapFilter3.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の場合のdirectDictionary のパフォーマンスを改善しました。detectCharset、detectLanguageUnknown関数のパフォーマンスを改善しました。#34888 (Maksim Kita). - より多くの batching を活用することで、
anyaggregate 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 (李扬).S3table 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 (小路).
ビルド/テスト/パッケージングの改善
- パッケージリポジトリを JFrog Artifactory に移行しました (Mikhail f. Shiryaev) 。
- 機能テスト で一部の設定をランダム化し、より多くの設定の組み合わせをテストできるようにしました。これはテストカバレッジを高めるための、もう 1 つのファジング手法です。これにより #32268 をクローズしました。#34092 (Kruglov Pavel)。
- CI から PVS-Studio を削除しました。#34680 (Mikhail f. Shiryaev)。
- CMake で stripped バイナリをビルドできるようにしました。以前のバージョンでは、これは dh-tools によって行われていました。#35196 (alesapin)。
- より小さな「fat-free」
clickhouse-keeperビルド。#35031 (alesapin)。 - https://github.com/ClickHouse/ClickHouse/pull/34685 のような PR では、@robot-clickhouse を著者およびコミッターとして使うようにしました。#34793 (Mikhail f. Shiryaev)。
- デバッグ情報の DWARF バージョンは最大 4 に制限しました。内部のスタックシンボライザーが DWARF バージョン 5 を parse できないためです。これは、clang-15 で ClickHouse をコンパイルする場合に有効です。#34777 (Alexey Milovidov)。
- 不要に複雑になるため、
clickhouse-testDebian パッケージを削除しました。CI では repository 内のテストを使用しており、deb パッケージによる standalone テストは現在はサポートされていません。#34606 (Ilya Yatsishin)。
バグ修正 (公式の安定版またはプレ安定版リリースでユーザーに影響する不具合)
- HDFSインテグレーションの修正: 内部
bufferのサイズが小さすぎると、HadoopSnappyDecoderのNEED_MORE_INPUTが1つの圧縮blockに対して複数回 (>=3回) 実行されます。その結果、入力データがHadoopSnappyDecoder::buffer内の誤った位置にコピーされます。#35116 (lgbo) 。 - ATTACH GRANTステートメントで廃止された権限を無視する。このPRで#34815を修正しました。#34855 (Vitaly Baranov) 。
- named collections を使用して作成されたデータベースで CREATE TABLE クエリを取得した際に、Postgres データベースで segfault が発生する不具合を修正しました。#35312 をクローズしました。#35313 (Kseniia Sumarokova) 。
- partial merge join における重複行のバグを修正し、#31009 をクローズしました。 #35311 (Vladimir C).
- bzip2 圧縮の使用時に、
max_read_buffer_size設定値が小さい場合に発生する可能性があるAssertion 'position() != working_buffer.end()' failedを修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35047 で見つかりました。#35300 (Kruglov Pavel)。lz4 圧縮の使用時に、max_read_buffer_size 設定値が小さい場合の問題を修正しました。#35296 (Kruglov Pavel)。lzma 圧縮の使用時に、max_read_buffer_size設定値が小さい場合の問題を修正しました。#35295 (Kruglov Pavel)。brotli圧縮の使用時に、max_read_buffer_size設定値が小さい場合の問題を修正しました。このバグは https://github.com/ClickHouse/ClickHouse/pull/35047 で見つかりました。#35281 (Kruglov Pavel). JSONEachRowのスキーマ推論で発生する可能性のあるセグメンテーションフォルトを修正しました。#35291 (Kruglov Pavel) 。- テーブルでスパースカラムが有効になっている場合の
CHECK TABLEクエリを修正しました。#35274 (Anton Popov). - リモート VFS の読み取り中に例外が発生した場合に
std::terminateしないようにしました。 #35257 (Azat Khuzhin). - 設定からのポート読み取りを修正し、#34776 をクローズしました。#35193 (Vladimir C).
HAVINGが空の結果を返す場合にWITH TOTALSを含むクエリで発生するerrorを修正しました。これにより #33711 が修正されます。#35186 (Amos Bird).replaceRegexpAllの特殊なケースを修正し、#35117 をクローズしました。#35182 (Vladimir C).INSERT INTO FUNCTION s3(...) FROM ...の場合、スキーマ推論が正しく機能せず、SELECT クエリではなく S3 ファイルからスキーマを読み取ろうとしていました。#35176 (Kruglov Pavel).- partition by などにおける MaterializedPostgreSQL (実験的機能) の
table overridesを修正しました。#35048 をクローズしました。#35162 (Kseniia Sumarokova) 。 - 手動で削除 (DETACH TABLE) した後に新しいテーブルをレプリケーションに追加 (ATTACH TABLE) する際の MaterializedPostgreSQL (実験的機能) の不具合を修正しました。#33800 をクローズ。#34922 をクローズ。#34315 をクローズ。#35158 (Kseniia Sumarokova).
- IN演算子とともに非単調関数を使用した場合に発生するパーティションプルーニングのエラーを修正しました。これにより、#35136 を修正しています。#35146 (Amos Bird).
- YAML 設定の XML への変換にあった軽微な誤りを修正しました。#35135 (Miel Donkers) 。
- 符号付きカラムおよび負の値に対する
optimize_skip_unused_shards_rewrite_inの問題を修正しました。 #35134 (Azat Khuzhin). update_lag外部 Dictionary の設定オプションは使用できず、Unexpected key `update_lag` in dictionary source configurationというエラーメッセージが表示されていました。#35089 (Jason Chu) 。- サーバーのシャットダウン時に発生する可能性があるデッドロックを回避。 #35081 (Azat Khuzhin).
- 設定
optimize_functions_to_subcolumnsが有効な場合に、関数がサブカラムに最適化された後、エイリアスが欠落する問題を修正しました。#33798 をクローズしました。#35079 (qieqieplus) 。 - テーブル関数への非同期挿入がある場合に
system.asynchronous_insertsテーブルを読み取れない問題を修正しました。#35050 (Anton Popov). Reading for MergeTree family tables must be done with last position boundaryという例外が発生する可能性がある問題を修正しました (リモート VFS 上の操作に関連) 。#34979 をクローズしました。#35001 (Kseniia Sumarokova).- ウィンドウフレームで -State 型の集約関数を使用した際に、予期しない結果になる問題を修正しました。#34999 (metahys).
- FileLog (実験的機能) で発生する可能性があるセグメンテーション違反を修正しました。 #30749 をクローズしました。 #34996 (Kseniia Sumarokova).
- まれに発生する可能性のあるエラー
Cannot push block to port which already has dataを修正しました。#34993 (Nikolai Kochetov). - CSV 内の引用符で囲まれていない日付に対する誤ったスキーマ推論を修正しました。#34768 をクローズしました。#34961 (Kruglov Pavel).
- Hive インテグレーション: Hive クエリの
where句でinを使用した際に予期しない結果になる問題を修正しました。 #34945 (lgbo). - 削除対象の変更ログファイルを探す際、ClickHouse Keeperでのビジーポーリングを回避しました。 #34931 (Azat Khuzhin).
- PostgreSQL からの DateTime64 への変換を修正しました。#33364 を修正。#34910 (Kseniia Sumarokova).
- S3 上の VFS を利用する MergeTree テーブルへの
INSERT中に、“Part directory doesn’t exist” が発生する可能性がある問題を修正しました。#34876 (Azat Khuzhin). - CREATE USER のような DDL を、相互レプリケーション構成のクラスターで実行できるようにしました。 #34860 (Jianmei Zhang).
WindowViewにおける複数カラムでの GROUP BY の不具合を修正しました (実験的機能) 。#34859 (vxider) 。- クエリに const カラムが含まれる場合に、S2 関数で発生する可能性がある不具合を修正しました。 #34745 (Bharat Nallan).
- クエリ失敗の原因となっていた、const カラムを含む H3 関数のバグを修正しました。 #34743 (Bharat Nallan).
fsync_part_directoryが有効で、vertical merge 使用時に発生するNo such file or directoryを修正しました。 #34739 (Azat Khuzhin).ON CLUSTER使用時のシステムクエリRELOAD MODEL、RELOAD FUNCTION、RESTART DISKのシリアライゼーションと出力を修正しました。#34514 をクローズしました。#34696 (Maksim Kita) 。enable_global_with_statement使用時のallow_experimental_projection_optimizationを修正しました (従来は、WITH句に複数の式がある場合にStack size too largeエラーを引き起こす可能性があり、さらにスカラーサブクエリが何度も繰り返し実行されていましたが、この修正によりより効率的になりました) 。#34650 (Azat Khuzhin).- 別のレプリカがすでに
ReplatedMergeTreeエンジンのトランザクションログを更新している場合、mutate 用の part を選択しないようにしました。 #34633 (Jianmei Zhang). - part movement 機能の使用時に、単純な count クエリで誤った結果が返される問題を修正しました #34089。 #34385 (nvartolomei).
- 分散サブクエリにおける
max_query_size制限の不一致を修正しました。#34078 (Chao Ma).
ClickHouse リリース v22.2、2022-02-17。 プレゼンテーション、ビデオ
アップグレードに関する注意
- FINAL を使用するクエリにデータスキッピングインデックスを適用すると、不正確な結果になる可能性があります。このリリースでは、FINAL を使用するクエリではデータスキッピングインデックスをデフォルトで無効化しました (新しい設定
use_skip_indexes_if_finalが導入されており、デフォルトでは無効です) 。#34243 (Azat Khuzhin).
新機能
- プロジェクションは本番利用可能になりました。
allow_experimental_projection_optimizationはデフォルトで有効化され、この設定は非推奨になりました。#34456 (Nikolai Kochetov) 。 File/S3/HDFSエンジンで、INSERT 時に新しいファイルを作成するためのオプションを追加しました。HDFSではファイルの上書きが可能です。デフォルトでは、S3でファイルを上書きしようとすると例外を送出します。接尾辞を持つ (そのため追記をサポートしないParquet、ORCなどの) フォーマットでは、ファイルへのデータ追加を試みると例外を送出します。#31640 をクローズしました。#31622 をクローズしました。#23862 をクローズしました。#15022 をクローズしました。#16674 をクローズしました。#33302 (Kruglov Pavel).- ユーザーが
MergeTree/ReplicatedMergeTreeで独自の重複排除セマンティクスを指定できる設定を追加しました。これを指定すると、block ID の生成にはデータダイジェストの代わりにその値が使用されます。たとえば、各INSERTステートメントでこの設定に一意の値を指定すれば、同じデータを挿入しても重複排除されるのを回避できます。これにより #7461 をクローズしました。#32304 (Igor Nikonov). - INSERTステートメントで
DEFAULTキーワードをサポートしました。#6331 を修正しました。#33141 (Andrii Buriachevskyi) 。 EPHEMERALカラム指定子がCREATE TABLEクエリに追加されました。#9436 を修正しました。#34424 (yakov-olkhovskiy).TTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'機能でIF EXISTS句をサポートしました。パーツはレプリカ上に存在する場合にのみ disk または volume に移動されるため、MOVE TTLルールは既存のストレージポリシーに応じてレプリカごとに異なる動作が可能になります。#34455 を解決しました。#34504 (Anton Popov).- デフォルトのテーブルエンジンを設定できるようにし、ENGINE を指定せずにテーブルを作成できるようにしました。#34187 (Ilya Yatsishin) 。
- table function
format(format_name, data)を追加しました。 #34125 (Kruglov Pavel) 。 - stdin に渡された場合でも、ファイル名から
clickhouse-localのフォーマットを検出できるようになりました。#33829 (Kruglov Pavel) 。 valuestable function のスキーマ推論を追加しました。#33811 をクローズしました。#34017 (Kruglov Pavel) 。- 設定の再読み込み時に、server の TLS 証明書を動的に再読み込みできるようにしました。#15764 をクローズしました。#15765 (johnskopis). #31257 (Filatenkov Artur).
- これにより、ReplicatedMergeTree は一部のディスクが破損した場合でもデータを復旧できるようになりました。 #13544 (Amos Bird) 。
clickhouse-clientでのフォールトトレラント接続:clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4. #34490 (Kruglov Pavel). #33824 (Filippov Denis).- MySQLとの互換性のため、
DEGREESおよびRADIANS関数を追加しました。#33769 (Bharat Nallan) 。 h3ToCenterChild関数を追加しました。#33313 (Bharat Nallan)。新たに、h3 のその他の関数edgeLengthKm、exactEdgeLengthKm、exactEdgeLengthM、exactEdgeLengthRads、numHexagonsを追加しました。#33621 (Bharat Nallan)。- String/FixedString からビットの部分列を抽出するための関数
bitSliceを追加しました。#33360 (RogerYK) 。 meanZTest集約関数を実装しました。#33354 (achimbab) 。- T検定の集約関数に信頼区間を追加しました。 #33260 (achimbab).
- 関数
addressToLineWithInlinesを追加。#26211 をクローズ。#33467 (SuperDJY). #!と#が、単一行コメントの開始記号として認識されるようになりました。#34138 をクローズします。#34230 (Aaron Katz).
実験的機能
- テキスト分類用の関数として、言語および文字セットの検出を追加しました。#23271 を参照してください。#33314 (Nikolay Degterinsky) 。
MemoryTrackerにメモリオーバーコミットを追加しました。ソフトメモリ制限を表すメモリ制限用のguaranteed設定も追加しています。ハードメモリ制限に達した場合、MemoryTrackerは最もオーバーコミットしているクエリのキャンセルを試みます。新しい設定memory_usage_overcommit_max_wait_microsecondsは、あるクエリが別のクエリの停止をどれだけ待機できるかを指定します。#28375 をクローズしました。#31182 (Dmitry Novik) 。- WindowView で、ストリームとテーブルの join を有効にしました。#33729 (vxider) 。
MaterializedMySQLでSET、YEAR、TIME、GEOMETRYの data types をサポートしました (実験的機能) 。#18091、#21536、#26361 を修正しました。#33429 (zzsmdfj) 。- PROJECTION がデフォルトで有効な場合に発生するさまざまな問題を修正しました。各問題は個別のコミットで説明されています。これは #33678 に対応するものです。これにより #34273 を修正しました。#34305 (Amos Bird) 。
パフォーマンス改善
- ソートキーのプレフィックスがすでにソート済みの場合、
optimize_read_in_orderをサポートしました。たとえば、テーブルのソートキーがORDER BY (a, b)で、クエリにWHERE a = const ORDER BY b句がある場合、これまでは完全なソートが必要でしたが、今後はソートキーの順序で読み取るようになります。 #32748 (Anton Popov). - テーブル関数
URL、S3、File、HDFSに対するパーティション化 insert の性能を改善しました。#34348 をクローズしました。#34510 (Maksim Kita). - clickhouse-keeper のパフォーマンスに複数の改善が加えられました。#34484 #34587 (zhanglistar) 。
FlatDictionaryにより、辞書データの読み込みパフォーマンスが向上しました。#33871 (Maksim Kita).mapPopulateSeries関数のパフォーマンスを改善しました。#33944 をクローズしました。 #34318 (Maksim Kita)._fileと_pathの仮想カラム (ファイル系テーブルエンジン) がLowCardinalityになり、複数ファイルに対するクエリが高速化されました。#34300 をクローズしました。#34317 (flynn).- データパーツの読み込みを高速化しました。以前は並列化されておらず、設定
part_loading_threadsは効果を持っていませんでした。#4699 を参照してください。#34310 (alexey-milovidov). LineAsStringフォーマットのパフォーマンスを改善しました。これにより #34303 をクローズします。#34306 (alexey-milovidov).quantilesExact{Low,High}がsortの代わりにnth_elementを使用するように最適化しました。 #34287 (Danila Kutenin).Regexpフォーマットのパフォーマンスがわずかに向上しました。#34202 (alexey-milovidov) 。- スカラーサブクエリの解析を若干改善しました。#34128 (Federico Rodriguez) 。
- ORDER BY tuple を ORDER BY カラムとほぼ同等の速度にしました。複数カラムの ORDER BY 向けには特別な最適化があります: https://github.com/ClickHouse/ClickHouse/pull/10831 。これをタプルカラムにも適用することにはメリットがあります。#34060 (Amos Bird).
- materialized view の実行に向けて、スカラーサブクエリ cache を見直し、再導入しました。 #33958 (Raúl Marín).
- メモリ比較を高速化するため、
memcmpSmall関数に x86-64 AVX-512 サポートを追加し、ORDER BYのパフォーマンスをわずかに改善しました。これは ClickHouse を自分でコンパイルした場合にのみ有効です。#33706 (hanqf-git). - 1つのキーに多数のインターバルがある場合の
range_hashedDictionary のパフォーマンスを改善しました。#23821 を修正しました。#33516 (Maksim Kita). - S3 への挿入処理およびマージ処理では、可能な限りファイルを並列に書き込みます (TODO: マージ済みか確認) 。#33291 (Nikolai Kochetov) 。
clickhouse-keeperのパフォーマンスを改善し、NuRaftライブラリの複数のメモリリークを修正しました。 #33329 (alesapin).
改善
clickhouse-clientで、インラインデータを含むクエリの非同期挿入がサポートされました。#34267 (Anton Popov) 。- 関数
dictGet、dictHasでは、キー引数と辞書キーの構造が異なる場合、キー引数が辞書キーの構造に暗黙的にキャストされます。#33672 (Maksim Kita). range_hashedDictionary の改善。複数の 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).
ビルド/テスト/パッケージングの改善
- unbundled build のサポートを削除しました。#33690 (Azat Khuzhin).
- テストが、同一要素の不安定なソート結果に依存しないようにしました。同一要素のソート順に依存した際の問題を防ぐため、
sort後のデバッグ時に同一要素の範囲をランダム化する処理を追加しました。#34393 (Maksim Kita). - Style check に詳細出力を追加しました。#34289 (Mikhail f. Shiryaev).
clickhouse-testDebian パッケージは廃止されたため削除しました。#33948 (Ilya Yatsishin).- OS パッケージが断続的に使用される可能性を排除し、hermetic build を徹底するため、ビルドシステムに複数の改善を加えました。#33695 (Amos Bird).
バグ修正 (公式の安定版またはプレ安定版リリースでユーザーに影響する不具合)
allow_experimental_parallel_reading_from_replicasをmax_parallel_replicasが 1 の場合に使用した際のアサーションを修正しました。これにより #34525 が修正されます。#34613 (Nikita Mikhaylov) 。- 空の配列の読み取り中にまれに発生する不具合を修正しました。これにより、
Data compressed with different methodserror が発生することがありました。この問題は、配列の大半が空で、かつ 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).
パフォーマンス改善
- すべての基になるテーブルが
PREWHEREをサポートしている場合、Mergeエンジンのテーブルでも条件をPREWHEREに移動できるようにしました (設定optimize_move_to_prewhere) 。 #33300 (Anton Popov). - URL ストレージにおけるグロブの処理をさらに効率化しました。これにより、数百万件の URL を再試行付きで簡単に並列にクエリできるようになりました。 #32866 をクローズしました。 #32907 (Kseniia Sumarokova).
- パーサーでの指数的バックトラッキングを回避しました。これにより #20158 をクローズしました。 #33481 (alexey-milovidov).
untuple関数の不適切な使い方により、クエリ解析の計算量が指数的になっていました (fuzzer により発見) 。これにより #33297 をクローズしました。 #33445 (alexey-milovidov).- 文字列属性を持つ Dictionaries のメモリ使用量を削減しました。 #33466 (Maksim Kita).
reinterpret関数のパフォーマンスをわずかに改善しました。 #32587 (alexey-milovidov).- 重要度の低い変更です。きわめてまれに、すべてのレプリカでパーツが失われた場合、一部のパーツのマージ後に、後続のクエリでパーティションプルーニング時にスキップされるパーティション数が少なくなることがあります。影響はほとんどありません。 #32220 (Azat Khuzhin).
- サイズ計算ロジックを最適化し、
clickhouse-keeperの書き込みパフォーマンスを改善しました。 #32366 (zhanglistar). - 単一パートのPROJECTIONの実体化を最適化しました。これにより #31669 をクローズしました。 #31885 (Amos Bird).
- システムテーブルのクエリパフォーマンスを改善しました。 #33312 (OnePiece).
- ボリューム間で移動可能な MergeTree パーツの選択を最適化しました。 #33225 (OnePiece).
- 連続するキーでの
sparse_hasheddict のパフォーマンスを修正しました (誤ったハッシュ関数が使われていました) 。 #32536 (Azat Khuzhin).
実験的機能
- サンプルキーを使わずに、分散クエリ実行時に分片内の複数のレプリカから並列に読み取れるようになりました。これを有効にするには、
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).
改善
- これで、
1970-01-01 00:00:00より前の時刻を生成する日付時刻変換関数は、オーバーフローする代わりに 0 に丸められるようになりました。#29953 (Amos Bird) 。また、日付切り捨て関数の結果が Unix epoch より前になる場合に、索引解析で発生していたバグも修正されています。 - クライアントで、リソース使用量 (CPU 使用量の合計、RAM 使用量の合計、およびホストごとの RAM 使用量の最大値) を常に表示するようにしました。#33271 (alexey-milovidov).
Bool型のシリアライゼーションとデシリアライゼーションを改善し、値の範囲をチェックするようにしました。#32984 (Kruglov Pavel) 。- 無効な設定を
SETクエリまたは HTTP リクエストのクエリパラメータで指定した場合、エラーメッセージには、その無効な設定文字列に似た候補が含まれます (存在する場合) 。 #32946 (Antonio Andelic). - clickhouse-client と clickhouse-local で、設定名の入力ミスに対するヒントをサポートしました。#32237 を修正しました。#32841 (凌涛).
- materialized viewで仮想カラムを使用できるようになりました。#11210 をクローズしました。#33482 (OnePiece).
- 必要に応じて、clickhouse-keeper で IPv6 を無効化する設定を追加しました。これで #33381 をクローズします。#33450 (Wu Xueyang) 。
system.build_optionsに、現在の git リビジョンに関する情報をさらに追加しました。#33431 (taiyang-li) 。clickhouse-local: メモリ使用量を--max_memory_usage_in_clientオプションで追跡するようにしました。 #33341 (Azat Khuzhin).- 関数
intervalLengthSumで負のインターバルを使用できるようにしました。その長さも加算されます。これにより #33323 をクローズします。#33335 (alexey-milovidov). LineAsStringは出力フォーマットとして使用できます。これにより #30919 が解決されます。#33331 (Sergei Trifonov)。- クラスター構成で、
<secure/>を<secure>1</secure>の代替形式としてサポートしました。#33270 をクローズしました。#33330 (SuperDJY). - Ctrl+C を 2 回押すと、実行中のクエリを待たずに
clickhouse-benchmarkが即座に終了します。これにより #32586 がクローズされます。#33303 (alexey-milovidov) 。 parseDateTimeBestEffort関数で、ミリ秒付きの Unix timestamp をサポート。 #33276 (Ben).Arrow/Parquet/ORCフォーマットの external table からデータを読み取っている間でも、クエリをキャンセルできるようになりました。これまでは、ファイルが大きく、かつ設定 input_format_allow_seeks が false の場合、キャンセルできませんでした。#29678 をクローズしました。#33238 (Kseniia Sumarokova).- table engine が
SETTINGS句をサポートしている場合、設定をキー・バリュー形式または config 経由で渡せるようにしました。MySQL にもこのサポートを追加しました。#33231 (Kseniia Sumarokova). - 必要に応じて、Nullable の主キーを適切に禁止するよう修正しました。これは #32780 に対応するものです。#33218 (Amos Bird).
- まだ何も取得できていない場合に備え、
PostgreSQL接続の再試行を追加しました。#33199 をクローズします。#33209 (Kseniia Sumarokova). - 外部辞書の設定キーを検証するようにしました。 #33095. #33130 (Kseniia Sumarokova).
clickhouse-localでプロファイル情報を送信するようにしました。#33093 をクローズしました。#33097 (Kseniia Sumarokova).- 短絡評価: 関数
throwIfのサポートを追加しました。#32969 をクローズしました。#32973 (Maksim Kita). - (これは非公式ビルドでのみ発生します) 。圧縮された Decimal、String、FixedString、Array カラムへのデータ挿入時に発生するセグメンテーション違反を修正しました。これにより #32939 がクローズされます。#32940 (N. Kolotov) 。
- サブクエリを SQL ユーザー定義関数として指定できるようにしました。例:
CREATE FUNCTION test AS () -> (SELECT 1)。#30755 をクローズしました。#32758 (Maksim Kita) 。 - #28671 に関連して、gRPC の圧縮サポートを改善しました。#32747 (Vitaly Baranov) 。
- サーバーのシャットダウン時またはテーブルのデタッチ時に、WAL が有効になっていない場合は、すべての In-Memory データパーツをフラッシュする。 #32742 (nauta).
- MySQL の接続タイムアウトを制御できるようにしました (従来は Dictionary ソース のみでサポートされていました) 。#16669 を修正しました。従来はデフォルトの connect_timeout がやや短めでしたが、現在は設定可能になりました。#32734 (Kseniia Sumarokova) 。
- ストレージ
MongoDBでauthSourceオプションをサポートしました。#32594 をクローズしました。#32702 (Kseniia Sumarokova). genarateRandomテーブル関数がDate32型に対応しました。#32643 (nauta).- クエリの種類ごとに同時実行クエリを制御するための設定
max_concurrent_select_queriesとmax_concurrent_insert_queriesを追加しました。#3575 をクローズしました。#32609 (SuperDJY) 。 Protobuf形式のデータの読み込み時に、欠落したカラムを含むネスト構造の処理を改善しました。https://github.com/ClickHouse/ClickHouse/pull/31988 のフォローアップです。#32531 (Vitaly Baranov).MongoDBエンジンで空の認証情報を許可しました。#26267 をクローズしました。#32460 (Kseniia Sumarokova).- 例外を引き起こす可能性がある window functions に対する一部の最適化を無効にしました。#31535 をクローズ。#31620 をクローズ。#32453 (Kseniia Sumarokova).
- MongoDB 5.0 に接続できるようになりました。#31483 をクローズ。 #32416 (Kseniia Sumarokova).
DecimalとFloatの比較を有効にしました。#22626 をクローズしました。#31966 (flynn).StorageExecutable、StorageExecutablePool、ExecutableDictionary、ExecutablePoolDictionary、ExecutableUserDefinedFunctionsに、設定command_read_timeoutとcommand_write_timeoutを追加しました。設定command_read_timeoutは、コマンドの stdout からデータを読み取る際のタイムアウトをミリ秒単位で制御します。設定command_write_timeoutは、コマンドの stdin にデータを書き込む際のタイムアウトをミリ秒単位で制御します。ExecutableUserDefinedFunction、ExecutableDictionary、StorageExecutableに、設定command_termination_timeoutを追加しました。ExecutableUserDefinedFunctionに、設定execute_directを追加しました。デフォルト値は true です。ExecutableDictionary、ExecutablePoolDictionaryに、設定execute_directを追加しました。デフォルト値は false です。#30957 (Maksim Kita).- bitmap集約関数は、範囲外の引数に対しても、ラップアラウンドせず正しい結果を返すようになりました。#33127 (DR).
FROM INFILEステートメントを含む不正なクエリで発生していたパースの問題を修正しました。#33521 (Kruglov Pavel) 。pathにグロブが含まれている場合、S3への書き込みを許可しないようにしました。 #33142 (Kruglov Pavel).- 単一クエリを実行するバッチモードでは、
clickhouse-clientで--echoオプションが使用されていませんでした。#32843 (N. Kolotov). - clickhouse-local で
--databaseオプションを使用できるようになりました。#32797 (Kseniia Sumarokova) 。 - SQL の通常関数
fileのあまりにひどかったコードを修正しました。これでシンボリックリンクにも対応しました。 #32640 (alexey-milovidov). - パーツの移動後、
system.parts内のデータパーツのmodification_timeを更新 #32964。 #32965 (save-my-heart). - 潜在的な問題ですが、悪用は不可能です:配列のリサイズ時に整数オーバーフローが発生する可能性があります。#33024 (varadarajkumar) 。
ビルド/テスト/パッケージングの改善
- ClickHouse の AArch64 (ARM) 版向けに、パッケージ、機能テスト、Docker ビルドを追加しました。#32911 (Mikhail f. Shiryaev). #32415
- ClickHouse を musl-libc でビルドできるようにしました。デフォルトでは有効になっていません。#33134 (alexey-milovidov).
- インストールスクリプトが FreeBSD で動作するようにしました。これにより #33384 はクローズされます。#33418 (alexey-milovidov).
- GitHub Actions ワークフロー向けに
actionlintを追加し、act --listでワークフローファイルを検証して、ワークフロー構文が正しいことを確認するようにしました。#33612 (Mikhail f. Shiryaev). - Nullable の主キー機能向けのテストをさらに追加しました。異なる型や MergeTree の kind によるテストに加え、ランダムに生成したデータを使ったテストも追加しました。#33228 (Amos Bird).
- Web ブラウザーで flaky test を可視化するシンプルなツールを追加しました。#33185 (alexey-milovidov).
- shared build に対して hermetic build を有効化しました。主に開発者向けです。#32968 (Amos Bird).
libc++とlibc++abiを最新版に更新しました。#32484 (Raúl Marín).- 外部 .NET クライアント (ClickHouse.Client) 向けのインテグレーションテストを追加しました。#23230 (Oleg V. Kozlyuk).
- git 情報を clickhouse バイナリファイルに埋め込むようにしました。これにより、clickhouse バイナリファイルからソースコードのリビジョンを簡単に取得できます。#33124 (taiyang-li).
- ConfigProcessor から廃止されたコードを削除しました。Yandex 固有のコードはすでに使われていません。このコードには軽微な不具合が 1 つ含まれていました。この不具合は Mallik Hassan により #33032 で報告されました。これにより #33032 はクローズされます。#33026 (alexey-milovidov).
バグ修正 (公式の安定版またはプレ安定版リリースでユーザーに影響する不具合)
- フォーマットのパースに関する複数の修正です。これは、
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型が含まれている場合に、ApacheArrowフォーマットで発生するセグメンテーション違反を修正しました。#33507 をクローズしました。#33529 (Kruglov Pavel). - ビューに対して、クエリ本体の外で指定された
offsetおよびlimit設定が誤って適用されることがありました。修正 #33289 #33518 (hexiaoting). - デフォルトでネストされた
LowCardinalityカラムを持つテーブルへの挿入時に発生する可能性がある例外Block structure mismatchを修正しました。#33028 を修正します。#33504 (Nikolai Kochetov)。 - DDL を使用して作成した場合の
range_hashedの range min 属性および range max 属性の 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).- 空のファイルを読み込む際の
s3table 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).
MySQLengine を使用する 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) 。